summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-13 05:43:39 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-03-13 05:43:39 +0000
commit19ae07d0d443ff8b777f46bcbe97119483356bfd (patch)
treedae169167c23ba7c61814101995de21d6abac2e8
downloadtde-guidance-19ae07d0.tar.gz
tde-guidance-19ae07d0.zip
Added KDE3 version of KDE Guidance utilities
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kde-guidance@1102646 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
-rw-r--r--COPYING280
-rw-r--r--ChangeLog334
-rw-r--r--MANIFEST.in21
-rw-r--r--Makefile.am15
-rw-r--r--README189
-rw-r--r--README.developers48
-rw-r--r--TODO294
-rw-r--r--displayconfig-TODO135
-rw-r--r--displayconfig/40guidance-displayconfig_restore11
-rw-r--r--displayconfig/ScanPCI.py340
-rwxr-xr-xdisplayconfig/displayconfig-hwprobe.py132
-rwxr-xr-xdisplayconfig/displayconfig-restore.py324
-rw-r--r--displayconfig/displayconfig.desktop49
-rwxr-xr-xdisplayconfig/displayconfig.py1756
-rw-r--r--displayconfig/displayconfigabstraction.py3230
-rw-r--r--displayconfig/displayconfighardwaretab.py741
-rw-r--r--displayconfig/displayconfigwidgets.py809
-rw-r--r--displayconfig/driver-options.txt1054
-rw-r--r--displayconfig/energy.py86
-rw-r--r--displayconfig/energystar.pngbin0 -> 24160 bytes
-rw-r--r--displayconfig/execwithcapture.py47
-rw-r--r--displayconfig/extramodes39
-rwxr-xr-xdisplayconfig/infimport.py297
-rw-r--r--displayconfig/ktimerdialog.py155
-rw-r--r--displayconfig/ldetect-lst/Cards+2505
-rw-r--r--displayconfig/ldetect-lst/MonitorsDB5618
-rw-r--r--displayconfig/ldetect-lst/pcitable8017
-rw-r--r--displayconfig/monitor.pngbin0 -> 3601 bytes
-rwxr-xr-xdisplayconfig/servertestdialog.py113
-rw-r--r--displayconfig/vesamodes110
-rw-r--r--displayconfig/videocard.pngbin0 -> 2083 bytes
-rw-r--r--displayconfig/widescreenmodes66
-rw-r--r--displayconfig/xconfig-test.py15
-rwxr-xr-xdisplayconfig/xorgconfig.py903
-rw-r--r--doc/en/index.docbook555
-rw-r--r--grubconfig/grubconfig.desktop49
-rw-r--r--grubconfig/grubconfig.py697
-rw-r--r--kde/displayconfig/pics/16x16/displayconfig.pngbin0 -> 1252 bytes
-rw-r--r--kde/displayconfig/pics/colors.pngbin0 -> 274 bytes
-rw-r--r--kde/displayconfig/pics/display_1280x1024.pngbin0 -> 4690 bytes
-rw-r--r--kde/displayconfig/pics/dualhead/monitor_1.pngbin0 -> 2239 bytes
-rw-r--r--kde/displayconfig/pics/dualhead/monitor_2.pngbin0 -> 3784 bytes
-rw-r--r--kde/displayconfig/pics/energystar.pngbin0 -> 24160 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam14.gifbin0 -> 1878 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam14.pngbin0 -> 489 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam16.gifbin0 -> 1877 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam16.pngbin0 -> 485 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam18.gifbin0 -> 1877 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam18.pngbin0 -> 480 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam20.gifbin0 -> 1877 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam20.pngbin0 -> 487 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam22.gifbin0 -> 1875 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam22.pngbin0 -> 492 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam24.gifbin0 -> 1883 bytes
-rw-r--r--kde/displayconfig/pics/gammapics/MGam24.pngbin0 -> 488 bytes
-rw-r--r--kde/displayconfig/pics/hi32-display.pngbin0 -> 1926 bytes
-rw-r--r--kde/displayconfig/pics/hi32-gfxcard.pngbin0 -> 1618 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/background.pngbin0 -> 3978 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/background_r90.pngbin0 -> 2958 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/background_wide.pngbin0 -> 4222 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/background_wide_r90.pngbin0 -> 3104 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/monitor.pngbin0 -> 7568 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/monitor_r90.pngbin0 -> 7727 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/monitor_wide.pngbin0 -> 8017 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/monitor_wide_r90.pngbin0 -> 7904 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/window_4th.pngbin0 -> 14592 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/window_bottom_left_4th.pngbin0 -> 11400 bytes
-rw-r--r--kde/displayconfig/pics/monitor_resizable/window_bottom_right_4th.pngbin0 -> 1528 bytes
-rw-r--r--kde/mountconfig/pics/16x16/disksfilesystems.pngbin0 -> 914 bytes
-rw-r--r--kde/mountconfig/pics/exec.pngbin0 -> 1021 bytes
-rw-r--r--kde/mountconfig/pics/file.pngbin0 -> 1007 bytes
-rw-r--r--kde/mountconfig/pics/greenled.pngbin0 -> 466 bytes
-rw-r--r--kde/mountconfig/pics/greyled.pngbin0 -> 389 bytes
-rw-r--r--kde/mountconfig/pics/hi16-blockdevice.pngbin0 -> 793 bytes
-rw-r--r--kde/mountconfig/pics/hi16-burner.pngbin0 -> 899 bytes
-rw-r--r--kde/mountconfig/pics/hi16-cdrom.pngbin0 -> 833 bytes
-rw-r--r--kde/mountconfig/pics/hi16-floppy.pngbin0 -> 729 bytes
-rw-r--r--kde/mountconfig/pics/hi16-hdd.pngbin0 -> 724 bytes
-rw-r--r--kde/mountconfig/pics/hi16-lock.pngbin0 -> 749 bytes
-rw-r--r--kde/mountconfig/pics/hi16-memory.pngbin0 -> 674 bytes
-rw-r--r--kde/mountconfig/pics/hi16-network.pngbin0 -> 893 bytes
-rw-r--r--kde/mountconfig/pics/hi16-password.pngbin0 -> 706 bytes
-rw-r--r--kde/mountconfig/pics/hi16-usbpen.pngbin0 -> 860 bytes
-rw-r--r--kde/mountconfig/pics/hi32-samba.pngbin0 -> 2302 bytes
-rw-r--r--kde/mountconfig/pics/important.pngbin0 -> 11391 bytes
-rw-r--r--kde/mountconfig/pics/kcmpartitions.pngbin0 -> 2480 bytes
-rw-r--r--kde/mountconfig/pics/kde1.pngbin0 -> 739 bytes
-rw-r--r--kde/mountconfig/pics/kde2.pngbin0 -> 858 bytes
-rw-r--r--kde/mountconfig/pics/kde3.pngbin0 -> 859 bytes
-rw-r--r--kde/mountconfig/pics/kde4.pngbin0 -> 858 bytes
-rw-r--r--kde/mountconfig/pics/kde5.pngbin0 -> 863 bytes
-rw-r--r--kde/mountconfig/pics/kde6.pngbin0 -> 839 bytes
-rw-r--r--kde/mountconfig/pics/laserwarn.pngbin0 -> 476 bytes
-rw-r--r--kde/mountconfig/pics/tux.pngbin0 -> 686 bytes
-rw-r--r--kde/mountconfig/pics/user.pngbin0 -> 756 bytes
-rw-r--r--kde/powermanager/pics/ac-adapter.pngbin0 -> 563 bytes
-rw-r--r--kde/powermanager/pics/ac-adapter.svg982
-rw-r--r--kde/powermanager/pics/battery-charging-000.pngbin0 -> 829 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-010.pngbin0 -> 858 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-020.pngbin0 -> 840 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-030.pngbin0 -> 840 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-040.pngbin0 -> 834 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-050.pngbin0 -> 835 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-060.pngbin0 -> 830 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-070.pngbin0 -> 854 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-090.pngbin0 -> 866 bytes
-rw-r--r--kde/powermanager/pics/battery-charging-100.pngbin0 -> 848 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-000.pngbin0 -> 342 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-010.pngbin0 -> 392 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-020.pngbin0 -> 393 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-020.svg662
-rw-r--r--kde/powermanager/pics/battery-discharging-030.pngbin0 -> 398 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-040.pngbin0 -> 398 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-050.pngbin0 -> 399 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-060.pngbin0 -> 399 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-070.pngbin0 -> 397 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-090.pngbin0 -> 395 bytes
-rw-r--r--kde/powermanager/pics/battery-discharging-100.pngbin0 -> 374 bytes
-rw-r--r--kde/powermanager/pics/battery_charging_0.svg1350
-rw-r--r--kde/powermanager/pics/battery_charging_1.svg3551
-rw-r--r--kde/powermanager/pics/battery_charging_2.svg2822
-rw-r--r--kde/powermanager/pics/battery_charging_3.svg2093
-rw-r--r--kde/powermanager/pics/battery_charging_4.svg1364
-rw-r--r--kde/powermanager/pics/battery_charging_5.svg2822
-rw-r--r--kde/powermanager/pics/battery_charging_6.svg3551
-rw-r--r--kde/powermanager/pics/battery_charging_7.svg1364
-rw-r--r--kde/powermanager/pics/battery_charging_8.svg2093
-rw-r--r--kde/powermanager/pics/battery_charging_9.svg1358
-rw-r--r--kde/powermanager/pics/battery_discharging_0.svg1941
-rw-r--r--kde/powermanager/pics/battery_discharging_1.svg3343
-rw-r--r--kde/powermanager/pics/battery_discharging_2.svg4713
-rw-r--r--kde/powermanager/pics/battery_discharging_3.svg4713
-rw-r--r--kde/powermanager/pics/battery_discharging_4.svg1964
-rw-r--r--kde/powermanager/pics/battery_discharging_5.svg3334
-rw-r--r--kde/powermanager/pics/battery_discharging_6.svg4704
-rw-r--r--kde/powermanager/pics/battery_discharging_7.svg1964
-rw-r--r--kde/powermanager/pics/battery_discharging_8.svg3334
-rw-r--r--kde/powermanager/pics/battery_discharging_9.svg4703
-rw-r--r--kde/powermanager/pics/processor.pngbin0 -> 908 bytes
-rw-r--r--kde/powermanager/pics/processor.svg272
-rw-r--r--kde/serviceconfig/pics/16x16/daemons.pngbin0 -> 682 bytes
-rw-r--r--kde/serviceconfig/pics/hi32-app-daemons.pngbin0 -> 1609 bytes
-rw-r--r--kde/serviceconfig/pics/laserwarn.pngbin0 -> 476 bytes
-rw-r--r--kde/userconfig/pics/16x16/userconfig.pngbin0 -> 756 bytes
-rw-r--r--kde/userconfig/pics/hi16-encrypted.pngbin0 -> 927 bytes
-rw-r--r--kde/userconfig/pics/hi32-group.pngbin0 -> 2303 bytes
-rw-r--r--kde/userconfig/pics/hi32-identity.pngbin0 -> 3148 bytes
-rw-r--r--kde/userconfig/pics/hi32-password.pngbin0 -> 1801 bytes
-rw-r--r--kde/userconfig/pics/hi32-user.pngbin0 -> 1806 bytes
-rw-r--r--kde/wineconfig/pics/16x16/wineconfig.pngbin0 -> 441 bytes
-rw-r--r--kde/wineconfig/pics/16x16/wineconfig.svg56
-rw-r--r--kde/wineconfig/pics/32-wine.pngbin0 -> 904 bytes
-rw-r--r--kde/wineconfig/pics/48-wine.pngbin0 -> 1192 bytes
-rw-r--r--kde/wineconfig/pics/kdewinewizard.pngbin0 -> 18467 bytes
-rw-r--r--modules/ixf86misc.c516
-rwxr-xr-xmodules/xf86misc.py197
-rwxr-xr-xmountconfig/MicroHAL.py884
-rw-r--r--mountconfig/SMBShareSelectDialog.py573
-rw-r--r--mountconfig/SimpleCommandRunner.py69
-rw-r--r--mountconfig/fuser.py299
-rw-r--r--mountconfig/fuser_ui.ui352
-rw-r--r--mountconfig/mountconfig.desktop51
-rwxr-xr-xmountconfig/mountconfig.py3303
-rw-r--r--mountconfig/sizeview.py504
-rw-r--r--package/mandrake/guidance-kcmdisplayconfig1
-rw-r--r--package/mandrake/guidance-kcmmountconfig1
-rw-r--r--package/mandrake/guidance-kcmserviceconfig1
-rw-r--r--package/mandrake/guidance-kcmuserconfig1
-rw-r--r--package/mandrake/guidance.spec79
-rw-r--r--powermanager/TODO49
-rwxr-xr-xpowermanager/g-p-m-restart6
-rw-r--r--powermanager/gpmhelper.py147
-rw-r--r--powermanager/guidance-power-manager.desktop35
-rwxr-xr-xpowermanager/guidance-power-manager.py1134
-rw-r--r--powermanager/guidance_power_manager_ui.py241
-rw-r--r--powermanager/guidance_power_manager_ui.ui530
-rw-r--r--powermanager/hal-test.py35
-rw-r--r--powermanager/notify.py68
-rw-r--r--powermanager/notify.ui75
-rw-r--r--powermanager/powermanage.py606
-rw-r--r--powermanager/powermanager_ui.ui924
-rw-r--r--powermanager/recompile-ui-files6
-rw-r--r--powermanager/tooltip.py57
-rw-r--r--powermanager/tooltip.ui53
-rw-r--r--review_guidance_malaga.pdfbin0 -> 393561 bytes
-rw-r--r--serviceconfig/serviceconfig.desktop50
-rwxr-xr-xserviceconfig/serviceconfig.py1481
-rw-r--r--setup.cfg2
-rwxr-xr-xsetup.py208
-rw-r--r--uninstall_rude.py5
-rwxr-xr-xuserconfig/unixauthdb.py1154
-rw-r--r--userconfig/userconfig.desktop49
-rwxr-xr-xuserconfig/userconfig.py1753
-rw-r--r--wineconfig/drivedetect.py122
-rwxr-xr-xwineconfig/firstrunwizard.py326
-rw-r--r--wineconfig/kcm_wineconfig.cpp156
-rw-r--r--wineconfig/wineconfig.desktop57
-rwxr-xr-xwineconfig/wineconfig.py3552
-rw-r--r--wineconfig/wineread.py543
-rw-r--r--wineconfig/winewrite.py489
200 files changed, 108831 insertions, 0 deletions
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..c7aea18
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 0000000..76f7ee0
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,334 @@
+- Handle "ain't got no cpufreq" more gracefully (Malone bug # 99198)
+- Fix typo in mountconfig that lead to a crash (Malone bug # 87861)
+- BUG: Fix detection of the nvidia proprietary driver (Malone bug #104860)
+- BUG: Displayconfig and displayconfig-restore.py would crash in combination
+ with later versions Xorg if the xrandr extension was not available.
+ (Malone bug #91545)
+
+* Wednesday 29 March 2007 Simon Edwards <simon@simonzone.com>
+- version 0.8
+- Deal with AttributeError in displayconfigabstraction (Malone bug #94108)
+- Add menu to choose CPU frequency policy manually
+- Handle problems not being able to read the filesystem label gracefully
+- Make displayconfig-restore not crash on incorrect modelines (Malone bug # 76393)
+- Make displayconfig a little smarter when the preferred resolution can't be found
+- Make wineconfig not crash on empty fstab lines
+- Fix the fuser frontend in mountconfig to actually work again.
+- Handle ZeroDivisionError in displayconfig gracefully (Malone bug #77844)
+- Support for LABEL in fstab added to mountconfig, improved support for
+ UUID.
+- Support for changing CPU frequency policy with HAL added to powermanager.
+- Suspend after N minutes idle added to powermanager
+- Added an option to not lock screen on resume (Malone bug # 64650)
+- Handle crash in userconfig due to problems with locale (Malone bug #65739)
+- Support for UUIDs in fstab added to mountconfig.
+- grubconfig added. (Martin Böhm)
+
+* Tuesday 6 March 2007 Simon Edwards <simon@simonzone.com>
+- version 0.7.1
+- BUG: Fixed typo in userconfig.py. (thanks to Rocco Stanzione)
+- BUG: Fix double hibernate call on lid close. (Malone bug #65885)
+- BUG: Change CHARGE_LEVEL_THRESHOLD to 10% (was 50%) to better workaround
+ acpi issue. when remaining_time is not reported correctly. Also use
+ threshold for battery low notification warning. (Malone bug #64752,
+ #67081)
+- BUG: Handle error in locale.getpreferredencoding gracefully. (Malone bug
+ #65739)
+- BUG: DPMS settings had not been saved on Apply, do that.
+- BUG: Fix crash where cpu frequency scaling is not readable.
+- BUG: Fix unicode and localisation handling in targetgamma, do a better job
+ choosing the right resolutions for example for nvidia twinview and other
+ unusual resolutions.
+- BUG: Powermanager, first read config, then adapt the state of the UI from
+ those values.
+- BUG: Don't crash displayconfig-restore when screenwidth and height are
+ bogus, use a sensible value of 96 instead. (Malone bug #77844)
+- BUG: Make displayconfig-restore not crash on unknown modelines.
+- BUG: Make tempfile handling more robust by using Python's tempfile.
+- BUG: Check for None groupids in userconfig.
+- BUG: Clear password edit after exiting the edit dialog in userconfig.
+- BUG: Make AC adapter detection more robust to potential failure of
+ actions. (Malone bug #77091)
+- BUG: permissions on groupfile should've been read, before they can be set.
+- BUG: Check for valid groupid when selecting in userconfig.
+- BUG: gamma settings were not being restored after logging in.
+- BUG: A rounding error was causing problems in displayconfig when filtering
+ resolutions by the selected monitor.
+- BUG: Displayconfig, userconfig and wineconfig didn't handle RTL desktops
+ correctly. (Diego lastrubni)
+- BUG: Displayconfig would sometimes consider some widescreen modes as being
+ standand aspect ratio.
+- BUG: Displayconfig would sometimes fail to set Display virtual size in
+ xorg.conf.
+- BUG: Stopped displayconfig from stacktracing when it encounters a
+ degenerate gfx card + monitor combination that has no valid resolutions.
+
+* Thursday 12 October 2006 Simon Edwards <simon@simonzone.com>
+- version 0.7
+- BUG: Don't bail out of laptop-detect is not there (Malone bug #60309)
+- BUG: mountconfig.py didn't handle USB disks correctly. (KDE bug #132390)
+- BUG: Disable double click opening items in mountconfig if the user is not
+ root.
+- BUG: Don't bail out if the device section is already there (Malone bug #50411)
+- BUG: Don't show new_user in the secondary groups (Malone bug #44203)
+- BUG: userconfig set wrong uid for new users (Malone bug #56275)
+- BUG: serviceconfig.py would sometimes fail on non-English systems.
+ (Malone bug #43313).
+- BUG: userconfig would sometimes fail when writing the shadow password file.
+ (Malone bug #47090)
+- BUG: userconfig would fail if the password warning field in /etc/shadow was
+ empty. (Malone bug #47317)
+- Changed a couple of labels in order to match the new system-settings spec:
+ https://wiki.kubuntu.org/KubuntuSystemSettingsUsability
+- mountconfig now uses CIFS for Windows Shares instead of obsolete smbfs.
+ (Martin Böhm)
+- Displayconfig now hides useless Monitor Orientation and Second Screen group
+ box options which can never be activated without changing hardware or the
+ X driver.
+- Simplified the color and gamma tab in displayconfig.
+- BUG: Better detection for dualhead intel chips in displayconfig.
+- Updated the data files for displayconfig from
+ http://cvs.mandriva.com/cgi-bin/viewvc.cgi/soft/ldetect-lst/trunk/lst/?root=svn
+- wineconfig added for configuring Wine. (Yuriy Kozlov)
+- powermanager applet added for monitoring laptop power levels (Sebastian
+ Kügler)
+
+* Saturday 13 May 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.7
+- Dutch translation added (Rinse de Vries)
+- BUG: Displayconfig would fail if the monitor frequency settings in xorg.conf
+ contained extra spaces. (Malong bug #38692)
+- BUG: Displayconfig would not add the lowest screen resolution available to
+ the modes list in the xorg.conf's Screen section/Display subsection.
+- French translation added from Launchpad Rossetta.
+
+* Friday 28 April 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.6
+- BUG: Serviceconfig didn't correctly remove links in runlevel directories.
+ (Malone bug #39404)
+- BUG: In Serviceconfig, toggling the "Start during boot" checkbox using the
+ context menu would fail. (Malone bug #34252)
+- BUG: displayconfig-restore.py was would fail with "global name 'syslog'
+ undefined". (Malone bug #40683)
+- BUG: Displayconfig had trouble picking a driver gfxcard model entry instead
+ of the detected default (e.g. VESA). (Malone bug #41127)
+- BUG: Displayconfig would fail when writing out a xorg.conf that contained
+ non-ascii characters. (Malone bug #41474)
+- Work around for an annoying bug in PyQt/PyKDE that causes the tools to
+ crash on exit if a dialog window has been used.
+- BUG: The file paths used in displayconfig for checking for the proprietary
+ nvidia driver were wrong or out of date.
+
+* Tuesday 18 April 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.5
+- BUG: services that have not been installed via apt would cause long loops
+ a lot of dpkg queries. Only query dpkg db once.
+- BUG: Serviceconfig's Apply button doesn't work. It should actually be Close
+ (Malone #38582)
+- BUG: Changing an user's password can change another password for a different
+ user (Malone bug #39444)
+- BUG: Displayconfig would fail at startup on systems with an nVidia 7800 GTX.
+ (Malone bug #32915 for Rob Hughes)
+- BUG: Serviceconfig would crash if the windows is closed quickly after
+ serviceconfig appears.
+- BUG: userconfig would fail at startup if an entry in /etc/passwd refered to
+ a group that is not defined in /etc/group. (Malone bug #34311)
+- BUG: Userconifg. Manually typing in or editing the list of secondary groups
+ for a user had no effect. (Malone bug #37212)
+- BUG: Displayconfig fails to detect the presence of the proprietary ATI and
+ nVidia drivers. (The location of some of the driver files had been recently
+ changed).
+- BUG: displayconfig-restore.py would calculated the needed DPI at login using
+ stale screen information which would sometimes result in the wrong DPI.
+- BUG: Numerious small bugs and compatibility problems in mountconfig.
+- BUG: When browsing for a SMB share, mountconfig now correctly catches the
+ authentication information entered by the user into the smaller popup from
+ kio.
+- Displayconfig now assumes that dualhead/clone mode is supported if the
+ laptop-detect script detects a laptop.
+- Displayconfig now uses the clone mode support in the i810 driver.
+- Displayconfig now only offers resolutions that both monitors support when
+ using clone mode.
+- Displayconfig now supports clone mode on any setup that also supports
+ xinerama.
+- BUG: Mountconfig failed to take into account that the order of the
+ user/users, exec/noexc, suid/nosuid etc options in /etc/fstab is significant.
+ (thanks Christoph Wiesen)
+- French translations added to the desktop files. (Anthony Mercatante)
+
+* Sunday 2 April 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.4
+- BUG: All of the tools no longer write out config files under ~/.kde when
+ running as root. This should stop the annoying creation of config files
+ that can't be overwritten by the normal user.
+- Userconfig is now by default not quite as tall. This should help stop
+ it from appearing too big in systemsettings.
+- Displayconfig updated to also recognise late model nVidia chipsets.
+- BUG: Displayconfig didn't support Clone mode for the proprietary nVidia
+ driver.
+- BUG: The tools now correctly specify which translation catalogue to use for
+ translations.
+- The screen images in the dualhead widget make better use of available widget
+ space.
+- Displayconfig: The 40guidance-displayconfig_restore script which is used by
+ the Xsession script during login via KDM/xdm, has now been fixed to not stop
+ the login in case of failure.
+- BUG: Displayconfig was getting confused by unknown graphics cards and
+ crashing. (Malone bug #32915)
+- BUG: Displayconfig still can't handling unicode in xorg.conf. (Malone bug
+ #34437).
+- BUG: Displayconfig is now more forgiving when xorg.conf contains characters
+ that are illegal with respect to the system character encoding. (Malone bug
+ #36590).
+- BUG: Displayconfig would have trouble detecting hardware on the PCI bus on
+ big endian architectures. (raphink)
+- BUG: Displayconfig did not correctly handle situations where the X RandR
+ extension is missing.
+- BUG: Displayconfig would fail when loading some xorg.conf files containing
+ multiple graphics card specifications. (Malone bug #37275, patch applied)
+- BUG: Userconfig didn't respect the entered UID when creating a account.
+ (Malone bug #37722).
+- Displayconfig: Added 1280x960 modes (60 & 75Hz).
+
+* Friday 17 March 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.3
+- BUG: userconfig and unixauthdb didn't respect the ownership of system files
+ when update /etc/passwd and friends. (Malone bug #26175).
+- BUG: userconfig and unixauthdb would fail if /etc/passwd, /etc/groups or
+ /etc/shadow contained blank lines.
+- BUG: displayconfig now does a better job of detecting graphics PCI devices
+ and handling non-detected graphics cards. Instead of crashing, "generic
+ VESA" is used when the type of card can't be found. (Malone bug #32915)
+- The DPI that displayconfig-restore.py uses at login time can now be
+ controlled by adding a line to ~/.kde/share/config/displayconfigrc
+ in the [General] section. Add "dpi=xserver" to use the default DPI
+ from the X server, or "dpi=100" to use 100 DPI for example.
+- BUG: Widescreen modes were missing in displayconfig.
+- Displayconfig: Monitors can now be specified as being standard aspect ratio
+ or widescreen.
+- BUG: Using the xresprobe command in displayconfig would crash some people's
+ machines. The much more safer ddcprobe command is now used.
+ (Malone bug #33943)
+- BUG: A bug is displayconfig stopped monitor model detection. The xresprobe
+ command didn't actually return the eisa ID of the connected monitor.
+ ddcprobe does though (see above).
+- BUG: Displayconfig. Changes to the monitor model or image format are
+ shown immediately on the "Size & Orientation" tab, even if the screen is
+ currently being used.
+- BUG: When userconfig asks about whether the home directory should be created
+ when creating a new account, sometimes the wrong directory name was shown in
+ the dialog.
+- BUG: Powerbook screen mode "1280x854" add to displayconfig. (Malone bug
+ #34383).
+- BUG: Displayconfig would throw an exception if the current display didn't
+ support DPMS. (Malone bug #34316).
+- BUG: Most utilities would fail if they came across UTF-8 or unicode
+ characters. (Malone bug #34194).
+- BUG: Displayconfig wouldn't correctly detect the presence of installed
+ proprietary drivers. (OculusAquilae)
+- BUG: Displayconfig had trouble handling BusID rows in xorg.conf. This would
+ cause the xorg.conf to be incorrectly read. (Tonio)
+- Added some extra methods to ScanPCI.py to aid debugging.
+- BUG: Displayconfig would not save the user's display settings when running
+ in kcontrol or systemsettings. (Malone bug #35257)
+
+* Wednesday 1 March 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.2
+- BUG: Small bug in displayconfig that caused it to bug out around the
+ newCustomMonitor() method.
+- BUG: userconfig had space character just before the she-bang which really
+ caused some trouble the for the shell.
+- BUG: Displayconfig: Selecting the "Plug n Play" monitor directly without
+ clicking on "Detect" meant that only a very small set of resolutions would
+ be written to xorg.conf.
+- BUG: The DPI calculations in displayconfig-restore.py where broken. This
+ resulted in the wrong DPI being used.
+- BUG: Displayconfig: The clone mode option is now correctly disabled for
+ Matrox cards (mga driver).
+- BUG: Displayconfig would bug out if the monitor model in the xorg.conf was
+ anything other than Plug n Play.
+- BUG: Displayconfig would bug out if the DPMS Standby setting was 0 and DPMS
+ enabled.
+- Displayconfig is now shown in kcontrol under settings/hardware instead of
+ settings/system.
+- BUG: Small bug in displayconfig that will causes displayconfig to bug out
+ when trying to detect the monitor and no EDID info is available.
+- BUG: Small cosmetic bug in displayconfig where the some tabs were missing
+ margins when shown in kcontrol/system settings.
+- BUG: displayconfig would bug out when detecting ATI dualhead cards.
+ (pci_device.text was None).
+
+* Monday 20 February 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.1
+- displayconfig-hwprobe.py now saves its scan info in
+ /var/lib/guidance/guidance-gfxhardware-snapshot.
+- "Details..." button added to mountconfig in addition to the context menu for
+ opening the disk info dialog.
+- BUG: serviceconfig: When starting and stopping daemons, the scripts expect a
+ terminal that understands colours. The command runner dialog doesn't, and
+ you end up seeing garbage characters. TERM is now set to vt100 when running
+ commands.
+- BUG: displayconfig: Reset button didn't reset all of the parts/fields in the
+ GUI.
+- Detect dualhead Matrox cards.
+- displayconfig-restore.py now at login time also chooses and sets a 'sane'
+ DPI setting used by applications for fonts. More info is in the
+ displayconfig-restore.py source file.
+- BUG: displayconfig-restore.py wasn't restoring the user's display resolution
+ at login.
+- Plug N Play monitors are handled much better and are automatically probed
+ when neccessary.
+
+* Tuesday 14 February 2006 Simon Edwards <simon@simonzone.com>
+- version 0.6.0
+- Right mousebutton action for most listviews.
+- mountconfig can now handle multi-fs entries.
+- i18n() all over the place.
+- Dualhead support added to displayconfig.
+- displayconfig's hardware database files updated from Mandriva.
+- numerous bug fixes.
+- displayconfig-hwprobe.py add. This is Ubuntu specific right now, but
+ what it does is detect hardware changes at boottime and automatically
+ run "dpkg-reconfigure" to generate a xorg.conf file that will get Xorg
+ running.
+
+* Tuesday 29 November 2005 Simon Edwards <simon@simonzone.com>
+- version 0.5.0
+- displayconfig should now work for single head configurations.
+- displayconfig has a shiney new preview.
+- displayconfig is now usable on low resolution screens.
+- DPMS tab cleaned up in displayconfig.
+- displayconfig's hardware database files updated from Mandriva.
+
+* Monday 12 September 2005 Simon Edwards <simon@simonzone.com>
+- version 0.4.0
+- displayconfig has been massively restructured internally.
+- numerous bug fixes.
+- start of dualhead support in displayconfig.
+- When umount fails in mountconfig the option to killing blocking processes
+ has been added.
+- better Debian support in serviceconfig. It now uses apt and dpkg to get
+ service descriptions.
+- ext3 added to mountconfig. :)
+- userconfig now respects /etc/useradd.conf
+- Now uses PyKDE Extensions for building and installation.
+ http://www.simonzone.com/software/pykdeextensions/
+- DPMS tab added to displayconfig.
+
+* Tuesday 5 April 2005 Simon Edwards <simon@simonzone.com>
+- version 0.3.0
+- Displayconfig working and also feature complete.
+- xf86config C module has been removed and replaced with pure Python.
+- Numerous little bugs fixed in the userconfig, mountconfig and serviceconfig.
+
+* Thursday 9 December 2004 Simon Edwards <simon@simonzone.com>
+- version 0.2.0
+- mountconfig added, beta quality, feature complete.
+- displayconfig added, alpha quality, not feature complete.
+- userconfig, beta quality, feature complete.
+- serviceconfig, beta quality, feature complete.
+
+* Thursday 20 November 2003 Simon Edwards <simon@simonzone.com>
+
+- version 0.1.0
+- Initial release.
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 0000000..b1b40ad
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,21 @@
+recursive-include kde *.png *.svg
+recursive-include doc *.docbook *.png
+graft package
+prune package/.svn
+graft package/mandrake
+graft debian
+prune package/mandrake/.svn
+include README COPYING ChangeLog MANIFEST.in TODO
+global-include *.desktop *.py *.pot *.po *.ui
+global-exclude *~ .svn
+include displayconfig/40guidance-displayconfig_restore
+include displayconfig/vesamodes
+include displayconfig/extramodes
+include displayconfig/widescreenmodes
+include displayconfig/ldetect-lst/Cards+
+include displayconfig/ldetect-lst/MonitorsDB
+include displayconfig/ldetect-lst/pcitable
+exclude displayconfig/test.py
+exclude displayconfig/xconfig-test.py
+exclude displayconfig/popentest.py
+exclude displayconfig/guidance_bug_reporter.py
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..ddb0573
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,15 @@
+messagesold:
+ LIST=`find . -name \*.py`; \
+ if test -n "$$LIST"; then \
+ xgettext -ki18n -LPython $$LIST -o po/guidance.pot; \
+ fi
+
+ sh /usr/lib/kubuntu-desktop-i18n/findfiles LIST
+ perl /usr/lib/kubuntu-desktop-i18n/createdesktop.pl --file-list=LIST --base-dir=. > desktop.guidance.tmp
+ msguniq --to-code=UTF-8 --no-wrap -o desktop.guidance desktop.guidance.tmp 2>/dev/null
+ python /usr/lib/kubuntu-desktop-i18n/msgsplit desktop.guidance
+ mv desktop.guidance po/desktop_guidance.pot
+ rm -f desktop.guidance desktop.guidance.tmp
+
+messages:
+ true
diff --git a/README b/README
new file mode 100644
index 0000000..89ebc0d
--- /dev/null
+++ b/README
@@ -0,0 +1,189 @@
+!!! Warning: Read this through to the end. These tools can be dangerous. !!!
+
+Guidance 0.8.0
+~~~~~~~~~~~~~~
+by Simon Edwards <simon@simonzone.com>, Sebastian Kügler <sebas@vizzzion.org>
+& Yuriy Kozlov <yuriy.kozlov@gmail.com>, Martin Böhm <martin.bohm@kubuntu.org>
+
+
+Introduction
+------------
+Guidance is a collection of system administration tools for Linux/KDE systems
+that is designed to be:
+
+ * Update to date
+ * High quality, designed with user friendliness as high priority. (That is
+ to say that the tools should get the job done quickly, accurately and with
+ as little effort as possible.)
+ * Use KDE and "fit in" with KDE.
+ * Maintainable.
+ * Free Software
+
+
+Warning
+-------
+These tools often require root access and modify important system files in
+order to do their job. There is a very real chance that these tools can
+destroy your computer and your data. Backup your data! Also especially
+backup up /etc/passwd, /etc/shadow and /etc/fstab. If you don't know what
+I'm talking about now then you probably shouldn't try using Guidance yet.
+You should have some idea how to fix
+
+We accept no responsibility in the event that something goes terribly wrong.
+You have been warned.
+
+
+Status
+------
+The tools that make up Guidance are in different stages of development and
+have only been tested on Mandrake.
+
+* userconfig - User & Group configuration. Supports /etc/passwd and
+ /etc/shadow right now.
+
+* serviceconfig - System services configuration utility. Feature complete.
+ Works on Mandrake, Debian, (K)ubuntu Gentoo and maybe Red Hat out of the box.
+
+* mountconfig - Mount point configuration utility. Feature complete and
+ stable.
+
+* displayconfig - Display and graphics card configuration utility. Feature
+ complete but it only tested on Kubuntu right now.
+
+* wineconfig - Wine configuration utility.
+
+* grubconfig - Grub boot loader configuration utility. beta quality now.
+
+
+Requirements
+------------
+* Linux.
+
+* Python. 2.4 recommended. You probably already have Python installed, and if
+ not then it will most definately be available for you distribution of choice.
+
+* PyQt / PyKDE. Version 3.7 or higher. PyQt and PyKDE are distributed with
+ KDE as part of kde-bindings since version 3.3.
+
+ For versions of KDE before 3.3 it is possible to install PyQt/PyKDE
+ directly. The homepage for PyQt and PyKDE is:
+
+ http://www.riverbankcomputing.co.uk/pykde/index.php
+
+ Packages for most popular distributions are available here:
+
+ http://sourceforge.net/project/showfiles.php?group_id=61057
+
+* KDE 3.
+
+* "PyKDE Extensions" is needed for installation. It is available here:
+ http://www.simonzone.com/software/pykdeextensions/
+ This is also a runtime requirement!
+
+* libpythonize. If you don't want the tools to appear on the KDE Control
+ Center of you just don't want to bother with libpythonize, then you can
+ build Guidance with this command:
+
+ python setup.py install build_kcm --no-kcontrol
+
+ libpythonize is only needed for the KDE Control Center.
+
+* You also need to have the development files from your X-server installed,
+ XFree86 or Xorg. Most distributions package these files up in a package
+ called XFree86-devel, or Xorg-devel, or libxorg-X11-devel or some similar.
+
+* Specifically, the following packages are needed on Kubuntu:
+
+ build-essential
+ python-sip4-dev
+ libxxf86vm-dev
+ libxrender-dev
+ libxrandr-dev
+ libpythonize0-dev
+ pyqt-tools
+ libtool
+ kde-devel
+
+
+Installation
+------------
+As root run:
+
+ ./setup.py install
+
+This will test for a working installation of PyQt/PyKDE and automatically
+install the files using the same installation prefix as KDE. You will need
+to have a working Python install before you can even run the setup.py script.
+
+displayconfig-hwprobe installation
+----------------------------------
+displayconfig-hwprobe.py is a small program that should be run at boottime
+before Xorg is started. It scans the PCI bus looking for graphics cards and
+compares the list it finds to the previous time it was run. If the two lists
+of hardware are different then "dpkg-reconfigure xserver-xorg" is automatically
+run in non-interactive mode to generate a new xorg.conf based on the new
+hardware.
+
+The philosophy is that it is better to have a system with a raw but working
+xorg.conf and X server, than to keep the old configuration and a Xorg that
+won't startup. Swapping a graphics card should not "break" the OS.
+
+The setup.py script currently does not install displayconfig-hwprobe.py by
+itself. For now this must be done by the packager. displayconfig-hwprobe.py
+should be put in /etc/init.d and installed to run at boot time with a command
+like this:
+
+ update-rc.d displayconfig-hwprobe.py start 18 3 .
+
+displayconfig-hwprobe.py only supports Kubuntu right now. Perhaps in the
+future displayconfig-hwprobe will be expanded to detect hardware and generate
+an xorg.conf by itself.
+
+More information about displayconfig-hwprobe.py and the files it uses is
+inside displayconfig-hwprobe.py. Currently the hardware data is written to
+/var/lib/guidance/guidance-gfxhardware-snapshot. IMPORTANT: The directory
+/var/lib/guidance/ should be created before using displayconfig-hwprobe.py.
+
+
+Running
+-------
+Installation should add a couple of entries to the KDE Control Center in the
+System section (displayconfig will show up in Peripherals). It is also possible
+to run the commands outside of the KDE Control Center from the shell as root:
+
+ * serviceconfig
+ * userconfig
+ * mountconfig
+ * displayconfig
+ * wineconfig
+ * grubconfig
+
+Reporting Bugs
+--------------
+Bug reports and feedback can be sent to simon@simonzone.com . Do make sure
+that say which version of Guidance you are using and also what Linux
+distribution you are using, and also how you installed SIP, PyQt, PyKDE. Also
+if any error messages are printing to the console, email those too. By
+running these tools from the command line you can often get useful (to me)
+debug information. That kind of information is valuable.
+
+
+Deinstallation
+--------------
+As root run:
+
+ ./setup.py uninstall
+
+
+Thanks go to
+------------
+Jim Bublitz
+David Boddie
+Sebastian Kügler
+Theo Houtman
+Pete Andrews (gamma correction system)
+
+
+--
+Simon Edwards
+<simon@simonzone.com>
diff --git a/README.developers b/README.developers
new file mode 100644
index 0000000..82b98da
--- /dev/null
+++ b/README.developers
@@ -0,0 +1,48 @@
+
+Intro
+~~~~~
+In this file I want to try to explain some practical things about Guidance
+the "project" and some basic (and hopefully not too heavy) policies about how
+things work organisationally.
+
+-- 11 Feb 2007, Simon Edwards <simon@simonzone.com>
+
+
+Developers
+~~~~~~~~~~
+The list of developers as of 11 Feb 2007:
+
+Simon Edwards <simon@simonzone.com>, SVN username: sedwards, IRC: sime (unregistered)
+Sebastian Kügler <sebas@kde.nl>, SVN username: sebas, IRC: sebas
+Yuriy Kozlov <yuriy.kozlov@gmail.com>, SVN username: ykozlov, IRC: yuriy
+Martin Böhm <martin.bohm@kubuntu.org>, SVN username: martinbohm, IRC: ???
+
+"Lure" on #kubuntu-devel will join this list whether he likes it or not if he keeps
+on committing stuff to powermanager. ;-)
+
+
+Subversion
+~~~~~~~~~~
+Main development occurs in KDE's subversion repository in
+/trunk/kdereview/guidance. Branches of the stable releases can be found
+in svn under /kde/branches/guidance/. 0.6 was used in the Kubuntu Dapper, 0.7
+was in Edgy.
+
+
+Python source code
+~~~~~~~~~~~~~~~~~~
+Use 4 spaces for indentation, for the simple reason that it is very common
+and mixing indentation styles is a PITA.
+
+I (Simon) use Qt/KDE style naming conventions for methods. For variable
+names I'm a bit inconsistent but it is usually lower case of lower case
+with underscores. All I ask is that variable names be descriptive and
+understandable.
+
+TIP: When dealing with translated strings, use uncide() and not str(),
+otherwise things will break on translated desktops.
+
+
+Release procedure
+~~~~~~~~~~~~~~~~~
+[TODO: explain how a release tarball is created.]
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..4124684
--- /dev/null
+++ b/TODO
@@ -0,0 +1,294 @@
+TODO
+====
+
+BUG: Mountconfig has no "enable/disable" in the context menu.
+
+BUG: Mountconfig: "enable/disable" can sometime be available for normal users.
+
+BUG: mountconfig: The disk details dialog (sizeview.py) doesn't show *unpartioned* free space.
+
+BUG: Live gamma changes didn't seem to work on one of the S3s.
+
+BUG: mountconfig. Authentication details in the SMSShareSelectDialog are sometimes not
+correctly used when browsing.
+
+
+
+TODO: Some S3 cards need to have the video ram specified, and some later model don't.
+ It would be good if we could tell the difference and only offer the ram pulldown
+ when strictly needed.
+
+
+TODO: Monitor type selection (CRT, lcd etc). needed for clone mode on ATI at least.
+
+TODO: When using the proprietary nVidia driver, choose between the nVidia AGP
+and kernel agpgart based on what is best the of the machine's chipset.
+
+TODO: The proprietary ATI drivers have a 'Option "BusType" "PCI"' thing which may
+of may not need to be set for PCI based ATI cards.
+
+TODO: 3D accel on the 9250 with open source drivers.
+
+
+Future TODO
+===========
+
+setup.py
+~~~~~~~~
+.
+
+userconfig
+~~~~~~~~~~
+.
+
+unixauthdb.py
+~~~~~~~~~~~~~
+* LDAP (post-1.0) in-progress
+* (others?) (post-1.0)
+
+serviceconfig
+~~~~~~~~~~~~~
+* Change os.system() to the calls Simon uses in some cases.
+* Some services are running, but not in /var/run, implement special treatment. :>
+* Remove commented line from /etc/shells in userconfig -> Modify -> Shell.
+
+mountconfig
+~~~~~~~~~~~
+* Add 'proper' GUIs for editing some of the more common FS types.
+ - NFS.
+* AttributeError when mounting Samba volume
+* Handle the 'managed' mount entry options. See http://www.die.net/doc/linux/man/man8/fstab-sync.8.html
+ This is stand on Mandriva 2005.
+* Implement "real" HAL backend.
+
+displayconfig
+~~~~~~~~~~~~~
+* Use HAL for fetching PCI and card info? alongside existing systems (ldetect)?
+
+
+
+Extra?
+~~~~~~
+* Swap/kernel config:
+ http://kerneltrap.org/node/view/3000
+ "To tune, simply echo a value from 0 to 100 onto /proc/sys/vm/swappiness."
+
+* Hardware detection info:
+
+ http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&threadm=lyit5wc14g.fsf%40leia.mandrakesoft.com&rnum=1&prev=/groups%3Fq%3Ddebian%2520ldetect%2520hardware%2520detection%26hl%3Den%26lr%3D%26ie%3DUTF-8%26sa%3DN%26tab%3Dwg
+
+----------------------------------------------------------------------------
+From: Pixel (pixel@mandrakesoft.com)
+Subject: Re: Why so many HW detection packages?
+Newsgroups: linux.debian.devel
+Date: 2002-05-09 17:20:07 PST
+
+On Fre, 26 Apr 2002, Petter Reinholdtsen wrote:
+
+[...]
+
+> The reson is that there are 3 hardware detection system:
+> - Mandrake (libdetect, old)
+
+truly libdetect is old and deprecated
+(harddrake (was lothar) used to use it)
+
+we (mandrake) are now mostly using ldetect & ldetect-lst
+
+AFAIK here are the various free software hardware databases:
+
+--------------------------------------------------------------------------------
+- pci ----------
+
+ - pci.ids (in pciutils)
+ maps vendor+device -> description
+ and vendor+device+subvendor+subdevice -> description
+ also has device classes names
+
+ - modules.pcimap (in kernel /lib/modules/2.4*/)
+ maps vendor+device -> module
+ and vendor+device+subvendor+subdevice -> module
+
+ - XFree's xf86PciInfo.h (in XFree's source: xc/programs/Xserver/hw/xfree86/common/xf86PciInfo.h)
+ maps vendor+device -> description
+
+ - RedHat's pcitable (in hwdata)
+ maps vendor+device -> module+description
+ and a few vendor+device+subvendor+subdevice -> module+description
+ when needed
+ module can also be "Card:xxxx" for XFree (using Cards, see below)
+
+ - Mandrake's pcitable (in ldetect-lst)
+ same format as RedHat's (except for a few syntactical changes since mandrake kept old RedHat's format)
+ module can also be
+ "Card:xxxx" for XFree (using Cards+, see below)
+ "Server:xxxx" for XFree3
+ "ISDN:xxxx" for hisax special parameters
+ "Bad:xxxx" for warning about unhandled devices (mainly winmodems)
+
+ - Mandrake old detect's pci.lst (in detect-lst)
+ maps vendor+device -> class+module+description
+
+ - Progeny's pci.lst (in discover-data)
+ same format as detect
+ maps vendor+device -> class+module+description
+ module can also be
+ "Server:XFree86(module)" for XFree4
+ "Server:XF86_xxx" for XFree3
+
+some comments:
+
+ - the "class" in pci.lst is not useful when "module" is given since
+ from the module name, one can have the "class"
+
+ - the subvendor+subdevice distinction is sometimes useful
+ (not very often though)
+
+ - hopefully one day modules.pcimap will be the reference :)
+ (except for XFree of course)
+
+tools using those databases:
+
+ - kudzu and anaconda are using pcitable from hwdata
+
+ - library ldetect accesses pcitable from ldetect-lst,
+ this library is used by DrakX and drakxtools.
+ Mandrake's patched kudzu uses pcitable from ldetect-lst
+
+ - discover uses pci.ids from discover-data
+
+ - i don't know if tools are using modules.pcimap
+
+- XFree --------------------
+
+ - XFree comes with Cards
+
+ - Redhat has its own version (in hwdata)
+
+ - Mandrake has its own version Cards+ & CardsNames (in ldetect-lst)
+ (mainly a merge of XF3 Cards and XF4 Cards)
+
+ - discover doesn't need it since it's precising the server name
+ (XF3) or the module name (XF4) (?)
+ this is usually enough (except if you want to propose the choice,
+ but who wants XF3 nowadays :)
+
+
+- usb --------------------
+
+ - usbutils's usb.ids
+ maps vendor+device -> description
+ also has device classes names and some more stuff
+
+ - modules.usbmap (in kernel /lib/modules/2.4*/)
+ maps vendor+device -> module (?)
+
+ - Mandrake's usbtable (in ldetect-lst)
+ maps vendor+device -> module+description
+ module can also be
+ "Mouse:xxxx" for mouse configuration (fed to mousedrake)
+ "Tablet:wacom" for wacom tablet configuration
+ "Flag:xxxx" for DrakX package choosing
+ "Floppy:normal"
+
+ - Progeny's usb.lst (in discover-data)
+ maps vendor+device -> class+module+description
+ (but current's version only have module=unknown, so what's it
+ for, why not usb.ids?)
+
+
+tools using those databases:
+
+ - library ldetect accesses usbtable from ldetect-lst
+ this library is used by DrakX and drakxtools
+
+ - i don't know if tools are using modules.usbmap
+
+- scanner --------------------
+
+ - ScannerDB (in ldetect-lst)
+ maps name -> driver+kind(usb,scsi,serial,parallel)+options+various
+ (i don't know much about it, i don't know if yves made it from
+ scratch or what. ask yduret@mandrakesoft.com for more)
+
+- isdn --------------------
+
+ - isdn.db (in ldetect-lst)
+ list of internet providers by country
+ -> phone number + domainname + dns1 (ip) + dns2
+
+- old or small databases ----------
+
+ - isa.lst (detect), isatable (ldetect-lst), modules.isapnpmap (kernel)
+ - pcmcia.lst (detect, discover-data), pcmciatable (ldetect-lst)
+ - modules.parportmap (kernel but empty?)
+ - modules.ieee1394map (kernel but empty?)
+
+--------------------------------------------------------------------------------
+
+There may be some errors, or some missing stuff, please correct me!
+
+I've written a tool to keep in sync with as many databases as
+possible. see merge2pcitable.pl in
+http://www.mandrakelinux.com/cgi-bin/cvsweb.cgi/soft/ldetect-lst/convert/
+
+Maybe some common mailing list could be set up to deal with this?
+
+*but* note that the database is quite kernel dependent.
+- our pcitable doesn't handle this nicely
+- redhat has "upgradelist" in hwdata to partly handle this
+- i know we handle some pbs via /lib/modutils/macros with things like
+"if `kernelversion` = 2.4", debian seems to have it in
+/etc/modutils/arch
+
+
+Once again, hopefully one day modules.pcimap and modules.usbmap will
+be the reference! :)
+
+
+
+[...]
+
+> Mandrake switched from libdetect to kudzu, afaik
+> (latest mandrake (8.2) version is using kudzu for HW detection).
+
+well, mandrake has many tools doing more or less the same thing (and
+alas, not exactly always the same thing): DrakX (during install),
+drakxtools (when called, after install), kudzu (at boot, usually
+calling a drakxtools)
+
+----------------------------------------------------------------------------
+
+
+List of hardware probing tools to use for displayconfig:
+--------------------------------------------------------
+
+
+[1] xvinfo - Print out X-Video extension adaptor information
+
+ xvinfo prints out the capabilities of any video adaptors
+ associated with the display
+ that are accesible through the X-Video extension.
+
+[2] xresprobe - Prints out resolutions, frequency and displaytype.
+ Doesn't work in all cases. Works via ddc, I guess.
+
+[3] ddcprobe - Uses VESA BIOS Extension
+ Detects VGA + OEM, modes (only set up modes?), vid mem (kudzu)
+
+[3] read-edid
+ get-edid|parse-edid prints out a "good-looking" Monitor Section for
+ xorg.conf, not reliable (failed on notebook)
+
+[4] ddcxinfo - prints out modelines, hsync and vsync (kudzu)
+
+[5] svgamodes - prints out supported video modes (kudzu)
+
+
+
+
+--
+Pixel
+programming languages addict http://merd.net/pixel/language-study/
+
+----------------------------------------------------------------------------
diff --git a/displayconfig-TODO b/displayconfig-TODO
new file mode 100644
index 0000000..926f7d9
--- /dev/null
+++ b/displayconfig-TODO
@@ -0,0 +1,135 @@
+* How many cards do we have? autodetection?
+* Is our card a dualhead card?
+* How many monitors are connected?
+
+* difference between one and two card is different device sections
+* twinview has one device, one screen, one serverlayout
+* xinerama has two devices, two screens, two monitors
+
+twinview <> xinerama:
+ all sections double
+
+one or two cards:
+ different device sections
+
+one or two monitors
+ ?? one or two cards
+ ?? twinview or xinerama (driver? different resolutions?)
+
+
+class XSetup(Object):
+ Screens[] getScreens()
+ bool maySetDualhead()
+ getUseDualhead()
+ setUseDualhead(bool)
+ (xoff,yoff) getDualheadPosition() # offset from screen 1 top left corner.
+ setDualheadOrientation(xoff,yoff)
+
+ bool is3DAccelerated()
+
+ GFXCard[] getGFXCards()
+
+
+class Screen(Object):
+ maySetResolution()
+ Resolution[] getAvailableResolutions()
+ getResolution()
+ setResolution(Resolution)
+
+ maySetRefresh()
+ int getRefreshRate()
+ setRefreshRate(int)
+
+ maySetRotation()
+ getRotation()
+ getAvailableRotations()
+ setRotation()
+
+ bool isAvailableMirrorHorizontal()
+ getMirrorHorizontal()
+ setMirrorHorizontal()
+ bool isAvailableMirrorVertical()
+ getMirrorVertical()
+ setMirrorVertical()
+
+class Resolution(Object):
+ int getWidth()
+ int getHeight()
+ int[] getRefreshRates():
+
+
+
+* What is the current setup? (Xinerama? Singlehead? Twinview?)
+
+- Warning: Xinerama vs. DRI
+ * "unlinking" the sliders will yield a warning "Using different
+ resolutions on the screens will disable 3D hardware acceleration on
+ the second head", which is a Xinerama deficiency).
+
+ Note: Probably only Ati and nvidia do support mergedFB properly, other
+ drivers might lose xinerama features like placement and maximize
+
+- Drag and drop widget
+ * The fun part: implementing a Drag and Drop widget where the (resizing)
+ screens can be dragged into their respective relative position,
+ "snapping" in the more obvious ones, i.e. plain "left of" and "right
+ of", "above" and "under" (without offset).
+
+
+- displayconfig.MonitorPreview:
+ Singleheadpreview: Monitor keeps size
+ DualheadPreview: like now, monitor resizes to show relative screen size
+
+Displayconfig; Notes abstractielaag
+-------------------------------------
+* een XSetup heeft N gfxcards.
+* een GfxCard heeft N Monitors
+* XSetup is een container voor alle objecten uit de abstractielaag.
+* XSetup.addMonitor(monitor,gfxcard) waarbij gfxcard al in XSetup zit en een
+ referentie naar de kaart vormt waarop monitor is aangesloten.
+* Een Adaptor heeft een 1:1 relatie met een monitor, en is 'onderdeel' van
+ een "Screen" (in de zin van Screen section uit xorg.conf)
+* Controls zoals resize en de rotatie / mirroring widgets manipuleren een
+ Adaptor, die intern de Screen manipuleert
+* Singlehead resolutie verandert via xrandr en slaat settings op via
+ displayconfig-restore.py
+* Dualhead resolutie aanpassen pakt intern een passende metamode (bij twinview)
+ en checkt of alle zinvolle metamodes beschikbaar zijn, anders wordt de user
+ gewaarschuwd dat dit eerst moet gebeuren.
+* Adaptor in dualhead / twinview modus worden dus naar een screen vertaald
+ metamodes heeft.
+* Screen moet dan nog support voor metamodes krijgen.
+
+
+
+displayconfig:
+===============
+* Current resolution doesn't get recognized if current != highest resolution
+* new tab display powermanagement, just like the existing tab, we need to be
+ able to at least replace existing functionality
+
+
+New Widgets:
+-------------
+* DualheadPreview
+* RadioButtons instead of dropdown for Positioning
+
+* Detect if we're already running on dualhead, (en|dis)able widgets accordingly
+* Nvidia MergedFB
+ - Make preview of dualhead more clear (only xinerama or also mergedFB?)
+ - Generate list of Metamodes from resolutions available
+ - write dualhead settings to xorg.conf
+* Compare dualhead with different drivers WRT xorg.conf
+ - generic Xinerama (Matrox, others?)
+ - dualhead for fglrx, SiS ...
+ - MergedFB as special case for nvidia (sis?)
+* Preview should be rotatable (and|or) resizable (and|or) DualHeadpreview?
+* Add missing elements to DualHeadTab
+ - [ ] Use MergedFB (binds two resolution sliders)
+ - label with warning "You can only use DRI on one head with different resolutions blahblah"
+FIXME: enabling Dualhead should:
+ - Update resolutions with "metamodes"
+ - disable Rotation/mirroring stuff
+ - Add ServerLayout to xorg.conf
+ - Add second Screen to xorg.conf
+ - Alternatively (if both resolutions are the same enable MergedFB
diff --git a/displayconfig/40guidance-displayconfig_restore b/displayconfig/40guidance-displayconfig_restore
new file mode 100644
index 0000000..27f35a1
--- /dev/null
+++ b/displayconfig/40guidance-displayconfig_restore
@@ -0,0 +1,11 @@
+# Set the X server resolution to that selected by the user.
+#
+# This needs to be done before windows managers or X clients start,
+# otherwise the DPI and fonts sizes get all screwed up.
+#
+# http://www.simonzone.com/software/guidance
+#
+# This file is sourced by Xsession(5), not executed.
+# The "|| true" is to ensure that the Xsession script does not terminate
+# and stop the login if something fails in the Python program.
+/opt/kde3/bin/displayconfig-restore || true
diff --git a/displayconfig/ScanPCI.py b/displayconfig/ScanPCI.py
new file mode 100644
index 0000000..ec63b55
--- /dev/null
+++ b/displayconfig/ScanPCI.py
@@ -0,0 +1,340 @@
+###########################################################################
+# ScanPCI.py - #
+# ------------------------------ #
+# copyright : (C) 2005 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+"""Provides information about the devices attached to the PCI bus.
+"""
+import struct
+import csv
+import os.path
+import sys
+
+###########################################################################
+class PCIDevice(object):
+ def __init__(self,line=None):
+ self.vendor = None # PCI vendor id
+ self.device = None
+
+ self.subvendor = None # 0xffff if not probe_type'd or no subid
+ self.subdevice = None # 0xffff if not probe_type'd or no subid
+ self.pci_class = None # 'None' if not probe_type'd
+
+ self.pci_bus = None # pci bus id 8 bits wide
+ self.pci_device = None # pci device id 5 bits wide
+ self.pci_function = None# pci function id 3 bits wide
+
+ self.module = None
+ self.text = None
+ self.already_found = False
+
+ if line is not None:
+ self.loadFromString(line)
+
+ def isGfxCard(self):
+ if self.module is not None and \
+ (self.module.startswith("Card:") or self.module.startswith("Server:XFree86(")):
+ return True
+
+ return (self.pci_class & PCIBus.PCI_BASE_CLASS_MASK)==PCIBus.PCI_BASE_CLASS_DISPLAY
+
+ def getModule(self):
+ if self.module is not None:
+ if self.module.startswith("Server:XFree86("):
+ return self.module[15:-1]
+ elif self.module.startswith("Card:"):
+ return self.module[5:]
+ return self.module
+
+ def isModuleXorgDriver(self):
+ return self.module is not None and \
+ (self.module.startswith("Server:XFree86(") or self.module.startswith("Card:"))
+
+ def __str__(self):
+ s = "PCI:%i:%i:%i, " % (self.pci_bus,self.pci_device,self.pci_function)
+ s += "Vendor:%x, Device:%x," % (self.vendor,self.device)
+ if self.subvendor is not None:
+ s += " Subvendor:%x," % self.subvendor
+ if self.subdevice is not None:
+ s += " Subdevice:%x," % self.subdevice
+ if self.pci_class is not None:
+ s += " Class:%x," % self.pci_class
+ if self.module is not None:
+ s += " Module:%s," % self.module
+ if self.text is not None:
+ s += " Text:%s" % self.text
+ return s
+
+ def loadFromString(self,line):
+ parts = line.split(",")
+ for i in range(len(parts)):
+ bit = parts[i].strip()
+ if bit.startswith("PCI:"):
+ pci_code = bit[4:].split(":")
+ self.pci_bus = int(pci_code[0])
+ self.pci_device = int(pci_code[1])
+ self.pci_function = int(pci_code[2])
+ elif bit.startswith("Vendor:"):
+ self.vendor = int(bit[7:],16)
+ elif bit.startswith("Device:"):
+ self.device = int(bit[7:],16)
+ elif bit.startswith("Subvendor:"):
+ self.subvendor = int(bit[10:],16)
+ elif bit.startswith("Subdevice:"):
+ self.subdevice = int(bit[10:],16)
+ elif bit.startswith("Class:"):
+ self.pci_class = int(bit[6:],16)
+ elif bit.startswith("Module:"):
+ self.module = bit[7:]
+ elif bit.startswith("Text:"):
+ self.text = " ".join(parts[i:]).strip()[5:]
+ break
+
+############################################################################
+class PCIBus(object):
+ PCI_CLASS_SERIAL_USB = 0x0c03
+ PCI_CLASS_SERIAL_FIREWIRE = 0x0c00
+ PCI_BASE_CLASS_MASK = 0xff00
+ PCI_BASE_CLASS_DISPLAY = 0x0300
+
+ def __init__(self, data_file_dir="."):
+ self.devices = []
+ self.data_file_dir = data_file_dir
+
+ def detect(self,device_data="/proc/bus/pci/devices"):
+ # Shamelessly translated from ldetect's pci.c.
+ fhandle = open(device_data)
+ for line in fhandle.readlines():
+ #print "L:",line
+ entry = PCIDevice()
+ self.devices.append(entry)
+ parts = line.split()
+
+ devbusfn = int(parts[0],16)
+ idbits = int(parts[1],16)
+ entry.vendor = idbits >> 16
+ entry.device = idbits & 0xffff
+ entry.pci_bus = devbusfn >> 8
+ entry.pci_device = (devbusfn & 0xff) >> 3
+ entry.pci_function = (devbusfn & 0xff) & 0x07
+
+ try:
+ infohandle = open("/proc/bus/pci/%02x/%02x.%d" % (
+ entry.pci_bus, entry.pci_device, entry.pci_function),"r")
+ # these files are 256 bytes but we only need first 48 bytes
+ buf = infohandle.read(48)
+ (class_prog, entry.pci_class, entry.subvendor, entry.subdevice) = \
+ struct.unpack("<xxxxxxxxxBHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxHH",buf)
+ #print "STRUCT: ",struct.unpack("@xxxxxxxxxBHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxHH",buf)
+ if (entry.subvendor==0 and entry.subdevice==0) or \
+ (entry.subvendor==entry.vendor and entry.subdevice==entry.device):
+ entry.subvendor = 0xffff
+ entry.subdevice = 0xffff
+ if entry.pci_class == PCIBus.PCI_CLASS_SERIAL_USB:
+ # taken from kudzu's pci.c
+ if class_prog == 0:
+ entry.module = "usb-uhci"
+ elif class_prog == 0x10:
+ entry.module = "usb-ohci"
+ elif class_prog == 0x20:
+ entry.module = "ehci-hcd"
+ if entry.pci_class == PCIBus.PCI_CLASS_SERIAL_FIREWIRE:
+ # taken from kudzu's pci.c
+ if class_prog == 0x10:
+ entry.module = "ohci1394"
+ infohandle.close()
+ except IOError:
+ pass
+ fhandle.close()
+
+ #if False or os.path.exists("/usr/share/ldetect-lst/pcitable"):
+ #self._resolveDevicesWithLdetect()
+ #else:
+ self._resolveDevicesWithHwdata()
+ #self._resolveDevicesWithDiscover()
+
+ def _resolveDevicesWithLdetect(self):
+ # Scan the PCI database.
+ #fhandle = open(os.path.join(self.data_file_dir,"pcitable"),"r")
+ fhandle = open(os.path.join("/opt/kde3/share/apps/guidance/","pcitable"),"r")
+
+ # This class is just for skipping comment lines in the database file.
+ # This whole class is just an iterator wrapper that we put around our file iterator.
+ class commentskipperiterator(object):
+ def __init__(self,fhandle):
+ self.fhandle = iter(fhandle)
+ def __iter__(self):
+ return self
+ def next(self):
+ line = self.fhandle.next()
+ while line[0]=="#":
+ line = self.fhandle.next()
+ return line
+
+ unknowndevices = self.devices[:]
+
+ # Process each row of the DB.
+ for row in csv.reader(commentskipperiterator(fhandle),delimiter='\t'):
+ if len(row)==4:
+ (vendor,device,module,text) = row
+ elif len(row)==6:
+ (vendor, device, subvendor, subdevice, module, text) = row
+ subvendor = int(subvendor[2:],16)
+ subdevice = int(subdevice[2:],16)
+ else:
+ continue
+ vendor = int(vendor[2:],16) # parse hex numbers of the form 0x1abc
+ device = int(device[2:],16)
+
+ i = 0
+ while i<len(unknowndevices):
+ pcidevice = unknowndevices[i]
+ if pcidevice.vendor==vendor and pcidevice.device==device \
+ and (len(row)==4 \
+ or (pcidevice.subvendor==subvendor and pcidevice.subdevice==subdevice)):
+ if module!="unknown":
+ pcidevice.module = module
+ pcidevice.text = text
+ if len(row)==6: # Close match, also matched on subdevice/subvendor ids.
+ del unknowndevices[i]
+ else:
+ i += 1
+ else:
+ i += 1
+
+ fhandle.close()
+
+ def _resolveDevicesWithDiscover(self):
+
+ unknown_devices = self.devices[:]
+ self._resolveDevicesWithDiscoverFile("/usr/share/discover/pci-26.lst",unknown_devices)
+ self._resolveDevicesWithDiscoverFile("/usr/share/discover/pci.lst",unknown_devices)
+
+ def _resolveDevicesWithDiscoverFile(self,filename,unknown_devices):
+ # Scan the PCI database.
+ fhandle = open(filename,"r")
+
+ # Process each row of the DB.
+ for line in fhandle:
+ row = line.replace("\t"," ").split(" ")
+ if len(row) >= 1 and row[0] != '':
+ # Skip manufacturer info lines.
+ continue
+
+ vendor = int(row[1][:4],16)
+ device = int(row[1][4:],16)
+ module = row[3]
+ text = ' '.join(row[4:]).strip()
+
+ i = 0
+ while i<len(unknown_devices):
+ pcidevice = unknown_devices[i]
+ if pcidevice.vendor==vendor and pcidevice.device==device:
+ pcidevice.module = module
+ pcidevice.text = text
+ del unknown_devices[i]
+ else:
+ i += 1
+
+ fhandle.close()
+
+ def _resolveDevicesWithHwdata(self):
+ # Scan the PCI database.
+ fhandle = open("/usr/share/hwdata/pci.ids","r")
+
+ # This class is just for skipping comment lines in the database file.
+ # This whole class is just an iterator wrapper that we put around our file iterator.
+ class commentskipperiterator(object):
+ def __init__(self,fhandle):
+ self.fhandle = iter(fhandle)
+ def __iter__(self):
+ return self
+ def next(self):
+ line = self.fhandle.next()
+ while line[0]=="#":
+ line = self.fhandle.next()
+ return line
+
+ unknowndevices = self.devices[:]
+
+ # Process each row of the DB.
+ for row in fhandle:
+ stripped_row = row.strip()
+
+ if stripped_row=='' or stripped_row[0]=='#':
+ continue # Comment or blank line, skip it.
+
+ if stripped_row[0]=='C':
+ # Reached the device class data, stop.
+ break
+
+ if row[0]!='\t':
+ # Vendor line
+ vendor_parts = stripped_row.split(' ')
+ vendor = int(vendor_parts[0],16)
+ continue
+
+ if row[1]!='\t':
+ # Device line
+ device_parts = stripped_row.split(' ')
+ device = int(device_parts[0],16)
+ subvendor = None
+ subdevice = None
+ else:
+ # Subvendor line
+ subvendor_parts = stripped_row.split(' ')
+ subvendor = int(subvendor_parts[0],16)
+ subdevice = int(subvendor_parts[1],16)
+
+ i = 0
+ while i<len(unknowndevices):
+ pcidevice = unknowndevices[i]
+ if pcidevice.vendor==vendor and pcidevice.device==device \
+ and (subvendor is None \
+ or (pcidevice.subvendor==subvendor and pcidevice.subdevice==subdevice)):
+ #pcidevice.module = module
+ if subvendor is None:
+ pcidevice.text = ' '.join(vendor_parts[1:]) + '|' + ' '.join(device_parts[1:]).strip()
+ i += 1
+ else:
+ pcidevice.text = ' '.join(vendor_parts[1:]) + '|' + ' '.join(device_parts[1:]+subvendor_parts[2:]).strip()
+ del unknowndevices[i] # Perfect match, finished with this device.
+ else:
+ i += 1
+
+ fhandle.close()
+
+ def __str__(self):
+ return "\n".join([str(x) for x in self.devices])
+
+ def loadFromFile(self,filename):
+ fhandle = open(filename,'r')
+ for line in fhandle.readlines():
+ if line.strip()!="":
+ entry = PCIDevice(line=line)
+ self.devices.append(entry)
+ fhandle.close()
+
+############################################################################
+def main():
+ bus = PCIBus("ldetect-lst/")
+ if len(sys.argv)>1:
+ if sys.argv[1]=="--help" or sys.argv[1]=="-h":
+ print "Usage:\n ScanPCI.py <pci device file name>"
+ sys.exit(0)
+ bus.detect(sys.argv[1])
+ else:
+ bus.detect()
+ print bus
+
+if __name__=='__main__':
+ main()
diff --git a/displayconfig/displayconfig-hwprobe.py b/displayconfig/displayconfig-hwprobe.py
new file mode 100755
index 0000000..7ba5c69
--- /dev/null
+++ b/displayconfig/displayconfig-hwprobe.py
@@ -0,0 +1,132 @@
+#!/usr/bin/python
+###########################################################################
+# displayconfig-hwprobe.py - description #
+# ------------------------------ #
+# begin : Sun Jan 22 2006 #
+# copyright : (C) 2006 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+# This program should be run during boot time. It quickly examines the
+# graphics cards (read: PCI devices) in the computer and compares they to
+# the list in the file $hardware_info_filename. If the two lists differ
+# then the Debian package manager is automatically called to regenerate
+# /etc/X11/xorg.conf. This hopefully should mean that people can swap gfx
+# cards in and out and always have a system that will run Xorg. (even
+# though the config will be most likely be suboptimal. Suboptimal is better
+# than no X server).
+
+import ScanPCI
+import os
+import syslog
+import select
+
+hardware_info_filename = "/var/lib/guidance/guidance-gfxhardware-snapshot"
+data_file_dir = "/usr/share/apps/guidance/"
+
+def main():
+ # Scan the PCI bus.
+ pci_bus = ScanPCI.PCIBus(data_file_dir)
+ pci_bus.detect()
+
+ # Stuff our device info in to a string.
+ hardware_config = ""
+ for pci_device in pci_bus.devices:
+ if pci_device.isGfxCard():
+ hardware_config += "PCI:%i:%i:%i Vendor:%x Device:%x Subvendor:%x Subdevice:%x\n" % \
+ (pci_device.pci_bus, pci_device.pci_device, pci_device.pci_function,
+ pci_device.vendor, pci_device.device,
+ pci_device.subvendor, pci_device.subdevice)
+
+ # Read in the old gfx hardware info in.
+ previous_hardware = None
+ try:
+ fhandle = open(hardware_info_filename)
+ previous_hardware = fhandle.read()
+ fhandle.close()
+ except IOError:
+ previous_hardware = None
+
+ if previous_hardware is not None and previous_hardware!=hardware_config:
+ # Run dpkg and configure the new hardware.
+ syslog.syslog(syslog.LOG_INFO, "Graphics card hardware has changed. Reconfiguring xorg.conf using 'dpkg-reconfigure xserver-xorg'.")
+ cmd = ['dpkg-reconfigure','xserver-xorg']
+ environ = os.environ.copy()
+ environ['DEBIAN_FRONTEND'] = 'noninteractive'
+ #os.spawnvpe(os.P_WAIT, 'dpkg-reconfigure', cmd, environ)
+ result = ExecWithCapture('/usr/sbin/dpkg-reconfigure', cmd, 0, '/', 0,1, -1, environ)
+ for line in result.split('\n'):
+ syslog.syslog(syslog.LOG_INFO,"dpkg-reconfigure:"+line)
+
+ # [21:18] <Riddell> you are brave indeed
+ # [21:21] <Sime> I figured some kind of non-interactive "dpkg-reconfigure xorg" might be enough.
+ # [21:22] <Riddell> yep
+
+ if previous_hardware is None or previous_hardware!=hardware_config:
+ syslog.syslog(syslog.LOG_INFO, "Writing graphics card hardware list to "+hardware_info_filename)
+ # Write out the gfx hardware info
+ tmp_filename = hardware_info_filename + ".tmp"
+ fhandle = open(tmp_filename,'w')
+ fhandle.write(hardware_config)
+ fhandle.close()
+ os.rename(tmp_filename, hardware_info_filename)
+
+
+############################################################################
+def ExecWithCapture(command, argv, searchPath = 0, root = '/', stdin = 0,
+ catchfd = 1, closefd = -1, environ = None):
+
+ if not os.access(root + command, os.X_OK) and not searchPath:
+ raise RuntimeError, command + " can not be run"
+
+ (read, write) = os.pipe()
+ childpid = os.fork()
+ if (not childpid):
+ if (root and root != '/'): os.chroot(root)
+ os.dup2(write, catchfd)
+ os.close(write)
+ os.close(read)
+
+ if closefd != -1:
+ os.close(closefd)
+ if stdin:
+ os.dup2(stdin, 0)
+ os.close(stdin)
+
+ # Replace the environment
+ if environ is not None:
+ os.environ.clear()
+ os.environ.update(environ)
+
+ if searchPath:
+ os.execvp(command, argv)
+ else:
+ os.execv(command, argv)
+ sys.exit(1)
+ os.close(write)
+
+ rc = ""
+ s = "1"
+ while s:
+ select.select([read], [], [])
+ s = os.read(read, 1000)
+ rc = rc + s
+
+ os.close(read)
+
+ try:
+ os.waitpid(childpid, 0)
+ except OSError, (errno, msg):
+ print __name__, "waitpid:", msg
+
+ return rc
+
+main()
diff --git a/displayconfig/displayconfig-restore.py b/displayconfig/displayconfig-restore.py
new file mode 100755
index 0000000..8c44a48
--- /dev/null
+++ b/displayconfig/displayconfig-restore.py
@@ -0,0 +1,324 @@
+#!/usr/bin/python
+###########################################################################
+# displayconfig-restore.py - description #
+# ------------------------------ #
+# begin : Wed Dec 15 2004 #
+# copyright : (C) 2004-2006 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+import os
+import os.path
+import subprocess
+import ixf86misc
+import xf86misc
+
+from execwithcapture import *
+
+############################################################################
+def FindXorgConfig(self):
+ # Lookup location of X configfile
+ for line in ExecWithCapture("xset", ["xset","q"],True).split('\n'):
+ if line.strip().startswith("Config file"):
+ return line.split(":")[1].strip()
+ # Sometimes, xset doesn't know about the configfile location, hence ...
+ if os.path.isfile("/etc/X11/xorg.conf"):
+ return "/etc/X11/xorg.conf"
+ return None
+
+############################################################################
+# FixXorgDPI
+# ==========
+# The idea here is to ensure that applications use a sensible DPI setting
+# for fonts. When Xorg starts up it tries to detect the size of the attached
+# monitor and calculate the real DPI from there and use that. Problems are:
+#
+# * if the monitor size can not be detect then Xorg uses 75dpi. This is
+# usually far too low.
+#
+# * if the monitor size is not accurately detected then you get bad a DPI.
+#
+# * most fonts are optimised to work at a handful of standard DPIs. 96dpi,
+# 120dpi and printer resolution 300dpi and 600dpi. Fonts rendered in
+# non-standard DPIs often look bad and jagged. This is a real problem
+# when rendering fonts on low resolution devices. (i.e. a computer
+# monitor).
+#
+# Although it is desirable in theory to use the real DPI of the monitor, in
+# practice it is more important to ensure that fonts are well rendered even
+# if the DPI in use is not correct.
+#
+# What this function does is read the display size from the X server and
+# if it is lower than 140dpi then 'round' it to either 96dpi or 120dpi.
+# (A dpi greater or equal to 140 is assumed to be high enough to render fonts
+# well.) The new dpi is then loaded with the xrdb command into the X server
+# resource database. Most X applications (Qt and GTK apps at least) will then
+# use this DPI for font rendering.
+#
+def FixXorgDPI(desiredDPI):
+ # dpi is:
+ # None - round the DPI.
+ # xserver - Use the X server's DPI.
+ # <number> - DPI to use.
+ if desiredDPI=="xserver":
+ return
+
+ dpi = 96
+ try:
+ if desiredDPI is not None:
+ dpi = int(desiredDPI)
+ except ValueError:
+ desiredDPI = None
+
+ if desiredDPI is None:
+ xserver = xf86misc.XF86Server()
+ if len(xserver.getScreens())!=0:
+ (width,height,width_mm,height_mm) = xserver.getScreens()[0].getDimensions()
+ if not float(width_mm) == 0:
+ w_dpi = float(width)/(float(width_mm)/25.4)
+ else:
+ w_dpi = 96
+ if not float(height_mm) == 0:
+ h_dpi = float(height)/(float(height_mm)/25.4)
+ else:
+ h_dpi = 96
+ dpi = (w_dpi+h_dpi)/2.0 # Average the two possible DPIs.
+
+ if dpi >= 140: # Anything above 140 is ok.
+ dpi = int(dpi)
+ else:
+ if abs(96-dpi) < abs(120-dpi): # Rounding to 96 is best.
+ dpi = 96
+ else:
+ dpi = 120
+
+ # work around for LP beastie 151311
+ if ((w_dpi < 200) and (h_dpi > 900)):
+ dpi = 96
+
+ try:
+ xrdb = subprocess.Popen(["xrdb","-nocpp","-merge"],stdin=subprocess.PIPE)
+ xrdb.communicate("Xft.dpi: %i\n" % dpi)
+ xrdb.wait()
+ except OSError:
+ pass
+
+ # Other common, but now used settingsfor xrdb:
+ # Xft.antialias:
+ # Xft.hinting:
+ # Xft.hintstyle:
+ # Xft.rgba:
+
+############################################################################
+def ReadDisplayConfigRC():
+ screens = None
+ dpi = None
+ dpms_seconds = None
+ dpms_enabled = None
+
+ configpath = ExecWithCapture("kde-config",['kde-config','--path','config'],True)
+
+ # Hunt down the user's displayconfigrc file and adjust the resolution
+ # on the fly to match. (Non-root Users can independantly specify their own settings.)
+ dirs = configpath.strip().split(":")
+ for dir in dirs:
+ if dir!="":
+ configpath = os.path.join(dir,"displayconfigrc")
+ if os.path.exists(configpath):
+ # Parse the config file.
+ fhandle = open(configpath)
+ screens = []
+ currentscreen = None
+ for line in fhandle.readlines():
+ line = line.strip()
+ if line.startswith("[Screen"):
+ # Screen, width, height, refresh, reflectx, reflecty, rotate, redgamma, greengamma,bluegamma
+ currentscreen = [int(line[7:-1]), None, None, None, False, False, "0", None, None, None]
+ screens.append(currentscreen)
+ elif line.startswith("["):
+ currentscreen = None
+ elif line.startswith("dpi="):
+ dpi = line[4:]
+ elif currentscreen is not None:
+ if line.startswith("width="):
+ currentscreen[1] = int(line[6:])
+ elif line.startswith("height="):
+ currentscreen[2] = int(line[7:])
+ elif line.startswith("refresh="):
+ currentscreen[3] = int(line[8:])
+ elif line.startswith("reflectX="):
+ currentscreen[4] = line[9:]=="1"
+ elif line.startswith("reflectY="):
+ currentscreen[5] = line[9:]=="1"
+ elif line.startswith("rotate="):
+ currentscreen[6] = line[7:]
+ elif line.startswith("redgamma="):
+ currentscreen[7] = line[9:]
+ elif line.startswith("greengamma="):
+ currentscreen[8] = line[11:]
+ elif line.startswith("bluegamma="):
+ currentscreen[9] = line[10:]
+ elif line.startswith("dpmsEnabled"):
+ dpms_enabled = line.split("=")[1]
+ elif line.startswith("dpmsSeconds"):
+ dpms_seconds = int(line.split("=")[1])
+ fhandle.close()
+ break
+
+ return (screens,dpi,dpms_enabled,dpms_seconds)
+
+############################################################################
+def main():
+ (screens,dpi,dpms_enabled,dpms_seconds) = ReadDisplayConfigRC()
+
+ if dpms_enabled:
+ if dpms_enabled == "on":
+ if not dpms_seconds:
+ dpms_seconds = 900
+ cmd = "xset dpms %i %i %i" % (dpms_seconds,dpms_seconds,dpms_seconds)
+ os.system(cmd)
+ else:
+ cmd = "xset -dpms"
+ os.system(cmd)
+
+ if screens is not None:
+ # Set the X server.
+ try:
+ xserver = xf86misc.XF86Server()
+ if len(screens)!=0:
+
+ for screen in screens:
+ (id,width,height,refresh,reflectx,reflecty,rotate,redgamma,greengamma,bluegamma) = screen
+
+ # Convert the stuff into RandR's rotation bitfield thingy.
+ if rotate=="0":
+ rotation = xf86misc.XF86Screen.RR_Rotate_0
+ elif rotate=="90":
+ rotation = xf86misc.XF86Screen.RR_Rotate_90
+ elif rotate=="180":
+ rotation = xf86misc.XF86Screen.RR_Rotate_180
+ elif rotate=="270":
+ rotation = xf86misc.XF86Screen.RR_Rotate_270
+ if reflectx:
+ rotation |= xf86misc.XF86Screen.RR_Reflect_X
+ if reflecty:
+ rotation |= xf86misc.XF86Screen.RR_Reflect_Y
+
+ if id<len(xserver.getScreens()):
+ xscreen = xserver.getScreens()[id]
+
+ if xscreen.resolutionSupportAvailable():
+ available_sizes = xscreen.getAvailableSizes()
+
+ # Find the closest matching resolution
+ best_score = 1000000
+ best_size_id = 0
+ for size_id in range(len(available_sizes)):
+ size = available_sizes[size_id]
+ score = abs(size[0]-width)+abs(size[1]-height)
+ if score < best_score:
+ best_size_id = size_id
+ best_score = score
+
+ # Now find the best refresh for this resolution
+ best_score = 1000000
+ best_refresh = 50
+ for available_refresh in xscreen.getAvailableRefreshRates(best_size_id):
+ score = abs(refresh-available_refresh)
+ if score < best_score:
+ best_refresh = available_refresh
+ best_score = score
+
+ # Mask out any unsupported rotations.
+ rotation &= xscreen.getAvailableRotations()
+ xscreen.setScreenConfigAndRate(best_size_id, rotation, best_refresh)
+
+ # Restore the gamma settings.
+ if redgamma is not None and greengamma is not None and bluegamma is not None:
+ try:
+ xscreen.setGamma( (float(redgamma), float(greengamma), float(bluegamma)) )
+ except ValueError,e:
+ pass
+
+ FixXorgDPI(dpi)
+ except xf86misc.XF86Error,err:
+ print err
+
+ return
+
+ else:
+ # Ensure that the xorgs virtual screen size matches the default resolution
+ # of the server. Why does this matter? When Xorg starts up it reads its
+ # config file chooses the first mode in the "modes" line of the active
+ # Screen section and uses it as the virtual screen size and as the
+ # screen resolution (ie 1024x768 resolution screen showing a 1024x768 gfx
+ # buffer). But, this means that you can't use RandR to get to any higher
+ # screen resolutions (ie 1280x1024) because Xorg requires that the virtual
+ # screen size 'cover' the screen resolution being displayed.
+ #
+ # So, to get around this problem and make it possible for people to select
+ # a lower resolution screen *and* still have the option later to use
+ # RandR/displayconfig to switch to higher resolution, displayconfig
+ # explicitly sets the virtual screen size in xorg.conf to the largest
+ # resoluution that the monitor/gfx card can support. The down side to
+ # this is that the X server and kdm get the correct resolution but the
+ # wrong (virtual) screen size. The user can now scroll around on the
+ # greater virtual screen. Kind of annoying for kdm, unacceptable once
+ # the user has logged in.
+ #
+ # What we do now as the user's KDE session is being started up is check
+ # what the real virtual screen size is meant to be (=same as the real
+ # resolution being used) and then use the RandR extension to explicitly
+ # set the correct resolution. This has the effect of changing the virtual
+ # screeen size to what we really want. (RandR can change the virtual
+ # screen size, thankfully)
+ import displayconfigabstraction
+
+ try:
+ xserver = xf86misc.XF86Server()
+
+ for xscreen in xserver.getScreens():
+ if xscreen.resolutionSupportAvailable():
+ mode_line = ixf86misc.XF86VidModeGetModeLine(xserver.getDisplay(),xscreen.getScreenId())
+
+ hdisplay = mode_line[1]
+ vdisplay = mode_line[5]
+
+ live_refresh_rate = xscreen.getRefreshRate()
+ try:
+ (live_width,live_height,x,x) = xscreen.getAvailableSizes()[xscreen.getSizeID()]
+ except IndexError, errmsg:
+ print "IndexError:", errmsg, "in displayconfig-restore getting live screen size - trying screen 0."
+ (live_width,live_height,x,x) = xscreen.getAvailableSizes()[0]
+
+ if (hdisplay,vdisplay) != (live_width,live_height):
+ # The screen resolution doesn't match the virtual screen size.
+ screen_sizes = xscreen.getAvailableSizes()
+ for size_id in range(len(screen_sizes)):
+ screen_size = screen_sizes[size_id]
+ if screen_size[0]==hdisplay and screen_size[1]==vdisplay:
+
+ # Find the closest matching refresh rate.
+ best_refresh = 0
+ best_score = 1000000
+ for rate in xscreen.getAvailableRefreshRates(size_id):
+ score = abs(rate-live_refresh_rate)
+ if score < best_score:
+ best_refresh = rate
+ best_score = score
+
+ # Reset the screen mode and virtual screen size.
+ xscreen.setScreenConfigAndRate(size_id,xscreen.getRotation(),best_refresh)
+ break
+ FixXorgDPI(dpi)
+ except (xf86misc.XF86Error,TypeError),err:
+ print err
+
+main()
diff --git a/displayconfig/displayconfig.desktop b/displayconfig/displayconfig.desktop
new file mode 100644
index 0000000..234fa34
--- /dev/null
+++ b/displayconfig/displayconfig.desktop
@@ -0,0 +1,49 @@
+[Desktop Entry]
+Name=Monitor & Display
+Name[el]=Οθόνη & εμφάνιση
+Name[es]=Monitor y pantalla
+Name[et]=Monitor ja kuva
+Name[it]=Schermo
+Name[ja]=モニタとディスプレイ
+Name[nl]=Monitor en beeldscherm
+Name[pt]=Monitor & Ecrã
+Name[pt_BR]=Monitor & Visualização
+Name[sr]=Монитор и приказ
+Name[sr@Latn]=Monitor i prikaz
+Name[sv]=Bildskärm och skärm
+Name[xx]=xxMonitor & Displayxx
+Comment=Display and Monitor Configuration
+Comment[el]=Ρυθμίσεις εμφάνισης και οθόνης
+Comment[es]=Configuración de la pantalla y el monitor
+Comment[et]=Monitori ja kuva seadistamine
+Comment[it]=Configurazione dello schermo
+Comment[ja]=モニタとディスプレイの設定
+Comment[nl]=Configuratie van beeldscherm en monitor
+Comment[pt]=Configuração do Monitor e Ecrã
+Comment[pt_BR]=Configuração do Monitor e da Visualização
+Comment[sr]=Подешавање приказа и монитора
+Comment[sr@Latn]=Podešavanje prikaza i monitora
+Comment[sv]=Skärm- och bildskärmsinställning
+Comment[xx]=xxDisplay and Monitor Configurationxx
+Icon=displayconfig.png
+Encoding=UTF-8
+X-KDE-ModuleType=Library
+X-KDE-Library=displayconfig
+X-KDE-FactoryName=displayconfig
+X-KDE-RootOnly=true
+Type=Application
+Exec=kcmshell Peripherals/displayconfig
+Categories=Qt;KDE;X-KDE-settings-hardware;
+GenericName=Screen Configuration Editor
+GenericName[el]=Επεξεργαστής ρυθμίσεων οθόνης
+GenericName[es]=Editor de la configuración de la pantalla
+GenericName[et]=Ekraani seadistamise redaktor
+GenericName[it]=Editor della configurazione dello schermo
+GenericName[ja]=スクリーン設定エディタ
+GenericName[nl]=Scherminstellingen bewerken
+GenericName[pt]=Editor da Configuração do Ecrã
+GenericName[pt_BR]=Editor de Configuração da Tela
+GenericName[sr]=Уређивач подешавања екрана
+GenericName[sr@Latn]=Uređivač podešavanja ekrana
+GenericName[sv]=Editor för skärminställning
+GenericName[xx]=xxScreen Configuration Editorxx
diff --git a/displayconfig/displayconfig.py b/displayconfig/displayconfig.py
new file mode 100755
index 0000000..b4535d4
--- /dev/null
+++ b/displayconfig/displayconfig.py
@@ -0,0 +1,1756 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# displayconfig.py - description #
+# ------------------------------ #
+# begin : Fri Mar 26 2004 #
+# copyright : (C) 2004-2006 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdecore import *
+from kdeui import *
+import xorgconfig
+import xf86misc
+import string
+import os
+import select
+import sys
+import csv
+import time
+import signal
+import shutil
+from ktimerdialog import *
+from displayconfigwidgets import *
+from displayconfigabstraction import *
+from execwithcapture import *
+
+programname = "Display and Graphics Configuration"
+version = "0.8.0"
+DUAL_PREVIEW_SIZE = 240
+
+# Are we running as a separate standalone application or in KControl?
+standalone = __name__=='__main__'
+
+# Running as the root user or not?
+isroot = os.getuid()==0
+
+############################################################################
+class GfxCardDialog(KDialogBase):
+ video_ram_list = [256,512,1024,2048,4096,8192,16384,32768,65536]
+
+ def __init__(self,parent):
+ KDialogBase.__init__(self,parent,None,True,"Choose Graphics Card",
+ KDialogBase.Ok|KDialogBase.Cancel, KDialogBase.Cancel)
+
+ self.gfxcarddb = None
+ self.updatingGUI = True
+ self.card2listitem = {}
+
+ topbox = QVBox(self)
+ topbox.setSpacing(KDialog.spacingHint())
+ self.setMainWidget(topbox)
+ label = QLabel(topbox)
+ label.setText(i18n("Select Graphics Card:"))
+ self.listview = KListView(topbox)
+ self.listview.addColumn("")
+ self.listview.header().hide()
+ self.listview.setRootIsDecorated(True)
+ self.connect(self.listview,SIGNAL("selectionChanged(QListViewItem *)"),self.slotListClicked)
+ topbox.setStretchFactor(self.listview,1)
+
+ self.driver = KListViewItem(self.listview)
+ self.driver.setText(0,i18n("Drivers"))
+ self.driver.setSelectable(False)
+
+ self.manufacturer = KListViewItem(self.listview)
+ self.manufacturer.setText(0,i18n("Manufacturers"))
+ self.manufacturer.setSelectable(False)
+
+ hbox = QHBox(topbox)
+ topbox.setStretchFactor(hbox,0)
+ vbox = QVBox(hbox)
+
+ self.detected_label = QLabel("",vbox)
+
+ self.detected_button = KPushButton(vbox)
+ self.detected_button.setText(i18n("Select"))
+ self.connect(self.detected_button,SIGNAL("clicked()"),self.slotSelectDetectedClicked)
+
+ spacer = QWidget(vbox)
+ vbox.setStretchFactor(self.detected_button,0)
+ vbox.setStretchFactor(spacer,1)
+
+ hbox.setStretchFactor(vbox,0)
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+
+ drivergrid = QGrid(2,hbox)
+ drivergrid.setSpacing(KDialog.spacingHint())
+ QLabel(i18n("Driver:"),drivergrid)
+ self.standarddriverradio = QRadioButton(i18n("Standard"),drivergrid)
+ self.connect(self.standarddriverradio,SIGNAL("clicked()"),self.slotStandardDriverClicked)
+ QWidget(drivergrid)
+ self.proprietarydriverradio = QRadioButton(i18n("Proprietary"),drivergrid)
+ self.connect(self.proprietarydriverradio,SIGNAL("clicked()"),self.slotProprietaryDriverClicked)
+
+ QLabel(i18n("Video RAM:"),drivergrid)
+ self.videoramcombo = QComboBox(drivergrid)
+ for s in [i18n("256 kB"),
+ i18n("512 kB"),
+ i18n("1 MB"),
+ i18n("2 MB"),
+ i18n("4 MB"),
+ i18n("8 MB"),
+ i18n("16 MB"),
+ i18n("32 MB"),
+ i18n("64 MB or more")]:
+ self.videoramcombo.insertItem(s)
+
+ self.updatingGUI = False
+ self._setGfxCardDB(GetGfxCardModelDB())
+
+ def _setGfxCardDB(self,gfxcarddb):
+ self.updatingGUI = True
+ self.gfxcarddb = gfxcarddb
+
+ # Add the GfxCards under the Manufacturer item.
+ keys = gfxcarddb.vendordb.keys()
+ keys.sort()
+ for key in keys:
+ cardkeys = self.gfxcarddb.vendordb[key].keys()
+ vendoritem = KListViewItem(self.manufacturer)
+ vendoritem.setText(0,key)
+ vendoritem.setSelectable(False)
+ for cardkey in cardkeys:
+ item = KListViewItem(vendoritem)
+ item.setText(0,cardkey)
+ self.card2listitem[self.gfxcarddb.vendordb[key][cardkey]] = item
+
+ # Add the GfxCard _drivers_ under the Drivers item
+ drivers = gfxcarddb.driverdb.keys()
+ drivers.sort()
+ for driver in drivers:
+ driveritem = KListViewItem(self.driver)
+ driveritem.setText(0,driver)
+ self.card2listitem[gfxcarddb.driverdb[driver]] = driveritem
+
+ self.updatingGUI = False
+
+ def do(self,card,proprietarydriver,detected_card,video_ram):
+ self.updatingGUI = True
+ item = self.card2listitem[card]
+ self.listview.setSelected(item,True)
+ self.listview.ensureItemVisible(item)
+
+ self.selected_video_ram = video_ram
+
+ if detected_card is None:
+ self.detected_button.setEnabled(False)
+ self.detected_label.setText(i18n("Detected graphics card:\n(unknown)"))
+ else:
+ self.detected_button.setEnabled(True)
+ self.detected_label.setText(i18n("Detected graphics card:\n'%1'.").arg(detected_card.getName()))
+
+ self.__syncDriver(card,proprietarydriver,video_ram)
+
+ self.detected_card = detected_card
+ self.selected_card = card
+ self.updatingGUI = False
+
+ if self.exec_loop()==QDialog.Accepted:
+ return (self.selected_card,
+ self.proprietarydriverradio.isChecked() and (self.selected_card is not None),
+ self.video_ram_list[self.videoramcombo.currentItem()])
+ else:
+ return (card, proprietarydriver,video_ram)
+
+ def __syncDriver(self,card,proprietarydriver,videoram):
+ if card.getProprietaryDriver() is None:
+ self.standarddriverradio.setChecked(True)
+ self.standarddriverradio.setEnabled(False)
+ self.proprietarydriverradio.setEnabled(False)
+ else:
+ self.standarddriverradio.setEnabled(True)
+ self.proprietarydriverradio.setEnabled(True)
+ self.standarddriverradio.setChecked(not proprietarydriver)
+ self.proprietarydriverradio.setChecked(proprietarydriver)
+
+ self.videoramcombo.setEnabled(card.getNeedVideoRam())
+ if card.getNeedVideoRam():
+ self.videoramcombo.setCurrentItem(self.video_ram_list.index(videoram))
+
+ def slotSelectDetectedClicked(self):
+ self.updatingGUI = True
+ item = self.card2listitem[self.detected_card]
+ self.listview.setSelected(item,True)
+ self.listview.ensureItemVisible(item)
+ self.selected_card = self.detected_card
+ self.__syncDriver(self.selected_card, self.proprietarydriverradio.isChecked(), self.selected_video_ram)
+ self.updatingGUI = False
+
+ def slotListClicked(self,item):
+ if self.updatingGUI:
+ return
+
+ for key in self.card2listitem:
+ value = self.card2listitem[key]
+ if value is item:
+ self.selected_card = key
+ self.__syncDriver(self.selected_card, self.proprietarydriverradio.isChecked(), self.selected_video_ram)
+
+ def slotStandardDriverClicked(self):
+ self.proprietarydriverradio.setChecked(False)
+ self.standarddriverradio.setChecked(True)
+
+ def slotProprietaryDriverClicked(self):
+ self.standarddriverradio.setChecked(False)
+ self.proprietarydriverradio.setChecked(True)
+
+############################################################################
+class MonitorDialog(KDialogBase):
+ def __init__(self,parent):
+ KDialogBase.__init__(self,parent,None,True,"Choose Monitor",
+ KDialogBase.Ok|KDialogBase.Cancel, KDialogBase.Cancel)
+
+ self.monitordb = None
+ self.selectedmonitor = None
+ self.aspect = ModeLine.ASPECT_4_3
+ self.monitor2listitem = {}
+ self.updatingGUI = True
+
+ topbox = QVBox(self)
+ topbox.setSpacing(KDialog.spacingHint())
+ self.setMainWidget(topbox)
+ label = QLabel(topbox)
+ label.setText(i18n("Select Monitor:"))
+ self.listview = KListView(topbox)
+ self.listview.addColumn("")
+ self.listview.header().hide()
+ self.listview.setRootIsDecorated(True)
+ self.connect(self.listview,SIGNAL("selectionChanged(QListViewItem *)"),self.slotListClicked)
+
+ self.generic = KListViewItem(self.listview)
+ self.generic.setText(0,i18n("Generic"))
+ self.generic.setSelectable(False)
+
+ self.manufacturer = KListViewItem(self.listview)
+ self.manufacturer.setText(0,i18n("Manufacturers"))
+ self.manufacturer.setSelectable(False)
+
+ grid = QGroupBox(4,QGroupBox.Horizontal,topbox)
+ grid.setTitle(i18n("Details"))
+
+ label = QLabel(grid)
+ label.setText(i18n("Horizontal Range:"))
+
+ self.horizrange = KLineEdit(grid)
+ self.horizrange.setReadOnly(True)
+
+ label = QLabel(grid)
+ label.setText(i18n("Vertical Refresh:"))
+
+ self.vertrange = KLineEdit(grid)
+ self.vertrange.setReadOnly(True)
+
+ hbox = QHBox(topbox)
+
+ self.detectbutton = KPushButton(hbox)
+ self.detectbutton.setText(i18n("Detect Monitor")) # FIXME better label/text?
+ self.connect(self.detectbutton,SIGNAL("clicked()"),self.slotDetectClicked)
+
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(self.detectbutton,0)
+ hbox.setStretchFactor(spacer,1)
+
+ label = QLabel(hbox)
+ label.setText(i18n("Image format:"))
+ hbox.setStretchFactor(label,0)
+
+ self.aspectcombobox = KComboBox(hbox)
+ self.aspectcombobox.insertItem(i18n("Standard 4:3"))
+ self.aspectcombobox.insertItem(i18n("Widescreen 16:9"))
+ hbox.setStretchFactor(self.aspectcombobox,0)
+
+ self.updatingGUI = False
+
+ def setMonitorDB(self,monitordb):
+ self.monitordb = monitordb
+
+ # Add the Monitors
+ vendors = monitordb.vendordb.keys()
+ vendors.sort()
+ for vendor in vendors:
+ monitorkeys = self.monitordb.vendordb[vendor].keys()
+ vendoritem = KListViewItem(self.manufacturer)
+ vendoritem.setText(0,vendor)
+ vendoritem.setSelectable(False)
+ for monitorkey in monitorkeys:
+ item = KListViewItem(vendoritem)
+ item.setText(0,monitorkey)
+ self.monitor2listitem[self.monitordb.vendordb[vendor][monitorkey]] = item
+
+ generics = monitordb.genericdb.keys()
+ generics.sort()
+ for generic in generics:
+ genericitem = KListViewItem(self.generic)
+ genericitem.setText(0,generic)
+ self.monitor2listitem[monitordb.genericdb[generic]] = genericitem
+
+ customs = monitordb.getCustomMonitors().keys()
+ customs.sort()
+ for custom in customs:
+ customitem = KListViewItem(self.listview)
+ customitem.setText(0,custom)
+ self.monitor2listitem[monitordb.getCustomMonitors()[custom]] = customitem
+
+ def do(self,monitor,aspect,is_primary_monitor=True):
+ """Run the monitor selection dialog.
+
+ Parameters:
+
+ monitor - Currently selected 'Monitor' object.
+
+ Returns the newly selected monitor object and aspect ratio as a tuple.
+ """
+ if monitor is not None:
+ self.selectedmonitor = monitor
+ item = self.monitor2listitem[monitor]
+
+ self.listview.setSelected(item,True)
+ self.listview.ensureItemVisible(item)
+
+ else:
+ self.selectedmonitor = None
+ self.listview.clearSelection()
+ self.aspect = aspect
+
+ # Only the first/primary monitor can be detected. :-/
+ self.detectbutton.setEnabled(is_primary_monitor)
+
+ self.updatingGUI = True
+ self._syncGUI()
+ self.updatingGUI = False
+
+ if self.exec_loop()!=QDialog.Accepted:
+ # Dialog was cancelled. Return the original monitor.
+ self.selectedmonitor = monitor
+ else:
+ self.aspect = [ModeLine.ASPECT_4_3,ModeLine.ASPECT_16_9][self.aspectcombobox.currentItem()]
+
+ return (self.selectedmonitor,self.aspect)
+
+ def slotDetectClicked(self):
+ detectedmonitor = self.monitordb.detect()
+ if detectedmonitor is not None:
+ self.selectedmonitor = detectedmonitor
+ self._syncGUI()
+ else:
+ KMessageBox.error(self, i18n("Sorry, the model and capabilities of your\nmonitor couldn't be detected."),
+ i18n("Monitor detection failed"))
+
+ def slotListClicked(self,item):
+ if self.updatingGUI:
+ return
+ self.updatingGUI = True
+ for key in self.monitor2listitem:
+ value = self.monitor2listitem[key]
+ if value is item:
+ self.selectedmonitor = key
+ break
+ self._syncGUI()
+ self.updatingGUI = False
+
+ def _syncGUI(self):
+ if self.selectedmonitor is not None:
+ item = self.monitor2listitem[self.selectedmonitor]
+ self.listview.setSelected(item,True)
+ self.listview.ensureItemVisible(item)
+ self.vertrange.setText(self.selectedmonitor.getVerticalSync())
+ self.horizrange.setText(self.selectedmonitor.getHorizontalSync())
+ else:
+ self.vertrange.setText("-")
+ self.horizrange.setText("-")
+
+ self.aspectcombobox.setCurrentItem({ModeLine.ASPECT_4_3:0,ModeLine.ASPECT_16_9:1}[self.aspect])
+
+############################################################################
+if standalone:
+ programbase = KDialogBase
+else:
+ programbase = KCModule
+
+############################################################################
+class DisplayApp(programbase):
+ ########################################################################
+ def __init__(self,parent=None,name=None):
+ global standalone,isroot,kapp
+ KGlobal.locale().insertCatalogue("guidance")
+
+ if standalone:
+ KDialogBase.__init__(self,KJanusWidget.Tabbed,"Display Configuration",\
+ KDialogBase.Apply|KDialogBase.User1|KDialogBase.User2|KDialogBase.Close, KDialogBase.Close)
+ self.setButtonText(KDialogBase.User1,i18n("Reset"))
+ self.setButtonText(KDialogBase.User2,i18n("About"))
+ else:
+ KCModule.__init__(self,parent,name)
+ self.setButtons(KCModule.Apply|KCModule.Reset)
+ self.aboutdata = MakeAboutData()
+
+ # This line has the effect of hiding the "Admin only" message and also forcing
+ # the Apply/Reset buttons to be shown. Yippie! Only had to read the source
+ # to work that out.
+ self.setUseRootOnlyMsg(False)
+
+ # Create a configuration object.
+ self.config = KConfig("displayconfigrc")
+
+ # Compact mode means that we have to make the GUI
+ # much smaller to fit on low resolution screens.
+ self.compact_mode = kapp.desktop().height()<=600
+
+ KGlobal.iconLoader().addAppDir("guidance")
+
+ global imagedir
+ imagedir = unicode(KGlobal.dirs().findDirs("data","guidance/pics/displayconfig")[0])
+
+ self.imagedir = imagedir
+
+ self.xconfigchanged = False
+ self.xconfigtested = True
+
+ self.availabletargetgammas = [unicode(i18n('1.4')),unicode(i18n('1.6')),unicode(i18n('1.8')),unicode(i18n('2.0')),unicode(i18n('2.2')),unicode(i18n('2.4'))]
+ self.lightimages = []
+ self.mediumimages = []
+ self.darkimages = []
+
+ # X Server stuff
+ self.xf86server = xf86misc.XF86Server()
+
+ self.xconfigpath = self._findXorgConfig()
+ SetDataFileDir(unicode(KGlobal.dirs().findResourceDir("data","guidance/pcitable")) + "guidance/")
+ self.xsetup = XSetup(self.xconfigpath)
+
+ self.updatingGUI = True
+ self.gfxcarddb = GfxCardModelDB()
+ self.monitordb = GetMonitorModelDB()
+ self.monitormodedb = GetMonitorModeDB()
+
+ self._buildGUI()
+
+ # Work out if the currently running Gfxdriver is safe enough that we
+ # can test other drivers at the same time.
+ self.badfbrestore = self._badFbRestore()
+ self.testbutton.setEnabled(isroot and not self._badFbRestore())
+ if isroot and not self._badFbRestore():
+ self.testunavailablelabel.hide()
+ else:
+ self.testunavailablelabel.show()
+
+ # Load up some of our databases, and initialise our state variables.
+ if len(self.xsetup.getUsedScreens()):
+ self.currentsizescreen = self.xsetup.getUsedScreens()[0]
+ self.currentgammascreen = self.xsetup.getUsedScreens()[0]
+ else:
+ # FIXME
+ print "Houston, we have a problem: No screens found in configuration file, exiting. :("
+ sys.exit(1)
+
+ self.monitordialog.setMonitorDB(self.monitordb)
+
+ self.aboutus = KAboutApplication(self)
+
+ # For centering the timed Apply dialog.
+ self.applytimerdialog = None
+ self.connect(kapp.desktop(), SIGNAL("resized(int)"), self.slotDesktopResized)
+ self.applydialogscreenindex = 0
+
+ self.__loadImages()
+ self._loadConfig()
+ self._syncGUI()
+
+ if standalone:
+ self.enableButton(KDialogBase.User1,False) # Reset button
+ self.enableButtonApply(False) # Apply button
+
+ self.updatingGUI = False
+
+ def _findXorgConfig(self):
+ # Lookup location of X configfile
+ for line in ExecWithCapture("xset", ["xset","q"],True).split('\n'):
+ if line.strip().startswith("Config file"):
+ return line.split(":")[1].strip()
+ # Sometimes, xset doesn't know about the configfile location, hence ...
+ if os.path.isfile("/etc/X11/xorg.conf"):
+ return "/etc/X11/xorg.conf"
+ return None
+
+ def _buildGUI(self):
+ global standalone
+ if not standalone:
+ toplayout = QVBoxLayout( self, 0, KDialog.spacingHint() )
+ tabcontrol = QTabWidget(self)
+ toplayout.addWidget(tabcontrol)
+ toplayout.setStretchFactor(tabcontrol,1)
+
+ #--- Size, Orientation and Positioning ---
+ tabname = i18n("Size, Orientation && Positioning")
+ if standalone:
+ sopage = self.addGridPage(1,QGrid.Horizontal,tabname)
+ sopage.setSpacing(0)
+ self.SizePage = SizeOrientationPage(sopage,self.xsetup,self.compact_mode)
+ else:
+ self.SizePage = SizeOrientationPage(tabcontrol,self.xsetup,self.compact_mode)
+ self.SizePage.setMargin(KDialog.marginHint())
+
+ # Connect all PYSIGNALs from SizeOrientationPage Widget to appropriate actions.
+ self.connect(self.SizePage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+ self.connect(self.SizePage,PYSIGNAL("resolutionChange(int)"),self.slotResolutionChange)
+
+ if not standalone:
+ tabcontrol.addTab(self.SizePage,tabname)
+
+ #--- Color & Gamma tab ---
+ tabname = i18n("Color && Gamma")
+ if standalone:
+ gammapage = self.addVBoxPage(tabname)
+ vbox = QVBox(gammapage)
+ else:
+ vbox = QVBox(tabcontrol)
+ vbox.setMargin(KDialog.marginHint())
+ vbox.setSpacing(KDialog.spacingHint())
+
+ hbox = QHBox(vbox)
+ hbox.setSpacing(KDialog.spacingHint())
+ vbox.setStretchFactor(hbox,0)
+ label = QLabel(hbox,"textLabel1")
+ label.setText(i18n("Screen:"))
+ hbox.setStretchFactor(label,0)
+ self.gammadisplaycombobox = QComboBox(0,hbox,"comboBox11")
+ hbox.setStretchFactor(self.gammadisplaycombobox,0)
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+ self.connect(self.gammadisplaycombobox,SIGNAL("activated(int)"),self.slotGammaScreenCombobox)
+
+ # fill the combobox.
+ for screen in self.xsetup.getUsedScreens():
+ self.gammadisplaycombobox.insertItem(screen.getName())
+
+ if not self.compact_mode:
+ # Create the colour matching pics
+ label = QLabel(vbox)
+ label.setText(i18n("Color calibration image:"))
+ vbox.setStretchFactor(label,0)
+
+ hbox = QWidget(vbox)
+ hboxlayout = QHBoxLayout(hbox)
+ hboxlayout.setSpacing(KDialog.spacingHint())
+ self.mediumpic = QLabel(hbox)
+ self.mediumpic.setFixedSize(305,105)
+ hboxlayout.addWidget(self.mediumpic,0,Qt.AlignTop)
+
+ label = QLabel(hbox)
+ label.setPixmap(SmallIcon('info'))
+ hboxlayout.addWidget(label,0,Qt.AlignTop)
+
+ label = QLabel(i18n("<qt><p>Gamma controls how your monitor displays colors.</p><p>For accurate color reproduction, adjust the gamma correction sliders until the squares blend into the background as much as possible.</p></qt>"),hbox)
+ label.setTextFormat(Qt.RichText)
+ hboxlayout.addWidget(label,1,Qt.AlignTop)
+
+ sliderspace = QWidget(vbox)
+
+ grid = QGridLayout(sliderspace, 9, 4, 0, KDialog.spacingHint())
+ grid.setSpacing(KDialog.spacingHint())
+ grid.setColStretch(0,0)
+ grid.setColStretch(1,0)
+ grid.setColStretch(2,0)
+ grid.setColStretch(3,1)
+
+ label = QLabel(i18n("Gamma correction:"),sliderspace)
+ grid.addWidget(label, 0, 0)
+
+ self.gammaradiogroup = QButtonGroup()
+ self.gammaradiogroup.setRadioButtonExclusive(True)
+ self.connect(self.gammaradiogroup,SIGNAL("clicked(int)"),self.slotGammaRadioClicked)
+
+ self.allradio = QRadioButton(sliderspace)
+ grid.addWidget(self.allradio, 0, 1, Qt.AlignTop)
+
+ label = QLabel(i18n("All:"),sliderspace)
+ grid.addWidget(label, 0, 2)
+
+ self.gammaslider = KDoubleNumInput(0.4, 3.5, 2.0, 0.05, 2, sliderspace, 'gammaslider')
+ grid.addMultiCellWidget(self.gammaslider,0,1,3,3)
+ self.gammaslider.setRange(0.5, 2.5, 0.05, True)
+ self.connect(self.gammaslider, SIGNAL("valueChanged(double)"), self.slotGammaChanged)
+
+ self.componentradio = QRadioButton(sliderspace)
+ grid.addWidget(self.componentradio, 2, 1, Qt.AlignTop)
+
+ label = QLabel(i18n("Red:"),sliderspace)
+ grid.addWidget(label, 2, 2)
+
+ self.redslider = KDoubleNumInput(self.gammaslider,0.4, 3.5, 2.0, 0.05, 2, sliderspace, 'redslider')
+ grid.addMultiCellWidget(self.redslider,2,3,3,3)
+ self.redslider.setRange(0.5, 2.5, 0.05, True)
+ self.connect(self.redslider, SIGNAL("valueChanged(double)"), self.slotRedChanged)
+
+ label = QLabel(i18n("Green:"),sliderspace)
+ grid.addWidget(label, 4, 2)
+
+ self.greenslider = KDoubleNumInput(self.redslider,0.4, 3.5, 2.0, 0.05, 2, sliderspace, 'greenslider')
+ grid.addMultiCellWidget(self.greenslider,4,5,3,3)
+ self.greenslider.setRange(0.5, 2.5, 0.05, True)
+ self.connect(self.greenslider, SIGNAL("valueChanged(double)"), self.slotGreenChanged)
+
+ label = QLabel(i18n("Blue:"),sliderspace)
+ grid.addWidget(label, 6, 2)
+
+ self.blueslider = KDoubleNumInput(self.greenslider,0.4, 3.5, 2.0, 0.05, 2, sliderspace, 'blueslider')
+ grid.addMultiCellWidget(self.blueslider,6,7,3,3)
+ self.blueslider.setRange(0.5, 2.5, 0.05, True)
+ self.connect(self.blueslider, SIGNAL("valueChanged(double)"), self.slotBlueChanged)
+
+ self.gammaradiogroup.insert(self.allradio,0)
+ self.gammaradiogroup.insert(self.componentradio,1)
+
+ if not self.compact_mode:
+ label = QLabel(i18n("Target gamma:"),sliderspace)
+ grid.addWidget(label, 8, 0)
+
+ hbox = QHBox(sliderspace)
+ self.targetgammacombo = KComboBox(False,hbox)
+ self.targetgammacombo.insertItem(i18n('1.4'))
+ self.targetgammacombo.insertItem(i18n('1.6'))
+ self.targetgammacombo.insertItem(i18n('1.8 Apple Macintosh standard'))
+ self.targetgammacombo.insertItem(i18n('2.0 Recommend'))
+ self.targetgammacombo.insertItem(i18n('2.2 PC standard, sRGB'))
+ self.targetgammacombo.insertItem(i18n('2.4'))
+ hbox.setStretchFactor(self.targetgammacombo,0)
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+ grid.addMultiCellWidget(hbox, 8, 8, 1, 3)
+
+ self.connect(self.targetgammacombo,SIGNAL("activated(int)"),self.slotTargetGammaChanged)
+
+ spacer = QWidget(vbox)
+ vbox.setStretchFactor(spacer,1)
+
+ if not standalone:
+ tabcontrol.addTab(vbox,tabname)
+
+ #--- Hardware tab ---
+ if standalone:
+ hardwarepage = self.addVBoxPage(i18n("Hardware"))
+ vbox = QVBox(hardwarepage)
+ else:
+ vbox = QVBox(tabcontrol)
+ vbox.setMargin(KDialog.marginHint())
+ self.gfxcarddialog = GfxCardDialog(None)
+ self.monitordialog = MonitorDialog(None)
+
+ self.xscreenwidgets = []
+
+ for gfxcard in self.xsetup.getGfxCards():
+ w = GfxCardWidget(vbox,self.xsetup, gfxcard, self.gfxcarddialog, self.monitordialog)
+ self.xscreenwidgets.append(w)
+ self.connect(w,PYSIGNAL("configChanged"),self.slotConfigChanged)
+
+ spacer = QWidget(vbox)
+ vbox.setStretchFactor(spacer,1)
+
+ if not self.xsetup.mayModifyXorgConfig():
+ QLabel(i18n("Changes on this tab require 'root' access."),vbox)
+ if not standalone:
+ QLabel(i18n("Click the \"Administrator Mode\" button to allow modifications on this tab."),vbox)
+
+ hbox = QHBox(vbox)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.testbutton = KPushButton(i18n("Test"),hbox)
+ self.connect(self.testbutton,SIGNAL("clicked()"),self.slotTestClicked)
+ hbox.setStretchFactor(self.testbutton,0)
+
+ self.testunavailablelabel = QHBox(hbox)
+ self.testunavailablelabel.setSpacing(KDialog.spacingHint())
+ tmplabel = QLabel(self.testunavailablelabel)
+ self.testunavailablelabel.setStretchFactor(tmplabel,0)
+ tmplabel.setPixmap(SmallIcon('info'))
+ label = QLabel(i18n("This configuration cannot be safely tested."),self.testunavailablelabel)
+ self.testunavailablelabel.setStretchFactor(label,1)
+ self.testunavailablelabel.hide()
+
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+ vbox.setStretchFactor(hbox,0)
+
+ if not standalone:
+ tabcontrol.addTab(vbox,i18n("Hardware"))
+
+ #--- Display Power Saving ---
+ tabname = i18n("Power saving")
+ if standalone:
+ powerpage = self.addGridPage(1,QGrid.Horizontal,tabname)
+ self.dpmspage = DpmsPage(powerpage)
+ else:
+ self.dpmspage = DpmsPage(tabcontrol)
+ self.dpmspage.setMargin(KDialog.marginHint())
+
+ #self.SizePage.setScreens(self.xsetup.getScreens())
+
+ # Connect all PYSIGNALs from SizeOrientationPage Widget to appropriate actions.
+ #self.connect(self.SizePage,PYSIGNAL("dualheadEnabled(bool)"),self.slotDualheadEnabled)
+ self.connect(self.dpmspage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+
+ if not standalone:
+ tabcontrol.addTab(self.dpmspage,tabname)
+
+ def save(self): # KCModule
+ xorg_config_changed = self.xsetup.isXorgConfigChanged()
+ restart_recommended = self.xsetup.getRestartHint()
+
+ # Check the Size & Orientation tab.
+ if self.applytimerdialog is None:
+ self.applytimerdialog = KTimerDialog(15000, KTimerDialog.CountDown, self, "mainKTimerDialog",
+ True, i18n("Confirm Display Setting Change"), KTimerDialog.Ok | KTimerDialog.Cancel, \
+ KTimerDialog.Cancel)
+ self.applytimerdialog.setButtonOK(KGuiItem(i18n("&Keep"), "button_ok"))
+ self.applytimerdialog.setButtonCancel(KGuiItem(i18n("&Cancel"), "button_cancel"))
+ label = KActiveLabel(i18n("Trying new screen settings. Keep these new settings? (Automatically cancelling in 15 seconds.)"),
+ self.applytimerdialog, "userSpecifiedLabel")
+ self.applytimerdialog.setMainWidget(label)
+
+ if self.xsetup.isLiveResolutionConfigChanged():
+ if self.xsetup.applyLiveResolutionChanges():
+ # running X server config has changed. Ask the user.
+ KDialog.centerOnScreen(self.applytimerdialog, 0)
+ if self.applytimerdialog.exec_loop():
+ self.xsetup.acceptLiveResolutionChanges()
+ else:
+ try:
+ self.xsetup.rejectLiveResolutionChanges()
+ except:
+ """Workaround! FIXME: Use isGammaLive function in displayconfigabstraction when this is implemented"""
+ print "Live gamma change not supported"
+ return
+ else:
+ # Nothing really changed, just accept the changes.
+ self.xsetup.acceptLiveResolutionChanges()
+
+
+ self.xsetup.acceptLiveGammaChanges()
+ self.dpmspage.apply()
+
+ # Save the X server config.
+ if isroot and xorg_config_changed:
+
+ if not self.xconfigtested:
+ if self.badfbrestore or self._badFbRestore():
+ if KMessageBox.warningContinueCancel(self, \
+ i18n("The selected driver and monitor configuration can not be safely tested on this computer.\nContinue with this configuration?"),
+ i18n("Configuration not tested"))!=KMessageBox.Continue:
+ return
+ else:
+ if KMessageBox.warningContinueCancel(self,
+ i18n("The selected driver and monitor configuration has not been successfully tested on this computer.\nContinue with this configuration?"),
+ i18n("Configuration not tested"))!=KMessageBox.Continue:
+ return
+
+ try:
+ # Backup up the current config file.
+ i = 1
+ while os.path.exists("%s.%i" % (self.xconfigpath,i)):
+ i += 1
+ try:
+ shutil.copyfile(self.xconfigpath,"%s.%i" % (self.xconfigpath,i))
+ except IOError, errmsg:
+ print "IOError", errmsg, " - while trying to save new xorg.conf - trying to fix"
+ self.xconfigpath = "/etc/X11/xorg.conf"
+ xorgfile = open(self.xconfigpath, 'a')
+ xorgfile.close()
+ shutil.copyfile(self.xconfigpath,"%s.%i" % (self.xconfigpath,i))
+
+ # Write out the new config
+ tmpfilename = self.xconfigpath + ".tmp"
+ self.xsetup.writeXorgConfig(tmpfilename)
+
+ os.rename(tmpfilename,self.xconfigpath)
+ except (IOError,TypeError):
+ print "******* Bang"
+ raise
+ return
+ # FIXME error
+
+ # FIXME the instructions in these messages are probably not quite right.
+ if restart_recommended==XSetup.RESTART_X:
+ KMessageBox.information(self,
+ i18n("Some changes require that the X server be restarted before they take effect. Log out and select \"Restart X server\" from the menu button."),
+ i18n("X Server restart recommend"))
+
+ if restart_recommended==XSetup.RESTART_SYSTEM:
+ KMessageBox.information(self,
+ i18n("Some changes require that the entire system be restarted before they take effect. Log out and select \"Restart computer\" from the log in screen."),
+ i18n("System restart recommend"))
+
+ self._saveConfig()
+ self._sendChangedSignal()
+
+ # Called when the desktop is resized. Just center the confirm dialog.
+ def slotDesktopResized(self):
+ if self.applytimerdialog is not None:
+ KDialog.centerOnScreen(self.applytimerdialog, self.applydialogscreenindex)
+
+ def slotApply(self): # KDialogBase
+ self.save()
+
+ def slotClose(self): # KDialogBase
+ try:
+ self.xsetup.rejectLiveGammaChanges()
+ except:
+ """Workaround! FIXME: Use isGammaLive function in displayconfigabstraction when this is implemented"""
+ print "Live gamma change not supported"
+ KDialogBase.slotClose(self)
+
+ def load(self): # KCModule
+ self.__reset()
+ self._sendChangedSignal()
+
+ def slotUser1(self): # Reset button, KDialogBase
+ self.load()
+
+ def slotUser2(self): # About button, KDialogBase
+ self.aboutus.show()
+
+ def slotResolutionChange(self,i):
+ self.currentsizescreen.setResolutionIndex(i)
+ self._sendChangedSignal()
+
+ def slotTargetGammaChanged(self,i):
+ self.targetgamma = i
+ self._selectGamma(self.targetgamma)
+ self._sendChangedSignal()
+
+ def slotGammaRadioClicked(self,i):
+ self.settingall = i==0
+ self.gammaslider.setDisabled(not self.settingall)
+ self.redslider.setDisabled(self.settingall)
+ self.greenslider.setDisabled(self.settingall)
+ self.blueslider.setDisabled(self.settingall)
+ try:
+ if self.settingall:
+ self.currentgammascreen.setAllGamma(self.currentgammascreen.getAllGamma())
+ else:
+ self.currentgammascreen.setRedGamma(self.currentgammascreen.getRedGamma())
+ self.currentgammascreen.setGreenGamma(self.currentgammascreen.getGreenGamma())
+ self.currentgammascreen.setBlueGamma(self.currentgammascreen.getBlueGamma())
+ except:
+ """Workaround! FIXME: Use isGammaLive function in displayconfigabstraction when this is implemented"""
+ print "Live gamma change not supported"
+ self._sendChangedSignal()
+
+ def slotGammaChanged(self,value):
+ if self.updatingGUI:
+ return
+ try:
+ self.currentgammascreen.setAllGamma(value)
+ except:
+ """Workaround! FIXME: Use isGammaLive function in displayconfigabstraction when this is implemented"""
+ print "Live gamma change not supported"
+ self._sendChangedSignal()
+
+ def slotRedChanged(self,value):
+ if self.updatingGUI:
+ return
+ try:
+ self.currentgammascreen.setRedGamma(value)
+ except:
+ """Workaround! FIXME: Use isGammaLive function in displayconfigabstraction when this is implemented"""
+ print "Live gamma change not supported"
+ self._sendChangedSignal()
+
+ def slotGreenChanged(self,value):
+ if self.updatingGUI:
+ return
+ try:
+ self.currentgammascreen.setGreenGamma(value)
+ except:
+ """Workaround! FIXME: Use isGammaLive function in displayconfigabstraction when this is implemented"""
+ print "Live gamma change not supported"
+ self._sendChangedSignal()
+
+ def slotBlueChanged(self,value):
+ if self.updatingGUI:
+ return
+ try:
+ self.currentgammascreen.setBlueGamma(value)
+ except:
+ """Workaround! FIXME: Use isGammaLive function in displayconfigabstraction when this is implemented"""
+ print "Live gamma change not supported"
+ self._sendChangedSignal()
+
+ def slotGammaScreenCombobox(self,i):
+ self.currentgammascreen = self.xsetup.getUsedScreens()[i]
+ self._syncGUI()
+ self._sendChangedSignal()
+
+ def slotConfigChanged(self):
+ self.xconfigchanged = True
+ self.xconfigtested = False
+
+ # Check if the current X config can be tested.
+ self.SizePage._syncGUI()
+ for widget in self.xscreenwidgets:
+ widget.syncConfig()
+ self._syncTestButton()
+ self._sendChangedSignal()
+
+ def slotTestClicked(self):
+ self.xconfigtested = self.testX()
+
+ def testX(self):
+
+ self.xserverbin = "/usr/X11R6/bin/XFree86"
+ if not os.path.isfile(self.xserverbin):
+ self.xserverbin = "/usr/X11R6/bin/Xorg"
+ rc = False
+
+ # Remove an stale X server lock
+ try: os.remove("/tmp/.X9-lock")
+ except OSError: pass
+
+ # Try to find a safe tmp dir.
+ tmp_dir = None
+ if os.environ.get("TMPDIR") is not None:
+ tmp_dir = os.environ.get("TMPDIR")
+ if tmp_dir is None or not os.path.isdir(tmp_dir):
+ tmp_dir = os.path.join(os.environ.get("HOME"),"tmp")
+ if not os.path.isdir(tmp_dir):
+ tmp_dir = "/tmp"
+ working_tmp_dir = os.path.join(tmp_dir,"guidance."+str(os.getpid()))
+ error_filename = os.path.join(working_tmp_dir,"testserver.xoutput")
+ config_filename = os.path.join(working_tmp_dir,"testserver.config")
+ auth_filename = os.path.join(working_tmp_dir,"xauthority")
+
+ # Start the Xserver up with the new config file.
+ try:
+ # Create our private dir.
+ os.mkdir(working_tmp_dir,0700)
+
+ # Backup the XAUTHORITY environment variable.
+ old_xauthority = os.environ.get("XAUTHORITY",None)
+
+ # Write out the new config file.
+ self.xsetup.writeXorgConfig(config_filename)
+
+ os.system("xauth -f %s add :9 . `mcookie`" % (auth_filename,) )
+ # FIXME:: -xf86config is nowhere in man X ??
+ pid = os.spawnv(os.P_NOWAIT,"/bin/bash",\
+ ["bash","-c","exec %s :9 -xf86config %s -auth %s &> %s" % \
+ (self.xserverbin, config_filename, auth_filename, error_filename)])
+ print "Got pid",pid
+
+ # Wait for the server to show up.
+ print str(os.waitpid(pid,os.WNOHANG))
+
+ # Use our private xauthority file.
+ os.environ["XAUTHORITY"] = auth_filename
+
+ time.sleep(1) # Wait a sec.
+ testserver = None
+ while True:
+ # Try connecting to the server.
+ try:
+ testserver = xf86misc.XF86Server(":9")
+ break
+ except xf86misc.XF86Error:
+ testserver = None
+ # Check if the server process is still alive.
+ if os.waitpid(pid,os.WNOHANG) != (0,0):
+ break
+ time.sleep(1) # Give the server some more time.
+
+ print "checkpoint 1"
+ print str(testserver)
+
+ if testserver is not None:
+ # Start the timed popup on the :9 display.
+ #servertestpy = str(KGlobal.dirs().findResource("data","guidance/servertestdialog.py"))
+ servertestpy = os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])),"servertestdialog.py")
+ pythonexe = unicode(KStandardDirs.findExe("python"))
+
+ testrc = os.system(pythonexe + " " + servertestpy + " '" + auth_filename+"' ")
+ rc = (rc >> 8) == 0 # Test is good if the return code was 0.
+ testserver = None
+ os.kill(pid,signal.SIGINT)
+ else:
+ # Server failed, read the error info.
+ msg = ""
+ try:
+ fhandle = open(error_filename,'r')
+ for line in fhandle.readlines():
+ if (line.startswith("(EE)") and ("Disabling" not in line)) or line.startswith("Fatal"):
+ msg += line
+ msg = unicode(i18n("Messages from the X server:\n")) + msg
+ except IOError:
+ msg += unicode(i18n("Sorry, unable to capture the error messages from the X server."))
+ KMessageBox.detailedSorry(self,i18n("Sorry, this configuration video card driver\nand monitor doesn't appear to work."),msg)
+
+ finally:
+ # Attempt some cleanup before we go.
+ try: os.remove(error_filename)
+ except OSError: pass
+ try: os.remove(config_filename)
+ except OSError: pass
+ try: os.remove(auth_filename)
+ except OSError: pass
+ try: os.rmdir(working_tmp_dir)
+ except OSError: pass
+
+ if old_xauthority is None:
+ del os.environ["XAUTHORITY"]
+ else:
+ os.environ["XAUTHORITY"] = old_xauthority
+
+ return rc
+
+ def _syncGUI(self):
+ self.SizePage._syncGUI()
+
+ for gfxcard_widget in self.xscreenwidgets:
+ gfxcard_widget.syncConfig()
+
+ # Sync the gamma tab.
+ if not self.compact_mode:
+ self.targetgammacombo.setCurrentItem(self.targetgamma)
+ self._selectGamma(self.targetgamma)
+
+ if self.currentgammascreen.isGammaEqual():
+ self.gammaradiogroup.setButton(0)
+ else:
+ self.gammaradiogroup.setButton(1)
+
+ self.gammaslider.setValue(self.currentgammascreen.getAllGamma())
+ self.redslider.setValue(self.currentgammascreen.getRedGamma())
+ self.greenslider.setValue(self.currentgammascreen.getGreenGamma())
+ self.blueslider.setValue(self.currentgammascreen.getBlueGamma())
+
+ self.settingall = self.currentgammascreen.isGammaEqual()
+ self.gammaslider.setDisabled(not self.settingall)
+ self.redslider.setDisabled(self.settingall)
+ self.greenslider.setDisabled(self.settingall)
+ self.blueslider.setDisabled(self.settingall)
+ self._syncTestButton()
+
+ def _syncTestButton(self):
+ currentbadfbrestore = self._badFbRestore()
+ self.testbutton.setEnabled(self.xsetup.mayModifyXorgConfig() and not (self.badfbrestore or currentbadfbrestore))
+ if not isroot or (self.xsetup.mayModifyXorgConfig() and not (self.badfbrestore or currentbadfbrestore)):
+ self.testunavailablelabel.hide()
+ else:
+ self.testunavailablelabel.show()
+
+ def _loadConfig(self):
+ self.config.setGroup("General")
+ t = self.config.readEntry("targetgamma",unicode(i18n("2.0")))
+ if t in self.availabletargetgammas:
+ t = unicode(i18n('2.0'))
+ self.targetgamma = self.availabletargetgammas.index(t)
+
+ def _saveConfig(self):
+ global isroot
+ if isroot:
+ return
+ self.config.setGroup("General")
+ self.config.writeEntry("targetgamma",self.availabletargetgammas[self.targetgamma])
+ for s in self.xsetup.getUsedScreens():
+ self.config.setGroup("Screen"+str(s.getScreenIndex()))
+ self._saveRandRConfig(s)
+
+ # Write out the gamma values.
+ if self.settingall:
+ self.config.writeEntry("redgamma", str(s.getAllGamma()))
+ self.config.writeEntry("greengamma", str(s.getAllGamma()))
+ self.config.writeEntry("bluegamma", str(s.getAllGamma()))
+ else:
+ self.config.writeEntry("redgamma", str(s.getRedGamma()))
+ self.config.writeEntry("greengamma", str(s.getGreenGamma()))
+ self.config.writeEntry("bluegamma", str(s.getBlueGamma()))
+
+ self.config.writeEntry("dpmsSeconds", self.dpmspage.seconds)
+ self.config.writeEntry("dpmsEnabled", ("off","on")[self.dpmspage.enabled])
+ self.config.sync()
+
+ def _saveRandRConfig(self,screen):
+ w,h = screen.getAvailableResolutions()[screen.getResolutionIndex()]
+ self.config.writeEntry("width",w)
+ self.config.writeEntry("height",h)
+ self.config.writeEntry("reflectX", int( (screen.getReflection() & screen.RR_Reflect_X)!=0) )
+ self.config.writeEntry("reflectY", int((screen.getReflection() & screen.RR_Reflect_Y)!=0) )
+ self.config.writeEntry("refresh", screen.getAvailableRefreshRates()[screen.getRefreshRateIndex()])
+ rotationmap = {screen.RR_Rotate_0: "0", screen.RR_Rotate_90: "90",
+ screen.RR_Rotate_180:"180", screen.RR_Rotate_270: "270"}
+ self.config.writeEntry("rotate", rotationmap[screen.getRotation()])
+
+ def _selectGamma(self,i):
+ self.mediumpic.setPixmap(self.mediumimages[i])
+
+ def __loadImages(self):
+ if not self.compact_mode:
+ for g in ['14','16','18','20','22','24']:
+ self.mediumimages.append( QPixmap(self.imagedir+'gammapics/MGam'+g+'.png') )
+
+ self.previewscreen = QPixmap(self.imagedir+'monitor_screen_1280x1024.png')
+ self.previewscreenportrait = QPixmap(self.imagedir+'monitor_screen_1024x1280.png')
+
+ def __reset(self):
+ # Reset the screen settings.
+ self.xsetup.reset()
+ self.dpmspage.reset()
+ self._syncGUI()
+
+ # Kcontrol expects updates about whether the contents have changed.
+ # Also we fake the Apply and Reset buttons here when running outside kcontrol.
+ def _sendChangedSignal(self):
+ global standalone
+
+ changed = False
+ for s in self.xsetup.getUsedScreens():
+ changed = changed or s.isResolutionSettingsChanged()
+
+ changed = changed or self.xsetup.isXorgConfigChanged()
+ changed = changed or self.dpmspage.isChanged()
+
+ if standalone:
+ self.enableButton(KDialogBase.User1,changed) # Reset button
+ self.enableButtonApply(changed) # Apply button
+ else:
+ self.emit(SIGNAL("changed(bool)"), (changed,) )
+
+ def _badFbRestore(self):
+ bad_fb_restore = False
+ for card in self.xsetup.getGfxCards():
+ bad_fb_restore = bad_fb_restore or \
+ ((card.getGfxCardModel() is not None) and card.getGfxCardModel().getBadFbRestore(card.isProprietaryDriver()))
+ return bad_fb_restore
+
+############################################################################
+class SizeOrientationPage(QWidget):
+ """
+ A TabPage with all the settings for Size and Orientation of the screens,
+ also features Refreshrates and Dualheadsettings.
+
+ Emits the following signals:
+
+ changeSignal()
+
+ ...
+
+ TODO:
+ * Update __doc__ with emitted signals, connect these.
+ * Choose screen (more than one preview)
+ * Relative positioning.
+ * Call setRefreshCombo after switching screens.
+ """
+ def __init__(self,parent,xsetup,compact):
+ QWidget.__init__(self,parent)
+
+ global imagedir
+ self.xsetup = xsetup
+ self.imagedir = imagedir
+ self.parent = parent
+ self.current_screen = self.xsetup.getPrimaryScreen()
+ self.current_is_primary = True
+ self.compact_mode = compact
+
+ self._buildGUI()
+ self._syncGUI()
+
+ def _syncGUI(self):
+ if self.current_is_primary:
+ self.current_screen = self.xsetup.getPrimaryScreen()
+ else:
+ self.current_screen = self.xsetup.getSecondaryScreen()
+
+ self._syncGUILayout()
+ self._syncGUIScreen()
+
+ def _syncGUILayout(self):
+ # Secondary monitor radios.
+ available_layouts = self.xsetup.getAvailableLayouts()
+
+ may = self.xsetup.mayModifyLayout()
+
+ self.secondary_clone_radio.setEnabled(may and available_layouts & self.xsetup.LAYOUT_CLONE)
+ self.secondary_clone_radio.setShown(available_layouts & self.xsetup.LAYOUT_CLONE)
+
+ self.secondary_dual_radio.setEnabled(may and available_layouts & self.xsetup.LAYOUT_DUAL)
+ self.secondary_dual_radio.setShown(available_layouts & self.xsetup.LAYOUT_DUAL)
+
+ self.secondary_position_combo.setEnabled(may and self.xsetup.getLayout()==self.xsetup.LAYOUT_DUAL)
+ self.secondary_position_combo.setShown(available_layouts & self.xsetup.LAYOUT_DUAL)
+
+ self.secondary_groupbox.setEnabled(may and available_layouts != self.xsetup.LAYOUT_SINGLE)
+ # If only the single layout is available, then we just hide the whole radio group
+ self.secondary_groupbox.setShown(available_layouts!=self.xsetup.LAYOUT_SINGLE)
+
+ if self.xsetup.getLayout()!=self.xsetup.LAYOUT_SINGLE:
+ self.secondary_radios.setButton(self.secondary_option_ids[self.xsetup.getLayout()])
+ else:
+ if available_layouts & XSetup.LAYOUT_CLONE:
+ self.secondary_radios.setButton(self.secondary_option_ids[XSetup.LAYOUT_CLONE])
+ else:
+ self.secondary_radios.setButton(self.secondary_option_ids[XSetup.LAYOUT_DUAL])
+
+ self.secondary_groupbox.setChecked(self.xsetup.getLayout() != self.xsetup.LAYOUT_SINGLE)
+
+ def _syncGUIScreen(self):
+ # Sync the size tab.
+ self.resize_slider.setScreen(self.current_screen)
+
+ if self.xsetup.getLayout()!=self.xsetup.LAYOUT_DUAL:
+ self.resize_slider.setTitle(i18n("Screen size"))
+ else:
+ self.resize_slider.setTitle(i18n("Screen size #%1").arg(self.xsetup.getUsedScreens().index(self.current_screen)+1))
+
+ if self.xsetup.getLayout()==self.xsetup.LAYOUT_DUAL:
+ if not self.compact_mode:
+ self.monitor_preview_stack.raiseWidget(self.dual_monitor_preview)
+ else:
+ if not self.compact_mode:
+ self.monitor_preview_stack.raiseWidget(self.monitor_preview)
+
+ # Sync the screen orientation.
+ width,height = self.current_screen.getAvailableResolutions()[self.current_screen.getResolutionIndex()]
+
+ if not self.compact_mode:
+ self.monitor_preview.setResolution(width,height)
+
+ if self.current_screen.getRotation()==Screen.RR_Rotate_0:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_0)
+ elif self.current_screen.getRotation()==Screen.RR_Rotate_90:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_90)
+ elif self.current_screen.getRotation()==Screen.RR_Rotate_270:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_270)
+ else:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_180)
+
+ self.monitor_preview.setReflectX(self.current_screen.getReflection() & Screen.RR_Reflect_X)
+ self.monitor_preview.setReflectY(self.current_screen.getReflection() & Screen.RR_Reflect_Y)
+
+ # Set the resolutions for the dual screen preview.
+ if self.xsetup.getAvailableLayouts() & XSetup.LAYOUT_DUAL:
+ for i in [0,1]:
+ screen = [self.xsetup.getPrimaryScreen(), self.xsetup.getSecondaryScreen()][i]
+ width,height = screen.getAvailableResolutions()[screen.getResolutionIndex()]
+ self.dual_monitor_preview.setScreenResolution(i,width,height)
+ self.dual_monitor_preview.setPosition(self.xsetup.getDualheadOrientation())
+
+ self._fillRefreshCombo()
+
+ self.orientation_radio_group.setButton( \
+ [Screen.RR_Rotate_0, Screen.RR_Rotate_90, Screen.RR_Rotate_270,
+ Screen.RR_Rotate_180].index(self.current_screen.getRotation()))
+ # This construct above just maps an rotation to a radiobutton index.
+ self.mirror_horizontal_checkbox.setChecked(self.current_screen.getReflection() & Screen.RR_Reflect_X)
+ self.mirror_vertical_checkbox.setChecked(self.current_screen.getReflection() & Screen.RR_Reflect_Y)
+
+ width,height = self.current_screen.getAvailableResolutions()[self.current_screen.getResolutionIndex()]
+ if not self.compact_mode:
+ self.monitor_preview.setResolution(width,height)
+
+ # Enable/disable the resolution/rotation/reflection widgets.
+ may_edit = self.xsetup.mayModifyResolution()
+ self.normal_orientation_radio.setEnabled(may_edit)
+ available_rotations = self.current_screen.getAvailableRotations()
+
+ # Hide the whole group box if there is only one boring option.
+ self.orientation_group_box.setShown(available_rotations!=Screen.RR_Rotate_0)
+
+ self.left_orientation_radio.setEnabled(available_rotations & Screen.RR_Rotate_90 and may_edit)
+ self.left_orientation_radio.setShown(available_rotations & Screen.RR_Rotate_90)
+
+ self.right_orientation_radio.setEnabled(available_rotations & Screen.RR_Rotate_270 and may_edit)
+ self.right_orientation_radio.setShown(available_rotations & Screen.RR_Rotate_270)
+
+ self.upside_orientation_radio.setEnabled(available_rotations & Screen.RR_Rotate_180 and may_edit)
+ self.upside_orientation_radio.setShown(available_rotations & Screen.RR_Rotate_180)
+
+ self.mirror_horizontal_checkbox.setEnabled(available_rotations & Screen.RR_Reflect_X and may_edit)
+ self.mirror_horizontal_checkbox.setShown(available_rotations & Screen.RR_Reflect_X)
+
+ self.mirror_vertical_checkbox.setEnabled(available_rotations & Screen.RR_Reflect_Y and may_edit)
+ self.mirror_vertical_checkbox.setShown(available_rotations & Screen.RR_Reflect_Y)
+
+ self.resize_slider.setEnabled(may_edit)
+ self.size_refresh_combo.setEnabled(may_edit)
+
+ # Set the dual orientation combo.
+ self.secondary_position_combo.setCurrentItem(
+ [XSetup.POSITION_LEFTOF,
+ XSetup.POSITION_RIGHTOF,
+ XSetup.POSITION_ABOVE,
+ XSetup.POSITION_BELOW].index(self.xsetup.getDualheadOrientation()))
+
+ def _fillRefreshCombo(self):
+ # Update refresh combobox
+ self.size_refresh_combo.clear()
+ for rate in self.current_screen.getAvailableRefreshRates():
+ self.size_refresh_combo.insertItem(i18n("%1 Hz").arg(rate))
+ self.size_refresh_combo.setCurrentItem(self.current_screen.getRefreshRateIndex())
+ self.current_screen.setRefreshRateIndex(self.size_refresh_combo.currentItem())
+
+ def slotMonitorFocussed(self,currentMonitor):
+ if currentMonitor==0:
+ self.current_screen = self.xsetup.getPrimaryScreen()
+ self.current_is_primary = True
+ else:
+ self.current_screen = self.xsetup.getSecondaryScreen()
+ self.current_is_primary = False
+
+ self._syncGUIScreen()
+
+ def _sendChangedSignal(self):
+ self.emit(PYSIGNAL("changedSignal()"),())
+
+ def _buildGUI(self):
+ """ Assemble all GUI elements """
+ # Layout stuff.
+ top_layout = QHBoxLayout(self,0,KDialog.spacingHint())
+ self.top_layout = top_layout
+
+ # -- Left column with orientation and dualhead box.
+ vbox = QVBox(self)
+ top_layout.addWidget(vbox,0)
+
+ # -- Orientation group
+ self.orientation_group_box = QVGroupBox(vbox)
+ self.orientation_group_box.setTitle(i18n("Monitor Orientation"))
+ self.orientation_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.orientation_group_box.setInsideMargin(KDialog.marginHint())
+ self.orientation_radio_group = QButtonGroup()
+ self.orientation_radio_group.setRadioButtonExclusive(True)
+
+ self.normal_orientation_radio = QRadioButton(self.orientation_group_box)
+ self.normal_orientation_radio.setText(i18n("Normal"))
+ self.left_orientation_radio = QRadioButton(self.orientation_group_box)
+ self.left_orientation_radio .setText(i18n("Left edge on top"))
+ self.right_orientation_radio = QRadioButton(self.orientation_group_box)
+ self.right_orientation_radio.setText(i18n("Right edge on top"))
+ self.upside_orientation_radio = QRadioButton(self.orientation_group_box)
+ self.upside_orientation_radio.setText(i18n("Upsidedown"))
+
+ self.mirror_horizontal_checkbox = QCheckBox(self.orientation_group_box)
+ self.mirror_horizontal_checkbox.setText(i18n("Mirror horizontally"))
+ self.connect(self.mirror_horizontal_checkbox,SIGNAL("toggled(bool)"),self.slotMirrorHorizontallyToggled)
+
+ self.mirror_vertical_checkbox = QCheckBox(self.orientation_group_box)
+ self.mirror_vertical_checkbox.setText(i18n("Mirror vertically"))
+ self.connect(self.mirror_vertical_checkbox,SIGNAL("toggled(bool)"),self.slotMirrorVerticallyToggled)
+
+ self.orientation_radio_group.insert(self.normal_orientation_radio,0)
+ self.orientation_radio_group.insert(self.left_orientation_radio,1)
+ self.orientation_radio_group.insert(self.right_orientation_radio,2)
+ self.orientation_radio_group.insert(self.upside_orientation_radio,3)
+ self.connect(self.orientation_radio_group,SIGNAL("clicked(int)"),self.slotOrientationRadioClicked)
+
+ # -- Dualhead Box.
+ self.secondary_groupbox = QVGroupBox(vbox)
+ self.secondary_groupbox.setCheckable(True)
+ self.secondary_groupbox.setTitle(i18n("Second screen"))
+ self.connect(self.secondary_groupbox,SIGNAL("toggled(bool)"),self.slotSecondMonitorToggled)
+
+ self.secondary_radios = QVButtonGroup(None) # Invisible
+ self.connect(self.secondary_radios,SIGNAL("pressed(int)"),self.slotSecondMonitorRadioPressed)
+
+ self.secondary_options = {}
+ self.secondary_option_ids = {}
+
+ # Clone radio
+ self.secondary_clone_radio = QRadioButton(i18n("Clone primary screen"),self.secondary_groupbox)
+ radio_id = self.secondary_radios.insert(self.secondary_clone_radio)
+ self.secondary_options[radio_id] = self.xsetup.LAYOUT_CLONE
+ self.secondary_option_ids[self.xsetup.LAYOUT_CLONE] = radio_id
+
+ # Dual radio
+ self.secondary_dual_radio = QRadioButton(i18n("Dual screen"),self.secondary_groupbox)
+ radio_id = self.secondary_radios.insert(self.secondary_dual_radio)
+ self.secondary_options[radio_id] = self.xsetup.LAYOUT_DUAL
+ self.secondary_option_ids[self.xsetup.LAYOUT_DUAL] = radio_id
+
+ self.secondary_radios.setButton(radio_id)
+
+ hbox = QHBox(self.secondary_groupbox)
+ spacer = QWidget(hbox)
+ spacer.setFixedSize(20,1)
+ hbox.setStretchFactor(spacer,0)
+
+ self.secondary_position_combo = QComboBox(0,hbox,"")
+ self.secondary_position_combo.insertItem(i18n("1 left of 2"))
+ self.secondary_position_combo.insertItem(i18n("1 right of 2"))
+ self.secondary_position_combo.insertItem(i18n("1 above 2"))
+ self.secondary_position_combo.insertItem(i18n("1 below 2"))
+ self.connect(self.secondary_position_combo,SIGNAL("activated(int)"),self.slotSecondaryPositionChange)
+
+ spacer = QWidget(vbox)
+ vbox.setStretchFactor(spacer,1)
+
+ vbox = QVBox(self)
+ top_layout.addWidget(vbox,1)
+
+ if not self.compact_mode:
+ # -- Right columns with preview, size and refresh widgets.
+
+ # -- Preview Box.
+ self.monitor_preview_stack = QWidgetStack(vbox)
+
+ self.monitor_preview = MonitorPreview(self.monitor_preview_stack,self.imagedir)
+ self.monitor_preview_stack.addWidget(self.monitor_preview)
+ self.connect(self.monitor_preview,PYSIGNAL("focussed()"),self.slotMonitorFocussed)
+
+ self.dual_monitor_preview = DualMonitorPreview(self.monitor_preview_stack, DUAL_PREVIEW_SIZE, self.imagedir)
+
+ self.monitor_preview_stack.addWidget(self.dual_monitor_preview)
+ self.connect(self.dual_monitor_preview,PYSIGNAL("pressed()"),self.slotMonitorFocussed)
+ self.connect(self.dual_monitor_preview,PYSIGNAL("positionChanged()"),self.slotDualheadPreviewPositionChanged)
+
+ # -- Size & Refresh Box.
+ if not self.compact_mode:
+ hbox = QHBox(vbox)
+ else:
+ hbox = QVBox(vbox)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.resize_slider = ResizeSlider(hbox)
+ self.connect(self.resize_slider,PYSIGNAL("resolutionChange(int)"),self.slotResolutionChange)
+
+ hbox2 = QHBox(hbox)
+ self.refresh_label = QLabel(hbox2,"RefreshLabel")
+ self.refresh_label.setText(i18n("Refresh:"))
+
+ self.size_refresh_combo = QComboBox(0,hbox2,"comboBox1") # gets filled in setRefreshRates()
+ self.connect(self.size_refresh_combo,SIGNAL("activated(int)"),self.slotRefreshRateChange)
+ if self.compact_mode:
+ spacer = QWidget(hbox2)
+ hbox2.setStretchFactor(spacer,1)
+
+ spacer = QWidget(vbox)
+ vbox.setStretchFactor(spacer,1)
+
+ self.clearWState(Qt.WState_Polished)
+
+ def setNotification(self,text):
+ self.notify.setText(text)
+
+ def slotOrientationRadioClicked(self,i):
+ self.current_screen.setRotation(
+ [Screen.RR_Rotate_0, Screen.RR_Rotate_90,Screen.RR_Rotate_270, Screen.RR_Rotate_180][i])
+
+ if self.current_screen.getRotation()==Screen.RR_Rotate_0:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_0)
+ elif self.current_screen.getRotation()==Screen.RR_Rotate_90:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_90)
+ elif self.current_screen.getRotation()==Screen.RR_Rotate_270:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_270)
+ else:
+ self.monitor_preview.setRotation(MonitorPreview.ROTATE_180)
+
+ self._sendChangedSignal()
+
+ def slotMirrorHorizontallyToggled(self,flag):
+ # Bit flippin'
+ if flag:
+ self.current_screen.setReflection(self.current_screen.getReflection() | Screen.RR_Reflect_X)
+ else:
+ self.current_screen.setReflection(self.current_screen.getReflection() & ~Screen.RR_Reflect_X)
+ self.monitor_preview.setReflectX(flag)
+ self._sendChangedSignal()
+
+ def slotMirrorVerticallyToggled(self,flag):
+ # Bit flippin'
+ if flag:
+ self.current_screen.setReflection(self.current_screen.getReflection() | Screen.RR_Reflect_Y)
+ else:
+ self.current_screen.setReflection(self.current_screen.getReflection() & ~Screen.RR_Reflect_Y)
+ self.monitor_preview.setReflectY(flag)
+ self._sendChangedSignal()
+
+ def slotResolutionChange(self,i):
+ self.current_screen.setResolutionIndex(i)
+ width,height = self.current_screen.getAvailableResolutions()[i]
+
+ if not self.compact_mode:
+ self.monitor_preview.setResolution(width,height)
+ self.dual_monitor_preview.setScreenResolution(
+ self.xsetup.getUsedScreens().index(self.current_screen),
+ width,height)
+
+ self._fillRefreshCombo()
+ self._sendChangedSignal()
+
+ def slotRefreshRateChange(self,index):
+ self.current_screen.setRefreshRateIndex(index)
+ self._sendChangedSignal()
+
+ def setScreen(self,screen):
+ self.current_screen = screen
+ self._syncGUI()
+
+ def slotSecondMonitorToggled(self,enabled):
+ if enabled:
+ pressed_id = self.secondary_radios.selectedId()
+ self.xsetup.setLayout(self.secondary_options[pressed_id])
+ else:
+ self.xsetup.setLayout(self.xsetup.LAYOUT_SINGLE)
+
+ if self.xsetup.getLayout()!=self.xsetup.LAYOUT_DUAL:
+ self.current_screen = self.xsetup.getUsedScreens()[0]
+
+ self.secondary_position_combo.setEnabled(self.xsetup.getLayout()==XSetup.LAYOUT_DUAL)
+
+ self._syncGUIScreen()
+ self._sendChangedSignal()
+
+ def slotSecondMonitorRadioPressed(self,pressedId):
+ self.xsetup.setLayout(self.secondary_options[pressedId])
+
+ if self.xsetup.getLayout()!=XSetup.LAYOUT_DUAL:
+ self.current_screen = self.xsetup.getUsedScreens()[0]
+
+ self.secondary_position_combo.setEnabled(self.xsetup.getLayout()==XSetup.LAYOUT_DUAL)
+
+ if self.xsetup.getLayout()==XSetup.LAYOUT_DUAL:
+ if not self.compact_mode:
+ self.monitor_preview_stack.raiseWidget(self.dual_monitor_preview)
+ else:
+ if not self.compact_mode:
+ self.monitor_preview_stack.raiseWidget(self.monitor_preview)
+
+ self._syncGUIScreen()
+ self._sendChangedSignal()
+
+ def slotSecondaryPositionChange(self,index):
+ position = [XSetup.POSITION_LEFTOF,XSetup.POSITION_RIGHTOF,XSetup.POSITION_ABOVE,XSetup.POSITION_BELOW][index]
+ self.xsetup.setDualheadOrientation(position)
+ self.dual_monitor_preview.setPosition(position)
+ self._sendChangedSignal()
+
+ def slotDualheadPreviewPositionChanged(self,position):
+ self.xsetup.setDualheadOrientation(position)
+ index = {
+ XSetup.POSITION_LEFTOF:0,
+ XSetup.POSITION_RIGHTOF:1,
+ XSetup.POSITION_ABOVE:2,
+ XSetup.POSITION_BELOW:3
+ }[position]
+ self.secondary_position_combo.setCurrentItem(index)
+ self._sendChangedSignal()
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+############################################################################
+class DpmsPage(QWidget):
+
+ # Mapping values in seconds to human-readable labels.
+ intervals = (
+ (60,i18n("1 minute")),
+ (120,i18n("2 minutes")),
+ (180,i18n("3 minutes")),
+ (300,i18n("5 minutes")),
+ (600,i18n("10 minutes")),
+ (900,i18n("15 minutes")),
+ (1200,i18n("20 minutes")),
+ (1500,i18n("25 minutes")),
+ (1800,i18n("30 minutes")),
+ (2700,i18n("45 minutes")),
+ (3600,i18n("1 hour")),
+ (7200,i18n("2 hours")),
+ (10800,i18n("3 hours")),
+ (14400,i18n("4 hours")),
+ (18000,i18n("5 hours")))
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ global imagedir
+ QWidget.__init__(self,parent)
+
+ # Where to find xset.
+ self.xset_bin = os.popen('which xset').read()[:-1]
+
+ if not name:
+ self.setName("DPMSTab")
+
+ dpms_tab_layout = QVBoxLayout(self,0,0,"DPMSTabLayout")
+ self.top_layout = dpms_tab_layout
+
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ dpms_tab_layout.addWidget(hbox)
+
+ self.dpmsgroup = QHGroupBox(hbox,"dpmsgroup")
+ self.dpmsgroup.setInsideSpacing(KDialog.spacingHint())
+ self.dpmsgroup.setInsideMargin(KDialog.marginHint())
+ self.dpmsgroup.setTitle(i18n("Enable power saving"))
+ self.dpmsgroup.setCheckable(1)
+
+ self.connect(self.dpmsgroup,SIGNAL("toggled(bool)"),self.slotDpmsToggled)
+
+ hbox2 = QHBox(self.dpmsgroup)
+ hbox2.setSpacing(KDialog.spacingHint())
+
+ dpmstext = QLabel(hbox2,"dpmstext")
+ dpmstext.setText(i18n("Switch off monitor after:"))
+
+ self.dpmscombo = QComboBox(0,hbox2,"dpmscombo")
+ self.fillCombo(self.dpmscombo)
+ self.connect(self.dpmscombo,SIGNAL("activated(int)"),self.slotDpmsActivated)
+
+ spacer = QWidget(hbox2)
+ hbox2.setStretchFactor(spacer,1)
+
+ self.energystarpix = QLabel(hbox,"energystarpix")
+ self.energystarpix.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.energystarpix.sizePolicy().hasHeightForWidth()))
+ self.energystarpix.setMinimumSize(QSize(150,77))
+ self.energystarpix.setPixmap(QPixmap(imagedir+"../energystar.png"))
+ self.energystarpix.setScaledContents(1)
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ dpms_tab_layout.addItem(bottomspacer)
+
+ self.clearWState(Qt.WState_Polished)
+
+ self.readDpms()
+
+ def fillCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for interval in self.intervals:
+ combo.insertItem(interval[1])
+
+ def slotDpmsActivated(self,index):
+ """ Another dpms value has been chosen, update buttons at bottom. """
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotDpmsToggled(self,bool):
+ """ Dpms checkbox has been toggled, update buttons at bottom. """
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def readDpms(self):
+ # FIXME it is not the widget's job to read or change the values, just to present the GUI.
+ """ Read output from xset -q and parse DPMS settings from it. """
+ # FIXME: localisation problem running this command.
+ lines = ExecWithCapture(self.xset_bin,[self.xset_bin,'-q']).split('\n')
+
+ self.dpms_min = 1800
+ self.dpms_enabled = False
+
+ for line in lines:
+ if line.strip().startswith("Standby"):
+ self.dpms_min = int(line.strip().split()[5]) # TODO: More subtle exception handling. ;)
+ if line.strip().startswith("DPMS is"):
+ self.dpms_enabled = line.strip().split()[2]=="Enabled"
+
+ if self.dpms_min==0: # 0 also means don't use Standby mode.
+ self.dpms_enabled = False
+ self.dpms_min = 1800
+
+ self.dpmsgroup.setChecked(self.dpms_enabled)
+
+ for i in range(len(self.intervals)):
+ diff = abs(self.intervals[i][0] - self.dpms_min)
+ if i==0:
+ last_diff = diff
+ if (last_diff <= diff and i!=0) or (last_diff < diff):
+ i = i-1
+ break
+ last_diff = diff
+ self.dpmscombo.setCurrentItem(i)
+
+ def isChanged(self):
+ """ Check if something has changed since startup or last apply(). """
+ if self.dpmsgroup.isChecked():
+ if self.intervals[self.dpmscombo.currentItem()][0] != self.dpms_min:
+ return True
+ if self.dpmsgroup.isChecked() != self.dpms_enabled:
+ return True
+ return False
+
+ else:
+ # self.dpmsgroup.isChecked() is False
+ return self.dpms_enabled # self.dpms_enabled != False
+
+ def applyDpms(self):
+ """ Use xset to apply new dpms settings. """
+ self.enabled = self.dpmsgroup.isChecked()
+ self.seconds = self.intervals[self.dpmscombo.currentItem()][0]
+ if self.enabled:
+ # Switch dpms on and set timeout interval.
+ cmd_on = "%s +dpms" % self.xset_bin
+ cmd_set = "%s dpms %i %i %i" % (self.xset_bin, self.seconds,self.seconds,self.seconds)
+ print cmd_set
+ if os.system(cmd_set) != 0:
+ print "DPMS command failed: ", cmd_set
+ else:
+ # Switch dpms off.
+ cmd_on = "%s -dpms" % self.xset_bin
+ if os.system(cmd_on) != 0:
+ print "DPMS command failed: ", cmd_on
+ self.readDpms()
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def apply(self):
+ self.applyDpms()
+
+ def reset(self):
+ for i in range(len(self.intervals)):
+ if self.intervals[i][0] == self.dpms_min:
+ self.dpmscombo.setCurrentItem(i)
+ break
+
+ self.dpmsgroup.setChecked(self.dpms_enabled)
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+############################################################################
+def create_displayconfig(parent,name):
+ """ Factory function for KControl """
+ global kapp
+ kapp = KApplication.kApplication()
+ return DisplayApp(parent, name)
+
+############################################################################
+def MakeAboutData():
+ aboutdata = KAboutData("guidance",programname,version, \
+ "Display and Graphics Configuration Tool", KAboutData.License_GPL, \
+ "Copyright (C) 2003-2007 Simon Edwards", \
+ "Thanks go to Phil Thompson, Jim Bublitz and David Boddie.")
+ aboutdata.addAuthor("Simon Edwards","Developer","simon@simonzone.com", \
+ "http://www.simonzone.com/software/")
+ aboutdata.addAuthor("Sebastian Kügler","Developer","sebas@kde.org", \
+ "http://vizZzion.org");
+ aboutdata.addCredit("Pete Andrews","Gamma calibration pictures/system",None, \
+ "http://www.photoscientia.co.uk/Gamma.htm")
+ return aboutdata
+
+if standalone:
+ aboutdata = MakeAboutData()
+ KCmdLineArgs.init(sys.argv,aboutdata)
+
+ kapp = KApplication()
+
+ displayapp = DisplayApp()
+ displayapp.exec_loop()
diff --git a/displayconfig/displayconfigabstraction.py b/displayconfig/displayconfigabstraction.py
new file mode 100644
index 0000000..f59b2ff
--- /dev/null
+++ b/displayconfig/displayconfigabstraction.py
@@ -0,0 +1,3230 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import string
+import math
+import subprocess
+import xf86misc
+import xorgconfig
+import ScanPCI
+import csv
+import re
+from execwithcapture import *
+
+"""Classes for dealing with X.org configuration in a sane way.
+
+The object model used here is fairly simple. An XSetup object represents
+the complete configuration of the server. The XSetup object contains one or
+more GfxCard objects. One for each graphics card present in the machine.
+Each GfxCard has one or more Screen objects with each Screen representing
+one 'output' on the graphics card.
+
+Each GfxCard object is also associated with a GfxCardModel object which
+describes the model of graphics card.
+
+Each Screen object is associated with a MonitorModel object which
+describes the model of monitor attached.
+
+"""
+
+FALLBACK_RESOLUTION = (800,600)
+
+# FIXME updating /etc/modules for fglrx.
+data_file_dir = "."
+def SetDataFileDir(dir_name):
+ global data_file_dir
+ data_file_dir = dir_name
+
+var_data_dir = "/var/lib/guidance-backends"
+def SetVarDataDir(dir_name):
+ global var_data_dir
+ var_data_dir = dir_name
+
+############################################################################
+class XSetup(object):
+ """Represents the current configuration of the X.org X11 server.
+
+
+ """
+ # Map positions
+ ABOVE = 0
+ UNDER = 1
+ LEFTOF = 2
+ RIGHTOF = 3
+
+ RESTART_NONE = 0
+ RESTART_X = 1
+ RESTART_SYSTEM = 2
+
+ LAYOUT_SINGLE = 1 # These are bit flags.
+ LAYOUT_CLONE = 2
+ LAYOUT_DUAL = 4
+ LAYOUT_SINGLE_XINERAMA = 256 # For internal use.
+ LAYOUT_CLONE_XINERAMA = 512 # For internal use.
+
+ POSITION_LEFTOF = 0
+ POSITION_RIGHTOF = 1
+ POSITION_ABOVE = 2
+ POSITION_BELOW = 3
+
+ ROLE_UNUSED = 0
+ ROLE_PRIMARY = 1
+ ROLE_SECONDARY = 2
+
+ def __init__(self,xorg_config_filename='/etc/X11/xorg.conf',debug_scan_pci_filename=None,secondtry=False):
+ self.screens = []
+ self.gfxcards = []
+ self.xorg_config, self.hasxorg = xorgconfig.readConfig(xorg_config_filename, check_exists=True)
+ if not secondtry:
+ self.xorg_config_filename = xorg_config_filename
+ if self.xorg_config_filename == None:
+ self.xorg_config_filename = '/etc/X11/xorg.conf';
+ self.x_live_info = xf86misc.XF86Server()
+
+ self.primary_screen = None
+ self.secondary_screen = None
+
+ pci_bus = ScanPCI.PCIBus(data_file_dir)
+ if debug_scan_pci_filename is None:
+ pci_bus.detect()
+ else:
+ pci_bus.loadFromFile(debug_scan_pci_filename)
+
+ # First thing. Scan the PCI bus and find out how many Gfx cards we have.
+ found_list = self._detectGfxCards(pci_bus)
+ # list of (PCI_ID, PCIDevice, GfxCard) tuples
+
+ found_list.sort()
+
+ # Prepare some useful data structures.
+ self.layout = self.LAYOUT_SINGLE
+ self.xinerama = False
+ self.orientation = self.POSITION_LEFTOF
+
+ # Maps screen section names to xorg screens section objects.
+ xorg_screen_name_dict = {}
+ xorg_unused_screen_sections = self.xorg_config.getSections("Screen")
+ for screen in xorg_unused_screen_sections:
+ xorg_screen_name_dict[screen.identifier] = screen
+
+ # Maps device sections names to xorg device sections
+ xorg_device_name_dict = {}
+ xorg_unused_device_sections = self.xorg_config.getSections("Device")
+ for device in xorg_unused_device_sections:
+ xorg_device_name_dict[device.identifier] = device
+
+ # Maps device sections names to xorg device sections
+ xorg_monitor_name_dict = {}
+ xorg_monitor_sections = self.xorg_config.getSections("Monitor")
+ for monitor in xorg_monitor_sections:
+ xorg_monitor_name_dict[monitor.identifier] = monitor
+
+ # Maps GfxCard objects to ScanPCI.PCIDevice objects.
+ gfx_card_pcidevice_dict = {}
+
+ #-------------------------------------------------------------------
+ # Decode the server layout.
+ server_layouts = self.xorg_config.getSections("ServerLayout")
+ if len(server_layouts)==0:
+ print "*** Error: couldn't find any ServerLayout sections"
+ return
+ layout = server_layouts[0] # Grab the first ServerLayout
+
+ if len(layout.screen)==0:
+ print "*** Error: no screens were specified in the ServerLayout section"
+
+ # Handle leftof rightof below and above.
+ (primary_name, secondary_name, layout, self.orientation) = self._decodeServerLayoutScreens(layout.screen)
+
+ screen_list = [primary_name]
+ if secondary_name is not None:
+ screen_list.append(secondary_name)
+
+ for screen_name in screen_list:
+ if screen_name in xorg_screen_name_dict:
+ screen_section = xorg_screen_name_dict[screen_name]
+ if screen_section.device in xorg_device_name_dict:
+
+ device_section = xorg_device_name_dict[screen_section.device]
+
+ # Ok, we've now got a screen section and its device.
+ gfx_card = None
+
+ if device_section.busid is not None:
+ # Try to match this device to a gfxcard by using the PCI bus ID.
+ bus_id = self._canonicalPCIBusID(device_section.busid)
+
+ # See if there is already a known gfxcard at this PCI ID.
+ gfx_card = self.getGfxCardByPCIBusID(bus_id)
+ if gfx_card is not None:
+ # Let the gfxcard know that we have another device section for it to manage.
+ gfx_card._addXDevice(device_section)
+ try:
+ xorg_unused_device_sections.remove(device_section)
+ except ValueError:
+ pass
+ else:
+ # Not known, look for a matching pci device instead.
+ for pci_device_tuple in found_list:
+ if pci_device_tuple[0]==bus_id:
+ # Got a hit, create a gfxcard object.
+ gfx_card = GfxCard( self, pci_id=bus_id, \
+ x_device=device_section, \
+ detected_model=pci_device_tuple[2])
+
+ self.gfxcards.append(gfx_card)
+ gfx_card_pcidevice_dict[gfx_card] = pci_device_tuple[1]
+ xorg_unused_device_sections.remove(device_section)
+ found_list.remove(pci_device_tuple)
+ break
+
+ else:
+
+ # OK, no PCI ID, try matching to a PCI device by X driver name,
+ # or if there is one only gfx card then just grab it.
+ driver_name = device_section.driver
+ for pci_device_tuple in found_list:
+ if pci_device_tuple[2].getDriver()==driver_name \
+ or pci_device_tuple[2].getProprietaryDriver()==driver_name \
+ or len(found_list)==1:
+ # Got a hit, create a gfxcard object.
+ gfx_card = GfxCard( self, pci_id=pci_device_tuple[0], \
+ x_device=device_section, \
+ detected_model=pci_device_tuple[2])
+
+ self.gfxcards.append(gfx_card)
+ gfx_card_pcidevice_dict[gfx_card] = pci_device_tuple[1]
+ xorg_unused_device_sections.remove(device_section)
+ found_list.remove(pci_device_tuple)
+ break
+
+ if gfx_card is not None:
+ # Look up the monitor section from the monitor name.
+ monitor_section = None
+ monitor_model = None
+ if screen_section.monitor in xorg_monitor_name_dict:
+ monitor_section = xorg_monitor_name_dict[screen_section.monitor]
+ monitor_model = self._matchMonitor(monitor_section)
+
+ screen = Screen(x_config_screen=screen_section, gfx_card=gfx_card, \
+ x_config_monitor=monitor_section, monitor_model=monitor_model, \
+ x_config=self.xorg_config)
+ gfx_card._addScreen(screen)
+
+ if self.primary_screen is None:
+ self.primary_screen = screen
+ elif self.secondary_screen is None:
+ self.secondary_screen = screen
+
+ xorg_unused_screen_sections.remove(screen_section)
+
+ if self.primary_screen is not None and self.secondary_screen is not None:
+ self.layout = layout
+
+ #-------------------------------------------------------------------
+ # Dualhead hardware detection.
+ gfx_cards_needing_second_heads = []
+
+ # Detect dualhead ATI cards
+ for pci_device in pci_bus.devices:
+ if pci_device.text is not None and pci_device.text.find("Secondary")!=-1:
+
+ pci_device_id = "PCI:%i:%i:%i" % (pci_device.pci_bus, pci_device.pci_device, pci_device.pci_function)
+
+ for gfx_card in self.gfxcards:
+ if gfx_card.getPCIBusID() != pci_device_id:
+ # Compare the first two numbers that make up a PCI bus id (e.g. middle part of PCI:1:0:0)
+ if gfx_card.getPCIBusID().split(":")[1:-1] == [str(pci_device.pci_bus),str(pci_device.pci_device)]:
+ if len(gfx_card.getScreens())<2:
+ gfx_cards_needing_second_heads.append(gfx_card)
+ found_list = [x for x in found_list if x[0]!=pci_device_id]
+ break
+
+ # Detect dualhead Intel cards
+ for gfx_card in self.gfxcards:
+ if gfx_card._getDetectedGfxCardModel().getDriver() in ['i740','i810', 'intel']:
+ gfx_card_pci_id = gfx_card.getPCIBusID().split(":")[1:]
+ base_pci_id = gfx_card_pci_id[:-1]
+
+ for pci_device in pci_bus.devices:
+ if gfx_card_pci_id != [str(pci_device.pci_bus),str(pci_device.pci_device),str(pci_device.pci_function)]:
+ if base_pci_id == [str(pci_device.pci_bus),str(pci_device.pci_device)]:
+ pci_device_id = "PCI:%i:%i:%i" % (pci_device.pci_bus, pci_device.pci_device, pci_device.pci_function)
+ found_list = [x for x in found_list if x[0]!=pci_device_id]
+ # Try to configure a second head later if not yet available
+ if len(gfx_card.getScreens()) < 2:
+ gfx_cards_needing_second_heads.append(gfx_card)
+ break
+
+ # Detect dualhead nVidia cards
+ for gfx_card in self.gfxcards:
+ if gfx_card._getDetectedGfxCardModel().getDriver() in ['nv','nvidia']:
+ if self._isNVidiaCardDualhead(gfx_card_pcidevice_dict[gfx_card]):
+ if len(gfx_card.getScreens())<2:
+ if gfx_card not in gfx_cards_needing_second_heads:
+ gfx_cards_needing_second_heads.append(gfx_card)
+ continue
+
+ # Detect dualhead Matrox cards. This info is from the Cards+ db.
+ for gfx_card in self.gfxcards:
+ if (gfx_card._getDetectedGfxCardModel().getMultiHead()>1) and (len(gfx_card.getScreens())<2):
+ if gfx_card not in gfx_cards_needing_second_heads:
+ gfx_cards_needing_second_heads.append(gfx_card)
+
+ # Detect laptops. Dualhead/clone mode is standard functionality on laptops.
+ # (but can be hard to detect).
+ if os.path.isfile('/usr/sbin/laptop-detect'):
+ if subprocess.call(['/usr/sbin/laptop-detect'])==0:
+ if len(self.gfxcards)!=0:
+ gfx_card = self.gfxcards[0]
+ if gfx_card not in gfx_cards_needing_second_heads and \
+ len(gfx_card.getScreens())<2:
+ gfx_cards_needing_second_heads.append(gfx_card)
+
+ # Match up the second heads with any loose sections in xorg.conf.
+ for gfx_card in gfx_cards_needing_second_heads:
+ screens = gfx_card.getScreens()
+ # Try to find a loose xorg.conf Screen section that also
+ # references this gfx card. That is probably the config
+ # for the second screen.
+ for screen_section in xorg_unused_screen_sections:
+ if screen_section.device in xorg_device_name_dict:
+ device_section = xorg_device_name_dict[screen_section.device]
+
+ # Is this the second screen for the same PCI device aka gfxcard?
+
+ # Note: even though the second head shows up as a separate PCI ID, the screen
+ # section in xorg.conf still uses the primary PCI ID.
+ if str(device_section.screen)=="1" and \
+ self._canonicalPCIBusID(device_section.busid)==gfx_card.getPCIBusID():
+
+ # Look up the monitor section from the monitor name.
+ monitor_section = None
+ monitor_model = None
+ if screen_section.monitor in xorg_monitor_name_dict:
+ monitor_section = xorg_monitor_name_dict[screen_section.monitor]
+ monitor_model = self._matchMonitor(monitor_section)
+
+ gfx_card._addXDevice(device_section)
+ xorg_unused_device_sections.remove(device_section)
+
+ screen = Screen(x_config_screen=screen_section, gfx_card=gfx_card, \
+ x_config_monitor=monitor_section, monitor_model=monitor_model, \
+ x_config=self.xorg_config)
+ gfx_card._addScreen(screen)
+ self.secondary_screen = screen
+ xorg_unused_screen_sections.remove(screen_section)
+ break
+ else:
+ # Couldn't anything in xorg.conf, just make an empty screen
+ screen = Screen(gfx_card=gfx_card, x_config=self.xorg_config)
+ gfx_card._addScreen(screen)
+
+ #-------------------------------------------------------------------
+ # Handle loose gfx card devices. Check that all PCI gfxcards are accounted for.
+ for pci_device_tuple in found_list:
+
+ bus_id = pci_device_tuple[0]
+ for device_section in xorg_unused_device_sections:
+ if bus_id == self._canonicalPCIBusID(device_section.busid):
+ xorg_unused_device_sections.remove(device_section)
+ break
+ else:
+ device_section = None
+
+ # Got a hit, create a gfxcard object.
+ gfx_card = GfxCard( self, pci_id=pci_device_tuple[0], \
+ x_device=device_section, \
+ detected_model=pci_device_tuple[2])
+
+ gfx_card_pcidevice_dict[gfx_card] = pci_device_tuple[1]
+ self.gfxcards.append(gfx_card)
+
+ screen = None
+ # See if this device section is referenced by a screen section.
+ # if so, then we grab the screen section.
+ if device_section is not None:
+ for screen_section in xorg_unused_screen_sections:
+ if screen_section.device==device_section.identifier:
+
+ # Ok, we have found the screen section, monitor?
+ monitor_section = None
+ monitor_model = None
+ if screen_section.monitor in xorg_monitor_name_dict:
+ monitor_section = xorg_monitor_name_dict[screen_section.monitor]
+ monitor_model = self._matchMonitor(monitor_section)
+
+ screen = Screen(x_config_screen=screen_section, gfx_card=gfx_card, \
+ x_config_monitor=monitor_section, monitor_model=monitor_model, \
+ x_config=self.xorg_config)
+ gfx_card._addScreen(screen)
+ xorg_unused_screen_sections.remove(screen_section)
+ break
+
+ if screen is None:
+ # Manually add a screen.
+ screen = Screen(gfx_card=gfx_card, x_config=self.xorg_config)
+ gfx_card._addScreen(screen)
+
+ #-------------------------------------------------------------------
+ # Sort the gfx cards by PCI id.
+ def gfxcard_pci_sort(a,b): return cmp(a.getPCIBusID(),b.getPCIBusID())
+ self.gfxcards.sort(gfxcard_pci_sort)
+
+ # Hand out some randr live screens
+ x_live_screens = self.x_live_info.getScreens()
+ i = 0
+ for gfx_card in self.gfxcards:
+ for screen in gfx_card.getScreens():
+ if i<len(x_live_screens) and self.getScreenRole(screen)!=XSetup.ROLE_UNUSED:
+ screen._setXLiveScreen(x_live_screens[i])
+ i += 1
+
+ # Ensure that all of the screen roles have been handed out.
+ if self.primary_screen is None:
+ for screen in self.getAllScreens():
+ if screen is not self.secondary_screen:
+ self.primary_screen = screen
+ break
+ if self.secondary_screen is None:
+ for screen in self.getAllScreens():
+ if screen is not self.primary_screen:
+ self.secondary_screen = screen
+ break
+
+ self._finalizeInit()
+
+ if not self.hasxorg and not secondtry:
+ """No xorg.conf, so we need to write a temporary one and reload from that one"""
+ self.writeXorgConfig('/tmp/xorg.conf.displayconfig')
+ self.__init__(xorg_config_filename='/tmp/xorg.conf.displayconfig',secondtry=True)
+ return
+
+ def _finalizeInit(self):
+ for gfxcard in self.gfxcards:
+ gfxcard._finalizeInit()
+
+ # Check the 'layout' on the gfx cards to detect optimised configs.
+ gfxcard = self.primary_screen._getGfxCard()
+ if gfxcard._getDetectedLayout()!=XSetup.LAYOUT_SINGLE:
+ # Something interesting is going on on this gfx card. The
+ # secondary screen is in this case going to actually be the
+ # other 'head' on this gfx card.
+ if gfxcard.getScreens()[0] is not self.primary_screen:
+ self.secondary_screen = gfxcard.getScreens()[0]
+ else:
+ self.secondary_screen = gfxcard.getScreens()[1]
+
+ self.orientation = gfxcard._getDetectedDualheadOrientation()
+ self.setLayout(gfxcard._getDetectedLayout())
+
+ self.setLayout(self.layout) # Propogate any XINERAMA_SINGLE stuff out to the gfxcards.
+ self.original_layout = self.layout
+ self.original_orientation = self.orientation
+ self.original_primary_screen = self.primary_screen
+ self.original_secondary_screen = self.secondary_screen
+
+ def _matchMonitor(self,monitor_section):
+ monitor_model_db = GetMonitorModelDB()
+
+ model_name = monitor_section.modelname
+ if monitor_model_db.getMonitorByName(model_name) is not None:
+ monitor_model = monitor_model_db.getMonitorByName(model_name)
+ else:
+
+ if monitor_section.getRow('horizsync') is not None and monitor_section.getRow('vertrefresh') is not None:
+ # Create a monitor object for the monitor in the xconfig.
+ # It is probably a Plug N Play monitor and as such doesn't
+ # appear in our monitor DB.
+ monitor_model = monitor_model_db.newCustomMonitor(name=model_name)
+ monitor_model.setType(MonitorModel.TYPE_PLUGNPLAY)
+
+ if monitor_section.vendorname is not None:
+ monitor_model.setManufacturer(monitor_section.vendorname)
+
+ monitor_model.setHorizontalSync(' '.join(monitor_section.getRow('horizsync')))
+ monitor_model.setVerticalSync(' '.join(monitor_section.getRow('vertrefresh')))
+
+ else:
+ # Try detecting the monitor.
+ monitor_model = monitor_model_db.detect()
+
+ monitor_model.setDpms("dpms" in monitor_section.option)
+
+ return monitor_model
+
+ def _decodeServerLayoutScreens(self,screens_lines):
+ primary_name = None
+ secondary_name = None
+ layout = XSetup.LAYOUT_SINGLE
+ position = XSetup.POSITION_LEFTOF
+
+ for line in screens_lines:
+ try:
+ i = 1
+ if line._row[i].isdigit(): # Skip any screen ID number.
+ i += 1
+
+ screen_name1 = line._row[i]
+ if primary_name is None:
+ primary_name = screen_name1
+ elif secondary_name is None:
+ secondary_name = screen_name1
+ layout = XSetup.LAYOUT_CLONE
+ i += 1
+
+ if line._row[i].isdigit():
+ # Skip absolute coords.
+ i += 2
+ else:
+ if line._row[i].lower()=='absolute':
+ # Skip the absolute keyword and coords
+ i += 3
+
+ screen_name2 = line._row[i+1]
+ secondary_name = screen_name2
+
+ position = {
+ 'leftof': XSetup.POSITION_LEFTOF,
+ 'rightof': XSetup.POSITION_RIGHTOF,
+ 'above': XSetup.POSITION_ABOVE,
+ 'below': XSetup.POSITION_BELOW
+ }[line._row[i].lower()]
+
+ layout = XSetup.LAYOUT_DUAL
+
+ if screen_name1!=primary_name:
+ # Swap the screens around. The primary wasn't given first on this
+ # dualhead screen line.
+ secondary_name = screen_name1
+ position = {
+ XSetup.POSITION_LEFTOF: XSetup.POSITION_RIGHTOF,
+ XSetup.POSITION_RIGHTOF: XSetup.POSITION_LEFTOF,
+ XSetup.POSITION_ABOVE: XSetup.POSITION_BELOW,
+ XSetup.POSITION_BELOW: XSetup.POSITION_ABOVE
+ }[position]
+
+ except IndexError:
+ pass
+ except KeyError:
+ pass
+
+ return (primary_name, secondary_name, layout, position)
+
+ def _detectGfxCards(self,pci_bus):
+ """Scans the PCI bus for graphics cards.
+
+ Returns a list of (PCI_ID, PCIDevice, GfxCard) tuples."""
+ self.gfx_card_db = GetGfxCardModelDB()
+ vesa_model = "VESA driver (generic)"
+
+ # Look for a gfxcard.
+ found_list = []
+ for pci_device in pci_bus.devices:
+ if pci_device.isGfxCard():
+ pci_id = "PCI:%i:%i:%i" % (pci_device.pci_bus, pci_device.pci_device, pci_device.pci_function)
+ model = None
+ try:
+ cardname = pci_device.getModule()
+ if not pci_device.isModuleXorgDriver():
+ cardname = vesa_model
+ model = self.gfx_card_db.getGfxCardModelByName(cardname)
+ except KeyError:
+ model = self.gfx_card_db.getGfxCardModelByName(vesa_model)
+ found_list.append( (pci_id,pci_device,model) )
+
+ return found_list
+
+ def _canonicalPCIBusID(self,bus_id):
+ try:
+ parts = bus_id.split(":")
+ if parts[0].lower()!="pci":
+ return None
+ bus = int(parts[1])
+ device = int(parts[2])
+ function = int(parts[3])
+ return "PCI:%i:%i:%i" % (bus,device,function)
+ except IndexError:
+ return None
+ except ValueError:
+ return None
+ except AttributeError:
+ return None
+
+ def _isNVidiaCardDualhead(self,PCIDeviceObject):
+ """
+ PCIDevice - ScanPCI.PCIDevice
+
+ Returns true if the given nVidia PCI device ID supports dualhead.
+ """
+ # From Xorg source xc/programs/Xserver/hw/xfree86/drivers/nv/nv_setup.c
+ # See line "pNv->twoHeads = "
+ #
+ NV_ARCH_04 = 0x4
+ NV_ARCH_10 = 0x10
+ NV_ARCH_20 = 0x20
+ NV_ARCH_30 = 0x30
+ NV_ARCH_40 = 0x40
+
+ pci_device = PCIDeviceObject.device
+
+ if pci_device & 0xfff0 == 0x00f0:
+ return True # FIXME PCIXpress chipsets
+
+ # These IDs come from the Xorg source.
+ # xc/programs/Xserver/hw/xfree86/drivers/nv/nv_driver.c
+ # And should be periodically updated.
+ chipset = pci_device & 0x0ff0
+ if chipset in [
+ 0x0100, # GeForce 256
+ 0x0110, # GeForce2 MX
+ 0x0150, # GeForce2
+ 0x0170, # GeForce4 MX
+ 0x0180, # GeForce4 MX (8x AGP)
+ 0x01A0, # nForce
+ 0x01F0]:# nForce2
+ architecture = NV_ARCH_10
+ elif chipset in [
+ 0x0200, # GeForce3
+ 0x0250, # GeForce4 Ti
+ 0x0280]:# GeForce4 Ti (8x AGP)
+ architecture = NV_ARCH_20
+ elif chipset in [
+ 0x0300, # GeForceFX 5800
+ 0x0310, # GeForceFX 5600
+ 0x0320, # GeForceFX 5200
+ 0x0330, # GeForceFX 5900
+ 0x0340]:# GeForceFX 5700
+ architecture = NV_ARCH_30
+ elif chipset in [
+ 0x0040,
+ 0x00C0,
+ 0x0120,
+ 0x0130,
+ 0x0140,
+ 0x0160,
+ 0x01D0,
+ 0x0090,
+ 0x0210,
+ 0x0220,
+ 0x0230,
+ 0x0290,
+ 0x0390]:
+ architecture = NV_ARCH_40
+ else:
+ architecture = NV_ARCH_04
+
+ return (architecture >= NV_ARCH_10) and \
+ (chipset != 0x0100) and \
+ (chipset != 0x0150) and \
+ (chipset != 0x01A0) and \
+ (chipset != 0x0200)
+
+ def _syncXorgConfig(self):
+
+ xinerama_clone = (self.layout==XSetup.LAYOUT_CLONE) and \
+ not ((self.secondary_screen._getGfxCard() is self.primary_screen._getGfxCard()) \
+ and (self.primary_screen._getGfxCard()._getAvailableLayouts() & XSetup.LAYOUT_CLONE))
+
+ if xinerama_clone:
+ # For clone mode with xinerama we copy the screen settings from the primary screen
+ # to the secondary screen.
+ primary_screen = self.getPrimaryScreen()
+ secondary_screen = self.getSecondaryScreen()
+
+ resolution = primary_screen.getAvailableResolutions()[primary_screen.getResolutionIndex()]
+ secondary_resolution_index = secondary_screen.getAvailableResolutions().index(resolution)
+ secondary_screen.setResolutionIndex(secondary_resolution_index)
+ secondary_rates = secondary_screen.getAvailableRefreshRatesForResolution(secondary_resolution_index)
+ primary_rate = primary_screen.getAvailableRefreshRates()[primary_screen.getRefreshRateIndex()]
+
+ best_rate_index = 0
+ best_score = 1000000
+ for i in range(len(secondary_rates)):
+ rate = secondary_rates[i]
+ score = abs(rate-primary_rate)
+ if score < best_score:
+ best_score = score
+ best_rate_index = i
+
+ secondary_screen.setRefreshRateIndex(best_rate_index)
+
+ # Sync up the graphics cards.
+ for gfxcard in self.gfxcards:
+ gfxcard._syncXorgConfig()
+
+ server_flags_sections = self.xorg_config.getSections("ServerFlags")
+ if len(server_flags_sections)!=0:
+ server_flags = server_flags_sections[0]
+ server_flags.option.removeOptionByName("Xinerama")
+ else:
+ server_flags = self.xorg_config.makeSection(None,["Section","ServerFlags"])
+ self.xorg_config.append(server_flags)
+
+ # Delete any old screen entries in the serverlayout section.
+ server_layout = self.xorg_config.getSections("ServerLayout")[0]
+ for screen in server_layout.screen[:]:
+ server_layout.screen.remove(screen)
+
+ # Add the first Screen row
+ screen_id_1 = self.primary_screen._getXorgScreenSection().identifier
+ server_layout.screen.append(server_layout.screen.makeLine(None,
+ ["0",screen_id_1,"0","0"]))
+
+ # FIXME server_flags -> Option "DefaultServerLayout" "???"
+ if self.layout==XSetup.LAYOUT_DUAL or xinerama_clone:
+ server_flags.option.append( server_flags.option.makeLine(None,["Xinerama","true"]) )
+
+ # Add the second screen row. This one also has the dual screen
+ # orientation info.
+ screen_id_2 = self.secondary_screen._getXorgScreenSection().identifier
+
+ if not xinerama_clone:
+
+ position = {XSetup.POSITION_LEFTOF:"RightOf",
+ XSetup.POSITION_RIGHTOF:"LeftOf",
+ XSetup.POSITION_ABOVE:"Below",
+ XSetup.POSITION_BELOW:"Above"}[self.orientation]
+
+ server_layout.screen.append(server_layout.screen.makeLine(None,
+ ["1",screen_id_2,position,screen_id_1]))
+ else:
+ # Xinerama clone mode. Place the second screen directly on top of the
+ # primary screen.
+ server_layout.screen.append(server_layout.screen.makeLine(None,
+ ["1",screen_id_2,"0","0"]))
+
+ self.original_layout = self.layout
+ self.original_orientation = self.orientation
+ self.original_primary_screen = self.primary_screen
+ self.original_secondary_screen = self.secondary_screen
+
+ def writeXorgConfig(self,filename):
+ self._syncXorgConfig()
+ self.xorg_config.writeConfig(filename)
+
+ def xorgConfigToString(self):
+ return self.xorg_config.toString()
+
+ def getUsedScreens(self):
+ """Returns the list of Screen objects that the current setup is using."""
+ if self.layout==XSetup.LAYOUT_SINGLE:
+ return [self.primary_screen]
+ else:
+ return [self.primary_screen, self.secondary_screen]
+
+ def getAllScreens(self):
+ """Returns a list of all Screen object."""
+ screens = []
+ for card in self.gfxcards:
+ for screen in card.getScreens():
+ screens.append(screen)
+ return screens
+
+ def getScreen(self,screenindex):
+ return self.getUsedScreens()[screenindex]
+
+ def getGfxCards(self):
+ return self.gfxcards[:] # No messin' with the gfx card list.
+
+ def getGfxCardByPCIBusID(self,bus_id):
+ for gfxcard in self.gfxcards:
+ if gfxcard.getPCIBusID()==bus_id:
+ return gfxcard
+ return None
+
+ def getPrimaryScreen(self):
+ return self.primary_screen
+
+ def getSecondaryScreen(self):
+ return self.secondary_screen
+
+ def getScreenRole(self,screen):
+ if screen is self.primary_screen:
+ return XSetup.ROLE_PRIMARY
+ if screen is self.secondary_screen:
+ return XSetup.ROLE_SECONDARY
+ return XSetup.ROLE_UNUSED
+
+ def setScreenRole(self,screen,role):
+ if role==XSetup.ROLE_PRIMARY:
+ if screen is self.secondary_screen:
+ # Swap the roles around.
+ self.secondary_screen = self.primary_screen
+ self.primary_screen = screen
+ else:
+ self.primary_screen = screen
+
+ elif role==XSetup.ROLE_SECONDARY:
+ if screen is self.primary_screen:
+ # Swap the roles around.
+ self.primary_screen = self.secondary_screen
+ self.secondary_screen = screen
+ else:
+ self.secondary_screen = screen
+ else:
+ # ROLE_UNUSED
+ if screen is not self.primary_screen and screen is not self.secondary_screen:
+ return
+
+ # Find the first screen unused.
+ for unused_screen in self.getAllScreens():
+ if screen is not self.primary_screen and screen is not self.secondary_screen:
+ if screen is self.primary_screen:
+ self.primary_screen = unused_screen
+ else:
+ self.secondary_screen = unused_screen
+ return
+
+ def mayModifyXorgConfig(self):
+ """Check if the current user may modify the xorg.conf file
+
+ Returns True or False
+ """
+ return os.access(self.xorg_config_filename, os.W_OK|os.R_OK)
+
+ def mayModifyGamma(self):
+ """Check if the current user may modify the gamma settings.
+
+ Returns True or False.
+ """
+ return self.isGammaLive() or self.mayModifyXorgConfig()
+
+ def mayModifyResolution(self):
+ """Check if the current user may modify the screen resolution.
+
+ Returns True or False.
+ """
+ for screen in self.x_live_info.getScreens():
+ if screen.resolutionSupportAvailable():
+ return True
+
+ return self.mayModifyXorgConfig()
+
+ def isGammaLive(self):
+ """Check if gamma changes are done immediately.
+
+ Returns True or False.
+ """
+ return True # FIXME depends on the xvid extension and if86misc.
+
+ def isLiveResolutionConfigChanged(self):
+ """Check if the live server configuration is changed
+
+ Checks if the configuration has been modified with changes that can be
+ pushed to the running X server.
+
+ Returns True or False.
+ """
+ # XRandR tends to break Xinerama
+ if self.primary_screen._getGfxCard().getLayout() in \
+ (XSetup.LAYOUT_SINGLE_XINERAMA, XSetup.LAYOUT_DUAL):
+ return False
+ for screen in self.getAllScreens():
+ if screen.isLive() and screen.isResolutionSettingsChanged():
+ return True
+
+ return False
+
+ def applyLiveResolutionChanges(self):
+ """Apply any changes that can be done live
+
+ Returns True if running server resolution has been changed.
+ """
+ rc = False
+ for s in self.getUsedScreens():
+ if s.isResolutionSettingsChanged():
+ s.applyResolutionSettings()
+ rc = rc or s.isResolutionLive()
+ return rc
+
+ def acceptLiveResolutionChanges(self):
+ """
+
+
+ """
+ for s in self.getUsedScreens():
+ s.acceptResolutionSettings()
+
+ def rejectLiveResolutionChanges(self):
+ """Rejects and reverts the last live server resolution changes
+
+ Rejects the last resolution changes that were made to the live server
+ and reverts it back to the previous configuration.
+ """
+ for s in self.getUsedScreens():
+ s.revertResolutionSettings()
+
+ def isLiveGammaConfigChanged(self):
+ """Check if the live server gamma configuration is changed
+
+ Checks if the configuration has been modified with changes that can be
+ pushed to the running X server.
+
+ Returns True or False.
+ """
+ for screen in self.getAllScreens():
+ if screen.isLive() and screen.isGammaSettingsChanged():
+ return True
+
+ return False
+
+ def applyLiveGammaChanges(self):
+ """Apply any changes that can be done live
+
+ Returns True if running server gamma has been changed.
+ """
+ rc = False
+ for s in self.getUsedScreens():
+ if s.isGammaSettingsChanged():
+ s.applyGammaSettings()
+ rc = rc or s.isGammaLive()
+ return rc
+
+ def acceptLiveGammaChanges(self):
+ """
+
+
+ """
+ for s in self.getUsedScreens():
+ s.acceptGammaSettings()
+
+ def rejectLiveGammaChanges(self):
+ """Rejects and reverts the last live server gamma changes
+
+ Rejects the last gamma changes that were made to the live server
+ and reverts it back to the previous configuration.
+ """
+ for s in self.getUsedScreens():
+ s.revertGammaSettings()
+
+ def isXorgConfigChanged(self):
+ """Check if the xorg.config needs to updated
+
+ Returns True if the xorg.config file needs to updated to reflect new changes.
+ """
+ changed = self.original_layout!=self.layout or \
+ self.original_orientation!=self.orientation or \
+ self.original_primary_screen!=self.primary_screen or \
+ self.original_secondary_screen!=self.secondary_screen
+
+ for gfxcard in self.gfxcards:
+ changed = changed or gfxcard.isXorgConfigChanged()
+ for screen in self.getAllScreens():
+ changed = changed or screen.isXorgConfigChanged()
+ return changed
+
+ def getRestartHint(self):
+ hint = XSetup.RESTART_NONE
+ if self.original_layout!= self.layout or self.original_orientation != self.orientation:
+ hint = XSetup.RESTART_X
+ return max(hint,max( [gfxcard.getRestartHint() for gfxcard in self.gfxcards] ))
+
+ def reset(self):
+ for card in self.gfxcards:
+ card.reset()
+
+ self.layout = self.original_layout
+ self.orientation = self.original_orientation
+ self.primary_screen = self.original_primary_screen
+ self.secondary_screen = self.original_secondary_screen
+
+ # Dualhead and secondary monitor support ----------
+ def getLayout(self):
+ return self.layout
+
+ def setLayout(self,layout):
+ """
+
+ Keyword arguments:
+ layout - XSetup.LAYOUT_SINGLE, XSetup.LAYOUT_CLONE or XSetup.LAYOUT_DUAL.
+ """
+ self.layout = layout
+
+ if self.layout==XSetup.LAYOUT_SINGLE:
+ for gfxcard in self.gfxcards:
+ gfxcard.setLayout(XSetup.LAYOUT_SINGLE)
+ self.xinerama = False
+ elif self.layout==XSetup.LAYOUT_DUAL:
+ # 'xinerama' screens can be combined by the ServerLayout xorg.conf
+ # sections into a multihead configurations. Gfxcard objects just
+ # have to output xinerama friendly xorg.conf device and screen
+ # sections.
+ self.xinerama = True
+ for gfxcard in self.gfxcards:
+ gfxcard.setLayout(XSetup.LAYOUT_SINGLE_XINERAMA)
+
+ # Check if the primary and secondary screen are on the same gfx card.
+ # If so then see if the gfxcard can directly (read: accelarated) support
+ # the layout we want.
+ if self.primary_screen._getGfxCard() is self.secondary_screen._getGfxCard():
+ if self.primary_screen._getGfxCard().getAvailableLayouts() & self.layout:
+ self.primary_screen._getGfxCard().setLayout(self.layout)
+ self.xinerama = False
+
+ elif self.layout==XSetup.LAYOUT_CLONE:
+
+ # If the graphics card itself has both heads and it can offer a better clone
+ # mode, then we use that instead of faking it with xinerama.
+ if (self.secondary_screen._getGfxCard() is self.primary_screen._getGfxCard()) \
+ and (self.primary_screen._getGfxCard()._getAvailableLayouts() & XSetup.LAYOUT_CLONE):
+ self.xinerama = False
+ for gfxcard in self.gfxcards:
+ gfxcard.setLayout(XSetup.LAYOUT_CLONE)
+ else:
+ self.xinerama = True
+ for gfxcard in self.gfxcards:
+ gfxcard.setLayout(XSetup.LAYOUT_SINGLE_XINERAMA)
+
+ def mayModifyLayout(self):
+ return self.mayModifyXorgConfig()
+
+ def getAvailableLayouts(self):
+ if self.secondary_screen is not None:
+ return XSetup.LAYOUT_SINGLE | XSetup.LAYOUT_DUAL | XSetup.LAYOUT_CLONE
+ else:
+ return XSetup.LAYOUT_SINGLE
+
+ def setDualheadOrientation(self,orientation):
+ """ Sets orientation of monitor to one of
+ XSetup.ABOVE, XSetup.UNDER, XSetup.LEFTOF, XSetup.RIGHTOF
+ """
+ self.orientation = orientation
+
+ def getDualheadOrientation(self):
+ """ Returns the current orientation, one of
+ XSetup.ABOVE, XSetup.UNDER, XSetup.LEFTOF, XSetup.RIGHTOF
+ """
+ return self.orientation
+
+ def isHWAccelerated(self):
+ # FIXME:
+ # if twinview-alike and screen[0].res = screen[1].res
+ # else: if primary screen
+ return True
+
+ # Internal ----------
+ def _addScreen(self,screen):
+ self.screens.append(screen)
+
+ def _addGfxCard(self,gfxcard):
+ self.gfxcards.append(gfxcard)
+
+ def _getColorDepth(self):
+ return min([s._getColorDepth() for s in self.getUsedScreens()])
+
+ def __str__(self):
+ string = "XSetup:\n"
+ string += " Layout: %s\n" % ({self.LAYOUT_SINGLE: "Single",
+ self.LAYOUT_CLONE: "Clone",
+ self.LAYOUT_DUAL: "Dual"
+ }[self.getLayout()])
+
+ i = 1
+ for gfxcard in self.gfxcards:
+ string += " Gfxcard %i: %s\n" % (i,str(gfxcard))
+ i += 1
+ return string
+
+############################################################################
+class GfxCard(object):
+ """Represents a graphics card that is present in this computer."""
+
+ def __init__(self, setup, pci_id=None, x_device=None, detected_model=None, proprietary_driver=False):
+ self.setup = setup
+ self.x_config = self.setup.xorg_config
+ self.layout = XSetup.LAYOUT_SINGLE
+ self.pci_id = pci_id
+ self.screens = []
+
+ self.detected_model = detected_model
+ self.proprietary_driver = proprietary_driver
+
+ self.video_ram = 1024
+
+ # The (optimised) layout that was detected in xorg.conf on device level.
+ self.detected_layout = XSetup.LAYOUT_SINGLE
+ self.detected_orientation = XSetup.POSITION_LEFTOF
+
+ self.x_device = [] # This can be a list of xorg device sections
+ if x_device is not None:
+ self.x_device.append(x_device)
+
+ def _addScreen(self,screen):
+ self.screens.append(screen)
+
+ def _addXDevice(self,x_device):
+ self.x_device.append(x_device)
+
+ def _finalizeInit(self):
+ # Finish initalisation.
+
+ if len(self.x_device)!=0:
+
+ # Try to find a gfx card model.
+ self.gfxcard_model = None
+ if self.x_device[0].boardname is not None:
+ # Look up the model by boardname.
+ try:
+ self.gfxcard_model = GetGfxCardModelDB().getGfxCardModelByName(self.x_device[0].boardname)
+ except KeyError:
+ pass
+
+ if self.gfxcard_model is None:
+ # OK, try looking it up by driver.
+ try:
+ self.gfxcard_model = GetGfxCardModelDB().getGfxCardModelByDriverName(self.x_device[0].driver)
+ except KeyError:
+ self.gfxcard_model = self.detected_model
+
+ # Write the current driver in the model
+ if self.x_device[0].driver:
+ self.gfxcard_model.setDriver(self.x_device[0].driver)
+
+ self.proprietary_driver = self.gfxcard_model.getProprietaryDriver()==self.x_device[0].driver
+
+ if self.x_device[0].videoram is not None:
+ self.video_ram = int(self.x_device[0].videoram)
+
+ # Detect layout
+ if len(self.screens)>=2:
+ # Xorg ATI driver.
+ if self._getCurrentDriver() in ['ati','r128','radeon']:
+ merged = self.x_device[0].option.getOptionByName('mergedfb')
+ if merged is not None and xorgconfig.toBoolean(merged._row[2]):
+ self.detected_layout = XSetup.LAYOUT_CLONE
+ # ATI proprietary driver
+ elif self._getCurrentDriver()=='fglrx':
+ desktopsetup = self.x_device[0].option.getOptionByName('desktopsetup')
+ if desktopsetup is not None and desktopsetup._row[2]=='c':
+ self.detected_layout = XSetup.LAYOUT_CLONE
+ # nVidia proprietary driver
+ elif self._getCurrentDriver()=='nvidia':
+ twinview = self.x_device[0].option.getOptionByName('twinview')
+ if twinview is not None:
+ desktopsetup = self.x_device[0].option.getOptionByName('twinvieworientation')
+ if desktopsetup is not None and desktopsetup._row[2].lower()=='clone':
+ self.detected_layout = XSetup.LAYOUT_CLONE
+ # i810 driver
+ elif self._getCurrentDriver() in ['i810', 'intel']:
+ clone = self.x_device[0].option.getOptionByName('clone')
+ if clone is not None:
+ if xorgconfig.toBoolean(clone._row[2]):
+ self.detected_layout = XSetup.LAYOUT_CLONE
+
+ else:
+ self.gfxcard_model = self.detected_model
+
+ self.original_gfxcard_model = self.gfxcard_model
+ self.original_proprietary_driver = self.proprietary_driver
+ self.original_layout = self.layout
+
+ # Give the screens a chance to finish initialisation.
+ for screen in self.screens:
+ screen._finalizeInit()
+ for screen in self.screens:
+ screen._resyncResolution()
+
+ def _getDetectedLayout(self):
+ return self.detected_layout
+
+ def _getDetectedDualheadOrientation(self):
+ return self.detected_orientation
+
+ def _getDetectedGfxCardModel(self):
+ return self.detected_model
+
+ def getScreens(self):
+ return self.screens[:]
+
+ def getGfxCardModel(self):
+ return self.gfxcard_model
+
+ def setGfxCardModel(self,gfx_card_model):
+ self.gfxcard_model = gfx_card_model
+
+ for screen in self.screens:
+ screen._resyncResolution()
+
+ def getXorgDeviceSection(self,index):
+ return self.x_device[index]
+
+ def isProprietaryDriver(self):
+ return self.proprietary_driver
+
+ def setProprietaryDriver(self,proprietary_driver):
+ self.proprietary_driver = proprietary_driver
+
+ def getDetectedGfxCardModel(self):
+ return self.detected_model
+
+ def getPCIBusID(self):
+ return self.pci_id
+
+ def isXorgConfigChanged(self):
+ return self.original_gfxcard_model is not self.gfxcard_model or \
+ self.original_proprietary_driver != self.proprietary_driver or \
+ self.original_layout != self.layout
+
+ def reset(self):
+ for screen in self.screens:
+ screen.reset()
+
+ self.gfxcard_model = self.original_gfxcard_model
+ self.proprietary_driver = self.original_proprietary_driver
+
+ def isAGP(self):
+ return self.pci_id=='PCI:1:0:0' # FIXME this might not be accurate.
+
+ def getLayout(self):
+ return self.layout
+
+ def setLayout(self,layout):
+ self.layout = layout
+ for screen in self.screens:
+ screen._resyncResolution()
+
+ def getAvailableLayouts(self):
+ layouts = XSetup.LAYOUT_SINGLE
+ if len(self.screens)==2:
+ if self._getCurrentDriver() in ['fglrx', 'nvidia', 'i810']:
+ layouts |= XSetup.LAYOUT_CLONE | XSetup.LAYOUT_DUAL
+ return layouts
+
+ def getVideoRam(self):
+ """
+ Get the amount of video ram that this card has.
+
+ The values returned have the following meanings:
+ 256 => 256 kB
+ 512 => 512 kB
+ 1024 => 1 MB
+ 2048 => 2 MB
+ 4096 => 4 MB
+ 8192 => 8 MB
+ 16384 => 16 MB
+ 32768 => 32 MB
+ 65536 => 64 MB or more
+
+ The video ram setting is only used if the selected graphics card model requires
+ that the amount of video ram be explicitly specified. That is to say that
+ gfxcard.getGfxCardModel().getNeedVideoRam() returns true.
+
+ Returns an integer from the list above.
+ """
+ return self.video_ram
+
+ def setVideoRam(self,ram):
+ self.video_ram = ram
+
+ for screen in self.screens:
+ screen._resyncResolution()
+
+ def _getCurrentDriver(self):
+ if self.proprietary_driver:
+ return self.gfxcard_model.getProprietaryDriver()
+ else:
+ return self.gfxcard_model.getDriver()
+
+ def getRestartHint(self):
+ # The ATI propreitary drivers need a special AGP kernel module to be loaded.
+ # The best, and often only way to get this module loaded is to reboot.
+ # The same applies for removing the module.
+ hint = XSetup.RESTART_NONE
+
+ if self.original_proprietary_driver:
+ original_gfx_driver = self.original_gfxcard_model.getProprietaryDriver()
+ else:
+ original_gfx_driver = self.original_gfxcard_model.getDriver()
+
+ current_gfx_driver = self._getCurrentDriver()
+
+ if current_gfx_driver!=original_gfx_driver:
+ # Restart X if the driver is different.
+ hint = XSetup.RESTART_X
+
+ # Layout changes also require an X server restart.
+ if self.original_layout!=self.layout:
+ hint = XSetup.RESTART_X
+
+ if original_gfx_driver=='fglrx' and current_gfx_driver in ['ati','r128','radeon']:
+ hint = XSetup.RESTART_SYSTEM
+
+ # If a different kernel module is needed, then restart the system.
+ kernel_module_list = self._getLoadedKernelModules()
+ if self._needATIFglrx() and 'fglrx' not in kernel_module_list:
+ hint = XSetup.RESTART_SYSTEM
+ else:
+ if 'fglrx' in kernel_module_list:
+ hint = XSetup.RESTART_SYSTEM
+
+ hintlist = [hint]
+ hintlist.extend([screen.getRestartHint() for screen in self.screens])
+ return max(hintlist)
+
+ def _needATIFglrx(self):
+ """Work out if the current configuration require the ATI fglrx kernel module."""
+ return self.isAGP() and self.getGfxCardModel() is not None and \
+ self.getGfxCardModel().getProprietaryDriver()=='fglrx' and self.isProprietaryDriver()
+
+ def _getLoadedKernelModules(self):
+ return [line.split()[0] for line in open('/proc/modules')]
+
+ def _getAvailableLayouts(self):
+ if len(self.screens)>=2:
+ drv = self._getCurrentDriver()
+ layouts = XSetup.LAYOUT_SINGLE | XSetup.LAYOUT_DUAL
+ if drv in ['fglrx', 'nvidia', 'i810']:
+ layouts |= XSetup.LAYOUT_CLONE
+ elif drv in ['ati', 'radeon', 'r128', 'intel']:
+ layouts = XSetup.LAYOUT_SINGLE
+ return layouts
+ else:
+ return XSetup.LAYOUT_SINGLE
+
+ def __str__(self):
+ screen_string = ",".join([str(s) for s in self.screens])
+ driver = self._getCurrentDriver()
+ return "GfxCard: {model:"+str(self.gfxcard_model)+", driver:"+driver+", screens:"+screen_string+"}"
+
+ def _syncXorgConfig(self):
+ if self.proprietary_driver and self.gfxcard_model.getProprietaryDriver() is not None:
+ driver = self.gfxcard_model.getProprietaryDriver()
+ else:
+ driver = self.gfxcard_model.getDriver()
+
+ # FIXME maybe this module stuff should migrate into XSetup.
+
+ # --- Fix the module section ---
+
+ # $raw_X->set_devices($card, @{$card->{cards} || []});
+ # $raw_X->get_ServerLayout->{Xinerama} = { commented => !$card->{Xinerama}, Option => 1 }
+ #if defined $card->{Xinerama};
+ module_sections = self.x_config.getSections("Module")
+ if len(module_sections) > 0:
+ module = module_sections[0]
+ else:
+ module = self.x_config.makeSection(None, ["Section", "Module"])
+ self.x_config.append(module)
+
+ module.removeModule('GLcore')
+ module.removeModule('glx')
+ module.removeModule('dbe')
+
+ # Mandriva
+ #module.removeModule("/usr/X11R6/lib/modules/extensions/libglx.so")
+
+ if driver=='nvidia':
+ module.addModule("glx")
+
+ # Mandriva
+ # This loads the NVIDIA GLX extension module.
+ # IT IS IMPORTANT TO KEEP NAME AS FULL PATH TO libglx.so ELSE
+ # IT WILL LOAD XFree86 glx module and the server will crash.
+
+ # module.addModule("/usr/X11R6/lib/modules/extensions/libglx.so")
+ # FIXME lib64
+ elif self.gfxcard_model.getProprietaryDriver()!='fglrx':
+ module.addModule('glx')
+ module.addModule('GLcore')
+
+ #module.removeModule("/usr/X11R6/lib/modules/extensions/libglx.a")
+ if driver=='fglrx':
+ module.addModule("glx")
+ module.addModule("dbe")
+ #elif driver!='nvidia':
+ # module.addModule("/usr/X11R6/lib/modules/extensions/libglx.a")
+
+ # DRI
+ module.removeModule('dri')
+ if self.gfxcard_model.getDriGlx():
+ module.addModule('dri')
+
+ module.removeModule('v4l')
+ if not (self.gfxcard_model.getDriGlx() and self.gfxcard_model.getDriver()=='r128'):
+ module.addModule('v4l')
+
+ # --- Fix all of the Device sections ---
+ for i in range(len(self.screens)):
+
+ if i==len(self.x_device):
+ new_device = self.x_config.makeSection('',['section','device'])
+ self.x_config.append(new_device)
+ self.x_device.append(new_device)
+ new_device.identifier = self.x_config.createUniqueIdentifier("device")
+
+ identifier = self.x_device[i].identifier
+ busid = self.x_device[i].busid
+
+ self.x_device[i].clear()
+
+ # Create a new Device section in the Xorg config file.
+ self.x_device[i].identifier = identifier
+ self.x_device[i].boardname = self.gfxcard_model.getName()
+ self.x_device[i].busid = self.pci_id
+ self.x_device[i].driver = driver
+ self.x_device[i].screen = str(i)
+
+ if self.gfxcard_model.getVendor() is not None:
+ self.x_device[i].vendorname = self.gfxcard_model.getVendor()
+
+ if self.gfxcard_model.getNeedVideoRam():
+ self.x_device[i].videoram = self.video_ram
+
+ # Setup Clone mode for second heads.
+ if driver in ["ati","r128","radeon"]: # Xorg ATI driver
+ merged_value = {
+ XSetup.LAYOUT_CLONE: "on",
+ XSetup.LAYOUT_SINGLE: "off",
+ XSetup.LAYOUT_DUAL: "on",
+ XSetup.LAYOUT_SINGLE_XINERAMA: "off"
+ }[self.layout]
+
+ merged_option = self.x_device[i].option.makeLine(None,["MergedFB",merged_value])
+ self.x_device[i].option.append(merged_option)
+
+ if self.layout==XSetup.LAYOUT_CLONE:
+ monitor_model = self.setup.getSecondaryScreen().getMonitorModel()
+ if monitor_model is not None:
+ if monitor_model.getHorizontalSync() is not None:
+ hsyncline = self.x_device[i].option.makeLine(None,['CRT2HSync',monitor_model.getHorizontalSync()])
+ self.x_device[i].option.append(hsyncline)
+
+ if monitor_model.getVerticalSync() is not None:
+ vsyncline = self.x_device[i].option.makeLine(None,['CRT2VRefresh',monitor_model.getVerticalSync()])
+ self.x_device[i].option.append(vsyncline)
+
+ # FIXME option "CloneMode" "off"
+
+ if driver=='fglrx': # ATI proprietary driver.
+ if self.layout==XSetup.LAYOUT_CLONE:
+ new_option = self.x_device[i].option.makeLine(None,["DesktopSetup","c"])
+ self.x_device[i].option.append(new_option)
+
+ # FIXME this probably won't work on laptops and DVI. The user will probably
+ # have to manually select the monitor types.
+
+ # We do this to make sure that the driver starts up in clone mode even
+ # if it can't detect the second monitor.
+ new_option = self.x_device[i].option.makeLine(None,["ForceMonitors","crt1,crt2"])
+ self.x_device[i].option.append(new_option)
+
+ monitor_model = self.setup.getSecondaryScreen().getMonitorModel()
+ if monitor_model is not None:
+ if monitor_model.getHorizontalSync() is not None:
+ hsyncline = self.x_device[i].option.makeLine(None,['HSync2',monitor_model.getHorizontalSync()])
+ self.x_device[i].option.append(hsyncline)
+
+ if monitor_model.getVerticalSync() is not None:
+ vsyncline = self.x_device[i].option.makeLine(None,['VRefresh2',monitor_model.getVerticalSync()])
+ self.x_device[i].option.append(vsyncline)
+
+ if driver=='nvidia': # nVidia proprietary driver.
+ if self.layout==XSetup.LAYOUT_CLONE:
+ new_option = self.x_device[i].option.makeLine(None,["TwinView","on"])
+ self.x_device[i].option.append(new_option)
+ new_option = self.x_device[i].option.makeLine(None,["TwinViewOrientation","clone"])
+ self.x_device[i].option.append(new_option)
+
+ monitor_model = self.setup.getSecondaryScreen().getMonitorModel()
+ if monitor_model is not None:
+ if monitor_model.getHorizontalSync() is not None:
+ hsyncline = self.x_device[i].option.makeLine(None,['SecondMonitorHorizSync',monitor_model.getHorizontalSync()])
+ self.x_device[i].option.append(hsyncline)
+
+ if monitor_model.getVerticalSync() is not None:
+ vsyncline = self.x_device[i].option.makeLine(None,['SecondMonitorVertRefresh',monitor_model.getVerticalSync()])
+ self.x_device[i].option.append(vsyncline)
+
+ if driver in ['i810']: # i810 driver
+ if self.layout in (XSetup.LAYOUT_SINGLE_XINERAMA,
+ XSetup.LAYOUT_DUAL,
+ XSetup.LAYOUT_CLONE):
+ new_option = self.x_device[i].option.makeLine(None,["MonitorLayout", "CRT,LFP"])
+ self.x_device[i].option.append(new_option)
+ if self.layout==XSetup.LAYOUT_CLONE:
+ new_option = self.x_device[i].option.makeLine(None,["Clone","on"])
+ self.x_device[i].option.append(new_option)
+
+ # Find the closest matching refresh rate for the second monitor.
+ primary_screen = self.setup.getPrimaryScreen()
+ secondary_screen = self.setup.getSecondaryScreen()
+ resolution = primary_screen.getAvailableResolutions()[primary_screen.getResolutionIndex()]
+ secondary_resolution_index = secondary_screen.getAvailableResolutions().index(resolution)
+ secondary_rates = secondary_screen.getAvailableRefreshRatesForResolution(secondary_resolution_index)
+ primary_rate = primary_screen.getAvailableRefreshRates()[primary_screen.getRefreshRateIndex()]
+
+ best_rate = 50
+ best_score = 1000000
+ for rate in secondary_rates:
+ score = abs(rate-primary_rate)
+ if score < best_score:
+ best_score = score
+ best_rate = rate
+
+ # Specify a working refresh rate for the second monitor.
+ new_option = self.x_device[i].option.makeLine(None,["CloneRefresh",str(best_rate)])
+ self.x_device[i].option.append(new_option)
+
+ self._insertRawLinesIntoConfig(self.x_device[i], self.gfxcard_model.getLines())
+
+ self.screens[i]._syncXorgConfig(self.x_device[i])
+
+ self.original_gfxcard_model = self.gfxcard_model
+ self.original_proprietary_driver = self.proprietary_driver
+ self.original_layout = self.layout
+
+ def _insertRawLinesIntoConfig(self,section,lines):
+ reader = csv.reader(lines,delimiter=' ')
+ for row in reader:
+ if len(row)>=2:
+ if row[0].lower()=="option":
+ option = section.option.makeLine(None,row[1:])
+ section.option.append(option)
+
+############################################################################
+class Screen(object):
+ """Represents a single output/screen/monitor on a graphics card.
+
+ Changes to the screen resolution, refresh rate, rotation and reflection
+ settings are not made active until the method applyResolutionSettings() is
+ called. After calling applyResolutionSettings(), changes can be backed out
+ of with the revertResolutionSettings() method. If you, should I say the user,
+ is satisfied with the new settings then call the acceptResolutionSettings()
+ method.
+
+ Gamma correction settings take effect immediately, and don't take part in the
+ apply, revert and accept mechanism above.
+ """
+
+ RR_Rotate_0 = xf86misc.XF86Screen.RR_Rotate_0
+ RR_Rotate_90 = xf86misc.XF86Screen.RR_Rotate_90
+ RR_Rotate_180 = xf86misc.XF86Screen.RR_Rotate_180
+ RR_Rotate_270 = xf86misc.XF86Screen.RR_Rotate_270
+ RR_Reflect_X = xf86misc.XF86Screen.RR_Reflect_X
+ RR_Reflect_Y = xf86misc.XF86Screen.RR_Reflect_Y
+
+ def __init__(self, gfx_card=None, x_config_screen=None, x_config_monitor=None, \
+ monitor_model=None, x_config=None):
+ """Create a Screen object.
+
+ This method is private to this module.
+ """
+ self.gfx_card = gfx_card
+ self.x_config_screen = x_config_screen
+
+ self.x_config_monitor = x_config_monitor
+ self.monitor_model = monitor_model
+ self.monitor_aspect = ModeLine.ASPECT_4_3
+ self.original_monitor_model = monitor_model
+ self.x_config = x_config
+
+ # Cookup some sensible screen sizes.
+ self.standard_sizes = GetMonitorModeDB().getAllResolutions()
+
+ self.x_live_screen = None
+
+ # Intialise the gamma settings with defaults.
+ self.redgamma = 1.0
+ self.greengamma = 1.0
+ self.bluegamma = 1.0
+ self.allgamma = 1.0
+ self.settingall = True
+
+ # If there is a monitor xorg.conf section then look there for gamma info.
+ if self.x_config_monitor is not None:
+ gamma_row = self.x_config_monitor.getRow('gamma')
+ if gamma_row is not None:
+ # Read the gamma info out of xorg.conf
+ try:
+ if len(gamma_row)==3:
+ self.redgamma = float(gamma_row[0])
+ self.greengamma = float(gamma_row[1])
+ self.bluegamma = float(gamma_row[2])
+ self.allgamma = self.redgamma
+ elif len(gamma_row)==1:
+ self.allgamma = float(gamma_row[0])
+ self.redgamma = self.allgamma
+ self.greengamma = self.allgamma
+ self.bluegamma = self.allgamma
+ except ValueError:
+ pass
+
+ # Try to work out if this monitor is setup for 4:3 modes or 16:9.
+ aspect_43_count = 0
+ aspect_169_count = 0
+ # Count the number of 4:3 modelines compared to 16:9 modes.
+ for mode in self.x_config_monitor.modeline:
+ try:
+ # Don't count the fallback resolution. It is also present
+ # if the monitor is widescreen. Just ignore it.
+ if (mode._row[2],mode._row[6])!=FALLBACK_RESOLUTION:
+ if MonitorModeDB.aspectRatio(mode._row[2],mode._row[6])==ModeLine.ASPECT_4_3:
+ aspect_43_count += 1
+ else:
+ aspect_169_count += 1
+ except IndexError:
+ pass
+
+ if aspect_43_count >= aspect_169_count:
+ self.monitor_aspect = ModeLine.ASPECT_4_3
+ else:
+ self.monitor_aspect = ModeLine.ASPECT_16_9
+
+ # Backup the settings
+ (self.originalredgamma, self.originalgreengamma, self.originalbluegamma) = (
+ self.redgamma, self.greengamma, self.bluegamma)
+ self.originalallgamma = self.allgamma
+ self.originalsettingall = self.settingall
+ self.original_monitor_aspect = self.monitor_aspect
+
+ def _setXLiveScreen(self,x_live_screen):
+ self.x_live_screen = x_live_screen
+
+ def _finalizeInit(self):
+
+ if self.x_live_screen is not None and self.x_live_screen.resolutionSupportAvailable():
+ self._computeSizesFromXorg()
+
+ (cw,ch,x,x) = self.x_live_screen.getSize()
+ i = 0
+ self.currentsizeindex = 0
+ for size in self.available_sizes:
+ if (cw,ch)==size:
+ self.currentsizeindex = i
+ break
+ i += 1
+
+ self.currentrefreshrate = self.x_live_screen.getRefreshRate()
+ self.currentrotation = self.x_live_screen.getRotation() & (
+ Screen.RR_Rotate_0 | Screen.RR_Rotate_90 | Screen.RR_Rotate_180 | Screen.RR_Rotate_270)
+ self.currentreflection = self.x_live_screen.getRotation() & (
+ Screen.RR_Reflect_X | Screen.RR_Reflect_Y)
+
+ else:
+ # There is no live info, so try to collect some info out
+ # of xorg.conf itself.
+
+ # Cookup some reasonable screen resolutions based on what we know about the monitor.
+ self._computeSizesFromMonitor()
+
+ (cw,ch) = self.available_sizes[0]
+ self.currentrefreshrate = None
+
+ # Dig through the Display sections in the xorg.conf Screen section
+ # and try to find the first resolution/mode.
+ if self.x_config_screen is not None:
+ default_depth = self.x_config_screen.defaultdepth
+
+ current_mode_name = None
+
+ for display_section in self.x_config_screen.getSections('display'):
+ if default_depth is None or display_section.depth==default_depth:
+ modes_row = display_section.getRow('modes')
+ if modes_row is not None and len(modes_row)>=1:
+ current_mode_name = modes_row[0]
+ break
+
+ if current_mode_name is not None:
+ for mode in self.mode_list:
+ if mode.getName()==current_mode_name:
+ cw = mode.getWidth()
+ ch = mode.getHeight()
+ self.currentrefreshrate = mode.getVRefresh()
+ break
+
+ # Work out the index of the current resolution
+ i = 0
+ for size in self.available_sizes:
+ if (cw,ch)==size:
+ self.currentsizeindex = i
+ break
+ i += 1
+
+ if self.currentrefreshrate is None:
+ self.currentrefreshrate = self.getAvailableRefreshRates()[0]
+
+ self.currentrotation = Screen.RR_Rotate_0 # FIXME
+ self.currentreflection = 0 # FIXME
+
+ # Gamma settings
+ if self.x_live_screen is not None:
+ try:
+ (self.redgamma, self.greengamma, self.bluegamma, self.allgama,
+ self.settingall) = self._getGammaFromLiveScreen()
+ except:
+ (self.redgamma, self.greengamma, self.bluegamma, self.allgama,
+ self.settingall) = self._getGammaFromXorg()
+ else:
+ (self.redgamma, self.greengamma, self.bluegamma, self.allgama,
+ self.settingall) = self._getGammaFromXorg()
+
+ self.originalsizeindex = self.currentsizeindex
+ self.original_size = self.getAvailableResolutions()[self.currentsizeindex]
+ self.originalrefreshrate = self.currentrefreshrate
+ self.originalrotation = self.currentrotation
+ self.originalreflection = self.currentreflection
+
+ self.originalredgamma = self.redgamma
+ self.originalgreengamma = self.greengamma
+ self.originalbluegamma = self.bluegamma
+
+ self.originalallgamma = self.allgamma
+ self.originalsettingall = self.settingall
+
+ def _getGammaFromLiveScreen(self):
+ """Reads the gamma information from the x server"""
+ # Read the current gamma settings directly from X.
+ (redgamma, greengamma, bluegamma) = self.x_live_screen.getGamma()
+
+ # Round the values off to 2 decimal places.
+ redgamma = round(self.redgamma,2)
+ greengamma = round(self.greengamma,2)
+ bluegamma = round(self.bluegamma,2)
+
+ allgamma = redgamma
+ settingall = redgamma==greengamma==bluegamma
+ return (redgamma, greengamma, bluegamma, allgamma, settingall)
+
+ def _getGammaFromXorg(self):
+ """Extracts the gamma information from the xorg configuration"""
+ # Set some gamma defaults
+ redgamma = greengamma = bluegamma = allgamma = 1.0
+ settingall = True
+
+ # Look for gamma information in xorg.conf
+ if self.x_config_monitor is not None:
+ gamma_row = self.x_config_monitor.getRow('gamma')
+ if gamma_row is not None:
+ try:
+ if len(gamma_row)==1:
+ allgamma = float(gamma_row[0])
+ redgamma = greengamma = bluegamma = allgamma
+ self.settingall = True
+ elif len(gamma_row.row)==3:
+ redgamma = float(gamma_row[0])
+ greengamma = float(gamma_row[1])
+ bluegamma = float(gamma_row[2])
+ allgamma = self.redgamma
+ settingall = False
+ except ValueError:
+ pass
+ return (redgamma, greengamma, bluegamma, allgamma, settingall)
+
+ def _computeSizesFromXorg(self):
+ all_sizes = self.x_live_screen.getAvailableSizes()
+ self.available_sizes = []
+
+ # Some dualhead setups repolonger sizelists, those are unlikely
+ # to be standard zes, we still want to be able to use them.s
+ for i in range(len(all_sizes)):
+ if len(all_sizes[i]) > 2:
+ self.available_sizes.append(all_sizes[i][:2])
+ elif len(alls_sizes[i]) == 2:
+ if (size[0],size[1]) in self.standard_sizes:
+ self.available_sizes.append(all_sizes[i])
+ self.available_sizes.sort()
+
+ def _computeSizesFromMonitor(self):
+ monitor_model = self.monitor_model
+
+ if monitor_model is None:
+ # If there is no monitor model selected, then just use a default
+ # model so that we at least get some fairly safe resolutions.
+ monitor_model = GetMonitorModelDB().getMonitorByName("Monitor 800x600")
+
+ self.mode_list = GetMonitorModeDB().getAvailableModes(monitor_model,self.monitor_aspect)
+ resolutions = set()
+ for mode in self.mode_list:
+ pw = mode.getWidth()
+ ph = mode.getHeight()
+ if (pw,ph) in self.standard_sizes and pw>=640 and ph>=480:
+ resolutions.add( (pw,ph) )
+
+ # Filter the sizes by the amount of video ram that we have.
+ color_bytes = self._getColorDepth()/8
+ if self.gfx_card.getGfxCardModel().getNeedVideoRam():
+ video_memory = self.gfx_card.getVideoRam()
+ else:
+ video_memory = 65536 # Big enough.
+ video_memory *= 1024 # Convert to bytes.
+
+ # Filter the list of modes according to available memory.
+ self.available_sizes = [mode for mode in resolutions if mode[0]*mode[1]*color_bytes <= video_memory]
+
+ self.available_sizes.sort()
+
+ def _getColorDepth(self):
+ if self.gfx_card.getGfxCardModel().getNeedVideoRam():
+ # If this card has limited memory then we fall back to 16bit colour.
+ if self.gfx_card.getVideoRam() <= 4096:
+ return 16 # 16bit colour
+ else:
+ return 24 # 24bit colour
+ else:
+ return 24
+
+ def getName(self):
+ try:
+ return "Screen %i" % (self.gfx_card.setup.getUsedScreens().index(self)+1)
+ except ValueError:
+ return "Screen ?"
+
+ def isLive(self):
+ """Returns True if this screen is currently being used by the X server.
+ """
+ return self.x_live_screen is not None
+
+ def getMonitorModel(self):
+ """
+
+ Returns a MonitorModel object or None.
+ """
+ return self.monitor_model
+
+ def setMonitorModel(self,monitor_model):
+ """
+
+ Setting the monitor also changes the resolutions that are available.
+
+ """
+ self.monitor_model = monitor_model
+ self._resyncResolution()
+
+ def getMonitorAspect(self):
+ """
+ Get the aspect ratio for the monitor
+
+ Returns one of ModeLine.ASPECT_4_3 or ModeLine.ASPECT_16_9.
+ """
+ return self.monitor_aspect
+
+ def setMonitorAspect(self,aspect):
+ """Specify the aspect ratio of the monitor.
+
+ Keyword arguments:
+ aspect -- Aspect ratio. Either the constant ModeLine.ASPECT_4_3 or ModeLine.ASPECT_16_9.
+
+ Setting this also changes the resolutions that are available.
+ """
+ self.monitor_aspect = aspect
+ self._resyncResolution()
+
+ def _resyncResolution(self):
+ try:
+ (preferred_width,preferred_height) = self.getAvailableResolutions()[self.getResolutionIndex()]
+ except IndexError:
+ print self.getAvailableResolutions()
+ (preferred_width,preferred_height) = self.getAvailableResolutions()[-1]
+
+ if self.isResolutionLive():
+ self._computeSizesFromXorg()
+ else:
+ # The list of resolutions needs to be updated.
+ self._computeSizesFromMonitor()
+
+ if self.gfx_card.setup.getLayout()==XSetup.LAYOUT_CLONE:
+ if self.gfx_card.setup.getPrimaryScreen() is self:
+ # Filter the list of resolutions based on what the secondary screen can show.
+ secondary_screen = self.gfx_card.setup.getSecondaryScreen()
+ primary_set = set(self.available_sizes)
+ secondary_set = set(secondary_screen.available_sizes)
+
+ common_set = primary_set.intersection(secondary_set)
+
+ suitable_resolutions = []
+ # Make sure that each resolution also has a common refresh rate.
+ for resolution in common_set:
+ primary_rates = self.getAvailableRefreshRatesForResolution(self.available_sizes.index(resolution))
+ secondary_rates = secondary_screen.getAvailableRefreshRatesForResolution(secondary_screen.available_sizes.index(resolution))
+
+ if len(set(primary_rates).intersection(set(secondary_rates)))!=0:
+ suitable_resolutions.append(resolution)
+
+ suitable_resolutions.sort()
+ self.available_sizes = suitable_resolutions
+
+ # Now we select a resolution that closely matches the previous resolution.
+ best_score = 2000000 # big number.
+ best_index = 0
+ resolution_list = self.getAvailableResolutions()
+ for i in range(len(resolution_list)):
+ (width,height) = resolution_list[i]
+ new_score = abs(width-preferred_width) + abs(height-preferred_height)
+
+ if new_score < best_score:
+ best_index = i
+ best_score = new_score
+ self.setResolutionIndex(best_index)
+
+ if self.gfx_card.setup.getLayout()==XSetup.LAYOUT_CLONE:
+ if self.gfx_card.setup.getSecondaryScreen() is self:
+ self.gfx_card.setup.getPrimaryScreen()._resyncResolution()
+
+ def isXorgConfigChanged(self):
+ isroot = os.getuid()==0
+ return self.original_monitor_model is not self.monitor_model \
+ or self.original_monitor_aspect != self.monitor_aspect \
+ or self.isGammaSettingsChanged() \
+ or (self.isResolutionSettingsChanged() and (not self.isResolutionLive() or isroot))
+
+ def getRedGamma(self):
+ """Get the current red gamma value.
+ """
+ return self.redgamma
+
+ def setRedGamma(self,value):
+ """Set gamma correction value for red
+
+ This method takes effect immediately on the X server if possible.
+
+ Keyword arguments:
+ value -- gamma correction value (float)
+ """
+ self.redgamma = value
+ if self.x_live_screen is not None:
+ self.x_live_screen.setGamma( (self.redgamma,self.greengamma,self.bluegamma) )
+ self.settingall = False
+
+ def getGreenGamma(self):
+ """Get the current green gamma value
+ """
+ return self.greengamma
+
+ def setGreenGamma(self,value):
+ """Set gamma correction value for green
+
+ This method takes effect immediately on the X server if possible.
+
+ Keyword arguments:
+ value -- gamma correction value (float)
+ """
+ self.greengamma = value
+ if self.x_live_screen is not None:
+ self.x_live_screen.setGamma( (self.redgamma,self.greengamma,self.bluegamma) )
+ self.settingall = False
+
+ def getBlueGamma(self):
+ """Get the current blue gamma value
+ """
+ return self.bluegamma
+
+ def setBlueGamma(self,value):
+ """Set gamma correction value for blue
+
+ This method takes effect immediately on the X server if possible.
+
+ Keyword arguments:
+ value -- gamma correction value (float)
+ """
+ self.bluegamma = value
+ if self.x_live_screen is not None:
+ self.x_live_screen.setGamma( (self.redgamma,self.greengamma,self.bluegamma) )
+ self.settingall = False
+
+ def getAllGamma(self):
+ """Get the gamma correction value for all colours.
+
+ Returns a float.
+
+ See isGammaEqual()
+ """
+ return self.allgamma
+
+ def setAllGamma(self,value):
+ """Set the gamma correction value for all colours.
+
+ Keyword arguments:
+ value -- gamma correction value (float)
+ """
+ self.allgamma = value
+ if self.x_live_screen is not None:
+ self.x_live_screen.setGamma( (self.allgamma,self.allgamma,self.allgamma) )
+ self.settingall = True
+
+ def isGammaLive(self):
+ """Returns true if modifications to the gamma are immediately visible.
+ """
+ return self.x_live_screen is not None
+
+ def isGammaEqual(self):
+ """Test whether each colour is using the same gamma correction value.
+
+ Returns True if the gamma value is the same for all colours
+ """
+ return self.getRedGamma()==self.getGreenGamma()==self.getBlueGamma()
+
+ def getScreenIndex(self):
+ return self.gfx_card.getScreens().index(self)
+
+ # Size and resolution
+ def getResolutionIndex(self):
+ """Get the current resolution of this screen.
+
+ Returns an index into the list of available resolutions. See
+ getAvailableResolutions().
+ """
+ return self.currentsizeindex
+
+ def setResolutionIndex(self,index):
+ """Set the resolution for this screen.
+
+ This method does not take effect immediately, only after applyResolutionSetttings()
+ has been called.
+
+ Keyword arguments:
+ index -- The index of the resolution to use. See getAvailableResolutions().
+ """
+ self.currentsizeindex = index
+
+ def getAvailableResolutions(self):
+ """Get the list of available resolutions.
+
+ Returns a list of screen (width,height) tuples. width and height are in
+ pixels.
+ """
+ return self.available_sizes[:]
+
+ # Rotation
+ def getRotation(self):
+ """Get the current rotation settings for this screen.
+
+ Returns one of Screen.RR_Rotate_0, Screen.RR_Rotate_90,
+ Screen.RR_Rotate_180 or Screen.RR_Rotate_270
+ """
+ return self.currentrotation
+
+ def setRotation(self,rotation):
+ """Set the rotation for this screen
+
+ This method does not take effect immediately, only after
+ applyResolutionSetttings() has been called. See getAvailableRotations()
+ for how to find out which rotations are supported.
+
+ Keyword arguments:
+ rotation -- One of Screen.RR_Rotate_0, Screen.RR_Rotate_90,
+ Screen.RR_Rotate_180 or Screen.RR_Rotate_270
+ """
+ self.currentrotation = rotation
+
+ def getAvailableRotations(self):
+ """Get the supported rotations for this screen.
+
+ Returns a bitmask of support rotations for this screen. The returned
+ integer is the bitwise OR of one or more of the constants here below.
+ * Screen.RR_Rotate_0
+ * Screen.RR_Rotate_90
+ * Screen.RR_Rotate_180
+ * Screen.RR_Rotate_270
+ """
+ if self.x_live_screen is not None and self.x_live_screen.resolutionSupportAvailable():
+ return self.x_live_screen.getAvailableRotations() & \
+ (self.RR_Rotate_0 | self.RR_Rotate_90 | self.RR_Rotate_180 | self.RR_Rotate_270)
+ else:
+ return self.RR_Rotate_0 # FIXME
+
+
+ # Reflection
+ def getReflection(self):
+ """Get the current reflection settings for this screen.
+
+ Returns the reflection settings as a bit string. Use Screen.RR_Reflect_X
+ and Screen.RR_Reflect_Y as bitmasks to determine which reflections are
+ in use.
+ """
+ return self.currentreflection
+
+ def setReflection(self,reflection):
+ """Set the reflection settings for this screen.
+
+ This method does not take effect immediately, only after
+ applyResolutionSetttings() has been called. See getAvailableReflections()
+ for how to find out which rotations are supported.
+
+ Keyword arguments:
+ reflection -- Bit string (Python integer) of desired reflections.
+ Bitwise OR Screen.RR_Reflect_X and Screen.RR_Reflect_Y
+ to construct the string.
+ """
+ self.currentreflection = reflection
+
+ def getAvailableReflections(self):
+ """Get the supported reflections for this screen.
+
+ Returns a bit string (Python integer) of supported reflections. Use
+ Screen.RR_Reflect_X and Screen.RR_Reflect_Y as bitmasks to determine
+ which reflections are available.
+ """
+ if self.x_live_screen is not None and self.x_live_screen.resolutionSupportAvailable():
+ return self.x_live_screen.getAvailableRotations() & (self.RR_Reflect_X | self.RR_Reflect_Y)
+ else:
+ return 0 # FIXME
+
+ # Refresh rates
+ def getRefreshRateIndex(self):
+ """Get the current refresh rate index for this screen.
+
+ Returns an index into the list of refresh rates. See getAvailableRefreshRates().
+ """
+ rates = self.getAvailableRefreshRates()
+ i = 0
+ for r in rates:
+ if r>=self.currentrefreshrate:
+ return i
+ i += 1
+ return len(rates)-1
+
+ def setRefreshRateIndex(self,index):
+ """Set the refresh rate for this screen.
+
+ Keyword arguments:
+ index -- Index into the list of refresh rates. See getAvailableRefreshRates().
+ """
+ self.currentrefreshrate = self.getAvailableRefreshRates()[index]
+
+ def getAvailableRefreshRates(self):
+ """Get the list of available refresh rates
+
+ Get the list of available refresh rates for the currently selected
+ resolution. See setResolutionIndex() and getAvailableRefreshRatesForResolution()
+
+ Returns a list of integers in Hz.
+ """
+ return self.getAvailableRefreshRatesForResolution(self.currentsizeindex)
+
+ def getAvailableRefreshRatesForResolution(self,resolution_index):
+ """Get the list of available refresh rates for the given resolution
+
+ Get the list of available refresh rates for the given resolution.
+
+ Keyword arguments:
+ resolution_index -- Index into the list of resolutions.
+
+ Returns a list of integers in Hz.
+ """
+ isize = self.available_sizes[resolution_index]
+ if self.isResolutionLive():
+ j = 0
+ for size in self.x_live_screen.getAvailableSizes():
+ (sw,sh,wm,hm) = size
+ if isize==(sw,sh):
+ rates = self.x_live_screen.getAvailableRefreshRates(j)
+ rates.sort()
+ return rates
+ j += 1
+ assert False,"Can't find matching screen resolution"
+ else:
+ #
+ rates = []
+ for mode in self.mode_list:
+ if isize==(mode.getWidth(),mode.getHeight()):
+ rates.append(mode.getVRefresh())
+
+ rates.sort()
+ return rates
+
+ # Applying changes.
+
+ def isResolutionLive(self):
+ return self.x_live_screen is not None and \
+ self.x_live_screen.resolutionSupportAvailable() and \
+ self.original_monitor_model is self.monitor_model and \
+ self.original_monitor_aspect==self.monitor_aspect
+
+ def isResolutionSettingsChanged(self):
+ try:
+ current_size = self.getAvailableResolutions()[self.currentsizeindex]
+ except IndexError:
+ #FIXME: why does this happen?
+ return False
+ return current_size != self.original_size or \
+ self.currentrefreshrate != self.originalrefreshrate or \
+ self.currentrotation != self.originalrotation or \
+ self.currentreflection != self.originalreflection
+
+ def applyResolutionSettings(self):
+ """Apply any tending resolution changes on the X server if possible.
+
+
+ """
+ if self.isResolutionSettingsChanged() and self.isResolutionLive():
+ # Work out what the correct index is for randr.
+ (width,height) = self.available_sizes[self.currentsizeindex]
+ sizeindex = 0
+ for size in self.x_live_screen.getAvailableSizes():
+ (pw,ph,wm,hm) = size
+ if pw==width and ph==height:
+ break
+ sizeindex += 1
+
+ rc = self.x_live_screen.setScreenConfigAndRate(sizeindex, \
+ self.currentrotation | self.currentreflection, self.currentrefreshrate)
+
+ # FIXME this can fail if the config on the server has been updated.
+
+ def acceptResolutionSettings(self):
+ """Accept the last resolution change
+ """
+ self.originalsizeindex = self.currentsizeindex
+ self.original_size = self.getAvailableResolutions()[self.currentsizeindex]
+ self.originalrefreshrate = self.currentrefreshrate
+ self.originalrotation = self.currentrotation
+ self.originalreflection = self.currentreflection
+
+ def revertResolutionSettings(self):
+ """Revert the last resolution change on the X server
+
+ """
+ if self.x_live_screen is not None and self.x_live_screen.resolutionSupportAvailable():
+ # Work out what the correct index is for randr.
+ (width,height) = self.available_sizes[self.originalsizeindex]
+ sizeindex = 0
+ for size in self.x_live_screen.getAvailableSizes():
+ (pw,ph,wm,hm) = size
+ if pw==width and ph==height:
+ break
+ sizeindex += 1
+
+ self.x_live_screen.setScreenConfigAndRate(sizeindex, \
+ self.originalrotation | self.originalreflection, self.originalrefreshrate)
+ # FIXME this can fail if the config on the server has been updated.
+
+ def resetResolutionSettings(self):
+ """Reset the resolution settings to the last accepted state
+
+ """
+ # Restore the resolution settings to their original state.
+ self.currentsizeindex = self.originalsizeindex
+ self.currentrefreshrate = self.originalrefreshrate
+ self.currentrotation = self.originalrotation
+ self.currentreflection = self.originalreflection
+
+ def isGammaSettingsChanged(self):
+ return self.redgamma != self.originalredgamma or \
+ self.greengamma != self.originalgreengamma or \
+ self.bluegamma != self.originalbluegamma or \
+ self.allgamma != self.originalallgamma or \
+ self.settingall != self.originalsettingall
+
+ def acceptGammaSettings(self):
+ (self.originalredgamma, self.originalgreengamma, self.originalbluegamma) = (
+ self.redgamma, self.greengamma, self.bluegamma)
+ self.originalallgamma = self.allgamma
+ self.originalsettingall = self.settingall
+
+ def revertGammaSettings(self):
+ (self.redgamma, self.greengamma, self.bluegamma) = (
+ self.originalredgamma, self.originalgreengamma, self.originalbluegamma)
+ self.allgamma = self.originalallgamma
+ self.settingall = self.originalsettingall
+
+ if self.x_live_screen is not None:
+ if self.settingall:
+ self.x_live_screen.setGamma( (self.allgamma,self.allgamma,self.allgamma) )
+ else:
+ self.x_live_screen.setGamma( (self.redgamma,self.greengamma,self.bluegamma) )
+
+ def isGammaSettingsChanged(self):
+ if self.settingall:
+ return self.originalallgamma != self.allgamma
+ else:
+ return self.originalredgamma != self.redgamma or \
+ self.originalgreengamma != self.greengamma or \
+ self.originalbluegamma != self.bluegamma
+
+ def reset(self):
+ if self.isLive():
+ self.revertGammaSettings()
+ self.resetResolutionSettings()
+
+ self.monitor_model = self.original_monitor_model
+ self.monitor_aspect = self.original_monitor_aspect
+
+ def getRestartHint(self):
+ if self.original_monitor_model is not self.monitor_model \
+ or self.original_monitor_aspect != self.monitor_aspect \
+ or (self.isResolutionSettingsChanged() and not self.isResolutionLive()):
+ return XSetup.RESTART_X
+ return XSetup.RESTART_NONE
+
+ def _syncXorgConfig(self,x_device):
+ layout = self.gfx_card.getLayout()
+
+ if self.x_config_screen is None:
+ self.x_config_screen = self.x_config.makeSection('',['section','screen'])
+ self.x_config.append(self.x_config_screen)
+ self.x_config_screen.identifier = self.x_config.createUniqueIdentifier("screen")
+ self.x_config_screen.device = x_device.identifier
+
+ bit_depth = self.gfx_card.setup._getColorDepth()
+ self.x_config_screen.defaultdepth = bit_depth
+
+ # Maybe we don't have a X config monitor section.
+ if self.x_config_monitor is None:
+ # Make a monitor section.
+ self.x_config_monitor = self.x_config.makeSection('',['section','monitor'])
+ self.x_config.append(self.x_config_monitor)
+ self.x_config_monitor.identifier = self.x_config.createUniqueIdentifier("monitor")
+ self.x_config_screen.monitor = self.x_config_monitor.identifier
+
+ # Empty the monitor section and fill it in again.
+ monitor_identifier = self.x_config_monitor.identifier
+ self.x_config_monitor.clear()
+ self.x_config_monitor.identifier = monitor_identifier
+
+ if self.monitor_model is not None:
+ if self.monitor_model.getManufacturer() is not None:
+ self.x_config_monitor.vendorname = self.monitor_model.getManufacturer()
+
+ self.x_config_monitor.modelname = self.monitor_model.getName()
+
+ if self.monitor_model.getType()!=MonitorModel.TYPE_PLUGNPLAY:
+ if self.monitor_model.getHorizontalSync() is not None:
+ hsyncline = self.x_config_monitor.makeLine(None,['HorizSync',self.monitor_model.getHorizontalSync()])
+ self.x_config_monitor.append(hsyncline)
+
+ if self.monitor_model.getVerticalSync() is not None:
+ vsyncline = self.x_config_monitor.makeLine(None,['VertRefresh',self.monitor_model.getVerticalSync()])
+ self.x_config_monitor.append(vsyncline)
+
+ # Add a bunch of standard mode lines.
+ mode_list = GetMonitorModeDB().getAvailableModes(self.monitor_model,self.monitor_aspect)
+
+ if mode_list is not None:
+
+ # Filter the mode list by video memory.
+ color_bytes = bit_depth/8
+ if self.gfx_card.getGfxCardModel().getNeedVideoRam():
+ video_memory = self.gfx_card.getVideoRam()
+ else:
+ video_memory = 65536 # Big enough.
+ video_memory *= 1024 # Convert to bytes.
+ mode_list = [mode for mode in mode_list if mode.getWidth()*mode.getHeight()*color_bytes <= video_memory]
+
+ def mode_cmp(a,b): return cmp(a.getWidth(),b.getWidth())
+ mode_list.sort(mode_cmp)
+
+ for mode in mode_list:
+ modeline = self.x_config_monitor.modeline.makeLine(None,mode.getXorgModeLineList())
+ self.x_config_monitor.modeline.append(modeline)
+
+ # Specify the preferred resolution.
+
+ # Get rid of any old display subsections.
+ for display_section in self.x_config_screen.getSections('display'):
+ self.x_config_screen.remove(display_section)
+
+ try:
+ (preferred_width, preferred_height) = self.getAvailableResolutions()[self.currentsizeindex]
+ preferred_rate = self.getAvailableRefreshRates()[self.getRefreshRateIndex()]
+ except IndexError, errmsg:
+ # This is presumed to be better than a crash:
+ print "Failed to get preferred width, height, or rate - Assuming none. IndexError: ", errmsg
+ preferred_width = 0
+ preferred_height = 0
+ preferred_rate = 0
+
+ # Find the monitor supported mode that best matches what the user has selected.
+ best_score = 2000000 # big number.
+ best_index = 0
+ for i in range(len(mode_list)):
+ mode = mode_list[i]
+ new_score = abs(mode.getWidth()-preferred_width) + \
+ abs(mode.getHeight()-preferred_height) + \
+ abs(mode.getVRefresh()-preferred_rate)
+ if new_score < best_score:
+ best_index = i
+ best_score = new_score
+
+ # This is all about putting the list of resolutions into a
+ # sensible preferred order starting with what the user has chosen
+ # and then the rest of the resolutions.
+ lower = best_index - 1
+ higher = best_index + 1
+ len_modes = len(mode_list)
+
+ mode_indexes = []
+ mode_indexes.append(best_index)
+ while lower>=0 or higher<len_modes: # interlace the two sets of indexes.
+ if higher<len_modes:
+ mode_indexes.append(higher)
+ higher += 1
+ if lower>=0:
+ mode_indexes.append(lower)
+ lower -= 1
+
+ # Convert the list of resolution indexes into monitor mode names and a modes line for xorg.conf.
+ mode_list_line = ['modes']
+ mode_list_line.extend([ mode_list[mode_index].getName() for mode_index in mode_indexes ])
+
+ # Create the Display subsections in the Screen section.
+ display_section = self.x_config_screen.makeSection(None,['SubSection','Display'])
+ display_section.depth = bit_depth
+
+ # The virtual screen size hack should not be used in combination
+ # with Xinerama (RandR doesn't work with Xinerama).
+ if layout!=XSetup.LAYOUT_SINGLE_XINERAMA and self.isLive():
+ # Find the largest monitor supported mode. We need this info
+ # to set the size of the virtual screen. See the big comment
+ # in displayconfig-restore.py.
+ virtual_width = max([mode_list[mode_index].getWidth() for mode_index in mode_indexes])
+ virtual_height = max([mode_list[mode_index].getHeight() for mode_index in mode_indexes])
+ display_section.append(display_section.makeLine(None,["virtual",virtual_width,virtual_height]))
+
+ display_section.append(display_section.makeLine(None,mode_list_line))
+
+ self.x_config_screen.append(display_section)
+
+ # Set the gamma info too.
+ if self.settingall:
+ gamma_row = self.x_config_monitor.makeLine(None,['gamma',str(self.allgamma)])
+ else:
+ gamma_row = self.x_config_monitor.makeLine(None,['gamma',str(self.redgamma),str(self.greengamma),str(self.bluegamma)])
+ self.x_config_monitor.append(gamma_row)
+
+ # If resolution changes were not live because the monitor has been changed
+ # then we also stop them from being live from now on too.
+ if not self.isResolutionLive():
+ self.x_live_screen = None
+ self.acceptResolutionSettings()
+
+ # The orignal monitor model is now the selected one. => no changes need to be applied now.
+ self.original_monitor_model = self.monitor_model
+ self.original_monitor_aspect = self.monitor_aspect
+
+ def _getXorgScreenSection(self):
+ return self.x_config_screen
+
+ def _getGfxCard(self):
+ return self.gfx_card
+
+ def __str__(self):
+ # FIXME string = str(self.getIdentifier()) + " {"
+ string = " {"
+ if self.isLive():
+ string += "Size: "
+ string += str(self.getAvailableResolutions()[self.getResolutionIndex()])
+ string += " "
+ else:
+ string += "Not live, "
+ if self.monitor_model is not None:
+ string += "Monitor:" + str(self.monitor_model)
+ string += "}"
+ return string
+
+############################################################################
+class GfxCardModel(object):
+ """Describes the properties of a particular model of graphics card.
+
+ """
+ def __init__(self,name):
+ self.name = name
+ self.vendor = None
+ self.server = None
+ self.driver = None
+ self.proprietarydriver = None
+ self.lines = []
+ self.seeobj = None
+ self.noclockprobe = None
+ self.unsupported = None
+ self.driglx = None
+ self.utahglx = None
+ self.driglxexperimental = None
+ self.utahglxexperimental = None
+ self.badfbrestore = None
+ self.badfbrestoreexf3 = None
+ self.multihead = None
+ self.fbtvout = None
+ self.needvideoram = None
+
+ def getName(self): return self.name
+
+ def setVendor(self,vendor): self.vendor = vendor
+ def getVendor(self): return self._get(self.vendor,"getVendor",None)
+ def setServer(self,server): self.server = server
+ def getServer(self): return self._get(self.server,"getServer",None)
+ def setDriver(self,driver): self.driver = driver
+ def getDriver(self): return self._get(self.driver,"getDriver",None)
+ def setProprietaryDriver(self,proprietarydriver): self.proprietarydriver = proprietarydriver
+ def getProprietaryDriver(self): return self._get(self.proprietarydriver,"getProprietaryDriver",None)
+ def addLine(self,line): self.lines.append(line)
+ def getLines(self):
+ if (len(self.lines)==0) and (self.seeobj is not None):
+ return self.seeobj.getLines()
+ else:
+ return self.lines[:] # Copy
+
+ def setNoClockProbe(self,noprobe): self.noclockprobe = noprobe
+ def getNoClockProbe(self): return self._get(self.noclockprobe,"getNoClockProbe",False)
+ def setUnsupported(self,unsupported): self.unsupported = unsupported
+ def getUnsupported(self): return self._get(self.unsupported,"getUnsupported",False)
+ def setDriGlx(self,on): self.driglx = on
+ def getDriGlx(self): return self._get(self.driglx,"getDriGlx",False)
+ def setUtahGlx(self,on): self.utahglx = on
+ def getUtahGlx(self): return self._get(self.utahglx,"getUtahGlx",False)
+ def setDriGlxExperimental(self,on): self.driglxexperimental = on
+ def getDriGlxExperimental(self): return self._get(self.driglxexperimental,"getDriGlxExperimental",False)
+ def setUtahGlxExperimental(self,on): self.utahglxexperimental = on
+ def getUtahGlxExperimental(self): return self._get(self.utahglxexperimental,"getUtahGlxExperimental",False)
+ def setBadFbRestore(self,on): self.badfbrestore = on
+ def getBadFbRestore(self,proprietary=False):
+ if proprietary:
+ driver = self.getProprietaryDriver()
+ else:
+ driver = self.getDriver()
+ if driver in ['i810','intel','fbdev','nvidia','vmware']:
+ return True
+ if self.badfbrestore is not None:
+ return self.badfbrestore
+ if self.seeobj is not None:
+ return self.seeobj.getBadFbRestore(proprietary)
+ return False
+ def setBadFbRestoreXF3(self,on): self.badfbrestoreexf3 = on
+ def getBadFbRestoreXF3(self): return self._get(self.badfbrestoreexf3,"getBadFbRestoreXF3",False)
+ def setMultiHead(self,n): self.multihead = n
+ def getMultiHead(self): return self._get(self.multihead,"getMultiHead",1)
+ def setFbTvOut(self,on): self.fbtvout = on
+ def getFbTvOut(self): return self._get(self.fbtvout,"getFbTvOut",False)
+ def setNeedVideoRam(self,on): self.needvideoram = on
+ def getNeedVideoRam(self): return self._get(self.needvideoram,"getNeedVideoRam",False)
+ def setSee(self,seeobj): self.seeobj = seeobj
+
+ # If the seeobj is set, then all attributes that are not filled in for this
+ # instance are inheritted from seeobj.
+ def _get(self,attr,meth,default):
+ if attr is not None:
+ return attr
+ if self.seeobj is not None:
+ return getattr(self.seeobj,meth)()
+ else:
+ return default
+
+ def __str__(self):
+ return self.getName()
+
+############################################################################
+gfxcard_model_db_instance = None # Singleton.
+
+def GetGfxCardModelDB():
+ """Returns a GfxCardModelDB instance.
+ """
+ global gfxcard_model_db_instance
+ # Lazy instantiation.
+ if gfxcard_model_db_instance is None:
+ gfxcard_model_db_instance = GfxCardModelDB()
+ return gfxcard_model_db_instance
+
+############################################################################
+class GfxCardModelDB(object):
+ def __init__(self):
+ # List of gfx card databases, if order of preference.
+ filename = '/usr/share/ldetect-lst/Cards+'
+ if not os.path.exists(filename):
+ filename = os.path.join(data_file_dir,"Cards+")
+
+ # The card DB. A dict mapping card names to card objects.
+ self.db = {}
+ # The keys in this dict will be vendor names, values are dicts mapping card names to objects.
+ self.vendordb = {}
+ self.driverdb = {}
+
+ self.drivers = self._getAvailableDrivers()
+
+ self.proprietary_drivers = []
+
+ self._checkProprietaryDrivers()
+ self._loadDrivers(self.drivers, self.proprietary_drivers)
+ self._loadDB(filename)
+
+ def getGfxCardModelByName(self,name):
+ return self.db[name]
+
+ def getGfxCardModelByDriverName(self,driver_name):
+ return self.driverdb[driver_name]
+
+ def getAllGfxCardModelNames(self):
+ return self.db.keys()
+
+ def _getDriverDirs(self):
+ "Returns a list of directories where X driver files may be located"
+
+ # Fallback dir:
+ defaultDirs = ["/usr/lib/xorg/modules/drivers/"]
+
+ # Get display number:
+ display_number = 0
+ if "DISPLAY" in os.environ:
+ display_name = os.environ["DISPLAY"]
+ displayRE = re.compile("^.*:(\d+)\.\d+$")
+ m = displayRE.match(display_name)
+ if m:
+ display_number = int(m.group(1))
+ else:
+ print "failed to parse display number from '%s' - falling back to default (%d)" % (display_name, display_number)
+ else:
+ print "$DISPLAY not set - falling back to default number (%d)" % display_number
+
+ # Get the list of module paths from the Xorg log file:
+ XLogfile = "/var/log/Xorg.%d.log" % display_number
+ cmd = "awk -F \" ModulePath set to \" '/^\(..\) ModulePath set to (.*)/ {print $2}' %s" % XLogfile
+
+ baseList = os.popen(cmd).readline().strip().strip('"')
+ if baseList == "":
+ print "warning: failed to get module paths from '%s' - falling back to default" % XLogfile
+ return defaultDirs
+
+ pathList = []
+ for basePath in baseList.split(","):
+ pathList.append("%s/drivers/" % basePath)
+
+ return pathList
+
+ def _getAvailableDrivers(self):
+ """
+ Returns the list of available X graphics drivers.
+ Algorithm taken from Xorg source (see GenerateDriverlist() in xf86Config.C).
+ """
+
+ # These are drivers that cannot actually be used in xorg.conf, hence they are hidden:
+ hiddenDrivers = (
+ "atimisc", # seems to be just the internal implementation for ati driver
+ "dummy", # dummy driver without any output
+ "v4l", # not an actual video device driver, but just the v4l module
+ "ztv" # seems to be the TV output module for AMD Geode
+ )
+
+ drivers = []
+ driverDirectories = self._getDriverDirs()
+
+ driverNameRE = re.compile("^(.+)_drv.(s)?o$")
+ for ddir in driverDirectories:
+ try:
+ driverFiles = os.listdir(ddir)
+ except OSError:
+ print "error reading directory '%s'" % ddir
+ continue
+ for f in driverFiles:
+ m = driverNameRE.match(f)
+ if m:
+ driverName = m.group(1)
+ if driverName in drivers:
+ print "ignoring duplicate driver '%s/%s'" % (ddir, f)
+ else:
+ if driverName in hiddenDrivers:
+ #print "ignoring hidden driver '%s'" % driverName
+ pass
+ else:
+ drivers.append(driverName)
+ else:
+ #print "ignoring driver file with invalid name '%s'" % f
+ pass
+ #print "found %d drivers" % len(drivers)
+ return drivers
+
+ def _checkProprietaryDrivers(self):
+ # Check for the NVidia driver.
+ # FIXME x86_64 => 'lib64'
+
+ if (os.path.exists("/usr/X11R6/lib/modules/drivers/nvidia_drv.o") and \
+ os.path.exists("/usr/X11R6/lib/modules/extensions/libglx.so")) \
+ or \
+ (os.path.exists("/usr/lib/xorg/modules/drivers/nvidia_drv.o") and \
+ os.path.exists("/usr/lib/xorg/modules/libglx.so")) \
+ or \
+ (os.path.exists("/usr/lib/xorg/modules/drivers/nvidia_drv.so") and \
+ os.path.exists("/usr/lib/xorg/modules/extensions/libglx.so")):
+ self.proprietary_drivers.append("nvidia")
+
+ # Check for the ATI driver
+ if (os.path.exists("/usr/X11R6/lib/modules/dri/fglrx_dri.so") and \
+ os.path.exists("/usr/X11R6/lib/modules/drivers/fglrx_drv.o")) or \
+ (os.path.exists("/usr/lib/dri/fglrx_dri.so") and \
+ os.path.exists("/usr/lib/xorg/modules/drivers/fglrx_drv.so")):
+ self.proprietary_drivers.append("fglrx")
+
+ # FIXME MATROX_HAL?
+
+ def _loadDrivers(self, drivers, proprietary_drivers):
+ # Insert the Driver entries.
+ for drivername in drivers:
+ cardobj = GfxCardModel(drivername)
+ cardobj.setDriver(drivername)
+ self.db[drivername] = cardobj
+ self.driverdb[drivername] = cardobj
+
+ if drivername=="nv" and "nvidia" in proprietary_drivers:
+ cardobj.setProprietaryDriver("nvidia")
+ self.driverdb["nvidia"] = cardobj
+ elif drivername=="ati" and "fglrx" in proprietary_drivers:
+ cardobj.setProprietaryDriver("fglrx")
+ self.driverdb["fglrx"] = cardobj
+
+ def _loadDB(self,filename):
+ vendors = ['3Dlabs', 'AOpen', 'ASUS', 'ATI', 'Ark Logic', 'Avance Logic',
+ 'Cardex', 'Chaintech', 'Chips & Technologies', 'Cirrus Logic', 'Compaq',
+ 'Creative Labs', 'Dell', 'Diamond', 'Digital', 'ET', 'Elsa', 'Genoa',
+ 'Guillemot', 'Hercules', 'Intel', 'Leadtek', 'Matrox', 'Miro', 'NVIDIA',
+ 'NeoMagic', 'Number Nine', 'Oak', 'Orchid', 'RIVA', 'Rendition Verite',
+ 'S3', 'Silicon Motion', 'STB', 'SiS', 'Sun', 'Toshiba', 'Trident',
+ 'VideoLogic']
+
+ cardobj = None
+ # FIXME the file might be compressed.
+ fhandle = open(filename,'r')
+ for line in fhandle.readlines():
+ line = line.strip()
+ if len(line)!=0:
+ if not line.startswith("#"):
+ if line.startswith("NAME"):
+ cardobj = GfxCardModel(line[4:].strip())
+ cardname = cardobj.getName()
+ self.db[cardname] = cardobj
+
+ # Try to extract a vendor name from the card's name.
+ for vendor in vendors:
+ if vendor in cardname:
+ cardobj.setVendor(vendor)
+ if vendor not in self.vendordb:
+ self.vendordb[vendor] = {}
+ self.vendordb[vendor][cardname] = cardobj
+ break
+ else:
+ if "Other" not in self.vendordb:
+ self.vendordb["Other"] = {}
+ self.vendordb["Other"][cardname] = cardobj
+
+ elif line.startswith("SERVER"):
+ cardobj.setServer(line[6:].strip())
+ elif line.startswith("DRIVER2"):
+ driver = line[7:].strip()
+ if driver in self.proprietary_drivers:
+ cardobj.setProprietaryDriver(driver)
+ elif line.startswith("DRIVER"):
+ cardobj.setDriver(line[6:].strip())
+ elif line.startswith("LINE"):
+ cardobj.addLine(line[4:].strip())
+ elif line.startswith("SEE"):
+ try:
+ cardobj.setSee(self.db[line[3:].strip()])
+ except KeyError:
+ pass
+ elif line.startswith("NOCLOCKPROBE"):
+ cardobj.setNoClockProbe(True)
+ elif line.startswith("UNSUPPORTED"):
+ cardobj.setUnsupported(True)
+ elif line.startswith("DRI_GLX"):
+ cardobj.setDriGlx(True)
+ elif line.startswith("UTAH_GLX"):
+ cardobj.setUtahGlx(True)
+ elif line.startswith("DRI_GLX_EXPERIMENTAL"):
+ cardobj.setDriGlxExperimental(True)
+ elif line.startswith("UTAH_GLX_EXPERIMENTAL"):
+ cardobj.setUtahGlxExperimental(True)
+ elif line.startswith("BAD_FB_RESTORE"):
+ cardobj.setBadFbRestore(True)
+ elif line.startswith("BAD_FB_RESTORE_XF3"):
+ cardobj.setBadFbRestoreXF3(True)
+ elif line.startswith("MULTI_HEAD"):
+ cardobj.setMultiHead(int(line[10:].strip()))
+ elif line.startswith("FB_TVOUT"):
+ cardobj.setFbTvOut(True)
+ elif line.startswith("NEEDVIDEORAM"):
+ cardobj.setNeedVideoRam(True)
+ fhandle.close()
+
+############################################################################
+class MonitorModel(object):
+ TYPE_NORMAL = 0
+ TYPE_PLUGNPLAY = 1
+ TYPE_CUSTOM = 2
+
+ def __init__(self):
+ self.name = None
+ self.manufacturer = None
+ self.eisaid = None
+ self.horizontalsync = None
+ self.verticalsync = None
+ self.dpms = False
+ self.type = MonitorModel.TYPE_NORMAL
+
+ def copy(self):
+ newmonitor = MonitorModel()
+ newmonitor.name = self.name
+ newmonitor.manufacturer = self.manufacturer
+ newmonitor.eisaid = self.eisaid
+ newmonitor.horizontalsync = self.horizontalsync
+ newmonitor.verticalsync = self.verticalsync
+ newmonitor.dpms = self.dpms
+ return newmonitor
+
+ def getName(self): return self.name
+ def setName(self,name): self.name = name
+ def getManufacturer(self): return self.manufacturer
+ def setManufacturer(self,manufacturer): self.manufacturer = manufacturer
+ def setEisaId(self,eisaid): self.eisaid = eisaid
+ def getEisaId(self): return self.eisaid
+ def setDpms(self,on): self.dpms = on
+ def getDpms(self): return self.dpms
+ def getHorizontalSync(self): return self.horizontalsync
+ def setHorizontalSync(self,horizontalsync): self.horizontalsync = horizontalsync
+ def getVerticalSync(self): return self.verticalsync
+ def setVerticalSync(self,verticalsync): self.verticalsync = verticalsync
+ def setType(self,flag): self.type = flag
+ def getType(self): return self.type
+ def __str__(self):
+ return "{Name:"+self.name+"}"
+
+############################################################################
+class PlugNPlayMonitorModel(MonitorModel):
+ def __init__(self,monitor_model_db):
+ MonitorModel.__init__(self)
+ self.monitor_detected = False
+ self.monitor_model_db = monitor_model_db
+
+ def getEisaId(self):
+ self._detectMonitor()
+ return self.eisaid
+
+ def getHorizontalSync(self):
+ self._detectMonitor()
+ return self.horizontalsync
+
+ def getVerticalSync(self):
+ self._detectMonitor()
+ return self.verticalsync
+
+ def _detectMonitor(self):
+ if not self.monitor_detected:
+ (eisaid, horizontalsync, verticalsync) = self.monitor_model_db._detectMonitor()
+ if eisaid is not None:
+ self.eisaid = eisaid
+ if horizontalsync is not None:
+ self.horizontalsync = horizontalsync
+ if verticalsync is not None:
+ self.verticalsync = verticalsync
+
+ self.monitor_detected = True
+
+############################################################################
+monitor_model_db_instance = None # Singleton
+
+def GetMonitorModelDB(force=False):
+ """Returns a GetMonitorModelDB instance.
+ """
+ global monitor_model_db_instance
+ if monitor_model_db_instance is None or force == True:
+ monitor_model_db_instance = MonitorModelDB()
+ return monitor_model_db_instance
+
+############################################################################
+class MonitorModelDB(object):
+ def __init__(self):
+ self.db = {}
+ self.vendordb = {}
+ self.genericdb = {}
+ self.customdb = {}
+ self.custom_counter = 1
+ self.monitor_detect_run = False
+
+ # Plug'n Play is a kind of fake entry for monitors that are detected but unknown.
+ # It's frequency info is filled in by hardware detection or from the X server config.
+ self._plugnplay = PlugNPlayMonitorModel(self)
+ self._plugnplay.setName("Plug 'n' Play")
+ self._plugnplay.setManufacturer(self._plugnplay.getName())
+ self._plugnplay.setType(MonitorModel.TYPE_PLUGNPLAY)
+ # This default is what Xorg claims to use when there is no
+ # horizontal sync info in the a monitor section.
+ self._plugnplay.setHorizontalSync("28.0-33.0")
+ # This default is what Xorg claims to use when there is no
+ # vertical sync info in the a monitor section.
+ self._plugnplay.setVerticalSync("43-72")
+ self.customdb[self._plugnplay.getName()] = self._plugnplay
+ self.db[self._plugnplay.getName()] = self._plugnplay
+
+ # Load monitors from the shipped database
+ filename = "/usr/share/ldetect-lst/MonitorsDB"
+ if not os.path.exists(filename):
+ filename = os.path.join(data_file_dir,"MonitorsDB")
+ self.load(filename)
+ # Load monitors from the custom database
+ filename = os.path.join(var_data_dir, "CustomMonitorsDB")
+ if os.path.exists(filename):
+ self.load(filename)
+
+ def load(self,filename,split=";"):
+ fhandle = open(filename,'r')
+ for line in fhandle.readlines():
+ line = line.strip()
+ if len(line)!=0:
+ if not line.startswith("#"):
+ try:
+ parts = line.split(split)
+ monitorobj = MonitorModel()
+ monitorobj.setManufacturer(parts[0].strip())
+ monitorobj.setName(parts[1].strip())
+ monitorobj.setEisaId(parts[2].strip().upper())
+ monitorobj.setHorizontalSync(parts[3].strip())
+ monitorobj.setVerticalSync(parts[4].strip())
+ if len(parts)>=6:
+ monitorobj.setDpms(parts[5].strip()=='1')
+ self.db[monitorobj.getName()] = monitorobj
+
+ if monitorobj.getManufacturer() in \
+ ["Generic LCD Display", "Generic CRT Display"]:
+ self.genericdb[monitorobj.getName()] = monitorobj
+ else:
+ if monitorobj.getManufacturer() not in self.vendordb:
+ self.vendordb[monitorobj.getManufacturer()] = {}
+ self.vendordb[monitorobj.getManufacturer()]\
+ [monitorobj.getName()] = monitorobj
+
+ except IndexError:
+ print "Bad monitor line:",line
+ fhandle.close()
+
+ def getMonitorByName(self,name):
+ return self.db.get(name,None)
+
+ def newCustomMonitor(self,name=None):
+ custom_model = MonitorModel()
+ if name is None:
+ name = "Custom %i" % self.custom_counter
+ custom_model.setName(name)
+ self.db[custom_model.getName()] = custom_model
+ self.customdb[name] = custom_model
+ self.custom_counter += 1
+ return custom_model
+
+ def getCustomMonitors(self):
+ return self.customdb
+
+ def detect(self):
+ """Detect the attached monitor.
+
+ Returns a 'monitor' object on success, else None.
+ """
+ (eisaid,hrange,vrange) = self._detectMonitor()
+
+ # Look up the EISAID in our database.
+ if eisaid is not None:
+ for monitor in self.db:
+ if eisaid==self.db[monitor].getEisaId():
+ return self.db[monitor]
+
+ return self._plugnplay
+
+ def _detectMonitor(self):
+ if not self.monitor_detect_run:
+ eisaid = None
+ hrange = None
+ vrange = None
+
+ if os.path.isfile("/usr/sbin/monitor-edid"):
+ # This utility appeared in Mandriva 2005 LE
+ output = ExecWithCapture("/usr/sbin/monitor-edid",["monitor-edid","-v"])
+ for line in output.split("\n"):
+ if "HorizSync" in line:
+ hrange = line.split()[1]
+ elif "VertRefresh" in line:
+ vrange = line.split()[1]
+ elif line.startswith("EISA ID:"):
+ eisaid = line[9:].upper()
+
+ elif os.path.isfile("/usr/sbin/ddcxinfos"):
+ # This utility _was_ standard on Mandrake 10.1 and earlier.
+ output = ExecWithCapture("/usr/sbin/ddcxinfos",["ddcxinfos"])
+ for line in output.split("\n"):
+ if "HorizSync" in line:
+ hrange = line.split()[0]
+ elif "VertRefresh" in line:
+ vrange = line.split()[0]
+ elif "EISA ID=" in line:
+ eisaid = line[line.find("EISA ID=")+8:].upper()
+
+ elif os.path.isfile("/usr/sbin/ddcprobe"):
+ # on Debian
+ """
+ ddcprobe's output looks like this:
+
+ ...
+ eisa: SAM00b1
+ ...
+ monitorrange: 30-81, 56-75
+ ...
+ """
+ output = ExecWithCapture("/usr/sbin/ddcprobe",["ddcprobe"])
+ for line in output.split("\n"):
+ if line.startswith("eisa:"):
+ parts = line.split(":")
+ if len(parts)>=2:
+ eisaid = parts[1].strip().upper()
+ elif line.startswith("monitorrange:"):
+ parts = line.replace(',','').split()
+ if len(parts)==3:
+ hrange = parts[1].strip()
+ vrange = parts[2].strip()
+
+ self.detected_eisa_id = eisaid
+ self.detected_h_range = hrange
+ self.detected_v_range = vrange
+ self.monitor_detect_run = True
+
+ return (self.detected_eisa_id, self.detected_h_range, self.detected_v_range)
+
+############################################################################
+
+SYNC_TOLERANCE = 0.01 # 1 percent
+class ModeLine(object):
+ ASPECT_4_3 = 0
+ ASPECT_16_9 = 1
+
+ XF86CONF_PHSYNC = 0x0001
+ XF86CONF_NHSYNC = 0x0002
+ XF86CONF_PVSYNC = 0x0004
+ XF86CONF_NVSYNC = 0x0008
+ XF86CONF_INTERLACE = 0x0010
+ XF86CONF_DBLSCAN = 0x0020
+ XF86CONF_CSYNC = 0x0040
+ XF86CONF_PCSYNC = 0x0080
+ XF86CONF_NCSYNC = 0x0100
+ XF86CONF_HSKEW = 0x0200 # hskew provided
+ XF86CONF_BCAST = 0x0400
+ XF86CONF_CUSTOM = 0x0800 # timing numbers customized by editor
+ XF86CONF_VSCAN = 0x1000
+ flags = {"interlace": XF86CONF_INTERLACE,
+ "doublescan": XF86CONF_DBLSCAN,
+ "+hsync": XF86CONF_PHSYNC,
+ "-hsync": XF86CONF_NHSYNC,
+ "+vsync": XF86CONF_PVSYNC,
+ "-vsync": XF86CONF_NVSYNC,
+ "composite": XF86CONF_CSYNC,
+ "+csync": XF86CONF_PCSYNC,
+ "-csync": XF86CONF_NCSYNC }
+
+ # Thanks go out to Redhat for this code donation. =)
+ def __init__(self, elements):
+ self.name = elements[1].strip('"')
+ self.clock = float(elements[2])
+ self.hdisp = int(elements[3])
+ self.hsyncstart = int(elements[4])
+ self.hsyncend = int(elements[5])
+ self.htotal = int(elements[6])
+ self.vdisp = int(elements[7])
+ self.vsyncstart = int(elements[8])
+ self.vsyncend = int(elements[9])
+ self.vtotal = int(elements[10])
+
+ self.flags = 0
+ for i in range(11, len(elements)):
+ try:
+ self.flags |= ModeLine.flags[string.lower(elements[i])]
+ except KeyError:
+ pass
+
+ def getWidth(self):
+ return self.hdisp
+
+ def getHeight(self):
+ return self.vdisp
+
+ def getName(self):
+ return self.name
+
+ def getVRefresh(self):
+ vrefresh = self.clock * 1000000.0 / float(self.htotal * self.vtotal)
+ if self.flags & ModeLine.XF86CONF_INTERLACE:
+ vrefresh = vrefresh * 2.0
+ if self.flags & ModeLine.XF86CONF_DBLSCAN:
+ vrefresh = vrefresh / 2.0
+ return int(round(vrefresh))
+
+ # Basically copied from xf86CheckModeForMonitor
+ def supports(self, monitor_hsync, monitor_vsync):
+ hsync = self.clock * 1000 / self.htotal
+ for freq in monitor_hsync:
+ if hsync > freq[0] * (1.0 - SYNC_TOLERANCE) and hsync < freq[1] * (1.0 + SYNC_TOLERANCE):
+ break
+ else:
+ return False
+
+ vrefresh = self.getVRefresh()
+ for freq in monitor_vsync:
+ if vrefresh > freq[0] * (1.0 - SYNC_TOLERANCE) and vrefresh < freq[1] * (1.0 + SYNC_TOLERANCE):
+ return True
+ return False
+
+ def getXorgModeLineList(self):
+ row = [self.name, str(self.clock), str(self.hdisp), str(self.hsyncstart), str(self.hsyncend),
+ str(self.htotal), str(self.vdisp), str(self.vsyncstart), str(self.vsyncend), str(self.vtotal)]
+
+ for (flag_name,flag_bit) in ModeLine.flags.iteritems():
+ if self.flags & flag_bit:
+ row.append(flag_name)
+ return row
+
+ def __str__(self):
+ return "ModeLine:"+self.name
+
+############################################################################
+monitor_mode_db_instance = None # Singleton
+
+
+def GetMonitorModeDB():
+ """Returns a GetMonitorModeDB instance.
+ """
+ global monitor_mode_db_instance
+ if monitor_mode_db_instance is None:
+ monitor_mode_db_instance = MonitorModeDB()
+ return monitor_mode_db_instance
+
+############################################################################
+class MonitorModeDB(object):
+ def __init__(self):
+ self.db = {}
+ self.db169 = {}
+
+ module_dir = os.path.dirname(os.path.join(os.getcwd(),__file__))
+ self.load(os.path.join(data_file_dir,"vesamodes"))
+ self.load(os.path.join(data_file_dir,"extramodes"))
+ self.load(os.path.join(data_file_dir,"widescreenmodes"))
+
+ # Make a list of screen sizes for the getAllResolutions() method.
+ self.all_resolutions = []
+ for mode in self.db.values()+self.db169.values():
+ size = (mode.getWidth(),mode.getHeight())
+ if size not in self.all_resolutions:
+ self.all_resolutions.append(size)
+
+ self.all_resolutions.sort()
+
+ def load(self,filename):
+ fd = open(filename, 'r')
+ lines = fd.readlines()
+ fd.close()
+
+ for line in lines:
+ if line[0] != "#" and line[0] != '/':
+ line = line.strip()
+ elements = line.split()
+ if line!="":
+ if len(elements) < 11 or string.lower(elements[0]) != "modeline":
+ print "Bad modeline found:",line
+ continue
+ name = elements[1][1:-1]
+ new_mode = ModeLine(elements)
+
+ width = new_mode.getWidth()
+ height = new_mode.getHeight()
+ if self.aspectRatio(width, height)==ModeLine.ASPECT_4_3:
+ self.db[name] = new_mode
+ else:
+ self.db169[name] = new_mode
+
+ if (width,height)==FALLBACK_RESOLUTION:
+ # We grab these modes and use them a fallbacks in the widescreen list.
+ self.db169[name] = new_mode
+
+ @staticmethod
+ def aspectRatio(width,height):
+ ratio = float(width)/float(height)
+ # 4/3 is 1.333333
+ # 16/9 is 1.777777
+ # We will just consider anything below 1.45 to be standard.
+ if ratio < 1.45:
+ return ModeLine.ASPECT_4_3
+ else:
+ return ModeLine.ASPECT_16_9
+
+ def getAvailableModes(self,monitor,aspect):
+ """
+ Get the list of video modes that this monitor supports.
+
+ Returns a list of modeline objects or None if the available modes for this monitor are unknown.
+ """
+ if monitor.horizontalsync is None or monitor.verticalsync is None:
+ return None
+
+ result = []
+
+ hsync_list = self._list_from_string(monitor.getHorizontalSync())
+ vsync_list = self._list_from_string(monitor.getVerticalSync())
+
+ if aspect==ModeLine.ASPECT_4_3:
+ db = self.db
+ else:
+ db = self.db169
+
+ for modeline in db.values():
+ if modeline.supports(hsync_list, vsync_list):
+ result.append(modeline)
+ return result
+
+ def getAllResolutions(self):
+ return self.all_resolutions
+
+ def _list_from_string(self,src):
+ l = []
+ pieces = src.split(",")
+ for piece in pieces:
+ tmp = string.split(piece, "-")
+ if len(tmp) == 1:
+ l.append( (float(tmp[0].strip()), float(tmp[0].strip())) )
+ else:
+ l.append( (float(tmp[0].strip()), float(tmp[1].strip())) )
+ return l
+
+############################################################################
+
+def ranges_to_string(array, length):
+ stringobj = ""
+ for i in range(length):
+ r = array[i]
+ if stringobj != "":
+ stringobj = stringobj + ","
+ if r[0] == r[1]:
+ stringobj = stringobj + repr(r[0])
+ else:
+ stringobj = stringobj + repr(r[0]) + "-" + repr(r[1])
+ return stringobj
+
+
+def main():
+ # FIXME: turns this into a real set of unit tests.
+ SetDataFileDir("ldetect-lst")
+
+ #xs = XSetup()
+ #xs = XSetup('xorg.conf.test')
+ xs = XSetup(xorg_config_filename='bug_data/tonio_intel/xorg.conf',
+ debug_scan_pci_filename="bug_data/tonio_intel/PCIbus.txt")
+ print str(xs)
+ return
+
+ #screen1 = xs.getGfxCards()[0].getScreens()[0]
+ #monitor_db = GetMonitorModelDB()
+ #new_model = monitor_db.getMonitorByName('Samsung SyncMaster 15GL')
+ #print new_model
+ #screen1.setMonitorModel(new_model)
+
+ #screen2 = xs.getGfxCards()[0].getScreens()[1]
+ #screen2.setMonitorModel(new_model)
+
+ print "getAvailableLayouts(): ",xs.getAvailableLayouts()
+ xs.getGfxCards()[0].setProprietaryDriver(True)
+ print str(xs)
+ xs.setLayout(XSetup.LAYOUT_CLONE) # XSetup.LAYOUT_DUAL.
+ print "getAvailableLayouts(): ",xs.getAvailableLayouts()
+ print str(xs)
+
+ #gfxcard_db = GetGfxCardModelDB()
+ #new_gfxcard_model = gfxcard_db.getGfxCardModelByName('NVIDIA GeForce FX (generic)')
+ ##'ATI Radeon 8500'
+ ##'NVIDIA GeForce FX (generic)'
+ #print new_gfxcard_model
+ #gfx_card = xs.getGfxCards()[0]
+ #gfx_card.setProprietaryDriver(False)
+ #gfx_card.setGfxCardModel(new_gfxcard_model)
+ xs.writeXorgConfig('xorg.conf.test')
+
+if __name__=='__main__':
+ main()
diff --git a/displayconfig/displayconfighardwaretab.py b/displayconfig/displayconfighardwaretab.py
new file mode 100644
index 0000000..90c019e
--- /dev/null
+++ b/displayconfig/displayconfighardwaretab.py
@@ -0,0 +1,741 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file '/home/sebas/dev/guidance/trunk/displayconfig/displayconfighardwaretab.ui'
+#
+# Created: Sat Apr 23 14:39:39 2005
+# by: The PyQt User Interface Compiler (pyuic) 3.13
+#
+# WARNING! All changes made in this file will be lost!
+
+
+import sys
+from qt import *
+
+image0_data = [
+"32 32 522 2",
+"Qt c None",
+".i c #000000",
+"bA c #0037a6",
+"bU c #0038a6",
+"ch c #0038a7",
+"bo c #003ba8",
+"cA c #003ba9",
+"bT c #003ca8",
+"bG c #003ca9",
+"fp c #020202",
+"cS c #0242ae",
+"fq c #030303",
+"bH c #0341ab",
+"cg c #0441ab",
+"b1 c #0443ae",
+"fo c #050505",
+"fB c #060606",
+"bS c #0642ad",
+"a7 c #0740a5",
+"cf c #0744ad",
+"fC c #080808",
+".5 c #083fa5",
+"bn c #0841a5",
+"d# c #0848b2",
+"bF c #0942a6",
+"bh c #0949b1",
+".h c #0a0a0a",
+"cz c #0a47b0",
+"ce c #0a48b0",
+"dY c #0a4fb7",
+"fI c #0b0b0b",
+"b0 c #0b44a9",
+"cm c #0b4ab2",
+"b2 c #0c4ab1",
+"fA c #0e0e0e",
+"dk c #0e4eb5",
+"bz c #0f4db2",
+"b3 c #0f4db3",
+"bI c #0f4db4",
+".A c #111111",
+"cl c #114bad",
+"cR c #114eb4",
+"cd c #114fb4",
+"b4 c #1250b5",
+"cG c #1250b6",
+"fr c #131313",
+"cy c #1351b5",
+"dA c #1353b8",
+"cn c #1452b6",
+"aJ c #1550af",
+"bR c #1552b7",
+"eR c #161616",
+"cQ c #1653b7",
+"bp c #1654b7",
+"d. c #1654b8",
+"a8 c #1656b9",
+"cx c #1756b8",
+"cF c #1852b2",
+"b5 c #1857b9",
+"cZ c #1857ba",
+".2 c #191919",
+"dX c #195cbf",
+"cP c #1a58ba",
+"cc c #1a59ba",
+"#p c #1a5dbf",
+"cH c #1b59bb",
+"co c #1b5abb",
+"ag c #1c1c1c",
+"c9 c #1c5abb",
+"dH c #1c60c2",
+"dg c #1d5ebf",
+"a3 c #1e1e1e",
+"cY c #1e58b6",
+"bJ c #1e5dbd",
+"dG c #1f5ebc",
+"cp c #1f5ebd",
+"aY c #1f5fbf",
+"cI c #205ebd",
+"b6 c #205fbe",
+"dW c #2063c3",
+"bX c #212121",
+"c8 c #215fbe",
+"c0 c #2160bf",
+"cb c #2161bf",
+"#v c #225db7",
+"cq c #2261c0",
+"cw c #2262c0",
+"df c #235db9",
+"by c #2362c0",
+"ds c #2364c2",
+"cD c #242424",
+"bQ c #2463c0",
+"cr c #2464c1",
+"aj c #2560b9",
+"dp c #262626",
+"cv c #2665c1",
+"c1 c #2665c2",
+"aB c #2667c4",
+"dI c #266ac7",
+".# c #272727",
+"dr c #2763bc",
+"b7 c #2766c2",
+"cJ c #2766c3",
+"cs c #2767c2",
+"ca c #2767c3",
+"eq c #282828",
+"cO c #2867c3",
+"bg c #2968c3",
+"ct c #2968c4",
+"cu c #2969c4",
+"ab c #296bc7",
+"bK c #2a69c5",
+"b8 c #2a6ac5",
+".6 c #2a6eca",
+"#V c #2b66bc",
+"cK c #2b6ac6",
+"bq c #2b6bc5",
+"c7 c #2b6bc6",
+".o c #2c2c2c",
+"#q c #2c5cb7",
+"bi c #2c5eb7",
+"bx c #2c6bc6",
+"bP c #2c6cc6",
+"aK c #2c6cc7",
+"#P c #2c6ec8",
+"g. c #2d2d2d",
+"bB c #2d60b9",
+"c# c #2d6dc7",
+"cL c #2d6ec7",
+"dJ c #2d71cb",
+"dV c #2d71cc",
+"aX c #2e6dc7",
+"b9 c #2e6ec7",
+"c. c #2e6ec8",
+"fb c #2f2f2f",
+"c2 c #2f6ec8",
+"a9 c #2f6fc8",
+"cT c #3063bb",
+"cM c #3070c8",
+"bw c #3070c9",
+"ak c #3072cb",
+"bf c #3171c9",
+"br c #3171ca",
+"aA c #3271c9",
+"cN c #3272c9",
+"aW c #3272ca",
+"c3 c #3372ca",
+"dt c #3372cb",
+"dz c #3373ca",
+"b. c #3373cb",
+"bL c #3374cb",
+"dK c #3377cf",
+"dU c #3379d0",
+"aZ c #3467be",
+"aL c #3474cb",
+"#o c #3478d0",
+"da c #3567bf",
+"dZ c #356cc3",
+"aa c #3575cc",
+"bO c #3576cc",
+"#W c #3576ce",
+".B c #363636",
+"bM c #3676cc",
+"be c #3676cd",
+"c6 c #3677cd",
+"fJ c #373737",
+"az c #3777cd",
+"bN c #3778cd",
+"#T c #383838",
+"bv c #3878cd",
+"bs c #3878ce",
+"#O c #3879ce",
+"fZ c #393939",
+"dl c #396cc1",
+"aM c #3979ce",
+"#w c #397bd1",
+"dL c #397dd3",
+"#n c #397ed3",
+"fz c #3a3a3a",
+"c4 c #3a7bcf",
+"bu c #3a7bd0",
+"dT c #3a7fd4",
+"aG c #3b3b3b",
+"c5 c #3b7bcf",
+"bd c #3b7bd0",
+"a# c #3b7cd0",
+".7 c #3b80d5",
+"gh c #3c3c3c",
+"dB c #3c70c3",
+"ay c #3c7cd1",
+"aV c #3c7dd1",
+"a4 c #3d3d3d",
+"#X c #3d7dd1",
+"aN c #3d7ed1",
+"dy c #3d7ed2",
+"bt c #3e7fd1",
+"dh c #3e7fd2",
+"dM c #3e83d7",
+"bk c #3f3f3f",
+"#Q c #3f73c5",
+"al c #3f7fd2",
+"#N c #3f80d2",
+"b# c #3f80d3",
+"dS c #3f85d7",
+"#x c #4081d3",
+"#m c #4084d7",
+"f5 c #414141",
+"a. c #4182d3",
+"aU c #4182d4",
+"bY c #424242",
+"aC c #4276c6",
+"aO c #4282d4",
+"ax c #4283d4",
+"bc c #4283d5",
+"di c #4284d4",
+".8 c #4287d9",
+"#Y c #4384d5",
+"dN c #4389da",
+"cW c #444444",
+"dj c #4484d5",
+"dR c #4489db",
+"g# c #454545",
+"#M c #4586d6",
+"bb c #4587d6",
+"dd c #464646",
+"ac c #467ac9",
+"aT c #4687d7",
+"aP c #4788d7",
+"#y c #4788d8",
+"#l c #478ddc",
+"dO c #478ddd",
+"er c #484848",
+"ba c #4889d7",
+"aw c #4889d8",
+"am c #488ad8",
+".9 c #488edd",
+"dE c #494949",
+"#Z c #498ad8",
+"dx c #498bd9",
+"d2 c #4a4a4a",
+"aS c #4a8bd9",
+"dP c #4a90de",
+"aQ c #4b8cda",
+"du c #4b8dda",
+"#L c #4b8ddb",
+"fU c #4c4c4c",
+"dw c #4c8eda",
+"dv c #4c8edb",
+"dQ c #4c92df",
+"av c #4d8edb",
+"#z c #4d8fdb",
+"an c #4d8fdc",
+"#9 c #4e8fdc",
+"#0 c #4e90dc",
+"#k c #4f94e1",
+"#. c #4f95e2",
+"aR c #5092dd",
+"au c #5193de",
+"ao c #5294de",
+"#K c #5294df",
+"#A c #5395df",
+"#1 c #5395e0",
+"ap c #5597e0",
+"at c #5597e1",
+"#j c #559ce6",
+"## c #579de6",
+"#8 c #589ae2",
+"aq c #589be2",
+"fs c #595959",
+"#B c #599be3",
+"as c #599ce3",
+"ar c #5a9ce3",
+"#7 c #5c9fe6",
+"#2 c #5d9fe5",
+"#i c #5da3ea",
+"fH c #5e5e5e",
+"#C c #5ea2e7",
+"#a c #5ea4eb",
+"#J c #5fa1e6",
+"gg c #606060",
+"#6 c #60a3e7",
+"#3 c #60a3e8",
+"#5 c #62a4e9",
+"#4 c #62a5e9",
+"#I c #63a7ea",
+"#h c #63aaef",
+"#D c #64a7ea",
+"#b c #64abef",
+".g c #666666",
+"f4 c #686868",
+"#E c #68abed",
+"#g c #69b1f2",
+"#H c #6aaeee",
+"#F c #6aaeef",
+"#c c #6ab1f3",
+"#G c #6bafef",
+"#f c #6db4f5",
+"#d c #6eb5f5",
+"#e c #6eb6f6",
+".E c #7087ae",
+".n c #717171",
+"f9 c #757575",
+".Y c #758fb7",
+"fO c #787878",
+"el c #7ba0d7",
+".F c #7d98be",
+"gf c #7e7e7e",
+"f0 c #808080",
+"ek c #83a7dc",
+"ga c #848484",
+".X c #85a2c7",
+".a c #868686",
+"d5 c #86abdf",
+"fy c #878787",
+".W c #87a5c9",
+"ej c #87abdd",
+"d4 c #88aadc",
+"f6 c #898989",
+".Z c #899cc0",
+".G c #8aa7ca",
+"ei c #8aafe0",
+"fD c #8b8b8b",
+".V c #8ba8ca",
+".H c #8ca9cb",
+"d6 c #8cb1e2",
+".U c #8eaccd",
+"eh c #8eb3e3",
+".I c #8faccd",
+"d7 c #90b5e4",
+".T c #92afcf",
+"em c #92afdd",
+".J c #92b0d0",
+"eg c #92b7e5",
+"d8 c #93b8e6",
+".j c #949494",
+".S c #95b3d1",
+".K c #95b3d2",
+"d9 c #96bbe8",
+"ge c #979797",
+".R c #98b6d3",
+".L c #98b6d4",
+"e. c #99bfea",
+".f c #9a9a9a",
+".e c #9b9b9b",
+".Q c #9bb9d4",
+".M c #9bb9d6",
+".d c #9c9c9c",
+"ef c #9cc2ec",
+".c c #9d9d9d",
+"e# c #9dc2eb",
+".b c #9e9e9e",
+".N c #9ebcd7",
+"ee c #9ec4ed",
+"ea c #9fc4ee",
+".O c #a0bed8",
+".P c #a0bfd8",
+"ed c #a0c5ee",
+"eb c #a0c6ee",
+"ec c #a1c6ef",
+"gd c #a3a3a3",
+"gb c #a4a4a4",
+"fa c #a5a5a5",
+"gc c #a6a6a6",
+"fN c #a8a8a8",
+"fc c #acacac",
+"fi c #b4b4b4",
+"f8 c #b5b5b5",
+"fm c #b8b8b8",
+"fj c #b9b9b9",
+"fl c #bababa",
+"fk c #bbbbbb",
+"fn c #bcbcbc",
+"fx c #bebebe",
+"fw c #bfbfbf",
+"fh c #c1c1c1",
+"fv c #c2c2c2",
+"fu c #c3c3c3",
+"eQ c #c4c4c4",
+"eo c #c6c6c5",
+"fE c #c6c6c6",
+".4 c #c6c9d0",
+"fe c #c7c7c7",
+".z c #c8c8c8",
+"#u c #c8ccd3",
+"fd c #c9c9c9",
+"d1 c #cac9c8",
+"aF c #cacaca",
+"f# c #cbcac9",
+"ep c #cbcbcb",
+"a2 c #cccccc",
+"dD c #cdccca",
+"do c #cdcdcd",
+"#U c #cdd0d7",
+"f. c #cecccc",
+"af c #cecece",
+"ai c #ced1d8",
+"aI c #ced2d9",
+"dn c #cfcecd",
+"eP c #cfcfcf",
+"e9 c #d0cfcf",
+"ft c #d0d0d0",
+"eO c #d0d0d1",
+"dc c #d1d1cf",
+"fg c #d1d1d1",
+"e8 c #d2d2d1",
+"#s c #d2d2d2",
+"a6 c #d2d6dc",
+".1 c #d3d3d3",
+"cV c #d4d3d2",
+"eN c #d4d3d3",
+"e7 c #d4d4d3",
+"f7 c #d4d4d4",
+"bm c #d4d7de",
+"ff c #d5d5d5",
+"eM c #d5d6d6",
+"d0 c #d5d7da",
+"cC c #d6d5d4",
+"e6 c #d6d6d5",
+"f3 c #d6d6d6",
+"en c #d6d7d9",
+"dC c #d6d8db",
+"bE c #d6d9e0",
+"fY c #d7d7d7",
+"eL c #d7d8d7",
+".D c #d7d8db",
+"bZ c #d7dbe2",
+"fX c #d8d8d8",
+"e5 c #d8d9d8",
+"dm c #d8d9dc",
+"cj c #d9d8d7",
+"eK c #d9d9d9",
+"db c #d9dbde",
+"ck c #d9dde4",
+"fM c #dadada",
+"cU c #dadcdf",
+"e4 c #dbdbda",
+"eJ c #dbdbdb",
+"cB c #dbdde0",
+"dF c #dbdfe5",
+"bW c #dcdbda",
+"eI c #dcdcdc",
+"cE c #dce0e6",
+"fQ c #dddddd",
+"cX c #dde1e8",
+"e3 c #dedddc",
+"fT c #dedede",
+"ci c #dedfe2",
+"dq c #dee1e7",
+"de c #dee2e8",
+"bD c #dfdedc",
+"eH c #dfdfdf",
+"bV c #dfe1e4",
+"e2 c #e0dfdd",
+"bC c #e0e2e5",
+"bj c #e1e0df",
+"eG c #e1e1e1",
+"a0 c #e1e3e6",
+"aD c #e1e3e7",
+"e1 c #e2e1e0",
+"eF c #e2e2e2",
+"a1 c #e3e2e1",
+"eE c #e3e3e3",
+"e0 c #e4e2e3",
+"aE c #e4e3e1",
+"fS c #e4e4e4",
+"fR c #e5e5e5",
+"eZ c #e6e5e5",
+"eD c #e6e6e6",
+"fF c #e7e7e7",
+"eY c #e8e7e7",
+"eC c #e8e8e8",
+"eX c #e9e9e8",
+"eB c #e9eaea",
+"d3 c #e9ecef",
+".p c #eaeaea",
+"ad c #eaebef",
+"eA c #ebebeb",
+"eW c #ecebea",
+"fP c #ececec",
+"ez c #ededec",
+"fW c #ededed",
+"f2 c #eeeeee",
+"ey c #efeeef",
+"f1 c #efefef",
+"ex c #f0f0f0",
+"#R c #f0f2f6",
+"ae c #f1f0ef",
+".m c #f1f1f1",
+"ew c #f1f2f2",
+"fL c #f2f2f2",
+"fG c #f3f3f3",
+"#r c #f3f5f8",
+"ev c #f4f3f3",
+"eV c #f4f4f3",
+".3 c #f4f4f4",
+"et c #f4f6f8",
+".C c #f5f5f5",
+"eU c #f6f6f4",
+"#t c #f6f6f6",
+"eu c #f6f7f8",
+"fV c #f7f7f7",
+"ah c #f8f8f8",
+".0 c #f8f9fa",
+"eT c #f9f7f7",
+"aH c #f9f9f9",
+"fK c #fafafa",
+"eS c #fbfafa",
+"a5 c #fbfbfb",
+"bl c #fcfcfc",
+"es c #fdfdfc",
+".k c #fdfdfd",
+".y c #fefefe",
+".x c #fffcf8",
+".w c #fffcf9",
+".v c #fffdf9",
+".u c #fffef9",
+".t c #fffefa",
+"#S c #fffefd",
+".s c #fffffa",
+".r c #fffffc",
+".q c #fffffd",
+".l c #ffffff",
+"Qt.#.a.b.c.c.c.c.c.c.c.c.c.d.d.d.d.d.d.d.d.d.e.e.e.f.f.f.e.g.hQt",
+".i.j.k.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.l.m.n.i",
+".o.p.l.l.q.r.s.s.s.t.u.v.v.w.x.x.x.v.v.v.v.u.u.u.u.u.s.r.y.l.z.A",
+".B.C.l.D.E.F.G.H.I.J.K.L.M.N.O.P.O.N.Q.R.S.T.U.V.W.X.Y.Z.0.l.1.2",
+".B.3.l.4.5.6.7.8.9#.###a#b#c#d#e#f#g#h#i#j#k#l#m#n#o#p#q#r.l#s.2",
+".B#t.l#u#v#w#x#y#z#A#B#C#D#E#F#G#H#E#I#J#B#K#L#M#N#O#P#Q#R#S#s.2",
+"#T#t.l#U#V#W#X#Y#Z#0#1#B#2#3#4#4#5#6#7#8#A#9#ya.a#aaabacadaeafag",
+"#Tah.laiajak#Oal#Yamanaoapaqararas#8atauavawaxayazaAaBaCaDaEaFag",
+"aGaH.laIaJaKaLaMaNaOaPaQanaRauauauaR#zaSaTaUaVazaWaXaYaZa0a1a2a3",
+"a4a5.la6a7a8a9b.aza#b##Y#M#y#Z#Z#Zbabbbc#NbdbebfaXbgbhbia0bja2a3",
+"bkbl.lbmbnbobpbqbraabsa#bt#N#x#x#x#NaNbubvaLbwbxbybzbAbBbCbDa2a3",
+"bkbl.lbEbFbGbHbIbJbKbwbLbMbNbsbsbvazbOb.bwbPbQbRbSbTbUbBbVbWa2bX",
+"bY.k.lbZb0b1b2b3b4b5b6b7b8aXb9c.c.c#bqcacbcccdcecfcgchbBcicja2bX",
+"bY.y.lckclcmcnb5cocpcqcrcsctcucuctcacvcwcpcocxcyb3czcAbBcBcCa2cD",
+"bY.l.lcEcFcGcHcIbycJcKcLcMbfcNcNbfcMaXbqcObQcpcPcQcRcScTcUcVa2cD",
+"cW.l.lcXcYcZc0c1b8c2c3bMaMc4c5c5c4aMc6b.a9c7c1c8c9d.d#dadbdca2cD",
+"dd.l.ldedfdgcac#bfbec4dh#xdidjdjdiaUdhbdazbrbPcJcbc9dkdldmdndodp",
+"dd.l.ldqdrdsaKdtbv#XaxaTamdudvdwaQdxaTaxdy#OdzbPcJc0dAdBdCdDa2dp",
+"dE.l.ldFdGdHdIdJdKdLdMdNdOdPdQdQdP.9dRdSdTdUdVdIdWdXdYdZd0d1a2dp",
+"d2.l.ld3d4d5d6d7d8d9e.e#eaebececedeeefe.d9egeheiejekelemeneoepeq",
+"er.leseteu#tevewexeyezeAeBeCeDeEeFeGeHeIeJeKeLeMeN#seOeP.zeQa2.#",
+"eRaf.l.yeseSeTeUeVaeeWeXeYeZe0e1e2e3e4e5e6cCcCe7e8e9f.f#.zeJfa.i",
+"Qtfbfc#sdoa2epfdeQfeff.1#sfgePafdoa2epaFaFfhfifjfkflfjfmfn.jag.i",
+"Qt.i.ifofofpfqfqfrfsfeftepfdfeeQfufvfwfxfxfyfzfA.ifBfCfCfC.i.iQt",
+"QtQtQtQtQtQtfzfDfEeAfteDeAeCeCeCfFfFeCeAffeDfGfifHfIQtQtQtQtQtQt",
+"QtQtQtQtQtfJfg.l.l.l.meJeA.CaHaHfKahfLfM.1aH.l.l.lfNfCQtQtQtQtQt",
+"QtQtQtQtQtfO.l.ka5aH#tfPfQeHfReDfSeIaffda2fTbla5.l.lfUQtQtQtQtQt",
+"QtQtQtQtQtfHfVfVfLfL.mfW.peEeIeJfXfYeJeHfF.mfLfLfKfPfZQtQtQtQtQt",
+"QtQtQtQtQtfBf0eFf1f1fP.p.p.p.p.p.p.peAfPfPfWf1f2f3f4.iQtQtQtQtQt",
+"QtQtQtQtQtQt.if5f6fkfYeFeEeEfSfSfSfSeEeEeFf7f8f9g..i.iQtQtQtQtQt",
+"QtQtQtQtQtQtQt.i.i.2g#.gga.fgbgcgcgdgegfgggh.A.i.iQtQtQtQtQtQtQt",
+"QtQtQtQtQtQtQtQtQtQt.i.i.ifqfofpfpfofq.i.i.i.iQtQtQtQtQtQtQtQtQt"
+]
+
+class Form1(QDialog):
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ QDialog.__init__(self,parent,name,modal,fl)
+
+ self.image0 = QPixmap(image0_data)
+
+ if not name:
+ self.setName("Form1")
+
+
+
+ self.groupBox3 = QGroupBox(self,"groupBox3")
+ self.groupBox3.setGeometry(QRect(10,320,680,133))
+ self.groupBox3.setColumnLayout(0,Qt.Vertical)
+ self.groupBox3.layout().setSpacing(6)
+ self.groupBox3.layout().setMargin(11)
+ groupBox3Layout = QHBoxLayout(self.groupBox3.layout())
+ groupBox3Layout.setAlignment(Qt.AlignTop)
+
+ layout92 = QGridLayout(None,1,1,0,6,"layout92")
+
+ self.textLabel2_4 = QLabel(self.groupBox3,"textLabel2_4")
+
+ layout92.addWidget(self.textLabel2_4,0,1)
+
+ self.textLabel5 = QLabel(self.groupBox3,"textLabel5")
+
+ layout92.addWidget(self.textLabel5,1,2)
+
+ self.textLabel1_4 = QLabel(self.groupBox3,"textLabel1_4")
+ self.textLabel1_4.setAlignment(QLabel.WordBreak | QLabel.AlignVCenter)
+
+ layout92.addMultiCellWidget(self.textLabel1_4,2,2,0,3)
+
+ self.comboBox4 = QComboBox(0,self.groupBox3,"comboBox4")
+
+ layout92.addWidget(self.comboBox4,1,3)
+
+ self.comboBox2 = QComboBox(0,self.groupBox3,"comboBox2")
+
+ layout92.addWidget(self.comboBox2,0,3)
+
+ self.textLabel3 = QLabel(self.groupBox3,"textLabel3")
+
+ layout92.addWidget(self.textLabel3,0,0)
+
+ self.kPushButton1 = KPushButton(self.groupBox3,"kPushButton1")
+
+ layout92.addMultiCellWidget(self.kPushButton1,1,1,0,1)
+
+ self.textLabel4 = QLabel(self.groupBox3,"textLabel4")
+
+ layout92.addWidget(self.textLabel4,0,2)
+ groupBox3Layout.addLayout(layout92)
+
+ self.groupBox1 = QGroupBox(self,"groupBox1")
+ self.groupBox1.setGeometry(QRect(10,10,320,300))
+ self.groupBox1.setSizePolicy(QSizePolicy(7,1,0,0,self.groupBox1.sizePolicy().hasHeightForWidth()))
+
+ self.pixmapLabel1 = QLabel(self.groupBox1,"pixmapLabel1")
+ self.pixmapLabel1.setGeometry(QRect(11,33,16,17))
+ self.pixmapLabel1.setSizePolicy(QSizePolicy(0,0,0,0,self.pixmapLabel1.sizePolicy().hasHeightForWidth()))
+ self.pixmapLabel1.setScaledContents(1)
+
+ self.textLabel2 = QLabel(self.groupBox1,"textLabel2")
+ self.textLabel2.setGeometry(QRect(19,45,60,17))
+ self.textLabel2.setSizePolicy(QSizePolicy(1,1,0,0,self.textLabel2.sizePolicy().hasHeightForWidth()))
+
+ self.textLabel2_3 = QLabel(self.groupBox1,"textLabel2_3")
+ self.textLabel2_3.setGeometry(QRect(85,45,213,17))
+ self.textLabel2_3.setSizePolicy(QSizePolicy(3,1,0,0,self.textLabel2_3.sizePolicy().hasHeightForWidth()))
+
+ self.textLabel1_3 = QLabel(self.groupBox1,"textLabel1_3")
+ self.textLabel1_3.setGeometry(QRect(80,20,213,17))
+ self.textLabel1_3.setSizePolicy(QSizePolicy(3,1,0,0,self.textLabel1_3.sizePolicy().hasHeightForWidth()))
+
+ self.textLabel1 = QLabel(self.groupBox1,"textLabel1")
+ self.textLabel1.setGeometry(QRect(19,22,60,17))
+ self.textLabel1.setSizePolicy(QSizePolicy(1,1,0,0,self.textLabel1.sizePolicy().hasHeightForWidth()))
+
+ self.pushButton2 = QPushButton(self.groupBox1,"pushButton2")
+ self.pushButton2.setGeometry(QRect(160,70,144,26))
+ self.pushButton2.setSizePolicy(QSizePolicy(5,1,0,0,self.pushButton2.sizePolicy().hasHeightForWidth()))
+
+ self.groupBox2 = QGroupBox(self,"groupBox2")
+ self.groupBox2.setGeometry(QRect(350,10,348,300))
+ self.groupBox2.setSizePolicy(QSizePolicy(5,1,0,0,self.groupBox2.sizePolicy().hasHeightForWidth()))
+
+ LayoutWidget = QWidget(self.groupBox2,"layout11")
+ LayoutWidget.setGeometry(QRect(12,24,324,44))
+ layout11 = QHBoxLayout(LayoutWidget,11,6,"layout11")
+
+ self.pixmapLabel3 = QLabel(LayoutWidget,"pixmapLabel3")
+ self.pixmapLabel3.setSizePolicy(QSizePolicy(0,0,0,0,self.pixmapLabel3.sizePolicy().hasHeightForWidth()))
+ self.pixmapLabel3.setPixmap(self.image0)
+ self.pixmapLabel3.setScaledContents(1)
+ layout11.addWidget(self.pixmapLabel3)
+
+ layout10 = QGridLayout(None,1,1,0,6,"layout10")
+
+ self.textLabel2_2_2 = QLabel(LayoutWidget,"textLabel2_2_2")
+ self.textLabel2_2_2.setSizePolicy(QSizePolicy(3,1,0,0,self.textLabel2_2_2.sizePolicy().hasHeightForWidth()))
+
+ layout10.addWidget(self.textLabel2_2_2,1,1)
+
+ self.textLabel1_2_2 = QLabel(LayoutWidget,"textLabel1_2_2")
+ self.textLabel1_2_2.setSizePolicy(QSizePolicy(4,1,0,0,self.textLabel1_2_2.sizePolicy().hasHeightForWidth()))
+
+ layout10.addWidget(self.textLabel1_2_2,0,1)
+
+ self.textLabel1_2 = QLabel(LayoutWidget,"textLabel1_2")
+ self.textLabel1_2.setSizePolicy(QSizePolicy(1,1,0,0,self.textLabel1_2.sizePolicy().hasHeightForWidth()))
+
+ layout10.addWidget(self.textLabel1_2,0,0)
+
+ self.textLabel2_2 = QLabel(LayoutWidget,"textLabel2_2")
+ self.textLabel2_2.setSizePolicy(QSizePolicy(1,1,0,0,self.textLabel2_2.sizePolicy().hasHeightForWidth()))
+
+ layout10.addWidget(self.textLabel2_2,1,0)
+ layout11.addLayout(layout10)
+
+ self.pushButton2_2 = QPushButton(self.groupBox2,"pushButton2_2")
+ self.pushButton2_2.setGeometry(QRect(180,70,158,26))
+ self.pushButton2_2.setSizePolicy(QSizePolicy(5,1,0,0,self.pushButton2_2.sizePolicy().hasHeightForWidth()))
+
+ self.languageChange()
+
+ self.resize(QSize(702,472).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+
+ def languageChange(self):
+ self.setCaption(self.__tr("Form1"))
+ self.groupBox3.setTitle(self.__tr("Default Display Settings"))
+ self.textLabel2_4.setText(self.__tr("1280x1024 @ 60Hz"))
+ self.textLabel5.setText(self.__tr("DPI:"))
+ self.textLabel1_4.setText(self.__tr("These settings are defaults. Each user of this computer may specify their own personal settings."))
+ self.comboBox4.clear()
+ self.comboBox4.insertItem(self.__tr("75 DPI (small fonts)"))
+ self.comboBox4.insertItem(self.__tr("100 DPI (large fonts)"))
+ self.comboBox4.insertItem(self.__tr("Auto (84 DPI)"))
+ self.comboBox2.clear()
+ self.comboBox2.insertItem(self.__tr("Millions (24bit)"))
+ self.textLabel3.setText(self.__tr("Screen size:"))
+ self.kPushButton1.setText(self.__tr("Use current settings as system default"))
+ self.textLabel4.setText(self.__tr("Colors:"))
+ self.groupBox1.setTitle(self.__tr("Graphics Card"))
+ self.textLabel2.setText(self.__tr("Memory:"))
+ self.textLabel2_3.setText(self.__tr("32 Mb"))
+ self.textLabel1_3.setText(self.__tr("GeForce 2"))
+ self.textLabel1.setText(self.__tr("Name:"))
+ self.pushButton2.setText(self.__tr("Configure..."))
+ self.groupBox2.setTitle(self.__tr("Monitor"))
+ self.textLabel2_2_2.setText(self.__tr("1600x1200 @ 60Hz"))
+ self.textLabel1_2_2.setText(self.__tr("Philips 107S"))
+ self.textLabel1_2.setText(self.__tr("Name:"))
+ self.textLabel2_2.setText(self.__tr("Max. Resolution:"))
+ self.pushButton2_2.setText(self.__tr("Configure..."))
+
+
+ def __tr(self,s,c = None):
+ return qApp.translate("Form1",s,c)
+
+if __name__ == "__main__":
+ a = QApplication(sys.argv)
+ QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
+ w = Form1()
+ a.setMainWidget(w)
+ w.show()
+ a.exec_loop()
diff --git a/displayconfig/displayconfigwidgets.py b/displayconfig/displayconfigwidgets.py
new file mode 100644
index 0000000..7484ac5
--- /dev/null
+++ b/displayconfig/displayconfigwidgets.py
@@ -0,0 +1,809 @@
+
+from qt import *
+from kdecore import *
+from kdeui import *
+import os
+from displayconfigabstraction import *
+
+# Running as the root user or not?
+isroot = os.getuid()==0
+
+############################################################################
+class ResizeSlider(QVGroupBox):
+ """ An abstracted QSlider in a nice box to change the resolution of a screen """
+ def __init__(self,parent):
+ # Screen size group
+ QVGroupBox.__init__(self,parent)
+ self.updating_gui = True
+ self._buildGUI()
+ self.updating_gui = False
+
+ def _buildGUI(self):
+ self.setTitle(i18n("Screen Size"))
+ self.setInsideSpacing(KDialog.spacingHint())
+ self.setInsideMargin(KDialog.marginHint())
+
+ hbox3 = QHBox(self)
+ hbox3.setSpacing(KDialog.spacingHint())
+ label = QLabel(hbox3,"textLabel2_4")
+ label.setText(i18n("Lower"))
+ self.screensizeslider = QSlider(hbox3,"slider1")
+ self.screensizeslider.setMinValue(0)
+ self.screensizeslider.setMaxValue(4)
+ self.screensizeslider.setPageStep(1)
+ self.screensizeslider.setOrientation(QSlider.Horizontal)
+ self.screensizeslider.setTickmarks(QSlider.Below)
+ self.connect(self.screensizeslider,SIGNAL("valueChanged(int)"),self.slotResolutionChange)
+ label = QLabel(hbox3)
+ label.setText(i18n("Higher"))
+
+ self.resolutionlabel = QLabel(self)
+ self.resolutionlabel.setText("640x400")
+
+ def setScreen(self, screen):
+ self.updating_gui = True
+ self.screen = screen
+ self.screensizeslider.setMaxValue(len(screen.getAvailableResolutions())-1)
+ self.screensizeslider.setValue(screen.getResolutionIndex())
+ self.updating_gui = False
+ self.setResolutionIndex(screen.getResolutionIndex())
+
+ def slotResolutionChange(self,i):
+ """ Pass signal from slider through to App """
+ if self.updating_gui:
+ return
+ self.setResolutionIndex(i)
+ self.emit(PYSIGNAL("resolutionChange(int)"),(i,))
+
+ def setMaxValue(self,value):
+ self.updating_gui = True
+ self.screensizeslider.setMaxValue(value)
+ self.updating_gui = False
+
+ def setMinValue(self,value):
+ self.updating_gui = True
+ self.screensizeslider.setMinValue(value)
+ self.updating_gui = False
+
+ def setValue(self,value):
+ self.updating_gui = True
+ self.screensizeslider.setValue(value)
+ self.updating_gui = False
+
+ def value(self):
+ return self.screensizeslider.value()
+
+ def setResolutionLabel(self,text):
+ self.resolutionlabel.setText(text)
+
+ def setResolutionIndex(self,i):
+ self.updating_gui = True
+ width,height = self.screen.getAvailableResolutions()[i]
+ self.setResolutionLabel(i18n("%1 x %2").arg(width).arg(height))
+ self.updating_gui = False
+
+############################################################################
+class MonitorPreview(QWidget):
+ """ A ResizableMonitor is an Image in a grid which has resizable edges,
+ fixed-size corners and is thus expandable. """
+ ROTATE_0 = 0
+ ROTATE_90 = 1
+ ROTATE_180 = 2
+ ROTATE_270 = 3
+
+ def __init__(self, parent=None, imagedir="", name=None):
+ QWidget.__init__(self,parent)
+
+ self.rotation = MonitorPreview.ROTATE_0
+
+ self.screen_width = 1280
+ self.screen_height = 1024
+
+ self.reflect_x = False
+ self.reflect_y = False
+
+ self.setBackgroundMode(Qt.NoBackground)
+
+ self.imagedir = imagedir + "monitor_resizable/"
+
+ self.image_monitor = QPixmap(self.imagedir+"monitor.png")
+ self.image_monitor_wide = QPixmap(self.imagedir+"monitor_wide.png")
+ self.image_monitor_r90 = QPixmap(self.imagedir+"monitor_r90.png")
+ self.image_monitor_wide_r90 = QPixmap(self.imagedir+"monitor_wide_r90.png")
+
+ self.image_background = QPixmap(self.imagedir+"background.png")
+ self.image_background_wide = QPixmap(self.imagedir+"background_wide.png")
+ self.image_background_r90 = QPixmap(self.imagedir+"background_r90.png")
+ self.image_background_wide_r90 = QPixmap(self.imagedir+"background_wide_r90.png")
+
+ self.image_window = QPixmap(self.imagedir+"window_4th.png")
+ self.image_window_bottom_left = QPixmap(self.imagedir+"window_bottom_left_4th.png")
+ self.image_window_bottom_right = QPixmap(self.imagedir+"window_bottom_right_4th.png")
+
+ def sizeHint(self):
+ max_width = max(self.image_monitor.width(), self.image_monitor_wide.width(),
+ self.image_monitor_r90.width(), self.image_monitor_wide_r90.width())
+ max_height = max(self.image_monitor.height(), self.image_monitor_wide.height(),
+ self.image_monitor_r90.height(), self.image_monitor_wide_r90.height())
+ return QSize(max_width, max_height)
+
+ def sizePolicy(self):
+ return QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+
+ def paintEvent(self,paint_event):
+ screen_width = self.screen_width
+ screen_height = self.screen_height
+
+ # Widescreen format: preview width: 176, height: 99, 16:9
+ is_wide = abs(float(screen_width)/float(screen_height)-16.0/9.0) < 0.2
+
+ if not is_wide:
+ preview_screen_width = 152
+ preview_screen_height = 114
+ else:
+ preview_screen_width = 176
+ preview_screen_height = 99
+
+ if self.rotation==MonitorPreview.ROTATE_0 or self.rotation==MonitorPreview.ROTATE_180:
+ # Normal, landscape orientation.
+ if not is_wide:
+ screen_x_offset = 23
+ screen_y_offset = 15
+ image_background = self.image_background
+ else:
+ screen_x_offset = 23
+ screen_y_offset = 29
+ image_background = self.image_background_wide
+ else:
+ # Portrait orientation. Swap some values around.
+ t = preview_screen_width
+ preview_screen_width = preview_screen_height
+ preview_screen_height = t
+
+ t = screen_width
+ screen_width = screen_height
+ screen_height = t
+
+ if not is_wide:
+ screen_x_offset = 42
+ screen_y_offset = 15
+ image_background = self.image_background_r90
+ else:
+ screen_x_offset = 50
+ screen_y_offset = 15
+ image_background = self.image_background_wide_r90
+
+ # Draw everything off screen in a buffer
+ preview_buffer = QPixmap(preview_screen_width,preview_screen_height)
+ painter = QPainter(preview_buffer)
+
+ # Draw the background on the monitor's screen
+ painter.drawPixmap(0, 0, image_background)
+
+ # Work out the scaling factor for the eye candy in the preview winodw.
+ scale_factor = 4.0*float(preview_screen_width) / float(screen_width)
+ transform_matrix = QWMatrix().scale(scale_factor,scale_factor)
+
+ # Draw the little window on the background
+ scaled_window = self.image_window.xForm(transform_matrix)
+
+ sx = (preview_screen_width-scaled_window.width())/2
+ sy = (preview_screen_height-scaled_window.height())/2
+ if sx < 0:
+ sx = 0
+ if sy < 0:
+ sy = 0
+ sw = scaled_window.width()
+ if sw>preview_screen_width:
+ sw = preview_screen_width
+
+ sh = scaled_window.height()
+ if sh>preview_screen_height:
+ sh = preview_screen_height
+
+ painter.drawPixmap(sx, sy, scaled_window, 0, 0, sw, sh)
+
+ # Now draw the clock in the lower right corner
+ scaled_window = self.image_window_bottom_right.xForm(transform_matrix)
+
+ sx = preview_screen_width - scaled_window.width()
+ sy = preview_screen_height - scaled_window.height()
+ sw = scaled_window.width()#preview_screen_width/2
+ sh = scaled_window.height()
+
+ sx_offset = 0
+ if sx<0: # Some simple clipping for the left edge
+ sx_offset = -sx
+ sw = preview_screen_width
+ sx = 0
+
+ painter.drawPixmap(sx, sy, scaled_window, sx_offset, 0, sw, sh)
+
+ # Now draw the k menu in the lower left corner
+ scaled_window = self.image_window_bottom_left.xForm(transform_matrix)
+
+ sx = 0
+ sy = preview_screen_height - scaled_window.height()
+ sw = preview_screen_width/2 # Just draw on the left side of the preview.
+ sh = scaled_window.height()
+ painter.drawPixmap(sx, sy, scaled_window, 0, 0, sw, sh)
+ painter.end()
+
+ # Transform the preview image. Do reflections.
+ reflect_x = 1
+ if self.reflect_x:
+ reflect_x = -1
+ reflect_y = 1
+ if self.reflect_y:
+ reflect_y = -1
+
+ preview_buffer = preview_buffer.xForm(QWMatrix().scale(reflect_x,reflect_y))
+
+ # Draw the monitor on another buffer.
+ off_screen_buffer = QPixmap(self.width(),self.height())
+ off_screen_painter = QPainter(off_screen_buffer)
+
+ # Erase the buffer first
+ off_screen_painter.setBackgroundColor(self.paletteBackgroundColor())
+ off_screen_painter.eraseRect(0, 0, off_screen_buffer.width(), off_screen_buffer.height())
+
+ if self.rotation==MonitorPreview.ROTATE_0 or self.rotation==MonitorPreview.ROTATE_180:
+ if not is_wide:
+ image_monitor = self.image_monitor
+ else:
+ image_monitor = self.image_monitor_wide
+ else:
+ if not is_wide:
+ image_monitor = self.image_monitor_r90
+ else:
+ image_monitor = self.image_monitor_wide_r90
+
+ top_edge = self.height()-image_monitor.height()
+ left_edge = (self.width()-image_monitor.width())/2
+
+ # Draw the monitor
+ off_screen_painter.drawPixmap(left_edge, top_edge, image_monitor)
+ off_screen_painter.end()
+
+ # Copy the preview onto the off screen buffer with the monitor.
+ bitBlt(off_screen_buffer, left_edge+screen_x_offset, top_edge+screen_y_offset, preview_buffer,
+ 0, 0, preview_buffer.width(), preview_buffer.height(),Qt.CopyROP, False)
+
+ # Update the widget
+ bitBlt(self, 0, 0, off_screen_buffer, 0, 0, self.width(), self.height(), Qt.CopyROP, False)
+
+ def setResolution(self,width,height):
+ self.screen_width = width
+ self.screen_height = height
+ self.update()
+
+ def setRotation(self, rotation):
+ self.rotation = rotation
+ self.update()
+
+ def setReflectX(self, enable):
+ self.reflect_x = enable
+ self.update()
+
+ def setReflectY(self, enable):
+ self.reflect_y = enable
+ self.update()
+
+############################################################################
+class DualMonitorPreview(QWidget):
+ """ This is the Widget to use elsewhere. It consists of a canvas and an
+ arbitrary number of gizmos on the canvas. The gizmos can be dragged and
+ dropped around. Painting is double-buffered so flickering should not occur.
+ """
+ def __init__(self, parent, size, imagedir):
+ QWidget.__init__(self,parent)
+ self.setBackgroundMode(Qt.NoBackground)
+
+ self.imagedir = imagedir + "dualhead/"
+ self.snap_distance = 25
+ self.snapping = True
+ self.size = size
+ self.position = XSetup.POSITION_LEFTOF
+
+ self.current_screen = 0
+
+ self.resize(size,size)
+ self.setMouseTracking(True)
+
+ self.gizmos = []
+ self.gizmos.append(MovingGizmo("Monitor 1","monitor_1.png",QPoint(20,50),self.imagedir))
+ self.gizmos.append(MovingGizmo("Monitor 2","monitor_2.png",QPoint(180,50),self.imagedir))
+
+ self.gizmos[0].setWidth(1280)
+ self.gizmos[0].setHeight(1024)
+ self.gizmos[0].setHighlightColor(self.colorGroup().highlight())
+ self.gizmos[1].setWidth(1280)
+ self.gizmos[1].setHeight(1024)
+ self.gizmos[1].setHighlightColor(self.colorGroup().highlight())
+
+ self.dragging = False
+ self.dragging_gizmo = 0
+ self.drag_handle = None
+
+ self._positionGizmos()
+ self.setCurrentScreen(0)
+
+ def minimumSizeHint(self):
+ return QSize(self.size,self.size)
+
+ def setCurrentScreen(self,screen):
+ self.current_screen = screen
+ self.gizmos[0].setHighlight(screen==0)
+ self.gizmos[1].setHighlight(screen==1)
+ self.update()
+
+ def getCurrentScreen(self):
+ return self.current_screen
+
+ def setPosition(self,position):
+ self.position = position
+ self._positionGizmos()
+ self.update()
+
+ def getPosition(self):
+ """Returns one of XSetup.POSITION_LEFTOF, XSetup.POSITION_RIGHTOF,
+ XSetup.POSITION_ABOVE or XSetup.POSITION_BELOW.
+ """
+ return self.position
+
+ def setScreenResolution(self,screenNumber,width,height):
+ self.gizmos[screenNumber].setWidth(width)
+ self.gizmos[screenNumber].setHeight(height)
+ self.setPosition(self.position) # Reposition and force update.
+
+ def _positionGizmos(self):
+ g1 = self.gizmos[0]
+ g2 = self.gizmos[1]
+
+ # Treat POSITION_RIGHTOF and POSITION_BELOW as LEFTOF and ABOVE with the
+ # gizmos swapped around.
+ if self.position==XSetup.POSITION_RIGHTOF or self.position==XSetup.POSITION_BELOW:
+ tmp = g1
+ g1 = g2
+ g2 = tmp
+
+ if self.position==XSetup.POSITION_LEFTOF or self.position==XSetup.POSITION_RIGHTOF:
+ x = -g1.getWidth()
+ y = -max(g1.getHeight(), g2.getHeight())/2
+ g1.setPosition(QPoint(x,y))
+
+ x = 0
+ g2.setPosition(QPoint(x,y))
+
+ else:
+ x = -max(g1.getWidth(), g2.getWidth())/2
+ y = -g1.getHeight()
+ g1.setPosition(QPoint(x,y))
+
+ y = 0
+ g2.setPosition(QPoint(x,y))
+
+ def mousePressEvent(self,event):
+ # Translate the point in the window into our gizmo space.
+ world_point = self._getGizmoMatrix().invert()[0].map(event.pos())
+
+ # If the mouse is in the air space of a gizmo, then we change the cursor to
+ # indicate that the gizmo can be dragged.
+ for giz in self.gizmos:
+ if giz.getRect().contains(world_point):
+ self.setCurrentScreen(self.gizmos.index(giz))
+ break
+ else:
+ return
+
+ # Pressing down the mouse button on a gizmo also starts a drag operation.
+ self.dragging = True
+ self.dragging_gizmo = self.getCurrentScreen()
+ self.drag_handle = world_point - self.gizmos[self.dragging_gizmo].getPosition()
+
+ # Let other people know that a gizmo has been selected.
+ self.emit(PYSIGNAL("pressed()"), (self.current_screen,) )
+
+ def mouseReleaseEvent(self,event):
+ if not self.dragging:
+ return
+
+ # Translate the point in the window into our gizmo space.
+ world_point = self._getGizmoMatrix().invert()[0].map(event.pos())
+
+ if self._moveGizmo(world_point):
+ self.setPosition(self.drag_position)
+ self.emit(PYSIGNAL("positionChanged()"), (self.position,) )
+ else:
+ self.setPosition(self.position)
+ self.dragging = False
+
+ def mouseMoveEvent(self,event):
+ # Translate the point in the window into our gizmo space.
+ world_point = self._getGizmoMatrix().invert()[0].map(event.pos())
+
+ # If the mouse is in the air space of a gizmo, then we change the cursor to
+ # indicate that the gizmo can be dragged.
+ for giz in self.gizmos:
+ if giz.getRect().contains(world_point):
+ self.setCursor(QCursor(Qt.SizeAllCursor))
+ break
+ else:
+ self.unsetCursor()
+
+ if self.dragging:
+ self._moveGizmo(world_point)
+ self.update()
+
+ return
+
+ def _moveGizmo(self,worldPoint):
+ new_drag_position = worldPoint-self.drag_handle
+
+ # Drag gizmo is simply the thing being dragged.
+ drag_gizmo = self.gizmos[self.dragging_gizmo]
+ drag_x = new_drag_position.x()
+ drag_y = new_drag_position.y()
+
+ # Snap gizmo is other (stationary) thing that we "snap" against.
+ snap_gizmo = self.gizmos[1-self.dragging_gizmo]
+ snap_x = snap_gizmo.getPosition().x()
+ snap_y = snap_gizmo.getPosition().y()
+
+ # Calculate the list of "snap points".
+ snap_points = [
+ (snap_x-drag_gizmo.getWidth(), snap_y), # Left of
+ (snap_x+snap_gizmo.getWidth(), snap_y), # Right of
+ (snap_x, snap_y-drag_gizmo.getHeight()), # Above
+ (snap_x, snap_y+snap_gizmo.getHeight())] # Below
+
+ # Find the snap point that the drag gizmo is closest to.
+ best_index = -1
+ best_distance = 0
+ i = 0
+ for snap_point in snap_points:
+ dx = snap_point[0] - drag_x
+ dy = snap_point[1] - drag_y
+ distance_squared = dx*dx + dy*dy
+ if best_index==-1 or distance_squared < best_distance:
+ best_index = i
+ best_distance = distance_squared
+ i += 1
+
+ # Lookup the best dualhead position that this configuration matches.
+ if self.dragging_gizmo==0:
+ self.drag_position = [
+ XSetup.POSITION_LEFTOF,
+ XSetup.POSITION_RIGHTOF,
+ XSetup.POSITION_ABOVE,
+ XSetup.POSITION_BELOW][best_index]
+ else:
+ self.drag_position = [
+ XSetup.POSITION_RIGHTOF,
+ XSetup.POSITION_LEFTOF,
+ XSetup.POSITION_BELOW,
+ XSetup.POSITION_ABOVE][best_index]
+
+ # Convert the auto-snap distance in pixels into a distance in the gizmo coordinate system.
+ world_snap_distance = self.snap_distance / self._getGizmoToPixelsScaleFactor()
+
+ # Should this drag gizmo visually snap?
+ snapped = False
+ if best_distance <= (world_snap_distance*world_snap_distance):
+ new_drag_position = QPoint(snap_points[best_index][0],snap_points[best_index][1])
+ snapped = True
+
+ # Move the gizmo
+ self.gizmos[self.dragging_gizmo].setPosition(new_drag_position)
+
+ return snapped
+
+ def paintEvent(self,event=None):
+ QWidget.paintEvent(self,event)
+
+ # Paint to an off screen buffer first. Later we copy it to widget => flicker free.
+ off_screen_buffer = QPixmap(self.width(),self.height())
+ off_screen_painter = QPainter(off_screen_buffer)
+
+ # Erase the buffer first
+ off_screen_painter.setBackgroundColor(self.colorGroup().mid() )
+ off_screen_painter.eraseRect(0, 0, off_screen_buffer.width(), off_screen_buffer.height())
+
+ #
+ off_screen_painter.setWorldMatrix(self._getGizmoMatrix())
+
+ # Paint the non-selected gizmo first.
+ self.gizmos[ 1-self.current_screen ].paint(off_screen_painter)
+
+ # Now paint the selected gizmo
+ self.gizmos[self.current_screen].paint(off_screen_painter)
+
+ # Turn off the world matrix transform.
+ off_screen_painter.setWorldXForm(False)
+
+ # Draw the rounded border
+ off_screen_painter.setPen(QPen(self.colorGroup().dark(),1))
+ off_screen_painter.drawRoundRect(0,0,self.width(),self.height(),2,2)
+
+ off_screen_painter.end()
+
+ # Update the widget
+ bitBlt(self, 0, 0, off_screen_buffer, 0, 0, self.width(), self.height(), Qt.CopyROP, False)
+
+ def _getGizmoMatrix(self):
+ matrix = QWMatrix()
+ matrix.translate(self.width()/2,self.height()/2)
+
+ scale_factor = self._getGizmoToPixelsScaleFactor()
+ matrix.scale(scale_factor,scale_factor)
+ return matrix
+
+ def _getGizmoToPixelsScaleFactor(self):
+ g1 = self.gizmos[0]
+ g2 = self.gizmos[1]
+ size = min(self.width(),self.height())
+ vscale = float(self.height()) / (2.1 * (g1.getHeight()+g2.getHeight()))
+ hscale = float(self.width()) / (2.1 * (g1.getWidth()+g2.getWidth()))
+ return min(vscale,hscale)
+
+############################################################################
+class MovingGizmo(object):
+ """A gizmo represents a screen/monitor. It also has a width and height that
+ correspond to the resolution of screen."""
+
+ def __init__(self,label,filename,initial_pos=QPoint(0,0),imagedir="."):
+ self.width = 100
+ self.height = 100
+ self.pixmap = QPixmap(imagedir+filename)
+
+ self.highlight = False
+ self.highlight_color = QColor(255,0,0)
+
+ self.setPosition(initial_pos)
+
+ # Used for caching the scaled pixmap.
+ self.scaled_width = -1
+ self.scaled_height = -1
+
+ def setHighlight(self,enable):
+ self.highlight = enable
+
+ def setHighlightColor(self,color):
+ self.highlight_color = color
+
+ def setPosition(self,position):
+ self.position = position
+
+ def getSize(self):
+ return QSize(self.width,self.height)
+
+ def getPosition(self):
+ return self.position
+
+ def getRect(self):
+ return QRect(self.position,self.getSize())
+
+ def setWidth(self,width):
+ self.width = width
+
+ def getWidth(self):
+ return self.width
+
+ def setHeight(self,height):
+ self.height = height
+
+ def getHeight(self):
+ return self.height
+
+ def paint(self,painter):
+ painter.save()
+ if self.highlight:
+ pen = QPen(self.highlight_color,6)
+ painter.setPen(pen)
+
+ painter.drawRect(self.position.x(), self.position.y(), self.width, self.height)
+
+ to_pixels_matrix = painter.worldMatrix()
+ top_left_pixels = to_pixels_matrix.map(self.position)
+ bottom_right_pixels = to_pixels_matrix.map( QPoint(self.position.x()+self.width, self.position.y()+self.height) )
+
+ # Scale the pixmap.
+ scaled_width = bottom_right_pixels.x() - top_left_pixels.x()
+ scaled_height = bottom_right_pixels.y() - top_left_pixels.y()
+
+ if (scaled_width,scaled_height) != (self.scaled_width,self.scaled_height):
+ scale_matrix = QWMatrix()
+ scale_matrix.scale(
+ float(scaled_width)/float(self.pixmap.width()),
+ float(scaled_height)/float(self.pixmap.height()) )
+
+ self.scaled_pixmap = self.pixmap.xForm(scale_matrix)
+ (self.scaled_width,self.scaled_height) = (scaled_width,scaled_height)
+
+ # Paste in the scaled pixmap.
+ bitBlt(painter.device(), top_left_pixels.x(), top_left_pixels.y(), self.scaled_pixmap, 0, 0,
+ self.scaled_pixmap.width(), self.scaled_pixmap.height(),Qt.CopyROP, False)
+
+ painter.restore()
+
+############################################################################
+class GfxCardWidget(QVGroupBox):
+ def __init__(self, parent, xsetup, gfxcard, gfxcarddialog, monitordialog):
+ global imagedir
+ QVGroupBox.__init__(self,parent)
+
+ self.xsetup = xsetup
+ self.gfxcard = gfxcard
+ self.gfxcarddialog = gfxcarddialog
+ self.monitordialog = monitordialog
+ self._buildGUI()
+ self._syncGUI()
+
+ def _buildGUI(self):
+ # Create the GUI
+
+ gridwidget = QWidget(self)
+ grid = QGridLayout(gridwidget,2+3*len(self.gfxcard.getScreens()))
+ grid.setSpacing(KDialog.spacingHint())
+ grid.setColStretch(0,0)
+ grid.setColStretch(1,0)
+ grid.setColStretch(2,0)
+ grid.setColStretch(3,1)
+ grid.setColStretch(4,0)
+
+ gfxcardpic = QLabel(gridwidget)
+ gfxcardpic.setPixmap(UserIcon('hi32-gfxcard'))
+ grid.addMultiCellWidget(gfxcardpic,0,1,0,0)
+
+ label = QLabel(gridwidget)
+ label.setText(i18n("Graphics card:"))
+ grid.addWidget(label,0,1)
+
+ self.gfxcardlabel = QLabel(gridwidget)
+ grid.addWidget(self.gfxcardlabel,0,2)
+
+ label = QLabel(gridwidget)
+ label.setText(i18n("Driver:"))
+ grid.addWidget(label,1,1)
+
+ self.driverlabel = QLabel(gridwidget)
+ grid.addMultiCellWidget(self.driverlabel,1,1,2,3)
+
+ gfxbutton = QPushButton(gridwidget)
+ gfxbutton.setText(i18n("Configure..."))
+ self.connect(gfxbutton,SIGNAL("clicked()"),self.slotGfxCardConfigureClicked)
+ grid.addWidget(gfxbutton,0,4)
+ gfxbutton.setEnabled(self.xsetup.mayModifyXorgConfig())
+
+ # Add all of the screens
+ row = 2
+ count = 1
+ self.monitorlabels = []
+ self.monitor_buttons = []
+ self.monitor_roles = []
+ for screen in self.gfxcard.getScreens():
+ frame = QFrame(gridwidget)
+ frame.setFrameShape(QFrame.HLine)
+ frame.setFrameShadow(QFrame.Sunken)
+ grid.addMultiCellWidget(frame,row,row,0,4)
+ row += 1
+
+ monitorpic = QLabel(gridwidget)
+ monitorpic.setPixmap(UserIcon('hi32-display'))
+ grid.addMultiCellWidget(monitorpic,row,row+1,0,0)
+
+ # Monitor label
+ label = QLabel(gridwidget)
+ if len(self.gfxcard.getScreens())==1:
+ label.setText(i18n("Monitor:"))
+ else:
+ label.setText(i18n("Monitor #%1:").arg(count))
+ grid.addWidget(label,row,1)
+
+ self.monitorlabels.append(QLabel(gridwidget))
+ grid.addMultiCellWidget(self.monitorlabels[-1],row,row,2,3)
+
+ # Role pulldown
+ if len(self.xsetup.getAllScreens())!=1:
+ label = QLabel(gridwidget)
+ label.setText(i18n("Role:"))
+ grid.addWidget(label,row+1,1)
+
+ role_combo = KComboBox(False,gridwidget)
+ role_combo.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
+ self.monitor_roles.append(role_combo)
+ role_combo.insertItem(i18n("Primary (1)"))
+ role_combo.insertItem(i18n("Secondary (2)"))
+ if len(self.xsetup.getAllScreens())>=3:
+ role_combo.insertItem(i18n("Unused"))
+ self.connect(role_combo,SIGNAL("activated(int)"),self.slotRoleSelected)
+ grid.addWidget(role_combo,row+1,2)
+ role_combo.setEnabled(self.xsetup.mayModifyXorgConfig())
+
+ monitorbutton = QPushButton(gridwidget)
+ self.monitor_buttons.append(monitorbutton)
+ monitorbutton.setText(i18n("Configure..."))
+ self.connect(monitorbutton,SIGNAL("clicked()"),self.slotMonitorConfigureClicked)
+ grid.addWidget(monitorbutton,row,4)
+ monitorbutton.setEnabled(self.xsetup.mayModifyXorgConfig())
+ row += 2
+ count += 1
+
+ def syncConfig(self):
+ self._syncGUI()
+
+ def _syncGUI(self):
+ if self.gfxcard.getGfxCardModel() is not None:
+ self.setTitle(self.gfxcard.getGfxCardModel().getName())
+ self.gfxcardlabel.setText(self.gfxcard.getGfxCardModel().getName())
+
+ if self.gfxcard.isProprietaryDriver():
+ try:
+ # Displayconfig thinks there is a proprietary driver
+ self.driverlabel.setText(self.gfxcard.getGfxCardModel().getProprietaryDriver())
+ except TypeError, errormsg:
+ # If there isn't it dies, so try again LP: #198269
+ self.driverlabel.setText(self.gfxcard.getGfxCardModel().getDriver())
+ else:
+ self.driverlabel.setText(self.gfxcard.getGfxCardModel().getDriver())
+ else:
+ self.setTitle(i18n("<Unknown>"))
+ self.gfxcardlabel.setText(i18n("<Unknown>"))
+ self.driverlabel.setText(i18n("<none>"))
+
+ # Sync the screens and monitors.
+ for i in range(len(self.gfxcard.getScreens())):
+ screen = self.gfxcard.getScreens()[i]
+
+ if screen.getMonitorModel() is None:
+ monitor_name = i18n("<unknown>")
+ else:
+ monitor_name = QString(screen.getMonitorModel().getName())
+ if screen.getMonitorAspect()==ModeLine.ASPECT_16_9:
+ monitor_name.append(i18n(" (widescreen)"))
+ self.monitorlabels[i].setText(monitor_name)
+
+ if len(self.xsetup.getAllScreens())!=1:
+ self.monitor_roles[i].setCurrentItem(
+ {XSetup.ROLE_PRIMARY: 0,
+ XSetup.ROLE_SECONDARY: 1,
+ XSetup.ROLE_UNUSED: 2}
+ [self.xsetup.getScreenRole(screen)])
+
+ def slotGfxCardConfigureClicked(self):
+ result = self.gfxcarddialog.do(self.gfxcard.getGfxCardModel(), \
+ self.gfxcard.isProprietaryDriver(), self.gfxcard.getDetectedGfxCardModel(),
+ self.gfxcard.getVideoRam())
+
+ (new_card_model, new_proprietary_driver, new_video_ram) = result
+
+ if new_card_model is self.gfxcard.getGfxCardModel() and \
+ new_proprietary_driver==self.gfxcard.isProprietaryDriver() and \
+ new_video_ram==self.gfxcard.getVideoRam():
+ return
+ self.gfxcard.setGfxCardModel(new_card_model)
+ self.gfxcard.setProprietaryDriver(new_proprietary_driver)
+ self.gfxcard.setVideoRam(new_video_ram)
+ self._syncGUI()
+ self.emit(PYSIGNAL("configChanged"), () )
+
+ def slotMonitorConfigureClicked(self):
+ screen_index = self.monitor_buttons.index(self.sender())
+ screen_obj = self.gfxcard.getScreens()[screen_index]
+
+ (new_monitor_model,new_aspect) = self.monitordialog.do(screen_obj.getMonitorModel(),
+ screen_obj.getMonitorAspect(),
+ self.xsetup.getGfxCards()[0].getScreens()[0] is screen_obj)
+
+ screen_obj.setMonitorModel(new_monitor_model)
+ screen_obj.setMonitorAspect(new_aspect)
+ self._syncGUI()
+ self.emit(PYSIGNAL("configChanged"), () )
+
+ def slotRoleSelected(self,index):
+ screen_index = self.monitor_roles.index(self.sender())
+ screen_obj = self.gfxcard.getScreens()[screen_index]
+ self.xsetup.setScreenRole(screen_obj,[XSetup.ROLE_PRIMARY,XSetup.ROLE_SECONDARY,XSetup.ROLE_UNUSED][index])
+
+ self._syncGUI()
+ self.emit(PYSIGNAL("configChanged"), () )
diff --git a/displayconfig/driver-options.txt b/displayconfig/driver-options.txt
new file mode 100644
index 0000000..100a60e
--- /dev/null
+++ b/displayconfig/driver-options.txt
@@ -0,0 +1,1054 @@
+Driver options:
+===================
+
+This document contains driver specific options for Xorg and XFree86 and what
+effect they are meant to have. These options are only valid in conjuntion with
+the specified driver and generally have no meaning / effect when used with
+other graphics drivers.
+
+o fbdev
+o fglrx (binary ATi driver)
+o i740
+o i810
+o mga
+o nv
+o nvidia
+o radeon
+o sis
+o vesa
+
+Driver fbdev:
+--------------
+(source: man fbdev)
+
+ Option "fbdev" "string"
+ The framebuffer device to use. Default: /dev/fb0.
+
+ Option "ShadowFB" "boolean"
+ Enable or disable use of the shadow framebuffer layer. Default: on.
+
+ Option "Rotate" "string"
+ Enable rotation of the display. The supported values are "CW" (clock‐
+ wise, 90 degrees), "UD" (upside down, 180 degrees) and "CCW" (counter
+ clockwise, 270 degrees). Implies use of the shadow framebuffer layer.
+ Default: off.
+
+
+Driver fglrx (ATi binary driver):
+----------------------------------
+
+Section "Device"
+ Identifier "Radeon 9600XT - fglrx"
+ Driver "fglrx"
+# ### generic DRI settings ###
+# === disable PnP Monitor ===
+ #Option "NoDDC"
+# === disable/enable XAA/DRI ===
+ Option "no_accel" "no"
+ Option "no_dri" "no"
+# === misc DRI settings ===
+ Option "mtrr" "off" # disable DRI mtrr mapper, driver has its own code for mtrr
+# ### FireGL DDX driver module specific settings ###
+# === Screen Management ===
+ Option "DesktopSetup" "0x00000000"
+ Option "MonitorLayout" "AUTO, AUTO"
+ Option "IgnoreEDID" "off"
+ Option "HSync2" ""
+ Option "VRefresh2" ""
+ Option "ScreenOverlap" "0"
+# === TV-out Management ===
+ Option "NoTV" "yes"
+ Option "TVStandard" "NTSC-M"
+ Option "TVHSizeAdj" "0"
+ Option "TVVSizeAdj" "0"
+ Option "TVHPosAdj" "0"
+ Option "TVVPosAdj" "0"
+ Option "TVHStartAdj" "0"
+ Option "TVColorAdj" "0"
+ Option "GammaCorrectionI" "0x00000000"
+ Option "GammaCorrectionII" "0x00000000"
+# === OpenGL specific profiles/settings ===
+ Option "Capabilities" "0x00000000"
+# === Video Overlay for the Xv extension ===
+ Option "VideoOverlay" "on"
+# === OpenGL Overlay ===
+# Note: When OpenGL Overlay is enabled, Video Overlay
+# will be disabled automatically
+ Option "OpenGLOverlay" "off"
+# === Center Mode (Laptops only) ===
+ Option "CenterMode" "off"
+# === Pseudo Color Visuals (8-bit visuals) ===
+ Option "PseudoColorVisuals" "off"
+# === QBS Management ===
+ Option "Stereo" "off"
+ Option "StereoSyncEnable" "1"
+# === FSAA Management ===
+ Option "FSAAEnable" "yes"
+ Option "FSAAScale" "4"
+ Option "FSAADisableGamma" "no"
+ Option "FSAACustomizeMSPos" "no"
+ Option "FSAAMSPosX0" "0.000000"
+ Option "FSAAMSPosY0" "0.000000"
+ Option "FSAAMSPosX1" "0.000000"
+ Option "FSAAMSPosY1" "0.000000"
+ Option "FSAAMSPosX2" "0.000000"
+ Option "FSAAMSPosY2" "0.000000"
+ Option "FSAAMSPosX3" "0.000000"
+ Option "FSAAMSPosY3" "0.000000"
+ Option "FSAAMSPosX4" "0.000000"
+ Option "FSAAMSPosY4" "0.000000"
+ Option "FSAAMSPosX5" "0.000000"
+ Option "FSAAMSPosY5" "0.000000"
+# === Misc Options ===
+ Option "UseFastTLS" "0"
+ Option "BlockSignalsOnLock" "on"
+ Option "UseInternalAGPGART" "yes"
+ Option "ForceGenericCPU" "no"
+ BusID "PCI:1:0:0" # vendor=1002, device=4152
+ Screen 0
+EndSection
+
+Driver i740:
+-------------
+(No info yet)
+
+
+Driver i810:
+-------------
+
+ Option "NoAccel" "boolean"
+ Disable or enable acceleration. Default: acceleration is enabled.
+
+ Option "SWCursor" "boolean"
+ Disable or enable software cursor. Default: software cursor is dis‐
+ able and a hardware cursor is used for configurations where the
+ hardware cursor is available.
+
+ Option "ColorKey" "integer"
+ This sets the default pixel value for the YUV video overlay key.
+ Default: undefined.
+
+ Option "CacheLines" "integer"
+ This allows the user to change the amount of graphics memory used for
+ 2D acceleration and video. Decreasing this amount leaves more for 3D
+ textures. Increasing it can improve 2D performance at the expense of
+ 3D performance. Default: depends on the resolution, depth, and
+ available video memory. The driver attempts to allocate at least
+ enough to hold two DVD-sized YUV buffers by default. The default
+ used for a specific configuration can be found by examining the Xorg
+ log file.
+
+ Option "DRI" "boolean"
+ Disable or enable DRI support. Default: DRI is enabled for configu‐
+ rations where it is supported.
+
+ The following driver Options are supported for the i810 and i815 chipsets:
+
+ Option "DDC" "boolean"
+ Disable or enable DDC support. Default: enabled.
+
+ Option "Dac6Bit" "boolean"
+ Enable or disable 6-bits per RGB for 8-bit modes. Default: 8-bits
+ per RGB for 8-bit modes.
+
+ Option "XvMCSurfaces" "integer"
+ This option enables XvMC. The integer parameter specifies the number
+ of surfaces to use. Valid values are 6 and 7. Default: XvMC is dis‐
+ abled.
+
+ The following driver Options are supported for the 830M and later chipsets:
+
+ Option "VBERestore" "boolean"
+ Enable or disable the use of VBE save/restore for saving and restor‐
+ ing the initial text mode. This is disabled by default because it
+ causes lockups on some platforms. However, there are some cases
+ where it must enabled for the correct restoration of the initial
+ video mode. If you are having a problem with that, try enabling this
+ option. Default: Disabled.
+
+ Option "VideoKey" "integer"
+ This is the same as the "ColorKey" option described above. It is
+ provided for compatibility with most other drivers.
+
+ Option "XVideo" "boolean"
+ Disable or enable XVideo support. Default: XVideo is enabled for
+ configurations where it is supported.
+
+ Option "MonitorLayout" "anystr"
+ Allow different monitor configurations. e.g. "CRT,LFP" will configure
+ a CRT on Pipe A and an LFP on Pipe B. Regardless of the primary
+ heads’ pipe it is always configured as "<PIPEA>,<PIPEB>". Addition‐
+ ally you can add different configurations such as "CRT+DFP,LFP" which
+ would put a digital flat panel and a CRT on pipe A, and a local flat
+ panel on pipe B. For single pipe configurations you can just specify
+ the monitors types on Pipe A, such as "CRT+DFP" which will enable the
+ CRT and DFP on Pipe A. Valid monitors are CRT, LFP, DFP, TV, CRT2,
+ LFP2, DFP2, TV2 and NONE. NOTE: Some configurations of monitor types
+ may fail, this depends on the Video BIOS and system configuration.
+ Default: Not configured, and will use the current head’s pipe and
+ monitor.
+
+ Option "Clone" "boolean"
+ Enable Clone mode on pipe B. This will setup the second head as a
+ complete mirror of the monitor attached to pipe A. NOTE: Video over‐
+ lay functions will not work on the second head in this mode. If you
+ require this, then use the MonitorLayout above and do (as an example)
+ "CRT+DFP,NONE" to configure both a CRT and DFP on Pipe A to achieve
+ local mirroring and disable the use of this option. Default: Clone
+ mode on pipe B is disabled.
+
+ Option "CloneRefresh" "integer"
+ When the Clone option is specified we can drive the second monitor at
+ a different refresh rate than the primary. Default: 60Hz.
+
+ Option "CheckLid" "boolean"
+ On mobile platforms it’s desirable to monitor the lid status and
+ switch the outputs accordingly when the lid is opened or closed. By
+ default this option is on, but may incur a very minor performance
+ penalty as we need to poll a register on the card to check for this
+ activity. It can be turned off using this option. This only works
+ with the 830M, 852GM and 855GM systems. Default: enabled.
+
+ Option "FlipPrimary" "boolean"
+ When using a dual pipe system, it may be preferable to switch the
+ primary screen to the alternate pipe to display on the other monitor
+ connection. NOTE: Using this option may cause text mode to be
+ restored incorrectly, and thus should be used with caution. Default:
+ disabled.
+
+ Option "DisplayInfo" "boolean"
+ It has been found that a certain BIOS call can lockup the Xserver
+ because of a problem in the Video BIOS. The log file will identify if
+ you are suffering from this problem and tell you to turn this option
+ off. Default: enabled
+
+ Option "DevicePresence" "boolean"
+ Tell the driver to perform an active detect of the currently con‐
+ nected monitors. This option is useful if the monitor was not con‐
+ nected when the machine has booted, but unfortunately it doesn’t
+ always work and is extremely dependent upon the Video BIOS. Default:
+ disabled
+
+
+Driver mga:
+------------
+
+ Option "ColorKey" "integer"
+ Set the colormap index used for the transparency key for the depth 8
+ plane when operating in 8+24 overlay mode. The value must be in the
+ range 2-255. Default: 255.
+
+ Option "HWCursor" "boolean"
+ Enable or disable the HW cursor. Default: on.
+
+ Option "MGASDRAM" "boolean"
+ Specify whether G100, G200 or G400 cards have SDRAM. The driver
+ attempts to auto-detect this based on the card’s PCI subsystem ID.
+ This option may be used to override that auto-detection. The mga
+ driver is not able to auto-detect the presence of of SDRAM on sec‐
+ ondary heads in multihead configurations so this option will often
+ need to be specified in multihead configurations. Default:
+ auto-detected.
+
+ Option "NoAccel" "boolean"
+ Disable or enable acceleration. Default: acceleration is enabled.
+
+ Option "NoHal" "boolean"
+ Disable or enable loading the "mga_hal" module. Default: the module
+ is loaded when available and when using hardware that it supports.
+
+ Option "OverclockMem"
+ Set clocks to values used by some commercial X Servers (G100, G200
+ and G400 only). Default: off.
+
+ Option "Overlay" "value"
+ Enable 8+24 overlay mode. Only appropriate for depth 24. Recognized
+ values are: "8,24", "24,8". Default: off. (Note: the G100 is unac‐
+ celerated in the 8+24 overlay mode due to a missing hardware fea‐
+ ture.)
+
+ Option "PciRetry" "boolean"
+ Enable or disable PCI retries. Default: off.
+
+ Option "Rotate" "CW"
+
+ Option "Rotate" "CCW"
+ Rotate the display clockwise or counterclockwise. This mode is unac‐
+ celerated. Default: no rotation.
+
+ Option "ShadowFB" "boolean"
+ Enable or disable use of the shadow framebuffer layer. Default: off.
+
+ Option "SyncOnGreen" "boolean"
+ Enable or disable combining the sync signals with the green signal.
+ Default: off.
+
+ Option "UseFBDev" "boolean"
+ Enable or disable use of on OS-specific fb interface (and is not sup‐
+ ported on all OSs). See fbdevhw(4x) for further information.
+ Default: off.
+
+ Option "VideoKey" "integer"
+ This sets the default pixel value for the YUV video overlay key.
+ Default: undefined.
+
+ Option "TexturedVideo" "boolean"
+ This has XvImage support use the texture engine rather than the video
+ overlay. This option is only supported by G200 and later chips, and
+ only at 16 and 32 bits per pixel. Default: off.
+
+
+Driver nv:
+-----------
+(source: man nv)
+ Option "HWCursor" "boolean"
+ Enable or disable the HW cursor. Default: on.
+
+ Option "NoAccel" "boolean"
+ Disable or enable acceleration. Default: acceleration is enabled.
+
+ Option "UseFBDev" "boolean"
+ Enable or disable use of on OS-specific fb interface (and is not sup-
+ ported on all OSs). See fbdevhw(4x) for further information.
+ Default: off.
+
+ Option "CrtcNumber" "integer"
+ GeForce2 MX, nForce2, Quadro4, GeForce4, Quadro FX and GeForce FX may
+ have two video outputs. The driver attempts to autodetect which one
+ the monitor is connected to. In the case that autodetection picks
+ the wrong one, this option may be used to force usage of a particular
+ output. The options are "0" or "1". Default: autodetected.
+
+ Option "FlatPanel" "boolean"
+ The driver usually can autodetect the presence of a digital flat
+ panel. In the case that this fails, this option can be used to force
+ the driver to treat the attached device as a digital flat panel.
+ With this driver, a digital flat panel will only work if it was
+ POSTed by the BIOS, that is, the machine must have booted to the
+ panel. If you have a dual head card you may also need to set the
+ option CrtcNumber described above. Default: off.
+
+ Option "FPDither" "boolean"
+ Many digital flat panels (particularly ones on laptops) have only 6
+ bits per component color resolution. This option tells the driver to
+ dither from 8 bits per component to 6 before the flat panel truncates
+ it. This is only supported in depth 24 on GeForce2 MX, nForce2,
+ GeForce4, Quadro4, Geforce FX and Quadro FX. Default: off.
+
+ Option "FPScale" "boolean"
+ Supported only on GeForce4, Quadro4, Geforce FX and Quadro FX. This
+ option tells to the driver to scale lower resolutions up to the flat
+ panel's native resolution. Default: on.
+
+ Option "Rotate" "CW"
+
+ Option "Rotate" "CCW"
+ Rotate the display clockwise or counterclockwise. This mode is unac-
+ celerated. Default: no rotation.
+
+ Note: The Resize and Rotate extension will be disabled if the Rotate
+ option is used.
+
+ Option "ShadowFB" "boolean"
+ Enable or disable use of the shadow framebuffer layer. Default: off.
+
+
+
+Driver nvidia.ko (binary driver):
+----------------------------------
+(source: ftp://download.nvidia.com/XFree86/Linux-x86/1.0-7174/README.txt)
+
+ Option "NvAGP" "integer"
+ Configure AGP support. Integer argument can be one of:
+ 0 : disable agp
+ 1 : use NVIDIA's internal AGP support, if possible
+ 2 : use AGPGART, if possible
+ 3 : use any agp support (try AGPGART, then NVIDIA's AGP)
+ Please note that NVIDIA's internal AGP support cannot
+ work if AGPGART is either statically compiled into your
+ kernel or is built as a module, but loaded into your
+ kernel (some distributions load AGPGART into the kernel
+ at boot up). Default: 3 (the default was 1 until after
+ 1.0-1251).
+
+ Option "NoLogo" "boolean"
+ Disable drawing of the NVIDIA logo splash screen at
+ X startup. Default: the logo is drawn.
+
+ Option "RenderAccel" "boolean"
+ Enable or disable hardware acceleration of the RENDER
+ extension. THIS OPTION IS EXPERIMENTAL. ENABLE IT AT YOUR
+ OWN RISK. There is no correctness test suite for the
+ RENDER extension so NVIDIA can not verify that RENDER
+ acceleration works correctly. Default: hardware
+ acceleration of the RENDER extension is disabled.
+
+ Option "NoRenderExtension" "boolean"
+ Disable the RENDER extension. Other than recompiling
+ the X-server, XFree86 does not seem to have another way of
+ disabling this. Fortunatly, we can control this from the
+ driver so we export this option. This is useful in depth
+ 8 where RENDER would normally steal most of the default
+ colormap. Default: RENDER is offered when possible.
+
+ Option "UBB" "boolean"
+ Enable or disable Unified Back Buffer on any Quadro
+ based GPUs (Quadro4 NVS excluded); please see
+ Appendix M for a description of UBB. This option has
+ no affect on non-Quadro chipsets. Default: UBB is on
+ for Quadro chipsets.
+
+ Option "NoFlip" "boolean"
+ Disable OpenGL flipping; please see Appendix M for
+ a description. Default: OpenGL will swap by flipping
+ when possible.
+
+ Option "DigitalVibrance" "integer"
+ Enables Digital Vibrance Control. The range of valid
+ values are 0 through 255. This feature is not available
+ on products older than GeForce2. Default: 0.
+
+ Option "Dac8Bit" "boolean"
+ Most Quadro parts by default use a 10 bit color look
+ up table (LUT) by default; setting this option to TRUE forces
+ these graphics chips to use an 8 bit (LUT). Default:
+ a 10 bit LUT is used, when available.
+
+ Option "Overlay" "boolean"
+ Enables RGB workstation overlay visuals. This is only
+ supported on Quadro4 and Quadro FX chips (Quadro4 NVS
+ excluded) in depth 24. This option causes the server to
+ advertise the SERVER_OVERLAY_VISUALS root window property
+ and GLX will report single and double buffered, Z-buffered
+ 16 bit overlay visuals. The transparency key is pixel
+ 0x0000 (hex). There is no gamma correction support in
+ the overlay plane. This feature requires XFree86 version
+ 4.1.0 or newer (or the Xorg X server). NV17/18 based
+ Quadros (ie. 500/550 XGL) have additional restrictions,
+ namely, overlays are not supported in TwinView mode
+ or with virtual desktops larger than 2046x2047 in any
+ dimension (eg. it will not work in 2048x1536 modes).
+ Quadro 7xx/9xx and Quadro FX will offer overlay visuals
+ in these modes (TwinView, or virtual desktops larger
+ than 2046x2047), but the overlay will be emulated with
+ a substantial performance penalty. RGB workstation
+ overlays are not supported when the Composite extension is
+ enabled. Default: off.
+
+ Option "CIOverlay" "boolean"
+ Enables Color Index workstation overlay visuals with
+ identical restrictions to Option "Overlay" above.
+ The server will offer visuals both with and without a
+ transparency key. These are depth 8 PseudoColor visuals.
+ Enabling Color Index overlays on X servers older than
+ XFree86 4.3 will force the RENDER extension to be disabled
+ due to bugs in the RENDER extension in older X servers.
+ Color Index workstation overlays are not supported when the
+ Composite extension is enabled. Default: off.
+
+ Option "TransparentIndex" "integer"
+ When color index overlays are enabled, use this option
+ to choose which pixel is used for the transparent pixel
+ in visuals featuring transparent pixels. This value
+ is clamped between 0 and 255 (Note: some applications
+ such as Alias's Maya require this to be zero
+ in order to work correctly). Default: 0.
+
+ Option "OverlayDefaultVisual" "boolean"
+ When overlays are used, this option sets the default
+ visual to an overlay visual thereby putting the root
+ window in the overlay. This option is not recommended
+ for RGB overlays. Default: off.
+
+ Option "RandRRotation" "boolean"
+ Enable rotation support for the XRandR extension. This
+ allows use of the XRandR X server extension for
+ configuring the screen orientation through rotation.
+ This feature is supported on GeForce2 or better hardware
+ using depth 24. This requires an XOrg 6.8.1 or newer
+ X server. This feature does not work with hardware overlays,
+ emulated overlays will be used instead at a substantial
+ performance penalty. See APPENDIX W for details.
+ Default: off.
+
+ Option "SWCursor" "boolean"
+ Enable or disable software rendering of the X cursor.
+ Default: off.
+
+ Option "HWCursor" "boolean"
+ Enable or disable hardware rendering of the X cursor.
+ Default: on.
+
+ Option "CursorShadow" "boolean" Enable or disable use of a
+ shadow with the hardware accelerated cursor; this is a
+ black translucent replica of your cursor shape at a
+ given offset from the real cursor. This option is
+ only available on GeForce2 or better hardware (ie
+ everything but TNT/TNT2, GeForce 256, GeForce DDR and
+ Quadro). Default: no cursor shadow.
+
+ Option "CursorShadowAlpha" "integer"
+ The alpha value to use for the cursor shadow; only
+ applicable if CursorShadow is enabled. This value must
+ be in the range [0, 255] -- 0 is completely transparent;
+ 255 is completely opaque. Default: 64.
+
+ Option "CursorShadowXOffset" "integer"
+ The offset, in pixels, that the shadow image will be
+ shifted to the right from the real cursor image; only
+ applicable if CursorShadow is enabled. This value must
+ be in the range [0, 32]. Default: 4.
+
+ Option "CursorShadowYOffset" "integer"
+ The offset, in pixels, that the shadow image will be
+ shifted down from the real cursor image; only applicable
+ if CursorShadow is enabled. This value must be in the
+ range [0, 32]. Default: 2.
+
+ Option "ConnectedMonitor" "string"
+ Allows you to override what the NVIDIA kernel module
+ detects is connected to your video card. This may
+ be useful, for example, if you use a KVM (keyboard,
+ video, mouse) switch and you are switched away when
+ X is started. In such a situation, the NVIDIA kernel
+ module cannot detect what display devices are connected,
+ and the NVIDIA X driver assumes you have a single CRT.
+
+ Valid values for this option are "CRT" (cathode ray
+ tube), "DFP" (digital flat panel), or "TV" (television);
+ if using TwinView, this option may be a comma-separated
+ list of display devices; e.g.: "CRT, CRT" or "CRT, DFP".
+
+ NOTE: anything attached to a 15 pin VGA connector is
+ regarded by the driver as a CRT. "DFP" should only be
+ used to refer to flatpanels connected via a DVI port.
+
+ Default: string is NULL.
+
+ Option "UseEdidFreqs" "boolean"
+ This option causes the X server to use the HorizSync
+ and VertRefresh ranges given in a display device's EDID,
+ if any. EDID provided range information will override
+ the HorizSync and VertRefresh ranges specified in the
+ Monitor section. If a display device does not provide an
+ EDID, or the EDID does not specify an hsync or vrefresh
+ range, then the X server will default to the HorizSync
+ and VertRefresh ranges specified in the Monitor section.
+
+ Option "IgnoreEDID" "boolean"
+ Disable probing of EDID (Extended Display Identification
+ Data) from your monitor. Requested modes are compared
+ against values gotten from your monitor EDIDs (if any)
+ during mode validation. Some monitors are known to lie
+ about their own capabilities. Ignoring the values that
+ the monitor gives may help get a certain mode validated.
+ On the other hand, this may be dangerous if you do not
+ know what you are doing. Default: Use EDIDs.
+
+ Option "NoDDC" "boolean"
+ Synonym for "IgnoreEDID"
+
+ Option "FlatPanelProperties" "string"
+ Requests particular properties of any connected flat
+ panels as a comma-separated list of property=value pairs.
+ Currently, the only two available properties are 'Scaling'
+ and 'Dithering'. The possible values for 'Scaling' are:
+ 'default' (the driver will use whatever scaling state
+ is current), 'native' (the driver will use the flat
+ panel's scaler, if it has one), 'scaled' (the driver
+ will use the NVIDIA scaler, if possible), 'centered'
+ (the driver will center the image, if possible),
+ and 'aspect-scaled' (the driver will scale with the
+ NVIDIA scaler, but keep the aspect ratio correct).
+ The possible values for 'Dithering' are: 'default'
+ (the driver will decide when to dither), 'enabled' (the
+ driver will always dither when possible), and 'disabled'
+ (the driver will never dither). If any property is not
+ specified, it's value shall be 'default'. An example
+ properties string might look like:
+
+ "Scaling = centered, Dithering = enabled"
+
+ Option "UseInt10Module" "boolean"
+ Enable use of the X Int10 module to soft-boot all
+ secondary cards, rather than POSTing the cards through
+ the NVIDIA kernel module. Default: off (POSTing is done
+ through the NVIDIA kernel module).
+
+ Option "TwinView" "boolean"
+ Enable or disable TwinView. Please see APPENDIX I for
+ details. Default: TwinView is disabled.
+
+ Option "TwinViewOrientation" "string"
+ Controls the relationship between the two display devices
+ when using TwinView. Takes one of the following values:
+ "RightOf" "LeftOf" "Above" "Below" "Clone". Please see
+ APPENDIX I for details. Default: string is NULL.
+
+ Option "SecondMonitorHorizSync" "range(s)"
+ This option is like the HorizSync entry in the Monitor
+ section, but is for the second monitor when using
+ TwinView. Please see APPENDIX I for details. Default:
+ none.
+
+ Option "SecondMonitorVertRefresh" "range(s)"
+ This option is like the VertRefresh entry in the Monitor
+ section, but is for the second monitor when using
+ TwinView. Please see APPENDIX I for details. Default:
+ none.
+
+ Option "MetaModes" "string"
+ This option describes the combination of modes to use
+ on each monitor when using TwinView. Please see APPENDIX
+ I for details. Default: string is NULL.
+
+ Option "NoTwinViewXineramaInfo" "boolean"
+ When in TwinView, the NVIDIA X driver normally provides
+ a Xinerama extension that X clients (such as window
+ managers) can use to to discover the current TwinView
+ configuration. Some window mangers can get confused by
+ this information, so this option is provided to disable
+ this behavior. Default: TwinView Xinerama information
+ is provided.
+
+ Option "TVStandard" "string"
+ Please see (app-j) APPENDIX J: CONFIGURING TV-OUT.
+
+ Option "TVOutFormat" "string"
+ Please see (app-j) APPENDIX J: CONFIGURING TV-OUT.
+
+ Option "TVOverScan" "Decimal value in the range 0.0 to 1.0"
+ Valid values are in the range 0.0 through 1.0; please see
+ (app-j) APPENDIX J: CONFIGURING TV-OUT.
+
+ Option "Stereo" "integer"
+ Enable offering of quad-buffered stereo visuals on Quadro.
+ Integer indicates the type of stereo glasses being used:
+
+ 1 - DDC glasses. The sync signal is sent to the glasses
+ via the DDC signal to the monitor. These usually
+ involve a passthrough cable between the monitor and
+ video card.
+
+ 2 - "Blueline" glasses. These usually involve
+ a passthrough cable between the monitor and video
+ card. The glasses know which eye to display based
+ on the length of a blue line visible at the bottom
+ of the screen. When in this mode, the root window
+ dimensions are one pixel shorter in the Y dimension
+ than requested. This mode does not work with virtual
+ root window sizes larger than the visible root window
+ size (desktop panning).
+
+ 3 - Onboard stereo support. This is usually only found
+ on professional cards. The glasses connect via a
+ DIN connector on the back of the video card.
+
+ 4 - TwinView clone mode stereo (aka "passive" stereo).
+ On video cards that support TwinView, the left eye
+ is displayed on the first display, and the right
+ eye is displayed on the second display. This is
+ normally used in conjuction with special projectors
+ to produce 2 polarized images which are then viewed
+ with polarized glasses. To use this stereo mode,
+ you must also configure TwinView in clone mode with
+ the same resolution, panning offset, and panning
+ domains on each display.
+
+ Stereo is only available on Quadro cards. Stereo
+ options 1, 2, and 3 (aka "active" stereo) may be used
+ with TwinView if all modes within each metamode have
+ identical timing values. Please see (app-l) APPENDIX
+ L: PROGRAMMING MODES for suggestions on making sure the
+ modes within your metamodes are identical. The identical
+ modeline requirement is not necessary for Stereo option 4
+ ("passive" stereo). Currently, stereo operation may
+ be "quirky" on the original Quadro (NV10) chip and
+ left-right flipping may be erratic. We are trying
+ to resolve this issue for a future release. Default:
+ Stereo is not enabled.
+
+ Stereo options 1, 2, and 3 (aka "active" stereo) are not
+ supported on Digital Flatpanels.
+
+ Option "AllowDFPStereo" "boolean"
+ By default, the NVIDIA X driver performs a check which
+ disables active stereo (stereo options 1, 2, and 3)
+ if the X screen is driving a DFP. The "AllowDFPStereo"
+ option bypasses this check.
+
+ Option "NoBandWidthTest" "boolean"
+ As part of mode validation, the X driver tests if a
+ given mode fits within the hardware's memory bandwidth
+ constraints. This option disables this test. Default:
+ the memory bandwidth test is performed.
+
+ Option "IgnoreDisplayDevices" "string"
+ This option tells the NVIDIA kernel module to completely
+ ignore the indicated classes of display devices when
+ checking what display devices are connected. You may
+ specify a comma-separated list containing any of "CRT",
+ "DFP", and "TV".
+
+ For example:
+
+ Option "IgnoreDisplayDevices" "DFP, TV"
+
+ will cause the NVIDIA driver to not attempt to detect
+ if any flatpanels or TVs are connected.
+
+ This option is not normally necessary; however, some video
+ BIOSes contain incorrect information about what display
+ devices may be connected, or what i2c port should be
+ used for detection. These errors can cause long delays
+ in starting X. If you are experiencing such delays, you
+ may be able to avoid this by telling the NVIDIA driver to
+ ignore display devices which you know are not connected.
+
+ NOTE: anything attached to a 15 pin VGA connector is
+ regarded by the driver as a CRT. "DFP" should only be
+ used to refer to flatpanels connected via a DVI port.
+
+ Option "MultisampleCompatibility" "boolean"
+ Enable or disable the use of separate front and back
+ multisample buffers. This will consume more memory
+ but is necessary for correct output when rendering to
+ both the front and back buffers of a multisample or
+ FSAA drawable. This option is necessary for correct
+ operation of SoftImage XSI. Default: a singlemultisample
+ buffer is shared between the front and back buffers.
+
+ Option "NoPowerConnectorCheck" "boolean"
+ The NVIDIA X driver will abort X server initialization
+ if it detects that a GPU that requires an external power
+ connector does not have an external power connector
+ plugged in. This option can be used to bypass this test.
+ Default: the power connector test is performed.
+
+ Option "XvmcUsesTextures" "boolean"
+ Forces XvMC to use the 3D engine for XvMCPutSurface
+ requests rather than the video overlay. Default: video
+ overlay is used when available.
+
+ Option "AllowGLXWithComposite" "boolean"
+ Enables GLX even when the Composite X extension is loaded.
+ ENABLE AT YOUR OWN RISK. OpenGL applications will not
+ display correctly in many circumstances with this setting
+ enabled. Default: GLX is disabled when Composite is
+ loaded.
+
+ Option "ExactModeTimingsDVI" "boolean"
+ Forces the initialization of the X server with the exact
+ timings specified in the ModeLine. Default: For DVI
+ devices, the X server inilializes with the closest mode in
+ the EDID list.
+
+
+Driver radeon:
+---------------
+(source: manpage radeon)
+
+ Option "SWcursor" "boolean"
+ Selects software cursor. The default is off.
+
+ Option "NoAccel" "boolean"
+ Enables or disables all hardware acceleration.
+ The default is to enable hardware acceleration.
+
+ Option "Dac6Bit" "boolean"
+ Enables or disables the use of 6 bits per color component when in 8
+ bpp mode (emulates VGA mode). By default, all 8 bits per color com-
+ ponent are used.
+ The default is off.
+
+ Option "VideoKey" "integer"
+ This overrides the default pixel value for the YUV video overlay key.
+ The default value is 0x1E.
+
+ Option "UseFBDev" "boolean"
+ Enable or disable use of an OS-specific framebuffer device interface
+ (which is not supported on all OSs). MergedFB does not work when
+ this option is in use. See fbdevhw(4x) for further information.
+ The default is off.
+
+ Option "AGPMode" "integer"
+ Set AGP data transfer rate. (used only when DRI is enabled)
+ 1 -- x1 (default)
+ 2 -- x2
+ 4 -- x4
+ others -- invalid
+
+ Option "AGPFastWrite" "boolean"
+ Enable AGP fast write.
+ (used only when DRI is enabled)
+ The default is off.
+
+ Option "BusType" "string"
+ Used to replace previous ForcePCIMode option. Should only be used
+ when driver’s bus detection is incorrect or you want to force a AGP
+ card to PCI mode. Should NEVER force a PCI card to AGP bus.
+ PCI -- PCI bus
+ AGP -- AGP bus
+ PCIE -- PCI Express (falls back to PCI at present)
+ (used only when DRI is enabled)
+ The default is auto detect.
+
+ Option "DDCMode" "boolean"
+ Force to use the modes queried from the connected monitor.
+ The default is off.
+
+ Option "DisplayPriority" "string"
+ Used to prevent flickering or tearing problem caused by display
+ buffer underflow.
+ AUTO -- Driver calculated (default).
+ BIOS -- Remain unchanged from BIOS setting.
+ Use this if the calculation is not correct
+ for your card.
+ HIGH -- Force to the highest priority.
+ Use this if you have problem with above options.
+ This may affect performence slightly.
+ The default value is AUTO.
+
+ Option "MonitorLayout" "string"
+ This option is used to overwrite the detected monitor types. This is
+ only required when driver makes a false detection. The possible mon-
+ itor types are:
+ NONE -- Not connected
+ CRT -- Analog CRT monitor
+ TMDS -- Desktop flat panel
+ LVDS -- Laptop flat panel
+ This option can be used in following format:
+ Option "MonitorLayout" "[type on primary], [type on secondary]"
+ For example, Option "MonitorLayout" "CRT, TMDS"
+
+ Primary/Secondary head for dual-head cards:
+ (when only one port is used, it will be treated as the primary
+ regardless)
+ Primary head:
+ DVI port on DVI+VGA cards
+ LCD output on laptops
+ Internal TMDS port on DVI+DVI cards
+ Secondary head:
+ VGA port on DVI+VGA cards
+ VGA port on laptops
+ External TMDS port on DVI+DVI cards
+
+ The default value is undefined.
+
+ Option "MergedFB" "boolean"
+ This enables merged framebuffer mode. In this mode you have a single
+ shared framebuffer with two viewports looking into it. It is similar
+ to Xinerama, but has some advantages. It is faster than Xinerama,
+ the DRI works on both heads, and it supports clone modes.
+ Merged framebuffer mode provides two linked viewports looking into a
+ single large shared framebuffer. The size of the framebuffer is
+ determined by the Virtual keyword defined on the Screen section of
+ your XF86Config file. It works just like regular virtual desktop
+ except you have two viewports looking into it instead of one.
+ For example, if you wanted a desktop composed of two 1024x768 view-
+ ports looking into a single desktop you would create a virtual desk-
+ top of 2048x768 (left/right) or 1024x1536 (above/below), e.g.,
+ Virtual 2048 768 or Virtual 1024 1536
+ The virtual desktop can be larger than larger than the size of the
+ viewports looking into it. In this case the linked viewports will
+ scroll around in the virtual desktop. Viewports with different sizes
+ are also supported (e.g., one that is 1024x768 and one that is
+ 640x480). In this case the smaller viewport will scroll relative to
+ the larger one such that none of the virtual desktop is inaccessable.
+ If you do not define a virtual desktop the driver will create one
+ based on the orientation of the heads and size of the largest defined
+ mode in the display section that is supported on each head.
+ The relation of the viewports in specified by the CRT2Position
+ Option. The options are Clone , LeftOf , RightOf , Above , and
+ Below. MergedFB is enabled by default if a monitor is detected on
+ each output. If no position is given it defaults to clone mode (the
+ old clone options are now deprecated, also, the option OverlayOnCRTC2
+ has been replaced by the Xv attribute XV_SWITCHCRT; the overlay can
+ be switched to CRT1 or CRT2 on the fly in clone mode).
+ The maximum framebuffer size that the 2D acceleration engine can han-
+ dle is 8192x8192. The maximum framebuffer size that the 3D engine
+ can handle is 2048x2048.
+ Note: Page flipping does not work well in certain configurations with
+ MergedFB. If you see rendering errors or other strange behavior,
+ disable page flipping. Also MergedFB is not compatible with the UseF-
+ BDev option.
+ The default value is undefined.
+
+ Option "CRT2HSync" "string"
+ Set the horizontal sync range for the secondary monitor. It is not
+ required if a DDC-capable monitor is connected.
+ For example, Option "CRT2HSync" "30.0-86.0"
+ The default value is undefined.
+
+ Option "CRT2VRefresh" "string"
+ Set the vertical refresh range for the secondary monitor. It is not
+ required if a DDC-capable monitor is connected.
+ For example, Option "CRT2VRefresh" "50.0-120.0"
+ The default value is undefined.
+
+ Option "CRT2Position" "string"
+ Set the relationship of CRT2 relative to CRT1. Valid options are:
+ Clone , LeftOf , RightOf , Above , and Below
+ For example, Option "CRT2Position" "RightOf"
+ The default value is Clone.
+
+ Option "MetaModes" "string"
+ MetaModes are mode combinations for CRT1 and CRT2. If you are using
+ merged frame buffer mode and want to change modes (CTRL-ALT-+/-),
+ these define which modes will be switched to on CRT1 and CRT2. The
+ MetaModes are defined as CRT1Mode-CRT2Mode (800x600-1024x768). Modes
+ listed individually (800x600) define clone modes, that way you can
+ mix clone modes with non-clone modes. Also some programs require
+ "standard" modes.
+ Note: Any mode you use in the MetaModes must be defined in the
+ Screen section of your XF86Config file. Modes not defined there will
+ be ignored when the MetaModes are parsed since the driver uses them
+ to make sure the monitors can handle those modes. If you do not
+ define a MetaMode the driver will create one based on the orientation
+ of the heads and size of the largest defined mode in the display sec-
+ tion that is supported on each head.
+ Modes 1024x768 800x600 640x480
+ For example, Option "MetaModes" "1024x768-1024x768 800x600-1024x768
+ 640x480-800x600 800x600"
+ The default value is undefined.
+
+ Option "OverlayOnCRTC2" "boolean"
+ Force hardware overlay to clone head.
+ The default value is off.
+
+ Option "NoMergedXinerama" "boolean"
+ Since merged framebuffer mode does not use Xinerama, apps are not
+ able to intelligently place windows. Merged framebuffer mode pro-
+ vides its own pseudo-Xinerama. This allows Xinerama compliant appli-
+ cations to place windows appropriately. There are some caveats.
+ Since merged framebuffer mode is able to change relative screen sizes
+ and orientations on the fly, as well has having overlapping view-
+ ports, pseudo-Xinerama, might not always provide the right hints.
+ Also many Xinerama compliant applications only query Xinerama once at
+ startup; if the information changes, they may not be aware of the
+ change. If you are already using Xinerama (e.g., a single head card
+ and a dualhead card providing three heads), pseudo-Xinerama will be
+ disabled.
+ This option allows you turn off the driver provided pseudo-Xinerama
+ extension.
+ The default value is FALSE.
+
+ Option "MergedXineramaCRT2IsScreen0" "boolean"
+ By default the pseudo-Xinerama provided by the driver makes the left-
+ most or bottom head Xinerama screen 0. Certain Xinerama-aware appli-
+ cations do special things with screen 0. To change that behavior,
+ use this option.
+ The default value is undefined.
+
+ Option "MergedDPI" "string"
+ The driver will attempt to figure out an appropriate DPI based on the
+ DDC information and the orientation of the heads when in merged
+ framebuffer mode. If this value does not suit you, you can manually
+ set the DPI using this option.
+ For example, Option "MergedDPI" "100 100"
+ The default value is undefined.
+
+ Option "IgnoreEDID" "boolean"
+ Do not use EDID data for mode validation, but DDC is still used for
+ monitor detection. This is different from NoDDC option.
+ The default value is off.
+
+ Option "PanelSize" "string"
+ Should only be used when driver cannot detect the correct panel size.
+ Apply to both desktop (TMDS) and laptop (LVDS) digital panels. When
+ a valid panel size is specified, the timings collected from DDC and
+ BIOS will not be used. If you have a panel with timings different
+ from that of a standard VESA mode, you have to provide this informa-
+ tion through the Modeline.
+ For example, Option "PanelSize" "1400x1050"
+ The default value is none.
+
+ Option "PanelOff" "boolean"
+ Disable panel output.
+ The default value is off.
+
+ Option "EnablePageFlip" "boolean"
+ Enable page flipping for 3D acceleration. This will increase perfor-
+ mance but not work correctly in some rare cases, hence the default is
+ off.
+ Note: Page flipping does not work well in certain configurations with
+ MergedFB. If you see rendering errors or other strange behavior,
+ disable page flipping.
+
+ Option "ForceMinDotClock" "frequency"
+ Override minimum dot clock. Some Radeon BIOSes report a minimum dot
+ clock unsuitable (too high) for use with television sets even when
+ they actually can produce lower dot clocks. If this is the case you
+ can override the value here. Note that using this option may damage
+ your hardware. You have been warned. The frequency parameter may be
+ specified as a float value with standard suffixes like "k", "kHz",
+ "M", "MHz".
+
+ Option "RenderAccel" "boolean"
+ Enables or disables hardware Render acceleration. This driver does
+ not support component alpha (subpixel) rendering. It is only sup-
+ ported on Radeon series up to and including 9200 (9500/9700 and newer
+ unsupported). The default is to enable Render acceleration.
+
+ Option "SubPixelOrder" "string"
+ Force subpixel order to specified order. Subpixel order is used for
+ subpixel decimation on flat panels.
+ NONE -- No subpixel (CRT like displays)
+ RGB -- in horizontal RGB order (most flat panels)
+ BGR -- in horizontal BGR order (some flat panels)
+
+ This option is intended to be used in following cases:
+ 1. The default subpixel order is incorrect for your panel.
+ 2. Enable subpixel decimation on analog panels.
+ 3. Adjust to one display type in dual-head clone mode setup.
+ 4. Get better performance with Render acceleration on digital panels
+ (use NONE setting).
+ The default is NONE for CRT, RGB for digital panels
+
+ Option "DynamicClocks" "boolean"
+ Enable dynamic clock scaling. The on-chip clocks will scale dynami-
+ cally based on usage. This can help reduce heat and increase battery
+ life by reducing power usage. Some users report reduced 3D prefor-
+ mance with this enabled. The default is off.
+
+
+
+Driver sis:
+------------
+
+ Option "NoAccel" "boolean"
+ Disable or enable 2D acceleration. Default: acceleration is enabled.
+
+ Option "HWCursor" "boolean"
+ Enable or disable the HW cursor. Default: HWCursor is on.
+
+ Option "SWCursor" "boolean"
+ The opposite of HWCursor. Default: SWCursor is off.
+
+ Option "Rotate" "CW"
+ Rotate the display clockwise. This mode is unaccelerated, and uses
+ the Shadow Frame Buffer layer. Using this option disables the Resize
+ and Rotate extension (RandR). Default: no rotation.
+
+ Option "Rotate" "CCW"
+ Rotate the display counterclockwise. This mode is unaccelerated, and
+ uses the Shadow Frame Buffer layer. Using this option disables the
+ Resize and Rotate extension (RandR). Default: no rotation.
+
+ Option "ShadowFB" "boolean"
+ Enable or disable use of the shadow framebuffer layer. Default:
+ Shadow framebuffer is off.
+
+ Option "CRT1Gamma" "boolean"
+ Enable or disable gamma correction. Default: Gamma correction is on.
+
+
+
+Driver vesa:
+-------------
+(source: man vesa)
+
+ Option "ShadowFB" "boolean"
+ Enable or disable use of the shadow framebuffer layer. Default: on.
+ This option is recommended for performance reasons.
+
diff --git a/displayconfig/energy.py b/displayconfig/energy.py
new file mode 100644
index 0000000..5c3f681
--- /dev/null
+++ b/displayconfig/energy.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'energy.ui'
+#
+# Created: Fri Jun 24 03:45:58 2005
+# by: The PyQt User Interface Compiler (pyuic) 3.14.1
+#
+# WARNING! All changes made in this file will be lost!
+
+
+from qt import *
+
+class DPMSTab(QDialog):
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ QDialog.__init__(self,parent,name,modal,fl)
+
+ if not name:
+ self.setName("DPMSTab")
+
+
+ DPMSTabLayout = QVBoxLayout(self,11,6,"DPMSTabLayout")
+
+ titlelayout = QHBoxLayout(None,0,6,"titlelayout")
+ topspacer = QSpacerItem(221,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ titlelayout.addItem(topspacer)
+
+ self.energystarpix = QLabel(self,"energystarpix")
+ self.energystarpix.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.energystarpix.sizePolicy().hasHeightForWidth()))
+ self.energystarpix.setMinimumSize(QSize(150,77))
+ self.energystarpix.setPixmap(QPixmap("energystar.png"))
+ self.energystarpix.setScaledContents(1)
+ titlelayout.addWidget(self.energystarpix)
+ DPMSTabLayout.addLayout(titlelayout)
+
+ self.screensavergroup = QGroupBox(self,"screensavergroup")
+ self.screensavergroup.setCheckable(1)
+ self.screensavergroup.setColumnLayout(0,Qt.Vertical)
+ self.screensavergroup.layout().setSpacing(6)
+ self.screensavergroup.layout().setMargin(11)
+ screensavergroupLayout = QHBoxLayout(self.screensavergroup.layout())
+ screensavergroupLayout.setAlignment(Qt.AlignTop)
+ spacer4 = QSpacerItem(101,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ screensavergroupLayout.addItem(spacer4)
+
+ self.screensavertext = QLabel(self.screensavergroup,"screensavertext")
+ screensavergroupLayout.addWidget(self.screensavertext)
+
+ self.screensavercombo = QComboBox(0,self.screensavergroup,"screensavercombo")
+ screensavergroupLayout.addWidget(self.screensavercombo)
+ DPMSTabLayout.addWidget(self.screensavergroup)
+
+ self.dpmsgroup = QGroupBox(self,"dpmsgroup")
+ self.dpmsgroup.setCheckable(1)
+ self.dpmsgroup.setColumnLayout(0,Qt.Vertical)
+ self.dpmsgroup.layout().setSpacing(6)
+ self.dpmsgroup.layout().setMargin(11)
+ dpmsgroupLayout = QHBoxLayout(self.dpmsgroup.layout())
+ dpmsgroupLayout.setAlignment(Qt.AlignTop)
+ spacer4_2 = QSpacerItem(244,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ dpmsgroupLayout.addItem(spacer4_2)
+
+ self.dpmstext = QLabel(self.dpmsgroup,"dpmstext")
+ dpmsgroupLayout.addWidget(self.dpmstext)
+
+ self.dpmscombo = QComboBox(0,self.dpmsgroup,"dpmscombo")
+ dpmsgroupLayout.addWidget(self.dpmscombo)
+ DPMSTabLayout.addWidget(self.dpmsgroup)
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ DPMSTabLayout.addItem(bottomspacer)
+
+ self.languageChange()
+
+ self.resize(QSize(508,372).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+
+ def languageChange(self):
+ self.setCaption(self.__tr("Display power saving"))
+ self.screensavergroup.setTitle(self.__tr("Enable screensaver"))
+ self.screensavertext.setText(self.__tr("Start screensaver after"))
+ self.dpmsgroup.setTitle(self.__tr("Enable display powermanagement"))
+ self.dpmstext.setText(self.__tr("Switch display off after"))
+
+
+ def __tr(self,s,c = None):
+ return qApp.translate("DPMSTab",s,c)
diff --git a/displayconfig/energystar.png b/displayconfig/energystar.png
new file mode 100644
index 0000000..7561140
--- /dev/null
+++ b/displayconfig/energystar.png
Binary files differ
diff --git a/displayconfig/execwithcapture.py b/displayconfig/execwithcapture.py
new file mode 100644
index 0000000..10c8e23
--- /dev/null
+++ b/displayconfig/execwithcapture.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+
+import os
+import select
+
+############################################################################
+def ExecWithCapture(command, argv, searchPath = 0, root = '/', stdin = 0,
+ catchfd = 1, closefd = -1):
+
+ if not os.access(root + command, os.X_OK) and not searchPath:
+ raise RuntimeError, command + " can not be run"
+
+ (read, write) = os.pipe()
+ childpid = os.fork()
+ if (not childpid):
+ if (root and root != '/'): os.chroot(root)
+ os.dup2(write, catchfd)
+ os.close(write)
+ os.close(read)
+
+ if closefd != -1:
+ os.close(closefd)
+ if stdin:
+ os.dup2(stdin, 0)
+ os.close(stdin)
+ if searchPath:
+ os.execvp(command, argv)
+ else:
+ os.execv(command, argv)
+ sys.exit(1)
+ os.close(write)
+
+ rc = ""
+ s = "1"
+ while s:
+ select.select([read], [], [])
+ s = os.read(read, 1000)
+ rc = rc + s
+
+ os.close(read)
+
+ try:
+ os.waitpid(childpid, 0)
+ except OSError, (errno, msg):
+ print __name__, "waitpid:", msg
+
+ return rc
diff --git a/displayconfig/extramodes b/displayconfig/extramodes
new file mode 100644
index 0000000..94dec61
--- /dev/null
+++ b/displayconfig/extramodes
@@ -0,0 +1,39 @@
+//
+// Extra modes to include as default modes in the X server.
+//
+// Based on Xorg's xc/programs/Xserver/hw/xfree86/etc/extramodes file.
+// The mode names have been changed to include the refresh rate.
+//
+
+# 832x624 @ 75Hz (74.55Hz) (fix if the official/Apple spec is different) hsync: 49.725kHz
+ModeLine "832x624@75" 57.284 832 864 928 1152 624 625 628 667 -Hsync -Vsync
+
+# 1280x960 @ 60.00 Hz (GTF) hsync: 59.64 kHz; pclk: 102.10 MHz
+Modeline "1280x960@60" 102.10 1280 1360 1496 1712 960 961 964 994 -HSync +Vsync
+
+# 1280x960 @ 75.00 Hz (GTF) hsync: 75.15 kHz; pclk: 129.86 MHz
+Modeline "1280x960@75" 129.86 1280 1368 1504 1728 960 961 964 1002 -HSync +Vsync
+
+# 1152x768 @ 54.8Hz (Titanium PowerBook) hsync: 44.2kHz
+ModeLine "1152x768@54" 64.995 1152 1178 1314 1472 768 771 777 806 +hsync +vsync
+
+# 1400x1050 @ 60Hz (VESA GTF) hsync: 65.5kHz
+ModeLine "1400x1050@60" 122.0 1400 1488 1640 1880 1050 1052 1064 1082 +hsync +vsync
+
+# 1400x1050 @ 75Hz (VESA GTF) hsync: 82.2kHz
+ModeLine "1400x1050@75" 155.8 1400 1464 1784 1912 1050 1052 1064 1090 +hsync +vsync
+
+# 1600x1024 @ 60Hz (SGI 1600SW) hsync: 64.0kHz
+Modeline "1600x1024@60" 106.910 1600 1620 1640 1670 1024 1027 1030 1067 -hsync -vsync
+
+# 1920x1440 @ 85Hz (VESA GTF) hsync: 128.5kHz
+Modeline "1920x1440@85" 341.35 1920 2072 2288 2656 1440 1441 1444 1512 -hsync +vsync
+
+# 2048x1536 @ 60Hz (VESA GTF) hsync: 95.3kHz
+Modeline "2048x1536@60" 266.95 2048 2200 2424 2800 1536 1537 1540 1589 -hsync +vsync
+
+# 2048x1536 @ 75Hz (VESA GTF) hsync: 120.2kHz
+Modeline "2048x1536@75" 340.48 2048 2216 2440 2832 1536 1537 1540 1603 -hsync +vsync
+
+# 2048x1536 @ 85Hz (VESA GTF) hsync: 137.0kHz
+Modeline "2048x1536@85" 388.04 2048 2216 2440 2832 1536 1537 1540 1612 -hsync +vsync
diff --git a/displayconfig/infimport.py b/displayconfig/infimport.py
new file mode 100755
index 0000000..f51475d
--- /dev/null
+++ b/displayconfig/infimport.py
@@ -0,0 +1,297 @@
+#!/usr/bin/python
+#
+# Based on inf2mondb.py from RedHat
+#
+# originally by Matt Wilson <msw@redhat.com>
+# option parsing and database comparison by Fred New
+# ini parsing completely rewritten by Matt Domsch <Matt_Domsch@dell.com> 2006
+#
+# Copyright 2002 Red Hat, Inc.
+# Copyright 2006 Dell, Inc.
+# Copyright 2007 Sebastian Heinlein
+#
+# This software may be freely redistributed under the terms of the GNU
+# library public license.
+#
+# You should have received a copy of the GNU Library Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+"""
+Provides an importer for Microsoft Windows monitor descriptions
+
+The code can be used as a python module for or as a script to add new monitor
+definitions to a monitor database.
+
+In code example: Read the list of monitors from an inf file.
+
+import infimport
+monitors = infimport.get_monitors_from_inf(PATH)
+
+Script example: To check for monitors of an inf file that are not yet in the database.
+
+./infimport.py MONITORS.inf /usr/share/hwdata/MonitorsDB
+"""
+
+import sys
+import string
+import re
+import ConfigParser
+import os
+
+import logging
+
+logging.basicConfig()
+log = logging.getLogger("infimport")
+#log.setLevel(logging.DEBUG)
+log.setLevel(logging.INFO)
+
+# this is a class to deal with various file line endings and leading whitespace
+# converts all \r line endings to \n.
+# It also strips leading whitespace.
+# NOTE: be sure to always return _something_, even if it is just "\n", or we
+# break the file API. (nothing == eof)
+class myFile(object):
+ def __init__(self, *args):
+ self.fd = open(*args)
+
+ def close(self):
+ return self.fd.close()
+
+ def readline(self, *args):
+ line = self.fd.readline(*args)
+ line = line.replace('\r', '\n')
+ line = line.replace('\n\n', '\n')
+ line = line.lstrip(" \t")
+ return line
+
+
+# we will use this to override default option parsing in ConfigParser to handle
+# Microsoft-style "INI" files. (Which do not necessarily have " = value " after
+# the option name
+OPTCRE = re.compile(
+ r'(?P<option>[^:=\s][^:=]*)' # very permissive!
+ r'\s*(?P<vi>[:=]{0,1})\s*' # any number of space/tab,
+ # optionally followed by
+ # separator (either : or =)
+ # optionally followed
+ # by any # space/tab
+ r'(?P<value>.*)$' # everything up to eol
+ )
+
+percentSplit = re.compile(r'%(?P<field>.*)%')
+def _percent_to_string(ini, strings, name):
+ mo = percentSplit.match(name)
+ if (mo):
+ field = mo.group('field')
+ try:
+ val = strings[field.lower()]
+ except KeyError:
+ return ""
+ return val.strip(" '\"")
+ return ""
+
+def get_monitors_from_database(path):
+ """Returns a dictonary of the found monitor models in the given
+ monitor models database"""
+ monitors = {}
+ try:
+ mdb = open(path, 'r')
+ except IOError, (errno, str):
+ log.error("Unable to open %s: %s" % (path, str))
+ return {}
+ for line in mdb.readlines():
+ if len(line.strip()) == 0 or line.startswith('#'):
+ continue
+ line_split = line.split(";")
+ vendor = line_split[0].strip()
+ name = line_split[1].strip()
+ id = line_split[2].strip()
+ if monitors.has_key((vendor, name, id)):
+ log.warn("Duplicated entry: %s" % line)
+ else:
+ monitors[(vendor, name, id)] = line
+ mdb.close()
+ return monitors
+
+def get_monitors_from_inf(path):
+ """Returns a dictonary of the found monitor models in the given .inf file"""
+ monitors = {}
+ ini = ConfigParser.ConfigParser()
+ # FIXME: perhaps could be done in a nicer way, but __builtins__ is a dict
+ # for imported modules
+ #ini.optionxform = __builtins__.str
+ ini.optionxform = type("")
+ ini.OPTCRE = OPTCRE
+ try:
+ f = myFile(path)
+ ini.readfp(f)
+ f.close()
+ except IOError, (errno, str):
+ log.error("Unable to open %s: %s" % (path, str))
+ sys.exit(1)
+
+ # a dictionary of manufacturers we're looking at
+ manufacturers = {}
+ # a big fat dictionary of strings to use later on.
+ strings = {}
+
+ # This RE is for EISA info lines
+ # %D5259A%=D5259A, Monitor\HWP0487
+ monitor1Re = re.compile(r'.*,.*Monitor\\(?P<id>[^\s]*)')
+ # This one is for legacy entries
+ # %3020% =PB3020, MonID_PB3020
+ monitor2Re = re.compile(r'.*,.*MonID_(?P<id>[^\s]*)')
+
+ for section in ini.sections():
+ if section.lower() == "manufacturer":
+ for mfr in ini.options(section):
+ # generate the vendor.arch funny entries
+ manufacturer_values = string.split(ini.get(section, mfr),
+ ',')
+ manufacturers[manufacturer_values[0]] = mfr
+ while len(manufacturer_values) > 1:
+ manufacturers["%s.%s" % (manufacturer_values[0],
+ manufacturer_values[-1])] = mfr
+ manufacturer_values = manufacturer_values[0:-1]
+
+ elif section.lower() == "strings":
+ for key in ini.options(section):
+ strings[key.lower()] = string.strip(ini.get(section, key))
+
+ for mfr in manufacturers.keys():
+ if ini.has_section(mfr):
+ monitor_vendor_name = manufacturers[mfr]
+ for monitor_name in ini.options(mfr):
+ v = ini.get(mfr, monitor_name)
+ v = v.split(',')
+ install_key = v[0].strip()
+
+ line = ini.get(mfr, monitor_name)
+ # Find monitor inf IDs and EISA ids
+
+ edid = "0"
+ mo = monitor1Re.match(line)
+ if mo:
+ edid = mo.group('id')
+ else:
+ mo = monitor2Re.match(line)
+ if mo:
+ edid = mo.group('id').strip()
+
+ #if self.monitors.has_key(edid.lower()):
+ # continue
+
+ if ini.has_section(install_key):
+ line = ini.get(install_key, "AddReg")
+ if line:
+ sline = line.split(',')
+ registry = sline[0]
+ try:
+ resolution = sline[1]
+ except IndexError:
+ resolution = ""
+ try:
+ dpms = sline[2]
+ except IndexError:
+ dpms = ""
+
+ if ini.has_section(registry):
+ for line in ini.options(registry):
+ if string.find(line, 'HKR,"MODES') >= 0:
+ sline = line.split('"')
+ try:
+ syncline = sline[3]
+ except IndexError:
+ syncline = ","
+ syncline = syncline.split(',')
+ hsync = syncline[0].strip()
+ vsync = syncline[1].strip()
+
+ vendor_clear = _percent_to_string(ini,
+ strings, monitor_vendor_name)
+ monitor_clear = _percent_to_string(ini,
+ strings, monitor_name)
+
+ output = "%s; %s; %s; %s; %s" % \
+ (vendor_clear, monitor_clear,
+ edid, hsync, vsync)
+ if dpms.lower().strip() == "dpms":
+ output = output + "; 1"
+
+ if not monitors.has_key((vendor_clear,
+ monitor_clear, edid.lower())):
+ log.debug("added %s" % output)
+ monitors[(vendor_clear,
+ monitor_clear,
+ edid.lower())] = output
+ else:
+ log.warn("duplicated entry %s" % output)
+ return monitors
+
+def write_monitors_to_file(monitors, path):
+ """Writes monitors as a monitor models database"""
+ try:
+ if os.path.exists(path):
+ os.remove(path)
+ mdb = open(path, 'w')
+ mdb.writelines(map(lambda l: "%s\n" % l, monitors.values()))
+ mdb.close()
+ except IOError, (errno, str):
+ log.error("Unable to write %s: %s" % (path, str))
+ return False
+
+def append_monitors_to_file(monitors, path):
+ """Appends monitors to a monitor models database"""
+ try:
+ if os.path.exists(path):
+ os.remove(path)
+ mdb = open(path, 'a')
+ mdb.writelines(map(lambda l: "%s\n" % l, monitors.values()))
+ mdb.close()
+ except IOError, (errno, str):
+ log.error("Unable to write %s: %s" % (path, str))
+ return False
+
+if __name__ == "__main__":
+ from optparse import OptionParser
+ import sys
+
+ parser = OptionParser()
+ parser.add_option("-a", "--append",
+ action="store_true", dest="append",
+ help="Append new models to the database")
+ parser.add_option("-o", "--output",
+ default=None,
+ action="store", type="string", dest="output",
+ help="Write changes to an alternative file")
+ parser.usage = "%prog [options] INF_FILE [MONITOR_DATABASE]"
+ (options, args) = parser.parse_args()
+
+ if len(args) == 2:
+ # continue with normal operation
+ pass
+ elif len(args) == 1:
+ # jsut print the monitors from the given inf file
+ monitors_inf = get_monitors_from_inf(args[0])
+ for mon in monitors_inf.values():
+ print "%s" % mon
+ sys.exit()
+ else:
+ parser.error("You have to specify an .inf file that contains the "
+ "monitor models that you want to add and a "
+ "monitor model database")
+
+ monitors_inf = get_monitors_from_inf(args[0])
+ monitors_db = get_monitors_from_database(args[1])
+
+ monitors_new = {}
+ for mon in monitors_inf.keys():
+ if not monitors_db.has_key(mon):
+ log.info("New monitor: %s" % monitors_inf[mon])
+ monitors_new[mon] = monitors_inf[mon]
+
+ if options.append:
+ if options.output:
+ append_monitors_to_file(monitors_new, options.output)
+ else:
+ append_monitors_to_file(new_monitors, args[1])
diff --git a/displayconfig/ktimerdialog.py b/displayconfig/ktimerdialog.py
new file mode 100644
index 0000000..5cca210
--- /dev/null
+++ b/displayconfig/ktimerdialog.py
@@ -0,0 +1,155 @@
+#!/usr/bin/python
+###########################################################################
+# ktimerdialog.py - description #
+# ------------------------------ #
+# begin : Mon Jul 26 2004 #
+# copyright : (C) 2004 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+# Based on Hamish Rodda's ktimerdialog.cpp.
+
+from qt import *
+from kdecore import *
+from kdeui import *
+
+class KTimerDialog(KDialogBase):
+ CountDown = 0
+ CountUp = 1
+ Manual = 2
+
+ def __init__(self, msec, style, parent, name, modal, caption="", \
+ buttonmask=KDialogBase.Ok|KDialogBase.Cancel|KDialogBase.Apply, \
+ defaultbutton=KDialogBase.Cancel, separator=False, \
+ user1=KGuiItem(), user2=KGuiItem(), user3=KGuiItem()):
+ """Parameters:
+
+ msec - integer, timeout in milliseconds
+ style - TimerStyle object.
+ parent - parent QWidget
+ name - String
+ model - boolean.
+ caption - String
+ buttonmask - integer
+ defaultbutton - ButtonCode
+ separator - boolean
+ user1 - KGuiItem
+ user2 - KGuiItem
+ user3 - KGuiItem
+ """
+
+ KDialogBase.__init__(self,parent, name, modal, caption, buttonmask, defaultbutton, \
+ separator, user1, user2, user3 )
+
+ self.totaltimer = QTimer(self)
+ self.updatetimer = QTimer(self)
+ self.msectotal = self.msecremaining = msec
+ self.updateinterval = 1000
+ self.tstyle = style
+
+ # default to cancelling the dialog on timeout
+ if buttonmask & self.Cancel:
+ self.buttonontimeout = self.Cancel
+
+ self.connect(self.totaltimer, SIGNAL("timeout()"), self.slotInternalTimeout)
+ self.connect(self.updatetimer, SIGNAL("timeout()"), self.slotUpdateTime)
+
+ # create the widgets
+ self.mainwidget = QVBox(self, "mainWidget")
+ self.timerwidget = QHBox(self.mainwidget, "timerWidget")
+ self.timerlabel = QLabel(self.timerwidget)
+ self.timerprogress = QProgressBar(self.timerwidget)
+ self.timerprogress.setTotalSteps(self.msectotal)
+ self.timerprogress.setPercentageVisible(False)
+ self.setMainWidget(self.mainwidget)
+ self.slotUpdateTime(False)
+
+ def show(self):
+ self.msecremaining = self.msectotal
+ self.slotUpdateTime(False)
+ KDialogBase.show(self)
+ self.totaltimer.start(self.msectotal, True)
+ self.updatetimer.start(self.updateinterval, False)
+
+ def exec_loop(self):
+ self.totaltimer.start(self.msectotal, True)
+ self.updatetimer.start(self.updateinterval, False)
+ return KDialogBase.exec_loop(self)
+
+ def setMainWidget(self, newmainwidget):
+ # yuck, here goes.
+ newwidget = QVBox(self)
+
+ if newmainwidget.parentWidget()!=self.mainwidget:
+ newmainwidget.reparent(newwidget, 0, QPoint(0,0))
+ else:
+ newwidget.insertChild(newmainwidget)
+
+ self.timerwidget.reparent(newwidget, 0, QPoint(0, 0))
+
+ self.mainwidget = newwidget
+ KDialogBase.setMainWidget(self, self.mainwidget)
+
+ def setRefreshInterval(self, msec):
+ self.updateinterval = msec;
+ if self.updatetimer.isActive():
+ self.updatetimer.changeInterval(self.updateinterval)
+
+ def timeoutButton(self):
+ return self.buttonontimeout
+
+ def setTimeoutButton(self, newbutton):
+ self.buttonontimeout = newbutton
+
+ def timerStyle(self):
+ return self.tstyle
+
+ def setTimerStyle(self, newstyle):
+ self.tstyle = newstyle
+
+ def slotUpdateTime(self, update=True):
+ if update:
+ if self.tstyle==self.CountDown:
+ self.msecremaining -= self.updateinterval
+ elif self.tstyle==self.CountUp:
+ self.msecremaining += self.updateinterval
+
+ self.timerprogress.setProgress(self.msecremaining)
+ self.timerlabel.setText( i18n("%1 seconds remaining:").arg(self.msecremaining/1000.0) )
+
+ def slotInternalTimeout(self):
+ #self.emit(SIGNAL("timerTimeout()"), () )
+ if self.buttonontimeout==self.Help:
+ self.slotHelp()
+ elif self.buttonontimeout==self.Default:
+ self.slotDefault()
+ elif self.buttonontimeout==self.Ok:
+ self.slotOk()
+ elif self.buttonontimeout==self.Apply:
+ self.applyPressed()
+ elif self.buttonontimeout==self.Try:
+ self.slotTry()
+ elif self.buttonontimeout==self.Cancel:
+ self.slotCancel()
+ elif self.buttonontimeout==self.Close:
+ self.slotClose()
+ #case User1:
+ # slotUser1();
+ #case User2:
+ # slotUser2();
+ # break;
+ elif self.buttonontimeout==self.User3:
+ self.slotUser3()
+ elif self.buttonontimeout==self.No:
+ self.slotNo()
+ elif self.buttonontimeout==self.Yes:
+ self.slotCancel()
+ elif self.buttonontimeout==self.Details:
+ self.slotDetails()
diff --git a/displayconfig/ldetect-lst/Cards+ b/displayconfig/ldetect-lst/Cards+
new file mode 100644
index 0000000..458f0c3
--- /dev/null
+++ b/displayconfig/ldetect-lst/Cards+
@@ -0,0 +1,2505 @@
+# $Id$
+# This is the database of card definitions used by XFdrake
+#
+
+# Each definition should have a NAME entry, a DRIVER
+#
+# A reference to another definition is made with SEE (already defined
+# entries are not overridden).
+#
+# Optional entries are:
+#
+# NOCLOCKPROBE: advises never to probe clocks
+# UNSUPPORTED: indicates card that is not yet properly supported by XFree4
+# LINE: adds a line of text to be included in the Device section (can include options or comments).
+#
+# DRI_GLX: 3D acceleration configuration for XFree 4 using DRI.
+# DRI_GLX_EXPERIMENTAL: DRI, but EXPERIMENTAL and may freeze the machine.
+#
+# BAD_FB_RESTORE: for bad cards not restoring cleanly framebuffer (XFree 4)
+#
+# MULTI_HEAD 2: for DualHead cards (think Matrox G450)
+# MULTI_HEAD n: for n Head cards (eg: "MULTI_HEAD 4" for QuadHead)
+# FB_TVOUT: the card displays to a plugged TV when in framebuffer
+#
+#
+
+
+######################################################################
+# VESA driver
+NAME VESA driver (generic)
+CHIPSET VESA VBE 2.0
+DRIVER vesa
+
+
+NAME FrameBuffer (generic)
+DRIVER fbdev
+
+
+#Chips & Technologies
+
+#untested
+NAME Chips & Technologies CT65520
+DRIVER chips
+LINE # Device section for C&T cards.
+LINE # Option "suspend_hack"
+LINE # Option "STN"
+LINE # Option "no_stretch"
+LINE # Option "no_center"
+LINE # Option "use_modeline"
+LINE # Option "fix_panel_size"
+LINE # videoram 512
+
+NAME KYRO Series
+DRIVER fbdev
+
+NAME Chips & Technologies CT65525
+LINE # Option "nolinear"
+LINE # MemBase 0x03b00000
+SEE Chips & Technologies CT65520
+
+NAME Chips & Technologies CT65530
+SEE Chips & Technologies CT65525
+
+NAME Chips & Technologies CT65535
+LINE # Option "hw_clocks"
+LINE # Textclockfreq 25.175
+SEE Chips & Technologies CT65530
+
+NAME Chips & Technologies CT65540
+LINE # Option "use_18bit_bus"
+SEE Chips & Technologies CT65535
+
+NAME Chips & Technologies CT65545
+LINE # Option "noaccel"
+LINE # Option "no_bitblt"
+LINE # Option "xaa_no_color_exp"
+LINE # Option "xaa_benchmark"
+LINE # Option "hw_cursor"
+LINE # Option "mmio"
+SEE Chips & Technologies CT65540
+
+NAME Chips & Technologies CT65546
+SEE Chips & Technologies CT65545
+
+NAME Chips & Technologies CT65548
+SEE Chips & Technologies CT65545
+
+NAME Chips & Technologies CT65550
+LINE # Option "noaccel"
+LINE # Option "no_bitblt"
+LINE # Option "xaa_no_color_exp"
+LINE # Option "xaa_benchmark"
+LINE # Option "hw_cursor"
+LINE # Option "sync_on_green"
+LINE # Option "fast_dram"
+LINE # Option "use_vclk1"
+LINE # Textclockfreq 25.175
+SEE Chips & Technologies CT65530
+
+NAME Chips & Technologies CT65554
+SEE Chips & Technologies CT65550
+
+NAME Chips & Technologies CT65555
+SEE Chips & Technologies CT65550
+
+NAME Chips & Technologies CT68554
+SEE Chips & Technologies CT65550
+
+NAME Chips & Technologies CT69000
+SEE Chips & Technologies CT65550
+
+NAME Chips & Technologies CT69030
+SEE Chips & Technologies CT65550
+
+NAME Chips & Technologies CT64200
+DRIVER chips
+LINE # Device section for C&T cards.
+LINE # videoram 1024
+
+NAME Chips & Technologies CT64300
+DRIVER chips
+LINE # Option "noaccel"
+LINE # Option "no_bitblt"
+LINE # Option "xaa_no_color_exp"
+LINE # Option "xaa_benchmark"
+LINE # Option "hw_cursor"
+LINE # Option "nolinear"
+LINE # MemBase 0x03b00000
+LINE # Option "hw_clocks"
+LINE # Textclockfreq 25.175
+SEE Chips & Technologies CT64200
+
+# Cirrus Logic
+
+#tested
+NAME Cirrus Logic GD542x
+DRIVER vga
+LINE # Device section for Cirrus Logic GD5420/2/4/6/8/9-based cards.
+LINE #MemBase 0x00e00000
+LINE #MemBase 0x04e00000
+LINE #Option "linear"
+
+#tested
+NAME Cirrus Logic GD543x
+DRIVER cirrus
+LINE # Device section for Cirrus Logic GD5430/34-based cards.
+LINE #MemBase 0x00e00000 # ISA card that maps to 14Mb
+LINE #MemBase 0x04000000 # VLB card that maps to 64Mb
+LINE #MemBase 0x80000000 # VLB card that maps to 2048Mb
+LINE #MemBase 0x02000000 # VLB card that maps to 32Mb
+LINE #Option "linear"
+
+NAME Cirrus Logic GD544x
+DRIVER cirrus
+
+NAME Creative Labs Graphics Blaster MA201
+SEE Cirrus Logic GD544x
+
+NAME Creative Labs Graphics Blaster MA202
+SEE Cirrus Logic GD544x
+
+#tested
+NAME Cirrus Logic GD5462
+DRIVER cirrus
+LINE #Option "fifo_conservative"
+
+#tested
+NAME Cirrus Logic GD5464
+DRIVER cirrus
+LINE #Option "fifo_conservative"
+
+#tested
+NAME Cirrus Logic GD5465
+DRIVER cirrus
+LINE #Option "fifo_conservative"
+
+NAME Creative Labs Graphics Blaster MA302
+SEE Cirrus Logic GD5462
+
+NAME Creative Labs Graphics Blaster MA334
+SEE Cirrus Logic GD5464
+
+NAME Creative Labs Graphics Blaster 3D
+SEE Cirrus Logic GD5464
+
+# reported not working on SGI 1200 as of 02/22/2001 (RH)
+# reported working on XF 4.2.0 by Juan (MDK)
+NAME Cirrus Logic GD5480
+DRIVER cirrus
+
+#tested
+NAME Diamond SpeedStar 64
+SEE Cirrus Logic GD543x
+
+NAME Diamond SpeedStar64 Graphics 2000/2200
+SEE Cirrus Logic GD543x
+
+NAME Diamond SpeedStar Pro SE (CL-GD5430/5434)
+SEE Cirrus Logic GD543x
+
+NAME Diamond SpeedStar Pro 1100
+SEE Cirrus Logic GD542x
+
+NAME Orchid Kelvin 64 VLB Rev A
+DRIVER cirrus
+LINE # Device section for Orchid Kelvin 64 VLB Rev A
+LINE # Linear framebuffer maps at 2048Mb. Some motherboards make linear addressing
+LINE # impossible. Some cards map at 32Mb.
+LINE #MemBase 0x02000000 # VLB card that maps to 32Mb
+LINE #MemBase 0x04000000 # VLB card that maps to 64Mb
+LINE MemBase 0x80000000 # VLB card that maps to 2048Mb
+LINE #Option "linear"
+
+NAME Orchid Kelvin 64 VLB Rev B
+DRIVER cirrus
+LINE # Device section for Orchid Kelvin 64 VLB Rev B
+LINE # Linear framebuffer maps at 32Mb. Some motherboards make linear addressing
+LINE # impossible. Some cards map at 2048Mb.
+LINE MemBase 0x02000000 # VLB card that maps to 32Mb
+LINE #MemBase 0x04000000 # VLB card that maps to 64Mb
+LINE #MemBase 0x80000000 # VLB card that maps to 2048Mb
+LINE #Option "linear"
+
+NAME Orchid Kelvin 64
+SEE Cirrus Logic GD543x
+
+NAME Intel 5430
+SEE Cirrus Logic GD543x
+
+NAME STB Nitro (64)
+SEE Cirrus Logic GD543x
+
+NAME STB Nitro 64 Video
+SEE Cirrus Logic GD544x
+
+NAME STB Horizon
+SEE Cirrus Logic GD542x
+
+NAME STB Horizon Video
+SEE Cirrus Logic GD544x
+
+NAME Genoa 8500VL(-28)
+SEE Cirrus Logic GD542x
+
+NAME Diamond SpeedStar Pro (not SE)
+SEE Cirrus Logic GD542x
+
+NAME ALG-5434(E)
+SEE Cirrus Logic GD543x
+
+#tested
+NAME Acumos AVGA3
+SEE Cirrus Logic GD542x
+
+NAME DFI-WG1000
+SEE Cirrus Logic GD542x
+
+NAME VI720
+SEE Cirrus Logic GD543x
+
+NAME Cirrus Logic GD62xx (laptop)
+DRIVER vga
+
+NAME Cirrus Logic GD64xx (laptop)
+DRIVER vga
+
+NAME Cirrus Logic GD754x (laptop)
+DRIVER vga
+
+NAME Techworks Ultimate 3D
+SEE Cirrus Logic GD5464
+
+NAME VideoLogic GrafixStar 550
+SEE Cirrus Logic GD5464
+
+NAME Jaton Video-70P
+SEE Cirrus Logic GD5464
+
+NAME PixelView Combo TV Pro (Prolink)
+DRIVER vga
+LINE # COMMENT on card TV Tuner
+
+NAME PixelView Combo TV 3D AGP (Prolink)
+DRIVER vga
+LINE # COMMENT on card TV+FM Tuner
+
+NAME Creative Labs Graphics Blaster Eclipse (OEM Model CT6510)
+SEE Cirrus Logic GD5465
+
+NAME VideoLogic GrafixStar 560 (PCI/AGP)
+SEE Cirrus Logic GD5465
+
+NAME Cirrus Logic GD5446 (noname card)
+DRIVER vga
+
+# S3 801/805
+
+NAME S3 801/805 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C801 (generic)
+SEE S3 801/805 (generic)
+
+NAME S3 86C805 (generic)
+SEE S3 801/805 (generic)
+
+NAME Orchid Fahrenheit 1280
+DRIVER s3
+NEEDVIDEORAM
+LINE #Probable clocks:
+LINE #Clocks 25.20 28.32 32.50 0.00 40.00 44.90 50.40 65.00
+LINE #Clocks 78.00 56.70 63.10 75.10 80.00 89.90 100.90 31.50
+
+NAME Miro Crystal 8S
+SEE S3 801/805 (generic)
+
+NAME Dell S3 805
+SEE S3 801/805 (generic)
+
+# S3 864/Trio64/Trio32/868
+
+NAME S3 864 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C864 (generic)
+SEE S3 864 (generic)
+
+NAME S3 Vision864 (generic)
+SEE S3 864 (generic)
+
+NAME S3 868 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C868 (generic)
+SEE S3 868 (generic)
+
+NAME S3 Vision868 (generic)
+SEE S3 868 (generic)
+
+NAME S3 868 with SDAC (86C716)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 Trio64 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C764 (Trio64)
+SEE S3 Trio64 (generic)
+
+NAME S3 Trio64V+ (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C765 (Trio64V+)
+SEE S3 Trio64V+ (generic)
+
+NAME S3 Trio32 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME Number Nine GXE64 with S3 Trio64
+SEE S3 Trio64 (generic)
+
+NAME Diamond Stealth 64 DRAM with S3 Trio64
+SEE S3 Trio64 (generic)
+
+NAME Diamond Stealth64 Graphics 2xx0 series (Trio64)
+SEE S3 Trio64 (generic)
+
+NAME Diamond Stealth 64 DRAM SE
+SEE S3 Trio32 (generic)
+
+NAME Diamond Stealth64 Video 2001 series (2121/2201)
+SEE S3 Trio64V+ (generic)
+
+NAME Miro Crystal 12SD
+SEE S3 Trio32 (generic)
+
+NAME Miro Crystal 22SD
+SEE S3 Trio64 (generic)
+
+NAME Diamond Stealth Video DRAM
+SEE S3 868 with SDAC (86C716)
+
+NAME Diamond Stealth64 Video 2120/2200
+SEE S3 868 with SDAC (86C716)
+
+NAME Number Nine FX Vision 330
+SEE S3 Trio64 (generic)
+
+NAME Number Nine FX Motion 331
+SEE S3 Trio64V+ (generic)
+
+NAME ASUS Video Magic PCI V864
+SEE S3 864 (generic)
+
+NAME ASUS Video Magic PCI VT64
+SEE S3 Trio64 (generic)
+
+NAME VidTech FastMax P20
+SEE S3 864 (generic)
+
+NAME VideoLogic GrafixStar 500
+SEE S3 868 with SDAC (86C716)
+
+NAME VideoLogic GrafixStar 400
+SEE S3 Trio64V+ (generic)
+
+NAME VideoLogic GrafixStar 300
+SEE S3 Trio64 (generic)
+
+NAME 2 the Max MAXColor S3 Trio64V+
+SEE S3 Trio64V+ (generic)
+
+NAME DataExpert DSV3365
+SEE S3 Trio64V+ (generic)
+
+NAME ExpertColor DSV3365
+SEE S3 Trio64V+ (generic)
+
+NAME DSV3326
+SEE S3 Trio64V+ (generic)
+
+# S3 Trio64V2
+
+NAME S3 Trio64V2 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 Trio64V2/DX (generic)
+SEE S3 Trio64V2 (generic)
+
+NAME S3 Trio64V2/GX (generic)
+SEE S3 Trio64V2 (generic)
+
+NAME S3 86C775 (Trio64V2/DX)
+SEE S3 Trio64V2/DX (generic)
+
+NAME S3 86C785 (Trio64V2/GX)
+SEE S3 Trio64V2/GX (generic)
+
+NAME Elsa WINNER 1000/T2D
+SEE S3 Trio64V2/DX (generic)
+
+
+# S3 Aurora64V+
+
+NAME S3 Aurora64V+ (generic)
+DRIVER s3
+NEEDVIDEORAM
+LINE # Option "lcd_center"
+LINE # Set_LCDClk <pixel_clock_for_LCD>
+
+NAME S3 86CM65 (Aurora64V+)
+SEE S3 Aurora64V+ (generic)
+
+NAME SHARP 9080
+SEE S3 Aurora64V+ (generic)
+
+NAME SHARP 9090
+SEE S3 Aurora64V+ (generic)
+
+NAME Compaq Armada 7730MT
+SEE S3 Aurora64V+ (generic)
+
+NAME Compaq Armada 7380DMT
+SEE S3 Aurora64V+ (generic)
+
+
+# S3 964/968
+
+NAME S3 964 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C964 (generic)
+SEE S3 964 (generic)
+
+NAME S3 Vision964 (generic)
+SEE S3 964 (generic)
+
+NAME S3 968 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C968 (generic)
+SEE S3 968 (generic)
+
+NAME S3 Vision968 (generic)
+SEE S3 968 (generic)
+
+NAME Diamond Stealth64 Video 3200
+LINE #Option "slow_vram"
+SEE S3 968 (generic)
+
+NAME Genoa VideoBlitz III AV
+LINE #s3RefClk 50
+LINE #DACspeed 170
+SEE S3 968 (generic)
+
+NAME STB Velocity 64 Video
+LINE #s3RefClk 24
+LINE #DACspeed 220
+SEE S3 968 (generic)
+
+NAME STB Powergraph 64 Video
+SEE S3 Trio64V+ (generic)
+
+NAME STB Powergraph 64
+SEE S3 Trio64 (generic)
+
+NAME Elsa Winner 1000TRIO
+SEE S3 Trio64 (generic)
+
+NAME Elsa Winner 1000TRIO/V
+SEE S3 Trio64V+ (generic)
+
+NAME Hercules Graphite Terminator 64
+LINE Option "slow_vram"
+LINE #s3RefClk 50
+LINE #DACspeed 170
+SEE S3 964 (generic)
+
+NAME Hercules Terminator 64/Video
+SEE S3 Trio64V+ (generic)
+
+NAME Hercules Graphite Terminator 64/DRAM
+SEE S3 Trio64 (generic)
+
+NAME Hercules Graphite Terminator Pro 64
+LINE #s3RefClk 16
+LINE #DACspeed 220
+SEE S3 968 (generic)
+
+NAME Number Nine FX Motion 771
+LINE #s3RefClk 16
+SEE S3 968 (generic)
+
+NAME Miro Crystal 80SV
+DRIVER s3
+NEEDVIDEORAM
+
+NAME Elsa Winner 2000PRO-2
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "ELSA_w2000pro"
+
+NAME Elsa Winner 2000PRO-4
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "ELSA_w2000pro"
+
+NAME Elsa Winner 2000PRO/X-2
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "sync_on_green"
+
+NAME Elsa Winner 2000PRO/X-4
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "sync_on_green"
+
+NAME Elsa Winner 2000PRO/X-8
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "sync_on_green"
+
+NAME Elsa Winner 2000AVI
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "sync_on_green"
+
+NAME Elsa Gloria-4
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "sync_on_green"
+
+NAME Elsa Gloria-8
+DRIVER s3
+NEEDVIDEORAM
+LINE #Option "sync_on_green"
+
+NAME VideoLogic GrafixStar 700
+DRIVER s3
+NEEDVIDEORAM
+
+NAME Leadtek WinFast S430
+DRIVER s3
+NEEDVIDEORAM
+
+NAME WinFast S430
+SEE Leadtek WinFast S430
+
+NAME Leadtek WinFast S510
+DRIVER s3
+NEEDVIDEORAM
+
+NAME WinFast S510
+SEE Leadtek WinFast S510
+
+# S3 928
+
+NAME S3 928 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C928 (generic)
+SEE S3 928 (generic)
+
+NAME Elsa Winner 1000VL
+DRIVER s3
+NEEDVIDEORAM
+LINE # the following settings should be detected and set automatically by XF86_S3
+LINE # if the serial number of the Elsa card is printed correctly:
+LINE #ClockChip "icd2061a"
+LINE #Membase 0xf8000000
+
+NAME Elsa Winner 1000TwinBus
+SEE Elsa Winner 1000VL
+
+NAME Elsa Winner 2000
+SEE S3 928 (generic)
+
+NAME Miro Crystal 16S
+SEE S3 928 (generic)
+
+# S3 911/924
+
+NAME S3 911/924 (generic)
+DRIVER s3
+NEEDVIDEORAM
+
+NAME S3 86C911 (generic)
+SEE S3 911/924 (generic)
+
+NAME S3 86C924 (generic)
+SEE S3 911/924 (generic)
+
+#NAME Orchid Fahrenheit 1280
+#SEE S3 911/924 (generic)
+
+NAME S3 924 with SC1148 DAC
+DRIVER s3
+NEEDVIDEORAM
+LINE #Probable clocks:
+LINE #Clocks 25.2 28.3 39.7 1.7 49.9 76.7 35.7 44
+LINE #Clocks 130.2 119.5 79.4 31.2 110.0 65.2 74.9 71.3
+
+# S3 ViRGE,/DX,/GX and ViRGE/VX
+
+NAME S3 ViRGE (old S3V server)
+DRIVER s3virge
+NEEDVIDEORAM
+
+NAME S3 ViRGE (generic)
+DRIVER s3virge
+NEEDVIDEORAM
+LINE #Option "xaa_benchmark"
+LINE #Option "fifo_moderate"
+LINE #Option "pci_burst_on"
+LINE #Option "pci_retry"
+
+NAME S3 ViRGE/DX (generic)
+DRIVER s3virge
+NEEDVIDEORAM
+LINE #Option "xaa_benchmark"
+LINE #Option "fifo_moderate"
+LINE #Option "pci_burst_on"
+LINE #Option "pci_retry"
+
+NAME S3 ViRGE/GX (generic)
+DRIVER s3virge
+NEEDVIDEORAM
+LINE #Option "xaa_benchmark"
+LINE #Option "fifo_moderate"
+LINE #Option "pci_burst_on"
+LINE #Option "pci_retry"
+
+
+NAME S3 ViRGE/GX2 (generic)
+DRIVER s3virge
+NEEDVIDEORAM
+LINE #Option "xaa_benchmark"
+LINE #Option "fifo_moderate"
+LINE #Option "pci_burst_on"
+LINE #Option "pci_retry"
+
+NAME S3 ViRGE/MX (generic)
+DRIVER s3virge
+NEEDVIDEORAM
+LINE #Option "lcd_center"
+LINE #Set_LCDClk <pixel_clock_for_LCD>
+LINE #Option "xaa_benchmark"
+LINE #Option "fifo_moderate"
+LINE #Option "pci_burst_on"
+LINE #Option "pci_retry"
+
+NAME S3 ViRGE/MX+ (generic)
+SEE S3 ViRGE/MX (generic)
+
+NAME S3 Trio3D
+DRIVER s3virge
+LINE Option "sw_cursor"
+
+NAME S3 86C365 (Trio3D)
+SEE S3 Trio3D
+
+NAME Elsa Winner T3D
+SEE S3 Trio3D
+
+NAME Hercules Terminator 128/3D
+SEE S3 Trio3D
+
+NAME AOpen PG128
+SEE S3 Trio3D
+
+NAME S3 86C368 (Trio3D/2X)
+NEEDVIDEORAM
+LINE # Option "no_accel" # You may enable this if there are timeouts when starting X
+SEE S3 Trio3D
+
+NAME S3 Trio3D/2X
+LINE # Option "no_accel" # You may enable this if there are timeouts when starting X
+SEE S3 Trio3D
+
+NAME S3 86C325 (ViRGE)
+SEE S3 ViRGE (generic)
+
+NAME S3 86C375 (ViRGE/DX)
+SEE S3 ViRGE/DX (generic)
+
+NAME S3 86C385 (ViRGE/GX)
+SEE S3 ViRGE/GX (generic)
+
+NAME S3 86C357 (ViRGE/GX2)
+SEE S3 ViRGE/GX2 (generic)
+
+NAME S3 86C260 (ViRGE/MX)
+SEE S3 ViRGE/MX (generic)
+
+NAME S3 86C280 (ViRGE/MX+)
+SEE S3 ViRGE/MX+ (generic)
+
+
+NAME Elsa Victory 3D
+SEE S3 ViRGE (generic)
+
+NAME Elsa Victory 3DX
+SEE S3 ViRGE/DX (generic)
+
+NAME Elsa Winner 3000-S
+SEE S3 ViRGE (generic)
+
+NAME Number Nine Visual 9FX Reality 332
+SEE S3 ViRGE (generic)
+
+NAME Number Nine FX Motion 332
+SEE S3 ViRGE (generic)
+
+NAME Diamond Stealth 3D 2000
+SEE S3 ViRGE (generic)
+
+NAME Diamond Stealth 3D 2000 PRO
+SEE S3 ViRGE/DX (generic)
+
+NAME Diamond Multimedia Stealth 3D 2000
+SEE S3 ViRGE (generic)
+
+NAME Diamond Multimedia Stealth 3D 2000 PRO
+SEE S3 ViRGE/DX (generic)
+
+NAME DataExpert DSV3325
+SEE S3 ViRGE (generic)
+
+NAME ExpertColor DSV3325
+SEE S3 ViRGE (generic)
+
+NAME DSV3325
+SEE S3 ViRGE (generic)
+
+NAME Hercules Terminator 64/3D
+SEE S3 ViRGE (generic)
+
+NAME Hercules Terminator 3D/DX
+SEE S3 ViRGE/DX (generic)
+
+NAME AOpen PT70
+SEE S3 ViRGE/DX (generic)
+
+NAME AOpen PT75
+SEE S3 ViRGE/DX (generic)
+
+NAME Leadtek WinFast 3D S600
+SEE S3 ViRGE (generic)
+
+NAME WinFast 3D S600
+SEE Leadtek WinFast 3D S600
+
+NAME Leadtek WinFast 3D S680
+SEE S3 ViRGE/GX2 (generic)
+
+NAME Miro MiroMedia 3D
+SEE S3 ViRGE (generic)
+
+NAME Orchid Technology Fahrenheit Video 3D
+SEE S3 ViRGE (generic)
+
+NAME STB Systems Powergraph 3D
+SEE S3 ViRGE (generic)
+
+NAME STB Nitro 3D
+SEE S3 ViRGE/GX (generic)
+
+NAME MELCO WGP-VG4S
+LINE #DACSpeed 191 162 111 83
+LINE #SetMClck 75
+SEE S3 ViRGE (generic)
+
+
+
+NAME S3 ViRGE/VX (generic)
+DRIVER s3virge
+NEEDVIDEORAM
+LINE #Option "xaa_benchmark"
+LINE #Option "fifo_moderate"
+LINE #Option "pci_burst_on"
+LINE #Option "pci_retry"
+
+
+NAME S3 86C988 (ViRGE/VX)
+SEE S3 ViRGE/VX (generic)
+
+NAME Elsa Winner 3000
+SEE S3 ViRGE/VX (generic)
+
+NAME Elsa Winner 3000-M-22
+SEE S3 ViRGE/VX (generic)
+
+NAME Elsa Winner 3000-L-42
+SEE S3 ViRGE/VX (generic)
+
+NAME Elsa Winner 2000AVI/3D
+SEE S3 ViRGE/VX (generic)
+
+NAME Diamond Stealth 3D 3000
+SEE S3 ViRGE/VX (generic)
+
+NAME STB Systems Velocity 3D
+SEE S3 ViRGE/VX (generic)
+
+NAME MELCO WGP-VX8
+SEE S3 ViRGE/VX (generic)
+
+NAME Number Nine FX Reality 772
+SEE S3 ViRGE/VX (generic)
+
+NAME Diamond Stealth 3D 4000
+SEE S3 ViRGE/GX2 (generic)
+
+NAME Toshiba Tecra 750CDT
+SEE S3 ViRGE/MX (generic)
+
+NAME Toshiba Tecra 750DVD
+SEE S3 ViRGE/MX (generic)
+
+NAME Toshiba Tecra 540CDT
+SEE S3 ViRGE/MX (generic)
+
+NAME Toshiba Tecra 550CDT
+SEE S3 ViRGE/MX (generic)
+
+# currently unsupported S3
+
+NAME Toshiba Satellite 2050 CDS
+SEE S3 ViRGE/MX (generic)
+
+NAME Toshiba Satellite 2520 CDS
+SEE S3 ViRGE/MX (generic)
+
+NAME Compaq Armada 7400
+SEE S3 ViRGE/MX (generic)
+
+NAME Compaq Armada 7800
+SEE S3 ViRGE/MX (generic)
+
+
+NAME S3 Savage (generic)
+DRIVER savage
+NEEDVIDEORAM
+LINE #Option "xaa_benchmark"
+
+# see bug #730
+NAME S3 Savage (generic, sw_cursor)
+SEE S3 Savage (generic)
+LINE Option "sw_cursor"
+LINE Option "ForceInit"
+
+NAME S3 86C390 (Savage3D)
+SEE S3 Savage (generic)
+
+NAME S3 86C391 (Savage3D)
+SEE S3 Savage (generic)
+
+NAME S3 Savage3D
+SEE S3 Savage (generic)
+
+NAME Aristo ART-390-G S3 Savage3D
+SEE S3 Savage (generic)
+
+
+NAME S3 Savage4 (generic)
+LINE # Option "no_accel" # You may enable this if there are timeouts when starting X
+SEE S3 Savage (generic)
+
+NAME S3 86C395 (Savage4 Pro+)
+SEE S3 Savage4 (generic)
+
+NAME S3 86C396 (Savage4)
+SEE S3 Savage4 (generic)
+
+NAME S3 86C397 (Savage4)
+SEE S3 Savage4 (generic)
+
+NAME S3 Savage4
+SEE S3 Savage4 (generic)
+
+NAME S3 Savage4 Pro+
+SEE S3 Savage4 (generic)
+
+NAME Diamond Stealth III (S520/S540)
+SEE S3 Savage4 (generic)
+
+NAME Creative Labs Savage 4 3D Blaster
+SEE S3 Savage4 (generic)
+
+NAME S3 Savage2000 (generic)
+DRIVER savage
+NEEDVIDEORAM
+
+NAME S3 Savage/MX
+SEE S3 Savage4 (generic)
+
+# S3 UniChrome (via)
+
+NAME S3 UniChrome
+DRIVER via
+DRI_GLX
+
+NAME OpenChrome
+DRIVER openchrome
+# 3D needs a DRM driver in kernel:
+#DRI_GLX
+
+# ET4000/ET6000
+
+NAME ET3000 (generic)
+DRIVER tseng
+
+NAME Genoa 5400
+SEE ET3000 (generic)
+
+NAME ET4000 (generic)
+DRIVER tseng
+
+NAME ET4000/W32 (generic)
+DRIVER tseng
+
+NAME ET4000 W32i, W32p (generic)
+DRIVER tseng
+LINE #Option "linear" # for linear mode at 8bpp
+LINE #Option "noaccel" # when problems with accelerator
+LINE #Option "power_saver" # enable VESA DPMS
+LINE #Option "fast_dram"
+LINE #Option "pci_retry" # faster, but problematic for ISA DMA
+LINE #Option "hibit_high" # see README.tseng -- most cards need this
+LINE #Option "hibit_low" # see README.tseng -- mostly for older ET4000 cards
+LINE #MemBase 0x3C00000 # when automatic MemBase detection doesn't work
+LINE # -- see README.tseng for more (important) information on MemBase
+
+NAME ET6000 (generic)
+DRIVER tseng
+NEEDVIDEORAM
+LINE #videoram 2304 # 2.25 MB, when memory probe is incorrect
+LINE #Option "linear" # for linear mode at 8bpp
+LINE #Option "noaccel" # when problems with accelerator
+LINE #Option "power_saver" # enable VESA DPMS
+LINE #Option "pci_retry" # faster, but problematic for ISA DMA
+LINE #Option "hw_cursor" # Use hardware cursor (see docs for limitations)
+LINE #Option "xaa_no_color_exp" # When text (or bitmap) is not rendered correctly
+
+NAME ET6100 (generic)
+SEE ET6000 (generic)
+
+NAME ET6300 (generic)
+SEE ET6000 (generic)
+
+NAME Colorgraphic Dual Lightning
+SEE ET4000 W32i, W32p (generic)
+
+NAME Dell onboard ET4000
+SEE ET4000 (generic)
+
+NAME DFI-WG5000
+SEE ET4000 W32i, W32p (generic)
+
+NAME Diamond SpeedStar (Plus)
+SEE ET4000 (generic)
+
+NAME Diamond SpeedStar 24
+SEE ET4000 (generic)
+
+NAME Diamond SpeedStar HiColor
+SEE ET4000 (generic)
+
+NAME Genoa 8900 Phantom 32i
+SEE ET4000 W32i, W32p (generic)
+
+NAME Hercules Dynamite
+SEE ET4000/W32 (generic)
+
+NAME Hercules Dynamite Power
+SEE ET4000 W32i, W32p (generic)
+
+NAME Hercules Dynamite Pro
+SEE ET4000 W32i, W32p (generic)
+
+NAME Integral FlashPoint
+SEE ET4000 W32i, W32p (generic)
+
+NAME Leadtek WinFast S200
+SEE ET4000 W32i, W32p (generic)
+
+NAME Matrox Comet
+SEE ET4000 W32i, W32p (generic)
+
+NAME Matrox Marvel II
+SEE ET4000 W32i, W32p (generic)
+
+NAME Miro MiroVideo 20TD
+SEE ET4000 W32i, W32p (generic)
+
+NAME WinFast S200
+SEE Leadtek WinFast S200
+
+NAME Sigma Concorde
+SEE ET4000/W32 (generic)
+
+NAME Sigma Legend
+SEE ET4000 (generic)
+
+NAME STB LightSpeed
+SEE ET4000 W32i, W32p (generic)
+
+NAME STB MVP-2
+SEE ET4000 (generic)
+
+NAME STB MVP-2 PCI
+SEE ET4000 W32i, W32p (generic)
+
+NAME STB MVP-2X
+SEE ET4000 W32i, W32p (generic)
+
+NAME STB MVP-4 PCI
+SEE ET4000 W32i, W32p (generic)
+
+NAME STB MVP-4X
+SEE ET4000 W32i, W32p (generic)
+
+NAME TechWorks Thunderbolt
+SEE ET4000/W32 (generic)
+
+NAME ViewTop PCI
+SEE ET4000 W32i, W32p (generic)
+
+NAME Hercules Dynamite 128/Video
+SEE ET6000 (generic)
+
+NAME STB LightSpeed 128
+SEE ET6000 (generic)
+
+NAME VideoLogic GrafixStar 600
+SEE ET6000 (generic)
+
+NAME Jazz Multimedia G-Force 128
+SEE ET6000 (generic)
+
+NAME Mirage Z-128
+SEE ET6000 (generic)
+
+NAME California Graphics SunTracer 6000
+SEE ET6000 (generic)
+
+NAME Binar Graphics AnyView
+SEE ET6000 (generic)
+
+NAME MediaVision Proaxcel 128
+SEE ET6000 (generic)
+
+NAME Interay PMC Viper
+SEE ET6000 (generic)
+
+NAME 2-the-Max MAXColor 6000
+SEE ET6000 (generic)
+
+NAME Gainward Challenger EV
+SEE ET6000 (generic)
+
+NAME MachSpeed VGA ET6000
+SEE ET6000 (generic)
+
+NAME KouTech KeyVision 128 EV
+SEE ET6000 (generic)
+
+NAME Jaton Video-58P
+SEE ET6000 (generic)
+
+# ATI
+
+NAME ATI 8514 Ultra (no VGA)
+DRIVER vga
+
+NAME ATI Graphics Ultra
+DRIVER vga
+
+NAME ATI Wonder SVGA
+DRIVER ati
+
+NAME ATI Mach64
+DRIVER ati
+DRI_GLX
+
+NAME ATI Mach64 Utah
+SEE ATI Mach64
+
+NAME ATI Mach64 CT (264CT)
+SEE ATI Mach64
+
+NAME ATI Mach64 VT (264VT)
+SEE ATI Mach64
+
+NAME ATI Mach64 GT (264GT), aka 3D RAGE
+SEE ATI Mach64
+
+NAME ATI Mach64 3D RAGE II
+SEE ATI Mach64
+
+NAME ATI Mach64 3D RAGE II+DVD
+SEE ATI Mach64
+
+NAME ATI Mach64 3D Rage IIC
+SEE ATI Mach64
+
+NAME ATI Mach64 3D Rage Pro
+SEE ATI Mach64
+
+NAME ATI 3D Pro Turbo
+SEE ATI Mach64
+
+NAME ATI 3D Pro Turbo PC2TV
+SEE ATI Mach64
+
+NAME ATI 3D Xpression
+SEE ATI Mach64
+
+NAME ATI 3D Xpression+
+SEE ATI Mach64
+
+NAME ATI 3D Xpression+ PC2TV
+SEE ATI Mach64
+
+NAME ATI All-in-Wonder
+SEE ATI Mach64
+
+NAME ATI All-in-Wonder Pro
+SEE ATI Mach64
+
+NAME ATI Graphics Pro Turbo
+SEE ATI Mach64
+
+NAME ATI Graphics Pro Turbo 1600
+SEE ATI Mach64
+
+NAME ATI Graphics Xpression
+SEE ATI Mach64
+
+NAME ATI Video Boost
+SEE ATI Mach64
+
+NAME ATI Video Charger
+SEE ATI Mach64
+
+NAME ATI Video Xpression
+SEE ATI Mach64
+
+NAME ATI Video Xpression+
+SEE ATI Mach64
+
+NAME ATI WinBoost
+SEE ATI Mach64
+
+NAME ATI WinCharger
+SEE ATI Mach64
+
+NAME ATI WinTurbo
+SEE ATI Mach64
+
+NAME ATI Xpert 98
+SEE ATI Mach64
+
+NAME ATI Xpert XL
+SEE ATI Mach64
+
+NAME ATI Xpert@Play
+SEE ATI Mach64
+
+NAME ATI Xpert@Play 98
+SEE ATI Mach64
+
+NAME ATI Xpert@Work
+SEE ATI Mach64
+
+NAME ATI integrated on Intel Maui MU440EX motherboard
+SEE ATI Mach64
+
+NAME ATI Rage LT
+SEE ATI Mach64
+
+NAME ATI Rage LT PRO
+SEE ATI Mach64
+
+NAME ATI Rage Mobility
+SEE ATI Mach64
+BAD_FB_RESTORE
+
+NAME ATI Rage Mobility P
+SEE ATI Mach64
+
+NAME ASUS PCI-V264CT
+SEE ATI Mach64
+
+NAME ASUS PCI-AV264CT
+SEE ATI Mach64
+
+NAME ATI Rage XL
+DRIVER ati
+
+NAME ATI Rage XL AGP
+SEE ATI Rage XL
+
+NAME ATI Rage 128
+DRIVER ati
+DRI_GLX
+# DRI_GLX: 16 and 32 bits, prefer 16bit as no DMA.
+
+NAME ATI Rage 128 Mobility
+SEE ATI Rage 128
+
+NAME ATI Rage 128 TVout
+SEE ATI Rage 128
+FB_TVOUT
+
+NAME ATI Rage Fury AGP
+SEE ATI Rage 128
+
+NAME ATI XPERT 128 AGP
+SEE ATI Rage 128
+
+NAME ATI XPERT 99 AGP
+SEE ATI Rage 128
+
+NAME ATI Radeon
+DRIVER ati
+DRI_GLX
+# DRI_GLX: 16bits preferable ?
+
+NAME ATI Radeon 8500
+DRIVER ati
+# no DRI_GLX for now (XF 4.2)
+# but XF 4.3 add DRI
+DRI_GLX
+
+NAME ATI Radeon (fglrx)
+DRIVER ati
+DRI_GLX
+DRIVER2 fglrx
+
+NAME ATI Radeon (fbdev)
+DRIVER fbdev
+DRIVER2 fglrx
+
+NAME ATI Radeon (vesa)
+DRIVER vesa
+DRIVER2 fglrx
+
+# AGX
+
+NAME AGX (generic)
+DRIVER vga
+
+NAME EIZO (VRAM)
+SEE AGX (generic)
+
+NAME Hercules Graphite Pro
+DRIVER vga
+# Card specific DAC, doesn't appear in ramdac menu
+LINE Ramdac "herc_dual_dac"
+LINE Chipset "AGX-015"
+LINE Option "dac_8_bit"
+LINE Option "no_wait_state"
+LINE #Option "fifo_moderate" # 2x bus bw - may result in random pixels
+LINE #Probable clocks:
+LINE #Clocks 25.0 28.0 32.0 36.0 40.0 45.0 50.0 65.0
+LINE #Clocks 70.0 75.0 80.0 85.0 90.0 95.0 100.0 110.0
+
+NAME Hercules Graphite Power
+DRIVER vga
+# Card specific DAC, doesn't appear in ramdac menu
+# The glue logic state machine for RAMDAC switching doesn't work as
+# documented, for now we're stuck with the small RAMDAC
+LINE Ramdac "herc_small_dac"
+LINE Chipset "AGX-016"
+LINE Option "dac_8_bit"
+LINE Option "no_wait_state"
+LINE #Option "fifo_moderate" # 2x bus bw - may result in random pixels
+LINE #Option "fifo_aggressive" # 3x bus bw - may result in random pixels
+LINE #Probable clocks:
+LINE #Clocks 25.0 28.0 32.0 36.0 40.0 45.0 50.0 65.0
+LINE #Clocks 70.0 75.0 80.0 85.0 90.0 95.0 100.0 110.0
+
+NAME XGA-2 (ISA bus)
+DRIVER vga
+LINE #Instance 7 # XGA instance 0-7
+LINE #COPbase 0xC8F00 # XGA memory-mapped register address
+LINE #POSbase 0 # Disable probing if above are specified
+
+NAME XGA-1 (ISA bus)
+DRIVER vga
+LINE #Instance 7 # XGA instance 0-7
+LINE #COPbase 0xC8F00 # XGA memory-mapped register address
+LINE #POSbase 0 # Disable probing if above are specified
+
+# WD
+
+NAME Paradise/WD 90CXX
+DRIVER vga
+
+NAME DFI-WG6000
+DRIVER vga
+
+NAME Diamond SpeedStar 24X (not fully supported)
+DRIVER vga
+
+NAME WD 90C24 (laptop)
+DRIVER vga
+LINE #Chipset "wd90c24"
+LINE #Option "noaccel" # Use this if acceleration is causing problems
+LINE #Clocks 25.175 28.322 65 36 # These are not programmable
+LINE #Clocks 29.979 77.408 62.195 59.957 # These are programmable
+LINE #Clocks 31.5 35.501 75.166 50.114 # These are not programmable
+LINE #Clocks 39.822 72.038 44.744 80.092 # These are programmable
+LINE #Clocks 44.297 # Must match Mclk
+
+
+NAME WD 90C24A or 90C24A2 (laptop)
+DRIVER vga
+LINE #Chipset "wd90c24"
+LINE #Clocks 25.175 28.322 65 36 # These are not programmable
+LINE #Clocks 29.979 77.408 62.195 59.957 # These are programmable
+LINE #Clocks 31.5 35.501 75.166 50.114 # These are not programmable
+LINE #Clocks 39.822 72.038 44.744 80.092 # These are programmable
+LINE #Clocks 44.297 # Must match Mclk
+
+# Avance Logic
+
+NAME Avance Logic 2101
+LINE #chipset "al2101"
+DRIVER vga
+
+NAME Avance Logic 2228
+LINE #chipset "ali2228"
+DRIVER vga
+
+NAME Avance Logic 2301
+LINE #chipset "ali2301"
+DRIVER vga
+
+NAME Avance Logic 2302
+LINE #chipset "ali2302"
+DRIVER vga
+
+NAME Avance Logic 2308
+LINE #chipset "ali2308"
+DRIVER vga
+
+NAME Avance Logic 2401
+LINE #chipset "ali2401"
+DRIVER vga
+
+NAME Hercules Stingray
+LINE #chipset "ali2228"
+DRIVER vga
+
+# ARK Logic
+
+NAME Ark Logic ARK1000PV (generic)
+DRIVER ark
+
+# For now, treat the VL as a PV. This may be changed later
+NAME Ark Logic ARK1000VL (generic)
+LINE Chipset "ark1000pv"
+DRIVER ark
+
+NAME Ark Logic ARK2000PV (generic)
+DRIVER ark
+
+NAME Ark Logic ARK2000MT (generic)
+DRIVER ark
+
+NAME Hercules Stingray Pro
+SEE Ark Logic ARK1000PV (generic)
+
+NAME Hercules Stingray Pro/V
+SEE Ark Logic ARK1000PV (generic)
+
+NAME Hercules Stingray 64/V with ZoomDAC
+SEE Ark Logic ARK2000PV (generic)
+
+# Oak
+
+NAME Oak ISA Card (generic)
+DRIVER vga
+
+NAME Oak 87 VLB (generic)
+DRIVER vga
+LINE Option "fifo_aggressive" # Comment this if you experience streaks.
+LINE Option "no_wait" # Comment this if you find problems.
+LINE #Option "enable_bitblt" # You may enable this and see if it works (see README.Oak file)
+
+NAME Oak 87 ISA (generic)
+DRIVER vga
+LINE Option "noaccel" # ISA cards seem to have Color Expansion support broken
+LINE #Option "enable_bitblt" # This should work on ISA, but lets not make it default just in case.
+
+NAME Paradise Accelerator Value
+SEE Oak 87 ISA (generic)
+
+# P9000
+
+NAME Diamond Viper VLB 2Mb
+DRIVER vga
+LINE #Clocks must match the mode clocks (XFree86 3.1 P9000 server)
+LINE #Versions later than 3.1 do not require a clocks line
+LINE Chipset "vipervlb" # Required for some cards which autodetect as PCI
+LINE Videoram 2048 # Required
+LINE Membase 0x80000000 # Optional (0x80000000 is default)
+
+NAME Diamond Viper PCI 2Mb
+DRIVER vga
+LINE #Clocks must match the mode clocks (XFree86 3.1 P9000 server)
+LINE #Versions later than 3.1 do not require a clocks line
+LINE Videoram 2048 # Required
+LINE #Membase 0x80000000 # Use scanpci to get the correct Membase
+
+NAME Orchid P9000 VLB
+DRIVER vga
+LINE Chipset "orchid_p9000"
+LINE Membase 0xE0000000
+
+# P9100
+
+NAME Weitek P9100 (generic)
+DRIVER vga
+
+NAME Diamond Viper Pro Video
+SEE Weitek P9100 (generic)
+
+
+# National Semiconductor (NSC)
+
+NAME NSC
+DRIVER nsc
+
+# Trident
+
+NAME Trident (generic)
+DRIVER trident
+
+NAME Trident 8900/9000 (generic)
+DRIVER trident
+
+NAME Trident 8900D (generic)
+DRIVER trident
+
+NAME Trident TVGA9200CXr (generic)
+DRIVER trident
+
+NAME Trident TGUI9400CXi (generic)
+DRIVER trident
+
+NAME Trident TGUI9420DGi (generic)
+DRIVER trident
+
+NAME Trident TGUI9430DGi (generic)
+DRIVER trident
+
+NAME Trident TGUI9420 (generic)
+DRIVER trident
+
+NAME Trident TGUI9440 (generic)
+DRIVER trident
+
+NAME Trident TGUI9660 (generic)
+DRIVER trident
+
+NAME Trident TGUI9680 (generic)
+DRIVER trident
+
+NAME Trident TGUI9682 (generic)
+DRIVER trident
+
+NAME Trident TGUI9685 (generic)
+DRIVER trident
+
+NAME Trident Cyber 9320 (generic)
+DRIVER trident
+
+NAME Trident Cyber 9382 (generic)
+DRIVER trident
+
+NAME Trident Cyber 9385 (generic)
+DRIVER trident
+
+NAME Trident Cyber 9388 (generic)
+DRIVER trident
+
+NAME Trident Cyber 939a (generic)
+DRIVER trident
+
+NAME Trident Cyber 9397 (generic)
+DRIVER trident
+
+NAME Trident Cyber 9397 DVD (generic)
+DRIVER trident
+
+NAME Trident Cyber 9520 (generic)
+DRIVER trident
+
+NAME Trident Cyber 9325 (generic)
+DRIVER trident
+
+NAME Trident 3DImage975 (generic)
+DRIVER trident
+
+NAME Trident 3DImage975 AGP (generic)
+DRIVER trident
+
+NAME Trident 3DImage985 (generic)
+DRIVER trident
+
+NAME Trident Providia 9682 (generic)
+DRIVER trident
+
+NAME Trident Providia 9685 (generic)
+DRIVER trident
+
+NAME Trident Blade3D (generic)
+DRIVER trident
+
+NAME Trident CyberBlade (generic)
+DRIVER trident
+
+NAME Trident Cyber 9525 (generic)
+DRIVER trident
+LINE # Option "accel" # Use this if acceleration works on your laptop
+
+NAME AOpen PG975
+SEE Trident 3DImage975 AGP (generic)
+
+NAME Toshiba Satellite 4030CDT
+LINE Option "cyber_shadow"
+SEE Trident Cyber 9525 (generic)
+
+NAME Toshiba Satellite 4060CDT
+SEE Trident Cyber 9525 (generic)
+
+NAME Toshiba Satellite 4080CDT
+SEE Trident Cyber 9525 (generic)
+
+# SiS
+
+NAME SiS USB
+DRIVER sisusb
+
+NAME SiS generic
+DRIVER sis
+
+NAME SiS SG86C205
+DRIVER sis
+BAD_FB_RESTORE
+LINE # Option "no_accel" # Use this if acceleration is causing problems
+LINE # Option "fifo_moderate"
+LINE # Option "fifo_conserv"
+LINE # Option "fifo_aggresive"
+
+NAME SiS SG86C215
+DRIVER sis
+BAD_FB_RESTORE
+LINE # This is a cheap version of 86c205. I am not sure if acceleration works
+LINE # Option "no_accel" # Use this if acceleration is causing problems
+LINE # Option "no_BitBlt" # Use this if acceleration is causing problems
+LINE # Option "fifo_moderate"
+LINE # Option "fifo_conserv"
+LINE # Option "fifo_aggresive"
+
+NAME SiS SG86C225
+DRIVER sis
+BAD_FB_RESTORE
+LINE # Option "no_accel" # Use this if acceleration is causing problems
+LINE # Option "fifo_moderate"
+LINE # Option "fifo_conserv"
+LINE # Option "fifo_aggresive"
+
+NAME SiS 5597
+DRIVER sis
+BAD_FB_RESTORE
+LINE # Option "no_accel" # Use this if acceleration is causing problems
+LINE # Option "fifo_moderate"
+LINE # Option "fifo_conserv"
+LINE # Option "fifo_aggresive"
+LINE # Option "fast_vram"
+LINE # Option "pci_burst_on"
+LINE # Option "xaa_benchmark" # DON'T use with "ext_eng_queue" !!!
+LINE # Option "ext_eng_queue" # Turbo-queue. This can cause drawing
+LINE # errors, but gives some accel
+
+NAME SiS 5598
+DRIVER sis
+BAD_FB_RESTORE
+LINE # Option "no_accel" # Use this if acceleration is causing problems
+LINE # Option "fifo_moderate"
+LINE # Option "fifo_conserv"
+LINE # Option "fifo_aggresive"
+LINE # Option "fast_vram"
+LINE # Option "pci_burst_on"
+LINE # Option "xaa_benchmark" # DON'T use with "ext_eng_queue" !!!
+LINE # Option "ext_eng_queue" # Turbo-queue. This can cause drawing
+LINE # errors, but gives some accel
+
+NAME SiS 6326
+DRIVER sis
+DRI_GLX_EXPERIMENTAL
+BAD_FB_RESTORE
+LINE Option "sw_cursor"
+LINE # Option "no_accel" # Use this if acceleration is causing problems
+LINE # Option "fifo_moderate"
+LINE # Option "fifo_conserv"
+LINE # Option "fifo_aggresive"
+LINE # Option "fast_vram"
+LINE # Option "pci_burst_on"
+LINE # Option "xaa_benchmark" # DON'T use with "ext_eng_queue" !!!
+LINE # Option "ext_eng_queue" # Turbo-queue. This can cause drawing
+LINE # errors, but gives some accel
+
+NAME SiS 6326 no_accel
+SEE SiS 6326
+LINE Option "no_accel" # Use this if acceleration is causing problems
+
+NAME SiS Real256E
+DRIVER sis
+
+NAME SiS 530
+DRIVER sis
+
+NAME SiS 540
+DRIVER sis
+BAD_FB_RESTORE
+
+NAME SiS 620
+DRIVER sis
+
+NAME SiS 630
+DRIVER sis
+DRI_GLX_EXPERIMENTAL
+
+NAME SiS 650
+DRIVER sis
+
+NAME SiS 300
+DRIVER sis
+BAD_FB_RESTORE
+
+NAME MSI MS-4417
+SEE SiS 6326
+
+NAME SiS 3D PRO AGP
+SEE SiS 6326
+
+NAME Miro Crystal DVD
+SEE SiS 6326
+
+NAME PC-Chips M567 Mainboard
+SEE SiS 5597
+
+NAME Diamond SpeedStar A50
+SEE SiS 6326
+LINE Option "no_imageblt"
+LINE Option "no_bitblt"
+
+NAME AOpen PA50D
+SEE SiS 6326
+
+NAME AOpen PA50V
+SEE SiS 6326
+
+NAME AOpen PA50E
+SEE SiS 6326
+
+NAME AOpen PA80/DVD
+SEE SiS 6326
+
+NAME AOpen PA45
+SEE SiS 6326
+
+NAME AOpen PT80
+SEE SiS 6326
+
+NAME Chaintech Tornado S6000
+SEE SiS 6326
+
+NAME Chaintech Desperado SI21
+SEE SiS 6326
+
+NAME Chaintech Desperado SI31
+SEE SiS 6326
+
+# Cyrix
+
+NAME MediaGX
+DRIVER cyrix
+
+# Alliance ProMotion
+
+NAME Alliance ProMotion 6422
+DRIVER vga
+
+# Number 9 I128
+
+NAME Number Nine Imagine I-128 (2-8MB)
+DRIVER i128
+
+NAME Number Nine Imagine I-128 Series 2 (2-4MB)
+DRIVER i128
+
+NAME Revolution 3D (T2R)
+DRIVER i128
+
+NAME Number Nine Revolution 3D AGP (4-8MB SGRAM)
+DRIVER i128
+
+NAME Number Nine Imagine-128-T2R
+DRIVER i128
+
+# Matrox
+
+NAME Matrox Millennium
+DRIVER mga
+BAD_FB_RESTORE
+LINE Option "sw_cursor"
+
+NAME Matrox Millennium II
+DRIVER mga
+BAD_FB_RESTORE
+
+NAME Matrox Millennium G200
+DRIVER mga
+DRI_GLX
+# DRI_GLX prefer 16bit with AGP only
+BAD_FB_RESTORE
+
+NAME Matrox Millennium G200 DualHead
+SEE Matrox Millennium G200
+MULTI_HEAD 2
+
+NAME Matrox Millennium G200 QuadHead
+SEE Matrox Millennium G200
+MULTI_HEAD 4
+
+NAME Matrox Millennium G400
+SEE Matrox Millennium G200
+
+NAME Matrox Millennium G400 DualHead
+SEE Matrox Millennium G400
+MULTI_HEAD 2
+
+NAME Matrox Millennium G450
+DRIVER mga
+DRI_GLX
+BAD_FB_RESTORE
+
+NAME Matrox Millennium G450 DualHead
+SEE Matrox Millennium G450
+MULTI_HEAD 2
+
+NAME Matrox Millennium G550
+SEE Matrox Millennium G450
+
+NAME Matrox Millennium G550 DualHead
+SEE Matrox Millennium G550
+MULTI_HEAD 2
+
+NAME Matrox Mystique
+SEE Matrox Millennium G200
+
+NAME Matrox Productiva G100
+DRIVER mga
+BAD_FB_RESTORE
+
+# NVIDIA
+
+NAME Diamond Edge 3D
+DRIVER vga
+
+NAME RIVA128
+DRIVER nv
+BAD_FB_RESTORE
+
+NAME RIVA TNT
+DRIVER nv
+BAD_FB_RESTORE
+
+NAME NVIDIA Legacy
+DRIVER nv
+DRIVER2 nvidia
+NVIDIA_LEGACY
+
+NAME RIVA TNT2
+SEE NVIDIA Legacy
+
+NAME NVIDIA GeForce
+DRIVER nv
+DRIVER2 nvidia
+
+NAME RIVA Ultra TNT2
+SEE RIVA TNT2
+
+NAME Elsa VICTORY ERAZOR
+SEE RIVA128
+
+NAME Elsa VICTORY ERAZOR LT
+SEE RIVA128
+
+NAME Elsa Winner 1000 R3D
+SEE RIVA128
+
+NAME Elsa ERAZOR II
+SEE RIVA TNT
+
+NAME Elsa ERAZOR III
+SEE RIVA TNT2
+
+NAME Elsa Synergy II
+SEE RIVA TNT2
+
+NAME Leadtek WinFast 3D S320II
+SEE RIVA TNT2
+
+NAME Leadtek WinFast 3D S320
+SEE RIVA TNT
+
+NAME Leadtek WinFast 3D S3500
+SEE RIVA128
+
+NAME Diamond Viper 330
+SEE RIVA128
+
+NAME Diamond Viper 550
+SEE RIVA TNT
+
+NAME Diamond Viper 770
+SEE RIVA TNT2
+
+NAME AOpen PS3010
+SEE RIVA TNT2
+
+NAME STB Velocity 128
+SEE RIVA128
+
+NAME STB nvidia 128
+SEE RIVA128
+
+NAME STB Velocity 4400
+SEE RIVA TNT
+
+NAME ASUS 3Dexplorer
+SEE RIVA128
+
+NAME Guillemot Maxi Gamer Xentor
+SEE RIVA TNT2
+
+NAME Guillemot Maxi Gamer Xentor 32
+SEE RIVA TNT2
+
+NAME Creative Labs Graphics Blaster TNT
+SEE RIVA TNT
+
+NAME Creative Labs Graphics Blaster TNT2
+SEE RIVA TNT2
+
+NAME Chaintech Desperado RI20
+SEE RIVA128
+
+NAME Chaintech Desperado RI30
+SEE RIVA TNT
+
+NAME Chaintech Desperado RI40/41
+SEE RIVA TNT2
+
+NAME Chaintech Desperado RI50
+SEE RIVA TNT2
+
+NAME Chaintech Desperado RI60
+SEE RIVA TNT2
+
+NAME Hercules Dynamite TNT
+SEE RIVA TNT
+
+NAME MELCO WGA-TS
+SEE RIVA TNT2
+
+NAME NVIDIA GeForce (fbdev)
+DRIVER fbdev
+DRIVER2 nvidia
+
+NAME NVIDIA GeForce 256 (generic)
+SEE NVIDIA Legacy
+
+NAME NVIDIA GeForce DDR (generic)
+CHIPSET GeForce DDR
+SEE NVIDIA Legacy
+
+NAME NVIDIA GeForce2 DDR (generic)
+SEE NVIDIA GeForce DDR (generic)
+
+NAME NVIDIA GeForce2 Integrated (generic)
+SEE NVIDIA Legacy
+
+NAME NVIDIA GeForce3 (generic)
+SEE NVIDIA GeForce
+
+NAME NVIDIA GeForce3 (xbox)
+DRIVER nvxbox
+LINE Option "UseFBDev" "1"
+LINE Option "HWCursor" "0"
+
+NAME NVIDIA GeForce4 (generic)
+SEE NVIDIA GeForce
+
+NAME NVIDIA GeForce FX (generic)
+SEE NVIDIA GeForce
+
+NAME NVIDIA GeForce 6800 (generic)
+SEE NVIDIA GeForce
+
+NAME NVIDIA GeForce 6 Series
+SEE NVIDIA GeForce
+
+NAME NVIDIA GeForce 7 Series
+SEE NVIDIA GeForce
+
+NAME NVIDIA GeForce 8 Series
+SEE NVIDIA GeForce
+
+# IMS
+
+NAME IMS TwinTurbo (generic)
+DRIVER imstt
+
+# 3DLabs
+
+NAME 3Dlabs Permedia2 (generic)
+DRIVER glint
+LINE #Option "no_accel"
+
+NAME 3Dlabs Permedia4 (generic)
+DRIVER glint
+
+NAME Elsa GLoria-L/MX
+DRIVER glint
+LINE #Option "no_accel"
+
+NAME Elsa GLoria-L
+DRIVER glint
+
+NAME Elsa GLoria-XL
+LINE Option "SWcursor"
+DRIVER glint
+
+NAME Elsa GLoria-XXL
+LINE Option "SWcursor"
+DRIVER glint
+
+NAME Diamond Fire GL 3000
+LINE Option "SWcursor"
+DRIVER glint
+LINE Option "firegl_3000"
+
+NAME Elsa GLoria-S
+DRIVER glint
+LINE #Option "no_accel"
+LINE #VideoRam 8192
+LINE Option "SWcursor"
+
+NAME Diamond Fire GL 1000
+DRIVER glint
+LINE #Option "no_accel"
+LINE #VideoRam 8192
+LINE Option "SWcursor"
+
+NAME Elsa GLoria Synergy
+DRIVER glint
+LINE #Option "no_accel"
+LINE Option "SWcursor"
+
+NAME Elsa Winner 2000/Office
+DRIVER glint
+LINE #Option "no_accel"
+LINE Option "SWcursor"
+
+NAME Diamond Fire GL 1000 PRO
+DRIVER glint
+LINE #Option "no_accel"
+LINE Option "SWcursor"
+
+NAME AccelStar Permedia II AGP
+DRIVER glint
+LINE #Option "no_accel"
+LINE Option "SWcursor"
+
+NAME Leadtek WinFast 2300
+DRIVER glint
+LINE Option "SWcursor"
+
+NAME 3Dlabs Oxygen GMX
+DRIVER glint
+LINE #Option "no_accel"
+LINE Option "SWcursor"
+
+# Alliance Semiconductor
+
+NAME Diamond Stealth Video 2500
+DRIVER apm
+
+NAME AT3D
+DRIVER apm
+LINE #Option "no_accel"
+
+NAME AT25
+DRIVER apm
+
+NAME Hercules Stingray 128 3D
+SEE AT3D
+
+# NeoMagic
+
+NAME NeoMagic MagicGraph (laptop/notebook)
+DRIVER neomagic
+LINE Option "overrideValidateMode"
+LINE # Chipset "NM2160"
+LINE # IOBase 0xfea00000
+LINE # MemBase 0xfd000000
+LINE # VideoRam 2048
+LINE # DacSpeed 90
+LINE # Option "linear"
+LINE # Option "nolinear"
+LINE # Option "sw_cursor"
+LINE # Option "hw_cursor"
+LINE # Option "no_accel"
+LINE # Option "intern_disp"
+LINE # Option "extern_disp"
+LINE # Option "mmio"
+LINE # Option "no_mmio"
+LINE # Option "lcd_center"
+LINE # Option "no_stretch"
+
+NAME NeoMagic 128XD
+SEE NeoMagic MagicGraph (laptop/notebook)
+LINE Option "XaaNoScanlineImageWriteRect"
+LINE Option "XaaNoScanlineCPUToScreenColorExpandFill"
+
+NAME NeoMagic MagicMedia (laptop/notebook)
+DRIVER neomagic
+
+NAME NeoMagic MagicMedia 256XL+
+SEE NeoMagic MagicMedia (laptop/notebook)
+LINE Option "sw_cursor"
+
+
+# Digital
+
+NAME Digital 8-plane TGA (Generic)
+CHIPSET TGA
+DRIVER tga
+
+NAME Digital 8-plane TGA (UDB/Multia)
+CHIPSET TGA
+DRIVER tga
+LINE Ramdac "Bt485"
+
+NAME Digital 8-plane TGA (ZLXp-E1)
+CHIPSET TGA
+DRIVER tga
+LINE Ramdac "Bt485"
+
+NAME Digital 24-plane TGA (ZLXp-E2)
+CHIPSET TGA
+DRIVER tga
+LINE Ramdac "Bt463"
+
+NAME Digital 24-plane+3D TGA (ZLXp-E3)
+CHIPSET TGA
+DRIVER tga
+LINE Ramdac "Bt463"
+
+# Epson SPC8110
+
+NAME Epson SPC8110 (CardPC)
+DRIVER vga
+LINE # Chipset "spc8110"
+LINE # MemBase 0x03e00000
+LINE # VideoRam 1024
+LINE # Option "nolinear"
+LINE # Option "sw_cursor"
+LINE # Option "noaccel"
+LINE # Option "fifo_moderate"
+LINE # Option "fifo_conservative"
+
+# Rendition
+
+NAME Rendition Verite 1000
+DRIVER rendition
+LINE # Option "sw_cursor"
+
+NAME Rendition Verite 2x00
+DRIVER rendition
+LINE # Option "sw_cursor"
+
+NAME Creative Labs 3D Blaster PCI (Verite 1000)
+SEE Rendition Verite 1000
+
+NAME Sierra Screaming 3D
+SEE Rendition Verite 1000
+
+NAME Miro CRYSTAL VRX
+SEE Rendition Verite 1000
+
+NAME Diamond Stealth II S220
+SEE Rendition Verite 2x00
+
+NAME Hercules Thriller3D
+SEE Rendition Verite 2x00
+
+# Digital
+
+# Epson
+
+NAME Epson CardPC (onboard)
+
+# Intel
+
+NAME Intel 740 (generic)
+DRIVER i740
+LINE #Option "no_accel"
+LINE #Option "sw_cursor"
+LINE #Option "hw_cursor"
+LINE #Option "sgram"
+LINE #Option "sdram"
+
+NAME Real3D Starfighter AGP
+SEE Intel 740 (generic)
+
+NAME Real3D Starfighter PCI
+SEE Intel 740 (generic)
+
+NAME Diamond Stealth II/G460 AGP
+SEE Intel 740 (generic)
+
+NAME 3DVision-i740 AGP
+SEE Intel 740 (generic)
+
+NAME ABIT G740 8MB SDRAM
+SEE Intel 740 (generic)
+
+NAME Acorp AGP i740
+SEE Intel 740 (generic)
+
+NAME AGP 2D/3D V. 1N, AGP-740D
+SEE Intel 740 (generic)
+
+NAME AOpen AGP 2X 3D Navigator PA740
+SEE Intel 740 (generic)
+
+NAME ARISTO i740 AGP (ART-i740-G)
+SEE Intel 740 (generic)
+
+NAME ASUS AGP-V2740
+SEE Intel 740 (generic)
+
+NAME Chaintech AGP-740D
+SEE Intel 740 (generic)
+
+NAME Chaintech Tornado I7000
+SEE Intel 740 (generic)
+
+NAME EliteGroup(ECS) 3DVision-i740 AGP
+SEE Intel 740 (generic)
+
+NAME EONtronics Picasso 740
+SEE Intel 740 (generic)
+
+NAME EONtronics Van Gogh
+SEE Intel 740 (generic)
+
+NAME Everex MVGA i740/AG
+SEE Intel 740 (generic)
+
+NAME Flagpoint Shocker i740 8MB
+SEE Intel 740 (generic)
+
+NAME Gainward CardExpert 740 8MB
+SEE Intel 740 (generic)
+
+NAME Genoa Systems Phantom 740
+SEE Intel 740 (generic)
+
+NAME Gigabyte Predator i740 8MB AGP
+SEE Intel 740 (generic)
+
+NAME Hercules Terminator 128 2X/i AGP
+SEE Intel 740 (generic)
+
+NAME Intel Express 3D AGP
+SEE Intel 740 (generic)
+
+NAME Jaton Video-740 AGP 3D
+SEE Intel 740 (generic)
+
+NAME Jetway J-740-3D 8MB AGP, i740 AGP 3D
+SEE Intel 740 (generic)
+
+NAME Joymedia Apollo 7400
+SEE Intel 740 (generic)
+
+NAME Leadtek Winfast S900
+SEE Intel 740 (generic)
+
+NAME Machspeed Raptor i740 AGP 4600
+SEE Intel 740 (generic)
+
+NAME Magic-Pro MP-740DVD
+SEE Intel 740 (generic)
+
+NAME MAXI Gamer AGP 8 MB
+SEE Intel 740 (generic)
+
+NAME Palit Daytona AGP740
+SEE Intel 740 (generic)
+
+NAME PowerColor C740 (SG/SD) AGP
+SEE Intel 740 (generic)
+
+NAME QDI Amazing I
+SEE Intel 740 (generic)
+
+NAME Soyo AGP (SY-740 AGP)
+SEE Intel 740 (generic)
+
+NAME VideoExcel AGP 740
+SEE Intel 740 (generic)
+
+NAME ViewTop ZeusL 8MB
+SEE Intel 740 (generic)
+
+NAME Winfast S900 i740 AGP 8MB
+SEE Intel 740 (generic)
+
+NAME Intel 810
+DRIVER i810
+DRI_GLX
+LINE Option "XaaNoPixmapCache"
+
+NAME Intel 815
+DRIVER i810
+DRI_GLX
+# DRI_GLX 16bits
+LINE Option "XaaNoPixmapCache"
+
+NAME Intel 830
+DRIVER i810
+DRI_GLX
+
+NAME Intel 845
+DRIVER i810
+DRI_GLX
+
+NAME Intel 85x
+DRIVER i810
+DRI_GLX
+
+NAME Intel 865
+DRIVER i810
+DRI_GLX
+
+NAME Intel 915
+DRIVER i810
+DRI_GLX
+
+NAME Intel 945
+DRIVER i810
+DRI_GLX
+
+NAME Intel 965
+DRIVER i810
+DRI_GLX
+
+NAME Intel Q35
+DRIVER intel
+DRI_GLX
+
+# Alan Cox's new "voodoo" driver for Voodoo Graphics and Voodoo II
+#0x121a 0x0001 "Card:Voodoo Graphics" "3Dfx Interactive, Inc.|Voodoo"
+NAME Voodoo Graphics
+CHIPSET Voodoo Graphics
+DRIVER voodoo
+
+# Alan Cox's new "voodoo" driver for Voodoo Graphics and Voodoo II
+#0x121a 0x0002 "Card:Voodoo II" "3Dfx Interactive, Inc.|Voodoo 2"
+NAME Voodoo II
+CHIPSET Voodoo II
+DRIVER voodoo
+
+NAME Voodoo Banshee (generic)
+DRIVER tdfx
+DRI_GLX
+# DRI_GLX 16bit only
+
+NAME Voodoo Rush (generic)
+DRIVER tdfx
+LINE Option "nodri"
+
+NAME Voodoo3 (generic)
+DRIVER tdfx
+DRI_GLX
+
+NAME Voodoo4 (generic)
+DRIVER tdfx
+DRI_GLX
+
+NAME Voodoo5 (generic)
+DRIVER tdfx
+DRI_GLX
+
+NAME Elsa Victory II
+SEE Voodoo Banshee (generic)
+
+NAME Diamond Monster Fusion
+SEE Voodoo Banshee (generic)
+
+NAME AOpen PA2010
+SEE Voodoo Banshee (generic)
+
+NAME Chaintech Desperado 3F10
+SEE Voodoo Banshee (generic)
+
+# Silicon Motion, Inc.
+
+NAME Silicon Motion Lynx (generic)
+DRIVER siliconmotion
+
+NAME Silicon Motion LynxEM
+DRIVER siliconmotion
+
+NAME Silicon Motion Lynx (generic)
+DRIVER siliconmotion
+
+NAME Silicon Motion LynxE (generic)
+DRIVER siliconmotion
+
+NAME Silicon Motion Lynx3D (generic)
+DRIVER siliconmotion
+
+NAME Silicon Motion LynxEM (generic)
+DRIVER siliconmotion
+
+NAME Silicon Motion LynxEM+ (generic)
+DRIVER siliconmotion
+
+NAME Silicon Motion Lynx3DM (generic)
+DRIVER siliconmotion
+
+
+# Sun Cards / Servers (added by Red Hat Software 02/1999)
+
+NAME Sun Monochrome (bwtwo)
+DRIVER sunbw2
+
+NAME Sun Color3 (cgthree)
+DRIVER suncg3
+
+NAME Sun CG8/RasterOps
+
+NAME Sun GS (cgtwelve)
+
+NAME Sun Graphics Tower
+
+NAME Quantum 3D MGXplus with 4M VRAM
+
+NAME Quantum 3D MGXplus
+
+NAME Sun Unknown GX
+DRIVER suncg6
+
+NAME Sun Double width GX
+DRIVER suncg6
+
+NAME Sun Single width GX
+DRIVER suncg6
+
+NAME Sun Turbo GX with 1M VSIMM
+DRIVER suncg6
+
+NAME Sun Turbo GX Plus
+DRIVER suncg6
+
+NAME Sun Turbo GX
+DRIVER suncg6
+
+NAME Sun SX with 4M VSIMM
+DRIVER suncg14
+
+NAME Sun SX with 8M VSIMM
+DRIVER suncg14
+
+NAME Sun SX
+DRIVER suncg14
+
+NAME Sun Turbo ZX
+DRIVER sunleo
+
+NAME Sun ZX or Turbo ZX
+DRIVER sunleo
+
+NAME Sun TCX (8bit)
+DRIVER suntcx
+
+NAME Sun TCX (S24)
+DRIVER suntcx
+
+NAME Sun Elite3D-M6 Horizontal
+DRIVER sunffb
+
+NAME Sun Elite3D
+DRIVER sunffb
+
+NAME Sun FFB 67MHz Creator
+DRIVER sunffb
+
+NAME Sun FFB 67MHz Creator 3D
+DRIVER sunffb
+
+NAME Sun FFB 75MHz Creator 3D
+DRIVER sunffb
+
+NAME Sun FFB2 Vertical Creator
+DRIVER sunffb
+
+NAME Sun FFB2 Vertical Creator 3D
+DRIVER sunffb
+
+NAME Sun FFB2Vertical Creator
+DRIVER sunffb
+
+NAME Sun FFB2Vertical Creator 3D
+DRIVER sunffb
+
+NAME Sun FFB2 Horizontal Creator
+DRIVER sunffb
+
+NAME Sun FFB2 Horizontal Creator 3D
+DRIVER sunffb
+
+NAME Sun FFB
+DRIVER sunffb
+
+# VMware virtual video cards
+
+NAME VMware virtual video card
+DRIVER vmware
+
+# Misc
+
+END
diff --git a/displayconfig/ldetect-lst/MonitorsDB b/displayconfig/ldetect-lst/MonitorsDB
new file mode 100644
index 0000000..3ce2d74
--- /dev/null
+++ b/displayconfig/ldetect-lst/MonitorsDB
@@ -0,0 +1,5618 @@
+#
+# Monitor information
+#
+# Each line has format:
+# <Manufacturer>; <Monitor name>; <EISA ID (if any)>; <horiz sync in \
+# Khz>; <vert sync in Hz>; DPMS support
+#
+# Horiz and vert sync can be a range; like 35.2-55.75; or 31.5,35.5
+# BUT remember to use ';' to separate fields
+#
+# This file has been sorted with 'LANG=C sort -f -t ";" -k1,2'
+# Source URL: http://git.fedorahosted.org/git/hwdata.git
+
+Aamazing; Aamazing CM-8426; cm-8426; 31.0-60.0; 40.0-80.0; 1
+Aamazing; Aamazing MS-8431; ms-8431; 15.0-36.0; 50.0-70.0; 1
+Acer; Acer 11D; API440B; 31.0-35.5; 50.0-90.0; 1
+Acer; Acer 1455; API5514; 30.0-54.0; 50.0-120.0; 1
+Acer; Acer 1555; API5515; 30.0-54.0; 50.0-120.0; 1
+Acer; Acer 15P; acer_15p; 15.0-70.0; 45.0-90.0; 1
+Acer; Acer 1768i; api424c; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 211c; API9708; 30.0-107.0; 50.0-160.0; 1
+Acer; Acer 33; acer_33; 31.0-38.0; 50.0-90.0; 1
+Acer; Acer 33D; API4421; 31.0-35.5; 50.0-100.0; 1
+Acer; Acer 33DL; API4C21; 31.0-35.5; 50.0-100.0; 1
+Acer; Acer 34e; API4522; 30.0-54.0; 50.0-110.0; 1
+Acer; Acer 34e-2; API9709; 30.0-54.0; 50.0-110.0; 1
+Acer; Acer 34T; API5422; 31.0-48.0; 50.0-100.0; 1
+Acer; Acer 34TL; API4C22; 31.0-48.0; 50.0-100.0; 1
+Acer; Acer 35; acer_35; 30.0-55.0; 45.0-90.0; 1
+Acer; Acer 35c; API9703; 30.0-54.0; 50.0-110.0; 1
+Acer; Acer 35c; API970A; 30.0-54.0; 50.0-110.0; 1
+Acer; Acer 54e; API4536; 31.0-54.0; 50.0-110.0; 1
+Acer; Acer 54es; API9715; 31.0-54.0; 50.0-110.0; 1
+Acer; Acer 55; API0037; 30.0-56.9; 50.0-80.0; 1
+Acer; Acer 55c; API9704; 30.0-54.0; 50.0-110.0; 1
+Acer; Acer 55e; API9701; 30.0-54.0; 50.0-110.0; 1
+Acer; Acer 55L; API4C37; 30.0-56.9; 50.0-80.0; 1
+Acer; Acer 56c; API9705; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56e; API4538; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56e-2; API9710; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56i; API4938; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56i-2; API9712; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56is; API0138; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56is-2; API4138; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56j; API9713; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 56L; API4C38; 30.0-64.0; 50.0-110.0; 1
+Acer; Acer 57e; API9809; 30.0-70.0; 50.0-110.0; 1
+Acer; Acer 57i; API971B; 30.0-70.0; 50.0-110.0; 1
+Acer; Acer 58c; API9901; 30.0-70.0; 50.0-110.0; 1
+Acer; Acer 7015; acer_7015; 15.0-36.0; 45.0-90.0; 1
+Acer; Acer 7133s; api5321; 31.0-40.0; 55.0-90.0; 1
+Acer; Acer 7134e; api4522; 31.0-60.0; 55.0-90.0; 1
+Acer; Acer 7134s; api5322; 31.0-60.0; 55.0-90.0; 1
+Acer; Acer 7154e; api4536; 31.0-60.0; 55.0-90.0; 1
+Acer; Acer 7154s; api5336; 31.0-60.0; 55.0-90.0; 1
+Acer; Acer 7156e; api4538; 31.0-70.0; 55.0-90.0; 1
+Acer; Acer 7156i; api4938; 31.0-70.0; 55.0-90.0; 1
+Acer; Acer 7156s; api5338; 31.0-70.0; 55.0-90.0; 1
+Acer; Acer 7176ie; api454c; 31.0-70.0; 55.0-90.0; 1
+Acer; Acer 7176is; api534c; 31.0-70.0; 55.0-90.0; 1
+Acer; Acer 7178ie; api454e; 31.0-90.0; 55.0-90.0; 1
+Acer; Acer 76c; API9706; 30.0-72.0; 50.0-120.0; 1
+Acer; Acer 76e; API9702; 30.0-72.0; 50.0-110.0; 1
+Acer; Acer 76i; API494C; 30.0-64.0; 50.0-110.0; 1
+Acer; Acer 76ie; API424C; 30.0-69.0; 50.0-110.0; 1
+Acer; Acer 76j; API9711; 30.0-72.0; 50.0-110.0; 1
+Acer; Acer 76N; API4E4C; 30.0-64.0; 50.0-110.0; 1
+Acer; Acer 76sl; API9717; 30.0-72.0; 50.0-110.0; 1
+Acer; Acer 77c; API9720; 30.0-72.0; 50.0-120.0; 1
+Acer; Acer 77c-2; API980A; 30.0-72.0; 50.0-120.0; 1
+Acer; Acer 77e; API971C; 30.0-72.0; 50.0-120.0; 1
+Acer; Acer 77e-2; API9808; 30.0-72.0; 50.0-120.0; 1
+Acer; Acer 78c; API9719; 30.0-86.0; 50.0-120.0; 1
+Acer; Acer 78c/G781; API9805; 31.0-86.0; 50.0-120.0; 1
+Acer; Acer 78i; API494E; 30.0-82.0; 50.0-110.0; 1
+Acer; Acer 78ie; API424E; 30.0-86.0; 50.0-120.0; 1
+Acer; Acer 78ie; API454E; 30.0-86.0; 50.0-120.0; 1
+Acer; Acer 79g; API9716; 30.0-95.0; 50.0-160.0; 1
+Acer; Acer 79g/P791; API971E; 30.0-98.0; 50.0-160.0; 1
+Acer; Acer 98e/V981; API9806; 30.0-86.0; 50.0-160.0; 1
+Acer; Acer 98i; API4962; 30.0-82.0; 50.0-120.0; 1
+Acer; Acer 99c; API9718; 30.0-95.0; 50.0-160.0; 1
+Acer; Acer 99g/P911; API9804; 30.0-107.0; 50.0-160.0; 1
+Acer; Acer 99sl; API9721; 30.0-98.0; 50.0-160.0; 1
+Acer; Acer AC501; ABO5572; 30.0-70.0; 50.0-120.0
+Acer; Acer AC511; ACRAC02; 30.0-54.0; 50.0-120.0
+Acer; Acer AC701; ABO7086; 30.0-70.0; 50.0-160.0
+Acer; Acer AC711; ABO7087; 30.0-70.0; 50.0-160.0
+Acer; Acer AC713; ACRAC04; 30.0-72.0; 50.0-160.0
+Acer; Acer AC901; ACR1902; 30.0-96.0; 50.0-160.0
+Acer; Acer AF-706; PTS0309; 30.0-70.0; 50.0-160.0; 1
+Acer; Acer AF-707; PTS0313; 30.0-86.0; 50.0-160.0; 1
+Acer; Acer AF705; ABO7084; 30.0-70.0; 50.0-120.0
+Acer; Acer AF715; ACRAC05; 30.0-98.0; 50.0-160.0; 1
+Acer; Acer AL1511; ACRAD14; 30.0-63.0; 55.0-75.0; 1
+Acer; Acer AL1512; AL1512; 28.0-63.0; 55.0-78.0
+Acer; Acer AL1516E; ACR05EC; 31.0-61.0; 56.0-75.0; 1
+Acer; Acer AL1516V; ACRAD71; 30.0-63.0; 55.0-75.0; 1
+Acer; Acer AL1517V; ACRAD58; 30.0-63.0; 55.0-75.0; 1
+Acer; Acer AL1521; ACRAD05; 30.0-63.0; 55.0-75.0; 1
+Acer; Acer AL1702; ACRAD31; 30.0-82.0; 56.0-76.0
+Acer; Acer AL1703; ACRAD34; 30.0-82.0; 50.0-75.0
+Acer; Acer AL1711; ACRAD12; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL1713; ACRAD17; 30.0-80.0; 56.0-75.0
+Acer; Acer AL1714; ACRAD18; 30.0-82.0; 50.0-75.0
+Acer; Acer AL1715; ACR5770; 24.0-80.0; 49.0-75.0
+Acer; Acer AL1716; ACR06b4; 30-81; 55-75; 1280x1024
+Acer; Acer AL1716E; ACR06AA; 30.0-81.0; 55.0-75.0; 1
+Acer; Acer AL1716V; ACRAD51; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL1716X; ACRAD46; 30.0-83.0; 56.0-75.0; 1
+Acer; Acer AL1717P; ACRAD60; 24.0-80.0; 49.0-75.0; 1
+Acer; Acer AL1717T; ACR56AD; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1717V; ACRAD72; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL1717X; ACRAD46; 30.0-83.0; 56.0-75.0; 1
+Acer; Acer AL1721; ACRAD04; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL1722; ACRad04; 30-83; 55-75; 1280x1024
+Acer; Acer AL1723E; ACR06BB; 30.0-81.0; 55.0-75.0; 1
+Acer; Acer AL1731 (Analog); ACRAD06; 30.0-80.0; 56.0-75.0; 1
+Acer; Acer AL1731 (Digital); ACRAE06; 30.0-64.0; 56.0-75.0; 1
+Acer; Acer AL1732; ACR06C4; 30.0-83.0; 50.0-75.0
+Acer; Acer AL1751W; ACR1751; 30.0-60.0; 56.0-75.0; 1
+Acer; Acer AL1751W DVI; ACR1752; 30.0-60.0; 56.0-75.0; 1
+Acer; Acer AL17xx; ACR02DC; 30.0-80.0; 56.0-75.0; 1
+Acer; Acer AL1906; ACRAD50; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL1911; ACRAD10; 24.0-80.0; 56.0-75.0; 1
+Acer; Acer AL1912; ACR5990; 24.0-80.0; 49.0-75.0; 1
+Acer; Acer AL1913; ACRAD36; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1913W; ACRAD43; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1914; ACRAD29; 30.0-83.0; 55.0-75.0
+Acer; Acer AL1916E; ACR077C; 30.0-81.0; 56.0-75.0; 1
+Acer; Acer AL1916P; ACRAD47; 24.0-80.0; 49.0-75.0; 1
+Acer; Acer AL1916V; ACRAD49; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL1916W; ACRAD52; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1916Wc; ACRAD52; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1916Wp; ACRAD76; 30.0-80.0; 50.0-75.0; 1440x900
+Acer; Acer AL1916Wx; ACRAD80; 31.5-84.0; 56.0-76.0; 1
+Acer; Acer AL1917C; ACRAD53; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1917T (Analog); ACR57AD; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1917T (Digital); ACR57AD; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL1917V; ACRAD73; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL1917W; ACRAD87; 31.0-84.0; 56.0-76.0; 1
+Acer; Acer AL1917X; ACRAD63; 30.0-83.0; 56.0-75.0; 1
+Acer; Acer AL1921; ACRad25; 30-83; 55-75; 1280x1024
+Acer; Acer AL1923E; ACR0783; 31.0-81.0; 55.0-75.0; 1
+Acer; Acer AL1923We; ACRAD83; 31.0-80.0; 56.0-75.0; 1
+Acer; Acer AL1931; ACRAD07; 24.0-80.0; 56.0-75.0; 1
+Acer; Acer AL1951; ACRAD41; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL2016W; ACRada5; 31-83; 56-75; 1680x1050
+Acer; Acer AL2016Wx; ACRAD64; 31.0-84.0; 56.0-77.0; 1
+Acer; Acer AL2017; ACRAD69; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL2021m; ACR02DC; 31.0-81.0; 56.0-75.0; 1
+Acer; Acer AL2023E; ACR07E7; 30.0-83.0; 50.0-75.0; 1600x1200
+Acer; Acer AL2032W; ACR07F0; 30.0-83.0; 50.0-75.0; 1
+Acer; Acer AL2051W; ACRAD70; 31.0-94.0; 56.0-85.0; 1
+Acer; Acer AL2216Wc; ACRAD74; 30.0-82.0; 56.0-76.0; 1
+Acer; Acer AL2216Wv; ACRAD92; 47.0-84.0; 56.0-76.0; 1
+Acer; Acer AL2216Wx; ACRADA1; 31.0-84.0; 56.0-77.0; 1
+Acer; Acer AL2223We; ACRAD84; 31.0-81.0; 56.0-75.0; 1
+Acer; Acer AL2251W; ACRAD85; 47.0-84.0; 56.0-76.0; 1
+Acer; Acer AL2416W (Analog); ACR2416; 24.0-80.0; 49.0-75.0; 1
+Acer; Acer AL2416W (Digital); ACR2417; 24.0-80.0; 49.0-75.0; 1
+Acer; Acer AL2416Wp (Analog); ACRAD61; 24.0-80.0; 49.0-75.0; 1
+Acer; Acer AL2416Wp (Digital); ACRAD62; 15.0-80.0; 49.0-75.0; 1
+Acer; Acer AL2423We; ACR0977; 31.0-81.0; 56.0-75.0; 1
+Acer; Acer AL2616Wv; ACRAD82; 31.0-83.0; 56.0-75.0; 1
+Acer; Acer AL2623Wx; ACRAD81; 31.0-80.0; 56.0-75.0; 1
+Acer; Acer AL501; ABO5580; 24.0-60.0; 56.0-75.0
+Acer; Acer AL501-502; LTN020E; 31.0-60.0; 55.0-75.0; 1
+Acer; Acer AL502; ACR1602; 30.0-60.0; 55.0-75.0
+Acer; Acer AL506; ACRAD03; 24.0-61.0; 54.0-76.0
+Acer; Acer AL511; ABO5581; 24.0-60.0; 56.0-75.0
+Acer; Acer AL513; ACR02A6; 30.0-60.0; 50.0-75.0; 1
+Acer; Acer AL532; ACR0214; 31.0-60.0; 56.0-75.0; 1
+Acer; Acer AL702; ACR7204; 31.5.0-81.0; 56.3.0-75.0
+Acer; Acer AL707; ACRA707; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL711; ABO6781; 24.0-80.0; 56.0-75.0; 1
+Acer; Acer AL712; ABO7772; 24.0-80.0; 56.0-75.0; 1
+Acer; Acer AL715; ABO6785; 24.0-80.0; 56.0-75.0; 1
+Acer; Acer AL718; ACRAD02; 30.0-83.0; 50.0-75.0; 1
+Acer; Acer AL732; ACR02DC; 30.0-80.0; 56.0-75.0; 1
+Acer; Acer AL801; ACRAD01; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer AL922; ABO9990; 24.0-80.0; 56.0-75.0; 1
+Acer; Acer F19; ACR078C; 30.0-83.0; 50.0-75.0; 1
+Acer; Acer F31; api1035; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer F31e; api7601; 31.5-60.0; 56.0-85.0; 1
+Acer; Acer F50p; api7604; 48.4; 60; 1
+Acer; Acer F51; api7602; 31.5-60.0; 56.0-85.0; 1
+Acer; Acer FP350; API7614; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer FP450; API761C; 31.5-60.0; 56.0-75.0
+Acer; Acer FP500; API7606; 48.4; 60
+Acer; Acer FP501; API7616; 49; 61; 1
+Acer; Acer FP502; API760D; 48.4; 60
+Acer; Acer FP503; API7617; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer FP51e; API760A; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer FP550; API7612; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer FP551; API7607; 31.5-60.0; 56.0-85.0; 1
+Acer; Acer FP553; API761F; 31.5-60.0; 56.0-75.0
+Acer; Acer FP555; API7609; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer FP556; API7613; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer FP558; API7615; 31.5-60.0; 56.0-75.0; 1
+Acer; Acer FP559; API761b; 31.5-60.0; 56.0-75.0
+Acer; Acer FP560; API7608; 48.4; 60
+Acer; Acer FP561; API760B; 31.5-60.0; 56.0-75.0
+Acer; Acer FP563; API761E; 31.5-60.0; 56.0-75.0
+Acer; Acer FP581; API7621; 31.5-60.0; 56.0-75.0
+Acer; Acer FP730; API761A; 31.5-81.0; 56.0-75.0
+Acer; Acer FP750; API7619; 31.5-81.0; 56.0-75.0; 1
+Acer; Acer FP751; API7618; 31.5-81.0; 56.0-75.0
+Acer; Acer FP850; API7605; 31.5-80.0; 56.0-75.0; 1
+Acer; Acer FP851; API760C; 31.5-80.0; 56.0-75.0
+Acer; Acer FP855; API7611; 31.5-80.0; 56.0-75.0; 1
+Acer; Acer G571; API0004; 30.0-70.0; 50.0-120.0
+Acer; Acer G772; API9902; 30.0-72.0; 50.0-120.0; 1
+Acer; Acer G991; API9903; 30.0-98.0; 50.0-160.0; 1
+Acer; Acer LM551; API760E; 31.5-60.0; 56.0-85.0
+Acer; Acer LM552; API760F; 48.4; 60
+Acer; Acer LM554; API7610; 48.4; 60
+Acer; Acer P193W; ACRADAA; 30.0-81.0; 55.0-76.0; 1
+Acer; Acer P193Wv; ACR0005; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer P203Wt; ACRADAB; 31.0-83.0; 56.0-75.0; 1
+Acer; Acer P211; API0003; 30.0-115.0; 50.0-160.0
+Acer; Acer P221Wt; ACRADAE; 31.0-83.0; 56.0-75.0; 1
+Acer; Acer P223Wt; ACRADAD; 31.0-83.0; 56.0-75.0; 1
+Acer; Acer P243W; ACRadaf; 30-94; 56-75; 1920x1200
+Acer; Acer V551; API0002; 31.0-54.0; 50.0-110.0; 1
+Acer; Acer V771; API0001; 30.0-72.0; 50.0-120.0; 1
+Acer; Acer V772; API0102; 30.0-72.0; 50.0-120.0
+Acer; Acer V991; API0105; 30.0-98.0; 50.0-160.0
+Acer; Acer X173V; ACR0003; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer X173Wv; ACR0004; 30.0-83.0; 55.0-75.0; 1
+Acer; Acer X192W; ACRAD95; 31.0-80.0; 56.0-75.0; 1
+Acer; Acer X193W; ACRADA9; 30.0-81.0; 55.0-76.0; 1
+Acer; Acer X202W; ACRAD97; 30.0-81.0; 55.0-75.0; 1
+Acer; Acer X203Wt; ACRADAC; 31.0-83.0; 56.0-75.0; 1680x1050
+Acer; Acer X222W; ACRAD98; 31.0-81.0; 56.0-75.0; 1680x1050
+Acer; Acer X243Wt; ACR0000; 30.0-82.0; 56.0-76.0; 1
+Acer; Aspire 33s; API5321; 31.0-35.5; 50.0-100.0; 1
+Acer; Aspire 34Ts; API5322; 31.0-48.0; 50.0-100.0; 1
+Acer; Aspire 54s; API5336; 30.0-54.0; 50.0-110.0; 1
+Acer; Aspire 55s; API9802; 30.0-54.0; 50.0-120.0; 1
+Acer; Aspire 56s; API5338; 30.0-66.0; 50.0-110.0; 1
+Acer; Aspire 76is; API414C; 30.0-69.0; 50.0-110.0; 1
+Acer; Aspire 76is; API534C; 30.0-69.0; 50.0-110.0; 1
+Acer; Aspire 77is; API9707; 30.0-69.0; 50.0-110.0; 1
+Acer; Aspire 77s; API9803; 30.0-72.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CA-1454; ACI0608; 30.0-54.0; 50.0-100.0; 1
+Action Systems, Inc.; Action Monitor CA-1570; ACI0622; 30.0-70.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CH-1999; ACI1999; 30.0-99.0; 50.0-160.0; 1
+Action Systems, Inc.; Action Monitor CK-1566; ACI061E; 30.0-66.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CK-4148; ACI1034; 30.0-50.0; 50.0-85.0; 1
+Action Systems, Inc.; Action Monitor CK-4158; ACI103E; 30.0-60.0; 50.0-100.0; 1
+Action Systems, Inc.; Action Monitor CL-1566; ACI061E; 30.0-66.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CL-1570; ACI1570; 30.0-70.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CL-1766; ACI06E6; 30.0-66.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CL-1770; ACI1770; 30.0-70.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CL-1792; ACI1792; 30.0-92.0; 50.0-160.0; 1
+Action Systems, Inc.; Action Monitor CL-1999; ACI1999; 30.0-99.0; 50.0-160.0; 1
+Action Systems, Inc.; Action Monitor CX-1566; ACI061E; 30.0-66.0; 50.0-120.0; 1
+Action Systems, Inc.; Action Monitor CX-4158; ACI103E; 30.0-60.0; 50.0-100.0; 1
+Action Systems, Inc.; AXION LCD Monitor LA-1560U; ACI1560; 30.0-60.0; 50.0-75.0; 1
+Actix; Actix Systems CX1557; cx1557; 30.0-57.0; 40.0-100.0; 1
+Adara; Adara AML-1402; aml-1402; 15.0-36.0; 45.0-90.0; 1
+Adara; Adara AML-2001; aml-2001; 30.0-36.5; 50.0-90.0; 1
+ADI; ADI ADIV30; adi3230; 30.0-48.5; 50.0-100.0; 1
+ADI; ADI DMC-2304; adidmc; 30.6-36.0; 50.0-90.0; 1
+ADI; ADI Duo; adi1430; 30.0-69.0; 50.0-120.0; 1
+ADI; ADI Duo; adi1452; 30.0-69.0; 50.0-120.0; 1
+ADI; ADI Duo; adi1453; 30.0-69.0; 50.0-120.0; 1
+ADI; ADI Duo; adi1454; 30.0-69.0; 50.0-120.0; 1
+ADI; ADI Duo; adi1455; 30.0-69.0; 50.0-120.0; 1
+ADI; ADI MicroScan 17; adi1130; 30.0-87.5; 50.0-120.0; 1
+ADI; ADI MicroScan 17; adi1131; 30.0-87.5; 50.0-120.0; 1
+ADI; ADI MicroScan 17; adi1140; 30.0-87.5; 50.0-120.0; 1
+ADI; ADI MicroScan 17; adi1150; 30.0-87.5; 50.0-120.0; 1
+ADI; ADI MicroScan 17X; adi0e30; 24.6-60.0; 50.0-120.0; 1
+ADI; ADI MicroScan 17X; adi0e31; 24.6-60.0; 50.0-120.0; 1
+ADI; ADI MicroScan 17X; adi0e32; 24.6-60.0; 50.0-120.0; 1
+ADI; ADI MicroScan 17X; adi0e40; 24.6-60.0; 50.0-120.0; 1
+ADI; ADI MicroScan 17X+; adi0f30; 24.6-60.0; 50.0-120.0; 1
+ADI; ADI MicroScan 17X+; adi0f40; 24.6-60.0; 50.0-120.0; 1
+ADI; ADI MicroScan 2E; sm5514b; 30.0-38.0; 50.0-100.0; 1
+ADI; ADI MicroScan 3E; sm5514a; 30.0-50.0; 50.0-100.0; 1
+ADI; ADI MicroScan 3E+; sm-5514e; 30.0-58.0; 50.0-100.0; 1
+ADI; ADI MicroScan 3V; adi0610; 24.6-48.9; 50.0-100.0; 1
+ADI; ADI MicroScan 3V; adi0620; 24.6-48.9; 50.0-100.0; 1
+ADI; ADI MicroScan 3V; adi0630; 24.6-48.9; 50.0-100.0; 1
+ADI; ADI MicroScan 3V; adi0638; 24.6-48.9; 50.0-100.0; 1
+ADI; ADI MicroScan 3V; adi0640; 24.6-48.9; 50.0-100.0; 1
+ADI; ADI MicroScan 4A; sm-5515; 30.0-58.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4G; adi4g; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4GP; adi4gp; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1630; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1632; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1633; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1634; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1635; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1640; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1642; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1643; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1644; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1645; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1650; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1653; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1654; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1655; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1f30; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1f40; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi1f50; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi2130; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi2140; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi2150; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi2530; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi2540; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4P/4P+; adi2550; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 4V; adi0730; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi0739; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi073c; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi073e; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi073f; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi0740; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi0750; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi0755; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi0940; 30-64; 50-100; 1
+ADI; ADI MicroScan 4V; adi4v; 30-64; 50-100.0; 1
+ADI; ADI MicroScan 5AP; adi5ap; 30-64; 50-100; 1
+ADI; ADI MicroScan 5EP; adi5ep; 30-64; 50-100; 1
+ADI; ADI MicroScan 5G; adi1550; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1552; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1553; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1554; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1555; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1556; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1572; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1c50; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5G; adi1c52; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 5GT; adi1530; 30.0-94.0; 50.0-160.0; 1
+ADI; ADI MicroScan 5L; adi3e50; 30.0-56.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5L; adi3f50; 30.0-56.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1730; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1733; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1734; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1735; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1740; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1743; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1750; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1751; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1753; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1754; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1755; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi1772; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2230; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2240; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2250; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2430; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2440; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2443; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2444; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2445; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2450; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2480; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2481; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2630; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2640; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5P/5P+; adi2650; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5PD; adi3430; 30.0-86.0; 50.0-160.0; 1
+ADI; ADI MicroScan 5T; adi3650; 30.0-56.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5T; adi3750; 30.0-56.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V; adi0b30; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V; adi0b32; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V; adi0b35; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V; adi0b40; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V; adi0b50; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V+; adi0c30; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V+; adi0c32; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V+; adi0c40; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V+; adi0c50; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V+; adi0c51; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 5V+; adi0d40; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI MicroScan 6G; adi1250; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1252; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1253; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1254; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1255; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1256; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1257; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1270; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6G; adi1272; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6L; adi4050; 30.0-56.0; 50.0-100.0; 1
+ADI; ADI MicroScan 6P; adi2050; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6P; adi20b0; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6P; adi20b1; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6P; adi20b2; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6P; adi20b3; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6P; adi20b4; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6P; adi20b5; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan 6T+; adi7850; 31.0-61.0; 56.0-75.0; 1
+ADI; ADI MicroScan 9L; adi4E50; 31.0-91.0; 56.0-85.0; 1
+ADI; ADI MicroScan A600; adi5D10; 31.0-61.0; 56.0-75.0; 1
+ADI; ADI MicroScan A610; adi6450; 31.0-61.0; 56.0-75.0; 1
+ADI; ADI MicroScan E50; adi2E30; 30.0-70.0; 50.0-120.0; 1
+ADI; ADI MicroScan E66; adi3E30; 30.0-96.0; 50.0-160.0; 1
+ADI; ADI MicroScan E66; adi8930; 30.0-96.0; 50.0-160.0; 1
+ADI; ADI MicroScan E75; adi5230; 30.0-86.0; 50.0-160.0; 1
+ADI; ADI MicroScan F520; adi9830; 30.0-70.0; 50.0-160.0; 1
+ADI; ADI MicroScan F720; adi9530; 30.0-70.0; 50.0-160.0; 1
+ADI; ADI MicroScan F730; adi9630; 30.0-70.0; 50.0-160.0; 1
+ADI; ADI MicroScan G1000; adi5850; 30.0-121.0; 50.0-160.0; 1
+ADI; ADI MicroScan G500; adi5130; 30.0-70.0; 50.0-120.0; 1
+ADI; ADI MicroScan G55; adi3630; 30.0-86.0; 50.0-120.0; 1
+ADI; ADI MicroScan G56; adi3730; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan G60; adi3930; 30.0-86.0; 50.0-120.0; 1
+ADI; ADI MicroScan G66; adi3e50; 30.0-95.0; 50.0-120.0; 1
+ADI; ADI MicroScan G70; adi3830; 30.0-110.0; 50.0-120.0; 1
+ADI; ADI MicroScan G700; adi7550; 30.0-86.0; 50.0-160.0; 1
+ADI; ADI MicroScan G700i; adi9750; 30.0-86.0; 50.0-160.0; 1
+ADI; ADI MicroScan G710; adi5450; 30.0-96.0; 50.0-160.0; 1
+ADI; ADI MicroScan G900; adi3E50; 30.0-96.0; 50.0-160.0; 1
+ADI; ADI MicroScan G910; adi5750; 30.0-110.0; 50.0-160.0; 1
+ADI; ADI MicroScan GT56; adi3730; 30.0-94.0; 50.0-160.0; 1
+ADI; ADI MicroScan I600; adi8350; 31.0-61.0; 56.0-75.0; 1
+ADI; ADI MicroScan I610; adiA950; 31.0-61.0; 56.0-75.0; 1
+ADI; ADI MicroScan I612; adi8450; 31.0-61.0; 56.0-75.0; 1
+ADI; ADI MicroScan M500; adi8630; 30.0-54.0; 50.0-160.0; 1
+ADI; ADI MicroScan M510; adi8730; 30.0-70.0; 50.0-160.0; 1
+ADI; ADI MicroScan M700; adi8830; 30.0-70.0; 50.0-160.0; 1
+ADI; ADI MicroScan P40; adi2c30; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan P50; adi3330; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI MicroScan P55; adi3430; 30.0-82.0; 50.0-120.0; 1
+ADI; ADI ProVista 14; adi1350; 30.6-48.0; 50.0-100.0; 1
+ADI; ADI ProVista 5PM; adi3530; 30.0-69.0; 50.0-160.0; 1
+ADI; ADI ProVista E30; adi1830; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E30; adi1832; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E30; adi1833; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E30; adi1834; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E30; adi1835; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E30; adi1836; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E30; adi1840; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E30; adi1843; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E33; adi2d30; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E35; adi2330; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E35; adi2332; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E35; adi2340; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E35; adi2342; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E35; adi2350; 30.0-54.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1930; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1932; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1933; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1934; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1935; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1936; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1937; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1938; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1940; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1942; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1943; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1944; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1950; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E40; adi1952; 30.0-64.0; 50.0-100.0; 1
+ADI; ADI ProVista E44; adi2e30; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI ProVista E44+; adi7650; 30.0-70.0; 50.0-160.0; 1
+ADI; ADI ProVista E55; adi4430; 30.0-69.0; 50.0-100.0; 1
+ADI; ADI ProVista E66; adi3e30; 30.0-86.0; 50.0-120.0; 1
+ADI; ADI TM-29; adi8110; 31.0-50.0; 50.0-120.0; 1
+ADI; ADI TM-34; adi5F10; 31.0-38.0; 50.0-120.0; 1
+Amptron International,Inc.; Amptron AV5S; AMPAV5S; 30.0-54.0; 50.0-110.0
+Amptron International,Inc.; Amptron AV6S; AMPAV6S; 30.0-68.0; 50.0-110.0
+Amptron International,Inc.; Amptron AV8S; AMPAV8S; 30.0-68.0; 50.0-110.0
+Amptron International,Inc.; Amptron CS17; AMPCS17; 30.0-69.0; 50.0-120.0
+Amptron International,Inc.; Amptron CS19; AMPCS19; 30.0-95.0; 50.0-120.0
+Amptron International,Inc.; Amptron ES14; AMPD356; 30.0-54.0; 50.0-120.0
+Amptron International,Inc.; Amptron ES15; AMPD556; 30.0-54.0; 50.0-120.0
+Amptron International,Inc.; Amptron GS17; AMPA785; 30.0-85.0; 50.0-130.0
+Amptron International,Inc.; Amptron GS17e; AMPA770; 30.0-70.0; 50.0-130.0
+AOC; AOC CM-324; cm-324; 15.0-37.0; 50.0-90.0; 1
+AOC; AOC CM-325; cm-325; 31.0-38.0; 50.0-90.0; 1
+AOC; AOC CM-326; cm-326; 15.0-38.0; 50.0-90.0; 1
+AOC; AOC LM560; aoca566; 30.0-66.0; 50.0-100.0; 1
+AOC; AOC Monochrome MM-415; mm-415; 30.0-38.0; 50.0-90.0; 1
+AOC; AOC SPECTRUM 21Hlr; aoce2182; 30.0-66.0; 50.0-100.0; 1
+AOC; AOC SPECTRUM 4V,4VA,4Vlr & 4VlrA, 4Vn, 4VnA; aocd350; 30.0-50.0; 50.0-100.0; 1
+AOC; AOC SPECTRUM 4Vlr & 4VlrA & 4V & 4VA; aocd356; 30.0-54.0; 50.0-120.0; 1
+AOC; AOC SPECTRUM 5Elr & 5ElrA & 5E & 5EA; aocd556; 30.0-54.0; 50.0-120.0; 1
+AOC; AOC SPECTRUM 5Glr; aoce570; 30.0-64.0; 50.0-120.0; 1
+AOC; AOC SPECTRUM 5Glr & 5GlrA & 5Glr+ & 5GlrA+; aoc569e; 30.0-69.0; 50.0-120.0; 1
+AOC; AOC SPECTRUM 5Llr & 5LlrA; aocc564; 30.0-64.0; 50.0-90.0; 1
+AOC; AOC SPECTRUM 5Nlr; aoca569; 30.0-69.0; 50.0-120; 1
+AOC; AOC SPECTRUM 5Vlr & 5VlrA; aocd566; 30.0-66.0; 50.0-100.0; 1
+AOC; AOC SPECTRUM 7Clr; aocf764; 30.0-64.0; 47.0-100.0; 1
+AOC; AOC SPECTRUM 7Dlr & 7DlrA; aoce750; 30.0-68.0; 50.0-120.0; 1
+AOC; AOC SPECTRUM 7Glr & 7GlrA; aoca785; 30.0-85.0; 50.0-130.0; 1
+AOC; AOC SPECTRUM 7Nlr; aoca782; 30.0-82.0; 50.0-110.0; 1
+AOC; AOC SPECTRUM 7Vlr & 7VlrA & 7Vlr+ & 7VlrA+; aoca770; 30.0-70.0; 50.0-130.0; 1
+AOC; AOC SPECTRUM 9Glr; aoce995; 30.0-95.0; 47.0-150.0; 1
+Apollo; Apollo 1280x1024-68Hz; 0; 73.702; 68.24
+Apollo; Apollo 1280x1024-70Hz; 0; 75.118; 70.07
+Apple; Apple 23 Cinema HD; APP9218; 30.0-90.0; 50.0-70.0; 1
+Apple; Apple Aluminum PowerBook G4; APP359c; 30.0-100.0; 50-60
+Apple; Apple AudioVision 14; 0; 35.0; 66.7
+Apple; Apple Basic Color Monitor; 0; 31.5; 60.0
+Apple; Apple Cinema Display 20 LCD; APP1d92; 30-75; 60
+Apple; Apple Cinema Display 22 LCD; APP1692; 30-130; 60
+Apple; Apple Cinema Display 23 LCD; APP1892; 30-130; 60
+Apple; Apple Color Plus 14; 0; 35.0 ; 67.0
+Apple; Apple ColorSync 17; 0; 30-82; 40-120
+Apple; Apple ColorSync 20; 0; 30-94; 48-120
+Apple; Apple eMac; APP079d; 71-73; 70-140
+Apple; Apple HiRes Display 1152x864; 0; 30.0-100.0; 50.0-160.0
+Apple; Apple HiRes Display 1280x1024; 0; 30.0-130.0; 50.0-160.0
+Apple; Apple iBook 800x600; 0; 28-50; 60
+Apple; Apple iBook2 12 (1024x768); APP129c; 30-70; 43.0-72.0
+Apple; Apple iBook2 15 (1024x768); APP1a9c; 30-70; 43.0-72.0
+Apple; Apple iMac (Rev A or B) 15; APP019d; 59-63; 50-150
+Apple; Apple iMac CRT; APP059d; 60.015; 75-117
+Apple; Apple iMac LCD 15; APP229c; 28.0-49.0; 60
+Apple; Apple iMac LCD 17; APP279c; 28.0-49.0; 60
+Apple; Apple iMac/PowerBook 1024x768; 0; 30.0-70.0; 50.0-160.0
+Apple; Apple LoRes Display 640x480; 0; 28.0-33.0; 43.0-72.0
+Apple; Apple Macintosh 16" Color Display; 0; 50.0; 75.0
+Apple; Apple Macintosh 21" Color Display; 0; 68.7; 75.0
+Apple; Apple Multiple Scan 14; 0; 31.5-48.1; 60-72
+Apple; Apple Multiple Scan 15; 0; 30-61 ; 60-75
+Apple; Apple Multiple Scan 15AV; 0; 30-56.5; 56-75
+Apple; Apple Multiple Scan 17; 0; 60-75; 31.4-60.2
+Apple; Apple Multiple Scan 1705; 0; 30-65; 50-120
+Apple; Apple Multiple Scan 20; 0; 60-75; 31.4-80
+Apple; Apple Multiple Scan 720; 0; 30-69; 48-160
+Apple; Apple Performa Display; 0; 35.0 ; 66.7
+Apple; Apple PowerBook G3 (pre-1999); 0; 119; 196
+Apple; Apple PowerBook G3 Series (1999-2000); 0; 31.5-57.0; 60
+Apple; Apple PowerBook G4 12 (2003); APP2a9c; 30-70; 60
+Apple; Apple PowerBook G4 12 (2003); APP2b9c; 30-70; 60
+Apple; Apple Studio Display 15 LCD; APP1592; 28.0-49.0; 60
+Apple; Apple Studio Display 15 LCD (pre-2001); APPf401; 48-60; 60-75
+Apple; Apple Studio Display 17 CRT; 0; 30-85; 48-160
+Apple; Apple Studio Display 17 LCD; APP1792; 30-130; 60
+Apple; Apple Studio Display 20 LCD; APP1992; 30-130; 60
+Apple; Apple Studio Display 21 CRT; 0; 31-107; 48-120
+Apple; Apple TiPowerBook 1152x768; 0; 30.0-100.0; 50.0-160.0
+Apple; Apple TiPowerBook 1280x854; 0; 30.0-100.0; 50.0-160.0
+Apple; Apple Titanium PowerBook G4 (2001); APP1d9c; 30.0-100.0; 50-60
+Apple; Apple Titanium PowerBook G4 (2002); APP209c; 30.0-100.0; 50-60
+Apple; Apple Vision 1710; APP1017; 30-80; 40-120
+Apple; Apple Vision 1710AV; 0; 30-82; 50-120
+Apple; Apple Vision 750AV; 0; 30-82; 40-120
+Apple; Apple Vision 850 AV; APP0352; 30-94; 48-120
+AST; AST Sabre; ast8009; 30.0-64.0; 50.0-90.0; 1
+AST; AST Vision 20H; ast8008; 29.0-82.0; 50.0-150.0; 1
+AST; AST Vision 4I; ast8002; 30.0-38.0; 50.0-90.0; 1
+AST; AST Vision 4L; ast8004; 30.0-64.0; 50.0-90.0; 1
+AST; AST Vision 4N; ast8003; 30.0-64.0; 50.0-90.0; 1
+AST; AST Vision 4V; ast8001; 31.5; 60.0-70.0; 1
+AST; AST Vision 5L; ast8005; 30.0-64.0; 50.0-90.0; 1
+AST; AST Vision 5V; ast800a; 30.0-50.0; 50.0-120.0; 1
+AST; AST Vision 7H; ast8007; 30.0-82.0; 50.0-90.0; 1
+AST; AST Vision 7L; ast8006; 30.0-64.0; 50.0-90.0; 1
+AT&T; AT&T 14 in. Color Economy; 0; 31.5; 50-90
+AT&T; AT&T 14 in. Color Economy; 0; 35.0; 50-90
+AT&T; AT&T 14 in. Color Value; 0; 31.5; 50-90
+AT&T; AT&T 14 in. Color Value; 0; 38.0; 50-90
+AT&T; AT&T 14 in. Color Value; 0; 48.0; 50-90
+AT&T; AT&T 14 in. Mono; 0; 31; 55-75
+AT&T; AT&T 15 in. Color; 0; 30-64; 50-90
+AT&T; AT&T 17 in. Color Professional; 0; 30-82; 50-160
+AT&T; AT&T 17 in. Color Value; 0; 30-64; 50-90
+AT&T; AT&T CRT-365; 0; 30.0-75.0; 60.0-70.0
+AT&T; AT&T CRT-395; 0; 30.0-66.0; 50.0-90.0
+Belinea; Belinea 10 14 10; MAX0582; 30.0-61.0; 50.0-77.0 ; 1
+Belinea; Belinea 10 15 10; MAX05E6; 30.0-61.0; 50.0-77.0 ; 1
+Belinea; Belinea 10 15 15; MAX05EB; 30.0-61.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 20; MAX05F0; 48.0-48.0; 60.0-60.0 ; 1
+Belinea; Belinea 10 15 25; MAX05F5; 30.0-60.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 30; MAX05FA; 30.0-70.0; 50.0-85.0 ; 1
+Belinea; Belinea 10 15 35; MAX05FF; 30.0-61.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 36 / Art. No. 101536; MAX0600; 30.0-60.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 36 / Art. No. 111504; MAX05E0; 30.0-62.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 36 / Art. No. 111508; MAX05E4; 30.0-63.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 36 / Art. No. 111513; MAX05E9; 30.0-63.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 36 / Art. No. 111514; MAX05EA; 30.0-63.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 37; MAX0601; 30.0-60.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 40; MAX0604; 30.0-61.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 50; MAX060E; 30.0-70.0; 50.0-85.0 ; 1
+Belinea; Belinea 10 15 51; MAX05E1; 31.0-62.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 55 / Art. No. 101555; MAX0613; 31.0-66.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 55 / Art. No. 111501; MAX05DD; 31.0-66.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 55 / Art. No. 111503; MAX05DF; 31.0-62.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 55 / Art. No. 111509; MAX05E5; 31.0-62.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 55 / Art. No. 111516; MAX05EC; 31.0-62.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 56 / Art. No. 101556; MAX0614; 31.0-66.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 56 / Art. No. 111502; MAX05DE; 31.0-66.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 60; MAX0618; 30.0-61.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 15 70; MAX0622; 30.0-62.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 15 75; MAX05E3; 30.0-63.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 15 80; MAX05E8; 31.0-62.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 05 / Art. No. 111718; MAX06B6; 30.0-83.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 17 05 / Art. No. 111723; MAX06BB; 30.0-83.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 17 10 / Art. No. 101710; MAX06AE; 30.0-81.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 10 / Art. No. 111722; MAX06BA; 30.0-83.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 17 10 / Art. No. 111728; MAX06C0; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 10 / Art. No. 111738; MAX06CA; 30.0-83.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 17 11 / Art. No. 111724; MAX06BC; 30.0-83.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 17 11 / Art. No. 111743; MAX06CF; 30.0-83.0; 50.0-77.0 ; 1
+Belinea; Belinea 10 17 11 / Art. No. 111750; MAX06D6; 30.0-83.0; 50.0-77.0 ; 1
+Belinea; Belinea 10 17 13; MAX06DB; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 15 / Art. No. 111706; MAX06AA; 31.0-83.0; 56.0-75 ; 1
+Belinea; Belinea 10 17 15 / Art. No. 111715; MAX06B3; 31.0-81.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 15 / Art. No. 111717; MAX06B5; 31.0-83.0; 56.0-75 ; 1
+Belinea; Belinea 10 17 15 / Art. No. 111746; MAX06D2; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 17; MAX06DC; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 20; MAX06B8; 30.0-81.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 17 20 / Art. No. 111747; MAX06D3; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 25 / Art. No. 111707; MAX06AB; 30.0-84.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 25 / Art. No. 111719; MAX06B7; 30.0-84.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 25 / Art. No. 111727; MAX06BF; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 25 / Art. No. 111737; MAX06C9; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 25 / Art. No. 111751; MAX06D7; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 27; MAX06DD; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 28; MAX06D9; 30.0-83.0; 50.0-77.0 ; 1
+Belinea; Belinea 10 17 30 / Art. No. 101730; MAX06C2; 30.0-81.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 30 / Art. No. 111703; MAX06A7; 31.0-82.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 30 / Art. No. 111711; MAX06AF; 30.0-83.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 17 30 / Art. No. 111716; MAX06B4; 30.0-84.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 30 / Art. No. 111731; MAX06C3; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 30 / Art. No. 111744; MAX06D0; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 35 / Art. No. 111714; MAX06B2; 30.0-83.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 17 35 / Art. No. 111734; MAX06C6; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 35 / Art. No. 111745; MAX06D1; 30.0-83.0; 50.0-77.0 ; 1
+Belinea; Belinea 10 17 35 / Art. No. 111749; MAX06D5; 30.0-83.0; 50.0-77.0 ; 1
+Belinea; Belinea 10 17 40; MAX06CC; 30.0-80.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 17 41; MAX06CD; 30.0-80.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 17 50 / Art. No. 111708; MAX06AC; 30.0-84.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 50 / Art. No. 111732; MAX06C4; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 50 / Art. No. 111739; MAX06CB; 31.0-83.0; 50.0-76.0 ; 1
+Belinea; Belinea 10 17 51 / Art. No. 111709; MAX06AD; 30.0-84.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 51 / Art. No. 111733; MAX06C5; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 17 51 / Art. No. 111742; MAX06CE; 30.0-83.0; 50.0-76.0 ; 1
+Belinea; Belinea 10 18 10; MAX0712; 31.0-80.0; 60.0-85.0 ; 1
+Belinea; Belinea 10 18 20; MAX0716; 30.0-81.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 18 30; MAX0726; 30.0-82.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 19 01 / Art. No. 111914; MAX077A; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 01 / Art. No. 111922; MAX0782; 30.0-83.0; 50.0-76.0 ; 1
+Belinea; Belinea 10 19 02 / Art. No. 111916; MAX077C; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 02 / Art. No. 111923; MAX0783; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 03 / Art. No. 111928; MAX0788; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 06; MAX0772; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 10 / Art. No. 101910; MAX0776; 30.0-82.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 19 10 / Art. No. 111904; 0; 20.0-83.0; 50.0-76.0 ; 1
+Belinea; Belinea 10 19 10 / Art. No. 111908; MAX0774; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 10 / Art. No. 111929; MAX0789; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 11; MAX077E; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 15 / Art. No. 111915; MAX077B; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 15 / Art. No. 111921; MAX0781; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 20 / Art. No. 111902; MAX076E; 30.0-84.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 20 / Art. No. 111912; MAX0778; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 20 / Art. No. 111919; MAX077F; 30.0-83.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 19 25; MAX0784; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 27; MAX0785; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 19 30; MAX0786; 30.0-83.0; 50.0-76.0 ; 1
+Belinea; Belinea 10 19 35; MAX0787; 30.0-83.0; 56.0-76.0 ; 1
+Belinea; Belinea 10 20 05; MAX07D3; 30.0-83.0; 50.0-85.0 ; 1
+Belinea; Belinea 10 20 10; MAX07FA; 30.0-54.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 20 15 / Art. No. 112001; MAX07D1; 30.0-82.0; 50.0-75.0 ; 1
+Belinea; Belinea 10 20 15 / Art. No. 112004; MAX07D4; 30.0-83.0; 50.0-85.0 ; 1
+Belinea; Belinea 10 20 20; MAX07E4; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 20 25; MAX07D2; 30.0-83.0; 50.0-86.0 ; 1
+Belinea; Belinea 10 20 30; MAX07EE; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 20 30 W; MAX07D7; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 20 35 W; MAX07D5; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 10 30 10; MAX0BC2; 30.0-70.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 30 15; MAX0BC7; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 30 20; MAX0BCC; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 30 22; MAX0BCE; 30.0-72.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 22 Black; MAX06A9; 30.0-72.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 25; MAX0BD1; 30.0-70.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 26 / Art. No. 103026; MAX0BD2; 30.0-70.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 26 / Art. No. 121701; MAX06A5; 30.0-70.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 26 / Art. No. 121713; MAX06B1; 30.0-72.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 26 / Art. No. 121729; MAX06C1; 30.0-72.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 30; MAX0BD6; 30.0-70.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 30 35; MAX0BDB; 30.0-70.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 40; MAX0BE0; 30.0-86.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 30 45; MAX0BE5; 30.0-87.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 50; MAX0BEA; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 51; MAX06A8; 30.0-97.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 30 52; MAX06B9; 30.0-97.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 30 55 / Art. No. 103055; MAX0BEF; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 55 / Art. No. 121712; MAX06B0; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 60; MAX0BF4; 30.0-95.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 30 65; MAX0BF9; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 70; MAX0BFE; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 75 / Art. No. 103075; MAX0C03; 30.0-70.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 30 75 / Art. No. 121726; MAX06BE; 30.0-72.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 80; MAX0C08; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 85 / Art. No. 103085; MAX0C0D; 30.0-86.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 85 / Art. No. 121702; MAX06A6; 30.0-86.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 30 90; MAX0C12; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 40 10; MAX0FAA; 30.0-54.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 40 40; MAX0FC8; 30.0-38.0; 50.0-80.0 ; 1
+Belinea; Belinea 10 40 45; MAX0FCD; 30.0-50.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 40 50; 0; 31.5-50.0; 50.0-100.0
+Belinea; Belinea 10 40 60; 0; 30.0-50.0; 50.0-100.0
+Belinea; Belinea 10 40 65; MAX0FE1; 30.0-50.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 40 70; 0; 30.0-38.0; 50.0-90.0
+Belinea; Belinea 10 50 30; MAX13A6; 30.0-64.0; 50.0-100.0 ; 1
+Belinea; Belinea 10 50 35; MAX13AB; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 50 45; MAX13B5; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 50 46; MAX13B6; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 50 50; MAX13BA; 30.0-64.0; 50.0-100.0 ; 1
+Belinea; Belinea 10 50 60; 0; 30.0-64.0; 50.0-90.0
+Belinea; Belinea 10 50 65; MAX5620; 30.0-64.0; 50.0-100.0 ; 1
+Belinea; Belinea 10 50 66; MAX5624; 30.0-65.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 50 70; 0; 30.0-65.0; 50.0-100.0
+Belinea; Belinea 10 50 75; MAX13D3; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 50 76; MAX13D4; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 50 80; 0; 30.0-69.0; 50.0-120.0
+Belinea; Belinea 10 50 90; 0; 30.0-64.0; 55.0-90.0
+Belinea; Belinea 10 50 95; MAX3539; 30.0-64.0; 55.0-120.0 ; 1
+Belinea; Belinea 10 55 20; 0; 30.0-64.0; 50.0-100.0
+Belinea; Belinea 10 55 40; MAX3430; 30.0-64.0; 50.0-90.0 ; 1
+Belinea; Belinea 10 55 50; MAX15AE; 24.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 55 70; MAX15C2; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 55 75; MAX15C7; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 55 76; MAX15C8; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 55 86; MAX15D2; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 55 90; MAX15D6; 30.0-85.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 55 95; MAX15DB; 30.0-85.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 55 96; MAX15DC; 30.0-85.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 60 20; MAX1784; 30.0-95.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 60 30; MAX178E; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 35; MAX1793; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 40; 0; 30.0-82.0; 50.0-90.0
+Belinea; Belinea 10 60 50; MAX17A2; 30.0-85.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 60 55 / Art. No. 106055; MAX17A7; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 55 / Art. No. 121901; MAX076D; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 60; MAX17AC; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 65; MAX17B1; 30.0-96.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 70; MAX17B6; 30.0-95.0; 50.0-180.0 ; 1
+Belinea; Belinea 10 60 75 / Art. No. 106075; MAX17BB; 30.0-98.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 75 / Art. No. 121903; MAX076F; 30.0-96.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 60 80; MAX17C0; 30.0-110.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 60 90; MAX17CA; 30.0-95.0; 50.0-150.0 ; 1
+Belinea; Belinea 10 60 95; MAX17CF; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 70 10; MAX1B62; 30.0-69.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 70 15; MAX1B67; 30.0-70.0; 50.0-180.0 ; 1
+Belinea; Belinea 10 70 20; MAX1B6C; 30.0-70.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 70 25; MAX1B71; 30.0-70.0; 50.0-180.0 ; 1
+Belinea; Belinea 10 70 30; MAX1B76; 30.0-86.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 70 35; MAX1B7B; 30.0-95.0; 50.0-180.0 ; 1
+Belinea; Belinea 10 70 40; MAX1B80; 30.0-85.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 70 50; MAX1B8A; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 70 60; MAX1B94; 30.0-69.0; 50.0-120.0 ; 1
+Belinea; Belinea 10 70 65; MAX1B99; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 10; MAX1F4A; 30.0-115.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 15; MAX1F4F; 30.0-115.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 20; MAX1F54; 30.0-107.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 25; MAX1F59; 30.0-107.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 30 / Art. No. 122101; MAX0835; 30.0-125.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 35 / Art. No. 122103; MAX0837; 30.0-125.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 50; MAX1F72; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 60; MAX1F7C; 30.0-115.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 80; MAX1F90; 30.0-121.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 90; MAX1F9A; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 10 80 95; MAX1F9F; 30.0-95.0; 50.0-160.0 ; 1
+Belinea; Belinea 1705 S1 / Art. No. 111754; MAX06DA; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 1770 S1 / Art. No. 111758; MAX06DE; 30.0-83.0; 50.0-77.0 ; 1
+Belinea; Belinea 1905 G1; MAX078D; 30.0-83.0; 50.0-76.0 ; 1
+Belinea; Belinea 1905 S1; MAX078B; 31.0-83.0; 56.0-75.0 ; 1
+Belinea; Belinea 2080 S1 / Art. No. 112008; MAX07D8; 30.0-83.0; 50.0-85.0 ; 1
+BenQ; BenQ FP2091 (Analog); BNQ766B; 31.0-80.0; 56.0-76.0; 1
+BenQ; BenQ FP2091 (Digital); BNQ766C; 31.0-80.0; 56.0-76.0; 1
+BenQ; BenQ FP231W (Analog); BNQ7669; 31.0-80.0; 56.0-76.0; 1
+BenQ; BenQ FP231W (Digital); BNQ766A; 31.0-80.0; 56.0-76.0; 1
+BenQ; BenQ FP531; BNQ765E; 31-63.0; 56.0-75.0; 1
+BenQ; BenQ FP547; BNQ7652; 31-63.0; 56.0-75.0; 1
+BenQ; BenQ FP556ms; BNQ765D; 31.5-63.0; 56.0-75.0; 1
+BenQ; BenQ FP556s; BNQ765C; 31.5-63.0; 56.0-75.0; 1
+BenQ; BenQ FP557s; BNQ7650; 31.0-63.0; 56.0-75.0; 1
+BenQ; BenQ FP567s; BNQ7651; 31.5-63.0; 56.0-75.0; 1
+BenQ; BenQ FP567s ver.2; BNQ7664; 31.5-63.0; 56.0-75.0; 1
+BenQ; BenQ FP581s; BNQ7643; 31.5-60.0; 56.0-75.0; 1
+BenQ; BenQ FP591; BNQ7641; 31.0-60.0; 56.0-75.0; 1
+BenQ; BenQ FP71E; BNQ7683; 31-83.0; 56.0-76.0; 1
+BenQ; BenQ FP71G; BNQ7688; 31-83; 56-76; 1280x1024
+BenQ; BenQ FP731; BNQ7659; 31.5-83.0; 60.0-76.0; 1
+BenQ; BenQ FP747; BNQ765A; 31.0-83.0; 56.0-76.0; 1
+BenQ; BenQ FP752-T; BNQ7635; 31.5-83.0; 56.0-76.0; 1
+BenQ; BenQ FP756ms; BNQ7661; 31.5-83.0; 60.0-76.0; 1
+BenQ; BenQ FP757 ver.2; BNQ7660; 31.5-83.0; 60.0-76.0; 1
+BenQ; BenQ FP767; BNQ7638; 31.5-83.0; 56.0-76.0; 1
+BenQ; BenQ FP781s (Analog); BNQ7652; 31.0-83.0; 56.0-76.0; 1
+BenQ; BenQ FP781s (Digital); BNQ7653; 31.0-73.0; 56.0-76.0; 1
+BenQ; BenQ FP783; BNQ7668; 31-83.0; 56.0-76.0; 1
+BenQ; BenQ FP785; BNQ7678; 31-83.0; 56.0-76.0; 1
+BenQ; BenQ FP791; BNQ7640; 31.5-83.0; 60.0-76.0; 1
+BenQ; BenQ FP882 (Analog); BNQ7633; 31.5-83.0; 56.0-76.0; 1
+BenQ; BenQ FP882 (Digital); BNQ763D; 31.5-71.0; 56.0-76.0; 1
+BenQ; BenQ FP937s; BNQ7685; 31-83.0; 56.0-76.0; 1
+BenQ; BenQ FP951; BNQ7666; 31.0-83.0; 56.0-76.0; 1
+BenQ; BenQ FP991; BNQ7646; 31.0-83.0; 56.0-76.0; 1
+BenQ; BenQ FP992; BNQ7276; 31.0-83.0; 56.0-76.0; 1
+BenQ; BenQ G2400W; BNQ780a; 31-94; 50-85; 1920x1200
+BenQ; BenQ P992; BNQ0106; 30.0-98.0; 50.0-160.0; 1
+BenQ; BenQ T720; BNQ7659; 31.5-83.0; 60.0-76.0; 1
+BenQ; BenQ T903; BNQ7680; 31-83.0; 56.0-76.0; 1
+BenQ; BenQ T904; BNQ7681; 31-83.0; 56.0-76.0; 1
+Bridge; Bridge BM17C; brg00ab; 30.0-70.0; 50.0-160.0; 1
+Brother; Brother BM85L; 0; 30.0-64.0; 50.0-100.0; 1
+Bus Computer Systems; Bus Computer Systems Bus_VGA; bus_vga; 31.5-38.0; 50.0-70.0; 1
+Carroll Touch; Carroll Touch CT1381A; ct1381a; 15.7-38.0; 45.0-90.0; 1
+CMC; CMC 17 AD; CMO7801; 30-82; 50-75; 1280x1024
+Colorgraphic; Colorgraphic EG2040; eg2040; 20.0-40.0; 40.0-100.0; 1
+Compal; Compal BJ350; CPL9565; 31.5-61.0; 50-90
+Compal; Compal BP350; CPL9566; 24-60; 56-75
+Compal; Compal CM350; CPL1509; 24-61.0; 56-75
+Compal; Compal CM870; CPL1702; 24-80.0; 56-75
+Compal; Compal FC340; CPL24EB; 31.5-61.0; 50-90
+Compal; Compal FC350; CPL254F; 31.5-61.0; 50-90
+Compal; Compal FD350; CPL2551; 31.5-61.0; 50-90
+Compal; Compal FT340; CPL24EC; 31.5-61.0; 50-90
+Compal; Compal G450; CPL0975; 30-50; 50-100
+Compal; Compal G554; CPL09D9; 30-54; 50-120
+Compal; Compal G566; CPL09DA; 30-66; 50-120
+Compal; Compal G567; CPL09DB; 30-66; 50-120
+Compal; Compal G569; CPL09DD; 30-70; 50-120
+Compal; Compal GC220; CPL2419; 31.5-38.5; 55-85
+Compal; Compal GT220; CPL241A; 31.5-38.5; 55-85
+Compal; Compal H113; CPL1130; 30-115; 50-160
+Compal; Compal H450; CPL096B; 30-50; 50-100
+Compal; Compal H554; CPL09CF; 30-54; 50-120
+Compal; Compal H566; CPL09D0; 30-66; 50-120
+Compal; Compal H567; CPL09D1; 30-66; 50-120
+Compal; Compal H569; CPL09D3; 30-70; 50-120
+Compal; Compal H763; CPL0A9B; 30-70; 50-120
+Compal; Compal H767; CPL0A99; 30-66; 50-110
+Compal; Compal H787; CPL0A9C; 30-87; 50-120
+Compal; Compal K450; CPL097F; 30-50; 50-100
+Compal; Compal K567; CPL09E5; 30-66; 50-120
+Compal; Compal LC220; CPL240F; 31.5-38.5; 55-85
+Compal; Compal LT220; CPL2410; 31.5-38.5; 55-85
+Compal; Compal M454; CPL4541; 30-54; 50-120
+Compal; Compal M500; CPL5001; 30-54; 50-120
+Compal; Compal M554; CPL5541; 30-54; 50-120
+Compal; Compal M557; CPL5571; 30-70; 50-120
+Compal; Compal M570; CPL5701; 30-70; 50-120
+Compal; Compal M571; CPL5711; 30-70; 50-120
+Compal; Compal M573; CPL5731; 30-70; 50-120
+Compal; Compal M576; CPL5761; 30-70; 50-120
+Compal; Compal M577; CPL5771; 30-70; 50-120
+Compal; Compal M770; CPL7701; 30-70; 50-120
+Compal; Compal M773; CPL7731; 30-70; 50-120
+Compal; Compal M787; CPL7871; 30-87; 50-120
+Compal; Compal M980; CPL9801; 30-87; 50-120
+Compal; Compal M990; CPL9901; 30-95; 50-160
+Compal; Compal M993; CPL9931; 30-95; 50-160
+Compal; Compal M999; CPL9991; 30-95; 50-120
+Compal; Compal P454; CPL4542; 30-54; 50-120
+Compal; Compal P554; CPL5542; 30-54; 50-120
+Compal; Compal P570; CPL5702; 30-70; 50-120
+Compal; Compal P571; CPL5712; 30-70; 50-120
+Compal; Compal P576; CPL5762; 30-70; 50-120
+Compal; Compal P577; CPL5772; 30-70; 50-120
+Compal; Compal P770; CPL7702; 30-70; 50-120
+Compal; Compal P773; CPL7732; 30-70; 50-120
+Compal; Compal P787; CPL7872; 30-87; 50-120
+Compal; Compal P980; CPL9802; 30-87; 50-120
+Compal; Compal P990; CPL9902; 30-95; 50-160
+Compal; Compal P993; CPL9932; 30-95; 50-160
+Compal; Compal S450; CPL0989; 30-50; 50-100
+Compal; Compal S554; CPL09ED; 30-54; 50-120
+Compal; Compal S566; CPL09EE; 30-66; 50-120
+Compal; Compal S567; CPL09EF; 30-66; 50-120
+Compal; Compal S569; CPL09F1; 30-70; 50-120
+Compal; Compal S763; CPL0AB9; 30-70; 50-120
+Compal; Compal S767; CPL0AB7; 30-66; 50-110
+Compal; Compal S787; CPL0AB5; 30-87; 50-120
+Compal; Compal V799; CPL7993; 30-70; 50-120
+Compal; Compal V999; CPL9993; 30-95; 50-120
+Compaq; Compaq 1024; cpq0011; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0012; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0013; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0014; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0015; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0016; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0100; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0146; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1024; cpq0147; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 140; cpq0d46; 31-49; 48-80; 1
+Compaq; Compaq 140; cpq0d47; 31-49; 48-80; 1
+Compaq; Compaq 140; cpq0d48; 31-49; 48-80; 1
+Compaq; Compaq 140; cpq0d49; 31-49; 48-80; 1
+Compaq; Compaq 140; cpq0d4a; 31-49; 48-80; 1
+Compaq; Compaq 140; cpq0d4b; 31-49; 48-80; 1
+Compaq; Compaq 140; cpq0d4c; 31-49; 48-80; 1
+Compaq; Compaq 140; cpq0d4d; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f46; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f47; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f48; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f49; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f4a; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f4b; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f4c; 31-49; 48-80; 1
+Compaq; Compaq 150; cpq0f4d; 31-49; 48-80; 1
+Compaq; Compaq 151FS; cpq0022; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0023; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0024; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0025; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0026; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0027; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0028; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0346; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0347; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0348; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq0349; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq034a; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 151FS; cpq034b; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 1520 Flat Panel Monitor; cpq1456; 30.0-60.0; 56.0-76.0; 1
+Compaq; Compaq 171FS; cpq002d; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq002e; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq002f; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0030; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0031; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0032; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0033; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0546; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0547; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0548; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 171FS; cpq0549; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq 172; cpq_172; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq 1720 Flat Panel Monitor; cpq144f; 30.0-81.0; 56.0-76.0; 1
+Compaq; Compaq 5500 Color Monitor; cpq1444; 30.0-54.0; 50.0-120.0; 1
+Compaq; Compaq 7500 Color Monitor; cpq1445; 30.0-70.0; 50.0-140.0; 1
+Compaq; Compaq 7550 Color Monitor; cpq1446; 30.0-86.0; 50.0-140.0; 1
+Compaq; Compaq Advanced Graphics; ags; 54.0; 50.0-75.0; 1
+Compaq; Compaq FP15 Flat Panel Monitor; cpq145c; 30.0-61.0; 56.0-76.0; 1
+Compaq; Compaq FP17 Flat Panel Monito; cpq145e; 30.0-81.0; 56.0-76.0; 1
+Compaq; Compaq FP5315 Flat Panel Monitor; cpq1459; 30.0-61.0; 56.0-76.0; 1
+Compaq; Compaq FP7317 Flat Panel Monitor; cpq145b; 30.0-81.0; 56.0-76.0; 1
+Compaq; Compaq Internal VGA Panel; ivga; 31.5; 50.0-70.0; 1
+Compaq; Compaq MV920; CPQ3027; 30-96; 50-160; 1600x1200
+Compaq; Compaq P110 Color Monitor; cpq1321; 30.0-107.0; 48.0-160.0; 1
+Compaq; Compaq P1110 Color Monitor; 0; 50.0-160.0; 30.0-121.0; 1
+Compaq; Compaq P1210 Color Monitor; cpq1386; 30.0-121.0; 50.0-160.0; 1
+Compaq; Compaq P1220 Color Monitor; cpq1421; 30.0-130.0; 50.0-160.0; 1
+Compaq; Compaq P1610 Color Monitor; cpq1327; 30.0-96.0; 48.0-160.0; 1
+Compaq; Compaq P50 Color Monitor; cpq1323; 30.0-69.0; 50.0-125.0; 1
+Compaq; Compaq P70 Color Monitor; cpq1320; 30.0-92.0; 48.0-150.0; 1
+Compaq; Compaq P710 Color Monitor; cpq1384; 30.0-96.0; 50.0-130.0; 1600x1200
+Compaq; Compaq P720 Color Monitor; cpq1419; 31.0-96.0; 55.0-160.0; 1
+Compaq; Compaq P75 Color Monitor; cpq1330; 30.0-85.0; 50.0-150.0; 1
+Compaq; Compaq P900 Color Monitor; cpq1353; 30.0-107.0; 50.0-120.0; 1
+Compaq; Compaq P910 Color Monitor; cpq1385; 30.0-108.0; 50.0-140.0; 1
+Compaq; Compaq P920 Color Monitor; cpq1420; 30.0-110.0; 50.0-160.0; 1
+Compaq; Compaq Presario 140; cpq0017; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq0018; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq0019; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq001a; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq0020; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq0021; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq0746; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq0747; 31-62; 48-90; 1
+Compaq; Compaq Presario 140; cpq0846; 31-49; 48-80; 1
+Compaq; Compaq Presario 140; cpq0847; 31-49; 48-80; 1
+Compaq; Compaq Presario 140; cpq0848; 31-49; 48-80; 1
+Compaq; Compaq Presario 140; cpq0849; 31-49; 48-80; 1
+Compaq; Compaq Presario 140; cpq084a; 31-49; 48-80; 1
+Compaq; Compaq Presario 140; cpq084b; 31-49; 48-80; 1
+Compaq; Compaq Presario 140; cpq084c; 31-49; 48-80; 1
+Compaq; Compaq Presario 140; cpq084d; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0029; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq002a; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq002b; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq002c; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq0946; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq0947; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq0948; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq0949; 31-62; 48-90; 1
+Compaq; Compaq Presario 150; cpq0a46; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0a47; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0a48; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0a49; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0a4a; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0a4b; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0a4c; 31-49; 48-80; 1
+Compaq; Compaq Presario 150; cpq0a4d; 31-49; 48-80; 1
+Compaq; Compaq Presario Integrated Monitor; pres; 35.2-38.0; 56.0-60.0; 1
+Compaq; Compaq Presario MV400 Color Monitor; cpq3014; 31-50; 50-90; 1
+Compaq; Compaq Presario MV500 Color Monitor; cpq3012; 31-54; 50-90; 1
+Compaq; Compaq Presario MV700 Color Monitor; cpq3013; 30-70; 50-100; 1
+Compaq; Compaq QVision 150; cpq_qv150; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq QVision 170; cpq_qv170; 31.5-57.0; 50.0-90.0; 1
+Compaq; Compaq QVision 172; cpq0040; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 172; cpq0041; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 172; cpq0042; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 200; cpq0043; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 200; cpq0044; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 200; cpq0045; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 210; cpq0046; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 210; cpq0047; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 210; cpq0048; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq QVision 210; cpq0049; 31.5-82.0; 50.0-90.0; 1
+Compaq; Compaq S500 Color Monitor; cpq1356; 30.0-54.0; 50.0-120.0; 1
+Compaq; Compaq S510 Color Monitor; cqp1371; 30.0-61.0; 50.0-120.0; 1
+Compaq; Compaq S700 Color Monitor; cpq1349; 30.0-70.0; 50.0-160.0; 1
+Compaq; Compaq S710 Color Monitor; cpq1362; 30.0-70.0; 50.0-160.0; 1
+Compaq; Compaq S900 Color Monitor; cpq1350; 30.0-95.0; 50.0-160.0; 1
+Compaq; Compaq S910 Color Monitor; cpq1361; 30.0-95.0; 50.0-160.0; 1
+Compaq; Compaq SVGA; svga; 35.2-38.0; 56.0-60.0; 1
+Compaq; Compaq TFT450 Flat Panel Monitor; cpq1333; 31.5-60.0; 56.3-85.0; 1
+Compaq; Compaq TFT500 Flat Panel Monitor; cpq1324; 32.0-60.0; 57.0-85.0; 1
+Compaq; Compaq TFT5000 Flat Panel Monitor; cpq1341; 32.0-60.0; 57.0-85.0; 1
+Compaq; Compaq TFT5005 Flat Panel Monitor; cpq1383; 24.0-61.0; 56.0-75.0; 1
+Compaq; Compaq TFT5010 Flat Panel Monitor; cpq1370; 31.5-60.0; 58.0-78.75; 1
+Compaq; Compaq TFT5030 Flat Panel Monitor; cpq1391; 31.47-60.0; 58.0-75.0; 1
+Compaq; Compaq TFT8000 Flat Panel Monitor; cpq1329; 31.0-80.0; 58.0-85.0; 1
+Compaq; Compaq TFT8020 Flat Panel Monitor; cpq1345; 31.5-80.0; 58.0-85.0; 1
+Compaq; Compaq TFT8030 Flat Panel Monitor; cpq1395; 32.0-91.0; 58.0-85.0; 1
+Compaq; Compaq V1000 Color Monitor; cpq1347; 30.0-107.0; 48.0-160.0; 1
+Compaq; Compaq V1100 Color Monitor; cpq1336; 30.0-107.0; 48.0-160.0; 1
+Compaq; Compaq V40 Color Monitor; cpq1334; 31.0-48.0; 50.0-100.0; 1
+Compaq; Compaq V45 Color Monitor; cpq1338; 31-48; 50-100; 1
+Compaq; Compaq V50 Color Monitor; cpq1322; 30.0-60.0; 50-125.0; 1
+Compaq; Compaq V55 Color Monitor; cpq1331; 30.0-60.0; 47.5-125.0; 1
+Compaq; Compaq V70 Color Monitor; cpq170a; 30.0-69.0; 50-125.0; 1
+Compaq; Compaq V700 Color Monitor; cpq1340; 30.0-85.0; 50.0-160.0; 1
+Compaq; Compaq V710 Color Monitor; cpq1382; 30.0-85.0; 50.0-160.0; 1
+Compaq; Compaq V75 Color Monitor; cpq1332; 31.5-69.0; 50.0-100.0; 1
+Compaq; Compaq V900 Color Monitor; cpq1325; 30.0-96.0; 48.0-160.0; 1
+Compaq; Compaq VGA; cvga; 31.5; 50.0-70.0; 1
+Compdyne; Compudyne KD-1500N; 0; 30.00-66; 50-90
+Compeq USA/Focus; Compeq CT-1458; ct-1458; 15.0-48.0; 47.0-100.0; 1
+Compeq USA/Focus; Compeq CT-1958; ct-1958; 15.0-51.0; 47.0-100.0; 1
+Conrac; Conrac 7126; 7126; 15.0-32.0; 48.0-75.0; 1
+Conrac; Conrac 7211; 7211; 15.0-37.0; 47.0-80.0; 1
+Conrac; Conrac 7214; 7214; 15.0-37.5; 48.0-90.0; 1
+Conrac; Conrac 7241; 7241; 15.0-37.0; 47.0-80.0; 1
+Conrac; Conrac 7250; 7250; 15.5-37.0; 47.0-80.0; 1
+Conrac; Conrac 7351; 7351; 62.5-67.5; 47.0-63.0; 1
+Conrac; Conrac 7550; 7550; 46.0-80.0; 47.0-80.0; 1
+Conrac; Conrac 9250; 9250; 15.0-37.5; 48.0-90.0; 1
+Cordata; Cordata CMC-141M; cmc-141m; 15.5-39.0; 50.0-70.0; 1
+Cordata; Cordata CMC-1500BF; cmc-1500bf; 15.5-39.0; 50.0-90.0; 1
+Cordata; Cordata CMC-1500M; cmc-1500m; 30.0-65.0; 50.0-90.0; 1
+Cordata; Cordata CMC-1500TF; cmc-1500tf; 35.0-38.5; 50.0-90.0; 1
+Cordata; Cordata CMC-1700M; cmc-1700m; 30.0-65.0; 50.0-90.0; 1
+Cordata; Cordata CMC-2100H; cmc-2100h; 60.0-65.0; 50.0-85.0; 1
+Cordata; Cordata CMC-2100M; cmc-2100m; 30.0-65.0; 50.0-90.0; 1
+Cornerstone; Cornerstone c1001; crn000e; 31.0-95.0; 50.0-160.0; 1
+Cornerstone; Cornerstone c700; crn000a; 31.0-95.0; 50.0-130.0; 1
+Cornerstone; Cornerstone c900; 0; 30.0-95.0; 50.0-180.0
+Cornerstone; Cornerstone Color 20/70; 0; 60.0-87.0; 60.0-120.0
+Cornerstone; Cornerstone Color 20/77; 0; 31.0-96.0; 50.0-160.0
+Cornerstone; Cornerstone Color 21/75; 0; 30.0-94.0; 50.0-150.0
+Cornerstone; Cornerstone Color 40/95; 0; 30.0-95.0; 50.0-180.0
+Cornerstone; Cornerstone Color 45/101sf; 0; 31.0-100.7; 50.0-160.0
+Cornerstone; Cornerstone Color 50/101sf, 21/81; 0; 31.0-100.7; 50.0-160.0
+Cornerstone; Cornerstone Color 50/115sf; crn0007; 31-115; 50-160; 1
+Cornerstone; Cornerstone p1400; crn000d; 31.0-107.0; 50.0-160.0; 1
+Cornerstone; Cornerstone p1401; crn0016; 31.0-110.0; 50.0-180.0; 1
+Cornerstone; Cornerstone p1500; crn000f; 31.0-107.0; 50.0-160.0; 1
+Cornerstone; Cornerstone p1600; crn0010; 31.0-117.0; 50.0-160.0; 1
+Cornerstone; Cornerstone p1700; crn0012; 31.0-130.0; 50.0-160.0; 1
+Cornerstone; Cornerstone v300; crn0013; 31.0-93.0; 50.0-160.0; 1
+CTL; CTL 910TF; dwe90a5; 30.0-95.0; 50-160; 1
+CTX; CTX 1451; ctx1451; 30.0-50.0; 45.0-90.0; 1
+CTX; CTX 1451ES; ctx-1451es; 30-50; 50-90; 1
+CTX; CTX 1451GM; ctx-1451gm; 30-50; 50-90; 1
+CTX; CTX 1462GM; ctx-1462; 30.0-62.0; 50.0-90.0; 1
+CTX; CTX 15-Group 65KHz/100Hz Monitor; ctx3500; 30.0-65.0; 50.0-100.0; 1
+CTX; CTX 1551; ctx1551; 30.0-50.0; 45.0-90.0; 1
+CTX; CTX 1561; ctx1561; 30.0-60.0; 50.0-90.0; 1
+CTX; CTX 1562; ctx1562; 30.0-62.0; 45.0-90.0; 1
+CTX; CTX 1562ES; ctx-1562es; 30-62; 50-90; 1
+CTX; CTX 1562GM; ctx-1562gm; 30-62; 50-90; 1
+CTX; CTX 1565; ctx1565; 30.0-65.0; 45.0-90.0; 1
+CTX; CTX 1565; ctx5650; 30.0-65.0; 50.0-100.0; 1
+CTX; CTX 1565GM; ctx-1565gm; 30.0-65.0; 50.0-90.0; 1
+CTX; CTX 1569; ctx0150; 30.0-70.0; 50.0-130.0; 1
+CTX; CTX 1765; ctx1765; 30.0-65.0; 45.0-110.0; 1
+CTX; CTX 1765GM; ctx-1765gm; 30.0-65.0; 50.0-100.0; 1
+CTX; CTX 1769UA; 0; 30.0-70.0; 50.0-160.0
+CTX; CTX 1785; ctx1785; 30.0-85.0; 45.0-110.0; 1
+CTX; CTX 1785GM; ctx-1785gm; 30.0-85.0; 50.0-100.0; 1
+CTX; CTX 1792UA; 0; 30.0-95.0; 50.0-160.0
+CTX; CTX 1792UD; 0; 30.0-95.0; 50.0-160.0
+CTX; CTX 19D-Group 107KHz/160Hz Monitor; ctx5100; 30.0-107.0; 50.0-160.0; 1
+CTX; CTX 2085; ctx2085; 30.0-85.0; 45.0-110.0; 1
+CTX; CTX 2185; ctx2185; 30.0-85.0; 45.0-110.0; 1
+CTX; CTX 5090; ctx5090; 30.0-107.0; 50.0-160.0; 1
+CTX; CTX 960D Class Monitor; ctx5102; 30.0-107.0; 50.0-160.0; 1
+CTX; CTX 960T Class Monitor; ctx5092; 30.0-107.0; 50.0-160.0; 1
+CTX; CTX CPS-1460; cps-1460; 30.0-60.0; 50.0-90.0; 1
+CTX; CTX CPS-1560; cps-1560; 30.0-60.0; 50.0-90.0; 1
+CTX; CTX CPS-1561; cps-1561; 30.0-60.0; 50.0-90.0; 1
+CTX; CTX CPS-1750; cps-1750; 30.0-60.0; 50.0-90.0; 1
+CTX; CTX CPS-1760; cps-1760; 30.0-65.0; 50.0-90.0; 1
+CTX; CTX CPS-2160; cps-2160; 30.0-65.0; 50.0-100.0; 1
+CTX; CTX CPS-2180; cps-2180; 30.0-80.0; 50.0-100.0; 1
+CTX; CTX CVP-5439; cvp-5439; 30.0-35.0; 50.0-90.0; 1
+CTX; CTX CVP-5468; cvp-5468; 30.0-38.0; 50.0-90.0; 1
+CTX; CTX CVP-5468NI; cvp-5468ni; 44.0-50.0; 50.0-90.0; 1
+CTX; CTX CVP-5468NL; cvp-5468nl; 30.0-38.0; 50.0-90.0; 1
+CTX; CTX CVS-3436; cvp-3436; 15.0-38.0; 50.0-90.0; 1
+CTX; CTX CVS-3450; cvp-3450; 20.0-38.0; 50.0-90.0; 1
+CTX; CTX EX1200 series; ctx3800; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX EX1200 series; ctx3810; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX EX1300; ctx3900; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX EX1300; ctx3902; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX EX1300 series; ctx3911; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX EX700; ctx3670; 30.0-85.0; 50.0-120.0; 1
+CTX; CTX EX800; ctx3720; 30.0-85.0; 50.0-120.0; 1
+CTX; CTX EX900; ctx3750; 30.0-85.0; 50.0-120.0; 1
+CTX; CTX EX960 series; ctx3780; 30.0-107.0; 50.0-160.0; 1
+CTX; CTX EX960 series; ctx3781; 30.0-107.0; 50.0-160.0; 1
+CTX; CTX MS600; ctx3600; 30.0-60.0; 50.0-120.0; 1
+CTX; CTX Multiscan 3436; multiscan-3436; 15.0-38.0; 50.0-90.0; 1
+CTX; CTX PR1200 series; ctx3830; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR1200 series; ctx3831; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR1250 series; ctx3835; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR1250 series; ctx3836; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR1300 series; ctx3904; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX PR1300 series; ctx3905; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX PR1350 series; ctx3907; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX PR1350 series; ctx3908; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX PR1400 series; ctx3915; 30.0-115.0; 50.0-160.0; 1
+CTX; CTX PR1400 series; ctx3916; 30.0-115.0; 50.0-160.0; 1
+CTX; CTX PR1400F; ctx3920; 30.0-125.0; 50.0-160.0; 1
+CTX; CTX PR1450 series; ctx3918; 30.0-115.0; 50.0-160.0; 1
+CTX; CTX PR1450 series; ctx3919; 30.0-115.0; 50.0-160.0; 1
+CTX; CTX PR500 series; ctx3524; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX PR500 series; ctx3525; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX PR500 series; ctx5694; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX PR700 series; ctx5010; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX PR700 series; ctx7691; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX PR705F series; ctx5310; 30.0-85.0; 50.0-160.0; 1
+CTX; CTX PR710 series; ctx5020; 30.0-92.0; 50.0-160.0; 1
+CTX; CTX PR710 series; ctx5021; 30.0-92.0; 50.0-160.0; 1
+CTX; CTX PR710, PR711 series; ctx5050; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR710, PR711 series; ctx5053; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR710, PR711 series; ctx7920; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR711F series; ctx5320; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR715 series; ctx5030; 30.0-92.0; 50.0-160.0; 1
+CTX; CTX PR715 series; ctx5031; 30.0-92.0; 50.0-160.0; 1
+CTX; CTX PR715 series; ctx5060; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR715 series; ctx5063; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR715 series; ctx5066; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR950 series; ctx5070; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR950 series; ctx5072; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR955 series; ctx5080; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR955 series; ctx5082; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX PR960F series; ctx5420; 30.0-110.0; 50.0-160.0; 1
+CTX; CTX TopView 150; ctxa001; 30.0-65.0; 60.0-120.0; 1
+CTX; CTX TopView 150-A; ctxa002; 30.0-60.0; 60.0-75.0; 1
+CTX; CTX VL400, PL4; ctx3400; 30.0-50.0; 50.0-90.0; 1
+CTX; CTX VL400, PL4; ctx3410; 30.0-50.0; 50.0-90.0; 1
+CTX; CTX VL400, PL4; ctx4516; 30.0-50.0; 50.0-90.0; 1
+CTX; CTX VL410; ctx3450; 30.0-54.0; 50.0-110.0; 1
+CTX; CTX VL410; ctx3451; 30.0-54.0; 50.0-110.0; 1
+CTX; CTX VL410; ctx3455; 30.0-55.0; 50.0-110.0; 1
+CTX; CTX VL410; ctx3456; 30.0-55.0; 50.0-110.0; 1
+CTX; CTX VL500 series, MS500 series (100 Hz); ctx3550; 30.0-70.0; 50.0-100.0; 1
+CTX; CTX VL500 series, MS500 series (100 Hz); ctx3560; 30.0-70.0; 50.0-100.0; 1
+CTX; CTX VL500 series, MS500 series (100 Hz); ctx5002; 30.0-70.0; 50.0-100.0; 1
+CTX; CTX VL500 series, MS500 series (100 Hz); ctx5690; 30.0-70.0; 50.0-100.0; 1
+CTX; CTX VL500 series, MS500 series (120 Hz; ctx3575; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL500 series, MS500 series (120 Hz; ctx3576; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL500 series, MS500 series (120 Hz; ctx5696; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL500 series, MS500 series (120 Hz); ctx0150; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL500 series, MS500 series (120 Hz); ctx5695; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL500 series, MS500 series (120 Hz); ctx5699; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL500 series, MS500 series (130 Hz); ctx3571; 30.0-70.0; 50.0-130.0; 1
+CTX; CTX VL500 series, MS500 series (130 Hz); ctx3572; 30.0-70.0; 50.0-130.0; 1
+CTX; CTX VL500 series, MS500 series (160 Hz); ctx3520; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX VL500 series, MS500 series (160 Hz); ctx3521; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX VL500 series, MS500 series (160 Hz); ctx5696; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX VL510 series, PL5 series; ctx3580; 30.0-55.0; 50.0-110.0; 1
+CTX; CTX VL510 series, PL5 series; ctx3590; 30.0-55.0; 50.0-110.0; 1
+CTX; CTX VL510 series, PL5 series; ctx5655; 30.0-55.0; 50.0-110.0; 1
+CTX; CTX VL700; ctx3615; 30.0-65.0; 50.0-120.0; 1
+CTX; CTX VL700 (Win); ctx3621; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL700 series, MS700 series, PL7 series (120 Hz); ctx3620; 30.0-70.0; 50.0-120.0; 1
+CTX; CTX VL700 series, MS700 series, PL7 series (130 Hz); ctx3650; 30.0-70.0; 50.0-130.0; 1
+CTX; CTX VL700 series, MS700 series, PL7 series (130 Hz); ctx3651; 30.0-70.0; 50.0-130.0; 1
+CTX; CTX VL700 series, MS700 series, PL7 series (160 Hz); ctx3655; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX VL700 series, MS700 series, PL7 series (160 Hz); ctx3656; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX VL700 series, MS700 series, PL7 series (160 Hz); ctx7694; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX VL700 series, MS700 series, PL7 series (160 Hz); ctx7695; 30.0-70.0; 50.0-160.0; 1
+CTX; CTX VL705; ctx3675; 30.0-85.0; 50.0-160.0; 1
+CTX; CTX VL710 series; ctx3680; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX VL710 series; ctx3683; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX VL710 series; ctx3685; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX VL710 series; ctx7854; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX VL710 series; ctx7855; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX VL710 series; ctx7927; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX VL710 series, EX710 series; ctx3660; 30.0-92.0; 50.0-160.0; 1
+CTX; CTX VL710 series, EX710 series; ctx3661; 30.0-92.0; 50.0-160.0; 1
+CTX; CTX VL950 series, EX950 series, PL9 series; ctx3700; 30.0-95.0; 50.0-160.0; 1
+CTX; CTX VL950 series, EX950 series, PL9 series; ctx3710; 30.0-95.0; 50.0-160.0; 1
+Cybervision; Cybervision C112; CYB3131; 30-95; 50-150; 1
+Cybervision; Cybervision C40; CYB5031; 30-50; 50-90; 1
+Cybervision; Cybervision C50; CYB5331; 30-50; 50-90; 1
+Cybervision; Cybervision C50-2; CYB5434; 30-54; 50-100; 1
+Cybervision; Cybervision C52; CYB5332; 30-70; 50-90; 1
+Cybervision; Cybervision C52-2; CYB5334; 30-70; 50-120; 1
+Cybervision; Cybervision C70; CYB5631; 30-70; 50-90; 1
+Cybervision; Cybervision C70-2; CYB5635; 30-70; 50-120; 1
+Cybervision; Cybervision C72; CYB5632; 30-70; 50-120; 1
+Cybervision; Cybervision C72-2; CYB5637; 30-70; 50-120; 1
+Cybervision; Cybervision C92; CYB5931; 30-85; 50-150; 1
+Cybervision; Cybervision CP21; CYB5032; 30-50; 50-75; 1
+Cybervision; Cybervision CP45; CYB5333; 30-62; 50-75; 1
+Daewoo; Daewin LCD17/HGM; hglec20; 31.5-80.0; 58.0-75.0; 1
+Daewoo; Daewoo 1509B; dwe5093; 30.0-69.0; 50.0-120.0; 1
+Daewoo; Daewoo 1705B; dwe7053; 30.0-69.0; 50.0-120.0; 1
+Daewoo; Daewoo 431X; dwe4312; 30.0-54.0; 50.0-120.0; 1
+Daewoo; Daewoo 511B; dwe5113; 30.0-69.0; 50.0-120.0; 1
+Daewoo; Daewoo 512B; dwe5123; 30.0-69.0; 50.0-120.0; 1
+Daewoo; Daewoo 518B; dwe5183; 30.0-69.0; 50.0-120.0; 1
+Daewoo; Daewoo 518X; dwe5182; 30.0-54.0; 50.0-120.0; 1
+Daewoo; Daewoo 519B; dwe5193; 30.0-69.0; 50.0-120.0; 1
+Daewoo; Daewoo 707B; dwe7073; 30.0-69.0; 50.0-120.0; 1
+Daewoo; Daewoo 710B; dwe7103; 30.0-69.0; 50.0-160.0; 1
+Daewoo; Daewoo 710C; dwe7104; 30.0-86.0; 50.0-160.0; 1
+Daewoo; Daewoo 901D; dwe9015; 30.0-95.0; 50.0-160.0; 1
+Daewoo; Daewoo CMC-1423B1; dwe1423; 30.0-64.0; 50.0-120.0; 1
+Daewoo; Daewoo CMC-1427X1; dwe1427; 30.0-48.0; 50.0-75.0; 1
+Daewoo; Daewoo CMC-1502B1; dwe1502; 30.0-64.0; 50.0-120.0; 1
+Daewoo; Daewoo CMC-1505X; dwe1505; 30.0-50.0; 50.0-100.0; 1
+Daewoo; Daewoo CMC-1507X1; dwe1507; 30.0-48.0; 50.0-75.0; 1
+Daewoo; Daewoo CMC-1703B; dwe1703; 30.0-64.0; 50.0-120.0; 1
+Daewoo; Daewoo CMC-1704C; dwe7044; 24.0-86.0; 50.0-150.0; 1
+Darius; Darius TSM-1431; tsm-1431; 15.5-39.0; 50.0-90.0; 1
+Daytek; Daewoo DT-1414AV; dwe4142; 30.0-48.0; 50.0-90.0; 0
+Daytek; Daewoo DT-1414BA; dwe4143; 30.0-58.0; 50.0-90.0; 0
+Daytek; Daewoo DT-1418S; dwe418b; 30.0-35.5; 50.0-70.0; 0
+Daytek; Daewoo DT-1420AV; dwe4202; 30.0-48.0; 50.0-90.0; 0
+Daytek; Daewoo DT-1420BA; dwe4203; 30.0-58.0; 50.0-90.0; 0
+Daytek; Daewoo DT-1501BA/MPR; dwe5013; 30.0-58.0; 50.0-90.0; 0
+Daytek; Daewoo DT-1501BA1/MPR; dwe501a; 30.0-64.0; 50.0-90.0; 1
+Daytek; Daewoo DT-1503B/MPR; dwe503a; 30.0-64.0; 50.0-120.0; 1
+Daytek; Daewoo DT-1701M2/MPR; dwe701b; 30.0-82.0; 50.0-90.0; 1
+Daytek; Daewoo DT-1704C/MPR; dwe7044; 24.0-86.0; 50.0-150.0; 1
+Daytek; Daewoo DT-2000M/MPR; dwe0000; 30.0-78.0; 50.0-90.0; 1
+Daytek; Daewoo DT-2102M/MPR; dwe102a; 30.0-78.0; 50.0-90.0; 0
+Daytek; Daytek 755DF; oec7704; 30.0-70.0; 50.0-150.0; 1
+Daytek; Daytek DT-1531D; oec020f; 30.0-70.0; 50.0-120.0; 1
+Daytek; Daytek DT-1536D; oec0504; 30.0-54.0; 50.0-120.0; 1
+Daytek; Daytek DT-1569D; oec020f; 30.0-70.0; 50.0-120.0; 1
+Daytek; Daytek DT-1728D; oec0707; 30.0-70.0; 50.0-120.0; 1
+Daytek; Daytek DT-1731D; oec0211; 30.0-70.0; 50.0-120.0; 1
+Daytek; Daytek DT-1770; oec0706; 30.0-70.0; 50.0-150.0; 1
+Daytek; Daytek DT-1995D; oec19db; 31.0-96.0; 50.0-155.0; 1
+Daytek; Daytek TM-1554D; oec0504; 30.0-54.0; 50.0-120.0; 1
+Daytek; Daytek TM-1569D; oec020f; 30.0-70.0; 50.0-120.0; 1
+Daytek; Daytek TM-1769D; oec0211; 30.0-70.0; 50.0-120.0; 1
+Daytek; Daytek TM-1770D; oec0707; 30.0-70.0; 50.0-120.0; 1
+Daytek; Vista v19; STC032b; 30.0-95.0; 50.0-160.0
+Dell; Dell 1024i; 0; 35.5; 87.0; 1
+Dell; Dell 1024i-P/1024i-Color; 0; 35.5; 87.0; 1
+Dell; Dell 1024x768 Laptop Display Panel; QDS005; 31.5-48.5; 59.0-75.0; 1
+Dell; Dell 1280x1024 Laptop Display Panel; 0; 31.5-90.0; 59.0-75.0; 1
+Dell; Dell 1280x800 Laptop Display Panel (16/10); 0; 30.0-107.0; 50.0-185.0; 1
+Dell; Dell 1400FP; del8162; 31.0-60.0; 55.0-86.0; 1
+Dell; Dell 1400x1050 Laptop Display Panel; SEC3450; 31.5-90.0; 59.0-75.0; 1
+Dell; Dell 1401FP; delc0ec; 31.0-80.0; 56.0-76.0; 1
+Dell; Dell 1500FP; del715d; 30.0-61.0; 56.0-75.0; 1
+Dell; Dell 1501FP (Analog); del73a4; 30.0-61.0; 56.0-75.0; 1
+Dell; Dell 1501FP (Digital); del7140; 30.0-61.0; 56.0-75.0; 1
+Dell; Dell 1503FP (Analog); del3004; 30.0-60.0; 60.0-75.0; 1
+Dell; Dell 1503FP (Digital); del3003; 30.0-60.0; 60.0-75.0; 1
+Dell; Dell 1504FP (Analog); DEL300C; 30.0-60.0; 56.0-75.0; 1
+Dell; Dell 1504FP (Digital); DEL300D; 30.0-60.0; 56.0-75.0; 1
+Dell; Dell 1505FP (Analog); DEL4006; 30.0-61.0; 56.0-76.0; 1
+Dell; Dell 1505FP (Digital); DEL4007; 30.0-61.0; 56.0-76.0; 1
+Dell; Dell 1569; del1569; 30.0-69.0; 50.0-110.0; 1
+Dell; Dell 1569; del6915; 30.0-69.0; 50.0-110.0; 1
+Dell; Dell 1600x1200 Laptop Display Panel; 0; 31.5-90.0; 59.0-85.0; 1
+Dell; Dell 1680x1050 Laptop Display Panel (16/10); 0; 30.0-107.0; 50.0-185.0; 1
+Dell; Dell 1700FP; del3092; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1701FP (Analog); del3002; 31.0-80.0; 56.0-76.0; 1
+Dell; Dell 1701FP (Digital); del3001; 31.0-80.0; 56.0-76.0; 1
+Dell; Dell 1702FP (Analog); DEL3007; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1702FP (Digital); DEL3006; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1703FP (Analog); DEL3010; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1703FP (Digital); DEL3011; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1704FPT (Analog); DEL4004; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1704FPT (Digital); DEL4005; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1704FPV (Analog); DEL3015; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1704FPV (Digital); DEL3016; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1706FPV (Analog); DEL3017; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1706FPV (Digital); DEL3018; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1707FP (Analog); DEL4012; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1707FP (Digital); DEL4013; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1707FPV(Analog); DEL4021; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1707FPV(Digital); DEL4022; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1708FP(Analog); DEL4023; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1708FP(Digital); DEL4024; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1708FP-BLK(Analog); DEL4045; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1708FP-BLK(Digital); DEL4046; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1726T-HS/D1025HT; del5319; 31.0-85.0; 50.0-100.0; 1
+Dell; Dell 1800FP (Analog); DELE000; 30.0-80.0; 56.0-85.0; 1
+Dell; Dell 1800FP (Analog); DELE002; 30.0-80.0; 56.0-75.0; 1
+Dell; Dell 1800FP (Digital); DELE001; 30.0-70.0; 56.0-85.0; 1
+Dell; Dell 1800FP (Digital); DELE003; 30.0-70.0; 56.0-75.0; 1
+Dell; Dell 1801FP (Analog); DELE004; 30.0-80.0; 56.0-75.0; 1
+Dell; Dell 1801FP (Digital); DELE005; 30.0-80.0; 56.0-75.0; 1
+Dell; Dell 1900FP (Analog); DEL300B; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1900FP (Digital); DEL3009; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1901FP (Analog); DEL4000; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1901FP (Digital); DEL4001; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell 1905FP (Analog); DEL400C; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1905FP (Digital); DEL400D; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1906FP (Analog); DEL400E; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1906FP (Digital); DEL400F; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1907FP (Analog); DEL4014; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1907FP (Digital); DEL4015; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1907FPV(Analog); DEL4019; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1907FPV(Digital); DEL4020; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1908FP(Analog); DEL4025; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1908FP(Digital); DEL4026; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1908FP-BLK(Analog); DEL4047; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1908FP-BLK(Digital); DEL4048; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 1908WFP(Analog); DELF007; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 1908WFP(Digital); DELF008; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 1909W(Analog); DELA03C; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 1909W(Digital); DELA03D; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 1920x1200 Laptop Display Panel (16/10); 0; 30.0-107.0; 50.0-185.0; 1
+Dell; Dell 2000FP (Analog); DELA002; 31.5-80.0; 56.0-76.0; 1
+Dell; Dell 2000FP (Digital); DELA003; 31.5-80.0; 56.0-76.0; 1
+Dell; Dell 2001FP (Analog); DELA007; 31.0-80.0; 56.0-76.0; 1600x1200
+Dell; Dell 2001FP (Digital); DELA008; 31.0-80.0; 56.0-76.0; 1
+Dell; Dell 2005FPW (Analog); DELE008; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 2005FPW (Digital); DELE009; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 2007FP (Analog); DELA020; 30.0-83.0; 56.0-76.0; 1600x1200
+Dell; Dell 2007FP (Digital); DELA021; 30.0-83.0; 56.0-76.0; 1600x1200
+Dell; Dell 2007WFP (Analog); DELA018; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell 2007WFP (Digital); DELA019; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell 2009W(Analog); DEL4041; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 2009W(Digital); DEL4042; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 2208WFP(Analog); DEL403B; 31.0-83.0; 56.0-75.0; 1
+Dell; Dell 2208WFP(Digital); DEL403C; 31.0-83.0; 56.0-75.0; 1
+Dell; Dell 2209WA(Analog); DELF010; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 2209WA(Digital); DELF011; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell 2405FPW (Analog); DELA00F; 30.0-83.0; 56.0-76.0; 1920x1200
+Dell; Dell 2405FPW (Digital); DELA010; 30.0-83.0; 56.0-76.0; 1920x1200
+Dell; Dell 2407WFP (Analog); DELA016; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell 2407WFP (Digital); DELA017; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell 2407WFP-HC (Analog); DELA025; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell 2407WFP-HC (Digital); DELA026; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell 2408WFP(Analog); DELA029; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell 2408WFP(Digital); DELA02A; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell 2707WFP; DELD013; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell 2709W(Analog); DELA02F; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell 2709W(Digital); DELA030; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell 2709W(HDMI); DELA032; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell 3007WFP; DEL4016; 30.0-100.0; 56.0-76.0; 1
+Dell; Dell 3008WFP(Analog); DEL4034; 29.0-94.0; 49.0-86.0; 1
+Dell; Dell 3008WFP(Digital); DEL4035; 29.0-113.0; 49.0-86.0; 1
+Dell; Dell 3008WFP(DP); DEL4036; 29.0-113.0; 49.0-86.0; 1
+Dell; Dell 3008WFP(HDMI); DEL4037; 29.0-94.0; 49.0-86.0; 1
+Dell; Dell 800M; del5697; 30.0-70.0; 50.0-130.0; 1
+Dell; Dell 828FI; del3319; 30.0-70.0; 50.0-120.0; 1
+Dell; Dell C22W(HDMI); DEL4040; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell D1025HE; del6124; 31.5-92.0; 50.0-150.0; 1
+Dell; Dell D1025HTX; del5062; 31.0-70.0; 50.0-120.0; 1
+Dell; Dell D1025TM; del5155; 31.0-85.0; 50.0-160.0; 1
+Dell; Dell D1028L; del730b; 31.0-70.0; 50.0-120.0; 1
+Dell; Dell D1226H; del7077; 30.0-95.0; 50.0-160.0; 1
+Dell; Dell D1428L; del3276; 31.0-48.0; 43.0-75.0; 1
+Dell; Dell D1626HT; del515b; 31.0-107.0; 50.0-160.0; 1
+Dell; Dell D2026T; del5314; 31.0-96.0; 50.0-100.0; 1
+Dell; Dell D2128-TCO; del602f; 31.0-102.0; 50.0-150.0; 1
+Dell; Dell D825HR; del62ff; 31.0-70.0; 50.0-120.0; 1
+Dell; Dell D825HT; del5033; 31.0-70.0; 50.0-120.0; 1
+Dell; Dell D825TM; del512c; 30.0-70.0; 50.0-120.0; 1
+Dell; Dell D828L; del32fe; 31.0-54.0; 50.0-120.0; 1
+Dell; Dell E151FP; DELA004; 31.0-60.0; 56.0-75.0; 1
+Dell; Dell E151FPb; DELA005; 30.0-61.0; 56.0-76.0; 1
+Dell; Dell E151FPp; DEL7006; 30.0-61.0; 56.0-76.0; 1
+Dell; Dell E152FP; DELA009; 30.0-63.0; 56.0-76.0; 1
+Dell; Dell E153FP; DELA00C; 30.0-63.0; 56.0-76.0; 1
+Dell; Dell E156FP; DELA013; 30.0-63.0; 56.0-76.0; 1
+Dell; Dell E157FP; DELA022; 30.0-63.0; 56.0-76.0; 1
+Dell; Dell E157FPT; DEL7400; 30.0-63.0; 56.0-76.0; 1
+Dell; Dell E1609W; DELD021; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E170S; DELA04A; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell E1709W; DELD022; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E171FP; DEL300F; 30.0-80.0; 56.0-76.0; 1
+Dell; Dell E171FPb; DELA006; 31.0-80.0; 56.0-76.0
+Dell; Dell E172FP; DELA00A; 31.0-80.0; 56.0-76.0; 1
+Dell; Dell E173FP; DELA00B; 31.0-80.0; 56.0-76.0; 1
+Dell; Dell E176FP; DELA014; 31.0-80.0; 56.0-75.0; 1
+Dell; Dell E177FP; DELA023; 31.0-80.0; 56.0-75.0; 1
+Dell; Dell E178FP; DELA027; 31.0-80.0; 56.0-75.0; 1
+Dell; Dell E178WFP; DELD016; 30.0-83.0; 50.0-77.0; 1
+Dell; Dell E190S; DELA04B; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell E1909W(Analog); DELF00D; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E1909W(Digital); DELF00E; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E193FP; DEL700E; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell E196FP; DELA015; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell E197FP; DELA024; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell E198FP; DELA028; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell E198WFP(Analog); DELF005; 24.0-83.0; 50.0-76.0; 1
+Dell; Dell E198WFP(Digital); DELF006; 24.0-83.0; 50.0-76.0; 1
+Dell; Dell E2009W(Analog); DEL4043; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E2009W(Digital); DEL4044; 30.0-83.0; 56.0-75.0; 1
+Dell; DeLL E207WFP; DELD010; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E207WFP; DELD011; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E2209W; DELD01F; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E228WFP; DELD015; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell E248WFP(Analog); DELA02D; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell E248WFP(Digital); DELA02E; 31.0-83.0; 56.0-76.0; 1
+Dell; Dell E550; dela2f1; 30.0-54.0; 50.0-120.0; 1
+Dell; Dell E550mm; dela355; 30.0-54.0; 50.0-120.0; 1
+Dell; Dell E551a; dela000; 30.0-54.0; 50.0-120.0; 1
+Dell; Dell E551c; deld000; 30.0-54.0; 50.0-120.0; 1
+Dell; Dell E770p; del7340; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E770s; del300a; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E771a; delA001; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E771mm; DEL7003; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E771p; del7002; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E772c; DELD002; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E772p; DEL7005; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E773c; DELD005; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E773mm; DELD009; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E773p; DEL700B; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell E773s; DEL3012; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell Eizo 9080i; 0; 30.0-64.0; 50.0-90.0; 1
+Dell; Dell ES-17; del635e; 31.0-85.0; 50.0-100.0; 1
+Dell; Dell GPD-16C; 0; 20.0-50.0; 50.0-90.0; 1
+Dell; Dell GPD-19C; 0; 30.0-64.0; 50.0-130.0; 1
+Dell; Dell G2210 (Analog); DELD01E; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell G2410 (Analog); DEL404A; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell G2410 (Digital); DEL404B; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell Hewitt; 0; 30.0-48.1; 50.0-72.0; 1
+Dell; Dell IN1910N(Analog); DELA04C; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell IN2010N(Analog); DELA049; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell Laptop Display Panel 1024x768; QDS005; 31.5-48.5; 59.0-75.0; 1
+Dell; Dell Laptop Display Panel 1280x1024; 0; 31.5-90.0; 59.0-75.0; 1
+Dell; Dell Laptop Display Panel 1280x800; 0; 31.5-50.0; 56.0 - 65.0
+Dell; Dell Laptop Display Panel 1400x1050; SEC3450; 31.5-90.0; 59.0-75.0; 1
+Dell; Dell Laptop Display Panel 1440x900; 0; 31.5-56.0; 56.0 - 65.0
+Dell; Dell Laptop Display Panel 1600x1200; 0; 31.5-90.0; 59.0-85.0; 1
+Dell; Dell Laptop Display Panel 1680x1050; 0; 31.5-65.5; 56.0 - 65.0
+Dell; Dell Laptop Display Panel 1920x1080; 0; 31.5-67.0; 56.0 - 65.0
+Dell; Dell Laptop Display Panel 1920x1200; 0; 31.5-74.5; 56.0 - 65.0
+Dell; Dell M1110; del93d5; 30.0-107.0; 50.0-160.0; 1
+Dell; Dell M570; del30cc; 30.0-70.0; 50.0-160.0; 1
+Dell; Dell M770; del71a5; 30.0-69.0; 48.0-160.0; 1024x768
+Dell; Dell M780; del3142; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M781p; del73bd; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M781s; del32b0; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M782; DEL3008; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M782p; DEL7004; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M783c; DELD008; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M783p; DEL700D; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M783s; DEL3013; 30.0-85.0; 50.0-160.0; 1
+Dell; Dell M791; del7001; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell M990; del708a; 30.0-95.0; 50.0-160.0; 1
+Dell; Dell M991; DEL7001; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell M992; DEL300E; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell M993c; DELD006; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell M993s; DEL3014; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell P1110; del50ab; 30.0-121.0; 48.0-160.0; 1
+Dell; Dell P1130; del5000; 30.0-130.0; 48.0-170.0; 1
+Dell; Dell P1230; DEL700C; 30.0-130.0; 50.0-160.0; 1
+Dell; Dell P1690; del5348; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell P780; del510f; 30.0-85.0; 48.0-120.0; 1
+Dell; Dell P790; del62f5; 30.0-92.0; 50.0-150.0; 1
+Dell; Dell P791; del3000; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell P792; DEL5001; 30.0-96.0; 48.0-170.0; 1
+Dell; Dell P793; DEL3005; 30.0-96.0; 50.0-160.0; 1
+Dell; Dell P990; del50dd; 30.0-96.0; 48.0-120.0; 1
+Dell; Dell P991; del5178; 30.0-107.0; 48.0-120.0; 1
+Dell; Dell P992; DEL5002; 30.0-107.0; 48.0-170.0; 1
+Dell; Dell S1709W; DELD018; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell S1909W(Analog); DELA03E; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell S1909W(Digital); DELA03F; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell S1909WN(Analog); DELF00F; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell S1909WX(Analog); DELF00B; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell S1909WX(Digital); DELF00C; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell S199WFP(Analog); DELF009; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell S199WFP(Digital); DELF00A; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell S2009W(Analog); DELA044; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell S2009W(Digital); DELA045; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell S2209W(Analog); DELA042; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell S2209W(Digital); DELA043; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell S2309W(Analog); DELA040; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell S2309W(Digital); DELA041; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell S2409W(Analog); DELA037; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell S2409W(Digital); DELA038; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell S2409W(HDMI); DELA039; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell SE177FP; DELF001; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell SE178WFP; DELD017; 30.0-83.0; 50.0-77.0; 1
+Dell; Dell SE197FP; DELF002; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell SE198WFP; DELF003; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell SP1908FP; DEL4030; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell SP1908FP (DVI); DEL4031; 30.0-81.0; 56.0-76.0; 1
+Dell; Dell SP2008WFP(Analog); DEL4032; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell SP2008WFP(Digital); DEL4033; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell SP2009W; DELD01A; 30.0-83.0; 56.0-75.0; 1
+Dell; Dell SP2208WFP(Analog); DEL4038; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell SP2208WFP(Digital); DEL4039; 30.0-83.0; 56.0-76.0; 1680x1050
+Dell; Dell SP2208WFP(HDMI); DEL403A; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell SP2309W(Analog); DELD01B; 30.0-92.0; 56.0-85.0; 1
+Dell; Dell SP2309W(Digital); DELD01C; 30.0-92.0; 56.0-85.0; 1
+Dell; Dell SP2309W(HDMI); DELD01D; 30.0-92.0; 56.0-85.0; 1
+Dell; Dell ST2010; DELF018; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell ST2010; DELF019; 30.0-83.0; 56.0-76.0; 1
+Dell; Dell SX2210(Analog); DELA046; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell SX2210(Digital); DELA047; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell SX2210(HDMI); DELA048; 30.0-83.0; 50.0-76.0; 1
+Dell; Dell Super VGA; 0; 30.0-38.5; 50.0-90.0; 1
+Dell; Dell Super VGA Colour; 0; 29.0-38.0; 47.0-100.0; 1
+Dell; Dell Super VGA DL 1428 I/L; 0; 35.5; 87.0; 1
+Dell; Dell Super VGA Jostens; 0; 30.0-48.1; 50.0-72.0; 1
+Dell; Dell UGA DL 1460 NI; 0; 30.0-58.2; 50.0-72.2; 1
+Dell; Dell Ultrascan 14C; 0; 30.0-50.0; 50.0-90.0; 1
+Dell; Dell Ultrascan 14C-E; 0; 30.0-60.0; 50.0-100.0; 1
+Dell; Dell Ultrascan 14C-EN; 0; 30.0-60.0; 50.0-100.0; 1
+Dell; Dell Ultrascan 14ES; 0; 31.5-62.0; 50.0-90.0; 1
+Dell; Dell Ultrascan 14LR; 0; 30.0-58.0; 50.0-90.0; 1
+Dell; Dell Ultrascan 14XE; del139a; 30.0-62.0; 50.0-120.0; 1
+Dell; Dell Ultrascan 14XE; del139b; 30.0-62.0; 50.0-120.0; 1
+Dell; Dell Ultrascan 14XE; del139c; 30.0-62.0; 50.0-120.0; 1
+Dell; Dell Ultrascan 14XE; del139d; 30.0-62.0; 50.0-120.0; 1
+Dell; Dell Ultrascan 15ES/15ES-P; 0; 31.5-62.0; 50.0-90.0; 1
+Dell; Dell Ultrascan 15FS-N/15FS-EN; 0; 30.0-60.0; 50.0-100.0; 1
+Dell; Dell Ultrascan 15FS/15FS-E; 0; 30.0-60.0; 50.0-90.0; 1
+Dell; Dell Ultrascan 15LR; 0; 31.5-57.0; 55.0-90.0; 1
+Dell; Dell Ultrascan 15TE; 0; 31.0-64.0; 50.0-120.0; 1
+Dell; Dell Ultrascan 17ES; 0; 30.0-78.0; 50.0-130.0; 1
+Dell; Dell Ultrascan 17FS-ELR; 0; 30.0-64.0; 50.0-100.0; 1
+Dell; Dell Ultrascan 17FS-EN; 0; 30.0-64.0; 50.0-130.0; 1
+Dell; Dell Ultrascan 17FS-LR; 0; 30.0-64.0; 50.0-130.0; 1
+Dell; Dell Ultrascan 17FS-N; 0; 30.0-64.0; 50.0-130.0; 1
+Dell; Dell Ultrascan 21FS; 0; 30.0-78.0; 50.0-130.0; 1
+Dell; Dell Ultrascan 21TE; del2214; 30.0-93.0; 50.0-152.0; 1
+Dell; Dell Ultrascan 21TE; del2215; 30.0-93.0; 50.0-152.0; 1
+Dell; Dell Ultrascan 21TE; del2216; 30.0-93.0; 50.0-152.0; 1
+Dell; Dell Ultrascan 21TE; del2217; 30.0-93.0; 50.0-152.0; 1
+Dell; Dell Ultrascan V17X; del2210; 30.0-85.0; 50.0-130.0; 1
+Dell; Dell Ultrascan V17X; del2211; 30.0-85.0; 50.0-130.0; 1
+Dell; Dell Ultrascan V17X; del2212; 30.0-85.0; 50.0-130.0; 1
+Dell; Dell Ultrascan V17X; del2213; 30.0-85.0; 50.0-130.0; 1
+Dell; Dell V15X; del4273; 57.0-64.0; 55.0-90.0; 1
+Dell; Dell V17X; 0; 30.0-64.0; 50.0-100.0; 1
+Dell; Dell VC15 Colour; 0; 31.0-64.0; 50.0-90.0; 1
+Dell; Dell VGA 800; 0; 29.0-38.0; 50.0-87.0; 1
+Dell; Dell VGA Color/Color Plus; 0; 31.5; 60.0; 1
+Dell; Dell VGA Monochrome; 0; 31.5; 60.0; 1
+Dell; Dell Vi14X; 0; 35.5; 87.0; 1
+Dell; Dell VS14/15; 0; 30.0-58.5; 50.0-90.0; 1
+Dell; Dell VS17; 0; 30.0-62.0; 50.0-90.0; 1
+Dell; Dell VS17X; del3024; 30.0-65.0; 50.0-120.0; 1
+Dell; Dell VS17X; del3025; 30.0-65.0; 50.0-120.0; 1
+Dell; Dell VS17X; del3026; 30.0-65.0; 50.0-120.0; 1
+Dell; Dell VS17X; del3027; 30.0-65.0; 50.0-120.0; 1
+Dell; Dell W1700LCDTV (Analog); DEL7007; 31.0-61.0; 56.0-75.0; 1
+Dell; Dell W1700LCDTV (Digital); DEL7008; 31.0-61.0; 56.0-75.0; 1
+Dell; Dell W2300LCDTV (Analog); DEL7009; 30.0-61.0; 56.0-75.0; 1
+Dell; Dell W2300LCDTV (Digital); DEL700A; 30.0-61.0; 56.0-75.0; 1
+Dell; Dell W2600LCDTV (Analog); DEL4002; 31.0-64.0; 56.0-75.0; 1
+Dell; Dell W2600LCDTV (Digital); DEL4003; 31.0-64.0; 56.0-75.0; 1
+Dell; Dell W3000 (Analog); DELE006; 30.0-61.0; 56.0-120.0; 1
+Dell; Dell W3000 (Digital); DELE007; 30.0-61.0; 56.0-120.0; 1
+Delta; Delta DA-1565; dpc1565; 30-65; 50-100; 1
+Delta; Delta DA-570; dpc0570; 30-70; 50-100; 1
+Delta; Delta DA-995; dpc0995; 30.0-95.0; 50.0-180.0; 1
+Delta; Delta DB-1765; dpc1765; 30-65; 50-100; 1
+Delta; Delta DB-770; dpc0770; 30-70; 50-100; 1
+Delta; Delta DC-770; dpc1770; 30.0-70.0; 50.0-120.0; 1
+Delta; Delta DE-570; dpc4570; 30.0-70.0; 50.0-120.0; 1
+Digital Equipment Corp.; Digital 14 in. Color (FR-PCXBV-PF); fr-pcxbv-pf; 30.0-65.0; 50.0-100.0; 1
+Digital Equipment Corp.; Digital 14 in. Color (FR-PCXBV-SA); fr-pcxbv-sa; 30.0-65.0; 50.0-100.0; 1
+Digital Equipment Corp.; Digital 14 in. Color (FR-PCXCV-GE); fr-pcxcv-ge; 31.0-32.0; 59.0-61.0; 1
+Digital Equipment Corp.; Digital 14 in. Color (FR-PCXCV-RA); fr-pcxcv-ra; 31.0-32.0; 59.0-61.0; 1
+Digital Equipment Corp.; Digital 14 in. Color Monitor (FR-PCXCV-C*); dec770c; 30.0-54.0; 50.0-90.0; 1
+Digital Equipment Corp.; Digital 14 in. Monochrome (FR-PC7XV-KA); fr-pc7xv-ka; 31.2-31.7; 57.0-73.0; 1
+Digital Equipment Corp.; Digital 15 in. Color (FR-PCXBV-PC); fr-pcxbv-pc; 30.0-66.0; 50.0-110.0; 1
+Digital Equipment Corp.; Digital 15 in. Color (FR-PCXBV-RA); fr-pcxbv-ra; 30.0-48.0; 55.0-90.0; 1
+Digital Equipment Corp.; Digital 15 in. Color (FR-PCXBV-RD); fr-pcxbv-rd; 30.0-65.0; 55.0-90.0; 1
+Digital Equipment Corp.; Digital 15 in. Color (FR-PCXBV-RL); fr-pcxbv-rl; 30.0-65.0; 50.0-100.0; 1
+Digital Equipment Corp.; Digital 15 in. Color (FR-PCXBV-SC); fr-pcxbv-sc; 30.0-65.0; 50.0-100.0; 1
+Digital Equipment Corp.; Digital 15 in. Color (FR-PCXCV-AC); fr-pcxcv-ac; 31.5; 50.0-90.0; 1
+Digital Equipment Corp.; Digital 15 in. Color Monitor (FR-PCXBV-E*); decba08; 30.0-69.0; 50.0-110.0; 1
+Digital Equipment Corp.; Digital 15 in. Color Monitor (FR-PCXCV-D*); dec970c; 30.0-54.0; 50.0-90.0; 1
+Digital Equipment Corp.; Digital 17 in. Color (FR-PCXAV-EC); fr-pcxav-ec; 29.0-82.0; 50.0-150.0; 1
+Digital Equipment Corp.; Digital 17 in. Color (FR-PCXAV-YZ); dec073a; 30.0-85.0; 48.0-150.0; 1
+Digital Equipment Corp.; Digital 17 in. Color (FR-PCXBV-KA); fr-pcxbv-ka; 30.0-66.0; 50.0-130.0; 1
+Digital Equipment Corp.; Digital 17 in. Color (SN-VRTX7-WA); dece162; 31.5-82; 50-90; 1
+Digital Equipment Corp.; Digital 17 in. Color Monitor (FR-PCXBV-F*); decda08; 30.0-69.0; 50.0-120.0; 1
+Digital Equipment Corp.; Digital 19 in. Color (FR-PCXAV-CY); dec0479; 30.0-95.0; 48.0-160.0; 1
+Digital Equipment Corp.; Digital 19 in. Color (FR-PCXAV-CZ); dec047a; 30.0-95.0; 48.0-160.0; 1
+Digital Equipment Corp.; Digital 19 in. Color (FR-PCXAV-TZ); dec9a06; 30.0-96.0; 50.0-160.0; 1
+Digital Equipment Corp.; Digital 21 in. Color (FR-PCXAV-HA); fr-pcxav-ha; 30.0-85.0; 50.0-152.0; 1
+Digital Equipment Corp.; Digital 21 in. Color (FR-PCXAV-WZ); dec06fa; 30.0-95.0; 50.0-152.0; 1
+Digital Equipment Corp.; Digital 21 in. Color (SN-VRCX1-WA); dec62e1; 30.0-95.0; 50.0-152.0; 1
+Digital Equipment Corp.; Digital 24 in. Color (FR-PCXAV-AZ); dec043a; 30.0-96.0; 50.0-160.0; 1
+Digital Equipment Corp.; Digital FR-PCXAV-VY; dec06d9; 30.0-86.0; 50.0-130.0; 1
+Digital Equipment Corp.; Digital FR-PCXAV-WY; dec06f9; 30.0-95.0; 50.0-152.0; 1
+Digital Equipment Corp.; Digital FR-PCXAV-YY; dec0739; 30.0-85.0; 48.0-150.0; 1
+Digital Equipment Corp.; Digital FR-PCXBV-JZ; dec5a09; 30.0-69.0; 50.0-110.0; 1
+Eizo Nanao; Eizo F520; enc1602; 30.0-96.0; 50.0-160.0; 1
+Eizo Nanao; Eizo F730; enc1604; 30.0-115.0; 50.0-160.0; 1
+Eizo Nanao; Eizo F930; enc1612; 30.0-130.0; 50.0-160.0; 1
+Eizo Nanao; Eizo F980; enc1603; 30.0-137.0; 50.0-160.0; 1
+Eizo Nanao; Eizo L351; enc1616; 30.0-50.0; 59.0-61.0; 1
+Eizo Nanao; Eizo L371; enc1618; 27.0-61.0; 50.0-75.0; 1
+Eizo Nanao; Eizo L371D; enc1617; 27.0-65.0; 59.0-61.0; 1
+Eizo Nanao; Eizo L557; enc1689; 31-64; 59-61; 1280x1024
+Eizo Nanao; Eizo L568; enc1734; 24.0-80.0; 50.0-75.0; 1
+Eizo Nanao; Eizo L568D; enc1733; 31.0-64.0; 59.0-61.0; 1
+Eizo Nanao; Eizo L771; enc1622; 27.0-81.0; 50.0-75.0; 1
+Eizo Nanao; Eizo T550; enc1600; 30.0-82.0; 50.0-160.0; 1
+Eizo Nanao; Eizo T561; enc1615; 30.0-96.0; 50.0-160.0; 1
+Eizo Nanao; Eizo T760; enc1605; 30.0-96.0; 50.0-160.0; 1
+Eizo Nanao; Eizo T761; enc1613; 30.0-115.0; 50.0-160.0; 1
+Eizo Nanao; Eizo T961; enc1610; 30.0-115.0; 50.0-160.0; 1
+Eizo Nanao; Eizo T962; enc1614; 30.0-130.0; 50.0-160.0; 1
+Eizo; Eizo 9060S; eiz0302; 15.5-38.5; 50.0-90.0; 1
+Eizo; Eizo 9065S; eiz0303; 30.0-50.0; 50.0-90.0; 1
+Eizo; Eizo 9070S; eiz0306; 20.0-50.0; 50.0-90.0; 1
+Eizo; Eizo 9080i; eiz0307; 30.0-64.0; 55.0-90.0; 1
+Eizo; Eizo 9400i; eiz0308; 30.0-65.0; 55.0-90.0; 1
+Eizo; Eizo 9500; eiz0309; 30.0-78.0; 55.0-90.0; 1
+Eizo; Eizo F35; eiz1000; 27.0-70.0; 50.0-120.0; 1
+Eizo; Eizo F55; eiz1008; 27.0-70.0; 50.0-120.0; 1
+Eizo; Eizo F55S; eiz1015; 30.0-82.0; 50.0-120.0; 1
+Eizo; Eizo F56; eiz1004; 27.0-86.0; 50.0-160.0; 1
+Eizo; Eizo F57; eiz1020; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo F67; eiz1013; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo F77; eiz1006; 30.0-95.0; 50.0-160.0; 1
+Eizo; Eizo F77S; eiz1018; 30.0-110.0; 50.0-160.0; 1
+Eizo; Eizo F78; eiz1007; 31.5-110.0; 50.0-160.0; 1
+Eizo; Eizo FlexScan 6500; eiz0300; 56.0-80.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan 6600; eiz0206; 56.0-110.0; 70.0-90.0; 1
+Eizo; Eizo FlexScan E151L; nan1212; 24.0-61.0; 50.0-85.0; 1
+Eizo; Eizo FlexScan E54F; nan1220; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo FlexScan E76F; nan1218; 30.0-110.0; 50.0-160.0; 1
+Eizo; Eizo FlexScan F340iW; eiz030a; 27.0-61.5; 55.0-90.0; 1
+Eizo; Eizo FlexScan F351; eiz0200; 24.5-69.0; 55.0-120.0; 1
+Eizo; Eizo FlexScan F550iW; eiz038c; 30.0-65.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan F552; eiz030c; 24.5-69.0; 55.0-120.0; 1
+Eizo; Eizo FlexScan F553; eiz0201; 24.5-69.0; 55.0-120.0; 1
+Eizo; Eizo FlexScan F560iW; eiz030d; 30.0-82.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan F563; eiz0202; 24.5-86.0; 55.0-160.0; 1
+Eizo; Eizo FlexScan F57; eiz1020; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo FlexScan F750i; eiz030e; 30.0-80.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan F760iW; eiz030f; 30.0-78.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan F764; eiz0203; 30.0-90.0; 55.0-160.0; 1
+Eizo; Eizo FlexScan F77S; eiz1018; 30.0-110.0; 50.0-160.0; 1
+Eizo; Eizo FlexScan F780iW; eiz0310; 45.0-100.0; 55.0-120.0; 1
+Eizo; Eizo FlexScan F784; eiz0204; 31.5-102.0; 55.0-160.0; 1
+Eizo; Eizo FlexScan F931; enc1630 ; 30.0-130.0; 50.0-160.0; 1
+Eizo; Eizo FlexScan L23; eiz1009; 24.0-50.0; 50.0-60.0; 1
+Eizo; Eizo FlexScan L23; eiz1409; 24.0-50.0; 50.0-60.0; 1
+Eizo; Eizo FlexScan L34; eiz1012; 24.0-61.0; 50.0-85.0; 1
+Eizo; Eizo FlexScan L34; eiz1412; 24.0-61.0; 50.0-85.0; 1
+Eizo; Eizo FlexScan L360; eiz1021; 27.0-61.0; 55.0-75.0; 1
+Eizo; Eizo FlexScan L360; eiz1421; 27.0-61.0; 55.0-75.0; 1
+Eizo; Eizo FlexScan L66; eiz1019; 27.0-80.0; 50.0-75.0; 1
+Eizo; Eizo FlexScan L66; eiz1419; 27.0-80.0; 50.0-75.0; 1
+Eizo; Eizo FlexScan T560i; eiz0311; 30.0-82.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan T562; eiz0313; 30.0-82.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan T563; eiz0305; 24.5-86.0; 55.0-160.0; 1
+Eizo; Eizo FlexScan T660i; eiz0312; 30.0-78.0; 55.0-90.0; 1
+Eizo; Eizo FlexScan T662; eiz0314; 30.0-85.0; 55.0-160.0; 1
+Eizo; Eizo FX-B5; eiz1400; 27.0-70.0; 50.0-120.0; 1
+Eizo; Eizo FX-C5; eiz1408; 27.0-70.0; 50.0-120.0; 1
+Eizo; Eizo FX-C5S; eiz1415; 30.0-82.0; 50.0-120.0; 1
+Eizo; Eizo FX-C6; eiz1404; 27.0-86.0; 50.0-160.0; 1
+Eizo; Eizo FX-C7; eiz1420; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo FX-D7; eiz1413; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo FX-E7; eiz1406; 30.0-95.0; 50.0-160.0; 1
+Eizo; Eizo FX-E8; eiz1407; 31.5-110.0; 50.0-160.0; 1
+Eizo; Eizo NANAO FlexScan FX-C7; eiz1420; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo Nanao FlexScan FX-E7S; eiz1418; 30.0-110.0; 50.0-160.0; 1
+Eizo; Eizo T57; eiz1005; 27.0-92.0; 50.0-160.0; 1
+Eizo; Eizo T57S; eiz1001; 30.0-92.0; 50.0-160.0; 1
+Eizo; Eizo T67; eiz1002; 30.0-95.0; 50.0-160.0; 1
+Eizo; Eizo T67S; eiz1003; 30.0-95.0; 50.0-160.0; 1
+Eizo; Eizo T68; eiz1014; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo T77; eiz1011; 27.0-70.0; 50.0-120.0; 1
+Eizo; Eizo T960; eiz1022; 30.0-115.0; 50.0-160.0; 1
+Eizo; Eizo T960; eiz1422; 30.0-115.0; 50.0-160.0; 1
+Eizo; Eizo TX-C7; eiz1405; 27.0-92.0; 50.0-160.0; 1
+Eizo; Eizo TX-C7S; eiz1401; 30.0-92.0; 50.0-160.0; 1
+Eizo; Eizo TX-D7; eiz1414; 30.0-96.0; 50.0-160.0; 1
+Eizo; Eizo TX-D7S; eiz1403; 30.0-95.0; 50.0-160.0; 1
+Elitegroup Computer Systems; ECS VERTOS 1401; ecs0001; 30.0-50.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 1501; ecs0002; 24.0-64.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 1502; ecs0003; 24.0-64.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 1503; ecs0004; 24.0-64.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 1700; ecs0005; 24.0-64.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 1701; ecs0006; 24.0-82.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 1702; ecs0007; 24.0-64.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 2101; ecs0008; 24.0-90.0; 50.0-100.0; 1
+Elitegroup Computer Systems; ECS VERTOS 2102; ecs0009; 24.0-90.0; 50.0-100.0; 1
+Elsa AG; Elsa Ecomo Office; els4160; 30.0-86.0; 50.0-130.0; 1
+Elsa AG; Elsa GDM-17E40; 135; 29-82; 50-150
+EMC; EMC 787n Flat Panel; EMC0313; 30-80; 50-160; 1
+EMC; EMC EF-836; 0; 31.5,35.5; 50-90
+EMC; EMC SA-560; 0; 30-64; 50-100; 1
+Epson; Epson CG1428I; epson2; 35.5; 56.0-87.0; 1
+Epson; Epson CG1428N; epson3; 48.0; 56.0-87.0; 1
+Epson; Epson CG1439I; epson1; 35.5; 56.0-87.0; 1
+Epson; Epson CG1528N; epson4; 30-65; 50-120.0; 1
+Epson; Epson CG1728N; epson5; 30-65; 50-120.0; 1
+ESCOM; ESCOM Mono-LCD screen; 28; 30-36; 43-72
+Everex Systems, Inc.; Everex Eversync_SVGA; eversync_svga; 15.5-35.0; 50.0-70.0; 1
+Falco Data Products, Inc.; Falco Data Products, Inc. FMS; fms; 15.0-38.0; 47.0-90.0; 1
+Fora, Inc.; Fora, Inc. MON-7C5; mon-7c5; 15.0-36.0; 45.0-90.0; 1
+Forefront Technology Corp.; Forefront Technology MTS-9608S; mts-9608s; 15.0-38.0; 50.0-90.0; 1
+Fujikama O.A. Distribution; Fujikama PVGA-1024A; pvga-1024a; 31.5-38.5; 50.0-90.0; 1
+Fujitsu; Fujitsu 151E; FUS0170; 30.0-54.0; 50.0-120.0; 1
+Fujitsu; Fujitsu 1554G+; fpa0612; 30-54; 50-120; 1
+Fujitsu; Fujitsu 1568G1; fpa2d30; 30-69; 50-120; 1
+Fujitsu; Fujitsu 1769G; fpa2df9; 30-69; 50-120; 1
+Fujitsu; Fujitsu 38B1; FUS0371; 30.0-61.0; 55.0-75.0; 1
+Fujitsu; Fujitsu e155; fuj3118; 30.0-54.0; 50.0-100.0; 1
+Fujitsu; Fujitsu e175; icl2500; 30.0-85.0; 50.0-120.0; 1
+Fujitsu; Fujitsu e176; icl2a00; 30.0-70.0; 50.0-120.0; 1
+Fujitsu; Fujitsu e213; icl2700; 30.0-107.0; 50.0-150.0; 1
+Fujitsu; Fujitsu ErgoPro 140v; icl-ep140v; 37.9; 58.0-75.0; 1
+Fujitsu; Fujitsu ErgoPro 141p; icl0d00; 47.0-49.0; 50.0-90.0; 1
+Fujitsu; Fujitsu ErgoPro 141v; icl0b00; 37.9; 58.0-75.0; 1
+Fujitsu; Fujitsu ErgoPro 142v; icl1400; 37.9; 58.0-75.0; 1
+Fujitsu; Fujitsu ErgoPro 151p; icl0700; 30.0-64.0; 48.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro 151p AutoBrite; icl0800; 30.0-64.0; 48.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro 151v; icl0a00; 30.0-64.0; 50.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro 152v; icl0f00; 30.0-64.0; 50.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro 171p; icl0200; 30.0-82.0; 50.0-110.0; 1
+Fujitsu; Fujitsu ErgoPro 171v; icl0400; 30.0-64.0; 50.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro 211v; icl0100; 24.0-82.0; 50.0-120.0; 1
+Fujitsu; Fujitsu ErgoPro e153; icl1600; 30.0-66.0; 50.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro e154; icl2200; 30.0-54.0; 50.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro e173; icl1d00; 30.0-65.0; 50.0-120.0; 1
+Fujitsu; Fujitsu ErgoPro e174; icl2300; 30.0-69.0; 50.0-160.0; 1
+Fujitsu; Fujitsu ErgoPro x152; icl1c00; 30.0-65.0; 50.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro x153; icl2100; 30.0-69.0; 50.0-160.0; 1
+Fujitsu; Fujitsu ErgoPro x173; icl1900; 31.0-85.0; 48.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro x173a; icl1a00; 31.0-85.0; 48.0-100.0; 1
+Fujitsu; Fujitsu ErgoPro x174; icl2400; 30.0-92.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP845; fuj5501; 30.0-65.0; 50.0-100.0; 1
+Fujitsu; Fujitsu FMV-DP846; fuj5601; 30.0-70.0; 50.0-100.0; 1
+Fujitsu; Fujitsu FMV-DP846A; fuj5701; 30.0-70.0; 50.0-100.0; 1
+Fujitsu; Fujitsu FMV-DP847; fuj3110; 30.0-70.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP84X1; fujb801; 30.0-70.0; 50.0-100.0; 1
+Fujitsu; Fujitsu FMV-DP84X2; fuj7110; 30.0-70.0; 50.0-100.0; 1
+Fujitsu; Fujitsu FMV-DP84X3(G); fuj7210; 30.0-70.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP84Y4; fujb601; 30.0-65.0; 50.0-100.0; 1
+Fujitsu; Fujitsu FMV-DP84Y5; fujb701; 30.0-65.0; 50.0-100.0; 1
+Fujitsu; Fujitsu FMV-DP976; fuj4401; 30.0-85.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP977; fuj4601; 30.0-85.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP978; fuj4701; 30.0-70.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP979; fuj2210; 30.0-92.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP97X1; fuja801; 30.0-85.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP97X2; fuja901; 30.0-92.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP97X3; fujaa01; 30.0-70.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP97X4; fuj6110; 30.0-92.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP97Y3; fuja401; 30.0-85.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP97Y4; fuja501; 31.0-64.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP97Y5; fuja601; 30.0-65.0; 50.0-110.0; 1
+Fujitsu; Fujitsu FMV-DP97Y6; fuja701; 30.0-69.0; 50.0-160.0; 1
+Fujitsu; Fujitsu FMV-DP981; fuj1110; 30.0-95.0; 50.0-180.0; 1
+Fujitsu; Fujitsu FMV-DP982; fuj1210; 30.0-95.0; 50.0-180.0; 1
+Fujitsu; Fujitsu FMV-DP98X1; fuj5110; 30.0-95.0; 50.0-180.0; 1
+Fujitsu; Fujitsu FMV-DP994; fuj9301; 30.0-85.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMV-DP995; fuj9401; 30.0-107.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP996; fuj0110; 30.0-107.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DP997; fuj0210; 30.0-121.0; 48.0-160.0; 1
+Fujitsu; Fujitsu FMV-DPA972; fuj4801; 30.0-70.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMV-DPA973; fuj2310; 30.0-70.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMVC-DP832; fmvcdp832; 35.5-48.0; 60.0-87.0; 1
+Fujitsu; Fujitsu FMVDP84X4G; fuj7310; 30.0-70.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMVDP84X5G/848; fuj7410; 30.0-70.0; 50.0-120.0; 1
+Fujitsu; Fujitsu FMVDP9710; fuj2110; 30.0-70.0; 50.0-160.0; 1
+Fujitsu; Fujitsu FMVDP9712; fuj2510; 30.0-70.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMVDP97X5(G)/FMVDP97X6; fuj6210; 30.0-92.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMVDP97X5(G)/X6/9711; fuj6210; 30.0-92.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMVDP97X7(G)/X8; fuj6310; 30.0-85.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FMVDP97X9(G)/9713; fuj6410; 30.0-85.0; 50.0-150.0; 1
+Fujitsu; Fujitsu FP-2500; fuj2112; 24.0-85.0; 50.0-86.0; 1
+Fujitsu; Fujitsu VL-1400SS; fuj8501; 31.5-57.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1410SS; fuj8601; 31.5-57.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1410TS; fuj8801; 31.5-56.5; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1420T; fuj4111; 31.5-48.4; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-14TX1; fuj9111; 31.5-48.4; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-14TX2; fuj9211; 30.0-48.4; 56.3-75.0; 1
+Fujitsu; Fujitsu VL-1500T; fuj8701; 31.5-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1510T; fuj3111; 31.5-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1520A; fuj3311; 31.5-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1520T; fuj3211; 31.5-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1530A; fuj3511; 31.5-48.4; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1530B; fuj3611; 31.5-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1530S; fuj3411; 31.5-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1530SW; fuj3711; 31.5-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-15DX1G; fuj8411; 48.4; 60.0; 1
+Fujitsu; Fujitsu VL-15DX2G; fuj8811; 48.4; 60.0; 1
+Fujitsu; Fujitsu VL-15DX3G; fuj8711; 48.4; 60.0; 1
+Fujitsu; Fujitsu VL-15TX1(G); fuj8111; 31.5-48.4; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-15TX2; fuj8311; 31.5-48.4; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-15TX3G; fuj8211; 31.5-48.4; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-15TX4G; fuj8611; 31.5-48.4; 56.0-75.0; 1
+Fujitsu; Fujitsu VL-1800TS; fuj1111; 31.5-80.0; 56.0-85.0; 1
+Fujitsu; Fujitsu VL-2100T; fuj8401; 31.5-80.0; 59.9-75.0; 1
+Fujitsu; Fujitsu x150f; fuj0119; 31.0-60.0; 56.0-75.0; 1
+Fujitsu; Fujitsu x154; icl2900; 30.0-70.0; 50.0-120.0; 1
+Fujitsu; Fujitsu x176; fuj2118; 30.0-100.0; 50.0-200.0; 1
+Fujitsu; Fujitsu x177; fuj2218; 30.0-92.0; 50.0-150.0; 1
+Fujitsu; Fujitsu x177a; fuj2318; 30.0-92.0; 50.0-150.0; 1
+Fujitsu; Fujitsu x191; icl2800; 30.0-96.0; 50.0-160.0; 1
+Funai Electric Company of Taiwan; Funai 17GD; fcm3313; 30.0-70.0; 50.0-120.0; 1
+Futura; Futura K7034LD 0; 30.0-95.0; 50.0-160.0; 1
+Futura; Futura K9034LD 0; 30.0-95.0; 50.0-160.0; 1
+Gateway; Gateway 14SVGA; 14svga; 31.5-35.5; 50-90; 1
+Gateway; Gateway AN1_15; gwy07d0; 30-60; 50-100; 1
+Gateway; Gateway CM751; gwy0013; 31-95; 50-160; 1
+Gateway; Gateway CM803; gwy138b; 31.0-115.0; 50.0-160.0; 1
+Gateway; Gateway CrystalScan 1024; cs1024; 31.5-35.5; 50-90; 1
+Gateway; Gateway CrystalScan 1024NI; cs1024ni; 30-50; 50-90; 1
+Gateway; Gateway CrystalScan 1024NI2G; cs1024ni2g; 31.5-48; 50-90; 1
+Gateway; Gateway CrystalScan 1572DG; 1572dg; 30-62; 50-120; 1
+Gateway; Gateway CrystalScan 1572DGM; cs1572dgm; 30-62; 50-100; 1
+Gateway; Gateway CrystalScan 1572FS; 1572fs; 30-62; 50-120; 1
+Gateway; Gateway CrystalScan 17762LEG; cs17762leg; 30-64; 50-100; 1
+Gateway; Gateway CrystalScan 500; gwy0f04; 30-64; 50-100; 1
+Gateway; Gateway CrystalScan 500-069; gwy138a; 31-69; 50-110; 1
+Gateway; Gateway CrystalScan 700-069; gwy1b5a; 31-69; 50-110; 1
+Gateway; Gateway CrystalScan 700-069; gwy1b5b; 31-69; 50-110; 1
+Gateway; Gateway DL27-1; gwy0a8d; 31.0-38.0; 50-75; 1
+Gateway; Gateway DL31-1; gwy0089; 31.0-38.0; 50-75; 1
+Gateway; Gateway DL31-1; gwy0c1e; 31.0-38.0; 50-75; 1
+Gateway; Gateway DL36-1; gwy0e11; 31.0-38.0; 50-75; 1
+Gateway; Gateway EV500; gwy138a; 31-69; 50-110; 1
+Gateway; Gateway EV500; gwy138b; 31-69; 50-110; 1
+Gateway; Gateway EV500; gwy138c; 31-69; 50-110; 1
+Gateway; Gateway EV500; gwy5005; 31-69; 50-110; 1
+Gateway; Gateway EV500 (Variant 2); gwy1393; 30.0-70.0; 50.0-120.0; 1
+Gateway; Gateway EV500B; gwy1390; 30.0-70.0; 50.0-160.0; 1
+Gateway; Gateway EV530; gwy1394; 30.0-56.0; 50.0-120.0; 1
+Gateway; Gateway EV575; gwy15c7; 31.0-60.0; 50.0-110.0; 1
+Gateway; Gateway EV700; gwy1B62; 30-70; 50-110; 1
+Gateway; Gateway EV700; gwy1b5a; 30-70; 50-110; 1
+Gateway; Gateway EV700; gwy1b5b; 30-70; 50-110; 1
+Gateway; Gateway EV700; gwy1b5c; 30-70; 50-110; 1
+Gateway; Gateway EV700; gwy1b5d; 30-70; 50-110; 1
+Gateway; Gateway EV700; gwy1b5e; 30-70; 50-110; 1
+Gateway; Gateway EV700; gwy1b5f; 30-70; 50-110; 1
+Gateway; Gateway EV700 (Win1); gwy1B67; 30.0-69.0; 50.0-120.0; 1
+Gateway; Gateway EV700 (Win2); gwy7658; 30.0-70.0; 50.0-120.0; 1
+Gateway; Gateway EV700-H; gwy7659; 30.0-70.0; 50.0-120.0; 1
+Gateway; Gateway EV700B; gwy1B64; 30.0-70.0; 50.0-160.0; 1
+Gateway; Gateway EV700C; gwy1B66; 30.0-70.0; 50.0-160.0; 1
+Gateway; Gateway EV730; gwy1B6A; 30.0-71.0; 50.0-160.0; 1
+Gateway; Gateway EV730; gwy1B6B; 30.0-71.0; 50.0-160.0; 1
+Gateway; Gateway EV730 (LiteOn manufactured); gwy1B69; 30.0-69.0; 50.0-120.0; 1
+Gateway; Gateway EV900; gwy8883; 30.0-95.0; 50.0-160.0; 1
+Gateway; Gateway EV910C; gwy232C; 30.0-95.0; 50.0-160.0; 1
+Gateway; Gateway EVF720; gwy031b; 30.0-96.0; 50.0-130.0; 1
+Gateway; Gateway FPD1500; gwy05dc; 30-61; 56-75; 1
+Gateway; Gateway FPD1510 (Analog); gwy05E6; 31.0-61.0; 56.0-75.0; 1
+Gateway; Gateway FPD1510 (Digital); gwy05E7; 31.0-61.0; 56.0-75.0; 1
+Gateway; Gateway FPD1520 R0; gwy05F0; 37.0-66.0; 50.0-75.0; 1
+Gateway; Gateway FPD1520 R1; gwy05F1; 31.0-60.0; 55.0-75.0; 1
+Gateway; Gateway FPD1520 R2; gwy05F2; 31.0-61.0; 56.0-75.0; 1
+Gateway; Gateway FPD1530 R0; gwy05FA; 31.0-63.0; 55.0-75.0; 1
+Gateway; Gateway FPD1530 R1; gwy05FB; 31.0-66.0; 50.0-75.0; 1
+Gateway; Gateway FPD1530 R2; gwy05FC; 31.0-63.0; 56.0-75.0; 1
+Gateway; Gateway FPD1530 R3; gwy05FD; 31.0-66.0; 50.0-75.0; 1
+Gateway; Gateway FPD1530 R4; gwy05FE; 31.0-63.0; 56.0-75.0; 1
+Gateway; Gateway FPD1530 R5; gwy05FF; 31.0-63.0; 56.0-75.0; 1
+Gateway; Gateway FPD1540 R0; gwy0604; 31.0-63.0; 55.0-75.0; 1
+Gateway; Gateway FPD1540 R1; gwy0605; 31.0-63.0; 55.0-75.0; 1
+Gateway; Gateway FPD1540 R2; gwy0606; 31.0-63.0; 55.0-75.0; 1
+Gateway; Gateway FPD1700 R0; gwy06A4; 31.0-80.0; 56.0-85.0; 1
+Gateway; Gateway FPD1700 R1; gwy06A5; 31.0-80.0; 56.0-85.0; 1
+Gateway; Gateway FPD1720; gwy06C3; 30.0-82.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R0; gwy06C2; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R1; gwy06C4; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R10; gwy06CE; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R11; gwy06CF; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R2; gwy06C5; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R3; gwy06C6; 30.0-83.0; 50.0-75.0; 1
+Gateway; Gateway FPD1730 R4; gwy06C7; 30.0-83.0; 50.0-75.0; 1
+Gateway; Gateway FPD1730 R5; gwy06C8; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R6; gwy06C9; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R7; gwy06CA; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R8; gwy06CB; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1730 R9; gwy06CC; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1800; gwy0708; 63.9; 60.0; 1
+Gateway; Gateway FPD1810 (Analog); gwy0712; 31.0-80.0; 56.0-85.0; 1
+Gateway; Gateway FPD1810 (Digital); gwy0713; 31.0-80.0; 56.0-85.0; 1
+Gateway; Gateway FPD1830 R0 (Analog); gwy0726; 30.0-83.0; 56.0-76.0; 1
+Gateway; Gateway FPD1830 R0 (Digital); gwy0727; 30.0-83.0; 56.0-76.0; 1
+Gateway; Gateway FPD1830 R1 (Analog); gwy0728; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1830 R1 (Digital); gwy0729; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1830 R2 (Analog); gwy072C; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1830 R2 (Digital); gwy072D; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1830 R3 (Analog); gwy0726; 30.0-83.0; 56.0-85.0; 1
+Gateway; Gateway FPD1830 R3 (Digital); gwy0727; 30.0-83.0; 56.0-85.0; 1
+Gateway; Gateway FPD1830 R4 (Analog); gwy072E; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1830 R4 (Digital); gwy072F; 30.0-68.0; 56.0-75.0; 1
+Gateway; Gateway FPD1930 (Analog); gwy078A; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1930 (Digital); gwy078B; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1940 (Analog); gwy0794; 30.0-83.0; 56.0-75.0; 1
+Gateway; Gateway FPD1940 (Digital); gwy0795; 30.0-71.0; 56.0-75.0; 1
+Gateway; Gateway FPD2020 R0 (Analog); gwy07E4; 30.0-96.0; 56.0-75.0; 1
+Gateway; Gateway FPD2020 R0 (Digital); gwy07E5; 30.0-80.0; 56.0-75.0; 1
+Gateway; Gateway FPD2020 R1 (Analog); gwy07E6; 30.0-96.0; 56.0-85.0; 1
+Gateway; Gateway FPD2020 R1 (Digital); gwy07E7; 30.0-80.0; 56.0-85.0; 1
+Gateway; Gateway FPD2020 R2 (Analog); gwy07E9; 28.0-80.0; 56.0-85.0; 1
+Gateway; Gateway FPD2020 R2 (Digital); gwy07E8; 28.0-80.0; 56.0-85.0; 1
+Gateway; Gateway FPD2200 (Analog); gwy0899; 30.0-70.0; 56.0-61.0; 1
+Gateway; Gateway FPD2200 (Digital); gwy0898; 30.0-70.0; 56.0-61.0; 1
+Gateway; Gateway LE500; gwy1392; 30.0-70.0; 50.0-120.0; 1
+Gateway; Gateway PF41500; gtw7800; 31.0-63.0; 56.0-75.0; 1
+Gateway; Gateway PF41700; gtw7900; 30.0-82.0; 56.0-75.0; 1
+Gateway; Gateway PFL2-15A; gwy060e; 48.0; 60; 1
+Gateway; Gateway Vivitron 15; vivitron15; 31-64; 50-120; 1
+Gateway; Gateway Vivitron 17; vivitron17; 31.5-64; 50-120; 1
+Gateway; Gateway Vivitron 20; vivitron20; 29-82; 50-150; 1
+Gateway; Gateway VX1100; gwy0454; 31.0-108.0; 50.0-160.0; 1
+Gateway; Gateway VX1110; gwy045b; 31.0-115.0; 50.0-160.0; 1
+Gateway; Gateway VX1120; gwy0460; 30.0-121.0; 50.0-160.0; 1
+Gateway; Gateway VX1120; gwy046A; 30.0-130.0; 50.0-160.0; 1
+Gateway; Gateway VX1130; gwy046B; 30.0-140.0; 50.0-160.0; 1
+Gateway; Gateway VX700; gwy044d; 30.0-86.0; 50.0-120.0; 1
+Gateway; Gateway VX700; mel1673; 30.0-86.0; 50.0-120.0; 1
+Gateway; Gateway VX700A; gwy044e; 30.0-86.0; 50.0-130.0; 1
+Gateway; Gateway VX720; gwy02d0; 30.0-96.0; 50.0-130.0; 1
+Gateway; Gateway VX720A; gwy02DA; 30.0-96.0; 50.0-160.0; 1
+Gateway; Gateway VX730; gwy1B68; 30.0-85.0; 50.0-160.0; 1
+Gateway; Gateway VX730; gwy1B6C; 30.0-85.0; 50.0-160.0; 1
+Gateway; Gateway VX730; gwy1B6D; 30.0-85.0; 50.0-160.0; 1
+Gateway; Gateway VX900; gwy0013; 30.0-95.0; 50.0-160.0; 1
+Gateway; Gateway VX900; gwy9095; 30.0-95.0; 50.0-160.0; 1
+Gateway; Gateway VX900T; gwy00c0; 30.0-96.0; 48.0-120.0; 1
+Gateway; Gateway VX920; gwy0398; 30.0-96.0; 50.0-140.0; 1
+Gateway; Gateway VX920A; gwy03A2; 30.0-110.0; 50.0-160.0; 1
+Gateway; Gateway VX930; gwy232D; 30.0-97.0; 50.0-160.0; 1
+Generic; 1024x768 @ 60 Hz; 0; 31.5-48.0.5; 50.0-70.0
+Generic; 1024x768 @ 70 Hz; 0; 31.5-57.0; 50.0-70.0.0
+Generic; 1280x1024 @ 60 Hz; 0; 31.5-64.0.3; 50.0-70.0
+Generic; 1280x1024 @ 74 Hz; 0; 31.5-79.0; 50.0-90.0.0
+Generic; 1280x1024 @ 76 Hz; 0; 31.5-82.0; 50.0-90.0
+Generic; 1400x1050; 0; 31.5-82.0; 50.0-90.0
+Generic; 1600x1200 @ 70 Hz; 0; 31.5-88.0; 50.0-90.0.0
+Generic; 1600x1200 @ 76 Hz; 0; 31.5-94.0; 50.0-90.0.0
+Generic; 640x480 @ 60 Hz; 0; 31.5; 50.0-61.0
+Generic; 800x600 @ 56 Hz; 0; 31.5-35.0.1; 50.0-61.0
+Generic; 800x600 @ 60 Hz; 0; 31.5-37.9; 50.0-70.0
+Generic; Flat Panel 1024x600; 0; 31.5-55.0; 40.0-70.0
+Generic; Flat Panel 1024x768; 0; 31.5-48.0; 56.0-65.0
+Generic; Flat Panel 1280x1024; 0; 31.5-64.0; 56.0-65.0
+Generic; Flat Panel 1280x768; 0; 31.5-90.0; 60
+Generic; Flat Panel 1280x800; 0; 31.5-50.0; 56.0-65.0
+Generic; Flat Panel 1360x768; 0; 31.5-48.0; 56.0-65.0
+Generic; Flat Panel 1400x1050; 0; 31.5-65.5; 56.0-65.0
+Generic; Flat Panel 1440x900; 0; 31.5-56.0; 56.0-65.0
+Generic; Flat Panel 1600x1200; 0; 31.5-74.7; 56.0-65.0
+Generic; Flat Panel 1600x900; 0; 31.5-90.0; 60
+Generic; Flat Panel 1680x1050; 0; 31.5-65.5; 56.0-65.0
+Generic; Flat Panel 1920x1080; 0; 31.5-67.0; 56.0-65.0
+Generic; Flat Panel 1920x1200; 0; 31.5-74.5; 56.0-65.0
+Generic; Flat Panel 2560x1600; 0; 31.5-99.0; 56.0-65.0
+Generic; Flat Panel 640x480; 0; 31.5; 56.0-65.0
+Generic; Flat Panel 800x480; 0; 31.5-37.9; 40.0-70.0
+Generic; Flat Panel 800x600; 0; 31.5-37.9; 56.0-65.0
+Geritec; Geritec PR568; BMM0238; 31-60; 60-75
+Golden Dragon; Golden Dragon TY-1411; ty-1411; 15.5-37.0; 50.0-120.0; 1
+Golden Dragon; Golden Dragon TY-2015; ty-2015; 30.0-65.0; 49.0-88.0; 1
+GoldStar Technology, Inc.; GoldStar 1423; 1423; 31.5; 70; 1
+GoldStar Technology, Inc.; GoldStar 1423 Plus VGA; 1423+vga; 31.5; 70; 1
+GoldStar Technology, Inc.; GoldStar 1453 Plus; 1453_plus; 35.5; 87; 1
+GoldStar Technology, Inc.; GoldStar 1460 Plus VGA; 1460+vga; 48.0; 70; 1
+GoldStar Technology, Inc.; GoldStar 1470_Plus; 1470_plus; 30.0-50.0; 45.0-90.0; 1
+GoldStar Technology, Inc.; GoldStar 1490; 1490; 30.0-64.0; 50.0-120.0; 1
+GoldStar Technology, Inc.; GoldStar 1510; 1510; 30.0-60.0; 50.0-105.0; 1
+GoldStar Technology, Inc.; GoldStar 1620; 1620; 30.0-50.0; 45.0-90.0; 1
+GoldStar Technology, Inc.; GoldStar 1710; 1710; 30.0-60.0; 50.0-105.0; 1
+GoldStar Technology, Inc.; GoldStar 1725; 1725; 30-65; 50-120; 1
+GoldStar Technology, Inc.; GoldStar LG StudioWorks20i; 0; 30.0-85.0; 50.0-120.0
+GoldStar Technology, Inc.; GoldStar LG StudioWorks56i; 0; 30.0-60.0; 50.0-110.0
+GoldStar Technology, Inc.; GoldStar LG StudioWorks56m; 0; 30.0-65.0; 50.0-110.0
+GoldStar Technology, Inc.; GoldStar LG StudioWorks74m; 0; 30.0-50.0; 50.0-90.0
+GoldStar Technology, Inc.; GoldStar LG StudioWorks76i; 0; 30.0-65.0; 50.0-110.0
+GoldStar Technology, Inc.; GoldStar LG StudioWorks76m; 0; 30.0-65.0; 50.0-110.0
+GoldStar Technology, Inc.; GoldStar LG StudioWorks77i; 0; 30.0-70.0; 50.0-160.0; 1
+GoldStar Technology, Inc.; GoldStar LG StudioWorks78i; 0; 30.0-85.0; 50.0-120.0
+GoldStar Technology, Inc.; GoldStar LG StudioWorks78T; 0; 30.0-85.0; 50.0-120.0
+Hanns.G; Hanns.G HG216D; HSD1ca3; 30-82; 50-75; 1680x1050
+Hanns.G; Hanns.G HW191; HSD8991; 30-80; 49-75; 1440x900
+Hansol Electronics; Hansol Electronics Mazellan14px; hsl0579; 30.0-54.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan15ax; hsl05dd; 30.0-54.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan17ax; hsl06a6; 30.0-69.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan17px; hsla605; 30.0-85.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan400A; hsl057a; 30.0-50.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan400P; hsl0579; 30.0-54.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan500A; hsl05dd; 30.0-54.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan500P; hsl05de; 30.0-69.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan700A; hsl06a6; 30.0-69.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan700P; hsl06a5; 30.0-85.0; 50.0-120.0; 1
+Hansol Electronics; Hansol Electronics Mazellan710P; hsl06ab; 30-95; 47-160; 1
+Hansol Electronics; Hansol Electronics Mazellan900P; hsl076d; 30.0-96.0; 47.0-150.0; 1
+HCI; HCI Maxiscan; maxiscan; 15.0-35.0; 50.0-70.0; 1
+Hewlett-Packard; HP 1024 LCD Flat Panel 14-inch Display; 0; 32-61; 50-90
+Hewlett-Packard; HP 1024 LE Flat Panel 14-inch Display; 0; 32-54; 50-105
+Hewlett-Packard; HP 1825 Flat Panel Monitor; hwp0721; 30.0-82.0; 56.0-76.0; 1
+Hewlett-Packard; HP 2025 (P4831) Flat Panel Monitor; hwp144a; 30.0-94.0; 56.0-85.0; 1
+Hewlett-Packard; HP 2025 Flat Panel Monitor (Variant 2); hwp144b; 30.0-92.0; 56.0-85.0; 1
+Hewlett-Packard; HP 5500 Color Monitor; hwp2602; 30.0-54.0; 50.0-120.0; 1
+Hewlett-Packard; HP 7500 Color Monitor; hwp2603; 30.0-70.0; 50.0-140.0; 1
+Hewlett-Packard; HP 7550 Color Monitor; hwp2604; 30.0-86.0; 50.0-140.0; 1
+Hewlett-Packard; HP 9500 Color Monitor; hwp2605; 30.0-96.0; 50.0-160.0; 1
+Hewlett-Packard; HP A1295A 24-inch Display; 0; 30-96; 50-160; 1
+Hewlett-Packard; HP A4033A 21-inch Display; 0; 30-80; 50-120; 1
+Hewlett-Packard; HP A4331A 20-inch Display; 0; 30-82; 48-150; 1
+Hewlett-Packard; HP A4576A (P1100) 21-inch Display; 0; 30-107; 50-160; 1
+Hewlett-Packard; HP A7217A Wide-Aspect; 0; 30-121; 48-160; 1
+Hewlett-Packard; HP D1187A 20-inch Display; hp_d1187a; 30.0-64.0; 50.0-90.0; 1
+Hewlett-Packard; HP D1188A 20-inch Display; hp_d1188a; 30.0-64.0; 50.0-90.0; 1
+Hewlett-Packard; HP D1192A VGA Monochrome 14-inch Display; hp_d1192a; 31.5; 70; 1
+Hewlett-Packard; HP D1192B VGA Monochrome 14-inch Display; hp_d1192b; 31.5; 70; 1
+Hewlett-Packard; HP D1193A Ultra VGA 17-inch; hp_d1193a; 30.0-64.0; 50.0-90.0; 1
+Hewlett-Packard; HP D1194A SVGA 14-inch Display; hp_d1194a; 37.9; 72; 1
+Hewlett-Packard; HP D1195A Ergo-SVGA 14-inch Display; hp_d1195a; 48.1; 72; 1
+Hewlett-Packard; HP D1196A Ergo Ultra VGA 15-inch Display; hp_d1196a; 56.4; 72; 1
+Hewlett-Packard; HP D1197A Color VGA 14-inch Display; hp_d1197a; 31.5; 70; 1
+Hewlett-Packard; HP D1198A SVGA 14-inch Display; hp_d1198a; 37.9; 70; 1
+Hewlett-Packard; HP D1199A Ultra VGA 1600 21-inch Display; hp_d1199a; 30-82; 50-152; 1
+Hewlett-Packard; HP D1815A 1024 Low Emissions 14-inch Display; hwp0aff; 31-48.4; 50-100; 1
+Hewlett-Packard; HP D2800 Ultra VGA 1600 21-inch Display; hwp0af0; 30.0-85.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2801 Monochrome VGA 14-inch Display; hwp0af1; 31.5; 60; 0
+Hewlett-Packard; HP D2802 Entry-Level SVGA 14-inch Display; hwp0af2; 35.5; 43.5; 1
+Hewlett-Packard; HP D2803 Super VGA 1024i 14-inch Display; hwp0af3; 35.5; 43.5; 1
+Hewlett-Packard; HP D2804 Super VGA 1024i 14-inch Display; hwp0af4; 35.5; 43.5; 1
+Hewlett-Packard; HP D2805 Ergo 1024 14-inch Display; hwp0af5; 30.0-62.0; 50.0-100.0; 1
+Hewlett-Packard; HP D2806 Ergo Ultra VGA 15-inch Display; hwp0af6; 30.0-64.0; 50.0-100.0; 1
+Hewlett-Packard; HP D2807 Ultra VGA 1280 17-inch Display; hwp0af7; 30.0-64.0; 50.0-100.0; 1
+Hewlett-Packard; HP D2808 1024 Low Emissions 15-inch Display; hwp0af8; 30.0-48.5; 50.0-100.0; 1
+Hewlett-Packard; HP D2809 1024 Low Emissions MM 15-inch Display; hwp0af9; 30.0-48.5; 50.0-100.0; 1
+Hewlett-Packard; HP D2810 1024 14-inch Display; hwp0afa; 48.4; 60; 1
+Hewlett-Packard; HP D2811 1024 Low Emissions 14-inch Display; hwp0afb; 48.4; 60; 1
+Hewlett-Packard; HP D2813 1024 14-inch Display; hwp0afd; 30.9-49.0; 50.0-100.0; 1
+Hewlett-Packard; HP D2814 Super VGA Low Emissions 14-inch Display; hwp0afe; 35.5; 43.5; 1
+Hewlett-Packard; HP D2815 1024 Low Emissions 14-inch Display; hwp0aff; 30.9-49.0; 50.0-100.0; 1
+Hewlett-Packard; HP D2817 Ultra VGA 1280 17-inch Display; hwp0b01; 30.0-64.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2818 Ultra VGA 1280 17-inch Display; hwp0b02; 30.0-64.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2819 Ultra VGA 1280 Extra Low Emissions 17-inch Display; hwp0b03; 30.0-64.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2821 1024 Low Emissions 14-inch Display; hwp0b05; 31.0-54.0; 50.0-110.0; 1
+Hewlett-Packard; HP D2825 Ultra VGA 1024 15-inch Display; hwp0b09; 31.0-54.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2826 HP 50 15-inch Display; hwp0b0a; 31.0-54.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2827 HP 51 15-inch Display; hwp0b0b; 31.0-54.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2828 HP 52 15-inch Monitor; hwp0b0c; 30.0-54.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2830 Ergo 1024 15-inch Display; hwp0b0e; 30.0-69.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2831 Ergo 1024 Extra Low Emissions 15-inch Display; hwp0b0f; 30.0-69.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2832 HP 500 15-inch Monitor; hwp0b10; 30.0-70.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2835 Ultra VGA 1280 17-inch Display; hwp0b13; 30.0-69.0; 50.0-132.0; 1
+Hewlett-Packard; HP D2836 Ultra VGA 1280 Extra Low Emissions 17-inch Display; hwp0b14; 30.0-69.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2837 HP 70 17-inch Display; hwp0b15; 31.0-70.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2838 M700 17-inch Display; hwp0b16; 30.0-86.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2839 HP 70 17-inch Monitor; hwp0b17; 31.0-70.0; 50.0-120.0; 1
+Hewlett-Packard; HP D2840 Ergo 1280 17-inch Display; hwp0b18; 31.0-92.0; 50.0-150.0; 1
+Hewlett-Packard; HP D2842 HP 90 19-inch Display; hwp0b1a; 30.0-96.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2843 M900 19-inch Monitor; hwp0b1b; 31.0-95.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2845 Ergo 1600 21-inch Display; hwp0b1d; 31.5-95.0; 50.0-160.0; 1
+Hewlett-Packard; HP D2846 P1100 21-inch Monitor; hwp0b1e; 30.0-107.0; 48.0-160.0; 1
+Hewlett-Packard; HP D2847 P1110 21-inch Monitor; hwp0b1f; 29.0-121.0; 50.0-180.0; 1
+Hewlett-Packard; HP D3857A Multi Media 15-inch Display; hwp0f11; 31.0-48.4; 40.0-60.0; 1
+Hewlett-Packard; HP D3858A Multi Media 14-inch Display; hwp0f12; 31.469-50.0; 56.0-75.0; 1
+Hewlett-Packard; HP D3859A Multi Media 17-inch Display; hwp0f13; 30.0-68.0; 56.0-85.0; 1
+Hewlett-Packard; HP D3861A Multi Scan 14-inch Display; hwp0f15; 31.469-50.0; 56.0-75.0; 1
+Hewlett-Packard; HP D3899A Multi Media 14-inch Display; hwp0f3b; 31.469-50.0; 56.0-75.0; 1
+Hewlett-Packard; HP D5060 1024 14-inch Liquid Crystal Display; hwp13c4; 31.5-61.0; 50.0-90.0; 1
+Hewlett-Packard; HP D5061 L1500 15-inch LCD Monitor; hwp13c5; 31.0-69.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5062 L1510 15-inch LCD Monitor; 0; 31.0-60.0; 56.0-75.0; 1
+Hewlett-Packard; HP D5063A L1520 15-inch LCD Monitor; 0; 30.0-60.0; 56.0-75.0; 1
+Hewlett-Packard; HP D5064A L1720 17-inch LCD Monitor; 0; 30.0-80.0; 56.0-75.0; 1
+Hewlett-Packard; HP D5065 L1800 18.1-inch LCD Monitor; hwp13c9; 30.0-80.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5069J L1810 18.1-inch LCD Monitor; hwp13cd; 30.0-80.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion F50S Monitor; hwp12d7; 31.0-60.0; 56.0-75.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp0102; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp0486; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp04ea; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp054e; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp086e; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp08d2; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp0936; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5258A Pavilion M50 Monitor; hwp148a; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5259A Pavilion M70 Monitor; hwp0487; 31.468-71.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5259A Pavilion M70 Monitor; hwp04eb; 31.468-71.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5259A Pavilion M70 Monitor; hwp054f; 31.468-71.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5259A Pavilion M70 Monitor; hwp148b; 31.468-71.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5269A Pavilion M40 Monitor; hwp0491; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5269A Pavilion M40 Monitor; hwp04f5; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D5269A Pavilion M40 Monitor; hwp0559; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D6433A Pavilion M90 Monitor; hwp1921; 31.468-98.0; 56.0-85.0; 1
+Hewlett-Packard; HP D6433A Pavilion M90 Monitor; hwp1922; 31.468-98.0; 56.0-85.0; 1
+Hewlett-Packard; HP D6433A Pavilion M90 Monitor; hwp1923; 31.468-98.0; 56.0-85.0; 1
+Hewlett-Packard; HP D7739A Pavilion S50 Monitor; hwp1e3b; 31.468-54.0; 56.0-85.0; 1
+Hewlett-Packard; HP D7740A Pavilion S70 Monitor; hwp1e3c; 31.468-71.0; 56.0-85.0; 1
+Hewlett-Packard; HP D8891 HP 40 14-inch Monitor; hwp22bb; 30.0-50.0; 50.0-90.0; 1
+Hewlett-Packard; HP D8894 HP 55 15-inch Monitor; hwp22be; 30.0-54.0; 50.0-90.0; 1
+Hewlett-Packard; HP D8895 HP 55 15-inch Monitor; hwp22bf; 30.0-54.0; 50.0-90.0; 1
+Hewlett-Packard; HP D8896 HP 55 15-inch Monitor; hwp22c0; 30.0-54.0; 50.0-120.0; 1
+Hewlett-Packard; HP D8897 HP 55 15-inch Monitor; hwp22c1; 30.0-54.0; 50.0-120.0; 1
+Hewlett-Packard; HP D8898 HP 55 TCO95 15-inch Monitor; hwp22c2; 30.0-69.0; 50.0-120.0; 1
+Hewlett-Packard; HP D8900 HP 75 17-inch Monitor; hwp22c4; 31.0-86.0; 50.0-160.0; 1
+Hewlett-Packard; HP D8901A HP 71 17-inch Monitor; hwp22c5; 31.0-70.0; 50.0-120.0; 1
+Hewlett-Packard; HP D8902A HP 71 17-inch Monitor; hwp22c6; 31.0-72.0; 50.0-120.0; 1
+Hewlett-Packard; HP D8903A HP 71 17-inch Monitor; hwp22c7; 31.0-70.0; 50.0-120.0; 1
+Hewlett-Packard; HP D8904A HP 72 17-inch Monitor; 0; 30.0-70.0; 50.0-120.0; 1
+Hewlett-Packard; HP D8906A HP P700 17-inch Monitor; hwp22ca; 30.0-86.0; 50.0-160.0; 1
+Hewlett-Packard; HP D8910A HP P910 19-inch Monitor; hwp22ce; 29.0-107.0; 50.0-150.0; 1
+Hewlett-Packard; HP D8911A HP 91 19-inch Monitor; hwp22cf; 30.0-95.0; 50.0-160.0; 1
+Hewlett-Packard; HP D8912A HP P920 19-inch Monitor; hwp22d0; 30.0-107.0; 50.0-160.0; 1
+Hewlett-Packard; HP D8915A HP P1120 21-inch Monitor; hwp22d3; 30.0-121.0; 48.0-160.0; 1
+Hewlett-Packard; HP F1503 Flat Panel Monitor; hwp2590; 30.0-63.0; 56.0-76.0; 1
+Hewlett-Packard; HP F1523 Flat Panel Monitor; hwp2607; 30.0-61.0; 56.0-76.0; 1
+Hewlett-Packard; HP F1703 Flat Panel Monitor; hwp2594; 30.0-83.0; 56.0-76.0; 1
+Hewlett-Packard; HP F1723 Flat Panel Monitor; hwp2609; 30.0-81.0; 56.0-76.0; 1
+Hewlett-Packard; HP F2105 Flat Panel Monitor; hwp2655; 30.0-94.0; 48.0-85.0; 1
+Hewlett-Packard; HP L1502 Flat Panel Monitor; hwp2600; 30.0-61.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1506 Flat Panel Monitor; hwp265b; 30.0-83.0; 50.0-76.0; 1
+Hewlett-Packard; HP L1530 Flat Panel Monitor; hwp260c; 30.0-63.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1702 Flat Panel Monitor; hwp2601; 30.0-81.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1730 Flat Panel Monitor; hwp260e; 30.0-83.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1740 LCD Flat Panel Monitor; hwp2649; 30.0-83.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1755 LCD Flat Panel Monitor; hwp264b; 30.0-82.0; 56.0-75.0; 1
+Hewlett-Packard; HP L1906 Flat Panel Monitor; hwp265e; 30.0-83.0; 50.0-76.0; 1
+Hewlett-Packard; HP L1925 Flat Panel Monitor; hwp259a; 30.0-82.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1925 Flat Panel Monitor; hwp259b; 30.0-82.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1940 Flat Panel Monitor; hwp262e; 30.0-83.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1940 LCD Flat Panel Monitor; hwp262f; 30.0-83.0; 65.0-76.0; 1
+Hewlett-Packard; HP L1940T Flat Panel Monitor; hwp2683; 30.0-83.0; 56.0-76.0; 1
+Hewlett-Packard; HP L1955 LCD Flat Panel Monitor; hwp262c; 30.0-82.0; 56.0-75.0; 1
+Hewlett-Packard; HP L2035 Flat Panel Monitor; HWP2612; 30.0-94.0; 48.0-85.0; 1
+Hewlett-Packard; HP L2035 Flat Panel Monitor; HWP2613; 30.0-94.0; 48.0-85.0; 1
+Hewlett-Packard; HP L2335 Flat Panel Monitor; HWP2614; 30.0-107.0; 48.0-85.0; 1
+Hewlett-Packard; HP L2335 Flat Panel Monitor; HWP2615; 30.0-107.0; 48.0-85.0; 1
+Hewlett-Packard; HP L2335 LCD Flat Panel Monitor; hwp2615; 30.0-92.0; 48.0-85.0; 1
+Hewlett-Packard; HP LP2065 Flat Panel Monitor; hwp0a72; 30.0-92.0; 48.0-85.0; 1
+Hewlett-Packard; HP LP2465 Flat Panel Monitor; hwp2676; 30.0-92.0; 48.0-85.0; 1
+Hewlett-Packard; HP LP3065 Wide LCD Monitor; HWP2690; 98.0-100.0; 59-60; 1
+Hewlett-Packard; HP M500 15-inch Display; 0; 30-70; 50-120
+Hewlett-Packard; HP M700 17-inch Display; 0; 30-86; 50-160
+Hewlett-Packard; HP M703 Color Monitor; hwp2584; 30.0-70.0; 50.0-140.0; 1
+Hewlett-Packard; HP M720 17-inch Display; 0; 30-85; 50-150
+Hewlett-Packard; HP M900 19-inch Display; 0; 31-95; 50-150
+Hewlett-Packard; HP M910 19-inch Display; 0; 29-107; 50-150
+Hewlett-Packard; HP M920 19-inch Display; 0; 29-107; 50-150
+Hewlett-Packard; HP MX703 Color Monitor; hwp2585; 30.0-70.0; 50.0-150.0; 1
+Hewlett-Packard; HP P1130 (P4819) Color Monitor; hwp12d3; 30.0-130.0; 48.0-170.0; 1
+Hewlett-Packard; HP P1230 Color Monitor; HWP2617; 30.0-140.0; 50.0-160.0; 1
+Hewlett-Packard; HP P4829 L1820 18.1-inch LCD Monitor; hwp12dd; 31-80; 56-75; 1
+Hewlett-Packard; HP P4829J L1820 18.1-inch LCD Monitor; 0; 25-82; 54-88; 1
+Hewlett-Packard; HP P930 Color Monitor; hwp03a2; 30.0-110.0; 50.0-160.0; 1
+Hewlett-Packard; HP Pavilion M45/S40 Monitor; hwp14b2; 31.468-50.0; 56.0-75.0; 1
+Hewlett-Packard; HP TFT5600 RKM; 0; 29.2-48.4; 40.0-70.0; 1
+Hewlett-Packard; HP VF15 Flat Panel Monitor; hwp2608; 30.0-61.0; 56.0-76.0; 1
+Hewlett-Packard; HP VF17 Flat Panel Monitor; hwp260a; 30.0-81.0; 56.0-76.0; 1
+Hewlett-Packard; HP W1907 Wide LCD Monitor; HWP26A2; 24.0-83.0; 50.0-76.0; 1
+Hewlett-Packard; HP W1907 Wide LCD Monitor; HWP26A3; 24.0-83.0; 50.0-76.0; 1
+Hewlett-Packard; HP W2207 Wide LCD Monitor; HWP26A8; 24.0-83.0; 50.0-76.0; 1
+Hewlett-Packard; HP W2207 Wide LCD Monitor; HWP26A9; 24.0-83.0; 50.0-76.0; 1
+Highscreen; Highscreen LE 1024; 45; 31.4-31.6,35.1-35.2,35.5-35.6; 50-87
+Hitachi, Ltd.; Hitachi 20-AP; 20-ap; 30.0-65.0; 55.0-80.0; 1
+Hitachi, Ltd.; Hitachi 20-APF; 20-apf; 30.0-65.0; 55.0-80.0; 1
+Hitachi, Ltd.; Hitachi 20-AS; 20-as; 30.0-65.0; 55.0-80.0; 1
+Hitachi, Ltd.; Hitachi 21-AP; 21-ap; 30.0-65.0; 55.0-80.0; 1
+Hitachi, Ltd.; Hitachi Accuvue GX17L; hit1717; 30.0-64.0; 50.0-100.0; 1
+Hitachi, Ltd.; Hitachi Accuvue GX20; hit4810; 28.0-90.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi Accuvue GX20H; hit4830; 28.0-90.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi Accuvue GX21; hit4811; 28.0-90.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi Accuvue UX4721; hit4711; 30.0-95.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi Accuvue UX4921; hit4911; 30.0-107.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi Accuvue UX6821; hit6811; 30.0-107.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi CM-1711M; htcab6f; 24.8-82.0; 55.0-120.0; 1
+Hitachi, Ltd.; Hitachi CM-2110M; htcabcc; 31.0-85.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM-2111M; htcabc7; 31.0-95.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM-2112M; htcabc2; 31.0-107.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM1798M; cm1798m; 30.0-82.0; 50.0-120.0; 1
+Hitachi, Ltd.; Hitachi CM2198M; cm2198m; 30.0-94.0; 50.0-150.0; 1
+Hitachi, Ltd.; Hitachi CM2199M; cm2199m; 31.5-107.0; 50.0-150; 1
+Hitachi, Ltd.; Hitachi CM500; htcafc8; 30.0-69.0; 50.0-100.0; 1
+Hitachi, Ltd.; Hitachi CM500E; htcafce; 30.0-69.0; 50.0-100.0; 1
+Hitachi, Ltd.; Hitachi CM515; HTCB3C5; 30-70; 50-160
+Hitachi, Ltd.; Hitachi CM600; htcafd2; 30.0-64.0; 47.0-104.0; 1
+Hitachi, Ltd.; Hitachi CM611; htcafd7; 31.0-92.0; 50.0-120.0; 1
+Hitachi, Ltd.; Hitachi CM615; HTCB3B3; 30-70; 50-160
+Hitachi, Ltd.; Hitachi CM620; htcafdd; 31.0-69.0; 47.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM621F; HTC9C40; 30-70; 50-160
+Hitachi, Ltd.; Hitachi CM625; HTC7961; 30.0-95.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM630; htcafe2; 31.0-86.0; 47.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM640; htcaffa; 31.0-69.0; 50.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM640ET/CM640U; htcaffa; 31.0-69.0; 50.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM641; htcafec; 31.0-95.0; 50.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM643; htcb001; 31.0-95.0; 50.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM650; htcb004; 31.0-69.0; 50.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM651; htcb005; 31.0-95.0; 50.0-130.0; 1
+Hitachi, Ltd.; Hitachi CM701; htcabf4; 31.0-96.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM715; HTCB3BA; 30.0-95.0; 50.0-120.0
+Hitachi, Ltd.; Hitachi CM721F; HTCB3C4; 31.0-95.0; 50.0-120.0
+Hitachi, Ltd.; Hitachi CM751; htcac13; 31.0-94.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM752; htcac15; 31.0-101.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM753; htcac22; 31.0-107.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM761; htcac76; 31.0-96.0; 50.0-180.0; 1
+Hitachi, Ltd.; Hitachi CM766; htcb00f; 31.0-96.0; 50.0-180.0; 1
+Hitachi, Ltd.; Hitachi CM768; htcb011; 31.0-107.0; 50.0-180.0; 1
+Hitachi, Ltd.; Hitachi CM769; htcb02f; 31.0-115.0; 50.0-180.0; 1
+Hitachi, Ltd.; Hitachi CM771; htcac82; 31.0-96.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM772; HTCB3C0; 31.0-115.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM776; HTCB03B; 31.0-96.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM800; htcabe3; 31.0-89.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM801; htcabe2; 31.0-96.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM802; htcabe0; 31.0-100.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM803; htcabea; 31.0-115.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM811; htcac46; 31.0-96.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM811PLUS; HTCAC4E; 31.0-107.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM812; htcac47; 31.0-107.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM813; htcac48; 31.0-115.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM814; htcac49; 31.0-125.0; 50.0-160.0; 1
+Hitachi, Ltd.; Hitachi CM815; HTCAC54; 31.0-130.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM821F; HTCB404; 31.0-107.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM823F; HTCB3F7; 31.0-121.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM827; HTCB3FC; 31.0-107.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CM828; HTCB3FD; 31.0-115.0; 50.0-160.0
+Hitachi, Ltd.; Hitachi CML153X; HTC1799; 24-60; 56-75
+Hitachi, Ltd.; Hitachi CML154X; HTC179C; 24-60; 56-75
+Hitachi, Ltd.; Hitachi CML155X Analog; HTC179E; 31.0-61.0; 56.0-75.0
+Hitachi, Ltd.; Hitachi CML155X Digital; HTC1F41; 31.0-49.0; 59.0-75.0
+Hitachi, Ltd.; Hitachi CML170SX; HTCDAE0; 24-80; 56-85
+Hitachi, Ltd.; Hitachi CML174SX; HTC178C; 24.0-80.0; 56.0-75.0
+Hitachi, Ltd.; Hitachi CML175SX; HTC1795; 24.0-80.0; 56.0-75.0
+Hitachi, Ltd.; Hitachi CML181SX; HTC1786; 24-80; 56-85
+Hitachi, Ltd.; Hitachi CML190SX; HTC177D; 24.0-80.0; 56.0-75.0
+Hitachi, Ltd.; Hitachi CML200UX Analog; HTC7C17; 31.0-75.0; 56.0-75.0
+Hitachi, Ltd.; Hitachi CML200UX Digital; HTC431F; 31.0-75.0; 59.0-75.0
+Hitachi, Ltd.; Hitachi HM-5219; hm-5219; 88.0-90.0; 88.0-89.0; 1
+Hitachi, Ltd.; Hitachi HM1764; hit1727; 30.0-64.0; 50.0-100.0; 1
+Hitachi, Ltd.; Hitachi HM1782; hit1827; 30.0-82.0; 50.0-100.0; 1
+Hitachi, Ltd.; Hitachi HM4020; hit4020; 60.0-85.0; 60.0-120.0; 1
+Hitachi, Ltd.; Hitachi HM4021; hit4021; 60.0-85.0; 60.0-120.0; 1
+Hitachi, Ltd.; Hitachi HM4721; hit2147; 30.0-95.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi HM4820; hit4820; 28.0-90.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi HM4821; hit4821; 28.0-90.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi HM4921; hit2149; 30.0-107.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi HM6421; hit6421; 100.0-102.0; 72.0-77.0; 1
+Hitachi, Ltd.; Hitachi HM6821; hit6821; 30.0-107.0; 50.0-152.0; 1
+Hitachi, Ltd.; Hitachi TX36D79VC1CAB; HTC17AC; 50-65; 40-52
+Hitachi, Ltd.; Hitachi V700; HTCB3CD; 30-70; 50-160
+Hitachi, Ltd.; Hitachi V810; HTCB446; 30-96; 50-160
+Hitachi, Ltd.; Hitachi V900; HTCB3CE; 30-95; 50-160
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 14; hn/l-4838x; 31.0-38.0; 56.0-87.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 14 Plus; hn/l-4848; 31.0-48.4; 56.0-87.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 14 Pro; hn/l-4860; 30.0-60.0; 50.0-90.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai Deluxscan 14S; hei12f0; 30-48; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 15; hl-5848; 31.0-48.4; 56.0-87.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 15 Pro; hei5864; 30.0-64.0; 50.0-120.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai Deluxscan 15B; hei16d8; 30-48; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai Deluxscan 15G; hei16e8; 30-64; 50-90; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 15G+; hei16ee; 30.0-70.0; 50.0-120.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 17; heib81e; 30.0-64.0; 50.0-90.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai Deluxscan 17 Pro; hei1e02; 30-82; 45-100; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai Deluxscan 17B; hei1eb8; 30-64; 50-100; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 17B+; hei1ebe; 30.0-70.0; 50.0-120.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 17MB/17MS; 0; 30-50; 50-130
+Hyundai Electronics Industries Co., Ltd.; Hyundai Deluxscan 21; hei0b42; 30-82; 45-100; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan 2595; hei259c; 30.0-97.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan B790+; hei0790; 30.0-95.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan HLM-1410A; hei141A; 24.0-69.0; 50.0-88.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan HLM-1500A; hei150A; 24.0-69.0; 50.0-88.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan HLM-1510A; hei151a; 30.0-70.0; 43.0-85.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan P210; hei0210; 30.0-110.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan P910+; hei0910; 30.0-107.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan V560; hei1560; 30.0-55.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan V570; hei1570; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai DeluxScan V770; hei1770; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HCM-40X; hcm-40x; 31.5; 60.0-70.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HCM-421E; 0; 30-36; 43-72; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HCM-42X; hcm-42x; 35.5; 87.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HCM-43X; hcm-43x; 48.3; 60.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HCM-44X; hcm-44x; 56.4; 70.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-2882; hei0b42; 30-82; 45-100; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-2885B; hei288b; 30.0-95.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-4838E; hei12e6; 30-38; 50-90; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-4848; hei4848; 30-50; 50-90; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-4848F; hei12f0; 30.0-50.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-4850B; hei12f2; 30-50; 50-130; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-4854B; hei12f6; 30-50; 50-130; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-4860E; hei12fc; 30-60; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5848; hei5848; 30-48; 50-90; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5848F; hei16d8; 30-48; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5854B; hei585b; 30.0-54.0; 50.0-130.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5854C; hei585c; 30.0-54.0; 50.0-130.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5860; hl-5860; 30.0-60.0; 56.0-90.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5864E; hei5864; 30-65; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5864F; hei16e8; 30-65; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5870A; hei16ee; 30-70; 50-150; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5870B; hei58b0; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5870BM; hei58b1; 30-70; 50-150; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-5870C; hei587c; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7682; hl-7682; 31.0-82.0; 56.0-100.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7682A; hei1e02; 30-82; 45-100; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7682P; hl-7682p; 31.0-82.0; 56.0-100.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7770A; hei777a; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7770RD; hei777d; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7864; hei1eb8; 30-65; 50-100; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7864F; hei7864; 30-65; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7870A; hei1ebe; 30-70; 50-150; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7870AM; hei78a0; 30-70; 50-150; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7870B; hei787b; 30-70; 50-150; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7870S; hei78b0; 30-70; 50-150; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HL-7948M; hei1f0c; 30-48; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HMM-413; hmm-413; 31.5; 56.0-70.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HN-4938; hn-4938; 31.0-38.0; 56.0-87.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HN-7448M; hei1d18; 30-48; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HN/L-4850; hn/l-4850; 30.0-50.0; 50.0-90.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HT-2896B; hei289b; 30-96; 50-150; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HT-7682B/DeluxScan 7687; hei768b; 30-82; 50-120; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai HT-7695B; hei769b; 30.0-95.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai Image Quest B91A; HIQ500a; 31-83; 56-75; 1280x1024
+Hyundai Electronics Industries Co., Ltd.; Hyundai Image Quest L70S+; IQT0704; 31-80; 56-75; 1280x1024
+Hyundai Electronics Industries Co., Ltd.; Hyundai Image Quest Q17; IQT217a; 31-80; 56-75; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai ImageFlat F790D; heif790; 30.0-96.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai ImageFlat F910; heif910; 30.0-110.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai Q320WD D-sub; HIQ500c; 31-83; 56-85; 1360x768
+Hyundai Electronics Industries Co., Ltd.; Hyundai S450; hei0450; 30.0-54.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai S560; hei0560; 30.0-57.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai S570; hei0570; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co., Ltd.; Hyundai S770; hei0770; 30.0-70.0; 50.0-150.0; 1
+Hyundai Electronics Industries Co.,Ltd.; Hyundai ImageFlat F790; HEIF790; 30.0-95.0; 50.0-150.0; 1
+Hyundai IT Corporation; Hyundai IT T71S; hiq6009; 30.0-83.0; 55.0-75.0; 1
+Hyundai IT Corporation; Hyundai IT T91D Analog; hiq600b; 30.0-83.0; 55.0-75.0; 1
+Hyundai IT Corporation; Hyundai IT T91D Digital; hiq6d0b; 30.0-83.0; 55.0-75.0; 1
+Hyundai IT Corporation; Hyundai IT X71S; hit600f; 24.0-83.0; 55.0-77.0; 1
+Hyundai IT Corporation; Hyundai IT X90W Analog; hiq6008; 31-84.0; 56.0-76.0; 1
+Hyundai IT Corporation; Hyundai IT X90W Digital; hiq6d08; 31-84.0; 56.0-76.0; 1
+Hyundai IT Corporation; Hyundai IT X91D Analog; hit6010; 30.0-83.0; 56.0-75.0; 1
+Hyundai IT Corporation; Hyundai IT X91D Analog; hit6012; 30.0-83.0; 56.0-75.0; 1
+Hyundai IT Corporation; Hyundai IT X91D Digital; hit6d10; 30.0-83.0; 56.0-75.0; 1
+Hyundai IT Corporation; Hyundai IT X91D Digital; hit6d12; 30.0-83.0; 56.0-75.0; 1
+IBM; IBM 2112; ibm2112; 31.0-38.0; 50.0-80.0; 1
+IBM; IBM 2113; ibm2113; 31.0-38.0; 50.0-80.0; 1
+IBM; IBM 2114; ibm2114; 31.0-62.0; 50.0-120.0; 1
+IBM; IBM 2115; ibm2115; 31.0-62.0; 50.0-120.0; 1
+IBM; IBM 2116 MM55 Multimedia; ibm0844; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 2117; ibm2117; 31.0-65.0; 50.0-120.0; 1
+IBM; IBM 2122; ibm2221; 30.0-54.0; 50.0-120.0; 1
+IBM; IBM 2122-xxL; ibm7234; 30.0-54.0; 50.0-110.0; 1
+IBM; IBM 2124; ibm2421; 30.0-54.0; 50.0-120.0; 1
+IBM; IBM 2124-xxL; ibm7254; 30.0-54.0; 50.0-110.0; 1
+IBM; IBM 2126; ibm2621; 30.0-69.0; 50.0-110.0; 1
+IBM; IBM 2127; ibm2721; 30.0-72.0; 50.0-120.0; 1
+IBM; IBM 2128 MM75 Multimedia; ibm0850; 30.0-69.0; 50.0-160.0; 1
+IBM; IBM 2131; ibm3121; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 2132; ibm3221; 30.0-72.0; 50.0-120.0; 1
+IBM; IBM 2215; ibm2215; 31.0-64.0; 50.0-120.0; 1
+IBM; IBM 2235 C50; ibm08bb; 30.0-54.0; 50.0-120.0; 1
+IBM; IBM 2236; ibm2236; 30.0-70.0; 50.0-120.0; 1
+IBM; IBM 2237 C71; ibm08bd; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 2238; ibm2238; 31.0-38.0; 50.0-80.0; 1
+IBM; IBM 2248; ibm2248; 31.0-48.0; 50.0-100.0; 1
+IBM; IBM 2264; ibm2264; 31.0-64.0; 50.0-120.0; 1
+IBM; IBM 6307; ibm6307; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 6312; ibm6312; 31.0-50.0; 47.0-100.0; 1
+IBM; IBM 6314; ibm6314; 30.0-60.0; 50.0-120.0; 1
+IBM; IBM 6315; ibm6315; 31.0-48.5; 50.0-90.0; 1
+IBM; IBM 6317; ibm6317; 30.0-64.0; 50.0-110.0; 1
+IBM; IBM 6319; ibm6319; 30.0-60.0; 50.0-120.0; 1
+IBM; IBM 6321; ibm6321; 31.5-38.0; 56.0-72.0; 1
+IBM; IBM 6322; ibm6322; 31.0-48.5; 50.0-90.0; 1
+IBM; IBM 6324; ibm6324; 30.0-64.0; 50.0-110.0; 1
+IBM; IBM 6325; ibm6325; 30.0-64.0; 50.0-110.0; 1
+IBM; IBM 6327; ibm6327; 30.0-64.0; 50.0-130.0; 1
+IBM; IBM 6331; ibm6331; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 6332; ibm6332; 30.0-70.0; 50.0-160.0; 1
+IBM; IBM 6332 E74; IBM18BC; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 6517; ibm6517; 30.0-70.0; 50.0-160.0; 1
+IBM; IBM 6518; ibm6518; 30.0-54.0; 50.0-120.0; 1
+IBM; IBM 6540 G42; ibm198c; 30.0-50.0; 55.0-100.0; 1
+IBM; IBM 6541 G51; ibm198d; 30.0-54.0; 55.0-100.0; 1
+IBM; IBM 6546 G52; ibm1992; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 6547 G72; ibm1993; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 6549 G94; ibm1995; 30.0-95.0; 50.0-160.0; 1
+IBM; IBM 6556 P72; ibm199c; 30.0-85.0; 50.0-150.0; 1
+IBM; IBM 6557 P92; ibm199d; 30.0-94.0; 50.0-160.0; 1
+IBM; IBM 6558 P202; ibm199e; 30.0-107.0; 50.0-160.0; 1
+IBM; IBM 6627; ibm6627; 30.0-85.0; 50.0-160.0; 1
+IBM; IBM 6634; ibm6634; 30.0-96.0; 50.0-160.0; 1
+IBM; IBM 6636; ibm6636; 30.0-61.0; 56.0-75.0; 1
+IBM; IBM 6637; ibm6637; 30.0-81.0; 56.0-75.0; 1
+IBM; IBM 6639; ibm6639; 30.0-94.0; 48.0-170.0; 1
+IBM; IBM 6651; ibm6651; 30.0-107.0; 48.0-170.0; 1
+IBM; IBM 6652; ibm6652; 30.0-130.0; 48.0-170.0; 1
+IBM; IBM 6656; ibm6656; 31.0-61.0; 56.0-75.0; 1
+IBM; IBM 6657; ibm6657; 30.0-81.0; 56.0-85.0; 1
+IBM; IBM 6658; ibm6658; 31.0-81.0; 56.0-85.0; 1
+IBM; IBM 6659; ibm6659; 31.0-120.0; 50.0-100.0; 1
+IBM; IBM 6734; ibm6734; 30.0-81.0; 55.0-75.0; 1
+IBM; IBM 6736a; ibm6736a; 31.0-94.0; 56.0-85.0; 1
+IBM; IBM 6736d; ibm6736a; 31.0-75.0; 56.0-85.0; 1
+IBM; IBM 6737; ibm6737; 30.0-85.0; 50.0-160.0; 1
+IBM; IBM 6739; ibm6739; 30.0-96.0; 50.0-160.0; 1
+IBM; IBM 7095; ibm1bb7; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 7097; ibm1bb9; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM 8504; ibm8504; 31.5; 60.0-70.0; 1
+IBM; IBM 8511; ibm8511; 31.5; 50.0-70.0; 1
+IBM; IBM 8512; ibm8512; 31.5; 60.0-70.0; 1
+IBM; IBM 8513; ibm8513; 31.5; 60.0-70.0; 1
+IBM; IBM 8514; ibm8514; 31.5; 60.0-70.0; 1
+IBM; IBM 8515; ibm8515; 35.5; 60.0-87.0; 1
+IBM; IBM 8517; ibm8517; 35.5; 60.0-87.0; 1
+IBM; IBM 8518; ibm8518; 31.5; 60.0-70.0; 1
+IBM; IBM 9494; ibm9494; 30.0-80.0; 56.0-85.0; 1
+IBM; IBM 9504; ibm9504; 101.66; 77.1; 1
+IBM; IBM 9512; ibm9512; 31.0-61.0; 56.0-75.0; 1
+IBM; IBM 9513 T55A TFT Monitor; ibm2529; 30.0-61.0; 56.0-75.0; 1
+IBM; IBM 9514-B TFT Panel; ibm252a; 48.0-65.0; 60.0-75.0; 1
+IBM; IBM 9515; ibm9515; 61.1; 50.0-90.0; 1
+IBM; IBM 9517; ibm9517; 59; 50.0-90.0; 1
+IBM; IBM 9518; ibm9518; 39.4; 50.0-90.0; 1
+IBM; IBM 9521; ibm9521; 30.0-68.0; 50.0-110.0; 1
+IBM; IBM 9524; ibm9524; 30.0-64.0; 50.0-110.0; 1
+IBM; IBM 9525; ibm9525; 30.0-64.0; 50.0-110.0; 1
+IBM; IBM 9525-0X1; ibm2535; 30.0-64.0; 50.0-110.0; 1
+IBM; IBM 9527; ibm9527; 30.0-82.0; 50.0-110.0; 1
+IBM; IBM Aptiva 9900; ibm26ac; 30.0-54.0; 50.0-120.0; 1
+IBM; IBM Aptiva 9901; ibm27ad; 30.0-54.0; 50.0-120.0; 1
+IBM; IBM C220p; IBM1A4F; 30.0-130.0; 50.0-160.0
+IBM; IBM G200; ibm1991; 31.0-82.0; 50.0-120.0; 1
+IBM; IBM G41; ibm198e; 31.0-58.5; 50.0-95.0; 1
+IBM; IBM G50; ibm198f; 31.0-58.5; 50.0-95.0; 1
+IBM; IBM G70; ibm1990; 31.0-64.0; 50.0-105.0; 1
+IBM; IBM MM55; ibm0844; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM MM75; ibm0850; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM P200; ibm199b; 29.0-90.0; 50.0-120.0; 1
+IBM; IBM P201; ibmp201; 30.0-107.0; 50.0-160.0; 1
+IBM; IBM P50; ibm1999; 30.0-69.0; 50.0-120.0; 1
+IBM; IBM P70; ibm199a; 29.0-82.0; 50.0-120.0; 1
+IBM; IBM P76; IBM1996; 30.0-94.0; 48.0-120.0
+ICL; ICL 14C; icl14c; 34.2-36.2; 50.0-90.0; 1
+ICL; ICL 14M; icl14m; 31.5; 70; 1
+ICL; ICL 14V; icl14v; 37.9; 58.0-75.0; 1
+ICL; ICL 15V; icl15v; 30.0-64.0; 50.0-100.0; 1
+ICL; ICL 17V; icl17v; 30.0-64.0; 50.0-100.0; 1
+ICL; ICL ErgoPro 140v; icl-ep140v; 37.9; 58.0-75.0; 1
+ICL; ICL ErgoPro 141p; icl0d00; 47.0-49.0; 50.0-90.0; 1
+ICL; ICL ErgoPro 141v; icl0b00; 37.9; 58.0-75.0; 1
+ICL; ICL ErgoPro 142v; icl1400; 37.9; 58.0-75.0; 1
+ICL; ICL ErgoPRO 14C; icl-ep14c; 47.0-49.0; 50.0-90.0; 1
+ICL; ICL ErgoPro 151p; icl0700; 30.0-64.0; 48.0-100.0; 1
+ICL; ICL ErgoPro 151p AutoBrite; icl0800; 30.0-64.0; 48.0-100.0; 1
+ICL; ICL ErgoPro 151v; icl0a00; 30.0-64.0; 50.0-100.0; 1
+ICL; ICL ErgoPro 152v; icl0f00; 30.0-64.0; 50.0-100.0; 1
+ICL; ICL ErgoPRO 15C; icl-ep15c; 30.0-62.0; 50.0-100.0; 1
+ICL; ICL ErgoPro 171p; icl0200; 30.0-82.0; 50.0-110.0; 1
+ICL; ICL ErgoPro 171v; icl0400; 30.0-64.0; 50.0-100.0; 1
+ICL; ICL ErgoPRO 17C; icl-ep17c; 30.0-82.0; 50.0-110.0; 1
+ICL; ICL ErgoPro 211v; icl0100; 24.0-82.0; 50.0-120.0; 1
+ICL; ICL ErgoPRO VE15C; icl-epve15c; 30.0-62.0; 48.0-100.0; 1
+ICL; ICL ErgoPRO VE15M; icl-epve15m; 44.5; 68.0-89.0; 1
+ICL; ICL SE14M; icl-se14m; 31.5; 70; 1
+ICL; ICL VE15C; icl-ve15c; 30.0-62.0; 48.0-100.0; 1
+ICL; ICL VE17C; icl-ve17c; 30.0-64.0; 48.0-100.0; 1
+Iiyama; Iiyama A101GT, VisionMasterPro 501; ivm2118; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama A102GT, VisionMasterPro 502; ivm2128; 27.0-110.0; 50.0-160.0; 1
+Iiyama; Iiyama A201HT, VisionMaster Pro 510; ivm2140; 30.0-130.0; 50.0-160.0; 1
+Iiyama; Iiyama A701GT, VisionMasterPro 400; ivm1711; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama A702HT, VisionMaster Pro 410; ivm1740; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama A705MT, VisionMaster Pro 411 /i70A; ivm174a; 30.0-86.0; 50.0-180.0; 1
+Iiyama; Iiyama A901HT, VisionMaster Pro 450; ivm1901; 27.0-115.0; 50.0-160.0; 1
+Iiyama; Iiyama A902MT, VisionMaster Pro 451; ivm1918; 30.0-115.0; 50.0-180.0; 1
+Iiyama; Iiyama AS4314UT 17inches; ivm4648; 24.0-80.0; 56.0-75.0; 1
+Iiyama; Iiyama AS4612UT 18inches; ivm4698; 24.0-80.0; 56.0-85.0; 1
+Iiyama; Iiyama DR-3114; dr-3114; 38.0; 43.0-70.0; 1
+Iiyama; Iiyama HM204DT, VisionMaster Pro 514; IVM216a; 30.0-142.0; 50.0-200.0; 1
+Iiyama; Iiyama HM704UTC, Diamondtron; ivm175c; 30.0-96.0; 50-160; 1
+Iiyama; Iiyama HM903DT, VisionMaster Pro 454; ivm1942; 30-132; 45-200; 1
+Iiyama; Iiyama LS902U; IVM1938; 30-96; 50-160
+Iiyama; Iiyama MA201D, VisionMaster Pro 511; ivm2150; 30.0-110.0; 50.0-180.0; 1
+Iiyama; Iiyama MA901U, VisionMaster Pro 452; ivm1928; 30.0-96.0; 50.0-180.0; 1
+Iiyama; Iiyama MF-5014A; mf-5014a; 15.5-38.5; 50.0-90.0; 1
+Iiyama; Iiyama MF-5015A; mf-5015a; 15.5-38.5; 50.0-90.0; 1
+Iiyama; Iiyama MF-5017; mf-5017; 15.0-40.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5021; mf-5021; 15.5-38.5; 50.0-90.0; 1
+Iiyama; Iiyama MF-5115; mf-5115; 21.8-50.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5117; mf-5117; 20.0-50.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5121A; mf-5121a; 30.0-65.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5214A; mf-5214a; 30.0-38.5; 50.0-90.0; 1
+Iiyama; Iiyama MF-5215A; mf-5215a; 30.0-38.5; 50.0-90.0; 1
+Iiyama; Iiyama MF-5217; mf-5217; 30.0-60.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5221; mf-5221; 30.0-80.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5315; mf-5315; 30.0-68.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5317; mf-5317; 30.0-65.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5321; mf-5321; 30.0-80.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5421; mf-5421; 30.0-80.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-5621; mf-5621; 30.0-80.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-8115, VisionMaster 15; mf-8115; 30.0-65.0; 50.0-100.0; 1
+Iiyama; Iiyama MF-8217; mf-8217; 30.0-60.0; 50.0-90.0; 1
+Iiyama; Iiyama MF-8221E/T, VisionMaster; ivm2100; 24-94; 50-160; 1
+Iiyama; Iiyama MF-8515G, VisionMaster; ivm1501; 27-69; 50-160; 1
+Iiyama; Iiyama MF-8617E/T, VisionMaster; ivm1700; 27-86; 50-160; 1
+Iiyama; Iiyama MF-8617ES, VisionMaster; ivm1701; 27-86; 50-160; 1
+Iiyama; Iiyama MF-8721E, VisionMaster; ivm2101; 27.0-110.0; 50.0-160.0; 1
+Iiyama; Iiyama MF901U, VisionMaster 452; ivm1920; 30.0-96.0; 50.0-180.0; 1
+Iiyama; Iiyama MR-5314; mf-5314; 30.0-60.0; 50.0-90.0; 1
+Iiyama; Iiyama MT-9017E/T, VisionMasterPro; ivm1730; 27-92; 50-160; 1
+Iiyama; Iiyama MT-9021E/T, VisionMasterPro; ivm2130; 24-94; 50-160; 1
+Iiyama; Iiyama MT-9221, VisionMasterPro; ivm2102; 27.0-110.0; 50.0-160.0; 1
+Iiyama; Iiyama Prolite H481S; IVM4826; 24-83; 55-76; 1280x1024
+Iiyama; Iiyama Prolite E485S; ivm4822; 30.0-83.0; 56.0-76.0; 1
+Iiyama; Iiyama S101GT, VisionMaster 501; ivm2110; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama S102GT, VisionMaster 502; ivm2120; 27.0-110.0; 50.0-160.0; 1
+Iiyama; Iiyama S103MT, VisionMaster 503; ivm2138; 27.0-110.0; 50.0-160.0; 1
+Iiyama; Iiyama S104MT, VisionMaster 504; ivm2148; 27.0-110.0; 50.0-160.0; 1
+Iiyama; Iiyama S500M1; ivm0815; 30.0-69.0; 50.0-120.0; 1
+Iiyama; Iiyama S700JT1; ivm17a8; 30.0-70.0; 50.0-160.0; 1
+Iiyama; Iiyama S701GT, VisionMaster 400; ivm1702; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama S702GT, VisionMaster 400; ivm1703; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama S703HT, VisionMaster 403; ivm1742; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama S704HT, VisionMaster 404; ivm1744; 27.0-96.0; 50.0-160.0; 1
+Iiyama; Iiyama S705MT, VisionMaster 405; ivm1748; 30.0-86.0; 50.0-180.0; 1
+Iiyama; Iiyama S901GT, VisionMaster 450; ivm1900; 27.0-102.0; 50.0-160.0; 1
+Iiyama; Iiyama S902JT, VisionMaster Pro 451; ivm1910; 27.0-115.0; 50.0-160.0; 1
+Iiyama; Iiyama TSA3931HT, Prolite39; ivm3900; 24.8-80.0; 56.0-85.0; 1
+Iiyama; Iiyama TSA4632HT, Prolite46; ivm4600; 24.8-80.0; 56.0-85.0; 1
+Iiyama; Iiyama TSA4633JT, Prolite46b; ivm4610; 24.8-80.0; 56.0-85.0; 1
+Iiyama; Iiyama TSA4634JT; ivm4618; 24.8-80.0; 56.0-85.0; 1
+Iiyama; Iiyama TXA3601GT; ivm3601; 31.5-60.0; 56.0-75.0; 1
+Iiyama; Iiyama TXA3602GT, Prolite36; ivm3602; 24.8-60.0; 56.0-75.0; 1
+Iiyama; Iiyama TXA3611/3621HT, Prolite36; ivm3604; 24.8-60.0; 56.0-75.0; 1
+Iiyama; Iiyama TXA3612JT, Prolite36c; ivm3606; 24.8-60.0; 56.0-75.0; 1
+Iiyama; Iiyama TXA3811/3821HT, Prolite38; ivm3801; 24.8-60.0; 56.0-75.0; 1
+Iiyama; Iiyama TXA3812JT/3822JT, Prolite38e/38f; ivm3810; 24.8-60.0; 56.0-75.0; 1
+Iiyama; Iiyama TXA3813/3823MT; ivm3820; 24.8-61.0; 55.0-76.0; 1
+Iiyama; Iiyama TXA3832HT, Prolite38c; ivm3808; 24.8-68.7; 56.0-85.0; 1
+Iiyama; Iiyama TXA3833JT, Prolite38g; ivm3818; 24.8-60.0; 56.0-75.0; 1
+Iiyama; Iiyama Vision Master MF-8221; mf-8221; 24.8-85.0; 50.0-120.0; 1
+Iiyama; Iiyama Vision Master MF-8317; mf-8317; 30.0-65.0; 50.0-90.0; 1
+Iiyama; Iiyama Vision Master MF-8421; mf-8421; 24.8-85.0; 50.0-120.0; 1
+Iiyama; Iiyama Vision Master MF-8617; mf-8617; 23.6-86.0; 50.0-120.0; 1
+Iiyama; Iiyama Vision Master MF-8617E; ivm1700; 23.6-86.0; 50.0-120.0; 1
+Iiyama; Iiyama Vision Master MF-8621; mf-8621; 24.8-85.0; 50.0-120.0; 1
+Iiyama; Iiyama Vision Master Pro 21 MT-9121; mf-9121; 25.0-90.0; 50.0-160.0; 1
+Ikegami; Ikegami C/CDE-165VB; cde-165vb; 48.0-64.0; 50.0-70.0; 1
+Ikegami; Ikegami C/DM-2010A; dm-2010a; 48.0-64.0; 50.0-70.0; 1
+Ikegami; Ikegami C/DM-2060; dm-2060; 48.0-64.0; 50.0-70.0; 1
+Ikegami; Ikegami CN-20; cn-20; 45.0-68.0; 50.0-150.0; 1
+Ikegami; Ikegami CT-20; ct-20; 48.0-64.0; 50.0-70.0; 1
+Image Systems Corp.; Image Systems C21LMAX; cs1lmax; 48.0-96.0; 60.0-80.0; 1
+Image Systems Corp.; Image Systems M24LMAX; m24lmax; 48.0-96.0; 60.0-80.0; 1
+ImageQuest Co., Ltd.; ImageFlat F770D; iqtf772; 30.0-70.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageFlat F790; iqtf790; 30.0-95.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest B70A; hiq5004; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest B70D Analog; hiq5008; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest B70D Digital; hiq5d08; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest B71D/B70D Analog; hiq501f; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest B71D/B70D Digital; hiq5d1f; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest B790+; iqt0790; 30.0-97.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest B90A; hiq5005; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest B91D/B70D Analog; hiq5020; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest B91D/B70D Digital; hiq5d20; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest F230; iqtf230; 30.0-125.0; 50.0-160.0; 1
+ImageQuest Co., Ltd.; ImageQuest F791; iqtf791; 30.0-96.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest G210; iqt0210; 30.0-110.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest L50A; iqt0520; 31.0-60.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L50S; iqt0503; 31.0-63.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L52S; hiq5006; 31.0-63.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L70A Analog; iqt70aa; 31.0-80.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L70A Digital; iqt70ad; 31.0-80.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L70D+ Analog; hiq70da; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L70D+ Digital; hiq70dd; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L70N; hiq0705; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L70S; iqt0703; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L72D Analog; hiq5002; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L72D Digital; hiq5003; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L72S; hiq5001; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L80A Analog; iqt80aa; 31.0-80.0; 56.0-87.0; 1
+ImageQuest Co., Ltd.; ImageQuest L80A Digital; iqt80ad; 31.0-80.0; 56.0-87.0; 1
+ImageQuest Co., Ltd.; ImageQuest L90D+ Analog; hiq91da; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest L90D+ Digital; hiq91dd; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest LM1510A; iqt151b; 31.0-60.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest N71S; hiq6001; 30-83; 56-75; 1
+ImageQuest Co., Ltd.; ImageQuest N91S; hiq6002; 30-83; 56-75; 1
+ImageQuest Co., Ltd.; ImageQuest P910+; iqt0910; 30.0-107.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest P990+; iqt0990; 30.0-95.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest Q15; iqt2015; 31.0-63.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest Q19+ D-sub; hiq500d; 31.0-83.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest Q19+ DVI; hiq5d0d; 31.0-67.0; 56.0-75.0; 1
+ImageQuest Co., Ltd.; ImageQuest Q770; iqt2770; 30.0-73.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest Q790; iqt2790; 30.0-97.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest Q910; iqt2910; 30.0-110.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest Q995; iqt2995; 30.0-97.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V560; iqt1560; 30.0-55.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V570; iqt1570; 30.0-70.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V770; iqt1770; 30.0-70.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V770+; iqt1772; 30.0-70.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V773; iqt1773; 30.0-73.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V780; iqt1780; 30.0-87.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V791; iqt1791; 30.0-95.0; 50.0-150.0; 1
+ImageQuest Co., Ltd.; ImageQuest V995; iqt1995; 30.0-97.0; 50.0-150.0; 1
+Impression; Impression 3 3428G; dcm-1488e; 35.5; 87.0; 1
+Impression; Impression 3 Plus 14; ma-1450; 35.5; 87.0; 1
+Impression; Impression 3 Plus 3428NG; dcm-1458e; 35.5; 87.0; 1
+Impression; Impression 3A; jd144c; 35.5; 87.0; 1
+Impression; Impression 4VX; jd144k; 48.0; 60.0; 1
+Impression; Impression 5 5528NG; dcm-1588e; 63.8; 60.0; 1
+Impression; Impression 5 Plus; dpc6515; 64.0; 60.0; 1
+Impression; Impression 50 Plus; dwe8251; 30.0-55.0; 50.0-120.0; 1
+Impression; Impression 5V J51A; jen9d00; 30-70; 60.0; 1
+Impression; Impression 5VM; dwe8351; 30.0-69.0; 50.0-120.0; 1
+Impression; Impression 5VX JD155L; jen5510; 30-55; 85.0; 1
+Impression; Impression 5VXL DE570BA; dpc7045; 30-70; 60.0; 1
+Impression; Impression 5VXM; dwe8f51; 30.0-54.0; 50.0-120.0; 1
+Impression; Impression 7 Plus DB770; da-1765; 64.0; 60.0; 1
+Impression; Impression 7 Plus DC-770 BA; dpc7017; 30-70; 50-120; 1
+Impression; Impression 7SP; imp4191; 30.0-70.0; 50.0-120.0; 1
+Impression; Impression 7VX; imp0295; 30.0-96.0; 65.0; 1
+Impression; Impression 9VX; dpc9509; 30-96; 60.0-85.0; 1
+Impression; Impression Vienna 15; dpc6515; 64.0; 60.0; 1
+Impression; Impression Vienna Pro 75; amt3844; 30.0-96.0; 65.0; 1
+Impression; Impression Vienna Pro 75; at1782d; 82.0; 65.0; 1
+Impression; Impression ViennaPro75; imp9802; 30.0-96.0; 65.0; 1
+Intra Electronics USA, Inc.; Intra Electronics USA CM-1403; cm-1403; 15.0-38.0; 40.0-100.0; 1
+Iocomm International Technology Corp.; Iocomm CM-7126; cm-7126; 30.0-75.0; 50.0-90.0; 1
+JVC Information Products Co.; JVC GD-H4220US; h422ous; 15.0-37.0; 45.0-87.0; 1
+KFC Computek Components Corp.; KFC Computek CA-17; ca-17; 30.0-64.0; 50.0-100.0; 1
+KFC Computek Components Corp.; KFC Computek CH-14; ch-14; 15.0-36.0; 50.0-86.0; 1
+KFC Computek Components Corp.; KFC Computek CM-14; cm-14; 30.0-64.0; 50.0-90.0; 1
+KFC; KFC CA/CB1414VX; sml1414; 30-48; 50-70; 1
+KFC; KFC CA/CB6415DX/6515DX; sml6415; 30-54; 50-100; 1
+KFC; KFC CA/CB6425DX/6525DX; sml6425; 30-54; 50-100; 1
+KFC; KFC CA/CB6736DL/SL(NF); sml501a; 30-65; 50-100; 1
+KFC; KFC CA/CB6738SL; sml6738; 30-85; 50-100; 1
+KFC; KFC CA/CB6748SL; sml6748; 30-86; 50-150; 1
+KFC; KFC CA15/1505/1506/1507/1515DX; sml1506; 30-60; 50-100; 1
+KFC; KFC CA1511VX/CA1515VX; sml1511; 30-60; 50-100; 1
+KFC; KFC CA1516CX/CA1716CX; kfcec05; 30-65; 50-75; 1
+KFC; KFC CA1702/03/05/06 M2; sml1706; 30-80; 50-100; 1
+KFC; KFC CA1712/13/17/18; sml1718; 30-64; 50-100; 1
+KFC; KFC CA2011M2; sml2011; 30-80; 50-120; 1
+KFC; KFC CA2111M2; sml2111; 30-80; 50-120; 1
+KFC; KFC CA6013DX/CA9013DX; sml6013; 30-38; 50-75; 1
+KFC; KFC CA6719/29SL/CA6919/29SL; sml6719; 30-95; 50-150; 1
+KFC; KFC CA8111SL; sml8111; 30-107; 50-160; 1
+KFC; KFC CA8719SL; sml8719; 30-95; 50-150; 1
+KFC; KFC CA8729SL; sml8729; 30-95; 50-160; 1
+KFC; KFC CA8911SL; sml8911; 30-107; 50-160; 1
+KFC; KFC CA8919SL; sml8919; 30-95; 50-160; 1
+KFC; KFC CA8929SL; sml8929; 30-95; 50-160; 1
+KFC; KFC L133/L133E; smll133; 30-61; 55-75; 1
+KFC; KFC L150/L150E; smll150; 30-61; 55-75; 1
+KFC; KFC MA0933; sml0933; 30-31.5; 50-70; 0
+KFC; KFC MM/CA/CB6536DL/SL(NF); sml8819; 30-65; 50-100; 1
+KFC; KFC MM/CA/CB6746SL; sml6746; 30-70; 50-120; 1
+KFC; KFC MM/CA6546SX/(NF)/(MN); sml6546; 30-70; 50-100; 1
+KLH Computers; KLH Computers MN275; mn275; 34.5-38.5; 50.0-90.0; 1
+Komodo; Komodo P571; 0; 30-70; 50-120
+Korea Data Systems; KDS Avitron AV-5T; kds1540; 30.0-70.0; 50.0-120.0; 1
+Korea Data Systems; KDS Avitron AV-7T; kds1740; 30.0-70.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-19; kds07d0; 31.0-95.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-19; kdsd007; 30.0-95.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-190/VS-195e/VS-195i; STC0812; 30.0-95.0; 50.0-120.0
+Korea Data Systems; KDS Visual Sensations VS-190i; STC0812; 30.0-95.0; 50.0-120.0
+Korea Data Systems; KDS Visual Sensations VS-190is; STC0812; 30.0-96.0; 50.0-160.0
+Korea Data Systems; KDS Visual Sensations VS-190p; STC0812; 30.0-96.0; 50.0-160.0
+Korea Data Systems; KDS Visual Sensations VS-195; kds1980; 30.0-95.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-195xp; STC0812; 30.0-96.0; 50.0-160.0
+Korea Data Systems; KDS Visual Sensations VS-19SN; kds1981; 30.0-95.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-21; kds0834; 30.0-117.0; 50.0-160.0; 1
+Korea Data Systems; KDS Visual Sensations VS-21; kds3408; 30.0-117.0; 50.0-160.0; 1
+Korea Data Systems; KDS Visual Sensations VS-4; kdsab05; 48.3; 60.0; 1
+Korea Data Systems; KDS Visual Sensations VS-4(KD-1452); kds05ac; 28.0-50.0; 40.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-450; STC01FF; 30.0-50.0; 50.0-90.0
+Korea Data Systems; KDS Visual Sensations VS-4D; kds05af; 28.0-55.0; 40.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-4D; kdsaf05; 28.0-55.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-5; kdse605; 28.0-70.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-5/VS-51/VSx-5; kds05e6; 30.0-70.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-55; kds05f5; 28.0-55.0; 40.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-55; kdsf505; 28.0-55.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-55i/VS-55p; STC01FF; 30.0-58.0; 50.0-120.0
+Korea Data Systems; KDS Visual Sensations VS-7; kdsc206; 30.0-70.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-7/VSx-7; kds06c2; 30.0-70.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-70/VS-77/VS-7b/VS-7p; STC02CE; 30.0-72.0; 50.0-160.0
+Korea Data Systems; KDS Visual Sensations VS-9; kds06d6; 31.0-95.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VS-9; kdsd606; 30.0-95.0; 50.0-120.0; 1
+Korea Data Systems; KDS Visual Sensations VSx-5; kdsfa05; 28.0-70.0; 50.0-120.0; 1
+Korea Data Systems; KDS XFlat XF-70/XF-7b/XF-7e/XF-71/XF-7p; STC0777; 30.0-72.0; 50.0-160.0
+Korea Data Systems; KDS XFlat XF-9b/XF-9c/XF-9e/XF-9p; PTS03E5; 30.0-98.0; 50.0-160.0
+Leading Technology, Inc.; Leading Technology 1730S; 1730s; 21.0-50.0; 50.0-90.0; 1
+Lenovo; Lenovo D153; LEN1154; 30.0-60.0; 50.0-75.0; 1
+Lenovo; Lenovo E50; LEN1976; 30-58; 50-120; 1
+Lenovo; Lenovo E74; LEN18BC; 30.0-72.0; 50.0-130.0; 1
+Lenovo; Lenovo E75; LEN1975; 30-70; 50-160; 1
+Lenovo; Lenovo L151; LEN23CD; 30.0-63.0; 56.0-76.0; 1
+Lenovo; Lenovo L151P(Analog); LEN23F5; 30.0-63.0; 56.0-77.0; 1
+Lenovo; Lenovo L151P(Digital); LEN23F5; 30.0-63.0; 56.0-77.0; 1
+Lenovo; Lenovo L152; LEN24C7; 30.0-60.0; 50.0-75.0; 1
+Lenovo; Lenovo L171p(Analog); LEN24C9; 30.0-81.0; 56.0-76.0; 1
+Lenovo; Lenovo L171p(Digital); LEN4BD9; 30.0-81.0; 56.0-76.0; 1
+Lenovo; Lenovo L172; LEN114C; 30.0-83.0; 55.0-75.0; 1
+Lenovo; Lenovo L190xC (Analog); LEN1157; 30.0-75.0; 50.0-75.0; 1
+Lenovo; Lenovo L190xC (Digital); LEN1157; 30.0-75.0; 50.0-75.0; 1
+Lenovo; Lenovo L191; LEN17F7; 30.0-81.0; 55.0-76.0; 1
+Lenovo; Lenovo L192 Wide; LEN6920; 30.0-80.0; 50.0-75.0; 1
+Lenovo; Lenovo L192p(Analog); LEN24CB; 30.0-81.0; 56.0-76.0; 1
+Lenovo; Lenovo L192p(Digital); LEN4BDB; 30.0-81.0; 56.0-76.0; 1
+Lenovo; Lenovo L193 Wide; LEN1B08; 30.0-80.0; 50.0-75.0; 1
+Lenovo; Lenovo L193pC (Analog); LEN114F; 30.0-81.0; 56.0-76.0; 1
+Lenovo; Lenovo L193pC (Digital); LEN114F; 30.0-81.0; 56.0-76.0; 1
+Lenovo; Lenovo L194W Wide LCD Monitor; LEN4434; 24.0-83.0; 50.0-76.0; 1
+Lenovo; Lenovo L200pwD LCD Monitor; LEN1156; 30.0-83.0; 50.0-76.0; 1
+Lenovo; Lenovo L220xwC(Analog); LEN4433; 30.0-94.0; 50.0-75.0; 1
+Lenovo; Lenovo L220xwC(Digital); LEN4433; 30.0-75.0; 50.0-75.0; 1
+LG Electronics Inc.; LG 1455; 1455; 37.9; 72.8; 1
+LG Electronics Inc.; LG 1455D; 1455d; 37.9; 72.8; 1
+LG Electronics Inc.; LG 1455DL; 1455dl; 37.9; 72.8; 1
+LG Electronics Inc.; LG 1460DL; 1460dl; 37.9; 72.8; 1
+LG Electronics Inc.; LG 1461D; 1461d; 37.9; 72.8; 1
+LG Electronics Inc.; LG 1462DM; 1462dm; 37.9; 72.8; 1
+LG Electronics Inc.; LG 1465DL; 1465dl; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1465DLS; 1465dls; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1465DLS/1468; GSM36BA; 30.0-54.0; 50.0-90.0; 1
+LG Electronics Inc.; LG 1466; 1466; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1466DM; 1466dm; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1466LR; 1466lr; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1466LRS; 1466lrs; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1467; 1467; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1468; 1468; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1485; 1485; 48.4; 60.0; 1
+LG Electronics Inc.; LG 1505; 1505; 37.5; 75.0; 1
+LG Electronics Inc.; LG 1505S; GSM3AA0; 30.0-54.0; 50.0-90.0; 1
+LG Electronics Inc.; LG 1515; 1515; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1520; 1520; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1520DM; 1520dm; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1527; 1527; 30.0-57.0; 50.0-110.0; 1
+LG Electronics Inc.; LG 1527; gsm3a9a; 30.0-57.0; 50.0-110.0; 1
+LG Electronics Inc.; LG 1725; 1725; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1725DM; 1725dm; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1725s; gsm42cf; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1727; 1727; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1730DM; 1730dm; 30.0-82.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 1771; GSM42F8; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 2010; 2010; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 285LT; GSM55F1; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 291U; GSM5215; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 295LM; GSM55F2; 30.0-94.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 500E; GSM3B65; 30.0-54.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 500G; GSM3B66; 30.0-54.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 500M; GSM3B38; 30.0-61.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 500N; GSM3B67; 30.0-54.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 501E; GSM3B51; 30.0-61.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 501S; GSM3B50; 30.0-61.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 505E; GSM3B83; 30.0-54.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 505G; GSM3B91; 30.0-54.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 55W; GSM3AD0; 30.0-54.0; 50.0-90.0; 1
+LG Electronics Inc.; LG 563A / 563N; GSM3B1B; 30.0-63.0; 50.0-120.0; 1
+LG Electronics Inc.; LG 563LE; GSM3B2F; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 563LS; GSM3B25; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 564LE; GSM3B4B; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 566LE; GSM3B60; 30.0-63.0; 50.0-75.0; 1
+LG Electronics Inc.; LG 566LM; GSM3B5D; 30.0-63.0; 50.0-75.0; 1
+LG Electronics Inc.; LG 568LM; GSM3B43; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 568LT; GSM3B5F; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 575E; GSM3B10; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 575LB / 575LE / 575MS; GSM3B34; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 575LC; GSM3B44; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 575LE; GSM3B02; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 575LM; GSM3B03; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 575LM-2; GSM3B35; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 575LS; GSM3B32; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 575MM; GSM3B07; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 575MS; GSM3B06; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 576LU; GSM3B08; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 577LH; GSM3B09; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 577LH-2; GSM3B3D; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 577LM; GSM3B0A; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 577LM-2; GSM3B3E; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 585E; GSM3B23; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 680LE; GSM3E81; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 700B; GSM430C; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 700E; GSM4317; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 700M; GSM4336; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 700ME; GSM4335; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 700P; GSM43B9; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 700S; GSM430B; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 701B; GSM432C; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 701S; GSM432B; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 702B; GSM434F; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 702BE; GSM4398; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 702S; GSM4350; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 710E; GSM437C; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 710S; GSM4378; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 771EF; GSM4305; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 772E; GSM4311; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 772EF; GSM431F; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 772EF PLUS; GSM4345; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 772EH PLUS; GSM4355; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 772G; GSM4316; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 773E; GSM42EF; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 773N; GSM42ED; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 774FT; GSM42DB; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 774FT PLUS; GSM437D; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 775E; GSM42E7; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 775FC; GSM42F5; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 775FT; GSM42D1; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 775FT PLUS; GSM4349; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 775N; GSM42B9; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 776FM; GSM42F1; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 777FN; GSM42F7; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 77E; GSM42E5; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 77G; GSM42E4; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 77SFN / 77SFT; GSM431A; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 781C; GSM4312; 30.0-86.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 782LE; GSM4327; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 782LM; GSM4341; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 782LS; GSM4351; 30.0-80.0; 56.0-75.0; 1
+LG Electronics Inc.; LG 786LS; GSM4353; 30.0-83.0; 55.0-75.0; 1
+LG Electronics Inc.; LG 787LE; GSM437E; 30.0-83.0; 50.0-75.0; 1
+LG Electronics Inc.; LG 78FT; GSM4298; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 793FT; GSM42EA; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 793FT PLUS; GSM42EB; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 795FT; GSM42DC; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 795FT; gsm42c6; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 795FT PLUS/795FT SUPER; GSM42DD; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 870LE; GSM4657; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 882LE; GSM4656; 31.0-80.0; 58.0-120.0; 1
+LG Electronics Inc.; LG 882SL; GSM4654; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 885LE; GSM4653; 31.0-80.0; 56.0-120.0; 1
+LG Electronics Inc.; LG 885LE-2; GSM4655; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG 900B; GSM4A5B; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 900B Plus; GSM4A5C; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 901B; GSM4A68; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 910B; GSM4A7D; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 910E; GSM4A7E; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 910S; GSM4A7A; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 915FT PLUS; GSM4A4D; 30.0-107.0; 50.0-200.0; 1
+LG Electronics Inc.; LG 915FT SUPER (Analog); GSM4A63; 30.0-110.0; 50.0-200.0; 1
+LG Electronics Inc.; LG 915FT SUPER (Digital); GSM4A65; 30.0-92.0; 50.0-87.0; 1
+LG Electronics Inc.; LG 995FT PLUS; GSM4A5D; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 995SU; GSM4A55; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG 99G; GSM4A54; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG CB910C; GSM4A40; 30.0-100.0; 50.0-200.0; 1
+LG Electronics Inc.; LG CF786C; GSM429F; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG CS778DC; GSM42CA; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG CS788C; GSM42A9; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG CS788T; GSM4293; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG CS911; GSM4A4E; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG CS990DC; GSM4A50; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG CS990DE; GSM4A53; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG E700B; GSM4313; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG E700BH; GSM4352; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG E700BH/SH; GSM4389; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG E700S; GSM430D; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG E701S; GSM4340; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG E900B; GSM4A5E; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG E900P; GSM4A62; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG EB771D; GSM4323; 31.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T707B; GSM43F1; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T707S; GSM43F2; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T710BH; GSM4366; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T710MH; GSM43AD; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T710P; GSM4368; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T710PH; GSM4367; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T710PU; GSM437A; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T710S; GSM436C; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T710SH; GSM436B; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T711S; GSM4397; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T730B; GSM43BF; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T730BH; GSM43C2; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T730BH plus; GSM43C1; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T730PH; GSM43E2; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T730PU plus; GSM43CA; 30.0-85.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T730S; GSM43F8; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T730SH; GSM43CB; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T910B; GSM4A6D; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T910BH; GSM4A6E; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG ez T910BU; GSM4A6C; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F700B; GSM4344; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F700P; GSM434C; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F700PD (Analog); GSM435A; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F700PD (Digital); GSM4359; 30.0-90.0; 50.0-87.0; 1
+LG Electronics Inc.; LG F700PH; GSM435C; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F702B/710B; GSM437B; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F702P; GSM4379; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F702PU; GSM4387; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F710B; GSM436E; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F720B; GSM4396; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F720P; GSM4395; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F720PD (Analog); GSM4394; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F720PD (Digital); GSM4393; 30.0-92.0; 50.0-87.0; 1
+LG Electronics Inc.; LG F730B; GSM43C3; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F730BY; GSM43D7; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F730P; GSM43C4; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F900B; GSM4A66; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F900BL; GSM4A6A; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F900P; GSM4A67; 30.0-111.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F900PL; GSM4A6B; 30.0-111.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F920B; GSM4A95; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG F920P; GSM4A88; 30.0-111.0; 50.0-160.0; 1
+LG Electronics Inc.; LG L1510A; GSM3B69; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510B; GSM3B5C; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510BF; GSM3B7E; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510H; GSM3B70; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510M; GSM3B61; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510P (Analog); GSM3B62; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510P (Digital); GSM3B76; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510P Plus (Analog); GSM3B77; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510P Plus (Digital); GSM3B78; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510S; GSM3B55; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510SF; GSM3B73; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510SG; GSM3B8D; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1510T; GSM3B6A; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1511S; GSM3B59; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1511SK; GSM3B68; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1512S; GSM3B64; 30.0-63.0; 50.0-75.0; 1
+LG Electronics Inc.; LG L1515S; GSM3B7C; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1515SR; GSM3B94; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1516S; GSM3B85; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1520B; GSM3B80; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1520P (Analog); GSM3B8E; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1520P (Digital); GSM3B90; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1521B; GSM3BA6; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1530B (Analog); GSM3B96; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1530B (Digital); GSM3B97; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1530P (Analog); GSM3B98; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1530P (Digital); GSM3B99; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1530S; GSM3B95; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1530TM (Analog); GSM3B92; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1530TM (Digital); GSM3B93; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1550G; GSM3BAE; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1550S; GSM3BA7; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1710B (Analog); GSM4356; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1710B (Digital); GSM4358; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1710M; GSM4370; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1710P (Analog); GSM4384; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1710P (Digital); GSM4388; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1710S; GSM4357; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1711S; GSM4371; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1712T (Analog); GSM4443; 30.0-83.0; 50.0-75.0; 1
+LG Electronics Inc.; LG L1712T (Digital); GSM4444; 30.0-71.0; 50.0-75.0; 1
+LG Electronics Inc.; LG L1713P (Analog); GSM43AB; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1713P (Digital); GSM43AC; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1714SQ; GSM4400; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1715S; GSM436F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1715SR; GSM438B; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1716S; GSM4373; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1717S; GSM4404; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1718S; GSM443C; 30.0-83.0; 50.0-75.0; 1
+LG Electronics Inc.; LG L1719S; GSM4441; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1719SP; GSM444C; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L171WT; GSM43A6; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1720B; GSM4372; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720B Plus; GSM43BC; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720BQ; GSM4418; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720BU; GSM442E; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720P (Analog); GSM437F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720P (Digital); GSM4383; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720P Plus (Analog); GSM43BD; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720P Plus (Digital); GSM43BE; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720PQ (Analog); GSM4419; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1720PQ (Digital); GSM441A; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1721B; GSM43DF; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1722P (Analog); GSM43FD; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1722P (Digital); GSM43FE; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L172WA; GSM4390; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L172WT; GSM4385; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1730B (Analog); GSM438E; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1730B (Digital); GSM438F; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1730P (Analog); GSM439D; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1730P (Digital); GSM439E; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1730S; GSM438D; 30.0-83.0; 56.0-75.0; 1280x1024
+LG Electronics Inc.; LG L1730SF; GSM43D5; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1730SY; GSM43D8; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732P (Analog); GSM441D; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732P (Digital); GSM441E; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732P Plus (Analog); GSM4459; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732P Plus (Digital); GSM445A; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732S; GSM4413; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732S PLUS; GSM444F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732TQ (Analog); GSM43E9; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732TQ (Digital); GSM43F9; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732TX (Analog); GSM4401; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1732TX (Digital); GSM440A; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L173SA (Analog); GSM43A9; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L173SA (Digital); GSM43AA; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L173ST (Analog); GSM43B0; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L173ST (Digital); GSM43B1; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L173WT (Analog); GSM43EC; 30.0-66.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L173WT (Digital); GSM43ED; 30.0-66.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740B; GSM43D4; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740B PLUS; GSM4450; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740BQ; GSM43E5; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740BU; GSM442F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740P (Analog); GSM43CF; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740P (Digital); GSM43D0; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740P Plus (Analog); GSM4451; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740P Plus (Digital); GSM4452; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740PQ (Analog); GSM43E6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1740PQ (Digital); GSM43E7; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750B (Analog); GSM4406; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750B (Digital); GSM4407; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750E; GSM4405; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750G; GSM43FF; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750H (Analog); GSM43CD; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750H (Digital); GSM43CE; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750HQ (Analog); GSM43EA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750HQ (Digital); GSM43EB; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750S; GSM43CC; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750SQ; GSM43E8; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750T (Analog); GSM4420; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1750T (Digital); GSM4421; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1751H (Analog); GSM43DA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1751H (Digital); GSM43DB; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1751S; GSM43D9; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1751SQ; GSM43F3; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752H (Analog); GSM443D; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752H (Digital); GSM443E; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752HM (Analog); GSM443F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752HM (Digital); GSM4440; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752HQ (Analog); GSM4457; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752HQ (Digital); GSM4458; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752S; GSM4432; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752T (Analog); GSM4433; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752T (Digital); GSM4434; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752TQ (Analog); GSM4453; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752TQ (Digital); GSM4454; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752TX (Analog); GSM4435; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1752TX (Digital); GSM4436; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1760SR; GSM445C; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1760TG (Analog); GSM4455; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1760TG (Digital); GSM4456; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1760TQ (Analog); GSM4446; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1760TQ (Digital); GSM4447; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1760TR (Analog); GSM445D; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1760TR (Digital); GSM445E; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1770H (Analog); GSM4425; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1770H (Digital); GSM4426; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1770HQ (Analog); GSM4408; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1770HQ (Digital); GSM4409; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1780Q (Analog); GSM43E0; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1780Q (Digital); GSM43E1; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1780Q Plus (Analog); GSM441B; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1780Q Plus (Digital); GSM441C; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1780U (Analog); GSM43BA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1780U (Digital); GSM43BB; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1781Q/U (Analog); GSM43DC; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1781Q/U (Digital); GSM43DD; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1800P (Analog); GSM4659; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1800P (Digital); GSM466C; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1800P Plus (Analog); GSM466A; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1800P Plus (Digital); GSM466B; 30.0-71.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1800PK (Analog); GSM465E; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1800PK (Digital); GSM466E; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1800PM (Analog); GSM465C; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1800PM (Digital); GSM466D; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1810A (Analog); GSM4661; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1810A (Digital); GSM4664; 30.0-71.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1810B (Analog); GSM465D; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1810B (Digital); GSM4668; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1810M (Analog); GSM4660; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1810M (Digital); GSM4663; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1810S; GSM465B; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1810T (Analog); GSM4666; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1810T (Digital); GSM4667; 30.0-71.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1810TS (Analog); GSM466F; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1810TS (Digital); GSM4670; 30.0-71.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L1811B (Analog); GSM465F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1811B (Digital); GSM4669; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1811S (Analog); GSM4662; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1811S (Digital); GSM4665; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1900E (Analog); GSM4AFF; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1900E (Digital); GSM4B00; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1900J (Analog); GSM4B01; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1900J (Digital); GSM4B02; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1900R (Analog); GSM4AFD; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1900R (Digital); GSM4AFE; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910B (Analog); GSM4A70; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910B (Digital); GSM4A71; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910BA (Analog); GSM4A9E; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910BA (Digital); GSM4A9F; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910BG (Analog); GSM4A7F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910BG (Digital); GSM4A80; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910BM (Analog); GSM4A74; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910BM (Digital); GSM4A75; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910P (Analog); GSM4A72; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910P (Digital); GSM4A73; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910PM (Analog); GSM4A76; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910PM (Digital); GSM4A77; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910S; GSM4A78; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910SA; GSM4A9D; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1910SM; GSM4A8A; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1912T (Analog); GSM4AF4; 30.0-83.0; 50.0-75.0; 1
+LG Electronics Inc.; LG L1912T (Digital); GSM4AF5; 30.0-71.0; 50.0-75.0; 1
+LG Electronics Inc.; LG L1913P (Analog); GSM4A8E; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1913P (Digital); GSM4A8F; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1915S; GSM4A90; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1915SV; GSM4A9B; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1917S; GSM4AC6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1919S; GSM4AF2; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1919SP; GSM4B07; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1920B; GSM4A84; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1920P (Analog); GSM4A7B; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1920P (Digital); GSM4A7C; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1920P Plus (Analog); GSM4A99; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1920P Plus (Digital); GSM4A9A; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1921B; GSM4AAD; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1922P (Analog); GSM4AC4; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1922P (Digital); GSM4AC5; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930B (Analog); GSM4A85; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930B (Digital); GSM4A86; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930BQ (Analog); GSM4A94; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930BQ (Digital); GSM4A96; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930P (Analog); GSM4A82; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930P (Digital); GSM4A83; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930PE (Analog); GSM4AA8; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930PE (Digital); GSM4AA9; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930S; GSM4A87; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1930SQ; GSM4A93; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932P (Analog); GSM4AD4; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932P (Digital); GSM4AD5; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932P Plus (Analog); GSM4B1C; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932P Plus (Digital); GSM4B1D; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932S; GSM4ACD; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932S PLUS; GSM4B12; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932TQ (Analog); GSM4AB6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932TQ (Digital); GSM4AB7; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932TX (Analog); GSM4AE3; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1932TX (Digital); GSM4AE4; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L193SA (Analog); GSM4A8C; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L193SA (Digital); GSM4A8D; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L193ST (Analog); GSM4A91; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L193ST (Digital); GSM4A92; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940B; GSM4AA6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940B PLUS; GSM4B13; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940BQ; GSM4AD2; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940P (Analog); GSM4AA4; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940P (Digital); GSM4AA5; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940P Plus (Analog); GSM4B14; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940P Plus (Digital); GSM4B15; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940PQ (Analog); GSM4AD0; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1940PQ (Digital); GSM4AD1; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L194WT (Analog); GSM4B05; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L194WT (Digital); GSM4B06; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L194WTM (Analog); GSM4B0C; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L194WTM (Digital), GSM4B0D; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L194WTQ (Analog); GSM4B0E; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L194WTQ (Digital); GSM4B0F; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950B (Analog); GSM4AC8; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950B (Digital); GSM4AC9; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950E; GSM4AC7; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950G; GSM4ABE; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950H (Analog); GSM4AA2; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950H (Digital); GSM4AA3; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950S; GSM4AA1; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950SQ; GSM4AD3; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950T (Analog); GSM4ACA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1950T (Digital); GSM4ACB; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1951H (Analog); GSM4AAB; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1951H (Digital); GSM4AAC; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1951S; GSM4AAA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1951SQ; GSM4AD6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952H (Analog); GSM4AEC; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952H (Digital); GSM4AED; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952HM (Analog); GSM4AEE; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952HM (Digital); GSM4AEF; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952HQ (Analog); GSM4B08; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952HQ (Digital); GSM4B09; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952S; GSM4AE0; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952T (Analog); GSM4AE1; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952T (Digital); GSM4AE2; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952TQ (Analog); GSM4B16; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952TQ (Digital); GSM4B17; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952TX (Analog); GSM4AE6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1952TX (Digital); GSM4AE7; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1960TG (Analog); GSM4B18; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1960TG (Digital); GSM4B19; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1960TQ (Analog); GSM4AF9; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1960TQ (Digital); GSM4AFA; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1960TR (Analog); GSM4B20; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1960TR (Digital); GSM4B21; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1970H (Analog); GSM4ADB; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1970H (Digital); GSM4ADC; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1970HQ (Analog); GSM4AD7; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1970HQ (Digital); GSM4AD8; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1970HR (Analog); GSM4AE8; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1970HR (Digital); GSM4AE9; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1980Q (Analog); GSM4AB2; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1980Q (Digital); GSM4AB3; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1980Q Plus (Analog); GSM4ACE; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1980Q Plus (Digital); GSM4ACF; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1980U (Analog); GSM4A97; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1980U (Digital); GSM4A98; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1981Q/U (Analog); GSM4AAE; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1981Q/U (Digital); GSM4AAF; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1982U (Analog); GSM4B0A; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L1982U (Digital); GSM4B0B; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000C (Analog); GSM4E39; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000C (Digital); GSM4E3A; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CE (Analog); GSM4E41; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CE (Digital); GSM4E42; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CEM (Analog); GSM4E43; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CEM (Digital); GSM4E44; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CM (Analog); GSM4E45; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CM (Digital); GSM4E46; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CN (Analog); GSM4E52; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2000CN (Digital); GSM4E53; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2010B (Analog) GSM4E2A; 28.0-92.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2010B (Digital); GSM4E2B; 28.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2010P (Analog); GSM4E27; 30.0-96.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2010P (Digital); GSM4E28; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2010T (Analog); GSM4E35; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2010T (Digital); GSM4E36; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2012P (Analog); GSM4E37; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2012P (Digital); GSM4E38; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2013P (Analog); GSM4E2E; 28.0-92.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2013P (Digital); GSM4E2F; 28.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L203WT (Analog); GSM4E3D; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L203WT (Digital); GSM4E3E; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L203WTX (Analog); GSM4E3F; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L203WTX (Digital); GSM4E40; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2040P (Analog); GSM4E30; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2040P (Digital); GSM4E31; 28.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L204WT (Analog); GSM4E47; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L204WT (Digital); GSM4E48; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L204WTM (Analog); GSM4E49; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L204WTM (Digital); GSM4E4A; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L204WTQ (Analog); GSM4E4B; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L204WTQ (Digital); GSM4E4C; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L222W (Analog); GSM5664; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L222W (Digital); GSM5665; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2300B (Analog); GSM5611; 30.0-92.0; 57.0-85.0; 1
+LG Electronics Inc.; LG L2300B (Digital); GSM5612; 30.0-75.0; 57.0-63.0; 1
+LG Electronics Inc.; LG L2300C (Analog); GSM5613; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2300C (Digital); GSM5614; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2320A (ANALOG); GSM55F5; 30.0-96.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2320A (DVI-D); GSM55F7; 30.0-71.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2320A (DVI-I); GSM55F6; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2320T (ANALOG); GSM55F8; 30.0-96.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2320T (DVI-D); GSM55FA; 30.0-71.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2320T (DVI-I); GSM55F9; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L2323T (Analog); GSM55FD; 30.0-66.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L2323T (Digital); GSM55FE; 30.0-66.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L245WP (Analog); GSM5623; 28.0-84.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L245WP (Digital); GSM5624; 28.0-84.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L245WPM (Analog); GSM562B; 28.0-84.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L245WPM (Digital); GSM562C; 28.0-84.0; 56.0-75.0; 1
+LG Electronics Inc.; LG L3000A (Analog); GSM7531; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3000A (Digital); GSM7532; 30.0-63.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3000H (Analog); GSM7537; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3000H (Digital); GSM7538; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3010T (Analog); GSM753B; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3010T (Digital); GSM753C; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3020A (Analog); GSM7535; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3020A (Digital); GSM7536; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3020AL/T (Analog); GSM7533; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3020AL/T (Digital); GSM7534; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3200A (Analog); GSM754F; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3200A (Digital); GSM7550; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3200T (Analog); GSM7549; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3200T (Digital); GSM754A; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3700A (Analog); GSM754D; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3700A (Digital); GSM754E; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3700T (Analog); GSM7547; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L3700T (Digital); GSM7548; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L4200A (Analog); GSM9C41; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L4200A (Digital); GSM9C42; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L4200T (Analog); GSM9C43; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG L4200T (Digital); GSM9C44; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG LB500; GSM3B6F; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LB563B; GSM3B3A; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LG777; GSM4320; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LGIBM 1510TFT; GSM3B5A; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 1510TXW; GSM3B6B; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 1520TFT; GSM3B9C; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 1710TFT (Analog); GSM4360; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 1710TFT (Digital); GSM4364; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 1711TFT; GSM4376; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 1770X; GSM431C; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LGIBM 1771FT; GSM42D3; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LGIBM 1771FT PLUS; GSM434D; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LGIBM 1771FXW; GSM4330; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LGIBM 1771X; GSM4380; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LGIBM 1772 SUPER; GSM4342; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LGIBM 1910TFT (Digital); GSM4A89; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 568TXW; GSM3B49; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 571TFT; GSM3B2D; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LGIBM 871TFT; GSM465A; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG LN777F; GSM431D; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LPL-22W03 (Analog); GSM55FB; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG LPL-22W03 (Digital); GSM55FC; 30.0-64.0; 60.0-60.0; 1
+LG Electronics Inc.; LG LS773; GSM4318; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG LX151; GSM3BA2; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX151M; GSM3BA3; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX152; GSM3BAA; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX171; GSM43C7; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1717; GSM4415; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX171D (Analog); GSM43C5; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX171D (Digital); GSM43C6; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX172; GSM43C9; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1721; GSM43DE; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX174D (Analog); GSM43F4; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX174D (Digital); GSM43F5; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1751Q; GSM43FA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1751QD (Analog); GSM43FB; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1751QD (Digital); GSM43FC; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX178QD (Analog); GSM43EE; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX178QD (Digital); GSM43EF; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX191; GSM4ABA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX191D (Analog); GSM4A9C; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX191D (Digital); GSM4AB0; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1921; GSM4AB1; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX194D (Analog); GSM4ABB; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX194D (Digital); GSM4ABC; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1951; GSM4AC0; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1951D (Analog); GSM4AC2; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX1951D (Digital); GSM4AC3; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX198QD (Analog); GSM4AB8; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX198QD (Digital); GSM4AB9; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX20D (Analog); GSM4E4E; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX20D (Digital); GSM4E4F; 28.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX713D (Analog); GSM4416; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX713D (Digital); GSM4417; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX732J; GSM4442; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX74Q; GSM442A; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX752; GSM4445; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX752D (Analog); GSM444A; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX752D (Digital); GSM444B; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX77D (Analog); GSM443A; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX77D (Digital); GSM443B; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX932J; GSM4AF3; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX952; GSM4AF8; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX952D (Analog); GSM4B03; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX952D (Digital); GSM4B04; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX97D (Analog); GSM4AEA; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG LX97D (Digital); GSM4AEB; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1510A; GSM3BA5; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1510S; GSM3BAB; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1710A; GSM43D6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1710S; GSM43F6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1717A; GSM4424; 30.0-70.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1717S; GSM441F; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1717TM (Analog); GSM442C; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1717TM (Digital); GSM442D; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M173WA (Analog); GSM43D1; 30.0-66.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M173WA (Digital); GSM43D2; 30.0-66.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1740A (Analog); GSM43E3; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1740A (Digital); GSM43E4; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1910A; GSM4AA7; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1910S; GSM4ABF; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1917A; GSM4ADA; 30.0-70.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1917S; GSM4AD9; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1917TM (Analog); GSM4ADD; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1917TM (Digital); GSM4ADE; 30.0-71.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1940A (Analog); GSM4AB4; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M1940A (Digital); GSM4AB5; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M203WA (Analog); GSM4E3B; 28.0-83.0; 55.0-75.0; 1
+LG Electronics Inc.; LG M203WA (Digital); GSM4E3C; 28.0-83.0; 55.0-75.0; 1
+LG Electronics Inc.; LG M203WX (Analog); GSM4E2C; 28.0-83.0; 55.0-75.0; 1
+LG Electronics Inc.; LG M203WX (Digital); GSM4E2D; 28.0-83.0; 55.0-75.0; 1
+LG Electronics Inc.; LG M2040A (Analog); GSM4E32; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M2040A (Digital); GSM4E33; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG M2343A (Analog); GSM5615; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M2343A (Digital); GSM5616; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3200C (Analog); GSM7551; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3200C (Digital); GSM7552; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3201C (Analog); GSM7579; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3201C (Digital); GSM757A; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3700C (Analog); GSM7555; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3700C (Digital); GSM7556; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3701C (Analog); GSM757B; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M3701C (Digital); GSM757C; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M4200C (Analog); GSM9C49; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M4200C (Digital); GSM9C4A; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M4201C (Analog); GSM9C5F; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M4201C (Digital); GSM9C60; 30.0-72.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M4600C (Analog); GSM9C4B; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M4600C (Digital); GSM9C4C; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M5500C (Analog); GSMC353; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG M5500C (Digital); GSMC354; 30.0-83.0; 56.0-85.0; 1
+LG Electronics Inc.; LG MX172WT; GSM43F0; 30.0-66.0; 56.0-85.0; 1
+LG Electronics Inc.; LG MX94D (Analog); GSM4AF6; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG MX94D (Digital); GSM4AF7; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG N2200P; GSM55F3; 30.0-124.0; 50.0-160.0; 1600x1200
+LG Electronics Inc.; LG RM151; GSM3B86; 30.0-63.0; 56.0-75.0, 1
+LG Electronics Inc.; LG StudioWorks 20i; gsm4e21; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 28i; sw28i; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 44i; gsm36b9; 30.0-50.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 44m; gsm36b4; 30.0-50.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 45i; gsm36bb; 30.0-54.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 500LC; GSM3ACE; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG StudioWorks 54m; gsm3aa9; 30.0-50.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 550m; CXO0f0f; 30.0-54.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 55i; gsm3abd; 30.0-54.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 560LS; GSM3B1A; 31.0-61.0; 56.0-75.0; 1
+LG Electronics Inc.; LG StudioWorks 56i; gsm3aa8; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 56m; gsm3aa2; 30.0-65.0; 50.0-110.0; 1
+LG Electronics Inc.; LG StudioWorks 56T; gsm3aaf; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 570LE; GSM3AF2; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG StudioWorks 570LS; GSM3AF3; 31.0-69.0; 56.0-85.0; 1
+LG Electronics Inc.; LG StudioWorks 575N; GSM3AE1; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG StudioWorks 5D; gsm3ab6; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 74i; gsm4278; 30.0-50.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 74m; gsm4277; 30.0-50.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 74m; sw74m; 30.0-50.0; 50.0-90.0; 1
+LG Electronics Inc.; LG StudioWorks 76i; gsm426e; 30.0-65.0; 50.0-110.0; 1
+LG Electronics Inc.; LG StudioWorks 76m; gsm4273; 30.0-65.0; 50.0-110.0; 1
+LG Electronics Inc.; LG StudioWorks 76T; gsm4284; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 78D; gsm427f; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 78DT; gsm4280; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 78i; gsm426c; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 78m; gsm4274; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 78T; gsm426b; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 78T; gsm426d; 30.0-85.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 7D; GSM427E; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 7DT; gsm4281; 30.0-65.0; 50.0-120.0; 1
+LG Electronics Inc.; LG StudioWorks 880LC; GSM4658; 30.0-80.0; 56.0-85.0; 1
+LG Electronics Inc.; LG StudioWorks 995E; gsm4a4c; 30.0-96.0; 50.0-160.0; 1
+LG Electronics Inc.; LG T530B; GSM3BA8; 30.0-54.0; 50.0-120.0; 1
+LG Electronics Inc.; LG T530S; GSM3BA9; 30.0-54.0; 50.0-120.0; 1
+LG Electronics Inc.; LG T705B; GSM43A2; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG T705BH; GSM43A4; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG T705S; GSM43A1; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG T705SH; GSM43A3; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG T710B; GSM4365; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG T711B; GSM43A7; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG T730BG; GSM43C0; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG TX171; GSM43C8; 30.0-71.0; 50.0-160.0; 1
+LG Electronics Inc.; LG TX191; GSM4ABD; 30.0-98.0; 50.0-160.0; 1
+LG Electronics Inc.; LG WS771A; GSM42F2; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG WS771B; GSM42F3; 30.0-70.0; 50.0-160.0; 1
+LG Electronics Inc.; LG Zenith 515Z; GSM3BAC; 30.0-63.0; 56.0-75.0; 1
+LG Electronics Inc.; LG Zenith 715Z; GSM43F7; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG Zenith 721Z; GSM440B; 30.0-83.0; 56.0-75.0; 1
+LG Electronics Inc.; LG Zenith 921Z; GSM4ACC; 30.0-83.0; 56.0-75.0; 1
+Link Computer, Inc.; Link Computer CE-8; ce-8; 15.5-38.0; 50.0-90.0; 1
+Link Computer, Inc.; Link Computer CM-3; cm-3; 15.5-36.0; 50.0-70.0; 1
+Lite-On; Lite-On 1570; ltn1570; 30.0-70.0; 50.0-120.0; 1
+Lite-On; Lite-On 1770NSL; ltn1770; 30.0-70.0; 50.0-120.0; 1
+Lite-On; Lite-On A1454NE; ltna442; 30.0-54.0; 50.0-100.0; 1
+Lite-On; Lite-On A1454NEL; ltna443; 30.0-54.0; 50.0-100.0; 1
+Lite-On; Lite-On A1554NE; ltna542; 30.0-54.0; 50.0-100.0; 1
+Lite-On; Lite-On A1554NEL; ltna543; 30.0-54.0; 50.0-100.0; 1
+Lite-On; Lite-On A1570NSL; ltna595; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On A1570NST(92); ltna596; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On A1570NST(95); ltna597; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On A1770NSL; ltna795; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On A1770NST(92); ltna796; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On A1770NST(95); ltna797; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On A1770NST(99); ltna798; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On A1996NST(95); ltna967; 30.0-95.0; 50.0-120.0; 1
+Lite-On; Lite-On B1770NSL; ltnb795; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On B1770NST(92); ltnb796; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On B1770NST(95); ltnb797; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On B1770NST(99); ltnb798; 30.0-69.0; 50.0-120.0; 1
+Lite-On; Lite-On B1985NSL; ltnb955; 30.0-86.0; 50.0-160.0; 1
+Lite-On; Lite-On B1996NSL; ltnb965; 30.0-95.0; 50.0-160.0; 1
+Lite-On; Lite-On B1996NST(95); ltnb967; 30.0-95.0; 50.0-160.0; 1
+Lite-On; Lite-On B1996NST(99); ltnb968; 30.0-95.0; 50.0-160.0; 1
+Lite-On; Lite-On B1997NST(99); ltn1901; 30.0-95.0; 50.0-120.0; 1
+Lite-On; Lite-On BL150AT; ltn0205; 24.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On BL150ATA; ltn0204; 24.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On CM-1412; ltn1412; 30.0-38.0; 55.0-90.0; 1
+Lite-On; Lite-On CM-1413; ltn1413; 30.0-38.0; 55.0-90.0; 1
+Lite-On; Lite-On CM-1414; ltn1414; 30.0-38.0; 55.0-90.0; 1
+Lite-On; Lite-On CM-1435; ltn1435; 30.0-38.0; 55.0-90.0; 1
+Lite-On; Lite-On CM-1438; ltn1438; 30.0-38.0; 55.0-90.0; 1
+Lite-On; Lite-On CM-1448; ltn1448; 30.0-48.0; 55.0-90.0; 1
+Lite-On; Lite-On CM-1450; ltn1450; 30.0-56.0; 50.0-100.0; 1
+Lite-On; Lite-On CM-1550MCLR; ltn1550; 30.0-56.0; 50.0-100.0; 1
+Lite-On; Lite-On CM-1554; ltn1554; 30.0-56.0; 50.0-100.0; 1
+Lite-On; Lite-On CM-1555NEL; ltn1555; 30.0-56.0; 50.0-100.0; 1
+Lite-On; Lite-On CM-1565MCLR; ltn1565; 30.0-70.0; 50.0-120.0; 1
+Lite-On; Lite-On CM-1566; ltn1566; 30.0-70.0; 50.0-120.0; 1
+Lite-On; Lite-On CM-1754; ltn1754; 30.0-56.0; 50.0-100.0; 1
+Lite-On; Lite-On CM-1766; ltn1766; 30.0-70.0; 50.0-120.0; 1
+Lite-On; Lite-On CM-1785NSL; ltn1785; 30.0-86.0; 50.0-120.0; 1
+Lite-On; Lite-On CM-1995NST; ltn1995; 30.0-97.0; 50.0-120.0; 1
+Lite-On; Lite-On CM-2090M; cm-2090m; 30.0-75.0; 40.0-120.0; 1
+Lite-On; Lite-On DC150AT; ltn020c; 31.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On DC150ATA; ltn0208; 31.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On DP150AT; ltn020b; 31.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On DR150ATA; ltn0209; 31.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On H15ANC; ltn021c; 31.5-60.1; 56.3-75.0; 1
+Lite-On; Lite-On L140PTA; ltn0201; 45.0-54.0; 57.0-65.0; 1
+Lite-On; Lite-On L150ATA; ltn0202; 24.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On L150PTA; ltn0203; 48.0-61.0; 56.0-61.0; 1
+Lite-On; Lite-On P150AT; ltn0207; 24.0-61.0; 56.0-85.0; 1
+Lite-On; Lite-On S1770NSL; ltn1704; 30-70; 50-160; 1
+Logitec; Logitec LCM-15FA; LOG1026; 30.0-69.0; 50.0-120.0
+Logitec; Logitec LCM-15FA2; LOG1040; 30.0-70.0; 50.0-120.0
+Logitec; Logitec LCM-15FA3; LOG1053; 30.0-70.0; 50.0-120.0
+Logitec; Logitec LCM-15FS; LOG4536; 30.0-54.0; 50.0-110.0
+Logitec; Logitec LCM-15TH; LOG1029; 30.0-70.0; 50.0-130.0
+Logitec; Logitec LCM-17DV; LOG1024; 30.0-69.0; 55.0-125.0
+Logitec; Logitec LCM-17FA; LOG1027; 30.0-69.0; 50.0-120.0
+Logitec; Logitec LCM-17FS; LOG1039; 30.0-72.0; 50.0-120.0
+Logitec; Logitec LCM-17FS2; LOG1052; 30.0-72.0; 50.0-120.0
+Logitec; Logitec LCM-17TH; LOG1046; 30.0-95.0; 50.0-160.0
+Logitec; Logitec LCM-17TS; LOG1054; 30.0-95.0; 50.0-160.0
+Logitec; Logitec LCM-17TSU; LOG1048; 30.0-95.0; 50.0-160.0
+Logitec; Logitec LCM-17TX; LOG1031; 30.0-92.0; 50.0-160.0
+Logitec; Logitec LCM-19FS; LOG1050; 30.0-98.0; 50.0-160.0
+Logitec; Logitec LCM-19TS; LOG1062; 30.0-110.0; 50.0-160.0
+Logitec; Logitec LCM-21DX; LOG1025; 30.0-86.0; 50.0-132.0
+Logitec; Logitec LCM-T041A; LOG1061; 24.8-37.5; 55.0-76.0
+Logitec; Logitec LCM-T133A; LOG1035; 31.0-61.0; 56.0-75.0
+Logitec; Logitec LCM-T134AS; LOG1058; 31.0-61.0; 56.0-76.0
+Logitec; Logitec LCM-T141AS; LOG1049; 31.0-61.0; 56.0-85.0
+Logitec; Logitec LCM-T142AS; LOG1055; 31.0-61.0; 56.0-76.0
+Logitec; Logitec LCM-T151A; LOG1036; 31.0-61.0; 56.0-87.0
+Logitec; Logitec LCM-T151AS; LOG1047; 31.0-61.0; 56.0-76.0
+Logitec; Logitec LCM-T152A; LOG1045; 31.0-61.0; 56.0-76.0
+Logitec; Logitec LCM-T153A; LOG1056; 31.0-61.0; 56.0-76.0
+Logitec; Logitec LCM-T181A; LOG1057; 30.0-72.0; 50.0-120.0
+MacroView; MacroView mp712; OEM7692; 30.0-70.0; 50.0-120.0
+MAG Technology Co., Ltd.; MAG 410V2; mag4561; 30.0-50.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG 510V2; mag5662; 30.0-50.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG 570FD; mag9510; 30.0-70.0; 50.0-130.0; 1
+MAG Technology Co., Ltd.; MAG 570V; mag9501; 30.0-70.0; 50.0-150.0; 1
+MAG Technology Co., Ltd.; MAG 710V2; mag7663; 30.0-65.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG 720V2; mag7764; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG 770T; mag9704; 30.0-70.0; 50.0-130.0; 1
+MAG Technology Co., Ltd.; MAG 770V; mag9701; 30.0-70.0; 50.0-150.0; 1
+MAG Technology Co., Ltd.; MAG 786FD; mag9705; 30.0-86.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG 796FD; mag9706; 30.0-96.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG 800V; mag9807; 30.0-95.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG 810FD; mag9809; 30.0-110.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG 986PF; mag03da; 30.0-86.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG Computronic Colorview/15; colorview15; 30.0-68.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG Computronic PMV-14AC/plus; pmv-14ac; 15.0-36.0; 45.0-90.0; 1
+MAG Technology Co., Ltd.; MAG Computronic PMV-1531; pmv-1531; 15.0-38.0; 45.0-90.0; 1
+MAG Technology Co., Ltd.; MAG D410; mag4577; 30.0-54.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG DJ530; mag5775; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DJ530AV; mag5767; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DJ700; mag7746; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DJ702; mag7748; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DJ702E; mag7747; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DJ707; mag7752; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DJ707AV; mag7769; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DJ717; mag7854; 30.0-86.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG DJ800; mag6589; 30.0-86.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG DJ810; mag8991; 30.0-95.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG DJ920; mag9156; 30.0-110.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG DJ925T; mag9157; 30.0-110.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG DX-1595; mag5620; 30.0-64.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX1495; mag11a6; 30.0-50.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX1595; mag15f4; 30.0-64.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX15F; magdx15; 30.0-64.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG DX15T; mag5624; 30.0-64.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX1795; mag7626; 30.0-64.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX17F; magdx17; 30.0-64.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG DX17T; mag00e3; 30.0-69.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX500AV; mag5541; 30.0-64.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX500T; mag5781; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG dx700e; mag7745; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX700T; mag7740; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX715T; mag7842; 30.0-86.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG DX725T; mag7990; 30.0-95.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG dx800; mag6589; 30.0-95.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG InnoVision DX15F; dx15f; 30-64; 50-90; 1
+MAG Technology Co., Ltd.; MAG InnoVision DX17F; dx17f; 30-64; 50-90; 1
+MAG Technology Co., Ltd.; MAG InnoVision DX21F; dx21f; 30-68; 50-120; 1
+MAG Technology Co., Ltd.; MAG InnoVision LX1450; lx1450; 30-50; 50-100; 1
+MAG Technology Co., Ltd.; MAG InnoVision MX15F; mx15f; 30.0-68.0; 50.0-110.0; 1
+MAG Technology Co., Ltd.; MAG InnoVision MX17F/S; mx17fs; 30.0-68.0; 50.0-110.0; 1
+MAG Technology Co., Ltd.; MAG InnoVision MX21NT; mx21nt; 30.0-82.0; 50.0-110.0; 1
+MAG Technology Co., Ltd.; MAG LT530C; mag5020; 45.0-58.0; 57.0-63.0; 1
+MAG Technology Co., Ltd.; MAG LT541C; mag5021; 31.5-68.7; 50.0-85.0; 1
+MAG Technology Co., Ltd.; MAG LT541F; magc541; 31.0-69.0; 50.0-85.0; 1
+MAG Technology Co., Ltd.; MAG LT561D; magd561; 31.0-69.0; 50.0-85.0; 1
+MAG Technology Co., Ltd.; MAG LT561E; mage561; 31.0-69.0; 50.0-85.0; 1
+MAG Technology Co., Ltd.; MAG LX1450LG; mag1450; 30.0-50.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG LX1564LG; mag1564; 30.0-64.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG MX14S; magm14s; 30.0-64.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG MX15F; magmx15; 30.0-68.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG MX17F; magmx17; 30.0-68.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG MX17FG; mag17fg; 30.0-68.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG MX17FP; 0; 30.0-82.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG MX21F; magmx21; 30.0-82.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG MXE15F; mmxe15f; 30.0-64.0; 50.0-100.0; 1
+MAG Technology Co., Ltd.; MAG MXP17F; mmxp17f; 30.0-82.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG PMV14SV; pmv14sv; 30.0-36.0; 50.0-90.0; 1
+MAG Technology Co., Ltd.; MAG XJ500; mag5801; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG XJ500T; mag5779; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG XJ530; mag5776; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG XJ700; mag7771; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG XJ700T; mag7780; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG XJ707; mag7772; 30.0-70.0; 50.0-120.0; 1
+MAG Technology Co., Ltd.; MAG XJ717; mag7874; 30.0-86.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG xj770; mag9702; 30.0-70.0; 50.0-130.0; 1
+MAG Technology Co., Ltd.; MAG XJ796; mag9703; 30.0-96.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG XJ810; mag8997; 30.0-95.0; 50.0-160.0; 1
+MAG Technology Co., Ltd.; MAG XJ910; mag9158; 30.0-110.0; 50.0-160.0; 1
+Magnavox; Magnavox MB4010(14inch/CM1300); 0; 30.0-54.0; 50.0-110.0
+Magnavox; Magnavox MB5314(15inch/CM1200); 0; 30.0-66.0; 50.0-110.0
+Magnavox; Magnavox MB7000(17inch/CM6800); 0; 30.0-66.0; 50.0-130.0
+Magnavox; Magnavox MV5011(15inch/CM1300); 0; 30.0-54.0; 50.0-110.0
+Maxdata Computer; Maxdata Belinea 10 30 52; max06b9; 30.0-97.0; 50.0-150.0; 1
+Maxdata Computer; Maxdata Belinea 10 40 65; max4065; 30.0-50.0; 50.0-120.0; 1
+Maxdata Computer; Maxdata Belinea 10 50 95; max3539; 30.0-64.0; 55.0-90.0; 1
+Maxdata Computer; Maxdata Belinea 10 55 75; max7555; 30.0-69.0; 50.0-120.0; 1
+MED; MED 2914; MED2914; 30-98; 50-120
+MegaImage; MegaImage 17; 106; 30-64; 50-100
+Megavision; MV173 LCD; ate8506; 31.0-80.0; 58.0-75.0
+Microtec; Microtec MD15-9; PBR023c; 30.0-70.0; 50.0-150.0; 1
+Microvitec, Inc.; Microvitec 1020/LP; 1020lp; 15.0-36.5; 45.0-100.0; 1
+Microvitec, Inc.; Microvitec 1020/SP; 1020sp; 15.0-36.5; 45.0-100.0; 1
+Microvitec, Inc.; Microvitec 2012/LP; 2012lp; 15.0-40.0; 45.0-100.0; 1
+Microvitec, Inc.; Microvitec 2014/LP; 2014lp; 15.0-40.0; 45.0-100.0; 1
+Microvitec, Inc.; Microvitec 2014/SVGA; 2014svga; 30.0-40.0; 45.0-90.0; 1
+Microvitec, Inc.; Microvitec 2019/SP; 2019sp; 15.0-38.0; 45.0-100.0; 1
+Microvitec, Inc.; Microvitec 4015/FST; 4015fst; 30.0-50.0; 45.0-100.0; 1
+Microvitec, Inc.; Microvitec 604/FST; 604fst; 15.0-36.5; 45.0-100.0; 1
+Microvitec, Inc.; Microvitec 704/FST; 704fst; 15.0-36.5; 45.0-100.0; 1
+Miro Computer Products AG; Miro miroD1568; mir6815; 31.5-68.0; 50.0-100.0; 1
+Miro Computer Products AG; Miro miroD1769; mir6917; 31.5-69.0; 50.0-100.0; 1
+Miro Computer Products AG; Miro PROOFSCREEN miroC1768; mir6817; 29.0-68.0; 50.0-100.0; 1
+Miro Computer Products AG; Miro PROOFSCREEN miroC1782; mir8217; 29.0-82.0; 50.0-120.0; 1
+Miro Computer Products AG; Miro PROOFSCREEN miroC2085 E; mir8520; 29.0-85.0; 50.0-160.0; 1
+Miro Computer Products AG; Miro PROOFSCREEN miroC21107; mir0721; 31.5-107.0; 50.0-150.0; 1
+Miro Computer Products AG; Miro PROOFSCREEN miroC2185; mir8521; 30.0-85.0; 50.0-152.0; 1
+Miro Computer Products AG; Miro PROOFSCREEN miroC2193; mir9321; 30.0-93.0; 50.0-150.0; 1
+MiTAC; MiTAC 1450FD; mtc0003; 31.0-50.0; 50.0-90.0; 1
+MiTAC; MiTAC 1450FV; mtc0001; 31.0-50.0; 50.0-90.0; 1
+MiTAC; MiTAC 1564FD/1564FS; mtc0002; 30.0-66.0; 50.0-100.0; 1
+Mitsuba Corp.; Mitsuba Corp. 710MH; 710mh; 15.0-38.0; 50.0-90.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 100 (TFW1105); MEL40E1; 30.0-108.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 100 (TFW1105); mel40e1; 30.0-108.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 120u (TFA1105); MEL42F0; 30.0-115.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 120u (TFA1105); mel42f0; 30.0-115.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 200 (NSH1117); MEL43F0; 30.0-108.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 200 (NSH1117); mel43f0; 30.0-108.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 230SB; MEL4631; 30.0-115.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 230SB; mel4631; 30.0-115.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 70 (TF-7700P); mel4190; 30.0-70.0; 50.0-180.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 71 (TFV6708); mel4240; 30.0-69.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 72 (TFV8705); mel4160; 30.0-86.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 73 (N9705); mel4460; 31.0-69.0; 59.0-86.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 74SB; MEL4623; 30.0-70.0; 50.0-120.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 91 (NFL9905); mel43a0; 30.0-96.0; 50.0-140.0; 1
+Mitsubishi; Mitsubishi Diamond Plus 93SB; MEL4625; 30.0-96.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 1000 (TFX1105); mel4100; 30.0-115.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 1010 (TUX1107); mel4101; 30.0-115.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 14 (FW6405); mel6405; 30.0-58; 50.0-90.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 14 Plus (SD45xx); mel4500; 30.0-57.0; 50.0-90.0; 0
+Mitsubishi; Mitsubishi Diamond Pro 15FS (SD56xx); mel5600; 31.5-64.0; 50.0-90.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 17 (TFS6705); mel6705; 30.0-64.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 17TX (TFG8705); mel4040; 30.0-86.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 20 (HL7955); mel7955; 30.0-78.0; 50.0-130.0; 0
+Mitsubishi; Mitsubishi Diamond Pro 2020u (NUB1107); mel4310; 30.0-121.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 2040u (NSB1107); mel4311; 30.0-121.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 2045u (NSH1157); MEL43F3; 30.0-121.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 2060u (NSZ1207); MEL4511; 30.0-121.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 2070SB; MEL4632; 30.0-140.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 20X (FR8905); mel2040; 30.0-82.0; 50.0-120.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 21FS (FFL7165); mel7165b; 30.0-78.0; 50.0-130.0; 0
+Mitsubishi; Mitsubishi Diamond Pro 21T (THZ8155); mel8155; 30.0-85.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 21TX (THN9105); mel0040; 30.0-93.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 26H (HJ6505); mel6505; 45.0-70.0; 50.0-80.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 26M (HC3505); mel3505; 15.7-38.0; 45.0-90.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 29 (XC2930); mel2930; 15.0-82.0; 40.0-120.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 37 (XC3725); mel3725; 24.0-64.0; 40.0-120.0; 0
+Mitsubishi; Mitsubishi Diamond Pro 67TXV (TFV6705); mel4064; 30.0-69.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 700 (TFK9705); mel4110; 30.0-95.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 710 (NFF8705); mel4360; 30.0-86.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 710s (NFN8705); MEL4380; 30.0-86.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 720 (NFN9705); mel4381; 30.0-96.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 740SB; MEL4521; 31.0-96.0; 55.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 750SB; MEL4624; 30.0-96.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 87TXM (TFM8705); mel40c0; 30.0-86.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 900u (NFJ9905); mel42c0; 30.0-95.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 91TXM (TFW9105); mel40e0; 30.0-95.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 920 (NUR1905); MEL4440; 30.0-108.0; 50.0-140.0; 1
+Mitsubishi; Mitsubishi Diamond Pro 930SB; MEL463D; 30.0-110.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi Diamond Pro SVGA (SD43xx); mel4300; 30.0-38.5; 50.0-70.0; 1
+Mitsubishi; Mitsubishi Diamond Pro VGA (SD41xx); mel4100; 31.5; 60.0-70.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 15FS (SD55xx); mel5500; 31.5-57.0; 50.0-90.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 15HX (SD57xx); mel8040; 31.5-65.0; 50.0-90.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 15VX (SD58xx); mel408f; 30-65.0; 50.0-100.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 17FS (FFY7705); mel7705; 30.0-78.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 17HX (FFF8705); mel6140; 30.0-82.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 20 (HL6945/55); mel6955; 30.0-64.0; 50.0-130.0; 0
+Mitsubishi; Mitsubishi Diamond Scan 20H (FR8905); mel2040; 30.0-82.0; 50.0-120.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 20M (HC3925); mel3925; 15.7-38.0; 45.0-90.0; 0
+Mitsubishi; Mitsubishi Diamond Scan 21 (FFL7165); mel7165; 30.0-78.0; 50.0-130.0; 0
+Mitsubishi; Mitsubishi Diamond Scan 33 (XC3315); mel3315; 15.0-38.0; 40.0-120.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 37 (XC3715); mel3715; 15.0-36.5; 40.0-120.0; 0
+Mitsubishi; Mitsubishi Diamond Scan 50 (SD5904); mel41f0; 30.0-70.0; 50.0-100.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 70 (SD7704); mel4210; 30.0-70.0; 50.0-100.0; 1
+Mitsubishi; Mitsubishi Diamond Scan 90e (FFT9905); mel4220; 30.0-95.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi DiamondPoint M55LCD; MEL4647; 31.0-63.0; 55.0-75.0; 1
+Mitsubishi; Mitsubishi DiamondPoint NX85 LCD (Analog); MEL4638; 31.0-83.0; 56.0-75.0; 1
+Mitsubishi; Mitsubishi DiamondPoint NX85 LCD (Digital); MEL4639; 31.0-67.0; 56.0-75.0; 1
+Mitsubishi; Mitsubishi DiamondPoint NX86LCD (Analog); MEL4659; 31.0-84.0; 55.0-85.0; 1
+Mitsubishi; Mitsubishi DiamondPoint NX86LCD (Digital); MEL4658; 31.0-84.0; 55.0-85.0; 1
+Mitsubishi; Mitsubishi DiamondPoint NXM56LCD; MEL4651; 31.0-63.0; 55.0-75.0; 1
+Mitsubishi; Mitsubishi DiamondPoint NXM76LCD (Analog); MEL464F; 31.0-83.0; 56.0-75.0; 1
+Mitsubishi; Mitsubishi DiamondPoint NXM76LCD (Digital); MEL4650; 31.0-70.0; 56.0-75.0; 1
+Mitsubishi; Mitsubishi DiamondPoint V50LCD; MEL466C; 31.0-63.0; 55.0-75.0; 1
+Mitsubishi; Mitsubishi E55LCD; MEL464E; 31.0-60.0; 55.0-75.0; 1
+Mitsubishi; Mitsubishi E85LCD; MEL4344; 31.0-82.0; 55.0-85.0; 1
+Mitsubishi; Mitsubishi LCD 151A (LXA572WB); MEL41D4; 31.0-63.0; 56.0-76.0; 1
+Mitsubishi; Mitsubishi LCD 40 (LXA420W); mel41c0; 31.5-60.2; 56.3-85.1; 1
+Mitsubishi; Mitsubishi LCD 50 (LXA520W); mel41d0; 31.5-60.2; 56.3-85.1; 1
+Mitsubishi; Mitsubishi LCD 51 (LXA530W); MEL41D1; 31.0-63.0; 30.0-85.1; 1
+Mitsubishi; Mitsubishi LCD 52 (LXA550W/WB); MEL41D2; 31.5-60.5; 56.0-75.0; 1
+Mitsubishi; Mitsubishi LCD 52 (LXA565W); MEL41D3; 31.5-60.5; 56.0-75.0; 1
+Mitsubishi; Mitsubishi LCD 580 (LXA580W); MEL41D6; 31.0-60.0; 56.0-75.0; 1
+Mitsubishi; Mitsubishi LCD 80 (LSA810W); MEL4340; 31.0-83.0; 30.0-85.1; 1
+Mitsubishi; Mitsubishi LCD 80 (LSA820W/WB); MEL4341; 31.0-81.5; 30.0-85.1; 1
+Mitsubishi; Mitsubishi LCD 80 (LSA831W); MEL4343; 24.0-80.0; 30.0-85.0; 1
+Mitsubishi; Mitsubishi LVP-X300 Projector (LVP-X300); mel3001; 15.0-91.0; 50.0-85.0; 1
+Mitsubishi; Mitsubishi MegaView 29 (AM2752); mel2752; 15.0-39.0; 45.0-100.0; 0
+Mitsubishi; Mitsubishi MegaView 33 (XC3315); mel3315; 15.0-38.0; 40.0-120.0; 0
+Mitsubishi; Mitsubishi MegaView 37 (XC3716); mel3716; 15.0-39.5; 40.0-120.0; 0
+Mitsubishi; Mitsubishi MegaView 37 Plus (XC3717); mel3717; 15.0-61.0; 40.0-120.0; 0
+Mitsubishi; Mitsubishi MegaView Pro 29 (XC2930); mel2930; 15.0-82.0; 40.0-120.0; 0
+Mitsubishi; Mitsubishi MegaView Pro 37 (XC3730); mel3730; 15.0-85.0; 40.0-120.0; 1
+Mitsubishi; Mitsubishi MegaView Pro 42 (AM4201); mel4201; 20.0-64.0; 45.0-120.0; 0
+Mitsubishi; Mitsubishi MERLIN; tat3044; 30.0-54.0; 50.0-100.0; 1
+Mitsubishi; Mitsubishi PC Division V70 (XJ63754); tat3054; 30-70; 50-100; 1
+Mitsubishi; Mitsubishi Precise Point 5800; melpp_5800; 30.0-65.0; 50.0-100.0; 1
+Mitsubishi; Mitsubishi Precise Point 8705; melpp_8705; 30.0-82.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi Precise Point 8905; melpp_8905; 30.0-82.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi RD15M; mel409f; 30.0-65.0; 50.0-100.0; 1
+Mitsubishi; Mitsubishi RD17F; mel6040; 30.0-82.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi RD17GR; mel4065; 30.0-69.0; 55.0-125.0; 1
+Mitsubishi; Mitsubishi RD17GZ; mel4150; 30.0-86.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi RD21GH; mel4141; 30.0-115.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi RD21GII; mel40f0; 30.0-95.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi RD21GIII; mel4140; 30.0-115.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi RD21GX; mel40f1; 30.0-86.0; 50.0-132.0; 1
+Mitsubishi; Mitsubishi RDF173H; MEL4627; 30.0-96.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi RDF193H; MEL4628; 30.0-96.0; 50.0-160.0; 1
+Mitsubishi; Mitsubishi RDS173X; MEL4626; 30.0-70.0; 50.0-120.0; 1
+Mitsubishi; Mitsubishi RDT151; mel41b0; 24.8-60.2; 56.3-85.1; 1
+Mitsubishi; Mitsubishi SpectraView 1000; mel4120; 30.0-95.0; 50.0-130.0; 1
+Mitsubishi; Mitsubishi SpectraView 700; mel4130; 30.0-95.0; 50.0-152.0; 1
+Mitsubishi; Mitsubishi TFT Monitor RDT150S; mel41b3; 24.8-63.0; 30.0-85.1; 1
+Mitsubishi; Mitsubishi TFT Monitor RDT180S; mel42d0; 24.8-83.0; 30.0-85.1; 1
+Mitsubishi; Mitsubishi The Big Easy 1281 (VS1281); mel1281; 15.0-103.0; 40.0-150.0; 0
+Mitsubishi; Mitsubishi The Big Easy G1A (LVPG1A); mellvpg1a; 25.0-37.86; 56.0-72.0; 1
+Mitsubishi; Mitsubishi VS1280 Projector; mel1280; 15.0-100.0; 40.0-150.0; 0
+Mitsubishi; Mitsubishi XJ59992; tatbbcf; 30.0-54.0; 50.0-100.0; 1
+Modgraph; Modgraph. MG-3200; mg-3200; 15.0-35.0; 47.0-80.0; 1
+Monitronix; Monitronix MX-200MC; mx-200mc; 15.0-75.0; 40.0-120.0; 1
+Monitronix; Monitronix MX-210EZ; mx-210ez; 30.0-75.0; 40.0-120.0; 1
+Monitronix; Monitronix MX-240EZ; mx-240ez; 30.0-75.0; 40.0-120.0; 1
+Monitronix; Monitronix MX240; mx240; 30.0-90.0; 20.0-120.0; 1
+Morse; Morse Monitor; morsemon; 30.0-57.0; 50.0-90.0; 1
+Nanao; Nanao 9060S; nan0502; 15.5-38.5; 50.0-90.0; 1
+Nanao; Nanao 9060S; nan0902; 15.5-38.5; 50.0-90.0; 1
+Nanao; Nanao 9065S; nan0503; 30.0-50.0; 50.0-90.0; 1
+Nanao; Nanao 9070U; nan0506; 20.0-50.0; 50.0-90.0; 1
+Nanao; Nanao 9070U; nan0906; 20.0-50.0; 50.0-90.0; 1
+Nanao; Nanao 9080i; nan0507; 30.0-64.0; 55.0-90.0; 1
+Nanao; Nanao 9080i; nan0907; 30.0-64.0; 55.0-90.0; 1
+Nanao; Nanao 9400i; nan0508; 30.0-65.0; 55.0-90.0; 1
+Nanao; Nanao 9500; nan0509; 30.0-78.0; 55.0-90.0; 1
+Nanao; Nanao Eizo E35F; nan1200; 24.5-70.0; 50.0-120.0; 1
+Nanao; Nanao Eizo E51F; nan1208; 24.5-70.0; 50.0-120.0; 1
+Nanao; Nanao Eizo E51FS; nan1215; 30.0-82.0; 50.0-120.0; 1
+Nanao; Nanao Eizo E53F; nan1204; 24.5-86.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E54F; nan1220; 30.0-96.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E55D; nan1205; 24.5-92.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E57T; nan1201; 30.0-92.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E57Ts; nan1210; 30.0-92.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E65T; nan1203; 30.0-95.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E66T; nan1202; 30.0-95.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E67F; nan1213; 30.0-96.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E67T; nan1214; 30.0-96.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E75F; nan1206; 30.0-95.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E76D; nan1211; 30.0-96.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E76F; nan1218; 30.0-110.0; 50.0-160.0; 1
+Nanao; Nanao Eizo E78F; nan1207; 31.5-110.0; 50.0-160.0; 1
+Nanao; Nanao Eizo T960; nan1222; 30.0-115.0; 50.0-160.0; 1
+Nanao; Nanao FlexScan 33F; nan0800; 24.5-69.0; 55.0-120.0; 1
+Nanao; Nanao FlexScan 52F; nan0882; 24.5-70.0; 55.0-120.0; 1
+Nanao; Nanao FlexScan 53T; nan0993; 30.0-85.0; 55.0-160.0; 1
+Nanao; Nanao FlexScan 54T; nan0805; 24.5-86.0; 55.0-160.0; 1
+Nanao; Nanao FlexScan 55F; nan098c; 24.5-65.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan 56T; nan0913; 30.0-85.0; 55.0-160.0; 1
+Nanao; Nanao FlexScan 6500; nan0900; 56.0-80.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan 6600; nan0406; 56.0-110.0; 70.0-90.0; 1
+Nanao; Nanao FlexScan 68T; nan0914; 30.0-85.0; 55.0-160.0; 1
+Nanao; Nanao FlexScan 76F; nan098f; 30.0-78.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan 77F; nan090f; 24.5-90.0; 55.0-160.0; 1
+Nanao; Nanao FlexScan 88F; nan0802; 31.5-102.0; 55.0-160.0; 1
+Nanao; Nanao FlexScan E151L; nan1209; 24.0-61.0; 50.0-85.0; 1
+Nanao; Nanao FlexScan F340iW; nan050a; 27.0-61.5; 55.0-90.0; 1
+Nanao; Nanao FlexScan F347; nan090a; 24.5-61.5; 55.0-90.0; 1
+Nanao; Nanao FlexScan F347II; nan098a; 24.5-61.5; 55.0-90.0; 1
+Nanao; Nanao FlexScan F550i; nan050b; 30.0-65.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan F550i; nan090b; 30.0-65.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan F550iW; nan050c; 30.0-65.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan F557; nan090c; 24.5-65.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan F560iW; nan050d; 30.0-82.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan F750i; nan050e; 30.0-80.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan F760iW; nan050f; 30.0-78.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan F780iJ; nan0910; 45.0-100.0; 55.0-120.0; 1
+Nanao; Nanao FlexScan F780iW; nan0510; 45.0-100.0; 55.0-120.0; 1
+Nanao; Nanao FlexScan L360; nan1221; 27.0-61.0; 55.0-75.0; 1
+Nanao; Nanao FlexScan L66; nan1219; 27.0-80.0; 50.0-75.0; 1
+Nanao; Nanao FlexScan T560i; nan0511; 30.0-82.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan T560iJ; nan0911; 30.0-82.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan T567; nan0991; 30.0-82.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan T660i; nan0512; 30.0-78.0; 55.0-90.0; 1
+Nanao; Nanao FlexScan T660iJ; nan0912; 30.0-82.0; 55.0-90.0; 1
+Nanao; Nanao USA F2-15; nan0400; 24.5-69.0; 55.0-120.0; 1
+Nanao; Nanao USA F2-17; nan0401; 24.5-69.0; 55.0-120.0; 1
+Nanao; Nanao USA F2-17EX; nan0402; 24.5-86.0; 55.0-160.0; 1
+Nanao; Nanao USA F2-21; nan0403; 24.5-90.0; 55.0-160.0; 1
+Nanao; Nanao USA FlexScan 6300; nan0580; 56.0-80.0; 55.0-90.0; 1
+Nanao; Nanao USA FlexScan T2-17; nan0513; 30.0-85.0; 55.0-160.0; 1
+Nanao; Nanao USA FlexScan T2-17TS; nan0405; 24.5-86.0; 55.0-160.0; 1
+Nanao; Nanao USA FlexScan T2-20; nan0000; 30.0-85.0; 55.0-160.0; 1
+Nanao; Nanao USA FlexScan T2-20; nan0514; 30.0-85.0; 55.0-160.0; 1
+Nanao; Nanao USA FX2-21; nan0404; 31.5-102.0; 55.0-160.0; 1
+NEC; NEC 15TFT CP Monitor; necea8e; 48; 60; 1
+NEC; NEC AccuSync 120; nec5dd5; 31.0-96.0; 55.0-200.0; 1
+NEC; NEC AccuSync 125F; NEC61D4; 30.0-96.0; 50.0-160.0; 1
+NEC; NEC AccuSync 50; nec5dc3; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC AccuSync 500; NEC61DF; 30.0-71.0; 55.0-120.0; 1
+NEC; NEC AccuSync 70; nec5dc4; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC AccuSync 700; NEC61E0; 30.0-71.0; 55.0-120.0; 1
+NEC; NEC AccuSync 700M; NEC61E1; 30.0-71.0; 55.0-120.0; 1
+NEC; NEC AccuSync 750F; NEC61E2; 30.0-71.0; 55.0-120.0; 1
+NEC; NEC AccuSync 75F; nec5dcf; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC AccuSync 90; nec5dc5; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC AccuSync 900; NEC61E3; 30.0-98.0; 55.0-160.0; 1
+NEC; NEC AccuSync 95F; nec5dd0; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC AccuSync LCD200VX; NEC665C; 31.0-95.0; 56.0-85.0; 1
+NEC; NEC AccuSync LCD5V; NEC6615; 30.0-63.0; 55.0-76.0; 1
+NEC; NEC AccuSync LCD7V; NEC6617; 30.0-83.0; 55.0-76.0; 1
+NEC; NEC AccuSync LCD9V; NEC6619; 31.0-84.0; 56.0-75.0; 1
+NEC; NEC C510; necea6b; 30.0-70.0; 50.0-120.0; 1
+NEC; NEC C550; necea65; 30.0-70.0; 50.0-90.0; 1
+NEC; NEC C700; necea67; 30.0-70.0; 50.0-90.0; 1
+NEC; NEC C710; necea6c; 30.0-70.0; 50.0-120.0; 1
+NEC; NEC C900; necea69; 30.0-95.0; 50.0-150.0; 1
+NEC; NEC C900; necea8d; 30.0-95.0; 50.0-150.0; 1
+NEC; NEC CI A727; GSM5011; 30.0-70.0; 50.0-160.0; 1
+NEC; NEC CS500; nec3e53; 30.0-70.0; 50.0-90.0; 1
+NEC; NEC CS500 Multimedia Monitor; nec3e53; 30.0-64.0; 50.0-120.0; 1
+NEC; NEC DH28W2; nec0afa; 30.0-38.0; 60.0-75.0; 1
+NEC; NEC DH32W2; nec0c8a; 30.0-38.0; 60.0-75.0; 1
+NEC; NEC DV15A1; nec006e; 30.0-63.0; 60.0-75.0; 1
+NEC; NEC DV15A2; nec019a; 30.0-71.0; 59.0-86.0; 1
+NEC; NEC DV15D1; nec00aa; 30.0-63.0; 60.0-75.0; 1
+NEC; NEC DV17A1; nec0078; 30.0-67.0; 60.0-75.0; 1
+NEC; NEC DV17B1; nec0082; 30.0-67.0; 60.0-75.0; 1
+NEC; NEC DV17B2; nec01ae; 30.0-71.0; 59.0-86.0; 1
+NEC; NEC DV17C1; nec008c; 30.0-67.0; 60.0-75.0; 1
+NEC; NEC DV17C2; nec0096; 30.0-83.0; 60.0-75.0; 1
+NEC; NEC DV17C3; nec01a4; 30.0-71.0; 59.0-86.0; 1
+NEC; NEC F14T1; nec00a0; 24.0-63.0; 60.0-75.0; 1
+NEC; NEC F14T2; nec00b4; 30.0-63.0; 60.0-75.0; 1
+NEC; NEC F14T2H; nec00dc; 31.0-61.0; 59.0-76.0; 1
+NEC; NEC F14T2L; nec00e6; 31.0-61.0; 59.0-76.0; 1
+NEC; NEC F15T1; nec00d2; 31.0-61.0; 59.0-76.0; 1
+NEC; NEC F727; NCI5015; 31.0-70.0; 50.0-160.0; 1
+NEC; NEC LCD1280; 0; 29.5-33.5; 60.0-62.0; 1
+NEC; NEC LCD200; nec2fb2; 24.0-62.0; 53.0-85.0; 1
+NEC; NEC LCD300; 0; 30.8-38.0; 55.0-72.8; 1
+NEC; NEC LCD300; nec-lcd300; 30.8-38.0; 55.0-72.8; 1
+NEC; NEC LCD51V; NEC661B; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC LCD51VM; NEC661A; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC LCD52V; NEC6656; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC LCD52VM; NEC6657; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC LCD71V; NEC661D; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC LCD71VM; NEC661C; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC LCD72V; NEC6658; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC LCD72VM; NEC6659; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC LCD92V; NEC6966; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync 125; nec61b2; 31.0-96.0; 55.0-200.0; 1
+NEC; NEC MultiSync 2A; nec-2a; 31.5-35.0; 50.0-70.0; 1
+NEC; NEC MultiSync 2V; nec-2v; 30-57; 50-100; 1
+NEC; NEC MultiSync 3D; nec-3d; 15.5-38.0; 50.0-90.0; 1
+NEC; NEC MultiSync 3Ds; nec-3ds; 15.5-38.0; 50.0-90.0; 1
+NEC; NEC MultiSync 3FGe; nec-3fge; 47.5-49.0; 55.0-90.0; 1
+NEC; NEC MultiSync 3FGx; nec-3fgx; 47.8-49.0; 55.0-90.0; 1
+NEC; NEC MultiSync 3V; nec-3v; 31.0-50.0; 55.0-90.0; 1
+NEC; NEC MultiSync 4D; nec-4d; 30.0-57.0; 50.0-90.0; 1
+NEC; NEC MultiSync 4Ds; nec-4ds; 30.0-57.0; 50.0-90.0; 1
+NEC; NEC MultiSync 4FG; nec-4fg; 27.0-57.0; 55.0-75.0; 1
+NEC; NEC MultiSync 4FGe; nec-4fge; 27.0-62.0; 55.0-90.0; 1
+NEC; NEC MultiSync 50; nec1d4d; 31.0-69.0; 55.0-120.0; 1
+NEC; NEC MultiSync 5D; nec-5d; 30.0-66.0; 50.0-90.0; 1
+NEC; NEC MultiSync 5FG; nec-5fg; 27.0-79.0; 55.0-90.0; 1
+NEC; NEC MultiSync 5FGe; nec-5fge; 31.0-62.0; 55.0-90.0; 1
+NEC; NEC MultiSync 5FGp; nec-5fgp; 27.0-79.0; 55.0-90.0; 1
+NEC; NEC MultiSync 6FG; nec-6fg; 27.0-79.0; 55.0-90.0; 1
+NEC; NEC MultiSync 6FGp; nec-6fgp; 27.0-79.0; 55.0-90.0; 1
+NEC; NEC MultiSync 70; nec1e15; 31.0-69.0; 55.0-120.0; 1
+NEC; NEC MultiSync 75; nec5dc9; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC MultiSync 75F; nec5dd1; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC MultiSync 90; nec4bf0; 31.0-92.0; 55.0-160.0; 1
+NEC; NEC MultiSync 95; nec5dca; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync 95F; nec5dd2; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync A500; nec3d90; 31.0-65.0; 55.0-120.0; 1
+NEC; NEC MultiSync A500+; nec3dc2; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC MultiSync A700; nec43d0; 31.0-69.0; 55.0-120.0; 1
+NEC; NEC MultiSync A700+; nec43ee; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC MultiSync A900; nec4be6; 31.0-92.0; 55.0-160.0; 1
+NEC; NEC MultiSync C400; nec3a66; 30.0-64.0; 47.0-120.0; 1
+NEC; NEC MultiSync C500; nec3e4e; 30.0-64.0; 47.0-120.0; 1
+NEC; NEC MultiSync E1100; nec53c0; 31.0-82.0; 55.0-120.0; 1
+NEC; NEC MultiSync E1100+; nec53de; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync E500; nec3d86; 31.0-69.0; 55.0-120.0; 1
+NEC; NEC MultiSync E700; nec4434; 31.0-82.0; 55.0-120.0; 1
+NEC; NEC MultiSync E750; nec443e; 31.0-92.0; 55.0-160.0; 1
+NEC; NEC MultiSync E900; nec4bd2; 31.0-92.0; 55.0-120.0; 1
+NEC; NEC MultiSync E900+; nec4bdc; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync E950; nec4bfa; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync FE1250; nec61ab; 31.0-110.0; 50.0-160.0; 1
+NEC; NEC MultiSync FE1250+; NEC61B6; 30.0-110.0; 50.0-160.0; 1
+NEC; NEC MultiSync FE2111SB; NEC61DA; 30.0-115.0; 50.0-160.0; 1
+NEC; NEC MultiSync FE700; nec4272; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC MultiSync FE700+; NEC61BA; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC MultiSync FE750; nec61ad; 31.0-92.0; 55.0-160.0; 1
+NEC; NEC MultiSync FE750+; NEC61B3; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync FE770; NEC61D5; 30.0-70.0; 50.0-120.0; 1
+NEC; NEC MultiSync FE771SB; NEC61D6; 30.0-70.0; 50.0-120.0; 1
+NEC; NEC MultiSync FE791SB; NEC61D7; 30.0-96.0; 50.0-160.0; 1
+NEC; NEC MultiSync FE950; nec61ae; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync FE950+; NEC61B4; 30.0-96.0; 50.0-160.0; 1
+NEC; NEC MultiSync FE990; NEC61DC; 30.0-96.0; 50.0-160.0; 1
+NEC; NEC MultiSync FE991SB; NEC61D8; 30.0-96.0; 50.0-160.0; 1
+NEC; NEC MultiSync FP1350; nec578a; 31.0-115.0; 55.0-160.0; 1
+NEC; NEC MultiSync FP1370; nec61a8; 31.0-130.0; 55.0-160.0; 1
+NEC; NEC MultiSync FP912SB; nec61dd; 30.0-110.0; 50.0-160.0; 1
+NEC; NEC MultiSync FP950; nec4c04; 31.0-110.0; 55.0-160.0; 1
+NEC; NEC MultiSync HR17; 0; 31.0-96.0; 55.0-160.0; 1
+NEC; NEC MultiSync HR19; 0; 31.0-110.0; 55.0-160.0; 1
+NEC; NEC MultiSync LCD1500M; nec3b88; 30.0-61.0; 50.0-77.0; 1
+NEC; NEC MultiSync LCD1501; NEC65FB; 31.0-63.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1510; nec3b6a; 24.0-60.0; 55.0-86.0; 1
+NEC; NEC MultiSync LCD1510+; nec3d5f; 24.0-60.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1510V; nec3b74; 24.0-60.0; 55.0-86.0; 1
+NEC; NEC MultiSync LCD1510V+; nec3d73; 24.0-60.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1511M; NEC6607; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1512; NEC660D; 30.0-63.0; 55.0-76.0; 1
+NEC; NEC MultiSync LCD1515; NEC6616; 30.0-63.0; 55.0-76.0; 1
+NEC; NEC MultiSync LCD1525M; nec3bb0; 24.0-60.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1525S; nec3bce; 24.0-80.0; 56.0-76.0; 1
+NEC; NEC MultiSync LCD1525V; nec3ba6; 24.0-49.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1525X; nec6591; 24.0-60.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1530V; nec65a8; 31.0-60.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1550M; NEC65C7; 31.0-60.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1550V; NEC65C6; 31.0-60.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1550X; NEC65C8; 30.0-60.0; 50.0-75.0; 1
+NEC; NEC MultiSync LCD1560M; NEC65F2; 31.0-63.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1560NX; NEC65FA; 31.0-63.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1560V; NEC65F0; 31.0-63.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1560V+; NEC660F; 31.0-63.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1560VM; NEC65F1; 31.0-63.0; 55.0-75.0; 1
+NEC; NEC MultiSync LCD1565; NEC6620; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1570NX; NEC667E; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD15T; nec6590; 24.0-60.0; 55.0-85.0; 1
+NEC; NEC MultiSync LCD1700M; NEC65A9; 31.0-81.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1700M+; NEC65B5; 31.0-81.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1700NX (Analog); NEC65E0; 31.0-80.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1700NX (Digital); NEC65DF; 31.0-68.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1700V; NEC65D2; 31.0-80.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1701; NEC65EF; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1711M; NEC6606; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1712; NEC660E; 30.0-83.0; 55.0-76.0; 1
+NEC; NEC MultiSync LCD1715; NEC6618; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1720M; NEC----; 31.0-82.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1760NX (Analog); NEC65ED; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1760NX (Digital); NEC6604; 31.0-69.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1760V; NEC65EE; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1760VM (Analog); NEC65EA; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1760VM (Digital); NEC6603; 31.0-70.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1765; NEC6621; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1800; nec65a1; 24.0-80.0; 55.0-86.0; 1
+NEC; NEC MultiSync LCD1810; nec4786; 31.0-80.0; 56.0-76.0; 1
+NEC; NEC MultiSync LCD1810X; nec6594; 31.0-82.0; 56.0-85.0; 1
+NEC; NEC MultiSync LCD1830; NEC65B1; 24.0-82.0; 55.0-85.0; 1280x1024
+NEC; NEC MultiSync LCD1850DX; NEC65B3; 31.0-82.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1850E; NEC65D1; 31.0-82.0; 55.0-85.0; 1
+NEC; NEC MultiSync LCD1850X; NEC65C0; 31.0-82.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1855NX (Analog); NEC65F7; 31.0-83.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1855NX (Digital); NEC65F8; 31.0-68.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1860NX (Analog); NEC65E8; 31.0-82.0; 55.0-85.0; 1
+NEC; NEC MultiSync LCD1860NX (Digital); NEC65E9; 31.0-80.0; 55.0-85.0; 1
+NEC; NEC MultiSync LCD1880SX; NEC65D4; 31.0-82.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1912; NEC6614; 31.0-84.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1915X (Analog); NEC663A; 31.0-83.0; 56.0-76.0; 1
+NEC; NEC MultiSync LCD1915X (Digital); NEC663B; 31.0-83.0; 56.0-76.0; 1
+NEC; NEC MultiSync LCD1920NX; NEC65DE; 31.0-80.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1960NX (Analog); NEC661E; 31.0-84.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1960NX (Digital); NEC661F; 31.0-84.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1960NXi (Analog); NEC6632; 31.0-84.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1960NXi (Digital); NEC6633; 31.0-84.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1970GX; NEC6685; 31.0-84.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD1980SX (Analog); NEC660C; 31.0-84.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1980SX (Digital); NEC660B; 31.0-84.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1980SX TCO-03 (Analog); NEC6627; 31.0-84.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1980SX TCO-03 (Digital); NEC6626; 31.0-84.0; 50.0-85.0; 1
+NEC; NEC MultiSync LCD1980SXi (Analog); NEC6649; 31.0-84.0; 48.0-85.0; 1
+NEC; NEC MultiSync LCD1980SXi (Digital); NEC664A; 31.0-84.0; 48.0-85.0; 1
+NEC; NEC MultiSync LCD2000; nec4f56; 24.0-81.0; 55.0-85.0; 1
+NEC; NEC MultiSync LCD2010; nec4f60; 24.0-81.0; 55.0-85.0; 1
+NEC; NEC MultiSync LCD2010X; nec65a2; 31.0-80.0; 56.0-85.0; 1
+NEC; NEC MultiSync LCD2060NX; NEC6637; 31.0-95.0; 56.0-85.0; 1
+NEC; NEC MultiSync LCD2070NX; NEC667B; 31.0-95.0; 56.0-85.0; 1
+NEC; NEC MultiSync LCD2080UX; NEC6605; 30.0-98.0; 48.0-87.0; 1
+NEC; NEC MultiSync LCD2110; nec6597; 24.0-82.0; 56.0-76.0; 1
+NEC; NEC MultiSync LCD2180UX; NEC662C; 30.0-96.0; 48.0-87.0; 1
+NEC; NEC MultiSync LCD2335WXM (Analog); NEC667F; 31.0-63.0; 56.0-75.0
+NEC; NEC MultiSync LCD2335WXM (Digital); NEC6680; 31.0-63.0; 56.0-75.0; 1
+NEC; NEC MultiSync LCD3000 (Analog); NEC65E6; 30.0-75.0; 58.0-62.0; 1
+NEC; NEC MultiSync LCD3000 (Digital); NEC65E7; 30.0-48.0; 58.0-62.0; 1
+NEC; NEC MultiSync LCD400; nec3782; 24.0-60.0; 55.0-86.0; 1
+NEC; NEC MultiSync LCD4000 (Analog); NEC6609; 30.0-75.0; 58.0-62.0
+NEC; NEC MultiSync LCD4000 (Digital); NEC6608; 30.0-48.0; 58.0-62.0; 1
+NEC; NEC MultiSync LCD400V; nec378c; 24.0-60.0; 55.0-86.0; 1
+NEC; NEC MultiSync LT80; nec0320; 15.0-60.0; 50.0-85.0; 1
+NEC; NEC MultiSync M500; nec3d68; 30.0-69.0; 55.0-120.0; 1
+NEC; NEC MultiSync M700; nec43c6; 31.0-69.0; 55.0-120.0; 1
+NEC; NEC MultiSync MT1000; nec2710; 15.0-80.0; 50.0-85.0; 1
+NEC; NEC MultiSync MT810; nec1fa4; 15.0-60.0; 50.0-85.0; 1
+NEC; NEC MultiSync P1150; nec53ca; 31.0-94.0; 55.0-160.0; 1
+NEC; NEC MultiSync P1250+; nec53e8; 31.0-110.0; 55.0-160.0; 1
+NEC; NEC MultiSync P750; nec4420; 31.0-94.0; 55.0-160.0; 1
+NEC; NEC MultiSync V500; nec3d7c; 31.0-65.0; 55.0-100.0; 1
+NEC; NEC MultiSync V520; nec251d; 31.0-70.0; 55.0-120.0; 1
+NEC; NEC MultiSync XE15; nec3c00; 31.0-65.0; 55.0-120.0; 1
+NEC; NEC MultiSync XE15; nec3c1e; 31.0-65.0; 55.0-120.0; 1
+NEC; NEC MultiSync XE17; nec43a8; 31.0-65.0; 55.0-120.0; 1
+NEC; NEC MultiSync XE17; nec43b2; 31.0-65.0; 55.0-120.0; 1
+NEC; NEC MultiSync XE21; nec533e; 31.0-69.0; 55.0-120.0; 1
+NEC; NEC MultiSync XP15; nec3c0a; 31.0-65.0; 55.0-160.0; 1
+NEC; NEC MultiSync XP17; nec4416; 31.0-82.0; 55.0-160.0; 1
+NEC; NEC MultiSync XP21; nec53b6; 31.0-89.0; 55.0-160.0; 1
+NEC; NEC MultiSync XV14; nec37fa; 30.0-57.0; 55.0-100.0; 1
+NEC; NEC MultiSync XV14; nec37fb; 30.0-57.0; 55.0-100.0; 1
+NEC; NEC MultiSync XV15; nec3c14; 31.0-65.0; 55.0-100.0; 1
+NEC; NEC MultiSync XV15+; nec3d5e; 31.0-65.0; 55.0-100.0; 1
+NEC; NEC MultiSync XV17 / XV17+; nec43bc; 31.0-65.0; 55.0-100.0; 1
+NEC; NEC MultiSync XV17+ (-2); nec43bd; 31.0-82.0; 55.0-100.0; 1
+NEC; NEC MultiSync XV17+ (-2); nec442a; 31.0-82.0; 55.0-100.0; 1
+NEC; NEC PK-DH172; nec00c8; 30.0-63.0; 60.0-85.0; 1
+NEC; NEC Ready Monitor; nec-ready; 31.5; 50.0-90.0; 1
+NEC; NEC VistaScan 7000; necea8b; 30.0-69.0; 50.0-120.0; 1
+Nissei Sangyo; Nissei Sangyo CM1483M; cm1483m; 30.0-40.0; 50.0-120.0; 1
+Nissei Sangyo; Nissei Sangyo CM1584MU; cm1584mu; 30.0-58.0; 50.0-100.0; 1
+Nissei Sangyo; Nissei Sangyo CM1785MU; cm1785mu; 30.0-64.0; 50.0-100.0; 1
+Nissei Sangyo; Nissei Sangyo CM2085M; cm2085m; 30.0-64.0; 50.0-120.0; 1
+Nissei Sangyo; Nissei Sangyo CM2085MU; cm2085mu; 30.0-64.0; 50.0-120.0; 1
+Nissei Sangyo; Nissei Sangyo CM2086A; cm2086a; 46.0-64.0; 55.0-65.0; 1
+Nissei Sangyo; Nissei Sangyo CM2087MU; cm2087mu; 30.0-78.0; 50.0-120.0; 1
+Nissei Sangyo; Nissei Sangyo CM2186AF; cm2186af; 60.0-65.0; 60.0-70.0; 1
+Nissei Sangyo; Nissei Sangyo CM2187MU; cm2187mu; 30.0-78.0; 50.0-120.0; 1
+Nokia; Nokia 300Xa; nok1300; 48.3-60.3; 60.0-75.0; 1
+Nokia; Nokia 400Xa; nok1400; 48.3-60.3; 60.0-75.0; 1
+Nokia; Nokia 417TV; nok00b4; 30.0-64.0; 50.0-100.0; 1
+Nokia; Nokia 445G; nok00c7; 30.0-70.0; 50.0-115.0; 1
+Nokia; Nokia 445M; nok00cd; 30.0-82.0; 50.0-120.0; 0
+Nokia; Nokia 445PRO; nok01ce; 29.0-125.0; 50.0-180.0; 1
+Nokia; Nokia 445R; nok00d2; 30.0-102.0; 50.0-120.0; 1
+Nokia; Nokia 445X; nok00d8; 30.0-102.0; 50.0-120.0; 0
+Nokia; Nokia 445Xav; nok00c1; 30.0-102.0; 50.0-120.0; 1
+Nokia; Nokia 445Xavc; nok01c0; 30.0-102.0; 50.0-120.0; 1
+Nokia; Nokia 445Xi; nok00c9; 30.0-102.0; 50.0-120.0; 1
+Nokia; Nokia 445XiPlus; nok00ca; 30.0-110.0; 50.0-150.0; 1
+Nokia; Nokia 445Xpro; nok01d0; 30.0-121.0; 50.0-150.0; 1
+Nokia; Nokia 445Xpro125; nok01d2; 30.0-125.0; 50.0-150.0; 1
+Nokia; Nokia 445ZA; nok01da; 30.0-110.0; 50.0-150.0; 1
+Nokia; Nokia 446PRO; nok0146; 30.0-107.0; 50.0-150.0; 1
+Nokia; Nokia 446Xpro; nok0150; 30.0-107.0; 50.0-150.0; 1
+Nokia; Nokia 446XS; nok0153; 30.0-96.0; 50.0-150.0; 1
+Nokia; Nokia 446Xt; nok0143; 30.0-96.0; 50.0-150.0; 1
+Nokia; Nokia 446ZA; nok0145; 30.0-96.0; 50.0-150.0; 1
+Nokia; Nokia 447B; nok00a2; 30.0-64.0; 50.0-124.0; 1
+Nokia; Nokia 447DTC; nok00b9; 31.0-92.0; 50.0-150.0; 1
+Nokia; Nokia 447E; nok00a5; 30.0-82.0; 50.0-110.0; 1
+Nokia; Nokia 447i; nok01aa; 30.0-72.0; 50.0-120.0; 1
+Nokia; Nokia 447K; nok00bc; 30.0-91.0; 50.0-150.0; 1
+Nokia; Nokia 447KA; nok00ab; 30.0-91.0; 50.0-150.0; 1
+Nokia; Nokia 447KC; nok00a3; 30.0-91.0; 50.0-150.0; 1
+Nokia; Nokia 447L; nok00ac; 30.0-64.0; 50.0-100.0; 1
+Nokia; Nokia 447M; nok00ad; 30.0-64.0; 50.0-110.0; 1
+Nokia; Nokia 447PRO; nok01bd; 30.0-96.0; 50.0-150.0; 1
+Nokia; Nokia 447S; nok00a6; 30.0-86.0; 50.0-150.0; 1
+Nokia; Nokia 447V; nok00b6; 30.0-64.0; 50.0-100.0; 1
+Nokia; Nokia 447W; nok00b7; 30.0-85.0; 50.0-100.0; 1
+Nokia; Nokia 447X; nok00b8; 30.0-82.0; 50.0-110.0; 1
+Nokia; Nokia 447Xa; nok00a1; 30.0-91.0; 50.0-150.0; 1
+Nokia; Nokia 447Xav; nok00bb; 30.0-91.0; 50.0-150.0; 1
+Nokia; Nokia 447Xavc; nok01a0; 30.0-91.0; 50.0-150.0; 1
+Nokia; Nokia 447Xi; nok00a9; 30.0-91.0; 50.0-150.0; 1
+Nokia; Nokia 447XiPlus; nok00aa; 30.0-86.0; 50.0-150.0; 1
+Nokia; Nokia 447Xpro; nok01b0; 30.0-96.0; 50.0-150.0; 1
+Nokia; Nokia 447XS; nok01b3; 30.0-86.0; 50.0-150.0; 1
+Nokia; Nokia 447ZA; nok01ba; 30.0-86.0; 50.0-150.0; 1
+Nokia; Nokia 447Za; nok00ba; 30.0-72.0; 50.0-120.0; 1
+Nokia; Nokia 447ZAPlus; nok01bb; 30.0-86.0; 50.0-150.0; 1
+Nokia; Nokia 447Zi; nok01a9; 30.0-72.0; 50.0-120.0; 1
+Nokia; Nokia 447ZiPlus; nok01bc; 30.0-72.0; 50.0-150.0; 1
+Nokia; Nokia 449E; nok0085; 30.0-62.0; 50.0-100.0; 1
+Nokia; Nokia 449M; nok008d; 30.0-64.0; 50.0-100.0; 1
+Nokia; Nokia 449X; nok0098; 30.0-64.0; 50.0-100.0; 1
+Nokia; Nokia 449Xa; nok0081; 30.0-65.0; 50.0-120.0; 1
+Nokia; Nokia 449XaPlus; nok0082; 30.0-69.0; 50.0-120.0; 1
+Nokia; Nokia 449Xi; nok0089; 30.0-65.0; 50.0-120.0; 1
+Nokia; Nokia 449XiPlus; nok008a; 30.0-69.0; 50.0-120.0; 1
+Nokia; Nokia 449ZA; nok009a; 30.0-70.0; 50.0-120.0; 1
+Nokia; Nokia 44BS; nok0093; 30.0-62.0; 50.0-100.0; 1
+Nokia; Nokia 500Xa; nok1500; 31.4-60.0; 56.2-75.0; 1
+Nokia; Nokia 800PRO-1; nok1802; 30.0-82.0; 55.0-86.0; 1
+Nokia; Nokia 800PRO-2; nok1803; 31.0-65.0; 58.0-62.0; 1
+Nokia; Nokia 800XA/820L; nok1801; 24.0-80.0; 56.0-75.0; 1
+Nokia; Nokia 800Xi; nok1800; 24.0-80.0; 56.0-75.0; 1
+OKI; Oki GD1203; OKI04B3; 31.0-61.0; 56.0-75.0; 1
+Olivetti; Olivetti DSM 25-314 P-Y; dsm25-314p-y; 31.5; 60.0-70.0; 1
+Olivetti; Olivetti DSM 26-314 LE; dsm26-314le; 31.5; 60.0-70.0; 1
+Olivetti; Olivetti DSM 27-039; dsm27-039; 35.5; 87.0; 1
+Olivetti; Olivetti DSM 27-117; dsm27-117; 30.0-64.0; 50.0-100.0; 1
+Olivetti; Olivetti DSM 27-120; dsm27-120; 30.0-82.0; 50.0-160.0; 1
+Olivetti; Olivetti DSM 27-140 LE; dsm27-140le; 30.0-35.5; 50.0-90.0; 1
+Olivetti; Olivetti DSM 27-141 PS; dsm27-141ps; 35.5; 87.0; 1
+Olivetti; Olivetti DSM 27-514 MS; dsm27-514ms; 30.0-58.0; 50.0-110.0; 1
+Olivetti; Olivetti DSM 27-615; dsm27-615; 30.0-62.0; 48.0-100.0; 1
+Olivetti; Olivetti DSM 28-039 PS; dsm28-039ps; 30.0-38.0; 50.0-90.0; 1
+Olivetti; Olivetti DSM 28-142 PS; dsm28-142ps; 30.0-38.0; 50.0-90.0; 1
+Olivetti; Olivetti DSM 28-143 PS; dsm28-143ps; 30.0-48.5; 50.0-90.0; 1
+Olivetti; Olivetti DSM 28-143 PS-2; dsm28-143ps-2; 30.0-48.5; 50.0-90.0; 1
+Olivetti; Olivetti DSM 28-144 MS; dsm28-144ms; 30.0-60.0; 50.0-95.0; 1
+Olivetti; Olivetti DSM 28-171 HR; dsm28-171hr; 31.0-82.0; 50.0-110.0; 1
+Olivetti; Olivetti DSM 28-172 EY; dsm28-172ey; 30.0-65.0; 50.0-120.0; 1
+Olivetti; Olivetti DSM 28-201 HR; dsm28-201hr; 30.0-82.0; 50.0-160.0; 1
+Olivetti; Olivetti DSM 40-151; dsm40-151; 30.0-64.0; 48.0-100.0; 1
+Olivetti; Olivetti DSM 50-148; dsm50-148; 30.0-48.5; 50.0-90.0; 1
+Olivetti; Olivetti DSM 50-172; dsm50-172; 30.0-65.0; 50.0-120.0; 1
+Olivetti; Olivetti DSM 50-201; dsm50-201; 30.0-82.0; 50.0-160.0; 1
+Optiquest; Optiquest 1000; optiquest_1000; 30.0-48.0; 47.0-90.0; 1
+Optiquest; Optiquest 1000S-2; oqi3234; 31.5-48.4; 50-100; 1
+Optiquest; Optiquest 1562A-2; oqi3232; 31.5-62; 50-90; 1
+Optiquest; Optiquest 1769DC; oqi3233; 30-69; 50-120; 1
+Optiquest; Optiquest 1769DC; oqi4637; 30-69; 50-120; 1
+Optiquest; Optiquest 1769DC; vsc4637; 30-69; 50-120; 1
+Optiquest; Optiquest 3000; optiquest_3000; 30.0-55.0; 45.0-90.0; 1
+Optiquest; Optiquest 4000; optiquest_4000; 30.0-76.0; 40.0-120.0; 1
+Optiquest; Optiquest L700; oqi455a; 31-61; 56-75; 1
+Optiquest; Optiquest L700-2; oqia20f; 31-62; 50-75; 1
+Optiquest; Optiquest L900; oqi3757; 30-80; 50-75; 1
+Optiquest; Optiquest Q100; oqi4a31; 30-86; 50-120; 1
+Optiquest; Optiquest Q115; oqi4d35; 30-95; 50-180; 1
+Optiquest; Optiquest Q41; oqi4136; 30-48; 50-90; 1
+Optiquest; Optiquest Q41-2; oqiofoh; 30-48; 50-90; 1
+Optiquest; Optiquest Q51; oqi4435; 30-54; 50-100; 1
+Optiquest; Optiquest Q51-2; oqi4442; 30-54; 50-100; 1
+Optiquest; Optiquest Q51-3; oqi4443; 30-56; 50-120; 1
+Optiquest; Optiquest Q51-4; oqi4643; 30-56; 50-120; 1
+Optiquest; Optiquest Q53; oqi4433; 30-70; 50-100; 1
+Optiquest; Optiquest Q55; oqi4444; 30-70; 50-160; 1
+Optiquest; Optiquest Q55-2; oqi4543; 30-70; 50-160; 1
+Optiquest; Optiquest Q71; oqi4735; 30-71; 50-120; 1
+Optiquest; Optiquest Q71-2; oqi4738; 30-71; 50-120; 1
+Optiquest; Optiquest Q71-3; oqi465a; 30-71; 50-120; 1
+Optiquest; Optiquest Q71-4; oqi5a55; 30-71; 50-120; 1
+Optiquest; Optiquest Q71-5; oqi5141; 30-70; 50-120; 1
+Optiquest; Optiquest Q73; oqi4559; 30-71; 50-160; 1
+Optiquest; Optiquest Q75; oqi5241; 30-86; 50-160; 1
+Optiquest; Optiquest Q75F; oqi4159; 30-95; 50-160; 1
+Optiquest; Optiquest Q91; oqi4a38; 30-85; 50-160; 1
+Optiquest; Optiquest Q95; oqi4a39; 30-86; 50-160; 1
+Optiquest; Optiquest Q95-2; oqi4c39; 30-86; 50-160; 1
+Optiquest; Optiquest V115; oqi4d31; 30-95; 50-160; 1
+Optiquest; Optiquest V115T; oqi4d32; 30-96; 50-150; 1
+Optiquest; Optiquest V55; oqi4436; 30-70; 50-160; 1
+Optiquest; Optiquest V641; oqi4132; 31.5-48.4; 50-90; 1
+Optiquest; Optiquest V655; oqi3332; 30-66; 50-100; 1
+Optiquest; Optiquest V655-2; oqi4432; 30-65; 50-100; 1
+Optiquest; Optiquest V655-3; oqi4434; 30-70; 50-100; 1
+Optiquest; Optiquest V73; oqi5634; 30-70; 50-160; 1
+Optiquest; Optiquest V75; oqi4739; 30-96; 50-160; 1
+Optiquest; Optiquest V773; oqi4733; 30-69; 50-160; 1
+Optiquest; Optiquest V773-2; oqi4736; 30-70; 50-180; 1
+Optiquest; Optiquest V775; oqi3333; 30-82; 50-130; 1
+Optiquest; Optiquest V775-2; oqi4732; 30-85; 50-120; 1
+Optiquest; Optiquest V95; oqi4a32; 30-95; 50-150; 1
+Optiquest; Optiquest V95-2; oqi4a36; 30-95; 50-160; 1
+Optiquest; Optiquest VA656; oqi3138; 30-69; 50-120; 1
+Orchestra; Trumpet-14; 0; 31.5-48.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 1010; pb1010; 30.0-40.0; 50.0-62.0; 1
+Packard Bell; Packard Bell 1015; pb1015; 30.0-40.0; 50.0-73.0; 1
+Packard Bell; Packard Bell 1020; pb1020; 30.0-50.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 1020; pbn4100; 30.0-50.0; 30.0-92.0; 1
+Packard Bell; Packard Bell 1024; pb1024; 30.0-50.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 1024S; pbn4234; 30.0-50.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 1408SLE; pb1408sle; 30.0-50.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 1412SME; pb1412sme; 30.0-50.0; 50.0-62.0; 1
+Packard Bell; Packard Bell 1428ME; pb1428me; 30.0-50.0; 50.0-80.0; 1
+Packard Bell; Packard Bell 1511SL; pb1511sl; 30-62; 50-120; 1
+Packard Bell; Packard Bell 1512SL; pb1512sl; 30-62; 50-120; 1
+Packard Bell; Packard Bell 1512SME; pb1512sme; 30.0-65.0; 50.0-80.0; 1
+Packard Bell; Packard Bell 1712SL; pb1712sl; 30.0-65.0; 50.0-80.0; 1
+Packard Bell; Packard Bell 2020; pb2020; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 2024; pb2024; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 2025; pb2025; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 3010; pb3010; 30.0-50.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 3010; pbe7123; 30.0-50.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 3020; pb3020; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell 3025; pb3025; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell Monitor; pbgeneric; 30.0-40.0; 50.0-62.0; 1
+Packard Bell; Packard Bell PB8510SV; pb8510sv; 30.0-37.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PB8528SVG; pb8528svg; 31.5-38.0; 55.0-87.0; 1
+Packard Bell; Packard Bell PnP 2024S; pbe5234; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 2024S; pbn5222; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 2024S; pbn5234; 30.0-54.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 2025; pbe2352; 30.0-65.0; 50.0-80.0; 1
+Packard Bell; Packard Bell PnP 2025 (for Europe 3G); pbn5102; 30.0-65.0; 30.0-122.0; 1
+Packard Bell; Packard Bell PnP 2025E; pbn5100; 30.0-54.0; 30.0-102.0; 1
+Packard Bell; Packard Bell PnP 2160; pbn5002; 30.0-54.0; 50.0-120.0; 1
+Packard Bell; Packard Bell PnP 2160; pbn5109; 30.0-54.0; 50.0-120.0; 1
+Packard Bell; Packard Bell PnP 3025; pbe2372; 30.0-65.0; 50.0-80.0; 1
+Packard Bell; Packard Bell PnP 3025 (for Europe 3G); pbn7100; 30.0-65.0; 30.0-122.0; 1
+Packard Bell; Packard Bell PnP 3030; pbe1c9d; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 3030; pbn2372; 30.0-65.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 3070; pbn7108; 30.0-70.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 4480; pbn4480; 30.0-50.0; 50.0-75.0; 1
+Packard Bell; Packard Bell PnP 4480; pbn4483; 30.0-50.0; 50.0-75.0; 1
+Packard Bell; Packard Bell PnP 4480; pbn4484; 30.0-50.0; 50.0-75.0; 1
+Packard Bell; Packard Bell PnP 4480 (for Europe 3G); pbn4101; 30.0-50.0; 30.0-92.0; 1
+Packard Bell; Packard Bell PnP 5480; pbn5480; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 5480; pbn5481; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 5480; pbn5482; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 5480; pbn5483; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 5480; pbn5484; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 5480; pbn5486; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 5480 (for Europe 3G); pbn5103; 30.0-70.0; 30.0-122.0; 1
+Packard Bell; Packard Bell PnP 5480E; pbn5101; 30.0-54.0; 30.0-102.0; 1
+Packard Bell; Packard Bell PnP 5680; pbn5684; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 7480; pbn1d39; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 7480; pbn7481; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 7480; pbn7483; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell PnP 7480 (for Europe 3G); pbn7101; 30.0-70.0; 30.0-122.0; 1
+Packard Bell; Packard Bell PnP 7680; pbn7683; 30.0-69.0; 50.0-90.0; 1
+Packard Bell; Packard Bell Pnp LCD15; pbn5105; 60.0; 75.0; 1
+Packard Bell; Packard Bell Viseo 223Ws; PKB008b; 31-83; 56-76; 1680x1050
+Panasonic; Panasonic 264a; MEI264a; 30-61; 50-120
+Panasonic; Panasonic C-1591E; 7e_f; 30-69; 50-160; 1
+Panasonic; Panasonic C-1591EA; 7e_e; 30-69; 50-160; 1
+Panasonic; Panasonic C1491; mp2; 30-49; 50-90; 1
+Panasonic; Panasonic C1791E; hv3_a; 30-64; 50-160; 1
+Panasonic; Panasonic C1791Ei; mei0c03; 30-69; 50-160; 1
+Panasonic; Panasonic C1792P; mei0c12; 30-82; 50-160; 1
+Panasonic; Panasonic C2192P; mei1603; 30-82; 50-160; 1
+Panasonic; Panasonic E15; mei2618; 30-61; 50-90; 1
+Panasonic; Panasonic E21; mei1638; 30-89; 50-160; 1
+Panasonic; Panasonic E50; mei2637; 30.0-61.0; 50.0-120.0; 1
+Panasonic; Panasonic E70i; mei2c03; 30.0-70.0; 50.0-180.0; 1
+Panasonic; Panasonic LC40; mei1e02; 24.0-61.0; 50.0-77.0; 1
+Panasonic; Panasonic LC50S (TX-D5L31F); mei1e07; 30.0-61.0; 50.0-77.0; 1
+Panasonic; Panasonic P15; mei2617; 30-69; 50-160; 1
+Panasonic; Panasonic P17; mei0c3d; 30-86; 50-160; 1
+Panasonic; Panasonic P21; mei1636; 30-115; 50-160; 1
+Panasonic; Panasonic P50; mei2632; 30.0-69.0; 50.0-180.0; 1
+Panasonic; Panasonic P70; mei0c81; 30.0-95.0; 50.0-180.0; 1
+Panasonic; Panasonic PAMAMEDIA-15; mei2609; 30-69; 50-160; 1
+Panasonic; Panasonic PANAMEDIA-17; mei0c22; 30-69; 50-160; 1
+Panasonic; Panasonic PF17; mei100b; 30-86; 50-160; 1
+Panasonic; Panasonic PF70; mei1007; 30.0-86.0; 50.0-160.0; 1
+Panasonic; Panasonic PL70i(TX-D7S55); mei0c9b; 30.0-97.0; 50.0-180.0; 1
+Panasonic; Panasonic PM15; mei2621; 30-69; 50-160; 1
+Panasonic; Panasonic PM17; mei0c52; 30-69; 50-160; 1
+Panasonic; Panasonic S110; mei1649; 30.0-95.0; 50.0-180.0; 1
+Panasonic; Panasonic S15; mei2622; 30.0-67.0; 50.0-120.0; 1
+Panasonic; Panasonic S17; mei0c3b; 30-69; 50-160; 1
+Panasonic; Panasonic S21; mei1630; 30-95; 50-160; 1
+Panasonic; Panasonic SL70i(TX-D7S36); mei0c96; 30.0-70.0; 50.0-180.0; 1
+Panasonic; Panasonic SL90 (TX-D9S54); mei120d; 30.0-95.0; 50.0-180.0; 1
+Panasonic; Panasonic TX-1713MA series; hv1; 30-64; 50-90; 1
+Panasonic; Panasonic TX-D1562F-E; mei260e; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1562F-G; mei260b; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1562F-SW; mei260d; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1562F-U; mei260c; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1562NMF; mei260a; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1563PE1; mei2619; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1563PE2; mei261c; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1563PG2; mei261f; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1563PU1; mei261a; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1563PU2; mei261b; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1731 series; hv2; 30-82; 50-120; 1
+Panasonic; Panasonic TX-D1732 series; hv3; 30-64; 50-160; 1
+Panasonic; Panasonic TX-D1733-E; mei0c0a; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733-G; mei0c07; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733-J; hv5; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733-K; mei0c0d; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733-SW; mei0c09; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733-U; mei0c08; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733F-E; mei0c27; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733F-G; mei0c24; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733F-J; mei0c48; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733F-K; mei0c2a; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733F-SW; mei0c26; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1733F-U; mei0c25; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734-E; mei0c33; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734-G; mei0c32; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734-J; mei0c3c; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734-SW; mei0c34; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734-U; mei0c35; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734F-E; mei0c58; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734F-G; mei0c57; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734F-J; mei0c63; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734F-K; mei0c5b; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734F-SW; mei0c59; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1734F-U; mei0c5a; 30-69; 50-160; 1
+Panasonic; Panasonic TX-D1751 series; hv4; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D1752-E; mei0c17; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D1752-G; mei0c14; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D1752-SW; mei0c16; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D1752-U; mei0c15; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D1753-E; mei0c38; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D1753-G; mei0c37; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D1753-SW; mei0c39; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D1753-U; mei0c3a; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D2051-G; mei1205; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2051-K; mei120b; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2051-SW; mei1207; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2051-U; mei1206; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2131 series; gv2; 30-82; 50-150; 1
+Panasonic; Panasonic TX-D2131P series; gv2p; 30-82; 50-150; 1
+Panasonic; Panasonic TX-D2151 series; hv4s; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2151-EA; mei1608; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2151-GA; mei1605; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2151-J; mei1612; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2151-KA; mei160b; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2151-SWA; mei1607; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2151-UA; mei1606; 30-82; 50-160; 1
+Panasonic; Panasonic TX-D2162-E; mei162c; 30-95; 50-160; 1
+Panasonic; Panasonic TX-D2162-G; mei162b; 30-95; 50-160; 1
+Panasonic; Panasonic TX-D2162-J; mei162f; 30-95; 50-160; 1
+Panasonic; Panasonic TX-D2162-K; mei1631; 30-95; 50-160; 1
+Panasonic; Panasonic TX-D2162-SW; mei162d; 30-95; 50-160; 1
+Panasonic; Panasonic TX-D2162-U; mei162e; 30-95; 50-160; 1
+Panasonic; Panasonic TX-D2171-E; mei1633; 30-115; 50-160; 1
+Panasonic; Panasonic TX-D2171-G; mei1632; 30-115; 50-160; 1
+Panasonic; Panasonic TX-D2171-J; mei163e; 30-115; 50-160; 1
+Panasonic; Panasonic TX-D2171-SW; mei1634; 30-115; 50-160; 1
+Panasonic; Panasonic TX-D2171-U; mei1635; 30-115; 50-160; 1
+Panasonic; Panasonic TX-D4L31-J; mei1e01; 30-61; 50-77; 1
+Panasonic; Panasonic TX-D7P53-E; mei1008; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D7P53-G; mei1007; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D7P53-J; mei1006; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D7P53-K; mei100c; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D7P53-SW; mei1009; 30-86; 50-160; 1
+Panasonic; Panasonic TX-D7P53-U; mei100a; 30-86; 50-160; 1
+Panasonic; Panasonic TX-T1562CJ1; 7e_d; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1562PE1; 7e_b; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1562PE2; mei2604; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1562PG1; 7e_a; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1562PG2; mei2603; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1562PT2; mei2602; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1562PU1; 7e_c; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1563F-E; mei2623; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1563F-G; mei2620; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1563F-SW; mei2625; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1563F-U; mei2624; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1563PT1; mei261e; 30-69; 50-160; 1
+Panasonic; Panasonic TX-T1565PE1; mei2628; 30-67; 50-120; 1
+Panasonic; Panasonic TX-T1565PG1; mei2627; 30-67; 50-120; 1
+Panasonic; Panasonic TX-T1565PU1; mei2629; 30-67; 50-120; 1
+Panasonic; Panasonic TX-T1567PE1; mei261d; 30-61; 50-90; 1
+Panasonic; Panasonic TX-T1567PT1; mei2626; 30-61; 50-90; 1
+PC Brand; PC Brand Super_VGA; super_vga; 28.0-38.0; 50.0-90.0; 1
+Peacock; Peacock P1796 C2; actb013; 30-97; 50-150; 1
+Philips; Magnavox MB7000(17inch/CM6800); phla17b; 30.0-66.0; 50.0-130.0; 1
+Philips; Philips 104B(14inch/CM1300); phl104b; 30.0-54.0; 50.0-110.0; 1
+Philips; Philips 104B(14inch/CM2300); phlb14b; 30.0-54.0; 50.0-120.0; 1
+Philips; Philips 105B(15inch/CM1200); phla15b; 30.0-66.0; 50.0-110.0; 1
+Philips; Philips 105S(15inch/CM1300); phl105c; 30.0-54.0; 50.0-110.0; 1
+Philips; Philips 105S(15inch/CM2300); phlb15c; 30.0-60.0; 50.0-120.0; 1
+Philips; Philips 107B(17inch/CM6800); phl6800; 30.0-69.0; 50.0-130.0; 1
+Philips; Philips 107B20(17inch/CM2317); phle003; 30.0-92.0; 50.0-160.0; 1
+Philips; Philips 107E; PHL0004; 30-70; 50-160; 1
+Philips; Philips 107P(17inch); phle002; 30.0-92.0; 50.0-160.0; 1
+Philips; Philips 107S(17inch/CM1300); phla17c; 30.0-69.0; 50.0-120.0; 1
+Philips; Philips 107S(17inch/CM6800); phl107c; 30.0-66.0; 50.0-130.0; 1
+Philips; Philips 109B40; PHLE00E; 30.0-97.0; 50.0-160.0
+Philips; Philips 109S; phl4109; 30.0-95.0; 50.0-160.0; 1
+Philips; Philips 14C(14inch/7CM5209); 0; 31.5,35.2,35.5; 50.0-100.0; 1
+Philips; Philips 14C(14inch/7CM5279); 0; 31.5,35.2,35.5; 50.0-100.0; 1
+Philips; Philips 150C5 (15inch); PHLC00A; 30.0-63.0; 56.0-76.0; 1
+Philips; Philips 150S; PHL0805; 30-61; 56-75; 1024x768
+Philips; Philips 170C5 (17inch); PHLC00B; 30.0-82.0; 56.0-76.0; 1
+Philips; Philips 170X; PHLc00f; 30-83; 56-76; 1280x1024
+Philips; Philips 17ACM38; phl3800; 30-82; 50-160; 1
+Philips; Philips 17BCM28; phl2800; 30-66; 50-130; 1
+Philips; Philips 17TCM26; phl2600; 30-66; 50-100; 1
+Philips; Philips 180B2; PHL0810; 30-82; 56-76; 1280x1024
+Philips; Philips 190C; PHL0849; 30-83; 56-76; 1280x1024
+Philips; Philips 190S; PHL082f; 30-83; 56-76; 1280x1024
+Philips; Philips 200T(20inch/CM0700); phl200d; 30.0-90.0; 50.0-160.0; 1
+Philips; Philips 201B(21inch/CM0770); phl201b; 30.0-94.0; 48.0-160.0; 1
+Philips; Philips 20CM64; 20cm64; 30.0-64.0; 50.0-90.0; 1
+Philips; Philips 29PX8031 Monitor/TV; phl5f1f; 31.5-35.2; 50.0-56.0; 1
+Philips; Philips 6CM321; 6cm321; 35.2; 50.0-90.0; 1
+Philips; Philips 7BM749; 7bm749; 31.5; 60.0-70.0; 1
+Philips; Philips 7CM321; 7cm321; 35.5; 50.0-90.0; 1
+Philips; Philips 7CM329; 7cm329; 35.5; 50.0-90.0; 1
+Philips; Philips 9CM062; 9cm062; 31.5; 60.0-70.0; 1
+Philips; Philips 9CM082; 9cm082; 31.5; 60.0-70.0; 1
+Philips; Philips Brilliance 105(15inch/CM2200); phl105a; 30.0-69.0; 50.0-120.0; 1
+Philips; Philips Brilliance 107(17inch/CM8800); phl0107; 30.0-86.0; 50.0-160.0; 1
+Philips; Philips Brilliance 107(PRODUCT ID 17A58...); phl1107; 30.0-95.0; 50.0-160.0; 1
+Philips; Philips Brilliance 109(PRODUCT ID 19A58...); phl1109; 30.0-95.0; 50.0-160.0; 1
+Philips; Philips Brilliance 201(21inch/CM1700); phl201a; 31.5-107.0; 50.0-170.0; 1
+Philips; Philips Brilliance 201CS; phl0201; 30.0-107.0; 50-170; 1
+Philips; Philips Brilliance AX4500(14.5 LCD MONITOR); phl4500; 30.0-60.0; 56.0-75.0; 1
+Philips; Philips CM0200 (14B); phl2000; 31-48; 50-100; 1
+Philips; Philips CM0200 (15C); phl0200; 31-48; 50-100; 1
+Philips; Philips CM0500 (20C); phl0500; 31-64; 50-120; 1
+Philips; Philips CM0700 (20T); phl0700; 30-90; 50-160; 1
+Philips; Philips CM0700 (21B); phl700b; 30-94; 50-160; 1
+Philips; Philips CM0800 (14A); phl8000; 30-58; 50-100; 1
+Philips; Philips CM0800 (15B); phl0800; 30-58; 50-100; 1
+Philips; Philips CM1200 (15A); phl1200; 31-66; 50-110; 1
+Philips; Philips CM1800 (15A); phl1800; 31-66; 50-110; 1
+Philips; Philips CM5600 (20B); phl5600; 31-82; 50-120; 1
+Philips; Philips CM9039; cm9039; 31.5; 60.0-70.0; 1
+Philips; Philips CM9079; cm9079; 35.5; 50.0-90.0; 1
+Philips; Philips CM9085; cm9085; 31.5; 70; 1
+Philips; Philips CM9089; cm9089; 35.5; 50.0-90.0; 1
+Philips; Philips CM9214; cm9214; 30.0-58.0; 50.0-100.0; 1
+Philips; Philips CM9217; cm9217; 30.0-57.0; 50.0-100.0; 1
+Philips; Philips Magnavox 109S; phl3109; 30.0-95.0; 50.0-160.0; 1
+Philips; Philips Magnavox MB7000(17inch/CM6800); phla17b; 30.0-66.0; 50.0-130.0; 1
+Philips; Philips PD5029S Monitor/TV; phla513; 31.5-35.2; 50.0-56.0; 1
+PLB; PLB 1410 Model; plb1410; 30.0-54.0; 50.0-120.0; 1
+PLB; PLB 1510 Model; plb1510; 30.0-69.0; 50.0-120.0; 1
+PLB; PLB 1710; plb1710; 30.0-70.0; 50.0-120.0; 1
+PLB; PLB 1910; plb1910; 30.0-95.0; 50.0-150.0; 1
+Premier; Premier PM14V-S-1; pm14v-s-1; 34.5-38.5; 50.0-90.0; 1
+Princeton; Princeton 14; ultra14; 35.5-37.5; 50.0-90.0; 1
+Princeton; Princeton 14ni; ultra14ni; 31.5-48.0; 50.0-90.0; 1
+Princeton; Princeton 15; ultra15; 30.0-64.0; 50.0-90.0; 1
+Princeton; Princeton 17; ultra17; 30.0-64.0; 50.0-100.0; 1
+Princeton; Princeton AF3.0HD; pgs00f7; 30.0-50.0; 50.0-90.0; 1
+Princeton; Princeton AGF900; pgs016f; 30.0-96.0; 50.0-160.0; 1
+Princeton; Princeton AGX700; pgs00cc; 30.0-70.0; 50.0-140.0; 1
+Princeton; Princeton AGX740; pgs0169; 30.0-96.0; 50.0-180.0; 1
+Princeton; Princeton AGX750; pgs00cb; 30.0-95.0; 50.0-160.0; 1
+Princeton; Princeton AGX900; pgs00cd; 30.0-95.0; 50.0-150.0; 1
+Princeton; Princeton APP520; pgs010d; 60.0; 56.0-76.0; 1
+Princeton; Princeton APP550; pgs015f; 58.1; 55.0-85.1; 1
+Princeton; Princeton APP560; pgs00f5; 60.0; 56.0-76.0; 1
+Princeton; Princeton APP800; pgs0131; 80.0; 60.0-75.0; 1
+Princeton; Princeton Arcadia AR2.7; pgs006f; 31.5-38.0; 30.0-90.0; 1
+Princeton; Princeton Arcadia AR2.7AV; pgs0085; 31.5-38.0; 30.0-90.0; 1
+Princeton; Princeton Arcadia AR3.1; pgs0070; 31.5-38.0; 30.0-90.0; 1
+Princeton; Princeton Arcadia AR3.1AV; pgs0086; 31.5-38.0; 30.0-90.0; 1
+Princeton; Princeton Arcadia AR3.6; pgs00d1; 31.5-38.0; 30.0-90.0; 1
+Princeton; Princeton C2001; pgs008b; 30.0-107.0; 50.0-160.0; 1
+Princeton; Princeton DPP500; pgs00ca; 48.4; 60.0; 1
+Princeton; Princeton DPP500; pgs3011; 48.4; 60.0; 1
+Princeton; Princeton DPP550; pgs00e1; 56.5; 70.0; 1
+Princeton; Princeton DPP550; pgs3012; 56.5; 70.0; 1
+Princeton; Princeton DPP560; mtc1503; 48.4; 60.0; 1
+Princeton; Princeton DPP560; pgs00e3; 48.4; 60.0; 1
+Princeton; Princeton DPP560; pgs3013; 48.4; 60.0; 1
+Princeton; Princeton DPP800; pgs00eb; 45.1; 42.7; 1
+Princeton; Princeton DPP810; pgs0165; 45.1; 42.7; 1
+Princeton; Princeton EO14; pgs003a; 48.0; 50.0-120.0; 1
+Princeton; Princeton EO15; pgs003b; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO17; kds06c2; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO17; pgs003d; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO2000; pgs00f6; 30.0-115.0; 50.0-160.0; 1
+Princeton; Princeton EO2010; pgs00ce; 30.0-117.0; 50.0-160.0; 1
+Princeton; Princeton EO40; pgs004e; 30.0-50.0; 50.0-90.0; 1
+Princeton; Princeton EO400; pgs009d; 30.0-54.0; 55.0-90.0; 1
+Princeton; Princeton EO50; pgs004f; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO500; pgs008e; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO500n; pgs00d6; 30.0-70.0; 50.0-140.0; 1
+Princeton; Princeton EO505; pgs00be; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO70; pgs0050; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO700; pgs00b6; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO700-1b; pgs00e6; 30.0-70.0; 50.0-160.0; 1
+Princeton; Princeton EO700n; pgs00d5; 30.0-70.0; 50.0-150.0; 1
+Princeton; Princeton EO705; pgs00bf; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO705n; pgs00dd; 30.0-70.0; 50.0-160.0; 1
+Princeton; Princeton EO70n; pgs00d4; 30.0-70.0; 50.0-150.0; 1
+Princeton; Princeton EO710; pgs008f; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO710-1b; pgs00e7; 30.0-70.0; 50.0-160.0; 1
+Princeton; Princeton EO72; pgs0052; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO720; pgs00b7; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO74/74T; pgs0055; 30.0-70.0; 50.0-120.0; 1
+Princeton; Princeton EO75; pgs003c; 30.0-95.0; 50.0-120.0; 1
+Princeton; Princeton EO750; pgs00c2; 30.0-95.0; 50.0-160.0; 1
+Princeton; Princeton EO76/76T; pgs0056; 30.0-86.0; 50.0-120.0; 1
+Princeton; Princeton EO90; pgs0092; 30.0-95.0; 50.0-150.0; 1
+Princeton; Princeton EO900; pgs0087; 30.0-95.0; 50.0-160.0; 1
+Princeton; Princeton EO900; pgs0171; 30.0-95.0; 50.0-160.0; 1
+Princeton; Princeton EO930; pgs00e2; 30.0-95.0; 50.0-160.0; 1
+Princeton; Princeton EO935S; pgs0172; 30.0-95.0; 50.0-160.0; 1
+Princeton; Princeton LD150; pgs00de; 68.7; 55.0-85.1; 1
+Princeton; Princeton LD50A; pgs00ae; 60.0; 55.0-75.0; 1
+Princeton; Princeton MAX-15; 0; 15.0-36.0; 45.0-120.0; 1
+Princeton; Princeton MultiView; multiview; 15.0-60.0; 45.0-90.0; 1
+Princeton; Princeton MultiView_II; multiview_ii; 15.0-70.0; 45.0-90.0; 1
+Princeton; Princeton Ultra 100; pgs00d3; 30.0-95.0; 50.0-150.0; 1
+Princeton; Princeton Ultra 17+; pgs003e; 30.0-82.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 20; pgs003f; 30.0-82.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 40; pgs0051; 30.0-50.0; 50.0-90.0; 1
+Princeton; Princeton Ultra 41; pgs0090; 48.0; 50.0-90.0; 1
+Princeton; Princeton Ultra 42; pgs011a; 30.0-54.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 50; pgs004d; 30.0-50.0; 50.0-90.0; 1
+Princeton; Princeton Ultra 50e; pgs011b; 30.0-57.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 51; pgs009b; 30.0-54.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 52/52B; pgs00d0; 30.0-70.0; 50.0-150.0; 1
+Princeton; Princeton Ultra 70F; ___7627; 30.0-64.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 70F; pgs0049; 30.0-64.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 71; pgs0079; 30.0-54.0; 50.0-100.0; 1
+Princeton; Princeton Ultra 71; pgs7900; 30.0-54.0; 50.0-100.0; 1
+Princeton; Princeton Ultra 72; pgs008d; 30.0-69.0; 55.0-90.0; 1
+Princeton; Princeton Ultra 72e; pgs015d; 30.0-70.0; 50.0-160.0; 1
+Princeton; Princeton Ultra 74; pgs00f2; 30.0-70.0; 50.0-150.0; 1
+Princeton; Princeton Ultra 75/75B; pgs00dc; 30.0-70.0; 50.0-150.0; 1
+Princeton; Princeton Ultra 75e; pgs016a; 30.0-72.0; 47.0-160.0; 1
+Princeton; Princeton Ultra 77; pgs00fc; 30.0-95.0; 50.0-150.0; 1
+Princeton; Princeton Ultra 77e; pgs016b; 30.0-96.0; 47.0-160.0; 1
+Princeton; Princeton Ultra 80; pgs0091; 30.0-86.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 90/90B; pgs00d2; 30.0-94.0; 50.0-160.0; 1
+Princeton; Princeton Ultra 90e; pgs0130; 30.0-86.0; 50.0-160.0; 1
+Princeton; Princeton Ultra 92; pgs016c; 30.0-96.0; 50.0-160.0; 1
+Princeton; Princeton Ultra 95; pgs00fa; 30.0-95.0; 50.0-120.0; 1
+Princeton; Princeton Ultra 95e; pgs016d; 30.0-96.0; 47.0-150.0; 1
+Princeton; Princeton Ultra 95n; pgs00db; 30.0-95.0; 50.0-160.0; 1
+Princeton; Princeton Ultra-1200; max-15; 15.0-38.0; 45.0-120.0; 1
+Princeton; Princeton Ultra-1400; ultra-1400; 15.0-38.0; 45.0-120.0; 1
+Princeton; Princeton Ultra-1600; ultra-1600; 15.0-38.0; 45.0-120.0; 1
+Princeton; Princeton Ultra-2000; ultra-2000; 45.0-68.0; 50.0-150.0; 1
+Princeton; Princeton VL173 Flat Panel; pgs4902; 31-75; 56-75; 1
+Princeton; Princeton VL1916 19inch LCD Display; 0; 24-83; 55-76; 1
+Princeton; W74; pgs00e5; 30.0-70.0; 50.0-160.0; 1
+Princeton; W74n; pgs00fb; 30.0-70.0; 55.0-160.0; 1
+Proview; 2071W/2006W (LCD 21-inch wide); PTS07D1; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview 2072; PTS0000; 30.0-93.0; 60.0-85.0; 1
+Proview; Proview 215 (21-inch); PTS0843; 30.0-115.0; 50.0-160.0; 1
+Proview; Proview 250 (10-inch); PTS00FA; 30.0-50.0; 50.0-150.0; 1
+Proview; Proview 330 (LCD 13.3-inch); PTS014A; 30.0-60.0; 55.0-75.0; 1
+Proview; Proview 401/420/456/468/482 (LCD 14-inch); PTS0579; 30.0-60.0; 60.0-75.0; 1
+Proview; Proview 456/458/462 (14-inch); PTS01C8; 30.0-54.0; 50.0-150.0; 1
+Proview; Proview 506I/572I/572V/576D/576I/580I/588I (LCD 15-inch); PTS05DE; 30.0-60.0; 60.0-75.0; 1
+Proview; Proview 510/560/580 (LCD 15-inch); PTS01FE; 30.0-60.0; 55.0-75.0; 1
+Proview; Proview 533/541/552/556/561/562/565/566/567/568/LP517 (LCD 15-inch); PTS05DD; 0.0-60.0; 60.0-75.0; 1
+Proview; Proview 558/561/562 (15-inch); PTS0231; 30.0-60.0; 50.0-160.0; 1
+Proview; Proview 560/580 (LCD 15-inch Pivot); PTS01FE; 30.0-60.0; 55.0-75.0; 1
+Proview; Proview 562NS/562FS (15-inch); PTS0232; 30.0-58.0; 50.0-120.0; 1
+Proview; Proview 566/568/570 (15-inch); PTS023A; 30.0-70.0; 50.0-150.0; 1
+Proview; Proview 570/572/573/576/580/582/586/587/589/590/598 (LCD 15-inch); PTS05DD; 30.0-60.0,60; 0-75.0; 1
+Proview; Proview 571/572/572N (15-inch); PTS023B; 30.0-70.0; 50.0-160.0; 1
+Proview; Proview 572NS/570FS/572FS (15-inch); PTS023C; 30.0-70.0; 50.0-160.0; 1
+Proview; Proview 576W (LCD 15-inch wide); PTS05DF; 30.0-50.0; 60.0-70.0; 1
+Proview; Proview 576W (LCD 15-inch wide); PTS05E0; 30.0-50.0; 60.0-70.0; 1
+Proview; Proview 600/660 (LCD 15-inch Pivot); PTS01FE; 30.0-60.0; 55.0-75.0; 1
+Proview; Proview 702/713/717/723/727/765/770/772/773/776/778/780/782/787/LP717 (LCD 17-inch); PTS06A5; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview 720/722 (16-inch); PTS02D0; 30.0-70.0; 50.0-150.0; 1
+Proview; Proview 765/768/770 (17-inch); PTS0302; 30.0-70.0; 50.0-150.0; 1
+Proview; Proview 765W (LCD 17-inch wide); PTS06A7; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview 769/769N/771/772/772N (17-inch); PTS0303; 30.0-70.0; 50.0-160.0; 1
+Proview; Proview 772NS/771/772FS/772PF (17-inch); PTS0304; 30.0-70.0; 50.0-160.0; 1
+Proview; Proview 775/776/778 (17-inch); PTS0308; 30.0-76.0; 50.0-160.0; 1
+Proview; Proview 775N; PTS0304; 30-75; 50-160; 1"
+Proview; Proview 777/777N Pure Flat (17-inch); PTS0303; 30.0-70.0; 50.0-160.0; 1
+Proview; Proview 777NS/777PF/778NS (17-inch); PTS0309; 30.0-70.0; 50.0-160.0; 1
+Proview; Proview 785/786/786N (17-inch); PTS0311; 30.0-86.0; 50.0-160.0; 1
+Proview; Proview 786NS/786FS/786PF (17-inch); PTS0312; 30.0-86.0; 50.0-160.0; 1
+Proview; Proview 787/787NS/787PF Pure Flat (17-inch); PTS0313; 30.0-86.0; 50.0-160.0; 1
+Proview; Proview 796/796N (17-inch); PTS031B; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 796NS/796N/796PF/796PF2/796FS (17-inch); PTS031C; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 797/797N Pure Flat (17-inch); PTS031B; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 797NS/797N/797PF (17-inch); PTS031D; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 860; pts035c; 30.0-54.0; 50.0-150.0; 1
+Proview; Proview 861/865/867/872 (LCD 18-inch); PTS0709; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview 926w; PTS077D; 31.0-94.0; 60.0-75.0; 1
+Proview; Proview 986/986N/986NS/986FS/986PF (19-inch); PTS03DA; 30.0-86.0; 50.0-160.0; 1
+Proview; Proview 987NS/987PF (19-inch); PTS03DB; 30.0-86.0; 50.0-160.0; 1
+Proview; Proview 996N; pts025c; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 996NS/996N/996FS/996PF (19-inch); PTS03E4; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 997/997N Pure Flat (19-inch); PTS03E6; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 997NS/997N/997PF (19-inch); PTS03E5; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview 998/998A/998N (19-inch); PTS03E6; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview BM-468 (LCD 14-inch); PTS01D4; 30.0-60.0; 55.0-75.0; 1
+Proview; Proview BM-568 (LCD 15-inch); PTS01FE; 30.0-60.0; 55.0-75.0; 1
+Proview; Proview BM-780 (LCD 17-inch); PTS030C; 30.0-72.0; 55.0-75.0; 1
+Proview; Proview CY965; PTS03c5; 30-80; 60-75; 1280x1024
+Proview; Proview E705/E771/770I/705I/776I/780I/782I/771/705/738 (LCD 17-inch); PTS06A6; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview E905/E971/905I/970I/976D/980D/982D/971/905/938 (LCD 19-inch); PTS076E; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview HD572 (15-inch); PTS1215; 30.0-60.0; 60.0-75.0; 1
+Proview; Proview HD772 (17-inch); PTS0817; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview HD872 (18-inch); PTS0361; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview HD972 (19-inch); PTS03CC; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview HD972DT (19-inch); PTS0419; 30.0-81.0; 56.0-76.0; 1
+Proview; Proview I921/V913/SP916/MA982/913/917/923/927/965/972/LP917/982/916/982K (LCD 19-inch); PTS076D; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview LM905W/FV916W/926W/906W/938W (LCD 19-inch wide); PTS076F; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview LT776s (17-inch); PTS0917; 30.0-80.0; 60.0-75.0; 1
+Proview; Proview PD/ID-950F Diamondtron Pure Flat (19-inch); PTS031B; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview PS576 (15-inch); PTS2215; 30.0-60.0; 60.0-75.0; 1
+Proview; Proview PV-1995S (19-inch); PTS03E6; 30.0-98.0; 50.0-160.0; 1
+Proview; Proview V513/SP516/MA582/501/502/505/513/517/520/523/527/516/582K (LCD 15-inch); PTS05DD; 30.0-60.0; 60.0-75.0;1
+Proview; Proview V713/MA782/SP716/I721/716/782K (LCD 17-inch); PTS06A5; 30.0-80.0; 60.0-75.0; 1
+QDS; QDS 0014; QDS0014; 48-50; 57-62; 1280x800
+Quantex; Quantex TE1564M - Super View 1280; 75; 30-64; 50-100
+Qume; Qume QM835; qm835; 30.0-36.5; 50.0-90.0; 1
+Radius; Radius PrecisionColor Display/19; pcd19; 30.0-67.0; 72; 1
+Radius; Radius PrecisionColor Display/20; pcd20; 30.0-71.0; 75; 1
+Radius; Radius PrecisionColor Pivot; pcp; 30.0-60.0; 50.0-90.0; 1
+RasterOps; RasterOps 20/20; r2020; 31-69; 60-76; 1
+RasterOps; RasterOps ClearVueColor 17; cv17; 30-82; 50-90; 1
+RasterOps; RasterOps ClearVueColor 20T; cv20t; 30-82; 50-160; 1
+RasterOps; RasterOps ClearVueColor 21; cv21; 30-82; 50-90; 1
+REDMS Group; REDMS SRC-1401; src-1401; 28.0-40.0; 47.0-90.0; 1
+REDMS Group; REDMS SRC-1402; src-1402; 28.0-50.0; 47.0-90.0; 1
+Relisys; Relisys RE-1420; re-1420; 28.0-40.0; 60; 1
+Relisys; Relisys RE-1520; re-1520; 30.0-50.0; 50.0-80.0; 1
+Relisys; Relisys RE-1528; re-1528; 30.0-48.0; 50.0-90.0; 1
+Relisys; Relisys RE1438; rel1438; 30-38; 0-100; 1
+Relisys; Relisys RE1450; rel1450; 30-50; 50-100; 1
+Relisys; Relisys RE412; rel0412; 30-57; 50-150; 1
+Relisys; Relisys RE432; rel0432; 30-65; 50-100; 1
+Relisys; Relisys RE438; rel0438; 30-38; 0-100; 1
+Relisys; Relisys RE450; rel0450; 30-50; 50-100; 1
+Relisys; Relisys RE451; rel0451; 30-54; 50-100; 1
+Relisys; Relisys RE518; rel0518; 30-69; 50-150; 1
+Relisys; Relisys RE535; rel0535; 30-65; 50-100; 1
+Relisys; Relisys RE550; rel0550; 30-50; 50-100; 1
+Relisys; Relisys RE551; rel0551; 30-54; 50-150; 1
+Relisys; Relisys RE572; rel0572; 30-72; 50-150; 1
+Relisys; Relisys RE760; rel0760; 30-65; 50-100; 1
+Relisys; Relisys RE767; rel0767; 30-69; 50-150; 1
+Relisys; Relisys RE768; rel0768; 30-86; 50-150; 1
+Relisys; Relisys RE772; rel0772; 30-72; 50-150; 1
+Relisys; Relisys RE786; rel0786; 30-86; 50-150; 1
+Relisys; Relisys RE795; rel0795; 30-96; 50-150; 1
+Relisys; Relisys RE9516S; rel9516; 30-35; 0-100; 1
+Relisys; Relisys RE995; rel0995; 30-95; 50-150; 1
+Relisys; Relisys RM-1541; rm-1541; 48.0-65.0; 40.0-80.0; 1
+Royal Information Company; Royal Information Company TRL/RIC DH-1570M/DH-1570; trl0410; 29.0-70.0; 47.0-120.0; 1
+Royal Information Company; Royal Information Company TRL/RIC DH-1764M/DH-1764; trl0510; 29.0-70.0; 47.0-120.0; 1
+Royal Information Company; Royal Information Company TRL/RIC DH-1764UM/DH-1764U; trl0610; 29.0-85.0; 47.0-120.0; 1
+Royal Information Company; Royal Information Company TRL/RIC DL-1564; trl061c; 29.0-64.0; 47.0-100.0; 1
+Royal Information Company; Royal Information Company TRL/RIC DL-1564M/DL-1564; trl0110; 29.0-64.0; 47.0-120.0; 1
+Royal Information Company; Royal Information Company TRL/RIC DL-1750MU; trl0310; 29.0-70.0; 47.0-120.0; 1
+Royal Information Company; Royal Information Company TRL/RIC RH-1450; trl0010; 29.0-50.0; 47.0-90.0; 1
+Sampo; Sampo AlphaScan 15/15g/15gx; 0; 30.0-65.0; 50.0-90.0
+Sampo; Sampo AlphaScan 15mx; 0; 30.0-65.0; 50.0-110.0
+Sampo; Sampo AlphaScan 17; 0; 30.0-65.0; 50.0-90.0
+Sampo; Sampo AlphaScan 1788 17gx; 0; 30.0-82.0; 50.0-120.0
+Sampo; Sampo AlphaScan 1789 17gx; 0; 30.0-82.0; 50.0-120.0
+Sampo; Sampo AlphaScan 17e; 0; 30.0-82.0; 50.0-90.0
+Sampo; Sampo AlphaScan 17g; 0; 30.0-65.0; 50.0-90.0
+Sampo; Sampo AlphaScan 17mx; 0; 30.0-69.0; 50.0-120.0
+Sampo; Sampo AlphaScan 410; 0; 30.0-48.0; 50.0-90.0
+Sampo; Sampo AlphaScan 411; 0; 30.0-50.0; 50.0-120.0
+Sampo; Sampo AlphaScan 500; 0; 30.0-48.0; 50.0-90.0
+Sampo; Sampo AlphaScan 511; 0; 30.0-54.0; 50.0-120.0
+Sampo; Sampo AlphaScan 520; 0; 30.0-65.0; 50.0-120.0
+Sampo; Sampo AlphaScan 520A; 0; 30.0-70.0; 50.0-120.0
+Sampo; Sampo AlphaScan 711; 0; 30.0-70.0; 50.0-120.0
+Sampo; Sampo AlphaScan 720; 0; 30.0-69.0; 50.0-120.0
+Sampo; Sampo AlphaScan 730; 0; 30.0-70.0; 50.0-120.0
+Sampo; Sampo AlphaScan 731; 0; 30.0-70.0; 50.0-120.0
+Sampo; Sampo AlphaScan 750; 0; 30.0-86.0; 50.0-200.0
+Sampo; Sampo AlphaScan 760; 0; 30.0-82.0; 50.0-120.0
+Sampo; Sampo AlphaScan 761; 0; 30.0-85.0; 50.0-200.0
+Sampo; Sampo AlphaScan 830; 0; 30.0-82.0; 50.0-120.0
+Sampo; Sampo AlphaScan 850; 0; 30.0-92.0; 50.0-200.0
+Sampo; Sampo AlphaScan 950; 0; 30.0-95.0; 50.0-200.0
+Sampo; Sampo AlphaScan 960; 0; 30.0-95.0; 50.0-200.0
+Sampo; Sampo AlphaScan GL; 0; 30.0-64.0; 50.0-90.0
+Sampo; Sampo AlphaScan GLX; 0; 30.0-82.0; 50.0-120.0
+Sampo; Sampo AlphaScan Plus/GS; 0; 30.0-62.0; 50.0-90.0
+Sampo; Sampo AlphaScan SV; 0; 30.0-48.0; 50.0-90.0
+Samsung; Samsung 15GLsi; sam1530; 24.0-66.0; 50.0-100.0; 1
+Samsung; Samsung 17GLi; sam4d73; 24.0-65.0; 50.0-120.0; 1
+Samsung; Samsung 17GLsi; sam4d74; 24.0-85.0; 50.0-120.0; 1
+Samsung; Samsung 5b (CKB52*); sam2c56; 30-70; 50-120; 1
+Samsung; Samsung 5e (CKA52*); sam2c36; 30-55; 50-120; 1
+Samsung; Samsung 7e (CKB72*); sam2c58; 30-70; 50-120; 1
+Samsung; Samsung 900DF; SAM00B4; 30-85; 50-160; 1
+Samsung; Samsung 990DF; SAM0127; 30-96; 50-160; 1
+Samsung; Samsung CSA-7571; csa-7571; 20.0-50.0; 50.0-90.0; 1
+Samsung; Samsung CT-4581; ct-4581; 15.0-38.0; 47.0-73.0; 1
+Samsung; Samsung MF-4771; mf-4771; 15.0-38.0; 48.0-72.0; 1
+Samsung; Samsung Samtron 40B; sam2034; 30-55; 50-120; 1
+Samsung; Samsung Samtron 40Bn; sam202e; 30-55; 50-120; 1
+Samsung; Samsung Samtron 45B(n); sam1034; 30-55; 50-120; 1
+Samsung; Samsung Samtron 4Bi; sam2c33; 30-55; 50-120; 1
+Samsung; Samsung Samtron 5(M)B (CGB5617*); sam1c54; 30-69; 50-160; 1
+Samsung; Samsung Samtron 5(M)E (CGK5517*); sam1d74; 30-54; 50-120; 1
+Samsung; Samsung Samtron 50(M)E; sam2036; 30-61; 50-120; 1
+Samsung; Samsung Samtron 50B; sam2056; 30-70; 50-160; 1
+Samsung; Samsung Samtron 55(M)E (Plus); sam1036; 30-61; 50-120; 1
+Samsung; Samsung Samtron 55B (Plus); sam1056; 30-70; 50-160; 1
+Samsung; Samsung Samtron 55v; sam12b7; 30-55; 50-120; 1
+Samsung; Samsung Samtron 56E/57E/56V; STN0002; 30-55; 50-120
+Samsung; Samsung Samtron 5Bi; sam2c55; 30-70; 50-120; 1
+Samsung; Samsung Samtron 5Ei; sam2c35; 30-55; 50-120; 1
+Samsung; Samsung Samtron 60(M)B; sam2042; 30-70; 50-160; 1
+Samsung; Samsung Samtron 70(M)E; sam2058; 30-70; 50-160; 1
+Samsung; Samsung Samtron 75(M)B; sam105a; 30-70; 50-160; 1
+Samsung; Samsung Samtron 75(M)E (Plus); sam1058; 30-70; 50-160; 1
+Samsung; Samsung Samtron 75G; sam105b; 30-85; 50-160; 1
+Samsung; Samsung Samtron 75P; sam4ee7; 30-96; 50-160; 1
+Samsung; Samsung Samtron 75P Plus; sam40d8; 30-96; 50-160; 1
+Samsung; Samsung Samtron 76DF(X)/77DF(X)/78DF; STN0006; 30-70; 50-160; 1
+Samsung; Samsung Samtron 7Ei; sam2c57; 30-70; 50-120; 1
+Samsung; Samsung Samtron 9 In; sam25da; 30-96; 50-160; 1
+Samsung; Samsung Samtron 90SL; sam4dba; 30-96; 50-160; 1
+Samsung; Samsung Samtron 95in(T); sam25de; 30-96; 50-160; 1
+Samsung; Samsung Samtron 95P; sam4f28; 30-96; 50-160; 1
+Samsung; Samsung Samtron 95P Plus; sam40db; 30-96; 50-160; 1
+Samsung; Samsung Samtron 98PDF/99DF/99PDF; STN0020; 30-96; 50-160; 1
+Samsung; Samsung Samtron 9B; sam4f23; 30-96; 50-160; 1
+Samsung; Samsung Samtron 9P; sam4f27; 30-96; 50-160; 1
+Samsung; Samsung Samtron SAMTRON 76E/77E; STN0005; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 1000b (CGX1607*); sam1f14; 30-107; 50-160; 1
+Samsung; Samsung SyncMaster 1000p; sam1f13; 30-107; 50-160; 1
+Samsung; Samsung SyncMaster 1000s (CGP1607*); sam0cf1; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 1100DF/2100DF/CD210C; SAM006D; 30-121; 50-160; 1
+Samsung; Samsung SyncMaster 1100p/1109p/CM219C; SAM0051; 30-115; 50-160; 1
+Samsung; Samsung SyncMaster 1200NF/2200NF/CPN22NF; SAM38D2; 30-121; 50-185; 1
+Samsung; Samsung SyncMaster 14GL; sam14gl; 30-62; 50-100; 1
+Samsung; Samsung SyncMaster 14GL; samsungsm14gl; 30-62; 50-100; 1
+Samsung; Samsung SyncMaster 150N/152N/153N; SAM00A4; 30-61; 56-75; 1
+Samsung; Samsung SyncMaster 151MP/155MP/RB1500MP; SAM0004; 31-70; 50-85; 1
+Samsung; Samsung SyncMaster 152MP/156MP/CX510MP/CX500MB; SAM00A8; 30-71; 56-75; 1
+Samsung; Samsung SyncMaster 153T; SAM00CD; 30-61; 56-75; 1
+Samsung; Samsung SyncMaster 153V/153S/153B; SAM00A2; 30-61; 56-75; 1
+Samsung; Samsung SyncMaster 15GL; sam15gl; 30-62; 50-100; 1
+Samsung; Samsung SyncMaster 15GL; samsungsm15gl; 30-62; 50-100; 1
+Samsung; Samsung SyncMaster 15GLe; sam4d50; 30-50; 50-120; 1
+Samsung; Samsung SyncMaster 15GLe; sam6d20; 30-50; 50-120; 1
+Samsung; Samsung SyncMaster 15GLi; sam4d51; 30-65; 50-120; 1
+Samsung; Samsung SyncMaster 15M; sam4d52; 30.0-65.0; 50.0-120.0; 1
+Samsung; Samsung SyncMaster 15Me; sam5450; 30.0-50.0; 50.0-120.0; 1
+Samsung; Samsung SyncMaster 171MP/175MP/RB1700MP; SAM000A; 31-80; 50-85; 1
+Samsung; Samsung SyncMaster 171N/175N/171Np/171Nm/CX174N/CX171N/MX174N; SAM006B; 30-81; 56-76; 1
+Samsung; Samsung SyncMaster 171S/175S/170S/CX175S-AZ/LX175S; SAM001B; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 171v; samsungsm171v; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 172MP/176MP/CX710MP/CX700MB; SAM00A7; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 172T/176T/CX176T/CX171T (Analog); SAM006E; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 172T/176T/CX176T/CX171T (Digital); SAM006F; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 172X/177X/CX710X (Analog); SAM00C8; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 172X/177X/CX710X (Digital); SAM00E5; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 173P/CX710P (Analog); SAM00D3; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 173P/CX710P (Digital); SAM00E2; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 173T/177T/CX700T/CX710T; SAM00BA; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 173V/172V/173S/173B/174V/175V; SAM00A3; 30-81; 56-76; 1
+Samsung; Samsung SyncMaster 177MP/710MP/CX711MP/CX710MP; SAM00D2; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 17GL; sam17gl; 30-65; 50-100; 1
+Samsung; Samsung SyncMaster 17GL; samsungsm17gl; 30-65; 50-100; 1
+Samsung; Samsung SyncMaster 17GLi; sam4d70; 30-65; 50-120; 1
+Samsung; Samsung SyncMaster 17GLs; sam17gls; 30-82; 50-120; 1
+Samsung; Samsung SyncMaster 17GLs; samsungsm17gls; 30-82; 50-120; 1
+Samsung; Samsung SyncMaster 17GLsi; sam4d71; 30-85; 50-120; 1
+Samsung; Samsung SyncMaster 181T; sam0020; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 190N(M)/192N(M)/193N(M); SAM00A6; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 191+/191Tplus/193T/197T/CX900T; SAM00BB; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 191TFT; sam0014; 30.0-81.0; 56.0-85.0 ; 1
+Samsung; Samsung SyncMaster 192MPplus/930MP (Analog); SAM015B; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 192MPplus/930MP (Digital); SAM015C; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 192T/196T/CX910T(M); SAM00B6; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 193P/CX910P (Analog); SAM00EC; 30-81; 56-75
+Samsung; Samsung SyncMaster 193P/CX910P (Digital); SAM00ED; 30-81; 56-75
+Samsung; Samsung SyncMaster 198T/910T/CX901T (Analog); SAM010E; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 198T/910T/CX901T (Digital); SAM010F; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 2032BW(Analog); SAM0301; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 2032BW(Digital); SAM0302; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 2043BW/2043BWX,SyncMaster Magic CX2043BW(Analog); SAM0351; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 2043BW/2043BWX,SyncMaster Magic CX2043BW(Digital); SAM0352; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 2043NW; SAM0161; 30-81; 56-75; 1680x1050
+Samsung; Samsung SyncMaster 204T/204Ts/214T,SyncMaster Magic CX201Ts(Analog); SAM01AD; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 204T/204Ts/214T,SyncMaster Magic CX201Ts(Digital); SAM01AE; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 2053BW; SAM0379; 30-81; 56-75; 1680x1050
+Samsung; Samsung SyncMaster 205BW (Analog); SAM021D; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 205BW (Digital); SAM021E; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 206BW (Analog); SAM027C; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 206BW (Digital); SAM027D; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 20gls; sam20gls; 30-82; 50-120; 1
+Samsung; Samsung SyncMaster 20gls; samsungsm20gls; 30-82; 50-120; 1
+Samsung; Samsung SyncMaster 20GLsi; sam4690; 30.0-82.0; 50.0-120.0; 1
+Samsung; Samsung SyncMaster 210T/LXA210T (Analog); SAM4251; 30-93; 50-85; 1
+Samsung; Samsung SyncMaster 210T/LXA210T (Digital); SAM4252; 30-81; 50-85; 1
+Samsung; Samsung SyncMaster 211MP/215MP/CX211MP; SAMOO56; 30-85; 55-85; 1
+Samsung; Samsung SyncMaster 213T/CX210T; SAMOO91; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 215TW(Analog); SAM0213; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 215TW(Digital); SAM0214; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 21GLs; sam4610; 30.0-85.0; 50.0-160.0; 1
+Samsung; Samsung SyncMaster 2243BW/2243BWX,SyncMaster Magic CX2243BW(Analog); SAM0372; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 2243BW/2243BWX,SyncMaster Magic CX2243BW(Digital); SAM0373; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 225BW (Analog); SAM0254; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 225BW (Digital); SAM0255; 30-81; 56-75; 1680x1050
+Samsung; Samsung SyncMaster 2253BW; SAM037c; 30-81; 56-75; 1680x1050
+Samsung; Samsung SyncMaster 226; SAM0226; 30-81; 56-75; 1440x900
+Samsung; Samsung SyncMaster 226BW (Analog); SAM027E; 30-81; 56-75; 1680x1050
+Samsung; Samsung SyncMaster 226BW (Digital); SAM027F; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 240T (Analog); SAM4254; 30-93; 50-85; 1
+Samsung; Samsung SyncMaster 240T (Digital); SAM4255; 30-81; 50-85; 1
+Samsung; Samsung SyncMaster 241MP/245MP; SAMOO4B; 30-85; 50-85; 1
+Samsung; Samsung SyncMaster 243T/CX240T (Analog); SAM00D9; 30-80; 55-75; 1
+Samsung; Samsung SyncMaster 243T/CX240T (Digital); SAM00F7; 30-80; 55-75; 1
+Samsung; Samsung SyncMaster 2443BWX; SAM043F; 30-81; 56-60; 1
+Samsung; Samsung SyncMaster 3; sam3; 35.5; 43.5; 1
+Samsung; Samsung SyncMaster 3; samsungsm3; 35.5; 43.5; 1
+Samsung; Samsung SyncMaster 320TFT (LXB310*); sam6053; 30-61; 50-75; 1
+Samsung; Samsung SyncMaster 330/331TFT (LXB350*); sam6054; 30-61; 50-75; 1
+Samsung; Samsung SyncMaster 3NE; sam3ne; 48.4; 60.0; 1
+Samsung; Samsung SyncMaster 3NE; samsungsm3ne; 48.4; 60.0; 1
+Samsung; Samsung SyncMaster 3Ne; sam0000; 31.5-48.0; 43.5-75.0; 1
+Samsung; Samsung SyncMaster 400b (CKA4217*); sam2c34; 30-55; 50-120; 1
+Samsung; Samsung SyncMaster 410b(CHA4217*); sam2033; 30-55; 50-120; 1
+Samsung; Samsung SyncMaster 450(N)b; sam1033; 30-55; 50-120; 1
+Samsung; Samsung SyncMaster 470S TFT; sam49d4; 30-61; 50-75; 1
+Samsung; Samsung SyncMaster 4NE; sam4ne; 30-50; 50-100; 1
+Samsung; Samsung SyncMaster 4NE; samsungsm4ne; 30-50; 50-100; 1
+Samsung; Samsung SyncMaster 4S; sam0100; 31.5-48.4; 43.5-75.0; 1
+Samsung; Samsung SyncMaster 500(M)p (CGC5607*); sam1c73; 30-69; 50-160; 1
+Samsung; Samsung SyncMaster 500(M)s (CGK5507*); sam1d73; 30-54; 50-120; 1
+Samsung; Samsung SyncMaster 500(M)s Plus (CKE5507*); sam0d65; 30-60; 50-120; 1
+Samsung; Samsung SyncMaster 500b; sam1c53; 30-69; 50-160; 1
+Samsung; Samsung SyncMaster 500b Plus (CKF5607*); sam0d66; 30-69; 50-160; 1
+Samsung; Samsung SyncMaster 510(M)s (CHA5807*); sam2035; 30-61; 50-120; 1
+Samsung; Samsung SyncMaster 510b(CHB5707*); sam2055; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 510N/512N/CX511N/CX501N; SAM011D; 30-61; 56-75; 1
+Samsung; Samsung SyncMaster 515V; SAM0172; 30-61; 56-75; 1
+Samsung; Samsung SyncMaster 520TFT (LXB530*); sam6055; 30-61; 50-75; 1
+Samsung; Samsung SyncMaster 530/531TFT (LXB550*); sam6056; 30-61; 50-75; 1
+Samsung; Samsung SyncMaster 550(M)s; sam1035; 30-61; 50-120; 1
+Samsung; Samsung SyncMaster 550b; sam1055; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 550v; sam12b6; 30-55; 50-120; 1
+Samsung; Samsung SyncMaster 570B TFT/580B TFT; sam49d5; 30-61; 50-75; 1
+Samsung; Samsung SyncMaster 591v; sam022e; 30-55; 50-120; 1
+Samsung; Samsung SyncMaster 610(M)b(CHB6107*); sam2041; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 6Ne; sam4d72; 30.0-65.0; 50.0-100.0; 1
+Samsung; Samsung SyncMaster 700(M)b (CGM7607*); sam1db3; 30-69; 50-160; 1
+Samsung; Samsung SyncMaster 700(M)s (CGE7507*); sam1cb3; 30-69; 50-160; 1
+Samsung; Samsung SyncMaster 700(M)s Plus (CKG7507*); sam0d67; 30-69; 50-160; 1
+Samsung; Samsung SyncMaster 700b Plus; sam2cf8; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 700DF; SAM00B3; 30-71; 50-160; 1
+Samsung; Samsung SyncMaster 700IFT (CSH780B*); sam4ee9; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 700NF; sam38d7; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 700p Plus (CSH7839*); sam4ee6; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 700TFT; sam6057; 61.5-81.0; 59.0-76.0; 1
+Samsung; Samsung SyncMaster 701 IFT; sam4eeb; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 703(M)s/753(M)s/750(M)s/753(M)v/CM173A(M); SAM0027; 30-71; 50-160; 1
+Samsung; Samsung SyncMaster 710(M)b (CHB7709*); sam2059; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 710(M)s (CHB7707*); sam2057; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 710N/177N/CX711N/CX701N; SAM011E; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 710Tplus/711T/712T (Analog); SAM0165; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 710Tplus/711T/712T (Digital); SAM0166; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 711N/712N; SAM0124; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 712V/713V/710S/715V; SAM0125; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 730B (Analog); SAM0191; 30-81; 56-75
+Samsung; Samsung SyncMaster 730B (Digital); SAM0192; 30-81; 56-75
+Samsung; Samsung SyncMaster 731B/731BF/731BA/730BA; SAM0215; 30-81; 56-75; 1280x1024
+Samsung; Samsung SyncMaster 750(M)b; sam1059; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 750(M)s(T); sam1057; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 750s(T); SAM12B6; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 753DF(X)/703DF(X)/783DF(X)/CD173A(T); SAM0022; 30-71; 50-160; 1024x768
+Samsung; Samsung SyncMaster 755DF(X)/705DF(X)/CDP17BDF(U)(UP); SAM1156; 30-85; 50-160; 1
+Samsung; Samsung SyncMaster 755DFG/740DFG/CTT17DFG; SAM0009; 30-85; 50-160; 1
+Samsung; Samsung SyncMaster 757DF(X)/707DF(X)/700IFT/CD177A(P); SAM0029; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 757MB/717MB/CD177D(P); SAM0059; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 757NF; SAM002a; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 763MB/713MB/CD173D(P); SAM0045; 30-71; 50-160; 1
+Samsung; Samsung SyncMaster 765MB/715MB/CD175D(P); SAM0048; 30-85; 50-160; 1
+Samsung; Samsung SyncMaster 770 TFT; SAM12D7; 30-81; 56-76; 1
+Samsung; Samsung SyncMaster 790DF; SAM0126; 30-71; 50-160; 1
+Samsung; Samsung SyncMaster 793DF/793MB; SAM0107; 30-71; 50-160; 1
+Samsung; Samsung SyncMaster 793S/793V/CM173G; SAM0117; 30-71; 50-160; 1
+Samsung; Samsung SyncMaster 794MB/794MBplus/798MB; SAM01AB; 30-70; 50-160; 1
+Samsung; Samsung SyncMaster 795DF/795MB/CD175GP; SAM0108; 30-85; 50-160; 1280x1024
+Samsung; Samsung SyncMaster 796MB/796MBplus; SAM01AC; 30-85; 50-160; 1
+Samsung; Samsung SyncMaster 800TFT; sam6058; 61.5-81.0; 59.0-76.0; 1
+Samsung; Samsung SyncMaster 900 In; sam25d9; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 900IFT; sam4f29; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 900NF; sam38d9; 30-110; 50-160; 1
+Samsung; Samsung SyncMaster 900p (CSH9839*); sam4f26; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 900SL (CSM92*); sam4db9; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 905DF(X)/955DF(X)/CD195A; SAM002D; 30-85; 50-160; 1
+Samsung; Samsung SyncMaster 906BW; SAM0273; 30-81; 56-75; 1440x900
+Samsung; Samsung SyncMaster 910MP; SAM0187; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 910N/912N; SAM011F; 30-81; 56-85; 1
+Samsung; Samsung SyncMaster 910V/910M/913V; SAM0115; 30-81; 56-75
+Samsung; Samsung SyncMaster 917MB/950MB/957MB/CD197D(P); SAM0070; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 920T/CX911T (Analog); SAM014A; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 920T/CX911T (Digital); SAM014B; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 930B; sam0193; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 931BF (DVI); SAM0217; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 931BF (VGA); SAM0218; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 940N,SyncMaster Magic CX915N/CX916N/CX917N; SAM01E1; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 940T/940B/940Fn(Analog); SAM01BA; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 940T/940B/940Fn(Digital); SAM01BB; 30-81; 56-75; 1
+Samsung; Samsung SyncMaster 950in(T); sam25dc; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 955df; sam413b; 30-85; 50-160; 1
+Samsung; Samsung SyncMaster 955MB/915MB/CD195D(P); SAM0081; 30-85; 50-160; 1
+Samsung; Samsung SyncMaster 957FS/950FS/907FS/CS197A(P); SAM0023; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 957p; sam002c; 30-96; 50-160; 1
+Samsung; Samsung SyncMaster 959NF/900NF/909NF/CN199A(P); SAM002F; 30-110; 50-160; 1
+Samsung; Samsung SyncMaster 997DF/927DF/997MB/927MB/927DFI/927MBI; SAM0109; 30-96; 50-160; 1
+Samtron; Samtron 428PT/PTL; sdi1428; 31.5-48.0; 43.5-75.0; 1
+Samtron; Samtron SC-208DXL+; sdi4690; 30.0-82.0; 50.0-120.0; 1
+Samtron; Samtron SC-528MDL; sdi5451; 30.0-48.0; 50.0-120.0; 1
+Samtron; Samtron SC-528MXLJ; sdi1530; 24.0-66.0; 50.0-100.0; 1
+Samtron; Samtron SC-528TXL; sdi1528; 30.0-48.0; 50.0-100.0; 1
+Samtron; Samtron SC-528UXL; sdi1529; 30.0-65.0; 50.0-120.0; 1
+Samtron; Samtron SC-726GXL; sdi4d71; 30.0-85.0; 50.0-120.0; 1
+Samtron; Samtron SC-728FXL; sdi4d70; 30.0-65.0; 50.0-120.0; 1
+Samtron; Samtron SC-728FXLJ; sdi4d73; 24.0-65.0; 50.0-120.0; 1
+Seiko; Seiko CM-1440; cm-1440; 31.0-40.0; 50.0-90.0; 1
+Seiko; Seiko CM-1450; cm-1450; 31.0-50.0; 50.0-90.0; 1
+Seiko; Seiko CM-2050; cm-2050; 31.0-50.0; 50.0-90.0; 1
+SGI; SGI 1600SW FlatPanel; SGX0640; 72.0; 60.0
+SGI; SGI 17-inch 340C; 0; 30-95; 48-180
+SGI; SGI 17-inch GDM-17E11; 0; 30.0-85.0; 48.0-150.0
+SGI; SGI 17-inch GDM-17E21; 0; 30.0-85.0; 48.0-160.0
+SGI; SGI 17-inch GDM-2011P; 0; 30.0-92.0; 48.0-160.0
+SGI; SGI 17-inch M-7S54SG; 0; 30.0-95.0; 48.0-180.0
+SGI; SGI 19-inch CMNB024B; 0; 30-100; 48-200
+SGI; SGI 20-inch GDM-20E21; 0; 30.0-96.0; 48.0-160.0
+SGI; SGI 20-inch GDM-4011P; 0; 30.0-96.0; 48.0-160.0
+SGI; SGI 21-inch 420C; 0; 30-107; 48-160
+SGI; SGI 21-inch GDM-5011P; 0; 30.0-107.0; 48.0-160.0
+SGI; SGI 21-inch GDM-5021PT; 0; 30.0-107.0; 48.0-160.0
+SGI; SGI 21-inch GDM-5411; 0; 30-121; 48-160
+SGI; SGI 21-inch GDM5011P; 0; 30-107; 48-160
+SGI; SGI 24-inch GDM-90W11; 0; 30.0-96.0; 48.0-160.0
+SGI; SGI GDM-90W11; 0; 30.0-96.0; 48.0-160.0
+Shamrock; Shamrock C407L; 0; 31.5-55.0; 50-70
+Siemens Nixdorf; Siemens Nixdorf MCM1402; siemens1; 30-64; 50-100; 1
+Siemens Nixdorf; Siemens Nixdorf MCM1503; siemens2; 30-64; 50-100; 1
+Siemens Nixdorf; Siemens Nixdorf MCM1702; siemens3; 30-82; 50-150; 1
+Siemens Nixdorf; Siemens Nixdorf MCM2102; siemens4; 30-82; 50-160; 1
+Sliding Unika; Sliding S 2201 LCD 16/9 22inch; 0; 31-80; 50-75; 1
+Smile; Smile 85Khz Monitor; sml6738; 30.0-86.0; 50.0-150.0; 1
+Smile; Smile CA6425DL/CB6425DL; sml6425; 30.0-54.0; 50.0-100.0; 1
+Smile; Smile CA6525DL/CB6525DL; sml6525; 30.0-54.0; 50.0-100.0; 1
+Smile; Smile CA6546SL/CB6546SL; sml6546; 30.0-69.0; 50.0-120.0; 1
+Smile; Smile CA6719SL/CB6719SL; sml6719; 30.0-95.0; 50.0-150.0; 1
+Smile; Smile CA6746SL/CB6746SL; sml6746; 30.0-69.0; 50.0-120.0; 1
+Smile; Smile CA6748SL/CB6748SL; sml6748; 30.0-86.0; 50.0-150.0; 1
+Smile; Smile CA6919SL/CB6919SL; sml6919; 30.0-95.0; 50.0-150.0; 1
+Sony; Sony CPD-100ES; sny0450; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-100GS; sny0550; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-100SF; sny0150; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-100SX; sny8050; 30.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-100VS; sny0050; 31.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-101VS iGPE; sny0a50; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-110GS/110EST/T9; sny0c50; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-120AS; sny0850; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-120VS; sny0650; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-1302; cpd-1302; 15.5-34.0; 50.0-100.0; 1
+Sony; Sony CPD-1304; cpd-1304; 28.0-50.0; 50.0-87.0; 1
+Sony; Sony CPD-1304S; cpd-1304s; 28.0-57.0; 55.0-110.0; 1
+Sony; Sony CPD-1430; cpd-1430; 28.0-58.0; 55.0-110.0; 1
+Sony; Sony CPD-15ES; sny0750; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-15ES2; sny0b50; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-15SF2; sny0000; 31.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-15SF9; sny0350; 24.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-15SX1; sny0000; 30.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-1604S; cpd-1604s; 28-57; 50-87; 1
+Sony; Sony CPD-1730; cpd-1730; 28.0-58.0; 55.0-115.0; 1
+Sony; Sony CPD-17C1; sny0b70; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-17ES2; sny0f70; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-17GS; sny0a70; 30.0-85.0; 50.0-120.0; 1
+Sony; Sony CPD-17MS; sny0970; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-17SF2; sny0000; 31.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-17SF8; sny0000; 24.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-17SF8R; sny0070; 24.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-17SF9; sny0470; 24.0-80.0; 50.0-120.0; 1
+Sony; Sony CPD-2003GT; sny017b; 30.0-85.0; 50.0-120.0; 1
+Sony; Sony CPD-200ES; sny0770; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-200GS; sny0a70; 30.0-85.0; 50.0-120.0; 1
+Sony; Sony CPD-200SF; sny0270; 30.0-80.0; 50.0-120.0; 1
+Sony; Sony CPD-200SFT; sny0370; 30.0-80.0; 50.0-120.0; 1
+Sony; Sony CPD-200SX; sny0570; 30.0-70.0; 50.0-150.0; 1
+Sony; Sony CPD-201VS iGPE; sny0e70; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-20SF2; sny0000; 30.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-20SF2T; sny0000; 30.0-65.0; 50.0-120.0; 1
+Sony; Sony CPD-20SF2T5; sny00a0; 30.0-85.0; 48.0-150.0; 1
+Sony; Sony CPD-20SF3; sny01a0; 30.0-86.0; 48.0-150.0; 1
+Sony; Sony CPD-210GS/210EST/T9; sny1070; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-210SFB; sny0870; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-220AS; sny0d70; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-220GS/17GS2; sny0071; 30.0-85.0; 48.0-120.0; 1
+Sony; Sony CPD-220VS; sny0670; 30.0-70.0; 50.0-120.0; 1
+Sony; Sony CPD-300SFT; sny03a0; 30.0-86.0; 48.0-150.0; 1
+Sony; Sony CPD-300SFT5; sny04a0; 30.0-86.0; 48.0-150.0; 1
+Sony; Sony CPD-420GS/GST/19GS2; sny0091; 30.0-96.0; 48.0-120.0; 1
+Sony; Sony CPD-520GS/520GST/21GS2; sny02b0; 30.0-96.0; 48.0-160.0; 1
+Sony; Sony CPD-A100/HMD-A100; sny0e50; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-A200/HMD-A200; sny1370; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-E100/E100E; sny0d50; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-E200/E200E; sny1470; 30.0-85.0; 48.0-120.0; 1
+Sony; Sony CPD-E220/E220E; SNY1770; 30.0-85.0; 48.0-120.0; 1
+Sony; Sony CPD-E400/E400E; sny0390; 30.0-96.0; 48.0-120.0; 1
+Sony; Sony CPD-E500/E500E; sny04b0; 30.0-96.0; 48.0-160.0; 1
+Sony; Sony CPD-G200; sny1270; 30.0-96.0; 48.0-120.0; 1
+Sony; Sony CPD-G400; sny0290; 30.0-107.0; 48.0-120.0; 1
+Sony; Sony CPD-G410R; sny0191; 30.0-110.0; 40.0-170.0; 1
+Sony; Sony CPD-G420; sny0490; 30.0-110.0; 48.0-170.0; 1
+Sony; Sony CPD-G500; sny03b0; 30.0-121.0; 48.0-160.0; 1
+Sony; Sony CPD-H200; sny1170; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony CPD-L100; sny0140; 30.0-61.0; 50.0-65.0; 1
+Sony; Sony CPD-L133; sny0030; 30.0-70.0; 50.0-65.0; 1
+Sony; Sony CPD-L141; sny0040; 30.0-70.0; 50.0-65.0; 1
+Sony; Sony CPD-L150; sny0950; 30.0-70.0; 50.0-65.0; 1
+Sony; Sony CPD-L181/181A; sny0080; 30.0-92.0; 48.0-65.0; 1
+Sony; Sony CPD-L200/M151; sny0f50; 30.0-61.0; 50.0-65.0; 1
+Sony; Sony CPD-V200; sny1570; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony GDM-1310; cpd-1310; 15.7-36.0; 50.0-100.0; 1
+Sony; Sony GDM-17SE1; gdm-17se1; 31.5-82.0; 50.0-150.0; 1
+Sony; Sony GDM-17SE2T; sny0170; 30.0-85.0; 48.0-150.0; 1
+Sony; Sony GDM-1936; cpd-1936; 30.0-71.0; 50.0-120.0; 1
+Sony; Sony GDM-200PS; sny0c70; 30.0-92.0; 48.0-160.0; 1
+Sony; Sony GDM-2038; cpd-2038; 28.0-85.0; 50.0-160.0; 1
+Sony; Sony GDM-20SE2T5; sny05a0; 30.0-96.0; 48.0-160.0; 1
+Sony; Sony GDM-20SE3T; sny06a0; 30.0-96.0; 48.0-160.0; 1
+Sony; Sony GDM-20SHT; sny0000; 30.0-65.0; 50.0-120.0; 1
+Sony; Sony GDM-20SHT(NEW); sny08a0; 30.0-107.0; 50.0-160.0; 1
+Sony; Sony GDM-400PS/400PST/19PS; sny0090; 30.0-95.0; 48.0-160.0; 1
+Sony; Sony GDM-500PS/T/T9/21PS; sny00b0; 30.0-107.0; 48.0-160.0; 1
+Sony; Sony GDM-C520; SNY01B1; 30.0-130.0; 48.0-170.0; 1
+Sony; Sony GDM-F400/F400T9; sny0190; 30.0-107.0; 48.0-160.0; 1
+Sony; Sony GDM-F500/F500T9; sny01b0; 30.0-121.0; 48.0-160.0; 1
+Sony; Sony GDM-W900; sny00e0; 30.0-96.0; 50.0-160.0; 1
+Sony; Sony GVM-2020; cpd-2020; 15.7-36.0; 50.0-100.0; 1
+Sony; Sony HMD-A240; SNY0871; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony HMD-A440; SNY0E90; 30.0-96.0; 48.0-170.0; 1
+Sony; Sony HMD-H200; SNY1170; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony HMD-V200; SNY1570; 30.0-70.0; 48.0-120.0; 1
+Sony; Sony KL-W7000; sny01f2; 30.0-50.0; 50.0-85.0; 1
+Sony; Sony MFM-HT75W (Analog); SNY1200; 28.0-64.0; 57.0-75.0; 1
+Sony; Sony MFM-HT75W (Digital); SNY1400; 28.0-64.0; 57.0-63.0; 1
+Sony; Sony MFM-HT95 (Analog); SNY1300; 28.0-81.0; 57.0-75.0; 1
+Sony; Sony MFM-HT95 (Digital); SNY1500; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony Multiscan 15sf; ms-15sf; 31.0-64.0; 50.0-120.0; 1
+Sony; Sony Multiscan 17sf; ms-17sf; 31.0-64.0; 50.0-120.0; 1
+Sony; Sony Multiscan 20se; ms-20se; 31.5-85; 50-150; 1
+Sony; Sony SDM-HS53; SNY2250; 28.0-49.0; 57.0-63.0; 1
+Sony; Sony SDM-HS73; SNY2270; 28.0-65.0; 48.0-65.0; 1
+Sony; Sony SDM-HS73P; SNY2B70; 28.0-80.0; 48.0-75.0; 1
+Sony; Sony SDM-HS74P (Analog); SNY3070; 28.0-81.0; 48.0-75.0; 1
+Sony; Sony SDM-HS74P (Digital); SNY3170; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-HS75; SNY2400; 28.0-81.0; 48.0-75.0; 1
+Sony; Sony SDM-HS75P (Analog); SNY2200; 28.0-81.0; 48.0-75.0; 1
+Sony; Sony SDM-HS75P (Digital); SNY2300; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-HS93; SNY1190; 28.0-65.0; 48.0-65.0; 1
+Sony; Sony SDM-HS94P (Analog); SNY1B90; 28.0-81.0; 48.0-75.0; 1
+Sony; Sony SDM-HS94P (Digital); SNY1C90; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-HX73 (Analog); SNY2870; 28.0-81.0; 57.0-75.0; 1
+Sony; Sony SDM-HX73 (Digital); SNY2970; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-HX93 (Analog); SNY1490; 28.0-81.0; 57.0-75.0; 1
+Sony; Sony SDM-HX93 (Digital); SNY1590; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-M51; SNY1650; 28.0-61.0; 48.0-65.0; 1
+Sony; Sony SDM-M51D (Analog); SNY1850; 28.0-61.0; 48.0-65.0; 1
+Sony; Sony SDM-M51D (Digital); SNY1950; 28.0-61.0; 59.0-61.0; 1
+Sony; Sony SDM-M61 (Analog); SNY0060; 28.0-80.0; 48.0-75.0; 1
+Sony; Sony SDM-M61 (Digital); SNY0160; 28.0-65.0; 59.0-61.0; 1
+Sony; Sony SDM-M81 (Analog); SNY0380; 28.0-80.0; 48.0-75.0; 1
+Sony; Sony SDM-M81 (Digital); SNY0480; 28.0-65.0; 59.0-61.0; 1
+Sony; Sony SDM-N50; SNY1050; 30.0-60.0; 50.0-65.0; 1
+Sony; Sony SDM-N50PS; SNY1150; 30.0-60.0; 50.0-65.0; 1
+Sony; Sony SDM-N50TV; SNY1550; 30.0-60.0; 50.0-65.0; 1
+Sony; Sony SDM-N80 (Analog); SNY0180; 28.0-107.0; 48.0-65.0; 1
+Sony; Sony SDM-N80 (Digital); SNY0280; 28.0-92.0; 48.0-65.0; 1
+Sony; Sony SDM-P232W (Analog); SNY00D0; 30.0-95.0; 55.0-65.0; 1
+Sony; Sony SDM-P232W (Digital); SNY01D0; 30.0-92.0; 55.0-65.0; 1
+Sony; Sony SDM-P234 (Analog); SNY03D0; 28.0-92.0; 57.0-85.0; 1
+Sony; Sony SDM-P234 (Digital); SNY02D0; 28.0-75.0; 57.0-63.0; 1
+Sony; Sony SDM-P82 (Analog); SNY0880; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-P82 (Digital); SNY0980; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-S204 (Analog); SNY0EA0; 28.0-92.0; 57.0-85.0; 1
+Sony; Sony SDM-S204 (Digital); SNY0FA0; 28.0-75.0; 57.0-63.0; 1
+Sony; Sony SDM-S51; SNY1E50; 28.0-61.0; 48.0-65.0; 1
+Sony; Sony SDM-S53; SNY2450; 28.0-62.0; 57.0-75.0; 1
+Sony; Sony SDM-S71; SNY1F70; 28.0-65.0; 48.0-65.0; 1
+Sony; Sony SDM-S73; SNY2770; 28.0-65.0; 57.0-75.0; 1
+Sony; Sony SDM-S74 (Analog); SNY2C70; 28.0-81.0; 48.0-75.0; 1
+Sony; Sony SDM-S74 (Digital); SNY2D70; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-S81; SNY0580; 28.0-65.0; 48.0-65.0; 1
+Sony; Sony SDM-S91; SNY1090; 28.0-65.0; 55.0-65.0; 1
+Sony; Sony SDM-S93; SNY1390; 28.0-65.0; 57.0-75.0; 1
+Sony; Sony SDM-S94 (Analog); SNY1790; 28.0-65.0; 57.0-75.0; 1
+Sony; Sony SDM-S94 (Digital); SNY1890; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-V72W; SNY0B71; 28.0-70.0; 59.0-61.0; 1
+Sony; Sony SDM-X202 (Analog); SNY09A0; 30.0-92.0; 55.0-65.0; 1
+Sony; Sony SDM-X202 (Digital); SNY0AA0; 30.0-92.0; 55.0-65.0; 1
+Sony; Sony SDM-X52 (Analog); SNY1F50; 28.0-49.0; 57.0-63.0; 1
+Sony; Sony SDM-X52 (Digital); SNY2050; 28.0-49.0; 57.0-63.0; 1
+Sony; Sony SDM-X53 (Analog); SNY2350; 28.0-52.0; 57.0-75.0; 1
+Sony; Sony SDM-X53 (Digital); SNY2550; 28.0-52.0; 57.0-63.0; 1
+Sony; Sony SDM-X72 (Analog); SNY1D70; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-X72 (Digital); SNY1E70; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-X73 (Analog); SNY2670; 28.0-65.0; 57.0-75.0; 1
+Sony; Sony SDM-X73 (Digital); SNY2A70; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony SDM-X82 (Analog); SNY0680; 28.0-63.0; 57.0-63.0; 1
+Sony; Sony SDM-X82 (Digital); SNY0780; 28.0-63.0; 57.0-63.0; 1
+Sony; Sony SDM-X93 (Analog); SNY1290; 28.0-65.0; 57.0-75.0; 1
+Sony; Sony SDM-X93 (Digital); SNY1690; 28.0-65.0; 57.0-63.0; 1
+Sony; Sony Bravia KDL-32D3000; SNYfe00; 14-16; 48-62; 1360x768
+Sony; Sony VMU-1000; sny07a0; 30.0-86.0; 48.0-150.0; 1
+Sun; Sun 16-inch 574; sun0574; 30.0-70.0; 50.0-90.0; 1
+Sun; Sun 17-inch 447Z; 100; 31.0-72.0; 50.0-120.0
+Sun; Sun 17-inch CHB7727L (Samsung); 0; 30.0-72.0; 50.0-160.0; 1
+Sun; Sun 18-inch Flat Panel Display; sun0004; 64.0-81.0; 60.0-76.0; 1
+Sun; Sun 21-inch N3; 0; 30.0-96.0; 48.0-160.0
+Sun; Sun 24-inch; 0; 30.0-96.0; 50.0-160.0
+Sunshine; Sunshine DM-8 CM-1433H; 0; 31.5-35.1; 55.0-66.0
+Sylvania; Sylvania F74; syl00f4; 30.0-70.0; 55.0-120.0; 1
+Talon; Talon Tuff/CRT; tuffcrt; 15.0-35.0; 47.0-73.0; 1
+Tandberg; Tandberg ErgoScan 21c; 0; 30.0-95.0; 50.0-160.0
+Targa; TARGA TM 1710 D; 0; 30-65; 50-90
+Targa; Targa TM-3887, 15 Inch Monitor; tm-3887; 30-70; 50-130; 1
+Targa; Targa TM-4287, 17 Inch Monitor; tm-4287; 30-70; 50-130; 1
+Targa; Targa TM-xxxx, 19 Inch Monitor; tm-xxxx; 30-70; 50-130; 1
+Tatung; Intelliscan TM442x series; tat2f44; 30.0-50.0; 50.0-100.0; 1
+Tatung; Intelliscan TM452x series; tat2f45; 30.0-50.0; 50.0-100.0; 1
+Tatung; Intelliscan TM651x series; tat1f65; 31.0-65.0; 50.0-90.0; 1
+Tatung; Intelliscan TM671x series; tat1f67; 31.0-65.0; 50.0-110.0; 1
+Tatung; Tatung C4A; c4a; 31.5-48.4; 50.0-90.0; 1
+Tatung; Tatung C4D; c4d; 31.5-54.0; 50.0-90.0; 1
+Tatung; Tatung C4E; c4e; 31.5-54.0; 50.0-90.0; 1
+Tatung; Tatung C5D; c5d; 31.5-56.5; 50.0-90.0; 1
+Tatung; Tatung C5D; tat3044; 30.0-54.0; 50.0-100.0; 1
+Tatung; Tatung C5E; c5e; 31.5-56.5; 50.0-90.0; 1
+Tatung; Tatung C5V; c5v; 30.0-70.0; 50.0-100.0; 1
+Tatung; Tatung C7BZR; tat3742; 30.0-70.0; 50.0-100.0; 1
+Tatung; Tatung C7G; c7g; 30.0-70.0; 50.0-100.0; 1
+Tatung; Tatung CM-1492V; cm-1492v; 31.5; 50.0-70.0; 1
+Tatung; Tatung CM-1495G; cm-1495g; 15.0-37.0; 40.0-120.0; 1
+Tatung; Tatung CM-1498M; cm-1498m; 35.5-37.5; 50.0-90.0; 1
+Tatung; Tatung CM-1498R; cm-1498r; 35.5-37.5; 50.0-90.0; 1
+Tatung; Tatung CM-1498T; cm-1498t; 35.5-37.5; 50.0-90.0; 1
+Tatung; Tatung CM-1498X/T; cm-1498x/t; 31.5-35.6; 50.0-90.0; 1
+Tatung; Tatung CM-14MP; cm-14mp; 31-50; 50.0-90.0; 1
+Tatung; Tatung CM-14SBM/E with Power Saving; cm-14sbm/e-lp; 31.5-35.6; 50.0-90.0; 1
+Tatung; Tatung CM-14SBM/S/E; cm-14sbm/s/e; 31.5-35.6; 50.0-90.0; 1
+Tatung; Tatung CM-14SHS/E/R; cm-14shs/e/r; 31.5-38.0; 50.0-90.0; 1
+Tatung; Tatung CM-14UAE with Power Saving; cm-14uae-lp; 31.5-48.4; 50.0-90.0; 1
+Tatung; Tatung CM-14UAS/E; cm-14uas/e; 31.5-48.4; 50.0-90.0; 1
+Tatung; Tatung CM-14UH; tat4855; 31.5-48.4; 56.0-87.0; 1
+Tatung; Tatung CM-14UHE/R; cm-14uhe/r; 31-50; 50.0-90.0; 1
+Tatung; Tatung CM-15MCS; cm-15mcs; 29-65; 50.0-100.0; 1
+Tatung; Tatung CM-15MOS/E/R; cm-15mos/e/r; 29.0-65; 50.0-100.0; 1
+Tatung; Tatung CM-15MP; cm-15mp; 31-50; 50.0-90.0; 1
+Tatung; Tatung CM-15UH; cm-15uh; 31-50; 50.0-90.0; 1
+Tatung; Tatung CM-15VBE/R; cm-15vbe/r; 31.5-56.5; 56.0-75.0; 1
+Tatung; Tatung CM-15VCR; cm-15vcr; 29-65; 50.0-100.0; 1
+Tatung; Tatung CM-15VDE; cm-15vde; 31.5-56.5; 56.0-75.0; 1
+Tatung; Tatung CM-1700; cm-1700; 31.0-65.0; 50.0-90.0; 1
+Tatung; Tatung CM-17MBD/R; cm-17mbd/r; 29-65; 50.0-100.0; 1
+Tatung; Tatung CM-17MC; tat434d; 31.5-65.0; 56.0-87.0; 1
+Tatung; Tatung CM-17MCR; cm-17mcr; 29-65; 50.0-100.0; 1
+Tatung; Tatung CM-17MKR; cm-17mkr; 28-82; 50.0-120.0; 1
+Tatung; Tatung CM-17MLP; cm-17mlp; 29-65; 50.0-100.0; 1
+Tatung; Tatung CM-17MOR; cm-17mor; 29-65; 50.0-100.0; 1
+Tatung; Tatung CM-17MVR; cm-17mvr; 28-82; 50.0-120.0; 1
+Tatung; Tatung CM-2000; cm-2000; 21.0-65.0; 43.0-100.0; 1
+Tatung; Tatung CM-20MBD/R; cm-20mbd/r; 29-65; 50.0-100.0; 1
+Tatung; Tatung CM-20MKR; cm-20mkr; 28-82; 50.0-120.0; 1
+Tatung; Tatung CM-20MVR; cm-20mvr; 28-82; 50.0-120.0; 1
+Tatung; Tatung MM-1295; mm-1295; 15.0-35.0; 50.0-70.0; 1
+Tatung; Tatung MM-14SAE; mm-14sae; 31.5-35.6; 50.0-90.0; 1
+Tatung; Tatung MM-14SCE; mm-14sce; 31.5-38.0; 50.0-90.0; 1
+Tatung; Tatung VM-14AF; vm-14af; 31.5-38.0; 50.0-90.0; 1
+Taxan; Ergovision 430LR; taxe430; 30.0-54.0; 50.0-110.0; 1
+Taxan; Ergovision 550TCO95/TCO95-S; taxe550; 30.0-69.0; 55.0-110.0; 1
+Taxan; Ergovision 730TCO95/TCO95-S; taxe730; 30.0-69.0; 50.0-120.0; 1
+Taxan; Ergovision 740TCO95/TCO95-S; taxe740; 30.0-85.0; 55.0-120.0; 1
+Taxan; Ergovision 750TCO95; taxe750; 30.0-86.0; 50.0-130.0; 1
+Taxan; Ergovision 760TCO95/TCO95-S; taxe760; 30.0-70.0; 50.0-120.0; 1
+Taxan; Ergovision 975TCO95; taxe975; 30.0-95.0; 50.0-150.0; 1
+Taxan; Taxan MV_770+; mv_770+; 15.0-37.0; 50.0-90.0; 1
+Taxan; Taxan MV_795; mv_795; 30.0-57.0; 50.0-100.0; 1
+Taxan; Taxan MV_875; mv_875; 30.0-57.0; 50.0-90.0; 1
+Taxan; Taxan UV_1000; uv_1000; 60.0-72.0; 50.0-80.0; 1
+Taxan; Taxan UV_1095; uv_1095; 28.0-80.0; 50.0-100.0; 1
+Taxan; Taxan UV_1150; uv_1150; 60.0-78.0; 50.0-80.0; 1
+TECO; TECO TE1438; tei1438; 30-38; 0-100; 0
+TECO; TECO TE1491; te1491; 38.0-80.0; 45.0-100.0; 1
+TECO; TECO TE1591; te1591; 30.0-50.0; 45.0-100.0; 1
+TECO; TECO TE1791; te1791; 30.0-50.0; 45.0-100.0; 1
+TECO; TECO TE2191; te2191; 60.0-66.0; 45.0-100.0; 1
+TECO; TECO TE412; tei0412; 30-57; 50-150; 1
+TECO; TECO TE432; tei0432; 30-65; 50-100; 1
+TECO; TECO TE438; tei0438; 30-38; 0-100; 1
+TECO; TECO TE450; tei0450; 30-50; 50-100; 1
+TECO; TECO TE518; tei0518; 30-69; 50-150; 1
+TECO; TECO TE535; tei0535; 30-65; 50-100; 1
+TECO; TECO TE550; tei0550; 30-50; 50-100; 1
+TECO; TECO TE551; tei0551; 30-54; 50-150; 1
+TECO; TECO TE572; tei0572; 30-72; 50-150; 1
+TECO; TECO TE760; tei0760; 30-65; 50-100; 1
+TECO; TECO TE767; tei0767; 30-69; 50-150; 1
+TECO; TECO TE768; tei0768; 30-86; 50-150; 1
+TECO; TECO TE772; tei0772; 30-72; 50-150; 1
+TECO; TECO TE786; tei0786; 30-86; 50-150; 1
+TECO; TECO TE795; tei0795; 30-96; 50-150; 1
+TECO; TECO TE9516S; tei9516; 30-35; 50-100; 0
+TECO; TECO TE995; tei0995; 30-95; 50-150; 1
+Toshiba; Toshiba DP566M, Equium 15-inch Monitor; tsb5002; 30.0-66.0; 50.0-100.0; 1
+Toshiba; Toshiba DP782M, Equium 17-inch Monitor; tsb5003; 30.0-82.0; 50.0-160.0; 1
+Toshiba; Toshiba DR569M (PV2001U); tsb5004; 30.0-69.0; 50.0-110.0; 1
+Toshiba; Toshiba DR769MF (PV2002U); tsb5005; 30.0-69.0; 50.0-110.0; 1
+Toshiba; Toshiba P17CM00; p17cm00; 30.0-65.0; 50.0-90.0; 1
+Toshiba; Toshiba P17CM01; p17cm01; 30.0-65.0; 50.0-90.0; 1
+Toshiba; Toshiba P17CS01; p17cs01; 30.0-65.0; 50.0-90.0; 1
+Toshiba; Toshiba P17CU01; p17cu01; 30.0-57.0; 50.0-90.0; 1
+Toshiba; Toshiba P21CM00; p21cm00; 30.0-65.0; 50.0-90.0; 1
+Toshiba; Toshiba P21CR01; p21cr01; 30.0-65.0; 50.0-90.0; 1
+Toshiba; Toshiba TOS5082; tos5082; 31.5-48.5; 50.0-70.0; 1
+TPG; TPG 554e; TPG1554; 30.0-54.0; 50.0-120.0; 1
+TTX; TTX 3435AG; ttx3435ag; 15.5-35.5; 50.0-70.0; 1
+TTX; TTX 3436AG; ttx3436ag; 15.0-38.0; 50.0-90.0; 1
+TTX; TTX 3450AG; ttx3450ag; 20.0-38.0; 50.0-90.0; 1
+TVM; TVM AS4Dp/LR4Dp Model; tvm0487; 30.0-55.0; 50.0-120.0; 1
+TVM; TVM AS5S Model; tvm0588; 30.0-69.0; 50.0-120.0; 1
+TVM; TVM MG-11; mg-11; 15.0-38.0; 47.0-75.0; 1
+TVM; TVM SuperSync 3+; ss_3+; 15.0-38.0; 47.0-90.0; 1
+TVM; TVM SuperSync 4A; ss_4a; 31.0-38.0; 50.0-90.0; 1
+TVM; TVM SuperSync 5A; ss_5a; 31.0-48.0; 50.0-90.0; 1
+TVM; TVM SuperSync 6A; ss_6a; 31.0-65.0; 40.0-100.0; 1
+TVM; TVM SuperSync 7A; ss_7a; 31.0-65.0; 40.0-100.0; 1
+TVM; TVM TCO5S Model; tvm0589; 30.0-69.0; 50.0-120.0; 1
+TVM; TVM TCO6S Model; tvm0688; 30.0-69.0; 50.0-120.0; 1
+TW Casper; TW Casper TM-5156H; tm-5156h; 15.5-50.0; 60.0-70.0; 1
+TW Casper; TW Casper TM-5414; tm-5414; 15.5-35.0; 50.0-70.0; 1
+Unisys; Unisys EVG-142-COL; unm2014; 30.0-48.0; 50.0-120.0; 1
+Unisys; Unisys EVG-152-COL; unm2015; 30.0-48.0; 50.0-130.0; 1
+Unisys; Unisys EVG-153-COL; unm3015; 30.0-65.0; 50.0-120.0; 1
+Unisys; Unisys EVG-174-COL; unm4017; 30.0-85.0; 50.0-120.0; 1
+Unisys; Unisys EVG-215-COL; unm5021; 30.0-95.0; 50.0-160.0; 1
+Unisys; Unisys EVG-300-COL; evg300; 30-62.0; 50-100; 1
+Unisys; Unisys EVG-400-COL; evg400; 30-62.0; 50-100; 1
+Unisys; Unisys EVG-500-COL; evg500; 30-82; 50-120; 1
+Unisys; Unisys EVG1000-E2; unm1002; 30.0-50.0; 50.0-65.0; 1
+Unisys; Unisys EVG2000-E; unm2001; 30.0-54.0; 50.0-130.0; 1
+Unisys; Unisys EVG2000-P; unm2002; 30.0-65.0; 50.0-75.0; 1
+Unisys; Unisys EVG2100-E; unm2101; 30.0-54.0; 50.0-130.0; 1
+Unisys; Unisys EVG2100-P; unm2102; 30.0-65.0; 50.0-75.0; 1
+Unisys; Unisys EVG3000-E; unm3001; 30.0-69.0; 50.0-160.0; 1
+Unisys; Unisys EVG3000-P; unm3002; 30.0-95.0; 50.0-160.0; 1
+Unisys; Unisys EVG3100-E; unm3101; 30.0-65.0; 50.0-75.0; 1
+Unisys; Unisys EVG3100-P; unm3102; 30.0-95.0; 50.0-160.0; 1
+Unisys; Unisys EVG4000-P; unm4002; 30.0-95.0; 50.0-160.0; 1
+Unisys; Unisys EVG5000-P; unm5002; 30.0-95.0; 50.0-160.0; 1
+Unisys; Unisys SVG-100-COL; svg100; 31-38.0; 60-87; 1
+Unisys; Unisys SVG-200-COL; svg200; 31-38.0; 60-87; 1
+Unisys; Unisys SVG-201-COL; svg201; 31-38.0; 60-87; 1
+Unisys; Unisys SVG-250-COL; svg250; 31-38.0; 60-87; 1
+Unisys; Unisys VGA-200-MON; vga200; 31-32; 60-70; 1
+Unisys; Unisys VGA-250-MON; vga250; 31-32; 60-70; 1
+ViewSonic; ViewSonic 14ES; vsc3141; 31-51.0; 50-75; 1
+ViewSonic; ViewSonic 15; vs_15; 30-64; 50-90; 1
+ViewSonic; ViewSonic 15E; vs_15e; 30-62; 50-90; 1
+ViewSonic; ViewSonic 15ES-2; vsc3844; 31-62; 50-100; 1
+ViewSonic; ViewSonic 15EX; vs_15ex; 30-62; 50-100; 1
+ViewSonic; ViewSonic 15G; vs_15g; 30-64; 50-90; 1
+ViewSonic; ViewSonic 15G-2; vsc3744; 30-66; 50-100; 1
+ViewSonic; ViewSonic 15GA; vsc3644; 30-69; 50-160; 1
+ViewSonic; ViewSonic 15GA-2; vsc3245; 30-69; 50-160; 1
+ViewSonic; ViewSonic 15GS; vsc2601; 30-69; 50-120; 1
+ViewSonic; ViewSonic 15GS-2; vsc4439; 30-69; 50-120; 1
+ViewSonic; ViewSonic 15GS-3; vsc3145; 30-69; 50-120; 1
+ViewSonic; ViewSonic 17; vs_17; 30-82; 50-160; 1
+ViewSonic; ViewSonic 17E; vs_17e; 30-64; 50-90; 1
+ViewSonic; ViewSonic 17EA; vsc384a; 30-69; 50-120; 1
+ViewSonic; ViewSonic 17G; vs_17g; 30-64; 50-160; 1
+ViewSonic; ViewSonic 17GA; vsc0c1f; 30-69; 50-160; 1
+ViewSonic; ViewSonic 17GA-2; vsc444a; 30-69; 50-160; 1
+ViewSonic; ViewSonic 17GS; vsc0c00; 30-69; 50-160; 1
+ViewSonic; ViewSonic 17GS-2; vsc394a; 30-69; 50-160; 1
+ViewSonic; ViewSonic 17PS; vsc0c0f; 30-82; 50-160; 1
+ViewSonic; ViewSonic 17PS-2; vsc434a; 30-86; 50-160; 1
+ViewSonic; ViewSonic 20; vs_20; 30-82; 50-120; 1
+ViewSonic; ViewSonic 21; vs_21; 30-82; 50-152; 1
+ViewSonic; ViewSonic 21PS; vsc1600; 30-82; 50-160; 1
+ViewSonic; ViewSonic 4; vs_4; 20.0-38.0; 50.0-90.0; 1
+ViewSonic; ViewSonic 4E; vs_4e; 35.5; 50.0-90.0; 1
+ViewSonic; ViewSonic 5; vs_5; 31.0-55.0; 50.0-90.0; 1
+ViewSonic; ViewSonic 5+; vs_5+; 31.0-57.0; 50.0-90.0; 1
+ViewSonic; ViewSonic 5E; vs_5e; 31.0-60.0; 50.0-90.0; 1
+ViewSonic; ViewSonic 6; vs_6; 30.0-50.0; 50.0-90.0; 1
+ViewSonic; ViewSonic 6E; vs_6e; 31.5-50.0; 50.0-90.0; 1
+ViewSonic; ViewSonic 7; vs_7; 30.0-64.0; 50.0-90.0; 1
+ViewSonic; ViewSonic 8; vs_8; 30.0-64.0; 50.0-90.0; 1
+ViewSonic; ViewSonic A50; vsc5a45; 30-56; 50-120; 1
+ViewSonic; ViewSonic A70; vsc5a43; 30-70; 50-180; 1
+ViewSonic; ViewSonic A70f+; VSC9E0B; 30-70; 60-150
+ViewSonic; ViewSonic A70f-2; VSC8E06; 30-70; 50-160
+ViewSonic; ViewSonic A72f-2; VSC8F06; 30-70; 50-160
+ViewSonic; ViewSonic A75f; vsc5841; 30-70; 50-180; 1
+ViewSonic; ViewSonic A75s; vsc5a42; 30-70; 50-180; 1
+ViewSonic; ViewSonic A75s-2; vsc8913; 30-70; 50-180; 1
+ViewSonic; ViewSonic A90; vsc504e; 30-86; 50-180; 1
+ViewSonic; ViewSonic A90f+; VSC200D; 30-86; 50-150
+ViewSonic; ViewSonic A95f; vsc594d; 30-97; 50-180; 1
+ViewSonic; ViewSonic airpanel V150; VSCF50B; 30-62; 50-75
+ViewSonic; ViewSonic AL750; vsc5947; 30-60; 50-75; 1
+ViewSonic; ViewSonic AL950; vsc3858; 30-80; 50-75; 1
+ViewSonic; ViewSonic E220; VSC6505; 30-97; 50-160
+ViewSonic; ViewSonic E220-2; VSCBD0C; 30-97; 50-180
+ViewSonic; ViewSonic E40; vsc4441; 30-54; 55-100; 1
+ViewSonic; ViewSonic E40-2; vsc4741; 30-54; 50-100; 1
+ViewSonic; ViewSonic E40-3; vsc4943; 30-48; 50-90; 1
+ViewSonic; ViewSonic E40-4; vsc0900; 30-48; 50-90; 1
+ViewSonic; ViewSonic E40-5; vsc4a42; 30-48; 50-90; 1
+ViewSonic; ViewSonic E41; vsc3741; 30-54; 50-100; 1
+ViewSonic; ViewSonic E50; vsc4545; 30-70; 50-120; 1
+ViewSonic; ViewSonic E50-4; VSC8B06; 30-56; 50-120
+ViewSonic; ViewSonic E51; vsc3445; 30-70; 50-120; 1
+ViewSonic; ViewSonic E55-3; VSC5E13; 30-70; 50-160
+ViewSonic; ViewSonic E641; vsc3441; 30-54; 50-100; 1
+ViewSonic; ViewSonic E641-2; vsc3641; 30-54; 50-100; 1
+ViewSonic; ViewSonic E641-3; vsc4541; 30-54; 50-100; 1
+ViewSonic; ViewSonic E651; vsc4645; 30-54; 50-100; 1
+ViewSonic; ViewSonic E651-2; vsc4d45; 30-50; 50-100; 1
+ViewSonic; ViewSonic E651-3; vsc5745; 30-56; 50-120; 1
+ViewSonic; ViewSonic E653; vsc5249; 30-70; 50-120; 1
+ViewSonic; ViewSonic E653-2; vsc5645; 30-70; 50-120; 1
+ViewSonic; ViewSonic E653-3; vsc0e00; 30-70; 50-120; 1
+ViewSonic; ViewSonic E653-4; vsc1300; 30-70; 50-120; 1
+ViewSonic; ViewSonic E655; vsc3345; 30-65; 50-100; 1
+ViewSonic; ViewSonic E655-2; vsc3745; 30-70; 50-100; 1
+ViewSonic; ViewSonic E655-3; vsc4945; 30-70; 50-120; 1
+ViewSonic; ViewSonic E655-4; vsc5845; 30-70; 50-160; 1
+ViewSonic; ViewSonic E70; vsc5244; 30-70; 50-120; 1
+ViewSonic; ViewSonic E70-10; VSCF711; 30-72; 50-180
+ViewSonic; ViewSonic E70-2; vsc5346; 30-70; 50-120; 1
+ViewSonic; ViewSonic E70-3; vsc4b41; 30-70; 50-120; 1
+ViewSonic; ViewSonic E70-4; vsc5041; 30-70; 50-120; 1
+ViewSonic; ViewSonic E70-7; VSC5007; 30-70; 50-120
+ViewSonic; ViewSonic E70-8; VSCE905; 30-70; 50-160
+ViewSonic; ViewSonic E70f+; VSC2B0B; 30-70; 60-150
+ViewSonic; ViewSonic E70f+-2; VSCD313; 30-70; 50-150
+ViewSonic; ViewSonic E70f-2; VSC4E07; 30-70; 50-150
+ViewSonic; ViewSonic E70f-3; VSC3908; 30-70; 50-120
+ViewSonic; ViewSonic E70f-5/E70fb-5; VSC2011; 30-72; 50-160
+ViewSonic; ViewSonic E70fb-2; VSC4F07; 30-70; 50-150
+ViewSonic; ViewSonic E71; vsc4e4a; 30-70; 50-120; 1
+ViewSonic; ViewSonic E75f; VSCD305; 30-86; 50-150
+ViewSonic; ViewSonic E771; vsc564a; 30-70; 50-120; 1
+ViewSonic; ViewSonic E771-2; vsc4844; 30-70; 50-120; 1
+ViewSonic; ViewSonic E771-4; vsc5941; 30-70; 50-120; 1024x768
+ViewSonic; ViewSonic E773; vsc5044; 30-70; 50-160; 1
+ViewSonic; ViewSonic E790; vsc4d4d; 30-95; 50-200; 1
+ViewSonic; ViewSonic E790-3; vsce005; 30-95; 50-160; 1
+ViewSonic; ViewSonic E790B; vsc514d; 30-95; 50-200; 1
+ViewSonic; ViewSonic E790B-4; vsce405; 30-95; 50-160; 1
+ViewSonic; ViewSonic E810; vsc5251; 30-95; 50-180; 1
+ViewSonic; ViewSonic E90; vsc564e; 30-86; 50-180; 1
+ViewSonic; ViewSonic E90-4; VSCA418; 30-86; 50-180
+ViewSonic; ViewSonic E90f+; VSC890E; 30-86; 50-180
+ViewSonic; ViewSonic E90f+-3; VSC9517; 30-86; 50-180
+ViewSonic; ViewSonic E90fb; VSCA306; 30-86; 50-150
+ViewSonic; ViewSonic E90fmb; VSC2408; 30-86; 50-150
+ViewSonic; ViewSonic E92f+; VSC9417; 30-97; 50-180
+ViewSonic; ViewSonic EA771; vsc4d4a; 30-70; 50-120; 1
+ViewSonic; ViewSonic EA771B; vsc4244; 30-70; 50-120; 1
+ViewSonic; ViewSonic G220f; VSCE709; 30-110; 50-180
+ViewSonic; ViewSonic G220fb; VSCE809; 30-110; 50-180
+ViewSonic; ViewSonic G653; vsc3645; 30-70; 50-120; 1
+ViewSonic; ViewSonic G653-2; vsc4745; 30-70; 50-120; 1
+ViewSonic; ViewSonic G655; vsc5045; 30-70; 50-120; 1
+ViewSonic; ViewSonic G655-3; vsc0400; 30-70; 50-120; 1
+ViewSonic; ViewSonic G70f; VSC8D06; 30-70; 50-160
+ViewSonic; ViewSonic G70f-2; VSCEA18; 30-70; 50-160
+ViewSonic; ViewSonic G70fm; VSCD405; 30-70; 50-160
+ViewSonic; ViewSonic G70fmb; VSCC306; 30-70; 50-160
+ViewSonic; ViewSonic G71f+; VSCAC09; 30-70; 50-180
+ViewSonic; ViewSonic G71f+-2; VSC9312; 30-72; 50-160
+ViewSonic; ViewSonic G75f-2; VSCF505; 30-86; 50-180
+ViewSonic; ViewSonic G75f-3; VSC2E0C; 30-86; 50-180
+ViewSonic; ViewSonic G771; vsc4c4a; 30-70; 50-180; 1
+ViewSonic; ViewSonic G773; vsc524a; 30-70; 50-160; 1
+ViewSonic; ViewSonic G773-2; vsc4a44; 30-70; 50-160; 1
+ViewSonic; ViewSonic G773-3; vsc5341; 30-70; 50-180; 1
+ViewSonic; ViewSonic G790; vsc384d; 30-95; 50-180; 1
+ViewSonic; ViewSonic G790-2; vsc484d; 30-95; 50-180; 1
+ViewSonic; ViewSonic G800; vsc374d; 30-86; 50-120; 1
+ViewSonic; ViewSonic G810; vsc3751; 30-89; 50-160; 1
+ViewSonic; ViewSonic G810-2; vsc4951; 30-92; 50-180; 1
+ViewSonic; ViewSonic G810-4; vsc5151; 30-97; 50-180; 1
+ViewSonic; ViewSonic G810-6; VSCC308; 30-97; 50-180
+ViewSonic; ViewSonic G90f+; VSC3513; 30-110; 50-160
+ViewSonic; ViewSonic G90f-2; VSC8A06; 30-97; 50-180
+ViewSonic; ViewSonic G90fB; 0; 30-97; 50-160; 1
+ViewSonic; ViewSonic G90fb-2; VSC4907; 30-97; 50-180
+ViewSonic; ViewSonic GA655; vsc4145; 30-70; 50-180; 1
+ViewSonic; ViewSonic GA771; vsc514a; 30-70; 50-180; 1
+ViewSonic; ViewSonic GF775; vsc5744; 30-86; 50-160; 1
+ViewSonic; ViewSonic GS771; vsc594a; 30-70; 50-180; 1
+ViewSonic; ViewSonic GS773; vsc4c44; 30-70; 50-180; 1
+ViewSonic; ViewSonic GS773-2; vsc0202; 30-70; 50-180; 1
+ViewSonic; ViewSonic GS790; vsc4f4d; 30-97; 50-160; 1
+ViewSonic; ViewSonic GT770; vsc424a; 30-65; 50-120; 1
+ViewSonic; ViewSonic GT775; vsc4b4a; 30-86; 50-160; 1
+ViewSonic; ViewSonic GT775-3; vsc5944; 30-87; 50-160; 1
+ViewSonic; ViewSonic GT800; vsc354d; 30-85; 50-150; 1
+ViewSonic; ViewSonic M50; vsc5445; 30-70; 50-160; 1
+ViewSonic; ViewSonic M70; vsc5444; 30-70; 50-160; 1
+ViewSonic; ViewSonic M70B; vsc4948; 30-70; 50-160; 1
+ViewSonic; ViewSonic MB110; vsc4a51; 30-95; 50-180; 1
+ViewSonic; ViewSonic MB50; vsc4845; 30-70; 50-160; 1
+ViewSonic; ViewSonic MB70; vsc4644; 30-70; 50-160; 1
+ViewSonic; ViewSonic MB90; vsc444d; 30-95; 50-180; 1
+ViewSonic; ViewSonic N1700w; VSC5C0B; 24-82; 60-75
+ViewSonic; ViewSonic N3000w; VSC5A16; 30-83; 59-75; 1
+ViewSonic; ViewSonic OptiQuest 1000S; oqi3234; 48.4; 0-60; 1
+ViewSonic; ViewSonic OptiQuest 1562A-2; oqi3232; 31.5-62; 50-90; 1
+ViewSonic; ViewSonic OptiQuest 1769DC; oqi4637; 30-69; 50-120; 1
+ViewSonic; ViewSonic OptiQuest Q100; oqi4a31; 30-86; 50-120; 1
+ViewSonic; ViewSonic OptiQuest Q41; oqi4136; 30-48; 50-90; 1
+ViewSonic; ViewSonic OptiQuest Q51; oqi4435; 30-54; 50-100; 1
+ViewSonic; ViewSonic OptiQuest Q53; oqi4433; 30-70; 50-100; 1
+ViewSonic; ViewSonic OptiQuest Q71; oqi4735; 30-70; 50-120; 1
+ViewSonic; ViewSonic OptiQuest Q71-2; oqi4738; 30-70; 50-120; 1
+ViewSonic; ViewSonic OptiQuest Q71-6; oqie702; 30-70; 50-160; 1
+ViewSonic; ViewSonic OptiQuest V115T; oqi4d32; 30-96; 50-150; 1
+ViewSonic; ViewSonic OptiQuest V55; oqi4436; 30-70; 50-160; 1
+ViewSonic; ViewSonic OptiQuest V641; oqi4132; 48.36; 60; 1
+ViewSonic; ViewSonic OptiQuest V655; oqi3332; 30-66; 50-100; 1
+ViewSonic; ViewSonic OptiQuest V655-2; oqi4432; 30-65; 50-100; 1
+ViewSonic; ViewSonic OptiQuest V655-3; oqi4434; 30-70; 50-100; 1
+ViewSonic; ViewSonic OptiQuest V73; oqi5634; 30-70; 50-160; 1
+ViewSonic; ViewSonic OptiQuest V75; oqi4739; 30-96; 50-160; 1
+ViewSonic; ViewSonic OptiQuest V773; oqi4733; 30-69; 50-160; 1
+ViewSonic; ViewSonic OptiQuest V773-2; oqi4736; 30-70; 50-180; 1
+ViewSonic; ViewSonic OptiQuest V775; oqi3333; 30-82; 50-130; 1
+ViewSonic; ViewSonic OptiQuest V775-2; oqi4732; 30-85; 50-120; 1
+ViewSonic; ViewSonic OptiQuest V95; oqi4a32; 30-95; 50-150; 1
+ViewSonic; ViewSonic OptiQuest VA656; oqi3138; 30-63; 50-100; 1
+ViewSonic; ViewSonic P220f-3; VSC7F12; 30-110; 50-160
+ViewSonic; ViewSonic P220fb-2; VSC430C; 30-110; 50-180
+ViewSonic; ViewSonic P225f-4; VSCBB0C; 30-127; 50-180
+ViewSonic; ViewSonic P225f-5; VSC8012; 30-127; 50-160
+ViewSonic; ViewSonic P225fb-4; VSCBC0C; 30-127; 50-180
+ViewSonic; ViewSonic P655; vsc4245; 30-70; 50-180; 1
+ViewSonic; ViewSonic P70f; VSC5107; 30-97; 50-120
+ViewSonic; ViewSonic P75f+; VSC2C09; 30-97; 50-160
+ViewSonic; ViewSonic P775; vsc504a; 30-95; 50-180; 1
+ViewSonic; ViewSonic P795; vsc424d; 30-107; 50-180; 1
+ViewSonic; ViewSonic P810; vsc3551; 30-95; 50-160; 1
+ViewSonic; ViewSonic P810-3; vsc4851; 30-95; 50-180; 1
+ViewSonic; ViewSonic P810-4; vsc5551; 30-110; 50-180; 1
+ViewSonic; ViewSonic P810-A; vsc3553; 30-95; 50-160; 1
+ViewSonic; ViewSonic P810-E; vsc3552; 30-95; 50-160; 1
+ViewSonic; ViewSonic P810-ER; vsc5235; 30-95; 50-160; 1
+ViewSonic; ViewSonic P810-MR; vsc5135; 30-95; 50-160; 1
+ViewSonic; ViewSonic P815; vsc3651; 30-115; 50-160; 1
+ViewSonic; ViewSonic P815-4; vsc4f51; 30-117; 50-180; 1
+ViewSonic; ViewSonic P817; vsc4c51; 30-137; 50-180; 1
+ViewSonic; ViewSonic P817-E; vsc4c52; 30-137; 50-180; 1
+ViewSonic; ViewSonic P90f; VSC5207; 30-110; 50-180
+ViewSonic; ViewSonic P95f+; VSC2B09; 30-110; 50-160
+ViewSonic; ViewSonic P95f+-2; VSC1114; 30-110; 50-160
+ViewSonic; ViewSonic PF775; vsc5a44; 30-96; 50-180; 1
+ViewSonic; ViewSonic PF77a; vscf801; 30-97; 50-180; 1
+ViewSonic; ViewSonic PF77d; vscf901; 30-92; 50-85; 1
+ViewSonic; ViewSonic PF790; vsc554d; 30-97; 50-180; 1
+ViewSonic; ViewSonic PF795; vsc4c4d; 30-110; 50-180; 1
+ViewSonic; ViewSonic PF815; vsc5751; 30-117; 50-180; 1
+ViewSonic; ViewSonic PF817; vsc5951; 30-127; 50-180; 1
+ViewSonic; ViewSonic PF97a; vsce505; 30-97; 50-180; 1
+ViewSonic; ViewSonic PF97d; vsce605; 30-92; 50-85; 1
+ViewSonic; ViewSonic PJ1000; vsc3454; 31-64; 50-85; 1
+ViewSonic; ViewSonic PJ1060; vsc4c56; 25-80; 56-120; 1
+ViewSonic; ViewSonic PJ1200; vsc4654; 24-80; 50-85; 1
+ViewSonic; ViewSonic PJ800; vsc3254; 15.75-69; 50-75; 1
+ViewSonic; ViewSonic PJ820; vsc3854; 30-69; 50-85; 1
+ViewSonic; ViewSonic PJ850; vsc4454; 31-90; 50-120; 1
+ViewSonic; ViewSonic PJ860; vsc4754; 30-60; 56-85; 1
+ViewSonic; ViewSonic PJ860-2; vsc4c54; 25-80; 56-120; 1
+ViewSonic; ViewSonic PJL1005; vsc4456; 15-72; 43-120; 1
+ViewSonic; ViewSonic PJL1035; vsc4555; 25-80; 56-120; 1
+ViewSonic; ViewSonic PJL1035-2; vsc4a56; 25-80; 56-120; 1
+ViewSonic; ViewSonic PJL802; vsc3554; 31-61; 50-85; 1
+ViewSonic; ViewSonic PJL855; vsc4a54; 25-60; 56-85; 1
+ViewSonic; ViewSonic PS775; vsc4444; 30-97; 50-180; 1
+ViewSonic; ViewSonic PS775-2; vsc4d44; 30-95; 50-180; 1
+ViewSonic; ViewSonic PS790; vsc434d; 30-95; 50-180; 1
+ViewSonic; ViewSonic PS795; vsc474e; 30-110; 50-180; 1
+ViewSonic; ViewSonic PT770; vsc364a; 30-82; 50-130; 1
+ViewSonic; ViewSonic PT771; vsc5a4a; 30-92; 50-160; 1
+ViewSonic; ViewSonic PT775; vsc474a; 30-96; 50-160; 1
+ViewSonic; ViewSonic PT775-6; vsc4b44; 30-96; 50-180; 1
+ViewSonic; ViewSonic PT795; vsc454d; 30-110; 50-180; 1
+ViewSonic; ViewSonic PT810; vsc3351; 30-86; 50-130; 1
+ViewSonic; ViewSonic PT810-2; vsc3451; 30-95; 50-130; 1
+ViewSonic; ViewSonic PT810-3; vsc3851; 30-96; 50-160; 1
+ViewSonic; ViewSonic PT813; vsc4151; 30-107; 50-160; 1
+ViewSonic; ViewSonic VA500; VSCF605; 30-60; 50-75
+ViewSonic; ViewSonic VA520; VSCBA07; 30-62; 50-75
+ViewSonic; ViewSonic VA520-2; VSC6A01; 30-62; 50-75
+ViewSonic; ViewSonic VA520-3; VSCF70C; 30-62; 50-75
+ViewSonic; ViewSonic VA550; VSCFA02; 30-62; 50-60
+ViewSonic; ViewSonic VA700; VSCF705; 30-82; 50-75
+ViewSonic; ViewSonic VA702b; VSC231C; 30-82; 50-85; 1
+ViewSonic; ViewSonic VA720; VSC6C09; 30-82; 50-75
+ViewSonic; ViewSonic VA720-2; VSC700B; 30-82; 50-75
+ViewSonic; ViewSonic VA800; VSCDE00; 30-82; 50-75
+ViewSonic; ViewSonic vcdts21367-1; oqi4d31; 30-95; 50-160; 1
+ViewSonic; ViewSonic VE150; VSC5547; 30-60; 50-75
+ViewSonic; ViewSonic VE150B; vsc8115; 30-60; 50-75; 1
+ViewSonic; ViewSonic VE150m; VSCC203; 30-60; 50-75
+ViewSonic; ViewSonic VE150mb; VSCED05; 30-60; 50-75
+ViewSonic; ViewSonic VE151; vsc5345; 31-61; 56-75; 1
+ViewSonic; ViewSonic VE155; VSCB807; 30-60; 50-75
+ViewSonic; ViewSonic VE155b; VSC260A; 30-62; 50-75
+ViewSonic; ViewSonic VE170; VSCA601; 30-80; 50-80
+ViewSonic; ViewSonic VE170b; VSCA701; 30-82; 50-75
+ViewSonic; ViewSonic VE170m; VSCE705; 30-82; 50-75
+ViewSonic; ViewSonic VE170mb; VSCE805; 30-82; 50-75
+ViewSonic; ViewSonic VE175; VSEE08 ; 30-80; 50-75
+ViewSonic; ViewSonic VE175-2; VSCC314; 30-82; 50-75
+ViewSonic; ViewSonic VE175b; VSCE10A; 30-80; 50-75
+ViewSonic; ViewSonic VE175b-2; VSCC414; 30-82; 50-75
+ViewSonic; ViewSonic VE500; VSC4108; 30-62; 50-75
+ViewSonic; ViewSonic VE500-2; VSCBC17; 30-62; 50-75
+ViewSonic; ViewSonic VE510+; VSC6500; 30-62; 50-75
+ViewSonic; ViewSonic VE700; VSC4308; 24-82; 56-85
+ViewSonic; ViewSonic VE800; VSC3A08; 30-80; 50-75
+ViewSonic; ViewSonic VG150; vsc5147; 30-62; 50-60; 1
+ViewSonic; ViewSonic VG150m; VSCFC09; 30-62; 50-75
+ViewSonic; ViewSonic VG150m-2; VSC4811; 30-62; 50-75
+ViewSonic; ViewSonic VG150mb; VSCFD09; 30-62; 50-75
+ViewSonic; ViewSonic VG151; vsc5a47; 24.8-61; 56-75; 1
+ViewSonic; ViewSonic VG151b; VSCDA06; 30-62; 50-75
+ViewSonic; ViewSonic VG171; 9E06 ; 30-82; 50-75
+ViewSonic; ViewSonic VG171b; VSCD906; 30-82; 50-75
+ViewSonic; ViewSonic VG175; VSCDD00; 30-82; 50-75
+ViewSonic; ViewSonic VG180; vsc464d; 30-80; 60-85; 1
+ViewSonic; ViewSonic VG180-2; vsc464e; 30-80; 56-85; 1
+ViewSonic; ViewSonic VG180-3; vsc7517; 30-82; 50-75; 1
+ViewSonic; ViewSonic VG181; VSC7517; 30-82; 50-75
+ViewSonic; ViewSonic VG181b; VSCD806; 30-82; 50-75
+ViewSonic; ViewSonic VG191; VSC2007; 30-82; 50-75
+ViewSonic; ViewSonic VG191b; VSC2107; 30-82; 50-75
+ViewSonic; ViewSonic VG500; VSC3D08; 30-62; 50-75
+ViewSonic; ViewSonic VG500-2; VSCF118; 30-62; 50-75
+ViewSonic; ViewSonic VG500b; VSCB40A; 30-62; 50-75
+ViewSonic; ViewSonic VG700; VSC3E08; 30-82; 50-75
+ViewSonic; ViewSonic VG700b; VSC9D0E; 30-82; 50-75
+ViewSonic; ViewSonic VG700b-2; VSCB50B; 30-82; 50-75
+ViewSonic; ViewSonic VG710b; VSCA318; 30-82; 50-85
+ViewSonic; ViewSonic VG710s; VSCA218; 30-82; 50-85
+ViewSonic; ViewSonic VG750; VSC3F08; 24-82; 56-85
+ViewSonic; ViewSonic VG800; VSC6F08; 30-82; 50-75
+ViewSonic; ViewSonic VG800-2; VSCF311; 30-83; 50-75
+ViewSonic; ViewSonic VG800b; VSC230E; 30-82; 50-75
+ViewSonic; ViewSonic VG800b-2; VSCF411; 30-83; 50-75
+ViewSonic; ViewSonic VG810b; VSCC018; 30-82; 50-75
+ViewSonic; ViewSonic VG810s; VSCBF18; 30-82; 50-75
+ViewSonic; ViewSonic VG900b; VSC240E; 30-82; 50-75
+ViewSonic; ViewSonic VG910b; VSCDB18; 30-82; 50-75
+ViewSonic; ViewSonic VG910s; VSCDA18; 30-82; 50-75
+ViewSonic; ViewSonic VP140; vsc3541; 30-61; 50-77; 1
+ViewSonic; ViewSonic VP140-2; vsc4841; 30-60; 50-75; 1
+ViewSonic; ViewSonic VP140-3; vsc7d15; 30-62; 50-75; 1
+ViewSonic; ViewSonic VP150; vsc3845; 30-61; 50-77; 1
+ViewSonic; ViewSonic VP151; vsc5945; 30-94; 50-85; 1
+ViewSonic; ViewSonic VP171b; VSC0C11; 30-82; 50-85
+ViewSonic; ViewSonic VP171s; VSCB716; 30-82; 50-85
+ViewSonic; ViewSonic VP181; vsc574d; 30-95; 50-75; 1
+ViewSonic; ViewSonic VP181b-2; VSC6711; 30-92; 50-85
+ViewSonic; ViewSonic VP181s; VSCB816; 30-92; 50-85
+ViewSonic; ViewSonic VP190; vsc474d; 30-82; 50-77; 1
+ViewSonic; ViewSonic VP191b; VSC0E11; 30-82; 50-85
+ViewSonic; ViewSonic VP191s; VSCB916; 30-82; 50-85
+ViewSonic; ViewSonic VP201b; VSC6911; 30-95; 50-85
+ViewSonic; ViewSonic VP201m; VSC5404; 30-82; 50-85
+ViewSonic; ViewSonic VP201mb; VSCEB04; 30-82; 50-85
+ViewSonic; ViewSonic VP201s; VSC0C18; 30-95; 50-85
+ViewSonic; ViewSonic VP2030; VSC131C; 30-92; 50-75
+ViewSonic; ViewSonic VP211b; VSC6A11; 30-95; 50-85
+ViewSonic; ViewSonic VP230mb; VSC7203; 30-82; 50-75
+ViewSonic; ViewSonic VPA138; vsc4141; 30-62; 50-75; 1
+ViewSonic; ViewSonic VPA145; vsc3941; 30-62; 50-75; 1
+ViewSonic; ViewSonic VPA150; vsc4345; 30-62; 50-75; 1
+ViewSonic; ViewSonic VPD150; vsc4b47; 48; 60; 1
+ViewSonic; ViewSonic VPD180; vsc4b49; 64; 60; 1
+ViewSonic; ViewSonic VT550; VSCB711; 30-62; 50-75
+ViewSonic; ViewSonic VX2000; VSC4208; 30-82; 50-85
+ViewSonic; ViewSonic VX2025wm; 0; 30-82; 50-75
+ViewSonic; ViewSonic VX2260WM; VSCfc21; 24-82; 50-75; 1920x1080
+ViewSonic; ViewSonic VX500+; VSCF008; 30-62; 50-75
+ViewSonic; ViewSonic VX500-2; VSCCB0F; 30-80; 50-75
+ViewSonic; ViewSonic VX700; VSC6206; 24-82; 56-85
+ViewSonic; ViewSonic VX700-2; VSCEF08; 30-82; 50-75
+ViewSonic; ViewSonic VX700-3; VSC8F11; 30-83; 50-75
+ViewSonic; ViewSonic VX800; VSC0B07; 24-82; 56-85
+ViewSonic; ViewSonic VX800-2; VSC8209; 30-82; 50-75
+ViewSonic; ViewSonic VX800-3; VSCF511; 30-83; 50-75
+ViewSonic; ViewSonic VX900; VSC0B08; 30-82; 50-75
+ViewSonic; ViewSonic VX900-2; VSC9011; 30-83; 50-75
+ViewSonic; ViewSonic VX910; VSC3C19; 30-82; 50-85; 1
+Vobis; Vobis Highscreen MS 1795P; VOB0c7c; 30-82; 47-120
+WYSE; WYSE WY-670; wy-670; 34.0-38.0; 55.0-87.0; 1
+WYSE; WYSE WY-890N; wy-890n; 38.5-51.0; 58.0-77.0; 1
+Yakumo Electronics; Yakumo OF1564 DO; yak6146; 30-64; 50-100; 1
+Zenith; Zenith ZCM-1411; 0; 35.587; 86.96; 1
+Zenith; Zenith ZCM-1426; 0; 35.587; 86.96; 1
+Zenith; Zenith ZCM-1440; 0; 30.0-62; 48-100; 1
+Zenith; Zenith ZCM-1450; 0; 30.0-60; 48-90; 1
+Zenith; Zenith ZCM-1520; 0; 30.0-64; 50-100; 1
+Zenith; Zenith ZCM-1522; 0; 30.0-64; 50-120; 1
+Zenith; Zenith ZCM-1540; 0; 30.0-62; 48-100; 1
+Zenith; Zenith ZCM-1550; 0; 31.0-65.0; 55-100; 1
+Zenith; Zenith ZCM-1740; 0; 31.0-82; 50-100; 1
+Zenith; Zenith ZCM-1750; 0; 30.0-85; 50-100; 1
diff --git a/displayconfig/ldetect-lst/pcitable b/displayconfig/ldetect-lst/pcitable
new file mode 100644
index 0000000..dba12ce
--- /dev/null
+++ b/displayconfig/ldetect-lst/pcitable
@@ -0,0 +1,8017 @@
+0x0000 0x0000 "snd-cs46xx" "Card without SSID set"
+0x0001 0x1002 "bttv" "ATI Technologies Inc.|TV Wonder"
+0x0001 0x1461 "bttv" "AVerMedia|TVPhone98"
+0x0001 0x8139 0x10ec 0x8139 "8139too" "|Realtek 8139"
+0x0002 0x1461 "bttv" "Avermedia|TVCapture 98"
+0x0003 0x1002 "bttv" "ATI Technologies Inc.|TV Wonder/VE"
+0x0003 0x1461 "bttv" "AVerMedia|TVPhone98"
+0x0004 0x0000 "ipmi_si" ""
+0x0004 0x0048 0x7269 0x0000 "ipmi_si" ""
+0x0004 0x004c 0x7269 0x0000 "ipmi_si" ""
+0x0004 0x1461 "bttv" "AVerMedia|TVPhone98"
+0x0012 0x11bd "bttv" "Pinnacle|PCTV"
+0x001c 0x11bd "bttv" "Pinnacle|PCTV Sat"
+0x002c 0x6572 0x6968 0x0073 "ipmi_si" ""
+0x0038 0x6f70 0x0073 0x0004 "ipmi_si" ""
+0x003c 0x6f70 0x0073 0x0004 "ipmi_si" ""
+0x003d 0x00d1 "unknown" "Real 3D|i740 (PCI)"
+0x0070 0x0003 "unknown" "Hauppauge computer works Inc.|WinTV PVR-250"
+0x0070 0x0009 "unknown" "Hauppauge computer works Inc.|WinTV PVR-150"
+0x0070 0x0801 "unknown" "Hauppauge computer works Inc.|WinTV PVR-150"
+0x0070 0x0807 "unknown" "Hauppauge computer works Inc.|WinTV PVR-150"
+0x0070 0x4000 "unknown" "Hauppauge computer works Inc.|WinTV PVR-350"
+0x0070 0x4001 "unknown" "Hauppauge computer works Inc.|WinTV PVR-250 (v1)"
+0x0070 0x4009 "unknown" "Hauppauge computer works Inc.|WinTV PVR-250"
+0x0070 0x4800 "unknown" "Hauppauge computer works Inc.|WinTV PVR-350"
+0x0070 0x4801 "unknown" "Hauppauge computer works Inc.|WinTV PVR-250 MCE"
+0x0070 0x4803 "unknown" "Hauppauge computer works Inc.|WinTV PVR-250"
+0x0070 0x8003 "unknown" "Hauppauge computer works Inc.|WinTV PVR-150"
+0x0070 0x8801 "unknown" "Hauppauge computer works Inc.|WinTV PVR-150"
+0x0070 0xc801 "unknown" "Hauppauge computer works Inc.|WinTV PVR-150"
+0x0070 0xe807 "unknown" "Hauppauge computer works Inc.|WinTV PVR-500 MCE (1st tuner)"
+0x0070 0xe817 "unknown" "Hauppauge computer works Inc.|WinTV PVR-500 MCE (2nd tuner)"
+0x0079 0x0e11 "bttv" "Canopus|WinDVR PCI"
+0x0095 0x0680 "unknown" "Silicon Image, Inc. (Wrong ID)|Ultra ATA/133 IDE RAID CONTROLLER CARD"
+0x0101 0x14c7 "bttv" "Modular Technology MM205 PCTV"
+0x0101 0x15cb "bttv" "AG GMV1"
+0x018a 0x0106 "8139too" "LevelOne|FPC-0106TX misprogrammed [RTL81xx]"
+0x021b 0x8139 "8139too" "Compaq Computer Corp.|HNE-300 (RealTek RTL8139c) [iPaq Networking]"
+0x0270 0x0801 "unknown" "Hauppauge computer works Inc. (Wrong ID)|WinTV PVR-150"
+0x0291 0x8212 "dmfe" "Davicom Semiconductor Inc.|DM9102A(DM9102AE, SM9102AF) Ethernet 100/10 MBit(Rev 40)"
+0x02ac 0x1012 "8139too" "SpeedStream|1012 PCMCIA 10/100 Ethernet Card [RTL81xx]"
+0x0311 0x6000 "bttv" "Sensoray 311"
+0x0357 0x000a "8139cp" "TTTech AG|TTP-Monitoring Card V2.0"
+0x0432 0x0001 "pluto2" "SCM Microsystems Inc.|Pluto2 DVB-T Receiver for PCMCIA [EasyWatch MobilSet]"
+0x045e 0x006e "unknown" "Microsoft|MN-510 802.11b wireless USB paddle"
+0x045e 0x00c2 "unknown" "Microsoft|MN-710 wireless USB paddle"
+0x04cf 0x8818 "unknown" "Myson Century, Inc|CS8818 USB2.0-to-ATAPI Bridge Controller with Embedded PHY"
+0x050d 0x001a "unknown" "Belkin|FSD7000 802.11g PCI Wireless card"
+0x050d 0x0109 "unknown" "Belkin|F5U409-CU USB/Serial Portable Adapter"
+0x050d 0x7050 "unknown" "Belkin|F5D7050 802.11g Wireless USB Adapter"
+0x05a9 0x8519 "unknown" "OmniVision|OV519 series"
+0x05e3 0x0701 "unknown" "CyberDoor|CBD516"
+0x066f 0x3410 "unknown" "Sigmatel Inc.|SMTP3410"
+0x066f 0x3500 "unknown" "Sigmatel Inc.|SMTP3500"
+0x0675 0x1700 "ISDN:hisax,type=36" "Dynalink|IS64PH ISDN Adapter"
+0x0675 0x1702 "ISDN:hisax,type=36" "Dynalink|IS64PH ISDN Adapter"
+0x0675 0x1703 "unknown" "Dynalink|ISDN Adapter (PCI Bus, DV, W)"
+0x0675 0x1704 "unknown" "Dynalink|ISDN Adapter (PCI Bus, D, C)"
+0x067b 0x2303 "unknown" "Prolific Technology, Inc.|PL-2303 USB-to-Serial Converter"
+0x067b 0x3507 "unknown" "Prolific Technology Inc.|PL-3507 Hi-Speed USB & IEEE 1394 Combo to IDE Bridge Controller"
+0x0700 0x0100 "unknown" "Lava Computer mfg Inc.|LavaPort PCI"
+0x0700 0x0200 "unknown" "Lava Computer mfg Inc.|LavaPort PCI"
+0x0815 0x0002 "unknown" "LinTech GmbH|ELKA SO-PCI"
+0x0871 0xffa1 "ISDN:hisax,type=35" "German telekom|A1T"
+0x0871 0xffa2 "ISDN:hisax,type=35" "German telekom|T-Concept"
+0x0914 0x0201 "unknown" "Shanghai Dare Technologies Ltd.|83820 32bit pci mac"
+0x0914 0x0202 "unknown" "Shanghai Dare Technologies Ltd.|83821 64bit pci gnic"
+0x09c1 0x0704 "unknown" "Arris|CM 200E Cable Modem"
+0x0b0b 0x0105 "unknown" "Rhino Equiment Corp.|Rhino R1T1"
+0x0b0b 0x0205 "unknown" "Rhino Equiment Corp.|Rhino R4FXO"
+0x0b0b 0x0305 "unknown" "Rhino Equiment Corp.|Rhino R4T1"
+0x0b0b 0x0405 "unknown" "Rhino Equiment Corp.|Rhino R8FXX"
+0x0b0b 0x0505 "unknown" "Rhino Equiment Corp.|Rhino R24FXX"
+0x0b0b 0x0506 "unknown" "Rhino Equiment Corp.|Rhino R2T1"
+0x0b0b 0x0605 "unknown" "Rhino Equiment Corp.|Rhino R2T1"
+0x0b0b 0x0705 "unknown" "Rhino Equiment Corp.|Rhino R24FXS"
+0x0b49 0x064f "unknown" "ASCII Corp.|Trance Vibrator"
+0x0ccd 0x0038 "unknown" "TerraTec Electronic GmbH|Cinergy T^2 DVB-T Receiver"
+0x0e11 0x0000 "unknown" "Compaq|CISS SMART2 Array Controller"
+0x0e11 0x0001 "pci_eisa" "Compaq|PCI to EISA Bridge"
+0x0e11 0x0002 "unknown" "Compaq|PCI to ISA Bridge"
+0x0e11 0x000f "unknown" "Compaq|CPQB1A9 StorageWorks Library Adapter (HVD)"
+0x0e11 0x0046 "cciss" "Compaq|Smart Array 64xx"
+0x0e11 0x0049 "unknown" "Compaq|NC7132 Gigabit Upgrade Module"
+0x0e11 0x004a "unknown" "Compaq|NC6136 Gigabit Server Adapter"
+0x0e11 0x005a "unknown" "Compaq Computer Corp.|Remote Insight II board - Lights-Out"
+0x0e11 0x007c "unknown" "Compaq|NC7770 1000BaseTX"
+0x0e11 0x007d "unknown" "Compaq|NC6770 1000BaseTX"
+0x0e11 0x0085 "unknown" "Compaq|NC7780 1000BaseTX"
+0x0e11 0x00b1 "unknown" "Compaq Computer Corp.|Remote Insight II board - PCI device"
+0x0e11 0x00bb "unknown" "Compaq|NC7760"
+0x0e11 0x00c0 "unknown" "Compaq|Adaptec AIC-7899G 64Bit,66MHz,Dual Channel WideUltra3 SCSI"
+0x0e11 0x00ca "unknown" "Compaq|NC7771"
+0x0e11 0x00cb "unknown" "Compaq|NC7781"
+0x0e11 0x00cf "unknown" "Compaq|NC7772"
+0x0e11 0x00d0 "unknown" "Compaq|NC7782"
+0x0e11 0x00d1 "unknown" "Compaq|NC7783"
+0x0e11 0x00e3 "unknown" "Compaq|NC7761"
+0x0e11 0x0508 "tmspci" "Compaq|Netelligent 4/16 Token Ring"
+0x0e11 0x1000 "unknown" "Compaq|Triflex/Pentium Bridge, Model 1000"
+0x0e11 0x2000 "unknown" "Compaq|Triflex/Pentium Bridge, Model 2000"
+0x0e11 0x3032 "unknown" "Compaq|QVision 1280/p"
+0x0e11 0x3033 "Card:VESA driver (generic)" "Compaq|QVision 1280/p"
+0x0e11 0x3034 "unknown" "Compaq|QVision 1280/p"
+0x0e11 0x4000 "unknown" "Compaq|4000 [Triflex]"
+0x0e11 0x4030 "cpqarray" "Compaq|SMART-2/P"
+0x0e11 0x4031 "cpqarray" "Compaq|SMART-2SL"
+0x0e11 0x4032 "cpqarray" "Compaq|Smart Array 3200"
+0x0e11 0x4033 "cpqarray" "Compaq|Smart Array 3100ES"
+0x0e11 0x4034 "cpqarray" "Compaq|Smart Array 221"
+0x0e11 0x4040 "cpqarray" "Compaq|Integrated Array"
+0x0e11 0x4048 "cpqarray" "Compaq|Compaq Raid LC2"
+0x0e11 0x4050 "cpqarray" "Compaq|Smart Array 4200"
+0x0e11 0x4051 "cpqarray" "Compaq|Smart Array 4250ES"
+0x0e11 0x4058 "cpqarray" "Compaq|Smart Array 431"
+0x0e11 0x4070 "cciss" "Compaq|Smart Array 5300"
+0x0e11 0x4080 "cciss" "Compaq|Smart Array 5i"
+0x0e11 0x4082 "cciss" "Compaq|Smart Array 532"
+0x0e11 0x4083 "cciss" "Compaq|Smart Array 5312"
+0x0e11 0x4091 "cciss" "Compaq|Smart Array 6i"
+0x0e11 0x409a "cciss" "Compaq|Smart Array 641"
+0x0e11 0x409b "cciss" "Compaq|Smart Array 642"
+0x0e11 0x409c "cciss" "Compaq|Smart Array 6400"
+0x0e11 0x409d "cciss" "Compaq|Smart Array 6400 EM"
+0x0e11 0x6010 "unknown" "Compaq|HotPlug PCI Bridge 6010"
+0x0e11 0x7020 "ohci-hcd" "Compaq|USB Controller"
+0x0e11 0xa0ec "unknown" "Compaq|Fibre Channel Host Controller /P"
+0x0e11 0xa0f0 "unknown" "Compaq|Advanced System Management Controller"
+0x0e11 0xa0f3 "unknown" "Compaq|Triflex PCI to ISA Bridge"
+0x0e11 0xa0f7 "unknown" "Compaq|Cirrus Logic VGA Video Controller"
+0x0e11 0xa0f8 "ohci-hcd" "Compaq|USB Open Host Controller"
+0x0e11 0xa0fc "cpqfc" "Compaq|Fibre Channel Host Controller"
+0x0e11 0xae10 "cpqarray" "Compaq|Smart-2/P RAID Controller"
+0x0e11 0xae29 "unknown" "Compaq|MIS-L"
+0x0e11 0xae2a "unknown" "Compaq|MPC"
+0x0e11 0xae2b "unknown" "Compaq|MIS-E"
+0x0e11 0xae31 "unknown" "Compaq|System Management Controller"
+0x0e11 0xae32 "tlan" "Compaq|Netelligent 10/100"
+0x0e11 0xae33 "triflex" "Compaq|Triflex Dual EIDE Controller"
+0x0e11 0xae34 "tlan" "Compaq|Netelligent 10"
+0x0e11 0xae35 "tlan" "Compaq|Integrated NetFlex-3/P"
+0x0e11 0xae40 "tlan" "Compaq|Netelligent 10/100 Dual"
+0x0e11 0xae43 "tlan" "Compaq|ProLiant Integrated Netelligent 10/100"
+0x0e11 0xae69 "unknown" "Compaq|CETUS-L"
+0x0e11 0xae6c "tlan" "Compaq|Northstar"
+0x0e11 0xae6d "unknown" "Compaq|NorthStar Bridge"
+0x0e11 0xb011 "tlan" "Compaq|Integrated Netelligent 10/100"
+0x0e11 0xb012 "tlan" "Compaq|Netelligent 10 T/2"
+0x0e11 0xb01e "unknown" "Compaq|NC3120 Fast Ethernet NIC"
+0x0e11 0xb01f "unknown" "Compaq|NC3122 Fast Ethernet NIC"
+0x0e11 0xb02f "unknown" "Compaq|NC1120 Ethernet NIC"
+0x0e11 0xb030 "tlan" "Compaq|Netelligent WS 5100"
+0x0e11 0xb04a "unknown" "Compaq|10/100TX WOL UTP Controller"
+0x0e11 0xb060 "cciss" "Compaq|Smart Array 5300 Controller"
+0x0e11 0xb0c6 "unknown" "Compaq|10/100TX Embedded WOL UTP Controller"
+0x0e11 0xb0c7 "unknown" "Compaq|NC3160 Fast Ethernet NIC"
+0x0e11 0xb0d7 "unknown" "Compaq|NC3121 (Rev A & B)"
+0x0e11 0xb0dd "unknown" "Compaq|NC3131 Fast Ethernet NIC"
+0x0e11 0xb0de "unknown" "Compaq|NC3132 Fast Ethernet Module"
+0x0e11 0xb0df "unknown" "Compaq|NC6132 Gigabit Module"
+0x0e11 0xb0e0 "unknown" "Compaq|NC6133 Gigabit Module"
+0x0e11 0xb0e1 "unknown" "Compaq|NC3133 Fast Ethernet Module"
+0x0e11 0xb123 "unknown" "Compaq|NC6134 Gigabit NIC"
+0x0e11 0xb134 "unknown" "Compaq|NC3163 Fast Ethernet NIC"
+0x0e11 0xb13c "unknown" "Compaq|NC3162 Fast Ethernet NIC"
+0x0e11 0xb144 "unknown" "Compaq|NC3123 Fast Ethernet NIC"
+0x0e11 0xb163 "unknown" "Compaq|NC3134 Fast Ethernet NIC"
+0x0e11 0xb164 "unknown" "Compaq|NC3135 Fast Ethernet Upgrade Module"
+0x0e11 0xb178 "cciss" "CISSB|Smart Array 5i/532 cards"
+0x0e11 0xb196 "unknown" "Compaq Computer Corp.|Conexant SoftK56 Modem"
+0x0e11 0xb1a4 "unknown" "Compaq|NC7131 Gigabit Server Adapter"
+0x0e11 0xb200 "unknown" "Compaq Computer Corp.|Memory Hot-Plug Controller"
+0x0e11 0xb203 "unknown" "Compaq Computer Corp.|iLo Integrated Lights Out Processor"
+0x0e11 0xb204 "unknown" "Compaq Computer Corp.|iLo Integrated Lights Out Processor"
+0x0e11 0xf130 "tlan" "Compaq|NetFlex-3/P ThunderLAN 1.0"
+0x0e11 0xf150 "tlan" "Compaq|NetFlex-3/P ThunderLAN 2.3"
+0x0e11 0xf700 "lpfc" "Compaq|LP7000 Compaq/Emulex Fibre Channel HBA"
+0x0e11 0xf800 "lpfc" "Compaq|LP8000 Compaq/Emulex Fibre Channel HBA"
+0x1000 0x0001 "sym53c8xx" "Symbios|53c810"
+0x1000 0x0002 "sym53c8xx" "Symbios|53c820"
+0x1000 0x0003 "sym53c8xx" "Symbios|53c825"
+0x1000 0x0004 "sym53c8xx" "Symbios|53c815"
+0x1000 0x0005 "sym53c8xx" "Symbios|53c810AP"
+0x1000 0x0006 "sym53c8xx" "Symbios|53c860"
+0x1000 0x000a "sym53c8xx" "Symbios|53c1510"
+0x1000 0x000b "sym53c8xx" "Symbios|53c896"
+0x1000 0x000c "sym53c8xx" "Symbios|53c895"
+0x1000 0x000d "sym53c8xx" "Symbios|53c885"
+0x1000 0x000f "sym53c8xx" "Symbios|53c875"
+0x1000 0x0010 0x0e11 0x4040 "cpqarray" "Symbios|53c1510 Array Mode [Compaq Integrated Smart Array]"
+0x1000 0x0010 0x0e11 0x4048 "cpqarray" "Symbios|53c1510 Array Mode [Compaq Integrated Smart Array]"
+0x1000 0x0010 0x1000 0x1000 "sym53c8xx" "LSI Logic / Symbios Logic|53C1510 PCI to Dual Channel Wide Ultra2 SCSI Controller (Intelligent mode)"
+0x1000 0x0010 "sym53c8xx" "Symbios|53c895"
+0x1000 0x0012 "sym53c8xx" "Symbios|53c895a"
+0x1000 0x0013 "sym53c8xx" "Symbios|53c875a"
+0x1000 0x0020 "sym53c8xx" "Symbios|53c1010-33 Ultra3 SCSI Adapter"
+0x1000 0x0021 "sym53c8xx" "Symbios|53c1010-66 Ultra3 SCSI Adapter"
+0x1000 0x0030 "mptspi" "Symbios|53c1030"
+0x1000 0x0031 "unknown" "LSI Logic|53C1030ZC PCI-X SCSI Controller"
+0x1000 0x0032 "mptspi" "LSI Logic / Symbios Logic|53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI"
+0x1000 0x0033 "megaraid" "LSI Logic / Symbios Logic|1030ZC_53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI"
+0x1000 0x0035 "unknown" "LSI Logic|53C1035 PCI-X SCSI Controller"
+0x1000 0x0040 0x1000 0x0033 "megaraid_mbox" "LSI Logic|MegaRAID SCSI 320-2XR"
+0x1000 0x0040 0x1000 0x0066 "megaraid_mbox" "LSI Logic|MegaRAID SCSI 320-2XRWS"
+0x1000 0x0040 "mptscsih" "LSI Logic / Symbios Logic|53c1035 PCI-X Fusion-MPT Dual Ultra320 SCSI"
+0x1000 0x0041 "unknown" "LSI Logic / Symbios Logic|53C1035ZC PCI-X Fusion-MPT Dual Ultra320 SCSI"
+0x1000 0x0050 "mptsas" "LSI Logic / Symbios Logic|SAS1064 PCI-X Fusion-MPT SAS"
+0x1000 0x0054 "mptsas" "LSI Logic / Symbios Logic|SAS1068 PCI-X Fusion-MPT SAS"
+0x1000 0x0056 "mptsas" "LSI Logic / Symbios Logic|SAS1064E PCI-Express Fusion-MPT SAS"
+0x1000 0x0058 "mptsas" "LSI Logic / Symbios Logic|SAS1068E PCI-Express Fusion-MPT SAS"
+0x1000 0x005a "mptsas" "LSI Logic / Symbios Logic|SAS1066E PCI-Express Fusion-MPT SAS"
+0x1000 0x005c "unknown" "LSI Logic / Symbios Logic|SAS1064A PCI-X Fusion-MPT SAS"
+0x1000 0x005e "mptsas" "LSI Logic / Symbios Logic|SAS1066 PCI-X Fusion-MPT SAS"
+0x1000 0x0060 "megaraid_sas" "LSI Logic / Symbios Logic|SAS1078 PCI-X Fusion-MPT SAS"
+0x1000 0x0062 "unknown" "LSI Logic / Symbios Logic|SAS1078 PCI-Express Fusion-MPT SAS"
+0x1000 0x0066 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SCSI 320-2XRWS"
+0x1000 0x008f "sym53c8xx" "Symbios|53c875J"
+0x1000 0x0407 "megaraid_mbox" "LSI Logic|PowerEdge RAID Controller 4/QC"
+0x1000 0x0408 "megaraid_mbox" "LSI Logic / Symbios Logic|MegaRAID"
+0x1000 0x0409 "megaraid_mbox" "LSI Logic / Symbios Logic|MegaRAID"
+0x1000 0x0411 "megaraid_sas" "LSI Logic / Symbios Logic|MegaRAID"
+0x1000 0x0413 "unknown" "LSI Logic / Symbios Logic|MegaRAID SAS Verde ZCR"
+0x1000 0x0518 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SCSI 320-2"
+0x1000 0x0520 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID"
+0x1000 0x0523 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SATA 150-6"
+0x1000 0x0530 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SCSI 320-0X"
+0x1000 0x0531 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SCSI 320-4X"
+0x1000 0x0532 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SCSI 320-2X"
+0x1000 0x0621 "mptfc" "Symbios|FC909 Fibre Channel Adapter"
+0x1000 0x0622 "mptfc" "Symbios|FC929 Fibre Channel Adapter"
+0x1000 0x0623 "mptscsih" "Symbios|FC929 LAN"
+0x1000 0x0624 "mptfc" "Symbios|FC919 Fibre Channel Adapter"
+0x1000 0x0625 "mptscsih" "Symbios|FC919 LAN"
+0x1000 0x0626 "mptfc" "Symbios|FC929X Fibre Channel Adapter"
+0x1000 0x0627 "mptscsih" "Symbios|FC929X_LAN"
+0x1000 0x0628 "mptfc" "Symbios|FC919X Fibre Channel Adapter"
+0x1000 0x0629 "mptscsih" "Symbios|FC919X_LAN"
+0x1000 0x0630 "mptscsih" "LSI Logic|LSIFC920 Fibre Channel I/O Processor"
+0x1000 0x0640 "mptfc" "LSI Logic / Symbios Logic|FC949X Fibre Channel Adapter"
+0x1000 0x0642 "mptfc" "LSI Logic / Symbios Logic|FC939X Fibre Channel Adapter"
+0x1000 0x0646 "mptfc" "LSI Logic / Symbios Logic|FC949ES Fibre Channel Adapter"
+0x1000 0x0701 "yellowfin" "Symbios|83C885 gigabit ethernet"
+0x1000 0x0702 "yellowfin" "Symbios|Yellowfin G-NIC gigabit ethernet"
+0x1000 0x0804 "unknown" "LSI Logic / Symbios Logic|SA2010"
+0x1000 0x0805 "unknown" "LSI Logic / Symbios Logic|SA2010ZC"
+0x1000 0x0806 "unknown" "LSI Logic / Symbios Logic|SA2020"
+0x1000 0x0807 "unknown" "LSI Logic / Symbios Logic|SA2020ZC"
+0x1000 0x0901 "unknown" "Symbios|61C102"
+0x1000 0x0e11 "cpqarray" "Symbios Logic Inc. / NCR|Integrated Array Controller"
+0x1000 0x1000 "megaraid" "Symbios|63C815"
+0x1000 0x1001 "unknown" "LSI Logic|53C895 Symbios Ultra2 SCSI controller"
+0x1000 0x1028 "megaraid" "Symbios Logic Inc. / NCR|PowerEdge Expandable RAID Controller 4/DC"
+0x1000 0x1960 "megaraid_mbox" "LSI Logic|PowerEdge RAID Controller 3/QC"
+0x1000 0x4040 "cpqarray" "Symbios Logic Inc. / NCR|Integrated Array Controller"
+0x1000 0x4048 "cpqarray" "Symbios Logic Inc. / NCR|Integrated Array Controller"
+0x1000 0x4523 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SATA 150-4"
+0x1000 0x8086 "megaraid" "Symbios Logic Inc. / NCR|Intel(R) RAID SCSI Controller SRCU42X"
+0x1000 0xa520 "megaraid" "Symbios Logic Inc. / NCR|MegaRAID SCSI 320-0"
+0x1001 0x0010 "unknown" "Initio|PCI 1616 Measurement card with 32 digital I/O lines"
+0x1001 0x0011 "unknown" "Initio|OPTO-PCI Opto-Isolated digital I/O board"
+0x1001 0x0012 "unknown" "Initio|PCI-AD/DA Analogue I/O board"
+0x1001 0x0013 "unknown" "Initio|PCI-OPTO-RELAIS Digital I/O board with relay outputs"
+0x1001 0x0014 "unknown" "Initio|PCI-Counter/Timer Counter Timer board"
+0x1001 0x0015 "unknown" "Initio|PCI-DAC416 Analogue output board"
+0x1001 0x0016 "unknown" "Initio|PCI-MFB Analogue I/O board"
+0x1001 0x0017 "unknown" "Initio|PROTO-3 PCI Prototyping board"
+0x1001 0x0020 "unknown" "Kolter Electronic - Germany|ispLSI1032E Universal digital I/O PCI-Interface"
+0x1001 0x9100 "initio" "Initio|INI-9100/9100W SCSI Host"
+0x1002 0x000b "Card:ATI Radeon" "ATI Technologies Inc.|Radeon 7000"
+0x1002 0x0084 "Card:ATI Mach64" "ATI Technologies Inc.|Mach64"
+0x1002 0x0088 "Card:ATI Mach64" "ATI Technologies Inc.|Mach64 (SuSE Econ)"
+0x1002 0x010a "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8800 64Mb"
+0x1002 0x013a "Card:ATI Radeon" "ATI Technologies Inc.|Radeon 7000/Radeon VE"
+0x1002 0x0152 "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8800 128Mb"
+0x1002 0x0162 "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8700 32Mb"
+0x1002 0x0172 "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8700 64Mb"
+0x1002 0x1002 "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8800 64Mb"
+0x1002 0x3150 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|M24 1P [Radeon Mobility X600]"
+0x1002 0x3152 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc|M22 [Radeon Mobility X300]"
+0x1002 0x3154 "Card:ATI Radeon" "ATI Technologies Inc.|M24 1T [FireGL M24 GL]"
+0x1002 0x3e50 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X600 Pro (PCI-Express)"
+0x1002 0x3e54 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X600 Pro GL (PCI-Express)"
+0x1002 0x3e70 "unknown" "ATI Technologies Inc.|X600 Radeon X600 Pro (Secondary)"
+0x1002 0x3e74 "unknown" "ATI Technologies Inc.|X600 Radeon X600 Pro GL (Secondary)"
+0x1002 0x4136 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon IGP320 (A3) 4136"
+0x1002 0x4137 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon IGP330/340/350 (A4) 4137"
+0x1002 0x4141 "Card:ATI Radeon" "ATI Technologies Inc.|Mach32 [68800-3 AA]"
+0x1002 0x4144 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9500 AD (AGP)"
+0x1002 0x4145 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9500 AE (AGP)"
+0x1002 0x4146 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9600TX AF (AGP)"
+0x1002 0x4147 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL Z1 AG (AGP)"
+0x1002 0x4148 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9800SE AH (AGP)"
+0x1002 0x4149 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9800 AI (AGP)"
+0x1002 0x414a "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9800 AJ (AGP)"
+0x1002 0x414b "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL X2 AK (AGP)"
+0x1002 0x4150 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9600 AP (AGP)"
+0x1002 0x4151 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9600SE AQ (AGP)"
+0x1002 0x4152 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9600XT AR (AGP)"
+0x1002 0x4153 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9600 AS (AGP)"
+0x1002 0x4154 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL T2 AT (AGP)"
+0x1002 0x4155 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|RV350 AU [Fire GL T2]"
+0x1002 0x4156 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL RV360 AV (AGP)"
+0x1002 0x4157 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|RV350 AW [Fire GL T2]"
+0x1002 0x4158 "Card:ATI Mach64" "ATI Technologies Inc.|Mach32"
+0x1002 0x4164 "unknown" "ATI Technologies Inc.|R300 Radeon 9700/9500 Series - Secondary"
+0x1002 0x4165 "unknown" "ATI Technologies Inc.|R300 AE [Radeon 9700 Pro] (Secondary)"
+0x1002 0x4166 "unknown" "ATI Technologies Inc.|R300 AF [Radeon 9700 Pro] (Secondary)"
+0x1002 0x4167 "unknown" "ATI Technologies Inc.|Fire GL Z1 4P SECONDARY Video"
+0x1002 0x4168 "unknown" "ATI Technologies Inc.|Radeon R350 [Radeon 9800] (Secondary)"
+0x1002 0x4170 "unknown" "ATI Technologies Inc.|RV350 AP [Radeon 9600] (Secondary)"
+0x1002 0x4171 "unknown" "ATI Technologies Inc.|RV350 AQ [Radeon 9600] (Secondary)"
+0x1002 0x4172 "unknown" "ATI Technologies Inc.|RV350 AR [Radeon 9600] (Secondary)"
+0x1002 0x4173 "unknown" "ATI Technologies Inc.|RV350 ?? [Radeon 9550] (Secondary)"
+0x1002 0x4237 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon 7000 IGP (A4+) 4237"
+0x1002 0x4242 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 8500 AIW BB (AGP)"
+0x1002 0x4243 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 8500 AIW BC (AGP)"
+0x1002 0x4336 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon IGP320M (U1) 4336"
+0x1002 0x4337 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon IGP330M/340M/350M (U2) 4337"
+0x1002 0x4341 "snd-atiixp" "ATI Technologies Inc.|IXP150/200 AC'97 Audio Controller"
+0x1002 0x4342 "unknown" "ATI Technologies Inc.|IXP150/200 HUB Bridge"
+0x1002 0x4345 "unknown" "ATI Technologies Inc.|EHCI USB Controller"
+0x1002 0x4347 "unknown" "ATI Technologies Inc.|OHCI USB Controller #1"
+0x1002 0x4348 "unknown" "ATI Technologies Inc.|OHCI USB Controller #2"
+0x1002 0x4349 "atiixp" "ATI Technologies Inc.|Dual Channel Bus Master PCI IDE Controller"
+0x1002 0x434c "unknown" "ATI Technologies Inc.|IXP150/200 LPC Controller"
+0x1002 0x434d "snd-atiixp-modem" "ATI Technologies Inc.|IXP AC'97 Modem"
+0x1002 0x4353 "i2c-piix4" "ATI Technologies Inc.|SMBus"
+0x1002 0x4354 "Card:ATI Mach64" "ATI Technologies Inc.|215CT [Mach64 CT]"
+0x1002 0x4358 "Card:ATI Mach64" "ATI Technologies Inc.|210888CX [Mach64 CX]"
+0x1002 0x4361 "snd-atiixp" "ATI Technologies Inc.|IXP300 AC'97 Audio Controller"
+0x1002 0x4363 "i2c-piix4" "ATI Technologies Inc.|SMBus"
+0x1002 0x4369 "atiixp" "ATI Technologies Inc.|Dual Channel Bus Master PCI IDE Controller"
+0x1002 0x436e "sata_sil" "ATI Technologies Inc.|436E Serial ATA Controller"
+0x1002 0x4370 "snd-atiixp" "ATI Technologies Inc.|IXP400 AC'97 Audio Controller"
+0x1002 0x4371 "unknown" "ATI Technologies Inc.|IXP SB400 PCI-PCI Bridge"
+0x1002 0x4372 "i2c-piix4" "ATI Technologies Inc.|SMBus"
+0x1002 0x4373 "unknown" "ATI Technologies Inc.|IXP SB400 USB2 Host Controller"
+0x1002 0x4374 "unknown" "ATI Technologies Inc.|IXP SB400 USB Host Controller"
+0x1002 0x4375 "unknown" "ATI Technologies Inc.|IXP SB400 USB Host Controller"
+0x1002 0x4376 "atiixp" "ATI Technologies Inc.|Standard Dual Channel PCI IDE Controller ATI"
+0x1002 0x4377 "unknown" "ATI Technologies Inc.|IXP SB400 PCI-ISA Bridge"
+0x1002 0x4378 "snd-atiixp-modem" "ATI Technologies Inc.|IXP AC'97 Modem"
+0x1002 0x4379 "sata_sil" "ATI Technologies Inc.|4379 Serial ATA Controller"
+0x1002 0x437a "sata_sil" "ATI Technologies Inc.|437A Serial ATA Controller"
+0x1002 0x437b "snd-hda-intel" "ATI Technologies Inc.|SB450 Azalia HD audio"
+0x1002 0x4380 "ahci" "ATI Technologies Inc|SB600 Non-Raid-5 SATA"
+0x1002 0x4381 "ahci" "ATI Technologies Inc|SB600 Raid-5 SATA"
+0x1002 0x4382 "unknown" "ATI Technologies Inc|SB600 AC97 Audio"
+0x1002 0x4383 "snd-hda-intel" "ATI Technologies Inc.|SB600 Audio Controller"
+0x1002 0x4384 "unknown" "ATI Technologies Inc|SB600 PCI to PCI Bridge"
+0x1002 0x4385 "unknown" "ATI Technologies Inc|SB600 SMBus"
+0x1002 0x4386 "unknown" "ATI Technologies Inc|SB600 USB Controller (EHCI)"
+0x1002 0x4387 "unknown" "ATI Technologies Inc|SB600 USB (OHCI0)"
+0x1002 0x4388 "unknown" "ATI Technologies Inc|SB600 USB (OHCI1)"
+0x1002 0x4389 "unknown" "ATI Technologies Inc|SB600 USB (OHCI2)"
+0x1002 0x438a "unknown" "ATI Technologies Inc|SB600 USB (OHCI3)"
+0x1002 0x438b "unknown" "ATI Technologies Inc|SB600 USB (OHCI4)"
+0x1002 0x438c "atiixp" "ATI Technologies Inc|SB600 IDE"
+0x1002 0x438d "unknown" "ATI Technologies Inc|SB600 PCI to LPC Bridge"
+0x1002 0x438e "unknown" "ATI Technologies Inc|SB600 AC97 Modem"
+0x1002 0x4437 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon Mobility 7000 IGP 4437"
+0x1002 0x4554 "Card:ATI Mach64" "ATI Technologies Inc.|210888ET [Mach64 ET]"
+0x1002 0x4654 "Card:ATI Mach64" "ATI Technologies Inc.|Mach64 VT"
+0x1002 0x4742 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage Pro AGP 1X/2X"
+0x1002 0x4744 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage Pro AGP 1X"
+0x1002 0x4747 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage Pro"
+0x1002 0x4749 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage Pro"
+0x1002 0x474c "Card:ATI Mach64 Utah" "ATI Technologies Inc.|Rage XC"
+0x1002 0x474d "Card:ATI Mach64 Utah" "ATI Technologies Inc.|Rage XL AGP 2X"
+0x1002 0x474e "Card:ATI Mach64 Utah" "ATI Technologies Inc.|Rage XC AGP"
+0x1002 0x474f "Card:ATI Mach64 Utah" "ATI Technologies Inc.|Rage XL"
+0x1002 0x4750 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage Pro 215GP"
+0x1002 0x4751 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage Pro 215GQ"
+0x1002 0x4752 "Card:ATI Rage XL" "ATI Technologies Inc.|Rage XL"
+0x1002 0x4753 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|Rage XC"
+0x1002 0x4754 "Card:ATI Mach64 3D RAGE II" "ATI Technologies Inc.|3D Rage I/II 215GT [Mach64 GT]"
+0x1002 0x4755 "Card:ATI Mach64 3D RAGE II" "ATI Technologies Inc.|3D Rage II+ 215GTB [Mach64 GTB]"
+0x1002 0x4756 "Card:ATI Mach64 3D RAGE II" "ATI Technologies Inc.|3D Rage IIC 215IIC [Mach64 GT IIC]"
+0x1002 0x4757 "Card:ATI Mach64 3D Rage IIC" "ATI Technologies Inc.|3D Rage IIC AGP"
+0x1002 0x4758 "Card:ATI Mach64" "ATI Technologies Inc.|210888GX [Mach64 GX]"
+0x1002 0x4759 "Card:ATI Mach64 3D Rage IIC" "ATI Technologies Inc.|3D Rage IIC"
+0x1002 0x475a "Card:ATI Mach64 3D Rage IIC" "ATI Technologies Inc.|3D Rage IIC AGP"
+0x1002 0x4844 "Card:ATI Radeon" "ATI Technologies Inc.|Rage HDTV [HD]"
+0x1002 0x4964 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon RV250 Id [Radeon 9000]"
+0x1002 0x4965 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon RV250 Ie [Radeon 9000]"
+0x1002 0x4966 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9000/PRO If (AGP/PCI)"
+0x1002 0x4967 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9000 Ig (AGP/PCI)"
+0x1002 0x496c "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|Radeon ????"
+0x1002 0x496d "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|Radeon ????"
+0x1002 0x496e "unknown" "ATI Technologies Inc.|Radeon R250 [Radeon 9000] (Secondary)"
+0x1002 0x496f "unknown" "ATI Technologies Inc.|Radeon R250 [Radeon 9000] (Secondary)"
+0x1002 0x4a48 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X800 (R420)"
+0x1002 0x4a49 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X800 Pro"
+0x1002 0x4a4a "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X800 (R420)"
+0x1002 0x4a4b "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X800 (R420)"
+0x1002 0x4a4c "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X800 (R420)"
+0x1002 0x4a4d "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X800 (R420)"
+0x1002 0x4a4e "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X800 (R420)"
+0x1002 0x4a50 "Card:ATI Radeon" "ATI Technologies Inc.|R420 JP [Radeon X800XT]"
+0x1002 0x4a54 "unknown" "ATI Technologies Inc|R420 [Radeon X800 VE]"
+0x1002 0x4a68 "unknown" "ATI Technologies Inc.|Radeon X800 (R420) (Secondary)"
+0x1002 0x4a69 "unknown" "ATI Technologies Inc.|Radeon X800 (R420) (Secondary)"
+0x1002 0x4a6a "unknown" "ATI Technologies Inc.|Radeon X800 (R420) (Secondary)"
+0x1002 0x4a6b "unknown" "ATI Technologies Inc.|Radeon X800 (R420) (Secondary)"
+0x1002 0x4a6c "unknown" "ATI Technologies Inc.|Radeon X800 (R420) (Secondary)"
+0x1002 0x4a6d "unknown" "ATI Technologies Inc.|Radeon X800 (R420) (Secondary)"
+0x1002 0x4a6e "unknown" "ATI Technologies Inc.|Radeon X800 (R420) (Secondary)"
+0x1002 0x4a70 "unknown" "ATI Technologies Inc.|R420 [X800XT-PE] (Secondary)"
+0x1002 0x4a74 "unknown" "ATI Technologies Inc|R420 [Radeon X800 VE] (Secondary)"
+0x1002 0x4b49 "Card:ATI Radeon" "ATI Technologies Inc.|R480 [Radeon X850XT]"
+0x1002 0x4b4b "Card:ATI Radeon" "ATI Technologies Inc|R480 [Radeon X850Pro]"
+0x1002 0x4b4c "Card:ATI Radeon" "ATI Technologies Inc.|R481 [Radeon X850XT-PE]"
+0x1002 0x4b69 "unknown" "ATI Technologies Inc.|R480 [Radeon X850XT secondary]"
+0x1002 0x4b6b "unknown" "ATI Technologies Inc|R480 [Radeon X850Pro] (Secondary)"
+0x1002 0x4b6c "unknown" "ATI Technologies Inc.|R481 [Radeon X850XT-PE] Secondary"
+0x1002 0x4c42 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage LT Pro AGP-133"
+0x1002 0x4c44 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage LT Pro AGP-66"
+0x1002 0x4c45 "Card:ATI Rage 128 Mobility" "ATI Technologies Inc.|Rage Mobility M3 AGP"
+0x1002 0x4c46 "Card:ATI Rage 128 Mobility" "ATI Technologies Inc.|Rage Mobility M3 AGP 2x"
+0x1002 0x4c47 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage LT-G 215LG"
+0x1002 0x4c49 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage LT Pro"
+0x1002 0x4c4b "Card:ATI Radeon" "ATI Technologies Inc.|Rage 128 Mobility 3 [LK]"
+0x1002 0x4c4c "Card:ATI Radeon" "ATI Technologies Inc.|Rage 128 Mobility 3 [LL]"
+0x1002 0x4c4d "Card:ATI Rage Mobility" "ATI Technologies Inc.|Rage Mobility P/M AGP 2x"
+0x1002 0x4c4e "Card:ATI Rage Mobility" "ATI Technologies Inc.|Rage Mobility L AGP 2x"
+0x1002 0x4c50 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage LT Pro"
+0x1002 0x4c51 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|3D Rage LT Pro"
+0x1002 0x4c52 "Card:ATI Rage Mobility" "ATI Technologies Inc.|Rage Mobility P/M"
+0x1002 0x4c53 "Card:ATI Rage Mobility" "ATI Technologies Inc.|Rage Mobility L"
+0x1002 0x4c54 "Card:ATI Mach64 Utah" "ATI Technologies Inc.|264LT [Mach64 LT]"
+0x1002 0x4c57 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon Mobility M7 LW (AGP)"
+0x1002 0x4c58 "Card:ATI Radeon" "ATI Technologies Inc.|Mobility FireGL 7800 M7 LX (AGP)"
+0x1002 0x4c59 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon Mobility M6 LY (AGP)"
+0x1002 0x4c5a "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility M6 LZ (AGP)"
+0x1002 0x4c64 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL Mobility 9000 (M9) Ld (AGP)"
+0x1002 0x4c65 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon RV250 Le [Radeon Mobility 9000]"
+0x1002 0x4c66 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9000 (M9) Lf (AGP)"
+0x1002 0x4c67 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9000 (M9) Lg (AGP)"
+0x1002 0x4c6c "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|"
+0x1002 0x4c6d "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|"
+0x1002 0x4c6e "unknown" "ATI Technologies Inc.|Radeon R250 Ln [Radeon Mobility 9000 M9] [Secondary]"
+0x1002 0x4c6f "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|"
+0x1002 0x4d45 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon LE"
+0x1002 0x4d46 "Card:ATI Rage 128 Mobility" "ATI Technologies Inc.|Rage Mobility M4 AGP"
+0x1002 0x4d4c "Card:ATI Rage 128 Mobility" "ATI Technologies Inc.|Rage Mobility M4 AGP"
+0x1002 0x4e44 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9700 Pro ND (AGP)"
+0x1002 0x4e45 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9700/9500Pro NE (AGP)"
+0x1002 0x4e46 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9700 NF (AGP)"
+0x1002 0x4e47 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL X1 NG (AGP)"
+0x1002 0x4e48 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9800PRO NH (AGP)"
+0x1002 0x4e49 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9800 NI (AGP)"
+0x1002 0x4e4a "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9800XT NJ (AGP)"
+0x1002 0x4e4b "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL X2 NK (AGP)"
+0x1002 0x4e50 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9600 (M10) NP (AGP)"
+0x1002 0x4e51 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9600 (M10) NQ (AGP)"
+0x1002 0x4e52 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9600 (M11) NR (AGP)"
+0x1002 0x4e53 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9600 (M10) NS (AGP)"
+0x1002 0x4e54 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL Mobility T2 (M10) NT (AGP)"
+0x1002 0x4e56 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL Mobility T2 (M11) NV (AGP)"
+0x1002 0x4e64 "unknown" "ATI Technologies Inc.|R300 Radeon 9700 (Secondary)"
+0x1002 0x4e65 "unknown" "ATI Technologies Inc.|R300 Radeon 9700/9500 Series (Secondary)"
+0x1002 0x4e66 "unknown" "ATI Technologies Inc.|Radeon R300 [Radeon 9700] (Secondary)"
+0x1002 0x4e67 "unknown" "ATI Technologies Inc.|Fire GL X1/Z1 SECONDARY Video"
+0x1002 0x4e68 "unknown" "ATI Technologies Inc.|Radeon R300 [Radeon 9800] (Secondary)"
+0x1002 0x4e69 "unknown" "ATI Technologies Inc.|Radeon R350 [Radeon 9800] (Secondary)"
+0x1002 0x4e6a "unknown" "ATI Technologies Inc.|R360 Radeon 9800 XT - Secondary"
+0x1002 0x4e71 "unknown" "ATI Technologies Inc.|M10 NQ [Radeon Mobility 9600] (secondary)"
+0x1002 0x4f72 "unknown" "ATI Technologies Inc|RV250 [Radeon 9000 Series]"
+0x1002 0x4f73 "unknown" "ATI Technologies Inc|Radeon RV250 [Radeon 9000 Series] (Secondary)"
+0x1002 0x5041 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x5042 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x5043 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x5044 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x5045 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x5046 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x5047 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x5048 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x5049 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x504a "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x504b "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x504c "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x504d "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x504e "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x504f "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x5050 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x5051 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x5052 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x5053 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x5054 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x5055 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x5056 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro"
+0x1002 0x5057 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 2x"
+0x1002 0x5058 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro AGP 4x"
+0x1002 0x5144 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon QD (AGP)"
+0x1002 0x5145 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon QE (AGP)"
+0x1002 0x5146 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon QF (AGP)"
+0x1002 0x5147 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon QG (AGP)"
+0x1002 0x5148 0x1002 0x010a "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8800 64Mb"
+0x1002 0x5148 0x1002 0x0152 "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8800 128Mb"
+0x1002 0x5148 0x1002 0x0162 "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8700 32Mb"
+0x1002 0x5148 0x1002 0x0172 "Card:ATI Radeon" "ATI Technologies Inc.|FireGL 8700 64Mb"
+0x1002 0x5148 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|FireGL 8700/8800 QH (AGP)"
+0x1002 0x5149 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon R200 QI"
+0x1002 0x514a "Card:ATI Radeon" "ATI Technologies Inc.|Radeon R200 QJ"
+0x1002 0x514b "Card:ATI Radeon" "ATI Technologies Inc.|Radeon R200 QK"
+0x1002 0x514c "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 8500 QL (AGP)"
+0x1002 0x514d "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9100 QM (AGP)"
+0x1002 0x514e "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 8500 QN R200"
+0x1002 0x514f "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 8500 QO R200"
+0x1002 0x5154 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|R200 QT [Radeon 8500]"
+0x1002 0x5155 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc.|R200 QU [Radeon 9100]"
+0x1002 0x5157 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon 7500 QW (AGP/PCI)"
+0x1002 0x5158 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon 7500 QX (AGP/PCI)"
+0x1002 0x5159 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon VE/7000 QY (AGP/PCI)"
+0x1002 0x515a "Card:ATI Radeon" "ATI Technologies Inc.|Radeon VE/7000 QZ (AGP/PCI)"
+0x1002 0x515e "Card:ATI Radeon" "ATI Technologies Inc.|ES1000 RN50"
+0x1002 0x515f "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|ES1000"
+0x1002 0x5168 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon R200 Qh"
+0x1002 0x5169 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon R200 Qi"
+0x1002 0x516a "Card:ATI Radeon" "ATI Technologies Inc.|Radeon R200 Qj"
+0x1002 0x516b "Card:ATI Radeon" "ATI Technologies Inc.|Radeon R200 Qk"
+0x1002 0x516c "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 8500 Ql"
+0x1002 0x516d "unknown" "ATI Technologies Inc.|R200 Redeon 9100 Series - Secondary"
+0x1002 0x5245 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 GL"
+0x1002 0x5246 "Card:ATI Rage 128 TVout" "ATI Technologies Inc.|Rage 128 GL AGP 1x/2x"
+0x1002 0x5247 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 RG"
+0x1002 0x524b "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 VR"
+0x1002 0x524c "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 VR AGP 1x/2x"
+0x1002 0x5345 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x"
+0x1002 0x5346 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x AGP 2x"
+0x1002 0x5347 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x AGP 4x"
+0x1002 0x5348 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x"
+0x1002 0x534b "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x"
+0x1002 0x534c "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x AGP 2x"
+0x1002 0x534d "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x AGP 4x"
+0x1002 0x534e "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 4x"
+0x1002 0x5354 "Card:ATI Mach64" "ATI Technologies Inc.|Mach64 ST"
+0x1002 0x5446 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Ultra TF"
+0x1002 0x544c "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Ultra TL"
+0x1002 0x5452 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Ultra TR"
+0x1002 0x5453 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro Ultra TS"
+0x1002 0x5454 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro Ultra TT"
+0x1002 0x5455 "Card:ATI Rage 128" "ATI Technologies Inc.|Rage 128 Pro Ultra TU"
+0x1002 0x5460 "Card:ATI Radeon" "ATI Technologies Inc.|M22 [Radeon Mobility M300]"
+0x1002 0x5462 "Card:ATI Radeon" "ATI Technologies Inc|M24 [Radeon Mobility X600]"
+0x1002 0x5464 "Card:ATI Radeon" "ATI Technologies Inc.|M22 [FireGL GL]"
+0x1002 0x5548 "Card:ATI Radeon" "ATI Technologies Inc.|R423 UH [Radeon X800 (PCIE)]"
+0x1002 0x5549 "Card:ATI Radeon" "ATI Technologies Inc.|R423 UI [Radeon X800PRO (PCIE)]"
+0x1002 0x554a "Card:ATI Radeon" "ATI Technologies Inc.|R423 UJ [Radeon X800LE (PCIE)]"
+0x1002 0x554b "Card:ATI Radeon" "ATI Technologies Inc.|R423 UK [Radeon X800SE (PCIE)]"
+0x1002 0x554d "Card:ATI Radeon" "ATI Technologies Inc.|R430 [Radeon X800 XL] (PCIe)"
+0x1002 0x554f "Card:ATI Radeon" "ATI Technologies Inc|R430 [Radeon X800 (PCIE)]"
+0x1002 0x5550 "Card:ATI Radeon" "ATI Technologies Inc|R423 [Fire GL V7100]"
+0x1002 0x5551 "Card:ATI Radeon" "ATI Technologies Inc.|R423 UQ [FireGL V7200 (PCIE)]"
+0x1002 0x5552 "Card:ATI Radeon" "ATI Technologies Inc.|R423 UR [FireGL V5100 (PCIE)]"
+0x1002 0x5554 "Card:ATI Radeon" "ATI Technologies Inc.|R423 UT [FireGL V7100 (PCIE)]"
+0x1002 0x5569 "unknown" "ATI Technologies Inc|R423 UI [Radeon X800PRO (PCIE)] Secondary"
+0x1002 0x556b "unknown" "ATI Technologies Inc.|Radeon R423 UK (PCIE) [X800 SE] (Secondary)"
+0x1002 0x556d "unknown" "ATI Technologies Inc.|R430 [Radeon X800 XL] (PCIe) Secondary"
+0x1002 0x556f "unknown" "ATI Technologies Inc|R430 [Radeon X800 (PCIE) Secondary]"
+0x1002 0x5571 "unknown" "ATI Technologies Inc|R423GL-SE ATI FIREGL V5100 PCI-EX Secondary"
+0x1002 0x564a "Card:ATI Radeon" "ATI Technologies Inc|M26 [Mobility FireGL V5000]"
+0x1002 0x564b "Card:ATI Radeon" "ATI Technologies Inc|M26 [Mobility FireGL V5000]"
+0x1002 0x564f "Card:ATI Radeon" "ATI Technologies Inc|M26 [Radeon Mobility X700 XL] (PCIE)"
+0x1002 0x5652 "Card:ATI Radeon" "ATI Technologies Inc|M26 [Radeon Mobility X700]"
+0x1002 0x5653 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon Mobility X700 (PCIE)"
+0x1002 0x5654 "Card:ATI Mach64 VT (264VT)" "ATI Technologies Inc.|264VT [Mach64 VT]"
+0x1002 0x5655 "Card:ATI Mach64 VT (264VT)" "ATI Technologies Inc.|264VT3 [Mach64 VT3]"
+0x1002 0x5656 "Card:ATI Mach64 VT (264VT)" "ATI Technologies Inc.|264VT4 [Mach64 VT4]"
+0x1002 0x5772 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|R480 [Radeon X850XT (PCIE)]"
+0x1002 0x5830 "ati-agp" "ATI Technologies Inc.|CPU to PCI Bridge"
+0x1002 0x5831 "ati-agp" "ATI Technologies Inc.|CPU to PCI Bridge"
+0x1002 0x5832 "ati-agp" "ATI Technologies Inc.|CPU to PCI Bridge"
+0x1002 0x5833 "ati-agp" "ATI Technologies Inc.|CPU to PCI Bridge"
+0x1002 0x5834 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9100 IGP (A5) 5834"
+0x1002 0x5835 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9100 IGP (U3) 5835"
+0x1002 0x5836 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RS300 IGP"
+0x1002 0x5837 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RS300 IGP"
+0x1002 0x5838 "unknown" "ATI Technologies Inc.|Radeon 9100 IGP AGP Bridge"
+0x1002 0x5858 "Card:ATI Radeon" "ATI Technologies Inc.|Mach32 [68800-6 XX]"
+0x1002 0x5940 "unknown" "ATI Technologies Inc.|RV280 Radeon 9200 Pro - Secondary"
+0x1002 0x5941 "unknown" "ATI Technologies Inc.|RV280 Radeon 9200 - Secondary"
+0x1002 0x5944 "unknown" "ATI Technologies Inc.|RV280 Radeon 9200 SE (PCI)"
+0x1002 0x5950 "unknown" "ATI Technologies Inc.|RS480 Host Bridge"
+0x1002 0x5951 "unknown" "ATI Technologies Inc.|Radeon Xpress 200 (RS480/RS482/RX480/RX482) Chipset - Host bridge"
+0x1002 0x5954 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon XPRESS 200 (RS480 5954)"
+0x1002 0x5955 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon XPRESS 200M (RS480 5955)"
+0x1002 0x5960 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9200PRO 5960 (AGP)"
+0x1002 0x5961 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9200 5961 (AGP)"
+0x1002 0x5962 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9200 5962 (AGP)"
+0x1002 0x5963 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RV280 9200"
+0x1002 0x5964 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9200SE 5964 (AGP)"
+0x1002 0x5968 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RV280 9200"
+0x1002 0x5969 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon ES1000 RN50 (PCI)"
+0x1002 0x596a "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RV280 9200"
+0x1002 0x596b "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RV280 9200"
+0x1002 0x5974 "Card:ATI Radeon" "ATI Technologies Inc|RS482 [Radeon Xpress 200]"
+0x1002 0x5975 "Card:ATI Radeon" "ATI Technologies Inc|RS482 [Radeon Xpress 200M]"
+0x1002 0x5a33 "unknown" "ATI Technologies Inc|Radeon Xpress 200 Host Bridge"
+0x1002 0x5a34 "unknown" "ATI Technologies Inc.|RS480 PCI-X Root Port"
+0x1002 0x5a36 "unknown" "ATI Technologies Inc|RS480 PCI Bridge"
+0x1002 0x5a38 "unknown" "ATI Technologies Inc|RS480 PCI Bridge"
+0x1002 0x5a39 "unknown" "ATI Technologies Inc|RS480 PCI Bridge"
+0x1002 0x5a3f "unknown" "ATI Technologies Inc|RS480 PCI Bridge"
+0x1002 0x5a41 "Card:ATI Radeon" "ATI Technologies Inc|RS400 [Radeon Xpress 200]"
+0x1002 0x5a42 "Card:ATI Radeon" "ATI Technologies Inc|RS400 [Radeon Xpress 200M]"
+0x1002 0x5a61 "Card:ATI Radeon" "ATI Technologies Inc|RC410 [Radeon Xpress 200]"
+0x1002 0x5a62 "Card:ATI Radeon" "ATI Technologies Inc|RC410 [Radeon Xpress 200M]"
+0x1002 0x5b60 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon RV370"
+0x1002 0x5b62 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|RV370 Radeon X600 (PCI-E)"
+0x1002 0x5b63 "Card:ATI Radeon" "ATI Technologies Inc|RV370 [ATI Sapphire X550 Silent]"
+0x1002 0x5b64 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|RV370 GL Radeon"
+0x1002 0x5b65 "Card:ATI Radeon" "ATI Technologies Inc.|RV370 FireGL D1100 (PCI-E)"
+0x1002 0x5b70 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon RV370"
+0x1002 0x5b72 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon X600(RV380)"
+0x1002 0x5b73 "unknown" "ATI Technologies Inc|RV370 secondary [ATI Sapphire X550 Silent]"
+0x1002 0x5b74 "unknown" "ATI Technologies Inc.|Radeon RV370 GL (Secondary)"
+0x1002 0x5c61 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9200 (M9+) 5C61 (AGP)"
+0x1002 0x5c62 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RV280"
+0x1002 0x5c63 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9200 (M9+) 5C63 (AGP)"
+0x1002 0x5c64 "Card:ATI Radeon" "ATI Technologies Inc.|Radeon RV280"
+0x1002 0x5d44 "unknown" "ATI Technologies Inc.|RV280 Radeon 9200 SE Series - Secondary"
+0x1002 0x5d48 "Card:ATI Radeon" "ATI Technologies Inc|M28 [Radeon Mobility X800XT]"
+0x1002 0x5d49 "Card:ATI Radeon" "ATI Technologies Inc|M28 [Mobility FireGL V5100]"
+0x1002 0x5d4a "Card:ATI Radeon" "ATI Technologies Inc.|Mobility Radeon X800"
+0x1002 0x5d4d "Card:ATI Radeon" "ATI Technologies Inc.|R480 Radeon X850XT Platinum"
+0x1002 0x5d4f "Card:ATI Radeon" "ATI Technologies Inc|R480 [Radeon X800 GTO (PCIE)]"
+0x1002 0x5d52 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|R480 Radeon X850XT (PCI-E) (Primary)"
+0x1002 0x5d57 "Card:ATI Radeon" "ATI Technologies Inc.|R423 Radeon X800XT (PCI-E)"
+0x1002 0x5d6d "unknown" "ATI Technologies Inc.|R480 Radeon X850XT Platinum (PCI-E) (Secondary)"
+0x1002 0x5d6f "unknown" "ATI Technologies Inc|R480 [Radeon X800 GTO (PCIE)] (Secondary)"
+0x1002 0x5d72 "Card:ATI Radeon" "ATI Technologies Inc.|R480 Radeon X850XT (PCI-E)"
+0x1002 0x5d77 "unknown" "ATI Technologies Inc.|R423 Radeon X800XT (PCI-E) (Secondary)"
+0x1002 0x5e48 "Card:ATI Radeon" "ATI Technologies Inc|RV410 [FireGL V5000]"
+0x1002 0x5e49 "Card:ATI Radeon" "ATI Technologies Inc|RV410 [FireGL V3300]"
+0x1002 0x5e4a "Card:ATI Radeon" "ATI Technologies Inc|RV410 [Radeon X700XT]"
+0x1002 0x5e4b "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|RV410 Radeon X700 Pro (PCI-E)"
+0x1002 0x5e4c "Card:ATI Radeon" "ATI Technologies Inc|RV410 [Radeon X700SE]"
+0x1002 0x5e4d "Card:ATI Radeon" "ATI Technologies Inc.|RV410 Radeon X700 (PCI-E)"
+0x1002 0x5e4f "Card:ATI Radeon" "ATI Technologies Inc|RV410 [Radeon X700]"
+0x1002 0x5e6b "unknown" "ATI Technologies Inc.|RV410 Radeon X700 Pro (PCI-E) (Secondary)"
+0x1002 0x5e6d "unknown" "ATI Technologies Inc.|RV410 Radeon X700 (PCI-E) (Secondary)"
+0x1002 0x5f57 "Card:ATI Radeon" "ATI Technologies Inc|R423 [Radeon X800XT (PCIE)]"
+0x1002 0x700f "unknown" "ATI Technologies Inc.|U1/A3 AGP Bridge [IGP 320M]"
+0x1002 0x7010 "unknown" "ATI Technologies Inc.|PCI Bridge [IGP 340M]"
+0x1002 0x7100 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R520 [Radeon X1800]"
+0x1002 0x7102 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M58 [Radeon Mobility X1800]"
+0x1002 0x7103 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M58 [Mobility FireGL V7200]"
+0x1002 0x7104 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R520 GL ATI FireGL V7200 Primary"
+0x1002 0x7105 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R520 [FireGL]"
+0x1002 0x7106 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M58 [Mobility FireGL V7100]"
+0x1002 0x7108 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M58 [Radeon Mobility X1800]"
+0x1002 0x7109 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R520 [Radeon X900]"
+0x1002 0x710a "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R520 [Radeon X1800]"
+0x1002 0x710b "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R520 [Radeon X1800]"
+0x1002 0x710c "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R520 [Radeon X1800]"
+0x1002 0x7120 "unknown" "ATI Technologies Inc|R520 [Radeon X1800] (Secondary)"
+0x1002 0x7124 "unknown" "ATI Technologies Inc|R520 GL ATI FireGL V7200 Secondary"
+0x1002 0x7129 "unknown" "ATI Technologies Inc|R520 [Radeon X1800] (Secondary)"
+0x1002 0x7140 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV515 [Radeon X1600]"
+0x1002 0x7142 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV515 [Radeon X1300]"
+0x1002 0x7145 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|Radeon Mobility X1400"
+0x1002 0x7146 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV515 [Radeon X1300]"
+0x1002 0x7149 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M52 [ATI Mobility Radeon X1300]"
+0x1002 0x714a "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M52 [ATI Mobility Radeon X1300]"
+0x1002 0x714b "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M52 [ATI Mobility Radeon X1300]"
+0x1002 0x714c "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M52 [ATI Mobility Radeon X1300]"
+0x1002 0x714d "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV515 [Radeon X1300]"
+0x1002 0x714e "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV515 [Radeon X1300]"
+0x1002 0x7152 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV515 GL ATI FireGL V3300 Primary"
+0x1002 0x715e "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV515 [Radeon X1300]"
+0x1002 0x7162 "unknown" "ATI Technologies Inc|RV515 [Radeon X1300] (Secondary)"
+0x1002 0x7166 "unknown" "ATI Technologies Inc|RV515 [Radeon X1300] (Secondary)"
+0x1002 0x7172 "unknown" "ATI Technologies Inc|RV515 GL ATI FireGL V3300 Secondary"
+0x1002 0x7180 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV516 Radeon X1300 Series Primary"
+0x1002 0x7181 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV516 XT Radeon X1600 Series Primary"
+0x1002 0x71a0 "unknown" "ATI Technologies Inc|RV516 Radeon X1300 Series Secondary"
+0x1002 0x71a1 "unknown" "ATI Technologies Inc|RV516 XT Radeon X1600 Series Secondary"
+0x1002 0x71c0 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV530 [Radeon X1600]"
+0x1002 0x71c2 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV530 [Radeon X1600]"
+0x1002 0x71c4 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M56GL [ATI Mobility FireGL V5200]"
+0x1002 0x71c5 "Card:ATI Radeon (vesa)" "ATI Technologies Inc|M56P [Radeon Mobility X1600]"
+0x1002 0x71c6 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV530LE [Radeon X1600]"
+0x1002 0x71ce "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV530LE [Radeon X1600]"
+0x1002 0x71d5 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M66-P ATI Mobility Radeon X1700"
+0x1002 0x71d6 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|M66-XT ATI Mobility Radeon X1700"
+0x1002 0x71de "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|RV530LE [Radeon X1600]"
+0x1002 0x71e0 "unknown" "ATI Technologies Inc|RV530 [Radeon X1600] (Secondary)"
+0x1002 0x71e2 "unknown" "ATI Technologies Inc|RV530 [Radeon X1600] (Secondary)"
+0x1002 0x7240 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7241 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7242 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7243 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7244 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7245 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7246 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7247 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7248 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x7249 "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900 XT] Primary"
+0x1002 0x724a "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x724b "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x724c "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x724d "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [Radeon X1900]"
+0x1002 0x724e "Card:ATI Radeon (fbdev)" "ATI Technologies Inc|R580 [FireGL V7300/V7350] Primary (PCIE)"
+0x1002 0x7269 "unknown" "ATI Technologies Inc|R580 [Radeon X1900 XT] Secondary"
+0x1002 0x726e "unknown" "ATI Technologies Inc|R580 [FireGL V7300/V7350] Secondary (PCIE)"
+0x1002 0x7800 "unknown" "ATI Technologies Inc.| "
+0x1002 0x7833 "unknown" "ATI Technologies Inc.|Radeon 9100 IGP Host Bridge"
+0x1002 0x7834 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon 9000 XT IGP (AGP)"
+0x1002 0x7835 "Card:ATI Radeon (fglrx)" "ATI Technologies Inc.|Radeon Mobility 9200 IGP (RS350M) (AGP)"
+0x1002 0x7838 "unknown" "ATI Technologies Inc.|Radeon 9100 IGP PCI/AGP Bridge"
+0x1002 0x793b "snd-hda-intel" ""
+0x1002 0x7c37 "Card:ATI Radeon" "ATI Technologies Inc.|RV350 AQ Radeon 9600 SE"
+0x1002 0xcab0 "ati-agp" "ATI Technologies Inc.|CPU to PCI Bridge"
+0x1002 0xcab1 "unknown" "ATI Technologies Inc.|A3/U1 Slot1 CPU to PCI Bridge"
+0x1002 0xcab2 "ati-agp" "ATI Technologies Inc.|RS200/RS200M AGP Bridge [IGP 340M]"
+0x1002 0xcab3 "ati-agp" "ATI Technologies Inc.|RS250/RS250M AGP Bridge"
+0x1002 0xcbb2 "ati-agp" "ATI Technologies Inc.|CPU to PCI Bridge"
+0x1003 0x0201 "unknown" "ULSI Systems|US201"
+0x1004 0x0005 "unknown" "VLSI|82C592-FC1"
+0x1004 0x0006 "unknown" "VLSI|82C593-FC1"
+0x1004 0x0007 "unknown" "VLSI|82C594-AFC2"
+0x1004 0x0008 "unknown" "VLSI|82C596/7 [Wildcat]"
+0x1004 0x0009 "unknown" "VLSI|82C597-AFC2"
+0x1004 0x000c "unknown" "VLSI|82C541 [Lynx]"
+0x1004 0x000d "unknown" "VLSI|82C543 [Lynx]"
+0x1004 0x0100 "unknown" "VLSI Technology|CPU to PCI Bridge for notebook"
+0x1004 0x0101 "unknown" "VLSI|82C532"
+0x1004 0x0102 "unknown" "VLSI|82C534"
+0x1004 0x0103 "unknown" "VLSI|82C538"
+0x1004 0x0104 "unknown" "VLSI|82C535"
+0x1004 0x0105 "vlsi_ir" "VLSI|82C147"
+0x1004 0x0200 "unknown" "VLSI|82C975"
+0x1004 0x0280 "unknown" "VLSI|82C925"
+0x1004 0x0304 "unknown" "VLSI|QSound ThunderBird PCI Audio"
+0x1004 0x0305 "unknown" "VLSI|QSound ThunderBird PCI Audio Gameport"
+0x1004 0x0306 "unknown" "VLSI|QSound ThunderBird PCI Audio Support Registers"
+0x1004 0x0307 "unknown" "VLSI Technology Inc.|Thunderbird"
+0x1004 0x0308 "unknown" "VLSI Technology Inc.|Thunderbird"
+0x1004 0x0702 "unknown" "VLSI|VAS96011 [Golden Gate II]"
+0x1004 0x0703 "unknown" "VLSI Technology Inc.|Tollgate"
+0x1005 0x2064 "unknown" "Avance Logic Inc. [ALI]|ALG2032/2064"
+0x1005 0x2128 "unknown" "Avance Logic Inc. [ALI]|ALG2364A"
+0x1005 0x2301 "Card:Avance Logic 2301" "Avance Logic Inc. [ALI]|ALG2301"
+0x1005 0x2302 "Card:Avance Logic 2302" "Avance Logic Inc. [ALI]|ALG2302"
+0x1005 0x2364 "unknown" "Avance Logic Inc. [ALI]|ALG2364"
+0x1005 0x2464 "unknown" "Avance Logic Inc. [ALI]|ALG2364A"
+0x1005 0x2501 "unknown" "Avance Logic Inc. [ALI]|ALG2564A/25128A"
+0x100b 0x0001 "unknown" "National Semiconductor|DP83810"
+0x100b 0x0002 "ns87415" "National Semiconductor|87415"
+0x100b 0x000e "unknown" "National Semiconductor|87560 Legacy I/O"
+0x100b 0x000f "unknown" "National Semiconductor|OHCI Compliant FireWire Controller"
+0x100b 0x0011 "unknown" "National Semiconductor|National PCI System I/O"
+0x100b 0x0012 "unknown" "National Semiconductor|USB Controller"
+0x100b 0x001b "unknown" "National Semiconductor|LM4560 Advanced PCI Audio Accelerator"
+0x100b 0x0020 "natsemi" "National Semiconductor|DP83810 10/100 Ethernet"
+0x100b 0x0021 "unknown" "National Semiconductor|PC87200 PCI to ISA Bridge"
+0x100b 0x0022 "ns83820" "National Semiconductor|DP83820 10/100/1000 Ethernet"
+0x100b 0x0023 "unknown" "National Semiconductor| "
+0x100b 0x0028 "unknown" "National Semiconductor|CS5535 Host bridge"
+0x100b 0x002a "unknown" "National Semiconductor|CS5535 South Bridge"
+0x100b 0x002b "unknown" "National Semiconductor|CS5535 ISA bridge"
+0x100b 0x002d "cs5535" "National Semiconductor|CS5535 IDE"
+0x100b 0x002e "snd-cs5535audio" "National Semiconductor|CS5535 Audio"
+0x100b 0x002f "unknown" "National Semiconductor|CS5535 USB"
+0x100b 0x0030 "Card:NSC" "National Semiconductor|CS5535 Video [Redcloud]"
+0x100b 0x0035 "cassini" "National Semiconductor|DP83065 [Saturn] 10/100/1000 Ethernet Controller"
+0x100b 0x0104 "Card:NSC" "National Semiconductor|SC1400 Video"
+0x100b 0x0500 "scx200" "National Semiconductor|SCx200 Bridge"
+0x100b 0x0501 "unknown" "National Semiconductor|SCx200 SMI"
+0x100b 0x0502 "sc1200" "National Semiconductor|SCx200 IDE"
+0x100b 0x0503 "unknown" "National Semiconductor|SCx200 Audio"
+0x100b 0x0504 "Card:NSC" "National Semiconductor|SCx200 Video"
+0x100b 0x0505 "scx200" "National Semiconductor|SCx200 Bridge"
+0x100b 0x0510 "scx200" "National Semiconductor|SC1100 Bridge"
+0x100b 0x0511 "unknown" "National Semiconductor|SC1100 SMI"
+0x100b 0x0515 "scx200" "National Semiconductor|Wireless miniPCI Card (108Mbit)"
+0x100b 0xd001 "Card:ATI Mach64" "National Semiconductor|87410"
+0x100c 0x3202 "Card:ET4000 W32i, W32p (generic)" "Tseng Labs Inc.|ET4000/W32p rev A"
+0x100c 0x3205 "Card:ET4000 W32i, W32p (generic)" "Tseng Labs Inc.|ET4000/W32p rev B"
+0x100c 0x3206 "Card:ET4000 W32i, W32p (generic)" "Tseng Labs Inc.|ET4000/W32p rev C"
+0x100c 0x3207 "Card:ET4000 W32i, W32p (generic)" "Tseng Labs Inc.|ET4000/W32p rev D"
+0x100c 0x3208 "Card:ET6000 (generic)" "Tseng Labs Inc.|ET6000"
+0x100c 0x4702 "Card:ET6000 (generic)" "Tseng Labs Inc.|ET6300"
+0x100e 0x0564 "unknown" "Weitek|STPC Client Host Bridge"
+0x100e 0x55cc "unknown" "Weitek|STPC Client South Bridge"
+0x100e 0x9000 "Card:Diamond Viper PCI 2Mb" "Weitek|P9000 Viper"
+0x100e 0x9001 "Card:Diamond Viper PCI 2Mb" "Weitek|P9000 Viper"
+0x100e 0x9002 "Card:Diamond Viper PCI 2Mb" "Weitek|P9000 Viper"
+0x100e 0x9100 "Card:Diamond Viper PCI 2Mb" "Weitek|P9100 Viper Pro/SE"
+0x1011 0x0001 "tulip" "Digital Equipment Corp.|DECchip 21050"
+0x1011 0x0002 "de2104x" "Digital Equipment Corp.|DECchip 21040 [Tulip]"
+0x1011 0x0004 "unknown" "Digital Equipment Corp.|21030/TGA"
+0x1011 0x0007 "unknown" "Digital Equipment Corp.|NVRAM [Zephyr NVRAM]"
+0x1011 0x0008 "unknown" "Digital Equipment Corp.|KZPSA [KZPSA]"
+0x1011 0x0009 0x1025 0x0310 "tulip" "Digital Equipment Corp.|21140 Fast Ethernet"
+0x1011 0x0009 0x10b8 0x2001 "tulip" "Digital Equipment Corp.|SMC9332BDT EtherPower 10/100"
+0x1011 0x0009 0x10b8 0x2002 "tulip" "Digital Equipment Corp.|SMC9332BVT EtherPower T4 10/100"
+0x1011 0x0009 0x10b8 0x2003 "tulip" "Digital Equipment Corp.|SMC9334BDT EtherPower 10/100 (1-port)"
+0x1011 0x0009 0x1109 0x2400 "tulip" "Digital Equipment Corp.|ANA-6944A/TX Fast Ethernet"
+0x1011 0x0009 0x1112 0x2300 "tulip" "Digital Equipment Corp.|RNS2300 Fast Ethernet"
+0x1011 0x0009 0x1112 0x2320 "tulip" "Digital Equipment Corp.|RNS2320 Fast Ethernet"
+0x1011 0x0009 0x1112 0x2340 "tulip" "Digital Equipment Corp.|RNS2340 Fast Ethernet"
+0x1011 0x0009 0x1113 0x1207 "tulip" "Digital Equipment Corp.|EN-1207-TX Fast Ethernet"
+0x1011 0x0009 0x1186 0x1100 "tulip" "Digital Equipment Corp.|DFE-500TX Fast Ethernet"
+0x1011 0x0009 0x1186 0x1112 "tulip" "Digital Equipment Corp.|DFE-570TX Fast Ethernet"
+0x1011 0x0009 0x1186 0x1140 "tulip" "Digital Equipment Corp.|DFE-660 Cardbus Ethernet 10/100"
+0x1011 0x0009 0x1186 0x1142 "tulip" "Digital Equipment Corp.|DFE-660 Cardbus Ethernet 10/100"
+0x1011 0x0009 0x11f6 0x0503 "tulip" "Digital Equipment Corp.|Freedomline Fast Ethernet"
+0x1011 0x0009 0x1282 0x9100 "tulip" "Digital Equipment Corp.|AEF-380TXD Fast Ethernet"
+0x1011 0x0009 0x1376 0xffff "lmc" "Digital Equipment Corp.|"
+0x1011 0x0009 0x1385 0x1100 "tulip" "Digital Equipment Corp.|FA310TX Fast Ethernet"
+0x1011 0x0009 0x2646 0x0001 "tulip" "Digital Equipment Corp.|KNE100TX Fast Ethernet"
+0x1011 0x0009 0xffff 0x1376 "lmc" "Digital Equipment Corp.|"
+0x1011 0x0009 "tulip" "Digital Equipment Corp.|DECchip 21140 [FasterNet]"
+0x1011 0x000a "unknown" "Digital Equipment Corp.|21230 Video Codec"
+0x1011 0x000c "unknown" "Digital Equipment Corp.|DC21130 PCI Integrated Graphics & Video Accel"
+0x1011 0x000d "Card:Digital 8-plane TGA (Generic)" "Digital Equipment Corp.|PBXGB [TGA2]"
+0x1011 0x000f "defxx" "Digital Equipment Corp.|DEFPA"
+0x1011 0x0014 "de2104x" "Digital Equipment Corp.|DECchip 21041 [Tulip Pass 3]"
+0x1011 0x0016 "unknown" "Digital Equipment Corp.|DGLPB [OPPO]"
+0x1011 0x0017 "unknown" "Digital Equipment Corp.|PV-PCI Graphics Controller (ZLXp-L)"
+0x1011 0x0019 "tulip" "Digital Equipment Corp.|DECchip 21142/43"
+0x1011 0x001a "acenic" "Farallon|PN9000SX"
+0x1011 0x0021 "tulip" "Digital Equipment Corp.|DECchip 21052"
+0x1011 0x0022 "tulip" "Digital Equipment Corp.|DECchip 21150"
+0x1011 0x0023 "unknown" "Digital Equipment Corp.|DECchip 21150"
+0x1011 0x0024 "unknown" "Digital Equipment Corp.|DECchip 21152"
+0x1011 0x0025 "unknown" "Digital Equipment Corp.|DECchip 21153"
+0x1011 0x0026 "unknown" "Digital Equipment Corp.|DECchip 21154"
+0x1011 0x0034 "unknown" "Digital Equipment Corp.|Modem56 CardBus"
+0x1011 0x0045 "unknown" "Digital Equipment Corp.|DECchip 21553"
+0x1011 0x0046 0x0e11 0x4050 "cpqarray" "Digital Equipment Corp.|DECchip 21554 [Compaq Smart Array Controller]"
+0x1011 0x0046 0x0e11 0x4051 "cpqarray" "Digital Equipment Corp.|DECchip 21554 [Compaq Smart Array Controller]"
+0x1011 0x0046 0x0e11 0x4058 "cpqarray" "Digital Equipment Corp.|DECchip 21554 [Compaq Smart Array Controller]"
+0x1011 0x0046 0x103c 0x10c2 "aacraid" "HP|NetRAID-4M"
+0x1011 0x0046 0x12d9 0x000a "cpqarray" "Digital Equipment Corp.|VoIP PCI Gateway"
+0x1011 0x0046 0x4c53 0x1050 "cpqarray" "Digital Equipment Corp.|CT7 mainboard"
+0x1011 0x0046 0x4c53 0x1051 "cpqarray" "Digital Equipment Corp.|CE7 mainboard"
+0x1011 0x0046 0x9005 0x0364 "aacraid" "Adaptec|5400S"
+0x1011 0x0046 0x9005 0x0365 "aacraid" "Adaptec|5400S"
+0x1011 0x0046 0x9005 0x1364 "aacraid" "Digital Equipment Corp.|Dell PowerEdge RAID Controller 2"
+0x1011 0x0046 0x9005 0x1365 "aacraid" "Digital Equipment Corp.|Dell PowerEdge RAID Controller 2"
+0x1011 0x0046 0xe4bf 0x1000 "unknown" "Digital Equipment Corp.|CC8-1-BLUES"
+0x1011 0x0046 "cpqarray" "Digital Equipment Corp.|DECchip 21554 [Compaq Smart Array Controller]"
+0x1011 0x0365 "aacraid" "Digital Equipment Corp.|5400S"
+0x1011 0x0e11 "cpqarray" "Digital Equipment Corp.|Integrated Smart Array"
+0x1011 0x103c "aacraid" "Digital Equipment Corp.|NetRAID-4M"
+0x1011 0x1065 0x1069 0x0020 "DAC960" "Digital Equipment Corp.|DAC960P / DAC1164P"
+0x1011 0x1065 0x1244 0x0800 "ISDN:c4" "Digital Equipment Corp.|21285 Core Logic for SA-110 Microprocessor"
+0x1011 0x1065 0x1244 0x1100 "ISDN:c4" "Digital Equipment Corp.|21285 Core Logic for SA-110 Microprocessor"
+0x1011 0x1065 "DAC960" "Digital Equipment Corp.|RAID Controller"
+0x1011 0x10c2 "aacraid" "Digital Equipment Corp.|NetRAID-4M"
+0x1011 0x1364 "aacraid" "Digital Equipment Corp.|PowerEdge RAID Controller 2"
+0x1011 0x1365 "aacraid" "Digital Equipment Corp.|PowerEdge RAID Controller 2"
+0x1011 0x4050 "cpqarray" "Digital Equipment Corp.|Integrated Smart Array"
+0x1011 0x4051 "cpqarray" "Digital Equipment Corp.|Integrated Smart Array"
+0x1011 0x4058 "cpqarray" "Digital Equipment Corp.|Integrated Smart Array"
+0x1011 0x9005 "aacraid" "Digital Equipment Corp.|5400S"
+0x1013 0x0038 "Card:Cirrus Logic GD754x (laptop)" "Cirrus Logic|GD 7548"
+0x1013 0x0040 "Card:Cirrus Logic GD754x (laptop)" "Cirrus Logic|GD7555 Flat Panel GUI Accelerator"
+0x1013 0x0045 "unknown" "Cirrus Logic|A CL-MD5620DT-QC-B WINCOM V9.0 56K"
+0x1013 0x004c "Card:Cirrus Logic GD754x (laptop)" "Cirrus Logic|GD7556 Video/Graphics LCD/CRT Ctrlr"
+0x1013 0x00a0 "Card:Cirrus Logic GD543x" "Cirrus Logic|GD 5430/40 [Alpine]"
+0x1013 0x00a2 "Card:Cirrus Logic GD543x" "Cirrus Logic|GD 5432 [Alpine]"
+0x1013 0x00a4 "Card:Cirrus Logic GD543x" "Cirrus Logic|GD 5434-4 [Alpine]"
+0x1013 0x00a8 "Card:Cirrus Logic GD543x" "Cirrus Logic|GD 5434-8 [Alpine]"
+0x1013 0x00ac "Card:Cirrus Logic GD543x" "Cirrus Logic|GD 5436 [Alpine]"
+0x1013 0x00b0 "Card:Cirrus Logic GD544x" "Cirrus Logic|GD 5440"
+0x1013 0x00b8 "Card:Cirrus Logic GD544x" "Cirrus Logic|GD 5446"
+0x1013 0x00bc "Card:Cirrus Logic GD5480" "Cirrus Logic|GD 5480"
+0x1013 0x00d0 "Card:Cirrus Logic GD5462" "Cirrus Logic|GD 5462"
+0x1013 0x00d2 "Card:Cirrus Logic GD5462" "Cirrus Logic|GD 5462 [Laguna I]"
+0x1013 0x00d4 "Card:Cirrus Logic GD5464" "Cirrus Logic|GD 5464 [Laguna]"
+0x1013 0x00d5 "Card:Cirrus Logic GD5464" "Cirrus Logic|GD5464BD"
+0x1013 0x00d6 "Card:Cirrus Logic GD5465" "Cirrus Logic|GD 5465 [Laguna]"
+0x1013 0x00e8 "Card:Cirrus Logic GD543x" "Cirrus Logic|GD 5436U"
+0x1013 0x1010 "cs46xx" "Cirrus Logic|CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]"
+0x1013 0x1014 "cs46xx" "Cirrus Logic|CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]"
+0x1013 0x1100 "pd6729" "Cirrus Logic|CL 6729"
+0x1013 0x1110 "yenta_socket" "Cirrus Logic|PD 6832"
+0x1013 0x1112 "yenta_socket" "Cirrus Logic|PD 6834 PCMCIA/CardBus Ctrlr"
+0x1013 0x1113 "yenta_socket" "Cirrus Logic|PD 6833 PCMCIA/CardBus Ctrlr"
+0x1013 0x1200 "Card:Cirrus Logic GD754x (laptop)" "Cirrus Logic|GD 7542 [Nordic]"
+0x1013 0x1202 "Card:Cirrus Logic GD754x (laptop)" "Cirrus Logic|GD 7543 [Viking]"
+0x1013 0x1204 "Card:Cirrus Logic GD754x (laptop)" "Cirrus Logic|GD 7541 [Nordic Light]"
+0x1013 0x4000 "unknown" "Cirrus Logic|MD 5620 [CLM Data Fax Voice]"
+0x1013 0x4400 "unknown" "Cirrus Logic|CD 4400"
+0x1013 0x6001 "cs46xx" "Cirrus Logic|Cirrus CS4610/1 CrystalClear SoundFusion Audio"
+0x1013 0x6003 "snd-cs46xx" "Cirrus Logic|CS 4614/22/24 [CrystalClear SoundFusion Audio Accelerator]"
+0x1013 0x6004 "cs46xx" "Cirrus Logic|unknown (? CrystalClear SoundFusion Audio Accelerator?)"
+0x1013 0x6005 "cs4281" "Cirrus Logic|Crystal CS4281 PCI Audio"
+0x1014 0x0002 "unknown" "IBM|PCI to MCA Bridge"
+0x1014 0x0005 "unknown" "IBM|Alta Lite"
+0x1014 0x0007 "unknown" "IBM|Alta MP"
+0x1014 0x000a "unknown" "IBM|Fire Coral"
+0x1014 0x0017 "unknown" "IBM|CPU to PCI Bridge"
+0x1014 0x0018 "lanstreamer" "IBM|TR Auto LANstreamer"
+0x1014 0x001b "unknown" "IBM|GXT-150P"
+0x1014 0x001c "unknown" "IBM|Carrera"
+0x1014 0x001d "unknown" "IBM|82G2675"
+0x1014 0x0020 "unknown" "IBM|MCA"
+0x1014 0x0022 "unknown" "IBM|IBM27-82351"
+0x1014 0x002d "unknown" "IBM|Python"
+0x1014 0x002e "ips" "IBM|ServeRAID controller"
+0x1014 0x0031 "unknown" "IBM|2 Port Serial Adapter"
+0x1014 0x0036 "unknown" "IBM|Miami"
+0x1014 0x0037 "unknown" "International Business Machines Corp.|IBM27-82660 PowerPC to PCI Bridge and Memory Ctrlr"
+0x1014 0x003a "unknown" "IBM|CPU to PCI Bridge"
+0x1014 0x003c "unknown" "IBM|GXT250P/GXT255P Graphics Adapter"
+0x1014 0x003e "olympic" "IBM|16/4 Token ring UTP/STP controller"
+0x1014 0x0045 "unknown" "IBM|SSA Adapter"
+0x1014 0x0046 "unknown" "IBM|MPIC interrupt controller"
+0x1014 0x0047 "unknown" "IBM|PCI to PCI Bridge"
+0x1014 0x0048 "unknown" "IBM|PCI to PCI Bridge"
+0x1014 0x0049 "unknown" "IBM|Warhead SCSI Controller"
+0x1014 0x004e "unknown" "IBM|ATM Controller (14104e00)"
+0x1014 0x004f "unknown" "IBM|ATM Controller (14104f00)"
+0x1014 0x0050 "unknown" "IBM|ATM Controller (14105000)"
+0x1014 0x0053 "unknown" "IBM|25 MBit ATM Controller"
+0x1014 0x0054 "unknown" "IBM|GXT500P/GXT550P Graphics Adapter"
+0x1014 0x0057 "unknown" "IBM|MPEG PCI Bridge"
+0x1014 0x0058 "unknown" "IBM|SSA Adapter [Advanced SerialRAID/X]"
+0x1014 0x005c "eepro100" "IBM|i82557B 10/100 PCI Ethernet Adapter"
+0x1014 0x005d "unknown" "International Business Machines Corp.|05J3506 TCP/IP networking device"
+0x1014 0x005e "unknown" "IBM|GXT800P Graphics Adapter"
+0x1014 0x007c "unknown" "IBM|ATM Controller (14107c00)"
+0x1014 0x007d "unknown" "IBM|3780IDSP [MWave]"
+0x1014 0x008b "unknown" "IBM|EADS PCI to PCI Bridge"
+0x1014 0x008e "unknown" "IBM|GXT3000P Graphics Adapter"
+0x1014 0x0090 "unknown" "IBM|GXT 3000P"
+0x1014 0x0091 "unknown" "IBM|SSA Adapter"
+0x1014 0x0095 "unknown" "IBM|20H2999 PCI Docking Bridge"
+0x1014 0x0096 "unknown" "IBM|Chukar chipset SCSI controller"
+0x1014 0x009f "unknown" "IBM|PCI 4758 Cryptographic Accelerator"
+0x1014 0x00a1 "unknown" "International Business Machines Corp.|PowerNP NPr2.7 ATM support device"
+0x1014 0x00a5 "unknown" "IBM|ATM Controller (1410a500)"
+0x1014 0x00a6 "unknown" "IBM|ATM 155MBPS MM Controller (1410a600)"
+0x1014 0x00b7 "unknown" "IBM|256-bit Graphics Rasterizer [Fire GL1]"
+0x1014 0x00b8 "unknown" "IBM|GXT2000P Graphics Adapter"
+0x1014 0x00be "unknown" "IBM|ATM 622MBPS Controller (1410be00)"
+0x1014 0x00ce "unknown" "International Business Machines Corp.|02li537 Adapter 2 Token Ring Card"
+0x1014 0x00dc "unknown" "IBM|Advanced Systems Management Adapter (ASMA)"
+0x1014 0x00f9 "unknown" "International Business Machines Corp.|CPC700 Memory Controller and PCI Bridge"
+0x1014 0x00fc "unknown" "International Business Machines Corp.|CPC710 PCI-64 Bridge"
+0x1014 0x0104 "unknown" "IBM|Gigabit Ethernet-SX Adapter"
+0x1014 0x0105 "unknown" "International Business Machines Corp.|CPC710 PCI-32 Bridge"
+0x1014 0x010f "ibmasm" "IBM|Remote Supervisor Adapter (RSA)"
+0x1014 0x011b "unknown" "International Business Machines Corp.|Raid controller"
+0x1014 0x0132 "snd-cs46xx" "Thinkpad 570"
+0x1014 0x0142 "unknown" "IBM|Yotta Video Compositor Input"
+0x1014 0x0144 "unknown" "IBM|Yotta Video Compositor Output"
+0x1014 0x0153 "snd-cs46xx" "Thinkpad 600X/A20/T20"
+0x1014 0x0156 "unknown" "IBM|405GP PLB to PCI Bridge"
+0x1014 0x015e "unknown" "IBM|622Mbps ATM PCI Adapter"
+0x1014 0x0160 "unknown" "IBM|64bit/66MHz PCI ATM 155 MMF"
+0x1014 0x016e "unknown" "IBM|GXT4000P Graphics Adapter"
+0x1014 0x0170 "unknown" "IBM|RC1000 / GT 1000"
+0x1014 0x017d "unknown" "IBM|GXT300P Graphics Adapter"
+0x1014 0x0180 "ipr" "IBM|Snipe chipset SCSI controller"
+0x1014 0x0188 "unknown" "IBM|EADS-X PCI-X to PCI-X Bridge"
+0x1014 0x01a7 "unknown" "International Business Machines Corp.|IBM 133 PCI-X Bridge R1.1"
+0x1014 0x01bd "ips" "IBM|ServeRAID controller"
+0x1014 0x01be "ips" "IBM|ServeRAID-4M"
+0x1014 0x01bf "ips" "IBM|ServeRAID-4L"
+0x1014 0x01c1 "unknown" "IBM|64bit/66MHz PCI ATM 155 UTP"
+0x1014 0x01e6 "leedslite" "IBM|Cryptographic Accelerator"
+0x1014 0x01ef "unknown" "International Business Machines Corp.|440GP PLB to PCI-X Bridge"
+0x1014 0x01ff "unknown" "IBM|10/100 Mbps Ethernet"
+0x1014 0x0208 "ips" "IBM|ServeRAID-4Mx"
+0x1014 0x020e "ips" "IBM|ServeRAID-4Lx"
+0x1014 0x0219 "unknown" "IBM|Multiport Serial Adapter"
+0x1014 0x021b "unknown" "IBM|GXT6500P Graphics Adapter"
+0x1014 0x021c "unknown" "IBM|GXT4500P Graphics Adapter"
+0x1014 0x022e "ips" "IBM|ServeRAID-4H"
+0x1014 0x0233 "unknown" "IBM|GXT135P Graphics Adapter"
+0x1014 0x0246 "ibmphp" "IBM|"
+0x1014 0x0266 "unknown" "IBM|PCI-X Dual Channel SCSI"
+0x1014 0x0268 "unknown" "IBM|Gigabit Ethernet-SX Adapter (PCI-X)"
+0x1014 0x0269 "unknown" "IBM|10/100/1000 Base-TX Ethernet Adapter (PCI-X)"
+0x1014 0x028c 0x1014 0x028d "ipr" "IBM|Dual Channel PCI-X DDR SAS RAID Adapter (572E)"
+0x1014 0x028c 0x1014 0x02be "ipr" "IBM|Dual Channel PCI-X DDR U320 SCSI RAID Adapter (571B)"
+0x1014 0x028c 0x1014 0x02c0 "ipr" "IBM|Dual Channel PCI-X DDR U320 SCSI Adapter (571A)"
+0x1014 0x028c 0x1014 0x030d "ipr" "IBM|Dual Channel PCI-X DDR U320 SCSI Adapter (575B)"
+0x1014 0x028c "unknown" "IBM|Citrine chipset SCSI controller"
+0x1014 0x0295 "unknown" "International Business Machines Corp.|NECSCE 11508082 IBM SurePOS Riser Card Function 0"
+0x1014 0x0297 "unknown" "International Business Machines Corp.|NECSCE 11508082 IBM SurePOS Riser Card Function 1 (UARTs)"
+0x1014 0x02a1 "unknown" "IBM|Calgary PCI-X Host Bridge"
+0x1014 0x02bd "ipr" "IBM|Obsidian chipset SCSI controller"
+0x1014 0x0302 "unknown" "IBM|XA-32 chipset [Summit]"
+0x1014 0x0308 "unknown" "IBM|CalIOC2 PCI-E Root Port"
+0x1014 0x0314 "unknown" "IBM|ZISC 036 Neural accelerator card"
+0x1014 0x1010 "snd-cs46xx" "Thinkpad 600E (unsupported)"
+0x1014 0x3022 "unknown" "IBM|QLA3022 Network Adapter"
+0x1014 0x4022 "unknown" "IBM|QLA3022 Network Adapter"
+0x1014 0xffff "unknown" "IBM|MPIC-2 interrupt controller"
+0x1017 0x5343 "unknown" "SPEA Software AG|SPEA 3D Accelerator"
+0x101a 0x0005 "hp100" "AT&T GIS (NCR)|100VG ethernet"
+0x101a 0x0009 "unknown" "NCR/AT&T GIS|Altera FLEX ??? Raid Controller ???"
+0x101c 0x0193 "unknown" "Western Digital|33C193A"
+0x101c 0x0196 "unknown" "Western Digital|33C196A"
+0x101c 0x0197 "unknown" "Western Digital|33C197A"
+0x101c 0x0296 "unknown" "Western Digital|33C296A"
+0x101c 0x3193 "unknown" "Western Digital|7193"
+0x101c 0x3197 "unknown" "Western Digital|7197"
+0x101c 0x3296 "unknown" "Western Digital|33C296A"
+0x101c 0x4296 "unknown" "Western Digital|34C296"
+0x101c 0x9710 "unknown" "Western Digital|Pipeline 9710"
+0x101c 0x9712 "unknown" "Western Digital|Pipeline 9712"
+0x101c 0xc24a "unknown" "Western Digital|90C"
+0x101e 0x0009 "unknown" "American Megatrends Inc.|MegaRAID 428 Ultra RAID Controller (rev 03)"
+0x101e 0x0471 "megaraid" "American Megatrends Inc.|PowerEdge RAID Controller 3/QC"
+0x101e 0x0475 "megaraid" "American Megatrends Inc.|PowerEdge RAID Controller 3/SC"
+0x101e 0x0493 "megaraid" "American Megatrends Inc.|PowerEdge RAID Controller 3/DC"
+0x101e 0x0511 "megaraid" "American Megatrends Inc.|PowerEdge Cost Effective RAID Controller ATA100/4Ch"
+0x101e 0x0767 "megarac" "American Megatrends Inc.|Dell Remote Assistant Card 2"
+0x101e 0x101e "megarac" "American Megatrends Inc.|Dell Remote Assistant Card 2"
+0x101e 0x1028 "megaraid" "American Megatrends Inc.|PowerEdge RAID Controller 3/QC"
+0x101e 0x1960 "megaraid_mbox" "American Megatrends Inc.|PowerEdge RAID Controller 3/QC"
+0x101e 0x9010 "megaraid" "American Megatrends Inc.|MegaRAID"
+0x101e 0x9030 "unknown" "American Megatrends Inc.|EIDE Controller"
+0x101e 0x9031 "unknown" "American Megatrends Inc.|EIDE Controller"
+0x101e 0x9032 "unknown" "American Megatrends Inc.|EIDE & SCSI Controller"
+0x101e 0x9033 "unknown" "American Megatrends Inc.|SCSI Controller"
+0x101e 0x9040 "unknown" "American Megatrends Inc.|Multimedia card"
+0x101e 0x9060 "megaraid" "American Megatrends Inc.|MegaRAID 434 Ultra GT RAID Controller"
+0x101e 0x9063 "megaraid" "American Megatrends Inc.|MegaRAC"
+0x1022 0x1100 "unknown" "Advanced Micro Devices|K8 [Athlon64/Opteron] HyperTransport Technology Configuration"
+0x1022 0x1101 "unknown" "Advanced Micro Devices|K8 [Athlon64/Opteron] Address Map"
+0x1022 0x1102 "unknown" "Advanced Micro Devices|K8 [Athlon64/Opteron] DRAM Controller"
+0x1022 0x1103 "amd64-agp" "Advanced Micro Devices|K8 [Athlon64/Opteron] Miscellaneous Control"
+0x1022 0x2000 "pcnet32" "Advanced Micro Devices|79c970 [PCnet LANCE]"
+0x1022 0x2001 "pcnet32" "Advanced Micro Devices|79c978 [HomePNA]"
+0x1022 0x2003 "unknown" "Advanced Micro Devices|Am 1771 MBW [Alchemy]"
+0x1022 0x2020 "tmscsim" "Advanced Micro Devices|53c974 [PCscsi]"
+0x1022 0x2040 "unknown" "Advanced Micro Devices|79c974"
+0x1022 0x2081 "unknown" "Advanced Micro Devices|Geode LX Video"
+0x1022 0x2082 "hw_random" "Advanced Micro Devices|Geode LX AES Security Block"
+0x1022 0x208f "unknown" "Advanced Micro Devices|CS5536 GeodeLink PCI South Bridge"
+0x1022 0x2090 "unknown" "Advanced Micro Devices|CS5536 [Geode companion] ISA"
+0x1022 0x2091 "unknown" "Advanced Micro Devices|CS5536 [Geode companion] FLASH"
+0x1022 0x2093 "snd-cs5535audio" "Advanced Micro Devices|CS5536 Audio"
+0x1022 0x2094 "unknown" "Advanced Micro Devices|CS5536 [Geode companion] OHC"
+0x1022 0x2095 "unknown" "Advanced Micro Devices|CS5536 [Geode companion] EHC"
+0x1022 0x2096 "unknown" "Advanced Micro Devices|CS5536 [Geode companion] UDC"
+0x1022 0x2097 "unknown" "Advanced Micro Devices|CS5536 [Geode companion] UOC"
+0x1022 0x209a "amd74xx" "Advanced Micro Devices|CS5536 [Geode companion] IDE"
+0x1022 0x3000 "unknown" "Advanced Micro Devices|ELanSC520 Microcontroller"
+0x1022 0x7004 "unknown" "Advanced Micro Devices|AMD-751 CPU to PCI Bridge"
+0x1022 0x7006 "amd-k7-agp" "Advanced Micro Devices|AMD-751 [Irongate] System Controller"
+0x1022 0x7007 "unknown" "Advanced Micro Devices|AMD-751 PCI to PCI bridge"
+0x1022 0x700a "unknown" "Advanced Micro Devices|AMD-IGR4 AGP Host to PCI Bridge"
+0x1022 0x700b "unknown" "Advanced Micro Devices|AMD-IGR4 PCI to PCI Bridge"
+0x1022 0x700c "amd-k7-agp" "Advanced Micro Devices|AMD-762 CPU to PCI Bridge (SMP chipset)"
+0x1022 0x700d "unknown" "Advanced Micro Devices|AMD-762 CPU to PCI Bridge (AGP 4x)"
+0x1022 0x700e "amd-k7-agp" "Advanced Micro Devices|AMD-761 North Bridge"
+0x1022 0x700f "unknown" "Advanced Micro Devices|AMD-761 CPU to AGP Bridge (AGP 4x)"
+0x1022 0x7400 "unknown" "Advanced Micro Devices|AMD-755 PCI to ISA bridge"
+0x1022 0x7401 "amd74xx" "Advanced Micro Devices|AMD-755 (Cobra) Bus Master IDE controller"
+0x1022 0x7403 "unknown" "Advanced Micro Devices|AMD-755 Power Management Controller"
+0x1022 0x7404 "ohci-hcd" "Advanced Micro Devices|AMD-755 PCI to USB Open Host Controller"
+0x1022 0x7408 "unknown" "Advanced Micro Devices|AMD-756 PCI to ISA bridge"
+0x1022 0x7409 "amd74xx" "Advanced Micro Devices|AMD-756 (Viper) Bus Master IDE controller"
+0x1022 0x740b "i2c-amd756" "Advanced Micro Devices|AMD-756 Power Management Controller"
+0x1022 0x740c "ohci-hcd" "Advanced Micro Devices|AMD-756 PCI to USB Open Host Controller"
+0x1022 0x7410 "amd76xrom" "Advanced Micro Devices|AMD-765 [Viper] ISA"
+0x1022 0x7411 "amd74xx" "Advanced Micro Devices|AMD-765 [Viper] IDE"
+0x1022 0x7412 "unknown" "Advanced Micro Devices|AMD-766 USB Controller"
+0x1022 0x7413 "i2c-amd756" "Advanced Micro Devices|AMD-765 [Viper] ACPI"
+0x1022 0x7414 "ohci-hcd" "Advanced Micro Devices|AMD-765 [Viper] USB"
+0x1022 0x7440 "amd76xrom" "Advanced Micro Devices|AMD-768 PCI to ISA Bridge"
+0x1022 0x7441 "amd74xx" "Advanced Micro Devices|AMD-768 EIDE Controller"
+0x1022 0x7443 "hw_random" "Advanced Micro Devices|AMD-768 ACPI Controller"
+0x1022 0x7445 "i810_audio" "Advanced Micro Devices|AMD-768 Audio"
+0x1022 0x7446 "slamr" "Advanced Micro Devices|AMD-768 [Opus] MC97 Modem (Smart Link HAMR5600 compatible)"
+0x1022 0x7448 "unknown" "Advanced Micro Devices|AMD-768 PCI to PCI Bridge?"
+0x1022 0x7449 "ohci-hcd" "Advanced Micro Devices|AMD-768 USB Controller"
+0x1022 0x7450 "unknown" "Advanced Micro Devices|AMD-8131 PCI-X Bridge"
+0x1022 0x7451 "unknown" "Advanced Micro Devices|AMD-8131 PCI-X APIC"
+0x1022 0x7454 "amd64-agp" "Advanced Micro Devices|AMD-8151 System Controller"
+0x1022 0x7455 "hw_random" "Advanced Micro Devices|AMD-8151 AGP Bridge"
+0x1022 0x7458 "unknown" "Advanced Micro Devices|AMD-8132 PCI-X Bridge"
+0x1022 0x7459 "unknown" "Advanced Micro Devices|AMD-8132 PCI-X IOAPIC"
+0x1022 0x7460 "unknown" "Advanced Micro Devices|AMD-8111 PCI"
+0x1022 0x7461 "ohci-hcd" "Advanced Micro Devices|AMD-8111 USB"
+0x1022 0x7462 "amd8111e" "Advanced Micro Devices|AMD-8111 Ethernet"
+0x1022 0x7463 "unknown" "Advanced Micro Devices|Enhanced USB Controller"
+0x1022 0x7464 "ohci-hcd" "Advanced Micro Devices|AMD-8111 USB"
+0x1022 0x7468 "amd76xrom" "Advanced Micro Devices|AMD-8111 LPC"
+0x1022 0x7469 "amd74xx" "Advanced Micro Devices|AMD-8111 IDE"
+0x1022 0x746a "i2c-amd8111" "Advanced Micro Devices|AMD-8111 SMBus 2.0"
+0x1022 0x746b "hw_random" "Advanced Micro Devices|AMD-8111 ACPI"
+0x1022 0x746d "snd-intel8x0" "Advanced Micro Devices|AMD-8111 AC97 Audio"
+0x1022 0x746e "unknown" "Advanced Micro Devices|AMD-8111 MC97 Modem"
+0x1022 0x756b "unknown" "Advanced Micro Devices|AMD-8111 ACPI"
+0x1023 0x0194 "unknown" "Trident Microsystems|82C194"
+0x1023 0x2000 "snd-trident" "Trident Microsystems|4DWave DX"
+0x1023 0x2001 "snd-trident" "Trident Microsystems|4DWave NX"
+0x1023 0x2100 "Card:Trident CyberBlade (generic)" "Trident Microsystems|Cyber-XP4 Video Accelerator"
+0x1023 0x2200 "unknown" "Trident Microsystems|XGI Volari XP5"
+0x1023 0x7018 "snd-trident" "Silicon Integrated Systems [SiS]|SI7018 PCI Audio"
+0x1023 0x8200 "Card:VESA driver (generic)" "Trident Microsystems|TVGA 8200LX"
+0x1023 0x8400 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/i7"
+0x1023 0x8420 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/i7d"
+0x1023 0x8500 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/i1"
+0x1023 0x8520 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade i1"
+0x1023 0x8600 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/Ai1"
+0x1023 0x8620 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/DSTN/Ai1"
+0x1023 0x8800 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/XP/Ai1"
+0x1023 0x8820 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/XP/DSTN/Ai1"
+0x1023 0x8900 "Card:Trident 8900/9000 (generic)" "Trident Microsystems|TVGA 8900B/8900C/8900CL"
+0x1023 0x9000 "Card:VESA driver (generic)" "Trident Microsystems|TVGA 9000/9000i"
+0x1023 0x9100 "Card:VESA driver (generic)" "Trident Microsystems|TVGA 9100B"
+0x1023 0x9200 "Card:VESA driver (generic)" "Trident Microsystems|TVGA 9400CXi/r"
+0x1023 0x9320 "Card:Trident Cyber 9320 (generic)" "Trident Microsystems|TGUI 9320"
+0x1023 0x9350 "Card:Trident (generic)" "Trident Microsystems|GUI Accelerator"
+0x1023 0x9360 "Card:Trident (generic)" "Trident Microsystems|Flat panel GUI Accelerator"
+0x1023 0x9382 "Card:Trident Cyber 9382 (generic)" "Trident Microsystems|Cyber 9382 [Reference design]"
+0x1023 0x9383 "Card:Trident (generic)" "Trident Microsystems|Cyber 9383 [Reference design]"
+0x1023 0x9385 "Card:Trident Cyber 9385 (generic)" "Trident Microsystems|Cyber 9385 [Reference design]"
+0x1023 0x9386 "Card:Trident (generic)" "Trident Microsystems|Cyber 9386"
+0x1023 0x9388 "Card:Trident Cyber 9388 (generic)" "Trident Microsystems|Cyber 9388"
+0x1023 0x9397 "Card:Trident Cyber 9397 (generic)" "Trident Microsystems|Cyber 9397"
+0x1023 0x939a "Card:Trident Cyber 9397 DVD (generic)" "Trident Microsystems|Cyber 9397DVD"
+0x1023 0x9420 "Card:Trident TGUI9420DGi (generic)" "Trident Microsystems|TGUI 9420"
+0x1023 0x9430 "Card:Trident TGUI9430DGi (generic)" "Trident Microsystems|TGUI 9430"
+0x1023 0x9440 "Card:Trident TGUI9440 (generic)" "Trident Microsystems|TGUI 9440"
+0x1023 0x9460 "Card:Trident (generic)" "Trident Microsystems|TGUI 9460"
+0x1023 0x9470 "Card:Trident (generic)" "Trident Microsystems|TGUI 9470"
+0x1023 0x9520 "Card:Trident Cyber 9520 (generic)" "Trident Microsystems|Cyber 9520"
+0x1023 0x9525 "Card:Trident Cyber 9525 (generic)" "Trident Microsystems|Cyber 9525"
+0x1023 0x9540 "Card:Trident (generic)" "Trident Microsystems|Cyber 9540"
+0x1023 0x9660 "Card:Trident TGUI9660 (generic)" "Trident Microsystems|TGUI 9660/968x/968x"
+0x1023 0x9680 "Card:Trident TGUI9680 (generic)" "Trident Microsystems|TGUI 9680"
+0x1023 0x9682 "Card:Trident TGUI9682 (generic)" "Trident Microsystems|TGUI 9682"
+0x1023 0x9683 "Card:Trident (generic)" "Trident Microsystems|TGUI 9683"
+0x1023 0x9685 "Card:Trident TGUI9685 (generic)" "Trident Microsystems|ProVIDIA 9685"
+0x1023 0x9750 "Card:Trident 3DImage975 (generic)" "Trident Microsystems|3DImage 975"
+0x1023 0x9753 "Card:Trident (generic)" "Trident Microsystems|TGUI 9753"
+0x1023 0x9754 "Card:Trident (generic)" "Trident Microsystems|TGUI 9754"
+0x1023 0x9759 "Card:Trident 3DImage975 (generic)" "Trident Microsystems|TGUI 975"
+0x1023 0x9783 "Card:Trident (generic)" "Trident Microsystems|TGUI 9783"
+0x1023 0x9785 "Card:Trident (generic)" "Trident Microsystems|TGUI 9785"
+0x1023 0x9850 "Card:Trident 3DImage985 (generic)" "Trident Microsystems|3DImage 9850"
+0x1023 0x9880 "Card:Trident Blade3D (generic)" "Trident Microsystems|Blade 3D PCI/AGP"
+0x1023 0x9910 "Card:Trident CyberBlade (generic)" "Trident Microsystems|Cyber/BladeXP"
+0x1023 0x9930 "Card:Trident CyberBlade (generic)" "Trident Microsystems|CyberBlade/XPm"
+0x1024 0x1024 "Hcf:www.linmodems.org" "Zenith Data Systems|R6785-61 HCF 56k PCI Modem"
+0x1025 0x0028 "unknown" "Acer Incorporated|AC97 ID:SIL REV:0x27, 06 Agere Systems soft modem chip"
+0x1025 0x0090 "unknown" "Acer Incorporated [ALI]|BCM440x 100Base-TX Fast Ethernet"
+0x1025 0x1435 "unknown" "Acer Incorporated [ALI]|M1435"
+0x1025 0x1445 "unknown" "Acer Incorporated [ALI]|M1445"
+0x1025 0x1449 "unknown" "Acer Incorporated [ALI]|M1449"
+0x1025 0x1451 "unknown" "Acer Incorporated [ALI]|M1451"
+0x1025 0x1461 "unknown" "Acer Incorporated [ALI]|M1461"
+0x1025 0x1489 "unknown" "Acer Incorporated [ALI]|M1489"
+0x1025 0x1511 "unknown" "Acer Incorporated [ALI]|M1511"
+0x1025 0x1512 "unknown" "Acer Incorporated [ALI]|ALI M1512 Aladdin"
+0x1025 0x1513 "unknown" "Acer Incorporated [ALI]|M1513"
+0x1025 0x1521 "unknown" "Acer Incorporated [ALI]|ALI M1521 Aladdin III CPU Bridge"
+0x1025 0x1523 "unknown" "Acer Incorporated [ALI]|ALI M1523 ISA Bridge"
+0x1025 0x1531 "unknown" "Acer Incorporated [ALI]|M1531"
+0x1025 0x1533 "unknown" "Acer Incorporated [ALI]|M1533"
+0x1025 0x1535 "unknown" "Acer Incorporated [ALI]|M1535 PCI Bridge + Super I/O + FIR"
+0x1025 0x1541 "ali-agp" "Acer Incorporated [ALI]|M1541 Northbridge [Aladdin V]"
+0x1025 0x1542 "unknown" "Acer Incorporated [ALI]|M1542 Northbridge [Aladdin V]"
+0x1025 0x1543 "unknown" "Acer Incorporated [ALI]|M1543 PCI-to-ISA Bridge + Super I/O + FIR"
+0x1025 0x1561 "unknown" "Acer Incorporated [ALI]|M1561 Northbridge [Aladdin 7]"
+0x1025 0x1621 "ali-agp" "Acer Incorporated [ALI]|M1621 Northbridge [Aladdin-Pro II]"
+0x1025 0x1631 "ali-agp" "Acer Incorporated [ALI]|M1631 Northbridge+3D Graphics [Aladdin TNT2]"
+0x1025 0x1632 "ali-agp" "Acer Incorporated [ALI]|M1632 Northbridge+3D Graphics"
+0x1025 0x1641 "ali-agp" "Acer Incorporated [ALI]|M1641 Northbridge [Aladdin-Pro IV]"
+0x1025 0x1644 "ali-agp" "Acer Incorporated [ALI]|M1644 Northbridge"
+0x1025 0x1647 "ali-agp" "Acer Incorporated [ALI]|M1647 [MaGiK1] PCI North Bridge"
+0x1025 0x1651 "ali-agp" "Acer Incorporated [ALI]|M1651 PCI North Bridge"
+0x1025 0x1671 "ali-agp" "Acer Incorporated [ALI]|M1671 PCI North Bridge"
+0x1025 0x1672 "unknown" "Acer Incorporated [ALI]|Northbridge [CyberALADDiN-P4]"
+0x1025 0x1681 "ali-agp" "Acer Incorporated [ALI]|"
+0x1025 0x1683 "ali-agp" "Acer Incorporated [ALI]|"
+0x1025 0x1689 "amd64-agp" "Acer Incorporated [ALI]|"
+0x1025 0x3141 "unknown" "Acer Incorporated [ALI]|M3141"
+0x1025 0x3143 "unknown" "Acer Incorporated [ALI]|M3143"
+0x1025 0x3145 "unknown" "Acer Incorporated [ALI]|M3145"
+0x1025 0x3147 "unknown" "Acer Incorporated [ALI]|M3147"
+0x1025 0x3149 "unknown" "Acer Incorporated [ALI]|M3149"
+0x1025 0x3151 "unknown" "Acer Incorporated [ALI]|M3151"
+0x1025 0x3307 "unknown" "Acer Incorporated [ALI]|M3307 MPEG-I Video Controller"
+0x1025 0x3309 "unknown" "Acer Incorporated [ALI]|M3309 MPEG-II Video w/ Software Audio Decoder"
+0x1025 0x3321 "unknown" "Acer Incorporated [ALI]|M3321 MPEG-II Audio/Video Decoder"
+0x1025 0x5212 "unknown" "Acer Incorporated [ALI]|ALI M4803"
+0x1025 0x5215 "unknown" "Acer Labs Incorporated (ALI)|ALI PCI EIDE Controller"
+0x1025 0x5217 "unknown" "Acer Incorporated [ALI]|M5217H"
+0x1025 0x5219 "unknown" "Acer Incorporated [ALI]|M5219"
+0x1025 0x5225 "unknown" "Acer Incorporated [ALI]|M5225"
+0x1025 0x5228 "alim15x3" "Acer Incorporated [ALI]|M5228"
+0x1025 0x5229 "alim15x3" "Acer Incorporated [ALI]|M5229"
+0x1025 0x5235 "unknown" "Acer Incorporated [ALI]|M5235"
+0x1025 0x5237 "unknown" "Acer Incorporated [ALI]|ALI M5237 PCI USB Host Controller"
+0x1025 0x5239 "unknown" "Acer Incorporated| "
+0x1025 0x5240 "unknown" "Acer Incorporated [ALI]|EIDE Controller"
+0x1025 0x5241 "unknown" "Acer Incorporated [ALI]|PCMCIA Bridge"
+0x1025 0x5242 "unknown" "Acer Incorporated [ALI]|General Purpose Controller"
+0x1025 0x5243 "unknown" "Acer Incorporated [ALI]|PCI to PCI Bridge Controller"
+0x1025 0x5244 "unknown" "Acer Incorporated [ALI]|Floppy Disk Controller"
+0x1025 0x5247 "unknown" "Acer Incorporated [ALI]|ALI M1541 PCI to PCI Bridge"
+0x1025 0x5251 "unknown" "Acer Incorporated [ALI]|M5251 P1394 OHCI Controller"
+0x1025 0x5427 "unknown" "Acer Incorporated [ALI]|ALI PCI to AGP Bridge"
+0x1025 0x5451 "trident" "Acer Incorporated [ALI]|ALI M5451 PCI AC-Link Controller Audio Device"
+0x1025 0x5453 "unknown" "Acer Incorporated [ALI]|ALI M5453 PCI AC-Link Controller Modem Device"
+0x1025 0x7101 "unknown" "Acer Incorporated [ALI]|ALI M7101 PCI PMU Power Management Controller"
+0x1028 0x0001 "aacraid" "Dell|PowerEdge Expandable RAID Controller 2/Si"
+0x1028 0x0002 "aacraid" "Dell|PowerEdge Expandable RAID Controller 3/Di"
+0x1028 0x0003 "aacraid" "Dell|PowerEdge Expandable RAID Controller 3/Si"
+0x1028 0x0004 "aacraid" "Dell|PowerEdge Expandable RAID Controller 3/Si"
+0x1028 0x0005 "aacraid" "Dell|PowerEdge Expandable RAID Controller 3/Di"
+0x1028 0x0006 "aacraid" "Dell|PowerEdge Expandable RAID Controller 3/Di"
+0x1028 0x0007 "drsc" "Dell|Remote Assitant Card 3"
+0x1028 0x0008 "8250_pci" "Dell|Remote Access Card III"
+0x1028 0x0009 "unknown" "Dell|Remote Access Card III: BMC/SMIC device not present"
+0x1028 0x000a "aacraid" "Dell|PowerEdge Expandable RAID Controller 3/Di"
+0x1028 0x000c "racser" "Dell|Embedded Systems Management Device 4"
+0x1028 0x000d "racser" "Dell|BMC/SMIC device"
+0x1028 0x000e 0x1028 0x0123 "megaraid_mbox" "Dell|"
+0x1028 0x000e "megaraid" "Dell|PowerEdge RAID Controller"
+0x1028 0x000f 0x1028 0x014a "megaraid_mbox" "Dell|"
+0x1028 0x000f "megaraid" "Dell|PowerEdge RAID Controller 4/DI"
+0x1028 0x0010 "unknown" "Dell|Remote Access Card 4"
+0x1028 0x0011 "unknown" "Dell|Remote Access Card 4 Daughter Card"
+0x1028 0x0012 "8250_pci" "Dell|Remote Access Card 4 Daughter Card Virtual UART"
+0x1028 0x0013 "megaraid_mbox" "Dell|PowerEdge Expandable RAID controller 4"
+0x1028 0x0014 "unknown" "Dell|Remote Access Card 4 Daughter Card SMIC interface"
+0x1028 0x0015 "megaraid_sas" "Dell|PowerEdge Expandable RAID controller 5"
+0x102a 0x0000 "unknown" "LSI Logic|HYDRA"
+0x102a 0x0010 "unknown" "LSI Logic|ASPEN"
+0x102a 0x001f "unknown" "LSI Logic|AHA-2940U2/U2W /7890/7891 SCSI Controllers"
+0x102a 0x00c5 "unknown" "LSI Logic|AIC-7899 U160/m SCSI Controller"
+0x102a 0x00cf "unknown" "LSI Logic|AIC-7899P U160/m"
+0x102b 0x0001 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 32S"
+0x102b 0x0010 "Card:Matrox Millennium" "Matrox Electronic Systems Ltd.|MGA-I [Impression]"
+0x102b 0x0100 "Card:Matrox Millennium II" "Matrox Electronic Systems Ltd.|Millennium II"
+0x102b 0x0518 "Card:Matrox Millennium II" "Matrox Electronic Systems Ltd.|MGA-II [Athena]"
+0x102b 0x0519 "Card:Matrox Millennium" "Matrox Electronic Systems Ltd.|MGA 2064W [Millennium]"
+0x102b 0x051a "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|MGA 1064SG [Mystique]"
+0x102b 0x051b "Card:Matrox Millennium II" "Matrox Electronic Systems Ltd.|MGA 2164W [Millennium II]"
+0x102b 0x051e "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|MGA 1064SG [Mystique] AGP"
+0x102b 0x051f "Card:Matrox Millennium II" "Matrox Electronic Systems Ltd.|MGA 2164W [Millennium II] AGP"
+0x102b 0x0520 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|MGA G200"
+0x102b 0x0521 0x1014 0xff03 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 AGP"
+0x102b 0x0521 0x102b 0x48e9 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Mystique G200 AGP"
+0x102b 0x0521 0x102b 0x48f8 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 SD AGP"
+0x102b 0x0521 0x102b 0x4a60 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 LE AGP"
+0x102b 0x0521 0x102b 0x4a64 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 AGP"
+0x102b 0x0521 0x102b 0xc93c "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 AGP"
+0x102b 0x0521 0x102b 0xc9b0 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 AGP"
+0x102b 0x0521 0x102b 0xc9bc "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 AGP"
+0x102b 0x0521 0x102b 0xca60 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G250 LE AGP"
+0x102b 0x0521 0x102b 0xca6c "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G250 AGP"
+0x102b 0x0521 0x102b 0xdbbc "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 AGP"
+0x102b 0x0521 0x102b 0xdbc2 "Card:Matrox Millennium G200 DualHead" "Matrox Electronic Systems Ltd.|Millennium G200 MMS (Dual G200)"
+0x102b 0x0521 0x102b 0xdbc3 "Card:Matrox Millennium G200 DualHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbc8 "Card:Matrox Millennium G200 DualHead" "Matrox Electronic Systems Ltd.|Millennium G200 MMS (Dual G200)"
+0x102b 0x0521 0x102b 0xdbd2 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbd3 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbd4 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbd5 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbd8 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbd9 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbe2 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|Millennium G200 MMS (Quad G200)"
+0x102b 0x0521 0x102b 0xdbe3 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbe8 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|Millennium G200 MMS (Quad G200)"
+0x102b 0x0521 0x102b 0xdbf2 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbf3 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbf4 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbf5 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbf8 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xdbf9 "Card:Matrox Millennium G200 QuadHead" "Matrox Electronic Systems Ltd.|G200 Multi-Monitor"
+0x102b 0x0521 0x102b 0xf806 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Mystique G200 Video AGP"
+0x102b 0x0521 0x102b 0xff00 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|MGA-G200 AGP"
+0x102b 0x0521 0x102b 0xff02 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Mystique G200 AGP"
+0x102b 0x0521 0x102b 0xff03 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Millennium G200 AGP"
+0x102b 0x0521 0x102b 0xff04 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|Marvel G200 AGP"
+0x102b 0x0521 0x110a 0x0032 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|MGA-G200 AGP"
+0x102b 0x0521 "Card:Matrox Millennium G200" "Matrox Electronic Systems Ltd.|MGA G200 AGP [Millennium] AGP"
+0x102b 0x0522 "Card:Matrox Millennium G200" "Matrox Graphics, Inc.|MGA G200e [Pilot] ServerEngines (SEP1)"
+0x102b 0x0524 "Card:Matrox Millennium G200" "Matrox Graphics, Inc.|G200SE"
+0x102b 0x0525 0x0e11 0xb16f "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|MGA-G400 AGP"
+0x102b 0x0525 0x102b 0x0328 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G400 16Mb SDRAM"
+0x102b 0x0525 0x102b 0x0338 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G400 16Mb SDRAM"
+0x102b 0x0525 0x102b 0x0378 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G400 32Mb SDRAM"
+0x102b 0x0525 0x102b 0x0541 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 DualHead"
+0x102b 0x0525 0x102b 0x0542 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LX"
+0x102b 0x0525 0x102b 0x0543 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450 Single Head LX"
+0x102b 0x0525 0x102b 0x0641 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 DualHead AGP"
+0x102b 0x0525 0x102b 0x0642 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LX"
+0x102b 0x0525 0x102b 0x0643 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450 32Mb SDRAM Single Head LX"
+0x102b 0x0525 0x102b 0x07c0 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LE"
+0x102b 0x0525 0x102b 0x07c1 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 SDR DualHead"
+0x102b 0x0525 0x102b 0x0d41 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 DualHead PCI"
+0x102b 0x0525 0x102b 0x0d42 "Card:Matrox Millennium G450 DualHead" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LX PCI"
+0x102b 0x0525 0x102b 0x0d43 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G450 32Mb Dual Head PCI"
+0x102b 0x0525 0x102b 0x0e00 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0525 0x102b 0x0e01 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0525 0x102b 0x0e02 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0525 0x102b 0x0e03 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0525 0x102b 0x0f80 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile"
+0x102b 0x0525 0x102b 0x0f81 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile"
+0x102b 0x0525 0x102b 0x0f82 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile DVI"
+0x102b 0x0525 0x102b 0x0f83 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile DVI"
+0x102b 0x0525 0x102b 0x19d8 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G400 16Mb SGRAM"
+0x102b 0x0525 0x102b 0x19f8 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G400 32Mb SGRAM"
+0x102b 0x0525 0x102b 0x2159 "Card:Matrox Millennium G400 DualHead" "Matrox Electronic Systems Ltd.|Millennium G400 Dual Head"
+0x102b 0x0525 0x102b 0x2179 "Card:Matrox Millennium G400 DualHead" "Matrox Electronic Systems Ltd.|Millennium G400 Dual Head"
+0x102b 0x0525 0x102b 0x217d "Card:Matrox Millennium G400 DualHead" "Matrox Electronic Systems Ltd.|Millennium G400 Dual Head Max"
+0x102b 0x0525 0x102b 0x23c0 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450"
+0x102b 0x0525 0x102b 0x23c1 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450"
+0x102b 0x0525 0x102b 0x23c2 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450 DVI"
+0x102b 0x0525 0x102b 0x23c3 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450 DVI"
+0x102b 0x0525 0x102b 0x2f58 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G400"
+0x102b 0x0525 0x102b 0x2f78 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Millennium G400"
+0x102b 0x0525 0x102b 0x3693 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|Marvel G400 AGP"
+0x102b 0x0525 0x102b 0x5dd0 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|4Sight II"
+0x102b 0x0525 0x102b 0x5f50 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|4Sight II"
+0x102b 0x0525 0x102b 0x5f51 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|4Sight II"
+0x102b 0x0525 0x102b 0x5f52 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|4Sight II"
+0x102b 0x0525 0x102b 0x9010 "Card:Matrox Millennium G400 DualHead" "Matrox Electronic Systems Ltd.|Millennium G400 Dual Head"
+0x102b 0x0525 0x1458 0x0400 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|GA-G400"
+0x102b 0x0525 0x1705 0x0001 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 32S"
+0x102b 0x0525 0x1705 0x0002 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450 16MB SGRAM"
+0x102b 0x0525 0x1705 0x0003 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450 32MB"
+0x102b 0x0525 0x1705 0x0004 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Millennium G450 16MB"
+0x102b 0x0525 "Card:Matrox Millennium G400" "Matrox Electronic Systems Ltd.|MGA G400 AGP"
+0x102b 0x0527 "unknown" "Matrox Electronic Systems Ltd.|MGA Parhelia AGP"
+0x102b 0x0528 "unknown" "Matrox Electronic Systems Ltd.|Parhelia 8X"
+0x102b 0x0541 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead"
+0x102b 0x0542 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LX"
+0x102b 0x0641 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead"
+0x102b 0x0642 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LX"
+0x102b 0x07c0 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LE"
+0x102b 0x07c1 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 SDR DualHead"
+0x102b 0x0d10 "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|MGA Ultima/Impression"
+0x102b 0x0d41 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead PCI"
+0x102b 0x0d42 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead LX PCI"
+0x102b 0x0e00 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0e01 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0e02 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0e03 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|Marvel G450 eTV"
+0x102b 0x0f80 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile"
+0x102b 0x0f81 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile"
+0x102b 0x0f82 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile DVI"
+0x102b 0x0f83 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 Low Profile DVI"
+0x102b 0x1000 "Card:Matrox Productiva G100" "Matrox Electronic Systems Ltd.|MGA G100 [Productiva]"
+0x102b 0x1001 "Card:Matrox Productiva G100" "Matrox Electronic Systems Ltd.|MGA G100 [Productiva] AGP"
+0x102b 0x102b "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 DualHead"
+0x102b 0x1100 "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|Mystique"
+0x102b 0x1525 "unknown" "Matrox Electronic Systems Ltd.|Fusion G450 AGP"
+0x102b 0x1527 "unknown" "Matrox Electronic Systems Ltd.|Fusion Plus G800 AGP"
+0x102b 0x1705 "Card:Matrox Millennium G450" "Matrox Electronic Systems Ltd.|MGA G450 32S"
+0x102b 0x2007 "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|MGA Mistral"
+0x102b 0x2527 "Card:Matrox Millennium G550 DualHead" "Matrox Electronic Systems Ltd.|MGA G550 AGP"
+0x102b 0x2537 "unknown" "Matrox Electronic Systems Ltd.|MGA P750 AGP"
+0x102b 0x2538 "unknown" "Matrox Electronic Systems Ltd.|Millenium P650 PCIe"
+0x102b 0x4536 "unknown" "Matrox Electronic Systems Ltd.|VIA Framegrabber"
+0x102b 0x4cdc "unknown" "Matrox Graphics, Inc.|Morphis Vision System Jpeg2000"
+0x102b 0x4fc5 "unknown" "Matrox Graphics, Inc.|Morphis Vision System"
+0x102b 0x5e10 "unknown" "Matrox Graphics, Inc.|Morphis Vision System Aux/IO"
+0x102b 0x6573 "unknown" "Matrox Electronic Systems Ltd.|Shark 10/100 Multiport SwitchNIC"
+0x102b 0x80a0 "unknown" "Matrox Electronic Systems Ltd.|RT.x10 Multimedia Device"
+0x102b 0xff02 "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|Mystique G200 SG"
+0x102b 0xff03 "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|Millennium G200 SG"
+0x102b 0xff04 "Card:Matrox Mystique" "Matrox Electronic Systems Ltd.|Marvel G200 SD"
+0x102c 0x00b8 "Card:Chips & Technologies CT64300" "C&T|64310"
+0x102c 0x00c0 "Card:Chips & Technologies CT69000" "C&T|F69000 HiQVideo"
+0x102c 0x00d0 "Card:Chips & Technologies CT65545" "C&T|F65545"
+0x102c 0x00d8 "Card:Chips & Technologies CT65545" "C&T|F65545"
+0x102c 0x00dc "Card:Chips & Technologies CT65548" "C&T|F65548"
+0x102c 0x00e0 "Card:Chips & Technologies CT65550" "C&T|F65550"
+0x102c 0x00e4 "Card:Chips & Technologies CT65554" "C&T|F65554"
+0x102c 0x00e5 "Card:Chips & Technologies CT65555" "C&T|F65555 HiQVPro"
+0x102c 0x00f0 "Card:Chips & Technologies CT68554" "C&T|F68554"
+0x102c 0x00f4 "Card:Chips & Technologies CT68554" "C&T|F68554 HiQVision"
+0x102c 0x00f5 "unknown" "C&T|F68555"
+0x102c 0x01e0 "unknown" "Chips And Technologies|65560 PCI Flat Panel/CRT VGA Accelerator"
+0x102c 0x0c30 "Card:Chips & Technologies CT69030" "C&T|69030"
+0x102d 0x50dc "unknown" "Wyse Technology Inc.|3328 Audio"
+0x102f 0x0009 "unknown" "Toshiba America|r4x00"
+0x102f 0x000a "unknown" "Toshiba America|TX3927 MIPS RISC PCI Controller"
+0x102f 0x0020 "unknown" "Toshiba America|ATM Meteor 155"
+0x102f 0x0030 "tc35815" "Toshiba America|NIC TC35815CF"
+0x102f 0x0031 "unknown" "Toshiba America|TC35815CF PCI 10/100 Mbit Ethernet Controller with WOL"
+0x102f 0x0105 "unknown" "Toshiba America|TC86C001 [goku-s] IDE"
+0x102f 0x0106 "unknown" "Toshiba America|TC86C001 [goku-s] USB 1.1 Host"
+0x102f 0x0107 "unknown" "Toshiba America|TC86C001 [goku-s] USB Device Controller"
+0x102f 0x0108 "serial_txx9" "Toshiba America|TC86C001 [goku-s] I2C/SIO/GPIO Controller"
+0x102f 0x0180 "unknown" "Toshiba America|TX4927"
+0x102f 0x0181 "unknown" "Toshiba America|TX4925 TX4925 Integrated MIPS Processor"
+0x102f 0x0182 "unknown" "Toshiba America|TX4937 MIPS RISC PCI Controller"
+0x1031 0x5601 "Card:VESA driver (generic)" "Miro|DC20 ASIC (ZR36050)"
+0x1031 0x5607 "unknown" "Miro|Video I/O & motion JPEG compressor"
+0x1031 0x5631 "unknown" "Miro|Media 3D"
+0x1031 0x6057 "unknown" "Miro|MiroVideo DC10/DC30+"
+0x1033 0x0000 "unknown" "NEC Corp.|Vr4181A USB Host or Function Control Unit"
+0x1033 0x0001 "unknown" "NEC|PCI to 486-like bus Bridge"
+0x1033 0x0002 "unknown" "NEC|PCI to VL98 Bridge"
+0x1033 0x0003 "unknown" "NEC|ATM Controller"
+0x1033 0x0004 "unknown" "NEC|R4000 PCI Bridge"
+0x1033 0x0005 "unknown" "NEC|PCI to 486-like bus Bridge"
+0x1033 0x0006 "unknown" "NEC Electronics Hong Kong|GUI Accelerator"
+0x1033 0x0007 "unknown" "NEC|PCI to UX-Bus Bridge"
+0x1033 0x0008 "unknown" "NEC Electronics Hong Kong|GUI Accelerator"
+0x1033 0x0009 "unknown" "NEC Electronics Hong Kong|GUI Accelerator for 98"
+0x1033 0x0016 "unknown" "NEC Corp.|PCI to VL Bridge"
+0x1033 0x001a "unknown" "NEC|[Nile II]"
+0x1033 0x001d "unknown" "NEC Corp.|uPD98405 NEASCOT-S20 ATM Integrated SAR Ctrlr"
+0x1033 0x0021 "unknown" "NEC|Vrc4373 [Nile I]"
+0x1033 0x0029 "unknown" "NEC|PowerVR PCX1"
+0x1033 0x002a "unknown" "NEC|PowerVR 3D"
+0x1033 0x002c "unknown" "NEC Corp.|Star Alpha 2"
+0x1033 0x002d "unknown" "NEC Corp.|PCI to C-bus Bridge"
+0x1033 0x0035 "ohci-hcd" "NEC|USB"
+0x1033 0x0036 "unknown" "NEC Corp.|uPD98409 NEASCOT-S40C ATM Light SAR Controller"
+0x1033 0x003b "unknown" "NEC Corp.|PCI to C-bus Bridge"
+0x1033 0x003e "vrc4173_cardu" "NEC|NAPCCARD Cardbus Controller [VRC4173 CARDU]"
+0x1033 0x0046 "unknown" "NEC|PowerVR PCX2 [midas]"
+0x1033 0x005a "8250_pci" "NEC|Vrc5074 [Nile 4]"
+0x1033 0x0063 "unknown" "NEC|Firewarden"
+0x1033 0x0067 "unknown" "NEC|PowerVR Neon 250 Chipset"
+0x1033 0x0072 "unknown" "NEC Corp.|uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr"
+0x1033 0x0074 "unknown" "NEC|56k Voice Modem"
+0x1033 0x009b "unknown" "NEC|Vrc5476"
+0x1033 0x00a5 "unknown" "NEC|VRC4173"
+0x1033 0x00a6 "unknown" "NEC|VRC5477 AC97"
+0x1033 0x00be "unknown" "NEC Corp.|VR4122 64-bit CPU with Northbridge"
+0x1033 0x00cd "unknown" "NEC Corp.|uPD72870 IEEE1394 1-Chip OHCI Host Controller"
+0x1033 0x00ce "unknown" "NEC Corp.|uPD72871/2 IEEE1394 1-Chip OHCI Host Controller"
+0x1033 0x00df "unknown" "NEC Corp.|Vr4131"
+0x1033 0x00e0 "ehci-hcd" "NEC Corp.|PCI to USB Enhanced Host Controller"
+0x1033 0x00e7 "unknown" "NEC Corp.|uPD72873 IEEE1394 OHCI 1.1 2-port PHY-Link Ctrlr"
+0x1033 0x00f2 "unknown" "NEC Corp.|uPD72874 IEEE1394 OHCI 1.1 3-port PHY-Link Ctrlr"
+0x1033 0x00f3 "unknown" "NEC Corp.|uPD6113x Multimedia Decoder/Processor [EMMA2]"
+0x1033 0x010c "unknown" "NEC|VR7701"
+0x1033 0x0125 "unknown" "NEC Corporation|uPD720400 PCI Express - PCI/PCI-X Bridge"
+0x1033 0x013a "unknown" "NEC Corporation|Dual Tuner/MPEG Encoder"
+0x1036 0x0000 "fdomain" "Future Domain|TMC-18C30 [36C70]"
+0x1039 0x0000 "unknown" "Silicon Integrated Systems [SiS]| "
+0x1039 0x0001 "unknown" "Silicon Integrated Systems [SiS]|5591/5592 AGP"
+0x1039 0x0002 "sis-agp" "Silicon Integrated Systems [SiS]|SG86C202"
+0x1039 0x0003 "unknown" "Silicon Integrated Systems [SiS]|SiS648FX Virtual PCI to PCI Bridge (AGP)"
+0x1039 0x0004 "unknown" "Silicon Integrated Systems [SiS]|PCI-to-PCI bridge"
+0x1039 0x0005 "unknown" "Silicon Integrated Systems [SiS]|Pentium Chipset"
+0x1039 0x0006 "unknown" "Silicon Integrated Systems [SiS]|85C501/2/3"
+0x1039 0x0008 "i2c-sis5595" "Silicon Integrated Systems [SiS]|85C503/5513"
+0x1039 0x0009 "unknown" "Silicon Integrated Systems [SiS]|ACPI"
+0x1039 0x000a "unknown" "Silicon Integrated Systems [SiS]|PCI-to-PCI bridge"
+0x1039 0x0016 "i2c-sis96x" "Silicon Integrated Systems [SiS]|SiS961/962 SMBus Controller"
+0x1039 0x0018 "i2c-sis630" "Silicon Integrated Systems [SiS]|SiS85C503/5513 (LPC Bridge)"
+0x1039 0x0180 "sata_sis" "Silicon Integrated Systems [SiS]|RAID bus controller 180 SATA/PATA [SiS]"
+0x1039 0x0181 "sata_sis" "Silicon Integrated Systems [SiS]|SiS SATA"
+0x1039 0x0182 "sata_sis" "Silicon Integrated Systems [SiS]|SiS SATA"
+0x1039 0x0186 "ahci" "Silicon Integrated Systems [SiS]|AHCI Controller (0106)"
+0x1039 0x0190 "sis190" "Silicon Integrated Systems [SiS]|190 Gigabit Ethernet Adapter"
+0x1039 0x0191 "sis190" "Silicon Integrated Systems [SiS]|191 Gigabit Ethernet Adapter"
+0x1039 0x0200 "Card:SiS 5598" "Silicon Integrated Systems [SiS]|5597/5598/6326 VGA"
+0x1039 0x0204 "Card:VESA driver (generic)" "Silicon Integrated Systems [SiS]|82C204"
+0x1039 0x0205 "Card:SiS SG86C205" "Silicon Integrated Systems [SiS]|SG86C205"
+0x1039 0x0215 "Card:SiS SG86C215" "Silicon Integrated Systems [SiS]|SG86C215"
+0x1039 0x0225 "Card:SiS SG86C225" "Silicon Integrated Systems [SiS]|SG86C225"
+0x1039 0x0300 "Card:SiS 300" "Silicon Integrated Systems [SiS]|300"
+0x1039 0x0305 "unknown" "Silicon Integrated Systems [SiS]|SiS305 2D/3D/Video/DVD Accelerator"
+0x1039 0x0310 "Card:SiS generic" "Silicon Integrated Systems [SiS]|SiS315H PCI/AGP VGA Display Adapter"
+0x1039 0x0315 "Card:SiS generic" "Silicon Integrated Systems [SiS]|SiS 315"
+0x1039 0x0325 "Card:SiS generic" "Silicon Integrated Systems [SiS]|SiS325 2D/3D Accelerator"
+0x1039 0x0330 "Card:SiS generic" "Silicon Integrated Systems [SiS]|SiS330 Xabre 2D/3D Accelerator"
+0x1039 0x0340 "Card:SiS generic" "Silicon Integrated Systems [SiS]|"
+0x1039 0x0406 "unknown" "Silicon Integrated Systems [SiS]|85C501/2"
+0x1039 0x0496 "unknown" "Silicon Integrated Systems [SiS]|85C496"
+0x1039 0x0530 "sis-agp" "Silicon Integrated Systems [SiS]|530 Host"
+0x1039 0x0540 "sis-agp" "Silicon Integrated Systems [SiS]|540 Host"
+0x1039 0x0550 "sis-agp" "Silicon Integrated Systems [SiS]|SiS550/1/2 North Bridge"
+0x1039 0x0596 "unknown" "Silicon Integrated Systems [SiS]|Pentium PCI Chipset with IDE"
+0x1039 0x0597 "unknown" "Silicon Integrated Systems [SiS]|5513C"
+0x1039 0x0601 "unknown" "Silicon Integrated Systems [SiS]|85C601"
+0x1039 0x0620 "sis-agp" "Silicon Integrated Systems [SiS]|620 Host"
+0x1039 0x0630 "sis-agp" "Silicon Integrated Systems [SiS]|630 Host"
+0x1039 0x0633 "unknown" "Silicon Integrated Systems [SiS]|633 Host"
+0x1039 0x0635 "unknown" "Silicon Integrated Systems [SiS]|SiS 635 Host-to-PCI Bridge"
+0x1039 0x0640 "unknown" "Silicon Integrated Systems [SiS]|SiS 640 Host-to-PCI Bridge"
+0x1039 0x0645 "sis-agp" "Silicon Integrated Systems [SiS]|SiS 645 Host-to-PCI Bridge"
+0x1039 0x0646 "sis-agp" "Silicon Integrated Systems [SiS]|645DX Host"
+0x1039 0x0648 "sis-agp" "Silicon Integrated Systems [SiS]|SiS648 Host-to-PCI Bridge"
+0x1039 0x0649 "unknown" "Silicon Integrated Systems [SiS]|Host-to-PCI Bridge"
+0x1039 0x0650 "sis-agp" "Silicon Integrated Systems [SiS]|SiS 650 Host-to-PCI Bridge"
+0x1039 0x0651 "sis-agp" "Silicon Integrated Systems [SiS]|SiS651 Host"
+0x1039 0x0655 "sis-agp" "Silicon Integrated Systems [SiS]|Host-to-PCI Bridge"
+0x1039 0x0656 "unknown" "Silicon Integrated Systems [SiS]|??? CPU to PCI Bridge"
+0x1039 0x0658 "unknown" "Silicon Integrated Systems [SiS]|SiS R658 CPU to PCI Bridge"
+0x1039 0x0659 "unknown" "Silicon Integrated Systems [SiS]|SiS R659 CPU to PCI Bridge"
+0x1039 0x0660 "unknown" "Silicon Integrated Systems [SiS]|Host-to-PCI Bridge"
+0x1039 0x0661 "sis-agp" "Silicon Integrated Systems [SiS]|Host-to-PCI Bridge"
+0x1039 0x0662 "unknown" "Silicon Integrated Systems [SiS]|??? CPU to PCI Bridge"
+0x1039 0x0663 "unknown" "Silicon Integrated Systems [SiS]|??? CPU to PCI Bridge"
+0x1039 0x0730 "sis-agp" "Silicon Integrated Systems [SiS]|730 Host"
+0x1039 0x0733 "unknown" "Silicon Integrated Systems [SiS]|733 Host"
+0x1039 0x0735 "sis-agp" "Silicon Integrated Systems [SiS]|735 Host"
+0x1039 0x0740 "sis-agp" "Silicon Integrated Systems [SiS]|SiS 740 Host-to-PCI Bridge"
+0x1039 0x0741 "sis-agp" "Silicon Integrated Systems [SiS]|Host"
+0x1039 0x0745 "sis-agp" "Silicon Integrated Systems [SiS]|745 Host"
+0x1039 0x0746 "sis-agp" "Silicon Integrated Systems [SiS]|SiS746 Host-to-PCI Bridge"
+0x1039 0x0748 "unknown" "Silicon Integrated Systems [SiS]|SiS748 CPU to PCI Bridge"
+0x1039 0x0755 "amd64-agp" "Silicon Integrated Systems [SiS]|Host-to-PCI Bridge"
+0x1039 0x0756 "unknown" "Silicon Integrated Systems [SiS]|SiS755FX CPU to PCI Bridge"
+0x1039 0x0760 "amd64-agp" "Silicon Integrated Systems [SiS]|Host-to-PCI Bridge"
+0x1039 0x0761 "unknown" "Silicon Integrated Systems [SiS]|??? Athlon 64 CPU to PCI Bridge"
+0x1039 0x0762 "unknown" "Silicon Integrated Systems [SiS]|??? Athlon 64 CPU to PCI Bridge"
+0x1039 0x0900 "sis900" "Silicon Integrated Systems [SiS]|SiS900 10/100 Ethernet"
+0x1039 0x0961 "unknown" "Silicon Integrated Systems [SiS]|SiS961 [MuTIOL Media IO]"
+0x1039 0x0962 "unknown" "Silicon Integrated Systems [SiS]|SiS962 [MuTIOL Media IO]"
+0x1039 0x0963 "unknown" "Silicon Integrated Systems [SiS]|SiS963 PCI to ISA Bridge"
+0x1039 0x0964 "unknown" "Silicon Integrated Systems [SiS]|SiS964 [MuTIOL Media IO]"
+0x1039 0x0965 "unknown" "Silicon Integrated Systems [SiS]|SiS965 [MuTIOL Media IO]"
+0x1039 0x0966 "unknown" "Silicon Integrated Systems [SiS]|SiS966 [MuTIOL Media IO]"
+0x1039 0x0968 "unknown" "Silicon Integrated Systems [SiS]|SiS968 [MuTIOL Media IO]"
+0x1039 0x1039 "unknown" "Silicon Integrated Systems [SiS]| "
+0x1039 0x1040 "unknown" "Silicon Integrated Systems [SiS]| "
+0x1039 0x10ec "unknown" "Silicon Integrated Systems [SiS]| "
+0x1039 0x1180 "sata_sis" "Silicon Integrated Systems [SiS]|SATA Controller / IDE mode"
+0x1039 0x1182 "sata_sis" "Silicon Integrated Systems [SiS]|SATA Controller / RAID mode"
+0x1039 0x1183 "sata_sis" "Silicon Integrated Systems [SiS]|SATA Controller / IDE mode"
+0x1039 0x1184 "ahci" "Silicon Integrated Systems [SiS]|AHCI Controller / RAID mode"
+0x1039 0x1185 "ahci" "Silicon Integrated Systems [SiS]|AHCI IDE Controller (0106)"
+0x1039 0x3602 "unknown" "Silicon Integrated Systems [SiS]|83C602"
+0x1039 0x5107 "unknown" "Silicon Integrated Systems [SiS]|5107"
+0x1039 0x5300 "Card:SiS 540" "Silicon Integrated Systems [SiS]|SiS540 PCI Display Adapter"
+0x1039 0x5315 "Card:SiS generic" "Silicon Integrated Systems [SiS]|SiS550/1/2 GUI Accelerator"
+0x1039 0x5401 "unknown" "Silicon Integrated Systems [SiS]|486 PCI Chipset"
+0x1039 0x5511 "unknown" "Silicon Integrated Systems [SiS]|5511/5512"
+0x1039 0x5513 "sis5513" "Silicon Integrated Systems [SiS]|5513 [IDE]"
+0x1039 0x5517 "sis5513" "Silicon Integrated Systems [SiS]|5517"
+0x1039 0x5518 "sis5513" "Silicon Integrated Systems [SiS]|SiS5518 UDMA IDE Controller"
+0x1039 0x5571 "unknown" "Silicon Integrated Systems [SiS]|5571"
+0x1039 0x5581 "unknown" "Silicon Integrated Systems [SiS]|Pentium Chipset"
+0x1039 0x5582 "unknown" "Silicon Integrated Systems [SiS]|PCI to ISA Bridge"
+0x1039 0x5591 "unknown" "Silicon Integrated Systems [SiS]|5591/5592 Host"
+0x1039 0x5596 "unknown" "Silicon Integrated Systems [SiS]|SiS5596 Pentium Chipset"
+0x1039 0x5597 "Card:SiS 5597" "Silicon Integrated Systems [SiS]|5597 [SiS5582]"
+0x1039 0x5600 "unknown" "Silicon Integrated Systems [SiS]|5600 Host"
+0x1039 0x5630 "unknown" "Silicon Integrated Systems [SiS]|SiS630 Host-to-PCI Bridge"
+0x1039 0x5811 "unknown" "Silicon Integrated Systems [SiS]| "
+0x1039 0x6204 "unknown" "Silicon Integrated Systems [SiS]|Video decoder & MPEG interface"
+0x1039 0x6205 "unknown" "Silicon Integrated Systems [SiS]|VGA Controller"
+0x1039 0x6225 "unknown" "Silicon Integrated Systems [SiS]|SiS 6225 PCI Graphics & Video Accelerator"
+0x1039 0x6226 "Card:SiS 6326" "Silicon Integrated Systems [SiS]|6326 3D-AGP"
+0x1039 0x6236 "Card:SiS 6326" "Silicon Integrated Systems [SiS]|6236 3D-AGP"
+0x1039 0x6300 "Card:SiS 630" "Silicon Integrated Systems [SiS]|SiS630 GUI Accelerator+3D"
+0x1039 0x6306 "Card:SiS 530" "Silicon Integrated Systems [SiS]|SiS530 3D PCI/AGP"
+0x1039 0x6325 "Card:SiS 650" "Silicon Integrated Systems [SiS]|SiS650/651/740 GUI 2D/3D Accelerator"
+0x1039 0x6326 "Card:SiS 6326" "Silicon Integrated Systems [SiS]|86C326"
+0x1039 0x6330 "Card:SiS Real256E" "Silicon Integrated Systems [SiS]|SiS Real256E"
+0x1039 0x6350 "unknown" "Silicon Integrated Systems [SiS]|770/670 PCIE VGA Display Adapter"
+0x1039 0x6351 "unknown" "Silicon Integrated Systems [SiS]|771/671 PCIE VGA Display Adapter"
+0x1039 0x6972 "unknown" "Silicon Integrated Systems [SiS]| "
+0x1039 0x7001 "ohci-hcd" "Silicon Integrated Systems [SiS]|7001 USB"
+0x1039 0x7002 "ehci-hcd" "Silicon Integrated Systems [SiS]|7002 USB 2.0 Controller"
+0x1039 0x7005 "unknown" "Silicon Integrated Systems [SiS]|SiS551/2 Memory Stick Controller"
+0x1039 0x7007 "ohci1394" "Silicon Integrated Systems [SiS]|OHCI Compliant FireWire Controller"
+0x1039 0x7012 "snd-intel8x0" "Silicon Integrated Systems [SiS]|SiS7012 PCI Audio Accelerator"
+0x1039 0x7013 "slamr" "Silicon Integrated Systems [SiS]|SiS7013 56k Modem"
+0x1039 0x7015 "unknown" "Silicon Integrated Systems [SiS]|SiS550/1/2 Software Audio"
+0x1039 0x7016 "sis900" "Silicon Integrated Systems [SiS]|SiS900 10/100 Ethernet"
+0x1039 0x7018 "snd-trident" "Silicon Integrated Systems [SiS]|7018 PCI Audio"
+0x1039 0x7019 "unknown" "Silicon Integrated Systems [SiS]|SiS550/1/2 Hardware Audio"
+0x1039 0x7300 "Card:SiS generic" "Silicon Integrated Systems [SiS]|SiS730 GUI Accelerator+3D"
+0x1039 0x7502 "snd-hda-intel" "Silicon Integrated Systems [SiS]|SiS966"
+0x1039 0x8139 "unknown" "Silicon Integrated Systems [SiS]| "
+0x103c 0x002a "unknown" "Hewlett-Packard Company|NX9000 Notebook"
+0x103c 0x1005 "unknown" "HP|A4977A Visualize EG"
+0x103c 0x1006 "unknown" "HP|Visualize FX6"
+0x103c 0x1008 "unknown" "HP|Donner GFX"
+0x103c 0x100a "unknown" "HP|Visualize FX2"
+0x103c 0x1028 "unknown" "HP|Tachyon TL Fibre Channel Adapter"
+0x103c 0x1029 "unknown" "HP|HPFC-5200B Tachyon XL2 Fibre Channel Adapter"
+0x103c 0x102a "unknown" "HP|Tach TS Fibre Channel Host Adapter"
+0x103c 0x1030 "hp100" "HP|J2585A"
+0x103c 0x1031 "hp100" "HP|J2585B"
+0x103c 0x1040 "hp100" "HP|J2973A DeskDirect 10BaseT NIC"
+0x103c 0x1041 "unknown" "HP|J2585B DeskDirect 10/100 NIC"
+0x103c 0x1042 "hp100" "HP|J2970A DeskDirect 10BaseT/2 NIC"
+0x103c 0x1048 "8250_pci" "HP|SAS"
+0x103c 0x1049 "unknown" "HP|DIVA1"
+0x103c 0x104a "unknown" "HP|DIVA2"
+0x103c 0x104b "unknown" "HP|SP2"
+0x103c 0x104d "unknown" "HP|J3242A EL-10 Ethernet Adapter"
+0x103c 0x1054 "unknown" "HP|PCI Local Bus Adapter"
+0x103c 0x1064 "unknown" "HP|79C970 PCnet Ethernet Controller"
+0x103c 0x108b "unknown" "HP|Visualize FXe"
+0x103c 0x10c1 "unknown" "HP|NetServer Smart IRQ Router"
+0x103c 0x10c2 "aacraid" "HP|NetRAID-4M"
+0x103c 0x10ed "unknown" "HP|TopTools Remote Control"
+0x103c 0x10f0 "unknown" "HP|rio System Bus Adapter"
+0x103c 0x10f1 "unknown" "HP|rio I/O Controller"
+0x103c 0x1200 "unknown" "HP|82557B 10/100 NIC"
+0x103c 0x1219 "unknown" "HP|NetServer PCI Hot-Plug Controller"
+0x103c 0x121a "ipmi_si" "HP|NetServer SMIC Controller"
+0x103c 0x121b "unknown" "HP|NetServer Legacy COM Port Decoder"
+0x103c 0x121c "unknown" "HP|NetServer PCI COM Port Decoder"
+0x103c 0x1229 "unknown" "HP|zx1 System Bus Adapter"
+0x103c 0x122a "unknown" "HP|zx1 I/O Controller"
+0x103c 0x122b "unknown" "HP|zx1 Local Bus Adapter"
+0x103c 0x122e "unknown" "HP|zx1 Local Bus Adapter"
+0x103c 0x1279 "Card:ATI Rage 128" "HP|Rage128 Ultra TR"
+0x103c 0x127b "unknown" "Hewlett-Packard Company|sx1000 System Bus Adapter"
+0x103c 0x127c "unknown" "HP|sx1000 I/O Controller"
+0x103c 0x1290 "8250_pci" "HP|Auxiliary Diva Serial Port"
+0x103c 0x1291 "unknown" "HP|Auxiliary Diva Serial Port"
+0x103c 0x12b4 "unknown" "HP|zx1 QuickSilver AGP8x Local Bus Adapter"
+0x103c 0x12eb "unknown" "Hewlett-Packard Company|sx2000 System Bus Adapter"
+0x103c 0x12ec "unknown" "Hewlett-Packard Company|sx2000 I/O Controller"
+0x103c 0x12ee "unknown" "Hewlett-Packard Company|PCI-X 2.0 Local Bus Adapter"
+0x103c 0x12f8 "unknown" "Hewlett-Packard Company|Broadcom BCM4306 802.11b/g Wireless LAN"
+0x103c 0x12fa "unknown" "HP|BCM4306 802.11b/g Wireless LAN Controller"
+0x103c 0x2910 "unknown" "HP|E2910A"
+0x103c 0x2920 "unknown" "HP|Fast Host Interface"
+0x103c 0x2924 "unknown" "HP|E2924A PCI Host Interface Adapter"
+0x103c 0x2925 "unknown" "HP|E2925A"
+0x103c 0x2926 "unknown" "HP|E2926A 64 bit PCI Bus Exerciser and Analyzer"
+0x103c 0x2927 "unknown" "HP|E2927A 64 Bit, 66/50MHz PCI Analyzer & Exerciser"
+0x103c 0x2940 "unknown" "HP|E2940A 64 bit, 66/50MHz CompactPCI Analyzer&Exerciser"
+0x103c 0x3080 "unknown" "HP|Pavilion ze2028ea"
+0x103c 0x3085 "unknown" "Hewlett-Packard Company|Realtek RTL8139/8139C/8139C+"
+0x103c 0x3210 "cciss" "HP|Hewlett-Packard Smart Array"
+0x103c 0x3220 "cciss" "HP|Hewlett-Packard Smart Array P600"
+0x103c 0x3222 "cciss" "HP|Hewlett-Packard Smart Array"
+0x103c 0x3230 "cciss" "HP|Smart Array"
+0x103c 0x3238 "cciss" "HP|Smart Array P400/E200"
+0x103c 0x4030 "unknown" "Hewlett-Packard Company|zx2 System Bus Adapter"
+0x103c 0x4031 "unknown" "Hewlett-Packard Company|zx2 I/O Controller"
+0x103c 0x4037 "unknown" "Hewlett-Packard Company|PCIe Local Bus Adapter"
+0x103c 0x60e8 "unknown" "Hewlett-Packard Company|NetRAID-2M : ZX1/M (OEM AMI MegaRAID 493)"
+0x1042 0x1000 "rz1000" "Micron|FDC 37C665"
+0x1042 0x1001 "rz1000" "Micron|37C922"
+0x1042 0x3000 "unknown" "Micron|Samurai_0"
+0x1042 0x3010 "unknown" "Micron|Samurai_1"
+0x1042 0x3020 "generic" "Micron|Samurai_IDE"
+0x1042 0x3030 "unknown" "PC Technology|MT82P664 Samurai 64M2"
+0x1042 0x3120 "unknown" "PC Technology|Samurai-DDR CPU to PCI bridge"
+0x1042 0x3130 "unknown" "PC Technology|Samurai-DDR AGP controller"
+0x1043 0x0200 "unknown" "Asustek Computer Inc.|AGP-V3400 Asus RivaTNT Video Board"
+0x1043 0x0675 "ISDN:hisax,type=35" "Asustek Computer Inc.|Asuscom/Askey"
+0x1043 0x0c11 "unknown" "ASUSTeK Computer Inc.|A7N8X Motherboard nForce2 IDE/USB/SMBus"
+0x1043 0x4015 "unknown" "Asustek Computer Inc.|v7100 SDRAM [GeForce2 MX]"
+0x1043 0x401d "Card:NVIDIA GeForce2 DDR (generic)" "Asustek Computer Inc.|GeForce2 MX"
+0x1043 0x4021 "Card:NVIDIA GeForce2 DDR (generic)" "Asustek Computer Inc.|v7100 Combo Deluxe [GeForce2 MX + TV tuner]"
+0x1043 0x4057 "Card:NVIDIA GeForce3 (generic)" "Asustek Computer Inc.|V8200 GeForce 3"
+0x1043 0x8043 "unknown" "Asustek Computer Inc.|v8240 PAL 128M [P4T] Motherboard"
+0x1043 0x8047 "unknown" "ASUSTeK Computer Inc.|v8420 Deluxe [GeForce4 Ti4200]"
+0x1043 0x807b "unknown" "Asustek Computer Inc.|v9280/TD [Geforce4 TI4200 8X With TV-Out and DVI]"
+0x1043 0x8095 "unknown" "ASUSTeK Computer Inc.|A7N8X Motherboard nForce2 AC97 Audio"
+0x1043 0x80ac "unknown" "ASUSTeK Computer Inc.|A7N8X Motherboard nForce2 AGP/Memory"
+0x1043 0x80bb "unknown" "Asustek Computer Inc.|v9180 Magic/T [GeForce4 MX440 AGP 8x 64MB TV-out]"
+0x1043 0x80c5 "unknown" "Asustek Computer Inc.|nForce3 chipset motherboard [SK8N]"
+0x1043 0x80df "unknown" "Asustek Computer Inc.|v9520 Magic/T"
+0x1043 0x80f3 "snd-intel8x0" "Asustek Computer Inc.|ASUS ICH5/AD1985"
+0x1043 0x815a "unknown" "ASUSTeK Computer Inc.|A8N-SLI Motherboard nForce4 SATA"
+0x1043 0x8187 "unknown" "ASUSTeK Computer Inc.|802.11a/b/g Wireless LAN Card"
+0x1043 0x8188 "unknown" "ASUSTeK Computer Inc.|Tiger Hybrid TV Capture Device"
+0x1044 0x1012 "unknown" "Distributed Processing Tech|Domino RAID Engine"
+0x1044 0xa400 "eata" "Distributed Processing Tech|SmartCache/Raid I-IV Controller"
+0x1044 0xa500 "unknown" "Distributed Processing Tech|PCI Bridge"
+0x1044 0xa501 "dpt_i2o" "Distributed Processing Tech|SmartRAID V Controller"
+0x1044 0xa511 "dpt_i2o" "Distributed Processing Tech|Raptor SmartRAID Controller"
+0x1045 0x0005 "unknown" "OPTi Inc.| "
+0x1045 0xa0f8 "ohci-hcd" "OPTi Inc.|82C750 [Vendetta] USB Controller"
+0x1045 0xc101 "unknown" "OPTi Inc.|92C264"
+0x1045 0xc178 "unknown" "OPTi Inc.|92C178"
+0x1045 0xc556 "unknown" "OPTi Inc.|82X556 [Viper]"
+0x1045 0xc557 "unknown" "OPTi Inc.|82C557 [Viper-M]"
+0x1045 0xc558 "generic" "OPTi Inc.|82C558 [Viper-M ISA+IDE]"
+0x1045 0xc567 "unknown" "OPTi Inc.|82C750 [Vendetta], device 0"
+0x1045 0xc568 "unknown" "OPTi Inc.|82C750 [Vendetta], device 1"
+0x1045 0xc569 "unknown" "OPTi Inc.|82C579 [Viper XPress+ Chipset]"
+0x1045 0xc621 "opti621" "OPTi Inc.|82C621"
+0x1045 0xc700 "unknown" "OPTi Inc.|82C700"
+0x1045 0xc701 "unknown" "OPTi Inc.|82C701 [FireStar Plus]"
+0x1045 0xc814 "unknown" "OPTi Inc.|82C814 [Firebridge 1]"
+0x1045 0xc822 "unknown" "OPTi Inc.|82C822"
+0x1045 0xc824 "unknown" "OPTi Inc.|82C824"
+0x1045 0xc825 "unknown" "OPTi Inc.|82C825 [Firebridge 2]"
+0x1045 0xc832 "unknown" "OPTi Inc.|82C832"
+0x1045 0xc861 "ohci-hcd" "OPTi Inc.|82C861"
+0x1045 0xc881 "unknown" "OPTi Inc.|82C881 FireLink 1394 OHCI Link Controller"
+0x1045 0xc895 "unknown" "OPTi Inc.|82C895"
+0x1045 0xc935 "unknown" "OPTi Inc.|EV1935 ECTIVA MachOne PCI Audio"
+0x1045 0xd568 "opti621" "OPTi Inc.|82C825 [Firebridge 2]"
+0x1045 0xd721 "unknown" "OPTi Inc.|IDE [FireStar]"
+0x1045 0xd768 "unknown" "OPTi Inc.|82C750 Ultra DMA IDE controller"
+0x1048 0x0a32 "Card:Elsa GLoria Synergy" "Elsa|Gloria Synergy"
+0x1048 0x0c60 "unknown" "Elsa|Gladiac MX"
+0x1048 0x0d22 "unknown" "Elsa|Quadro4 900XGL [ELSA GLoria4 900XGL]"
+0x1048 0x1000 "ISDN:hisax,type=18" "Elsa|QuickStep 1000 ISDN Adapter"
+0x1048 0x3000 "ISDN:hisax,type=18" "Elsa|QuickStep 3000 ISDN Adapter"
+0x1048 0x8901 "unknown" "ELSA|GLoria XL"
+0x104a 0x0008 "unknown" "SGS Thomson|STG 2000X"
+0x104a 0x0009 "unknown" "SGS Thomson|STG 1764X"
+0x104a 0x0010 "Card:KYRO Series" "ST Microelectronics|Kyro series"
+0x104a 0x0209 "unknown" "ST Microelectronics|STPC Consmr/Indstrl North/South Bridges"
+0x104a 0x020a "unknown" "ST Microelectronics|STPC Atlas/Elite North Bridge"
+0x104a 0x0210 "unknown" "ST Microelectronics|STPC Atlas ISA Bridge"
+0x104a 0x021a "unknown" "ST Microelectronics|STPC Consmr-S/Elite ISA Bridge"
+0x104a 0x021b "unknown" "ST Microelectronics|STPC Consumer-II ISA Bridge"
+0x104a 0x0228 "unknown" "ST Microelectronics|STPC Atlas IDE Controller"
+0x104a 0x0230 "unknown" "ST Microelectronics|STPC Atlas USB Controller"
+0x104a 0x0500 "ADSL:unicorn" "Bewan Systems|ST70137 [Unicorn] ADSL DMT Transceiver"
+0x104a 0x0564 "unknown" "STMicroelectronics|STPC Client Northbridge"
+0x104a 0x0981 "tulip" "ST Microelectronics| Ethernet Controller"
+0x104a 0x1746 "unknown" "SGS Thomson|STG 1764X"
+0x104a 0x2774 "tulip" "ST Microelectronics|STE10/100A PCI 10/100 Ethernet Controller"
+0x104a 0x3520 "unknown" "SGS Thomson|MPEG-II decoder card"
+0x104a 0x55cc "unknown" "STMicroelectronics|STPC Client Southbridge"
+0x104b 0x0140 "BusLogic" "BusLogic|BT-946C (old) [multimaster 01]"
+0x104b 0x1040 "BusLogic" "BusLogic|BT-946C (BA80C30) [MultiMaster 10]"
+0x104b 0x8130 "BusLogic" "BusLogic|Flashpoint LT"
+0x104c 0x0000 "unknown" "Texas Instruments| "
+0x104c 0x014e "unknown" "Texas Instruments|4610,4515,4610fm divice"
+0x104c 0x0500 "unknown" "Texas Instruments|100 MBit LAN Controller"
+0x104c 0x0508 "unknown" "Texas Instruments|TMS380C2X Compressor Interface"
+0x104c 0x1000 "unknown" "Texas Instruments|Eagle i/f AS"
+0x104c 0x104c "yenta_socket" "Texas Instruments|PCI1510 PC card Cardbus Controller"
+0x104c 0x3d04 "Card:3Dlabs Permedia2 (generic)" "Texas Instruments|TVP4010 [Permedia]"
+0x104c 0x3d07 "Card:Elsa GLoria Synergy" "Texas Instruments|ELSA GLoria Synergy [Permedia 2]"
+0x104c 0x8000 "pcilynx" "Texas Instruments|PCILynx/PCILynx2 IEEE 1394 Link Layer Controller"
+0x104c 0x8009 "ohci1394" "Texas Instruments|OHCI Compliant FireWire Controller"
+0x104c 0x8011 "yenta_socket" "Texas Instruments|PCI4450 OHCI-Lynx IEEE 1394 Controller"
+0x104c 0x8017 "ohci1394" "Texas Instruments|PCI4410 OHCI-Lynx IEEE 1394 Controller"
+0x104c 0x8019 "ohci1394" "Texas Instruments|TSB12LV23 OHCI Compliant IEEE-1394 Controller"
+0x104c 0x8020 "ohci1394" "Texas Instruments|TSB12LV26 OHCI-Lynx PCI IEEE 1394 Host Controller"
+0x104c 0x8021 "ohci1394" "Texas Instruments|TSB43AA22 Firewire (IEEE1394) Cntrlr (w/ PHY/Link)"
+0x104c 0x8022 "ohci1394" "Texas Instruments|TSB43AB22 IEEE-1394 Controller (PHY/Link) 1394a-2000"
+0x104c 0x8023 "ohci1394" "Texas Instruments|TSB43AB22 IEEE1394a-2000 OHCI PHY/Link-Layer Ctrlr"
+0x104c 0x8024 "ohci1394" "Texas Instruments|TSB43AB23 IEEE-1394 Controller (PHY/Link) 1394a-2000"
+0x104c 0x8025 "unknown" "Texas Instruments|TSB82AA2 IEEE-1394b Link Layer Controller"
+0x104c 0x8026 "ohci1394" "Texas Instruments|TSB43AB21 IEEE-1394 Controller (PHY/Link) 1394a-2000"
+0x104c 0x8027 "ohci1394" "Texas Instruments|PCI4451 OHCI-Lynx IEEE 1394 Controller"
+0x104c 0x8029 "unknown" "Texas Instruments|PCI4510 IEEE-1394 Controller"
+0x104c 0x802b "unknown" "Texas Instruments|PCI7410,7510,7610 OHCI-Lynx Controller"
+0x104c 0x802e "unknown" "Texas Instruments|PCI7x20 1394a-2000 OHCI Two-Port PHY/Link-Layer Controller"
+0x104c 0x8031 "yenta_socket" "Texas Instruments|Texas Instruments PCIxx21/x515 Cardbus Controller"
+0x104c 0x8032 "unknown" "Texas Instruments|Texas Instruments OHCI Compliant IEEE 1394 Host Controller"
+0x104c 0x8033 "unknown" "Texas Instruments|Texas Instruments PCIxx21 Integrated FlashMedia Controller"
+0x104c 0x8034 "sdhci" "Texas Instruments|Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller"
+0x104c 0x8035 "unknown" "Texas Instruments|Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Smart Card Controller (SMC)"
+0x104c 0x8036 "yenta_socket" "Texas Instruments|PCI6515 Cardbus Controller"
+0x104c 0x8038 "unknown" "Texas Instruments|PCI6515 SmartCard Controller"
+0x104c 0x8039 "yenta_socket" "Texas Instruments|PCIxx12 CardBus Controller"
+0x104c 0x803a "unknown" "Texas Instruments|PCIxx12 OHCI Compliant IEEE 1394 Host Controller"
+0x104c 0x803b "unknown" "Texas Instruments|5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)"
+0x104c 0x803c "unknown" "Texas Instruments|PCIxx12 SDA Standard Compliant SD Host Controller"
+0x104c 0x803d "unknown" "Texas Instruments|PCIxx12 GemCore based SmartCard controller"
+0x104c 0x8201 "unknown" "Texas Instruments|PCI1620 Firmware Loading Function"
+0x104c 0x8204 "unknown" "Texas Instruments|4610, 4515, 4610FM TI UltraMedia Firmware Loader Device"
+0x104c 0x8231 "unknown" "Texas Instruments|XIO2000(A)/XIO2200 PCI Express-to-PCI Bridge"
+0x104c 0x8235 "unknown" "Texas Instruments|XIO2200 IEEE-1394a-2000 Controller (PHY/Link)"
+0x104c 0x8400 "acx-pci" "Texas Instruments|USR2210 22Mbps Wireless PC Card"
+0x104c 0x8401 "acx-pci" "Texas Instruments|ACX 100 22Mbps Wireless Interface"
+0x104c 0x9000 "unknown" "Texas Instruments|Wireless Interface (of unknown type)"
+0x104c 0x9065 "unknown" "Texas Instruments|TMS320DM642"
+0x104c 0x9066 "acx-pci" "Texas Instruments|WLAN Device TNETW1130(ACX111)"
+0x104c 0xa001 "unknown" "Texas Instruments|TDC1570 64-bit PCI ATM sar"
+0x104c 0xa100 "unknown" "Texas Instruments|TDC1561 32-bit PCI ATM sar"
+0x104c 0xa102 "unknown" "Texas Instruments|TNETA1575 HyperSAR Plus w/PCI host & UTOPIA i/f"
+0x104c 0xa106 "snd-asihpi" "Texas Instruments|TMS320C6205"
+0x104c 0xac10 "yenta_socket" "Texas Instruments|PCI1050 PC Card Controller"
+0x104c 0xac11 "yenta_socket" "Texas Instruments|PCI1053 PC Card Controller"
+0x104c 0xac12 "yenta_socket" "Texas Instruments|PCI1130 PC card CardBus Controller"
+0x104c 0xac13 "yenta_socket" "Texas Instruments|PCI1031 PCI-TO-PC CARD16 CONTROLLER UNIT"
+0x104c 0xac15 "yenta_socket" "Texas Instruments|PCI1131 Dual Socket PCI CardBus Controller"
+0x104c 0xac16 "yenta_socket" "Texas Instruments|PCI1250 PC card CardBus Controller"
+0x104c 0xac17 "yenta_socket" "Texas Instruments|PCI1220 CardBus Controller"
+0x104c 0xac18 "yenta_socket" "Texas Instruments|PCI1260 PC card CardBus Controller"
+0x104c 0xac19 "yenta_socket" "Texas Instruments|PCI1221 PC Card Controller"
+0x104c 0xac1a "yenta_socket" "Texas Instruments|PCI1210 PC card CardBus Controller"
+0x104c 0xac1b "yenta_socket" "Texas Instruments|PCI1221 PC card CardBus Controller"
+0x104c 0xac1c "yenta_socket" "Texas Instruments|PCI1225 PC Card Controller"
+0x104c 0xac1d "yenta_socket" "Texas Instruments|PCI1251 PC Card Controller"
+0x104c 0xac1e "yenta_socket" "Texas Instruments|PCI1251 High Performance PC Card Controller"
+0x104c 0xac1f "yenta_socket" "Texas Instruments|PCI1251B PC card CardBus Controller"
+0x104c 0xac20 "unknown" "Texas Instruments|TI 2030 PCI to PCI Bridge"
+0x104c 0xac21 "unknown" "Texas Instruments|PCI2031 PCI to PCI Bridge"
+0x104c 0xac22 "unknown" "Texas Instruments|PCI2032 PCI Docking Bridge"
+0x104c 0xac23 "unknown" "Texas Instruments|PCI2250 PCI-to-PCI Bridge"
+0x104c 0xac28 "unknown" "Texas Instruments|PCI2050/2050I PCI-to-PCI Bridge"
+0x104c 0xac30 "yenta_socket" "Texas Instruments|PCI1260 PC card CardBus Controller"
+0x104c 0xac40 "yenta_socket" "Texas Instruments|PCI4450 PC card Cardbus Controller"
+0x104c 0xac41 "yenta_socket" "Texas Instruments|PCI4410 PC card Cardbus Controller"
+0x104c 0xac42 "yenta_socket" "Texas Instruments|PCI4451 PC card Cardbus Controller"
+0x104c 0xac43 "yenta_socket" "Texas Instruments|PCI4550 PC card CardBus Controller"
+0x104c 0xac44 "yenta_socket" "Texas Instruments|PCI4510 PC Card Controller"
+0x104c 0xac46 "yenta_socket" "Texas Instruments|PCI4520 PC Card CardBus Controller"
+0x104c 0xac47 "yenta_socket" "Texas Instruments|PCI7510 PC card Cardbus Controller"
+0x104c 0xac48 "yenta_socket" ""
+0x104c 0xac49 "yenta_socket" ""
+0x104c 0xac4a "unknown" "Texas Instruments|PCI7510,7610 PC card Cardbus Controller"
+0x104c 0xac50 "yenta_socket" "Texas Instruments|PCI1410 PC card Cardbus Controller"
+0x104c 0xac51 "yenta_socket" "Texas Instruments|PCI1420 PC Card Controller"
+0x104c 0xac52 "yenta_socket" "Texas Instruments|PCI1451 PC card Cardbus Controller"
+0x104c 0xac53 "yenta_socket" "Texas Instruments|PCI1421 PC card Cardbus Controller"
+0x104c 0xac54 "yenta_socket" "Texas Instruments|PCI1620 PC Card CardBus Controller w/UltraMedia"
+0x104c 0xac55 "yenta_socket" "Texas Instruments|PCI1250 PC card Cardbus Controller"
+0x104c 0xac56 "yenta_socket" "Texas Instruments|PCI1510 PC Card CardBus Controller"
+0x104c 0xac57 "yenta_socket" "Texas Instruments|PCI1530 PC Card CardBus Controller"
+0x104c 0xac58 "yenta_socket" "Texas Instruments|PCI1515 PC Card CardBus Controller"
+0x104c 0xac59 "yenta_socket" "Texas Instruments|PCI1621 PC Card CardBus Controller w/UltraMedia"
+0x104c 0xac5a "yenta_socket" "Texas Instruments|PCI1610 PC Card CardBus Controller w/UltraMedia"
+0x104c 0xac60 "snd-asihpi" "Texas Instruments|PCI2040 PCI to DSP Bridge Controller"
+0x104c 0xac8d "yenta_socket" "Texas Instruments|PCI 7620"
+0x104c 0xac8e "yenta_socket" "Texas Instruments|PCI7420 CardBus Controller"
+0x104c 0xac8f "unknown" "Texas Instruments|PCI7420 Flash Media Controller"
+0x104c 0xfe00 "unknown" "Texas Instruments|FireWire Host Controller"
+0x104c 0xfe03 "unknown" "Texas Instruments|12C01A FireWire Host Controller"
+0x104d 0x8004 "unknown" "Sony Corp.|DTL-H2500 [Playstation development board]"
+0x104d 0x8009 "unknown" "Sony Corp.|CXD1947Q i.LINK Controller"
+0x104d 0x8039 "ohci1394" "Sony Corp.|CXD3222 iLINK Controller"
+0x104d 0x8056 "Hcf:www.linmodems.org" "Sony Corp.|Rockwell HCF 56K modem"
+0x104d 0x808a "unknown" "Sony Corp.|Memory Stick Controller"
+0x104e 0x0017 "unknown" "Oak Technology Inc.|OTI-64017"
+0x104e 0x0107 "Card:Paradise Accelerator Value" "Oak Technology Inc.|OTI-107 [Spitfire]"
+0x104e 0x0109 "unknown" "Oak Technology Inc.|Video Adapter"
+0x104e 0x0111 "unknown" "Oak Technology Inc.|OTI-64111 [Spitfire]"
+0x104e 0x0217 "unknown" "Oak Technology Inc.|OTI-64217"
+0x104e 0x0317 "unknown" "Oak Technology Inc.|OTI-64317"
+0x104e 0x0611 "unknown" "Oak Technology Inc.|OTI-610"
+0x104e 0x4d33 "unknown" "Oak Technology Inc.|IDE UltraDMA/33"
+0x104e 0x5300 "unknown" "Oak Technology Inc.|DC5030"
+0x104f 0x104f "unknown" "Co-Time Computer Ltd.|iatca8392 Multi I/O"
+0x1050 0x0000 "ne2k-pci" "Winbond Electronics Corp.|NE2000"
+0x1050 0x0001 "unknown" "Winbond Electronics Corp.|W83769F"
+0x1050 0x0033 "unknown" "Winbond Electronics Corp|W89C33D 802.11 a/b/g BB/MAC"
+0x1050 0x0105 "unknown" "Winbond Electronics Corp.|W82C105"
+0x1050 0x0628 "unknown" "Winbond Electronics Corp.|W83628F/629D PCI to ISA Bridge Set"
+0x1050 0x0840 "winbond-840" "Winbond Electronics Corp.|W89C840"
+0x1050 0x0940 "ne2k-pci" "Winbond Electronics Corp.|W89C940"
+0x1050 0x5a5a "ne2k-pci" "Winbond Electronics Corp.|W89C940F"
+0x1050 0x6692 0x1043 0x1702 "ISDN:hisax,type=36" "Winbond Electronics Corp|ISDN Adapter (PCI Bus, D, W)"
+0x1050 0x6692 0x1043 0x1703 "ISDN:hisax,type=36" "Winbond Electronics Corp|ISDN Adapter (PCI Bus, DV, W)"
+0x1050 0x6692 0x1043 0x1707 "ISDN:hisax,type=36" "Winbond Electronics Corp|ISDN Adapter (PCI Bus, DV, W)"
+0x1050 0x6692 0x144f 0x1702 "ISDN:hisax,type=36" "Winbond Electronics Corp|ISDN Adapter (PCI Bus, D, W)"
+0x1050 0x6692 0x144f 0x1703 "ISDN:hisax,type=36" "Winbond Electronics Corp|ISDN Adapter (PCI Bus, DV, W)"
+0x1050 0x6692 0x144f 0x1707 "ISDN:hisax,type=36" "Winbond Electronics Corp|ISDN Adapter (PCI Bus, DV, W)"
+0x1050 0x6692 0x16ec 0x3409 "w6692pci" ""
+0x1050 0x6692 "ISDN:hisax,type=36" "Winbond Electronics Corp.|W6692 ISDN Adapter"
+0x1050 0x9921 "unknown" "Winbond Electronics Corp.|W99200F MPEG-1 Video Encoder"
+0x1050 0x9922 "unknown" "Winbond Electronics Corp.|W9922PF ISDN Controller"
+0x1050 0x9960 "unknown" "Winbond Electronics Corp.|W9960CF Video Codec"
+0x1050 0x9961 "unknown" "Winbond Electronics Corp.|W9961CF H.263/H.261 Video Codec"
+0x1050 0x9970 "unknown" "Winbond Electronics Corp.|W9970CF"
+0x1050 0x9971 "unknown" "Winbond Electronics Corp.|W9971CF Video Graphics Controller With TV Encode"
+0x1051 0x0100 "ISDN:hisax,type=35" "Motorola MC145575|MC145575 ISDN Adapter"
+0x1054 0x0001 "unknown" "Hitachi Ltd.|PCI Bridge"
+0x1054 0x0002 "unknown" "Hitachi Ltd.|PCI Bus Controller"
+0x1054 0x0003 "unknown" "Hitachi Ltd.| "
+0x1054 0x3505 "unknown" "Hitachi Ltd.|SH7751 SuperH (SH) 32-Bit RISC MCU/MPU Series"
+0x1055 0x0810 "unknown" "EFAR Microsystems|486 Host Bridge"
+0x1055 0x0922 "unknown" "EFAR Microsystems|Pentium Host Bridge"
+0x1055 0x0926 "unknown" "EFAR Microsystems|PCI to ISA Bridge"
+0x1055 0x9130 "slc90e66" "EFAR Microsystems|EIDE Controller"
+0x1055 0x9178 "slamr" "EFAR Microsystems|Modem (SmartLink)"
+0x1055 0x9460 "unknown" "EFAR Microsystems|PCI to ISA Bridge"
+0x1055 0x9461 "unknown" "Standard Microsystems Corp.|SLC90E66 Victory66 UDMA EIDE Controller"
+0x1055 0x9462 "ohci-hcd" "EFAR Microsystems|USB Universal Host Controller [OHCI]"
+0x1055 0x9463 "i2c-piix4" "EFAR Microsystems|Power Management Controller [Bridge]"
+0x1057 0x0000 "unknown" "Motorola| "
+0x1057 0x0001 "unknown" "Motorola|MPC105 [Eagle]"
+0x1057 0x0002 "unknown" "Motorola|MPC106 [Grackle]"
+0x1057 0x0003 "snd-mixart" "Motorola|MPC107 PCI Bridge/Memory Controller for PowerPC"
+0x1057 0x0004 "unknown" "Motorola|MPC107 PCI Bridge/Memory Controller for PPC"
+0x1057 0x0006 "unknown" "Motorola|MPC8245 [Unity]"
+0x1057 0x0008 "unknown" "Motorola|MPC8540"
+0x1057 0x0009 "unknown" "Motorola|MPC8560"
+0x1057 0x0012 "unknown" "Motorola|MPC8548 [PowerQUICC III]"
+0x1057 0x0100 "unknown" "Motorola|MC145575 [HFC-PCI]"
+0x1057 0x0431 "unknown" "Motorola|KTI829c 100VG"
+0x1057 0x1801 0x14fb 0x0101 "unknown" "Motorola|Transas Radar Imitator Board [RIM]"
+0x1057 0x1801 0x14fb 0x0102 "unknown" "Motorola|Transas Radar Imitator Board [RIM-2]"
+0x1057 0x1801 0x14fb 0x0202 "unknown" "Motorola|Transas Radar Integrator Board [RIB-2]"
+0x1057 0x1801 0x14fb 0x0611 "unknown" "Motorola|1 channel CAN bus Controller [CanPci-1]"
+0x1057 0x1801 0x14fb 0x0612 "unknown" "Motorola|2 channels CAN bus Controller [CanPci-2]"
+0x1057 0x1801 0x14fb 0x0613 "unknown" "Motorola|3 channels CAN bus Controller [CanPci-3]"
+0x1057 0x1801 0x14fb 0x0614 "unknown" "Motorola|4 channels CAN bus Controller [CanPci-4]"
+0x1057 0x1801 0x14fb 0x0621 "unknown" "Motorola|1 channel CAN bus Controller [CanPci2-1]"
+0x1057 0x1801 0x14fb 0x0622 "unknown" "Motorola|2 channels CAN bus Controller [CanPci2-2]"
+0x1057 0x1801 0x14fb 0x0810 "unknown" "Motorola|Transas VTS Radar Integrator Board [RIB-4]"
+0x1057 0x1801 0x175c 0x4200 "snd-asihpi" "Motorola|ASI4215 Audio Adapter"
+0x1057 0x1801 0x175c 0x4300 "snd-asihpi" "Motorola|ASI43xx Audio Adapter"
+0x1057 0x1801 0x175c 0x4400 "snd-asihpi" "Motorola|ASI4401 Audio Adapter"
+0x1057 0x1801 0xecc0 0x0010 "snd-darla20" "Motorola|Darla"
+0x1057 0x1801 0xecc0 0x0020 "snd-gina20" "Motorola|Gina"
+0x1057 0x1801 0xecc0 0x0030 "snd-layla20" "Motorola|Layla"
+0x1057 0x1801 0xecc0 0x0031 "snd-layla20" "Motorola|Layla rev.1"
+0x1057 0x1801 0xecc0 0x0040 "snd-darla24" "Motorola|Darla24 rev.0"
+0x1057 0x1801 0xecc0 0x0041 "snd-darla24" "Motorola|Darla24 rev.1"
+0x1057 0x1801 0xecc0 0x0050 "snd-gina24" "Motorola|Gina24 rev.0"
+0x1057 0x1801 0xecc0 0x0051 "snd-gina24" "Motorola|Gina24 rev.1"
+0x1057 0x1801 0xecc0 0x0070 "snd-mona" "Motorola|Mona rev.0"
+0x1057 0x1801 0xecc0 0x0071 "snd-mona" "Motorola|Mona rev.1"
+0x1057 0x1801 0xecc0 0x0072 "snd-mona" "Motorola|Mona rev.2"
+0x1057 0x1801 "snd-asihpi" "Motorola|Audio I/O Controller (MIDI)"
+0x1057 0x1802 "unknown" "Motorola|DSP56305 24-Bit Digital Signal Processor"
+0x1057 0x18c0 "unknown" "Motorola|MPC8265A/MPC8266"
+0x1057 0x18c1 "unknown" "Motorola|MPC8271/MPC8272"
+0x1057 0x3052 "sm56" "Motorola|SM56 PCI Modem"
+0x1057 0x3055 "unknown" "Motorola|SM56 Data Fax Modem"
+0x1057 0x3410 0xecc0 0x0050 "snd-gina24" "Motorola|Gina24 rev.0"
+0x1057 0x3410 0xecc0 0x0051 "snd-gina24" "Motorola|Gina24 rev.1"
+0x1057 0x3410 0xecc0 0x0060 "snd-layla24" "Motorola|Layla24"
+0x1057 0x3410 0xecc0 0x0070 "snd-mona" "Motorola|Mona rev.0"
+0x1057 0x3410 0xecc0 0x0071 "snd-mona" "Motorola|Mona rev.1"
+0x1057 0x3410 0xecc0 0x0072 "snd-mona" "Motorola|Mona rev.2"
+0x1057 0x3410 0xecc0 0x0080 "snd-mia" "Motorola|Mia rev.0"
+0x1057 0x3410 0xecc0 0x0081 "snd-mia" "Motorola|Mia rev.1"
+0x1057 0x3410 0xecc0 0x0090 "snd-indigo" "Motorola|Indigo"
+0x1057 0x3410 0xecc0 0x00a0 "snd-indigoio" "Motorola|Indigo IO"
+0x1057 0x3410 0xecc0 0x00b0 "snd-indigodj" "Motorola|Indigo DJ"
+0x1057 0x3410 0xecc0 0x0100 "snd-gina3g" "Motorola|3G"
+0x1057 0x3410 "snd-gina20" "Motorola|DSP56361 Digital Signal Processor"
+0x1057 0x3421 "unknown" "Motorola|56IVMR/Phoenix 56ISM Modem"
+0x1057 0x4801 "unknown" "Motorola|Raven"
+0x1057 0x4802 "unknown" "Motorola|Falcon"
+0x1057 0x4803 "unknown" "Motorola|Hawk"
+0x1057 0x4806 "unknown" "Motorola|CPX8216"
+0x1057 0x4809 "unknown" "Motorola|CPX8216T HotSwap Controller"
+0x1057 0x4d68 "unknown" "Motorola|20268"
+0x1057 0x4d69 "unknown" "Motorola|20269"
+0x1057 0x5275 "unknown" "Motorola|20276"
+0x1057 0x5600 "unknown" "Motorola|SM56 PCI Modem"
+0x1057 0x5602 "unknown" "Motorola|SM56 PCI Modem"
+0x1057 0x5608 "wcfxo" "Motorola|56k dps PCI Modem"
+0x1057 0x5803 "unknown" "Motorola|MPC5200 32-Bit Embedded PowerPC Processor"
+0x1057 0x5806 "unknown" "Motorola|MCF54 Coldfire"
+0x1057 0x5808 "unknown" "Motorola|MPC8220"
+0x1057 0x5809 "unknown" "Motorola|MPC5200B"
+0x1057 0x6400 "unknown" "Motorola|MPC190 Security Processor (S1 family, encryption)"
+0x1057 0x6405 "unknown" "Motorola|MPC184 Security Processor (S1 family)"
+0x105a 0x0d30 "pdc202xx_old" "Promise Technology Inc.|20265"
+0x105a 0x0d38 "pdc202xx_old" "Promise Technology Inc.|PDC20263 FastTrak66 EIDE Controller"
+0x105a 0x1275 "pdc202xx_new" "Promise Technology Inc.|PDC20275 EIDE Controller"
+0x105a 0x3318 "sata_promise" "Promise Technology Inc.|PDC20318 FastTrak SATA150 TX4 Controller"
+0x105a 0x3319 "sata_promise" "Promise Technology Inc.|PDC20319 FastTrak SATA150 TX4 Controller"
+0x105a 0x3371 "sata_promise" "Promise Technology Inc.|PDC20371 FastTrak SATA150 TX2plus Controller"
+0x105a 0x3373 "sata_promise" "Promise Technology Inc.|PDC20376 FastTrak 378 Controller"
+0x105a 0x3375 "sata_promise" "Promise Technology Inc.|PDC20375 FastTrak SATA150 TX2plus Controller"
+0x105a 0x3376 "sata_promise" "Promise Technology Inc.|PDC20376 FastTrak 376 Controller"
+0x105a 0x3515 "sata_promise" "Promise Technology Inc.|PDC40719"
+0x105a 0x3519 "sata_promise" "Promise Technology Inc.|PDC40519 (FastTrak TX4200)"
+0x105a 0x3570 "sata_promise" "Promise Technology, Inc.|20771 (FastTrak TX2300)"
+0x105a 0x3571 "sata_promise" "Promise Technology Inc.|PDC20571 (FastTrak TX2200)"
+0x105a 0x3574 "sata_promise" "Promise Technology Inc.|PDC20579 SATAII 150 IDE Controller"
+0x105a 0x3577 "unknown" "Promise Technology Inc.|PDC40779 (SATA 300 779)"
+0x105a 0x3d17 "sata_promise" "Promise Technology Inc.|SATA300 TX4 Controller"
+0x105a 0x3d18 "sata_promise" "Promise Technology Inc.|PDC20518 SATAII 150 IDE Controller"
+0x105a 0x3d73 "sata_promise" "Promise Technology Inc.|PDC40775 (SATA 300 TX2plus)"
+0x105a 0x3d75 "sata_promise" "Promise Technology Inc.|PDC20575 (SATAII150 TX2plus)"
+0x105a 0x4301 "stex" ""
+0x105a 0x4302 "stex" "Promise Technology, Inc.|80333 [SuperTrak EX4350]"
+0x105a 0x4d30 "pdc202xx_old" "Promise Technology Inc.|20267"
+0x105a 0x4d33 "pdc202xx_old" "Promise Technology Inc.|20246"
+0x105a 0x4d38 "pdc202xx_old" "Promise Technology Inc.|20262 (Ultra66)"
+0x105a 0x4d68 "pdc202xx_new" "Promise Technology Inc.|20268"
+0x105a 0x4d69 "pdc202xx_new" "Promise Technology Inc.|20269"
+0x105a 0x5275 "pdc202xx_new" "Promise Technology Inc.|20276"
+0x105a 0x5300 "unknown" "Promise Technology Inc.|DC5300"
+0x105a 0x6268 "pdc202xx_new" "Promise Technology Inc.|PDC20268R FastTrak100 TX2/TX4 EIDE controller"
+0x105a 0x6269 "pdc202xx_new" "Promise Technology Inc.|PDC20271"
+0x105a 0x6621 "unknown" "Promise Technology Inc.|PDC20621 [SX4000] 4 Channel IDE RAID Controller"
+0x105a 0x6622 "sata_sx4" "Promise Technology Inc.|PDC2037X FastTrak Controller"
+0x105a 0x6624 "unknown" "Promise Technology Inc.|PDC20621 [FastTrak SX4100]"
+0x105a 0x6626 "unknown" "Promise Technology Inc.|PDC20618 Ultra 618"
+0x105a 0x6629 "sata_promise" "Promise Technology Inc.|FastTrak TX4000 Controller"
+0x105a 0x7275 "pdc202xx_new" "Promise Technology Inc.|PDC20277"
+0x105a 0x8000 "sx8" "Promise Technology Inc.|"
+0x105a 0x8002 "sx8" "Promise Technology Inc.|SATAII150 SX8"
+0x105a 0x8301 "stex" ""
+0x105a 0x8302 "stex" ""
+0x105a 0x8350 "stex" "Promise Technology, Inc.|80333 [SuperTrak EX8350/EX16350], 80331 [SuperTrak EX8300/EX16300]"
+0x105a 0xc350 "unknown" "Promise Technology, Inc.|80333 [SuperTrak EX12350]"
+0x105a 0xf350 "stex" ""
+0x105d 0x2309 "Card:Number Nine Imagine I-128 (2-8MB)" "Number 9|Imagine 128"
+0x105d 0x2339 "Card:Number Nine Imagine I-128 Series 2 (2-4MB)" "Number 9|Imagine 128-II"
+0x105d 0x493d "Card:Number Nine Imagine-128-T2R" "Number 9|Imagine 128 T2R [Ticket to Ride]"
+0x105d 0x5348 "Card:Number Nine Imagine-128-T2R" "Number 9|Revolution 4 (Imagine 128)"
+0x1060 0x0001 "unknown" "United Microelectronics [UMC]|UM82C881"
+0x1060 0x0002 "unknown" "United Microelectronics [UMC]|UM82C886"
+0x1060 0x0101 "generic" "United Microelectronics [UMC]|UM8673F"
+0x1060 0x0881 "unknown" "United Microelectronics [UMC]|UM8881"
+0x1060 0x0886 "unknown" "United Microelectronics [UMC]|UM8886F"
+0x1060 0x0891 "unknown" "United Microelectronics [UMC]|UM8891A"
+0x1060 0x1001 "unknown" "United Microelectronics [UMC]|UM886A"
+0x1060 0x673a "generic" "United Microelectronics [UMC]|UM8886BF"
+0x1060 0x673b "unknown" "United Microelectronics [UMC]|EIDE Master/DMA"
+0x1060 0x8710 "unknown" "United Microelectronics [UMC]|UM8710"
+0x1060 0x8821 "unknown" "United Microelectronics [UMC]|CPU/PCI Bridge"
+0x1060 0x8822 "unknown" "United Microelectronics [UMC]|PCI/ISA Bridge"
+0x1060 0x8851 "unknown" "United Microelectronics [UMC]|Pentium CPU/PCIBridge"
+0x1060 0x8852 "unknown" "United Microelectronics [UMC]|Pentium CPU/ISA Bridge"
+0x1060 0x886a "generic" "United Microelectronics [UMC]|UM8886A"
+0x1060 0x8881 "unknown" "United Microelectronics [UMC]|UM8881F"
+0x1060 0x8886 "unknown" "United Microelectronics [UMC]|UM8886F"
+0x1060 0x888a "unknown" "United Microelectronics [UMC]|UM8886A"
+0x1060 0x8891 "unknown" "United Microelectronics [UMC]|UM8891A"
+0x1060 0x9017 "unknown" "United Microelectronics [UMC]|UM9017F"
+0x1060 0x9018 "unknown" "United Microelectronics [UMC]|UM9018"
+0x1060 0x9026 "unknown" "United Microelectronics [UMC]|UM9026"
+0x1060 0xe881 "unknown" "United Microelectronics [UMC]|UM8881N"
+0x1060 0xe886 "unknown" "United Microelectronics [UMC]|UM8886N"
+0x1060 0xe88a "unknown" "United Microelectronics [UMC]|UM8886N"
+0x1060 0xe891 "unknown" "United Microelectronics [UMC]|UM8891N"
+0x1061 0x0001 "Card:AGX (generic)" "I.I.T.|AGX016"
+0x1061 0x0002 "unknown" "I.I.T.|IIT3204/3501"
+0x1065 0x8139 "unknown" "Texas Microsystems|Realtek 8139C Network Card"
+0x1066 0x0000 "unknown" "PicoPower Technology|PT80C826"
+0x1066 0x0001 "unknown" "PicoPower Technology|PT86C52x [Vesuvius]"
+0x1066 0x0002 "unknown" "PicoPower Technology|PT80C524 [Nile]"
+0x1066 0x0003 "unknown" "PicoPower Technology|PT86C524 [Nile] PCI-to-PCI Bridge"
+0x1066 0x0004 "unknown" "Picopower Technology (National)|ISA Bridge"
+0x1066 0x0005 "unknown" "PicoPower Technology|National PC87550 System Controller"
+0x1066 0x8002 "unknown" "PicoPower Technology|PT80C524 [Nile]"
+0x1067 0x0301 "unknown" "Mitsubishi Electric|AccelGraphics AccelECLIPSE"
+0x1067 0x0304 "unknown" "Mitsubishi Electric|AccelGALAXY A2100 [OEM Evans & Sutherland]"
+0x1067 0x0308 "unknown" "Mitsubishi Electric|Tornado 3000 [OEM Evans & Sutherland]"
+0x1067 0x1002 "unknown" "Mitsubishi Electric|VG500 [VolumePro Volume Rendering Accelerator]"
+0x1069 0x0001 "DAC960" "Mylex Corp.|DAC960P"
+0x1069 0x0002 "DAC960" "Mylex Corp.|DAC960PD"
+0x1069 0x0010 "DAC960" "Mylex Corp.|DAC960PX"
+0x1069 0x0020 "DAC960" "Mylex Corp.|DAC960 V5"
+0x1069 0x0050 "DAC960" "Mylex Corp.|Raid Adapter (DAC960)"
+0x1069 0xb166 0x1014 0x0242 "DAC960" "Mylex Corporationration|iSeries 2872 DASD IOA"
+0x1069 0xb166 0x1014 0x0266 "ipr" "Mylex Corp.|Gemstone Dual Channel PCI-X U320 SCSI Adapter"
+0x1069 0xb166 0x1014 0x0278 "ipr" "Mylex Corp.|Gemstone Dual Channel PCI-X U320 SCSI RAID Adapter"
+0x1069 0xb166 0x1014 0x02d3 "ipr" "Mylex Corp.|Gemstone Dual Channel PCI-X U320 SCSI Adapter"
+0x1069 0xb166 0x1014 0x02d4 "ipr" "Mylex Corp.|Gemstone Dual Channel PCI-X U320 SCSI RAID Adapter"
+0x1069 0xb166 0x1069 0x0200 "DAC960" "Mylex Corporationration|AcceleRAID 400, Single Channel, PCI-X, U320, SCSI RAID"
+0x1069 0xb166 0x1069 0x0202 "DAC960" "Mylex Corporationration|AcceleRAID Sapphire, Dual Channel, PCI-X, U320, SCSI RAID"
+0x1069 0xb166 0x1069 0x0204 "DAC960" "Mylex Corporationration|AcceleRAID 500, Dual Channel, Low-Profile, PCI-X, U320, SCSI RAID"
+0x1069 0xb166 0x1069 0x0206 "DAC960" "Mylex Corporationration|AcceleRAID 600, Dual Channel, PCI-X, U320, SCSI RAID"
+0x1069 0xb166 "DAC960" "Mylex Corp.|Gemstone chipset SCSI controller"
+0x1069 0xba55 "DAC960" "Mylex Corp.|eXtremeRAID support Device"
+0x1069 0xba56 "DAC960" "Mylex Corp.|eXtremeRAID 2000/3000 support Device"
+0x1069 0xba57 "unknown" "Mylex Corporationration|eXtremeRAID 4000/5000 support Device"
+0x106b 0x0001 "unknown" "Apple Computer Inc.|Bandit PowerPC Host-PCI Bridge"
+0x106b 0x0002 "unknown" "Apple Computer Inc.|Grand Central I/O Controller"
+0x106b 0x0003 "Card:FrameBuffer (generic)" "Apple Computer Inc.|Control Video"
+0x106b 0x0004 "unknown" "Apple Computer Inc.|PlanB Video-In"
+0x106b 0x0007 "unknown" "Apple Computer Inc.|O'Hare I/O Controller"
+0x106b 0x0008 "unknown" "Apple Computer Inc.|Bandit Host-PCI Bridge"
+0x106b 0x000c "unknown" "Apple Computer Inc.|DOS on Mac"
+0x106b 0x000e "unknown" "Apple Computer Inc.|Hydra Mac I/O Controller"
+0x106b 0x0010 "unknown" "Apple Computer Inc.|Heathrow Mac I/O Controller"
+0x106b 0x0017 "unknown" "Apple Computer Inc.|Paddington Mac I/O Controller"
+0x106b 0x0018 "ohci1394" "Apple Computer Inc.|UniNorth FireWire Controller"
+0x106b 0x0019 "ohci-hcd" "Apple Computer Inc.|Keylargo USB Controller"
+0x106b 0x001e "unknown" "Apple Computer Inc.|UniNorth Host-PCI Bridge"
+0x106b 0x001f "unknown" "Apple Computer Inc.|UniNorth Host-PCI Bridge"
+0x106b 0x0020 "uninorth-agp" "Apple Computer Inc.|Uni-North AGP Interface"
+0x106b 0x0021 "sungem" "Apple Computer Inc.|UniNorth GMAC Ethernet controller"
+0x106b 0x0022 "dmasound_pmac" "Apple Computer Inc.|Keylargo Mac I/O Controller"
+0x106b 0x0024 "sungem" "Apple Computer Inc.|GMAC Ethernet controller"
+0x106b 0x0025 "unknown" "Apple Computer Inc.|Pangea Mac I/O Controller"
+0x106b 0x0026 "ohci-hcd" "Apple Computer Inc.|KeyLargo/Pangea USB"
+0x106b 0x0027 "uninorth-agp" "Apple Computer Inc.|Pangea AGP Interface"
+0x106b 0x0028 "unknown" "Apple Computer Inc.|Pangea Host-PCI bridge"
+0x106b 0x0029 "unknown" "Apple Computer Inc.|Pangea Host-PCI bridge"
+0x106b 0x002d "uninorth-agp" "Apple Computer Inc.|UniNorth 1.5 AGP"
+0x106b 0x002e "unknown" "Apple Computer Inc.|UniNorth 1.5 PCI"
+0x106b 0x002f "unknown" "Apple Computer Inc.|UniNorth 1.5 Internal PCI"
+0x106b 0x0030 "ohci1394" "Apple Computer Inc.|UniNorth/Pangea FireWire"
+0x106b 0x0031 "ohci1394" "Apple Computer Inc.|UniNorth 2 FireWire"
+0x106b 0x0032 "sungem" "Apple Computer Inc.|UniNorth 2 GMAC (Sun GEM)"
+0x106b 0x0033 "unknown" "Apple Computer Inc.|UniNorth 2 ATA/100"
+0x106b 0x0034 "uninorth-agp" "Apple Computer Inc.|UniNorth 2 AGP"
+0x106b 0x0035 "unknown" "Apple Computer Inc.|UniNorth 2 PCI"
+0x106b 0x0036 "unknown" "Apple Computer Inc.|UniNorth 2 Internal PCI"
+0x106b 0x003b "unknown" "Apple Computer Inc.|UniNorth/Intrepid ATA/100"
+0x106b 0x003e "unknown" "Apple Computer Inc.|KeyLargo/Intrepid Mac I/O"
+0x106b 0x003f "ohci-hcd" "Apple Computer Inc.|KeyLargo/Intrepid USB"
+0x106b 0x0040 "ohci-hcd" "Apple Computer Inc.|K2 KeyLargo USB"
+0x106b 0x0041 "unknown" "Apple Computer Inc.|K2 KeyLargo Mac/IO"
+0x106b 0x0042 "ohci1394" "Apple Computer Inc.|K2 FireWire"
+0x106b 0x0043 "unknown" "Apple Computer Inc.|K2 ATA/100"
+0x106b 0x0045 "unknown" "Apple Computer Inc.|K2 HT-PCI Bridge"
+0x106b 0x0046 "unknown" "Apple Computer Inc.|K2 HT-PCI Bridge"
+0x106b 0x0047 "unknown" "Apple Computer Inc.|K2 HT-PCI Bridge"
+0x106b 0x0048 "unknown" "Apple Computer Inc.|K2 HT-PCI Bridge"
+0x106b 0x0049 "unknown" "Apple Computer Inc.|K2 HT-PCI Bridge"
+0x106b 0x004b "unknown" "Apple Computer Inc.|U3 AGP"
+0x106b 0x004c "sungem" "Apple Computer Inc.|K2 GMAC (Sun GEM)"
+0x106b 0x004f "unknown" "Apple Computer Inc.|Shasta Mac I/O"
+0x106b 0x0050 "unknown" "Apple Computer Inc.|Shasta IDE"
+0x106b 0x0051 "sungem" "Apple Computer Inc.|Shasta (Sun GEM)"
+0x106b 0x0052 "unknown" "Apple Computer Inc.|Shasta Firewire"
+0x106b 0x0053 "unknown" "Apple Computer Inc.|Shasta PCI Bridge"
+0x106b 0x0054 "unknown" "Apple Computer Inc.|Shasta PCI Bridge"
+0x106b 0x0055 "unknown" "Apple Computer Inc.|Shasta PCI Bridge"
+0x106b 0x0058 "unknown" "Apple Computer Inc.|U3L AGP Bridge"
+0x106b 0x0059 "unknown" "Apple Computer Inc.|U3H AGP Bridge"
+0x106b 0x0066 "unknown" "Apple Computer Inc.|Intrepid2 AGP Bridge"
+0x106b 0x0067 "unknown" "Apple Computer Inc.|Intrepid2 PCI Bridge"
+0x106b 0x0068 "unknown" "Apple Computer Inc.|Intrepid2 PCI Bridge"
+0x106b 0x0069 "unknown" "Apple Computer Inc.|Intrepid2 ATA/100"
+0x106b 0x006a "unknown" "Apple Computer Inc.|Intrepid2 Firewire"
+0x106b 0x006b "sungem" "Apple Computer Inc.|Intrepid2 GMAC (Sun GEM)"
+0x106b 0x1645 "tg3" "Apple Computer Inc.|Tigon3 Gigabit Ethernet NIC (BCM5701)"
+0x106c 0x8801 "unknown" "Hyundai Electronics America|Dual Pentium ISA/PCI Motherboard"
+0x106c 0x8802 "unknown" "Hyundai Electronics America|PowerPC ISA/PCI Motherboard"
+0x106c 0x8803 "unknown" "Hyundai Electronics America|Dual Window Graphics Accelerator"
+0x106c 0x8804 "unknown" "Hyundai Electronics America|PCI LAN Controller"
+0x106c 0x8805 "unknown" "Hyundai Electronics America|100-BaseT LAN"
+0x1071 0x8160 "unknown" "Mitac|Mitac 8060B Mobile Platform"
+0x1073 0x0001 "unknown" "Yamaha Corp.|3D GUI Accelerator"
+0x1073 0x0002 "unknown" "Yamaha Corp.|YGV615 [RPA3 3D-Graphics Controller]"
+0x1073 0x0003 "snd-ymfpci" "Yamaha Corp.|YMF-740"
+0x1073 0x0004 "snd-ymfpci" "Yamaha Corp.|YMF-724"
+0x1073 0x0005 "ymfpci" "Yamaha Corp.|DS1 Audio"
+0x1073 0x0006 "ymfpci" "Yamaha Corp.|DS1 Audio"
+0x1073 0x0008 "ymfpci" "Yamaha Corp.|DS1 Audio"
+0x1073 0x000a "snd-ymfpci" "Yamaha Corp.|DS1L Audio"
+0x1073 0x000c "snd-ymfpci" "Yamaha Corp.|YMF-740C [DS-1L Audio Controller]"
+0x1073 0x000d "snd-ymfpci" "Yamaha Corp.|YMF-724F [DS-1 Audio Controller]"
+0x1073 0x0010 "ymfpci" "Yamaha Corp.|YMF-744B [DS-1S Audio Controller]"
+0x1073 0x0012 "snd-ymfpci" "Yamaha Corp.|YMF-754 [DS-1E Audio Controller]"
+0x1073 0x0020 "ymfpci" "Yamaha Corp.|DS-1 Audio"
+0x1073 0x1000 "unknown" "Yamaha Corp.|SW1000XG Sound system"
+0x1073 0x2000 "unknown" "Yamaha Corp.|DS2416 Digital Mixing Card"
+0x1074 0x4e78 "unknown" "NexGen Microsystems|82c500/1"
+0x1077 0x1016 "qla1280" "QLogic Corp.|QLA10160"
+0x1077 0x1020 "qla1280" "QLogic Corp.|ISP1020"
+0x1077 0x1022 "unknown" "QLogic Corp.|ISP1022 Fast-wide SCSI"
+0x1077 0x1080 "qla1280" "QLogic Corp.|QLA1080"
+0x1077 0x1216 "qla1280" "QLogic Corp.|QLA12160 on AMI MegaRAID"
+0x1077 0x1240 "qla1280" "QLogic Corp.|QLA1240"
+0x1077 0x1280 "qla1280" "QLogic Corp.|QLA1280"
+0x1077 0x2020 "unknown" "QLogic Corp.|ISP2020A Fast!SCSI Basic Adapter"
+0x1077 0x2100 "qla2xxx" "QLogic Corp.|QLA2100"
+0x1077 0x2200 "qla2xxx" "QLogic Corp.|QLA2200"
+0x1077 0x2300 "qla2xxx" "QLogic Corp.|QLA2300"
+0x1077 0x2312 "qla2xxx" "QLogic Corp.|QLA2312"
+0x1077 0x2322 "qla2xxx" "QLogic Corp.|QLA2322"
+0x1077 0x2422 "qla2xxx" "QLogic Corp.|QLA2XXX"
+0x1077 0x2432 "qla2xxx" "QLogic Corp.|QLA2XXX"
+0x1077 0x3010 "unknown" "QLogic Corp.|QLA3010 Network Adapter"
+0x1077 0x3022 "unknown" "QLogic Corp.|QLA3022 Network Adapter"
+0x1077 0x4000 "unknown" "QLogic Corp.| "
+0x1077 0x4010 "qla4xxx" "QLogic Corp.| "
+0x1077 0x4022 "qla4xxx" "QLogic Corp.|QLA4022 iSCSI TOE Adapter"
+0x1077 0x5422 "qla2xxx" ""
+0x1077 0x5432 "qla2xxx" ""
+0x1077 0x6312 "qla2xxx" "QLogic Corp.|QLA6312"
+0x1077 0x6322 "qla2xxx" "QLogic Corp.|QLA6312"
+0x1078 0x0000 "Card:MediaGX" "Cyrix Corp.|5510 [Grappa]"
+0x1078 0x0001 "Card:MediaGX" "Cyrix Corp.|PCI Master [MEDIAGX]"
+0x1078 0x0002 "Card:MediaGX" "Cyrix Corp.|5520 [Cognac]"
+0x1078 0x0100 "unknown" "Cyrix Corp.|5530 Legacy [Kahlua]"
+0x1078 0x0101 "unknown" "Cyrix Corp.|5530 SMI [Kahlua]"
+0x1078 0x0102 "cs5530" "Cyrix Corp.|5530 IDE [Kahlua]"
+0x1078 0x0103 "kahlua" "Cyrix Corp.|5530 Audio [Kahlua]"
+0x1078 0x0104 "Card:MediaGX" "Cyrix Corp.|5530 Video [Kahlua]"
+0x1078 0x0400 "unknown" "Cyrix Corp.|ZFMicro CPU to PCI Bridge"
+0x1078 0x0401 "unknown" "Cyrix Corp.|ZFMicro Power Management Controller"
+0x1078 0x0402 "unknown" "Cyrix Corp.|ZFMicro IDE Controller"
+0x1078 0x0403 "unknown" "Cyrix Corp.|ZFMicro Expansion Bus"
+0x1079 0x0d01 "unknown" "I-Bus| "
+0x107d 0x0000 "unknown" "LeadTek Research Inc.|P86C850"
+0x107d 0x204d "unknown" "LeadTek Research Inc.|[GeForce 7800 GTX] Winfast PX7800 GTX TDH"
+0x107d 0x2134 "unknown" "LeadTek Research Inc.|WinFast 3D S320 II"
+0x107d 0x2971 "unknown" "LeadTek Research Inc.|[GeForce FX 5900] WinFast A350 TDH MyViVo"
+0x107e 0x0001 "unknown" "Interphase Corp.|ATM Interface Card"
+0x107e 0x0002 "unknown" "Interphase Corp.|100 VG AnyLan Controller"
+0x107e 0x0004 "iph5526" "Interphase Corp.|5526"
+0x107e 0x0005 "iph5526" "Interphase Corp.|55x6"
+0x107e 0x0008 "iphase" "Interphase Corp.|155 Mbit ATM Controller"
+0x107e 0x0009 "iphase" "Interphase Corp.|5525/5575 ATM Adapter (155 Mbit) [Atlantic]"
+0x107e 0x9003 "unknown" "Interphase Corp.|5535-4P-BRI-ST"
+0x107e 0x9007 "unknown" "Interphase Corp.|5535-4P-BRI-U"
+0x107e 0x9008 "unknown" "Interphase Corp.|5535-1P-SR"
+0x107e 0x900c "unknown" "Interphase Corp.|5535-1P-SR-ST"
+0x107e 0x900e "unknown" "Interphase Corp.|5535-1P-SR-U"
+0x107e 0x9011 "unknown" "Interphase Corp.|5535-1P-PRI"
+0x107e 0x9013 "unknown" "Interphase Corp.|5535-2P-PRI"
+0x107e 0x9023 "unknown" "Interphase Corp.|5535-4P-BRI-ST"
+0x107e 0x9027 "unknown" "Interphase Corp.|5536-4P-BRI-U"
+0x107e 0x9031 "unknown" "Interphase Corp.|5535-1P-PRI"
+0x107e 0x9033 "unknown" "Interphase Corp.|5536-2P-PRI"
+0x107e 0x9060 "unknown" "Interphase Corp.|6535 CompactPCI T1/E1/J1Communications Ctrlr"
+0x107e 0x9070 "unknown" "Interphase Corp.|4538 PMC T1/E1/J1 Communications Controller"
+0x107e 0x9080 "unknown" "Interphase Corp.|4532-002/005 PMC ATM Over OC-3/STM-1 Comm Controller"
+0x107e 0x9081 "unknown" "Interphase Corp.|4532-001/004 PMC ATM Over OC-3/STM-1 Comm Controller"
+0x107e 0x9082 "unknown" "Interphase Corp.|4532-000/003 PMC ATM Over OC-3/STM-1 Comm Controller"
+0x107e 0x9090 "unknown" "Interphase Corp.|4531S-000/001 PMC ATM Over T3/E3 Communications Ctrlr"
+0x107e 0x90a0 "unknown" "Interphase Corp.|4539 PMC Quad T1/E1/J1 Communications Ctrlr"
+0x107f 0x0802 "unknown" "Data Technology Corp.|SL82C105"
+0x107f 0x0803 "unknown" "Data Technology Corp.|EIDE Bus Master Controller"
+0x107f 0x0806 "unknown" "Data Technology Corp.|EIDE Controller"
+0x107f 0x1138 "unknown" "Data Technology Corp.|High Speed Parallel Port"
+0x107f 0x2015 "unknown" "Data Technology Corp.|EIDE Controller"
+0x1080 0x0600 "unknown" "Contaq Microsystems|82C599"
+0x1080 0xc691 "unknown" "Contaq Microsystems|Cypress CY82C691"
+0x1080 0xc693 "cy82c693" "Contaq Microsystems|82c693"
+0x1081 0x0d47 "unknown" "Supermac Technology|Radius PCI to NuBUS Bridge"
+0x1083 0x0001 "unknown" "Forex Computer Corp.|FR710"
+0x1083 0x0613 "unknown" "Forex Computer Corp.|Host Bridge ??"
+0x1085 0x0001 "unknown" "Tulip Computers Int'l BV|UsbDgn Datalaster Interface for OBD automotive"
+0x1087 0x9200 "unknown" "Cache Computer| "
+0x108a 0x0001 "unknown" "Bit3 Computer Corp.|VME Bridge Model 617"
+0x108a 0x0010 "unknown" "Bit3 Computer Corp.|VME Bridge Model 618"
+0x108a 0x0040 "unknown" "SBS Technologies|dataBLIZZARD"
+0x108a 0x3000 "unknown" "Bit3 Computer Corp.|VME Bridge Model 2706"
+0x108d 0x0001 "unknown" "Olicom|Token-Ring 16/4 PCI Adapter (3136/3137)"
+0x108d 0x0002 "ibmtr" "Olicom|16/4 Token Ring"
+0x108d 0x0004 "ibmtr" "Olicom|RapidFire 3139 Token-Ring 16/4 PCI Adapter"
+0x108d 0x0005 "ibmtr" "Olicom|GoCard 3250 Token-Ring 16/4 CardBus PC Card"
+0x108d 0x0006 "unknown" "Olicom|OC-3530 RapidFire Token-Ring 100"
+0x108d 0x0007 "ibmtr" "Olicom|RapidFire 3141 Token-Ring 16/4 PCI Fiber Adapter"
+0x108d 0x0008 "unknown" "Olicom|RapidFire 3540 HSTR 100/16/4 PCI Adapter"
+0x108d 0x000a "unknown" "Olicom|OC-3150 RapidFire Token-Ring 16/4 PCI Adapter"
+0x108d 0x0011 "unknown" "Olicom|OC-2315"
+0x108d 0x0012 "tlan" "Olicom|OC-2325"
+0x108d 0x0013 "tlan" "Olicom|OC-2183/2185"
+0x108d 0x0014 "tlan" "Olicom|OC-2326"
+0x108d 0x0019 "tlan" "Olicom|OC-2327/2250 10/100 Ethernet Adapter"
+0x108d 0x0021 "unknown" "Olicom|OC-6151/6152 [RapidFire ATM PCI 155]"
+0x108d 0x0022 "unknown" "Olicom|ATM Adapter"
+0x108e 0x0001 "unknown" "Sun Microsystems Computer Corp.|EBUS"
+0x108e 0x1000 "unknown" "Sun Microsystems Computer Corp.|EBUS"
+0x108e 0x1001 "sunhme" "Sun Microsystems Computer Corp.|Happy Meal"
+0x108e 0x1100 "unknown" "Sun Microsystems Computer Corp.|RIO EBUS"
+0x108e 0x1101 "sungem" "Sun Microsystems Computer Corp.|PCIO Happy Meal Ethernet"
+0x108e 0x1102 "ohci1394" "Sun Microsystems Computer Corp.|RIO 1394"
+0x108e 0x1103 "ohci-hcd" "Sun Microsystems Computer Corp.|RIO USB"
+0x108e 0x1648 "unknown" "Sun Microsystems Computer Corp.|[bge] Gigabit Ethernet"
+0x108e 0x2bad "sungem" "Sun Microsystems Computer Corp.|GEM"
+0x108e 0x5000 "unknown" "Sun Microsystems Computer Corp.|Simba Advanced PCI Bridge"
+0x108e 0x5043 "unknown" "Sun Microsystems Computer Corp.|SunPCI Co-processor"
+0x108e 0x8000 "unknown" "Sun Microsystems Computer Corp.|PCI Bus Module"
+0x108e 0x8001 "unknown" "Sun Microsystems Computer Corp.|Schizo PCI Bus Module"
+0x108e 0x8002 "unknown" "Sun Microsystems Computer Corp.|Schizo+ PCI Bus Module"
+0x108e 0xa000 "unknown" "Sun Microsystems Computer Corp.|Ultra IIi PCI"
+0x108e 0xa001 "unknown" "Sun Microsystems Computer Corp.|Ultra IIe"
+0x108e 0xa801 "unknown" "Sun Microsystems Computer Corp.|Tomatillo PCI Bus Module"
+0x108e 0xabba "cassini" "Sun Microsystems Computer Corp.|Cassini 10/100/1000"
+0x1091 0x0020 "unknown" "Intergraph Corp.|3D graphics processor"
+0x1091 0x0021 "unknown" "Intergraph Corp.|3D graphics processor w/Texturing"
+0x1091 0x0040 "unknown" "Intergraph Corp.|3D graphics frame buffer"
+0x1091 0x0041 "unknown" "Intergraph Corp.|3D graphics frame buffer"
+0x1091 0x0060 "unknown" "Intergraph Corp.|Proprietary bus bridge"
+0x1091 0x00e4 "unknown" "Intergraph Corp.|Powerstorm 4D50T"
+0x1091 0x0720 "unknown" "Intergraph Corp.|Motion JPEG codec"
+0x1091 0x07a0 "unknown" "Intergraph Corp.|Sun Expert3D-Lite Graphics Accelerator"
+0x1091 0x1091 "unknown" "Intergraph Corp.|Sun Expert3D Graphics Accelerator"
+0x1092 0x00a0 "Card:Diamond SpeedStar Pro SE (CL-GD5430/5434)" "Diamond Multimedia Systems|Speedstar Pro SE"
+0x1092 0x00a8 "Card:Diamond SpeedStar 64" "Diamond Multimedia Systems|Speedstar 64"
+0x1092 0x0550 "Card:Diamond Viper 550" "Diamond Multimedia Systems||Viper 550"
+0x1092 0x08d4 "unknown" "Diamond Multimedia Systems|Supra 2260 Modem"
+0x1092 0x094c "unknown" "Diamond Multimedia Systems|SupraExpress 56i Pro"
+0x1092 0x09c8 "unknown" "Diamond Computer Systems|SUP2760 SupraExpress 56i Pro VCC"
+0x1092 0x1092 "Card:Diamond Viper 330" "Diamond Multimedia Systems|Viper V330"
+0x1092 0x6120 "unknown" "Diamond Multimedia Systems|Maximum DVD"
+0x1092 0x8810 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth SE"
+0x1092 0x8811 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64/SE"
+0x1092 0x8880 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth"
+0x1092 0x8881 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth"
+0x1092 0x88b0 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x88b1 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x88c0 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x88c1 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x88d0 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x88d1 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x88f0 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x88f1 "Card:Diamond Stealth 64 DRAM SE" "Diamond Multimedia Systems|Stealth 64"
+0x1092 0x9876 "unknown" "Diamond Multimedia Systems|Supra Express 56i Pro CW #2"
+0x1092 0x9999 "unknown" "Diamond Multimedia Systems|DMD-I0928-1 Monster sound sound chip"
+0x1093 0x0160 "unknown" "National Instruments|PCI-DIO-96"
+0x1093 0x0161 "unknown" "National Instruments|PCI-1200 multifunction data acquisition board"
+0x1093 0x0162 "unknown" "National Instruments|PCI-MIO-16XE-50"
+0x1093 0x1150 "unknown" "National Instruments|PCI-DIO-32HS High Speed Digital I/O Board"
+0x1093 0x1170 "unknown" "National Instruments|PCI-MIO-16XE-10"
+0x1093 0x1180 "unknown" "National Instruments|PCI-MIO-16E-1"
+0x1093 0x1190 "unknown" "National Instruments|PCI-MIO-16E-4"
+0x1093 0x11b0 "unknown" "National Instruments| "
+0x1093 0x11c0 "unknown" "National Instruments| "
+0x1093 0x11d0 "unknown" "National Instruments| "
+0x1093 0x11e0 "unknown" "National Instruments| "
+0x1093 0x1270 "unknown" "National Instruments|PCI-6032E Multifunction Data Acquisition Card"
+0x1093 0x12b0 "unknown" "National Instruments|PCI-6534 High Speed DIO"
+0x1093 0x1310 "unknown" "National Instruments|PCI-6602 Data Acquisition Device"
+0x1093 0x1320 "unknown" "National Instruments| "
+0x1093 0x1330 "unknown" "National Instruments|PCI-6031E"
+0x1093 0x1340 "unknown" "National Instruments|PCI-6033E Multifunction Data Acquisition Card"
+0x1093 0x1350 "unknown" "National Instruments|PCI-6071E"
+0x1093 0x1360 "unknown" "National Instruments| "
+0x1093 0x14e0 "unknown" "National Instruments|PCI-6110"
+0x1093 0x14f0 "unknown" "National Instruments|PCI-6111"
+0x1093 0x17d0 "unknown" "National Instruments|PCI-6503"
+0x1093 0x1870 "unknown" "National Instruments|PCI-6713"
+0x1093 0x1880 "unknown" "National Instruments|PCI-6711"
+0x1093 0x18b0 "unknown" "National Instruments|PCI-6052E"
+0x1093 0x2410 "unknown" "National Instruments|PCI-6733"
+0x1093 0x2890 "unknown" "National Instruments|PCI-6036E"
+0x1093 0x2a60 "unknown" "National Instruments|PCI-6023E"
+0x1093 0x2a70 "unknown" "National Instruments|PCI-6024E Multifunction Data Acquisition Card"
+0x1093 0x2a80 "unknown" "National Instruments|PCI-6025E Multifunction Data Acquisition Card"
+0x1093 0x2b20 "unknown" "National Instruments| "
+0x1093 0x2c80 "unknown" "National Instruments|PCI-6035E"
+0x1093 0x2ca0 "unknown" "National Instruments|PCI-6034E"
+0x1093 0x70a9 "unknown" "National Instruments|PCI-6528"
+0x1093 0x70b8 "unknown" "National Instruments|PCI-6251 [M Series - High Speed Multifunction DAQ]"
+0x1093 0xb001 "unknown" "National Instruments|IMAQ-PCI-1408"
+0x1093 0xb011 "unknown" "National Instruments|IMAQ-PXI-1408"
+0x1093 0xb021 "unknown" "National Instruments|IMAQ-PCI-1424"
+0x1093 0xb031 "unknown" "National Instruments|IMAQ-PCI-1413"
+0x1093 0xb041 "unknown" "National Instruments|IMAQ-PCI-1407"
+0x1093 0xb051 "unknown" "National Instruments|IMAQ-PXI-1407"
+0x1093 0xb061 "unknown" "National Instruments|IMAQ-PCI-1411"
+0x1093 0xb071 "unknown" "National Instruments|IMAQ-PCI-1422"
+0x1093 0xb081 "unknown" "National Instruments|IMAQ-PXI-1422"
+0x1093 0xb091 "unknown" "National Instruments|IMAQ-PXI-1411"
+0x1093 0xc801 "tnt4882" "National Instruments|PCI-GPIB"
+0x1093 0xc811 "tnt4882" "National Instruments| "
+0x1093 0xc821 "tnt4882" "National Instruments| "
+0x1093 0xc831 "tnt4882" "National Instruments|PCI-GPIB bridge"
+0x1093 0xc840 "unknown" "National Instruments| "
+0x1093 0xd130 "unknown" "National Instruments|PCI-232/2 2-port RS-232 Serial Interface Board"
+0x1095 0x0240 "sata_sil" "CMD Technology Inc.|Adaptec AAR-1210SA SATA HostRAID Controller"
+0x1095 0x0640 "unknown" "CMD Technology Inc.|PCI0640"
+0x1095 0x0641 "unknown" "CMD Technology Inc.|PCI-0640 EIDE Adapter with RAID 1"
+0x1095 0x0642 "unknown" "CMD Technology Inc.|EIDE Adapter with RAID 1"
+0x1095 0x0643 "cmd64x" "CMD Technology Inc.|PCI0643 (PCI EIDE controller)"
+0x1095 0x0646 "cmd64x" "CMD Technology Inc.|PCI0646 (bus master IDE)"
+0x1095 0x0647 "unknown" "CMD Technology Inc.|PCI0647"
+0x1095 0x0648 "cmd64x" "CMD Technology Inc.|PCI0648 (Ultra DMA PCI-IDE/ATA Chip)"
+0x1095 0x0649 "cmd64x" "CMD Technology Inc.|PCI0649 (Ultra ATA/100 Jost Ctrlr)"
+0x1095 0x0650 "unknown" "CMD Technology Inc.|PBC0650A (Fast SCSI-II Ctrlr)"
+0x1095 0x0670 "ohci-hcd" "CMD Technology Inc.|USB0670 (PCI-USB ASIC)"
+0x1095 0x0673 "ohci-hcd" "CMD Technology Inc.|USB0673 PCI-USB ASIC"
+0x1095 0x0680 "siimage" "CMD Technology Inc.|PCI-680 UltraATA/133 EIDE Controller"
+0x1095 0x3112 "sata_sil" "Silicon Image Inc.|Sil3112A Serial ATA"
+0x1095 0x3114 "sata_sil" "Silicon Image inc.|Sil3114A Serial ATA"
+0x1095 0x3124 "sata_sil24" "Silicon Image Inc.|SiI 3124 PCI-X Serial ATA Controller"
+0x1095 0x3131 "sata_sil24" "Silicon Image Inc.|Serial ATA Controller"
+0x1095 0x3132 "sata_sil24" "Silicon Image Inc.|SiI 3132 PCI-X Serial ATA Controller"
+0x1095 0x3512 "sata_sil" "Silicon Image Inc.|Sil3512A Serial ATA"
+0x1095 0x3531 "sata_sil24" "Silicon Image Inc.|Serial ATA Controller"
+0x1097 0x0038 "unknown" "Appian Graphics|EIDE Controller"
+0x1097 0x3d32 "unknown" "Appian Graphics|Jeronimo 2000 AGP"
+0x1098 0x0001 "Card:VESA driver (generic)" "Quantum Designs|QD-8500"
+0x1098 0x0002 "Card:VESA driver (generic)" "Quantum Designs|QD-8580"
+0x109e 0x032e "unknown" "Brooktree Corp.|Bt878 Video Capture"
+0x109e 0x0350 "bttv" "Brooktree Corp.|Bt848 TV with DMA push"
+0x109e 0x0351 "bttv" "Brooktree Corp.|Bt849A Video capture"
+0x109e 0x0369 "bttv" "Brooktree Corp.|Bt878 Video Capture"
+0x109e 0x036c "bttv" "Brooktree Corp.|Bt879(??) Video Capture"
+0x109e 0x036e "bttv" "Brooktree Corp.|Bt878"
+0x109e 0x036f "bttv" "Brooktree Corp.|Bt879"
+0x109e 0x0370 "bttv" "Brooktree Corp.|Bt880 Video Capture"
+0x109e 0x0878 0x0070 0x13eb "bt878" "Brooktree Corp.|WinTV Series"
+0x109e 0x0878 0x0070 0xff01 "snd_bt87x" "Brooktree Corp.|Bt878 Audio Capture"
+0x109e 0x0878 0x0071 0x0101 "bt878" "Brooktree Corp.|DigiTV PCI"
+0x109e 0x0878 0x1002 0x0001 "bt878" "Brooktree Corp.|TV-Wonder"
+0x109e 0x0878 0x1002 0x0003 "bt878" "Brooktree Corp.|TV-Wonder/VE"
+0x109e 0x0878 0x107d 0x6606 "snd_bt87x" "Leadtek|Winfast TV 2000xp delux"
+0x109e 0x0878 0x11bd 0x0012 "bt878" "Brooktree Corp.|PCTV pro (TV + FM stereo receiver, audio section)"
+0x109e 0x0878 0x11bd 0x001c "bt878" "Brooktree Corp.|PCTV Sat (DBC receiver)"
+0x109e 0x0878 0x121a 0x3000 "snd-bt87x" ""
+0x109e 0x0878 0x127a 0x0001 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x127a 0x0002 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x127a 0x0003 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x127a 0x0048 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x13e9 0x0070 "bt878" "Brooktree Corp.|Win/TV (Audio Section)"
+0x109e 0x0878 0x144f 0x3000 "bt878" "Brooktree Corp.|MagicTView CPH060 - Audio"
+0x109e 0x0878 0x1461 0x0002 "bt878" "Brooktree Corp.|Avermedia PCTV98 Audio Capture"
+0x109e 0x0878 0x1461 0x0003 "snd-bt87x" ""
+0x109e 0x0878 0x1461 0x0004 "bt878" "Brooktree Corp.|AVerTV WDM Audio Capture"
+0x109e 0x0878 0x1461 0x0761 "bt878" "Brooktree Corp.|AVerTV DVB-T"
+0x109e 0x0878 0x1461 0x0771 "bt878" "Brooktree Corporation|AverMedia AVerTV DVB-T 771"
+0x109e 0x0878 0x14f1 0x0001 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x14f1 0x0002 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x14f1 0x0003 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x14f1 0x0048 "bt878" "Brooktree Corp.|Bt878 Video Capture (Audio Section)"
+0x109e 0x0878 0x1822 0x0001 "bt878" "Brooktree Corp.|VisionPlus DVB Card"
+0x109e 0x0878 0x18ac 0xd500 "bt878" "Brooktree Corp.|DViCO FusionHDTV5 Lite"
+0x109e 0x0878 0x270f 0xfc00 "bt878" "Brooktree Corp.|Digitop DTT-1000"
+0x109e 0x0878 0xbd11 0x1200 "snd_bt87x" "Brooktree Corp.|Bt878 Audio Capture"
+0x109e 0x0878 "bt878" "Brooktree Corp.|Pinnacle PCTV Sat DVB PCI (based on the Bt878 PCI bridge)"
+0x109e 0x0879 0x0070 0x13eb "snd-bt87x" "Brooktree Corp.|Bt879 Video Capture (Audio Section)"
+0x109e 0x0879 "btaudio" "Brooktree Corp.|Bt879 Video Capture (Audio Section)"
+0x109e 0x0880 "btaudio" "Brooktree Corp.|Bt880 Video Capture (Audio Section)"
+0x109e 0x2115 "unknown" "Brooktree Corp.|BtV 2115 Mediastream controller"
+0x109e 0x2125 "unknown" "Brooktree Corp.|BtV 2125 Mediastream controller"
+0x109e 0x2164 "unknown" "Brooktree Corp.|BtV 2164"
+0x109e 0x2165 "unknown" "Brooktree Corp.|BtV 2165"
+0x109e 0x8230 "unknown" "Brooktree Corp.|Bt8230 ATM Segment/Reassembly Ctrlr (SRC)"
+0x109e 0x8472 "unknown" "Brooktree Corp.|Bt8472"
+0x109e 0x8474 "unknown" "Brooktree Corp.|Bt8474"
+0x10a4 0x0000 "unknown" "Globe Manufacturing Sales| "
+0x10a5 0x3052 "slamr" "Smart Link Ltd.|SmartPCI562 56K Modem"
+0x10a5 0x5449 "unknown" "Smart Link Ltd.|SmartPCI561 modem"
+0x10a5 0x5459 "slamr" "Smart Link Ltd.|modem"
+0x10a8 0x0000 "Card:STB Horizon" "Sierra Semiconductor|STB Horizon 64"
+0x10a9 0x0001 "unknown" "Silicon Graphics Inc.|Crosstalk to PCI Bridge"
+0x10a9 0x0002 "unknown" "Silicon Graphics Inc.|Linc I/O controller"
+0x10a9 0x0003 "8250_pci" "Silicon Graphics Inc.|IOC3"
+0x10a9 0x0004 "unknown" "Silicon Graphics Inc.|O2 MACE"
+0x10a9 0x0005 "unknown" "Silicon Graphics Inc.|RAD Audio"
+0x10a9 0x0006 "unknown" "Silicon Graphics Inc.|HPCEX"
+0x10a9 0x0007 "unknown" "Silicon Graphics Inc.|RPCEX"
+0x10a9 0x0008 "unknown" "Silicon Graphics Inc.|DiVO VIP"
+0x10a9 0x0009 "acenic" "Silicon Graphics Inc.|Alteon Gigabit Ethernet"
+0x10a9 0x0010 "unknown" "Silicon Graphics Inc.|AMP Video I/O"
+0x10a9 0x0011 "unknown" "Silicon Graphics Inc.|GRIP"
+0x10a9 0x0012 "unknown" "Silicon Graphics Inc.|SGH PSHAC GSN"
+0x10a9 0x1001 "unknown" "Silicon Graphics Inc.|Magic Carpet"
+0x10a9 0x1002 "unknown" "Silicon Graphics Inc.|Lithium"
+0x10a9 0x1003 "unknown" "Silicon Graphics Inc.|Dual JPEG 1"
+0x10a9 0x1004 "unknown" "Silicon Graphics Inc.|Dual JPEG 2"
+0x10a9 0x1005 "unknown" "Silicon Graphics Inc.|Dual JPEG 3"
+0x10a9 0x1006 "unknown" "Silicon Graphics Inc.|Dual JPEG 4"
+0x10a9 0x1007 "unknown" "Silicon Graphics Inc.|Dual JPEG 5"
+0x10a9 0x1008 "unknown" "Silicon Graphics Inc.|Cesium"
+0x10a9 0x100a "unknown" "Silicon Graphics Inc.|IOC4 I/O controller"
+0x10a9 0x2001 "unknown" "Silicon Graphics Inc.|Fibre Channel"
+0x10a9 0x2002 "unknown" "Silicon Graphics Inc.|ASDE"
+0x10a9 0x4001 "unknown" "Silicon Graphics Inc.|TIO-CE PCI Express Bridge"
+0x10a9 0x4002 "unknown" "Silicon Graphics Inc.|TIO-CE PCI Express Port"
+0x10a9 0x8001 "unknown" "Silicon Graphics Inc.|O2 1394"
+0x10a9 0x8002 "unknown" "Silicon Graphics Inc.|G-net NT"
+0x10a9 0x8010 "unknown" "Silicon Graphics Inc.|Broadcom e-net [SGI IO9/IO10 BaseIO]"
+0x10a9 0x8018 "unknown" "Silicon Graphics Inc.|Broadcom e-net [SGI A330 Server BaseIO]"
+0x10aa 0x0000 "unknown" "ACC Microelectronics|ACCM 2188"
+0x10aa 0x2051 "unknown" "ACC Microelectronics|Laptop Chipset CPU Bridge"
+0x10aa 0x5842 "unknown" "ACC Microelectronics|Laptop Chipset ISA Bridge"
+0x10ab 0x0001 "unknown" "Winbond Electronics Corp.|W83769F"
+0x10ab 0x0105 "unknown" "Winbond Electronics Corp.|SL82C105"
+0x10ab 0x0565 "unknown" "Winbond Electronics Corp.|W83C553"
+0x10ad 0x0001 "unknown" "Symphony Labs|W83769F"
+0x10ad 0x0003 "unknown" "Symphony Labs|SL82C103"
+0x10ad 0x0005 "unknown" "Symphony Labs|SL82C105"
+0x10ad 0x0103 "unknown" "Symphony Labs|SL82c103"
+0x10ad 0x0105 "pata_sl82c105" "Symphony Labs|SL82c105"
+0x10ad 0x0150 "unknown" "Symphony Labs|EIDE Controller"
+0x10ad 0x0565 "unknown" "Symphony Labs|W83C553"
+0x10ae 0x0002 "unknown" "Cornerstone Technology|Graphics Controller"
+0x10af 0x0001 "unknown" "Microcomputer Systems|IDE"
+0x10b3 0x3106 "unknown" "Databook Inc.|DB87144"
+0x10b3 0xb106 "yenta_socket" "Databook Inc.|DB87144"
+0x10b4 0x1b1d "Card:STB Systems Velocity 3D" "STB Systems Inc.|Velocity 128 3D"
+0x10b4 0x2636 "bttv" "STB|???"
+0x10b5 0x0001 "unknown" "PLX Technology Inc.|i960 PCI bus interface"
+0x10b5 0x0324 "unknown" "PLX Technology Inc.| "
+0x10b5 0x0480 "unknown" "PLX Technology Inc.|IOP 480 Integrated PowerPC I/O Processor"
+0x10b5 0x0960 "unknown" "PLX Technology Inc.|PCI 9080RDK-960 PCI Reference Design Kit for PCI 9080"
+0x10b5 0x1030 "ISDN:hisax,type=34" "PLX Technology Inc.|Gazel ISDN Adapter"
+0x10b5 0x1042 "unknown" "PLX Technology Inc.|Brandywine / jxi2, Inc. - PMC-SyncClock32, IRIG A & B, Nasa 36"
+0x10b5 0x1054 "ISDN:hisax,type=34" "PLX Technology Inc.|Gazel ISDN Adapter"
+0x10b5 0x106a 0x10b5 0x106a "8250_pci" ""
+0x10b5 0x1076 "8250_pci" "PLX Technology Inc.|VScom 800 8 port serial adaptor"
+0x10b5 0x1077 "8250_pci" "PLX Technology Inc.|VScom 400 4 port serial adaptor"
+0x10b5 0x1078 "unknown" "PLX Technology Inc.|PCI 9050 Vision Systems VScom PCI-210"
+0x10b5 0x1103 "8250_pci" "PLX Technology Inc.|SPcom 200"
+0x10b5 0x1146 "unknown" "PLX Technology Inc.|PCI 9050 Vision Systems VScom PCI-010S"
+0x10b5 0x1147 "unknown" "PLX Technology Inc.|PCI 9050 Vision Systems VScom PCI-020S"
+0x10b5 0x1151 "ISDN:hisax,type=34" "PLX Technology Inc.|Gazel ISDN Adapter"
+0x10b5 0x1152 "ISDN:hisax,type=34" "PLX Technology Inc.|Gazel ISDN Adapter"
+0x10b5 0x1187 "ISDN:hisax,type=34" "PLX Technology Inc.|Olitec ISDN Adapter"
+0x10b5 0x2021 "unknown" "PLX Technology Inc.|PCI9080 used in Daktronics VMax Quad Tansmitter Card"
+0x10b5 0x2028 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2051 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2052 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2053 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2054 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2055 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2056 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2057 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2058 "isicom" "PLX Technology Inc.|Multiport Serial Card"
+0x10b5 0x2288 "unknown" "PLX Technology Inc.|Chrislin Industries Memory"
+0x10b5 0x2540 "unknown" "PLX Technology Inc.|IXXAT CAN-Interface PC-I 04/PCI"
+0x10b5 0x2724 "unknown" "PLX Technology Inc.|Thales PCSM Security Card"
+0x10b5 0x2bd0 "ISDN:hisax,type=34" "PLX Technology Inc.|Gazel ISDN Adapter"
+0x10b5 0x3001 "tor2" "PLX Technology Inc.|"
+0x10b5 0x6540 "unknown" "PLX Technology Inc.|PCI6540/6466 PCI-PCI bridge (transparent mode)"
+0x10b5 0x6541 "unknown" "PLX Technology Inc.|PCI6540/6466 PCI-PCI bridge (non-transparent mode, primary side)"
+0x10b5 0x6542 "unknown" "PLX Technology Inc.|PCI6540/6466 PCI-PCI bridge (non-transparent mode, secondary side)"
+0x10b5 0x8111 "unknown" "PLX Technology Inc.|PEX 8111 PCI Express-to-PCI Bridge"
+0x10b5 0x8114 "unknown" "PLX Technology Inc.|PEX 8114 PCI Express-to-PCI/PCI-X Bridge"
+0x10b5 0x8516 "unknown" "PLX Technology Inc.|PEX 8516 Versatile PCI Express Switch"
+0x10b5 0x8532 "unknown" "PLX Technology Inc.|PEX 8532 Versatile PCI Express Switch"
+0x10b5 0x9030 0x10b5 0x2862 "snd-vx222" "PLX Technology, Inc.|Alpermann+Velte PCL PCI LV (3V/5V): Timecode Reader Board"
+0x10b5 0x9030 0x10b5 0x2906 "snd-vx222" "PLX Technology, Inc.|Alpermann+Velte PCI TS (3V/5V): Time Synchronisation Board"
+0x10b5 0x9030 0x10b5 0x2940 "snd-vx222" "PLX Technology, Inc.|Alpermann+Velte PCL PCI D (3V/5V): Timecode Reader Board"
+0x10b5 0x9030 0x10b5 0x2977 "snd-vx222" "PLX Technology, Inc.|IXXAT iPC-I XC16/PCI CAN Board"
+0x10b5 0x9030 0x10b5 0x2978 "snd-vx222" "PLX Technology, Inc.|SH ARC-PCIu SOHARD ARCNET card"
+0x10b5 0x9030 0x10b5 0x3025 "snd-vx222" "PLX Technology, Inc.|Alpermann+Velte PCL PCI L (3V/5V): Timecode Reader Board"
+0x10b5 0x9030 0x10b5 0x3068 "snd-vx222" "PLX Technology, Inc.|Alpermann+Velte PCL PCI HD (3V/5V): Timecode Reader Board"
+0x10b5 0x9030 0x1397 0x3136 "ISDN:hfc4s8s_l1" "PLX Technology, Inc.|4xS0-ISDN PCI Adapter"
+0x10b5 0x9030 0x1397 0x3137 "snd-vx222" "PLX Technology, Inc.|S2M-E1-ISDN PCI Adapter"
+0x10b5 0x9030 0x1518 0x0200 "snd-vx222" "PLX Technology, Inc.|Kontron ThinkIO-C"
+0x10b5 0x9030 0x15ed 0x1002 "snd-vx222" "PLX Technology, Inc.|MCCS 8-port Serial Hot Swap"
+0x10b5 0x9030 0x15ed 0x1003 "snd-vx222" "PLX Technology, Inc.|MCCS 16-port Serial Hot Swap"
+0x10b5 0x9030 "snd-vx222" "PLX Technology Inc.|VX222"
+0x10b5 0x9036 "unknown" "PLX Technology Inc.|9036"
+0x10b5 0x9050 0x10b5 0x1067 "unknown" "PLX Technology Inc.|IXXAT CAN i165"
+0x10b5 0x9050 0x10b5 0x1072 "ines_gpib" ""
+0x10b5 0x9050 0x10b5 0x1172 "unknown" "PLX Technology Inc.|IK220 (Heidenhain)"
+0x10b5 0x9050 0x10b5 0x2036 "unknown" "PLX Technology Inc.|SatPak GPS"
+0x10b5 0x9050 0x10b5 0x2221 "unknown" "PLX Technology Inc.|Alpermann+Velte PCL PCI LV: Timecode Reader Board"
+0x10b5 0x9050 0x10b5 0x2273 "unknown" "PLX Technology Inc.|SH-ARC SoHard ARCnet card"
+0x10b5 0x9050 0x10b5 0x2431 "unknown" "PLX Technology Inc.|Alpermann+Velte PCL PCI D: Timecode Reader Board"
+0x10b5 0x9050 0x10b5 0x2905 "unknown" "PLX Technology Inc.|Alpermann+Velte PCI TS: Time Synchronisation Board"
+0x10b5 0x9050 0x10b5 0x9050 "unknown" "PLX Technology Inc.|MP9050"
+0x10b5 0x9050 0x11a9 0x5334 "8250_pci" "PLX Technology Inc.|PCI Serial ports"
+0x10b5 0x9050 0x124d 0xf001 "8250_pci" "PLX Technology Inc.|PCI Serial ports"
+0x10b5 0x9050 0x124d 0xf010 "8250_pci" "PLX Technology Inc.|PCI Serial ports"
+0x10b5 0x9050 0x12e0 0x0011 "8250_pci" "PLX Technology Inc.|PCI Serial ports"
+0x10b5 0x9050 0x12e0 0x0021 "8250_pci" "PLX Technology Inc.|PCI Serial ports"
+0x10b5 0x9050 0x12e0 0x0031 "8250_pci" "PLX Technology Inc.|PCI Serial ports"
+0x10b5 0x9050 0x12e0 0x0041 "8250_pci" "PLX Technology Inc.|PCI Serial ports"
+0x10b5 0x9050 0x1498 0x0362 "unknown" "PLX Technology Inc.|TPMC866 8 Channel Serial Card"
+0x10b5 0x9050 0x1522 0x0001 "unknown" "PLX Technology Inc.|RockForce 4 Port V.90 Data/Fax/Voice Modem"
+0x10b5 0x9050 0x1522 0x0002 "unknown" "PLX Technology Inc.|RockForce 2 Port V.90 Data/Fax/Voice Modem"
+0x10b5 0x9050 0x1522 0x0003 "unknown" "PLX Technology Inc.|RockForce 6 Port V.90 Data/Fax/Voice Modem"
+0x10b5 0x9050 0x1522 0x0004 "unknown" "PLX Technology Inc.|RockForce 8 Port V.90 Data/Fax/Voice Modem"
+0x10b5 0x9050 0x1522 0x0010 "unknown" "PLX Technology Inc.|RockForce2000 4 Port V.90 Data/Fax/Voice Modem"
+0x10b5 0x9050 0x1522 0x0020 "unknown" "PLX Technology Inc.|RockForce2000 2 Port V.90 Data/Fax/Voice Modem"
+0x10b5 0x9050 0x15ed 0x1000 "unknown" "PLX Technology Inc.|Macrolink MCCS 8-port Serial"
+0x10b5 0x9050 0x15ed 0x1001 "unknown" "PLX Technology Inc.|Macrolink MCCS 16-port Serial"
+0x10b5 0x9050 0x15ed 0x1002 "unknown" "PLX Technology Inc.|Macrolink MCCS 8-port Serial Hot Swap"
+0x10b5 0x9050 0x15ed 0x1003 "unknown" "PLX Technology Inc.|Macrolink MCCS 16-port Serial Hot Swap"
+0x10b5 0x9050 0x5654 0x2036 "vpbhp" "VoiceTronix Pty|OpenSwitch 6 Telephony card"
+0x10b5 0x9050 0x5654 0x3132 "vpbhp" "VoiceTronix Pty|OpenSwitch 12 Telephony card"
+0x10b5 0x9050 0x5654 0x5634 "vpbhp" "VoiceTronix Pty|OpenLine4 Telephony card"
+0x10b5 0x9050 0x8246 0xffff "tahoe9xx" ""
+0x10b5 0x9050 0xd531 0xc002 "unknown" "PLX Technology Inc.|PCIntelliCAN 2xSJA1000 CAN bus"
+0x10b5 0x9050 0xd84d 0x4006 "unknown" "PLX Technology Inc.|EX-4006 1P"
+0x10b5 0x9050 0xd84d 0x4008 "unknown" "PLX Technology Inc.|EX-4008 1P EPP/ECP"
+0x10b5 0x9050 0xd84d 0x4014 "unknown" "PLX Technology Inc.|EX-4014 2P"
+0x10b5 0x9050 0xd84d 0x4018 "unknown" "PLX Technology Inc.|EX-4018 3P EPP/ECP"
+0x10b5 0x9050 0xd84d 0x4025 "unknown" "PLX Technology Inc.|EX-4025 1S(16C550) RS-232"
+0x10b5 0x9050 0xd84d 0x4027 "unknown" "PLX Technology Inc.|EX-4027 1S(16C650) RS-232"
+0x10b5 0x9050 0xd84d 0x4028 "unknown" "PLX Technology Inc.|EX-4028 1S(16C850) RS-232"
+0x10b5 0x9050 0xd84d 0x4036 "unknown" "PLX Technology Inc.|EX-4036 2S(16C650) RS-232"
+0x10b5 0x9050 0xd84d 0x4037 "unknown" "PLX Technology Inc.|EX-4037 2S(16C650) RS-232"
+0x10b5 0x9050 0xd84d 0x4038 "unknown" "PLX Technology Inc.|EX-4038 2S(16C850) RS-232"
+0x10b5 0x9050 0xd84d 0x4052 "unknown" "PLX Technology Inc.|EX-4052 1S(16C550) RS-422/485"
+0x10b5 0x9050 0xd84d 0x4053 "unknown" "PLX Technology Inc.|EX-4053 2S(16C550) RS-422/485"
+0x10b5 0x9050 0xd84d 0x4055 "8250_pci" "PLX Technology Inc.|EX-4055 4S(16C550) RS-232"
+0x10b5 0x9050 0xd84d 0x4058 "unknown" "PLX Technology Inc.|EX-4055 4S(16C650) RS-232"
+0x10b5 0x9050 0xd84d 0x4065 "unknown" "PLX Technology Inc.|EX-4065 8S(16C550) RS-232"
+0x10b5 0x9050 0xd84d 0x4068 "unknown" "PLX Technology Inc.|EX-4068 8S(16C650) RS-232"
+0x10b5 0x9050 0xd84d 0x4078 "unknown" "PLX Technology Inc.|EX-4078 2S(16C552) RS-232+1P"
+0x10b5 0x9050 "snd-vx222" "PLX Technology Inc.|VX222"
+0x10b5 0x9051 "unknown" "PLX Technology Inc.|PCI9051 Target PCI interface Chip"
+0x10b5 0x9052 "unknown" "PLX Technology Inc.|PCI 9052 PCI 9052 Target PCI Interface Chip"
+0x10b5 0x9054 "unknown" "PLX Technology Inc.|PCI 9054 PCI I/O Accelerator"
+0x10b5 0x9056 "unknown" "PLX Technology Inc.|Francois"
+0x10b5 0x9060 "unknown" "PLX Technology Inc.|9060"
+0x10b5 0x906d "snd-korg1212" "PLX Technology Inc.|Korg 1212 IO"
+0x10b5 0x906e "unknown" "PLX Technology Inc.|9060ES"
+0x10b5 0x9080 "unknown" "PLX Technology Inc.|9080"
+0x10b5 0x9656 0x1369 0xb001 "snd-pcxhr" "Digigram|VX882HR"
+0x10b5 0x9656 0x1369 0xb101 "snd-pcxhr" "Digigram|PCX882HR"
+0x10b5 0x9656 0x1369 0xb201 "snd-pcxhr" "Digigram|VX881HR"
+0x10b5 0x9656 0x1369 0xb301 "snd-pcxhr" "Digigram|PCX881HR"
+0x10b5 0x9656 0x1369 0xb401 "snd-pcxhr" "Digigram|VX1222HR"
+0x10b5 0x9656 0x1369 0xb501 "snd-pcxhr" "Digigram|PCX1222HR"
+0x10b5 0x9656 0x1369 0xb601 "snd-pcxhr" "Digigram|VX1221HR"
+0x10b5 0x9656 0x1369 0xb701 "snd-pcxhr" "Digigram|PCX1221HR"
+0x10b5 0x9656 "unknown" "PLX Technology, Inc.|PCI <-> IOBus Bridge"
+0x10b5 0xa001 "8250_pci" "PLX Technology Inc.|Gtek Serial"
+0x10b5 0xbb04 "unknown" "PLX Technology Inc.|B&B 3PCIOSD1A Isolated PCI Serial"
+0x10b5 0xc001 "unknown" "PLX Technology Inc.|GTEK Cyclone 16/32 port serial adaptor"
+0x10b5 0xd00d "tor2" "PLX Technology Inc.|"
+0x10b6 0x0001 "unknown" "Madge Networks|Smart 16/4 PCI Ringnode"
+0x10b6 0x0002 "abyss" "Madge Networks|Smart 16/4 PCI Ringnode Mk2"
+0x10b6 0x0003 "unknown" "Madge Networks|Smart 16/4 PCI Ringnode Mk3"
+0x10b6 0x0004 "unknown" "Madge Networks|Smart 16/4 PCI Ringnode Mk1"
+0x10b6 0x0006 "yenta_socket" "Madge Networks|16/4 Cardbus Adapter"
+0x10b6 0x0007 "unknown" "Madge Networks|Presto PCI Adapter"
+0x10b6 0x0009 "unknown" "Madge Networks|Smart 100/16/4 PCI-HS Ringnode"
+0x10b6 0x000a "unknown" "Madge Networks|Smart 100/16/4 PCI Ringnode"
+0x10b6 0x000b "yenta_socket" "Madge Networks|16/4 CardBus Adapter Mk2"
+0x10b6 0x000c "unknown" "Madge Networks|RapidFire 3140V2 16/4 TR Adapter"
+0x10b6 0x0020 "unknown" "Madge Networks|Unknown?"
+0x10b6 0x0022 "unknown" "Madge Networks|Unknown?"
+0x10b6 0x1000 "horizon" "Madge Networks|Collage 25 ATM Adapter"
+0x10b6 0x1001 "ambassador" "Madge Networks|Collage 155 ATM Server Adapter"
+0x10b6 0x1002 "ambassador" "Madge Networks|Ambassador ATM Adapter"
+0x10b7 0x0001 "acenic" "3Com Corp.|3c985 1000BaseSX"
+0x10b7 0x0013 "ath_pci" "3Com Corp.|AR5212 802.11abg NIC (3CRDAG675)"
+0x10b7 0x0910 "unknown" "3Com Corp.|3C910-A01"
+0x10b7 0x1000 "unknown" "3Com Corp.|3C905CX-TXNM 3COM 3C905CX-TXNM with 40-0664-003 ASIC"
+0x10b7 0x1006 "unknown" "3Com Corp.|MINI PCI type 3B Data Fax Modem"
+0x10b7 0x1007 "unknown" "3Com Corp.|3C556 V.90 Mini-PCI Modem"
+0x10b7 0x1201 "3c59x" "3Com Corp.|3c982-TXM 10/100baseTX Dual Port A [Hydra]"
+0x10b7 0x1202 "3c59x" "3Com Corp.|3c982-TXM 10/100baseTX Dual Port B [Hydra]"
+0x10b7 0x1700 "skge" "3Com Corp.|3C940 10/100/1000 LAN"
+0x10b7 0x1f1f "unknown" "3Com Corp.|3CRWE777A AirConnect Wireless LAN PCI Card"
+0x10b7 0x3390 "tmspci" "3Com Corp.|Token Link Velocity"
+0x10b7 0x3590 "3c359" "3Com Corp.|3c359 TokenLink Velocity XL"
+0x10b7 0x4500 "3c59x" "3Com Corp.|3c450 Cyclone/unknown"
+0x10b7 0x5055 "3c59x" "3Com Corp.|3c555 [Megahertz] 10/100 LAN CardBus"
+0x10b7 0x5057 "3c59x" "3Com Corp.|3c575 [Megahertz] 10/100 LAN CardBus"
+0x10b7 0x5157 "3c59x" "3Com Corp.|3c575 [Megahertz] 10/100 LAN CardBus"
+0x10b7 0x5257 "3c59x" "3Com Corp.|3c575 Fast EtherLink XL"
+0x10b7 0x5900 "3c59x" "3Com Corp.|3c590 10BaseT [Vortex]"
+0x10b7 0x5920 "3c59x" "3Com Corp.|3c592 EISA 10mbps Demon/Vortex"
+0x10b7 0x5950 "3c59x" "3Com Corp.|3c595 100BaseTX [Vortex]"
+0x10b7 0x5951 "3c59x" "3Com Corp.|3c595 100BaseT4 [Vortex]"
+0x10b7 0x5952 "3c59x" "3Com Corp.|3c595 100Base-MII [Vortex]"
+0x10b7 0x5970 "3c59x" "3Com Corp.|3c597 EISA Fast Demon/Vortex"
+0x10b7 0x5b57 "3c59x" "3Com Corp.|3C595 Megahertz 10/100 LAN CardBus"
+0x10b7 0x6000 "adm8211" "3Com Corp.|3CRSHPW796 [OfficeConnect Wireless CardBus]"
+0x10b7 0x6001 "prism54" "3Com Corp.|3cRWE154G72 Wireless LAN adapter"
+0x10b7 0x6055 "3c59x" "3Com Corp.|3c556 10/100 Mini-PCI Adapter [Cyclone]"
+0x10b7 0x6056 "3c59x" "3Com Corp.|3C556 10/100 Mini PCI Fast Ethernet Adapter"
+0x10b7 0x6550 "3c59x" "3Com Corp.|3c575 [Megahertz] 10/100 LAN CardBus"
+0x10b7 0x6560 "3c59x" "3Com Corp.|3c575 [Megahertz] 10/100 LAN CardBus"
+0x10b7 0x6561 "3c59x" "3Com Corp.|FEM656 10/100 LAN+56K Modem CardBus PC Card"
+0x10b7 0x6562 "3c59x" "3Com Corp.|3CCFEM656 Cyclone CardBus"
+0x10b7 0x6563 "3c59x" "3Com Corp.|FEM656B 10/100 LAN+56K Modem CardBus PC Card"
+0x10b7 0x6564 "3c59x" "3Com Corp.|3CCFEM656 Cyclone CardBus"
+0x10b7 0x6565 "unknown" "3Com Corp.|3CCFEM656C Global 10/100 Fast Ethernet+56K Modem"
+0x10b7 0x7646 "3c59x" "3Com Corp.|3cSOHO100-TX [Hurricane]"
+0x10b7 0x7770 "orinoco_plx" "3Com Corp.|802.11b Wireless Ethernet Adapter"
+0x10b7 0x7940 "3c59x" "3Com Corp.|3c803 FDDILink DAS Controller"
+0x10b7 0x7980 "3c59x" "3Com Corp.|3c803 FDDILink UTP Controller"
+0x10b7 0x7990 "3c59x" "3Com Corp.|3c804 FDDILink SAS Controller"
+0x10b7 0x80eb "skge" "3Com Corp.|3c940B 10/100/1000Base-T"
+0x10b7 0x8811 "unknown" "3Com Corp.|Token ring"
+0x10b7 0x9000 "3c59x" "3Com Corp.|3c900 10BaseT [Boomerang]"
+0x10b7 0x9001 "3c59x" "3Com Corp.|3c900 Combo [Boomerang]"
+0x10b7 0x9004 "3c59x" "3Com Corp.|3c900B-TPO [Etherlink XL TPO]"
+0x10b7 0x9005 "3c59x" "3Com Corp.|3c900B-Combo [Etherlink XL Combo]"
+0x10b7 0x9006 "3c59x" "3Com Corp.|3c900B-TPC [Etherlink XL TPC]"
+0x10b7 0x900a "3c59x" "3Com Corp.|3c900B-FL [Etherlink XL FL]"
+0x10b7 0x9050 "3c59x" "3Com Corp.|3c905 100BaseTX [Boomerang]"
+0x10b7 0x9051 "3c59x" "3Com Corp.|3c905 100BaseT4 [Boomerang]"
+0x10b7 0x9054 "unknown" "3Com Corporation|3C905B-TX Fast Etherlink XL PCI"
+0x10b7 0x9055 "3c59x" "3Com Corp.|3c905B 100BaseTX [Cyclone]"
+0x10b7 0x9056 "3c59x" "3Com Corp.|3c905B-T4 [Fast EtherLink XL 10/100]"
+0x10b7 0x9058 "3c59x" "3Com Corp.|3c905B-Combo [Deluxe Etherlink XL 10/100]"
+0x10b7 0x905a "3c59x" "3Com Corp.|3c905B-FX [Fast Etherlink XL FX 10/100]"
+0x10b7 0x9200 "3c59x" "3Com Corp.|3c905C-TX [Fast Etherlink]"
+0x10b7 0x9201 "3c59x" "3Com Corp.|3c920 Tornado"
+0x10b7 0x9202 "3c59x" "3Com Corp.|3Com 3C920B-EMB-WNM Integrated Fast Ethernet Controller"
+0x10b7 0x9210 "3c59x" "3Com Corp.|3C920B-EMB-WNM Integrated Fast Ethernet Controller"
+0x10b7 0x9300 "tulip" "3Com Corp.|3CSOHO100B-TX [910-A01]"
+0x10b7 0x9800 "3c59x" "3Com Corp.|3c980-TX [Fast Etherlink XL Server Adapter]"
+0x10b7 0x9805 "3c59x" "3Com Corp.|3c980-TX [Fast Etherlink XL Server Adapter]"
+0x10b7 0x9900 "typhoon" "3Com Corp.|3C990-TX Typhoon"
+0x10b7 0x9902 "typhoon" "3Com Corp.|3CR990-TX-95 EtherLink 10/100 PCI with 3XP Processor"
+0x10b7 0x9903 "typhoon" "3Com Corp.|3CR990-TX-97 EtherLink 10/100 PCI with 3XP Processor"
+0x10b7 0x9904 "typhoon" "3Com Corp.|3CR990-TX-M EtherLink 10/100 PCI with 3XP Processor"
+0x10b7 0x9905 "typhoon" "3Com Corp.|3CR990-FX-95/97/95 [Typhon Fiber]"
+0x10b7 0x9908 "typhoon" "3Com Corp.|3CR990SVR95 EtherLink 10/100 Server PCI with 3XP"
+0x10b7 0x9909 "typhoon" "3Com Corp.|3CR990SVR97 EtherLink 10/100 Server PCI with 3XP"
+0x10b7 0x990a "typhoon" "3Com Corp.|3C990BSVR EtherLink 10/100 Server PCI with 3XP"
+0x10b7 0x990b "typhoon" "3Com Corp.|3C990SVR [Typhoon Server]"
+0x10b8 0x0005 "epic100" "Standard Microsystems Corp [SMC]|83C170QF"
+0x10b8 0x0006 "epic100" "Standard Microsystems Corp [SMC]|LANEPIC"
+0x10b8 0x1000 "unknown" "Standard Microsystems Corp [SMC]|FDC 37c665"
+0x10b8 0x1001 "unknown" "Standard Microsystems Corp [SMC]|FDC 37C922"
+0x10b8 0x2802 "unknown" "Standard Microsystems Corp [SMC]|SMC2802W [EZ Connect g]"
+0x10b8 0xa011 "unknown" "Standard Microsystems Corp [SMC]|83C170QF"
+0x10b8 0xb106 "unknown" "Standard Microsystems Corp [SMC]|SMC34C90"
+0x10b9 0x0000 "unknown" "Acer Labs Inc.|MDV92XP NetoDragon PCI Soft Modem V92 NetoDragon"
+0x10b9 0x0101 "unknown" "Acer Labs Inc.|CMI8338/C3DX PCI Audio Device"
+0x10b9 0x0111 "snd-cmipci" "Acer Labs Inc.|C-Media CMI8738/C3DX Audio Device (OEM)"
+0x10b9 0x05ff "alim1535_wdt" "Acer Labs Inc.|"
+0x10b9 0x0780 "unknown" "Acer Labs Inc.|Multi-IO Card"
+0x10b9 0x0782 "unknown" "Acer Labs Inc.|Multi-IO Card"
+0x10b9 0x1435 "unknown" "Acer Labs Inc.|M1435"
+0x10b9 0x1445 "unknown" "Acer Labs Inc.|M1445"
+0x10b9 0x1449 "unknown" "Acer Labs Inc.|M1449"
+0x10b9 0x1451 "unknown" "Acer Labs Inc.|M1451"
+0x10b9 0x1461 "unknown" "Acer Labs Inc.|M1461"
+0x10b9 0x1489 "unknown" "Acer Labs Inc.|M1489"
+0x10b9 0x1511 "unknown" "Acer Labs Inc.|M1511 [Aladdin]"
+0x10b9 0x1512 "unknown" "Acer Labs Inc.|M1512 [Aladdin]"
+0x10b9 0x1513 "unknown" "Acer Labs Inc.|M1513 [Aladdin]"
+0x10b9 0x1521 "unknown" "Acer Labs Inc.|M1521 [Aladdin III]"
+0x10b9 0x1523 "unknown" "Acer Labs Inc.|M1523"
+0x10b9 0x1531 "unknown" "Acer Labs Inc.|M1531 [Aladdin IV]"
+0x10b9 0x1533 "unknown" "Acer Labs Inc.|M1533 PCI to ISA Bridge [Aladdin IV]"
+0x10b9 0x1535 "alim1535_wdt" "Acer Labs Inc.|M1535x ISA Bridge"
+0x10b9 0x1541 "ali-agp" "Acer Labs Inc.|M1541"
+0x10b9 0x1543 "unknown" "Acer Labs Inc.|M1543"
+0x10b9 0x1561 "unknown" "Acer Labs Inc.|M1561 North Bridge"
+0x10b9 0x1563 "i2c-ali1563" "Acer Labs Inc.|M1563 HyperTransport South Bridge"
+0x10b9 0x1573 "unknown" "Acer Labs Inc.|PCI to LPC Controller"
+0x10b9 0x1621 "ali-agp" "Acer Labs Inc.|M1621"
+0x10b9 0x1631 "ali-agp" "Acer Labs Inc.|ALI M1631 PCI North Bridge Aladdin Pro III"
+0x10b9 0x1632 "ali-agp" "Acer Labs Inc.|M1632 North Bridge"
+0x10b9 0x1641 "ali-agp" "Acer Labs Inc.|ALI M1641 PCI North Bridge Aladdin Pro IV"
+0x10b9 0x1644 "ali-agp" "Acer Labs Inc.|M1644 AGP System Controller"
+0x10b9 0x1646 "unknown" "Acer Labs Inc.|M1646 AGP System Controller"
+0x10b9 0x1647 "ali-agp" "Acer Labs Inc.|M1647 CPU to PCI Bridge"
+0x10b9 0x1651 "ali-agp" "Acer Labs Inc.|M1651 CPU to PCI Bridge"
+0x10b9 0x1661 "unknown" "Acer Labs Inc.|M1661 AGP System Controller"
+0x10b9 0x1667 "unknown" "Acer Labs Inc.|M1667 AGP System Controller"
+0x10b9 0x1671 "ali-agp" "Acer Labs Inc.|M1671 Northbridge [Aladdin-P4]"
+0x10b9 0x1672 "unknown" "Acer Labs Inc.|M1672 Northbridge [CyberALADDiN-P4]"
+0x10b9 0x1681 "ali-agp" "Acer Labs Inc.|M1681 P4 Northbridge [AGP8X,HyperTransport and SDR/DDR]"
+0x10b9 0x1687 "unknown" "Acer Labs Inc.|M1687 K8 Northbridge [AGP8X and HyperTransport]"
+0x10b9 0x1689 "amd64-agp" "Acer Labs Inc.|M1689 K8 Northbridge [Super K8 Single Chip]"
+0x10b9 0x1695 "amd64-agp" "Acer Labs Inc.|M1695 K8 Northbridge [PCI Express and HyperTransport]"
+0x10b9 0x1697 "unknown" "ALi Corporation|M1697 HTT Host Bridge"
+0x10b9 0x3141 "unknown" "Acer Labs Inc.|M3141"
+0x10b9 0x3143 "unknown" "Acer Labs Inc.|M3143"
+0x10b9 0x3145 "unknown" "Acer Labs Inc.|M3145"
+0x10b9 0x3147 "unknown" "Acer Labs Inc.|M3147"
+0x10b9 0x3149 "unknown" "Acer Labs Inc.|M3149"
+0x10b9 0x3151 "unknown" "Acer Labs Inc.|M3151"
+0x10b9 0x3307 "unknown" "Acer Labs Inc.|M3307"
+0x10b9 0x3309 "unknown" "Acer Labs Inc.|M3309"
+0x10b9 0x3323 "unknown" "Acer Labs Inc.|M3325 Video/Audio Decoder"
+0x10b9 0x5212 "unknown" "Acer Labs Inc.|M4803"
+0x10b9 0x5215 "unknown" "Acer Labs Inc.|MS4803"
+0x10b9 0x5217 "unknown" "Acer Labs Inc.|M5217H"
+0x10b9 0x5219 "unknown" "Acer Labs Inc.|M5219"
+0x10b9 0x5225 "unknown" "Acer Labs Inc.|M5225"
+0x10b9 0x5228 "alim15x3" "Acer Labs Inc.|M5228 ALi ATA/RAID Controller"
+0x10b9 0x5229 "alim15x3" "Acer Labs Inc.|M5229 IDE"
+0x10b9 0x5235 "unknown" "Acer Labs Inc.|M5225"
+0x10b9 0x5237 "ohci-hcd" "Acer Labs Inc.|M5237 (USB)"
+0x10b9 0x5239 "ehci-hcd" "Acer Labs Inc.|USB 2.0 Controller"
+0x10b9 0x5240 "unknown" "Acer Labs Incorporated (ALI)|EIDE Controller"
+0x10b9 0x5241 "unknown" "Acer Labs Incorporated (ALI)|PCMCIA Bridge"
+0x10b9 0x5242 "unknown" "Acer Labs Incorporated (ALI)|General Purpose Controller"
+0x10b9 0x5243 "unknown" "Acer Labs Inc.|M5243"
+0x10b9 0x5244 "unknown" "Acer Labs Incorporated (ALI)|Floppy Disk Controller"
+0x10b9 0x5246 "unknown" "Acer Labs Inc.|AGP8X Controller"
+0x10b9 0x5247 "unknown" "Acer Labs Inc.|M5247"
+0x10b9 0x5249 "unknown" "Acer Labs Inc.|M5249 HTT to PCI Bridge"
+0x10b9 0x524b "unknown" "ALi Corporation|PCI Express Root Port"
+0x10b9 0x524c "unknown" "ALi Corporation|PCI Express Root Port"
+0x10b9 0x524d "unknown" "ALi Corporation|PCI Express Root Port"
+0x10b9 0x524e "unknown" "ALi Corporation|PCI Express Root Port"
+0x10b9 0x5251 "unknown" "Acer Labs Inc.|M5251 P1394 OHCI 1.0 Controller"
+0x10b9 0x5253 "unknown" "Acer Labs Inc.|M5253 P1394 OHCI 1.1 Controller"
+0x10b9 0x5255 "unknown" "Acer Labs Inc.|M5455 PCI AC-Link Controller Audio Device"
+0x10b9 0x5261 "uli526x" "Acer Labs Inc.|M5261 Ethernet Controller"
+0x10b9 0x5263 "uli526x" "Acer Labs Inc.|M5263 Ethernet Controller"
+0x10b9 0x5271 "unknown" "Acer Labs Inc.|M5471 Memory Stick Controller"
+0x10b9 0x5273 "unknown" "Acer Labs Inc.|M5473 SD-MMC Controller"
+0x10b9 0x5281 "sata_uli" "Acer Labs Inc.|ALi M5281 Serial ATA / RAID Host Controller"
+0x10b9 0x5287 "sata_uli" "Acer Labs Inc.|ALi M5287 Serial ATA / RAID Host Controller"
+0x10b9 0x5288 "ahci" "Acer Labs Inc.|ALi M5288 Serial ATA / RAID Host Controller"
+0x10b9 0x5289 "sata_uli" "Acer Labs Inc.|ALi M5289 Serial ATA / RAID Host Controller"
+0x10b9 0x5427 "unknown" "Acer Labs (see also vendor 1025h)|ALI PCI to AGP Bridge"
+0x10b9 0x5450 "unknown" "Acer Labs Inc.|Agere Systems AC97 Modem"
+0x10b9 0x5451 "snd-ali5451" "Acer Labs Inc.|M5451 PCI South Bridge Audio"
+0x10b9 0x5453 "trident" "Acer Labs Inc.|M5453 PCI AC-Link Controller Modem Device"
+0x10b9 0x5455 "snd-intel8x0" "Acer Labs Inc.|M5455 PCI AC-Link Controller Audio Device"
+0x10b9 0x5457 "slamr" "Acer Labs Inc.|M5457 AC-Link Modem Interface Controller"
+0x10b9 0x5459 "slamr" "Acer Labs Inc.|SmartPCI561 56K Modem"
+0x10b9 0x545a "slamr" "Acer Labs Inc.|SmartLink SmartPCI563 56K Modem"
+0x10b9 0x5461 "snd-hda-intel" "Acer Labs Inc.|High Definition Audio/AC'97 Host Controller"
+0x10b9 0x5471 "unknown" "Acer Labs Inc.|M5471 Memory Stick Controller"
+0x10b9 0x5473 "unknown" "Acer Labs Inc.|M5473 SD-MMC Controller"
+0x10b9 0x7101 "i2c-ali1535" "Acer Labs Inc.|M7101 PMU"
+0x10ba 0x0301 "unknown" "Mitsubishi Electric Corp.|AccelGraphics AccelECLIPSE"
+0x10ba 0x0304 "unknown" "Mitsubishi Electric Corp.|GUI Accelerator"
+0x10ba 0x0308 "unknown" "Mitsubishi Electric Corp.|Tornado 3000 [OEM Evans & Sutherland]"
+0x10ba 0x1002 "unknown" "Mitsubishi Electric Corp.|VG500 [VolumePro Volume Rendering Accelerator]"
+0x10bd 0x0e34 "ne2k-pci" "Surecom Technology|NE-34PCI LAN"
+0x10bd 0x5240 "unknown" "Surecom Technology|EIDE Controller"
+0x10bd 0x5241 "unknown" "Surecom Technology|PCMCIA Bridge"
+0x10bd 0x5242 "unknown" "Surecom Technology|General Purpose Controller"
+0x10bd 0x5243 "unknown" "Surecom Technology|Bus Controller"
+0x10bd 0x5244 "unknown" "Surecom Technology|Floppy Disk Controller"
+0x10c3 0x1100 "eepro100" "Samsung Semiconductors Inc.|Smartether100 SC1100 LAN Adapter (i82557B)"
+0x10c3 0x8920 "unknown" "Samsung Semiconductors Inc.| "
+0x10c3 0x8925 "unknown" "Samsung Semiconductors Inc.| "
+0x10c4 0x8363 "unknown" "Award Software Int'l Inc.| "
+0x10c8 0x0000 "unknown" "Neomagic Corp.|Graphics Controller"
+0x10c8 0x0001 "Card:NeoMagic MagicGraph (laptop/notebook)" "Neomagic Corp.|NM2070 [MagicGraph NM2070]"
+0x10c8 0x0002 "Card:NeoMagic MagicGraph (laptop/notebook)" "Neomagic Corp.|NM2090 [MagicGraph 128V]"
+0x10c8 0x0003 "Card:NeoMagic MagicGraph (laptop/notebook)" "Neomagic Corp.|NM2093 [MagicGraph 128ZV]"
+0x10c8 0x0004 "Card:NeoMagic 128XD" "Neomagic Corp.|NM2160 [MagicGraph 128XD]"
+0x10c8 0x0005 "Card:NeoMagic MagicGraph (laptop/notebook)" "Neomagic Corp.|[MagicGraph 256AV]"
+0x10c8 0x0006 "Card:NeoMagic MagicMedia (laptop/notebook)" "Neomagic Corp.|NM2360 [MagicMedia 256ZX]"
+0x10c8 0x0016 "Card:NeoMagic MagicMedia 256XL+" "Neomagic Corp.|[MagicMedia 256XL+]"
+0x10c8 0x0025 "Card:NeoMagic MagicMedia (laptop/notebook)" "Neomagic Corp.|[MagicMedia 256AV+]"
+0x10c8 0x0083 "Card:NeoMagic MagicGraph (laptop/notebook)" "Neomagic Corp.|[MagicGraph 128ZV Plus]"
+0x10c8 0x008f "ad1848" "NeoMagic Corp.|MagicMedia 256AV Audio Device on Colorado Inspiron"
+0x10c8 0x1028 "ad1848" "NeoMagic Corp.|MagicMedia 256AV Audio Device on Colorado Inspiron"
+0x10c8 0x8005 0x0e11 0xb0d1 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on Discovery"
+0x10c8 0x8005 0x0e11 0xb126 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on Durango"
+0x10c8 0x8005 0x1014 0x00dd "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on BlackTip Thinkpad"
+0x10c8 0x8005 0x1025 0x1003 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on TravelMate 720"
+0x10c8 0x8005 0x1028 0x0088 "nm256_audio" "Neomagic Corp.|Latitude CPi A"
+0x10c8 0x8005 0x1028 0x008f "ad1848" "Dell|MagicMedia 256AV Audio Device on Colorado Inspiron"
+0x10c8 0x8005 0x103c 0x0007 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on Voyager II"
+0x10c8 0x8005 0x103c 0x0008 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on Voyager III"
+0x10c8 0x8005 0x103c 0x000d "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on Omnibook 900"
+0x10c8 0x8005 0x10c8 0x8005 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device on FireAnt"
+0x10c8 0x8005 0x110a 0x8005 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device"
+0x10c8 0x8005 0x14c0 0x0004 "nm256_audio" "Neomagic Corp.|MagicMedia 256AV Audio Device"
+0x10c8 0x8005 "nm256_audio" "Neomagic Corp.|[MagicMedia 256AV]"
+0x10c8 0x8006 "nm256_audio" "Neomagic Corp.|[MagicMedia 256AV]"
+0x10c8 0x8016 "nm256_audio" "Neomagic Corp.|NM2380 MagicMedia 256XL+ Audio Device"
+0x10cc 0x0226 "unknown" "Mentor Arc Inc.|PCI/ISA Bridge"
+0x10cc 0x0257 "unknown" "Mentor Arc Inc.|Host/PCI Bridge"
+0x10cc 0x0660 "unknown" "Mai Logic Incorporated|Articia S Host Bridge"
+0x10cc 0x0661 "unknown" "Mai Logic Incorporated|Articia S PCI Bridge"
+0x10cd 0x1100 "unknown" "Advanced System Products|ASC1100"
+0x10cd 0x1200 "advansys" "Advanced System Products|ASC1200 [(abp940) Fast SCSI-II]"
+0x10cd 0x1300 "advansys" "Advanced System Products|ABP940-U / ABP960-U"
+0x10cd 0x2300 "advansys" "Advanced System Products|ABP940-UW"
+0x10cd 0x2500 "advansys" "Advanced System Products|ABP940-U2W"
+0x10cd 0x4000 "unknown" "Advanced System Products|ASC30C0400 IEEE-1394 OHCI PCI Controller"
+0x10cf 0x10c5 "unknown" "Fujitsu Ltd.|FMV-103 Serial Parallel Card"
+0x10cf 0x2001 "unknown" "Citicorp TTI|mb86605"
+0x10cf 0x2002 "unknown" "Fujitsu Ltd.|MB86606 Fast Wide SCSI Controller"
+0x10cf 0x2005 "unknown" "Fujitsu Ltd.|MB86974 10/100 Fast Ethernet Adapter"
+0x10cf 0x200c "unknown" "Fujitsu Ltd.|MB86974 IEEE1394 OpenHCI Controller"
+0x10cf 0x2010 "unknown" "Fujitsu Ltd.|OHCI FireWire Controller"
+0x10cf 0x2011 "unknown" "Fujitsu Ltd.|MPEG2 R-Engine (MPEG2 Hardware Encoder)"
+0x10cf 0x2019 "unknown" "Fujitsu Ltd.| "
+0x10d9 0x0066 "unknown" "Macronix Inc.|MX86101P"
+0x10d9 0x0431 "unknown" "Macronix Inc.||MX98715"
+0x10d9 0x0512 "tulip" "Macronix Inc.||MX98713"
+0x10d9 0x0531 "tulip" "Macronix Inc.||MX987x5"
+0x10d9 0x0532 "unknown" "Macronix Inc.|MX98723/727 PCI/CardBus Fast Ethernet Controller"
+0x10d9 0x0553 "unknown" "Macronix Inc.|MX987x5 Ethernet Adapter"
+0x10d9 0x8625 "tulip" "Macronix Inc.||MX86250"
+0x10d9 0x8626 "unknown" "Macronix Inc.|MX86251"
+0x10d9 0x8627 "unknown" "Macronix Inc.|MX86251"
+0x10d9 0x8888 "Card:VESA driver (generic)" "Macronix Inc.||MX86200"
+0x10d9 0xc115 "unknown" "Macronix Inc.|lc82c115"
+0x10da 0x0508 "tmspci" "Compaq IPG-Austin|TC4048 Token Ring 4/16"
+0x10da 0x3390 "unknown" "Compaq IPG-Austin|Tl3c3x9"
+0x10dc 0x0001 "unknown" "CERN-European Lab.|STAR/RD24 SCI-PCI (PMC)"
+0x10dc 0x0002 "unknown" "CERN-European Lab.|TAR/RD24 SCI-PCI (PMC) [ATT 2C15-3 (FPGA) SCI bridge on PCI 5 Volt card]"
+0x10dc 0x0004 "unknown" "CERN-European Lab.|EP20S780 ALTERA STRATIX"
+0x10dc 0x0010 "unknown" "CERN-European Lab.|680-1110-150/400 Simple PMC/PCI to S-LINK interface"
+0x10dc 0x0011 "unknown" "CERN-European Lab.|680-1110-200/450 Simple S-LINK to PMC/PCI interface"
+0x10dc 0x0012 "unknown" "CERN-European Lab.|S32PCI64 32-bit S-LINK to 64-bit PCI interface"
+0x10dc 0x0021 "unknown" "CERN-European Lab.|HIPPI destination"
+0x10dc 0x0022 "unknown" "CERN-European Lab.|HIPPI source"
+0x10dc 0x0033 "unknown" "CERN-European Lab.|EP20KE (APEX-FPGA) ALICE DDL to PCI interface (RORC)"
+0x10dc 0x0101 "unknown" "CERN-European Lab.|SL651 7057 C200 Acquisition card for the SPS Orbit System (MACI)"
+0x10dc 0x10dc "unknown" "CERN-European Lab.|ATT2C15-3 FPGA"
+0x10dd 0x0001 "unknown" "Evans & Sutherland|3D Graphics Processor (?? Freedom GBbus??)"
+0x10dd 0x0100 "unknown" "Evans & Sutherland|Lightning 1200"
+0x10de 0x0008 "Card:Diamond Edge 3D" "nVidia Corp.|NV1 EDGE 3D"
+0x10de 0x0009 "Card:Diamond Edge 3D" "nVidia Corp.|NV1 EDGE 3D"
+0x10de 0x0010 "Card:VESA driver (generic)" "nVidia Corp.|Mutara V08 [NV2]"
+0x10de 0x0018 "unknown" "nVidia Corp.|Riva 128 Riva 128 accelerator"
+0x10de 0x0019 "unknown" "nVidia Corp.|Riva 128 ZX"
+0x10de 0x0020 "Card:RIVA TNT" "nVidia Corp.|Riva TNT 128"
+0x10de 0x0028 "Card:RIVA TNT2" "nVidia Corp.|Riva TNT2"
+0x10de 0x0029 "Card:RIVA TNT2" "nVidia Corp.|Riva TNT2 Ultra"
+0x10de 0x002a "Card:RIVA TNT2" "nVidia Corp.|Riva TnT2 [NV5]"
+0x10de 0x002b "Card:RIVA TNT2" "nVidia Corp.|Riva TnT2 [NV5]"
+0x10de 0x002c "Card:RIVA TNT2" "nVidia Corp.|Vanta"
+0x10de 0x002d "Card:RIVA TNT2" "nVidia Corp.|Riva TNT2 Model 64"
+0x10de 0x002e "Card:RIVA TNT2" "nVidia Corp.|Vanta [NV6]"
+0x10de 0x002f "Card:RIVA TNT2" "nVidia Corp.|Vanta [NV6]"
+0x10de 0x0034 "i2c-nforce2" "nVidia Corp.|MCP04 SMBus"
+0x10de 0x0035 "amd74xx" "nVidia Corp.|MCP04 IDE"
+0x10de 0x0036 "sata_nv" "nVidia Corp.|MCP04 Serial ATA Controller"
+0x10de 0x0037 "forcedeth" "nVidia Corp.|Ethernet controller"
+0x10de 0x0038 "forcedeth" "nVidia Corp.|Ethernet controller"
+0x10de 0x003a "snd-intel8x0" "nVidia Corp.|MCP04 AC'97 Audio Controller"
+0x10de 0x003b "unknown" "nVidia Corp.|MCP04 USB Controller"
+0x10de 0x003c "unknown" "nVidia Corp.|MCP04 USB Controller"
+0x10de 0x003d "unknown" "nVidia Corp.|MCP04 PCI Bridge"
+0x10de 0x003e "sata_nv" "nVidia Corp.|MCP04 Serial ATA Controller"
+0x10de 0x0040 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800 Ultra]"
+0x10de 0x0041 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800]"
+0x10de 0x0042 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40.2"
+0x10de 0x0043 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800 XE]"
+0x10de 0x0044 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800 XT]"
+0x10de 0x0045 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800 GT]"
+0x10de 0x0046 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800 GT]"
+0x10de 0x0047 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800 GS]"
+0x10de 0x0048 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800 XT]"
+0x10de 0x0049 "Card:NVIDIA GeForce" "nVidia Corp.|NV40GL"
+0x10de 0x004d "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV40GL [Quadro FX 4400]"
+0x10de 0x004e "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV40GL [Quadro FX 4000]"
+0x10de 0x0050 "unknown" "nVidia Corp.|CK804 ISA Bridge"
+0x10de 0x0051 "unknown" "nVidia Corp.|CK804 ISA Bridge"
+0x10de 0x0052 "i2c-nforce2" "nVidia Corp.|CK804 SMBus"
+0x10de 0x0053 "amd74xx" "nVidia Corp.|CK804 IDE"
+0x10de 0x0054 "sata_nv" "nVidia Corp.|CK804 Serial ATA Controller"
+0x10de 0x0055 "sata_nv" "nVidia Corp.|CK804 Serial ATA Controller"
+0x10de 0x0056 "forcedeth" "nVidia Corp.|Ethernet controller"
+0x10de 0x0057 "forcedeth" "nVidia Corp.|Ethernet controller"
+0x10de 0x0058 "unknown" "nVidia Corp.|CK804 AC'97 Modem"
+0x10de 0x0059 "snd-intel8x0" "nVidia Corp.|CK804 AC'97 Audio Controller"
+0x10de 0x005a "unknown" "nVidia Corp.|CK804 USB Controller"
+0x10de 0x005b "unknown" "nVidia Corp.|CK804 USB Controller"
+0x10de 0x005c "unknown" "nVidia Corp.|CK804 PCI Bridge"
+0x10de 0x005d "unknown" "nVidia Corp.|CK804 PCIE Bridge"
+0x10de 0x005e "unknown" "nVidia Corp.|CK804 Memory Controller"
+0x10de 0x005f "unknown" "nVidia Corp.|CK804 Memory Controller"
+0x10de 0x0060 "unknown" "nVidia Corp.|nForce2 LPC / Legacy / System Management"
+0x10de 0x0064 "i2c-nforce2" "nVidia Corp.|nForce2 SMBus 2.0 Controller"
+0x10de 0x0065 "amd74xx" "nVidia Corp.|nForce2 UDMA 100/133 IDE Controller"
+0x10de 0x0066 "forcedeth" "nVidia Corp.|nForce2 MCP Networking Adapter"
+0x10de 0x0067 "ohci-hcd" "nVidia Corp.|nForce2 USB 1.0 OHCI Controller"
+0x10de 0x0068 "ehci-hcd" "nVidia Corp.|nForce2 USB 2.0 Enhanced Controller"
+0x10de 0x0069 "snd-intel8x0m" ""
+0x10de 0x006a "snd-intel8x0" "nVidia Corp.|nForce2 Audio Codec Interface"
+0x10de 0x006b "unknown" "nVidia Corp.|nForce2 APU"
+0x10de 0x006c "unknown" "nVidia Corp.|nForce2 External PCI Bridge"
+0x10de 0x006d "unknown" "nVidia Corp.|nForce2 PCI Bridge"
+0x10de 0x006e "ohci1394" "nVidia Corp.|nForce2 Firewire Controller"
+0x10de 0x0080 "unknown" "nVidia Corp.|MCP2A ISA bridge"
+0x10de 0x0084 "i2c-nforce2" "nVidia Corp.|MCP2A SMBus"
+0x10de 0x0085 "amd74xx" "nVidia Corp.|MCP2A IDE"
+0x10de 0x0086 "forcedeth" "nVidia Corp.|Ethernet controller"
+0x10de 0x0087 "unknown" "nVidia Corp.|MCP2A USB Controller"
+0x10de 0x0088 "unknown" "nVidia Corp.|MCP2A USB Controller"
+0x10de 0x0089 "snd-intel8x0m" ""
+0x10de 0x008a "snd-intel8x0" "nVidia Corp.|MCP2S AC'97 Audio Controller"
+0x10de 0x008b "unknown" "nVidia Corp.|MCP2A PCI Bridge"
+0x10de 0x008c "forcedeth" "nVidia Corp.|Ethernet controller"
+0x10de 0x008e "sata_nv" "nVidia Corp.|nForce2 Serial ATA Controller"
+0x10de 0x0090 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7800 GTX"
+0x10de 0x0091 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7800 GTX"
+0x10de 0x0092 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7800 GT"
+0x10de 0x0093 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7800 GS"
+0x10de 0x0095 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7800 SLI"
+0x10de 0x0098 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce Go 7800"
+0x10de 0x0099 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce Go 7800 GTX"
+0x10de 0x009d "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro FX 4500"
+0x10de 0x00a0 "Card:RIVA TNT2" "nVidia Corp.|Riva TNT2"
+0x10de 0x00c0 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800 GS"
+0x10de 0x00c1 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800"
+0x10de 0x00c2 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800 LE"
+0x10de 0x00c3 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800 XT"
+0x10de 0x00c8 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce Go 6800"
+0x10de 0x00c9 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce Go 6800 Ultra"
+0x10de 0x00cc "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|Quadro FX Go1400"
+0x10de 0x00cd "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV41 [Quadro FX 3450/4000 SDI]"
+0x10de 0x00ce "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|Quadro FX 1400"
+0x10de 0x00d0 "unknown" "nVidia Corp.|nForce3 LPC Bridge"
+0x10de 0x00d1 "amd64-agp" "nVidia Corp.|nForce 3 Host Bridge"
+0x10de 0x00d2 "unknown" "nVidia Corp.|nForce3 AGP Bridge"
+0x10de 0x00d3 "unknown" "nVidia Corp.|CK804 Memory Controller"
+0x10de 0x00d4 "i2c-nforce2" "nVidia Corp.|nForce MCP3? SMBus Controller"
+0x10de 0x00d5 "amd74xx" "nVidia Corp.|nForce3 IDE"
+0x10de 0x00d6 "forcedeth" "nVidia Corp.|nForce3 MCP Networking Adapter"
+0x10de 0x00d7 "ohci-hcd" "nVidia Corp.|nForce3 USB 1.1"
+0x10de 0x00d8 "ehci-hcd" "nVidia Corp.|nForce3 USB 2.0"
+0x10de 0x00d9 "snd-intel8x0m" "nVidia Corporation|nForce3 Audio"
+0x10de 0x00da "snd-intel8x0" "nVidia Corp.|nForce2 Audio Codec Interface"
+0x10de 0x00dd "unknown" "nVidia Corp.|nForce3 PCI Bridge"
+0x10de 0x00df "forcedeth" "nVidia Corp.|Ethernet adapter"
+0x10de 0x00e0 "unknown" "nVidia Corp.|nForce3 250Gb LPC Bridge"
+0x10de 0x00e1 "amd64-agp" "nVidia Corp.|nForce3 250Gb Host Bridge"
+0x10de 0x00e2 "unknown" "nVidia Corp.|nForce3 250Gb AGP Host to PCI Bridge"
+0x10de 0x00e3 "sata_nv" "nVidia Corp.|CK8S Serial ATA Controller (v2.5)"
+0x10de 0x00e4 "i2c-nforce2" "nVidia Corp.|nForce 250Gb PCI System Management"
+0x10de 0x00e5 "amd74xx" "nVidia Corp.|CK8S Parallel ATA Controller (v2.5)"
+0x10de 0x00e6 "forcedeth" "nVidia Corp.|Ethernet adapter"
+0x10de 0x00e7 "unknown" "nVidia Corp.|CK8S USB Controller"
+0x10de 0x00e8 "unknown" "nVidia Corp.|CK8S USB Controller"
+0x10de 0x00ea "snd-intel8x0" "nVidia Corp.|nForce3 250Gb AC'97 Audio Controller"
+0x10de 0x00ed "unknown" "nVidia Corp.|nForce3 250Gb PCI-to-PCI Bridge"
+0x10de 0x00ee "sata_nv" "nVidia Corp.|CK8S Serial ATA Controller (v2.5)"
+0x10de 0x00f0 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV40 [GeForce 6800/GeForce 6800 Ultra]"
+0x10de 0x00f1 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV43 [GeForce 6600/GeForce 6600 GT]"
+0x10de 0x00f2 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|NV43 [GeForce 6600 GT]"
+0x10de 0x00f3 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6200"
+0x10de 0x00f4 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6600 LE"
+0x10de 0x00f5 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7800 GS"
+0x10de 0x00f6 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6600 GS"
+0x10de 0x00f8 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV45GL [Quadro FX 3400 PCI-Express]"
+0x10de 0x00f9 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV40 [GeForce 6800 Ultra]"
+0x10de 0x00fa "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [GeForce FX 5750 PCI-Express]"
+0x10de 0x00fb "unknown" "nVidia Corp.|NV35 [GeForce PCX 5900]"
+0x10de 0x00fc "unknown" "nVidia Corp.|NV37GL [Quadro FX 330/GeForce PCX 5300]"
+0x10de 0x00fd "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV37GL [Quadro FX 330]"
+0x10de 0x00fe "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV38GL [Quadro FX 1300 PCI-Express]"
+0x10de 0x00ff "unknown" "nVidia Corp.|NV18 [GeForce PCX 4300]"
+0x10de 0x0100 "Card:NVIDIA GeForce 256 (generic)" "nVidia Corp.|GeForce 256"
+0x10de 0x0101 "Card:NVIDIA GeForce 256 (generic)" "nVidia Corp.|GeForce DDR"
+0x10de 0x0102 "Card:NVIDIA GeForce 256 (generic)" "nVidia Corp.|NV10 GeForce 256 Ultra"
+0x10de 0x0103 "Card:NVIDIA GeForce 256 (generic)" "nVidia Corp.|Quadro"
+0x10de 0x0110 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV11 Geforce2 MX/MX 400"
+0x10de 0x0111 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV11 geForce2 100/200"
+0x10de 0x0112 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV11 Geforce2 Go"
+0x10de 0x0113 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV11 Quadro2 MXR/EX/Go"
+0x10de 0x0140 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6600 GT"
+0x10de 0x0141 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6600"
+0x10de 0x0142 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6600 LE"
+0x10de 0x0143 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6600 VE"
+0x10de 0x0144 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6600"
+0x10de 0x0145 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6610 XL"
+0x10de 0x0146 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6600 TE/6200 TE"
+0x10de 0x0147 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6700 XL"
+0x10de 0x0148 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6600"
+0x10de 0x0149 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6600 GT"
+0x10de 0x014a "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|Quadro NVS 440"
+0x10de 0x014c "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|Quadro FX 540M"
+0x10de 0x014d "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|Quadro FX 550"
+0x10de 0x014e "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|Quadro FX 540"
+0x10de 0x014f "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6200"
+0x10de 0x0150 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV15 Geforce2 GTS"
+0x10de 0x0151 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV15 Geforce2 Ti"
+0x10de 0x0152 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV15 Bladerunner (GeForce2 Ultra)"
+0x10de 0x0153 "Card:NVIDIA GeForce2 DDR (generic)" "nVidia Corp.|NV15 Quadro2 Pro"
+0x10de 0x0160 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6500"
+0x10de 0x0161 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6200 TurboCache(TM)"
+0x10de 0x0162 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|NV43 [GeForce 6200 SE]"
+0x10de 0x0163 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|NV44 [GeForce 6200 LE]"
+0x10de 0x0164 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6200"
+0x10de 0x0165 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|NV44 [Quadro NVS 285]"
+0x10de 0x0166 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6400"
+0x10de 0x0167 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6200"
+0x10de 0x0168 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6400"
+0x10de 0x0169 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6250"
+0x10de 0x016a "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7150 GS"
+0x10de 0x0170 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17 GeForce4 MX 460"
+0x10de 0x0171 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17 GeForce4 MX 440"
+0x10de 0x0172 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17 GeForce4 MX 420"
+0x10de 0x0173 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17 GeForce4 MMX 440-SE"
+0x10de 0x0174 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17M GeForce4 440 Go"
+0x10de 0x0175 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17M GeForce4 420 Go"
+0x10de 0x0176 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17M GeForce4 420 Go 32M"
+0x10de 0x0177 "Card:NVIDIA GeForce4 (generic)" "NVIDIA Corp.|NV17M GeForce4 460 Go"
+0x10de 0x0178 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17GL Quadro4 500XGL"
+0x10de 0x0179 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17M GeForce4 440 Go 64M"
+0x10de 0x017a "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17GL Quadro4 200/400NVS"
+0x10de 0x017b "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17GL Quadro4 550XGL"
+0x10de 0x017c "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17M-GL Quadro4 500 GoGL"
+0x10de 0x017d "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV17M GeForce4 410 Go 16M"
+0x10de 0x0181 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 GeForce4 MX440 AGP 8x"
+0x10de 0x0182 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 GeForce4 MX440SE AGP 8x"
+0x10de 0x0183 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 GeForce4 MX420 AGP 8x"
+0x10de 0x0185 "Card:NVIDIA GeForce4 (generic)" "NVIDIA Corp.|NV18.6? GeForce4 MX 4000"
+0x10de 0x0186 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 GeForce4 448 Go"
+0x10de 0x0187 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 GeForce4 488 Go"
+0x10de 0x0188 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 Quadro4 580 XGL"
+0x10de 0x0189 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|GeForce4 MX with AGP8X (Mac)"
+0x10de 0x018a "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 Quadro4 280 NVS"
+0x10de 0x018b "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV18 Quadro4 380 XGL"
+0x10de 0x018c "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|Quadro NVS 50 PCI"
+0x10de 0x018d "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV18M [GeForce4 448 Go]"
+0x10de 0x0191 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8800 GTX"
+0x10de 0x0193 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8800 GTS"
+0x10de 0x0194 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8800 Ultra"
+0x10de 0x019d "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro FX 5600"
+0x10de 0x019e "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro FX 4600"
+0x10de 0x01a0 "Card:NVIDIA GeForce2 Integrated (generic)" "nVidia Corp.|GeForce2 Integrated GPU"
+0x10de 0x01a4 "nvidia-agp" "nVidia Corp.|nForce AGP Controller"
+0x10de 0x01a5 "unknown" "nVidia Corp.|nForce AGP Controller"
+0x10de 0x01a6 "unknown" "nVidia Corp.|nForce AGP Controller"
+0x10de 0x01a8 "unknown" "nVidia Corp.|nForce 220 Memory Controller (SDR)"
+0x10de 0x01a9 "unknown" "nVidia Corp.|nForce 420 Memory Controller (SDR)"
+0x10de 0x01aa "unknown" "nVidia Corp.|nForce 220 Memory Controller (DDR)"
+0x10de 0x01ab "unknown" "nVidia Corp.|nForce 420 Memory Controller (DDR)"
+0x10de 0x01ac "unknown" "nVidia Corp.|nForce 220/420 Memory Controller"
+0x10de 0x01ad "forcedeth" "nVidia Corp.|nForce Ethernet Controller"
+0x10de 0x01b0 "unknown" "nVidia Corp.|nForce MCP Audio Processing Unit (Dolby Digital)"
+0x10de 0x01b1 "snd-intel8x0" "nVidia Corp.|nForce Audio Codec Interface"
+0x10de 0x01b2 "unknown" "nVidia Corp.|nForce Joystick"
+0x10de 0x01b4 "i2c-amd756" "nVidia Corp.|nForce SMBus Controller"
+0x10de 0x01b7 "unknown" "nVidia Corp.|nForce AGP Host to PCI Bridge"
+0x10de 0x01b8 "unknown" "nVidia Corp.|nForce PCI Bridge"
+0x10de 0x01bc "amd74xx" "nVidia Corp.|nForce ATA Controller"
+0x10de 0x01c1 "slamr" "nVidia Corp.|Intel 537 [nForce MC97 Modem]"
+0x10de 0x01c2 "ohci-hcd" "nVidia Corp.|nForce USB Controller"
+0x10de 0x01c3 "forcedeth" "nVidia Corp.|nForce MCP Networking Adapter"
+0x10de 0x01d0 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7350 LE"
+0x10de 0x01d1 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7300 LE"
+0x10de 0x01d3 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7300 SE/7200 GS"
+0x10de 0x01d6 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce Go 7200"
+0x10de 0x01d7 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro NVS 110M / GeForce Go 7300"
+0x10de 0x01d8 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro NVS 120M / GeForce Go 7400"
+0x10de 0x01da "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro NVS 110M"
+0x10de 0x01db "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro NVS 120M"
+0x10de 0x01dc "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro FX 350M"
+0x10de 0x01dd "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7500 LE"
+0x10de 0x01de "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro FX 350"
+0x10de 0x01df "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7300 GS"
+0x10de 0x01e0 "nvidia-agp" "nVidia Corp.|nForce2 AGP Controller"
+0x10de 0x01e1 "unknown" "NVIDIA Corp.|nForce2 AGP Controller"
+0x10de 0x01e8 "agpgart" "nVidia Corp.|nForce2 AGP Host to PCI Bridge"
+0x10de 0x01ea "unknown" "NVIDIA Corp.|nForce2 Memory Controller 0"
+0x10de 0x01eb "unknown" "nVidia Corp.|nForce2 Memory Controller"
+0x10de 0x01ec "unknown" "nVidia Corp.|nForce2 Memory Controller"
+0x10de 0x01ed "unknown" "nVidia Corp.|nForce2 Memory Controller"
+0x10de 0x01ee "unknown" "nVidia Corp.|nForce2 Memory Controller"
+0x10de 0x01ef "unknown" "nVidia Corp.|nForce2 Memory Controller"
+0x10de 0x01f0 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|nForce2 Geforce 4 Integrated"
+0x10de 0x0200 "Card:NVIDIA GeForce3 (generic)" "nVidia Corp.|GeForce3"
+0x10de 0x0201 "Card:NVIDIA GeForce3 (generic)" "nVidia Corp.|GeForce3 Ti 200"
+0x10de 0x0202 "Card:NVIDIA GeForce3 (generic)" "nVidia Corp.|GeForce3 Ti 500"
+0x10de 0x0203 "Card:NVIDIA GeForce3 (generic)" "nVidia Corp.|Quadro DDC"
+0x10de 0x0210 "Card:NVIDIA GeForce" "nVidia Corp.|Unknown (generic)"
+0x10de 0x0211 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800"
+0x10de 0x0212 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800 LE"
+0x10de 0x0215 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800 GT"
+0x10de 0x0218 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6800 XT"
+0x10de 0x021d "Card:NVIDIA GeForce" "nVidia Corp.|Unknown (generic)"
+0x10de 0x021e "Card:NVIDIA GeForce" "nVidia Corp.|Unknown (generic)"
+0x10de 0x0220 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|"
+0x10de 0x0221 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6200"
+0x10de 0x0222 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|GeForce 6200 A-LE"
+0x10de 0x0228 "Card:NVIDIA GeForce 6800 (generic)" "nVidia Corp.|"
+0x10de 0x0240 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|C51PV [GeForce 6150]"
+0x10de 0x0241 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce 6150 LE"
+0x10de 0x0242 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|C51G [GeForce 6100]"
+0x10de 0x0243 "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x0244 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6150"
+0x10de 0x0245 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|Quadro NVS 210S/GeForce 6150 LE"
+0x10de 0x0246 "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x0247 "Card:NVIDIA GeForce 6 Series" "nVidia Corp.|GeForce Go 6100"
+0x10de 0x0248 "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x0249 "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x024a "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x024b "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x024c "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x024d "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x024e "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x024f "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x0250 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV25 GeForce4 Ti4600"
+0x10de 0x0251 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV25 GeForce4 Ti4400"
+0x10de 0x0252 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x252"
+0x10de 0x0253 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|NV25 GeForce4 Ti4200"
+0x10de 0x0258 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro4 900 XGL"
+0x10de 0x0259 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro4 750 XGL"
+0x10de 0x025b "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro4 750 XGL"
+0x10de 0x0260 "unknown" "nVidia Corp.|MCP51 LPC Bridge"
+0x10de 0x0261 "unknown" "nVidia Corp.|MCP51 LPC Bridge"
+0x10de 0x0262 "unknown" "nVidia Corp.|MCP51 LPC Bridge"
+0x10de 0x0263 "unknown" "nVidia Corp.|MCP51 LPC Bridge"
+0x10de 0x0264 "i2c-nforce2" "nVidia Corp.|MCP51 SMBus"
+0x10de 0x0265 "amd74xx" "nVidia Corp.|MCP51 IDE"
+0x10de 0x0266 "sata_nv" "nVidia Corp.|MCP51 Serial ATA Controller"
+0x10de 0x0267 "sata_nv" "nVidia Corp.|MCP51 Serial ATA Controller"
+0x10de 0x0268 "forcedeth" "nVidia Corp.|MCP51 Ethernet Controller"
+0x10de 0x0269 "forcedeth" "nVidia Corp.|MCP51 Ethernet Controller"
+0x10de 0x026a "unknown" "nVidia Corp.|MCP51 MCI"
+0x10de 0x026b "snd-intel8x0" "nVidia Corp.|MCP51 AC97 Audio Controller"
+0x10de 0x026c "snd-hda-intel" "nVidia Corp.|MCP51 High Definition Audio"
+0x10de 0x026d "unknown" "nVidia Corp.|MCP51 USB Controller"
+0x10de 0x026e "unknown" "nVidia Corp.|MCP51 USB Controller"
+0x10de 0x026f "unknown" "nVidia Corp.|MCP51 PCI Bridge"
+0x10de 0x0270 "unknown" "nVidia Corp.|MCP51 Host Bridge"
+0x10de 0x0271 "unknown" "nVidia Corp.|MCP51 PMU"
+0x10de 0x0272 "unknown" "nVidia Corp.|MCP51 Memory Controller 0"
+0x10de 0x027e "unknown" "nVidia Corp.|C51 Memory Controller 2"
+0x10de 0x027f "unknown" "nVidia Corp.|C51 Memory Controller 3"
+0x10de 0x0280 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|GeForce4 Ti 4800"
+0x10de 0x0281 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|GeForce4 Ti 4200 with AGP8X"
+0x10de 0x0282 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|GeForce4 Ti 4800 SE"
+0x10de 0x0286 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|GeForce4 Ti 4200 Go"
+0x10de 0x0288 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro4 980 XGL"
+0x10de 0x0289 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro4 780 XGL"
+0x10de 0x028c "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro4 700 GoGL"
+0x10de 0x0290 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7900 GTX"
+0x10de 0x0291 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7900 GT/GTO"
+0x10de 0x0292 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7900 GS"
+0x10de 0x0293 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7950 GX2"
+0x10de 0x0294 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7950 GX2"
+0x10de 0x0295 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7950 GT"
+0x10de 0x0297 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce Go 7950 GTX"
+0x10de 0x0298 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce Go 7900 GS"
+0x10de 0x0299 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce Go 7900 GTX"
+0x10de 0x029a "Card:NVIDIA GeForce 7 Series" "nVidia Corporation|G71 [Quadro FX 2500M]"
+0x10de 0x029b "Card:NVIDIA GeForce 7 Series" "nVidia Corporation|G71 [Quadro FX 1500M]"
+0x10de 0x029c "Card:NVIDIA GeForce 7 Series" "nVidia Corporation|Quadro FX 5500"
+0x10de 0x029d "Card:NVIDIA GeForce 7 Series" "nVidia Corporation|Quadro FX 3500"
+0x10de 0x029e "Card:NVIDIA GeForce 7 Series" "nVidia Corporation|Quadro FX 1500"
+0x10de 0x029f "Card:NVIDIA GeForce 7 Series" "nVidia Corporation|Quadro FX 4500 X2"
+0x10de 0x02a0 "Card:NVIDIA GeForce3 (xbox)" "nVidia Corp.|GeForce3 Integrated (Xbox)"
+0x10de 0x02e0 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7600 GT/unknown GPU"
+0x10de 0x02e1 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7600 GS"
+0x10de 0x02f0 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f1 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f2 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f3 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f4 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f5 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f6 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f7 "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x02f8 "unknown" "nVidia Corp.|C51 Memory Controller 5"
+0x10de 0x02f9 "unknown" "nVidia Corp.|C51 Memory Controller 4"
+0x10de 0x02fa "unknown" "nVidia Corp.|C51 Memory Controller 0"
+0x10de 0x02fb "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x02fc "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x02fd "unknown" "nVidia Corp.|C51 PCI Express Bridge"
+0x10de 0x02fe "unknown" "nVidia Corp.|C51 Memory Controller 1"
+0x10de 0x02ff "unknown" "nVidia Corp.|C51 Host Bridge"
+0x10de 0x0300 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV30 GeForce FX"
+0x10de 0x0301 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|GeForce FX 5800 Ultra"
+0x10de 0x0302 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|GeForce FX 5800"
+0x10de 0x0308 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|Quadro FX 2000"
+0x10de 0x0309 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|Quadro FX 1000"
+0x10de 0x0311 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|GeForce FX 5600"
+0x10de 0x0312 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|GeForce FX 5600"
+0x10de 0x0313 "Card:NVIDIA GeForce" "nVidia Corp.|NV31"
+0x10de 0x0314 "Card:NVIDIA GeForce FX (generic)" "NVIDIA Corp.|NV31 GeForce FX 5600XT"
+0x10de 0x0316 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x316"
+0x10de 0x0317 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x317"
+0x10de 0x0318 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x318"
+0x10de 0x0319 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x319"
+0x10de 0x031a "Card:NVIDIA GeForce FX (generic)" "NVIDIA Corp.|NV31 GeForce Go 5600"
+0x10de 0x031b "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x31B"
+0x10de 0x031c "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro FX Go700"
+0x10de 0x031d "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x31D"
+0x10de 0x031e "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x31E"
+0x10de 0x031f "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x31F"
+0x10de 0x0320 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV34 [GeForce FX 5200]"
+0x10de 0x0321 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|GeForce FX 5200 Ultra"
+0x10de 0x0322 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|GeForce FX 5200"
+0x10de 0x0323 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x323"
+0x10de 0x0324 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV30GL [GeForce FX 5200 Go]"
+0x10de 0x0325 "Card:NVIDIA GeForce FX (generic)" "NVIDIA Corp.|??? GeForce FX Go 5250"
+0x10de 0x0326 "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x326"
+0x10de 0x0327 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV34 [GeForce FX 5100]"
+0x10de 0x0328 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|GeForce FX Go 5200"
+0x10de 0x0329 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV34M [GeForce FX Go5200]"
+0x10de 0x032a "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro NVS 55/280 PCI"
+0x10de 0x032b "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|Quadro FX 500/FX 600"
+0x10de 0x032c "Card:NVIDIA GeForce FX (generic)" "NVIDIA Corp.|??? NVIDIA GeForce FX Go 5300"
+0x10de 0x032d "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV34 [GeForce FX Go5100]"
+0x10de 0x032e "Card:NVIDIA GeForce4 (generic)" "nVidia Corp.|0x32E"
+0x10de 0x032f "Card:NVIDIA GeForce" "NVIDIA Corp.|NV34GL ???"
+0x10de 0x0330 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV35 [GeForce FX 5900 Ultra]"
+0x10de 0x0331 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV35 [GeForce FX 5900]"
+0x10de 0x0332 "Card:NVIDIA GeForce FX (generic)" "NVIDIA Corp.|??? GeForce FX 5900XT"
+0x10de 0x0333 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV38 [GeForce FX 5950]"
+0x10de 0x0334 "Card:NVIDIA GeForce" "nVidia Corp.|NV35 [GeForce FX 5900ZT]"
+0x10de 0x0338 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV35GL [Quadro FX 3000]"
+0x10de 0x033f "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV35GL [Quadro FX 700]"
+0x10de 0x0341 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [GeForce FX 5700 Ultra]"
+0x10de 0x0342 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [GeForce FX 5700]"
+0x10de 0x0343 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [GeForce FX 5700LE]"
+0x10de 0x0344 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36.4 [GeForce FX 5700VE]"
+0x10de 0x0345 "Card:NVIDIA GeForce" "nVidia Corp.|NV36.5"
+0x10de 0x0347 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [GeForce FX Go5700]"
+0x10de 0x0348 "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [GeForce FX Go5700]"
+0x10de 0x0349 "Card:NVIDIA GeForce" "nVidia Corp.|NV36"
+0x10de 0x034b "Card:NVIDIA GeForce" "nVidia Corp.|NV36"
+0x10de 0x034c "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [Quadro FX Go1000]"
+0x10de 0x034e "Card:NVIDIA GeForce FX (generic)" "nVidia Corp.|NV36 [Quadro FX 1100]"
+0x10de 0x034f "Card:NVIDIA GeForce" "nVidia Corp.|NV36GL"
+0x10de 0x0360 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0361 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0362 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0363 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0364 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0365 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0366 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0367 "unknown" "nVidia Corp.|MCP55 LPC Bridge"
+0x10de 0x0368 "i2c-nforce2" "nVidia Corp.|MCP55 SMBus"
+0x10de 0x0369 "unknown" "nVidia Corp.|MCP55 Memory Controller"
+0x10de 0x036a "unknown" "nVidia Corp.|MCP55 Memory Controller"
+0x10de 0x036b "unknown" "nVidia Corporation|MCP55 SMU"
+0x10de 0x036c "unknown" "nVidia Corp.|MCP55 USB Controller"
+0x10de 0x036d "unknown" "nVidia Corp.|MCP55 USB Controller"
+0x10de 0x036e "amd74xx" "nVidia Corp.|MCP55 Serial ATA Controller"
+0x10de 0x036f "sata_nv" "nVidia Corp.|MCP55 Serial ATA Controller"
+0x10de 0x0370 "unknown" "nVidia Corporation|MCP55 PCI bridge"
+0x10de 0x0371 "snd-hda-intel" "nVidia Corp.|MCP55 High Definition Audio"
+0x10de 0x0372 "forcedeth" "nVidia Corp.|MCP55 Ethernet"
+0x10de 0x0373 "forcedeth" "nVidia Corp.|MCP55 Ethernet"
+0x10de 0x0374 "unknown" "nVidia Corporation|MCP55 PCI Express bridge"
+0x10de 0x0375 "unknown" "nVidia Corporation|MCP55 PCI Express bridge"
+0x10de 0x0376 "unknown" "nVidia Corporation|MCP55 PCI Express bridge"
+0x10de 0x0377 "unknown" "nVidia Corporation|MCP55 PCI Express bridge"
+0x10de 0x0378 "unknown" "nVidia Corporation|MCP55 PCI Express bridge"
+0x10de 0x037a "unknown" "nVidia Corp.|MCP55 Memory Controller"
+0x10de 0x037e "sata_nv" "nVidia Corp.|MCP55 SATA Controller"
+0x10de 0x037f "sata_nv" "nVidia Corp.|MCP55 SATA Controller"
+0x10de 0x0390 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7650 GS"
+0x10de 0x0391 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7600 GT"
+0x10de 0x0392 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7600 GS"
+0x10de 0x0393 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.[GeForce 7300 GT"
+0x10de 0x0394 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.[GeForce 7600 LE"
+0x10de 0x0395 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.[GeForce 7300 GT"
+0x10de 0x0398 "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce Go 7600"
+0x10de 0x039e "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|Quadro FX 560"
+0x10de 0x03a0 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a1 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a2 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a3 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a4 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a5 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a6 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a7 "unknown" "nVidia Corporation|C55 Host Bridge"
+0x10de 0x03a8 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03a9 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03aa "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03ab "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03ac "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03ad "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03ae "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03af "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b0 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b1 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b2 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b3 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b4 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b5 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b6 "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03b7 "unknown" "nVidia Corporation|C55 PCI Express bridge"
+0x10de 0x03b8 "unknown" "nVidia Corporation|C55 PCI Express bridge"
+0x10de 0x03b9 "unknown" "nVidia Corporation|C55 PCI Express bridge"
+0x10de 0x03ba "unknown" "nVidia Corporation|C55 Memory Controller"
+0x10de 0x03bb "unknown" "nVidia Corporation|C55 PCI Express bridge"
+0x10de 0x03d0 "unknown" "nVidia Corporation|GeForce 6150SE nForce 430"
+0x10de 0x03d1 "unknown" "nVidia Corporation|GeForce 6100 nForce 405"
+0x10de 0x03d2 "unknown" "nVidia Corporation|GeForce 6100 nForce 400"
+0x10de 0x03d5 "unknown" "nVidia Corporation|GeForce 6100 nForce 420"
+0x10de 0x03e0 "unknown" "nVidia Corporation|MCP61 LPC Bridge"
+0x10de 0x03e1 "unknown" "nVidia Corporation|MCP61 LPC Bridge"
+0x10de 0x03e2 "unknown" "nVidia Corporation|MCP61 LPC Bridge"
+0x10de 0x03e3 "unknown" "nVidia Corporation|MCP61 LPC Bridge"
+0x10de 0x03e4 "unknown" "nVidia Corporation|MCP61 High Definition Audio"
+0x10de 0x03e5 "forcedeth" "nVidia Corporation|MCP61 Ethernet"
+0x10de 0x03e6 "forcedeth" "nVidia Corporation|MCP61 Ethernet"
+0x10de 0x03e7 "sata_nv" "nVidia Corporation|MCP61 SATA Controller"
+0x10de 0x03e8 "unknown" "nVidia Corporation|MCP61 PCI Express bridge"
+0x10de 0x03e9 "unknown" "nVidia Corporation|MCP61 PCI Express bridge"
+0x10de 0x03ea "unknown" "nVidia Corporation|MCP61 Memory Controller"
+0x10de 0x03eb "unknown" "nVidia Corporation|MCP61 SMBus"
+0x10de 0x03ec "amd74xx" "nVidia Corporation|MCP61 IDE"
+0x10de 0x03ee "forcedeth" "nVidia Corporation|MCP61 Ethernet"
+0x10de 0x03ef "forcedeth" "nVidia Corporation|MCP61 Ethernet"
+0x10de 0x03f0 "unknown" "nVidia Corporation|MCP61 High Definition Audio"
+0x10de 0x03f1 "unknown" "nVidia Corporation|MCP61 USB Controller"
+0x10de 0x03f2 "unknown" "nVidia Corporation|MCP61 USB Controller"
+0x10de 0x03f3 "unknown" "nVidia Corporation|MCP61 PCI bridge"
+0x10de 0x03f4 "unknown" "nVidia Corporation|MCP61 SMU"
+0x10de 0x03f5 "unknown" "nVidia Corporation|MCP61 Memory Controller"
+0x10de 0x03f6 "sata_nv" "nVidia Corporation|MCP61 SATA Controller"
+0x10de 0x03f7 "sata_nv" "nVidia Corporation|MCP61 SATA Controller"
+0x10de 0x0400 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8600 GTS"
+0x10de 0x0402 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8600 GT"
+0x10de 0x0407 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8600M GT"
+0x10de 0x040b "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro NVS 320M"
+0x10de 0x040c "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro FX 570M"
+0x10de 0x040d "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro FX 1600M"
+0x10de 0x0421 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8500 GT"
+0x10de 0x0422 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8400 GS"
+0x10de 0x0423 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8300 GS"
+0x10de 0x0425 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8600M GS"
+0x10de 0x0426 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8400M GT"
+0x10de 0x0427 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8400M GS"
+0x10de 0x0428 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|GeForce 8400M G"
+0x10de 0x0429 "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro NVS 140M"
+0x10de 0x042a "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro NVS 130M"
+0x10de 0x042b "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro NVS 135M"
+0x10de 0x042d "Card:NVIDIA GeForce 8 Series" "nVidia Corp.|Quadro FX 360M"
+0x10de 0x0440 "unknown" "nVidia Corporation|MCP65 LPC Bridge"
+0x10de 0x0441 "unknown" "nVidia Corporation|MCP65 LPC Bridge"
+0x10de 0x0442 "unknown" "nVidia Corporation|MCP65 LPC Bridge"
+0x10de 0x0443 "unknown" "nVidia Corporation|MCP65 LPC Bridge"
+0x10de 0x0444 "unknown" "nVidia Corporation|MCP65 Memory Controller"
+0x10de 0x0445 "unknown" "nVidia Corporation|MCP65 Memory Controller"
+0x10de 0x0446 "unknown" "nVidia Corporation|MCP65 SMBus"
+0x10de 0x0447 "unknown" "nVidia Corporation|MCP65 SMU"
+0x10de 0x0448 "amd74xx" "nVidia Corporation|MCP65 IDE"
+0x10de 0x0449 "unknown" "nVidia Corporation|MCP65 PCI bridge"
+0x10de 0x044a "unknown" "nVidia Corporation|MCP65 High Definition Audio"
+0x10de 0x044b "unknown" "nVidia Corporation|MCP65 High Definition Audio"
+0x10de 0x044c "ahci" "nVidia Corporation|MCP65 AHCI Controller"
+0x10de 0x044d "ahci" "nVidia Corporation|MCP65 AHCI Controller"
+0x10de 0x044e "ahci" "nVidia Corporation|MCP65 AHCI Controller"
+0x10de 0x044f "ahci" "nVidia Corporation|MCP65 AHCI Controller"
+0x10de 0x0450 "forcedeth" "nVidia Corporation|MCP65 Ethernet"
+0x10de 0x0451 "forcedeth" "nVidia Corporation|MCP65 Ethernet"
+0x10de 0x0452 "forcedeth" "nVidia Corporation|MCP65 Ethernet"
+0x10de 0x0453 "forcedeth" "nVidia Corporation|MCP65 Ethernet"
+0x10de 0x0454 "unknown" "nVidia Corporation|MCP65 USB Controller"
+0x10de 0x0455 "unknown" "nVidia Corporation|MCP65 USB Controller"
+0x10de 0x0456 "unknown" "nVidia Corporation|MCP65 USB Controller"
+0x10de 0x0457 "unknown" "nVidia Corporation|MCP65 USB Controller"
+0x10de 0x0458 "unknown" "nVidia Corporation|MCP65 PCI Express bridge"
+0x10de 0x0459 "unknown" "nVidia Corporation|MCP65 PCI Express bridge"
+0x10de 0x045a "unknown" "nVidia Corporation|MCP65 PCI Express bridge"
+0x10de 0x045c "sata_nv" "nVidia Corporation|MCP65 SATA Controller"
+0x10de 0x045d "sata_nv" "nVidia Corporation|MCP65 SATA Controller"
+0x10de 0x045e "sata_nv" "nVidia Corporation|MCP65 SATA Controller"
+0x10de 0x045f "sata_nv" "nVidia Corporation|MCP65 SATA Controller"
+0x10de 0x053a "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7050 PV / nForce 630a"
+0x10de 0x053b "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7050 PV / nForce 630a"
+0x10de 0x053e "Card:NVIDIA GeForce 7 Series" "nVidia Corp.|GeForce 7025 PV / nForce 630a"
+0x10df 0x10df "lpfc" "Emulex Corp.|Light Pulse Fibre Channel Adapter"
+0x10df 0x1ae5 "lpfc" "Emulex Corp.|LP6000 Fibre Channel Host Adapter"
+0x10df 0x1ae6 "lpfc" "Emulex Corp.|LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)"
+0x10df 0x1ae7 "lpfc" "Emulex Corp.|LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:2-3)"
+0x10df 0xf005 "unknown" "Emulex Corp.|LP1150e Fibre Channel Host Adapter"
+0x10df 0xf015 "lpfc" "Emulex Corp.|LP1150e"
+0x10df 0xf085 "lpfc" "Emulex Corp.|LP850 Fibre Channel Adapter"
+0x10df 0xf095 "lpfc" "Emulex Corp.|LP952 Fibre Channel Adapter"
+0x10df 0xf098 "lpfc" "Emulex Corp.|LP982 Fibre Channel Adapter"
+0x10df 0xf0a1 "lpfc" "Emulex Corp.|LightPulse Fibre Channel Adapter"
+0x10df 0xf0a5 "lpfc" "Emulex Corp.|LP1050 Fibre Channel Host Adapter"
+0x10df 0xf0b5 "unknown" "Emulex Corporation|Viper LightPulse Fibre Channel Host Adapter"
+0x10df 0xf0d1 "lpfc" "Emulex Corp.|Fibre Channel Host Adapter"
+0x10df 0xf0d5 "lpfc" "Emulex Corp.|LP1150"
+0x10df 0xf0e1 "lpfc" "Emulex Corp.|Fibre Channel Host Adapter"
+0x10df 0xf0e5 "lpfc" "Emulex Corp.|Fibre Channel Host Adapter"
+0x10df 0xf0f5 "lpfc" "Emulex Corporation|Neptune LightPulse Fibre Channel Host Adapter"
+0x10df 0xf0f6 "lpfc" ""
+0x10df 0xf0f7 "lpfc" ""
+0x10df 0xf100 "lpfc" "Emulex Corp.|LP11000e"
+0x10df 0xf700 "lpfc" "Emulex Corp.|LP7000 Fibre Channel Host Adapter"
+0x10df 0xf701 "lpfc" "Emulex Corp.|LP 7000EFibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)"
+0x10df 0xf800 "lpfc" "Emulex Corp.|LP8000 Fibre Channel Host Adapter"
+0x10df 0xf801 "lpfc" "Emulex Corp.|LP 8000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)"
+0x10df 0xf900 "lpfc" "Emulex Corp.|LP9000 Fibre Channel Host Adapter"
+0x10df 0xf901 "lpfc" "Emulex Corp.|LP 9000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2)"
+0x10df 0xf980 "lpfc" "Emulex Corp.|LP9802 Fibre Channel Host Adapter"
+0x10df 0xf981 "lpfc" "Emulex Corp.|LP 9802 Fibre Channel Host Adapter Alternate ID"
+0x10df 0xf982 "lpfc" "Emulex Corp.|LP 9802 Fibre Channel Host Adapter Alternate ID"
+0x10df 0xfa00 "lpfc" "Emulex Corp.|LP10000 Fibre Channel Adapter"
+0x10df 0xfa01 "lpfc" "Emulex Corp.|LP101"
+0x10df 0xfb00 "lpfc" "Emulex Corp.|LightPulse Fibre Channel Adapter"
+0x10df 0xfc00 "lpfc" "Emulex Corp.|LP10000-S 2"
+0x10df 0xfc10 "lpfc" "Emulex Corporation|Helios-X LightPulse Fibre Channel Host Adapter"
+0x10df 0xfc20 "lpfc" "Emulex Corporation|Zephyr-X LightPulse Fibre Channel Host Adapter"
+0x10df 0xfd00 "lpfc" "Emulex Corp.|LP11000"
+0x10df 0xfd11 "lpfc" ""
+0x10df 0xfd12 "lpfc" ""
+0x10df 0xfe00 "lpfc" "Emulex Corp.|Fibre Channel Host Adapter"
+0x10df 0xfe11 "lpfc" ""
+0x10df 0xfe12 "lpfc" ""
+0x10df 0xff00 "unknown" "Emulex Corporation|Neptune LightPulse Fibre Channel Host Adapter"
+0x10e0 0x5026 "unknown" "Integrated Micro|IMS5026/27/28"
+0x10e0 0x5027 "unknown" "Integrated Micro|IMS5027"
+0x10e0 0x5028 "unknown" "Integrated Micro|IMS5028"
+0x10e0 0x8849 "unknown" "Integrated Micro|IMS8849"
+0x10e0 0x8853 "unknown" "Integrated Micro|IMS8853"
+0x10e0 0x9128 "Card:IMS TwinTurbo (generic)" "Integrated Micro|IMS9129 [Twin turbo 128]"
+0x10e0 0x9135 "Card:IMS TwinTurbo (generic)" "IMS|TwinTurbo 3D"
+0x10e1 0x0391 "unknown" "Tekram|TRM-S1040"
+0x10e1 0x690c "unknown" "Tekram|DC-690c"
+0x10e1 0xdc20 "unknown" "Tekram Technology Corp. Ltd.|DC-290 EIDE Controller"
+0x10e1 0xdc29 "unknown" "Tekram|DC-290"
+0x10e3 0x0000 "Card:VESA driver (generic)" "Tundra Semiconductor Corp.|CA91C042 [Universe]"
+0x10e3 0x0108 "unknown" "Tundra Semiconductor Corp.|Tsi108 Host Bridge for Single PowerPC"
+0x10e3 0x0148 "unknown" "Tundra Semiconductor Corp.|Tsi148 [Tempe]"
+0x10e3 0x0513 "unknown" "Tundra Semiconductor Corp.|Tsi320 Dual-Mode PCI-to-PCI Bus Bridge"
+0x10e3 0x0850 "unknown" "Tundra Semiconductor Corp.|Tsi850 Power PC Dual PCI Host Bridge"
+0x10e3 0x0854 "unknown" "Tundra Semiconductor Corp.|Tsi850 Power PC Single PCI Host Bridge"
+0x10e3 0x0860 "unknown" "Tundra Semiconductor Corp.|CA91C860 [QSpan]"
+0x10e3 0x0862 "unknown" "Tundra Semiconductor Corp.|CA91L862A QSpan II PCI-to-Motorola CPU Bridge"
+0x10e3 0x8260 "unknown" "Tundra Semiconductor Corp.|CA91L8200/8260 PowerSpan II PowerPC-to-PCI Bus Switch"
+0x10e3 0x8261 "unknown" "Tundra Semiconductor Corp.|CA91L8200/8260 PowerSpan II PowerPC-to-PCI Bus Switch"
+0x10e3 0xa108 "unknown" "Tundra Semiconductor Corp.|Tsi109 Host Bridge for Dual PowerPC"
+0x10e4 0x8029 "unknown" "Tandem Computers|Realtek 8029 Network Card"
+0x10e8 0x1072 "unknown" "Applied Micro Circuits Corp.|INES GPIB-PCI (AMCC5920 based)"
+0x10e8 0x2011 "unknown" "Applied Micro Circuits Corp.|Q-Motion Video Capture/Edit board"
+0x10e8 0x4750 "unknown" "Applied Micro Circuits Corp.|S5930 [Matchmaker]"
+0x10e8 0x5920 "unknown" "Applied Micro Circuits Corp.|S5920"
+0x10e8 0x8001 "unknown" "Applied Micro Circuits Corp.|S5933 Daktronics VMax transmitter card"
+0x10e8 0x8033 "unknown" "Applied Micro Circuits Corp.|BBK-PCI light Transputer Link Interface"
+0x10e8 0x8043 "unknown" "Applied Micro Circuits Corp.|LANai4.x [Myrinet LANai interface chip]"
+0x10e8 0x8062 "unknown" "Applied Micro Circuits Corp.|S5933_PARASTATION"
+0x10e8 0x807d "unknown" "Applied Micro Circuits Corp.|S5933 [Matchmaker]"
+0x10e8 0x8088 "unknown" "Applied Micro Circuits Corp.|Kingsberg Spacetec Format Synchronizer"
+0x10e8 0x8089 "unknown" "Applied Micro Circuits Corp.|Kingsberg Spacetec Serial Output Board"
+0x10e8 0x809c "unknown" "Applied Micro Circuits Corp.|S5933_HEPC3"
+0x10e8 0x80d7 "unknown" "Applied Micro Circuits Corp.|PCI-9112"
+0x10e8 0x80d8 "unknown" "Applied Micro Circuits Corp.|PCI-7200"
+0x10e8 0x80d9 "unknown" "Applied Micro Circuits Corp.|PCI-9118"
+0x10e8 0x80da "unknown" "Applied Micro Circuits Corp.|PCI-9812"
+0x10e8 0x811a "unknown" "Applied Micro Circuits Corp.|PCI-IEEE1355-DS-DE Interface"
+0x10e8 0x814c "unknown" "Applied Micro Circuits Corp.|Fastcom ESCC-PCI (Commtech, Inc.)"
+0x10e8 0x8170 "unknown" "Applied Micro Circuits Corp.|S5933 Matchmaker PCI Chipset Development Tool"
+0x10e8 0x81b7 "unknown" "Applied Micro Circuits Corp.|S5933 AJAVideo NTV ITU-R.601 video stillstore"
+0x10e8 0x81db "unknown" "Applied Micro Circuits Corp.|AJA HDNTV HD SDI Framestore"
+0x10e8 0x81e6 "unknown" "Applied Micro Circuits Corp.|Multimedia video controller"
+0x10e8 0x8291 "unknown" "Applied Micro Circuits Corp.|Fastcom 232/8-PCI (Commtech, Inc.)"
+0x10e8 0x82c4 "unknown" "Applied Micro Circuits Corp.|Fastcom 422/4-PCI (Commtech, Inc.)"
+0x10e8 0x82c5 "unknown" "Applied Micro Circuits Corp.|Fastcom 422/2-PCI (Commtech, Inc.)"
+0x10e8 0x82c6 "unknown" "Applied Micro Circuits Corp.|Fastcom IG422/1-PCI (Commtech, Inc.)"
+0x10e8 0x82c7 "unknown" "Applied Micro Circuits Corp.|Fastcom IG232/2-PCI (Commtech, Inc.)"
+0x10e8 0x82ca "unknown" "Applied Micro Circuits Corp.|Fastcom 232/4-PCI (Commtech, Inc.)"
+0x10e8 0x82db "unknown" "Applied Micro Circuits Corp.|AJA HDNTV HD SDI Framestore"
+0x10e8 0x82e2 "unknown" "Applied Micro Circuits Corp.|Fastcom DIO24H-PCI (Commtech, Inc.)"
+0x10e8 0x8507 0x10e8 0x1072 "ines_gpib" ""
+0x10e8 0x8851 "unknown" "Applied Micro Circuits Corp.|S5933 on Innes Corp FM Radio Capture card"
+0x10ea 0x1680 "Card:VESA driver (generic)" "Intergraphics Systems|IGA-1680"
+0x10ea 0x1682 "Card:VESA driver (generic)" "Intergraphics Systems|IGA-1682"
+0x10ea 0x1683 "unknown" "Intergraphics Systems|IGA-1683"
+0x10ea 0x2000 "cyber2000fb" "Intergraphics Systems|CyberPro 2000"
+0x10ea 0x2010 "cyber2000fb" "Intergraphics Systems|CyberPro 2000A"
+0x10ea 0x5000 "cyber2000fb" "Intergraphics Systems|CyberPro 5000"
+0x10ea 0x5050 "trident" "Intergraphics Systems|CyberPro 5050"
+0x10ea 0x5202 "unknown" "Intergraphics Systems|CyberPro 5202"
+0x10ea 0x5252 "unknown" "Intergraphics Systems|CyberPro5252"
+0x10eb 0x0101 "unknown" "Artists Graphics|3GA"
+0x10eb 0x8111 "unknown" "Artists Graphics|Twist3 Frame Grabber"
+0x10ec 0x0139 "unknown" "Realtek Semiconductor| "
+0x10ec 0x0883 "unknown" "Realtek Semiconductor Co., Ltd.|High Definition Audio"
+0x10ec 0x8029 "ne2k-pci" "Realtek Semiconductor|RTL-8029(AS)"
+0x10ec 0x8129 "8139too" "Realtek Semiconductor|RTL-8129"
+0x10ec 0x8131 "unknown" "Realtek Semiconductor| "
+0x10ec 0x8136 "r8169" "Realtek Semiconductor Co., Ltd.|RTL8101E PCI Express Fast Ethernet controller"
+0x10ec 0x8138 "8139too" "Realtek Semiconductor|RT8139 (B/C) Cardbus Fast Ethernet Adapter"
+0x10ec 0x8139 0x0357 0x000a "8139too" "Realtek Semiconductor|TTP-Monitoring Card V2.0"
+0x10ec 0x8139 0x0e11 0x0056 "8139cp" "Realtek Semiconductor|RTL-8139"
+0x10ec 0x8139 0x1025 0x005a "8139too" "Realtek Semiconductor|TravelMate 290"
+0x10ec 0x8139 0x1025 0x8920 "8139too" "Realtek Semiconductor|ALN-325"
+0x10ec 0x8139 0x1025 0x8921 "8139too" "Realtek Semiconductor|ALN-325"
+0x10ec 0x8139 0x103c 0x006a "8139too" "Realtek Semiconductor Co., Ltd.|nx9500"
+0x10ec 0x8139 0x1043 0x8109 "8139too" "Realtek Semiconductor Co., Ltd.|P5P800-MX Mainboard"
+0x10ec 0x8139 0x1071 0x8160 "8139too" "Realtek Semiconductor|MIM2000"
+0x10ec 0x8139 0x10bd 0x0320 "8139too" "Realtek Semiconductor|EP-320X-R"
+0x10ec 0x8139 0x10ec 0x8139 "8139too" "Realtek Semiconductor|RT8139"
+0x10ec 0x8139 0x1113 0xec01 "8139too" "Realtek Semiconductor|FNC-0107TX"
+0x10ec 0x8139 0x1186 0x1300 "8139too" "Realtek Semiconductor|DFE-538TX"
+0x10ec 0x8139 0x1186 0x1320 "8139too" "Realtek Semiconductor|SN5200"
+0x10ec 0x8139 0x1186 0x8139 "8139too" "Realtek Semiconductor|DRN-32TX"
+0x10ec 0x8139 0x11f6 0x8139 "8139too" "Realtek Semiconductor|FN22-3(A) LinxPRO Ethernet Adapter"
+0x10ec 0x8139 0x1259 0x2500 "8139too" "Realtek Semiconductor|AT-2500TX"
+0x10ec 0x8139 0x1259 0x2503 "8139too" "Realtek Semiconductor|AT-2500TX/ACPI"
+0x10ec 0x8139 0x1429 0xd010 "8139too" "Realtek Semiconductor|ND010"
+0x10ec 0x8139 0x1432 0x9130 "8139too" "Realtek Semiconductor|EN-9130TX"
+0x10ec 0x8139 0x1436 0x8139 "8139too" "Realtek Semiconductor|RT8139"
+0x10ec 0x8139 0x1458 0xe000 "8139too" "Realtek Semiconductor|GA-7VM400M/7VT600 Motherboard"
+0x10ec 0x8139 0x1462 0x788c "8139too" "Realtek Semiconductor Co., Ltd.|865PE Neo2-V Mainboard"
+0x10ec 0x8139 0x146c 0x1439 "8139too" "Realtek Semiconductor|FE-1439TX"
+0x10ec 0x8139 0x1489 0x6001 "8139too" "Realtek Semiconductor|GF100TXRII"
+0x10ec 0x8139 0x1489 0x6002 "8139too" "Realtek Semiconductor|GF100TXRA"
+0x10ec 0x8139 0x149c 0x139a "8139too" "Realtek Semiconductor|LFE-8139ATX"
+0x10ec 0x8139 0x149c 0x8139 "8139too" "Realtek Semiconductor|LFE-8139TX"
+0x10ec 0x8139 0x14cb 0x0200 "8139too" "Realtek Semiconductor|LNR-100 Family 10/100 Base-TX Ethernet"
+0x10ec 0x8139 0x1695 0x9001 "8139too" "Realtek Semiconductor Co., Ltd.|Onboard RTL8101L 10/100 MBit"
+0x10ec 0x8139 0x1799 0x5000 "8139too" "Realtek Semiconductor|F5D5000 PCI Card/Desktop Network PCI Card"
+0x10ec 0x8139 0x1904 0x8139 "8139too" "Realtek Semiconductor Co., Ltd.|RTL8139D Fast Ethernet Adapter"
+0x10ec 0x8139 0x2646 0x0001 "8139too" "Realtek Semiconductor|EtheRx"
+0x10ec 0x8139 0x8e2e 0x7000 "8139too" "Realtek Semiconductor|KF-230TX"
+0x10ec 0x8139 0x8e2e 0x7100 "8139too" "Realtek Semiconductor|KF-230TX/2"
+0x10ec 0x8139 0x9001 0x1695 "8139too" "Realtek Semiconductor|Onboard RTL8101L 10/100 MBit"
+0x10ec 0x8139 0xa0a0 0x0007 "8139too" "Realtek Semiconductor|ALN-325C"
+0x10ec 0x8139 "8139too" "Realtek Semiconductor|RTL-8139"
+0x10ec 0x8167 "r8169" "Realtek Semiconductor Co., Ltd.|RTL-8169SC Gigabit Ethernet"
+0x10ec 0x8168 "r8169" "Realtek Semiconductor|RTL-8168 PCI-E Gigabit Ethernet"
+0x10ec 0x8169 "r8169" "Realtek Semiconductor|RTL-8169"
+0x10ec 0x8180 "r8180" "Realtek Semiconductor|RTL8180 Realtek RTL8180 Wireless LAN (Mini-)PCI NIC"
+0x10ec 0x8185 "r8180" "Realtek Semiconductor|RTL8185 Realtek RTL8185 Wireless LAN (Mini-)PCI NIC"
+0x10ec 0x8197 "slamr" "Realtek Semiconductor|SmartLAN56 56K Modem"
+0x10ed 0x7310 "unknown" "Ascii Corp.|V7310"
+0x10ee 0x0000 "unknown" "Xilinx Corp.|8343176 PCI to H.100 audio interface"
+0x10ee 0x0205 "unknown" "Xilinx Corporation|Wildcard TE205P"
+0x10ee 0x0210 "unknown" "Xilinx Corporation|Wildcard TE210P"
+0x10ee 0x0314 "wct4xxp" "Xilinx Corp.|Wildcard TE405P/TE410P (1st Gen)"
+0x10ee 0x0405 "unknown" "Xilinx Corporation|Wildcard TE405P (2nd Gen)"
+0x10ee 0x0410 "unknown" "Xilinx Corporation|Wildcard TE410P (2nd Gen)"
+0x10ee 0x1001 "unknown" "Xilinx Corp.|8343176 PCI to H.100 audio interface"
+0x10ee 0x3fc0 "snd-rme96" "Xilinx Corp.|RME Digi96"
+0x10ee 0x3fc1 "snd-rme96" "Xilinx Corp.|RME Digi96/8"
+0x10ee 0x3fc2 "snd-rme96" "Xilinx Corp.|RME Digi96/8 Pro"
+0x10ee 0x3fc3 "snd-rme96" "Xilinx Corp.|RME Digi96/8 Pad"
+0x10ee 0x3fc4 "rme96xx" "Xilinx Corp.|Digi9652 Hammerfall"
+0x10ee 0x3fc5 "snd-hdsp" "Xilinx Corp.|RME Hammerfall DSP"
+0x10ee 0x3fc6 "snd-hdspm" "Xilinx Corp.|RME Hammerfall DSP MADI"
+0x10ee 0x4020 "ISDN:tpam" "Xilinx Corp.| ISDN Adapter"
+0x10ee 0x5343 "unknown" "Xilinx Corp.|Seamont SC100 Security Adapter"
+0x10ee 0x8130 "unknown" "Xilinx Corp.|Durango PMC Virtex-II Bridge, XC2V1000-4FG456C"
+0x10ee 0x8381 "unknown" "Xilinx Corp.|Ellips Santos Frame Grabber"
+0x10ee 0xd154 "unknown" "Xilinx Corporation|Copley Controls CAN card (PCI-CAN-02)"
+0x10ef 0x8154 "unknown" "Racore Computer Products Inc.|M815x Token Ring Adapter"
+0x10f0 0xa800 "unknown" "Peritek Corp.|VCL-P Graphics board"
+0x10f0 0xb300 "unknown" "Peritek Corp.|VCL-M graphics board"
+0x10f1 0x1566 "unknown" "Tyan Computer|IDE/SCSI"
+0x10f1 0x1677 "unknown" "Tyan Computer|Multimedia"
+0x10f1 0x2865 "unknown" "Tyan Computer|Tyan Thunder K8E S2865"
+0x10f4 0x1300 "unknown" "S-Mos Systems|rev1.1 PCI to S5U13x06B0B Bridge Adapter"
+0x10f5 0xa001 "unknown" "NKK Corp.|NDR4000 [NR4600 Bridge]"
+0x10fa 0x0000 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0001 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0002 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0003 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0004 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0005 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0006 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0007 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0008 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0009 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x000a "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x000b "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x000c "unknown" "TrueVision|TARGA 1000"
+0x10fa 0x000d "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x000e "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x000f "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0010 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0011 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0012 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0013 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0014 "unknown" "TrueVision|GUI Accelerator"
+0x10fa 0x0015 "unknown" "TrueVision|GUI Accelerator"
+0x10fb 0x186f "unknown" "Thesys Gesellschaft für Mikroelektronik mbH|TH 6255"
+0x10fc 0x0003 "unknown" "I-O Data Device Inc.|Cardbus IDE Controller"
+0x10fc 0x0005 "nsp32" "I-O Data Device Inc.|Cardbus SCSI CBSC II"
+0x1101 0x0002 "initio" "Initio Corp.|Ultra SCSI Adapter"
+0x1101 0x1060 "a100u2w" "Initio Corp.|INI-A100U2W"
+0x1101 0x134a "initio" "Initio Corp.|Ultra SCSI Adapter"
+0x1101 0x1622 "unknown" "Initio Corporation|INI-1623 PCI SATA-II Controller"
+0x1101 0x9100 "initio" "Initio Corp.|INI-9100/9100W"
+0x1101 0x9400 "initio" "Initio Corp.|INI-940"
+0x1101 0x9401 "initio" "Initio Corp.|INI-950"
+0x1101 0x9500 "initio" "Initio Corp.|360P"
+0x1101 0x9502 "unknown" "Initio Corp.|Initio INI-9100UW Ultra Wide SCSI Controller INIC-950P chip"
+0x1101 0x9700 "initio" "Initio Corp.|Fast Wide SCSI Controller"
+0x1102 0x0002 "snd-emu10k1" "Creative Labs|SB Live! (audio)"
+0x1102 0x0003 "unknown" "Creative Labs|EMU8008 AWE64D OEM (CT4600)"
+0x1102 0x0004 "snd-emu10k1" "Creative Labs|EMU10K2 Audigy Audio Processor"
+0x1102 0x0005 "unknown" "Creative Labs|SB X-Fi"
+0x1102 0x0006 "snd-emu10k1x" "Creative Labs|SB Live! Value (EMU10k1X"
+0x1102 0x0007 "snd-ca0106" "Creative Labs|SB Audigy LS"
+0x1102 0x0008 "snd-emu10k1" "Creative Labs|SB0400 Audigy2 Value"
+0x1102 0x0101 "unknown" "Creative Labs|GeForce 256 DDR Nvida Corp. Video"
+0x1102 0x100a "unknown" "Creative Labs|SB Live! 5.1 Digital OEM [SB0220], (c) 2003"
+0x1102 0x1017 "unknown" "Creative Labs|Banshee 3D Blaster Banshee PCI CT6760"
+0x1102 0x1047 "unknown" "Creative Labs|3D Blaster Annihilator 2"
+0x1102 0x1371 "unknown" "Creative Labs| "
+0x1102 0x2898 "unknown" "Creative Labs| "
+0x1102 0x4001 "ohci1394" "Creative Labs|EMU10K2 Audigy IEEE1394 Firewire Controller"
+0x1102 0x7002 "emu10k1-gp" "Creative Labs|SB Live! (joystick)"
+0x1102 0x7003 "emu10k1-gp" "Creative Labs|EMU10K2 Audigy Gameport"
+0x1102 0x7004 "emu10k1-gp" "Creative Labs|[SB Live! Value] Input device controller"
+0x1102 0x7005 "emu10k1-gp" "Creative Labs|SB Audigy LS MIDI/Game port"
+0x1102 0x8064 "unknown" "Creative Labs|SB0100 [SBLive! 5.1 OEM]"
+0x1102 0x8938 "es1371" "Creative Labs|AudioPCI ES1371+"
+0x1103 0x0003 "hpt34x" "Triones|HPT343"
+0x1103 0x0004 "hptraid" "Triones|HPT366"
+0x1103 0x0005 "hpt366" "HighPoint Technologies Inc.|HPT370 UDMA66/100 EIDE Controller"
+0x1103 0x0006 "hpt366" "Triones|HPT302"
+0x1103 0x0007 "hpt366" "Triones|HPT371"
+0x1103 0x0008 "hpt366" "HighPoint Technologies Inc.|HPT374 UDMA/ATA133 RAID Controller"
+0x1103 0x0009 "hpt366" "Triones|HPT372N"
+0x1103 0x3220 "hptiop" ""
+0x1103 0x3320 "hptiop" ""
+0x1105 0x1105 "unknown" "Sigma Designs Inc.|REALmagic Xcard MPEG 1/2/3/4 DVD Decoder"
+0x1105 0x5000 "unknown" "Sigma Designs Inc.|Multimedia"
+0x1105 0x8300 "em8300" "Sigma Designs Inc.|REALmagic Hollywood Plus DVD Decoder"
+0x1105 0x8400 "unknown" "Sigma Designs Inc.|EM8400 MPEG-2 Decoder"
+0x1105 0x8401 "unknown" "Sigma Designs Inc.|EM8401 REALmagic DVD/MPEG-2 A/V Decoder"
+0x1105 0x8470 "unknown" "Sigma Designs Inc.|EM8470 REALmagic DVD/MPEG-4 A/V Decoder"
+0x1105 0x8471 "unknown" "Sigma Designs Inc.|EM8471 REALmagic DVD/MPEG-4 A/V Decoder"
+0x1105 0x8475 "unknown" "Sigma Designs Inc.|EM8475 MPEG-4 Decoder"
+0x1105 0x8476 "unknown" "Sigma Designs Inc.|EM8476 REALmagic DVD/MPEG-4 A/V Decoder"
+0x1105 0x8485 "unknown" "Sigma Designs Inc.|EM8485 REALmagic DVD/MPEG-4 A/V Decoder"
+0x1105 0x8486 "unknown" "Sigma Designs Inc.|EM8486 REALmagic DVD/MPEG-4 A/V Decoder"
+0x1106 0x0102 "unknown" "VIA Technologies Inc.|Embedded VIA Ethernet Controller"
+0x1106 0x0130 "unknown" "VIA Technologies Inc.|VT6305 1394.A OHCI Link Layer Controller"
+0x1106 0x0198 "via-agp" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x0204 "amd64-agp" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x0208 "unknown" "VIA Technologies, Inc.|PT890 Host Bridge"
+0x1106 0x0238 "amd64-agp" "VIA Technologies Inc.|K8T890 CPU to PCI Bridge"
+0x1106 0x0258 "via-agp" "VIA Technologies Inc.|PCI to PCI Bridge"
+0x1106 0x0259 "via-agp" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x0269 "via-agp" "VIA Technologies Inc.|KT880 CPU to PCI Bridge"
+0x1106 0x0282 "amd64-agp" "VIA Technologies Inc.|K8T880Pro CPU to PCI Bridge"
+0x1106 0x0290 "unknown" "VIA Technologies Inc.|K8M890 Host Bridge"
+0x1106 0x0293 "unknown" "VIA Technologies, Inc.|PM896 Host Bridge"
+0x1106 0x0296 "via-agp" "VIA Technologies Inc.|P4M800 Host Bridge"
+0x1106 0x0305 "via-agp" "VIA Technologies Inc.|VT8363/8365 [KT133/KM133]"
+0x1106 0x0308 "via-agp" "VIA Technologies Inc.|PT894 Host Bridge"
+0x1106 0x0314 "via-agp" "VIA Technologies Inc.|P4M800CE Host Bridge"
+0x1106 0x0324 "unknown" "VIA Technologies, Inc.|CX700 Host Bridge"
+0x1106 0x0327 "unknown" "VIA Technologies, Inc.|P4M890 Host Bridge"
+0x1106 0x0336 "unknown" "VIA Technologies, Inc.|K8M890CE Host Bridge"
+0x1106 0x0340 "unknown" "VIA Technologies, Inc.|PT900 Host Bridge"
+0x1106 0x0351 "unknown" "VIA Technologies, Inc.|VT3351 Host Bridge"
+0x1106 0x0364 "unknown" "VIA Technologies, Inc.|P4M900 Host Bridge"
+0x1106 0x0391 "via-agp" "VIA Technologies Inc.|VT8371 [KX133]"
+0x1106 0x0501 "via-agp" "VIA Technologies Inc.|VT8501"
+0x1106 0x0505 "unknown" "VIA Technologies Inc.|VT82C505"
+0x1106 0x0561 "generic" "VIA Technologies Inc.|VT82C561"
+0x1106 0x0571 "via82cxxx" "VIA Technologies Inc.|VT82C586 IDE [Apollo]"
+0x1106 0x0576 "unknown" "VIA Technologies Inc.|VT82C576 3V [Apollo Master]"
+0x1106 0x0585 "unknown" "VIA Technologies Inc.|VT82C585VP [Apollo VP1/VPX]"
+0x1106 0x0586 "unknown" "VIA Technologies Inc.|VT82C586/A/B PCI-to-ISA [Apollo VP]"
+0x1106 0x0591 "sata_via" "VIA Technologies Inc.|VT8237A SATA 2-Port Controller"
+0x1106 0x0595 "unknown" "VIA Technologies Inc.|VT82C595 [Apollo VP2]"
+0x1106 0x0596 "unknown" "VIA Technologies Inc.|VT82C596 ISA [Apollo PRO]"
+0x1106 0x0597 "via-agp" "VIA Technologies Inc.|VT82C597 [Apollo VP3]"
+0x1106 0x0598 "via-agp" "VIA Technologies Inc.|VT82C598 [Apollo MVP3]"
+0x1106 0x0601 "via-agp" "VIA Technologies Inc.|VT8601"
+0x1106 0x0605 "via-agp" "VIA Technologies Inc.|VT8605 [ProSavage PM133]"
+0x1106 0x0680 "unknown" "VIA Technologies Inc.|VT82C680 [Apollo P6]"
+0x1106 0x0686 "unknown" "VIA Technologies Inc.|VT82C686 [Apollo Super]"
+0x1106 0x0691 "via-agp" "VIA Technologies Inc.|VT82C691 [Apollo PRO]"
+0x1106 0x0692 "unknown" "VIA Technologies Inc.|North Bridge"
+0x1106 0x0693 "unknown" "VIA Technologies Inc.|VT82C693 [Apollo Pro Plus]"
+0x1106 0x0698 "unknown" "VIA Technologies Inc.|VT82C693A [Apollo Pro133 AGP]"
+0x1106 0x0926 "ne2k-pci" "VIA Technologies Inc.|VT82C926 [Amazon]"
+0x1106 0x1000 "unknown" "VIA Technologies Inc.|VT82C570MV"
+0x1106 0x1106 "unknown" "VIA Technologies Inc.|VT82C570MV"
+0x1106 0x1204 "unknown" "VIA Technologies Inc.|K8M800 Host Bridge"
+0x1106 0x1208 "unknown" "VIA Technologies Inc.|PT890 Host Bridge"
+0x1106 0x1238 "unknown" "VIA Technologies Inc.|K8T890 CPU to PCI Bridge"
+0x1106 0x1258 "unknown" "VIA Technologies Inc.|PT880 Host Bridge"
+0x1106 0x1259 "unknown" "VIA Technologies Inc.|CN400/PM880 Host Bridge"
+0x1106 0x1269 "unknown" "VIA Technologies Inc.|KT880 CPU to PCI Bridge"
+0x1106 0x1282 "unknown" "VIA Technologies Inc.|K8T880Pro CPU to PCI Bridge"
+0x1106 0x1290 "unknown" "VIA Technologies Inc.|K8M890 Host Bridge"
+0x1106 0x1293 "unknown" "VIA Technologies, Inc.|PM896 Host Bridge"
+0x1106 0x1296 "unknown" "VIA Technologies Inc.|P4M800 Host Bridge"
+0x1106 0x1308 "unknown" "VIA Technologies Inc.|PT894 Host Bridge"
+0x1106 0x1314 "unknown" "VIA Technologies Inc.|P4M800CE Host Bridge"
+0x1106 0x1324 "unknown" "VIA Technologies, Inc.|CX700 Host Bridge"
+0x1106 0x1327 "unknown" "VIA Technologies, Inc.|P4M890 Host Bridge"
+0x1106 0x1336 "unknown" "VIA Technologies, Inc.|K8M890CE Host Bridge"
+0x1106 0x1340 "unknown" "VIA Technologies, Inc.|PT900 Host Bridge"
+0x1106 0x1351 "unknown" "VIA Technologies, Inc.|VT3351 Host Bridge"
+0x1106 0x1364 "unknown" "VIA Technologies, Inc.|P4M900 Host Bridge"
+0x1106 0x1571 "via82cxxx" "VIA Technologies Inc.|VT82C416MV"
+0x1106 0x1595 "unknown" "VIA Technologies Inc.|VT82C595/97 [Apollo VP2/97]"
+0x1106 0x2204 "unknown" "VIA Technologies Inc.|K8M800 Host Bridge"
+0x1106 0x2208 "unknown" "VIA Technologies Inc.|PT890 Host Bridge"
+0x1106 0x2238 "unknown" "VIA Technologies Inc.|K8T890 CPU to PCI Bridge"
+0x1106 0x2258 "unknown" "VIA Technologies Inc.|PT880 Host Bridge"
+0x1106 0x2259 "unknown" "VIA Technologies Inc.|CN400/PM880 Host Bridge"
+0x1106 0x2269 "unknown" "VIA Technologies Inc.|KT880 CPU to PCI Bridge"
+0x1106 0x2282 "unknown" "VIA Technologies Inc.|K8T880Pro CPU to PCI Bridge"
+0x1106 0x2290 "unknown" "VIA Technologies Inc.|K8M890 Host Bridge"
+0x1106 0x2293 "unknown" "VIA Technologies, Inc.|PM896 Host Bridge"
+0x1106 0x2296 "unknown" "VIA Technologies Inc.|P4M800 Host Bridge"
+0x1106 0x2308 "unknown" "VIA Technologies Inc.|PT894 Host Bridge"
+0x1106 0x2314 "unknown" "VIA Technologies Inc.|P4M800CE Host Bridge"
+0x1106 0x2324 "unknown" "VIA Technologies, Inc.|CX700 Host Bridge"
+0x1106 0x2327 "unknown" "VIA Technologies, Inc.|P4M890 Host Bridge"
+0x1106 0x2336 "unknown" "VIA Technologies, Inc.|K8M890CE Host Bridge"
+0x1106 0x2340 "unknown" "VIA Technologies, Inc.|PT900 Host Bridge"
+0x1106 0x2351 "unknown" "VIA Technologies, Inc.|VT3351 Host Bridge"
+0x1106 0x2364 "unknown" "VIA Technologies, Inc.|P4M900 Host Bridge"
+0x1106 0x287a "unknown" "VIA Technologies Inc.|VT8251 PCI to PCI Bridge"
+0x1106 0x287b "unknown" "VIA Technologies Inc.|VT8251 PCI to PCIE Bridge"
+0x1106 0x287c "unknown" "VIA Technologies Inc.|VT8251 PCIE Root Port"
+0x1106 0x287d "unknown" "VIA Technologies Inc.|VT8251 PCIE Root Port"
+0x1106 0x287e "unknown" "VIA Technologies Inc.|VT8251 Ultra VLINK Controller"
+0x1106 0x3022 "Card:S3 UniChrome" "VIA Technologies Inc.|CLE266"
+0x1106 0x3038 "uhci-hcd" "VIA Technologies Inc.|VT82C586B USB"
+0x1106 0x3040 "i2c-via" "VIA Technologies Inc.|VT82C586B ACPI"
+0x1106 0x3043 "via-rhine" "VIA Technologies Inc.|VT86C100A [Rhine 10/100]"
+0x1106 0x3044 "ohci1394" "VIA Technologies Inc.|OHCI Compliant IEEE 1394 Host Controller"
+0x1106 0x3050 "i2c-viapro" "VIA Technologies Inc.|Power Management Controller"
+0x1106 0x3051 "i2c-viapro" "VIA Technologies Inc.|Power Management Controller"
+0x1106 0x3053 "via-rhine" "VIA Technologies Inc.|VT6105M [Rhine III 10/100]"
+0x1106 0x3057 "i2c-viapro" "VIA Technologies Inc.|VT82C686 [Apollo Super ACPI]"
+0x1106 0x3058 "snd-via82xx" "VIA Technologies Inc.|VT82C686 [Apollo Super AC97/Audio]"
+0x1106 0x3059 0x1019 0x0a81 "snd-via82xx" "VIA Technologies Inc.|L7VTA v1.0 Motherboard (KT400-8235)"
+0x1106 0x3059 0x1043 0x8095 "snd-via82xx" "VIA Technologies Inc.|A7V8X Motherboard (Realtek ALC650 codec)"
+0x1106 0x3059 0x1043 0x80a1 "snd-via82xx" "VIA Technologies Inc.|A7V8X-X Motherboard"
+0x1106 0x3059 0x1043 0x80b0 "snd-via82xx" "VIA Technologies Inc.|A7V600 motherboard (ADI AD1980 codec [SoundMAX])"
+0x1106 0x3059 0x1043 0x812a "snd-via82xx" "VIA Technologies, Inc.|A8V Deluxe motherboard (Realtek ALC850 codec)"
+0x1106 0x3059 0x1106 0x3059 "snd-via82xx" "VIA Technologies Inc.|L7VMM2 Motherboard"
+0x1106 0x3059 0x1106 0x4161 "snd-via82xx" "VIA Technologies Inc.|K7VT2 motherboard"
+0x1106 0x3059 0x1106 0x4170 "snd-via82xx" "VIA Technologies, Inc.|PCPartner P4M800-8237R Motherboard"
+0x1106 0x3059 0x1106 0x4552 "snd-via82xx" "VIA Technologies, Inc.|Soyo KT-600 Dragon Plus (Realtek ALC 650)"
+0x1106 0x3059 0x1297 0xc160 "snd-via82xx" "VIA Technologies Inc.|FX41 motherboard (Realtek ALC650 codec)"
+0x1106 0x3059 0x1458 0xa002 "snd-via82xx" "VIA Technologies Inc.|GA-7VAX Onboard Audio (Realtek ALC650)"
+0x1106 0x3059 0x1462 0x0080 "snd-via82xx" "VIA Technologies Inc.|K8T NEO 2 motherboard"
+0x1106 0x3059 0x1462 0x3800 "snd-via82xx" "VIA Technologies Inc.|KT266 onboard audio"
+0x1106 0x3059 0x1462 0x5901 "via82cxxx_audio" "VIA Technologies Inc.|VT8233 [AC97 Audio Controller]"
+0x1106 0x3059 0x147b 0x1407 "snd-via82xx" "VIA Technologies Inc.|KV8-MAX3 motherboard"
+0x1106 0x3059 0x1849 0x9761 "snd-via82xx" "VIA Technologies Inc.|K7VT4 motherboard"
+0x1106 0x3059 0x4005 0x4710 "snd-via82xx" "VIA Technologies Inc.|MSI K7T266 Pro2-RU (MSI-6380 v2) onboard audio (Realtek/ALC 200/200P)"
+0x1106 0x3059 0x4170 0x1106 "snd-via82xx" "VIA Technologies, Inc.|PCPartner P4M800-8237R Motherboard"
+0x1106 0x3059 0x4552 0x1106 "snd-via82xx" "VIA Technologies, Inc.|Soyo KT-600 Dragon Plus (Realtek ALC 650)"
+0x1106 0x3059 0xa0a0 0x01b6 "snd-via82xx" "VIA Technologies Inc.|AK77-8XN onboard audio"
+0x1106 0x3059 "snd-via82xx" "VIA Technologies Inc.|VT8233 [AC97 Audio Controller]"
+0x1106 0x3065 "via-rhine" "VIA Technologies Inc.|VT6102 [Rhine II 10/100]"
+0x1106 0x3068 "slamr" "VIA Technologies Inc.|VT82C686 [Apollo Super AC97/Modem]"
+0x1106 0x3074 "via-ircc" "VIA Technologies Inc.|VT8233 PCI to ISA Bridge"
+0x1106 0x3086 "unknown" "VIA Technologies Inc.|VT82C686 Power management"
+0x1106 0x3091 "via-agp" "VIA Technologies Inc.|VT8633 [Apollo Pro266]"
+0x1106 0x3099 "via-agp" "VIA Technologies Inc.|VT8367 [KT266]"
+0x1106 0x3101 "via-agp" "VIA Technologies Inc.|VT8653 CPU to PCI Bridge"
+0x1106 0x3102 "unknown" "VIA Technologies Inc.|VT8662 CPU to PCI Bridge"
+0x1106 0x3103 "unknown" "VIA Technologies Inc.|VT8615 CPU to PCI Bridge"
+0x1106 0x3104 "ehci-hcd" "VIA Technologies Inc.|VT8235 USB Enhanced Controller"
+0x1106 0x3106 "via-rhine" "VIA Technologies Inc.|VT6105 [Rhine III 10/100]"
+0x1106 0x3108 "Card:OpenChrome" "VIA Technologies Inc.|S3 Unichrome Pro VGA Adapter"
+0x1106 0x3109 "via-ircc" "VIA Technologies Inc.|VT8233C PCI to ISA Bridge"
+0x1106 0x3112 "via-agp" "VIA Technologies Inc.|VT8361 CPU to PCI Bridge"
+0x1106 0x3113 "unknown" "VIA Technologies Inc.|PCI to PCI Bridge"
+0x1106 0x3116 "via-agp" "VIA Technologies Inc.|CPU-to-PCI Bridge"
+0x1106 0x3118 "Card:OpenChrome" "VIA Technologies Inc.|S3 Unichrome Pro VGA Adapter"
+0x1106 0x3119 "via-velocity" "VIA Technologies Inc.|VT3119 Gigabit Ethernet Controller"
+0x1106 0x3122 "Card:OpenChrome" "VIA Technologies Inc.|VT8623 [Apollo CLE266] integrated CastleRock graphics"
+0x1106 0x3123 "via-agp" "VIA Technologies Inc.|VT8623 CPU to PCI Bridge"
+0x1106 0x3128 "via-agp" "VIA Technologies Inc.|P4X266A CPU-to-PCI Bridge"
+0x1106 0x3133 "unknown" "VIA Technologies Inc.|VT3133 CPU to PCI Bridge"
+0x1106 0x3147 "via-ircc" "VIA Technologies Inc.|VT8233 PCI to ISA Bridge"
+0x1106 0x3148 "via-agp" "VIA Technologies Inc.|CPU-to-PCI Bridge"
+0x1106 0x3149 "sata_via" "VIA Technologies Inc.|VT6420 SATA RAID Controller"
+0x1106 0x3156 "via-agp" "VIA Technologies Inc.|P/KN266 CPU to PCI Bridge"
+0x1106 0x3158 "unknown" "VIA Technologies Inc.|CPU-to-PCI Bridge"
+0x1106 0x3164 "via82cxxx" "VIA Technologies Inc.|VT6410 ATA133 RAID Controller"
+0x1106 0x3168 "via-agp" "VIA Technologies Inc.|VT8374 P4X400 Host Controller/AGP Bridge"
+0x1106 0x3177 "via-ircc" "VIA Technologies Inc.|VT8233A PCI to ISA Bridge"
+0x1106 0x3178 "unknown" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x3188 "amd64-agp" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x3189 "via-agp" "VIA Technologies Inc.|VT8377 CPU to PCI Bridge"
+0x1106 0x3198 "unknown" "VIA Technologies Inc.|CPU-to-PCI Bridge"
+0x1106 0x3202 "unknown" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x3204 "unknown" "VIA Technologies Inc.|K8M800 Bridge"
+0x1106 0x3205 "via-agp" "VIA Technologies Inc.|KM400 Bridge"
+0x1106 0x3208 "via-agp" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x3209 "unknown" "VIA Technologies Inc.|CPU to PCI Bridge"
+0x1106 0x3213 "unknown" "VIA Technologies Inc.|PCI to PCI Bridge"
+0x1106 0x3218 "unknown" "VIA Technologies Inc.|K8T800M Host Bridge"
+0x1106 0x3227 "i2c-viapro" "VIA Technologies Inc.|VT8237 PCI-to-ISA Bridge"
+0x1106 0x3238 "unknown" "VIA Technologies Inc.|K8T890 CPU-to-PCI Bridge"
+0x1106 0x3249 "sata_via" "VIA Technologies Inc.|VT6421 SATA Controller"
+0x1106 0x324a "unknown" "VIA Technologies, Inc.|CX700 PCI to PCI Bridge"
+0x1106 0x324b "unknown" "VIA Technologies, Inc.|CX700 Host Bridge"
+0x1106 0x324e "unknown" "VIA Technologies, Inc.|CX700 Internal Module Bus"
+0x1106 0x3258 "via-agp" "VIA Technologies Inc.|PCI to PCI Bridge"
+0x1106 0x3259 "unknown" "VIA Technologies Inc.|??? CPU to PCI Bridge"
+0x1106 0x3269 "unknown" "VIA Technologies Inc.|KT880 CPU to PCI Bridge"
+0x1106 0x3282 "unknown" "VIA Technologies Inc.|K8T880Pro CPU to PCI Bridge"
+0x1106 0x3287 "unknown" "VIA Technologies, Inc.|VT8251 PCI to ISA Bridge"
+0x1106 0x3288 "snd-hda-intel" "VIA Technologies Inc.|VIA High Definition Audio Controller"
+0x1106 0x3290 "unknown" "VIA Technologies Inc.|K8M890 Host Bridge"
+0x1106 0x3296 "unknown" "VIA Technologies Inc.|P4M800 Host Bridge"
+0x1106 0x3324 "unknown" "VIA Technologies, Inc.|CX700 Host Bridge"
+0x1106 0x3327 "unknown" "VIA Technologies, Inc.|P4M890 Host Bridge"
+0x1106 0x3336 "unknown" "VIA Technologies, Inc.|K8M890CE Host Bridge"
+0x1106 0x3337 "unknown" "VIA Technologies Inc.|VT8237A PCI to ISA Bridge"
+0x1106 0x3340 "unknown" "VIA Technologies, Inc.|PT900 Host Bridge"
+0x1106 0x3344 "Card:OpenChrome" "VIA Technologies, Inc.|UniChrome Pro IGP"
+0x1106 0x3349 "ahci" "VIA Technologies Inc.|VT8251 AHCI/SATA 4-Port Controller"
+0x1106 0x3351 "unknown" "VIA Technologies, Inc.|VT3351 Host Bridge"
+0x1106 0x3364 "unknown" "VIA Technologies, Inc.|P4M900 Host Bridge"
+0x1106 0x337a "unknown" "VIA Technologies Inc.|VT8237A PCI to PCI Bridge"
+0x1106 0x337b "unknown" "VIA Technologies Inc.|VT8237A PCI to PCIE Bridge"
+0x1106 0x4149 "unknown" "VIA Technologies Inc.|VIA VT6420 (ATA133) Controller"
+0x1106 0x4204 "unknown" "VIA Technologies Inc.|??? CPU to PCI Bridge"
+0x1106 0x4208 "unknown" "VIA Technologies Inc.|PT890 Host Bridge"
+0x1106 0x4238 "unknown" "VIA Technologies Inc.|??? CPU to PCI Bridge"
+0x1106 0x4258 "unknown" "VIA Technologies Inc.|??? CPU to PCI Bridge"
+0x1106 0x4259 "unknown" "VIA Technologies Inc.|??? CPU to PCI Bridge"
+0x1106 0x4269 "unknown" "VIA Technologies Inc.|KT880 CPU to PCI Bridge"
+0x1106 0x4282 "unknown" "VIA Technologies Inc.|K8T880Pro CPU to PCI Bridge"
+0x1106 0x4290 "unknown" "VIA Technologies Inc.|K8M890 Host Bridge"
+0x1106 0x4293 "unknown" "VIA Technologies, Inc.|PM896 Host Bridge"
+0x1106 0x4296 "unknown" "VIA Technologies Inc.|P4M800 Host Bridge"
+0x1106 0x4308 "unknown" "VIA Technologies Inc.|PT894 Host Bridge"
+0x1106 0x4314 "unknown" "VIA Technologies Inc.|P4M800CE Host Bridge"
+0x1106 0x4324 "unknown" "VIA Technologies, Inc.|CX700 Host Bridge"
+0x1106 0x4327 "unknown" "VIA Technologies, Inc.|P4M890 Host Bridge"
+0x1106 0x4336 "unknown" "VIA Technologies, Inc.|K8M890CE Host Bridge"
+0x1106 0x4340 "unknown" "VIA Technologies, Inc.|PT900 Host Bridge"
+0x1106 0x4351 "unknown" "VIA Technologies, Inc.|VT3351 Host Bridge"
+0x1106 0x4364 "unknown" "VIA Technologies, Inc.|P4M900 Host Bridge"
+0x1106 0x4511 "via82cxxx_audio" "VIA Technologies Inc.|AC97 Audio"
+0x1106 0x5030 "unknown" "VIA Technologies Inc.|VT82C596 ACPI [Apollo PRO]"
+0x1106 0x5208 "unknown" "VIA Technologies Inc.|PT890 I/O APIC Interrupt Controller"
+0x1106 0x5238 "unknown" "VIA Technologies Inc.|K8T890 I/O APIC Interrupt Controller"
+0x1106 0x5290 "unknown" "VIA Technologies Inc.|K8M890 I/O APIC Interrupt Controller"
+0x1106 0x5308 "unknown" "VIA Technologies Inc.|PT894 I/O APIC Interrupt Controller"
+0x1106 0x5327 "unknown" "VIA Technologies, Inc.|P4M890 I/O APIC Interrupt Controller"
+0x1106 0x5336 "unknown" "VIA Technologies, Inc.|K8M890CE I/O APIC Interrupt Controller"
+0x1106 0x5340 "unknown" "VIA Technologies, Inc.|PT900 I/O APIC Interrupt Controller"
+0x1106 0x5351 "unknown" "VIA Technologies, Inc.|VT3351 I/O APIC Interrupt Controller"
+0x1106 0x5364 "unknown" "VIA Technologies, Inc.|P4M900 I/O APIC Interrupt Controller"
+0x1106 0x6100 "via-rhine" "VIA Technologies Inc.|VT85C100A [Rhine II]"
+0x1106 0x6327 "unknown" "VIA Technologies, Inc.|P4M890 Security Device"
+0x1106 0x7204 "unknown" "VIA Technologies Inc.|K8M800 Bridge"
+0x1106 0x7205 "Card:OpenChrome" "VIA Technologies Inc.|KM400 Graphics Adapter"
+0x1106 0x7208 "unknown" "VIA Technologies Inc.|PT890 Host Bridge"
+0x1106 0x7238 "unknown" "VIA Technologies Inc.|K8T890 CPU to PCI Bridge"
+0x1106 0x7258 "unknown" "VIA Technologies Inc.|PT880 CPU to PCI Bridge"
+0x1106 0x7259 "unknown" "VIA Technologies Inc.|PM880 CPU to PCI Bridge"
+0x1106 0x7269 "unknown" "VIA Technologies Inc.|KT880 CPU to PCI Bridge"
+0x1106 0x7282 "unknown" "VIA Technologies Inc.|K8T880Pro CPU to PCI Bridge"
+0x1106 0x7290 "unknown" "VIA Technologies Inc.|K8M890 Host Bridge"
+0x1106 0x7293 "unknown" "VIA Technologies, Inc.|PM896 Host Bridge"
+0x1106 0x7296 "unknown" "VIA Technologies Inc.|P4M800 Host Bridge"
+0x1106 0x7308 "unknown" "VIA Technologies Inc.|PT894 Host Bridge"
+0x1106 0x7314 "unknown" "VIA Technologies Inc.|P4M800CE Host Bridge"
+0x1106 0x7324 "unknown" "VIA Technologies, Inc.|CX700 Host Bridge"
+0x1106 0x7327 "unknown" "VIA Technologies, Inc.|P4M890 Host Bridge"
+0x1106 0x7336 "unknown" "VIA Technologies, Inc.|K8M890CE Host Bridge"
+0x1106 0x7340 "unknown" "VIA Technologies, Inc.|PT900 Host Bridge"
+0x1106 0x7351 "unknown" "VIA Technologies, Inc.|VT3351 Host Bridge"
+0x1106 0x7364 "unknown" "VIA Technologies, Inc.|P4M900 Host Bridge"
+0x1106 0x8208 "unknown" "VIA Technologies Inc.|K8T890 PCI to AGP Bridge"
+0x1106 0x8231 "via-ircc" "VIA Technologies Inc.|VT8231 [PCI-to-ISA Bridge]"
+0x1106 0x8235 "i2c-viapro" "VIA Technologies Inc.|VT8235 Power Management"
+0x1106 0x8305 "agpgart" "VIA Technologies Inc.|VT8363/8365 [KT133/KM133 AGP]"
+0x1106 0x8324 "unknown" "VIA Technologies, Inc.|CX700 PCI to ISA Bridge"
+0x1106 0x8391 "unknown" "VIA Technologies Inc.|VT8371 [PCI-PCI Bridge]"
+0x1106 0x8501 "unknown" "VIA Technologies Inc.|VT8501"
+0x1106 0x8596 "unknown" "VIA Technologies Inc.|VT82C596 [Apollo PRO AGP]"
+0x1106 0x8597 "unknown" "VIA Technologies Inc.|VT82C597 [Apollo VP3 AGP]"
+0x1106 0x8598 "unknown" "VIA Technologies Inc.|VT82C598 [Apollo MVP3 AGP]"
+0x1106 0x8601 "unknown" "VIA Technologies Inc.|VT8601"
+0x1106 0x8602 "unknown" "VIA Technologies Inc.|CPU to AGP Bridge"
+0x1106 0x8605 "unknown" "VIA Technologies Inc.|VT8605 [PM133 AGP]"
+0x1106 0x8691 "unknown" "VIA Technologies Inc.|VT82C691 [Apollo Pro]"
+0x1106 0x8693 "unknown" "VIA Technologies Inc.|VT82C693 Apollo Pro+ PCI-to-PCI Bridge"
+0x1106 0x9238 "unknown" "VIA Technologies Inc.|K8T890 I/O APIC"
+0x1106 0x9398 "unknown" "VIA Technologies Inc.|VT8601 2D/3D Graphics Accelerator"
+0x1106 0xa208 "unknown" "VIA Technologies Inc.|PT890 PCI-to-PCI Bridge"
+0x1106 0xa238 "unknown" "VIA Technologies Inc.|K8T890 PCI-to-PCI Bridge"
+0x1106 0xa327 "unknown" "VIA Technologies, Inc.|P4M890 PCI to PCI Bridge Controller"
+0x1106 0xa364 "unknown" "VIA Technologies, Inc.|P4M900 PCI to PCI Bridge Controller"
+0x1106 0xb091 "unknown" "VIA Technologies Inc.|VT8633 [Apollo Pro266 AGP]"
+0x1106 0xb099 "unknown" "VIA Technologies Inc.|VT8367 [KT266 AGP]"
+0x1106 0xb101 "unknown" "VIA Technologies Inc.|VT8653 CPU to AGP Controller"
+0x1106 0xb102 "unknown" "VIA Technologies Inc.|VT8362 CPU to AGP Controller"
+0x1106 0xb103 "unknown" "VIA Technologies Inc.|VT8615 CPU to AGP Controller"
+0x1106 0xb112 "via-agp" "VIA Technologies Inc.|VT8361 CPU to AGP Controller"
+0x1106 0xb113 "unknown" "VIA Technologies Inc.|I/O APIC"
+0x1106 0xb115 "unknown" "VIA Technologies Inc.|CPU to AGP Controller"
+0x1106 0xb116 "unknown" "VIA Technologies Inc.|PCI-to-PCI Bridge (AGP)"
+0x1106 0xb133 "unknown" "VIA Technologies Inc.|CPU to AGP Controller"
+0x1106 0xb148 "unknown" "VIA Technologies Inc.|PCI-to-PCI Bridge (AGP)"
+0x1106 0xb156 "unknown" "VIA Technologies Inc.|PCI-to-PCI Bridge (AGP)"
+0x1106 0xb158 "unknown" "VIA Technologies Inc.|PCI-to-PCI Bridge (AGP)"
+0x1106 0xb168 "unknown" "VIA Technologies Inc.|PCI-to-PCI Bridge (AGP)"
+0x1106 0xb188 "amd64-agp" "VIA Technologies Inc.|PCI-to-PCI Bridge (AGP 2.0/3.0)"
+0x1106 0xb198 "via-agp" "VIA Technologies Inc.|PCI-to-PCI Bridge (AGP 2.0/3.0)"
+0x1106 0xb213 "unknown" "VIA Technologies Inc.|I/O APIC"
+0x1106 0xb999 "unknown" "VIA Technologies, Inc.|[K8T890 North / VT8237 South] PCI Bridge"
+0x1106 0xc208 "unknown" "VIA Technologies Inc.|PT890 PCI-to-PCI Bridge"
+0x1106 0xc238 "unknown" "VIA Technologies Inc.|K8T890 PCI-to-PCI Bridge"
+0x1106 0xc327 "unknown" "VIA Technologies, Inc.|P4M890 PCI to PCI Bridge Controller"
+0x1106 0xc340 "unknown" "VIA Technologies, Inc.|PT900 PCI to PCI Bridge Controller"
+0x1106 0xc364 "unknown" "VIA Technologies, Inc.|P4M900 PCI to PCI Bridge Controller"
+0x1106 0xd104 "unknown" "VIA Technologies Inc.|VT8237 Integrated Fast Ethernet Controller"
+0x1106 0xd208 "unknown" "VIA Technologies Inc.|PT890 PCI-to-PCI Bridge"
+0x1106 0xd213 "unknown" "VIA Technologies Inc.|PCI to PCI Bridge"
+0x1106 0xd238 "unknown" "VIA Technologies Inc.|K8T890 PCI-to-PCI Bridge"
+0x1106 0xd340 "unknown" "VIA Technologies, Inc.|PT900 PCI to PCI Bridge Controller"
+0x1106 0xe208 "unknown" "VIA Technologies Inc.|PT890 PCI-to-PCI Bridge"
+0x1106 0xe238 "unknown" "VIA Technologies Inc.|K8T890 PCI-to-PCI Bridge"
+0x1106 0xe340 "unknown" "VIA Technologies, Inc.|PT900 PCI to PCI Bridge Controller"
+0x1106 0xf208 "unknown" "VIA Technologies Inc.|PT890 PCI-to-PCI Bridge"
+0x1106 0xf238 "unknown" "VIA Technologies Inc.|K8T890 PCI-to-PCI Bridge"
+0x1106 0xf340 "unknown" "VIA Technologies, Inc.|PT900 PCI to PCI Bridge Controller"
+0x1107 0x0576 "unknown" "Stratus Computers|VIA VT82C570MV [Apollo] (Wrong vendor ID!)"
+0x1107 0x8576 "unknown" "Stratus Computer|PCI Host Bridge"
+0x1108 0x0100 "unknown" "Proteon Inc.|p1690plus_AA"
+0x1108 0x0101 "unknown" "Proteon Inc.|p1690plus_AB"
+0x1108 0x0105 "unknown" "Proteon Inc.|P1690Plus"
+0x1108 0x0108 "unknown" "Proteon Inc.|P1690Plus"
+0x1108 0x0138 "unknown" "Proteon Inc.|P1690Plus"
+0x1108 0x0139 "unknown" "Proteon Inc.|P1690Plus"
+0x1108 0x013c "unknown" "Proteon Inc.|P1690Plus"
+0x1108 0x013d "unknown" "Proteon Inc.|P1690Plus"
+0x1109 0x1400 "unknown" "Cogent Data|EM110TX [EX110TX]"
+0x110a 0x0002 "unknown" "Siemens Nixdorf AG|Pirahna 2-port"
+0x110a 0x0005 "unknown" "Siemens Nixdorf AG|Tulip controller, power management, switch extender"
+0x110a 0x0006 "unknown" "Infineon Technologies|PINC"
+0x110a 0x0015 "unknown" "Infineon Technologies|Multiprocessor Interrupt Ctrlr (MINT)"
+0x110a 0x0017 "unknown" "Infineon Technologies|PCI-WAN Adapter (SiemensCard PWAN)"
+0x110a 0x001d "unknown" "Infineon Technologies|Copernicus Management Controller"
+0x110a 0x007b "unknown" "Siemens Nixdorf AG|FSC Remote Service Controller, mailbox device"
+0x110a 0x007c "unknown" "Siemens Nixdorf AG|FSC Remote Service Controller, shared memory device"
+0x110a 0x007d "unknown" "Siemens Nixdorf AG|FSC Remote Service Controller, SMIC device"
+0x110a 0x113c "unknown" "Infineon Technologies|FPGA-CPTR Hardware Tracer for CP113C / CP113D"
+0x110a 0x113e "unknown" "Infineon Technologies|FPGA-CPTRE Hardware Tracer for CP113E"
+0x110a 0x2101 "unknown" "Infineon Technologies|PEB 20321 MUNICH32X Multichannel NIC for HDLC"
+0x110a 0x2102 "dscc4" "Siemens Nixdorf AG|DSCC4 WAN adapter"
+0x110a 0x2103 "unknown" "Infineon Technologies|PEB 20324 MUNICH128X NIC for HDLC + extensions"
+0x110a 0x2104 "unknown" "Infineon Technologies|PSB 4600/4610 PCI I/F for Telephony/Data Apps (PITA)"
+0x110a 0x2106 "unknown" "Infineon Technologies|PEB 20256 E MUNICH256 (NIC HDLC/PPP w/256 channels)"
+0x110a 0x2108 "unknown" "Infineon Technologies|PEB 20256M E MUNICH256FM Multichnl NIC for HDLC/PPP"
+0x110a 0x3142 "unknown" "Siemens Nixdorf AG|SIMATIC NET CP 5613A1 (Profibus Adapter)"
+0x110a 0x3160 "unknown" "Infineon Technologies|MCCA Pentium-PCI Host Bridge Core ASIC"
+0x110a 0x4021 "unknown" "Siemens Nixdorf AG|SIMATIC NET CP 5512 (Profibus and MPI Cardbus Adapter)"
+0x110a 0x4029 "unknown" "Siemens Nixdorf AG|SIMATIC NET CP 5613A2 (Profibus Adapter)"
+0x110a 0x4942 "unknown" "Siemens Nixdorf AG|FPGA I-Bus Tracer for MBD"
+0x110a 0x6120 "unknown" "Siemens Nixdorf AG|SZB6120"
+0x110b 0x0001 "unknown" "Chromatic Research Inc.|Mpact Media Processor"
+0x110b 0x0002 "unknown" "Chromatic Research Inc.|GM90C7110VX MPACT DVD decoder."
+0x110b 0x0004 "unknown" "Chromatic Research Inc.|Mpact 2"
+0x1110 0x6037 "unknown" "Powerhouse Systems|Firepower Powerized SMP I/O ASIC"
+0x1110 0x6073 "unknown" "Powerhouse Systems|Firepower Powerized SMP I/O ASIC"
+0x1112 0x0000 "unknown" "Osicom Technologies Inc.|2340 4 Port 10/100 UTP Fast Ethernet Adapter"
+0x1112 0x2200 "unknown" "RNS - Div. of Meret Communications Inc.|FDDI Adapter"
+0x1112 0x2300 "unknown" "Rockwell International|Fast Ethernet Adapter"
+0x1112 0x2340 "unknown" "RNS - Div. of Meret Communications Inc.|4 Port Fast Ethernet Adapter"
+0x1112 0x2400 "unknown" "RNS - Div. of Meret Communications Inc.|ATM Adapter"
+0x1113 0x1211 "8139too" "Accton Technology Corp.|SMC2-1211TX"
+0x1113 0x1216 "tulip" "Accton Technology Corp.|Ethernet Adapter"
+0x1113 0x1217 "tulip" "Accton Technology Corp.|EN-1217 Ethernet Adapter"
+0x1113 0x5105 "unknown" "Accton Technology Corp.|10Mbps Network card"
+0x1113 0x9211 "unknown" "Accton Technology Corp.|EN-1207D Fast Ethernet Adapter"
+0x1113 0x9511 "tulip" "Accton Technology Corp.| Ethernet Adapter"
+0x1113 0xd301 "unknown" "Accton Technology Corp.|CPWNA100 (Philips wireless PCMCIA)"
+0x1113 0xec02 "unknown" "Accton Technology Corp.|SMC 1244TX v3"
+0x1114 0x0506 "atmel_pci" "Atmel Corp.|802.11b Wireless Network Adaptor (at76c506)"
+0x1116 0x0022 "unknown" "Data Translation|DT3001"
+0x1116 0x0023 "unknown" "Data Translation|DT3002"
+0x1116 0x0024 "unknown" "Data Translation|DT3003"
+0x1116 0x0025 "unknown" "Data Translation|DT3004"
+0x1116 0x0026 "unknown" "Data Translation|DT3005"
+0x1116 0x0027 "unknown" "Data Translation|DT3001-PGL"
+0x1116 0x0028 "unknown" "Data Translation|DT3003-PGL"
+0x1117 0x153b "bttv" "Terratec|TValue"
+0x1117 0x9500 "unknown" "Datacube Inc.|Max-1C SVGA card"
+0x1117 0x9501 "unknown" "Datacube Inc.|Max-1C image processing"
+0x1118 0x153b "bttv" "Terratec|TValue"
+0x1119 0x0000 "gdth" "ICP Vortex|GDT 6000/6020/6050"
+0x1119 0x0001 "gdth" "ICP Vortex|GDT 6000b/6010"
+0x1119 0x0002 "gdth" "ICP Vortex|GDT 6110/6510"
+0x1119 0x0003 "gdth" "ICP Vortex|GDT 6120/6520"
+0x1119 0x0004 "gdth" "ICP Vortex|GDT 6530"
+0x1119 0x0005 "gdth" "ICP Vortex|GDT 6550"
+0x1119 0x0006 "gdth" "ICP Vortex|GDT 6x17"
+0x1119 0x0007 "gdth" "ICP Vortex|GDT 6x27"
+0x1119 0x0008 "gdth" "ICP Vortex|GDT 6537"
+0x1119 0x0009 "gdth" "ICP Vortex|GDT 5557"
+0x1119 0x000a "gdth" "ICP Vortex|GDT 6x15"
+0x1119 0x000b "gdth" "ICP Vortex|GDT 6x25"
+0x1119 0x000c "gdth" "ICP Vortex|GDT 6535"
+0x1119 0x000d "gdth" "ICP Vortex|GDT 6555"
+0x1119 0x0010 "gdth" "ICP Vortex|GDT 6115/6515"
+0x1119 0x0011 "gdth" "ICP Vortex|GDT 6125/6525"
+0x1119 0x0012 "gdth" "ICP Vortex|GDT 6535"
+0x1119 0x0013 "gdth" "ICP Vortex|GDT 6555/6555-ECC"
+0x1119 0x0100 "gdth" "ICP Vortex|GDT 6117RP/6517RP"
+0x1119 0x0101 "gdth" "ICP Vortex|GDT 6127RP/6527RP"
+0x1119 0x0102 "gdth" "ICP Vortex|GDT 6537RP"
+0x1119 0x0103 "gdth" "ICP Vortex|GDT 6557RP"
+0x1119 0x0104 "gdth" "ICP Vortex|GDT 6111RP/6511RP"
+0x1119 0x0105 "gdth" "ICP Vortex|GDT 6121RP/6521RP"
+0x1119 0x0110 "gdth" "ICP Vortex|GDT 6117RP1/6517RP1"
+0x1119 0x0111 "gdth" "ICP Vortex|GDT 6127RP1/6527RP1"
+0x1119 0x0112 "gdth" "ICP Vortex|GDT 6537RP1"
+0x1119 0x0113 "gdth" "ICP Vortex|GDT 6557RP1"
+0x1119 0x0114 "gdth" "ICP Vortex|GDT 6111RP1/6511RP1"
+0x1119 0x0115 "gdth" "ICP Vortex|GDT 6121RP1/6521RP1"
+0x1119 0x0118 "gdth" "ICP Vortex|GDT 6x18RD"
+0x1119 0x0119 "gdth" "ICP Vortex|GDT 6x28RD"
+0x1119 0x011a "gdth" "ICP Vortex|GDT 6x38RD"
+0x1119 0x011b "gdth" "ICP Vortex|GDT 6x58RD"
+0x1119 0x0120 "gdth" "ICP Vortex|GDT 6117RP2/6517RP2"
+0x1119 0x0121 "gdth" "ICP Vortex|GDT 6127RP2/6527RP2"
+0x1119 0x0122 "gdth" "ICP Vortex|GDT 6537RP2"
+0x1119 0x0123 "gdth" "ICP Vortex|GDT 6557RP2"
+0x1119 0x0124 "gdth" "ICP Vortex|GDT 6111RP2/6511RP2"
+0x1119 0x0125 "gdth" "ICP Vortex|GDT 6121RP2/6521RP2"
+0x1119 0x0136 "gdth" "ICP Raid Controller|GDT 6x13RS"
+0x1119 0x0137 "gdth" "ICP Raid Controller|GDT 6x23RS"
+0x1119 0x0138 "gdth" "ICP Raid Controller|GDT 6118RS/6518RS/6618RS"
+0x1119 0x0139 "gdth" "ICP Raid Controller|GDT 6128RS/6528RS/6628RS"
+0x1119 0x013a "gdth" "ICP Raid Controller|GDT 6538RS/6638RS"
+0x1119 0x013b "gdth" "ICP Raid Controller|GDT 6558RS/6658RS"
+0x1119 0x013c "gdth" "ICP Raid Controller|GDT 6x33RS"
+0x1119 0x013d "gdth" "ICP Raid Controller|GDT 6x43RS"
+0x1119 0x013e "gdth" "ICP Raid Controller|GDT 6x53RS"
+0x1119 0x013f "gdth" "ICP Raid Controller|GDT 6x63RS"
+0x1119 0x0166 "gdth" "ICP Raid Controller|GDT 7113RN/7513RN/7613RN"
+0x1119 0x0167 "gdth" "ICP Raid Controller|GDT 7123RN/7523RN/7623RN"
+0x1119 0x0168 "gdth" "ICP Vortex|GDT 7x18RN"
+0x1119 0x0169 "gdth" "ICP Vortex|GDT 7x28RN"
+0x1119 0x016a "gdth" "ICP Vortex|GDT 7x38RN"
+0x1119 0x016b "gdth" "ICP Vortex|GDT 7x58RN"
+0x1119 0x016c "gdth" "ICP Raid Controller|GDT 7533RN/7633RN"
+0x1119 0x016d "gdth" "ICP Raid Controller|GDT 7543RN/7643RN"
+0x1119 0x016e "gdth" "ICP Raid Controller|GDT 7553RN/7653RN"
+0x1119 0x016f "gdth" "ICP Raid Controller|GDT 7563RN/7663RN"
+0x1119 0x01d6 "gdth" "ICP Raid Controller|GDT 4x13RZ"
+0x1119 0x01d7 "gdth" "ICP Raid Controller|GDT 4x23RZ"
+0x1119 0x01f6 "gdth" "ICP Raid Controller|GDT 8x13RZ"
+0x1119 0x01f7 "gdth" "ICP Raid Controller|GDT 8x23RZ"
+0x1119 0x01fc "gdth" "ICP Raid Controller|GDT 8x33RZ"
+0x1119 0x01fd "gdth" "ICP Raid Controller|GDT 8x43RZ"
+0x1119 0x01fe "gdth" "ICP Raid Controller|GDT 8x53RZ"
+0x1119 0x01ff "gdth" "ICP Raid Controller|GDT 8x63RZ"
+0x1119 0x0210 "gdth" "ICP Vortex|GDT 6x19RD"
+0x1119 0x0211 "gdth" "ICP Vortex|GDT 6x29RD"
+0x1119 0x0260 "gdth" "ICP Vortex|GDT 7x19RN"
+0x1119 0x0261 "gdth" "ICP Vortex|GDT 7x29RN"
+0x1119 0x02ff "gdth" "ICP Vortex|GDT MAXRP"
+0x1119 0x0300 "gdth" "ICP Vortex GDT Raid Controller"
+0x1119 0x153b "bttv" "ICP Vortex|TValue"
+0x1119 0xffff "gdth" "ICP Vortex|"
+0x111a 0x0000 "eni" "Efficient Networks Inc.|155P-MF1 (FPGA)"
+0x111a 0x0002 "eni" "Efficient Networks Inc.|155P-MF1 (ASIC)"
+0x111a 0x0003 "lanai" "Efficient Networks Inc.|ENI-25P ATM Adapter"
+0x111a 0x0005 "lanai" "Efficient Networks Inc.|ENI-25P ATM Adapter"
+0x111a 0x0007 "unknown" "Efficient Networks Inc.|SpeedStream ADSL"
+0x111a 0x1023 "orinoco_plx" "Efficient Networks Inc.|SpeedStream S1023"
+0x111a 0x1203 "unknown" "Efficient Networks Inc.|SpeedStream 1023 Wireless PCI Adapter"
+0x111a 0x153b "bttv" "Terratec|TValue"
+0x111c 0x0001 "unknown" "Tricord Systems Inc.|Powerbis Bridge"
+0x111d 0x0001 "nicstar" "Integrated Device Technology Inc.|IDT77211 ATM Adapter"
+0x111d 0x0003 "idt77252" "Integrated Device Technology Inc.|IDT77252 ATM Adapter"
+0x111d 0x0004 "unknown" "Integrated Device Technology Inc.|IDT77V252 MICRO ABR SAR PCI ATM Controller"
+0x111d 0x0005 "unknown" "Integrated Device Technology Inc.|IDT77V222 155Mbps ATM MICRO ABR SAR Controller"
+0x111f 0x4a47 "unknown" "Precision Digital Images|Precision MX Video engine interface"
+0x111f 0x5243 "unknown" "Precision Digital Images|Frame capture bus interface"
+0x1123 0x153b "bttv" "Terratec|TV/Radio+"
+0x1124 0x2581 "unknown" "Leutron Vision AG|Picport Monochrome"
+0x1127 0x0200 "unknown" "FORE Systems Inc.|ForeRunner PCA-200 ATM"
+0x1127 0x0210 "unknown" "FORE Systems Inc.|PCA-200PC"
+0x1127 0x0250 "unknown" "FORE Systems Inc.|ATM"
+0x1127 0x0300 "fore_200e" "FORE Systems Inc.|PCA-200E"
+0x1127 0x0310 "unknown" "FORE Systems Inc.|ATM"
+0x1127 0x0400 "he" "FORE Systems Inc.|ForeRunnerHE ATM Adapter"
+0x1127 0x153b "bttv" "Terratec|TV+"
+0x112e 0x0000 "unknown" "Infomedia Microelectronics|Enhanced IDE Controller"
+0x112e 0x000b "unknown" "Infomedia Microelectronics|Enhanced IDE Controller"
+0x112f 0x0000 "unknown" "Imaging Technology Inc.|MVC IC-PCI"
+0x112f 0x0001 "unknown" "Imaging Technology Inc.|MVC IM-PCI Video frame grabber/processor"
+0x112f 0x0007 "unknown" "Imaging Technology|? PCVisionPlus Image Capture Device"
+0x112f 0x0008 "unknown" "Imaging Technology Inc|PC-CamLink PCI framegrabber"
+0x1131 0x1201 "unknown" "Philips Semiconductors|PTD3000 VPN IPSEC coprocessor"
+0x1131 0x1234 "unknown" "Philips Semiconductors|EHCI USB 2.0 Controller"
+0x1131 0x1301 "unknown" "Philips Semiconductors|PTD3210 SSL Accelerator"
+0x1131 0x1561 "unknown" "Philips Semiconductors|USB 1.1 Host Controller"
+0x1131 0x1562 "unknown" "Philips Semiconductors|ISP1561 EHCI USB 2.0 Controller"
+0x1131 0x2780 "unknown" "Philips Semiconductors|TDA2780AQ TV deflection controller"
+0x1131 0x3400 "slamr" "Philips Semiconductors|UCB1500 Modem"
+0x1131 0x3401 "unknown" "Philips Semiconductors|UCB1500 Multimedia Audio Device"
+0x1131 0x5400 "unknown" "Philips Semiconductors|TriMedia TM1000/1100 Multimedia processor"
+0x1131 0x5402 "ISDN:capidrv" "Philips Semiconductors|Fritz DSL ISDN/DSL Adapter"
+0x1131 0x5405 "unknown" "Philips Semiconductors|TriMedia TM1500"
+0x1131 0x5406 "unknown" "Philips Semiconductors|TriMedia TM1700"
+0x1131 0x7130 "saa7134" "Philips Semiconductors|SAA7130 Video Broadcast Decoder"
+0x1131 0x7133 "saa7134" "Philips Semiconductors|SAA7135HL Multi Media Capture Device"
+0x1131 0x7134 "saa7134" "Philips Semiconductors|SAA7134"
+0x1131 0x7135 "saa7134" "Philips Semiconductors|SAA7135 Audio+video broadcast decoder"
+0x1131 0x7145 "avmaster" "Philips Semiconductors|SAA7145"
+0x1131 0x7146 0x110a 0x0000 "dvb-ttpci" "Philips Semiconductors|Fujitsu/Siemens DVB-C card rev1.5"
+0x1131 0x7146 0x110a 0xffff "dpc7146" "Philips Semiconductors|Fujitsu/Siemens DVB-C card rev1.5"
+0x1131 0x7146 0x1131 0x0010 "budget-av" "Philips Semiconductors|KNC1 DVB-S Plus Budget"
+0x1131 0x7146 0x1131 0x0011 "budget-av" "Philips Semiconductors|KNC1 DVB-S budget"
+0x1131 0x7146 0x1131 0x4f56 "budget-av" "Philips Semiconductors|KNC1 DVB-S Budget"
+0x1131 0x7146 0x1131 0x4f60 "budget" "Philips Semiconductors|Fujitsu Siemens Activy Budget-S PCI rev AL"
+0x1131 0x7146 0x1131 0x4f61 "budget" "Philips Semiconductors|Fujitsu-Siemens Activy DVB-S Budget"
+0x1131 0x7146 0x1131 0x5f61 "dpc7146" "Philips Semiconductors|Activy DVB-T Budget"
+0x1131 0x7146 0x114b 0x2003 "dpc7146" "Philips Semiconductors|DVRaptor Video Edit/Capture Card"
+0x1131 0x7146 0x11bd 0x0006 "dpc7146" "Philips Semiconductors|DV500 Overlay"
+0x1131 0x7146 0x11bd 0x000a "dpc7146" "Philips Semiconductors|DV500 Overlay"
+0x1131 0x7146 0x11bd 0x000f "dpc7146" "Philips Semiconductors|DV500 Overlay"
+0x1131 0x7146 0x11bd 0x002d "saa7134-dvb" "Philips Semiconductors|DV500 Overlay"
+0x1131 0x7146 0x13c2 0x0000 "dvb-ttpci" "Philips Semiconductors|Siemens/Technotrend/Hauppauge DVB card rev1.3 or rev1.5"
+0x1131 0x7146 0x13c2 0x0001 "dvb-ttpci" "Philips Semiconductors|Technotrend/Hauppauge DVB card rev1.3 or rev1.6"
+0x1131 0x7146 0x13c2 0x0002 "dvb-ttpci" "Philips Semiconductors|Technotrend/Hauppauge DVB card rev2.1"
+0x1131 0x7146 0x13c2 0x0003 "dvb-ttpci" "Philips Semiconductors|Technotrend/Hauppauge DVB card rev2.1"
+0x1131 0x7146 0x13c2 0x0004 "dvb-ttpci" "Philips Semiconductors|Technotrend/Hauppauge DVB card rev2.1"
+0x1131 0x7146 0x13c2 0x0006 "dvb-ttpci" "Philips Semiconductors|Technotrend/Hauppauge DVB card rev1.3 or rev1.6"
+0x1131 0x7146 0x13c2 0x0008 "dvb-ttpci" "Philips Semiconductors|Technotrend/Hauppauge DVB-T"
+0x1131 0x7146 0x13c2 0x000a "dvb-ttpci" "Philips Semiconductors|Octal/Technotrend DVB-C for iTV"
+0x1131 0x7146 0x13c2 0x000e "dvb-ttpci" "Technotrend/Hauppauge|WinTV Nexus-S Rev 2.3"
+0x1131 0x7146 0x13c2 0x1002 "dvb-ttpci" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x13c2 0x1003 "budget" "Philips Semiconductors|Technotrend-Budget / Hauppauge WinTV-NOVA-S DVB card"
+0x1131 0x7146 0x13c2 0x1004 "budget" "Philips Semiconductors|Technotrend-Budget / Hauppauge WinTV-NOVA-C DVB card"
+0x1131 0x7146 0x13c2 0x1005 "budget" "Philips Semiconductors|Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card"
+0x1131 0x7146 0x13c2 0x100c "budget-ci" "Philips Semiconductors|Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card"
+0x1131 0x7146 0x13c2 0x100f "budget-ci" "Philips Semiconductors|Technotrend-Budget / Hauppauge WinTV-NOVA-CI DVB card"
+0x1131 0x7146 0x13c2 0x1010 "budget-ci" ""
+0x1131 0x7146 0x13c2 0x1011 "budget-ci" "Philips Semiconductors|Technotrend-Budget / Hauppauge WinTV-NOVA-T DVB card"
+0x1131 0x7146 0x13c2 0x1012 "budget-ci" ""
+0x1131 0x7146 0x13c2 0x1013 "budget" "Philips Semiconductors|SATELCO Multimedia DVB"
+0x1131 0x7146 0x13c2 0x1016 "budget" "Philips Semiconductors|WinTV-NOVA-SE DVB card"
+0x1131 0x7146 0x13c2 0x1017 "budget-ci" ""
+0x1131 0x7146 0x13c2 0x1102 "dvb-ttpci" "Philips Semiconductors|Technotrend/Hauppauge DVB card rev2.1"
+0x1131 0x7146 0x153b 0x1154 "budget-av" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x153b 0x1155 "budget-av" ""
+0x1131 0x7146 0x153b 0x1156 "budget-av" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x153b 0x1157 "budget-av" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x17c8 0x0101 "hexium_orion" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x17c8 0x2101 "hexium_orion" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x17c8 0x2401 "hexium_gemini" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x17c8 0x2402 "hexium_gemini" "Philips Semiconductors|SAA7146"
+0x1131 0x7146 0x1894 0x0010 "budget-av" ""
+0x1131 0x7146 0x1894 0x0014 "budget-av" ""
+0x1131 0x7146 0x1894 0x0016 "budget-av" ""
+0x1131 0x7146 0x1894 0x001a "budget-av" ""
+0x1131 0x7146 0x1894 0x001e "budget-av" ""
+0x1131 0x7146 0x1894 0x0020 "budget-av" "Philips Semiconductors|KNC1 DVB-C budget"
+0x1131 0x7146 0x1894 0x0021 "budget-av" "Philips Semiconductors|KNC1 DVB-C Plus budget"
+0x1131 0x7146 0x1894 0x0030 "budget-av" "Philips Semiconductors|KNC1 DVB-T budget"
+0x1131 0x7146 0x1894 0x0031 "budget-av" "Philips Semiconductors|KNC1 DVB-T Plus budget"
+0x1131 0x7146 "dpc7146" "Philips Semiconductors|SAA7146"
+0x1131 0x9730 "unknown" "Philips Semiconductors|SAA9730 Ethernet controller"
+0x1133 0x7711 "unknown" "Eicon Technology Corp.|EiconCard C91"
+0x1133 0x7901 "unknown" "Eicon Technology Corp.|EiconCard S90"
+0x1133 0x7902 "unknown" "Eicon Technology Corp.|EiconCard S90"
+0x1133 0x7911 "unknown" "Eicon Technology Corp.|EiconCard S91"
+0x1133 0x7912 "unknown" "Eicon Technology Corp.|EiconCard S91"
+0x1133 0x7941 "unknown" "Eicon Technology Corp.|EiconCard S94"
+0x1133 0x7942 "unknown" "Eicon Technology Corp.|EiconCard S94"
+0x1133 0x7943 "unknown" "Eicon Technology Corp.|EiconCard S94"
+0x1133 0x7944 "unknown" "Eicon Technology Corp.|EiconCard S94"
+0x1133 0xb921 "unknown" "Eicon Technology Corp.|EiconCard P92"
+0x1133 0xb922 "unknown" "Eicon Technology Corp.|EiconCard P92"
+0x1133 0xb923 "unknown" "Eicon Technology Corp.|EiconCard P92"
+0x1133 0xe001 "ISDN:hisax" "Eicon Technology Corp.|DIVA 20PRO ISDN Adapter"
+0x1133 0xe002 "ISDN:hisax,type=11" "Eicon Technology Corp.|DIVA 20 ISDN Adapter"
+0x1133 0xe003 "ISDN:hisax" "Eicon Technology Corp.|DIVA 20PRO_U ISDN Adapter"
+0x1133 0xe004 "ISDN:hisax,type=11" "Eicon Technology Corp.|DIVA 20_U ISDN Adapter"
+0x1133 0xe005 "ISDN:hisax,type=11" "Eicon Technology Corp.|ISDN Controller"
+0x1133 0xe006 "unknown" "Eicon Technology Corp.|Diva CT S/T PCI"
+0x1133 0xe007 "unknown" "Eicon Technology Corp.|Diva CT U PCI"
+0x1133 0xe008 "unknown" "Eicon Technology Corp.|Diva CT Lite S/T PCI"
+0x1133 0xe009 "unknown" "Eicon Technology Corp.|Diva CT Lite U PCI"
+0x1133 0xe00a "unknown" "Eicon Technology Corp.|Diva ISDN+V.90 PCI"
+0x1133 0xe00b "ISDN:hisax" "Eicon Technology Corp.|DIVA 2.02"
+0x1133 0xe00c "unknown" "Eicon Technology Corp.|Diva 2.02 PCI U"
+0x1133 0xe00d "unknown" "Eicon Technology Corp.|Diva ISDN Pro 3.0 PCI"
+0x1133 0xe00e "unknown" "Eicon Technology Corp.|Diva ISDN+CT S/T PCI Rev 2"
+0x1133 0xe010 "ISDN:divas" "Eicon Technology Corp.|DIVA Server BRI-2M"
+0x1133 0xe011 "unknown" "Eicon Technology Corp.|Diva Server BRI S/T Rev 2"
+0x1133 0xe012 "ISDN:divas" "Eicon Technology Corp.|MaestraQ DIVA Server BRI-8M"
+0x1133 0xe013 "ISDN:divas" "Eicon Technology Corp.|MaestraQ-U DIVA Server 4BRI/PCI"
+0x1133 0xe014 "ISDN:divas" "Eicon Technology Corp.|DIVA Server PRO-30M"
+0x1133 0xe015 "ISDN:divas" "Eicon Technology Corp.|Diva Server PRI-30M PCI v.2"
+0x1133 0xe016 "ISDN:divas" "Eicon Technology Corp.|Diva Server Voice 4BRI PCI"
+0x1133 0xe017 "ISDN:divas" "Eicon Technology Corp.|Diva Server Voice 4BRI PCI Rev 2"
+0x1133 0xe018 "ISDN:divas" "Eicon Technology Corp.|DIVA Server BRI-2M/-2F"
+0x1133 0xe019 "ISDN:divas" "Eicon Technology Corp.|Diva Server Voice PRI PCI Rev 2"
+0x1133 0xe01a "ISDN:divas" "Eicon Technology Corp.|Diva Server 2FX"
+0x1133 0xe01b "ISDN:divas" "Eicon Technology Corp.|Diva Server BRI-2M Voice Revision 2"
+0x1133 0xe01c "unknown" "Eicon Technology Corp.|Diva Server PRI Rev 3.0"
+0x1133 0xe01e "unknown" "Eicon Technology Corp.|Diva Server 2PRI"
+0x1133 0xe020 "unknown" "Eicon Technology Corp.|Diva Server 4PRI"
+0x1133 0xe022 "unknown" "Eicon Networks Corporation|Diva Server Analog-2P"
+0x1133 0xe024 "unknown" "Eicon Networks Corp.|Diva Server Analog-4P"
+0x1133 0xe028 "unknown" "Eicon Networks Corp.|Diva Server Analog-8P"
+0x1133 0xe02a "unknown" "Eicon Networks Corp.|Diva Server IPM-300"
+0x1133 0xe02c "unknown" "Eicon Networks Corp.|Diva Server IPM-600"
+0x1134 0x0001 "unknown" "Mercury Computer Systems|Raceway Bridge"
+0x1134 0x0002 "unknown" "Mercury Computer Systems|Dual PCI to RapidIO Bridge"
+0x1134 0x153b "bttv" "Terratec|TValue"
+0x1135 0x0001 "unknown" "Fuji Xerox Co Ltd.|Printer controller"
+0x1135 0x153b "bttv" "Terratec|TValue Radio"
+0x1138 0x5550 "cpcihp_zt5550" "Ziatech Corp.|"
+0x1138 0x8905 "unknown" "Ziatech Corp.|8905 [STD 32 Bridge]"
+0x1139 0x0001 "unknown" "Dynamic Pictures Inc.|VGA Compatable 3D Graphics"
+0x113c 0x0000 "unknown" "Cyclone Microsystems Inc.|PCI-9060 i960 Bridge"
+0x113c 0x0001 "unknown" "Cyclone Microsystems Inc.|PCI-SDK [PCI i960 Evaluation Platform]"
+0x113c 0x0911 "unknown" "Cyclone Microsystems Inc.|PCI-911 [PCI-based i960Jx Intelligent I/O Controller]"
+0x113c 0x0912 "unknown" "Cyclone Microsystems Inc.|PCI-912 [i960CF-based Intelligent I/O Controller]"
+0x113c 0x0913 "unknown" "Cyclone Microsystems Inc.|PCI-913"
+0x113c 0x0914 "unknown" "Cyclone Microsystems Inc.|PCI-914 [I/O Controller w/ secondary PCI bus]"
+0x113f 0x0808 "unknown" "Equinox Systems Inc.|SST-64P Adapter"
+0x113f 0x1010 "unknown" "Equinox Systems Inc.|SST-128P Adapter"
+0x113f 0x80c0 "unknown" "Equinox Systems Inc.|SST-16P Adapter"
+0x113f 0x80c4 "unknown" "Equinox Systems Inc.|SST-16P Adapter"
+0x113f 0x80c8 "unknown" "Equinox Systems Inc.|SST-16P Adapter"
+0x113f 0x8888 "unknown" "Equinox Systems Inc.|SST-4P Adapter"
+0x113f 0x9090 "unknown" "Equinox Systems Inc.|SST-8P Adapter"
+0x1141 0x0001 "unknown" "Crest Microsystem Inc.|EIDE"
+0x1142 0x3210 "unknown" "Alliance Semiconductor|AP6410"
+0x1142 0x6410 "unknown" "Alliance Semiconductor|GUI Accelerator"
+0x1142 0x6412 "unknown" "Alliance Semiconductor|GUI Accelerator"
+0x1142 0x6420 "unknown" "Alliance Semiconductor|GUI Accelerator"
+0x1142 0x6422 "Card:Alliance ProMotion 6422" "Alliance Semiconductor|ProVideo 6422"
+0x1142 0x6424 "unknown" "Alliance Semiconductor|ProVideo 6424"
+0x1142 0x6425 "Card:AT25" "Alliance Semiconductor|ProMotion AT25"
+0x1142 0x6426 "unknown" "Alliance Semiconductor|GUI Accelerator"
+0x1142 0x643d "Card:AT3D" "Alliance Semiconductor|ProMotion AT3D"
+0x1144 0x0001 "unknown" "Cincinnati Milacron|Noservo controller"
+0x1145 0x8007 "nsp32" "Workbit Corp.|NinjaSCSI-32 Workbit"
+0x1145 0x8009 "nsp32" "Workbit Corp.|"
+0x1145 0xf007 "nsp32" "Workbit Corp.|NinjaSCSI-32 KME"
+0x1145 0xf010 "nsp32" "Workbit Corp.|NinjaSCSI-32 Workbit"
+0x1145 0xf012 "nsp32" "Workbit Corp.|NinjaSCSI-32 Logitec"
+0x1145 0xf013 "nsp32" "Workbit Corp.|NinjaSCSI-32 Logitec"
+0x1145 0xf015 "nsp32" "Workbit Corp.|NinjaSCSI-32 Melco"
+0x1145 0xf020 "unknown" "Workbit Corp.|CardBus ATAPI Host Adapter"
+0x1145 0xf021 "delkin_cb" "Workbit Corp.|"
+0x1148 0x4000 "skfp" "Syskonnect (Schneider & Koch)|FDDI Adapter"
+0x1148 0x4200 "tmspci" "Syskonnect (Schneider & Koch)|Token ring adaptor"
+0x1148 0x4300 "skge" "Syskonnect (Schneider & Koch)|Gigabit Ethernet"
+0x1148 0x4320 "skge" "Syskonnect (Schneider & Koch)|SK-98xx Gigabit Ethernet Server Adapter"
+0x1148 0x4400 "tg3" "Syskonnect (Schneider & Koch)|Tigon3 Gigabit Ethernet"
+0x1148 0x4500 "tg3" "Syskonnect (Schneider & Koch)|Tigon3 Gigabit Ethernet"
+0x1148 0x5579 "unknown" "VMIC|VMIPCI-5579 (Reflective Memory Card)"
+0x1148 0x9000 "sky2" "SysKonnect|SK-9Sxx Gigabit Ethernet Server Adapter PCI-X"
+0x1148 0x9843 "unknown" "SysKonnect|[Fujitsu] Gigabit Ethernet"
+0x1148 0x9e00 "sky2" "SysKonnect|SK-9Exx 10/100/1000Base-T Adapter"
+0x114a 0x5579 "unknown" "VMIC|VMIPCI-5579 (Reflective Memory Card)"
+0x114a 0x5587 "unknown" "VMIC|VMIPCI-5587 (Reflective Memory Card)"
+0x114a 0x5588 "unknown" "VMIC|VMICPCI5588 VMICPCI5588 Reflective Memory Card"
+0x114a 0x6504 "unknown" "VMIC|VMIC PCI 7755 FPGA"
+0x114a 0x7587 "unknown" "VMIC|VMIVME-7587"
+0x114f 0x0002 "unknown" "Digi International|AccelePort EPC"
+0x114f 0x0003 "dgrs" "Digi International|RightSwitch SE-6"
+0x114f 0x0004 "epca" "Digi International|AccelePort Xem"
+0x114f 0x0005 "epca" "Digi International|AccelePort Xr"
+0x114f 0x0006 "epca" "Digi International|AccelePort Xr,C/X"
+0x114f 0x0007 "unknown" "Digi International|DataFire PCI 1 S/T"
+0x114f 0x0009 "epca" "Digi International|AccelePort Xr/J"
+0x114f 0x000a "unknown" "Digi International|AccelePort EPC/J"
+0x114f 0x000c "unknown" "Digi International|DataFirePRIme T1 (1-port)"
+0x114f 0x000d "unknown" "Digi International|SyncPort 2-Port (x.25/FR)"
+0x114f 0x0011 "unknown" "Digi International|AccelePort 8r EIA-232 (IBM)"
+0x114f 0x0012 "unknown" "Digi International|AccelePort 8r EIA-422"
+0x114f 0x0013 "unknown" "Digi International|AccelePort Xr"
+0x114f 0x0014 "unknown" "Digi International|AccelePort 8r EIA-422"
+0x114f 0x0015 "unknown" "Digi International|AccelePort Xem"
+0x114f 0x0016 "unknown" "Digi International|AccelePort EPC/X"
+0x114f 0x0017 "unknown" "Digi International|AccelePort C/X"
+0x114f 0x0019 "unknown" "Digi International|DataFire PCI 1 U"
+0x114f 0x001a "unknown" "Digi International|DataFirePRIme E1 (1-port)"
+0x114f 0x001b "unknown" "Digi International|AccelePort C/X (IBM)"
+0x114f 0x001d "unknown" "Digi International|DataFire RAS T1/E1/PRI"
+0x114f 0x001f "unknown" "Digi International|ClydeNonCsu6034"
+0x114f 0x0020 "unknown" "Digi International|ClydeNonCsu6032"
+0x114f 0x0021 "unknown" "Digi International|ClydeNonCsu4"
+0x114f 0x0022 "unknown" "Digi International|ClydeNonCsu2"
+0x114f 0x0023 "unknown" "Digi International|AccelePort RAS"
+0x114f 0x0024 "unknown" "Digi International|DataFire RAS B4 ST/U"
+0x114f 0x0026 "unknown" "Digi International|AccelePort 4r 920"
+0x114f 0x0027 "unknown" "Digi International|AccelePort Xr 920"
+0x114f 0x0028 "unknown" "Digi International|ClassicBoard 4"
+0x114f 0x0029 "unknown" "Digi International|DigiClassic PCI"
+0x114f 0x0034 "unknown" "Digi International|AccelePort 2r 920"
+0x114f 0x0035 "unknown" "Digi International|DataFire DSP T1/E1/PRI cPCI"
+0x114f 0x0040 "unknown" "Digi International|AccelePort Xp"
+0x114f 0x0042 "unknown" "Digi International|AccelePort 2p PCI"
+0x114f 0x0043 "unknown" "Digi International|AccelePort 4p"
+0x114f 0x0044 "unknown" "Digi International|AccelePort 8p"
+0x114f 0x0045 "unknown" "Digi International|AccelePort 16p"
+0x114f 0x004e "unknown" "Digi International|AccelePort 32p"
+0x114f 0x0070 "ISDN:hisax,type=35" "Digi International|Unknown ISDN Adapter"
+0x114f 0x0071 "ISDN:hisax,type=35" "Digi International|ISDN Adapter"
+0x114f 0x0072 "ISDN:hisax,type=35" "Digi International|Unknown ISDN Adapter"
+0x114f 0x0073 "ISDN:hisax,type=35" "Digi International|Unknown ISDN Adapter"
+0x114f 0x00b0 "unknown" "Digi International|Digi Neo 4"
+0x114f 0x00b1 "unknown" "Digi International|Digi Neo 8"
+0x114f 0x00c8 "jsm" "Digi International|Digi Neo 2 DB9"
+0x114f 0x00c9 "jsm" "Digi International|Digi Neo 2 DB9 PRI"
+0x114f 0x00ca "jsm" "Digi International|Digi Neo 2 RJ45"
+0x114f 0x00cb "jsm" "Digi International|Digi Neo 2 RJ45 PRI"
+0x114f 0x00d0 "unknown" "Digi International|ClassicBoard 4 422"
+0x114f 0x00d1 "unknown" "Digi International|ClassicBoard 8 422"
+0x114f 0x6001 "unknown" "Digi International|Avanstar"
+0x1155 0x0810 "unknown" "Pine Technology Ltd.|486 CPU/PCI Bridge"
+0x1155 0x0922 "unknown" "Pine Technology Ltd.|Pentium CPU/PCI Bridge"
+0x1155 0x0926 "unknown" "Pine Technology Ltd.|PCI/ISA Bridge"
+0x1158 0x3011 "unknown" "Voarx R & D Inc.|Tokenet/vg 1001/10m anylan"
+0x1158 0x9050 "unknown" "Voarx R & D Inc.|Lanfleet/Truevalue"
+0x1158 0x9051 "unknown" "Voarx R & D Inc.|Lanfleet/Truevalue"
+0x1159 0x0001 "unknown" "Mutech Corp.|MV-1000"
+0x1159 0x0002 "unknown" "Mutech Corp.|MV-1500 Frame Grabber"
+0x115d 0x0003 "xircom_cb" "Xircom|Cardbus Ethernet 10/100"
+0x115d 0x0005 "xircom_cb" "Xircom|Cardbus Ethernet 10/100"
+0x115d 0x0007 "xircom_cb" "Xircom|Cardbus Ethernet 10/100"
+0x115d 0x000b "xircom_cb" "Xircom|Cardbus Ethernet 10/100"
+0x115d 0x000c "LT:www.linmodems.org" "Xircom|Mini-PCI V.90 56k Modem"
+0x115d 0x000f "xircom_cb" "Xircom|Cardbus Ethernet 10/100"
+0x115d 0x002b "LT:www.linmodems.org" "Xircom|Winmodem built into NEC Versa VXi"
+0x115d 0x0076 "LT:www.linmodems.org" "Xircom|Xircom MPCI3B-56G (Lucent SCORPIO) Soft"
+0x115d 0x00d3 "LT:www.linmodems.org" "Xircom|Xircom MPCI Modem 56"
+0x115d 0x00d4 "LT:www.linmodems.org" "Xircom|MPCI Modem 56k"
+0x115d 0x0101 "8250_pci" "Xircom|Cardbus 56k modem"
+0x115d 0x0103 "8250_pci" "Xircom|Cardbus Ethernet + 56k Modem"
+0x1161 0x0001 "unknown" "PFU Ltd.|Host Bridge"
+0x1163 0x0001 "Card:Rendition Verite 1000" "Rendition|Verite 1000"
+0x1163 0x2000 "Card:Rendition Verite 2x00" "Rendition|Verite V2000/V2100/V2200"
+0x1165 0x0001 "unknown" "Imagraph Corp.|Motion TPEG Recorder/Player with audio"
+0x1166 0x0000 "unknown" "ServerWorks|CMIC-LE"
+0x1166 0x0005 "unknown" "Reliance Computer|NB6536 (CNB20HE) PCI to PCI Bridge"
+0x1166 0x0006 "unknown" "Reliance Computer|NB6536 (CNB20HE) Host Bridge"
+0x1166 0x0007 "sworks-agp" "Reliance Computer|CNB20-LE CPU to PCI Bridge"
+0x1166 0x0008 "sworks-agp" "Reliance Computer|CNB20HE"
+0x1166 0x0009 "sworks-agp" "Reliance Computer|CNB20HE"
+0x1166 0x0010 "unknown" "ServerWorks|CIOB30"
+0x1166 0x0011 "unknown" "ServerWorks|CMIC-HE"
+0x1166 0x0012 "unknown" "ServerWorks|CMIC-LE"
+0x1166 0x0013 "unknown" "Reliance Computer Corp./ServerWorks|Hostbridge and MCH"
+0x1166 0x0014 "unknown" "ServerWorks|CNB20-HE Host Bridge"
+0x1166 0x0015 "unknown" "Reliance Computer Corp./ServerWorks|Hostbridge and MCH"
+0x1166 0x0016 "unknown" "ServerWorks|CMIC-GC Host Bridge"
+0x1166 0x0017 "unknown" "ServerWorks|GCNB-LE Host Bridge"
+0x1166 0x0036 "unknown" "Broadcom|HT1000 PCI/PCI-X bridge"
+0x1166 0x0101 "unknown" "Reliance Computer Corp./ServerWorks|CIOB-X2"
+0x1166 0x0103 "unknown" "Broadcom|EPB PCI-Express to PCI-X Bridge"
+0x1166 0x0104 "unknown" "Broadcom|HT1000 PCI/PCI-X bridge"
+0x1166 0x0110 "unknown" "ServerWorks|CIOB-E I/O Bridge with Gigabit Ethernet"
+0x1166 0x0130 "unknown" "Broadcom|HT1000 PCI-X bridge"
+0x1166 0x0132 "unknown" "Broadcom|HT1000 PCI-Express bridge"
+0x1166 0x0140 "unknown" "Broadcom|HT2100 PCI-Express Bridge"
+0x1166 0x0141 "unknown" "Broadcom|HT2100 PCI-Express Bridge"
+0x1166 0x0142 "unknown" "Broadcom|HT2100 PCI-Express Bridge"
+0x1166 0x0200 "i2c-piix4" "ServerWorks|OSB4"
+0x1166 0x0201 "i2c-piix4" "ServerWorks|CSB5"
+0x1166 0x0203 "i2c-piix4" "ServerWorks|CSB6 South Bridge"
+0x1166 0x0205 "i2c-piix4" "Broadcom|HT1000 Legacy South Bridge"
+0x1166 0x0211 "serverworks" "ServerWorks|OSB4 IDE Controller"
+0x1166 0x0212 "serverworks" "Reliance Computer|CSB5 IDE interface"
+0x1166 0x0213 "serverworks" "ServerWorks|CSB6 RAID/IDE Controller"
+0x1166 0x0214 "serverworks" "Broadcom|HT1000 Legacy IDE controller"
+0x1166 0x0217 "serverworks" "Reliance Computer Corp./ServerWorks|OSB6 PCI EIDE Controller (Tertiary)"
+0x1166 0x0220 "ohci-hcd" "Reliance Computer|OSB4 OpenHCI Compliant USB Controller"
+0x1166 0x0221 "ohci-hcd" "ServerWorks|CSB6 OHCI USB Controller"
+0x1166 0x0223 "unknown" "Broadcom|HT1000 USB Controller"
+0x1166 0x0225 "unknown" "ServerWorks|GCLE Host Bridge"
+0x1166 0x0227 "tpm_atmel" "ServerWorks|GCLE-2 Host Bridge"
+0x1166 0x0230 "unknown" "Reliance Computer|OSB4 ISA bridge"
+0x1166 0x0234 "unknown" "Broadcom|HT1000 LPC Bridge"
+0x1166 0x0240 "sata_svw" "Reliance Computer|K2 SATA controller"
+0x1166 0x0241 "sata_svw" "ServerWorks|K2 SATA"
+0x1166 0x0242 "sata_svw" "ServerWorks|K2 SATA"
+0x1166 0x024a "sata_svw" "Broadcom|BCM5785 (HT1000) SATA Native SATA Mode"
+0x1166 0x024b "sata_svw" "Broadcom|BCM5785 (HT1000) PATA/IDE Mode"
+0x1169 0x2001 "unknown" "Centre f/Dev. of Adv. Computing|Ql5032-33APQ208C PCI to C-DAC RTU bus interface FPGA"
+0x116a 0x6100 "unknown" "Polaris Communications|Bus/Tag Channel"
+0x116a 0x6800 "unknown" "Polaris Communications|Escon Channel"
+0x116a 0x7100 "unknown" "Polaris Communications|Bus/Tag Channel"
+0x116a 0x7800 "unknown" "Polaris Communications|Escon Channel"
+0x1172 0x0001 "unknown" "Altera Corp.| "
+0x1176 0x0104 "wanxl" "SBE Inc.|WanXL100 Adapter"
+0x1176 0x0301 "wanxl" "SBE Inc.|WanXL200 Adapter"
+0x1176 0x0302 "wanxl" "SBE Inc.|WanXL400 Adapter"
+0x1178 0xafa1 "unknown" "Alfa Inc.|Fast Ethernet Adapter"
+0x1179 0x0001 "unknown" "Toshiba|Toshiba-4010CDT"
+0x1179 0x0102 "generic" "Toshiba|Extended PCI IDE Controller"
+0x1179 0x0103 "generic" "Toshiba|Extended PCI IDE Controller Type-B"
+0x1179 0x0105 "generic" "Toshiba|"
+0x1179 0x0404 "unknown" "Toshiba|DVD Decoder card"
+0x1179 0x0406 "unknown" "Toshiba|Tecra Video Capture device"
+0x1179 0x0407 "unknown" "Toshiba|DVD Decoder card (Version 2)"
+0x1179 0x0601 "unknown" "Toshiba|601 [Laptop]"
+0x1179 0x0602 "unknown" "Toshiba|PCI to ISA Bridge for Notebooks"
+0x1179 0x0603 "yenta_socket" "Toshiba|ToPIC95 PCI to CardBus Bridge for Notebooks"
+0x1179 0x0604 "unknown" "Toshiba|PCI to PCI Bridge for Notebooks"
+0x1179 0x0605 "unknown" "Toshiba|PCI to ISA Bridge for Notebooks"
+0x1179 0x0606 "unknown" "Toshiba|PCI to ISA Bridge for Notebooks"
+0x1179 0x0609 "unknown" "Toshiba|PCI to PCI Bridge for Notebooks"
+0x1179 0x060a "yenta_socket" "Toshiba|ToPIC95"
+0x1179 0x060f "yenta_socket" "Toshiba|ToPIC97"
+0x1179 0x0611 "unknown" "Toshiba|PCI to ISA Bridge"
+0x1179 0x0617 "yenta_socket" "Toshiba|ToPIC95 PCI to Cardbus Bridge with ZV Support"
+0x1179 0x0618 "unknown" "Toshiba|CPU to PCI and PCI to ISA bridge"
+0x1179 0x0701 "donauboe" "Toshiba|FIR Port"
+0x1179 0x0804 "unknown" "Toshiba|TC6371AF SmartMedia Controller"
+0x1179 0x0805 "unknown" "Toshiba|SD TypA Controller"
+0x1179 0x0d01 "donauboe" "Toshiba|FIR Port Type-DO"
+0x1179 0x13a8 "unknown" "Toshiba|XR17C158/154/152 Multi-channel PCI UART"
+0x117c 0x0030 "unknown" "Atto Technology|Ultra320 SCSI Host Adapter"
+0x117e 0x0001 "unknown" "T/R Systems|Printer Host"
+0x1180 0x0465 "yenta_socket" "Ricoh Co Ltd.|RL5c465"
+0x1180 0x0466 "yenta_socket" "Ricoh Co Ltd.|RL5c466"
+0x1180 0x0475 "yenta_socket" "Ricoh Co Ltd.|RL5c475"
+0x1180 0x0476 "yenta_socket" "Ricoh Co Ltd.|RL5c476 II"
+0x1180 0x0477 "yenta_socket" "Ricoh Co Ltd.|RL5c477"
+0x1180 0x0478 "yenta_socket" "Ricoh Co Ltd.|RL5c478"
+0x1180 0x0511 "unknown" "Ricoh Co Ltd|R5C511"
+0x1180 0x0521 "unknown" "Communication Automation Corp.|R5C521 1394 Host Controller"
+0x1180 0x0522 "unknown" "Ricoh Co Ltd.|R5C522 IEEE 1394 Controller"
+0x1180 0x0551 "ohci1394" "Ricoh Co Ltd.|R5C551 IEEE 1394 Controller"
+0x1180 0x0552 "ohci1394" "Ricoh Co Ltd.|R5C552 IEEE 1394 Controller"
+0x1180 0x0554 "unknown" "Ricoh Co Ltd|R5C554"
+0x1180 0x0575 "unknown" "Ricoh Co Ltd.|R5C575 SD Bus Host Adapter"
+0x1180 0x0576 "unknown" "Communication Automation Corp.|SD-Card Interface"
+0x1180 0x0592 "unknown" "Ricoh Co Ltd.|R5C592 Memory Stick Bus Host Adapter"
+0x1180 0x0811 "unknown" "Ricoh Co Ltd|R5C811"
+0x1180 0x0822 "sdhci" "Ricoh Co Ltd.|SD Card reader"
+0x1180 0x0841 "unknown" "Ricoh Co Ltd|R5C841 CardBus/SD/SDIO/MMC/MS/MSPro/xD/IEEE1394"
+0x1180 0x0852 "unknown" "Ricoh Co Ltd.|xD-Picture Card Controller"
+0x1185 0x8929 "unknown" "Dataworld|EIDE"
+0x1186 0x0100 "tulip" "D-Link System Inc.|DC21041"
+0x1186 0x1002 "sundance" "D-Link System Inc.|DFE 550 TX"
+0x1186 0x1025 "unknown" "D-Link System Inc.|AirPlus Xtreme G DWL-G650 Adapter"
+0x1186 0x1026 "unknown" "D-Link System Inc.|AirXpert DWL-AG650 Wireless Cardbus Adapter"
+0x1186 0x1043 "unknown" "D-Link System Inc.|AirXpert DWL-AG650 Wireless Cardbus Adapter"
+0x1186 0x1100 "tulip" "D-Link System Inc.|Fast Ethernet Adapter"
+0x1186 0x1300 "8139too" "D-Link System Inc.|DFE 530 TX+ Fast Ethernet Adapter"
+0x1186 0x1340 "8139too" "D-Link System Inc.|DFE-690TXD (CardBus PC Card)"
+0x1186 0x1405 "unknown" "D-Link System Inc|DFE-520TX Fast Ethernet PCI Adapter"
+0x1186 0x1541 "tulip" "D-Link System Inc.|DFE-680TXD CardBus PC Card"
+0x1186 0x1561 "tulip" "D-Link System Inc.|DRP-32TXD Cardbus PC Card"
+0x1186 0x1591 "tulip" ""
+0x1186 0x2027 "unknown" "D-Link System Inc.|AirPlus Xtreme G DWL-G520 Adapter"
+0x1186 0x3065 "unknown" "D-Link System Inc.| "
+0x1186 0x3106 "unknown" "D-Link System Inc.| "
+0x1186 0x3203 "unknown" "D-Link System Inc.|AirPlus Xtreme G DWL-G520 Adapter"
+0x1186 0x3300 "r8180" "D-Link System Inc.|D-Link Air Wireless Network (DWL-510) IEEE 802.11b PCI card"
+0x1186 0x3a03 "unknown" "D-Link System Inc.|AirPro DWL-A650 Wireless Cardbus Adapter(rev.B)"
+0x1186 0x3a04 "unknown" "D-Link System Inc.|AirPro DWL-AB650 Multimode Wireless Cardbus Adapter"
+0x1186 0x3a05 "unknown" "D-Link System Inc.|AirPro DWL-AB520 Multimode Wireless PCI Adapter"
+0x1186 0x3a07 "unknown" "D-Link System Inc.|AirXpert DWL-AG650 Wireless Cardbus Adapter"
+0x1186 0x3a08 "unknown" "D-Link System Inc.|AirXpert DWL-AG520 Wireless PCI Adapter"
+0x1186 0x3a10 "unknown" "D-Link System Inc.|AirXpert DWL-AG650 Wireless Cardbus Adapter(rev.B)"
+0x1186 0x3a11 "unknown" "D-Link System Inc.|AirXpert DWL-AG520 Wireless PCI Adapter(rev.B)"
+0x1186 0x3a12 "unknown" "D-Link System Inc.|AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C)"
+0x1186 0x3a13 "unknown" "D-Link System Inc.|AirPlus DWL-G520 Wireless PCI Adapter(rev.B)"
+0x1186 0x3a14 "unknown" "D-Link System Inc.|AirPremier DWL-AG530 Wireless PCI Adapter"
+0x1186 0x3a63 "unknown" "D-Link System Inc.|AirXpert DWL-AG660 Wireless Cardbus Adapter"
+0x1186 0x3b05 "unknown" "D-Link System Inc.|DWL-G650+ CardBus PC Card"
+0x1186 0x4000 "dl2k" "D-Link System Inc.| Ethernet Adapter"
+0x1186 0x4001 "unknown" "D-Link System Inc.|DFE-650TX D Link Fast Ethernet PCMCIA Card"
+0x1186 0x4300 "r8169" "D-Link System Inc.|DGE-528T Gigabit Ethernet Adapter"
+0x1186 0x4800 "unknown" "D-Link System Inc|DGE-530T Gigabit Ethernet Adapter (rev 11)"
+0x1186 0x4b00 "sky2" "D-Link System Inc.|Gigabit Ethernet Adapter"
+0x1186 0x4b01 "skge" "D-Link System Inc.|Gigabit Ethernet Adapter"
+0x1186 0x4c00 "skge" "D-Link System Inc.|Gigabit Ethernet Adapter"
+0x1186 0x8400 "unknown" "D-Link System Inc.|D-Link DWL-650+ CardBus PC Card"
+0x1189 0x1592 "unknown" "Matsushita Electronics Co|VL/PCI Bridge"
+0x118c 0x0014 "unknown" "Corollary Inc.|PCIB [C-bus II to PCI bus host bridge chip]"
+0x118c 0x1117 "unknown" "Corollary Inc.|Intel 8-way XEON Profusion Chipset [Cache Coherency Filter]"
+0x118d 0x0001 "unknown" "BitFlow Inc.|Raptor-PCI framegrabber"
+0x118d 0x0012 "unknown" "BitFlow Inc.|Model 12 Road Runner Frame Grabber"
+0x118d 0x0014 "unknown" "BitFlow Inc.|Model 14 Road Runner Frame Grabber"
+0x118d 0x0024 "unknown" "BitFlow Inc.|Model 24 Road Runner Frame Grabber"
+0x118d 0x0044 "unknown" "BitFlow Inc.|Model 44 Road Runner Frame Grabber"
+0x118d 0x0112 "unknown" "BitFlow Inc.|Model 12 Road Runner Frame Grabber"
+0x118d 0x0114 "unknown" "BitFlow Inc.|Model 14 Road Runner Frame Grabber"
+0x118d 0x0124 "unknown" "BitFlow Inc.|Model 24 Road Runner Frame Grabber"
+0x118d 0x0144 "unknown" "BitFlow Inc.|Model 44 Road Runner Frame Grabber"
+0x118d 0x0212 "unknown" "BitFlow Inc.|Model 12 Road Runner Frame Grabber"
+0x118d 0x0214 "unknown" "BitFlow Inc.|Model 14 Road Runner Frame Grabber"
+0x118d 0x0224 "unknown" "BitFlow Inc.|Model 24 Road Runner Frame Grabber"
+0x118d 0x0244 "unknown" "BitFlow Inc.|Model 44 Road Runner Frame Grabber"
+0x118d 0x0312 "unknown" "BitFlow Inc.|Model 12 Road Runner Frame Grabber"
+0x118d 0x0314 "unknown" "BitFlow Inc.|Model 14 Road Runner Frame Grabber"
+0x118d 0x0324 "unknown" "BitFlow Inc.|Model 24 Road Runner Frame Grabber"
+0x118d 0x0344 "unknown" "BitFlow Inc.|Model 44 Road Runner Frame Grabber"
+0x118e 0x0042 "unknown" "Hermstedt AG| "
+0x118e 0x0142 "unknown" "Hermstedt AG| "
+0x118e 0x0242 "unknown" "Hermstedt AG| "
+0x118e 0x0342 "unknown" "Hermstedt AG| "
+0x118e 0x0440 "unknown" "Hermstedt AG| "
+0x118e 0x0442 "unknown" "Hermstedt AG| "
+0x118e 0x0842 "unknown" "Hermstedt AG| "
+0x1190 0x2550 "unknown" "Tripace|PCI Ultra(Wide) SCSI Processor"
+0x1190 0xc721 "unknown" "Tripace|EIDE"
+0x1190 0xc731 "unknown" "Tripace|PCI Ultra(Wide) SCSI Processor"
+0x1191 0x0001 "unknown" "Acard Technology Corp.|EIDE Adapter"
+0x1191 0x0002 "unknown" "Acard Technology Corp.|EIDE Adapter"
+0x1191 0x0003 "unknown" "Acard Technology Corp.|SCSI Cache Host Adapter"
+0x1191 0x0004 "unknown" "Artop Electronic Corp.|ATP8400"
+0x1191 0x0005 "aec62xx" "Artop Electronic Corp.|ATP850UF"
+0x1191 0x0006 "aec62xx" "Artop Electronic Corp.|ATP860 NO-BIOS"
+0x1191 0x0007 "aec62xx" "Artop Electronic Corp.|ATP860"
+0x1191 0x0008 "aec62xx" "Artop Electronic Corp.|ATP865 NO-ROM"
+0x1191 0x0009 "aec62xx" "Artop Electronic Corp.|ATP865"
+0x1191 0x8001 "unknown" "Acard Technology Corp.|SCSI-2 Cache Host Adapter"
+0x1191 0x8002 "atp870u" "Artop Electronic Corp.|AEC6710 SCSI-2 Host Adapter"
+0x1191 0x8010 "atp870u" "Artop Electronic Corp.|AEC6712UW SCSI"
+0x1191 0x8020 "atp870u" "Artop Electronic Corp.|AEC6712U SCSI"
+0x1191 0x8030 "atp870u" "Artop Electronic Corp.|AEC6712S SCSI"
+0x1191 0x8040 "atp870u" "Artop Electronic Corp.|AEC6712D SCSI"
+0x1191 0x8050 "atp870u" "Artop Electronic Corp.|AEC6712SUW SCSI"
+0x1191 0x8060 "atp870u" "ACARD Technology|AEC671x SCSI Host Adapter"
+0x1191 0x8080 "atp870u" "ACARD Technology|AEC-67160 PCI Ultra160 LVD/SE SCSI Adapter"
+0x1191 0x8081 "atp870u" "ACARD Technology|AEC-67160-2 PCI Ultra160 LVD/SE SCSI Adapter"
+0x1191 0x808a "atp870u" "ACARD Technology|AEC-67162 PCI Ultra160 LVD/SE SCSI Adapter"
+0x1193 0x0001 "zatm" "Zeitnet Inc.|1221"
+0x1193 0x0002 "zatm" "Zeitnet Inc.|1225"
+0x1197 0x010c "unknown" "Gage Applied Sciences Inc.|CompuScope 82G 8bit 2GS/s Analog Input Card"
+0x1199 0x0001 "unknown" "Attachmate Corp.|IRMA 3270 PCI Adapter"
+0x1199 0x0002 "unknown" "Attachmate Corp.|Advanced ISCA PCI Adapter"
+0x1199 0x0201 "unknown" "Attachmate Corp.|SDLC PCI Adapter"
+0x119b 0x1221 "yenta_socket" "Omega Micro Inc.|82C092G"
+0x119e 0x0001 "firestream" "Fujitsu Microelectronics Europe GMBH|FireStream 155"
+0x119e 0x0003 "firestream" "Fujitsu Microelectronics Europe GMBH|FireStream 50"
+0x11a8 0x7302 "unknown" "Systech Corp.|NTX-8023-PCI 2MB Long Card"
+0x11a8 0x7308 "unknown" "Systech Corp.|NTX-8023-PCI 8MB Long Card"
+0x11a8 0x7402 "unknown" "Systech Corp.|NTX-8023-PCI 2MB Short Card"
+0x11a8 0x7408 "unknown" "Systech Corp.|NTX-8023-PCI 8MB Short Card"
+0x11a9 0x4240 "unknown" "InnoSys Inc.|AMCC S933Q Intelligent Serial Card"
+0x11ab 0x0146 "unknown" "Galileo Technology Ltd.|GT-64010"
+0x11ab 0x138f "unknown" "Marvell Semiconductor Inc.|W8300 802.11 Adapter (rev 07)"
+0x11ab 0x1fa6 "unknown" "Marvell Semiconductor Inc.|Marvell W8300 802.11 Adapter"
+0x11ab 0x1fa7 "unknown" "Marvell Semiconductor Inc.|88W8310 and 88W8000G [Libertas] 802.11g client chipset"
+0x11ab 0x1faa "unknown" "Marvell Semiconductor Inc.|88w8335 [Libertas] 802.11b/g Wireless"
+0x11ab 0x4320 "skge" "Marvell Semiconductor Inc.|88E8001 Gigabit Lan PCI Controller"
+0x11ab 0x4340 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4341 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4342 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4343 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4344 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4345 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4346 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4347 "sky2" "Marvell Semiconductor Inc.|Gigabit Lan PCI Controller"
+0x11ab 0x4350 "sky2" "Marvell Semiconductor Inc.|Fast Ethernet Controller"
+0x11ab 0x4351 "sky2" "Marvell Semiconductor Inc.|Fast Ethernet Controller"
+0x11ab 0x4352 "sky2" "Marvell Technology Group Ltd.|88E8038 PCI-E Fast Ethernet Controller"
+0x11ab 0x4360 "sky2" "Marvell Semiconductor Inc.|Gigabit Ethernet Controller"
+0x11ab 0x4361 "sky2" "Marvell Semiconductor Inc.|Gigabit Ethernet Controller"
+0x11ab 0x4362 "sky2" "Marvell Semiconductor Inc.|Marvell Yukon 88E8053 Gigabit Ethernet 10/100/1000Base-T Adapter"
+0x11ab 0x4363 "sky2" "Marvell Technology Group Ltd.|88E8055 PCI-E Gigabit Ethernet Controller"
+0x11ab 0x4611 "unknown" "Galileo Technology Ltd.|GT-64115 System Controller"
+0x11ab 0x4620 "unknown" "Galileo Technology Ltd.|GT-64120 System Controller for R5K &amp; R7K w/64bit PCI"
+0x11ab 0x4801 "unknown" "Galileo Technology Ltd.|GT-48001"
+0x11ab 0x4809 "unknown" "Galileo Technology Ltd.|EV-48300 Evaluation board for the GT-48300"
+0x11ab 0x5005 "skge" "Marvell Semiconductor Inc.|Belkin F5D5005 Gigabit Desktop Network PCI Card"
+0x11ab 0x5040 "sata_mv" "Marvell Semiconductor Inc.|MV88SX5040 4-port SATA I PCI-X Controller"
+0x11ab 0x5041 "sata_mv" "Marvell Semiconductor Inc.|MV88SX5041 4-port SATA I PCI-X Controller"
+0x11ab 0x5080 "sata_mv" "Marvell Semiconductor Inc.|RocketRAID 182x SATA Controller"
+0x11ab 0x5081 "sata_mv" "Marvell Semiconductor Inc.|RocketRAID 182x SATA Controller"
+0x11ab 0x6040 "sata_mv" "Marvell Semiconductor Inc.|SATA Controller"
+0x11ab 0x6041 "sata_mv" "Marvell Semiconductor Inc.|MV88SX6041 4-port SATA II PCI-X Controller"
+0x11ab 0x6042 "sata_mv" ""
+0x11ab 0x6080 "sata_mv" "Marvell Semiconductor Inc.|RocketRAID 182x SATA Controller"
+0x11ab 0x6081 "sata_mv" "Marvell Semiconductor Inc.|MV88SX6081 8-port SATA II PCI-X Controller"
+0x11ab 0x6320 "unknown" "Marvell Semiconductor Inc.|GT-64130/131 System Controller for PowerPC Processors"
+0x11ab 0x6460 "mv64340_eth" "Marvell Semiconductor Inc.|MV64360/64361/64362 System Controller"
+0x11ab 0x6480 "unknown" "Marvell Semiconductor Inc.|MV64460/64461/64462 System Controller"
+0x11ab 0x6485 "unknown" "Marvell Technology Group Ltd.|MV64460/64461/64462 System Controller, Revision B"
+0x11ab 0x9653 "unknown" "Marvell Semiconductor Inc.|GT-96100A Advanced Communication Controller"
+0x11ab 0xf003 "unknown" "Galileo Technology Ltd.|GT-64010 Primary Image Piranha Image Generator"
+0x11ab 0xf004 "unknown" "Galileo Technology Ltd.|GT64120 Primary Image Barracuda Image Generator"
+0x11ab 0xf006 "unknown" "Galileo Technology Ltd.|GT-64120A Primary Image Cruncher Geometry Accelerator"
+0x11ad 0x0001 "unknown" "Lite-On Communications Inc.| "
+0x11ad 0x0002 "tulip" "Lite-On Communications Inc.|LNE100TX"
+0x11ad 0xc115 "tulip" "Lite-On Communications Inc.|LC82C115 PNIC-II"
+0x11ae 0x4153 "unknown" "Scitex Corp. Ltd.|Bridge Controller"
+0x11ae 0x5842 "unknown" "Scitex Corp. Ltd.|Bridge Controller"
+0x11af 0x0001 "unknown" "Avid Technology Inc.|[Cinema]"
+0x11af 0xee40 "unknown" "Avid Technology Inc.|Digidesign Audiomedia III"
+0x11b0 0x0001 "8250_pci" "V3 Semiconductor Inc.|V960PBC i960 Local Bus PCI Bridge"
+0x11b0 0x0002 0x12c4 0x0001 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0002 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0003 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0004 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0005 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0006 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0007 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0008 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x0009 "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x000a "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x000b "8250_pci" "V3 Semiconductor Inc.|PCI Serial Port"
+0x11b0 0x0002 0x12c4 0x000c "8250_pci" ""
+0x11b0 0x0002 "sdladrv" "V3 Semiconductor Inc.|V300PSC"
+0x11b0 0x0004 "unknown" "V3 Semiconductor Inc.|V962PBC i960 Local Bus PCI Bridge"
+0x11b0 0x0010 "unknown" "V3 Semiconductor Inc.|V292PBC Am29K Local Bus PCI Bridge"
+0x11b0 0x0021 "unknown" "V3 Semiconductor Inc.|V363EPC i960Sx Local Bus to PCI Bridge"
+0x11b0 0x0022 "unknown" "V3 Semiconductor Inc.|V363EPC i960Jx Local Bus to PCI Bridge"
+0x11b0 0x0024 "unknown" "V3 Semiconductor Inc.|V363EPC i960Cx/Hx Local Bus to PCI Bridge"
+0x11b0 0x0030 "unknown" "V3 Semiconductor Inc.|V363EPC Am29K Local Bus to PCI Bridge"
+0x11b0 0x0100 "unknown" "V3 Semiconductor Inc.|V320USC PCI System Ctrlr for 32-bit MIPS CPU"
+0x11b0 0x0101 "unknown" "V3 Semiconductor Inc.|V320USC PCI System Ctrlr for 32-bit MIPS CPU"
+0x11b0 0x0102 "unknown" "V3 Semiconductor Inc.|V320USC PCI System Ctrlr for Super-H SH3 CPU"
+0x11b0 0x0103 "unknown" "V3 Semiconductor Inc.|V320USC PCI System Ctrlr for Super-H SH4 CPU"
+0x11b0 0x0200 "unknown" "V3 Semiconductor Inc.|V370PDC High Performance PCI SDRAM Controller"
+0x11b0 0x0292 "unknown" "V3 Semiconductor Inc.|V292PBC [Am29030/40 Bridge]"
+0x11b0 0x0500 "unknown" "V3 Semiconductor Inc.|V340HPC PCI System Ctrlr for 64-bit MIPS CPU"
+0x11b0 0x0960 "unknown" "V3 Semiconductor Inc.|V96xPBC"
+0x11b0 0xc960 "unknown" "V3 Semiconductor Inc.|V96DPC"
+0x11b8 0x0001 "unknown" "XPoint Technologies Inc.|Quad PeerMaster"
+0x11b9 0xc0ed "unknown" "Pathlight Technology Inc.|SSA Controller"
+0x11bc 0x0001 "unknown" "Network Peripherals Inc.|NP-PCI"
+0x11bd 0x0015 "unknown" "Pinnacle Systems Inc.|??? FireWire IEEE1394"
+0x11bd 0x002e "unknown" "Pinnacle Systems Inc.|PCTV 40i"
+0x11bd 0xbebe "unknown" "Pinnacle Systems Inc.|??? Multimedia device"
+0x11bd 0xbede "unknown" "Pinnacle Systems Inc.|Pinnacle AV/DV Studio Capture Card"
+0x11c1 0x000f "unknown" "Agere Systems|00 "
+0x11c1 0x0440 "LT:www.linmodems.org" "Lucent Microelectronics|56k WinModem"
+0x11c1 0x0441 "LT:www.linmodems.org" "Lucent Microelectronics|56k WinModem"
+0x11c1 0x0442 "LT:www.linmodems.org" "Lucent Microelectronics|56k WinModem"
+0x11c1 0x0443 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0444 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0445 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0446 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0447 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0448 "LT:www.linmodems.org" "Lucent Microelectronics|WinModem 56k"
+0x11c1 0x0449 "LT:www.linmodems.org" "Lucent Microelectronics|WinModem 56k"
+0x11c1 0x044a "LT:www.linmodems.org" "Lucent Microelectronics|F-1156IV WinModem (V90, 56KFlex)"
+0x11c1 0x044b "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x044c "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x044d "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x044e "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x044f "LT:www.linmodems.org" "Agere Systems|LT V.90+DSL WildFire Modem"
+0x11c1 0x0450 "LT:www.linmodems.org" "Agere Systems|LT WinModem"
+0x11c1 0x0451 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0452 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0453 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0454 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0455 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0456 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0457 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0458 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x0459 "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x045a "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x045c "LT:www.linmodems.org" "Lucent Microelectronics|LT WinModem"
+0x11c1 0x045d "Bad:www.linmodems.org" "Agere Systems|LT WinModem"
+0x11c1 0x0461 "Bad:www.linmodems.org" "Agere Systems|V90 Wildfire Modem"
+0x11c1 0x0462 "Bad:www.linmodems.org" "Agere Systems|56K.V90/ADSL Wildfire Modem"
+0x11c1 0x0464 "unknown" "Agere Systems|Riptide Audio PCI Legacy Resources"
+0x11c1 0x0480 "8250_pci" "Lucent Microelectronics|Venus WinModem (V90, 56KFlex)"
+0x11c1 0x048c "unknown" "Agere Systems|SV92P SV92P PCI Soft Modem Chip Set"
+0x11c1 0x048f "unknown" "Agere Systems|SV92P-T00"
+0x11c1 0x0540 "unknown" "Agere Systems| "
+0x11c1 0x5801 "ohci-hcd" "AT&T Microelectronics (Lucent)|USB Open Host Controller"
+0x11c1 0x5802 "unknown" "Agere Systems|USS-312 2-port PCI-to-USB OpenHCI Host Ctrlr"
+0x11c1 0x5803 "unknown" "Agere Systems|USS-344 QuadraBus 4-port USB OpenHCI Host Ctrlr"
+0x11c1 0x5805 "unknown" "Agere Systems|USB Advanced Host Controller"
+0x11c1 0x5811 "ohci1394" "Lucent Microelectronics|FW323 FireWire (IEEE 1394)"
+0x11c1 0x7121 "unknown" "Agere Systems| "
+0x11c1 0x8110 "unknown" "Agere Systems|T8110 H.100/H.110 TDM switch"
+0x11c1 0xab10 "unknown" "Agere Systems|WL60010 Wireless LAN MAC"
+0x11c1 0xab11 "unknown" "Agere Systems|WL60040 Multimode Wireles LAN MAC"
+0x11c1 0xab20 "unknown" "Agere Systems|WaveLAN PCI Wireless LAN Adapter"
+0x11c1 0xab21 "unknown" "Agere Systems|Agere Wireless PCI Adapter"
+0x11c1 0xab30 "unknown" "Agere Systems|Agere Mini-PCI 802.11 Adapter"
+0x11c1 0xed00 "unknown" "Agere Systems|ET-131x PCI-E Ethernet Controller"
+0x11c1 0xed01 "unknown" "Agere Systems|ET-131x PCI-E Ethernet Controller"
+0x11c6 0x3001 "unknown" "Dainippon Screen Mfg. Co|1 VM-1200 Opto Unit Controller"
+0x11c8 0x0658 "unknown" "Dolphin|PSB32 SCI-Adapter D31x"
+0x11c8 0xd665 "unknown" "Dolphin|PSB64 SCI-Adapter D32x"
+0x11c8 0xd667 "unknown" "Dolphin|PSB66 SCI-Adapter D33x"
+0x11c9 0x0010 "unknown" "Magma|16-line serial port w/- DMA"
+0x11c9 0x0011 "unknown" "Magma|4-line serial port w/- DMA"
+0x11cb 0x2000 "sx" "Specialix Research Ltd.|PCI_9050"
+0x11cb 0x4000 "unknown" "Specialix Research Ltd.|SUPI_1"
+0x11cb 0x8000 "unknown" "Specialix Research Ltd.|T225"
+0x11cb 0x9501 "8250_pci" "Specialix Research Ltd.|PCI Serial Port"
+0x11d1 0x0000 "unknown" "AuraVision Corp.| "
+0x11d1 0x01f7 "unknown" "Auravision Corp.|VxP524"
+0x11d4 0x1535 "unknown" "Analog Devices Inc.|ADSP-21535 Blackfin DSP PCI Bus Interface"
+0x11d4 0x1805 "unknown" "Analog Devices Inc.|<DELETE> erl3227a-0.8"
+0x11d4 0x1889 "ad1889" "Analog Devices Inc.|AD1889 sound chip"
+0x11d4 0x1986 "unknown" "Analog Devices|AD1986A sound chip"
+0x11d4 0x2192 "unknown" "Analog Devices Inc.|ADSP-2192 DSP Microcomputer (function #0)"
+0x11d4 0x219a "unknown" "Analog Devices Inc.|ADSP-2192 DSP Microcomputer (function #1)"
+0x11d4 0x219e "unknown" "Analog Devices Inc.|ADSP-2192 DSP Microcomputer (function #2)"
+0x11d4 0x2f44 "unknown" "Analog Devices Inc.|ADSP-2141 SafeNet Crypto Accelerator chip"
+0x11d4 0x5340 "unknown" "Analog Devices Inc.|AD1881 sound chip"
+0x11d5 0x0115 "unknown" "Ikon Corp.|10115"
+0x11d5 0x0116 "unknown" "Tahoma Technology|10116 DR11-W emulator"
+0x11d5 0x0117 "unknown" "Ikon Corp.|10117"
+0x11d5 0x0118 "unknown" "Tahoma Technology|10118 DR11-W emulator"
+0x11db 0x1234 "8139too" "Sega Enterprises Ltd.|Dreamcast Broadband Adapter"
+0x11de 0x6057 "zr36067" "Zoran Corp.|ZR36057PQC Video cutting chipset"
+0x11de 0x6120 "ISDN:hisax" "Zoran Corp.|ZR36120 ISDN Adapter"
+0x11de 0x9876 "unknown" "Zoran Corp.| "
+0x11e3 0x0001 "unknown" "Quicklogic Corporation|COM-ON-AIR Dosch&Amand DECT"
+0x11e3 0x5030 "pcwd_pci" "Quicklogic Corp.|PC Watchdog"
+0x11ec 0x2064 "unknown" "Coreco Inc.| "
+0x11f0 0x4231 "unknown" "Compu-Shack|FDDI"
+0x11f0 0x4232 "unknown" "Compu-Shack|FASTline UTP Quattro"
+0x11f0 0x4233 "unknown" "Compu-Shack|FASTline FO"
+0x11f0 0x4234 "unknown" "Compu-Shack|FASTline UTP"
+0x11f0 0x4235 "unknown" "Compu-Shack|FASTline-II UTP"
+0x11f0 0x4236 "unknown" "Compu-Shack|FASTline-II FO"
+0x11f0 0x4731 "unknown" "Compu-Shack|GIGAline"
+0x11f4 0x2915 "unknown" "Kinetic|CAMAC controller"
+0x11f6 0x0112 "hp100" "Compex|ENet100VG4"
+0x11f6 0x0113 "unknown" "Compex|FreedomLine 100"
+0x11f6 0x1401 "ne2k-pci" "Compex|ReadyLink 2000"
+0x11f6 0x2011 "winbond-840" "Compex|RL100-ATX 10/100"
+0x11f6 0x2201 "ne2k-pci" "Compex|ReadyLink 100TX (Winbond W89C840)"
+0x11f6 0x9881 "tulip" "Compex|RL100TX"
+0x11f8 0x7364 "unknown" "PMC-Sierra Inc.|PM7364 FREEDM-32 Frame Engine & Datalink Mgr"
+0x11f8 0x7366 "unknown" "PMC-Sierra Inc.|PM7366 FREEDM-8 Frame Engine & Datalink Manager"
+0x11f8 0x7367 "unknown" "PMC-Sierra Inc.|PM7367 FREEDM-32P32 Frame Engine & Datalink Mgr"
+0x11f8 0x7375 "unknown" "PMC-Sierra Inc.|PM7375 [LASAR-155 ATM SAR]"
+0x11f8 0x7380 "unknown" "PMC-Sierra Inc.|PM7380 FREEDM-32P672 Frm Engine & Datalink Mgr"
+0x11f8 0x7382 "unknown" "PMC-Sierra Inc.|PM7382 FREEDM-32P256 Frm Engine & Datalink Mgr"
+0x11f8 0x7384 "unknown" "PMC-Sierra Inc.|PM7384 FREEDM-84P672 Frm Engine & Datalink Mgr"
+0x11fe 0x0001 "unknown" "Comtrol Corp.|RocketPort 8 Oct"
+0x11fe 0x0002 "unknown" "Comtrol Corp.|RocketPort 8 Intf"
+0x11fe 0x0003 "unknown" "Comtrol Corp.|RocketPort 16 Intf"
+0x11fe 0x0004 "unknown" "Comtrol Corp.|RocketPort 32 Intf"
+0x11fe 0x0005 "unknown" "Comtrol Corp.|RocketPort Octacable"
+0x11fe 0x0006 "unknown" "Comtrol Corp.|RocketPort 8J"
+0x11fe 0x0007 "unknown" "Comtrol Corp.|RocketPort 4-port"
+0x11fe 0x0008 "unknown" "Comtrol Corp.|RocketPort 8-port"
+0x11fe 0x0009 "unknown" "Comtrol Corp.|RocketPort 16-port"
+0x11fe 0x000a "unknown" "Comtrol Corp.|RocketPort Plus Quadcable"
+0x11fe 0x000b "unknown" "Comtrol Corp.|RocketPort Plus Octacable"
+0x11fe 0x000c "unknown" "Comtrol Corp.|RocketPort 8-port Modem"
+0x11fe 0x000d "unknown" "Comtrol Corp.|RocketPort"
+0x11fe 0x000e "unknown" "Comtrol Corp.|RocketPort Plus 2 port RS232"
+0x11fe 0x000f "unknown" "Comtrol Corp.|RocketPort Plus 2 port RS422"
+0x11fe 0x0801 "unknown" "Comtrol Corp.|RocketPort UPCI 32 port w/external I/F"
+0x11fe 0x0802 "unknown" "Comtrol Corp.|RocketPort UPCI 8 port w/external I/F"
+0x11fe 0x0803 "unknown" "Comtrol Corp.|RocketPort UPCI 16 port w/external I/F"
+0x11fe 0x0805 "unknown" "Comtrol Corp.|RocketPort UPCI 8 port w/octa cable"
+0x11fe 0x080c "unknown" "Comtrol Corp.|RocketModem III 8 port"
+0x11fe 0x080d "unknown" "Comtrol Corp.|RocketModem III 4 port"
+0x11fe 0x0812 "unknown" "Comtrol Corp.|RocketPort UPCI Plus 8 port RS422"
+0x11fe 0x0903 "unknown" "Comtrol Corp.|RocketPort Compact PCI 16 port w/external I/F"
+0x11fe 0x8015 "unknown" "Comtrol Corp.|RocketPort 4-port UART 16954"
+0x11ff 0x0003 "unknown" "Scion Corp.|AG-5"
+0x1200 0x8201 "adm8211" "Pinnacle|"
+0x1200 0xbd11 "bttv" "Pinnacle|PCTV Rave"
+0x1202 0x0001 "unknown" "Network General Corp.|NAIATMPCI PCI ATM Adapter"
+0x1202 0x4300 "unknown" "Network General Corp.|Gigabit Ethernet Adapter"
+0x1208 0x4853 "unknown" "Parsytec GmbH|HS-Link Device"
+0x120e 0x0100 "unknown" "Cyclades Corp.|Cyclom_Y below first megabyte"
+0x120e 0x0101 "unknown" "Cyclades Corp.|Cyclom_Y above first megabyte"
+0x120e 0x0102 "unknown" "Cyclades Corp.|Cyclom_4Y below first megabyte"
+0x120e 0x0103 "unknown" "Cyclades Corp.|Cyclom_4Y above first megabyte"
+0x120e 0x0104 "unknown" "Cyclades Corp.|Cyclom_8Y below first megabyte"
+0x120e 0x0105 "unknown" "Cyclades Corp.|Cyclom_8Y above first megabyte"
+0x120e 0x0200 "unknown" "Cyclades Corp.|Cyclom_Z below first megabyte"
+0x120e 0x0201 "unknown" "Cyclades Corp.|Cyclom_Z above first megabyte"
+0x120e 0x0300 "pc300" "Cyclades Corp.|PC300 RX 2"
+0x120e 0x0301 "pc300" "Cyclades Corp.|PC300 RX 1"
+0x120e 0x0302 "unknown" "Cyclades Corp.|PC300 TE 2"
+0x120e 0x0303 "unknown" "Cyclades Corp.|PC300 TE 1"
+0x120e 0x0310 "pc300" "Cyclades Corp.|PC300 TE 2"
+0x120e 0x0311 "pc300" "Cyclades Corp.|PC300 TE 1"
+0x120e 0x0320 "pc300" "Cyclades Corp.|PC300/TE-M (2 ports)"
+0x120e 0x0321 "pc300" "Cyclades Corp.|PC300/TE-M (1 port)"
+0x120e 0x0400 "unknown" "Cyclades Corp.|PC400"
+0x120f 0x0001 "rrunner" "Essential Communications|Roadrunner serial HIPPI"
+0x1217 0x00f7 "unknown" "O2 Micro, Inc.|Firewire (IEEE 1394)"
+0x1217 0x6729 "yenta_socket" "O2Micro Inc.|6729"
+0x1217 0x673a "yenta_socket" "O2Micro Inc.|6730"
+0x1217 0x6832 "yenta_socket" "O2Micro Inc.|6832"
+0x1217 0x6836 "yenta_socket" "O2Micro Inc.|6836"
+0x1217 0x6872 "yenta_socket" "O2Micro Inc.|6872"
+0x1217 0x6925 "yenta_socket" "O2Micro Inc.|OZ6922 CardBus Controller"
+0x1217 0x6933 "yenta_socket" "O2Micro Inc.|OZ6933 Cardbus Controller"
+0x1217 0x6972 "yenta_socket" "O2Micro Inc.|OZ6912 CardBus Controller"
+0x1217 0x7110 "yenta_socket" "O2Micro Inc.|OZ711Mx MultiMediaBay Accelerator"
+0x1217 0x7112 "yenta_socket" "O2Micro Inc.|OZ711EC1/M1 SmartCardBus MultiMediaBay Controller"
+0x1217 0x7113 "yenta_socket" "O2Micro Inc.|OZ711EC1 SmartCardBus Controller"
+0x1217 0x7114 "yenta_socket" "O2Micro Inc.|OZ711M1 SmartCardBus MultiMediaBay Controller"
+0x1217 0x7120 "unknown" "O2 Micro, Inc.|Integrated MMC/SD Controller"
+0x1217 0x7130 "unknown" "O2 Micro, Inc.|Integrated MS/xD Controller"
+0x1217 0x7134 "yenta_socket" "O2Micro Inc.|OZ711MP1/MS1 MemoryCardBus Controller"
+0x1217 0x7135 "unknown" "O2 Micro, Inc.|Cardbus bridge"
+0x1217 0x71e2 "yenta_socket" "O2Micro Inc.|OZ711E2 SmartCardBus Controller"
+0x1217 0x7212 "yenta_socket" "O2Micro Inc.|OZ711M2 SmartCardBus MultiMediaBay Controller"
+0x1217 0x7213 "yenta_socket" "O2Micro Inc.|OZ6933E CardBus Controller"
+0x1217 0x7223 "yenta_socket" "O2Micro Inc.|OZ711M3 SmartCardBus MultiMediaBay Controller"
+0x1217 0x7233 "yenta_socket" "O2Micro Inc.|OZ711MP3/MS3 4-in-1 MemoryCardBus Controller"
+0x121a 0x0001 "Card:Voodoo Graphics" "3Dfx Interactive Inc.|Voodoo"
+0x121a 0x0002 "Card:Voodoo II" "3Dfx Interactive Inc.|Voodoo 2"
+0x121a 0x0003 "Card:Voodoo Banshee (generic)" "3Dfx Interactive Inc.|Voodoo Banshee"
+0x121a 0x0004 "Card:Voodoo Banshee (generic)" "3Dfx Interactive Inc.|Voodoo Banshee [Velocity 100]"
+0x121a 0x0005 "Card:Voodoo3 (generic)" "3Dfx Interactive Inc.|Voodoo 3"
+0x121a 0x0007 "Card:Voodoo4 (generic)" "3dfx Interactive Inc.|Voodoo4"
+0x121a 0x0009 "Card:Voodoo5 (generic)" "3Dfx Interactive Inc.|Voodoo 4 / Voodoo 5"
+0x121a 0x0010 "unknown" "3dfx Interactive Inc.|Rampage Rev.A AGPx4, 0.25µm, 200/2x200 core/RAM"
+0x121a 0x0057 "unknown" "3Dfx Interactive Inc.|Voodoo 3/3000 [Avenger]"
+0x121e 0x0201 "unknown" "CSPI|Myrinet 2000 Scalable Cluster Interconnect"
+0x1220 0x1220 "unknown" "Ariel Corp.|AMCC 5933 TMS320C80 DSP/Imaging board"
+0x1223 0x0003 "unknown" "Artesyn Communication Products|PM/Link"
+0x1223 0x0004 "unknown" "Artesyn Communication Products|PM/T1"
+0x1223 0x0005 "unknown" "Artesyn Communication Products|PM/E1"
+0x1223 0x0008 "unknown" "Artesyn Communication Products|PM/SLS"
+0x1223 0x0009 "unknown" "Artesyn Communication Products|BajaSpan Resource Target"
+0x1223 0x000a "unknown" "Artesyn Communication Products|BajaSpan Section 0"
+0x1223 0x000b "unknown" "Artesyn Communication Products|BajaSpan Section 1"
+0x1223 0x000c "unknown" "Artesyn Communication Products|BajaSpan Section 2"
+0x1223 0x000d "unknown" "Artesyn Communication Products|BajaSpan Section 3"
+0x1223 0x000e "unknown" "Artesyn Communication Products|PM/PPC"
+0x1227 0x0006 "unknown" "Tech-Source|Raptor GFX 8P"
+0x1227 0x0023 "unknown" "Tech-Source|Raptor GFX [1100T]"
+0x122d 0x1206 "unknown " "Aztech System Ltd.|368DSP"
+0x122d 0x1400 "unknown" "Aztech System Ltd.|Trident PCI288-Q3DII (NX)"
+0x122d 0x4201 "unknown" "Aztech System Ltd.|MR2800W AMR 56K modem"
+0x122d 0x50dc "snd-azt3328" "Aztech System Ltd.|3328 Audio"
+0x122d 0x80da "snd-azt3328" "Aztech System Ltd.|3328 Audio (AZF3328, PCI168)"
+0x1236 0x0000 "unknown" "Sigma Designs Corp.|RealMagic64/GX"
+0x1236 0x6401 "unknown" "Sigma Designs Corp.|REALmagic 64/GX (SD 6425)"
+0x123d 0x0000 "unknown" "Engineering Design Team Inc.|EasyConnect 8/32"
+0x123d 0x0002 "unknown" "Engineering Design Team Inc.|EasyConnect 8/64"
+0x123d 0x0003 "unknown" "Engineering Design Team Inc.|EasyIO"
+0x123d 0x0010 "unknown" "Engineering Design Team Inc.|PCI-DV PCI-DV Digital Video Interface"
+0x123f 0x00e4 "unknown" "C-Cube Microsystems|MPEG"
+0x123f 0x6120 "unknown" "C-Cube Microsystems|DVD device"
+0x123f 0x8120 "unknown" "C-Cube Microsystems|E4?"
+0x123f 0x8888 "unknown" "C-Cube Microsystems|Cinemaster C 3.0 DVD Decoder"
+0x1242 0x1460 "unknown" "JNI Corp.|JNIC-1460 2-Gb/s Fibre Channel-PCI 64-bit 66 MHz"
+0x1242 0x1560 "unknown" "JNI Corp.|JNIC-1560 Dual Channel 2 Gb/s Fibre Channel-PCI-X"
+0x1242 0x4643 "unknown" "Jaycor Networks Inc.|FCI-1063 Fibre Channel Adapter"
+0x1242 0x6562 "unknown" "JNI Corp.|FCX2-6562 Dual Channel PCI-X Fibre Channel Adapter"
+0x1242 0x656a "unknown" "JNI Corp.|FCX-6562 PCI-X Fibre Channel Adapter"
+0x1244 0x0700 "ISDN:b1pci,type=27" "AVM Audiovisuelles|B1 ISDN Adapter"
+0x1244 0x0800 "ISDN:c4" "AVM AUDIOVISUELLES MKTG & Computer GmbH|C4 ISDN Controller"
+0x1244 0x0a00 "ISDN:hisax,type=27" "AVM Audiovisuelles|A1 ISDN Adapter [Fritz]"
+0x1244 0x0e00 "ISDN:hisax_fcpcipnp" "AVM Audiovisuelles|A1 ISDN Adapter [Fritz]"
+0x1244 0x0f00 "ISDN:capidrv" "AVM Audiovisuelles|Fritz DSL ISDN/DSL Adapter"
+0x1244 0x1100 "ISDN:c4" "AVM Audiovisuelles|C2 ISDN Controller"
+0x1244 0x1200 "ISDN:t1pci" "AVM Audiovisuelles|T1 pci adapter"
+0x1244 0x2700 "ISDN:fcdslsl,type=,firmware:fdssbase.bin" "AVM Audiovisuelles|Fritz!Card DSL SL"
+0x1244 0x2900 "ISDN:fcdsl2,type=,firmware:fds2base.bin" "AVM Audiovisuelles|Fritz!Card DSL SL Ver. 2.0"
+0x124b 0x0001 "8250_pci" "Stallion Technologies Inc.|PCI Serial Port"
+0x124b 0x0040 "unknown" "Stallion Technologies Inc.|cPCI-200 Four Slot IndustryPack carrier"
+0x124d 0x0000 "unknown" "Stallion Technologies Inc.|EasyConnection 8/32"
+0x124d 0x0002 "unknown" "Stallion Technologies Inc.|EasyConnection 8/64"
+0x124d 0x0003 "unknown" "Stallion Technologies Inc.|EasyIO"
+0x124d 0x0004 "istallion" "Stallion Technologies Inc.|EasyConnection/RA"
+0x124f 0x0041 "unknown" "Infotrend Technology Inc.|IFT-2000 Series RAID Controller"
+0x1250 0x1978 "unknown" "Hitachi Microcomputer System Ltd.| "
+0x1250 0x2898 "unknown" "Hitachi Microcomputer System Ltd.| "
+0x1255 0x1110 "unknown" "Optibase Ltd.|MPEG Forge"
+0x1255 0x1210 "unknown" "Optibase Ltd.|MPEG Fusion"
+0x1255 0x2110 "unknown" "Optibase Ltd.|VideoPlex"
+0x1255 0x2120 "unknown" "Optibase Ltd.|VideoPlex CC"
+0x1255 0x2130 "unknown" "Optibase Ltd.|VideoQuest"
+0x1256 0x4201 "pci2220i" "Perceptive Solutions Inc.|PCI-2220I"
+0x1256 0x4401 "pci2220i" "Perceptive Solutions Inc.|PCI-2240I"
+0x1256 0x5201 "pci2000" "Perceptive Solutions Inc.|PCI-2000"
+0x1258 0x1988 "unknown" "Gilbarco Inc.| "
+0x1259 0x2503 "unknown" "Allied Telesyn International|Realtek 8139b"
+0x1259 0x2560 "eepro100" "Allied Telesyn International|AT-2560 Fast Ethernet Adapter (i82557B)"
+0x1259 0xa117 "8139too" "Allied Telesyn International|RTL8139 CardBus"
+0x1259 0xa11e "8139too" "Allied Telesyn International|RTL81xx Fast Ethernet"
+0x1259 0xa120 "tulip" "Allied Telesyn International|21x4x DEC-Tulip compatible 10/100 Ethernet"
+0x125b 0x1400 "tulip" "ASIX|AX88140"
+0x125c 0x0101 "unknown" "Aurora Technologies Inc.|Saturn 4520P"
+0x125c 0x0640 "unknown" "Aurora Technologies Inc.|Aries 16000P"
+0x125d 0x0000 "unknown" "ESS Technology|ES336H Fax Modem (Early Model)"
+0x125d 0x1948 "maestro" "ESS Technology|ES1948 Maestro 1"
+0x125d 0x1968 "radio-maestro" "ESS Technology|ES1968 Maestro 2"
+0x125d 0x1969 "snd-es1938" "ESS Technology|ES1969 Solo-1 Audiodrive"
+0x125d 0x1978 "radio-maestro" "ESS Technology|ES1978 Maestro 2E"
+0x125d 0x1988 "maestro3" "ESS Technology|ES1988 Allegro-1"
+0x125d 0x1989 "snd-maestro3" "ESS Technology|ESS Modem"
+0x125d 0x1990 "snd-maestro3" "ESS Technology|Canyon3D-2"
+0x125d 0x1992 "snd-maestro3" "ESS Technology|Canyon3D-2"
+0x125d 0x1998 "snd-maestro3" "ESS Technology|ES1983S Maestro-3i PCI Audio Accelerator"
+0x125d 0x1999 "snd-maestro3" "ESS Technology|ES1983S Maestro-3i PCI Modem Accelerator"
+0x125d 0x199a "maestro3" "ESS Technology|Maestro-3"
+0x125d 0x199b "snd-maestro3" "ESS Technology|ES1983S Maestro-3i PCI Modem Accelerator"
+0x125d 0x2808 "unknown" "ESS Technology|ES336H Fax Modem (Later Model)"
+0x125d 0x2838 "Bad:www.linmodems.org" "ESS Technology|ES2838/2839 SuperLink Modem"
+0x125d 0x2898 "unknown" "ESS Technology|ES2898 Modem"
+0x1260 0x3872 "orinoco_pci" "Intersil Corp.|Prism 2.5 Wavelan chipset"
+0x1260 0x3873 0x1186 0x3501 "orinoco_pci" "Intersil Corp.|DWL-520 Wireless PCI Adapter"
+0x1260 0x3873 0x1186 0x3700 "hostap_pci" "Intersil Corp.|ISL3874A PRISMII.5 IEE802.11B Wireless LAN"
+0x1260 0x3873 0x1385 0x4105 "orinoco_pci" "Intersil Corp.|MA311 802.11b wireless adapter"
+0x1260 0x3873 0x1668 0x0414 "orinoco_pci" "Intersil Corp.|HWP01170-01 802.11b PCI Wireless Adapter"
+0x1260 0x3873 0x16a5 0x1601 "orinoco_pci" "Intersil Corp.|AIR.mate PC-400 PCI Wireless LAN Adapter"
+0x1260 0x3873 0x1737 0x3874 "orinoco_pci" "Intersil Corp.|WMP11 Wireless 802.11b PCI Adapter"
+0x1260 0x3873 0x8086 0x2513 "orinoco_pci" "Intersil Corp.|Wireless 802.11b MiniPCI Adapter"
+0x1260 0x3873 "orinoco_pci" "Intersil Corp.|ISL3874A PRISMII.5 IEE802.11B Wireless LAN"
+0x1260 0x3877 "prism54" "Intersil Corp.|Prism Indigo Wavelan chipset"
+0x1260 0x3886 "prism54" "Intersil Corp.|ISL3886 [Prism Javelin/Prism Xbow]"
+0x1260 0x3890 "prism54" "Intersil Corp.|PRISM GT 802.11g 54Mbps Wireless Controller"
+0x1260 0x8130 "unknown" "Intersil Corp.|HMP8130 NTSC/PAL Video Decoder"
+0x1260 0x8131 "unknown" "Intersil Corp.|HMP8131 NTSC/PAL Video Decoder"
+0x1260 0xffff "unknown" "Intersil Corp.|ISL3886IK"
+0x1266 0x0001 "eepro100" "Microdyne Corp.|NE10/100 Adapter (i82557B)"
+0x1266 0x1910 "unknown" "Microdyne Corp.|NE2000Plus (RT8029) Ethernet Adapter"
+0x1267 0x1016 "ISDN:hisax,type=24" "S. A. Telecommunications|Dr. Neuhaus Niccy PCI ISDN Adapter"
+0x1267 0x4243 "unknown" "S.A. Telecommunications|Satellite receiver board / MPEG2 decoder"
+0x1267 0x5352 "unknown" "S. A. Telecommunications|PCR2101"
+0x1267 0x5a4b "unknown" "S. A. Telecommunications|Telsat Turbo"
+0x126c 0x1211 "8139too" "Northern Telecom|10/100BaseTX [RTL81xx]"
+0x126c 0x126c "unknown" "Northern Telecom|802.11b Wireless Ethernet Adapter"
+0x126c 0x1f1f "unknown" "Nortel Networks Corp.|e-mobility 802.11b Wireless LAN PCI Card"
+0x126c 0x8030 "hostap_plx" "Mitani Corp.|emobility"
+0x126f 0x0501 "unknown" "Silicon Motion Inc.|SM501 VoyagerGX"
+0x126f 0x0510 "unknown" "Silicon Motion, Inc.|SM501 VoyagerGX Rev. B"
+0x126f 0x0710 "Card:Silicon Motion LynxEM (generic)" "Silicon Motion Inc.|Lynx EM MS710"
+0x126f 0x0712 "Card:Silicon Motion Lynx (generic)" "Silicon Motion Inc.|SM712 LynxEM+"
+0x126f 0x0720 "Card:Silicon Motion Lynx (generic)" "Silicon Motion Inc.|SM720 Lynx3DM"
+0x126f 0x0730 "Card:Silicon Motion Lynx (generic)" "Silicon Motion Inc.|SM731 Cougar3DR"
+0x126f 0x0810 "Card:Silicon Motion Lynx (generic)" "Silicon Motion Inc.|SM810"
+0x126f 0x0811 "Card:Silicon Motion Lynx (generic)" "Silicon Motion Inc.|SM811 LynxE"
+0x126f 0x0820 "Card:Silicon Motion Lynx (generic)" "Silicon Motion Inc.|SM820 Lynx3D"
+0x126f 0x0910 "Card:Silicon Motion Lynx (generic)" "Silicon Motion Inc.|SM910"
+0x1273 0x0002 "unknown" "Hughes Network Systems|DirecPC"
+0x1274 0x0000 "unknown" "Ensoniq|es1370 audio pci"
+0x1274 0x1171 "unknown" "Ensoniq|ES1373 [AudioPCI] (also Creative Labs CT5803)"
+0x1274 0x1274 "unknown" "Ensoniq|5880 multimedia audio device"
+0x1274 0x1371 "snd-ens1371" "Creative Labs|Sound Blaster AudioPCI64V/AudioPCI128"
+0x1274 0x1373 "unknown" "Ensoniq|ES1373 Sound Blaster Audio(PCI)"
+0x1274 0x5000 "snd-ens1370" "Ensoniq|ES1370 [AudioPCI]"
+0x1274 0x5580 "snd-ens1371" "Ensoniq|ES1371 [AudioPCI]"
+0x1274 0x5880 "snd-ens1371" "Ensoniq|CT5880"
+0x1274 0x9876 "unknown" "Ensoniq| "
+0x1278 0x0701 "unknown" "Transtech Parallel Systems|TPE3/TM3 PowerPC Node"
+0x1278 0x0710 "unknown" "Transtech Parallel Systems Ltd.|TPE5 PowerPC PCI board"
+0x1279 0x0060 "unknown" "Transmeta Corp.|TM8000 Northbridge"
+0x1279 0x0061 "unknown" "Transmeta Corp.|TM8000 AGP bridge"
+0x1279 0x0295 "unknown" "Transmeta Corp.|Virtual Northbridge"
+0x1279 0x0395 "unknown" "Transmeta Corp.|LongRun Northbridge"
+0x1279 0x0396 "unknown" "Transmeta Corp.|SDRAM controller"
+0x1279 0x0397 "unknown" "Transmeta Corp.|BIOS scratchpad"
+0x127a 0x1002 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k V90 FaxModem"
+0x127a 0x1003 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k V90 FaxModem"
+0x127a 0x1004 0x1048 0x1500 "8250_pci" "Rockwell International|MicroLink 56k Modem"
+0x127a 0x1004 0x10cf 0x1059 "Hcf:www.linmodems.org" "Rockwell International|Fujitsu 229-DFRT"
+0x127a 0x1004 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k V90 FaxModem"
+0x127a 0x1005 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k V90 FaxModem"
+0x127a 0x1022 "Hcf:www.linmodems.org" "Conexant Systems|HCF V.90 Modem"
+0x127a 0x1023 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k Data/Fax Modem"
+0x127a 0x1024 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k Data/Fax/Voice Modem"
+0x127a 0x1025 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k PCI Modem"
+0x127a 0x1026 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k PCI Speakerphone Modem"
+0x127a 0x1032 "Hcf:www.linmodems.org" "Conexant Systems|HCF 56k PCI Modem"
+0x127a 0x1033 "Hcf:www.linmodems.org" "Conexant Systems|HCF P85 DATA/FAX PCI Modem"
+0x127a 0x1034 "Hcf:www.linmodems.org" "Conexant Systems|HCF 56k PCI Modem"
+0x127a 0x1035 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k PCI Speakerphone Modem"
+0x127a 0x1036 "Hcf:www.linmodems.org" "Conexant Systems|HCF 56k PCI Modem"
+0x127a 0x1085 "Hcf:www.linmodems.org" "Rockwell International|Volcano HCF 56k PCI Modem"
+0x127a 0x2004 "unknown" "Conexant Systems|SoftK56VB2.1V2.08.02 K56 modem"
+0x127a 0x2005 "Hcf:www.linmodems.org" "Rockwell International|HCF 56k V90 FaxModem"
+0x127a 0x2013 "Hsf:www.linmodems.org" "Rockwell International|HSF 56k Data/Fax Modem"
+0x127a 0x2014 "Hsf:www.linmodems.org" "Rockwell International|HSF 56k Data/Fax/Voice Modem"
+0x127a 0x2015 "unknown" "Rockwell International|Conexant SoftK56 Speakerphone Modem"
+0x127a 0x2016 "Hsf:www.linmodems.org" "Rockwell International|HSF 56k Data/Fax/Voice/Spkp Modem"
+0x127a 0x2114 "unknown" "Conexant Systems|R6793-11 Soft 56K Data, Fax, PCI modem"
+0x127a 0x2f00 "unknown" "Conexant Systems|cx11252-11 HSF 56k HSFi"
+0x127a 0x4310 "snd-riptide" "Conexant Systems|123456 Master Riptide PCI Audio Device"
+0x127a 0x4311 "Hsf:www.linmodems.org" "Rockwell International|Riptide HSF 56k PCI Modem"
+0x127a 0x4312 "unknown" "Conexant Systems|Riptide PCI Game Controller"
+0x127a 0x4320 "snd-riptide" "Rockwell Semiconductor Systems|Master Riptide PCI Audio Controller"
+0x127a 0x4321 "Hcf:www.linmodems.org" "Rockwell Semiconductor Systems|HCF 56k Data Fax PCI Modem"
+0x127a 0x4322 "unknown" "Rockwell Semiconductor Systems|Riptide PCI Game Controller"
+0x127a 0x4330 "snd-riptide" "Rockwell Semiconductor Systems|Master Riptide PCI Audio Controller"
+0x127a 0x4340 "snd-riptide" "Rockwell Semiconductor Systems|Master Riptide PCI Audio Controller"
+0x127a 0x5278 "unknown" "Conexant Systems|Harmonic DVB Network Adapter"
+0x127a 0x8234 "unknown" "Rockwell International|RapidFire 616X ATM155 Adapter"
+0x1282 0x9009 "dmfe" "Davicom|Ethernet Adpater"
+0x1282 0x9100 "dmfe" "Davicom|DM9100"
+0x1282 0x9102 "dmfe" "Davicom|Ethernet 100/10 MBit DM9102"
+0x1282 0x9132 "dmfe" "Davicom|Ethernet Adapter"
+0x1283 0x0801 "unknown" "Integrated Technology Express Inc.|IT8152F/G Audio Digital Controller"
+0x1283 0x673a "unknown" "Integrated Technology Express Inc.|IT8330G"
+0x1283 0x8152 "unknown" "Integrated Technology Express Inc.|IT8152F/G Advanced RISC-to-PCI Companion Chip"
+0x1283 0x8172 "pata_it8172" "Integrated Technology Express Inc.|IT8172G Ultra RISC (MIPS, SH4) Companion Chip"
+0x1283 0x8211 "it821x" "Integrated Technology Express Inc.|IT8211 RAID Controller"
+0x1283 0x8212 "it821x" "Integrated Technology Express Inc.|IT8212 RAID Controller"
+0x1283 0x8330 "unknown" "Integrated Technology Express Inc.|IT8330G"
+0x1283 0x8872 "unknown" "Integrated Technology Express Inc.|IT8871/72 PCI to ISA I/O chip"
+0x1283 0x8875 "unknown" "Integrated Technology Express Inc.|IT8875F PCI Parallel Port"
+0x1283 0x8888 "unknown" "Integrated Technology Express Inc.|IT8888F PCI to ISA Bridge with SMB"
+0x1283 0x8889 "unknown" "Integrated Technology Express Inc.|IT8889F PCI to ISA Bridge"
+0x1283 0x9876 "unknown" "Integrated Technology Express Inc.|IT8875F PCI I/O CARD"
+0x1283 0xe886 "unknown" "Integrated Technology Express Inc.|IT8330G"
+0x1285 0x0100 "maestro" "Platform Technologies Inc.|AGOGO sound chip (aka ESS Maestro 1)"
+0x1287 0x001e "unknown" "M-Pact Inc.|LS220D DVD Decoder"
+0x1287 0x001f "unknown" "M-Pact Inc.|LS220C DVD Decoder"
+0x1287 0x0020 "unknown" "LuxSonor Inc.|LS242 MPEG/DVD video decoder"
+0x1289 0x1006 "unknown" "AVC Technology Inc.| "
+0x128a 0xf001 "unknown" "Asante Technologies Inc.|Ethernet 10/100 AsanteFAST 10/100 PCI Ethernet Adapter"
+0x128d 0x0021 "unknown" "G2 Networks Inc.|ATM155 Adapter"
+0x128e 0x0008 "sam9407" "Hoontech Corp./Samho Multi Tech Ltd.|ST128 WSS/SB"
+0x128e 0x0009 "unknown" "Hoontech Corp./Samho Multi Tech Ltd.|ST128 SAM9407"
+0x128e 0x000a "unknown" "Hoontech Corp./Samho Multi Tech Ltd.|ST128 Game Port"
+0x128e 0x000b "unknown" "Hoontech Corp./Samho Multi Tech Ltd.|ST128 MPU Port"
+0x128e 0x000c "unknown" "Hoontech Corp./Samho Multi Tech Ltd.|ST128 Ctrl Port"
+0x1292 0xfc02 "unknown" "Tritech Microelectronics|Pyramid3D TR25202"
+0x129a 0x0415 "unknown" "VMETRO Inc.|PBT-415 PCI 66MHz Analyzer and 33MHz Exerciser"
+0x129a 0x0515 "unknown" "VMETRO Inc.|PBT-515 PCI 66MHz Analyzer and Exerciser"
+0x129a 0x0615 "unknown" "VMETRO Inc.|0001 PCI Exerciser Chip"
+0x129a 0x0715 "unknown" "VMETRO Inc.|Vanguard PCI/PMC/cPCI PCI 66MHz and PCI-X 133MHz Bus Analyzer and Exerciser"
+0x129a 0xdd10 "unknown" "VMETRO Inc.|DPIO Digital Parallel Input Output Device 32bit, 33MHz PCI bus"
+0x129a 0xdd11 "unknown" "VMETRO Inc.|DPIO2 Digital Parallel Input Output Device 64bit, 33MHz PCI bus"
+0x129a 0xdd12 "unknown" "VMETRO Inc.|DPIO2-66 Digital Parallel Input Output Device 64bit, 66MHz PCI bus"
+0x12a3 0x8105 "unknown" "Lucent Technologies|T8105 H100 Digital Switch"
+0x12a3 0xecb8 "unknown" "Lucent Technologies|1646T00"
+0x12aa 0x556c "unknown" "SDL Communications Inc.|NAI HSSI Sniffer PCI Adapter"
+0x12ab 0x0000 "unknown" "Yuan Yuan Enterprise Co. Ltd.|MPG160/Kuroutoshikou ITVC15-STVLP"
+0x12ab 0x0002 "unknown" "Yuan Yuan Enterprise Co. Ltd.|AU8830 [Vortex2] Based Sound Card With A3D Support"
+0x12ab 0x3000 "unknown" "Yuan Yuan Enterprise Co Ltd.|MPG-200C PCI DVD Decoder Card"
+0x12ab 0xfff3 "unknown" "Yuan Yuan Enterprise Co. Ltd.|MPG600/Kuroutoshikou ITVC16-STVLP"
+0x12ab 0xffff "unknown" "Yuan Yuan Enterprise Co. Ltd.|MPG600/Kuroutoshikou ITVC16-STVLP"
+0x12ae 0x0001 "acenic" "Alteon Networks Inc.|AceNIC Gigabit Ethernet"
+0x12ae 0x0002 "acenic" "Alteon Networks Inc.|AceNIC Gigabit Ethernet (Copper)"
+0x12ae 0x00fa "acenic" "Alteon Networks Inc.|AceNIC PN9100T Fast Ethernet (Copper)"
+0x12b2 0x0209 "unknown" "General Signal Networks|SNA Link/9000 PCI to ESCON Controller"
+0x12b9 0x0062 "unknown" "US Robotics|erk41926a-0.6 usr 56k internal modem"
+0x12b9 0x1006 "Bad:www.linmodems.org" "US Robotics|WinModem"
+0x12b9 0x1007 "Bad:www.linmodems.org" "US Robotics|USR 56k Internal WinModem"
+0x12b9 0x1008 "unknown" "US Robotics|56K FaxModem Model 5610"
+0x12ba 0x0032 "unknown" "Bittware Inc.|Hammerhead-Lite-PCI DSP Prototyping & Development Card"
+0x12be 0x3041 "unknown" "Anchor Chips Inc.|AN3041Q CO-MEM"
+0x12be 0x3042 "unknown" "Anchor Chips Inc.|AN3042Q CO-MEM Lite"
+0x12c1 0x9080 "unknown" "GMM Research Corp.|Sync4hs/CCP/PCI/MP Communications Processor"
+0x12c3 0x0058 "ne2k-pci" "Holtek Microelectronics Inc.|Ethernet Adapter"
+0x12c3 0x5598 "ne2k-pci" "Holtek Microelectronics Inc.|Ethernet Adapter"
+0x12c4 0x0001 "unknown" "Connect Tech Inc.|Blue Heat PCI/8 RS-232"
+0x12c4 0x0002 "unknown" "Connect Tech Inc.|Blue Heat PCI/4 RS-232"
+0x12c4 0x0003 "unknown" "Connect Tech Inc.|Blue Heat PCI/2 RS-232"
+0x12c4 0x0004 "unknown" "Connect Tech Inc.|Blue Heat PCI/8 RS-485"
+0x12c4 0x0005 "unknown" "Connect Tech Inc.|Blue Heat PCI/4+4 RS-232/485"
+0x12c4 0x0006 "unknown" "Connect Tech Inc.|Blue Heat PCI/4 RS-485"
+0x12c4 0x0007 "unknown" "Connect Tech Inc.|Blue Heat PCI/2+2 RS-232/485"
+0x12c4 0x0008 "unknown" "Connect Tech Inc.|Blue Heat PCI/2 RS-485"
+0x12c4 0x0009 "unknown" "Connect Tech Inc.|Blue Heat PCI/2+6 RS-232/485"
+0x12c4 0x000a "unknown" "Connect Tech Inc.|Blue Heat PCI/8 RS-485 (BH081101V1)"
+0x12c4 0x000b "unknown" "Connect Tech Inc.|Blue Heat PCI/4 RS-485 (BH041101V1)"
+0x12c4 0x000c "unknown" "Connect Tech Inc.|Blue HEAT/PCI 2 (20 MHz, RS485)"
+0x12c4 0x000d "unknown" "Connect Tech Inc.|Blue HEAT/PCI 2 PTM"
+0x12c4 0x000e "unknown" "Connect Tech Inc.| "
+0x12c4 0x000f "unknown" "Connect Tech Inc.| "
+0x12c4 0x0100 "unknown" "Connect Tech Inc.|NT960/PCI"
+0x12c4 0x0201 "unknown" "Connect Tech Inc.|cPCI Titan - 2 Port"
+0x12c4 0x0202 "unknown" "Connect Tech Inc.|cPCI Titan - 4 Port"
+0x12c4 0x0300 "unknown" "Connect Tech Inc.|CTI PCI UART 2 (RS232)"
+0x12c4 0x0301 "unknown" "Connect Tech Inc.|CTI PCI UART 4 (RS232)"
+0x12c4 0x0302 "unknown" "Connect Tech Inc.|CTI PCI UART 8 (RS232)"
+0x12c4 0x0303 "unknown" "Connect Tech Inc.| "
+0x12c4 0x0304 "unknown" "Connect Tech Inc.| "
+0x12c4 0x0305 "unknown" "Connect Tech Inc.| "
+0x12c4 0x0306 "unknown" "Connect Tech Inc.| "
+0x12c4 0x0307 "unknown" "Connect Tech Inc.| "
+0x12c4 0x0308 "unknown" "Connect Tech Inc.| "
+0x12c4 0x0309 "unknown" "Connect Tech Inc.| "
+0x12c4 0x030a "unknown" "Connect Tech Inc.| "
+0x12c4 0x030b "unknown" "Connect Tech Inc.| "
+0x12c4 0x0310 "unknown" "Connect Tech Inc.|CTI PCI UART 1+1 (RS232/485)"
+0x12c4 0x0311 "unknown" "Connect Tech Inc.|CTI PCI UART 2+2 (RS232/485)"
+0x12c4 0x0312 "unknown" "Connect Tech Inc.|CTI PCI UART 4+4 (RS232/485)"
+0x12c4 0x0320 "unknown" "Connect Tech Inc.|CTI PCI UART 2"
+0x12c4 0x0321 "unknown" "Connect Tech Inc.|CTI PCI UART 4"
+0x12c4 0x0322 "unknown" "Connect Tech Inc.|CTI PCI UART 8"
+0x12c4 0x0330 "unknown" "Connect Tech Inc.|CTI PCI UART 2 (RS485)"
+0x12c4 0x0331 "unknown" "Connect Tech Inc.|CTI PCI UART 4 (RS485)"
+0x12c4 0x0332 "unknown" "Connect Tech Inc.|CTI PCI UART 8 (RS485)"
+0x12c5 0x007e "unknown" "Picture Elements Incorporated|Imaging/Scanning Subsystem Engine"
+0x12c5 0x007f "unknown" "Picture Elements Inc.|ISE PEI Imaging Subsystem Engine"
+0x12c5 0x0081 "unknown" "Picture Elements Incorporated|PCIVST [Grayscale Thresholding Engine]"
+0x12c5 0x0085 "unknown" "Picture Elements Incorporated|Video Simulator/Sender"
+0x12c5 0x0086 "unknown" "Picture Elements Incorporated|THR2 Multi-scale Thresholder"
+0x12c7 0x0546 "unknown" "Dialogic Corp.|D120JCT-LS Card"
+0x12c7 0x0561 "unknown" "Dialogic Corp.|BRI/2 Type Card (Voice Driver)"
+0x12c7 0x0647 "unknown" "Dialogic Corp.|D/240JCT-T1 Card"
+0x12c7 0x0648 "unknown" "Dialogic Corp.|D/300JCT-E1 Card"
+0x12c7 0x0649 "unknown" "Dialogic Corp.|D/300JCT-E1 Card"
+0x12c7 0x0651 "unknown" "Dialogic Corp.|MSI PCI Card"
+0x12c7 0x0673 "unknown" "Dialogic Corp.|BRI/160-PCI Card"
+0x12c7 0x0674 "unknown" "Dialogic Corp.|BRI/120-PCI Card"
+0x12c7 0x0675 "unknown" "Dialogic Corp.|BRI/80-PCI Card"
+0x12c7 0x0676 "unknown" "Dialogic Corp.|D/41JCT Card"
+0x12c7 0x0685 "unknown" "Dialogic Corp.|D/480JCT-2T1 Card"
+0x12c7 0x0687 "unknown" "Dialogic Corp.|D/600JCT-2E1 (75 Ohm) Card"
+0x12c7 0x0689 "unknown" "Dialogic Corp.|D/600JCT-2E1 Dialogic 2E1 - JCT series"
+0x12c7 0x0707 "unknown" "Dialogic Corp.|D/320JCT (Resource Only) Card"
+0x12c7 0x0708 "unknown" "Dialogic Corp.|D/160JCT (Resource Only) Card"
+0x12cb 0x0027 "unknown" "Antex Electronics Corp.|StudioCard"
+0x12cb 0x002d "unknown" "Antex Electronics Corp.|BX-12"
+0x12cb 0x002e "unknown" "Antex Electronics Corp.|SC-2000"
+0x12cb 0x002f "unknown" "Antex Electronics Corp.|LX-44"
+0x12cb 0x0030 "unknown" "Antex Electronics Corp.|SC-22"
+0x12cb 0x0031 "unknown" "Antex Electronics Corp.|BX-44"
+0x12cb 0x0032 "unknown" "Antex Electronics Corp.|LX-24M 20-bit 2-in, 4-out audio card w/MPEG-2"
+0x12cb 0x0033 "unknown" "Antex Electronics Corp.|LX-22M"
+0x12cb 0x0034 "unknown" "Antex Electronics Corp.|BX-8"
+0x12cb 0x0035 "unknown" "Antex Electronics Corp.|BX-12e"
+0x12d2 0x0008 "Card:RIVA128" "nVidia / SGS Thomson|NV1"
+0x12d2 0x0009 "Card:RIVA128" "nVidia / SGS Thomson|DAC64"
+0x12d2 0x0018 "Card:RIVA128" "nVidia / SGS Thomson|Riva128"
+0x12d2 0x0019 "Card:RIVA128" "nVidia / SGS Thomson|Riva128ZX"
+0x12d2 0x0020 "Card:RIVA TNT" "nVidia / SGS Thomson|TNT"
+0x12d2 0x0028 "Card:RIVA TNT2" "nVidia / SGS Thomson|TNT2"
+0x12d2 0x0029 "Card:RIVA TNT2" "nVidia / SGS Thomson|UTNT2"
+0x12d2 0x002a "unknown" "nVidia / SGS Thomson|NV5 Riva TNT2"
+0x12d2 0x002b "unknown" "nVidia / SGS Thomson|NV5 Riva TNT2"
+0x12d2 0x002c "Card:RIVA TNT2" "nVidia / SGS Thomson|VTNT2"
+0x12d2 0x002d "Card:RIVA TNT2" "nVidia / SGS Thomson|NVM64 Riva TNT2 Model 64"
+0x12d2 0x002e "unknown" "nVidia / SGS Thomson|NV6 Vanta"
+0x12d2 0x002f "unknown" "nVidia / SGS Thomson|NV6 Vanta"
+0x12d2 0x00a0 "Card:RIVA TNT2" "nVidia / SGS Thomson|ITNT2"
+0x12d4 0x0200 "unknown" "Ulticom (Formerly DGM&S)|T1 Card"
+0x12d5 0x0003 "unknown" "Equator Technologies Inc.|BSP16"
+0x12d5 0x1000 "unknown" "Equator Technologies|MAP-CA Broadband Signal Processor"
+0x12d5 0x1002 "unknown" "Equator Technologies|MAP-1000 Digital Signal Processor"
+0x12d8 0x71e2 "unknown" "Pericom Semiconductor|PI7C7300 3 Port PCI to PCI bridge"
+0x12d8 0x8150 "unknown" "Pericom Semiconductor|PI7C8150 2-Port PCI to PCI Bridge"
+0x12d9 0x0002 "unknown" "Aculab PLC|PCI Prosody"
+0x12d9 0x0004 "unknown" "Aculab PLC|cPCI Prosody"
+0x12d9 0x0005 "unknown" "Aculab PLC|Aculab E1/T1 PCI card"
+0x12d9 0x1078 "unknown" "Aculab PLC|Prosody X class e1000 device"
+0x12db 0x0003 "unknown" "Annapolis Micro Systems Inc.|FoxFire II"
+0x12de 0x0200 "unknown" "Rainbow Technologies|Cryptoswift 200"
+0x12e0 0x0010 "unknown" "Chase Research|ST16C654 Quad UART"
+0x12e0 0x0020 "unknown" "Chase Research|ST16C654 Quad UART"
+0x12e0 0x0021 "unknown" "Chase Research|8x UART"
+0x12e0 0x0030 "unknown" "Chase Research|ST16C654 Quad UART"
+0x12e4 0x1140 "unknown" "Brooktrout Technology Inc.|ISDN Controller"
+0x12eb 0x0001 "snd-au8820" "Aureal Semiconductor|Vortex 1"
+0x12eb 0x0002 "snd-au8830" "Aureal Semiconductor|Vortex 2"
+0x12eb 0x0003 "snd-au8810" "Aureal Semiconductor|AU8810 Vortex Digital Audio Processor"
+0x12eb 0x8803 "unknown" "Aureal Semiconductor|Vortex 56k Software Modem"
+0x12f8 0x0002 "unknown" "Electronic Design GmbH|VideoMaker"
+0x12fb 0x0001 "unknown" "Spectrum Signal Processing|PMC-MAI"
+0x12fb 0x00f5 "unknown" "Spectrum Signal Processing|F5 Dakar"
+0x12fb 0x02ad "unknown" "Spectrum Signal Processing|PMC-2MAI"
+0x12fb 0x2adc "unknown" "Spectrum Signal Processing|ePMC-2ADC"
+0x12fb 0x3100 "unknown" "Spectrum Signal Processing|PRO-3100"
+0x12fb 0x3500 "unknown" "Spectrum Signal Processing|PRO-3500"
+0x12fb 0x4d4f "unknown" "Spectrum Signal Processing|Modena"
+0x12fb 0x8120 "unknown" "Spectrum Signal Processing|ePMC-8120"
+0x12fb 0xda62 "unknown" "Spectrum Signal Processing|Daytona C6201 PCI (Hurricane)"
+0x12fb 0xdb62 "unknown" "Spectrum Signal Processing|Ingliston XBIF"
+0x12fb 0xdc62 "unknown" "Spectrum Signal Processing|Ingliston PLX9054"
+0x12fb 0xdd62 "unknown" "Spectrum Signal Processing|Ingliston JTAG/ISP"
+0x12fb 0xeddc "unknown" "Spectrum Signal Processing|ePMC-MSDDC"
+0x12fb 0xfa01 "unknown" "Spectrum Signal Processing|ePMC-FPGA"
+0x12fc 0x5cec "cec_gpib" ""
+0x1303 0x0001 "unknown" "Innovative Integration|cM67 CompactPCI DSP Card"
+0x1307 0x0001 "unknown" "Computer Boards|PCI-DAS1602/16"
+0x1307 0x0006 "cb7210" "Computer Boards|PCI-GPIB"
+0x1307 0x000b "unknown" "Computer Boards|PCI-DIO48H"
+0x1307 0x000c "unknown" "Computer Boards|PCI-PDISO8"
+0x1307 0x000d "unknown" "Computer Boards|PCI-PDISO16"
+0x1307 0x000e "cb7210" ""
+0x1307 0x000f "unknown" "Computer Boards|PCI-DAS1200"
+0x1307 0x0010 "unknown" "Computer Boards|PCI-DAS1602/12"
+0x1307 0x0014 "unknown" "Computer Boards|PCI-DIO24H"
+0x1307 0x0015 "unknown" "Computer Boards|PCI-DIO24H/CTR3"
+0x1307 0x0016 "unknown" "Computer Boards|PCI-DIO48H/CTR15"
+0x1307 0x0017 "unknown" "Computer Boards|PCI-DIO96H"
+0x1307 0x0018 "unknown" "Computer Boards|PCI-CTR05"
+0x1307 0x0019 "unknown" "Computer Boards|PCI-DAS1200/JR"
+0x1307 0x001a "unknown" "Computer Boards|PCI-DAS1001"
+0x1307 0x001b "unknown" "Computer Boards|PCI-DAS1002"
+0x1307 0x001c "unknown" "Computer Boards|PCI-DAS1602JR/16"
+0x1307 0x001d "unknown" "Computer Boards|PCI-DAS6402/16"
+0x1307 0x001e "unknown" "Computer Boards|PCI-DAS6402/12"
+0x1307 0x001f "unknown" "Computer Boards|PCI-DAS16/M1"
+0x1307 0x0020 "unknown" "Computer Boards|PCI-DDA02/12"
+0x1307 0x0021 "unknown" "Computer Boards|PCI-DDA04/12"
+0x1307 0x0022 "unknown" "Computer Boards|PCI-DDA08/12"
+0x1307 0x0023 "unknown" "Computer Boards|PCI-DDA02/16"
+0x1307 0x0024 "unknown" "Computer Boards|PCI-DDA04/16"
+0x1307 0x0025 "unknown" "Computer Boards|PCI-DDA08/16"
+0x1307 0x0026 "unknown" "Computer Boards|PCI-DAC04/12-HS"
+0x1307 0x0027 "unknown" "Computer Boards|PCI-DAC04/16-HS"
+0x1307 0x0028 "unknown" "Computer Boards|PCI-DIO24"
+0x1307 0x0029 "unknown" "Computer Boards|PCI-DAS08"
+0x1307 0x002c "unknown" "Computer Boards|PCI-INT32"
+0x1307 0x0033 "unknown" "Computer Boards|PCI-DUAL-AC5"
+0x1307 0x0034 "unknown" "Computer Boards|PCI-DAS-TC"
+0x1307 0x0035 "unknown" "Computer Boards|PCI-DAS64/M1/16"
+0x1307 0x0036 "unknown" "Computer Boards|PCI-DAS64/M2/16"
+0x1307 0x0037 "unknown" "Computer Boards|PCI-DAS64/M3/16"
+0x1307 0x004c "unknown" "Computer Boards|PCI-DAS1000"
+0x1307 0x004d "unknown" "Computer Boards|PCI-QUAD04"
+0x1307 0x0052 "unknown" "Measurement Computing|PCI-DAS4020/12"
+0x1307 0x0054 "unknown" "Measurement Computing|PCI-DIO96"
+0x1307 0x005e "unknown" "Measurement Computing|PCI-DAS6025"
+0x1308 0x0001 "unknown" "Jato Technologies Inc.|NetCelerator Adapter"
+0x1310 0x0003 "unknown" "Gespac|9060 CompactPCI Interface"
+0x1310 0x000d "unknown" "Gespac|FPGA PCI Bridge"
+0x1317 0x0531 "unknown" "ADMtek Inc.| "
+0x1317 0x0981 "tulip" "ADMtek Inc.|AN981 Comet"
+0x1317 0x0985 "tulip" "ADMtek Inc.|ADM983 Linksys EtherFast 10/100"
+0x1317 0x1985 "tulip" "ADMtek Inc.|ADM985 10/100 cardbus ethernet controller"
+0x1317 0x2850 "unknown" "ADMtek Inc.|??? HSP56 MicroModem"
+0x1317 0x5120 "unknown" "Linksys|ADMtek ADM5120 OpenGate System-on-Chip"
+0x1317 0x8201 "adm8211" "Admtek Inc.|ADM8201 Wireless Adapter"
+0x1317 0x8211 "adm8211" "Admtek Inc.|ADM8211 Wireless Adapter"
+0x1317 0x9511 "tulip" "Admtek Inc.|ADM9511 cardbus ethernet-modem controller"
+0x1317 0x9513 "unknown" "Admtek Inc.|ADM9513 cardbus ethernet-modem controller"
+0x1318 0x0911 "hamachi" "Packet Engines Inc.|PCI Ethernet Adapter"
+0x1319 0x0801 "snd-fm801" "Fortemedia Inc.|Xwave QS3000A [FM801]"
+0x1319 0x0802 "fm801-gp" "Fortemedia Inc.|Xwave QS3000A [FM801 game port]"
+0x1319 0x1000 "snd-fm801" "Fortemedia Inc.|FM801 PCI Audio"
+0x1319 0x1001 "unknown" "Fortemedia Inc.|FM801 PCI Joystick"
+0x131f 0x1000 "8250_pci" "Siig Inc.|CyberSerial (1-port) 16550"
+0x131f 0x1001 "8250_pci" "Siig Inc.|CyberSerial (1-port) 16650"
+0x131f 0x1002 "8250_pci" "Siig Inc.|CyberSerial (1-port) 16850"
+0x131f 0x1010 "parport_serial" "Siig Inc.|Duet 1S(16550)+1P"
+0x131f 0x1011 "parport_serial" "Siig Inc.|Duet 1S(16650)+1P"
+0x131f 0x1012 "parport_serial" "Siig Inc.|Duet 1S(16850)+1P"
+0x131f 0x1020 "unknown" "Siig Inc.|CyberParallel (1-port)"
+0x131f 0x1021 "unknown" "Siig Inc.|CyberParallel (2-port)"
+0x131f 0x1030 "8250_pci" "Siig Inc.|CyberSerial (2-port) 16550"
+0x131f 0x1031 "8250_pci" "Siig Inc.|CyberSerial (2-port) 16650"
+0x131f 0x1032 "8250_pci" "Siig Inc.|CyberSerial (2-port) 16850"
+0x131f 0x1034 "parport_serial" "Siig Inc.|Trio 2S(16550)+1P"
+0x131f 0x1035 "parport_serial" "Siig Inc.|Trio 2S(16650)+1P"
+0x131f 0x1036 "parport_serial" "Siig Inc.|Trio 2S(16850)+1P"
+0x131f 0x1050 "8250_pci" "Siig Inc.|CyberSerial (4-port) 16550"
+0x131f 0x1051 "8250_pci" "Siig Inc.|CyberSerial (4-port) 16650"
+0x131f 0x1052 "8250_pci" "Siig Inc.|CyberSerial (4-port) 16850"
+0x131f 0x2000 "8250_pci" "Siig Inc.|CyberSerial (1-port) 16550"
+0x131f 0x2001 "8250_pci" "Siig Inc.|CyberSerial (1-port) 16650"
+0x131f 0x2002 "8250_pci" "Siig Inc.|CyberSerial (1-port) 16850"
+0x131f 0x2010 "parport_serial" "Siig Inc.|Duet 1S(16550)+1P"
+0x131f 0x2011 "parport_serial" "Siig Inc.|Duet 1S(16650)+1P"
+0x131f 0x2012 "parport_serial" "Siig Inc.|Duet 1S(16850)+1P"
+0x131f 0x2020 "unknown" "Siig Inc.|CyberParallel (1-port)"
+0x131f 0x2021 "unknown" "Siig Inc.|CyberParallel (2-port)"
+0x131f 0x2030 "8250_pci" "Siig Inc.|CyberSerial (2-port) 16550"
+0x131f 0x2031 "8250_pci" "Siig Inc.|CyberSerial (2-port) 16650"
+0x131f 0x2032 "8250_pci" "Siig Inc.|CyberSerial (2-port) 16850"
+0x131f 0x2040 "parport_serial" "Siig Inc.|Trio 1S(16550)+2P"
+0x131f 0x2041 "parport_serial" "Siig Inc.|Trio 1S(16650)+2P"
+0x131f 0x2042 "parport_serial" "Siig Inc.|Trio 1S(16850)+2P"
+0x131f 0x2050 "8250_pci" "Siig Inc.|CyberSerial (4-port) 16550"
+0x131f 0x2051 "8250_pci" "Siig Inc.|CyberSerial (4-port) 16650"
+0x131f 0x2052 "8250_pci" "Siig Inc.|CyberSerial (4-port) 16850"
+0x131f 0x2060 "parport_serial" "Siig Inc.|Trio 2S(16550)+1P"
+0x131f 0x2061 "parport_serial" "Siig Inc.|Trio 2S(16650)+1P"
+0x131f 0x2062 "parport_serial" "Siig Inc.|Trio 2S(16850)+1P"
+0x131f 0x2080 "8250_pci" ""
+0x131f 0x2081 "8250_pci" "Siig Inc.|CyberSerial (8-port) ST16654"
+0x131f 0x2082 "8250_pci" ""
+0x1328 0x2048 "unknown" "Quadrant International| "
+0x1331 0x0030 "unknown" "Radisys Corp.|ENP-2611"
+0x1331 0x8200 "r82600_edac" "Radisys Corp.|82600 Host Bridge"
+0x1331 0x8201 "pata_radisys" "Radisys Corp.|82600 IDE"
+0x1331 0x8202 "unknown" "Radisys Corp.|82600 USB"
+0x1331 0x8210 "unknown" "Radisys Corp.|82600 PCI Bridge"
+0x1332 0x5415 "umem" "Micro Memory|MM-5415CN PCI Memory Module with Battery Backup"
+0x1332 0x5425 "umem" "Micro Memory|MM-5425CN PCI 64/66 Memory Module with Battery Backup"
+0x1332 0x6140 "unknown" "Micro Memory|MM-6140D"
+0x1332 0x6155 "umem" "Micro Memory|"
+0x133d 0x1000 "unknown" "Prisa Networks|SST-5136-PFB-PCI Industrial I/O Card"
+0x1344 0x3240 "unknown" "Micron Technology Inc.|CopperHead CopperTail SC1 AMC AC97"
+0x1344 0x3320 "unknown" "Micron Technology Inc.|MT8LLN21PADF North Bridge"
+0x1344 0x3470 "unknown" "Micron Technology Inc.|MT7LLN22NCNE South Bridge"
+0x1344 0x4020 "unknown" "Micron Technology Inc.|CopperHead CopperTail SC1 IDE Controller"
+0x1344 0x4030 "unknown" "Micron Technology Inc.|CopperHead CopperTail SC1 USB Controller"
+0x134a 0x0001 "dmx3191d" "DTC Technology Corp.|Domex 536"
+0x134a 0x0002 "dtc" "DTC Technology Corp.|Domex DMX3194UP SCSI Adapter"
+0x134a 0x3510 0xafff 0xffff "unknown" "DTC Technology Corp.|DTC50C18 scsi"
+0x134d 0x2189 "unknown" "PCTel Inc.|HSP56 MicroModem"
+0x134d 0x2486 "unknown" "PCTEL Inc.|2304WT V.92 MDC Modem"
+0x134d 0x7890 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x7891 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x7892 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x7893 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x7894 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x7895 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x7896 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x7897 "unknown" "Pctel Inc.|HSP MicroModem 56"
+0x134d 0x8086 "unknown" "PCTEL Inc.| "
+0x134d 0x9714 "unknown" "PCTEL Inc.|PCT 288-1A PCTEL"
+0x134d 0xd800 "unknown" "PCTEL Inc.|pct388p-a pctel 56k modem"
+0x1353 0x0002 "unknown" "Thales Idatys|Proserver"
+0x1353 0x0003 "unknown" "Thales Idatys|PCI-FUT"
+0x1353 0x0004 "unknown" "Thales Idatys|PCI-S0"
+0x1353 0x0005 "unknown" "Thales Idatys|PCI-FUT-S0"
+0x135a 0x0224 "unknown" "Brain Boxes Limited|PLX9050 PLX PCI Bus Logic"
+0x135c 0x0010 "8250_pci" "Quatech Inc.|QSC 100"
+0x135c 0x0020 "8250_pci" "Quatech Inc.|DSC 100"
+0x135c 0x0030 "unknown" "Quatech Inc.|DSC 200"
+0x135c 0x0040 "unknown" "Quatech Inc.|QSC 200"
+0x135c 0x0050 "8250_pci" "Quatech Inc.|ESC 100D"
+0x135c 0x0060 "8250_pci" "Quatech Inc.|ESC 100M"
+0x135c 0x00f0 "unknown" "Quatech Inc.|MPAC-100 Syncronous Serial Card (Zilog 85230)"
+0x135c 0x0170 "unknown" "Quatech Inc.|QSCLP-100"
+0x135c 0x0180 "unknown" "Quatech Inc.|DSCLP-100"
+0x135c 0x0190 "unknown" "Quatech Inc.|SSCLP-100"
+0x135c 0x01a0 "unknown" "Quatech Inc.|QSCLP-200/300"
+0x135c 0x01b0 "unknown" "Quatech Inc.|DSCLP-200/300"
+0x135c 0x01c0 "unknown" "Quatech Inc.|SSCLP-200/300"
+0x135e 0x5101 "unknown" "Sealevel Systems Inc.|5101 Route 56"
+0x135e 0x7101 "8250_pci" "Sealevel Systems Inc.|Single Port RS-232/422/485/530"
+0x135e 0x7201 "8250_pci" "Sealevel Systems Inc.|Dual Port RS-232/422/485 Interface"
+0x135e 0x7202 "8250_pci" "Sealevel Systems Inc.|Dual Port RS-232 Interface"
+0x135e 0x7401 "8250_pci" "Sealevel Systems Inc.|Four Port RS-232 Interface"
+0x135e 0x7402 "8250_pci" "Sealevel Systems Inc.|Four Port RS-422/485 Interface"
+0x135e 0x7801 "8250_pci" "Sealevel Systems Inc.|Eight Port RS-232 Interface"
+0x135e 0x7804 "8250_pci" "Sealevel Systems Inc.|PCI Serial Port"
+0x135e 0x8001 "unknown" "Sealevel Systems Inc.|8001 Digital I/O Adapter"
+0x1360 0x0101 "unknown" "Meinberg Funkuhren|PCI32 DCF77 Radio Clock"
+0x1360 0x0102 "unknown" "Meinberg Funkuhren|PCI509 DCF77 Radio Clock"
+0x1360 0x0103 "unknown" "Meinberg Funkuhren|PCI510 DCF77 Radio Clock"
+0x1360 0x0104 "unknown" "Meinberg Funkuhren|PCI511 DCF77 Radio Clock"
+0x1360 0x0201 "unknown" "Meinberg Funkuhren|GPS167PCI GPS Receiver"
+0x1360 0x0202 "unknown" "Meinberg Funkuhren|GPS168PCI GPS Receiver"
+0x1360 0x0203 "unknown" "Meinberg Funkuhren|GPS169PCI GPS Receiver"
+0x1360 0x0204 "unknown" "Meinberg Funkuhren|GPS170PCI GPS Receiver"
+0x1360 0x0301 "unknown" "Meinberg Funkuhren|TCR510PCI IRIG Receiver"
+0x1360 0x0302 "unknown" "Meinberg Funkuhren|TCR167PCI IRIG Timecode Reader"
+0x1360 0x0303 "unknown" "Meinberg Funkuhren|TCR511PCI IRIG Timecode Reader"
+0x1365 0x9050 "ISDN:hysdn" "Hypercope Corp.|HYSDN"
+0x136a 0x0004 "unknown" "High Soft Tech|HST Saphir VII mini PCI"
+0x136a 0x0007 "unknown" "High Soft Tech|HST Saphir III E MultiLink 4"
+0x136a 0x0008 "unknown" "High Soft Tech|HST Saphir III E MultiLink 8"
+0x136a 0x000a "unknown" "High Soft Tech|HST Saphir III E MultiLink 2"
+0x136b 0xff01 "meye" "Kawasaki Steel Corp.|MEYE Video Adapter"
+0x1371 0x434e "skge" "CNet Technology Inc.|GigaCard Network Adapter"
+0x1374 0x0024 "unknown" "Silicom Ltd.|Silicom Dual port Giga Ethernet BGE Bypass Server Adapter"
+0x1374 0x0025 "unknown" "Silicom Ltd.|Silicom Quad port Giga Ethernet BGE Bypass Server Adapter"
+0x1374 0x0026 "unknown" "Silicom Ltd.|Silicom Dual port Fiber Giga Ethernet 546 Bypass Server Adapter"
+0x1374 0x0027 "unknown" "Silicom Ltd.|Silicom Dual port Fiber LX Giga Ethernet 546 Bypass Server Adapter"
+0x1374 0x0029 "unknown" "Silicom Ltd.|Silicom Dual port Copper Giga Ethernet 546GB Bypass Server Adapter"
+0x1374 0x002a "unknown" "Silicom Ltd.|Silicom Dual port Fiber Giga Ethernet 546 TAP/Bypass Server Adapter"
+0x1374 0x002b "unknown" "Silicom Ltd.|Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter"
+0x1374 0x002c "unknown" "Silicom Ltd.|Silicom Quad port Copper Giga Ethernet 546GB Bypass Server Adapter"
+0x1374 0x002d "unknown" "Silicom Ltd.|Silicom Quad port Fiber-SX Giga Ethernet 546GB Bypass Server Adapter"
+0x1374 0x002e "unknown" "Silicom Ltd.|Silicom Quad port Fiber-LX Giga Ethernet 546GB Bypass Server Adapter"
+0x1374 0x002f "unknown" "Silicom Ltd.|Silicom Dual port Fiber-SX Giga Ethernet 546GB Low profile Bypass Server Adapter"
+0x1374 0x0030 "unknown" "Silicom Ltd.|Silicom Dual port Fiber-LX Giga Ethernet 546GB Low profile Bypass Server Adapter"
+0x1374 0x0031 "unknown" "Silicom Ltd.|Silicom Quad port Copper Giga Ethernet PCI-E Bypass Server Adapter"
+0x1374 0x0032 "unknown" "Silicom Ltd.|Silicom Dual port Copper Fast Ethernet 546 TAP/Bypass Server Adapter"
+0x1374 0x0034 "unknown" "Silicom Ltd.|Silicom Dual port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter"
+0x1374 0x0035 "unknown" "Silicom Ltd.|Silicom Quad port Copper Giga Ethernet PCI-E BGE Bypass Server Adapter"
+0x1374 0x0036 "unknown" "Silicom Ltd.|Silicom Dual port Fiber Giga Ethernet PCI-E BGE Bypass Server Adapter"
+0x1374 0x0037 "unknown" "Silicom Ltd.|Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter"
+0x1374 0x0038 "unknown" "Silicom Ltd.|Silicom Quad port Copper Ethernet PCI-E Intel based Bypass Server Adapter"
+0x1374 0x0039 "unknown" "Silicom Ltd.|Silicom Dual port Fiber-SX Ethernet PCI-E Intel based Bypass Server Adapter"
+0x1374 0x003a "unknown" "Silicom Ltd.|Silicom Dual port Fiber-LX Ethernet PCI-E Intel based Bypass Server Adapter"
+0x137a 0x0001 "unknown" "Mark of the Unicorn Inc.|PCI-324 Audiowire Interface"
+0x1382 0x0001 "unknown" "Marian - Electronic & Software|ARC88 audio recording card"
+0x1382 0x2008 "unknown" "Marian - Electronic & Software|Prodif 96 Pro sound system"
+0x1382 0x2048 "unknown" "Marian - Electronic & Software|Prodif Plus sound card"
+0x1382 0x2088 "unknown" "Marian - Electronic & Software|Marc-8 MIDI 8 channel audio card"
+0x1382 0x20c8 "unknown" "Marian - Electronic & Software|Marc A sound system"
+0x1382 0x4008 "unknown" "Marian - Electronic & Software|Marc 2 sound system"
+0x1382 0x4010 "unknown" "Marian - Electronic & Software|Marc 2 Pro sound system"
+0x1382 0x4048 "unknown" "Marian - Electronic & Software|Marc 4 MIDI sound system"
+0x1382 0x4088 "unknown" "Marian - Electronic & Software|Marc 4 Digi sound system"
+0x1382 0x4248 "unknown" "Marian - Electronic & Software|Marc X sound system"
+0x1382 0x4424 "unknown" "Marian - Electronic & Software|TRACE D4 Sound System"
+0x1385 0x0013 "unknown" "Netgear|WG311T"
+0x1385 0x311a "unknown" "Netgear|GA511 Gigabit Ethernet"
+0x1385 0x3872 "prism2_pci" "Netgear|"
+0x1385 0x4100 "orinoco_plx" "Netgear|802.11b Wireless Adapter (MA301)"
+0x1385 0x4105 "unknown" "Netgear|MA311 802.11b wireless adapter"
+0x1385 0x4251 "unknown" "Netgear|WG111T 108 Mbps Wireless USB 2.0 Adapter"
+0x1385 0x4400 "unknown" "Netgear|WAG511 802.11a/b/g Dual Band Wireless PC Card"
+0x1385 0x4600 "unknown" "Netgear|WAG511 802.11a/b/g Dual Band Wireless PC Card"
+0x1385 0x4601 "unknown" "Netgear|WAG511 802.11a/b/g Dual Band Wireless PC Card"
+0x1385 0x4610 "unknown" "Netgear|WAG511 802.11a/b/g Dual Band Wireless PC Card"
+0x1385 0x4800 "unknown" "Netgear|WG511(v1) 54 Mbps Wireless PC Card"
+0x1385 0x4900 "unknown" "Netgear|WG311v1 54 Mbps Wireless PCI Adapter"
+0x1385 0x4a00 "unknown" "Netgear|WAG311 802.11abg Wireless Adapter"
+0x1385 0x4b00 "unknown" "Netgear|WG511T 108 Mbps Wireless PC Card"
+0x1385 0x4c00 "unknown" "Netgear|WG311v2 54 Mbps Wireless PCI Adapter"
+0x1385 0x4d00 "unknown" "Netgear|WG311T 108 Mbps Wireless PCI Adapter"
+0x1385 0x4e00 "unknown" "Netgear|WG511v2 54 Mbps Wireless PC Card"
+0x1385 0x4f00 "unknown" "Netgear|WG511U Double 108 Mbps Wireless PC Card"
+0x1385 0x5200 "unknown" "Netgear|GA511 Gigabit PC Card"
+0x1385 0x620a "acenic" "Netgear|GA620"
+0x1385 0x622a "unknown" "Netgear|GA622"
+0x1385 0x630a "acenic" "Netgear|GA630"
+0x1385 0x6b00 "unknown" "Netgear|WG311v3 54 Mbps Wireless PCI Adapter"
+0x1385 0x6d00 "unknown" "Netgear|WPNT511 RangeMax™ 240 Mbps Wireless PC Card"
+0x1385 0x7b00 "unknown" "Netgear|WN511B RangeMax Next 280 Mbps Wireless PC Card"
+0x1385 0x7c00 "unknown" "Netgear|WN511T RangeMax Next 300 Mbps Wireless PC Card"
+0x1385 0x7d00 "unknown" "Netgear|WN311B RangeMax Next 270 Mbps Wireless PCI Adapter"
+0x1385 0x7e00 "unknown" "Netgear|WN311T RangeMax Next 300 Mbps Wireless PCI Adapter"
+0x1385 0xf004 "unknown" "Netgear|FA310TX"
+0x1385 0xf311 "unknown" "Netgear|FA311"
+0x1385 0xf312 "unknown" "Netgear| "
+0x1389 0x0001 "applicom" "Applicom International|PCI1500PFB [Intelligent fieldbus adaptor]"
+0x1389 0x0002 "applicom" "Applicom International|"
+0x1389 0x0003 "applicom" "Applicom International|"
+0x1393 0x0001 "mxser" "Moxa Technologies Co Ltd.|"
+0x1393 0x1001 "mxser" "Moxa Technologies Co Ltd.|"
+0x1393 0x1010 "unknown" "Moxa Technologies Co Ltd.| "
+0x1393 0x1020 "mxser" "Moxa Technologies Co Ltd.| "
+0x1393 0x1021 "mxser" "Moxa Technologies Co Ltd.|"
+0x1393 0x1022 "mxser" "Moxa Technologies Co Ltd.|"
+0x1393 0x1040 "mxser" "Moxa Technologies Co Ltd.|Smartio C104H/PCI"
+0x1393 0x1041 "mxser" "Moxa Technologies Co Ltd.| "
+0x1393 0x1042 "mxser" "Moxa Technologies Co Ltd.| "
+0x1393 0x1080 "mxser" "Moxa Technologies Co Ltd.|"
+0x1393 0x1140 "mxser" "Moxa Technologies Co Ltd.|"
+0x1393 0x1141 "mxser" "Moxa Technologies Co Ltd.|Industrio CP-114"
+0x1393 0x1180 "mxser" "Moxa Technologies Co Ltd.|"
+0x1393 0x1320 "mxser" "Moxa Technologies Co Ltd.|CP-132 Industio"
+0x1393 0x1321 "mxser" "Moxa Technologies Co Ltd.| "
+0x1393 0x1340 "mxser" "Moxa Technologies Co Ltd.| "
+0x1393 0x1401 "unknown" "Moxa Technologies Co Ltd.| "
+0x1393 0x1680 "mxser" "Moxa Technologies Co Ltd.|Smartio C168H/PCI"
+0x1393 0x1681 "mxser" "Moxa Technologies Co Ltd.| "
+0x1393 0x2040 "moxa" "Moxa Technologies Co Ltd.|Intellio CP-204J"
+0x1393 0x2180 "moxa" "Moxa Technologies Co Ltd.|Intellio C218 Turbo PCI"
+0x1393 0x3200 "moxa" "Moxa Technologies Co Ltd.|Intellio C320 Turbo PCI"
+0x1393 0x5020 "unknown" "Moxa Technologies Co Ltd.| "
+0x1394 0x0001 "unknown" "Level One Communications|LXT1001 Gigabit Ethernet"
+0x1397 0x08b4 "ISDN:hfc4s8s_l1" "Cologne Chip Designs GmbH|ISDN network Controller [HFC-4S]"
+0x1397 0x0b4d "unknown" "Cologne Chip Designs GmbH|HFC-8S 16B8D8S0 ISDN HDLC FIFO Controller"
+0x1397 0x16b8 "ISDN:hfc4s8s_l1" "Cologne Chip Designs GmbH|ISDN network Controller [HFC-8S]"
+0x1397 0x2bd0 "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0x30b1 "ISDN:hfc4s8s_l1" ""
+0x1397 0x8b4d "unknown" "Cologne Chip Designs GmbH|HFC-4S ISDN 8B4D4S0 ISDN HDLC FIFO Controller"
+0x1397 0xa003 0x1397 0xa003 "xhfc" ""
+0x1397 0xb000 "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb006 "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb007 "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb008 "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb009 "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb00a "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb00b "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb00c "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb100 "ISDN:hisax,type=35" "Cologne Chip Designs|ISDN network controller [HFC-PCI]"
+0x1397 0xb700 "ISDN:hisax" ""
+0x1397 0xb701 "ISDN:hisax" ""
+0x139a 0x0001 "unknown" "Alacritech Inc.|Quad Port 10/100 Server Accelerator"
+0x139a 0x0003 "unknown" "Alacritech Inc.|Single Port 10/100 Server Accelerator"
+0x139a 0x0005 "unknown" "Alacritech Inc.|Single Port Gigabit Server Accelerator"
+0x13a3 0x0005 "unknown" "HI-FN Inc.|7751 Security Processor"
+0x13a3 0x0006 "unknown" "HI-FN Inc.|6500 Public Key Processor"
+0x13a3 0x0007 "unknown" "HI-FN Inc.|7811 Security Processor"
+0x13a3 0x0012 "unknown" "HI-FN Inc.|7951 Security Processor"
+0x13a3 0x0014 "unknown" "HI-FN Inc.|78XX Security Processor"
+0x13a3 0x0016 "unknown" "HI-FN Inc.|8065 Security Processor"
+0x13a3 0x0017 "unknown" "HI-FN Inc.|8165 Security Processor"
+0x13a3 0x0018 "unknown" "HI-FN Inc.|8154 Security Processor"
+0x13a3 0x001d "unknown" "HI-FN Inc.|7956 Security Processor"
+0x13a3 0x0020 "unknown" "HI-FN Inc.|7955 Security Processor"
+0x13a3 0x0026 "unknown" "HI-FN Inc.|8155 Security Processor"
+0x13a8 0x0152 "8250_pci" "Exar Corp.|XR17C152 PCI Bus Quad UART"
+0x13a8 0x0154 "8250_pci" "Exar Corp.|XR17C154 PCI Bus Quad UART"
+0x13a8 0x0158 "8250_pci" "Exar Corp.|XR17C158 PCI Bus Octal UART"
+0x13c0 0x0010 "synclink" "Microgate Corp.|SyncLink WAN Adapter"
+0x13c0 0x0020 "unknown" "Microgate Corp.|SyncLink SCC Adapter"
+0x13c0 0x0030 "synclinkmp" "Microgate Corp.|SyncLink Multiport Adapter"
+0x13c0 0x0070 "synclink_gt" ""
+0x13c0 0x0080 "synclink_gt" ""
+0x13c0 0x0090 "synclink_gt" ""
+0x13c0 0x0210 "synclink" "Microgate Corp.|SyncLink Adapter v2"
+0x13c1 0x1000 "3w-xxxx" "3ware Inc.|3ware ATA-RAID"
+0x13c1 0x1001 "3w-xxxx" "3ware Inc.|3ware 7000-series ATA-RAID"
+0x13c1 0x1002 "3w-9xxx" "3ware Inc.|3ware 9XXX-series ATA-RAID"
+0x13c1 0x1003 "3w-9xxx" "3ware Inc.|3ware 9XXX-series ATA-RAID"
+0x13c2 0x000e "unknown" "Technotrend Systemtechnik GmbH|Technotrend/Hauppauge DVB card rev2.3"
+0x13c6 0x0520 "unknown" "Condor Engineering Inc.|CEI-520 A429 Card"
+0x13c6 0x0620 "unknown" "Condor Engineering Inc.|CEI-620 A429 Card"
+0x13c6 0x0820 "unknown" "Condor Engineering Inc.|CEI-820 A429 Card"
+0x13c7 0x0adc "unknown" "Blue Chip Technology Ltd.|Multi-Function Analogue/Digital IO card"
+0x13d0 0x2103 "b2c2-flexcop-pci" "B2C2 Inc.|T228502 B2C2 Sky2PC Core Chip"
+0x13d0 0x2200 "skystar2" "Techsan Electronics Co Ltd.|B2C2 FlexCopIII DVB chip / Technisat SkyStar2 DVB card"
+0x13d1 0x2bd1 "ISDN:hisax" "Abocom Systems Inc.|ISDN Adapter"
+0x13d1 0xab02 "tulip" "Abocom Systems Inc.|Ethernet Adapter"
+0x13d1 0xab03 "tulip" "Abocom Systems Inc.|Ethernet Adapter"
+0x13d1 0xab06 "8139too" "Abocom Systems Inc.|FE2000VX CardBus /Atelco Fibreline Ethernet Adptr"
+0x13d1 0xab08 "tulip" "Abocom Systems Inc.|Ethernet Adapter"
+0x13d7 0x8086 "unknown" "Toshiba Engineering Corp.|ac97 note"
+0x13df 0x0001 "unknown" "E-Tech Inc.|PCI56RVP Modem"
+0x13ea 0x3131 "unknown" "Dallas Semiconductor|DS3131 BoSS Bit Synchronous HDLC Controller"
+0x13ea 0x3134 "unknown" "Dallas Semiconductor|DS3134 Chateau Channelized T1/E1/HDLC Controller"
+0x13eb 0x0070 "bttv" "Hauppauge|WinTV"
+0x13ec 0x000a "unknown" "Zydacron Inc|NPC-RC01 Remote control receiver"
+0x13f0 0x0200 "sundance" "Sundance Technology Inc / IC Plus Corp|IC Plus IP100A Integrated 10/100 Ethernet MAC + PHY"
+0x13f0 0x0201 "sundance" "Sundance Technology Inc.|ST201 Fast Ehternet Adapter"
+0x13f0 0x1023 "unknown" "Sundance Technology Inc.|IC Plus IP1000 Family Gigabit Ethernet"
+0x13f4 0x1401 "unknown" "Troika Networks Inc.|Zentai Fibre Channel Adapter"
+0x13f6 0x0011 "unknown" "C-Media Electronics Inc.|CMI8738"
+0x13f6 0x0100 "snd-cmipci" "C-Media Electronics Inc.|CM8338A"
+0x13f6 0x0101 "snd-cmipci" "C-Media Electronics Inc.|CM8338B"
+0x13f6 0x0111 "snd-cmipci" "C-Media Electronics Inc.|CM8738"
+0x13f6 0x0112 "snd-cmipci" "C-Media Electronics Inc.||MI-8378B/PCI-6CH PCI Audio Chip"
+0x13f6 0x0211 "snd-cmipci" "C-Media Electronics Inc.|CM8738"
+0x13fe 0x1240 "unknown" "Advantech Co. Ltd.|PCI-1240-A 4-Axis Stepping/Servo Motor Card"
+0x13fe 0x1600 "unknown" "Advantech Co. Ltd.|PCI-1612 4-port RS-232/422/485 PCI Communication Card"
+0x13fe 0x16ff "unknown" "Advantech Co. Ltd|PCI-16xx series PCI multiport serial board (function 1: RX/TX steering CPLD)"
+0x13fe 0x1733 "unknown" "Advantech Co. Ltd.|PCI-1733 32-channel isolated digital input card"
+0x13fe 0x1752 "unknown" "Advantech Co. Ltd.|PCI-1752"
+0x13fe 0x1754 "unknown" "Advantech Co. Ltd.|PCI-1754"
+0x13fe 0x1756 "unknown" "Advantech Co. Ltd.|PCI-1756"
+0x13fe 0x1760 "unknown" "Advantech Co. Ltd.| "
+0x1400 0x0001 "unknown" "ArtX Inc.| "
+0x1400 0x0003 "unknown" "ArtX Inc.| "
+0x1400 0x0004 "unknown" "ArtX Inc.| "
+0x1400 0x1401 "epic100" "Standard Microsystems Corp [SMC]|9432 TX"
+0x1407 0x0100 "8250_pci" "Lava Computer mfg Inc.|Lava Dual Serial"
+0x1407 0x0101 "8250_pci" "Lava Computer mfg Inc.|Lava Quatro A"
+0x1407 0x0102 "8250_pci" "Lava Computer mfg Inc.|Lava Quatro B"
+0x1407 0x0110 "unknown" "Lava Computer mfg Inc.|Lava DSerial PCI Port A"
+0x1407 0x0111 "unknown" "Lava Computer mfg Inc.|Lava DSerial PCI Port B"
+0x1407 0x0120 "unknown" "Lava Computer mfg Inc.|Quattro-PCI A"
+0x1407 0x0121 "unknown" "Lava Computer mfg Inc.|Quattro-PCI B"
+0x1407 0x0180 "8250_pci" "Lava Computer mfg Inc.|Lava Octopus PCI Ports 1-4"
+0x1407 0x0181 "8250_pci" "Lava Computer mfg Inc.|Lava Octopus PCI Ports 5-8"
+0x1407 0x0200 "8250_pci" "Lava Computer mfg Inc.|Lava Port Plus"
+0x1407 0x0201 "8250_pci" "Lava Computer mfg Inc.|Lava Quad A"
+0x1407 0x0202 "8250_pci" "Lava Computer mfg Inc.|Lava Quad B"
+0x1407 0x0220 "unknown" "Lava Computer mfg Inc.|Lava Quattro PCI Ports A/B"
+0x1407 0x0221 "unknown" "Lava Computer mfg Inc.|Lava Quattro PCI Ports C/D"
+0x1407 0x0400 "unknown" "Lava Computer mfg Inc.|Lava 8255 PIO PCI"
+0x1407 0x0500 "8250_pci" "Lava Computer mfg Inc.|Lava Single Serial"
+0x1407 0x0510 "unknown" "Lava Computer mfg Inc.|Lava SP Serial 550 PCI"
+0x1407 0x0511 "unknown" "Lava Computer mfg Inc.|Lava SP BIDIR Parallel PCI"
+0x1407 0x0600 "8250_pci" "Lava Computer mfg Inc.|Lava Port 650"
+0x1407 0x0a00 "unknown" "Lava Computer mfg Inc.|LavaPort PCI COM Port Accelerator"
+0x1407 0x8000 "unknown" "Lava Computer mfg Inc.|Lava Parallel"
+0x1407 0x8001 "unknown" "Lava Computer mfg Inc.|Lava Dual Parallel port A"
+0x1407 0x8002 "unknown" "Lava Computer mfg Inc.|Lava Dual Parallel port A"
+0x1407 0x8003 "unknown" "Lava Computer mfg Inc.|Lava Dual Parallel port B"
+0x1407 0x8800 "unknown" "Lava Computer mfg Inc.|BOCA Research IOPPAR"
+0x1409 0x7168 "8250_pci" "Timedia Technology Co Ltd.|Multi I/O card"
+0x1409 0x7268 "unknown" "Timedia Technology Co Ltd.|SUN1888 Simple Comm. Controller"
+0x140b 0x0610 "unknown" "Ramix Inc.| "
+0x1412 0x1712 "snd-ice1712" "IC Ensemble Inc.|ICE1712 [Envy24]"
+0x1412 0x1724 "snd-ice1724" "IC Ensemble Inc.|ICE1724 [Envy24HT]"
+0x1414 0x0002 "tulip" ""
+0x1415 0x8401 "unknown" "Oxford Semiconductor, Ltd.|OX9162 PCI Bridge"
+0x1415 0x8403 "unknown" "Oxford Semiconductor, Ltd.|OX12PCI840 PCI Parallel Port"
+0x1415 0x9500 "unknown" "Oxford Semiconductor, Ltd.|PCI Function"
+0x1415 0x9501 "8250_pci" "Oxford Semiconductor, Ltd.|OX16PCI954 PCI UARTs"
+0x1415 0x950a "8250_pci" "Oxford Semiconductor, Ltd.|OX16PCI954 Dual PCI UART"
+0x1415 0x950b "unknown" "Oxford Semiconductor Ltd.|OXCB950 Cardbus 16950 UART"
+0x1415 0x9510 "unknown" "Oxford Semiconductor, Ltd.|PCI Function"
+0x1415 0x9511 "8250_pci" "Oxford Semiconductor, Ltd.|OX16PCI954 PCI Bridge"
+0x1415 0x9512 "unknown" "Oxford Semiconductor, Ltd.|OX16PCI954 32-bit PCI Bridge"
+0x1415 0x9513 "unknown" "Oxford Semiconductor, Ltd.|OX16PCI954 PCI Parallel Port"
+0x1415 0x9521 "8250_pci" "Oxford Semiconductor Ltd.|OX16PCI952 (Dual 16950 UART)"
+0x1415 0x9523 "unknown" "Oxford Semiconductor Ltd.|OX12PCI952 Integrated Parallel Port"
+0x141f 0x6181 "unknown" "Visiontech Ltd.|KFIR MPEG decoder"
+0x1420 0x8002 "unknown" "Psion Dacom plc|Gold Card NetGlobal 56k+10/100Mb CardBus (Ethernet part)"
+0x1420 0x8003 "unknown" "Psion Dacom plc|Gold Card NetGlobal 56k+10/100Mb CardBus (Modem part)"
+0x1425 0x0007 "cxgb" "Chelsio|10Gb Ethernet N110"
+0x1425 0x000a "cxgb" "Chelsio|10Gb Ethernet N210"
+0x1425 0x000b "unknown" "Chelsio Communications Inc|T210 Protocol Engine"
+0x142e 0x4020 "unknown" "Vitec Multimedia|VM2-2 [Video Maker 2] MPEG1/2 Encoder"
+0x142e 0x4337 "unknown" "Vitec Multimedia|VM2-2-C7 [Video Maker 2 rev. C7] MPEG1/2 Encoder"
+0x1432 0x9130 "8139too" "Edimax Computer Co.|RTL81xx Fast Ethernet"
+0x1435 0x4520 "unknown" "RTD Embedded Technologies, Inc.|PCI4520"
+0x1435 0x6020 "unknown" "RTD Embedded Technologies, Inc.|SPM6020"
+0x1435 0x6030 "unknown" "RTD Embedded Technologies, Inc.|SPM6030"
+0x1435 0x6420 "unknown" "RTD Embedded Technologies, Inc.|SPM186420"
+0x1435 0x6430 "unknown" "RTD Embedded Technologies, Inc.|SPM176430"
+0x1435 0x7520 "unknown" "RTD Embedded Technologies, Inc.|DM7520"
+0x1435 0x7820 "unknown" "RTD Embedded Technologies, Inc.|DM7820"
+0x1448 0x0001 "unknown" "Alesis Studio|ADAT/EDIT Audio Editing"
+0x144a 0x7230 "unknown" "ADLINK Technology Inc.| "
+0x144a 0x7248 "unknown" "ADLINK Technology Inc.|PCI-7248"
+0x144a 0x7250 "unknown" "ADLINK Technology Inc.|PCI-7250"
+0x144a 0x7296 "unknown" "ADLINK Technology Inc.|PCI-7296"
+0x144a 0x7432 "unknown" "ADLINK Technology Inc.|PCI-7432"
+0x144a 0x7433 "unknown" "ADLINK Technology Inc.|PCI-7433"
+0x144a 0x7434 "unknown" "ADLINK Technology Inc.|PCI-7434"
+0x144a 0x7841 "unknown" "ADLINK Technology Inc.|PCI-7841"
+0x144a 0x8133 "unknown" "ADLINK Technology Inc.|PCI-8133"
+0x144a 0x8164 "unknown" "ADLINK Technology Inc.|PCI-8164"
+0x144a 0x8554 "unknown" "ADLINK Technology Inc.|PCI-8554"
+0x144a 0x9111 "unknown" "ADLINK Technology Inc.|PCI-9111"
+0x144a 0x9113 "unknown" "ADLINK Technology Inc.|PCI-9113"
+0x144a 0x9114 "unknown" "ADLINK Technology Inc.|PCI-9114"
+0x144b 0x0601 "unknown" "Loronix Information Systems Inc.| "
+0x144d 0xc00c "unknown" "Samsung Electronics Co Ltd|P35 laptop"
+0x1458 0x0c11 "unknown" "Giga-byte Technology|K8NS Pro Mainboard"
+0x1458 0xe911 "unknown" "Giga-byte Technology|GN-WIAG02"
+0x145c 0x0000 "unknown" "Cryptek|crypto pci 56kb crypto 56kb internal"
+0x145f 0x0001 "unknown" "Baldor Electric Company|NextMove PCI"
+0x1461 0x0002 "bttv" "Avermedia|TVCapture 98"
+0x1461 0xa3ce "unknown" "Avermedia Technologies Inc|AVerMedia M179"
+0x1461 0xa3cf "unknown" "Avermedia Technologies Inc|AVerMedia M179"
+0x1461 0xf436 "unknown" "Avermedia Technologies Inc|AVerTV Hybrid+FM"
+0x1462 0x5071 "unknown" "Micro-Star International Co. Ltd.|Audio controller"
+0x1462 0x5501 "unknown" "Micro-Star International Co., Ltd.|nVidia NV15DDR [GeForce2 Ti]"
+0x1462 0x6819 "unknown" "Micro-Star International Co. Ltd.|Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller [MSI CB54G]"
+0x1462 0x6825 "unknown" "Micro-Star International Co. Ltd.|PCI Card wireless 11g [PC54G]"
+0x1462 0x6834 "unknown" "Micro-Star International Co., Ltd.|RaLink RT2500 802.11g [PC54G2]"
+0x1462 0x7120 "unknown" "Micro-Star International Co. Ltd.| "
+0x1462 0x7125 "unknown" "Micro-Star International Co., Ltd.|K8N motherboard"
+0x1462 0x8725 "unknown" "Micro-Star International Co. Ltd.|NVIDIA NV25 [GeForce4 Ti 4600] VGA Adapter"
+0x1462 0x9000 "unknown" "Micro-Star International Co. Ltd.|NVIDIA NV28 [GeForce4 Ti 4800] VGA Adapter"
+0x1462 0x9110 "unknown" "Micro-Star International Co. Ltd.|GeFORCE FX5200"
+0x1462 0x9119 "unknown" "Micro-Star International Co. Ltd.|NVIDIA NV31 [GeForce FX 5600XT] VGA Adapter"
+0x1462 0x9123 "unknown" "Micro-Star International Co., Ltd.|NVIDIA NV31 [GeForce FX 5600] FX5600-VTDR128 [MS-8912]"
+0x1462 0x9510 "unknown" "Micro-Star International Co., Ltd.|Radeon 9600XT"
+0x1462 0x9511 "unknown" "Micro-Star International Co., Ltd.|Radeon 9600XT"
+0x1462 0x9591 "unknown" "Micro-Star International Co. Ltd.|nVidia Corporation NV36 [GeForce FX 5700LE]"
+0x146c 0x1430 "unknown" "Ruby Tech Corp.|FE-1430TX Fast Ethernet PCI Adapter"
+0x1471 0x0188 "unknown" "Integrated Telecom Express Inc.|RoadRunner 10 ADSL PCI"
+0x1489 0x7001 "snd-cs46xx" "Genius|Soundmaker 128 value"
+0x148d 0x1003 "Hcf:www.linmodems.org" "DIGICOM Systems Inc.|HCF 56k Data/Fax Modem"
+0x1497 0x1497 "unknown" "SMA Regelsysteme GmBH|SMA Technologie AG"
+0x1498 0x0330 "unknown" "TEWS Datentechnik GmBH|TPMC816 2 Channel CAN bus controller."
+0x1498 0x0385 "unknown" "TEWS Datentechnik GmBH|TPMC901 Extended CAN bus with 2/4/6 CAN controller"
+0x1498 0x21cc "unknown" "TEWS Datentechnik GmBH|TCP460 CompactPCI 16 Channel Serial Interface RS232/RS422"
+0x1498 0x21cd "unknown" "TEWS Datentechnik GmBH|TCP461 CompactPCI 8 Channel Serial Interface RS232/RS422"
+0x1498 0x30c8 "unknown" "TEWS Datentechnik GmBH|TPCI200"
+0x149d 0x0001 "unknown" "NEWTEK Inc.|Video Toaster for PC"
+0x14af 0x0050 "snd-cs46xx" "Hercules|Game Theatre XP"
+0x14af 0x7102 "unknown" "Guillemot Corp.|3D Prophet II MX"
+0x14b3 0x0000 "unknown" "XPEED Inc.|DSL NIC"
+0x14b5 0x0200 "unknown" "Creamware GmBH|Scope"
+0x14b5 0x0300 "unknown" "Creamware GmBH|Pulsar"
+0x14b5 0x0400 "unknown" "Creamware GmBH|Pulsar2"
+0x14b5 0x0600 "unknown" "Creamware GmBH|Pulsar2"
+0x14b5 0x0800 "unknown" "Creamware GmBH|DSP-Board"
+0x14b5 0x0900 "unknown" "Creamware GmBH|DSP-Board"
+0x14b5 0x0a00 "unknown" "Creamware GmBH|DSP-Board"
+0x14b5 0x0b00 "unknown" "Creamware GmBH|DSP-Board"
+0x14b7 0x0001 "unknown" "PROXIM Inc.|Symphony 4110"
+0x14b9 0x0001 "airo" "Aironet Wireless Communication|PC4800"
+0x14b9 0x0340 "airo" "Aironet Wireless Communication"
+0x14b9 0x0350 "airo" "Aironet Wireless Communication"
+0x14b9 0x2500 "unknown" "Aironet Wireless Communication|PC2500 DS Wireless PCI LAN Adapter"
+0x14b9 0x3100 "unknown" "Aironet Wireless Communication|PC3100 FH Wireless PCI LAN Adapter"
+0x14b9 0x3101 "unknown" "Aironet Wireless Communication|PC3100 FH Wireless PCI LAN Adapter"
+0x14b9 0x3500 "unknown" "Aironet Wireless Communication|PC3500 FH Wireless PCI LAN Adapter"
+0x14b9 0x4500 "airo" "Aironet Wireless Communication|PC4500"
+0x14b9 0x4800 "airo" "Aironet Wireless Communication|Cisco Aironet 340 802.11b Wireless LAN Adapter/Aironet PC4800"
+0x14b9 0x5000 "airo" "Aironet Wireless Communication|"
+0x14b9 0xa504 "airo" "Aironet Wireless Communication|Cisco Aironet Wireless 802.11b"
+0x14b9 0xa505 "unknown" "Aironet Wireless Communication|Cisco Aironet CB20a 802.11a Wireless LAN Adapter"
+0x14b9 0xa506 "unknown" "Aironet Wireless Communication|Cisco Aironet Mini PCI b/g"
+0x14bc 0xd002 "unknown" "Globespan Semiconductor Inc.|Pulsar [PCI ADSL Card]"
+0x14bc 0xd00f "unknown" "Globespan Semiconductor Inc.|Pulsar [PCI ADSL Card]"
+0x14c1 0x0008 "unknown" "MYRICOM Inc.|Myri-10G Dual-Protocol Interconnect"
+0x14c1 0x8043 "unknown" "Myricom Inc.|LANai 9.2 0129 MyriNet"
+0x14d2 0x8001 "unknown" "Oxford Semiconductor|Visial Systems VScom PCI-010L Contoller"
+0x14d2 0x8002 "unknown" "Oxford Semiconductor|Visual Systems PCI-020L Controller"
+0x14d2 0x8010 "8250_pci" "Oxford Semiconductor|Visual Systems VScom PCI-100L Controller"
+0x14d2 0x8011 "parport_serial" "Oxford Semiconductor|VScom Controller"
+0x14d2 0x8020 "8250_pci" "Oxford Semiconductor|Visual Systems VScom PCI-200L Controller"
+0x14d2 0x8021 "parport_serial" "Oxford Semiconductor|VScom PCI-210L Controller"
+0x14d2 0x8040 "8250_pci" "Oxford Semiconductor|Visual Systems VScom PCI-400L Controller"
+0x14d2 0x8041 "unknown" "Oxford Semiconductor|Visual Systems VScom PCI-410L Controller"
+0x14d2 0x8042 "unknown" "Oxford Semiconductor|Visual Systems VScom PCI-420L Controller"
+0x14d2 0x8080 "8250_pci" "Oxford Semiconductor|Visual Systems VScom PCI-800L Controller"
+0x14d2 0xa000 "unknown" "Oxford Semiconductor|Visual Systems VScom PCI-010H Controller"
+0x14d2 0xa001 "8250_pci" "Titan|Titan 100"
+0x14d2 0xa003 "8250_pci" "Titan|Titan 400"
+0x14d2 0xa004 "8250_pci" "Titan|Titan 800B"
+0x14d2 0xa005 "8250_pci" "Titan|Titan 200"
+0x14d2 0xe001 "unknown" "Oxford Semiconductor|Visial Systems VScom PCI-010HV2"
+0x14d2 0xe010 "unknown" "Oxford Semiconductor|Visual Systems VScom PCI-100HV2"
+0x14d2 0xe020 "unknown" "Oxford Semiconductor|Visual Systems VScom PCI-200HV2"
+0x14d2 0xffff "unknown" "Oxford Semiconductor|Dummy Controller"
+0x14d4 0x0400 "8250_pci" "Panacom|Quadmodem"
+0x14d4 0x0402 "8250_pci" "Panacom|Dualmodem"
+0x14d9 0x0010 "unknown" "Alpha Processor Inc.|AP1011 HyperTransport-PCI Bridge [Sturgeon]"
+0x14d9 0x9000 "unknown" "Alliance Semiconductor Corp.|AS90L10204/10208 HyperTransport to PCI-X Bridge"
+0x14db 0x2100 "unknown" "Avlab Technology Inc.|PCI IO 1S"
+0x14db 0x2101 "unknown" "Avlab Technology Inc.|PCI IO 1S-650"
+0x14db 0x2102 "unknown" "Avlab Technology Inc.|PCI IO 1S-850"
+0x14db 0x2110 "parport_serial" "Avlab Technology Inc.|PCI IO 1S1P"
+0x14db 0x2111 "parport_serial" "Avlab Technology Inc.|PCI IO 1S1P-650"
+0x14db 0x2112 "parport_serial" "Avlab Technology Inc.|PCI IO 1S1P-850"
+0x14db 0x2120 "unknown" "Avlab Technology Inc.|TK9902"
+0x14db 0x2121 "unknown" "Avlab Technology Inc.|PCI IO 2P"
+0x14db 0x2130 "unknown" "Avlab Technology Inc.|PCI IO 2S"
+0x14db 0x2131 "unknown" "Avlab Technology Inc.|PCI IO 2S-650"
+0x14db 0x2132 "unknown" "Avlab Technology Inc.|PCI IO 2S-850"
+0x14db 0x2140 "parport_serial" "Avlab Technology Inc.|PCI IO 2P1S"
+0x14db 0x2141 "parport_serial" "Avlab Technology Inc.|PCI IO 2P1S-650"
+0x14db 0x2142 "parport_serial" "Avlab Technology Inc.|PCI IO 2P1S-850"
+0x14db 0x2144 "unknown" "Avlab Technology Inc.|PCI IO 2P2S"
+0x14db 0x2145 "unknown" "Avlab Technology Inc.|PCI IO 2P2S-650"
+0x14db 0x2146 "unknown" "Avlab Technology Inc.|PCI IO 2P2S-850"
+0x14db 0x2150 "unknown" "Avlab Technology Inc.|PCI IO 4S"
+0x14db 0x2151 "unknown" "Avlab Technology Inc.|PCI IO 4S-654"
+0x14db 0x2152 "unknown" "Avlab Technology Inc.|PCI IO 4S-850"
+0x14db 0x2160 "parport_serial" "Avlab Technology Inc.|PCI IO 2S1P"
+0x14db 0x2161 "parport_serial" "Avlab Technology Inc.|PCI IO 2S1P-650"
+0x14db 0x2162 "parport_serial" "Avlab Technology Inc.|PCI IO 2S1P-850"
+0x14db 0x2180 "8250_pci" "Avlab Technology Inc.|PCI IO 8S"
+0x14db 0x2181 "unknown" "Avlab Technology Inc.|PCI IO 8S-654"
+0x14db 0x2182 "8250_pci" "Avlab Technology Inc.|PCI IO 8S-850"
+0x14dc 0x0000 "unknown" "Amplicon Liveline Ltd.|PCI230"
+0x14dc 0x0001 "unknown" "Amplicon Liveline Ltd.|PCI242"
+0x14dc 0x0002 "unknown" "Amplicon Liveline Ltd.|PCI244"
+0x14dc 0x0003 "unknown" "Amplicon Liveline Ltd.|PCI247"
+0x14dc 0x0004 "unknown" "Amplicon Liveline Ltd.|PCI248"
+0x14dc 0x0005 "unknown" "Amplicon Liveline Ltd.|PCI249"
+0x14dc 0x0006 "unknown" "Amplicon Liveline Ltd.|PCI260"
+0x14dc 0x0007 "unknown" "Amplicon Liveline Ltd.|PCI224"
+0x14dc 0x0008 "unknown" "Amplicon Liveline Ltd.|PCI234"
+0x14dc 0x0009 "unknown" "Amplicon Liveline Ltd.|PCI236"
+0x14dc 0x000a "unknown" "Amplicon Liveline Ltd.|PCI272 72-channel digital I/O"
+0x14dc 0x000b "unknown" "Amplicon Liveline Ltd.|PCI215 48-channel digital I/O (w/ 6 timers)"
+0x14dc 0x000c "unknown" "Amplicon Liveline Ltd.|PCI263 16-channel reed relay output"
+0x14e4 0x0800 "unknown" "Broadcom Corp.|Sentry5 Chipcommon I/O Controller"
+0x14e4 0x0804 "unknown" "Broadcom Corp.|Sentry5 PCI Bridge"
+0x14e4 0x0805 "unknown" "Broadcom Corp.|Sentry5 MIPS32 CPU"
+0x14e4 0x0806 "unknown" "Broadcom Corp.|Sentry5 Ethernet Controller"
+0x14e4 0x080b "unknown" "Broadcom Corp.|Sentry5 Crypto Accelerator"
+0x14e4 0x080f "unknown" "Broadcom Corp.|Sentry5 DDR/SDR RAM Controller"
+0x14e4 0x0811 "unknown" "Broadcom Corp.|Sentry5 External Interface Core"
+0x14e4 0x0816 "unknown" "Broadcom Corp.|BCM3302 Sentry5 MIPS32 CPU"
+0x14e4 0x1600 "tg3" "Broadcom Corp.|NetXtreme BCM5752 Gigabit Ethernet PCI Express"
+0x14e4 0x1601 "tg3" "Broadcom Corp.|NetXtreme BCM5752M Gigabit Ethernet PCI Express"
+0x14e4 0x1644 "tg3" "Broadcom Corp.|BCM5700 1000BaseTX"
+0x14e4 0x1645 "tg3" "Broadcom Corp.|BCM5701 1000BaseTX"
+0x14e4 0x1646 "tg3" "Broadcom Corp.|NetXtreme BCM5702 Gigabit Ethernet"
+0x14e4 0x1647 "tg3" "Broadcom Corp.|BCM5701 1000BaseTX"
+0x14e4 0x1648 "tg3" "Broadcom Corp.|BCM5704 CIOB-E 1000BaseTX"
+0x14e4 0x1649 "tg3" "Broadcom Corp.|BCM5704S 1000BaseTX"
+0x14e4 0x164a "bnx2" "Broadcom Corp.|NetXtreme II BCM5706 Gigabit Ethernet"
+0x14e4 0x164c "bnx2" "Broadcom Corporation|NetXtreme II BCM5708 Gigabit Ethernet"
+0x14e4 0x164d "tg3" "Broadcom Corp.|NetXtreme BCM5702FE Gigabit Ethernet"
+0x14e4 0x1653 "tg3" "Broadcom Corp.|NetXtreme BCM5705 Gigabit Ethernet"
+0x14e4 0x1654 "tg3" "Broadcom Corp.|NetXtreme BCM5705-2 Gigabit Ethernet"
+0x14e4 0x1658 "tg3" "Broadcom Corp.|"
+0x14e4 0x1659 "tg3" "Broadcom Corp.|NetXtreme BCM5721 Gigabit Ethernet PCI Express"
+0x14e4 0x165d "tg3" "Broadcom Corp.|BCM5705M 1000BaseTX"
+0x14e4 0x165e "tg3" "Broadcom Corp.|BCM5705M-2 1000BaseTX"
+0x14e4 0x1668 "tg3" "Broadcom Corporation|NetXtreme BCM5714 Gigabit Ethernet"
+0x14e4 0x1669 "tg3" "Broadcom Corporation|NetXtreme 5714S Gigabit Ethernet"
+0x14e4 0x166a "tg3" "Broadcom Corp.|NetXtreme BCM5780 Gigabit Ethernet"
+0x14e4 0x166b "tg3" "Broadcom Corp.|NetXtreme BCM5780S Gigabit Ethernet"
+0x14e4 0x166d "unknown" "Broadcom Corp.|"
+0x14e4 0x166e "tg3" "Broadcom Corp.|BCM5705F 1000BaseTX"
+0x14e4 0x1672 "tg3" "Broadcom Corporation|NetXtreme BCM5754M Gigabit Ethernet PCI Express"
+0x14e4 0x1673 "tg3" "Broadcom Corporation|NetXtreme BCM5755M Gigabit Ethernet PCI Express"
+0x14e4 0x1676 "tg3" "Broadcom Corp.|"
+0x14e4 0x1677 "tg3" "Broadcom Corp.|NetXtreme BCM5751 Gigabit Ethernet PCI Express"
+0x14e4 0x1678 "tg3" "Broadcom Corporation|NetXtreme BCM5715 Gigabit Ethernet"
+0x14e4 0x1679 "tg3" "Broadcom Corporation|NetXtreme 5715S Gigabit Ethernet"
+0x14e4 0x167a "tg3" "Broadcom Corporation|NetXtreme BCM5754 Gigabit Ethernet PCI Express"
+0x14e4 0x167b "tg3" "Broadcom Corporation|NetXtreme BCM5755 Gigabit Ethernet PCI Express"
+0x14e4 0x167c "tg3" "Broadcom Corp.|"
+0x14e4 0x167d "tg3" "Broadcom Corp.|NetXtreme BCM5751M Gigabit Ethernet PCI Express"
+0x14e4 0x167e "tg3" "Broadcom Corp.|NetXtreme BCM5751F Fast Ethernet PCI Express"
+0x14e4 0x1693 "tg3" "Broadcom Corporation|NetLink BCM5787M Gigabit Ethernet PCI Express"
+0x14e4 0x1696 "tg3" "Broadcom Corp.|NetXtreme BCM5782 Gigabit Ethernet"
+0x14e4 0x169a "unknown" "Broadcom Corporation|NetLink BCM5786 Gigabit Ethernet PCI Express"
+0x14e4 0x169b "tg3" "Broadcom Corporation|NetLink BCM5787 Gigabit Ethernet PCI Express"
+0x14e4 0x169c "tg3" "Broadcom Corp.|NetXtreme BCM5788 Gigabit Ethernet"
+0x14e4 0x169d "tg3" "Broadcom Corp.|NetLink BCM5789 Gigabit Ethernet PCI Express"
+0x14e4 0x16a6 "tg3" "Broadcom Corp.|NetXtreme BCM5702X Gigabit Ethernet"
+0x14e4 0x16a7 "tg3" "Broadcom Corp.|NetXtreme BCM5703X Gigabit Ethernet"
+0x14e4 0x16a8 "tg3" "Broadcom Corp.|NetXtreme BCM5704X Gigabit Ethernet"
+0x14e4 0x16aa "bnx2" "Broadcom Corp.|NetXtreme II BCM5706S Gigabit Ethernet"
+0x14e4 0x16ac "bnx2" "Broadcom Corporation|NetXtreme II BCM5708S Gigabit Ethernet"
+0x14e4 0x16c6 "tg3" "Broadcom Corp.|NetXtreme BCM5702 Gigabit Ethernet"
+0x14e4 0x16c7 "tg3" "Broadcom Corp.|NetXtreme BCM5703 Gigabit Ethernet"
+0x14e4 0x16dd "tg3" "Broadcom Corp.|NetLink BCM5781 Gigabit Ethernet PCI Express"
+0x14e4 0x16f7 "tg3" "Broadcom Corp.|NetXtreme BCM5753 Gigabit Ethernet PCI Express"
+0x14e4 0x16fd "tg3" "Broadcom Corp.|NetXtreme BCM5753M Gigabit Ethernet PCI Express"
+0x14e4 0x16fe "tg3" "Broadcom Corp.|NetXtreme BCM5753F Fast Ethernet PCI Express"
+0x14e4 0x16ff "bcm5700" ""
+0x14e4 0x170c "b44" "Broadcom Corp.|BCM4401-B0 100Base-TX"
+0x14e4 0x170d "tg3" "Broadcom Corp.|NetXtreme BCM5700 Ethernet"
+0x14e4 0x170e "tg3" "Broadcom Corp.|NetXtreme BCM5700 Ethernet"
+0x14e4 0x3352 "unknown" "Broadcom Corp.|BCM3352"
+0x14e4 0x3360 "unknown" "Broadcom Corp.|BCM3360"
+0x14e4 0x4210 "unknown" "Broadcom Corp.|BCM4210 iLine10 HomePNA 2.0"
+0x14e4 0x4211 "unknown" "Broadcom Corp.|BCM HPNA 10Mb/s NIC"
+0x14e4 0x4212 "unknown" "Broadcom Corp.|BCM V.90 56k Modem"
+0x14e4 0x4301 "bcm43xx" "Broadcom Corp.|BCM4301 802.11b"
+0x14e4 0x4305 "unknown" "Broadcom Corp.|BCM4307 V.90 56k Modem"
+0x14e4 0x4306 "unknown" "Broadcom Corp.|BCM4307 Ethernet Controller"
+0x14e4 0x4307 "bcm43xx" "Broadcom Corp.|BCM4307 802.11b Wireless LAN Controller"
+0x14e4 0x4310 "unknown" "Broadcom Corp.|BCM4310 Chipcommon I/OController"
+0x14e4 0x4311 "unknown" "Broadcom Corporation|Dell Wireless 1390 WLAN Mini-PCI Card"
+0x14e4 0x4312 "unknown" "Broadcom Corp.|BCM4310 UART"
+0x14e4 0x4313 "unknown" "Broadcom Corp.|BCM4310 Ethernet Controller"
+0x14e4 0x4315 "unknown" "Broadcom Corp.|BCM4310 USB Controller"
+0x14e4 0x4318 "bcm43xx" "Broadcom Corp.|BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller"
+0x14e4 0x4319 "bcm43xx" "Broadcom Corporation|Dell Wireless 1470 DualBand WLAN"
+0x14e4 0x4320 "bcm43xx" "Broadcom Corp.|BCM94306 802.11g NIC"
+0x14e4 0x4321 "unknown" "Broadcom Corp.|BCM4306 802.11a Wireless LAN Controller"
+0x14e4 0x4322 "unknown" "Broadcom Corp.|BCM4306 UART"
+0x14e4 0x4324 "bcm43xx" "Broadcom Corp.|BCM4309 802.11a/b/g"
+0x14e4 0x4325 "bcm43xx" "Broadcom Corp.|BCM43xG 802.11b/g"
+0x14e4 0x4326 "unknown" "Broadcom Corp.|BCM4307 Chipcommon I/O Controller?"
+0x14e4 0x4329 "unknown" "Broadcom Corporation|BCM43XG"
+0x14e4 0x4401 "b44" "Broadcom Corp.|BCM4401 100Base-T"
+0x14e4 0x4402 "b44" "Broadcom Corp.|BCM4402 Integrated 10/100BaseT"
+0x14e4 0x4403 "unknown" "Broadcom Corp.|BCM4402 V.90 56k Modem"
+0x14e4 0x4410 "unknown" "Broadcom Corp.|BCM4413 iLine32 HomePNA 2.0"
+0x14e4 0x4411 "unknown" "Broadcom Corp.|BCM4413 V.90 56k modem"
+0x14e4 0x4412 "unknown" "Broadcom Corp.|BCM4413 10/100BaseT"
+0x14e4 0x4430 "unknown" "Broadcom Corp.|BCM44xx CardBus iLine32 HomePNA 2.0"
+0x14e4 0x4432 "unknown" "Broadcom Corp.|BCM44xx CardBus 10/100BaseT"
+0x14e4 0x4610 "unknown" "Broadcom Corp.|BCM4610 Sentry5 PCI to SB Bridge"
+0x14e4 0x4611 "unknown" "Broadcom Corp.|BCM4610 Sentry5 iLine32 HomePNA 1.0"
+0x14e4 0x4612 "unknown" "Broadcom Corp.|BCM4610 Sentry5 V.90 56k Modem"
+0x14e4 0x4613 "unknown" "Broadcom Corp.|BCM4610 Sentry5 Ethernet Controller"
+0x14e4 0x4614 "unknown" "Broadcom Corp.|BCM4610 Sentry5 External Interface"
+0x14e4 0x4615 "unknown" "Broadcom Corp.|BCM4610 Sentry5 USB Controller"
+0x14e4 0x4704 "unknown" "Broadcom Corp.|BCM4704 PCI to SB Bridge"
+0x14e4 0x4705 "unknown" "Broadcom Corp.|BCM4704 Sentry5 802.11b Wireless LAN Controller"
+0x14e4 0x4706 "unknown" "Broadcom Corp.|BCM4704 Sentry5 Ethernet Controller"
+0x14e4 0x4707 "unknown" "Broadcom Corp.|BCM4704 Sentry5 USB Controller"
+0x14e4 0x4708 "unknown" "Broadcom Corp.|BCM4708 Sentry5 PCI to SB Bridge"
+0x14e4 0x4710 "unknown" "Broadcom Corp.|BCM4710 Sentry5 PCI to SB Bridge"
+0x14e4 0x4711 "unknown" "Broadcom Corp.|BCM47xx Sentry5 iLine32 HomePNA 2.0"
+0x14e4 0x4712 "unknown" "Broadcom Corp.|Sentry5 UART"
+0x14e4 0x4713 "b44" "Broadcom Corp.|Sentry5 Ethernet Controller"
+0x14e4 0x4714 "unknown" "Broadcom Corp.|BCM47xx Sentry5 External Interface"
+0x14e4 0x4715 "unknown" "Broadcom Corp.|Sentry5 USB Controller"
+0x14e4 0x4716 "unknown" "Broadcom Corp.|BCM47xx Sentry5 USB Host Controller"
+0x14e4 0x4717 "unknown" "Broadcom Corp.|BCM47xx Sentry5 USB Device Controller"
+0x14e4 0x4718 "unknown" "Broadcom Corp.|Sentry5 Crypto Accelerator"
+0x14e4 0x4719 "unknown" "Broadcom Corporation|BCM47xx/53xx RoboSwitch Core"
+0x14e4 0x4720 "unknown" "Broadcom Corp.|BCM4712 MIPS CPU"
+0x14e4 0x5365 "unknown" "Broadcom Corp.|BCM5365P Sentry5 Host Bridge"
+0x14e4 0x5600 "unknown" "Broadcom Corp.|BCM5600 StrataSwitch 24+2 Ethernet Switch Controller"
+0x14e4 0x5605 "unknown" "Broadcom Corp.|BCM5605 StrataSwitch 24+2 Ethernet Switch Controller"
+0x14e4 0x5615 "unknown" "Broadcom Corp.|BCM5615 StrataSwitch 24+2 Ethernet Switch Controller"
+0x14e4 0x5625 "unknown" "Broadcom Corp.|BCM5625 StrataSwitch 24+2 Ethernet Switch Controller"
+0x14e4 0x5645 "unknown" "Broadcom Corp.|BCM5645 StrataSwitch 24+2 Ethernet Switch Controller"
+0x14e4 0x5670 "unknown" "Broadcom Corp.|BCM5670 8-Port 10GE Ethernet Switch Fabric"
+0x14e4 0x5680 "unknown" "Broadcom Corp.|BCM5680 G-Switch 8 Port Gigabit Ethernet Switch Controller"
+0x14e4 0x5690 "unknown" "Broadcom Corp.|BCM5690 12-port Multi-Layer Gigabit Ethernet Switch"
+0x14e4 0x5691 "unknown" "Broadcom Corp.|BCM5691 GE/10GE 8+2 Gigabit Ethernet Switch Controller"
+0x14e4 0x5692 "unknown" "Broadcom Corp.|BCM5692 12-port Multi-Layer Gigabit Ethernet Switch"
+0x14e4 0x5802 "unknown" "Broadcom Corp.|BCM5802 The BCM5802 Security Processor integrates Broadcom’s IPSec engine (DES, 3DES, HMAC-SHA-1, HMAC-MD5),"
+0x14e4 0x5805 "unknown" "Broadcom Corp.|BCM5805 The BCM5805 Security Processor integrates a high-performance IPSec engine (DES, 3DES, HMAC-SHA-1, HM"
+0x14e4 0x5820 "bcm5820" "Broadcom Corp.|BCM5820 Crypto Accelerator"
+0x14e4 0x5821 "bcm5820" "Broadcom Corp.|BCM5821 Crypto Accelerator"
+0x14e4 0x5822 "unknown" "Broadcom Corp.|BCM5822 Crypto Accelerator"
+0x14e4 0x5823 "unknown" "Broadcom Corp.|BCM5823 Crypto Accelerator"
+0x14e4 0x5824 "unknown" "Broadcom Corp.|BCM5824 Crypto Accelerator"
+0x14e4 0x5840 "unknown" "Broadcom Corp.|BCM5840 Crypto Accelerator"
+0x14e4 0x5841 "unknown" "Broadcom Corp.|BCM5841 Crypto Accelerator"
+0x14e4 0x5850 "unknown" "Broadcom Corp.|BCM5850 Crypto Accelerator"
+0x14ea 0xab06 "8139too" "Planex Communications Inc.|FNW-3603-TX CardBus Fast Ethernet"
+0x14ea 0xab07 "8139too" "Planex Communications Inc.|RTL81xx RealTek Ethernet"
+0x14ea 0xab08 "tulip" "Planex Communications Inc.|FNW-3602-TX CardBus Fast Ethernet"
+0x14eb 0x0020 "unknown" "Epson Corp.|BEMx.x PCI to S5U13xxxB00B Bridge Adapter"
+0x14eb 0x0c01 "unknown" "Seiko Epson Corp.|S1D13808 Embedded Memory Display Controller"
+0x14f1 0x0854 "Hcf:www.linmodems.org" "Conexant Systems Inc.|RLVDL56DPF K56 FLEX, V.90, HCF controller"
+0x14f1 0x1002 "Hcf:www.linmodems.org" "Conexant Systems Inc.|3251 HCF 56k Modem"
+0x14f1 0x1003 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1004 "Hcf:www.linmodems.org" "Conexant Systems Inc.|11242-11 HCF 56k Modem"
+0x14f1 0x1005 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1006 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1015 "unknown" "Conexant Systems Inc.| "
+0x14f1 0x1022 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1023 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1024 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1025 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1026 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1032 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Modem"
+0x14f1 0x1033 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax Modem"
+0x14f1 0x1034 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice Modem"
+0x14f1 0x1035 "unknown" "Conexant Systems Inc.|PCI Modem Enumerator"
+0x14f1 0x1036 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp Modem"
+0x14f1 0x1052 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax Modem (Worldwide)"
+0x14f1 0x1053 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax Modem (Worldwide)"
+0x14f1 0x1054 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice Modem (Worldwide)"
+0x14f1 0x1055 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide)"
+0x14f1 0x1056 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)"
+0x14f1 0x1057 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp Modem (Worldwide)"
+0x14f1 0x1058 "unknown" "Conexant Systems Inc.|HCF P96 Data/Fax/Voice/Spkp Modem"
+0x14f1 0x1059 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice Modem (Worldwide)"
+0x14f1 0x1063 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax Modem"
+0x14f1 0x1064 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice Modem"
+0x14f1 0x1065 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem"
+0x14f1 0x1066 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp Modem"
+0x14f1 0x1085 "Hsf:www.linmodems.org" "Conexant Systems Inc.|CX11250 SmartHSF Mobile Modem"
+0x14f1 0x10b3 "unknown" "Conexant Systems Inc.|HCF Data/Fax"
+0x14f1 0x10b4 "unknown" "Conexant Systems Inc.|HCF Data/Fax/Remote TAM"
+0x14f1 0x10b5 "unknown" "Conexant Systems Inc.|HCF Data/Fax/Voice/Speakerphone"
+0x14f1 0x10b6 "unknown" "Conexant Systems Inc.|HCF Data/Fax/Remote TAM/Speakerphone"
+0x14f1 0x1433 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax Modem"
+0x14f1 0x1434 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice Modem"
+0x14f1 0x1435 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem"
+0x14f1 0x1436 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax Modem"
+0x14f1 0x1453 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax Modem"
+0x14f1 0x1454 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice Modem"
+0x14f1 0x1455 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp (w/Handset) Modem"
+0x14f1 0x1456 "Hcf:www.linmodems.org" "Conexant Systems Inc.|HCF 56k Data/Fax/Voice/Spkp Modem"
+0x14f1 0x1610 "unknown" "Conexant Systems Inc.|ADSL AccessRunner PCI Arbitration Device"
+0x14f1 0x1611 "unknown" "Conexant Systems Inc.|AccessRunner PCI ADSL Interface Device"
+0x14f1 0x1620 "unknown" "Conexant Systems Inc.|P5100-xx ARM controller"
+0x14f1 0x1621 "unknown" "Conexant Systems Inc.|20463-xx HSF modem"
+0x14f1 0x1622 "unknown" "Conexant Systems Inc.|11627-xx ADSL modem"
+0x14f1 0x1623 "unknown" "Conexant Systems Inc.|HPNA 1"
+0x14f1 0x1624 "unknown" "Conexant Systems Inc.|Ethernet 10/100"
+0x14f1 0x1625 "unknown" "Conexant Systems Inc.|HomePNA2"
+0x14f1 0x1803 "tulip" "Conexant Systems Inc.|LANfinity"
+0x14f1 0x1811 "unknown" "Conexant Systems Inc.|Conextant MiniPCI Network Adapter"
+0x14f1 0x1815 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 Winmodem"
+0x14f1 0x1f10 "unknown" "Conexant Systems Inc.|HCF Data/Fax (USA)"
+0x14f1 0x1f11 "unknown" "Conexant Systems Inc.|HCF Data/Fax (Worldwide)"
+0x14f1 0x1f14 "unknown" "Conexant Systems Inc.|HCF Data/Fax/Voice (USA)"
+0x14f1 0x1f15 "unknown" "Conexant Systems Inc.|HCF Data/Fax/Voice (Worldwide)"
+0x14f1 0x2003 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 Winmodem"
+0x14f1 0x2004 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 RemoteTAM Winmodem"
+0x14f1 0x2005 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 Speakerphone Winmodem"
+0x14f1 0x2006 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 Speakerphone Winmodem"
+0x14f1 0x2013 "unknown" "Conexant Systems Inc.|HSP MicroModem 56K"
+0x14f1 0x2014 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 RemoteTAM Winmodem"
+0x14f1 0x2015 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 Speakerphone Winmodem"
+0x14f1 0x2016 "Bad:www.linmodems.org" "Conexant Systems Inc.|SoftK56 Speakerphone Winmodem"
+0x14f1 0x2043 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax Modem (Worldwide SmartDAA)"
+0x14f1 0x2044 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice Modem (Worldwide SmartDAA)"
+0x14f1 0x2045 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Worldwide SmartDAA)"
+0x14f1 0x2046 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp Modem (Worldwide SmartDAA)"
+0x14f1 0x2053 "unknown" "Conexant Systems Inc.|HSF Data/Fax"
+0x14f1 0x2054 "unknown" "Conexant Systems Inc.|HSF Data/Fax/TAM"
+0x14f1 0x2055 "unknown" "Conexant Systems Inc.|HSF Data/Fax/Voice/Speakerphone"
+0x14f1 0x2056 "unknown" "Conexant Systems Inc.|HSF Data/Fax/TAM/Speakerphone"
+0x14f1 0x2063 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax Modem (SmartDAA)"
+0x14f1 0x2064 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice Modem (SmartDAA)"
+0x14f1 0x2065 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (SmartDAA)"
+0x14f1 0x2066 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp Modem (SmartDAA)"
+0x14f1 0x2093 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Modem"
+0x14f1 0x2143 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Cell Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2144 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Cell Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2145 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset)/Cell Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2146 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2163 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Cell Modem (Mobile SmartDAA)"
+0x14f1 0x2164 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Cell Modem (Mobile SmartDAA)"
+0x14f1 0x2165 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset)/Cell Modem (Mobile SmartDAA)"
+0x14f1 0x2166 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp/Cell Modem (Mobile SmartDAA)"
+0x14f1 0x2343 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax CardBus Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2344 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice CardBus Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2345 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset) CardBus Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2346 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2363 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax CardBus Modem (Mobile SmartDAA)"
+0x14f1 0x2364 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice CardBus Modem (Mobile SmartDAA)"
+0x14f1 0x2365 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset) CardBus Modem (Mobile SmartDAA)"
+0x14f1 0x2366 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp CardBus Modem (Mobile SmartDAA)"
+0x14f1 0x2443 "unknown" "Conexant Systems Inc.|SoftK56 Speakerphone Winmodem"
+0x14f1 0x2444 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2445 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2446 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp Modem (Mobile Worldwide SmartDAA)"
+0x14f1 0x2463 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax Modem (Mobile SmartDAA)"
+0x14f1 0x2464 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice Modem (Mobile SmartDAA)"
+0x14f1 0x2465 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp (w/Handset) Modem (Mobile SmartDAA)"
+0x14f1 0x2466 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k Data/Fax/Voice/Spkp Modem (Mobile SmartDAA)"
+0x14f1 0x2702 "unknown" "Conexant Systems Inc.| "
+0x14f1 0x2bfa "unknown" "Conexant|HDAudio Soft Data Fax Modem with SmartCP"
+0x14f1 0x2f00 "Hsf:www.linmodems.org" "Conexant Systems Inc.|HSF 56k HSFi Modem"
+0x14f1 0x2f02 "unknown" "Conexant Systems Inc.|HSF 56k HSFi Data/Fax"
+0x14f1 0x2f11 "unknown" "Conexant Systems Inc.|HSF 56k HSFi Modem"
+0x14f1 0x2f20 "unknown" "Conexant Systems Inc.|HSF 56k Data/Fax Modem"
+0x14f1 0x8234 "unknown" "Conexant Systems Inc.|RS8234 ATM SAR Controller [ServiceSAR Plus]"
+0x14f1 0x8237 "unknown" "Conexant Systems Inc.|CN8237 ATM OC2 ServiceSAR+ controller"
+0x14f1 0x8471 "unknown" "Conexant Systems Inc.|CN8471A 32-channel HDLC Controller"
+0x14f1 0x8472 "unknown" "Conexant Systems Inc.|CN8472A 64-channel HDLC Controller"
+0x14f1 0x8474 "unknown" "Conexant Systems Inc.|CN8474A 128-channel HDLC Controller"
+0x14f1 0x8478 "unknown" "Conexant Systems Inc.|CN8478 256-channel HDLC Controller"
+0x14f1 0x8502 "unknown" "Conexant Systems Inc.|CX28500 676-channel HDLC Controller"
+0x14f1 0x8503 "unknown" "Conexant Systems Inc.|CX28500 1024-channel HDLC Controller"
+0x14f1 0x8563 "unknown" "Conexant Systems Inc.|CX28560 2047-channel HDLC Controller"
+0x14f1 0x8800 "cx8800" "Hauppauge|WinTV PCI card (88x chip based)"
+0x14f1 0x8801 "cx88-alsa" "Conexant Systems Inc.|CX23880/1/2/3 PCI Video and Audio Decoder [Audio Port]"
+0x14f1 0x8802 "cx88-dvb" "Conexant Systems Inc.|CX23883 Broadcast Decoder"
+0x14f1 0x8803 "unknown" "Conexant Systems Inc.| "
+0x14f1 0x8804 "unknown" "Conexant Systems Inc.| "
+0x14f1 0x8811 "cx88-alsa" "Hauppauge|WinTV PCI card (88x chip based) [Audio function]"
+0x14f1 0x9876 "unknown" "Conexant Systems Inc.|123456 Connexant"
+0x14f2 0x0001 "unknown" "Mobility Electronics Inc.|Moselle Split Bridge"
+0x14f2 0x0002 "unknown" "Mobility Electronics Inc.|Capilano Split Bridge"
+0x14f2 0x0120 "unknown" "Mobility Electronics Inc.|Mobility Split Bridge"
+0x14f2 0x0121 "unknown" "Mobility Electronics Inc.|PCI Parallel Port"
+0x14f2 0x0122 "unknown" "Mobility Electronics Inc.|PCI Serial Port"
+0x14f2 0x0123 "pcips2" "Mobility Electronics Inc.|PCI PS/2 Keyboard Port"
+0x14f2 0x0124 "pcips2" "Mobility Electronics Inc.|PCI PS/2 Mouse Port"
+0x14f3 0x2030 "unknown" "BroadLogic|2030 Satellite Reciever"
+0x14f3 0x2050 "unknown" "BroadLogic|2050 DVB-T Terrestrial (Cable) Reciever"
+0x14f3 0x2060 "unknown" "BroadLogic|2060 ATSC Terrestrial (Cable) Reciever"
+0x14f8 0x2077 "unknown" "AUDIOCODES Inc.|TP-240 dual span E1 VoIP PCI card"
+0x14fc 0x0000 "unknown" "Quadrics Ltd.|QsNet Elan3 Network Adapter"
+0x14fc 0x0001 "unknown" "Quadrics Ltd.|QsNetII Elan4 Network Adapter"
+0x14fc 0x0002 "unknown" "Quadrics Ltd|QsNetIII Elan5 Network Adapter"
+0x1500 0x1300 "unknown" "DELTA Electronics Inc.|SIS900 10/100M PCI Fast Ethernet Controller"
+0x1500 0x1320 "unknown" "DELTA Electronics Inc.|VT86C100A 10/100M PCI Fast Ethernet Controler"
+0x1500 0x1360 "8139too" "DELTA Electronics Inc.|8139 10/100BaseTX"
+0x1500 0x1380 "unknown" "DELTA Electronics Inc.|DEC21143PD 10/100M PCI Fast Ethernet Controller"
+0x1507 0x0001 "unknown" "Motorola|MPC105 [Eagle]"
+0x1507 0x0002 "unknown" "Motorola|MPC106 [Grackle]"
+0x1507 0x0003 "unknown" "Motorola|MPC8240 [Kahlua]"
+0x1507 0x0100 "unknown" "Motorola|MC145575 [HFC-PCI]"
+0x1507 0x0431 "unknown" "Motorola|KTI829c 100VG"
+0x1507 0x4801 "unknown" "Motorola|Raven"
+0x1507 0x4802 "unknown" "Motorola|Falcon"
+0x1507 0x4803 "unknown" "Motorola|Hawk"
+0x1507 0x4806 "unknown" "Motorola|CPX8216"
+0x1516 0x0800 "fealnx" "Myson Technology Inc.|800 network controller"
+0x1516 0x0803 "fealnx" "Myson Technology Inc.|803 network controller"
+0x1516 0x0891 "fealnx" "Myson Technology Inc.|891 network controller"
+0x151a 0x1002 "unknown" "Globetek|PCI-1002"
+0x151a 0x1004 "unknown" "Globetek|PCI-1004"
+0x151a 0x1008 "unknown" "Globetek|PCI-1008"
+0x151c 0x0003 "unknown" "DIGITAL AUDIO LABS Inc.|Prodif T 2496"
+0x151c 0x4000 "unknown" "DIGITAL AUDIO LABS Inc.|Prodif 88"
+0x151f 0x0000 "8250_pci" "TOPIC SEMICONDUCTOR Corp.|TP560 Data/Fax/Voice 56k modem"
+0x1522 0x0100 "unknown" "Mainpine Limited|PBridge+ PCI Interface Chip"
+0x1524 0x0510 "yenta_socket" "ENE Technology Inc.|CB710 Cardbus Controller (4 in 1 reader)"
+0x1524 0x0520 "unknown" "ENE Technology Inc|FLASH memory: ENE Technology Inc:"
+0x1524 0x0530 "unknown" "ENE Technology Inc.|ENE PCI Memory Stick Card Reader Controller"
+0x1524 0x0550 "unknown" "ENE Technology Inc.|ENE PCI Secure Digital Card Reader Controller"
+0x1524 0x0610 "unknown" "ENE Technology Inc.|PCI Smart Card Reader Controller"
+0x1524 0x1211 "yenta_socket" "ENE Technology Inc.|CB1211 Cardbus Controller"
+0x1524 0x1225 "yenta_socket" "ENE Technology Inc.|CB1225 Cardbus Controller"
+0x1524 0x1410 "yenta_socket" "ENE Technology Inc.|CB1410 CardBus Controller"
+0x1524 0x1411 "yenta_socket" "ENE Technology Inc.|CB1411 CardBus Controller"
+0x1524 0x1412 "yenta_socket" "ENE Technology Inc.|CB-712/4 Cardbus Controller"
+0x1524 0x1420 "yenta_socket" "ENE Technology Inc.|CB1420 Cardbus Controller"
+0x1524 0x1421 "yenta_socket" "ENE Technology Inc.|CB720 Cardbus Controller"
+0x1524 0x1422 "yenta_socket" "ENE Technology Inc.|CB-722/4 Cardbus Controller"
+0x1532 0x0020 "unknown" "ECHELON Corp|LonWorks PCLTA-20 PCI LonTalk Adapter"
+0x1538 0x0303 "unknown" "ARALION Inc.|ARS106S Ultra ATA 133/100/66 Host Controller"
+0x153b 0x1144 "unknown" "TERRATEC Electronic GmbH|Aureon 5.1"
+0x153b 0x1147 "unknown" "TERRATEC Electronic GmbH|Aureon 5.1 Sky"
+0x153b 0x1158 "unknown" "TERRATEC Electronic GmbH|Philips Semiconductors SAA7134 (rev 01) [Terratec Cinergy 600 TV]"
+0x153b 0x6003 "unknown" "Terratec Electronic GMBH|CS4614/22/24 CrystalClear SoundFusion PCI Audio Accel"
+0x153f 0x0001 "unknown" "MIPS Technologies Inc.|SOC-it"
+0x1542 0x9260 "unknown" "Concurrent Computer Corporation|RCIM-II Real-Time Clock & Interrupt Module"
+0x1543 0x3052 "unknown" "SILICON Laboratories|Intel 537 [Winmodem]"
+0x1543 0x4c22 "unknown" "SILICON Laboratories|Si3036 MC'97 DAA"
+0x1549 0x80ff "unknown" "Interconnect Systems Solutions|PCI-ISA-001 PCI/ISA Bus Bridge"
+0x1555 0x0002 "unknown" "Gesytec GmbH|PLX PCI 9050 Easylon PCI Bus Interface"
+0x1558 0x1558 "unknown" "Clevo/Kapok Computer| "
+0x1562 0x0001 "orinoco_nortel" "Symbol Technologies|LA-41x3 Spectrum24 Wireless LAN PCI Card"
+0x1571 0xa001 "com20020-pci" "Contemporary Controls|CCSI PCI20-485 ARCnet"
+0x1571 0xa002 "com20020-pci" "Contemporary Controls|CCSI PCI20-485D ARCnet"
+0x1571 0xa003 "com20020-pci" "Contemporary Controls|CCSI PCI20-485X ARCnet"
+0x1571 0xa004 "com20020-pci" "Contemporary Controls|CCSI PCI20-CXB ARCnet"
+0x1571 0xa005 "com20020-pci" "Contemporary Controls|CCSI PCI20-CXS ARCnet"
+0x1571 0xa006 "com20020-pci" "Contemporary Controls|CCSI PCI20-FOG-SMA ARCnet"
+0x1571 0xa007 "com20020-pci" "Contemporary Controls|CCSI PCI20-FOG-ST ARCnet"
+0x1571 0xa008 "com20020-pci" "Contemporary Controls|CCSI PCI20-TB5 ARCnet"
+0x1571 0xa009 "com20020-pci" "Contemporary Controls|CCSI PCI20-5-485 5Mbit ARCnet"
+0x1571 0xa00a "com20020-pci" "Contemporary Controls|CCSI PCI20-5-485D 5Mbit ARCnet"
+0x1571 0xa00b "com20020-pci" "Contemporary Controls|CCSI PCI20-5-485X 5Mbit ARCnet"
+0x1571 0xa00c "com20020-pci" "Contemporary Controls|CCSI PCI20-5-FOG-ST 5Mbit ARCnet"
+0x1571 0xa00d "com20020-pci" "Contemporary Controls|CCSI PCI20-5-FOG-SMA 5Mbit ARCnet"
+0x1571 0xa201 "com20020-pci" "Contemporary Controls|CCSI PCI22-485 10Mbit ARCnet"
+0x1571 0xa202 "com20020-pci" "Contemporary Controls|CCSI PCI22-485D 10Mbit ARCnet"
+0x1571 0xa203 "com20020-pci" "Contemporary Controls|CCSI PCI22-485X 10Mbit ARCnet"
+0x1571 0xa204 "com20020-pci" "Contemporary Controls|CCSI PCI22-CHB 10Mbit ARCnet"
+0x1571 0xa205 "com20020-pci" "Contemporary Controls|CCSI PCI22-FOG_ST 10Mbit ARCnet"
+0x1571 0xa206 "com20020-pci" "Contemporary Controls|CCSI PCI22-THB 10Mbit ARCnet"
+0x1578 0x5615 "unknown" "HITT|VPMK3 [Video Processor Mk III]"
+0x157c 0x8001 "unknown" "Eurosoft (UK)|Fix2000 PCI Y2K Compliance Card"
+0x1584 0x4003 "unknown" "Uniwill Computer Corp.| "
+0x1586 0x0803 "unknown" "Lancast Inc.| "
+0x1592 0x0781 "unknown" "Syba Tech Ltd.|Multi-IO Card"
+0x1592 0x0782 "unknown" "Syba Tech Ltd.|Parallel Port Card 2xEPP"
+0x1592 0x0783 "unknown" "Syba Tech Ltd.|Multi-IO Card"
+0x1592 0x0785 "unknown" "Syba Tech Ltd.|Multi-IO Card"
+0x1592 0x0786 "unknown" "Syba Tech Ltd.|Multi-IO Card"
+0x1592 0x0787 "unknown" "Syba Tech Ltd.|Multi-IO Card"
+0x1592 0x0788 "unknown" "Syba Tech Ltd.|Multi-IO Card"
+0x1592 0x078a "unknown" "Syba Tech Ltd.|Multi-IO Card"
+0x15a2 0x0001 "unknown" "Catalyst Enterprises Inc.|TA700 PCI Bus Analyzer/Exerciser"
+0x15aa 0x2000 "8250_pci" "Moreton Bay|PCI Serial Port"
+0x15ad 0x0405 "Card:VMware virtual video card" "VMWare|PCI SVGA (FIFO)"
+0x15ad 0x0710 "Card:VMware virtual video card" "VMWare|Virtual SVGA"
+0x15ad 0x0720 "unknown" "VMware Inc.|VMware High-Speed Virtual NIC [vmxnet]"
+0x15b0 0x0001 "unknown" "Zoltrix|FM-1789 Pctel"
+0x15b0 0x2bd0 "ISDN:hisax,type=35" "Zoltrix|2BD0 ISDN Adapter"
+0x15b3 0x15b3 "unknown" "Mellanox Technology|Mellanox Technologies"
+0x15b3 0x5274 "unknown" "Mellanox Technology|MT21108 InfiniBridge"
+0x15b3 0x5a44 "ib_mthca" "Mellanox Technology|MT23108 InfiniHost"
+0x15b3 0x5a45 "unknown" "Mellanox Technology|MT23108 InfiniHost (Tavor)"
+0x15b3 0x5a46 "unknown" "Mellanox Technology|MT23108 PCI Bridge"
+0x15b3 0x5e8c "ib_mthca" "Mellanox Technology|MT24204 [InfiniHost III Lx HCA]"
+0x15b3 0x5e8d "unknown" "Mellanox Technology|MT24204 [InfiniHost III Lx HCA Flash Recovery]"
+0x15b3 0x6274 "ib_mthca" "Mellanox Technologies|MT25204 [InfiniHost III Lx HCA]"
+0x15b3 0x6278 "ib_mthca" "Mellanox Technology|MT25208 InfiniHost III Ex (Tavor compatibility mode)"
+0x15b3 0x6279 "unknown" "Mellanox Technology|MT25208 [InfiniHost III Ex HCA Flash Recovery]"
+0x15b3 0x6282 "ib_mthca" "Mellanox Technology|MT25208 InfiniHost III Ex"
+0x15bc 0x0101 "unknown" "Agilent Technologies|n2530a DX2+ FC-AL Adapter"
+0x15bc 0x0b01 "agilent_82350b" ""
+0x15bc 0x1100 "unknown" "Agilent Technologies|E8001-66442 PCI Express CIC"
+0x15bc 0x2530 "unknown" "Agilent Technologies|??? HP Communications Port"
+0x15bc 0x2531 "unknown" "Agilent Technologies|??? HP Toptools Remote Control Adapter"
+0x15bc 0x2532 "unknown" "Agilent Technologies|??? HP Toptools Remote Control Adapter"
+0x15bc 0x2922 "unknown" "Agilent Technologies|64 Bit, 133MHz PCI-X Exerciser & Protocol Checker"
+0x15bc 0x2928 "unknown" "Agilent Technologies|64 Bit, 66MHz PCI Exerciser & Analyzer"
+0x15bc 0x2929 "unknown" "Agilent Technologies|E2929A PCI/PCI-X Bus Analyzer"
+0x15c5 0x8010 "unknown" "Procomp Informatics Ltd.|1394b - 1394 Firewire 3-Port Host Adapter Card"
+0x15c7 0x0349 "unknown" "Tateyama System Laboratory Co Ltd.|Tateyama C-PCI PLC/NC card Rev.01A"
+0x15d1 0x0001 "unknown" "Infineon Technologies AG|TC11IB TriCore 32-bit Single-chip Microctrlr"
+0x15d1 0x0003 "unknown" "Infineon Technologies AG|PEB 20544 E v1.1 6 Port Optimized Comm Ctrlr (SPOCC)"
+0x15d1 0x0004 "unknown" "Infineon Technologies AG|PEB 3454 E v1.1 TE3-SPICCE 6 Port Integrated Comm Ctrlr"
+0x15d7 0x0000 "unknown" "Rockwell-Collins Inc.| "
+0x15d8 0x9001 "unknown" "Cybernetics Technology Co Ltd.| "
+0x15dc 0x0001 "unknown" "Litronic Inc.|Argus 300 PCI Cryptography Module"
+0x15e2 0x0500 "unknown" "Quicknet Technologies Inc.|Internet PhoneJack PCI Card"
+0x15e8 0x0130 "orinoco_plx" "Correga|Wireless PCI Card"
+0x15e8 0x0131 "prism2_plx" "National Datacomm Corp.|Prism II InstantWave HR PCI card"
+0x15e9 0x1841 "pdc_adma" "Pacific Digital Corp.|NetStaQ ADMA-100 ATA controller"
+0x15e9 0x2068 "sata_qstor" "Pacific Digital Corp.|SATA QStor"
+0x15ec 0x3101 "unknown" "Beckhoff GmbH|FC3101 Profibus DP 1 Channel PCI"
+0x15ec 0x5102 "unknown" "Beckhoff GmbH|FC5102"
+0x15f2 0x0001 "unknown" "Diagnostic Instruments Inc.|Spot RT Spot RT Interface Board"
+0x15f2 0x0002 "unknown" "Diagnostic Instruments Inc.|Spot RT #2 Spot RT Interface Board"
+0x15f2 0x0003 "unknown" "Diagnostic Instruments Inc.|Spot Insight Spot Insight Interface Board"
+0x1619 0x0400 "farsync" "FarSite Communications Limited|FarSync T2P two Port Intelligent Sync Comms Card"
+0x1619 0x0440 "farsync" "FarSite Communications Limited|FarSync T4P Four Port Intelligent Sync Comms Card"
+0x1619 0x0610 "farsync" "FarSite Communications Limited|FarSync T1U One Port Intelligent Sync Comms Card"
+0x1619 0x0620 "farsync" "FarSite Communications Limited|FarSync T2U Two Port Intelligent Sync Comms Card"
+0x1619 0x0640 "farsync" "FarSite Communications Limited|FarSync T4U Four Port Intelligent Sync Comms Card"
+0x1619 0x1610 "farsync" "FarSite Communications Limited|FarSync TE1 One Port Intelligent Sync Comms Card"
+0x1619 0x1612 "farsync" "FarSite Communications Limited|FarSync TE1C Channelized Intelligent Sync Comms Card"
+0x1619 0x2610 "unknown" "FarSite Communications Ltd.|FarSync DSL-S1 (SHDSL)"
+0x1626 0x8410 "tulip" "TDK Semiconductor Corp.|RTL81xx Fast Ethernet"
+0x1629 0x1003 "unknown" "Kongsberg Spacetec AS|Format synchronizer v3.0"
+0x1629 0x2002 "unknown" "Kongsberg Spacetec AS|Fast Universal Data Output"
+0x162d 0x0100 "unknown" "Reprosoft Co Ltd.|Repeographics controller"
+0x162d 0x0101 "unknown" "Reprosoft Co Ltd.|Reprographics Controller"
+0x162d 0x0102 "unknown" "Reprosoft Co Ltd.|Reprographics Controller"
+0x162d 0x0103 "unknown" "Reprosoft Co Ltd.|Reprographics Controller"
+0x162f 0x1111 "unknown" "Rohde & Schwarz GMBH & Co KG|TS-PRL1 General Purpose Relay Card"
+0x162f 0x1112 "unknown" "Rohde & Schwarz GMBH & Co KG|TS-PMA Matrix Card"
+0x1637 0x3874 "unknown" "Linksys|Linksys 802.11b WMP11 PCI Wireless card"
+0x1638 0x1100 "orinoco_plx" "Standard Microsystems Corp [SMC]|SMC2602W EZConnect / Addtron AWA-100 / Eumitcom PCI WL11000"
+0x163c 0x3052 "slamr" "Smart Link Ltd.|SmartLink SmartPCI562 56K Modem"
+0x163c 0x5449 "unknown" "Smart Link Ltd.|SmartPCI561 Modem"
+0x163c 0x5459 "slamr" "Smart Link Ltd.|Modem"
+0x163c 0xff02 "unknown" "Smart Link|Aztech CNR V.92 Modem"
+0x165a 0xc100 "unknown" "Epix Inc.|PIXCI(R) CL1 Camera Link Video Capture Board [custom QL5232]"
+0x165a 0xd200 "unknown" "Epix Inc.|PIXCI(R) D2X Digital Video Capture Board [custom QL5232]"
+0x165a 0xd300 "unknown" "Epix Inc.|PIXCI(R) D3X Digital Video Capture Board [custom QL5232]"
+0x165f 0x1020 "unknown" "Linux Media Labs, LLC|LMLM4 MPEG-4 encoder"
+0x1668 0x0100 "unknown" "Actiontec Electronics Inc.|PCI to PCI Bridge"
+0x166d 0x0001 "unknown" "Broadcom Corp.|SiByte BCM1125/1125H/1250 System-on-a-Chip PCI"
+0x166d 0x0002 "unknown" "Broadcom Corp.|SiByte BCM1125H/1250 System-on-a-Chip HyperTransport"
+0x1677 0x104e "unknown" "Bernecker + Rainer|5LS172.6 B&R Dual CAN Interface Card"
+0x1677 0x12d7 "unknown" "Bernecker + Rainer|5LS172.61 B&R Dual CAN Interface Card"
+0x1677 0x20ad "unknown" "Bernecker + Rainer|5ACPCI.MFIO-K01 Profibus DP / K-Feldbus / COM"
+0x167b 0x2102 "unknown" "ZyDAS Technology Corp.|ZyDAS ZD1202"
+0x167d 0xa000 "hostap_pci" "Samsung Electro-Mechanics Co., Ltd.|IPW2200 miniPCI Wireless"
+0x167f 0x4634 "unknown" "Ingenieurbuero Anhaus GmbH|FOB-IO Card"
+0x167f 0x4c32 "unknown" "Ingenieurbuero Anhaus GmbH|L2B PCI Board"
+0x167f 0x5344 "unknown" "Ingenieurbuero Anhaus GmbH|FOB-SD Card"
+0x167f 0x5443 "unknown" "Ingenieurbuero Anhaus GmbH|FOB-TDC Card"
+0x1681 0x0010 "unknown" "Hercules|Hercules 3d Prophet II Ultra 64MB [ 350 MHz NV15BR core, 128-bit DDR @ 460 MHz, 1.5v AGP4x ]"
+0x1681 0x0050 "snd-cs46xx" "Hercules|Game Theatre XP"
+0x1681 0x0051 "snd-cs46xx" "Hercules|Game Theatre XP"
+0x1681 0x0052 "snd-cs46xx" "Hercules|Game Theatre XP"
+0x1681 0x0053 "snd-cs46xx" "Hercules|Game Theatre XP"
+0x1681 0x0054 "snd-cs46xx" "Hercules|Game Theatre XP"
+0x1682 0x9875 "unknown" "PINE Technology, Ltd.| "
+0x1688 0x1170 "unknown" "CastleNet Technology Inc.|WLAN 802.11b card"
+0x168c 0x0007 "vt_ar5k" "Atheros Communications Inc.|802.11a Wireless Adapter"
+0x168c 0x0011 "dyc_ar5k" "Atheros Communications Inc.|AR5210 802.11a Wireless Adapter"
+0x168c 0x0012 "ath_pci" "Atheros Communications Inc.|AR5211 802.11a/b/g Mini-PCI Wireless Adapter"
+0x168c 0x0013 "ath_pci" "Atheros Communications Inc.|AR5213 802.11a/b/g Wireless Adapter"
+0x168c 0x001a "ath_pci" "Atheros Communications Inc.|802.11b/g Wireless PCI Adapter"
+0x168c 0x001b "unknown" "Atheros Communications, Inc.|AR5006X 802.11abg NIC"
+0x168c 0x0020 "unknown" "Atheros Communications, Inc.|AR5005VL 802.11bg Wireless NIC"
+0x168c 0x0107 "vt_ar5k" "Atheros Communications Inc.|"
+0x168c 0x0111 "dyc_ar5k" "Atheros Communications Inc.|"
+0x168c 0x0112 "dyc_ar5k" "Atheros Communications Inc.|"
+0x168c 0x0113 "dyc_ar5k" "Atheros Communications Inc.|"
+0x168c 0x1014 "ath_pci" "Atheros Communications Inc.|AR5212 802.11abg NIC"
+0x1693 0x0212 "unknown" "FERMA|PLX PCI9054 EPONINE ESR-PCI Board"
+0x1693 0x0213 "unknown" "FERMA|Motorola MPC8245 EPONINE MTM120 PCI Board"
+0x169c 0x0044 "generic" "Netcell Corp.|SyncRAID SR3000/5000 Series SATA RAID Controllers"
+0x16ab 0x1100 "orinoco_plx" "Global Sun Tech|GL24110P"
+0x16ab 0x1101 "orinoco_plx" "Global Sun Technology Inc|PLX9052 PCMCIA-to-PCI Wireless LAN"
+0x16ab 0x1102 "orinoco_plx" "Linksys|WDT11"
+0x16ab 0x1103 "hostap_plx" "Linksys|"
+0x16ab 0x8501 "unknown" "Global Sun Technology Inc.|WL-8305 Wireless LAN PCI Adapter"
+0x16ae 0x1141 "unknown" "SafeNet Inc.|SafeXcel-1141 ???"
+0x16c6 0x8695 "unknown" "Micrel-Kendin|Centaur KS8695 ARM processor"
+0x16ca 0x0001 "unknown" "Cenatek Inc.|Rocket Drive Solid State Disk"
+0x16d5 0x4d4e "unknown" "Acromag, Inc.|PMC482, APC482, AcPC482 Counter Timer Board"
+0x16da 0x0011 0x16da 0x0011 "ines_gpib" ""
+0x16e3 0x1e0f "unknown" "European Space Agency|LEON2FT Processor"
+0x16e5 0x6000 "unknown" "Intellon Corp.|INT6000 Ethernet-to-Powerline Bridge [HomePlug AV]"
+0x16ec 0x00ff "unknown" "U.S. Robotics|USR997900 10/100 Mbps PCI Network Card"
+0x16ec 0x0116 "r8169" "U.S. Robotics|Gibabit Network Card"
+0x16ec 0x2f00 "unknown" "U.S. Robotics|USR5660A (USR265660A, USR5660A-BP) 56K PCI Faxmodem"
+0x16ec 0x3685 "orinoco_plx" "U.S. Robotics|Wireless Access PCI Adapter Model 022415"
+0x16ed 0x1001 "unknown" "Sycron N. V.|UMIO communication card"
+0x16f4 0x8000 "unknown" "Vweb Corp.|VW2010"
+0x170b 0x0100 "unknown" "NetOctave Inc.|NSP2000-SSL Crypto Aceletator"
+0x1725 0x7174 "sata_vsc" "Vitesse Semiconductor|VSC7174 PCI/PCI-X Serial ATA Host Bus Controller"
+0x172a 0x13c8 "unknown" "Accelerated Encryption|AEP SureWare Runner 1000V3"
+0x1734 0x007a "unknown" "Fujitsu-Siemens Computers GmbH|Rage XL ATI Rage XL (rev 27)"
+0x1734 0x1011 "unknown" "Fujitsu-Siemens Computers GmbH|AIC-7902W Adaptec AIC-7902 Dual Channel U320 SCSI"
+0x1734 0x1012 "unknown" "Fujitsu-Siemens Computers GmbH|CSB6 Serverworks Southbridge with RAID/IDE (rev a0), OHCI USB (rev 05), GCLE-2 Host Bridge"
+0x1734 0x1013 "unknown" "Fujitsu-Siemens Computers GmbH|BCM5703 Broadcom Corp. NetXtreme Gigabyte Ethernet"
+0x1734 0x1078 "unknown" "Fujitsu Siemens Computer GmbH|Amilo Pro v2010"
+0x1737 0x0013 "unknown" "Linksys|WMP54G Wireless Pci Card"
+0x1737 0x0015 "unknown" "Linksys|WMP54GS Wireless Pci Card"
+0x1737 0x1032 0x1737 0x0015 "unknown" "Linksys|EG1032 v2 Instant Gigabit Network Adapter"
+0x1737 0x1032 0x1737 0x0024 "unknown" "Linksys|EG1032 v3 Instant Gigabit Network Adapter"
+0x1737 0x1032 0xffff 0x0015 "skge" ""
+0x1737 0x1032 0xffff 0x0024 "r8169" ""
+0x1737 0x1032 "unknown" "Linksys|EG1032 Gigabit Network Adapter"
+0x1737 0x1064 "skge" "Linksys|Gigabit Network Adapter"
+0x1737 0xab08 "tulip" "Linksys|21x4x DEC-Tulip compatible 10/100 Ethernet"
+0x1737 0xab09 "tulip" "Linksys|21x4x DEC-Tulip compatible 10/100 Ethernet"
+0x173b 0x03e8 "tg3" "Altima|AC1000 Gigabit Ethernet"
+0x173b 0x03e9 "tg3" "Altima|AC1000 Gigabit Ethernet"
+0x173b 0x03ea "tg3" "Altima|AC1000 Gigabit Ethernet"
+0x173b 0x03eb "tg3" "Altima|AC1000 Gigabit Ethernet"
+0x1743 0x8139 "8139too" "Peppercon AG|ROL/F-100 Fast Ethernet Adapter with ROL"
+0x1755 0x0000 "unknown" "Alchemy Semiconductor Inc.| "
+0x1796 0x0001 "unknown" "Research Centre Juelich|SIS1100 [Gigabit link]"
+0x1796 0x0002 "unknown" "Research Centre Juelich|HOTlink"
+0x1796 0x0003 "unknown" "Research Centre Juelich|Counter Timer"
+0x1796 0x0004 "unknown" "Research Centre Juelich|CAMAC Controller"
+0x1796 0x0005 "unknown" "Research Centre Juelich|PROFIBUS"
+0x1796 0x0006 "unknown" "Research Centre Juelich|AMCC HOTlink"
+0x1799 0x6001 "r8180" "Belkin|Wireless PCI Card - F5D6001"
+0x1799 0x6020 "r8180" "Belkin|Wireless PCMCIA Card - F5D6020"
+0x1799 0x6060 "unknown" "Belkin|Wireless PDA Card - F5D6060"
+0x1799 0x7000 "unknown" "Belkin|Wireless PCI Card - F5D7000"
+0x1799 0x700a "unknown" "Belkin|Wireless PCI Card - F5D7000UK"
+0x1799 0x7010 "unknown" "Belkin|BCM4306 802.11b/g Wireless Lan Controller F5D7010"
+0x179c 0x0557 "unknown" "Data Patterns|DP-PCI-557 [PCI 1553B]"
+0x179c 0x0566 "unknown" "Data Patterns|DP-PCI-566 [Intelligent PCI 1553B]"
+0x179c 0x5031 "unknown" "Data Patterns|DP-CPCI-5031-Synchro Module"
+0x179c 0x5121 "unknown" "Data Patterns|DP-CPCI-5121-IP Carrier"
+0x179c 0x5211 "unknown" "Data Patterns|DP-CPCI-5211-IP Carrier"
+0x179c 0x5679 "unknown" "Data Patterns|AGE Display Module"
+0x17a0 0x8033 "unknown" "Genesys Logic Inc.|GL880S USB 1.1 controller"
+0x17a0 0x8034 "unknown" "Genesys Logic Inc.|GL880S USB 2.0 controller"
+0x17b3 0xab08 "tulip" "Hawking Technologies|PN672TX 10/100 Ethernet"
+0x17b4 0x0011 "unknown" "Indra Networks Inc.|WebEnhance 100 GZIP Compression Card"
+0x17c0 0x12ab "unknown" "Wistron Corp.| "
+0x17cb 0x0001 "unknown" "Airgo Networks Inc|AGN100 802.11 a/b/g True MIMO Wireless Card"
+0x17cb 0x0002 "unknown" "Airgo Networks Inc|AGN300 802.11 a/b/g True MIMO Wireless Card"
+0x17cc 0x2280 "net2280" "NetChip Technology Inc.|USB 2.0"
+0x17cc 0x2282 "net2280" ""
+0x17d3 0x1110 "arcmsr" "RECA|ARC1110 SATA RAID HOST Controller"
+0x17d3 0x1120 "arcmsr" "RECA|ARC1120 SATA RAID HOST Controller"
+0x17d3 0x1130 "arcmsr" "RECA|ARC1130 SATA RAID HOST Controller"
+0x17d3 0x1160 "arcmsr" "RECA|ARC1160 SATA RAID HOST Controller"
+0x17d3 0x1170 "arcmsr" "RECA|ARC1160 SATA RAID HOST Controller"
+0x17d3 0x1210 "arcmsr" "RECA|ARC1210 SATA RAID HOST Controller"
+0x17d3 0x1220 "arcmsr" "RECA|ARC1220 SATA RAID HOST Controller"
+0x17d3 0x1230 "arcmsr" "RECA|ARC1230 SATA RAID HOST Controller"
+0x17d3 0x1260 "arcmsr" "RECA|ARC1260 SATA RAID HOST Controller"
+0x17d3 0x1270 "arcmsr" "RECA|ARC1160 SATA RAID HOST Controller"
+0x17d3 0x1280 "arcmsr" ""
+0x17d3 0x1380 "arcmsr" ""
+0x17d3 0x1381 "arcmsr" ""
+0x17d3 0x1680 "arcmsr" ""
+0x17d3 0x1681 "arcmsr" ""
+0x17d3 0x5831 "unknown" "Areca Technology Corp.|Xframe 10 Gigabit Ethernet PCI-X"
+0x17d3 0x5832 "unknown" "Areca Technology Corp.|Xframe II 10 Gigabit Ethernet PCI-X"
+0x17d5 0x5731 "s2io" "S2IO Inc.|Xframe 10 Gigabit Ethernet PCI-X"
+0x17d5 0x5732 "s2io" "S2IO Inc.|Xframe 10 Gigabit Ethernet PCI-X"
+0x17d5 0x5831 "s2io" "S2IO Inc.|Xframe 10 Gigabit Ethernet PCI-X"
+0x17d5 0x5832 "s2io" "Neterion Inc.|Xframe II 10 Gigabit Ethernet PCI-X"
+0x17e4 0x0001 "unknown" "Sectra AB|KK671 Cardbus encryption board"
+0x17e4 0x0002 "unknown" "Sectra AB|KK672 Cardbus encryption board"
+0x17e6 0x0010 "unknown" "Entropic Communications Inc.|EN2010 [c.Link] MoCA Network Controller (Coax, PCI interface)"
+0x17e6 0x0011 "unknown" "Entropic Communications Inc.|EN2010 [c.Link] MoCA Network Controller (Coax, MPEG interface)"
+0x17e6 0x0021 "unknown" "Entropic Communications Inc.|EN2210 [c.Link] MoCA Network Controller (Coax)"
+0x17fe 0x2120 "unknown" "Linksys|WMP11v4 802.11b PCI card"
+0x17fe 0x2220 "unknown" "Linksys|[AirConn] INPROCOMM IPN 2220 Wireless LAN Adapter (rev 01)"
+0x1813 0x4000 "Bad:www.linmodems.org" "Modem Silicon Operation|MD563X Host Accelerated Modem"
+0x1813 0x4100 "unknown" "Ambient Technologies Inc.|HaM plus Data Fax Modem"
+0x1814 0x0101 "rt2400" "RaLink|Wireless PCI Adpator RT2400 / RT2460"
+0x1814 0x0200 "unknown" "RaLink|RT2500 802.11g PCI [PC54G2]"
+0x1814 0x0201 "rt2500" "RaLink|Ralink RT2500 802.11 Cardbus Reference Card"
+0x1814 0x0301 "unknown" "RaLink|RT2561/RT61 802.11g PCI"
+0x1814 0x0302 "unknown" "RaLink|RT2561/RT61 rev B 802.11g"
+0x1814 0x0401 "unknown" "RaLink|Ralink RT2600 802.11 MIMO"
+0x1822 0x4e35 "unknown" "Twinhan Technology Co. Ltd.|Mantis DTV PCI Bridge Controller [Ver 1.0]"
+0x182d 0x3069 "unknown" "SiteCom Europe BV|ISDN PCI DC-105V2"
+0x182d 0x9790 "unknown" "SiteCom Europe BV|WL-121 Wireless Network Adapter 100g+ [Ver.3]"
+0x182e 0x0008 "unknown" "Raza Microelectronics, Inc.|XLR516 Processor"
+0x183b 0x08a7 "unknown" "MikroM GmbH|MVC100 DVI"
+0x183b 0x08a8 "unknown" "MikroM GmbH|MVC101 SDI"
+0x183b 0x08a9 "unknown" "MikroM GmbH|MVC102 DVI+Audio"
+0x183b 0x08b0 "unknown" "MikroM GmbH|MVC200-DC"
+0x1850 0x1851 "bttv" "Flyvideo 98 (LR50) / Chronos Video Shuttle II"
+0x1851 0x1851 "bttv" "Flyvideo 98EZ (LR51) / CyberMail AV"
+0x1852 0x1852 "bttv" "Flyvideo 98FM (LR50) / Typhoon TView TV/FM Tuner"
+0x1864 0x2110 "unknown" "SilverBack|ISNAP 2110"
+0x1867 0x5a44 "ib_mthca" "Topspin Communications|MT23108 PCI-X HCA"
+0x1867 0x5a45 "unknown" "Topspin Communications|MT23108 PCI-X HCA flash recovery"
+0x1867 0x5a46 "unknown" "Topspin Communications|MT23108 PCI-X HCA bridge"
+0x1867 0x5e8c "ib_mthca" "Topspin Communications|MT25208 InfiniHost III Ex"
+0x1867 0x6274 "ib_mthca" "Topspin Communications|MT25208 InfiniHost III Ex"
+0x1867 0x6278 "ib_mthca" "Topspin Communications|MT25208 InfiniHost III Ex (Tavor compatibility mode)"
+0x1867 0x6282 "ib_mthca" "Topspin Communications|MT25208 InfiniHost III Ex"
+0x187e 0x3403 "unknown" "ZyXEL Communication Corporation|ZyAir G-110 802.11g"
+0x187e 0x340e "unknown" "ZyXEL Communication Corporation|M-302 802.11g XtremeMIMO"
+0x1888 0x0301 "unknown" "Varisys Ltd.|VMFX1 FPGA PMC module"
+0x1888 0x0601 "unknown" "Varisys Ltd.|VSM2 dual PMC carrier"
+0x1888 0x0710 "unknown" "Varisys Ltd.|VS14x series PowerPC PCI board"
+0x1888 0x0720 "unknown" "Varisys Ltd.|VS24x series PowerPC PCI board"
+0x1888 0x2503 "unknown" "1 Prolink Computer Inc.|Bt881 Video Capture (10 bit High qualtiy cap)"
+0x1888 0x2504 "unknown" "1 Prolink Computer Inc.|Bt878 Video Capture"
+0x1888 0x3503 "unknown" "1 Prolink Computer Inc.|nVidia NV28 VGA Geforce4 MX440"
+0x1888 0x3505 "unknown" "1 Prolink Computer Inc.|nVidia NV28 VGA Geforce4 Ti4200"
+0x1898 0x2001 "unknown" "DIC INFORMATION TECHNOLOGY. Ltd.|DVB Receiver Card"
+0x18ac 0xd500 "unknown" "DViCO Corp.|FusionHDTV 5"
+0x18ac 0xd800 "unknown" "DViCO Corporation|FusionHDTV 3 Gold"
+0x18ac 0xd810 "unknown" "DViCO Corp.|FusionHDTV 3 Gold"
+0x18ac 0xd820 "unknown" "DViCO Corp.|FusionHDTV 3 Gold-T"
+0x18b8 0xb001 "unknown" "Ammasso|AMSO 1100 iWARP/RDMA Gigabit Ethernet Coprocessor"
+0x18ca 0x0020 "Card:SiS generic" "XGI - Xabre Graphics Inc.|Volari Z7"
+0x18ca 0x0040 "Card:SiS generic" "XGI - Xabre Graphics Inc.|Volari V8"
+0x18d2 0x3069 "unknown" "Sitecom|DC-105v2 ISDN controller"
+0x18dd 0x4c6f "unknown" "Artimi Inc.|Artimi RTMI-100 UWB adapter"
+0x18e6 0x0001 "unknown" "MPL AG|OSCI [Octal Serial Communication Interface]"
+0x18ec 0xc006 "unknown" "Cesnet, z.s.p.o.|COMBO6"
+0x18ec 0xc045 "unknown" "Cesnet, z.s.p.o.|COMBO6E"
+0x18ec 0xc050 "unknown" "Cesnet, z.s.p.o.|COMBO-PTM"
+0x18ec 0xc058 "unknown" "Cesnet, z.s.p.o.|COMBO6X"
+0x18f6 0x1000 "unknown" "NextIO|[Nexsis] Switch Virtual P2P PCIe Bridge"
+0x18f6 0x1050 "unknown" "NextIO|[Nexsis] Switch Virtual P2P PCI Bridge"
+0x18f6 0x2000 "unknown" "NextIO|[Nexsis] Switch Integrated Mgmt. Endpoint"
+0x18f7 0x0001 "unknown" "Commtech Inc.|Fastcom ESCC-PCI-335"
+0x18f7 0x0002 "unknown" "Commtech Inc.|Fastcom 422/4-PCI-335"
+0x18f7 0x0004 "unknown" "Commtech Inc.|Fastcom 422/2-PCI-335"
+0x18f7 0x0005 "unknown" "Commtech Inc.|Fastcom IGESCC-PCI-ISO/1"
+0x18f7 0x000a "unknown" "Commtech Inc.|Fastcom 232/4-PCI-335"
+0x1904 0x8139 "unknown" "Hangzhou Silan Microelectronics Co., Ltd.|RTL8139D [Realtek] PCI 10/100BaseTX ethernet adaptor"
+0x1923 0x0040 "unknown" "Sangoma Technologies Corp.|A200/Remora FXO/FXS Analog AFT card"
+0x1923 0x0100 "unknown" "Sangoma Technologies Corp.|A104d QUAD T1/E1 AFT card"
+0x1923 0x0300 "unknown" "Sangoma Technologies Corp.|A101 single-port T1/E1"
+0x1923 0x0400 "unknown" "Sangoma Technologies Corp.|A104u Quad T1/E1 AFT"
+0x1931 0x000c "nozomi" "Option|GlobeTrotter 3G/EDGE"
+0x1942 0xe511 "unknown" "ClearSpeed Technology plc|CSX600 Advance Accelerator Board"
+0x194a 0x1111 "unknown" "DapTechnology B.V.|FireSpy3850"
+0x194a 0x1112 "unknown" "DapTechnology B.V.|FireSpy450b"
+0x194a 0x1113 "unknown" "DapTechnology B.V.|FireSpy450bT"
+0x194a 0x1114 "unknown" "DapTechnology B.V.|FireSpy850"
+0x194a 0x1115 "unknown" "DapTechnology B.V.|FireSpy850bT"
+0x1957 0x0012 "unknown" "Freescale Semiconductor Inc|MPC8548 [PowerQUICC III]"
+0x1957 0x0080 "unknown" "Freescale Semiconductor Inc|MPC8349E"
+0x1957 0x0081 "unknown" "Freescale Semiconductor Inc|MPC8349"
+0x1957 0x0082 "unknown" "Freescale Semiconductor Inc|MPC8347E TBGA"
+0x1957 0x0083 "unknown" "Freescale Semiconductor Inc|MPC8347 TBGA"
+0x1957 0x0084 "unknown" "Freescale Semiconductor Inc|MPC8347E PBGA"
+0x1957 0x0085 "unknown" "Freescale Semiconductor Inc|MPC8347 PBGA"
+0x1957 0x0086 "unknown" "Freescale Semiconductor Inc|MPC8343E"
+0x1957 0x0087 "unknown" "Freescale Semiconductor Inc|MPC8343"
+0x1966 0x1975 "unknown" "Orad Hi-Tec Systems|DVG64 family"
+0x1969 0x1048 "unknown" "Attansic Technology Corp.|L1 Gigabit Ethernet Adapter"
+0x196a 0x0101 "unknown" "Sensory Networks Inc.|NodalCore C-1000 Content Classification Accelerator"
+0x196a 0x0102 "unknown" "Sensory Networks Inc.|NodalCore C-2000 Content Classification Accelerator"
+0x197b 0x2360 "ahci" "JMicron Technologies, Inc.|JMicron 20360/20363 AHCI Controller"
+0x197b 0x2361 "unknown" "JMicron Technologies, Inc.|JMB361 AHCI/IDE"
+0x197b 0x2363 "ahci" "JMicron Technologies, Inc.|JMicron 20360/20363 AHCI Controller"
+0x197b 0x2365 "unknown" "JMicron Technologies, Inc.|JMB365 AHCI/IDE"
+0x197b 0x2366 "unknown" "JMicron Technologies, Inc.|JMB366 AHCI/IDE"
+0x1989 0x0001 "unknown" "Montilio Inc.|RapidFile Bridge"
+0x1989 0x8001 "unknown" "Montilio Inc.|RapidFile"
+0x19ac 0x0001 "unknown" "Kasten Chase Applied Research|ACA2400 Crypto Accelerator"
+0x19ae 0x0520 "unknown" "Progeny Systems Corp.|4135 HFT Interface Controller"
+0x19e7 0x1001 "unknown" "NET (Network Equipment Technologies)|STIX DSP Card"
+0x19e7 0x1002 "unknown" "NET (Network Equipment Technologies)|STIX - 1 Port T1/E1 Card"
+0x19e7 0x1003 "unknown" "NET (Network Equipment Technologies)|STIX - 2 Port T1/E1 Card"
+0x19e7 0x1004 "unknown" "NET (Network Equipment Technologies)|STIX - 4 Port T1/E1 Card"
+0x19e7 0x1005 "unknown" "NET (Network Equipment Technologies)|STIX - 4 Port FXS Card"
+0x1a03 0x2000 "unknown" "ASPEED Technology, Inc.|AST2000"
+0x1a08 0x0000 "unknown" "Sierra semiconductor|SC15064"
+0x1c1c 0x0001 "unknown" "Symphony|82C101"
+0x1d44 0xa400 "eata" "DPT|PM2x24/PM3224"
+0x1de1 0x0391 "dc395x" "Tekram|TRM-S1040"
+0x1de1 0x2020 "tmscsim" "Tekram|DC-390"
+0x1de1 0x690c "unknown" "Tekram|690c"
+0x1de1 0xdc29 "trm290" "Tekram|DC290"
+0x1de2 0x1190 "unknown" "A/DHOC Systèmes|001 Slave PCI protyting board"
+0x1dea 0x0001 "unknown" "Lasentec|701-1350 Lasentec FBRM Counter"
+0x1dea 0x0002 "unknown" "Lasentec|701-1429 Lasentec PVM Controller"
+0x1fc0 0x0300 "unknown" "Tumsan Oy|E2200 Dual E1/Rawpipe Card"
+0x1fc1 0x000d "unknown" "PathScale Inc.|InfiniPath HT-400"
+0x1fc1 0x0010 "unknown" "PathScale, Inc|InfiniPath PE-800"
+0x1fce 0x0001 "unknown" "Cognio Inc.|Spectrum Analyzer PC Card (SAgE)"
+0x2000 0x2800 "slamr" "Smart Link Ltd.|Modem"
+0x2002 0x2003 "unknown" "Automation Technology GmbH|0x2003 PCI Frame Grabber"
+0x2003 0x8800 "slamr" "Smart Link Ltd.|Modem"
+0x2014 0x0004 "unknown" "NONTECH Nonnenmacher GmbH|aa551234 PCI Master Target"
+0x2014 0x0040 "unknown" "NONTECH Nonnenmacher GmbH|0xff8000 PCI to Private Bus Bridge for Primary Ra"
+0x217d 0x6606 "bttv" "Leadtek|WinFast TV 2000"
+0x2348 0x2010 "unknown" "Racore|8142 100VG/AnyLAN"
+0x2636 0x10b4 "bttv" "STB|TV PCI FM, P/N 6000704"
+0x2e00 0x6164 0x732e 0x2e31 "pata_pdc2027x" ""
+0x2e6c 0x6174 0x6572 0x6e67 "pata_pdc2027x" ""
+0x3000 0x121a "bttv" "3Dfx Interactive Inc.|VoodooTV FM/ VoodooTV 200"
+0x3000 0x144f "bttv" "Askey Magic/others|TView99 CPH06x"
+0x3000 0x14ff "bttv" "Askey Magic/others|!TView 99 (CPH061)"
+0x3002 0x144f "bttv" "Askey Magic/others|TView99 CPH05x"
+0x3002 0x14ff "bttv" "Phoebe|TV Master (CPH060)"
+0x3005 0x144f "bttv" "Askey Magic/others|TView99 CPH061/06L (T1/LC)"
+0x3388 0x0013 "unknown" "Hint Corp.|HiNT HC4 PCI to ISDN bridge, Multimedia audio controller"
+0x3388 0x0014 "unknown" "Hint Corp.|HiNT HC4 PCI to ISDN bridge, Network controller"
+0x3388 0x0020 "unknown" "Hint Corp.|HB6 UNIVERSAL PCI-PCI BRIDGE"
+0x3388 0x0021 "unknown" "Hint Corp.|HB1-SE33 PCI-PCI Bridge"
+0x3388 0x0022 "unknown" "Hint Corp.|HiNT HB4 PCI-PCI Bridge (PCI6150)"
+0x3388 0x0026 "unknown" "Hint Corp.|HB2 PCI-PCI Bridge"
+0x3388 0x101a "unknown" "Hint Corp.|E.Band [AudioTrak Inca88]"
+0x3388 0x101b "unknown" "Hint Corp.|E.Band [AudioTrak Inca88]"
+0x3388 0x8011 "unknown" "Hint Corp.|VXPro II Chipset"
+0x3388 0x8012 "unknown" "Hint Corp.|VXPro II Chipset"
+0x3388 0x8013 "generic" "Hint Corp.|VXPro II Chipset"
+0x3842 0xc370 "unknown" "eVga.com. Corp.|e-GeFORCE 6600 256 DDR PCI-e"
+0x38d0 0x62d6 "unknown" "MFP GmbH|fieldbus-master PCI Measurement bus controller for EPSI"
+0x3990 0x0007 "bttv" "Hauppauge|WinTV-D"
+0x3d3d 0x0001 "Card:Elsa GLoria-S" "3DLabs|GLINT 300SX"
+0x3d3d 0x0002 "Card:Elsa GLoria-L" "3DLabs|GLINT 500TX"
+0x3d3d 0x0003 "Card:Elsa GLoria-S" "3DLabs|GLINT Delta"
+0x3d3d 0x0004 "Card:Elsa GLoria-S" "3DLabs|GLINT Permedia"
+0x3d3d 0x0005 "Card:Elsa GLoria-S" "3DLabs|Permedia"
+0x3d3d 0x0006 "Card:Elsa GLoria-S" "3DLabs|GLINT MX"
+0x3d3d 0x0007 "Card:Elsa GLoria-S" "3DLabs|4D Extreme [GLINT Permedia 2]"
+0x3d3d 0x0008 "Card:Elsa GLoria-S" "3DLabs|GLINT Gamma"
+0x3d3d 0x0009 "Card:3Dlabs Permedia2 (generic)" "3DLabs|Permedia II 2D+3D"
+0x3d3d 0x000a "Card:Elsa GLoria-S" "3DLabs|GLINT R3"
+0x3d3d 0x000c "Card:3Dlabs Permedia4 (generic)" "3DLabs|GLINT Permedia 4"
+0x3d3d 0x000d "Card:3Dlabs Permedia4 (generic)" "3DLabs|GLINT R4"
+0x3d3d 0x000e "Card:3Dlabs Permedia4 (generic)" "3DLabs|GLINT Gamma 2"
+0x3d3d 0x0011 "Card:3Dlabs Permedia4 (generic)" "3DLabs|GLINT R4 (Alt)"
+0x3d3d 0x0012 "unknown" "3DLabs|GLint R5 rev A"
+0x3d3d 0x0013 "unknown" "3DLabs|GLint R5 rev B"
+0x3d3d 0x0020 "unknown" "3DLabs|VP10 visual processor"
+0x3d3d 0x0022 "unknown" "3DLabs|VP10 visual processor"
+0x3d3d 0x0024 "unknown" "3DLabs|VP9 visual processor"
+0x3d3d 0x0100 "Card:3Dlabs Permedia2 (generic)" "3DLabs|Permedia II 2D+3D"
+0x3d3d 0x07a1 "unknown" "3DLabs|Wildcat III 6210"
+0x3d3d 0x07a2 "unknown" "3DLabs|Sun XVR-500 Graphics Accelerator"
+0x3d3d 0x07a3 "unknown" "3DLabs|Wildcat IV 7210"
+0x3d3d 0x1004 "Card:Elsa GLoria-S" "3DLabs|Permedia"
+0x3d3d 0x3d04 "Card:Elsa GLoria-S" "3DLabs|Permedia"
+0x3d3d 0xffff "Card:Elsa GLoria-S" "3DLabs|Glint VGA"
+0x4005 0x0300 "snd-als300" "Avance Logic Inc.|ALS300 PCI Audio Device"
+0x4005 0x0308 "snd-als300" "Avance Logic Inc.|ALS300+ PCI Audio Device"
+0x4005 0x0309 "unknown" "Avance Logic Inc.|PCI Input Controller"
+0x4005 0x1064 "unknown" "Avance Logic Inc.|ALG-2064"
+0x4005 0x2064 "unknown" "Avance Logic Inc.|ALG-2064i"
+0x4005 0x2128 "unknown" "Avance Logic Inc.|ALG-2364A GUI Accelerator"
+0x4005 0x2301 "Card:Avance Logic 2301" "Avance Logic Inc.|ALG-2301"
+0x4005 0x2302 "Card:Avance Logic 2302" "Avance Logic Inc.|ALG-2302"
+0x4005 0x2303 "Card:Avance Logic 2302" "Avance Logic Inc.|AVG-2302 GUI Accelerator"
+0x4005 0x2364 "unknown" "Avance Logic Inc.|ALG-2364A"
+0x4005 0x2464 "unknown" "Avance Logic Inc.|ALG-2464"
+0x4005 0x2501 "unknown" "Avance Logic Inc.|ALG-2564A/25128A"
+0x4005 0x4000 "snd-als4000" "Avance Logic Inc.|ALS4000 Audio Chipset"
+0x4005 0x4710 "unknown" "Avance Logic Inc.|ALC200/200P"
+0x400a 0x15b0 "bttv" "Zoltrix|Genie TV"
+0x400d 0x15b0 "bttv" "Zoltrix|Genie TV / Radio"
+0x4010 0x15b0 "bttv" "Zoltrix|Genie TV / Radio"
+0x4016 0x15b0 "bttv" "Zoltrix|Genie TV / Radio"
+0x4020 0x10fc "bttv" "I-O Data Co.|GV-BCV3/PCI"
+0x4033 0x1300 "unknown" "Addtron Technology Co. Inc.|SIS900 10/100Mbps Fast Ethernet Controller"
+0x4033 0x1320 "unknown" "Addtron Technology Co. Inc.|VT86C100A 10/100M PCI Fast Ethernet Controller"
+0x4033 0x1360 "8139too" "Addtron Technology Co. Inc.|8139 10/100BaseTX"
+0x4033 0x1380 "unknown" "Addtron Technology Co. Inc.|DEC 21143PD 10/100M PCI Fast Ethernet Controller"
+0x4050 0x10fc "bttv" "I-O Data Co. GV-BCV4/PCI"
+0x4144 0x0043 "unknown" "Alpha Data|ADM-XPL Virtex-II Pro Bridge"
+0x4144 0x0044 "unknown" "Alpha Data|ADM-XRCIIPro"
+0x416c 0x0100 "unknown" "Aladdin Knowledge Systems|AlladinCARD"
+0x416c 0x0200 "unknown" "Aladdin Knowledge Systems|CPC"
+0x4444 0x0002 "unknown" "ICompression Inc.|iTVC12 MPEG Encoder Card"
+0x4444 0x0016 "ivtv" "Internext Compression Inc.|iTVC16 (CX23416) MPEG-2 Encoder"
+0x4444 0x0803 "ivtv" "Conexant Inc.|iTVC15 MPEG Coder"
+0x4500 0x0070 "bttv" "Hauppauge|WinTV/PVR"
+0x4550 0x9054 "unknown" "Tucker-Davis Technologies|PLX9054"
+0x472e 0x732d 0x6b63 0x0000 "pata_pdc2027x" ""
+0x4916 0x1960 "rcpci" "RedCreek Communications Inc.|RedCreek PCI adapter"
+0x494f 0x10e8 "unknown" "ACCES I/O Products Inc.|LPCI-COM-8SM"
+0x494f 0x22c0 "wdt_pci" "ICS Advent|"
+0x494f 0xaca8 "unknown" "ICS Advent|PCI-AI/1216 ADC Card"
+0x494f 0xaca9 "unknown" "ICS Advent|PCI-AI/1216(M) ADC Card"
+0x4a14 0x5000 "ne2k-pci" "NetVin|NV5000SC"
+0x4b10 0x2010 "unknown" "BusLogic Inc.|Daytona Audio Adapter"
+0x4b10 0x3080 "unknown" "Buslogic Inc.|SCSI Host Adapter"
+0x4b10 0x4010 "unknown" "Buslogic Inc.|Wide SCSI Host Adapter"
+0x4c53 0x0000 "unknown" "SBS-OR Industrial Computers|PLUSTEST Diagnostics Device"
+0x4c53 0x0001 "unknown" "SBS Technologies|PLUSTEST-MM device"
+0x4c53 0x5000 "unknown" "SBS-OR Industrial Computers|NV5000 Ethernet Adapter"
+0x4d51 0x0200 "unknown" "MediaQ Inc.|MQ-200"
+0x4ddc 0x0100 "unknown" "ILC Data Device Corp.|DD-42924I5-300 (ARINC 429 Data Bus)"
+0x4ddc 0x0801 "unknown" "ILC Data Device Corp.|BU-65570I1 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0802 "unknown" "ILC Data Device Corp.|BU-65570I2 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0811 "unknown" "ILC Data Device Corp.|BU-65572I1 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0812 "unknown" "ILC Data Device Corp.|BU-65572I2 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0881 "unknown" "ILC Data Device Corp.|BU-65570T1 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0882 "unknown" "ILC Data Device Corp.|BU-65570T2 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0891 "unknown" "ILC Data Device Corp.|BU-65572T1 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0892 "unknown" "ILC Data Device Corp.|BU-65572T2 MIL-STD-1553 Test and Simulation"
+0x4ddc 0x0901 "unknown" "ILC Data Device Corp.|BU-65565C1 MIL-STD-1553 Data Bus"
+0x4ddc 0x0902 "unknown" "ILC Data Device Corp.|BU-65565C2 MIL-STD-1553 Data Bus"
+0x4ddc 0x0903 "unknown" "ILC Data Device Corp.|BU-65565C3 MIL-STD-1553 Data Bus"
+0x4ddc 0x0904 "unknown" "ILC Data Device Corp.|BU-65565C4 MIL-STD-1553 Data Bus"
+0x4ddc 0x0b01 "unknown" "ILC Data Device Corp.|BU-65569I1 MIL-STD-1553 Data Bus"
+0x4ddc 0x0b02 "unknown" "ILC Data Device Corp.|BU-65569I2 MIL-STD-1553 Data Bus"
+0x4ddc 0x0b03 "unknown" "ILC Data Device Corp.|BU-65569I3 MIL-STD-1553 Data Bus"
+0x4ddc 0x0b04 "unknown" "ILC Data Device Corp.|BU-65569I4 MIL-STD-1553 Data Bus"
+0x5018 0x153b "bttv" "Terratec|TValue"
+0x5046 0x1001 "radio-maxiradio" "GemTek Technology Corp.|PCI Radio"
+0x5053 0x2010 "unknown" "Voyetra Technologies|Daytona Audio Adapter"
+0x5112 0x0001 "unknown" "Sigmatek GmbH & CoKG|DCP401 Intelligent Dias Master"
+0x5145 0x3031 "unknown" "Ensoniq (Old)|Concert AudioPCI"
+0x5168 0x0300 "unknown" "Animation Technologies Inc.|FlyDVB-S"
+0x5168 0x0301 "unknown" "Animation Technologies Inc.|FlyDVB-T"
+0x5213 0x0510 "snd-fm801" "Gallant|Odyssey Sound 4"
+0x5301 0x0001 "Card:AT3D" "Alliance Semiconductor|ProMotion aT3D"
+0x5333 0x0551 "Card:S3 Trio3D" "S3 Inc.|Plato/PX (system)"
+0x5333 0x0e11 "Card:VESA driver (generic)" "S3 Inc.|86c775/86c785 [Trio 64V2/DX or /GX]"
+0x5333 0x5631 "Card:S3 ViRGE (generic)" "S3 Inc.|86c325 [ViRGE]"
+0x5333 0x8800 "unknown" "S3 Inc.|86c866 [Vision 866]"
+0x5333 0x8801 "Card:S3 Vision964 (generic)" "S3 Inc.|86c964 [Vision 964]"
+0x5333 0x8810 "Card:S3 Trio32 (generic)" "S3 Inc.|86c764_0 [Trio 32 vers 0]"
+0x5333 0x8811 "Card:S3 Trio64 (generic)" "S3 Inc.|86c764/765 [Trio32/64/64V+]"
+0x5333 0x8812 "Card:S3 Aurora64V+ (generic)" "S3 Inc.|86cM65 [Aurora64V+]"
+0x5333 0x8813 "Card:S3 Trio64 (generic)" "S3 Inc.|86c764_3 [Trio 32/64 vers 3]"
+0x5333 0x8814 "Card:S3 Trio64V+ (generic)" "S3 Inc.|86c767 [Trio 64UV+]"
+0x5333 0x8815 "Card:S3 Aurora64V+ (generic)" "S3 Inc.|86cM65 [Aurora 128]"
+0x5333 0x883d "Card:S3 ViRGE (generic)" "S3 Inc.|86c988 [ViRGE/VX]"
+0x5333 0x8870 "unknown" "S3 Inc.|FireGL"
+0x5333 0x8880 "Card:S3 868 (generic)" "S3 Inc.|86c868 [Vision 868 VRAM] vers 0"
+0x5333 0x8881 "Card:S3 868 (generic)" "S3 Inc.|86c868 [Vision 868 VRAM] vers 1"
+0x5333 0x8882 "Card:S3 868 (generic)" "S3 Inc.|86c868 [Vision 868 VRAM] vers 2"
+0x5333 0x8883 "Card:S3 868 (generic)" "S3 Inc.|86c868 [Vision 868 VRAM] vers 3"
+0x5333 0x88b0 "Card:S3 928 (generic)" "S3 Inc.|86c928 [Vision 928 VRAM] vers 0"
+0x5333 0x88b1 "Card:S3 86C928 (generic)" "S3 Inc.|86c928 [Vision 928 VRAM] vers 1"
+0x5333 0x88b2 "Card:S3 86C928 (generic)" "S3 Inc.|86c928 [Vision 928 VRAM] vers 2"
+0x5333 0x88b3 "Card:S3 86C928 (generic)" "S3 Inc.|86c928 [Vision 928 VRAM] vers 3"
+0x5333 0x88c0 "Card:S3 864 (generic)" "S3 Inc.|86c864 [Vision 864 DRAM] vers 0"
+0x5333 0x88c1 "Card:S3 864 (generic)" "S3 Inc.|86c864 [Vision 864 DRAM] vers 1"
+0x5333 0x88c2 "Card:S3 864 (generic)" "S3 Inc.|86c864 [Vision 864-P DRAM] vers 2"
+0x5333 0x88c3 "Card:S3 864 (generic)" "S3 Inc.|86c864 [Vision 864-P DRAM] vers 3"
+0x5333 0x88d0 "Card:S3 964 (generic)" "S3 Inc.|86c964 [Vision 964 VRAM] vers 0"
+0x5333 0x88d1 "Card:S3 964 (generic)" "S3 Inc.|86c964 [Vision 964 VRAM] vers 1"
+0x5333 0x88d2 "Card:S3 964 (generic)" "S3 Inc.|86c964 [Vision 964-P VRAM] vers 2"
+0x5333 0x88d3 "Card:S3 964 (generic)" "S3 Inc.|86c964 [Vision 964-P VRAM] vers 3"
+0x5333 0x88f0 "Card:S3 968 (generic)" "S3 Inc.|86c968 [Vision 968 VRAM] rev 0"
+0x5333 0x88f1 "Card:S3 968 (generic)" "S3 Inc.|86c968 [Vision 968 VRAM] rev 1"
+0x5333 0x88f2 "Card:S3 968 (generic)" "S3 Inc.|86c968 [Vision 968 VRAM] rev 2"
+0x5333 0x88f3 "Card:S3 968 (generic)" "S3 Inc.|86c968 [Vision 968 VRAM] rev 3"
+0x5333 0x8900 "Card:S3 Trio64V2 (generic)" "S3 Inc.|86c755 [Trio 64V2/DX]"
+0x5333 0x8901 "Card:S3 Trio64V2 (generic)" "S3 Inc.|Trio 64V2/DX or /GX"
+0x5333 0x8902 "Card:S3 Trio3D" "S3 Inc.|Plato/PX (graphics)"
+0x5333 0x8903 "Card:S3 Trio3D" "S3 Inc.|Trio 3D business multimedia"
+0x5333 0x8904 "Card:S3 Trio3D" "S3 Inc.|Trio 64 3D"
+0x5333 0x8905 "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x8906 "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x8907 "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x8908 "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x8909 "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x890a "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x890b "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x890c "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x890d "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x890e "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x890f "Card:S3 Trio64V+ (generic)" "S3 Inc.|Trio 64V+ family"
+0x5333 0x8a01 "Card:S3 ViRGE (generic)" "S3 Inc.|ViRGE/DX or /GX"
+0x5333 0x8a10 "Card:S3 ViRGE/GX2 (generic)" "S3 Inc.|ViRGE/GX2"
+0x5333 0x8a11 "unknown" "S3 Incorporated|86C359 ViRGE /GX2+ Macrovision"
+0x5333 0x8a12 "unknown" "S3 Incorporated|86C359 ViRGE /GX2+"
+0x5333 0x8a13 "Card:S3 86C368 (Trio3D/2X)" "S3 Inc.|86c368 [Trio 3D/2X]"
+0x5333 0x8a20 "Card:S3 Savage3D" "S3 Inc.|86c794 [Savage 3D]"
+0x5333 0x8a21 "Card:S3 Savage3D" "S3 Inc.|86c795 [Savage 3D/MV]"
+0x5333 0x8a22 "Card:S3 Savage4" "S3 Inc.|Savage 4"
+0x5333 0x8a23 "Card:S3 Savage4" "S3 Inc.|Savage 4"
+0x5333 0x8a25 "Card:S3 Savage4" "S3 Inc.|ProSavage PM133"
+0x5333 0x8a26 "Card:S3 Savage4" "S3 Inc.|ProSavage KM133"
+0x5333 0x8c00 "Card:S3 ViRGE/MX (generic)" "S3 Inc.|ViRGE/M3"
+0x5333 0x8c01 "Card:S3 ViRGE/MX (generic)" "S3 Inc.|ViRGE/MX"
+0x5333 0x8c02 "Card:S3 ViRGE/MX+ (generic)" "S3 Inc.|ViRGE/MX+"
+0x5333 0x8c03 "Card:S3 ViRGE/MX (generic)" "S3 Inc.|ViRGE/MX+MV"
+0x5333 0x8c10 "Card:S3 Savage (generic)" "S3 Inc.|86C270-294 Savage/MX-MV"
+0x5333 0x8c11 "Card:S3 Savage (generic)" "S3 Inc.|86C270-294 Savage/MX"
+0x5333 0x8c12 "Card:S3 Savage (generic, sw_cursor)" "S3 Inc.|86C270-294 Savage/IX-MV"
+0x5333 0x8c13 "Card:S3 Savage (generic)" "S3 Inc.|86C270-294 Savage/IX"
+0x5333 0x8c22 "Card:S3 Savage4" "S3 Incorporated|86C508 SuperSavage 128/MX"
+0x5333 0x8c24 "Card:S3 Savage4" "S3 Incorporated|SuperSavage/MX-/IX"
+0x5333 0x8c26 "Card:S3 Savage4" "S3 Incorporated|SuperSavage/MX-/IX"
+0x5333 0x8c2a "Card:S3 Savage4" "S3 Incorporated|86C544 SuperSavage 128/IX"
+0x5333 0x8c2b "Card:S3 Savage4" "S3 Incorporated|86C553 SuperSavage 128/IX DDR"
+0x5333 0x8c2c "Card:S3 Savage4" "S3 Incorporated|86C564 SuperSavage/IX"
+0x5333 0x8c2d "Card:S3 Savage4" "S3 Incorporated|86C573 SuperSavage/IX DDR"
+0x5333 0x8c2e "Card:S3 Savage4" "S3 Incorporated|86C583 SuperSavage/IXC SDR"
+0x5333 0x8c2f "Card:S3 Savage4" "S3 Incorporated|86C594 SuperSavage/IXC DDR"
+0x5333 0x8d01 "Card:S3 Savage4" "S3 Incorporated|Twister"
+0x5333 0x8d02 "Card:S3 Savage4" "S3 Incorporated|Twister-K"
+0x5333 0x8d03 "Card:S3 Savage4" "S3 Inc.|VT8751 [ProSavageDDR P4M266]"
+0x5333 0x8d04 "Card:S3 Savage4" "S3 Inc.|VT8751 [ProSavageDDR P4M266] VGA Controller"
+0x5333 0x9102 "Card:S3 Savage2000 (generic)" "S3 Inc.|86C410 Savage 2000"
+0x5333 0xb031 "Card:VESA driver (generic)" "S3 Inc.|86c775/86c785 [Trio 64V2/DX or /GX]"
+0x5333 0xca00 "sonicvibes" "S3 Inc.|SonicVibes"
+0x5401 0x0101 "unknown" "Ericsson|DSSS Wireless LAN PCI Card"
+0x5430 0x0100 "unknown" "Evergreen Technologies Inc.|AcceleraPCI Upgrade Card Adapter"
+0x544c 0x0350 "unknown" "Teralogic Inc.|TL880-based HDTV/ATSC tuner"
+0x5455 0x4458 "unknown" "Technische University Berlin|S5933"
+0x5544 0x0001 "unknown" "Dunord Technologies|I-30xx Scanner Interface"
+0x5555 0x0003 "unknown" "Genroco Inc.|TURBOstor HFP-832 [HiPPI NIC]"
+0x55cf 0x2111 "unknown" "Unisys Corp.|UNISYS CP150P"
+0x5654 0x3132 "unknown" "VoiceTronix Pty Ltd.|OpenSwitch12"
+0x5f65 0x7264 0x0004 0x0004 "ipmi_si" ""
+0x5f73 0x7564 0x2e00 0x0073 "pata_pdc2027x" ""
+0x6356 0x4002 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4102 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4202 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4302 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4402 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4502 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4602 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4702 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4802 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4902 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4a02 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4b02 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4c02 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4d02 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4e02 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6356 0x4f02 "unknown" "UltraStor|ULTRA24 SCSI Host"
+0x6374 0x6773 "unknown" "c't Magazin|GPPCI"
+0x6461 0x0073 "ipmi_si" ""
+0x6606 0x107d "bttv" "Leadtek WinFast TV 2000"
+0x6606 0x217d "bttv" "Leadtek|WinFast TV 2000"
+0x6666 0x0001 "8250_pci" "Decision Computer|PCCOM4"
+0x6666 0x0002 "8250_pci" "Decision Computer|PCCOM8"
+0x6666 0x0004 "8250_pci" "Decision Computer International Co.|PCCOM2"
+0x6666 0x0101 "unknown" "Decision Computer International Co.|PCI 8255/8254 I/O Card"
+0x7063 0x2000 "unknown" "pcHDTV|HD-2000"
+0x7063 0x3000 "unknown" "pcHDTV|HD-3000"
+0x7063 0x5500 "unknown" "pcHDTV|HD5500 HDTV"
+0x7274 0x6665 0x746c 0x7974 "ipmi_si" ""
+0x764d 0x1022 "snd-intel8x0" "Intel Corp.|AMD-8111 810 Chipset AC'97 Audio Controller"
+0x8001 0x0010 "unknown" "Beyertone AG - Germany|ispLSI1032E PCI-decoder"
+0x8008 0x0010 "unknown" "Quancom Electronic GmbH|WDOG1 [PCI-Watchdog 1]"
+0x8008 0x0011 "unknown" "Quancom Electronic GmbH|PWDOG2 [PCI-Watchdog 2]"
+0x8008 0x0016 "unknown" "QUANCOM Informationssysteme GmbH|PROTO2"
+0x8008 0x0100 "unknown" "QUANCOM Informationssysteme GmbH|PREL8"
+0x8008 0x0102 "unknown" "QUANCOM Informationssysteme GmbH|PREL16"
+0x8008 0x0103 "unknown" "QUANCOM Informationssysteme GmbH|POPTOREL16"
+0x8008 0x0105 "unknown" "QUANCOM Informationssysteme GmbH|POPTO16IN"
+0x8008 0x0106 "unknown" "QUANCOM Informationssysteme GmbH|PTTL24IO"
+0x8008 0x0107 "unknown" "QUANCOM Informationssysteme GmbH|PUNIREL"
+0x8008 0x1000 "unknown" "QUANCOM Informationssysteme GmbH|PDAC4"
+0x8008 0x1001 "unknown" "QUANCOM Informationssysteme GmbH|PAD12DAC4"
+0x8008 0x1002 "unknown" "QUANCOM Informationssysteme GmbH|PAD16DAC4"
+0x8008 0x1005 "unknown" "QUANCOM Informationssysteme GmbH|PAD12"
+0x8008 0x1006 "unknown" "QUANCOM Informationssysteme GmbH|PAD16"
+0x8008 0x3000 "unknown" "QUANCOM Informationssysteme GmbH|POPTOLCA"
+0x8008 0x3302 "cb7210" ""
+0x8086 0x0000 "paep" "Intel Corp.|AEP SSL Accelerator"
+0x8086 0x0007 "unknown" "Intel Corp.|82379AB"
+0x8086 0x0008 "unknown" "Intel Corp.|Extended Express System Support Controller"
+0x8086 0x0039 "tulip" "Intel Corp.|21145"
+0x8086 0x0122 "unknown" "Intel Corp.|82437FX"
+0x8086 0x0309 "unknown" "Intel Corp.|80303 I/O Processor PCI-to-PCI Bridge Unit"
+0x8086 0x030d "unknown" "Intel Corp.|80312 I/O Companion Unit PCI-to-PCI Bridge"
+0x8086 0x0318 "unknown" "Intel Corp.|80219 General Purpose PCI Processor Address Translation Unit"
+0x8086 0x0319 "unknown" "Intel Corp.|80219 General Purpose PCI Processor Address Translation Unit"
+0x8086 0x0326 "unknown" "Intel Corp.|PCI Bridge Hub I/OxAPIC Interrupt Controller A"
+0x8086 0x0327 "unknown" "Intel Corp.|PCI Bridge Hub I/OxAPIC Interrupt Controller B"
+0x8086 0x0329 "unknown" "Intel Corp.|PCI Bridge Hub A"
+0x8086 0x032a "unknown" "Intel Corp.|PCI Bridge Hub B"
+0x8086 0x032c "unknown" "Intel Corp.|PCI Bridge Hub"
+0x8086 0x0330 "unknown" "Intel Corp.|80332 [Dobson] I/O processor"
+0x8086 0x0331 "unknown" "Intel Corp.|80332 [Dobson] I/O processor"
+0x8086 0x0332 "unknown" "Intel Corp.|80332 [Dobson] I/O processor"
+0x8086 0x0333 "unknown" "Intel Corp.|80332 [Dobson] I/O processor"
+0x8086 0x0334 "unknown" "Intel Corp.|80332 [Dobson] I/O processor"
+0x8086 0x0335 "unknown" "Intel Corp.|80331 [Lindsay] I/O processor"
+0x8086 0x0336 "unknown" "Intel Corp.|80331 [Lindsay] I/O processor"
+0x8086 0x0340 "unknown" "Intel Corp.|41210 [Lanai] Serial to Parallel PCI Bridge"
+0x8086 0x0341 "unknown" "Intel Corp.|41210 [Lanai] Serial to Parallel PCI Bridge"
+0x8086 0x0370 "unknown" "Intel Corp.|80333 Segment-A PCI Express-to-PCI Express Bridge"
+0x8086 0x0371 "unknown" "Intel Corp.|80333 A-Bus IOAPIC"
+0x8086 0x0372 "unknown" "Intel Corp.|80333 Segment-B PCI Express-to-PCI Express Bridge"
+0x8086 0x0373 "unknown" "Intel Corp.|80333 B-Bus IOAPIC"
+0x8086 0x0374 "unknown" "Intel Corp.|80333 Address Translation Unit"
+0x8086 0x03a2 "megaraid" "Intel Corp.|MegaRAID"
+0x8086 0x0438 "megaraid" "Intel Corp.|MegaRAID 438"
+0x8086 0x0466 "megaraid" "Intel Corp.|MegaRAID 466"
+0x8086 0x0467 "megaraid" "Intel Corp.|MegaRAID 467"
+0x8086 0x0482 "unknown" "Intel Corp.|82375EB"
+0x8086 0x0483 "unknown" "Intel Corp.|82424ZX [Saturn]"
+0x8086 0x0484 "unknown" "Intel Corp.|82378IB [SIO ISA Bridge]"
+0x8086 0x0486 "unknown" "Intel Corp.|82430ZX [Aries]"
+0x8086 0x04a3 "unknown" "Intel Corp.|82434LX [Mercury/Neptune]"
+0x8086 0x04d0 "unknown" "Intel Corp.|82437FX [Triton FX]"
+0x8086 0x0500 "unknown" "Intel Corp.|E8870 Processor Bus Controller"
+0x8086 0x0501 "unknown" "Intel Corp.|E8870 Memory Controller"
+0x8086 0x0502 "unknown" "Intel Corp.|E8870 Scalability Port 0"
+0x8086 0x0503 "unknown" "Intel Corp.|E8870 Scalability Port 1 / Glob. Perf. Monitor"
+0x8086 0x0510 "unknown" "Intel Corp.|E8870IO Hub Interface Port 0 (8-bit compatible)"
+0x8086 0x0511 "unknown" "Intel Corp.|E8870IO Hub Interface Port 1"
+0x8086 0x0512 "unknown" "Intel Corp.|E8870IO Hub Interface Port 2"
+0x8086 0x0513 "unknown" "Intel Corp.|E8870IO Hub Interface Port 3"
+0x8086 0x0514 "unknown" "Intel Corp.|E8870IO Hub Interface Port 4"
+0x8086 0x0515 "unknown" "Intel Corp.|E8870IO Server I/O Hub (SIOH)"
+0x8086 0x0516 "unknown" "Intel Corp.|E8870IO Reliabilty, Availability, Serviceability"
+0x8086 0x0530 "unknown" "Intel Corp.|E8870SP Scalability Port"
+0x8086 0x0531 "unknown" "Intel Corp.|E8870SP Scalability Port"
+0x8086 0x0532 "unknown" "Intel Corp.|E8870SP Scalability Port"
+0x8086 0x0533 "unknown" "Intel Corp.|E8870SP Scalability Port"
+0x8086 0x0534 "unknown" "Intel Corp.|E8870SP Scalability Port"
+0x8086 0x0535 "unknown" "Intel Corp.|E8870SP Scalability Port"
+0x8086 0x0536 "unknown" "Intel Corp.|E8870SP Scalability Port Switch Global Registers"
+0x8086 0x0537 "unknown" "Intel Corp.|E8870SP Interleave Configuration Registers"
+0x8086 0x0600 "gdth" "Intel Corp.|RAID Controller"
+0x8086 0x0601 "gdth" "Intel Corp.|RAID Controller"
+0x8086 0x061f "unknown" "Intel Corp.|80303 I/O Processor"
+0x8086 0x0960 "unknown" "Intel Corp.|80960RP [i960 RP Microprocessor/Bridge]"
+0x8086 0x0962 "unknown" "Intel Corp.|80960RM [i960RM Bridge]"
+0x8086 0x0964 "unknown" "Intel Corp.|80960RP [i960 RP Microprocessor/Bridge]"
+0x8086 0x09a0 "megaraid" "Intel Corp.|PowerEdge RAID Controller 2/SC"
+0x8086 0x1000 "e1000" "Intel Corp.|82542 Gigabit Ethernet Adapter"
+0x8086 0x1001 "e1000" "Intel Corp.|82543 Gigabit Ethernet Adapter"
+0x8086 0x1002 "eepro100" "Intel Corp.|Pro 100 LAN+Modem 56 CardBus II"
+0x8086 0x1004 "e1000" "Intel Corp.|Gigabit Ethernet Adapter"
+0x8086 0x1008 "e1000" "Intel Corp.|82544EI Gigabit Ethernet Controller"
+0x8086 0x1009 "e1000" "Intel Corp.|82544EI Gigabit Ethernet Controller"
+0x8086 0x100a "unknown" "Intel Corp.|82540EM Gigabit Ethernet Controller"
+0x8086 0x100c "e1000" "Intel Corp.|82544GC Gigabit Ethernet Controller"
+0x8086 0x100d "e1000" "Intel Corp.|82544GC Gigabit Ethernet Controller"
+0x8086 0x100e "e1000" "Intel Corp.|82540EM Gigabit Ethernet Controller"
+0x8086 0x100f "e1000" "Intel Corp.|82545EM Gigabit Ethernet Controller"
+0x8086 0x1010 "e1000" "Intel Corp.|82546EB Gigabit Ethernet Controller"
+0x8086 0x1011 "e1000" "Intel Corp.|82545EM Gigabit Ethernet Controller"
+0x8086 0x1012 "e1000" "Intel Corp.|82546EB Gigabit Ethernet Controller"
+0x8086 0x1013 "e1000" "Intel Corp.|82541EI Gigabit Ethernet Controller"
+0x8086 0x1014 "e1000" "Intel Corp.|82541ER Gigabit Ethernet Controller"
+0x8086 0x1015 "e1000" "Intel Corp.|82540EM Gigabit Ethernet Controller (LOM)"
+0x8086 0x1016 "e1000" "Intel Corp.|82540EP Gigabit Ethernet Controller (LOM)"
+0x8086 0x1017 "e1000" "Intel Corp.|82540EP Gigabit Ethernet Controller (LOM)"
+0x8086 0x1018 "e1000" "Intel Corp.|82541EI PRO/1000 MT Mobile connection"
+0x8086 0x1019 "e1000" "Intel Corp.|82547EI Gigabit Ethernet Controller"
+0x8086 0x101a "e1000" "Intel Corp.|82547EI Gigabit Ethernet Controller (Mobile)"
+0x8086 0x101d "e1000" "Intel Corp.|82540EM Gigabit Ethernet Controller (LOM)"
+0x8086 0x101e "e1000" "Intel Corp.|82540EP Gigabit Ethernet Controller (Mobile)"
+0x8086 0x1026 "e1000" "Intel Corp.|82545GM Gigabit Ethernet Controller"
+0x8086 0x1027 "e1000" "Intel Corp.|82545GM Gigabit Ethernet Controller (Fiber)"
+0x8086 0x1028 "e1000" "Intel Corp.|82545GM Gigabit Ethernet Controller"
+0x8086 0x1029 "eepro100" "Intel Corp.|Express Pro 100"
+0x8086 0x1030 "eepro100" "Intel Corp.|82559 InBusiness 10/100"
+0x8086 0x1031 "e100" "Intel Corp.|Express Pro 100"
+0x8086 0x1032 "e100" "Intel Corp.|Express Pro 100"
+0x8086 0x1033 "e100" "Intel Corp.|Express Pro 100"
+0x8086 0x1034 "e100" "Intel Corp.|Express Pro 100"
+0x8086 0x1035 "eepro100" "Intel Corp.|82801CAM (ICH3) Chipset Ethernet Controller"
+0x8086 0x1036 "eepro100" "Intel Corp.|82801CAM (ICH3) Chipset Ethernet Controller"
+0x8086 0x1037 "eepro100" "Intel Corp.|82801CAM (ICH3) Chipset Ethernet Controller"
+0x8086 0x1038 "e100" "Intel Corp.|Express Pro 100"
+0x8086 0x1039 "eepro100" "Intel Corp.|EtherExpress PRO/100"
+0x8086 0x103a "eepro100" "Intel Corp.|EtherExpress PRO/100"
+0x8086 0x103b "eepro100" "Intel Corp.|EtherExpress PRO/100"
+0x8086 0x103c "eepro100" "Intel Corp.|EtherExpress PRO/100"
+0x8086 0x103d "eepro100" "Intel Corp.|82801BD PRO/100 VE (MOB) Ethernet Controller"
+0x8086 0x103e "eepro100" "Intel Corp.|82801BD PRO/100 VM (MOB) Ethernet Controller"
+0x8086 0x1040 "unknown" "Intel Corp.|536EP v.92 modem (MD5628D-L-C ?)"
+0x8086 0x1042 "unknown" "Intel Corp.|PRO/Wireless 2011 LAN PCI Card"
+0x8086 0x1043 0x103c 0x08b0 "ipw2100" "Intel Corporation|tc1100 tablet"
+0x8086 0x1043 0x103c 0x2741 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2527 "ipw2100" "Intel Corporation|MIM2000/Centrino"
+0x8086 0x1043 0x8086 0x2701 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2702 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2711 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2712 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2721 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2722 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2731 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2732 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2741 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2742 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2751 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2752 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2753 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2754 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2761 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 0x8086 0x2762 "ipw2200" "Intel Corp.|PRO/Wireless LAN 2200"
+0x8086 0x1043 "ipw2100" "Intel Corp.|PRO/Wireless LAN 2100 3B Mini PCI Adapter"
+0x8086 0x1048 "ixgb" "Intel Corp.|82597EX 10 Gigabit Ethernet Controller"
+0x8086 0x1049 "e1000" "Intel Corporation|82566MM Gigabit Network Connection"
+0x8086 0x104a "e1000" "Intel Corporation|82566DM Gigabit Network Connection"
+0x8086 0x104b "e1000" "Intel Corporation|Ethernet Controller"
+0x8086 0x104c "e1000" "Intel Corporation|82562V 10/100 Network Connection"
+0x8086 0x104d "e1000" "Intel Corporation|82566MC Gigabit Network Connection"
+0x8086 0x104f "ipw2200" "Intel Corp.|Wireless adapter"
+0x8086 0x1050 "e100" "Intel Corp.|82801EB (ICH5) PRO/100 VE Ethernet Controller"
+0x8086 0x1051 "e100" "Intel Corp.|82801EB (ICH5) PRO/100 VE Ethernet Controller"
+0x8086 0x1052 "e100" "Intel Corp.|82801EB (ICH5) PRO/100 VM Ethernet Controller"
+0x8086 0x1053 "e100" "Intel Corp.|82801EB (ICH5) PRO/100 VM Ethernet Controller"
+0x8086 0x1054 "e100" "Intel Corp.|82801EB (ICH5) PRO/100 VE Ethernet Controller"
+0x8086 0x1055 "e100" "Intel Corp.|82801EB (ICH5) PRO/100 VM Ethernet Controller"
+0x8086 0x1056 "e100" "Intel Corp.|PRO/100 VM Ethernet Controller"
+0x8086 0x1057 "e100" "Intel Corp.|PRO/100 VM Ethernet Controller"
+0x8086 0x1059 "e100" "Intel Corp.|82551QM Ethernet Controller"
+0x8086 0x105b "unknown" "Intel Corporation|82546GB Gigabit Ethernet Controller (Copper)"
+0x8086 0x105e "e1000" "Intel Corp.|82571EB Gigabit Ethernet Controller"
+0x8086 0x105f "e1000" "Intel Corp.|82571EB Gigabit Ethernet Controller"
+0x8086 0x1060 "e1000" "Intel Corp.|82571EB Gigabit Ethernet Controller"
+0x8086 0x1061 "eider" ""
+0x8086 0x1064 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1065 "e100" "Intel Corp.|82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller"
+0x8086 0x1066 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1067 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1068 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1069 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x106a "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x106b "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1075 "e1000" "Intel Corp.|82547EI Gigabit Ethernet Controller"
+0x8086 0x1076 "e1000" "Intel Corp.|82547EI Gigabit Ethernet Controller"
+0x8086 0x1077 "e1000" "Intel Corp.|82547EI Gigabit Ethernet Controller(Mobile)"
+0x8086 0x1078 "e1000" "Intel Corp.|82547EI Gigabit Ethernet Controller"
+0x8086 0x1079 "e1000" "Intel Corp.|82546EB Dual Port Gigabit Ethernet Controller"
+0x8086 0x107a "e1000" "Intel Corp.|82546EB Dual Port Gigabit Ethernet Controller (Fiber)"
+0x8086 0x107b "e1000" "Intel Corp.|82546EB Dual Port Gigabit Ethernet Controller (Copper)"
+0x8086 0x107c "e1000" "Intel Corp.|82541PI Gigabit Ethernet Controller"
+0x8086 0x107d "e1000" "Intel Corp.|82572EI Gigabit Ethernet Controller"
+0x8086 0x107e "e1000" "Intel Corp.|82572EI Gigabit Ethernet Controller"
+0x8086 0x107f "e1000" "Intel Corp.|82572EI Gigabit Ethernet Controller"
+0x8086 0x1080 "unknown" "Intel Corp.|FA82537EP 56K V.92 Data/Fax Modem PCI"
+0x8086 0x1081 "unknown" "Intel Corp.|Enterprise Southbridge LAN Copper"
+0x8086 0x1082 "unknown" "Intel Corp.|Enterprise Southbridge LAN fiber"
+0x8086 0x1083 "unknown" "Intel Corp.|Enterprise Southbridge LAN SERDES"
+0x8086 0x1084 "eider" "Intel Corp.|Enterprise Southbridge IDE Redirection"
+0x8086 0x1085 "unknown" "Intel Corp.|Enterprise Southbridge Serial Port Redirection"
+0x8086 0x1086 "unknown" "Intel Corp.|Enterprise Southbridge IPMI/KCS0"
+0x8086 0x1087 "unknown" "Intel Corp.|Enterprise Southbridge UHCI Redirection"
+0x8086 0x1089 "unknown" "Intel Corp.|Enterprise Southbridge BT"
+0x8086 0x108a "e1000" "Intel Corp.|82546EB Gigabit Ethernet Controller"
+0x8086 0x108b "e1000" "Intel Corp.|82573V Gigabit Ethernet Controller"
+0x8086 0x108c "e1000" "Intel Corp.|82573E Gigabit Ethernet Controller"
+0x8086 0x108d "eider" ""
+0x8086 0x108e "iamt" "Intel Corporation|82573E KCS"
+0x8086 0x108f "unknown" "Intel Corporation|Intel(R) Active Management Technology - SOL"
+0x8086 0x1091 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1092 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1093 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1094 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1095 "e100" "Intel Corp.|Ethernet Controller"
+0x8086 0x1096 "e1000" "Intel Corp.|Enterprise Southbridge DPT LAN Copper"
+0x8086 0x1097 "unknown" "Intel Corp.|Enterprise Southbridge DPT LAN fiber"
+0x8086 0x1098 "e1000" "Intel Corp.|Enterprise Southbridge DPT LAN SERDES"
+0x8086 0x1099 "e1000" "Intel Corp.|82546GB Gigabit Ethernet Controller"
+0x8086 0x109a "e1000" "Intel Corp.|82573L Gigabit Ethernet Controller"
+0x8086 0x109b "unknown" "Intel Corporation|82546GB PRO/1000 GF Quad Port Server Adapter"
+0x8086 0x10a0 "unknown" "Intel Corporation|82571EB PRO/1000 AT Quad Port Bypass Adapter"
+0x8086 0x10a1 "unknown" "Intel Corporation|82571EB PRO/1000 AF Quad Port Bypass Adapter"
+0x8086 0x10b0 "unknown" "Intel Corporation|82573L PRO/1000 PL Network Connection"
+0x8086 0x10b2 "unknown" "Intel Corporation|82573V PRO/1000 PM Network Connection"
+0x8086 0x10b3 "unknown" "Intel Corporation|82573E PRO/1000 PM Network Connection"
+0x8086 0x10b4 "unknown" "Intel Corporation|82573L PRO/1000 PL Network Connection"
+0x8086 0x10b5 "e1000" "Intel Corporation|82546GB PRO/1000 GT Quad Port Server Adapter"
+0x8086 0x10b9 "e1000" "Intel Corporation|82572EI Gigabit Ethernet Controller (Copper)"
+0x8086 0x10ba "e1000" "Intel Corporation|80003ES2LAN Gigabit Ethernet Controller (Copper)"
+0x8086 0x10bb "e1000" "Intel Corporation|80003ES2LAN Gigabit Ethernet Controller (Serdes)"
+0x8086 0x10c6 "megaraid" "Intel Corp.|MegaRAID 438"
+0x8086 0x10c7 "megaraid" "Intel Corp.|MegaRAID T5"
+0x8086 0x10cc "megaraid" "Intel Corp.|MegaRAID"
+0x8086 0x10cd "megaraid" "Intel Corp.|HP NetRAID-1Si"
+0x8086 0x1100 "unknown" "Intel Corp.|82815 Host-Hub Interface Bridge / DRAM Ctrlr"
+0x8086 0x1101 "unknown" "Intel Corp.|82815 AGP Bridge"
+0x8086 0x1102 "unknown" "Intel Corp.|82815 Internal Graphics Device"
+0x8086 0x1107 "unknown" "Intel Corp.|PRO/1000 MF Server Adapter (LX)"
+0x8086 0x1110 "unknown" "Intel Corp.|8x815 Host-Hub Interface Bridge / DRAM Ctrlr"
+0x8086 0x1111 "megaraid" "Intel Corp.|PowerEdge RAID Controller 2/SC"
+0x8086 0x1112 "unknown" "Intel Corp.|82815 Internal Graphics Device"
+0x8086 0x1120 "unknown" "Intel Corp.|82815 Host-Hub Interface Bridge / DRAM Ctrlr"
+0x8086 0x1121 "unknown" "Intel Corp.|82815 AGP Bridge"
+0x8086 0x1130 "intel-agp" "Intel Corp.|82815 815 Chipset Host Bridge and Memory Controller Hub"
+0x8086 0x1131 "unknown" "Intel Corp.|82815/82815EM/EP AGP Bridge"
+0x8086 0x1132 "Card:Intel 815" "Intel Corp.|82815 CGC [Chipset Graphics Controller]"
+0x8086 0x113c "megaraid" "Intel Corp.|MegaRAID"
+0x8086 0x1161 "unknown" "Intel Corp.|82806AA PCI64 Hub Advanced Programmable Interrupt Controller"
+0x8086 0x1162 "unknown" "Intel Corp.|Xscale 80200 Big Endian Companion Chip"
+0x8086 0x1200 "paep" "Intel Corp.|Unknown device"
+0x8086 0x1209 "eepro100" "Intel Corp.|82559ER"
+0x8086 0x1221 "i82092" "Intel Corp.|82092AA_0"
+0x8086 0x1222 "yenta_socket" "Intel Corp.|82092AA_1"
+0x8086 0x1223 "unknown" "Intel Corp.|SAA7116"
+0x8086 0x1225 "unknown" "Intel Corp.|82452KX/GX [Orion]"
+0x8086 0x1226 "unknown" "Intel Corp.|82596"
+0x8086 0x1227 "eepro100" "Intel Corp.|82865 [Ether Express Pro 100]"
+0x8086 0x1228 "eepro100" "Intel Corp.|82556 [Ether Express Pro 100 Smart]"
+0x8086 0x1229 0x0e11 0x3001 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN*"
+0x8086 0x1229 0x0e11 0x3002 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN*"
+0x8086 0x1229 0x0e11 0x3003 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN*"
+0x8086 0x1229 0x0e11 0x3004 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN*"
+0x8086 0x1229 0x0e11 0x3005 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN*"
+0x8086 0x1229 0x0e11 0x3006 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN*"
+0x8086 0x1229 0x0e11 0x3007 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN*"
+0x8086 0x1229 0x0e11 0xb01e "eepro100" "Intel Corp.|NC3120 Fast Ethernet NIC"
+0x8086 0x1229 0x0e11 0xb01f "eepro100" "Intel Corp.|NC3122 Fast Ethernet NIC (dual port)"
+0x8086 0x1229 0x0e11 0xb02f "eepro100" "Intel Corp.|NC1120 Ethernet NIC"
+0x8086 0x1229 0x0e11 0xb04a "eepro100" "Intel Corp.|Netelligent 10/100TX NIC with Wake on LAN"
+0x8086 0x1229 0x0e11 0xb0c6 "eepro100" "Intel Corp.|NC3161 Fast Ethernet NIC (embedded, WOL)"
+0x8086 0x1229 0x0e11 0xb0c7 "eepro100" "Intel Corp.|NC3160 Fast Ethernet NIC (embedded)"
+0x8086 0x1229 0x0e11 0xb0d7 "eepro100" "Intel Corp.|NC3121 Fast Ethernet NIC (WOL)"
+0x8086 0x1229 0x0e11 0xb0dd "eepro100" "Intel Corp.|NC3131 Fast Ethernet NIC (dual port)"
+0x8086 0x1229 0x0e11 0xb0de "eepro100" "Intel Corp.|NC3132 Fast Ethernet Module (dual port)"
+0x8086 0x1229 0x0e11 0xb0e1 "eepro100" "Intel Corp.|NC3133 Fast Ethernet Module (100-FX)"
+0x8086 0x1229 0x0e11 0xb134 "eepro100" "Intel Corp.|NC3163 Fast Ethernet NIC (embedded, WOL)"
+0x8086 0x1229 0x0e11 0xb13c "eepro100" "Intel Corp.|NC3162 Fast Ethernet NIC (embedded)"
+0x8086 0x1229 0x0e11 0xb144 "eepro100" "Intel Corp.|NC3123 Fast Ethernet NIC (WOL)"
+0x8086 0x1229 0x0e11 0xb163 "eepro100" "Intel Corp.|NC3134 Fast Ethernet NIC (dual port)"
+0x8086 0x1229 0x0e11 0xb164 "eepro100" "Intel Corp.|NC3135 Fast Ethernet Upgrade Module (dual port)"
+0x8086 0x1229 0x0e11 0xb1a4 "eepro100" "Intel Corp.|NC7131 Gigabit Server Adapter"
+0x8086 0x1229 0x1014 0x005c "eepro100" "Intel Corp.|82558B Ethernet Pro 10/100"
+0x8086 0x1229 0x1014 0x01bc "eepro100" "Intel Corp.|82559 Fast Ethernet LAN On Motherboard"
+0x8086 0x1229 0x1014 0x01f1 "eepro100" "Intel Corp.|10/100 Ethernet Server Adapter"
+0x8086 0x1229 0x1014 0x01f2 "eepro100" "Intel Corp.|10/100 Ethernet Server Adapter"
+0x8086 0x1229 0x1014 0x0207 "eepro100" "Intel Corp.|Ethernet Pro/100 S"
+0x8086 0x1229 0x1014 0x0232 "eepro100" "Intel Corp.|10/100 Dual Port Server Adapter"
+0x8086 0x1229 0x1014 0x023a "eepro100" "Intel Corp.|ThinkPad R30"
+0x8086 0x1229 0x1014 0x105c "eepro100" "Intel Corp.|Netfinity 10/100"
+0x8086 0x1229 0x1014 0x2205 "eepro100" "Intel Corp.|ThinkPad A22p"
+0x8086 0x1229 0x1014 0x305c "eepro100" "Intel Corp.|10/100 EtherJet Management Adapter"
+0x8086 0x1229 0x1014 0x405c "eepro100" "Intel Corp.|10/100 EtherJet Adapter with Alert on LAN"
+0x8086 0x1229 0x1014 0x505c "eepro100" "Intel Corp.|10/100 EtherJet Secure Management Adapter"
+0x8086 0x1229 0x1014 0x605c "eepro100" "Intel Corp.|10/100 EtherJet Secure Management Adapter"
+0x8086 0x1229 0x1014 0x705c "eepro100" "Intel Corp.|10/100 Netfinity 10/100 Ethernet Security Adapter"
+0x8086 0x1229 0x1014 0x805c "eepro100" "Intel Corp.|10/100 Netfinity 10/100 Ethernet Security Adapter"
+0x8086 0x1229 0x1028 0x009b "eepro100" "Intel Corp.|PowerEdge 2550"
+0x8086 0x1229 0x1028 0x00ce "eepro100" "Intel Corp.|PowerEdge 1400"
+0x8086 0x1229 0x1033 0x8000 "eepro100" "Intel Corp.|PC-9821X-B06"
+0x8086 0x1229 0x1033 0x8016 "eepro100" "Intel Corp.|PK-UG-X006"
+0x8086 0x1229 0x1033 0x801f "eepro100" "Intel Corp.|PK-UG-X006"
+0x8086 0x1229 0x1033 0x8026 "eepro100" "Intel Corp.|PK-UG-X006"
+0x8086 0x1229 0x1033 0x8063 "eepro100" "Intel Corp.|82559-based Fast Ethernet Adapter"
+0x8086 0x1229 0x1033 0x8064 "eepro100" "Intel Corp.|82559-based Fast Ethernet Adapter"
+0x8086 0x1229 0x103c 0x10c0 "eepro100" "Intel Corp.|NetServer 10/100TX"
+0x8086 0x1229 0x103c 0x10c3 "eepro100" "Intel Corp.|NetServer 10/100TX"
+0x8086 0x1229 0x103c 0x10ca "eepro100" "Intel Corp.|NetServer 10/100TX"
+0x8086 0x1229 0x103c 0x10cb "eepro100" "Intel Corp.|NetServer 10/100TX"
+0x8086 0x1229 0x103c 0x10e3 "eepro100" "Intel Corp.|NetServer 10/100TX"
+0x8086 0x1229 0x103c 0x10e4 "eepro100" "Intel Corp.|NetServer 10/100TX"
+0x8086 0x1229 0x103c 0x1200 "eepro100" "Intel Corp.|NetServer 10/100TX"
+0x8086 0x1229 0x108e 0x10cf "eepro100" "Intel Corp.|EtherExpress PRO/100(B)"
+0x8086 0x1229 0x10c3 0x1100 "eepro100" "Intel Corp.|SmartEther100 SC1100"
+0x8086 0x1229 0x10cf 0x1115 "eepro100" "Intel Corp.|8255x-based Ethernet Adapter (10/100)"
+0x8086 0x1229 0x10cf 0x1143 "eepro100" "Intel Corp.|8255x-based Ethernet Adapter (10/100)"
+0x8086 0x1229 0x110a 0x008b "eepro100" "Intel Corp.|82551QM Fast Ethernet Multifuction PCI/CardBus Controller"
+0x8086 0x1229 0x1179 0x0001 "eepro100" "Intel Corp.|8255x-based Ethernet Adapter (10/100)"
+0x8086 0x1229 0x1179 0x0002 "eepro100" "Intel Corp.|PCI FastEther LAN on Docker"
+0x8086 0x1229 0x1179 0x0003 "eepro100" "Intel Corp.|8255x-based Fast Ethernet"
+0x8086 0x1229 0x1259 0x2560 "eepro100" "Intel Corp.|AT-2560 100"
+0x8086 0x1229 0x1259 0x2561 "eepro100" "Intel Corp.|AT-2560 100 FX Ethernet Adapter"
+0x8086 0x1229 0x1266 0x0001 "eepro100" "Intel Corp.|NE10/100 Adapter"
+0x8086 0x1229 0x13e9 0x1000 "eepro100" "Intel Corp.|6221L-4U"
+0x8086 0x1229 0x144d 0x2501 "eepro100" "Intel Corp.|SEM-2000 MiniPCI LAN Adapter"
+0x8086 0x1229 0x144d 0x2502 "eepro100" "Intel Corp.|SEM-2100IL MiniPCI LAN Adapter"
+0x8086 0x1229 0x1668 0x1100 "eepro100" "Intel Corp.|EtherExpress PRO/100B (TX) (MiniPCI Ethernet+Modem)"
+0x8086 0x1229 0x1775 0xce90 "eepro100" "Intel Corporation|CE9"
+0x8086 0x1229 0x4c53 0x1080 "eepro100" "Intel Corp.|CT8 mainboard"
+0x8086 0x1229 0x4c53 0x10e0 "eepro100" "Intel Corp.|PSL09 PrPMC"
+0x8086 0x1229 0x8086 0x0001 "eepro100" "Intel Corp.|EtherExpress PRO/100B (TX)"
+0x8086 0x1229 0x8086 0x0002 "eepro100" "Intel Corp.|EtherExpress PRO/100B (T4)"
+0x8086 0x1229 0x8086 0x0003 "eepro100" "Intel Corp.|EtherExpress PRO/10+"
+0x8086 0x1229 0x8086 0x0004 "eepro100" "Intel Corp.|EtherExpress PRO/100 WfM"
+0x8086 0x1229 0x8086 0x0005 "eepro100" "Intel Corp.|82557 10/100"
+0x8086 0x1229 0x8086 0x0006 "eepro100" "Intel Corp.|82557 10/100 with Wake on LAN"
+0x8086 0x1229 0x8086 0x0007 "eepro100" "Intel Corp.|82558 10/100 Adapter"
+0x8086 0x1229 0x8086 0x0008 "eepro100" "Intel Corp.|82558 10/100 with Wake on LAN"
+0x8086 0x1229 0x8086 0x0009 "eepro100" "Intel Corp.|EtherExpress PRO/100+"
+0x8086 0x1229 0x8086 0x000a "e100" "Intel Corp.|82559 [Ethernet Pro 100]"
+0x8086 0x1229 0x8086 0x000b "eepro100" "Intel Corp.|EtherExpress PRO/100+"
+0x8086 0x1229 0x8086 0x000c "e100" "Intel Corp.|EtherExpress PRO/100+ Management Adapter"
+0x8086 0x1229 0x8086 0x000d "eepro100" "Intel Corp.|EtherExpress PRO/100+ Alert On LAN II* Adapter"
+0x8086 0x1229 0x8086 0x000e "eepro100" "Intel Corp.|EtherExpress PRO/100+ Management Adapter with Alert On LAN*"
+0x8086 0x1229 0x8086 0x000f "eepro100" "Intel Corp.|EtherExpress PRO/100 Desktop Adapter"
+0x8086 0x1229 0x8086 0x0010 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Management Adapter"
+0x8086 0x1229 0x8086 0x0011 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Management Adapter"
+0x8086 0x1229 0x8086 0x0012 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Advanced Management Adapter (D)"
+0x8086 0x1229 0x8086 0x0013 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Advanced Management Adapter (E)"
+0x8086 0x1229 0x8086 0x0030 "eepro100" "Intel Corp.|EtherExpress PRO/100 Management Adapter with Alert On LAN* GC"
+0x8086 0x1229 0x8086 0x0031 "eepro100" "Intel Corp.|EtherExpress PRO/100 Desktop Adapter"
+0x8086 0x1229 0x8086 0x0040 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Desktop Adapter"
+0x8086 0x1229 0x8086 0x0041 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Desktop Adapter"
+0x8086 0x1229 0x8086 0x0042 "eepro100" "Intel Corp.|EtherExpress PRO/100 Desktop Adapter"
+0x8086 0x1229 0x8086 0x0050 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Desktop Adapter"
+0x8086 0x1229 0x8086 0x1009 "eepro100" "Intel Corp.|EtherExpress PRO/100+ Server Adapter"
+0x8086 0x1229 0x8086 0x100c "eepro100" "Intel Corp.|EtherExpress PRO/100+ Server Adapter (PILA8470B)"
+0x8086 0x1229 0x8086 0x1012 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Server Adapter (D)"
+0x8086 0x1229 0x8086 0x1013 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Server Adapter (E)"
+0x8086 0x1229 0x8086 0x1015 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Dual Port Server Adapter"
+0x8086 0x1229 0x8086 0x1017 "eepro100" "Intel Corp.|EtherExpress PRO/100+ Dual Port Server Adapter"
+0x8086 0x1229 0x8086 0x1030 "eepro100" "Intel Corp.|EtherExpress PRO/100+ Management Adapter with Alert On LAN* G Server"
+0x8086 0x1229 0x8086 0x1040 "e100" "Intel Corp.|EtherExpress PRO/100 S Server Adapter"
+0x8086 0x1229 0x8086 0x1041 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Server Adapter"
+0x8086 0x1229 0x8086 0x1042 "eepro100" "Intel Corp.|EtherExpress PRO/100 Server Adapter"
+0x8086 0x1229 0x8086 0x1050 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Server Adapter"
+0x8086 0x1229 0x8086 0x1051 "eepro100" "Intel Corp.|EtherExpress PRO/100 Server Adapter"
+0x8086 0x1229 0x8086 0x1052 "eepro100" "Intel Corp.|EtherExpress PRO/100 Server Adapter"
+0x8086 0x1229 0x8086 0x10f0 "eepro100" "Intel Corp.|EtherExpress PRO/100+ Dual Port Adapter"
+0x8086 0x1229 0x8086 0x2009 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Mobile Adapter"
+0x8086 0x1229 0x8086 0x200d "eepro100" "Intel Corp.|EtherExpress PRO/100 Cardbus"
+0x8086 0x1229 0x8086 0x200e "eepro100" "Intel Corp.|EtherExpress PRO/100 LAN+V90 Cardbus Modem"
+0x8086 0x1229 0x8086 0x200f "eepro100" "Intel Corp.|EtherExpress PRO/100 SR Mobile Adapter"
+0x8086 0x1229 0x8086 0x2010 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2013 "eepro100" "Intel Corp.|EtherExpress PRO/100 SR Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2016 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Mobile Adapter"
+0x8086 0x1229 0x8086 0x2017 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Combo Mobile Adapter"
+0x8086 0x1229 0x8086 0x2018 "eepro100" "Intel Corp.|EtherExpress PRO/100 SR Mobile Adapter"
+0x8086 0x1229 0x8086 0x2019 "eepro100" "Intel Corp.|EtherExpress PRO/100 SR Combo Mobile Adapter"
+0x8086 0x1229 0x8086 0x2101 "eepro100" "Intel Corp.|EtherExpress PRO/100 P Mobile Adapter"
+0x8086 0x1229 0x8086 0x2102 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Adapter"
+0x8086 0x1229 0x8086 0x2103 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Adapter"
+0x8086 0x1229 0x8086 0x2104 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Adapter"
+0x8086 0x1229 0x8086 0x2105 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Adapter"
+0x8086 0x1229 0x8086 0x2106 "eepro100" "Intel Corp.|EtherExpress PRO/100 P Mobile Adapter"
+0x8086 0x1229 0x8086 0x2107 "eepro100" "Intel Corp.|EtherExpress PRO/100 Network Connection"
+0x8086 0x1229 0x8086 0x2108 "eepro100" "Intel Corp.|EtherExpress PRO/100 Network Connection"
+0x8086 0x1229 0x8086 0x2200 "eepro100" "Intel Corp.|EtherExpress PRO/100 P Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2201 "eepro100" "Intel Corp.|EtherExpress PRO/100 P Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2202 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2203 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2204 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2205 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2206 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2207 "eepro100" "Intel Corp.|EtherExpress PRO/100 SP Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2208 "eepro100" "Intel Corp.|EtherExpress PRO/100 P Mobile Combo Adapter"
+0x8086 0x1229 0x8086 0x2402 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2407 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2408 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2409 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x240f "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2410 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2411 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2412 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x2413 "eepro100" "Intel Corp.|EtherExpress PRO/100+ MiniPCI"
+0x8086 0x1229 0x8086 0x3000 "eepro100" "Intel Corp.|82559 Fast Ethernet LAN on Motherboard"
+0x8086 0x1229 0x8086 0x3001 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Basic Alert on LAN*"
+0x8086 0x1229 0x8086 0x3002 "eepro100" "Intel Corp.|82559 Fast Ethernet LOM with Alert on LAN II*"
+0x8086 0x1229 0x8086 0x3006 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Network Connection"
+0x8086 0x1229 0x8086 0x3007 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Network Connection"
+0x8086 0x1229 0x8086 0x3008 "eepro100" "Intel Corp.|EtherExpress PRO/100 Network Connection"
+0x8086 0x1229 0x8086 0x3010 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Network Connection"
+0x8086 0x1229 0x8086 0x3011 "eepro100" "Intel Corp.|EtherExpress PRO/100 S Network Connection"
+0x8086 0x1229 0x8086 0x3012 "eepro100" "Intel Corp.|EtherExpress PRO/100 Network Connection"
+0x8086 0x1229 0x8086 0x3411 "eepro100" "Intel Corp.|SDS2 Mainboard"
+0x8086 0x1229 "eepro100" "Intel Corp.|82559 [Ethernet Pro 100]"
+0x8086 0x122d "unknown" "Intel Corp.|430FX - 82437FX TSC [Triton I]"
+0x8086 0x122e "piix" "Intel Corp.|82371FB PIIX ISA [Triton I]"
+0x8086 0x1230 "piix" "Intel Corp.|82371FB PIIX IDE [Triton I]"
+0x8086 0x1231 "unknown" "Intel Corp.|DSVD Modem"
+0x8086 0x1234 "piix" "Intel Corp.|430MX - 82371MX MPIIX [430MX PCIset - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)]"
+0x8086 0x1235 "unknown" "Intel Corp.|430MX - 82437MX MTSC [430MX PCIset - 82437MX Mobile System Controller (MTSC) and 82438MX Mobile Data Path (MTDP)]"
+0x8086 0x1237 "unknown" "Intel Corp.|440FX - 82441FX PMC [Natoma]"
+0x8086 0x1239 "unknown" "Intel Corp.|82371FB"
+0x8086 0x123b "unknown" "Intel Corp.|82380PB"
+0x8086 0x123c "unknown" "Intel Corp.|82380AB"
+0x8086 0x123d "unknown" "Intel Corp.|683053 Programmable Interrupt Device"
+0x8086 0x123e "unknown" "Intel Corp.|82466GX Integrated Hot-Plug Controller (IHPC)"
+0x8086 0x123f "unknown" "Intel Corp.|82466GX Integrated Hot-Plug Controller (IHPC)"
+0x8086 0x1240 "unknown" "Intel Corp.|752 AGP"
+0x8086 0x124b "unknown" "Intel Corp.|82380FB"
+0x8086 0x1250 "unknown" "Intel Corp.|430HX - 82439HX TXC [Triton II]"
+0x8086 0x1360 "unknown" "Intel Corp.|82806AA PCI64 Hub PCI Bridge"
+0x8086 0x1361 "unknown" "Intel Corp.|82806AA PCI64 Hub Controller (HRes)"
+0x8086 0x1460 "unknown" "Intel Corp.|P64H2 PCI Bridge"
+0x8086 0x1461 "unknown" "Intel Corp.|82870P2 P64H2 I/OxAPIC"
+0x8086 0x1462 "unknown" "Intel Corp.|P64H2 PCI HotPlug Controller"
+0x8086 0x172a "paep" "Intel Corp.|AEP SSL Accelerator"
+0x8086 0x1960 0x0e11 0xc000 "unknown" "Compaq Computer Corp.|Remote Insight Controller"
+0x8086 0x1960 0x101e 0x0431 "megaraid" "Intel Corp.|MegaRAID 431 RAID Controller"
+0x8086 0x1960 0x101e 0x0438 "megaraid" "Intel Corp.|MegaRAID 438 Ultra2 LVD RAID Controller"
+0x8086 0x1960 0x101e 0x0466 "megaraid" "Intel Corp.|MegaRAID 466 Express Plus RAID Controller"
+0x8086 0x1960 0x101e 0x0467 "megaraid" "Intel Corp.|MegaRAID 467 Enterprise 1500 RAID Controller"
+0x8086 0x1960 0x101e 0x0490 "megaraid" "Intel Corp.|MegaRAID 490 Express 300 RAID Controller"
+0x8086 0x1960 0x101e 0x0762 "megaraid" "Intel Corp.|MegaRAID 762 Express RAID Controller"
+0x8086 0x1960 0x101e 0x09a0 "megaraid" "Intel Corp.|PowerEdge Expandable RAID Controller 2/SC"
+0x8086 0x1960 0x1028 0x0467 "megaraid" "Intel Corp.|PowerEdge Expandable RAID Controller 2/DC"
+0x8086 0x1960 0x1028 0x1111 "megaraid" "Intel Corp.|PowerEdge Expandable RAID Controller 2/SC"
+0x8086 0x1960 0x103c 0x03a2 "megaraid" "Intel Corp.|MegaRAID"
+0x8086 0x1960 0x103c 0x10c6 "megaraid" "Intel Corp.|MegaRAID 438, HP NetRAID-3Si"
+0x8086 0x1960 0x103c 0x10c7 "megaraid" "Intel Corp.|MegaRAID T5, Integrated HP NetRAID"
+0x8086 0x1960 0x103c 0x10cc "megaraid" "Intel Corp.|MegaRAID, Integrated HP NetRAID"
+0x8086 0x1960 0x103c 0x10cd "megaraid" "Intel Corp.|MegaRAID, Integrated HP NetRAID"
+0x8086 0x1960 0x105a 0x0000 "megaraid" "Intel Corp.|SuperTrak"
+0x8086 0x1960 0x105a 0x2168 "megaraid" "Intel Corp.|SuperTrak Pro"
+0x8086 0x1960 0x105a 0x5168 "megaraid" "Intel Corp.|SuperTrak66/100"
+0x8086 0x1960 0x1111 0x1111 "megaraid" "Intel Corp.|MegaRAID 466, PowerEdge Expandable RAID Controller 2/SC"
+0x8086 0x1960 0x1111 0x1112 "megaraid" "Intel Corp.|PowerEdge Expandable RAID Controller 2/SC"
+0x8086 0x1960 0x113c 0x03a2 "megaraid" "Intel Corp.|MegaRAID"
+0x8086 0x1960 0xe4bf 0x1010 "megaraid" "Intel Corp.|CG1-RADIO"
+0x8086 0x1960 0xe4bf 0x1020 "megaraid" "Intel Corp.|CU2-QUARTET"
+0x8086 0x1960 0xe4bf 0x1040 "megaraid" "Intel Corp.|CU1-CHORUS"
+0x8086 0x1960 0xe4bf 0x3100 "megaraid" "Intel Corp.|CX1-BAND"
+0x8086 0x1960 0xe4bf 0xffff "8250_pci" "Intel Corp.|PCI Serial Port"
+0x8086 0x1960 "megaraid" "Intel Corp.|80960RP [i960RP Microprocessor]"
+0x8086 0x1962 0x105a 0xffff "i2o_core" "Intel Corp.|"
+0x8086 0x1962 "unknown" "Intel Corp.|80960RM [i960RM Microprocessor]"
+0x8086 0x1a10 "unknown" "Intel Corp.|Celeron(tm) Processor to I/O Controller"
+0x8086 0x1a11 "unknown" "Intel Corp.|Celeron(tm) Processor to I/O Controller"
+0x8086 0x1a12 "unknown" "Intel Corp.|??? Eicon DIVA Server Voice PRI 2.0 (PCI)"
+0x8086 0x1a13 "unknown" "Intel Corp.|??? Eicon DIVA Server Voice PRI 2.0 (PCI)"
+0x8086 0x1a20 "unknown" "Intel Corp.|82840"
+0x8086 0x1a21 "intel-agp" "Intel Corp.|82840 840 (Carmel) Chipset Host Bridge (Hub A)"
+0x8086 0x1a22 "unknown" "Intel Corp.|82840 Host to I/O Hub Bridge (Quad PCI)"
+0x8086 0x1a23 "unknown" "Intel Corp.|82840 840 (Carmel) Chipset AGP Bridge"
+0x8086 0x1a24 "unknown" "Intel Corp.|82840 840 (Carmel) Chipset PCI Bridge (Hub B)"
+0x8086 0x1a30 "intel-agp" "Intel Corp.|82845 845 (Brookdale) Chipset Host Bridge"
+0x8086 0x1a31 "agpgart" "Intel Corp.|82845 845 (Brookdale) Chipset AGP Bridge"
+0x8086 0x1a38 "unknown" "Intel Corp.|Server DMA Controller"
+0x8086 0x1a48 "ixgb" "Intel Corp.|PRO/10GbE LR Server Adapter"
+0x8086 0x1b48 "ixgb" "Intel Corp.|PRO/10GbE SR Server Adapter"
+0x8086 0x2125 "unknown" "Intel Corp.|82801AB AC97 Audio Controller"
+0x8086 0x2240 "unknown" "Intel Corp.|82815 815 Chipset ISA Bridge"
+0x8086 0x224e "unknown" "Intel Corp.|82815 815 Chipset PCI Bridge"
+0x8086 0x2410 "i8xx_tco" "Intel Corp.|82801AA 810 Chipset LPC Interface Bridge"
+0x8086 0x2411 "piix" "Intel Corp.|82801AA 810 Chipset IDE Controller"
+0x8086 0x2412 "uhci-hcd" "Intel Corp.|82801AA 810 Chipset USB Controller"
+0x8086 0x2413 "i2c-i801" "Intel Corp.|82801AA 810 Chipset SMBus Controller"
+0x8086 0x2415 "snd-intel8x0" "Intel Corp.|82801AA 810 Chipset AC'97 Audio Controller"
+0x8086 0x2416 "slamr" "Intel Corp.|82801AA 810 Chipset AC'97 PCI Modem"
+0x8086 0x2418 "hw_random" "Intel Corp.|82801AA 810 Chipset Hub to PCI Bridge"
+0x8086 0x2420 "i8xx_tco" "Intel Corp.|82801AB 810 Chipset LPC Interface Bridge"
+0x8086 0x2421 "piix" "Intel Corp.|82801AB 810 Chipset IDE Controller"
+0x8086 0x2422 "uhci-hcd" "Intel Corp.|82801AB 810 Chipset USB Controller"
+0x8086 0x2423 "i2c-i801" "Intel Corp.|82801AB 810 Chipset SMBus Controller"
+0x8086 0x2425 "i810_audio" "Intel Corp.|82901 810 Chipset AC'97 Audio Controller"
+0x8086 0x2426 "slamr" "Intel Corp.|82801AB 810 Chipset AC'97 PCI Modem"
+0x8086 0x2428 "hw_random" "Intel Corp.|82801AB 810 Chipset Hub to PCI Bridge"
+0x8086 0x2430 "hw_random" "Intel Corp.|82801AB PCI Bridge"
+0x8086 0x2431 "unknown" "Intel Corp.|82810 pci bus"
+0x8086 0x2440 "i8xx_tco" "Intel Corp.|82820 815e (Camino 2) Chipset ISA Bridge (ICH2)"
+0x8086 0x2441 "unknown" "Intel Corp.|82801BA IDE Controller (UltraATA/66)"
+0x8086 0x2442 "uhci-hcd" "Intel Corp.|82820 815e (Camino 2) Chipset USB (Hub A)"
+0x8086 0x2443 "i2c-i801" "Intel Corp.|82820 815e (Camino 2) Chipset SMBus"
+0x8086 0x2444 "uhci-hcd" "Intel Corp.|82820 815e (Camino 2) Chipset USB (Hub B)"
+0x8086 0x2445 "i810_audio" "Intel Corp.|ICH2 810 Chipset AC'97 Audio Controller"
+0x8086 0x2446 "snd-intel8x0m" "Intel Corp.|82820 820 (Camino 2) Chipset AC'97 Modem Controller"
+0x8086 0x2448 "hw_random" "Intel Corp.|82801 Hub Interface to PCI Bridge"
+0x8086 0x2449 "eepro100" "Intel Corp.|EtherExpress PRO/100"
+0x8086 0x244a "piix" "Intel Corp.|82820 820 (Camino 2) Chipset IDE U100 (-M)"
+0x8086 0x244b "piix" "Intel Corp.|82820 815e (Camino 2) Chipset IDE U100"
+0x8086 0x244c "i8xx_tco" "Intel Corp.|82801BAM LPC Interface Bridge"
+0x8086 0x244e "hw_random" "Intel Corp.|82820 815e (Camino 2) Chipset PCI"
+0x8086 0x2450 "i8xx_tco" "Intel Corp.|82801E ISA Bridge (LPC)"
+0x8086 0x2452 "unknown" "Intel Corp.|82801E USB"
+0x8086 0x2453 "unknown" "Intel Corp.|82801E SMBus"
+0x8086 0x2459 "eepro100" "Intel Corp.|82801E Ethernet Controller 0"
+0x8086 0x245b "piix" "Intel Corp.|82801E IDE U100"
+0x8086 0x245d "eepro100" "Intel Corp.|82801E Ethernet Controller 1"
+0x8086 0x245e "hw_random" "Intel Corp.|82801E PCI Bridge"
+0x8086 0x2480 "i8xx_tco" "Intel Corp.|82801CA LPC Interface"
+0x8086 0x2481 "unknown" "Intel Corp.|82801CA IDE Controller (UltraATA/66)"
+0x8086 0x2482 "uhci-hcd" "Intel Corp.|82801 USB Controller"
+0x8086 0x2483 "i2c-i801" "Intel Corp.|82801 SMBus Controller"
+0x8086 0x2484 "uhci-hcd" "Intel Corp.|82801 USB Controller"
+0x8086 0x2485 "snd-intel8x0" "Intel Corp.|82801 AC97 Audio Controller"
+0x8086 0x2486 "slamr" "Intel Corp.|PCTEL 2304 WT V.92 MDC Modem"
+0x8086 0x2487 "uhci-hcd" "Intel Corp.|82801 USB Controller"
+0x8086 0x248a "piix" "Intel Corp.|82801 UltraATA IDE Controller"
+0x8086 0x248b "piix" "Intel Corp.|82801CA/CAM UltraATA IDE Controller"
+0x8086 0x248c "i8xx_tco" "Intel Corp.|82801 LPC Interface"
+0x8086 0x248d "unknown" "Intel Corp.|82801?? USB 2.0 EHCI Contoroller"
+0x8086 0x24c0 "i8xx_tco" "Intel Corp.|82801DB 845G/GL Chipset ISA Bridge (ICH4)"
+0x8086 0x24c1 "piix" "Intel Corp.|82801DBL (ICH4-L) IDE Controller"
+0x8086 0x24c2 "uhci-hcd" "Intel Corp.|82801DB USB Controller"
+0x8086 0x24c3 "i2c-i801" "Intel Corp.|82801DB SMBus Controller"
+0x8086 0x24c4 "uhci-hcd" "Intel Corp.|82801DB USB Controller"
+0x8086 0x24c5 "snd-intel8x0" "Intel Corp.|ICH4 845G/GL Chipset AC'97 Audio Controller"
+0x8086 0x24c6 0x003c 0x1025 "snd-intel8x0m" "Intel Corporation|Acer Aspire 2001WLCi (Compal CL50 motherboard) implementation"
+0x8086 0x24c6 0x1014 0x0525 "slamr" "Intel Corp.|82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
+0x8086 0x24c6 0x1014 0x0559 "snd-intel8x0m" "Intel Corporation|Thinkpad R50e model 1634"
+0x8086 0x24c6 0x1025 0x003c "snd-intel8x0m" "Intel Corporation|Aspire 2001WLCi (Compal CL50 motherboard) implementation"
+0x8086 0x24c6 0x1025 0x005a "Hsf:www.linmodems.org" "Intel Corp.|TravelMate 290"
+0x8086 0x24c6 0x1028 0x0196 "snd-intel8x0m" "Intel Corp.|Inspiron 5160"
+0x8086 0x24c6 0x103c 0x088c "Hsf:www.linmodems.org" "Intel Corp.|nc8000 laptop"
+0x8086 0x24c6 0x103c 0x0890 "Hsf:www.linmodems.org" "Intel Corp.|NC6000 laptop"
+0x8086 0x24c6 0x103c 0x08b0 "snd-intel8x0m" "Intel Corporation|tc1100 tablet"
+0x8086 0x24c6 0x1071 0x8160 "Hsf:www.linmodems.org" "Intel Corp.|MIM2000"
+0x8086 0x24c6 0x1179 0x0001 "slamr" "Intel Corp.|82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
+0x8086 0x24c6 0x144d 0x2115 "slamr" "Intel Corp.|82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
+0x8086 0x24c6 0x14c0 0x0012 "slamr" "Intel Corp.|82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
+0x8086 0x24c6 0x17c0 0x1069 "slamr" "Intel Corp.|82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
+0x8086 0x24c6 "snd-intel8x0m" "Intel Corp.|82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller"
+0x8086 0x24c7 "uhci-hcd" "Intel Corp.|82801DB USB Controller"
+0x8086 0x24ca "piix" "Intel Corp.|82801DBM IDE Controller (UltraATA/100)"
+0x8086 0x24cb "piix" "Intel Corp.|82801DB 845G/GL Chipset IDE Controller"
+0x8086 0x24cc "i8xx_tco" "Intel Corp.|82801DBM LPC Interface Bridge"
+0x8086 0x24cd "ehci-hcd" "Intel Corp.|82801DB USB Enhanced Controller"
+0x8086 0x24d0 "i8xx_tco" "Intel Corp.|82801EB ISA Bridge (LPC)"
+0x8086 0x24d1 "ata_piix" "Intel Corp.|82801EB ICH5 IDE (SATA)"
+0x8086 0x24d2 "uhci-hcd" "Intel Corp.|USB Controller"
+0x8086 0x24d3 "i2c-i801" "Intel Corp.|82801EB SMBus"
+0x8086 0x24d4 "uhci-hcd" "Intel Corp.|USB Controller"
+0x8086 0x24d5 "snd-intel8x0" "Intel Corp.|82801EB AC'97 Audio"
+0x8086 0x24d6 "slamr" "Intel Corp.|82801EB AC'97 Modem Controller"
+0x8086 0x24d7 "uhci-hcd" "Intel Corp.|USB Controller"
+0x8086 0x24db "ata_piix" "Intel Corp.|82801EB ICH5 IDE"
+0x8086 0x24dc "unknown" "Intel Corp.|82801EB LPC Interface Controller"
+0x8086 0x24dd "ehci-hcd" "Intel Corp.|USB Enhanced Controller"
+0x8086 0x24de "uhci-hcd" "Intel Corp.|82801EB USB EHCI Controller #2"
+0x8086 0x24df "ata_piix" "Intel Corp.|82801ER ICH5 IDE (SATA Raid)"
+0x8086 0x2500 "intel-agp" "Intel Corp.|82820 820 (Camino) Chipset Host Bridge (MCH)"
+0x8086 0x2501 "intel-agp" "Intel Corp.|82820 820 (Camino) Chipset Host Bridge (MCH)"
+0x8086 0x2502 "unknown" "Intel Corp.|82820"
+0x8086 0x2503 "unknown" "Intel Corp.|82820"
+0x8086 0x2504 "unknown" "Intel Corp.|82820"
+0x8086 0x250b "unknown" "Intel Corp.|82820 820 (Camino) Chipset Host Bridge"
+0x8086 0x250f "unknown" "Intel Corp.|82820 820 (Camino) Chipset PCI to AGP Bridge"
+0x8086 0x2520 "unknown" "Intel Corp.|82805AA MTH Memory Translator Hub"
+0x8086 0x2521 "unknown" "Intel Corp.|82804AA MRH-S Memory Repeater Hub for SDRAM"
+0x8086 0x2530 "intel-agp" "Intel Corp.|82850 850 (Tehama) Chipset Host Bridge (MCH)"
+0x8086 0x2531 "intel-agp" "Intel Corp.|82860 860 (Wombat) Chipset Host Bridge (MCH)"
+0x8086 0x2532 "agpgart" "Intel Corp.|82850 850 (Tehama) Chipset AGP Bridge"
+0x8086 0x2533 "agpgart" "Intel Corp.|82860 860 (Wombat) Chipset AGP Bridge"
+0x8086 0x2534 "unknown" "Intel Corp.|82860 Hub Interface_C Bridge"
+0x8086 0x2535 "unknown" "Intel Corp.|82860 PCI Bridge"
+0x8086 0x2536 "unknown" "Intel Corp.|82860 PCI Bridge"
+0x8086 0x2537 "unknown" "Intel Corp.|82850/82860 (i850/i860) Controller"
+0x8086 0x2539 "unknown" "Intel Corp.|82860 (Quad Processor mode)"
+0x8086 0x2540 "e7xxx_edac" "Intel Corp.|E7500 DRAM Controller"
+0x8086 0x2541 "unknown" "Intel Corp.|E7500 DRAM Controller Error Reporting"
+0x8086 0x2543 "unknown" "Intel Corp.|E7500 HI_B Virtual PCI-to-PCI Bridge (F0)"
+0x8086 0x2544 "unknown" "Intel Corp.|E7500 HI_B Virtual PCI-to-PCI Bridge (F1)"
+0x8086 0x2545 "unknown" "Intel Corp.|E7500 HI_C Virtual PCI-to-PCI Bridge (F0)"
+0x8086 0x2546 "unknown" "Intel Corp.|E7500 HI_C Virtual PCI-to-PCI Bridge (F1)"
+0x8086 0x2547 "unknown" "Intel Corp.|E7500 HI_D Virtual PCI-to-PCI Bridge (F0)"
+0x8086 0x2548 "unknown" "Intel Corp.|E7500 HI_D Virtual PCI-to-PCI Bridge (F1)"
+0x8086 0x254c "e7xxx_edac" "Intel Corp.|E7501 Host Controller"
+0x8086 0x2550 "intel-agp" "Intel Corp.|E7505 Host Controller"
+0x8086 0x2551 "unknown" "Intel Corp.|E7205/E7505 Host RAS Controller"
+0x8086 0x2552 "unknown" "Intel Corp.|E7205/E7505 PCI-to-AGP Bridge"
+0x8086 0x2553 "unknown" "Intel Corp.|E7505 Hub Interface_B PCI-to-PCI Bridge"
+0x8086 0x2554 "unknown" "Intel Corp.|E7505 Hub I/F_B PCI-to-PCI Bridge Error Report"
+0x8086 0x255d "intel-agp" "Intel Corp.|E7205 Host Controller"
+0x8086 0x2560 "intel-agp" "Intel Corp.|82845 845 Chipset Host Bridge (MCH)"
+0x8086 0x2561 "unknown" "Intel Corp.|82845G/GL [Brookdale-G] Chipset AGP Bridge"
+0x8086 0x2562 "Card:Intel 845" "Intel Corp.|82845 CGC [Chipset Graphics Controller]"
+0x8086 0x2570 "intel-agp" "Intel Corp.|82865G [Springdale-G] Chipset Host Bridge"
+0x8086 0x2571 "unknown" "Intel Corp.|82865G/PE/P Processor to AGP Controller"
+0x8086 0x2572 "Card:Intel 865" "Intel Corp.|865 Chipset Graphics Controller"
+0x8086 0x2573 "unknown" "Intel Corp.|82865G/PE/P Processor to PCI to CSA Bridge"
+0x8086 0x2576 "unknown" "Intel Corp.|82864G/PE/P Processor to I/O Memory Interface"
+0x8086 0x2578 "intel-agp" "Intel Corp.|875 DRAM Controller / Host-Hub Interface"
+0x8086 0x2579 "unknown" "Intel Corp.|875 Host-AGP Bridge"
+0x8086 0x257a "unknown" "Intel Corp.| "
+0x8086 0x257b "unknown" "Intel Corp.|82875P Processor to PCI to CSA Bridge"
+0x8086 0x257e "unknown" "Intel Corp.|82875P Processor to I/O Memory Interface"
+0x8086 0x2580 "intel-agp" "Intel Corp.|Memory Controller Hub"
+0x8086 0x2581 "unknown" "Intel Corp.|Memory Controller Hub PCI Express Port"
+0x8086 0x2582 "Card:Intel 915" "Intel Corp.|82915G Express Chipset Family Graphics Controller"
+0x8086 0x2584 "unknown" "Intel Corp.|Workstation Memory Controller Hub"
+0x8086 0x2585 "unknown" "Intel Corp.|Workstation Memory Controller Hub PCI Express Port"
+0x8086 0x2588 "unknown" "Intel Corp.|Server Memory Controller Hub"
+0x8086 0x2589 "unknown" "Intel Corp.|Server Memory Controller Hub PCI Express Port"
+0x8086 0x258a "Card:Intel 915" "Intel Corp.|E7221 (i915) Graphics Controller"
+0x8086 0x2590 "intel-agp" "Intel Corp.|Mobile Memory Controller Hub"
+0x8086 0x2591 "unknown" "Intel Corp.|Mobile Memory Controller Hub PCI Express Port"
+0x8086 0x2592 "Card:Intel 915" "Intel Corp.|Mobile 915GM/GMS/910GML Express Graphics Controller"
+0x8086 0x25a1 "i8xx_tco" "Intel Corp.|Enterprise Southbridge ISA Bridge"
+0x8086 0x25a2 "ata_piix" "Intel Corp.|Enterprise Southbridge PATA"
+0x8086 0x25a3 "ata_piix" "Intel Corp.|IDE (SATA)"
+0x8086 0x25a4 "i2c-i801" "Intel Corp.|Enterprise Southbridge SMBUS"
+0x8086 0x25a6 "i810_audio" "Intel Corp.|Enterprise Southbridge AC'97 Audio"
+0x8086 0x25a7 "unknown" "Intel Corp.|Enterprise Southbridge AC'97 Modem"
+0x8086 0x25a9 "uhci-hcd" "Intel Corp.|Enterprise Southbridge USB 1.1 UHCI"
+0x8086 0x25aa "uhci-hcd" "Intel Corp.|Enterprise Southbridge USB 1.1 UHCI"
+0x8086 0x25ab "i6300esb" "Intel Corp.|Enterprise Southbridge Watchdog Timer"
+0x8086 0x25ac "unknown" "Intel Corp.|Enterprise Southbridge IOxAPIC"
+0x8086 0x25ad "ehci-hcd" "Intel Corp.|Enterprise Southbridge USB 2.0 EHCI"
+0x8086 0x25ae "unknown" "Intel Corp.|Enterprise Southbridge Hublink PCI-X Bridge"
+0x8086 0x25b0 "ata_piix" "Intel Corp.|IDE (SATA)"
+0x8086 0x25c0 "unknown" "Intel Corp.|Workstation Memory Controller Hub"
+0x8086 0x25d0 "unknown" "Intel Corp.|Server Memory Controller Hub"
+0x8086 0x25d4 "unknown" "Intel Corp.|Server Memory Contoller Hub"
+0x8086 0x25d8 "unknown" "Intel Corp.|Server Memory Controller Hub"
+0x8086 0x25e2 "unknown" "Intel Corp.|Server PCI Express x4 Port 2"
+0x8086 0x25e3 "unknown" "Intel Corp.|Server PCI Express x4 Port 3"
+0x8086 0x25e4 "unknown" "Intel Corp.|Server PCI Express x4 Port 4"
+0x8086 0x25e5 "unknown" "Intel Corp.|Server PCI Express x4 Port 5"
+0x8086 0x25e6 "unknown" "Intel Corp.|Server PCI Express x4 Port 6"
+0x8086 0x25e7 "unknown" "Intel Corp.|Server PCI Express x4 Port 7"
+0x8086 0x25e8 "unknown" "Intel Corp.|Server AMB Memory Mapped Registers"
+0x8086 0x25f0 "unknown" "Intel Corp.|Server Error Reporting Registers"
+0x8086 0x25f1 "unknown" "Intel Corp.|Reserved Registers"
+0x8086 0x25f3 "unknown" "Intel Corp.|Reserved Registers"
+0x8086 0x25f5 "unknown" "Intel Corp.|Server FBD Registers"
+0x8086 0x25f6 "unknown" "Intel Corp.|Server FBD Registers"
+0x8086 0x25f7 "unknown" "Intel Corp.|Server PCI Express x8 Port 2-3"
+0x8086 0x25f8 "unknown" "Intel Corp.|Server PCI Express x8 Port 4-5"
+0x8086 0x25f9 "unknown" "Intel Corp.|Server PCI Express x8 Port 6-7"
+0x8086 0x25fa "unknown" "Intel Corp.|Server PCI Express x16 Port 4-7"
+0x8086 0x2600 "unknown" "Intel Corp.|Server Hub Interface"
+0x8086 0x2601 "unknown" "Intel Corp.|Server Hub PCI Express x4 Port D"
+0x8086 0x2602 "unknown" "Intel Corp.|Server Hub PCI Express x4 Port C0"
+0x8086 0x2603 "unknown" "Intel Corp.|Server Hub PCI Express x4 Port C1"
+0x8086 0x2604 "unknown" "Intel Corp.|Server Hub PCI Express x4 Port B0"
+0x8086 0x2605 "unknown" "Intel Corp.|Server Hub PCI Express x4 Port B1"
+0x8086 0x2606 "unknown" "Intel Corp.|Server Hub PCI Express x4 Port A0"
+0x8086 0x2607 "unknown" "Intel Corp.|Server Hub PCI Express x4 Port A1"
+0x8086 0x2608 "unknown" "Intel Corp.|Server Hub PCI Express x8 Port C"
+0x8086 0x2609 "unknown" "Intel Corp.|Server Hub PCI Express x8 Port B"
+0x8086 0x260a "unknown" "Intel Corp.|Server Hub PCI Express x8 Port A"
+0x8086 0x260c "unknown" "Intel Corp.|Server Hub IMI Registers"
+0x8086 0x2610 "unknown" "Intel Corp.|Server Hub System Bus, Boot, and Interrupt Registers"
+0x8086 0x2611 "unknown" "Intel Corp.|Server Hub Address Mapping Registers"
+0x8086 0x2612 "unknown" "Intel Corp.|Server Hub RAS Registers"
+0x8086 0x2613 "unknown" "Intel Corp.|Server Hub Performance Monitoring Registers"
+0x8086 0x2614 "unknown" "Intel Corp.|Server Hub Performance Monitoring Registers"
+0x8086 0x2615 "unknown" "Intel Corp.|Server Hub Performance Monitoring Registers"
+0x8086 0x2617 "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x2618 "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x2619 "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x261a "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x261b "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x261c "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x261d "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x261e "unknown" "Intel Corp.|Server Hub Debug Registers"
+0x8086 0x2620 "unknown" "Intel Corp.|External Memory Bridge"
+0x8086 0x2621 "unknown" "Intel Corp.|External Memory Bridge Control Registers"
+0x8086 0x2622 "unknown" "Intel Corp.|External Memory Bridge Memory Interleaving Registers"
+0x8086 0x2623 "unknown" "Intel Corp.|External Memory Bridge DDR Initialization and Calibration"
+0x8086 0x2624 "unknown" "Intel Corp.|External Memory Bridge Reserved Registers"
+0x8086 0x2625 "unknown" "Intel Corp.|External Memory Bridge Reserved Registers"
+0x8086 0x2626 "unknown" "Intel Corp.|External Memory Bridge Reserved Registers"
+0x8086 0x2627 "unknown" "Intel Corp.|External Memory Bridge Reserved Registers"
+0x8086 0x2640 "i8xx_tco" "Intel Corp.|I/O Controller Hub LPC"
+0x8086 0x2641 "i8xx_tco" "Intel Corp.|I/O Controller Hub LPC"
+0x8086 0x2642 "i8xx_tco" "Intel Corp.|I/O Controller Hub LPC"
+0x8086 0x2651 "ata_piix" "Intel Corp.|82801FB/FW (ICH6/ICH6W) SATA Controller"
+0x8086 0x2652 "ahci" "Intel Corp.|82801FR/FRW (ICH6R/ICH6RW) SATA Controller"
+0x8086 0x2653 0x1028 0x0186 "ata_piix" "Intel Corp.|82801FR/FRW (ICH6R/ICH6RW) SATA Controller"
+0x8086 0x2653 "ahci" "Intel Corp.|82801FBM (ICH6M) SATA Controller"
+0x8086 0x2658 "unknown" "Intel Corp.|I/O Controller Hub USB"
+0x8086 0x2659 "unknown" "Intel Corp.|I/O Controller Hub USB"
+0x8086 0x265a "unknown" "Intel Corp.|I/O Controller Hub USB"
+0x8086 0x265b "unknown" "Intel Corp.|I/O Controller Hub USB"
+0x8086 0x265c "unknown" "Intel Corp.|I/O Controller Hub USB2"
+0x8086 0x2660 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 0"
+0x8086 0x2662 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 1"
+0x8086 0x2664 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 2"
+0x8086 0x2666 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 3"
+0x8086 0x2668 "snd-hda-intel" "Intel Corp.|I/O Controller Hub Audio"
+0x8086 0x266a "i2c-i801" "Intel Corp.|I/O Controller Hub SMBus"
+0x8086 0x266c "unknown" "Intel Corp.|82801FB/FBM/FR/FW/FRW (ICH6 Family) LAN Controller"
+0x8086 0x266d 0x1014 0x0574 "Hsf:www.linmodems.org" "Intel Corp.|I/OController Hub Modem"
+0x8086 0x266d 0x1025 0x006a "snd-intel8x0m" "Intel Corporation|Conexant AC'97 CoDec (in Acer TravelMate 2410 serie laptop)"
+0x8086 0x266d 0x103c 0x0934 "slamr" "Intel Corp.|I/OController Hub Modem"
+0x8086 0x266d 0x103c 0x0944 "snd-intel8x0m" "Intel Corp.|I/OController Hub Modem"
+0x8086 0x266d 0x103c 0x099c "slamr" "Intel Corp.|I/OController Hub Modem"
+0x8086 0x266d 0x14c0 0x0012 "slamr" "Intel Corp.|I/OController Hub Modem"
+0x8086 0x266d 0x14f1 0x5423 "Hsf:www.linmodems.org" "Intel Corp.|I/OController Hub Modem"
+0x8086 0x266d 0x17c0 0x10ab "snd-intel8x0m" "Intel Corp.|I/OController Hub Modem"
+0x8086 0x266d "snd-intel8x0m" "Intel Corp.|I/O Controller Hub Modem"
+0x8086 0x266e "snd-intel8x0" "Intel Corp.|82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller"
+0x8086 0x266f "piix" "Intel Corp.|I/O Controller Hub PATA"
+0x8086 0x2670 "unknown" "Intel Corp.|Enterprise Southbridge LPC"
+0x8086 0x2680 "ata_piix" "Intel Corp.|Enterprise Southbridge SATA cc=IDE"
+0x8086 0x2681 "ahci" "Intel Corp.|Enterprise Southbridge SATA cc=AHCI"
+0x8086 0x2682 "ahci" "Intel Corp.|Enterprise Southbridge SATA cc=RAID"
+0x8086 0x2683 "ahci" "Intel Corp.|Enterprise Southbridge SATA cc=RAID"
+0x8086 0x2688 "unknown" "Intel Corp.|Enterprise Southbridge UHCI USB #1"
+0x8086 0x2689 "unknown" "Intel Corp.|Enterprise Southbridge UHCI USB #2"
+0x8086 0x268a "unknown" "Intel Corp.|Enterprise Southbridge UHCI USB #3"
+0x8086 0x268b "unknown" "Intel Corp.|Enterprise Southbridge UHCI USB #4"
+0x8086 0x268c "unknown" "Intel Corp.|Enterprise Southbridge EHCI USB"
+0x8086 0x2690 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Root Port 1"
+0x8086 0x2692 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Root Port 2"
+0x8086 0x2694 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Root Port 3"
+0x8086 0x2696 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Root Port 4"
+0x8086 0x2698 "snd-intel8x0" "Intel Corp.|Enterprise Southbridge AC '97 Audio"
+0x8086 0x2699 "unknown" "Intel Corp.|Enterprise Southbridge AC '97 Modem"
+0x8086 0x269a "snd-hda-intel" "Intel Corp.|ESB2 Southbridge HDA DID"
+0x8086 0x269b "i2c-i801" "Intel Corp.|Enterprise Southbridge SMBus"
+0x8086 0x269e "piix" "Intel Corp.|Enterprise Southbridge PATA"
+0x8086 0x2770 "intel-agp" "Intel Corp.|Memory Controller Hub"
+0x8086 0x2771 "unknown" "Intel Corp.|PCI Express Graphics Port"
+0x8086 0x2772 "Card:Intel 945" "Intel Corp.|945G Integrated Graphics Controller"
+0x8086 0x2774 "unknown" "Intel Corp.|Workstation Memory Controller Hub"
+0x8086 0x2775 "unknown" "Intel Corp.|PCI Express Graphics Port"
+0x8086 0x2776 "unknown" "Intel Corp.|Integrated Graphics Controller"
+0x8086 0x2778 "unknown" "Intel Corp.|Server Memory Controller Hub"
+0x8086 0x2779 "unknown" "Intel Corp.|PCI Express Root Port"
+0x8086 0x277a "unknown" "Intel Corp.|PCI Express Graphics Port"
+0x8086 0x277c "unknown" "Intel Corp.|Memory Controller Hub"
+0x8086 0x277d "unknown" "Intel Corp.|PCI Express Graphics Port"
+0x8086 0x2782 "unknown" "Intel Corp.|Graphics Controller"
+0x8086 0x2792 "unknown" "Intel Corp.|Mobile Graphics Controller"
+0x8086 0x27a0 "intel-agp" "Intel Corp.|Mobile Memory Controller Hub"
+0x8086 0x27a1 "unknown" "Intel Corp.|Mobile PCI Express Graphics Port"
+0x8086 0x27a2 "Card:Intel 945" "Intel Corp.|Mobile Integrated Graphics Controller"
+0x8086 0x27a6 "unknown" "Intel Corp.|Mobile Integrated Graphics Controller"
+0x8086 0x27b0 "unknown" "Intel Corp.|I/O Controller Hub LPC"
+0x8086 0x27b1 "i8xx_tco" "Intel Corp.|Mobile I/O Controller Hub LPC"
+0x8086 0x27b8 "i8xx_tco" "Intel Corp.|I/O Controller Hub LPC"
+0x8086 0x27b9 "i8xx_tco" "Intel Corp.|Mobile I/O Controller Hub LPC"
+0x8086 0x27bd "unknown" "Intel Corp.|Mobile I/O Controller Hub LPC"
+0x8086 0x27c0 "ata_piix" "Intel Corp.|I/O Controller Hub SATA cc=IDE"
+0x8086 0x27c1 "ahci" "Intel Corp.|I/O Controller Hub SATA cc=AHCI"
+0x8086 0x27c2 "ahci" "Intel Corp.|I/O Controller Hub SATA cc=RAID"
+0x8086 0x27c3 "ahci" "Intel Corp.|I/O Controller Hub SATA cc=RAID"
+0x8086 0x27c4 "ata_piix" "Intel Corp.|Mobile I/O Controller Hub SATA cc=IDE"
+0x8086 0x27c5 "ahci" "Intel Corp.|Mobile I/O Controller Hub SATA cc=AHCI"
+0x8086 0x27c6 "ahci" "Intel Corp.|82801GHM (ICH7-M DH) Serial ATA Storage Controllers cc=RAID"
+0x8086 0x27c8 "unknown" "Intel Corp.|I/O Controller Hub UHCI USB #1"
+0x8086 0x27c9 "unknown" "Intel Corp.|I/O Controller Hub UHCI USB #2"
+0x8086 0x27ca "unknown" "Intel Corp.|I/O Controller Hub UHCI USB #3"
+0x8086 0x27cb "unknown" "Intel Corp.|I/O Controller Hub UHCI USB #4"
+0x8086 0x27cc "unknown" "Intel Corp.|I/O Controller Hub EHCI USB"
+0x8086 0x27d0 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 1"
+0x8086 0x27d2 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 2"
+0x8086 0x27d4 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 3"
+0x8086 0x27d6 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 4"
+0x8086 0x27d8 "snd-hda-intel" "Intel Corp.|I/O Controller Hub High Definition Audio"
+0x8086 0x27da "i2c-i801" "Intel Corp.|I/O Controller Hub SMBus"
+0x8086 0x27dc "e100" "Intel Corp.|I/O Controller Hub LAN"
+0x8086 0x27dd "snd-intel8x0m" "Intel Corp.|I/O Controller Hub AC'97 Modem"
+0x8086 0x27de "snd-intel8x0" "Intel Corp.|I/O Controller Hub AC'97 Audio"
+0x8086 0x27df "piix" "Intel Corp.|I/O Controller Hub PATA"
+0x8086 0x27e0 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 5"
+0x8086 0x27e2 "unknown" "Intel Corp.|I/O Controller Hub PCI Express Port 6"
+0x8086 0x2810 "unknown" "Intel Corporation|LPC Interface Controller"
+0x8086 0x2811 "unknown" "Intel Corporation|Mobile LPC Interface Controller"
+0x8086 0x2812 "unknown" "Intel Corporation|LPC Interface Controller"
+0x8086 0x2814 "unknown" "Intel Corporation|LPC Interface Controller"
+0x8086 0x2815 "unknown" "Intel Corporation|Mobile LPC Interface Controller"
+0x8086 0x2820 "ata_piix" "Intel Corporation|SATA Controller 1 cc=IDE"
+0x8086 0x2821 "ahci" "Intel Corporation|SATA Controller cc=AHCI"
+0x8086 0x2822 "ahci" "Intel Corporation|SATA Controller cc=RAID"
+0x8086 0x2824 "ahci" "Intel Corporation|SATA Controller cc=AHCI"
+0x8086 0x2825 "ata_piix" "Intel Corporation|SATA Controller 2 cc=IDE"
+0x8086 0x2828 "ata_piix" "Intel Corporation|Mobile SATA Controller cc=IDE"
+0x8086 0x2829 "ahci" "Intel Corporation|Mobile SATA Controller cc=AHCI"
+0x8086 0x282a "ahci" "Intel Corporation|Mobile SATA Controller cc=RAID"
+0x8086 0x2830 "unknown" "Intel Corporation|USB UHCI Controller #1"
+0x8086 0x2831 "unknown" "Intel Corporation|USB UHCI Controller #2"
+0x8086 0x2832 "unknown" "Intel Corporation|USB UHCI Controller #3"
+0x8086 0x2834 "unknown" "Intel Corporation|USB UHCI Controller #4"
+0x8086 0x2835 "unknown" "Intel Corporation|USB UHCI Controller #5"
+0x8086 0x2836 "unknown" "Intel Corporation|USB2 EHCI Controller #1"
+0x8086 0x283a "unknown" "Intel Corporation|USB2 EHCI Controller #2"
+0x8086 0x283e "i2c-i801" "Intel Corporation|SMBus Controller"
+0x8086 0x283f "unknown" "Intel Corporation|PCI Express Port 1"
+0x8086 0x2841 "unknown" "Intel Corporation|PCI Express Port 2"
+0x8086 0x2843 "unknown" "Intel Corporation|PCI Express Port 3"
+0x8086 0x2844 "unknown" "Intel Corporation|PCI Express Port 4"
+0x8086 0x2845 "unknown" "Intel Corporation|PCI Express Port 4"
+0x8086 0x2847 "unknown" "Intel Corporation|PCI Express Port 5"
+0x8086 0x2849 "unknown" "Intel Corporation|PCI Express Port 6"
+0x8086 0x284b "snd-hda-intel" "Intel Corp.|ICH8 HD Audio DID"
+0x8086 0x284f "unknown" "Intel Corporation|Thermal Subsystem"
+0x8086 0x2850 "piix" "Intel Corporation|Mobile IDE Controller"
+0x8086 0x2970 "intel-agp" "Intel Corporation|Memory Controller Hub"
+0x8086 0x2971 "unknown" "Intel Corporation|PCI Express Root Port"
+0x8086 0x2972 "Card:Intel 965" "Intel Corporation|946GZ/GL Integrated Graphics Controller"
+0x8086 0x2973 "unknown" "Intel Corporation|Integrated Graphics Controller"
+0x8086 0x2974 "unknown" "Intel Corporation|HECI Controller"
+0x8086 0x2975 "unknown" "Intel Corporation|946GZ/GL HECI Controller"
+0x8086 0x2976 "unknown" "Intel Corporation|PT IDER Controller"
+0x8086 0x2977 "unknown" "Intel Corporation|KT Controller"
+0x8086 0x2980 "intel-agp" "Intel Corporation|965 G1 Memory Controller Hub"
+0x8086 0x2981 "unknown" "Intel Corporation|965 G1 PCI Express Root Port"
+0x8086 0x2982 "Card:Intel 965" "Intel Corporation|965 G1 Integrated Graphics Controller"
+0x8086 0x2990 "intel-agp" "Intel Corporation|Memory Controller Hub"
+0x8086 0x2991 "unknown" "Intel Corporation|PCI Express Root Port"
+0x8086 0x2992 "Card:Intel 965" "Intel Corporation|Q963/Q965 Integrated Graphics Controller"
+0x8086 0x2993 "unknown" "Intel Corporation|Integrated Graphics Controller"
+0x8086 0x2994 "unknown" "Intel Corporation|HECI Controller"
+0x8086 0x2995 "unknown" "Intel Corporation|HECI Controller"
+0x8086 0x2996 "unknown" "Intel Corporation|PT IDER Controller"
+0x8086 0x2997 "unknown" "Intel Corporation|KT Controller"
+0x8086 0x29a0 "intel-agp" "Intel Corporation|Memory Controller Hub"
+0x8086 0x29a1 "unknown" "Intel Corporation|PCI Express Root Port"
+0x8086 0x29a2 "Card:Intel 965" "Intel Corporation|G965 Integrated Graphics Controller"
+0x8086 0x29a3 "unknown" "Intel Corporation|Integrated Graphics Controller"
+0x8086 0x29a4 "unknown" "Intel Corporation|HECI Controller"
+0x8086 0x29a5 "unknown" "Intel Corporation|HECI Controller"
+0x8086 0x29a6 "unknown" "Intel Corporation|PT IDER Controller"
+0x8086 0x29a7 "unknown" "Intel Corporation|KT Controller"
+0x8086 0x29b2 "Card:Intel Q35" "Intel Corporation|82Q35 Express Integrated Graphics Controller"
+0x8086 0x2a00 "unknown" "Intel Corporation|Mobile Memory Controller Hub"
+0x8086 0x2a01 "unknown" "Intel Corporation|Mobile PCI Express Root Port"
+0x8086 0x2a02 "unknown" "Intel Corporation|Mobile Integrated Graphics Controller"
+0x8086 0x2a03 "unknown" "Intel Corporation|Mobile Integrated Graphics Controller"
+0x8086 0x3092 "i2o_block" "Intel Corp.|Integrated RAID"
+0x8086 0x3124 "sata_sil24" ""
+0x8086 0x3200 "sata_vsc" "Intel Corp.|31244 PCI-X to Serial ATA Controller"
+0x8086 0x3340 "intel-agp" "Intel Corp.|82855PM Processor to I/O Controller"
+0x8086 0x3341 "unknown" "Intel Corp.|82855PM Processor to AGP Controller"
+0x8086 0x3342 "unknown" "Intel Corp.|82855PM Power Management"
+0x8086 0x3500 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Upstream Port"
+0x8086 0x3501 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Upstream Port"
+0x8086 0x3504 "unknown" "Intel Corp.|Enterprise Southbridge IOxAPIC"
+0x8086 0x3505 "unknown" "Intel Corp.|Enterprise Southbridge IOxAPIC"
+0x8086 0x350c "unknown" "Intel Corp.|Enterprise Southbridge PCI Express to PCI-X Bridge"
+0x8086 0x350d "unknown" "Intel Corp.|Enterprise Southbridge PCI Express to PCI-X Bridge"
+0x8086 0x3510 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Downstream Port E1"
+0x8086 0x3511 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Downstream Port E1"
+0x8086 0x3514 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Downstream Port E2"
+0x8086 0x3515 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Downstream Port E2"
+0x8086 0x3518 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Downstream Port E3"
+0x8086 0x3519 "unknown" "Intel Corp.|Enterprise Southbridge PCI Express Downstream Port E3"
+0x8086 0x3575 "intel-agp" "Intel Corp.|82830 Host-Hub I/F Bridge SDRAM Controller"
+0x8086 0x3576 "unknown" "Intel Corp.|82830 Host-AGP Bridge"
+0x8086 0x3577 "Card:Intel 830" "Intel Corp.|82830 CGC Integrated Graphics Device"
+0x8086 0x3578 "unknown" "Intel Corp.|82830 CPU to I/O Bridge"
+0x8086 0x3579 "unknown" "Intel Corp.|82835 SDRAM Controller / Host-hub Interface"
+0x8086 0x357b "unknown" "Intel Corp.|82835 Integrated Graphics Device"
+0x8086 0x3580 "intel-agp" "Intel Corp.|852GM Host-Hub Interface Bridge"
+0x8086 0x3581 "unknown" "Intel Corp.|82852GME/PM Virtual PCI to AGP Bridge"
+0x8086 0x3582 "Card:Intel 85x" "Intel Corp.|852GM/852GME/855GM/855GME Chipset Graphics Controller"
+0x8086 0x3584 "unknown" "Intel Corp.|852GM System Memory Controller"
+0x8086 0x3585 "unknown" "Intel Corp.|852GM Configuration Process"
+0x8086 0x3590 "e752x_edac" "Intel Corp.|Server Memory Controller Hub"
+0x8086 0x3591 "unknown" "Intel Corp.|Memory Controller Hub Error Reporting Register"
+0x8086 0x3592 "e752x_edac" "Intel Corp.|Server Memory Controller Hub"
+0x8086 0x3593 "unknown" "Intel Corp.|Memory Controller Hub Error Reporting Register"
+0x8086 0x3594 "unknown" "Intel Corp.|Memory Controller Hub DMA Controller"
+0x8086 0x3595 "unknown" "Intel Corp.|Memory Controller Hub PCI Express Port A0"
+0x8086 0x3596 "unknown" "Intel Corp.|Memory Controller Hub PCI Express Port A1"
+0x8086 0x3597 "unknown" "Intel Corp.|Memory Controller Hub PCI Express Port B0"
+0x8086 0x3598 "unknown" "Intel Corp.|Memory Controller Hub PCI Express Port B1"
+0x8086 0x3599 "unknown" "Intel Corp.|Memory Controller Hub PCI Express Port C0"
+0x8086 0x359a "unknown" "Intel Corp.|Memory Controller Hub PCI Express Port C1"
+0x8086 0x359b "unknown" "Intel Corp.|Memory Controller Hub Extended Configuration Registers"
+0x8086 0x359e "e752x_edac" "Intel Corp.|Workstation Memory Controller Hub"
+0x8086 0x35b0 "unknown" "Intel Corporation|3100 Chipset Memory I/O Controller Hub"
+0x8086 0x35b1 "unknown" "Intel Corporation|3100 DRAM Controller Error Reporting Registers"
+0x8086 0x35b5 "unknown" "Intel Corporation|3100 Chipset Enhanced DMA Controller"
+0x8086 0x35b6 "unknown" "Intel Corporation|3100 Chipset PCI Express Port A"
+0x8086 0x35b7 "unknown" "Intel Corporation|3100 Chipset PCI Express Port A1"
+0x8086 0x35c8 "unknown" "Intel Corporation|3100 Extended Configuration Test Overflow Registers"
+0x8086 0x4000 "unknown" "Intel Corp.|Creatix V.90 HaM Modem"
+0x8086 0x4220 "ipw2200" "Intel Corp.|Intel(R) PRO/Wireless 2200BG"
+0x8086 0x4221 "ipw2200" "Intel Corp.|Intel(R) PRO/Wireless 2225BG"
+0x8086 0x4222 "ipw3945" "Intel Corporation|PRO/Wireless 3945ABG"
+0x8086 0x4223 "ipw2200" "Intel Corp.|PRO/Wireless 2915ABG MiniPCI Adapter"
+0x8086 0x4224 "ipw2200" "Intel Corp.|PRO/Wireless 2915ABG MiniPCI Adapter"
+0x8086 0x4227 "ipw3945" "Intel Corporation|PRO/Wireless 3945ABG"
+0x8086 0x5001 "unknown" "Intel Corp.|PRO/DSL 2100 Modem - PPP"
+0x8086 0x5005 "unknown" "Intel Corp.|PRO/DSL 2200 Modem - PPPoA"
+0x8086 0x5200 "eepro100" "Intel Corp.|EtherExpress PRO/100"
+0x8086 0x5201 "eepro100" "Intel Corp.|EtherExpress PRO/100"
+0x8086 0x5309 "unknown" "Intel Corp.|80303 I/O Processor Address Translation Unit"
+0x8086 0x530d "pci" "Intel Corp.|80310 IOP [IO Processor]"
+0x8086 0x6960 "unknown" "Intel Corp.|EHCI 960 emulator"
+0x8086 0x7000 "unknown" "Intel Corp.|82371SB PIIX3 ISA [Natoma/Triton II]"
+0x8086 0x7010 "piix" "Intel Corp.|82371SB PIIX3 IDE [Natoma/Triton II]"
+0x8086 0x7020 "uhci-hcd" "Intel Corp.|82371SB PIIX3 USB [Natoma/Triton II]"
+0x8086 0x7030 "unknown" "Intel Corp.|430VX - 82437VX TVX [Triton VX]"
+0x8086 0x7050 "unknown" "Intel Corp.|Intel Intercast Video Capture Card"
+0x8086 0x7051 "unknown" "Intel Corp.|PB 642365-003 Intel Business Video Conferencing Card"
+0x8086 0x7100 "unknown" "Intel Corp.|430TX - 82439TX MTXC"
+0x8086 0x7110 "unknown" "Intel Corp.|82371AB PIIX4 ISA"
+0x8086 0x7111 "ata_piix" "Intel Corp.|82371AB PIIX4 IDE"
+0x8086 0x7112 "uhci-hcd" "Intel Corp.|82371AB PIIX4 USB"
+0x8086 0x7113 "sonypi" "Intel Corp.|82371AB PIIX4 ACPI - Bus Master IDE Controller"
+0x8086 0x7120 "intel-agp" "Intel Corp.|82810 GMCH [Graphics Memory Controller Hub]"
+0x8086 0x7121 "Card:Intel 810" "Intel Corp.|82810 CGC [Chipset Graphics Controller]"
+0x8086 0x7122 "intel-agp" "Intel Corp.|82810-DC100 GMCH [Graphics Memory Controller Hub]"
+0x8086 0x7123 "Card:Intel 810" "Intel Corp.|82810-DC100 CGC [Chipset Graphics Controller]"
+0x8086 0x7124 "intel-agp" "Intel Corp.|82810E GMCH [Graphics Memory Controller Hub]"
+0x8086 0x7125 "Card:Intel 810" "Intel Corp.|82810E CGC [Chipset Graphics Controller]"
+0x8086 0x7126 "unknown" "Intel Corp.|82810 810 Chipset Host Bridge and Memory Controller Hub"
+0x8086 0x7127 "unknown" "Intel Corp.|82810-DC133 Graphics Device (FSB 133 MHz)"
+0x8086 0x7128 "unknown" "Intel Corp.|82810-M DC-100 Host Bridge and Memory Controller Hub"
+0x8086 0x712a "unknown" "Intel Corp.|82810-M DC-133 Host Bridge and Memory Controller Hub"
+0x8086 0x7180 "intel-agp" "Intel Corp.|440LX/EX - 82443LX/EX Host bridge"
+0x8086 0x7181 "unknown" "Intel Corp.|440LX/EX - 82443LX/EX AGP bridge"
+0x8086 0x7182 "unknown" "Intel Corp.|440LX/EX"
+0x8086 0x7190 "intel-agp" "Intel Corp.|440BX/ZX - 82443BX/ZX Host bridge"
+0x8086 0x7191 "agpgart" "Intel Corp.|440BX/ZX - 82443BX/ZX AGP bridge"
+0x8086 0x7192 "unknown" "Intel Corp.|440BX/ZX - 82443BX/ZX Host bridge (AGP disabled)"
+0x8086 0x7194 "unknown" "Intel Corp.|82440MX CPU to I/O Controller"
+0x8086 0x7195 "snd-intel8x0" "Intel Corp.|440MX 810 Chipset AC'97 Audio Controller"
+0x8086 0x7196 "slamr" "Intel Corp.|82440 - 443MX AC97 Modem Controller (Winmodem)"
+0x8086 0x7198 "unknown" "Intel Corp.|82440MX PCI to ISA Bridge"
+0x8086 0x7199 "piix" "Intel Corp.|82440MX EIDE Controller"
+0x8086 0x719a "uhci-hcd" "Intel Corp.|82440MX USB Universal Host Controller"
+0x8086 0x719b "i2c-piix4" "Intel Corp.|82440MX Power Management Controller"
+0x8086 0x71a0 "intel-agp" "Intel Corp.|440GX - 82443GX Host bridge"
+0x8086 0x71a1 "unknown" "Intel Corp.|440GX - 82443GX AGP bridge"
+0x8086 0x71a2 "unknown" "Intel Corp.|440GX - 82443GX Host bridge (AGP disabled)"
+0x8086 0x7600 "unknown" "Intel Corp.|82372FB PCI to ISA Bridge"
+0x8086 0x7601 "piix" "Intel Corp.|82372FB PIIX4 IDE"
+0x8086 0x7602 "uhci-hcd" "Intel Corp.|82372FB [PCI-to-USB UHCI]"
+0x8086 0x7603 "unknown" "Intel Corp.|82372FB System Management Bus Controller"
+0x8086 0x7605 "unknown" "Intel Corp.|82372FB IEEE1394 OpenHCI Host Controller"
+0x8086 0x7800 "Card:Intel 740 (generic)" "Intel Corp.|i740"
+0x8086 0x844e "unknown" "Intel Corp.|82820 820 (Camino 2) Chipset PCI"
+0x8086 0x8485 "i810_audio" "Intel Corp.|AC'97 Audio"
+0x8086 0x84c4 "unknown" "Intel Corp.|450KX/GX [Orion] - 82454KX/GX PCI bridge"
+0x8086 0x84c5 "unknown" "Intel Corp.|450KX/GX [Orion] - 82453KX/GX Memory controller"
+0x8086 0x84ca "piix" "Intel Corp.|450NX - 82451NX Memory & I/O Controller"
+0x8086 0x84cb "unknown" "Intel Corp.|450NX - 82454NX PCI Expander Bridge"
+0x8086 0x84e0 "unknown" "Intel Corp.|460GX - 84460GX System Address Controller (SAC)"
+0x8086 0x84e1 "unknown" "Intel Corp.|460GX - 84460GX System Data Controller (SDC)"
+0x8086 0x84e2 "unknown" "Intel Corp.|460GX - 84460GX AGP Bridge (GXB)"
+0x8086 0x84e3 "unknown" "Intel Corp.|460GX - 84460GX Memory Address Controller (MAC)"
+0x8086 0x84e4 "unknown" "Intel Corp.|460GX - 84460GX Memory Data Controller (MDC)"
+0x8086 0x84e6 "unknown" "Intel Corp.|460GX - 82466GX Wide and fast PCI eXpander Bridge (WXB)"
+0x8086 0x84ea "i460-agp" "Intel Corp.|460GX - 84460GX AGP Bridge (GXB function 1)"
+0x8086 0x8500 "unknown" "Intel Corp.|IXP4XX - Intel Network Processor family. IXP420, IXP421, IXP422, IXP425 and IXC1100"
+0x8086 0x8671 "unknown" "Intel Corp.| "
+0x8086 0x9000 "unknown" "Intel Corp.|Intel IXP2000 Familly Network Processor"
+0x8086 0x9001 "unknown" "Intel Corp.|IXP2400 Network Processor"
+0x8086 0x9002 "unknown" "Intel Corporation|IXP2300 Network Processor"
+0x8086 0x9004 "unknown" "Intel Corp.|IXP2800 Network Processor"
+0x8086 0x9620 "unknown" "Intel Corp.|I2O RAID PCI to PCI Bridge"
+0x8086 0x9621 "i2o_block" "Intel Corp.|Integrated RAID"
+0x8086 0x9622 "i2o_block" "Intel Corp.|Integrated RAID"
+0x8086 0x9641 "i2o_block" "Intel Corp.|Integrated RAID"
+0x8086 0x96a1 "i2o_block" "Intel Corp.|Integrated RAID"
+0x8086 0xa01f "unknown" "Intel Corp.|PRO/10GbE LR Server Adapter"
+0x8086 0xa11f "unknown" "Intel Corp.|PRO/10GbE LR Server Adapter"
+0x8086 0xb152 "unknown" "Intel Corp.|S21152BB PCI to PCI Bridge"
+0x8086 0xb154 "unknown" "Intel Corp.|S21154AE/BE PCI to PCI Bridge"
+0x8086 0xb555 "umem" "Intel Corp.|21555 Non-Transparent PCI-to-PCI Bridge"
+0x8086 0xffff "unknown" "Intel Corp.|450NX/GX [Orion] - 82453KX/GX Memory controller [BUG]"
+0x80ff 0x1230 "unknown" "Intel - Buggy BIOS!!!|82338/82371FB Triton PIIX PCI EIDE"
+0x8686 0x1010 "unknown" "ScaleMP|vSMPowered system controller [vSMP CTL]"
+0x8800 0x2008 "unknown" "Trigem Computer Inc.|Video assistent component"
+0x8c4a 0x1980 "ne2k-pci" "Winbond|W89C940 misprogrammed [ne2k]"
+0x8e0e 0x0302 "8250_pci" "Computone Corporation| PCI Serial Port"
+0x8e2e 0x3000 "ne2k-pci" "KTI|ET32P2"
+0x9004 0x0010 "aic7xxx" "Adaptec|2940U2"
+0x9004 0x0078 "aic7xxx" "Adaptec|aic-7880p AHA-2940UW/CN"
+0x9004 0x1078 "aic7xxx" "Adaptec|AIC-7810"
+0x9004 0x1160 "aic7xxx" "Adaptec|AIC-1160 [Family Fiber Channel Adapter]"
+0x9004 0x2178 "aic7xxx" "Adaptec|AIC-7821"
+0x9004 0x3860 "aic7xxx" "Adaptec|AHA-2930CU"
+0x9004 0x3b60 "aic7xxx" "Adaptec|AHA-2930CU PCI SCSI Controller"
+0x9004 0x3b78 "aic7xxx" "Adaptec|AHA-4844W/4844UW"
+0x9004 0x5075 "aic7xxx" "Adaptec|AIC-755x"
+0x9004 0x5078 "aic7xxx" "Adaptec|AHA-7850"
+0x9004 0x5175 "aic7xxx" "Adaptec|AIC-755x"
+0x9004 0x5178 "aic7xxx" "Adaptec|AIC-7851"
+0x9004 0x5275 "aic7xxx" "Adaptec|AIC-755x"
+0x9004 0x5278 "aic7xxx" "Adaptec|AIC-7852"
+0x9004 0x5375 "aic7xxx" "Adaptec|AIC-755x"
+0x9004 0x5378 "aic7xxx" "Adaptec|AIC-7850"
+0x9004 0x5475 "aic7xxx" "Adaptec|AIC-2930"
+0x9004 0x5478 "aic7xxx" "Adaptec|AIC-7850"
+0x9004 0x5575 "aic7xxx" "Adaptec|AVA-2930"
+0x9004 0x5578 "aic7xxx" "Adaptec|AIC-7855"
+0x9004 0x5647 "unknown" "Adaptec|ANA-7711 TCP Offload Engine"
+0x9004 0x5675 "aic7xxx" "Adaptec|AIC-755x"
+0x9004 0x5678 "aic7xxx" "Adaptec|AIC-7850"
+0x9004 0x5775 "aic7xxx" "Adaptec|AIC-755x"
+0x9004 0x5778 "aic7xxx" "Adaptec|AIC-7850"
+0x9004 0x5800 "aic7xxx" "Adaptec|AIC-5800"
+0x9004 0x5900 "unknown" "Adaptec|ANA-5910/5930/5940 ATM155 & 25 LAN Adapter"
+0x9004 0x5905 "unknown" "Adaptec|ANA-5910A/5930A/5940A ATM Adapter"
+0x9004 0x6038 "aic7xxx" "Adaptec|AIC-3860"
+0x9004 0x6075 "aic7xxx" "Adaptec|AIC-1480 / APA-1480"
+0x9004 0x6078 "aic7xxx" "Adaptec|AIC-7860"
+0x9004 0x6178 "aic7xxx" "Adaptec|AIC-7861"
+0x9004 0x6278 "aic7xxx" "Adaptec|AIC-7860"
+0x9004 0x6378 "aic7xxx" "Adaptec|AIC-7860"
+0x9004 0x6478 "aic7xxx" "Adaptec|AIC-786"
+0x9004 0x6578 "aic7xxx" "Adaptec|AIC-786x"
+0x9004 0x6678 "aic7xxx" "Adaptec|AIC-786"
+0x9004 0x6778 "aic7xxx" "Adaptec|AIC-786x"
+0x9004 0x6915 "starfire" "Adaptec|ANA620xx/ANA69011A Fast Ethernet"
+0x9004 0x7078 "aic7xxx" "Adaptec|AHA-294x / AIC-7870"
+0x9004 0x7178 "aic7xxx" "Adaptec|AHA-294x / AIC-7871"
+0x9004 0x7278 "aic7xxx" "Adaptec|AHA-3940 / AIC-7872"
+0x9004 0x7378 "aic7xxx" "Adaptec|AHA-3985 / AIC-7873"
+0x9004 0x7478 "aic7xxx" "Adaptec|AHA-2944 / AIC-7874"
+0x9004 0x7578 "aic7xxx" "Adaptec|AHA-3944 / AHA-3944W / 7875"
+0x9004 0x7678 "aic7xxx" "Adaptec|AHA-4944W/UW / 7876"
+0x9004 0x7710 "unknown" "Adaptec|ANA-7711F Network Accelerator Card (NAC) - Optical"
+0x9004 0x7711 "unknown" "Adaptec|ANA-7711C Network Accelerator Card (NAC) - Copper"
+0x9004 0x7778 "aic7xxx" "Adaptec|AIC-787x"
+0x9004 0x7810 "aic7xxx" "Adaptec|AIC-7810"
+0x9004 0x7815 "aic7xxx" "Adaptec|AIC-7815 RAID+Memory Controller IC"
+0x9004 0x7850 "aic7xxx" "Adaptec|AIC-7850"
+0x9004 0x7855 "aic7xxx" "Adaptec|AHA-2930"
+0x9004 0x7860 "aic7xxx" "Adaptec|AIC-7860"
+0x9004 0x7870 "aic7xxx" "Adaptec|AIC-7870"
+0x9004 0x7871 "aic7xxx" "Adaptec|AHA-2940"
+0x9004 0x7872 "aic7xxx" "Adaptec|AHA-3940"
+0x9004 0x7873 "aic7xxx" "Adaptec|AHA-3980"
+0x9004 0x7874 "aic7xxx" "Adaptec|AHA-2944"
+0x9004 0x7880 "aic7xxx" "Adaptec|AIC-7880P"
+0x9004 0x7890 "aic7xxx" "Adaptec|AIC-7890"
+0x9004 0x7891 "aic7xxx" "Adaptec|AIC-789x"
+0x9004 0x7892 "aic7xxx" "Adaptec|AIC-789x"
+0x9004 0x7893 "aic7xxx" "Adaptec|AIC-789x"
+0x9004 0x7894 "aic7xxx" "Adaptec|AIC-789x"
+0x9004 0x7895 "aic7xxx" "Adaptec|AHA-2940U/UW / AHA-39xx / AIC-7895"
+0x9004 0x7896 "aic7xxx" "Adaptec|AIC-789x"
+0x9004 0x7897 "aic7xxx" "Adaptec|AIC-789x"
+0x9004 0x8078 "aic7xxx" "Adaptec|AIC-7880U"
+0x9004 0x8178 "aic7xxx" "Adaptec|AIC-7881U"
+0x9004 0x8278 "aic7xxx" "Adaptec|AHA-3940U/UW / AIC-7882U"
+0x9004 0x8378 "aic7xxx" "Adaptec|AHA-3940U/UW / AIC-7883U"
+0x9004 0x8478 "aic7xxx" "Adaptec|AHA-294x / AIC-7884U"
+0x9004 0x8578 "aic7xxx" "Adaptec|AHA-3944U / AHA-3944UWD / 7885"
+0x9004 0x8678 "aic7xxx" "Adaptec|AHA-4944UW / 7886"
+0x9004 0x8778 "aic7xxx" "Adaptec|AIC-788x"
+0x9004 0x8878 "aic7xxx" "Adaptec|7888"
+0x9004 0x8b78 "aic7xxx" "Adaptec|ABA-1030"
+0x9004 0xec78 "aic7xxx" "Adaptec|AHA-4944W/UW"
+0x9004 0xffff "aic7xxx" "Unknown Vendor|AIC7xxx compatible SCSI controller"
+0x9005 0x0010 "aic7xxx" "Adaptec|AHA-2940U2/W"
+0x9005 0x0011 "aic7xxx" "Adaptec|2930U2"
+0x9005 0x0012 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0013 "aic7xxx" "Adaptec|78902"
+0x9005 0x0014 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0015 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0016 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0017 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0018 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0019 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x001a "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x001b "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x001c "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x001d "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x001e "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x001f "aic7xxx" "Adaptec|AHA-2940U2/W / 7890"
+0x9005 0x0020 "aic7xxx" "Adaptec|AIC-7890"
+0x9005 0x002f "aic7xxx" "Adaptec|AIC-7890"
+0x9005 0x0030 "aic7xxx" "Adaptec|AIC-7890"
+0x9005 0x003f "aic7xxx" "Adaptec|AIC-7890"
+0x9005 0x0050 "aic7xxx" "Adaptec|3940U2"
+0x9005 0x0051 "aic7xxx" "Adaptec|3950U2D"
+0x9005 0x0052 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0053 "aic7xxx" "Adaptec|AIC-7896 SCSI Controller"
+0x9005 0x0054 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0055 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0056 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0057 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0058 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0059 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x005a "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x005b "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x005c "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x005d "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x005e "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x005f "aic7xxx" "Adaptec|7896"
+0x9005 0x0080 "aic7xxx" "Adaptec|7892A"
+0x9005 0x0081 "aic7xxx" "Adaptec|7892B"
+0x9005 0x0082 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0083 "aic7xxx" "Adaptec|7892D"
+0x9005 0x0084 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0085 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0086 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0087 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0088 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x0089 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x008a "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x008b "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x008c "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x008d "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x008e "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x008f "aic7xxx" "Adaptec|7892P"
+0x9005 0x0092 "unknown" "Adaptec|Adaptec VIDEOH! AVC-2010"
+0x9005 0x0093 "unknown" "Adaptec|Adaptec VIDEOH! AVC-2410"
+0x9005 0x00c0 "aic7xxx" "Adaptec|7899A"
+0x9005 0x00c1 "aic7xxx" "Adaptec|7899B"
+0x9005 0x00c2 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00c3 "aic7xxx" "Adaptec|7899D"
+0x9005 0x00c4 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00c5 "aic7xxx" "Adaptec|RAID subsystem HBA"
+0x9005 0x00c6 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00c7 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00c8 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00c9 "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00ca "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00cb "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00cc "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00cd "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00ce "aic7xxx" "Adaptec|AIC7xxx SCSI controller"
+0x9005 0x00cf "aic7xxx" "Adaptec|7899P"
+0x9005 0x0200 0x9005 0x0200 "aacraid" "Adaptec|AAC RAID"
+0x9005 0x0241 "sata_mv" "Adaptec|AAR-1420SA"
+0x9005 0x0250 "ips" "Adaptec|ServeRAID Controller"
+0x9005 0x0258 "aic79xx" "Adaptec|AAC-RAID RAID Controller"
+0x9005 0x0279 "aic79xx" "Adaptec|ServeRAID 6M"
+0x9005 0x0283 "aacraid" "Adaptec|AAC RAID"
+0x9005 0x0284 "aacraid" "Adaptec|AAC RAID"
+0x9005 0x0285 "aacraid" "Adaptec|AAC RAID"
+0x9005 0x0286 "aacraid" "Adaptec|AAC-RAID (Rocket)"
+0x9005 0x0287 "aacraid" "Adaptec|PowerEdge Expandable RAID Controller 320/DC"
+0x9005 0x0410 "aic94xx" "Adaptec|AIC94xx SAS/SATA controller"
+0x9005 0x0412 "aic94xx" "Adaptec|AIC94xx SAS/SATA controller"
+0x9005 0x041e "aic94xx" "Adaptec|AIC94xx SAS/SATA controller"
+0x9005 0x041f "aic94xx" "Adaptec|AIC-9410W SAS (Razor ASIC RAID)"
+0x9005 0x0430 "aic94xx" "Adaptec|AIC94xx SAS/SATA controller"
+0x9005 0x0432 "aic94xx" "Adaptec|AIC94xx SAS/SATA controller"
+0x9005 0x043e "aic94xx" "Adaptec|AIC94xx SAS/SATA controller"
+0x9005 0x043f "aic94xx" "Adaptec|AIC94xx SAS/SATA controller"
+0x9005 0x0500 "ipr" "Adaptec|Dual Channel PCI-X U320 SCSI Adapter"
+0x9005 0x0503 0x1014 0x02bf "ipr" "Adaptec|Scamp chipset SCSI controller"
+0x9005 0x0503 0x1014 0x02d5 "ipr" "Adaptec|Scamp chipset SCSI controller"
+0x9005 0x0503 "unknown" "Adaptec|Scamp chipset SCSI controller"
+0x9005 0x0910 "unknown" "Adaptec|AUA-3100B"
+0x9005 0x091e "unknown" "Adaptec|AUA-3100B"
+0x9005 0x1028 "aacraid" "Adaptec|PowerEdge Expandable RAID Controller 320/DC"
+0x9005 0x1364 "aacraid" "Adaptec|Dell PowerEdge RAID Controller 2"
+0x9005 0x1365 "aacraid" "Adaptec|Dell PowerEdge RAID Controller 2"
+0x9005 0x8000 "aic79xx" "Adaptec|29320A"
+0x9005 0x8001 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8002 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8003 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8004 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8005 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8006 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8007 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8008 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8009 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x800a "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x800b "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x800c "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x800d "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x800e "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x800f "aic79xx" "Adaptec|7901"
+0x9005 0x8010 "aic79xx" "Adaptec|39320"
+0x9005 0x8011 "aic79xx" "Adaptec|39320D"
+0x9005 0x8012 "aic79xx" "Adaptec|29320"
+0x9005 0x8013 "aic79xx" "Adaptec|29320B"
+0x9005 0x8014 "aic79xx" "Adaptec|29320LP"
+0x9005 0x8015 "aic79xx" "Adaptec|ASC-39320B U320"
+0x9005 0x8016 "aic79xx" "Adaptec|ASC-39320A U320"
+0x9005 0x8017 "aic79xx" "Adaptec|ASC-29320ALP U320"
+0x9005 0x8018 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8019 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x801a "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x801b "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x801c "aic79xx" "Adaptec Inc.|AIC-????? Ultra320 SCSI Controller"
+0x9005 0x801d "aic79xx" "Adaptec|AIC-7901A U320"
+0x9005 0x801e "aic79xx" "Adaptec|7901A"
+0x9005 0x801f "aic79xx" "Adaptec|7902"
+0x9005 0x8080 "aic79xx" "Adaptec|ASC-29320A U320 w/HostRAID"
+0x9005 0x8081 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8082 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8083 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8084 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8085 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8086 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8087 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8088 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8089 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x808a "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x808b "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x808c "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x808d "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x808e "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x808f "aic79xx" "Adaptec|AIC-7901 U320 w/HostRAID"
+0x9005 0x8090 "aic79xx" "Adaptec|39320-HostRAID"
+0x9005 0x8091 "aic79xx" "Adaptec|29320-HostRAID"
+0x9005 0x8092 "aic79xx" "Adaptec|29320-HostRAID"
+0x9005 0x8093 "aic79xx" "Adaptec|29320B-HostRAID"
+0x9005 0x8094 "aic79xx" "Adaptec|29320LP-HostRAID"
+0x9005 0x8095 "aic79xx" "Adaptec|ASC-39320(B) U320 w/HostRAID"
+0x9005 0x8096 "aic79xx" "Adaptec|ASC-39320A U320 w/HostRAID"
+0x9005 0x8097 "aic79xx" "Adaptec|ASC-29320ALP U320 w/HostRAID"
+0x9005 0x8098 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x8099 "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x809a "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x809b "aic79xx" "Adaptec|AIC79xx SCSI controller"
+0x9005 0x809c "aic79xx" "Adaptec|ASC-39320D(B) U320 w/HostRAID"
+0x9005 0x809d "aic79xx" "Adaptec|AIC-7902(B) U320 w/HostRAID"
+0x9005 0x809e "aic79xx" "Adaptec|7901A-HostRAID"
+0x9005 0x809f "aic79xx" "Adaptec|7902-HostRAID"
+0x9005 0xffff "aic7xxx" "Adaptec|AIC7xxx compatible SCSI controller"
+0x907f 0x2015 "unknown" "Atronics|IDE-2015PL"
+0x9412 0x6565 "generic" "Holtek|6565"
+0x9699 0x6565 "unknown" "Omni Media Technology Inc.|6565"
+0x9710 0x7780 "unknown" "NetMos Technology|USB IRDA-port"
+0x9710 0x9705 "unknown" "Netmos|Nm9705 Parallel Port Adapter"
+0x9710 0x9715 "unknown" "Netmos|Nm9715 PCI Dual 1284 Printer Ports"
+0x9710 0x9735 "parport_serial" "Netmos|Nm9735 2S 1P"
+0x9710 0x9745 "parport_serial" "Netmos|Nm9745 Dual UART and PCI-ISA Bridge"
+0x9710 0x9755 "unknown" "Netmos|Nm9755 PCI Bridge with 1284 Parallel Port"
+0x9710 0x9805 "unknown" "Netmos|Nm9805 PCI + 1284 Printer Port"
+0x9710 0x9815 "unknown" "Netmos|Nm9815 Parallel Port Adapter"
+0x9710 0x9820 "unknown" "NetMos Techology|Nm9820 Single PCI UART"
+0x9710 0x9825 "unknown" "NetMos Techology|Nm9825 Single PCI UART"
+0x9710 0x9835 "parport_serial" "Netmos|Nm9835 PCI + Dual UART and 1284 Printer Port"
+0x9710 0x9845 "parport_serial" "Netmos|Nm9845 PCI Bridge with Dual UART"
+0x9710 0x9855 "parport_serial" "Netmos|Nm9855 1P 2S"
+0x9902 0x0001 "unknown" "StarGen Inc.|SG2010 PCI-to-PCI Bridge"
+0x9902 0x0002 "unknown" "StarGen Inc.|SG2010 PCI to high speed serial bridge"
+0x9902 0x0003 "unknown" "StarGen Inc.|SG1010 6 port serial switch /PCI-to-PCI bridge"
+0xa0a0 0x3058 "unknown" "AOPEN Inc.|VT82C686 AC97 Audio Controller?"
+0xa727 0x0013 "ath_pci" "3Com Corp.|3CRPAG175 Wireless PC Card"
+0xaa42 0x03a3 "unknown" "Scitex Digital Video|9400-0931 CharKey"
+0xaecb 0x6250 "unknown" "Adrienne Electronics Corp.|VITC/LTC Timecode Reader card [PCI-VLTC/RDR]"
+0xaffe 0x02e1 "unknown" "Sirrix AG security technologies|PCI2E1 2-port ISDN E1 interface"
+0xaffe 0xdead "unknown" "Sirrix AG security technologies|Sirrix.PCI4S0 4-port ISDN S0 interface"
+0xb00c 0x001c "unknown" "IC Book Labs|IC80+PCI POST Diagnostics Card"
+0xb00c 0x061c "unknown" "IC Book Labs|IC 138 PCI"
+0xb00c 0x081c "unknown" "IC Book Labs|Dreadnought x16 Pro"
+0xb00c 0x091c "unknown" "IC Book Labs|Dreadnought x16 Lite"
+0xc0de 0x5600 "unknown" "Motorola|62802"
+0xc0de 0xc0de "unknown" "Motorola|62802-5 QZ0022"
+0xcafe 0x0003 "unknown" "Chrysalis-ITS|Luna K3 Hardware Security Module"
+0xcddd 0x0101 "unknown" "Tyzx Inc.|DeepSea 1 Board"
+0xcddd 0x0200 "unknown" "Tyzx Inc.|DeepSea 2 High Speed Stereo Vision Frame Grabber"
+0xd161 0x0205 "unknown" "Digium Inc.|Wildcard TE205P"
+0xd161 0x0210 "unknown" "Digium Inc.|Wildcard TE210P"
+0xd161 0x0405 "unknown" "Digium Inc.|Wildcard TE405P (2nd Gen)"
+0xd161 0x0406 "unknown" "Digium, Inc.|Wildcard TE406P Quad-Span togglable E1/T1/J1 echo cancellation card 5.0v"
+0xd161 0x0410 "unknown" "Digium Inc.|Wildcard TE410P (2nd Gen)"
+0xd161 0x0411 "unknown" "Digium, Inc.|Wildcard TE411P Quad-Span togglable E1/T1/J1 echo cancellation card 3.3v"
+0xd161 0x2400 "unknown" "Digium, Inc.|Wildcard TDM2400P"
+0xd4d4 0x0601 "unknown" "Dy4 Systems Inc.|PCI Mezzanine Card"
+0xdeaf 0x9050 "unknown" "Middle Digital Inc.|PC Weasel PCI VGA Device"
+0xdeaf 0x9051 "unknown" "Middle Digital Inc.|PC Weasel PCI Serial Comm. Device"
+0xdeaf 0x9052 "unknown" "Middle Digital Inc.|PC Weasel PCI"
+0xe000 0x0001 "unknown" "Winbond Electronics Corp.|Tiger3XX Modem/ISDN interface"
+0xe000 0x0002 "unknown" "Winbond Electronics Corp.|Tiger100APC ISDN chipset"
+0xe000 0xe000 "unknown" "Winbond Electronics Corp.|W89C940"
+0xe159 0x0001 0x0059 0x0001 "ISDN:hisax,type=20" "Tiger Jet Network Inc.|Tiger3XX Modem/ISDN interface"
+0xe159 0x0001 0x0059 0x0003 "wcte11xp" "Tiger Jet Network Inc.|128k ISDN-U Adapter"
+0xe159 0x0001 0x00a7 0x0001 "wcte11xp" "Tiger Jet Network Inc.|TELES.S0/PCI 2.x ISDN Adapter"
+0xe159 0x0001 0x6159 0x0001 "wcte11xp" "Tiger Jet Network Inc.|Digium Wildcard T100P T1/PRI"
+0xe159 0x0001 0x79fe 0x0001 "wcte11xp" "Tiger Jet Network Inc.|Digium Wildcard TE110P T1/E1 Interface"
+0xe159 0x0001 0x8085 0x0003 "wcfxo" "Tiger Jet Network Inc.|NETjet PCI"
+0xe159 0x0001 0x8086 0x0003 "wcte11xp" "Tiger Jet Network Inc.|Digium X100P/X101P analogue PSTN FXO interface"
+0xe159 0x0001 0xa801 0x0001 "wcfxs" "Tiger Jet Network Inc.|NETjet PCI"
+0xe159 0x0001 0xa8fd 0x0001 "wcfxo" "Tiger Jet Network Inc.|NETjet PCI"
+0xe159 0x0001 0xb1b9 0x0001 "wcte11xp" "Tiger Jet Network Inc.|Digium Wildcard TDM400P REV I 4-port POTS interface"
+0xe159 0x0001 0xb1b9 0x0003 "wcte11xp" "Tiger Jet Network Inc.|Digium Wildcard TDM400P REV I 4-port POTS interface"
+0xe159 0x0001 0xb1d9 0x0003 "wcte11xp" "Tiger Jet Network Inc.|TDM400P/A400P analogue 4xPSTN FXO/FXS interface"
+0xe159 0x0001 "wcte11xp" "Tiger Jet Network Inc.|NETjet PCI"
+0xe159 0x0002 0x0051 0x0001 "ISDN:sedlfax" "Tiger Jet Network Inc.|"
+0xe159 0x0002 0x0054 0x0001 "ISDN:sedlfax" "Tiger Jet Network Inc.|"
+0xe159 0x0002 "ISDN:hisax,type=28,firmware=/usr/lib/isdn/ISAR.BIN" "Sedlbauer|Speed fax+ PCI"
+0xe159 0x0600 "unknown" "Tiger Jet Network Inc.|Tiger 600 PCI-to-PCI Bridge"
+0xea01 0x000a "unknown" "Eagle Technology|PCI-773 Temperature Card"
+0xea01 0x0032 "unknown" "Eagle Technology|PCI-730 & PC104P-30 Card"
+0xea01 0x003e "unknown" "Eagle Technology|PCI-762 Opto-Isolator Card"
+0xea01 0x0041 "unknown" "Eagle Technology|PCI-763 Reed Relay Card"
+0xea01 0x0043 "unknown" "Eagle Technology|PCI-769 Opto-Isolator Reed Relay Combo Card"
+0xea01 0x0046 "unknown" "Eagle Technology|PCI-766 Analog Output Card"
+0xea01 0x0052 "unknown" "Eagle Technology|PCI-703 Analog I/O Card"
+0xea01 0x0800 "unknown" "Eagle Technology|PCI-800 Digital I/O Card"
+0xea60 0x9896 "snd-rme32" "Xilinx|Digi32"
+0xea60 0x9897 "snd-rme32" "Xilinx|Digi32 PRO"
+0xea60 0x9898 "snd-rme32" "Xilinx|Digi32 8"
+0xeace 0x3100 "unknown" "Endace Measurement Systems, Ltd.|DAG 3.10 OC-3/OC-12"
+0xeace 0x3200 "unknown" "Endace Measurement Systems, Ltd.|DAG 3.2x OC-3/OC-12"
+0xeace 0x320e "unknown" "Endace Measurement Systems, Ltd.|DAG 3.2E Fast Ethernet"
+0xeace 0x340e "unknown" "Endace Measurement Systems, Ltd.|DAG 3.4E Fast Ethernet"
+0xeace 0x341e "unknown" "Endace Measurement Systems, Ltd.|DAG 3.41E Fast Ethernet"
+0xeace 0x3500 "unknown" "Endace Measurement Systems, Ltd.|DAG 3.5 OC-3/OC-12"
+0xeace 0x351c "unknown" "Endace Measurement Systems, Ltd.|DAG 3.5ECM Fast Ethernet"
+0xeace 0x4100 "unknown" "Endace Measurement Systems, Ltd.|DAG 4.10 OC-48"
+0xeace 0x4110 "unknown" "Endace Measurement Systems, Ltd.|DAG 4.11 OC-48"
+0xeace 0x4200 "unknown" "Endace Measurement Systems, Ltd.|DAG 4.2 OC-48"
+0xeace 0x420e "unknown" "Endace Measurement Systems, Ltd.|DAG 4.2E Dual Gigabit Ethernet"
+0xeace 0x4220 "unknown" "Endace Measurement Systems, Ltd.|DAG 4.2 OC-48"
+0xeace 0x422e "unknown" "Endace Measurement Systems, Ltd.|DAG 4.2E Dual Gigabit Ethernet"
+0xec80 0xec00 "orinoco_plx" "Belkin|Belkin F5D6000"
+0xecc0 0x0050 "unknown" "Echo Digital Audio Corp.|Gina24_301"
+0xecc0 0x0051 "unknown" "Echo Digital Audio Corp.|Gina24_361"
+0xecc0 0x0060 "unknown" "Echo Digital Audio Corp.|Layla24"
+0xecc0 0x0070 "unknown" "Echo Digital Audio Corp.|Mona_301_80"
+0xecc0 0x0071 "unknown" "Echo Digital Audio Corp.|Mona_301_66"
+0xecc0 0x0072 "unknown" "Echo Digital Audio Corp.|Mona_361"
+0xecc0 0x0080 "unknown" "Echo Digital Audio Corp.|Mia"
+0xedd8 0xa091 "Card:Ark Logic ARK1000PV (generic)" "ARK Logic Inc.|1000PV [Stingray]"
+0xedd8 0xa099 "Card:Ark Logic ARK2000MT (generic)" "ARK Logic Inc.|2000PV [Stingray]"
+0xedd8 0xa0a1 "Card:Ark Logic ARK2000MT (generic)" "ARK Logic Inc.|2000MT"
+0xedd8 0xa0a9 "Card:Ark Logic ARK2000MT (generic)" "ARK Logic Inc.|2000MI"
+0xedd8 0xa0b1 "unknown" "ARK Logic Inc.|ARK2000MI+ GUI Accelerator"
+0xf1d0 0xc0fe "unknown" "AJA Video|Xena HS/HD-R"
+0xf1d0 0xc0ff "unknown" "AJA Video|Kona/Xena 2"
+0xf1d0 0xcafe "unknown" "AJA Video|KONA SD SMPTE 259M I/O"
+0xf1d0 0xcfee "unknown" "AJA Video|Xena LS/SD-22-DA/SD-DA"
+0xf1d0 0xdcaf "unknown" "AJA Video|Kona HD"
+0xf1d0 0xdfee "unknown" "AJA Video|Xena HD-DA"
+0xf1d0 0xefac "unknown" "AJA Video|KONA SD SMPTE 259M I/O"
+0xf1d0 0xfacd "unknown" "AJA Video|KONA HD SMPTE 292M I/O"
+0xfa57 0x0001 "unknown" "Interagon AS|PMC Pattern Matching Chip"
+0xfeda 0xa0fa "unknown" "Epigram Inc.|BCM4210 OEM Chip for 10meg/s over phone line"
+0xfeda 0xa10e "unknown" "Broadcom Inc.|BCM4230 iLine10 HomePNA 2.0"
+0xfede 0x0003 "unknown" "Fedetec Inc.|TABIC PCI v3"
+0xff00 0x0070 "bttv" "Osprey|Osprey-100"
+0xff01 0x0070 "bttv" "Osprey|Osprey-200"
+0xfffd 0x0101 "unknown" "XenSource, Inc.|PCI Event Channel Controller"
+0xfffe 0x0405 "unknown" "VMWare Inc.|Virtual SVGA 4.0"
+0xfffe 0x0710 "Card:VMware virtual video card" "VMWare|Virtual SVGA"
+0xffff 0x8139 "8139too" "RealTek|RTL-8139 Fast Ethernet"
diff --git a/displayconfig/monitor.png b/displayconfig/monitor.png
new file mode 100644
index 0000000..f0d6165
--- /dev/null
+++ b/displayconfig/monitor.png
Binary files differ
diff --git a/displayconfig/servertestdialog.py b/displayconfig/servertestdialog.py
new file mode 100755
index 0000000..2095522
--- /dev/null
+++ b/displayconfig/servertestdialog.py
@@ -0,0 +1,113 @@
+#!/usr/bin/python
+###########################################################################
+# servertestdialog.py - #
+# ------------------------------ #
+# copyright : (C) 2004 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+from qt import * # Just use Qt for this.
+import os
+import sys
+
+############################################################################
+class ServerTestDialog(QDialog):
+ def __init__(self):
+ QDialog.__init__(self)
+
+ msec = 10000
+ margin = 4
+ spacing = 4
+
+ self.totaltimer = QTimer(self)
+ self.updatetimer = QTimer(self)
+ self.msectotal = self.msecremaining = msec
+ self.updateinterval = 1000
+
+ self.connect(self.totaltimer, SIGNAL("timeout()"), self.slotInternalTimeout)
+ self.connect(self.updatetimer, SIGNAL("timeout()"), self.slotUpdateTime)
+
+ layout = QHBoxLayout(self)
+ # create the widgets
+ self.mainwidget = QVBox(self, "mainWidget")
+ self.mainwidget.setMargin(margin)
+ self.mainwidget.setSpacing(spacing)
+
+ layout.addWidget(self.mainwidget,1)
+
+ label = QLabel(self.mainwidget)
+ label.setText(i18n("Are these settings acceptable?"))
+ QWidget(self.mainwidget)
+
+ self.timerwidget = QHBox(self.mainwidget, "timerWidget")
+ self.timerlabel = QLabel(self.timerwidget)
+ self.timerprogress = QProgressBar(self.timerwidget)
+ self.timerprogress.setTotalSteps(self.msectotal)
+ self.timerprogress.setPercentageVisible(False)
+
+ hbox = QHBox(self.mainwidget)
+ self.okbutton = QPushButton(i18n("Yes"),hbox)
+ QWidget(hbox)
+ self.cancelbutton = QPushButton(i18n("No"),hbox)
+ self.connect(self.okbutton, SIGNAL("clicked()"), self.slotOk)
+ self.connect(self.cancelbutton, SIGNAL("clicked()"), self.slotCancel)
+
+ self.slotUpdateTime(False)
+
+ def show(self):
+ QDialog.show(self)
+ self.totaltimer.start(self.msectotal, True)
+ self.updatetimer.start(self.updateinterval, False)
+
+ def exec_loop(self):
+ self.totaltimer.start(self.msectotal, True)
+ self.updatetimer.start(self.updateinterval, False)
+ return QDialog.exec_loop(self)
+
+ def setRefreshInterval(self, msec):
+ self.updateinterval = msec;
+ if self.updatetimer.isActive():
+ self.updatetimer.changeInterval(self.updateinterval)
+
+ def timeoutButton(self):
+ return self.buttonontimeout
+
+ def setTimeoutButton(self, newbutton):
+ self.buttonontimeout = newbutton
+
+ def slotUpdateTime(self, update=True):
+ self.msecremaining -= self.updateinterval
+
+ self.timerprogress.setProgress(self.msecremaining)
+ self.timerlabel.setText( i18n("Automatically cancelling in %1 seconds:").arg(self.msecremaining/1000.0) )
+
+ def slotInternalTimeout(self):
+ self.reject()
+
+ def slotOk(self):
+ self.accept()
+
+ def slotCancel(self):
+ self.reject()
+############################################################################
+
+os.environ["DISPLAY"] = ":9"
+os.environ["XAUTHORITY"] = sys.argv[1]
+
+# FIXME set the application name / string catalog, for i18n().
+qapp = QApplication(sys.argv)
+dialog = ServerTestDialog()
+dialog.show()
+dialog.exec_loop()
+
+if dialog.result()==QDialog.Accepted:
+ sys.exit(0)
+else:
+ sys.exit(1)
diff --git a/displayconfig/vesamodes b/displayconfig/vesamodes
new file mode 100644
index 0000000..9b518bd
--- /dev/null
+++ b/displayconfig/vesamodes
@@ -0,0 +1,110 @@
+//
+// Default modes distilled from
+// "VESA and Industry Standards and Guide for Computer Display Monitor
+// Timing", version 1.0, revision 0.8, adopted September 17, 1998.
+//
+// Based on Xorg's xc/programs/Xserver/hw/xfree86/etc/vesamodes file.
+// The mode names have been changed to include the refresh rate.
+
+
+# 640x350 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "640x350@85" 31.5 640 672 736 832 350 382 385 445 +hsync -vsync
+
+# 640x400 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "640x400@85" 31.5 640 672 736 832 400 401 404 445 -hsync +vsync
+
+# 720x400 @ 85Hz (VESA) hsync: 37.9kHz
+ModeLine "720x400@85" 35.5 720 756 828 936 400 401 404 446 -hsync +vsync
+
+# 640x480 @ 60Hz (Industry standard) hsync: 31.5kHz
+ModeLine "640x480@60" 25.2 640 656 752 800 480 490 492 525 -hsync -vsync
+
+# 640x480 @ 72Hz (VESA) hsync: 37.9kHz
+ModeLine "640x480@72" 31.5 640 664 704 832 480 489 491 520 -hsync -vsync
+
+# 640x480 @ 75Hz (VESA) hsync: 37.5kHz
+ModeLine "640x480@75" 31.5 640 656 720 840 480 481 484 500 -hsync -vsync
+
+# 640x480 @ 85Hz (VESA) hsync: 43.3kHz
+ModeLine "640x480@85" 36.0 640 696 752 832 480 481 484 509 -hsync -vsync
+
+# 800x600 @ 56Hz (VESA) hsync: 35.2kHz
+ModeLine "800x600@56" 36.0 800 824 896 1024 600 601 603 625 +hsync +vsync
+
+# 800x600 @ 60Hz (VESA) hsync: 37.9kHz
+ModeLine "800x600@60" 40.0 800 840 968 1056 600 601 605 628 +hsync +vsync
+
+# 800x600 @ 72Hz (VESA) hsync: 48.1kHz
+ModeLine "800x600@72" 50.0 800 856 976 1040 600 637 643 666 +hsync +vsync
+
+# 800x600 @ 75Hz (VESA) hsync: 46.9kHz
+ModeLine "800x600@75" 49.5 800 816 896 1056 600 601 604 625 +hsync +vsync
+
+# 800x600 @ 85Hz (VESA) hsync: 53.7kHz
+ModeLine "800x600@85" 56.3 800 832 896 1048 600 601 604 631 +hsync +vsync
+
+# 1024x768i @ 43Hz (industry standard) hsync: 35.5kHz
+ModeLine "1024x768@43" 44.9 1024 1032 1208 1264 768 768 776 817 +hsync +vsync Interlace
+
+# 1024x768 @ 60Hz (VESA) hsync: 48.4kHz
+ModeLine "1024x768@60" 65.0 1024 1048 1184 1344 768 771 777 806 -hsync -vsync
+
+# 1024x768 @ 70Hz (VESA) hsync: 56.5kHz
+ModeLine "1024x768@70" 75.0 1024 1048 1184 1328 768 771 777 806 -hsync -vsync
+
+# 1024x768 @ 75Hz (VESA) hsync: 60.0kHz
+ModeLine "1024x768@75" 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
+
+# 1024x768 @ 85Hz (VESA) hsync: 68.7kHz
+ModeLine "1024x768@85" 94.5 1024 1072 1168 1376 768 769 772 808 +hsync +vsync
+
+# 1152x864 @ 75Hz (VESA) hsync: 67.5kHz
+ModeLine "1152x864@75" 108.0 1152 1216 1344 1600 864 865 868 900 +hsync +vsync
+
+# 1280x960 @ 60Hz (VESA) hsync: 60.0kHz
+ModeLine "1280x960@60" 108.0 1280 1376 1488 1800 960 961 964 1000 +hsync +vsync
+
+# 1280x960 @ 85Hz (VESA) hsync: 85.9kHz
+ModeLine "1280x960@85" 148.5 1280 1344 1504 1728 960 961 964 1011 +hsync +vsync
+
+# 1280x1024 @ 60Hz (VESA) hsync: 64.0kHz
+ModeLine "1280x1024@60" 108.0 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
+
+# 1280x1024 @ 75Hz (VESA) hsync: 80.0kHz
+ModeLine "1280x1024@75" 135.0 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync
+
+# 1280x1024 @ 85Hz (VESA) hsync: 91.1kHz
+ModeLine "1280x1024@85" 157.5 1280 1344 1504 1728 1024 1025 1028 1072 +hsync +vsync
+
+# 1600x1200 @ 60Hz (VESA) hsync: 75.0kHz
+ModeLine "1600x1200@60" 162.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 65Hz (VESA) hsync: 81.3kHz
+ModeLine "1600x1200@65" 175.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 70Hz (VESA) hsync: 87.5kHz
+ModeLine "1600x1200@70" 189.0 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 75Hz (VESA) hsync: 93.8kHz
+ModeLine "1600x1200@75" 202.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1600x1200 @ 85Hz (VESA) hsync: 106.3kHz
+ModeLine "1600x1200@85" 229.5 1600 1664 1856 2160 1200 1201 1204 1250 +hsync +vsync
+
+# 1792x1344 @ 60Hz (VESA) hsync: 83.6kHz
+ModeLine "1792x1344@60" 204.8 1792 1920 2120 2448 1344 1345 1348 1394 -hsync +vsync
+
+# 1792x1344 @ 75Hz (VESA) hsync: 106.3kHz
+ModeLine "1792x1344@75" 261.0 1792 1888 2104 2456 1344 1345 1348 1417 -hsync +vsync
+
+# 1856x1392 @ 60Hz (VESA) hsync: 86.3kHz
+ModeLine "1856x1392@60" 218.3 1856 1952 2176 2528 1392 1393 1396 1439 -hsync +vsync
+
+# 1856x1392 @ 75Hz (VESA) hsync: 112.5kHz
+ModeLine "1856x1392@75" 288.0 1856 1984 2208 2560 1392 1393 1396 1500 -hsync +vsync
+
+# 1920x1440 @ 60Hz (VESA) hsync: 90.0kHz
+ModeLine "1920x1440@60" 234.0 1920 2048 2256 2600 1440 1441 1444 1500 -hsync +vsync
+
+# 1920x1440 @ 75Hz (VESA) hsync: 112.5kHz
+ModeLine "1920x1440@75" 297.0 1920 2064 2288 2640 1440 1441 1444 1500 -hsync +vsync
diff --git a/displayconfig/videocard.png b/displayconfig/videocard.png
new file mode 100644
index 0000000..0449561
--- /dev/null
+++ b/displayconfig/videocard.png
Binary files differ
diff --git a/displayconfig/widescreenmodes b/displayconfig/widescreenmodes
new file mode 100644
index 0000000..f352c53
--- /dev/null
+++ b/displayconfig/widescreenmodes
@@ -0,0 +1,66 @@
+//
+// Extra widescreen modes
+//
+
+# 1280x720 @ 50.00 Hz (GTF) hsync: 37.05 kHz; pclk: 60.47 MHz
+Modeline "1280x720@50" 60.47 1280 1328 1456 1632 720 721 724 741 -HSync +Vsync
+
+# 1280x720 @ 60.00 Hz (GTF) hsync: 44.76 kHz; pclk: 74.48 MHz
+Modeline "1280x720@60" 74.48 1280 1336 1472 1664 720 721 724 746 -HSync +Vsync
+
+# 1280x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 80.14 MHz
+Modeline "1280x768@60" 80.14 1280 1344 1480 1680 768 769 772 795 -HSync +Vsync
+
+# 1280x768 @ 75.00 Hz (GTF) hsync: 60.15 kHz; pclk: 102.98 MHz
+Modeline "1280x768@75" 102.98 1280 1360 1496 1712 768 769 772 802 -HSync +Vsync
+
+# 1280x800 @ 60.00 Hz (GTF) hsync: 49.68 kHz; pclk: 83.46 MHz
+Modeline "1280x800@60" 83.46 1280 1344 1480 1680 800 801 804 828 -HSync +Vsync
+
+# 1280x800 @ 75.00 Hz (GTF) hsync: 62.62 kHz; pclk: 107.21 MHz
+Modeline "1280x800@75" 107.21 1280 1360 1496 1712 800 801 804 835 -HSync +Vsync
+
+# 1440x900 @ 60.00 Hz (GTF) hsync: 55.92 kHz; pclk: 106.47 MHz
+Modeline "1440x900@60" 106.47 1440 1520 1672 1904 900 901 904 932 -HSync +Vsync
+
+# 1440x900 @ 75.00 Hz (GTF) hsync: 70.50 kHz; pclk: 136.49 MHz
+Modeline "1440x900@75" 136.49 1440 1536 1688 1936 900 901 904 940 -HSync +Vsync
+
+# 1400x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 122.61 MHz
+Modeline "1400x1050@60" 122.61 1400 1488 1640 1880 1050 1051 1054 1087 -HSync +Vsync
+
+# 1400x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 155.85 MHz
+Modeline "1400x1050@75" 155.85 1400 1496 1648 1896 1050 1051 1054 1096 -HSync +Vsync
+
+# 1600x1024 @ 60.00 Hz (GTF) hsync: 63.60 kHz; pclk: 136.36 MHz
+Modeline "1600x1024@60" 136.36 1600 1704 1872 2144 1024 1025 1028 1060 -HSync +Vsync
+
+# 1680x1050 @ 60.00 Hz (GTF) hsync: 65.22 kHz; pclk: 147.14 MHz
+Modeline "1680x1050@60" 147.14 1680 1784 1968 2256 1050 1051 1054 1087 -HSync +Vsync
+
+#Modeline "1680x1050@60" 154.20 1680 1712 2296 2328 1050 1071 1081 1103
+
+# 1680x1050 @ 75.00 Hz (GTF) hsync: 82.20 kHz; pclk: 188.07 MHz
+Modeline "1680x1050@75" 188.07 1680 1800 1984 2288 1050 1051 1054 1096 -HSync +Vsync
+
+# 1920x1200 @ 60.00 Hz (GTF) hsync: 74.52 kHz; pclk: 193.16 MHz
+Modeline "1920x1200@60" 193.16 1920 2048 2256 2592 1200 1201 1204 1242 -HSync +Vsync
+
+# 1920x1200 @ 75.00 Hz (GTF) hsync: 93.97 kHz; pclk: 246.59 MHz
+Modeline "1920x1200@75" 246.59 1920 2064 2272 2624 1200 1201 1204 1253 -HSync +Vsync
+
+# 2560x1600 @ 60.00 Hz (GTF) hsync: 99.36 kHz; pclk: 348.16 MHz
+Modeline "2560x1600@60" 348.16 2560 2752 3032 3504 1600 1601 1604 1656 -HSync +Vsync
+
+# 2560x1600 @ 75.00 Hz (GTF) hsync: 125.25 kHz; pclk: 442.88 MHz
+Modeline "2560x1600@75" 442.88 2560 2768 3048 3536 1600 1601 1604 1670 -HSync +Vsync
+
+
+# 3200x2048 @ 60.00 Hz (GTF) hsync: 127.14 kHz; pclk: 561.45 MHz
+Modeline "3200x2048@60" 561.45 3200 3456 3808 4416 2048 2049 2052 2119 -HSync +Vsync
+
+# 3200x2048 @ 75.00 Hz (GTF) hsync: 160.27 kHz; pclk: 712.90 MHz
+Modeline "3200x2048@75" 712.90 3200 3472 3824 4448 2048 2049 2052 2137 -HSync +Vsync
+
+# Powerbook G4 1280x854
+Modeline "1280x854" 80 1280 1309 1460 1636 854 857 864 896 +HSync +VSync
diff --git a/displayconfig/xconfig-test.py b/displayconfig/xconfig-test.py
new file mode 100644
index 0000000..7b28cb2
--- /dev/null
+++ b/displayconfig/xconfig-test.py
@@ -0,0 +1,15 @@
+import xorgconfig
+
+xconfig = xorgconfig.readConfig("/etc/X11/xorg.conf")
+
+for screensection in xconfig.getSections("screen"):
+ print screensection.identifier
+ print screensection.option
+
+for screensection in xconfig.getSections("device"):
+ print screensection.option
+ print screensection.option[1]
+ print screensection.option[2]
+
+
+ \ No newline at end of file
diff --git a/displayconfig/xorgconfig.py b/displayconfig/xorgconfig.py
new file mode 100755
index 0000000..7683b87
--- /dev/null
+++ b/displayconfig/xorgconfig.py
@@ -0,0 +1,903 @@
+#!/usr/bin/python
+###########################################################################
+# xorgconfig.py - description #
+# ------------------------------ #
+# begin : Wed Feb 9 2004 #
+# copyright : (C) 2005 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+import csv
+import codecs
+import locale
+"""
+General usage:
+
+ import xorgconfig
+ config = readConfig("/etc/X11/xorg.conf")
+
+ input_devices = config.getSections("InputDevice")
+ print input_devices[0].driver
+ options = input_devices[0].options
+ for option in options:
+ # option is of type OptionLine.
+ print option._row[0],
+ if len(option._row)>=2:
+ print "=>",option._row[1]
+
+ # Add line: Option "XkbModel" "pc105"
+ options.append( options.makeLine("Comment text",["XkbModel" "pc105"]) )
+
+
+Refactor plan
+=============
+New usage:
+
+ import xorgconfig
+ config = readConfig("/etc/X11/xorg.conf")
+
+ input_devices = config.section.InputDevice
+ print input_devices[0].driver
+ options = input_devices[0].options
+ for option in options:
+ # option is of type OptionLine.
+ print option[1],
+ if len(option)>=3:
+ print "=>",option[2]
+
+ module_section = config.section.module[0]
+ module_section.append(["load","i2c"])
+ assert module_section.existsLoad("i2c")
+ module_section.removeLoad("i2c")
+
+ device_section = config.section.device[0]
+ if device_section.busid is not None:
+ print "Found busid:",device_section.busid
+
+* direct references to myline._row should be removed.
+* A ConfigLine should be a subclass of List. With line[i] accessing the
+ parts of the line.
+* the order of the makeLine() parameters should be reversed.
+* it should be possible to directly append a list or tuple that represents
+ a line to a section.
+"""
+############################################################################
+class ConfigLine(object):
+ """Represents one line from the Xorg.conf file.
+
+ Each part of the line is printed without quotes.
+ """
+ def __init__(self,comment,row):
+ self._row = [item for item in row if item!='']
+ self._comment = comment
+
+ def toString(self,depth=0):
+ caprow = self._row
+ if len(caprow) > 0:
+ caprow[0] = caprow[0].capitalize()
+ string = ('\t' * (depth/2)) + ' ' * (depth%1) + '\t'.join([unicode(item) for item in caprow])
+ if self._comment is not None:
+ string += '#' + self._comment
+ return string + '\n'
+
+############################################################################
+class ConfigLineQuote(ConfigLine):
+ """Represents one line from the Xorg.conf file.
+
+ The first item in the line is not quoted, but the remaining items are.
+ """
+ def toString(self,depth=0):
+ string = ('\t' * (depth/2) + ' ' * (depth%1))
+ if len(self._row)!=0:
+ string += self._row[0].capitalize()
+ if len(self._row)>1:
+ if len(self._row[0]) < 8:
+ string += '\t'
+ string += '\t"' + '"\t"'.join([unicode(item) for item in self._row[1:]]) + '"'
+ if self._comment is not None:
+ string += '#' + self._comment
+ return string + '\n'
+
+############################################################################
+class OptionLine(ConfigLineQuote):
+ def __init__(self,comment,row):
+ arg = ['option']
+ arg.extend(row)
+ ConfigLineQuote.__init__(self,comment,arg)
+
+############################################################################
+class ConfigList(list):
+ def toString(self,depth=0):
+ string = ""
+ for item in self:
+ string += item.toString(depth)
+ return string
+
+############################################################################
+class OptionList(ConfigList):
+ name = "option"
+ def __setitem__(self,key,value):
+ list.__setitem__(self,key,value)
+
+ def makeLine(self,comment,row):
+ return OptionLine(comment,row)
+
+ def appendOptionRow(self,row):
+ self.append(self.makeLine(None,row))
+
+ def removeOptionByName(self,name):
+ name = name.lower()
+ i = 0
+ while i < len(self):
+ if self[i]._row[1].lower()==name:
+ del self[i]
+ else:
+ i += 1
+
+ def getOptionByName(self,name):
+ name = name.lower()
+ for item in self:
+ try:
+ if item._row[1].lower()==name:
+ return item
+ except IndexError:
+ pass
+ return None
+
+############################################################################
+class ScreenConfigLine(ConfigLine):
+ def __init__(self,comment,row):
+ arg = ["screen"]
+ arg.extend(row)
+ ConfigLine.__init__(self,comment,arg)
+
+ def toString(self,depth=0):
+ string = (' ' * depth)
+
+ try: # Keep on building up the string until the IndexError is thrown.
+ string += self._row[0]
+ i = 1
+ if self._row[i].isdigit():
+ string += ' ' + self._row[i]
+ i += 1
+ string += ' "' + self._row[i] + '"'
+ i += 1
+ while True:
+ item = self._row[i].lower()
+ if item in ['rightof','leftof','above','below']:
+ string += ' %s "%s"' % (item, self._row[i+1])
+ i += 1
+ elif item=='absolute':
+ string += ' %s %d %d' % (item, self._row[i+1], self._row[i+2])
+ i += 2
+ elif item.isdigit():
+ i += 1
+ string += ' %s %s' % (item,self._row[i])
+ i += 1
+ except IndexError: pass
+
+ if self._comment is not None:
+ string += ' #' + self._comment
+ return string + '\n'
+
+############################################################################
+class ScreenConfigList(ConfigList):
+ name = "screen"
+ def __setitem__(self,key,value):
+ list.__setitem__(self,key,value)
+
+ def makeLine(self,comment,row):
+ return ScreenConfigLine(comment,row)
+
+############################################################################
+class ConfigContainer(object):
+ """Acts as a container for ConfigLines and other ConfigContainers.
+ Is used for representing things like the whole config file, sections
+ and subsections inside the file.
+
+ """
+ def __init__(self):
+ self._contents = []
+
+ def append(self,item):
+ assert (item is not None)
+ self._contents.append(item)
+
+ def remove(self,item):
+ self._contents.remove(item)
+
+ def toString(self,depth=0):
+ string = ''
+ for item in self._contents:
+ string += item.toString(depth+1)
+ return string
+
+ def makeSection(self,comment,row):
+ return Section(comment,row)
+
+ def isSection(self,name):
+ lname = name.lower()
+ return lname=='section'
+
+ def isEndSection(self,name):
+ return False
+
+ def makeLine(self,comment,row):
+ return ConfigLine(comment,row)
+
+ def isListAttr(self,name):
+ lname = name.lower()
+ return lname in self._listattr
+
+ def makeListAttr(self,comment,row):
+ listobj = self.__getattr__(row[0].lower())
+ listobj.append( listobj.makeLine(comment,row[1:]) )
+
+ def getSections(self,name):
+ """Get all sections having the given name.
+
+ Returns a list of ConfigContainer objects.
+ """
+ name = name.lower()
+ sections = []
+ for item in self._contents:
+ try:
+ if isinstance(item,ConfigContainer) and item._name.lower()==name:
+ sections.append(item)
+ except IndexError: pass
+ return sections
+
+ def __getattr__(self,name):
+ if not name.startswith("_"):
+ lname = name.lower()
+ if lname in self._listattr:
+ # Lookup list attributes.
+ for item in self._contents:
+ if isinstance(item,ConfigList) and item.name==lname:
+ return item
+ else:
+ listitem = self._listattr[lname]()
+ self._contents.append(listitem)
+ return listitem
+ else:
+ for item in self._contents:
+ try:
+ if isinstance(item,ConfigLine) and item._row[0].lower()==lname:
+ return item._row[1]
+ except IndexError: pass
+ if lname in self._attr or lname in self._quoteattr:
+ return None
+ raise AttributeError, name
+
+ def __setattr__(self,name,value):
+ if name.startswith('_'):
+ return super(ConfigContainer,self).__setattr__(name,value)
+
+ lname = name.lower()
+ for item in self._contents:
+ try:
+ if isinstance(item,ConfigLine) and item._row[0].lower()==lname:
+ item._row[1] = value
+ break
+ except IndexError: pass
+ else:
+ if lname in self._attr or lname in self._quoteattr:
+ line = self.makeLine(None,[name,value])
+ self.append(line)
+ else:
+ raise AttributeError, name
+
+ def clear(self):
+ self._contents = []
+
+ def getRow(self,name):
+ if not name.startswith("_"):
+ lname = name.lower()
+ for item in self._contents:
+ try:
+ if isinstance(item,ConfigLine) and item._row[0].lower()==lname:
+ return item._row[1:]
+ except IndexError: pass
+
+ if name in self._attr or name in self._quoteattr:
+ # is a valid name, just has no real value right now.
+ return None
+
+ raise AttributeError, name
+
+############################################################################
+class Section(ConfigContainer):
+ """Represents a Section in the config file.
+
+ """
+
+ # List of config line types allowed inside this section.
+ # A list of strings naming lines that need to be stored in ConfigLine objects.
+ _attr = []
+
+ # A list of strings naming the lines that need to be stored in ConfigLineQuote objects.
+ # This is often overridden in subclasses.
+ _quoteattr = []
+
+ _listattr = {}
+
+ def __init__(self,comment,row):
+ ConfigContainer.__init__(self)
+ self._name = row[1]
+ self._comment = comment
+
+ def __show__(self):
+ """ For debugging """
+ for a in self._attr:
+ print self._name, "Attribute:", a
+ for a in self._quoteattr:
+ print self._name, "QuoteAttribute:", a
+ for a in self._listattr:
+ print self._name, "ListAttr:", a
+
+ def isSection(self,name):
+ return name.lower()=='subsection'
+
+ def isEndSection(self,name):
+ return name.lower()=='endsection'
+
+ def makeLine(self,comment,row):
+ try:
+ lname = row[0].lower()
+ if lname in self._quoteattr:
+ return ConfigLineQuote(comment,row)
+ if lname in self._attr:
+ return ConfigLine(comment,row)
+ return None
+ except IndexError:
+ pass
+ return ConfigContainer.makeLine(self,comment,row)
+
+ def toString(self,depth=0):
+ if self._comment is None:
+ return '%sSection "%s"\n%s%sEndSection\n' % \
+ (' ' * depth, self._name, ConfigContainer.toString(self,depth+1), ' ' * depth)
+ else:
+ return '%sSection "%s" # %s\n%s%sEndSection\n' % \
+ (' ' * depth, self._name, self._comment, ConfigContainer.toString(self,depth+1), ' ' * depth)
+
+############################################################################
+class SubSection(Section):
+ def isSection(self,name):
+ return False
+
+ def isEndSection(self,name):
+ return name.lower()=='endsubsection'
+
+ def toString(self,depth=0):
+ return '%sSubSection "%s"\n%s%sEndSubSection\n' % \
+ ('\t' * (depth/2) + ' ' * (depth%1), self._name, ConfigContainer.toString(self,depth+1), '\t' * (depth/2) + ' ' * (depth%1))
+
+
+############################################################################
+class DeviceSection(Section):
+ _attr = ["endsection","dacspeed","clocks","videoram","biosbase","membase", \
+ "iobase","chipid","chiprev","textclockfreq","irq","screen"]
+
+ _quoteattr = ["identifier","vendorname","boardname","chipset","ramdac", \
+ "clockchip","card","driver","busid"]
+
+ _listattr = {"option" : OptionList}
+
+############################################################################
+class DriSection(Section):
+ _attr = ["group","buffers","mode"]
+ def makeLine(self,comment,row):
+ try:
+ lname = row[0].lower()
+ if lname=="group" and not row[1].isdigit():
+ return ConfigLineQuote(comment,row)
+ except IndexError:
+ pass
+ return Section.makeLine(self,comment,row)
+
+############################################################################
+class ExtensionsSection(Section):
+ _listattr = {"option" : OptionList}
+
+############################################################################
+class FilesSection(Section):
+ _quoteattr = ["fontpath","rgbpath","modulepath","inputdevices","logfile"]
+ def makeLine(self,comment,row):
+ return ConfigLineQuote(comment,row)
+
+############################################################################
+class ModuleSection(Section):
+ _quoteattr = ["load","loaddriver","disable"]
+
+ def makeSection(self,comment,row):
+ return ModuleSubSection(comment,row)
+
+ def allowModule(self,modname):
+ killlist = []
+ for item in self._contents:
+ try:
+ if isinstance(item,ConfigLineQuote) \
+ and item._row[0].lower()=='disable' \
+ and item._row[1]==modname:
+ killlist.append(item)
+ except IndexError: pass
+
+ for item in killlist:
+ self._contents.remove(item)
+
+ def removeModule(self,modname):
+ killlist = []
+ for item in self._contents:
+ try:
+ if isinstance(item,ConfigLineQuote) \
+ and item._row[0].lower()=='load' \
+ and item._row[1]==modname:
+ killlist.append(item)
+ except IndexError: pass
+
+ for item in killlist:
+ self._contents.remove(item)
+
+ def disableModule(self,modname):
+ self.removeModule(modname)
+ self._contents.append(ConfigLineQuote(None,['disable',modname]))
+
+ def addModule(self,modname):
+ self.removeModule(modname)
+ self._contents.append(ConfigLineQuote(None,['load',modname]))
+
+############################################################################
+class ModuleSubSection(SubSection):
+ _listattr = {"option" : OptionList}
+
+############################################################################
+class ModeSection(Section):
+ _attr = ["dotclock","htimings","vtimings","hskew","bcast","vscan"]
+ _quoteattr = ["flags"]
+
+ def __init__(self,comment,row):
+ Section.__init__(self,comment,row)
+ self._name = row[1]
+
+ def isEndSection(self,name):
+ return name.lower()=='endmode'
+
+ def toString(self,depth=0):
+ if self._comment is None:
+ return '%sMode "%s"\n%s%sEndMode\n' % \
+ (' ' * depth, self._name, ConfigContainer.toString(self,depth+1), ' ' * depth)
+ else:
+ return '%sMode "%s" # %s\n%s%sEndMode\n' % \
+ (' ' * depth, self._name, self._comment, ConfigContainer.toString(self,depth+1), ' ' * depth)
+
+############################################################################
+class ModeList(ConfigList):
+ name = "mode"
+ def __setitem__(self,key,value):
+ list.__setitem__(self,key,value)
+
+ def makeLine(self,comment,row):
+ return ModeLine(comment,row)
+
+############################################################################
+class ModeLineList(ConfigList):
+ name = "modeline"
+ def __setitem__(self,key,value):
+ list.__setitem__(self,key,value)
+
+ def makeLine(self,comment,row):
+ return ModeLineConfigLine(comment,row)
+
+############################################################################
+class MonitorSection(Section):
+ _attr = ["displaysize","horizsync","vertrefresh","gamma"]
+ _quoteattr = ["identifier","vendorname","modelname","usemodes"]
+ _listattr = {"option" : OptionList, "mode" : ModeList, "modeline" : ModeLineList}
+
+ def makeLine(self,comment,row):
+ return Section.makeLine(self,comment,row)
+
+ def isSection(self,name):
+ lname = name.lower()
+ return lname=='mode'
+
+ def isEndSection(self,name):
+ return name.lower()=='endsection'
+
+ def makeSection(self,comment,row):
+ if row[0].lower()=='mode':
+ return ModeSection(comment,row)
+ else:
+ return Section.makeSection(self,comment,row)
+
+############################################################################
+class ModeLineConfigLine(ConfigLine):
+ def toString(self,depth=0):
+ string = (' ' * depth)+"modeline "
+ if len(self._row)>0:
+ string += ' "' + self._row[0] + '"'
+ if len(self._row)>1:
+ string += ' ' + ' '.join([unicode(item) for item in self._row[1:]])
+ if self._comment is not None:
+ string += '#' + self._comment
+ return string + '\n'
+
+############################################################################
+class ModesSection(MonitorSection):
+ # Like a MonitorSection, only smaller.
+ _attr = ["modeline"]
+ _quoteattr = ["identifier"]
+
+############################################################################
+class PointerSection(Section):
+ _attr = ["emulate3timeout","baudrate","samplerate","resolution",\
+ "devicename","buttons"]
+ _quoteattr = ["protocol","device","port","emulate3buttons","chordmiddle",\
+ "cleardtr","clearrts","zaxismapping","alwayscore"]
+
+############################################################################
+class ScreenSection(Section):
+ _attr = ["screenno","defaultcolordepth","defaultdepth","defaultbpp","defaultfbbpp"]
+ _quoteattr = ["identifier","driver","device","monitor","videoadaptor","option"]
+ _listattr = {"option" : OptionList}
+ def makeSection(self,comment,row):
+ if row[1].lower()=='display':
+ return DisplaySubSection(comment,row)
+ return SubSection(comment,row)
+
+############################################################################
+class DisplaySubSection(SubSection):
+ _attr = ["viewport","virtual","black","white","depth","fbbpp","weight"]
+ _quoteattr = ["modes","visual","option"]
+ _listattr = {"option" : OptionList}
+############################################################################
+class ServerFlagsSection(Section):
+ _quoteattr = ["notrapsignals","dontzap","dontzoom","disablevidmodeextension",\
+ "allownonlocalxvidtune","disablemodindev","allownonlocalmodindev","allowmouseopenfail", \
+ "blanktime","standbytime","suspendtime","offtime","defaultserverlayout"]
+ _listattr = {"option" : OptionList}
+
+############################################################################
+class ServerLayoutSection(Section):
+ _attr = []
+ _quoteattr = ["identifier","inactive","inputdevice","option"]
+ _listattr = {"option" : OptionList, "screen" : ScreenConfigList}
+
+############################################################################
+class InputDeviceSection(Section):
+ _quoteattr = ["identifier","driver"]
+ _listattr = {"option" : OptionList}
+############################################################################
+class KeyboardSection(Section):
+ _attr = ["autorepeat","xleds"]
+ _quoteattr = ["protocol","panix106","xkbkeymap","xkbcompat","xkbtypes",\
+ "xkbkeycodes","xkbgeometry","xkbsymbols","xkbdisable","xkbrules",\
+ "xkbmodel","xkblayout","xkbvariant","xkboptions","vtinit","vtsysreq",\
+ "servernumlock","leftalt","rightalt","altgr","scrolllock","rightctl"]
+
+############################################################################
+class VendorSection(Section):
+ _attr = []
+ _quoteattr = ["identifier"]
+ _listattr = {"option" : OptionList}
+ def isSection(self,name): return False
+
+############################################################################
+class VideoAdaptorSection(Section):
+ _attr = []
+ _quoteattr = ["identifier","vendorname","boardname","busid","driver"]
+ _listattr = {"option" : OptionList}
+ def makeSection(self,comment,row):
+ return VideoPortSection(comment,row)
+
+############################################################################
+class VideoPortSection(SubSection):
+ _attr = []
+ _quoteattr = ["identifier"]
+ _listattr = {"option" : OptionList}
+############################################################################
+class XorgConfig(ConfigContainer):
+ _sectiontypes = { \
+ 'device': DeviceSection,
+ 'dri': DriSection,
+ 'extensions': ExtensionsSection,
+ 'files': FilesSection,
+ 'inputdevice': InputDeviceSection,
+ 'keyboard': KeyboardSection,
+ 'modes': ModesSection,
+ 'monitor': MonitorSection,
+ 'module': ModuleSection,
+ 'pointer': PointerSection,
+ 'serverflags': ServerFlagsSection,
+ 'serverlayout': ServerLayoutSection,
+ 'screen': ScreenSection,
+ 'videoadaptor': VideoAdaptorSection}
+
+ def makeSection(self,comment,row):
+ lname = row[1].lower()
+ try:
+ return self._sectiontypes[lname](comment,row)
+ except KeyError:
+ return ConfigContainer.makeSection(self,comment,row)
+
+ def toString(self,depth=-1):
+ return ConfigContainer.toString(self,depth)
+
+ def writeConfig(self,filename):
+ try:
+ encoding = locale.getpreferredencoding()
+ except locale.Error:
+ encoding = 'ANSI_X3.4-1968'
+ fhandle = codecs.open(filename,'w',locale.getpreferredencoding())
+ fhandle.write(self.toString())
+ fhandle.close()
+
+ def createUniqueIdentifier(self,stem="id"):
+ """Create a unique identifier for a section
+
+ """
+ # Build a list of used identifiers
+ used_identifiers = []
+ for name in ['monitor','videoadaptor','inputdevice','serverlayout','device','screen']:
+ for section in self.getSections(name):
+ if section.identifier is not None:
+ used_identifiers.append(section.identifier)
+
+ # Generate a identifier that is not in use.
+ i = 1
+ while (stem+str(i)) in used_identifiers:
+ i += 1
+
+ return stem+str(i)
+
+############################################################################
+def addxorg(context, stack):
+ # Add minimal xorg.conf if it's missing
+ rows = [[None, [u'Section', u'Device']], [None, [u'Identifier', u'Configured Video Device']], \
+ [None, [u'EndSection']], [None, [u'Section', u'Monitor']], \
+ [None, [u'Identifier', u'Configured Monitor']], \
+ [None, [u'EndSection']], [None, [u'Section', u'Screen']], \
+ [None, [u'Identifier', u'Default Screen']], \
+ [None, [u'Monitor', u'Configured Monitor']], [None, [u'EndSection']], \
+ [None, [u'Section', u'ServerLayout']], \
+ [None, [u'Identifier', u'Default Layout']], \
+ [None, [u'screen', u'Default Screen']], \
+ [None, [u'EndSection']]]
+
+ for data in rows:
+ rowcomment = data[0]
+ row = data[1]
+ try:
+ first = row[0].lower()
+ if context.isSection(first):
+ section = context.makeSection(rowcomment,row)
+ context.append(section)
+ stack.append(context)
+ context = section
+ context_class = context.__class__
+ elif context.isEndSection(first):
+ context = stack.pop()
+ elif context.isListAttr(first):
+ context.makeListAttr(rowcomment,row)
+ else:
+ newline = context.makeLine(rowcomment,row)
+ if newline is None:
+ raise ParseException,"Unknown line type '%s' on line %i" % (first,line)
+ context.append(newline)
+ except IndexError:
+ context.append(ConfigLine(rowcomment,row))
+
+ return context, section, stack, first
+
+############################################################################
+def addServerLayout(context, section, stack, first):
+ # Add empty server layout section to xorg.conf if it's missing
+ rows = [[None, [u'Section', u'ServerLayout']], \
+ [None, [u'Identifier', u'Default Layout']], \
+ [None, [u'screen', u'0', u'Default Screen', u'0', u'0']], \
+ [None, [u'Inputdevice', u'Generic Keyboard']], \
+ [None, [u'Inputdevice', u'Configured Mouse']], \
+ [None, []], ["Uncomment if you have a wacom tablet", []], \
+ ["InputDevice \"stylus\" \"SendCoreEvents\"", []], \
+ [" InputDevice \"cursor\" \"SendCoreEvents\"", []], \
+ [" InputDevice \"eraser\" \"SendCoreEvents\"", []], \
+ [None, [u'Inputdevice', u'Synaptics Touchpad']], [None, [u'EndSection']]]
+ for data in rows:
+ rowcomment = data[0]
+ row = data[1]
+ try:
+ first = row[0].lower()
+ if context.isSection(first):
+ section = context.makeSection(rowcomment,row)
+ context.append(section)
+ stack.append(context)
+ context = section
+ context_class = context.__class__
+ elif context.isEndSection(first):
+ context = stack.pop()
+ elif context.isListAttr(first):
+ context.makeListAttr(rowcomment,row)
+ else:
+ newline = context.makeLine(rowcomment,row)
+ if newline is None:
+ raise ParseException,"Unknown line type '%s' on line %i" % (first,line)
+ context.append(newline)
+ except IndexError:
+ context.append(ConfigLine(rowcomment,row))
+
+ return context, section, stack, first
+
+############################################################################
+def readConfig(filename, check_exists=False):
+
+ context = XorgConfig()
+ stack = []
+ line = 1
+ hasserverlayout = False
+ hasxorg = True
+ try:
+ import os
+ try:
+ if os.path.isfile('/etc/X11/xorg.conf'):
+ if os.path.getsize(filename) == 0:
+ raise IOError, "xorg.conf is empty - making up config"
+ else:
+ raise IOError, "xorg.conf is empty - making up config"
+ except OSError, errmsg:
+ raise IOError, errmsg
+ for row in XorgconfCVSReader(filename=filename).readlines():
+ try:
+ first = row[0].lower()
+ if context.isSection(first):
+ section = context.makeSection(row.comment,row)
+ if section._name == 'ServerLayout':
+ hasserverlayout = True
+ context.append(section)
+ stack.append(context)
+ context = section
+ context_class = context.__class__
+ elif context.isEndSection(first):
+ context = stack.pop()
+ elif context.isListAttr(first):
+ context.makeListAttr(row.comment,row)
+ else:
+ newline = context.makeLine(row.comment,row)
+ if newline is None:
+ raise ParseException,"Unknown line type '%s' on line %i" % (first,line)
+ context.append(newline)
+ except IndexError:
+ context.append(ConfigLine(row.comment,row))
+ line += 1
+ except IOError, errmsg:
+ ermsg = str(errmsg)
+ print "IOError", ermsg, " - will create xorg.conf if possible."
+ if ermsg[:9] == "[Errno 2]": # No such file or directory:
+ hasxorg = False
+ addxorg(context, stack)
+ try:
+ xorgfile = open(filename, 'a')
+ xorgfile.close()
+ except IOError, errmsg:
+ ermsg = str(errmsg)
+ if ermsg[:9] == "[Errno 13]": #Permission denied:
+ pass
+ # Since we aren't root, changes can't be made anyway.
+ elif ermsg[:9] == "xorg.conf": # xorg.conf exists, but is empty
+ hasxorg = False
+ addxorg(context, stack)
+
+ if len(stack)!=0:
+ raise ParseException,"Unexpected end of file on line %i" % line
+ if not hasserverlayout and hasxorg:
+ addServerLayout(context, section, stack, first)
+ if check_exists:
+ return context, hasxorg
+ else:
+ return context
+
+############################################################################
+class ParseException(Exception):
+ def __init__(self,*args):
+ Exception.__init__(self,*args)
+
+############################################################################
+def toBoolean(value):
+ return unicode(value).lower() in ['on','true','1','yes']
+
+############################################################################
+# Our own class for reading CSV file. This version supports unicode while
+# standard Python (2.4) version doesn't. Hence the need for this class.
+#
+class XorgconfCVSReader(object):
+ def __init__(self,filename=None, text=None):
+ assert filename is not None or text is not None
+
+ STATE_DELIMITER = 0
+ STATE_ITEM = 1
+ STATE_QUOTE = 2
+ QUOTE = '"'
+ LINE_COMMENT = '#'
+
+ class CommentList(list):
+ def __init__(self):
+ list.__init__(self)
+ self.comment = None
+
+ if filename is not None:
+ try:
+ loc = locale.getpreferredencoding()
+ except locale.Error:
+ loc = 'ANSI_X3.4-1968'
+ fhandle = codecs.open(filename,'r',loc,'replace')
+ source_lines = fhandle.readlines()
+ fhandle.close()
+ else:
+ source_lines = text.split('\n')
+
+ self.lines = []
+ for line in source_lines:
+ if len(line)!=0 and line[-1]=='\n':
+ line = line[:-1]
+
+ state = STATE_DELIMITER
+ row = CommentList()
+ item = None
+ for i in range(len(line)):
+ c = line[i]
+
+ if state==STATE_DELIMITER:
+ if not c.isspace():
+ if c==QUOTE:
+ item = []
+ state = STATE_QUOTE
+ elif c==LINE_COMMENT:
+ row.comment = line[i+1:]
+ break
+ else:
+ item = []
+ item.append(c)
+ state = STATE_ITEM
+
+ elif state==STATE_ITEM:
+ if c.isspace():
+ row.append(u''.join(item))
+ state = STATE_DELIMITER
+ item = None
+ else:
+ item.append(c)
+
+ elif state==STATE_QUOTE:
+ if c==QUOTE:
+ row.append(u''.join(item))
+ state = STATE_DELIMITER
+ item = None
+ else:
+ item.append(c)
+
+ if item is not None:
+ row.append(u''.join(item))
+
+ self.lines.append(row)
+
+ def readlines(self):
+ return self.lines
+
+############################################################################
+if __name__=='__main__':
+ import sys
+ if len(sys.argv)==2:
+ filename = sys.argv[1]
+ else:
+ filename = "/etc/X11/xorg.conf"
+ print "Reading",filename
+ c = readConfig(filename)
+ print c.toString()
+
diff --git a/doc/en/index.docbook b/doc/en/index.docbook
new file mode 100644
index 0000000..92df3aa
--- /dev/null
+++ b/doc/en/index.docbook
@@ -0,0 +1,555 @@
+<?xml version="1.0" ?>
+<!DOCTYPE book PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" "dtd/kdex.dtd" [
+ <!ENTITY guidance "<application>guidance 0.4</application>">
+ <!ENTITY kappname "&guidance;"><!-- Do *not* replace kappname-->
+ <!ENTITY package "kde-module"><!-- kdebase, kdeadmin, etc -->
+ <!ENTITY % addindex "IGNORE">
+ <!ENTITY % English "INCLUDE"><!-- change language only here -->
+
+
+ <!-- Do not define any other entities; instead, use the entities
+ from kde-genent.entities and $LANG/user.entities. -->
+]>
+<!-- kdoctemplate v0.8 October 1 1999
+ Minor update to "Credits and Licenses" section on August 24, 2000
+ Removed "Revision history" section on 22 January 2001
+ Changed to Installation/Help menu entities 18 October 2001
+ Other minor cleanup and changes 18 October 2001 -->
+
+
+<!--
+This template was designed by: David Rugge davidrugge@mindspring.com
+with lots of help from: Eric Bischoff ebisch@cybercable.tm.fr
+and Frederik Fouvry fouvry@sfs.nphil.uni-tuebingen.de
+of the KDE DocBook team.
+
+You may freely use this template for writing any sort of KDE documentation.
+If you have any changes or improvements, please let us know.
+
+Remember:
+- in XML, the case of the <tags> and attributes is relevant ;
+- also, quote all attributes.
+
+Please don't forget to remove all these comments in your final documentation,
+thanks ;-).
+-->
+
+<!-- ................................................................ -->
+
+<!-- The language must NOT be changed here. -->
+
+<book lang="&language;">
+
+<!-- This header contains all of the meta-information for the document such
+as Authors, publish date, the abstract, and Keywords -->
+
+<bookinfo>
+<title>The &guidance; Handbook</title>
+
+<authorgroup>
+<author>
+<firstname></firstname>
+<othername></othername>
+<surname>Simon Edwards</surname>
+<affiliation>
+<address><email>simon@simonzone.com</email></address>
+</affiliation>
+</author>
+</authorgroup>
+
+<!-- TRANS:ROLES_OF_TRANSLATORS -->
+
+<copyright>
+<year>1999</year>
+<year>%{YEAR}</year>
+<holder>Simon Edwards</holder>
+</copyright>
+<!-- Translators: put here the copyright notice of the translation -->
+<!-- Put here the FDL notice. Read the explanation in fdl-notice.docbook
+ and in the FDL itself on how to use it. -->
+<legalnotice>&FDLNotice;</legalnotice>
+
+<!-- Date and version information of the documentation
+Don't forget to include this last date and this last revision number, we
+need them for translation coordination !
+Please respect the format of the date (YYYY-MM-DD) and of the version
+(V.MM.LL), it could be used by automation scripts.
+Do NOT change these in the translation. -->
+
+<date>2001-10-18</date>
+<releaseinfo>0.1</releaseinfo>
+
+<!-- Abstract about this handbook -->
+
+<abstract>
+<para>
+&guidance; is an application specially designed to do nothing you would
+ever want.
+</para>
+</abstract>
+
+<!-- This is a set of Keywords for indexing by search engines.
+Please at least include KDE, the KDE package it is in, the name
+ of your application, and a few relevant keywords. -->
+
+<keywordset>
+<keyword>KDE</keyword>
+<keyword>testapp</keyword>
+<keyword>nothing</keyword>
+<keyword>nothing else</keyword>
+</keywordset>
+
+</bookinfo>
+
+<!-- The contents of the documentation begin here. Label
+each chapter so with the id attribute. This is necessary for two reasons: it
+allows you to easily reference the chapter from other chapters of your
+document, and if there is no ID, the name of the generated HTML files will vary
+from time to time making it hard to manage for maintainers and for the CVS
+system. Any chapter labelled (OPTIONAL) may be left out at the author's
+discretion. Other chapters should not be left out in order to maintain a
+consistent documentation style across all KDE apps. -->
+
+<chapter id="introduction">
+<title>Introduction</title>
+
+<!-- The introduction chapter contains a brief introduction for the
+application that explains what it does and where to report
+problems. Basically a long version of the abstract. Don't include a
+revision history. (see installation appendix comment) -->
+
+<para>
+&guidance; is a program that lets you do absolutely nothing. Please report
+any problems or feature requests to the &kde; mailing lists.
+</para>
+</chapter>
+
+<chapter id="using-testapp">
+<title>Using &guidance;</title>
+
+<!-- This chapter should tell the user how to use your app. You should use as
+many sections (Chapter, Sect1, Sect3, etc...) as is necessary to fully document
+your application. -->
+
+<para>
+
+<!-- Note that all graphics should be in .png format. Use no gifs because of
+patent issues. -->
+
+<screenshot>
+<screeninfo>Here's a screenshot of &guidance;</screeninfo>
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="screenshot.png" format="PNG"/>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="screenshot.eps" format="EPS"/>
+ </imageobject>
+ <textobject>
+ <phrase>Screenshot</phrase>
+ </textobject>
+ </mediaobject>
+</screenshot>
+</para>
+
+
+<sect1 id="testapp-features">
+<title>More &guidance; features</title>
+
+<para>It slices! It dices! and it comes with a free toaster!</para>
+<para>
+The Squiggle Tool <guiicon><inlinemediaobject>
+ <imageobject>
+ <imagedata fileref="squiggle.png" format="PNG"/>
+ </imageobject>
+ <imageobject>
+ <imagedata fileref="squiggle.eps" format="EPS"/>
+ </imageobject>
+ <textobject>
+ <phrase>Squiggle</phrase>
+ </textobject>
+</inlinemediaobject></guiicon> is used to draw squiggly lines all over
+the &guidance; main window. It's not a bug, it's a feature!
+</para>
+
+</sect1>
+</chapter>
+
+<chapter id="commands">
+<title>Command Reference</title>
+
+<!-- (OPTIONAL, BUT RECOMMENDED) This chapter should list all of the
+application windows and their menubar and toolbar commands for easy reference.
+Also include any keys that have a special function but have no equivalent in the
+menus or toolbars. This may not be necessary for small apps or apps with no tool
+or menu bars. -->
+
+<sect1 id="testapp-mainwindow">
+<title>The main &guidance; window</title>
+
+<sect2>
+<title>The File Menu</title>
+<para>
+<variablelist>
+<varlistentry>
+<term><menuchoice>
+<shortcut>
+<keycombo action="simul">&Ctrl;<keycap>N</keycap></keycombo>
+</shortcut>
+<guimenu>File</guimenu>
+<guimenuitem>New</guimenuitem>
+</menuchoice></term>
+<listitem><para><action>Creates a new document</action></para></listitem>
+</varlistentry>
+<varlistentry>
+<term><menuchoice>
+<shortcut>
+<keycombo action="simul">&Ctrl;<keycap>S</keycap></keycombo>
+</shortcut>
+<guimenu>File</guimenu>
+<guimenuitem>Save</guimenuitem>
+</menuchoice></term>
+<listitem><para><action>Saves the document</action></para></listitem>
+</varlistentry>
+<varlistentry>
+<term><menuchoice>
+<shortcut>
+<keycombo action="simul">&Ctrl;<keycap>Q</keycap></keycombo>
+</shortcut>
+<guimenu>File</guimenu>
+<guimenuitem>Quit</guimenuitem>
+</menuchoice></term>
+<listitem><para><action>Quits</action> &guidance;</para></listitem>
+</varlistentry>
+</variablelist>
+</para>
+
+</sect2>
+
+<sect2>
+<title>The <guimenu>Help</guimenu> Menu</title>
+
+<!-- Assuming you have a standard help menu (help, what's this, about -->
+<!-- &guidance;, about KDE) then the documentation is already written. -->
+<!-- The following entity is valid anywhere that a variablelist is -->
+<!-- valid. -->
+
+&help.menu.documentation;
+
+</sect2>
+
+</sect1>
+</chapter>
+
+<chapter id="developers">
+<title>Developer's Guide to &guidance;</title>
+
+<!-- (OPTIONAL) A Programming/Scripting reference chapter should be
+used for apps that use plugins or that provide their own scripting hooks
+and/or development libraries. -->
+
+<para>
+Programming &guidance; plugins is a joy to behold. Just read through the next
+66 pages of API's to learn how!
+</para>
+
+<!-- Use refentries to describe APIs. Refentries are fairly complicated and you
+should consult the docbook reference for further details. The example below was
+taken from that reference and shortened a bit for readability. -->
+
+<refentry id="re-1007-unmanagechildren-1">
+<refmeta>
+<refentrytitle>XtUnmanageChildren</refentrytitle>
+<refmiscinfo>Xt - Geometry Management</refmiscinfo>
+</refmeta>
+<refnamediv>
+<refname>XtUnmanageChildren
+</refname>
+<refpurpose>remove a list of children from a parent widget's managed
+list.
+<indexterm id="ix-1007-unmanagechildren-1"><primary>widgets</primary><secondary>removing</secondary></indexterm>
+<indexterm id="ix-1007-unmanagechildren-2"><primary>XtUnmanageChildren</primary></indexterm>
+</refpurpose>
+
+</refnamediv>
+<refsynopsisdiv>
+<refsynopsisdivinfo>
+<date>4 March 1996</date>
+</refsynopsisdivinfo>
+<synopsis>
+void XtUnmanageChildren(<replaceable class="parameter">children</replaceable>, <replaceable class="parameter">num_children</replaceable>)
+ WidgetList <replaceable class="parameter">children</replaceable>;
+ Cardinal <replaceable class="parameter">num_children</replaceable>;
+</synopsis>
+
+<refsect2 id="r2-1007-unmanagechildren-1">
+<title>Inputs</title>
+<variablelist>
+<varlistentry>
+<term><replaceable class="parameter">children</replaceable>
+</term>
+<listitem>
+<para>Specifies an array of child widgets. Each child must be of
+class RectObj or any subclass thereof.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term><replaceable class="parameter">num_children</replaceable>
+</term>
+<listitem>
+<para>Specifies the number of elements in <replaceable class="parameter">children</replaceable>.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+</refsect2></refsynopsisdiv>
+
+<refsect1 id="r1-1007-unmanagechildren-1">
+<title>Description
+</title>
+<para><function>XtUnmanageChildren()</function> unmaps the specified widgets
+and removes them from their parent's geometry management.
+The widgets will disappear from the screen, and (depending
+on its parent) may no longer have screen space allocated for
+them.
+</para>
+<para>Each of the widgets in the <replaceable class="parameter">children</replaceable> array must have
+the same parent.
+</para>
+<para>See the &ldquo;Algorithm&rdquo; section below for full details of the
+widget unmanagement procedure.
+</para>
+</refsect1>
+
+<refsect1 id="r1-1007-unmanagechildren-2">
+<title>Usage</title>
+<para>Unmanaging widgets is the usual method for temporarily
+making them invisible. They can be re-managed with
+<function>XtManageChildren()</function>.
+</para>
+<para>You can unmap a widget, but leave it under geometry
+management by calling <function>XtUnmapWidget()</function>. You can
+destroy a widget's window without destroying the widget by
+calling <function>XtUnrealizeWidget()</function>. You can destroy a
+widget completely with <function>XtDestroyWidget()</function>.
+</para>
+<para>If you are only going to unmanage a single widget, it is
+more convenient to call <function>XtUnmanageChild()</function>. It is
+often more convenient to call <function>XtUnmanageChild()</function>
+several times than it is to declare and initialize an array
+of widgets to pass to <function>XtUnmanageChildren()</function>. Calling
+<function>XtUnmanageChildren()</function> is more efficient, however,
+because it only calls the parent's <function>change_managed()</function>
+method once.
+</para>
+</refsect1>
+
+<refsect1 id="r1-1007-unmanagechildren-3">
+<title>Algorithm
+</title>
+<para><function>XtUnmanageChildren()</function> performs the following:
+</para>
+<variablelist>
+<varlistentry>
+<term>-
+</term>
+<listitem>
+<para>Ignores the child if it already is unmanaged or is being
+destroyed.
+</para>
+</listitem>
+</varlistentry>
+<varlistentry>
+<term>-
+</term>
+<listitem>
+<para>Otherwise, if the child is realized, it makes it nonvisible
+by unmapping it.
+</para>
+</listitem>
+</varlistentry>
+</variablelist>
+<para>
+</para>
+</refsect1>
+
+<refsect1 id="r1-1007-unmanagechildren-4">
+<title>Structures</title>
+<para>The <type>WidgetList</type> type is simply an array of widgets:
+</para>
+<screen id="sc-1007-unmanagechildren-1">typedef Widget *WidgetList;
+</screen>
+</refsect1>
+</refentry>
+
+</chapter>
+
+<chapter id="faq">
+<title>Questions and Answers</title>
+
+<!-- (OPTIONAL but recommended) This chapter should include all of the silly
+(and not-so-silly) newbie questions that fill up your mailbox. This chapter
+should be reserved for BRIEF questions and answers! If one question uses more
+than a page or so then it should probably be part of the
+"Using this Application" chapter instead. You should use links to
+cross-reference questions to the parts of your documentation that answer them.
+This is also a great place to provide pointers to other FAQ's if your users
+must do some complicated configuration on other programs in order for your
+application work. -->
+
+&reporting.bugs;
+&updating.documentation;
+
+<qandaset id="faqlist">
+<qandaentry>
+<question>
+<para>My Mouse doesn't work. How do I quit &guidance;?</para>
+</question>
+<answer>
+<para>You silly goose! Check out the <link linkend="commands">Commands
+Section</link> for the answer.</para>
+</answer>
+</qandaentry>
+<qandaentry>
+<question>
+<para>Why can't I twiddle my documents?</para>
+</question>
+<answer>
+<para>You can only twiddle your documents if you have the foobar.lib
+installed.</para>
+</answer>
+</qandaentry>
+</qandaset>
+</chapter>
+
+<chapter id="credits">
+
+<!-- Include credits for the programmers, documentation writers, and
+contributors here. The license for your software should then be included below
+the credits with a reference to the appropriate license file included in the KDE
+distribution. -->
+
+<title>Credits and License</title>
+
+<para>
+&guidance;
+</para>
+<para>
+Program copyright %{YEAR} Simon Edwards <email>simon@simonzone.com</email>
+</para>
+<para>
+Contributors:
+<itemizedlist>
+<listitem><para>Konqui the KDE Dragon <email>konqui@kde.org</email></para>
+</listitem>
+<listitem><para>Tux the Linux Penguin <email>tux@linux.org</email></para>
+</listitem>
+</itemizedlist>
+</para>
+
+<para>
+Documentation copyright %{YEAR} Simon Edwards <email>simon@simonzone.com</email>
+</para>
+
+<!-- TRANS:CREDIT_FOR_TRANSLATORS -->
+
+&underFDL; <!-- FDL: do not remove -->
+
+<!-- Determine which license your application is licensed under,
+ and delete all the remaining licenses below:
+
+ (NOTE: All documentation are licensed under the FDL,
+ regardless of what license the application uses) -->
+
+&underGPL; <!-- GPL License -->
+&underBSDLicense; <!-- BSD License -->
+&underArtisticLicense; <!-- BSD Artistic License -->
+&underX11License; <!-- X11 License -->
+
+</chapter>
+
+<appendix id="installation">
+<title>Installation</title>
+
+<sect1 id="getting-testapp">
+<title>How to obtain &guidance;</title>
+
+<!-- This first entity contains boiler plate for applications that are
+part of KDE CVS. You should remove it if you are releasing your
+application -->
+
+&install.intro.documentation;
+
+</sect1>
+
+<sect1 id="requirements">
+<title>Requirements</title>
+
+<!--
+List any special requirements for your application here. This should include:
+.Libraries or other software that is not included in kdesupport,
+kdelibs, or kdebase.
+.Hardware requirements like amount of RAM, disk space, graphics card
+capabilities, screen resolution, special expansion cards, etc.
+.Operating systems the app will run on. If your app is designed only for a
+specific OS, (you wrote a graphical LILO configurator for example) put this
+information here.
+-->
+
+<para>
+In order to successfully use &guidance;, you need &kde; 1.1. Foobar.lib is
+required in order to support the advanced &guidance; features. &guidance; uses
+about 5 megs of memory to run, but this may vary depending on your
+platform and configuration.
+</para>
+
+<para>
+All required libraries as well as &guidance; itself can be found
+on <ulink url="ftp://ftp.testapp.org">The &guidance; home page</ulink>.
+</para>
+
+<!-- For a list of updates, you may refer to the application web site
+or the ChangeLog file, or ... -->
+<para>
+You can find a list of changes at <ulink
+url="http://apps.kde.org/testapp">http://apps.kde.org/testapp</ulink>.
+</para>
+</sect1>
+
+<sect1 id="compilation">
+<title>Compilation and Installation</title>
+
+<!-- This entity contains the boilerplate text for standard -->
+<!-- compilation instructions. If your application requires any -->
+<!-- special handling, remove it, and replace with your own text. -->
+
+&install.compile.documentation;
+
+</sect1>
+
+<sect1 id="configuration">
+<title>Configuration</title>
+
+<para>Don't forget to tell your system to start the <filename>dtd</filename>
+dicer-toaster daemon first, or &guidance; won't work !</para>
+
+</sect1>
+
+</appendix>
+
+&documentation.index;
+</book>
+
+<!--
+Local Variables:
+mode: sgml
+sgml-minimize-attributes:nil
+sgml-general-insert-case:lower
+sgml-indent-step:0
+sgml-indent-data:nil
+End:
+
+vim:tabstop=2:shiftwidth=2:expandtab
+-->
+
diff --git a/grubconfig/grubconfig.desktop b/grubconfig/grubconfig.desktop
new file mode 100644
index 0000000..618519b
--- /dev/null
+++ b/grubconfig/grubconfig.desktop
@@ -0,0 +1,49 @@
+[Desktop Entry]
+Name=Boot Loader Configuration
+Name[el]=Ρύθμιση φορτωτή εκκίνησης συστήματος
+Name[es]=Configuración del cargador de arranque
+Name[et]=Alglaaduri seadistamine
+Name[it]=Configurazione dell'avviamento del sistema
+Name[ja]=ブートローダの設定
+Name[nl]=Bootloaderconfiguratie
+Name[pt]=Configuração do Gestor de Arranque
+Name[pt_BR]=Configuração do Gerenciador de Inicialização
+Name[sr]=Подешавање подизања система
+Name[sr@Latn]=Podešavanje podizanja sistema
+Name[sv]=Startprograminställning
+Name[xx]=xxBoot Loader Configurationxx
+Comment=Boot Options Management
+Comment[el]=Διαχείριση επιλογών εκκίνησης συστήματος
+Comment[es]=Administración de las opciones de arranque
+Comment[et]=Alglaadimise võtmete haldamine
+Comment[it]=Gestione delle opzioni di avviamento del sistema
+Comment[ja]=起動オプションの管理
+Comment[nl]=Opstartopties beheren
+Comment[pt]=Gestão das Opções de Arranque
+Comment[pt_BR]=Gerenciamento das Opções de Inicialização
+Comment[sr]=Управљање опцијама бутовања
+Comment[sr@Latn]=Upravljanje opcijama butovanja
+Comment[sv]=Hantering av startalternativ
+Comment[xx]=xxBoot Options Managementxx
+Icon=grubconfig.png
+Encoding=UTF-8
+X-KDE-ModuleType=Library
+X-KDE-Library=grubconfig
+X-KDE-FactoryName=grubconfig
+X-KDE-RootOnly=true
+Type=Application
+Exec=kcmshell System/grubconfig
+Categories=Qt;KDE;X-KDE-settings-system;
+GenericName=Boot Loader Configuration
+GenericName[el]=Ρυθμίσεις φορτωτή εκκίνησης συστήματος
+GenericName[es]=Configuración del cargador de arranque
+GenericName[et]=Alglaaduri seadistamine
+GenericName[it]=Configurazione dell'avviamento del sistema
+GenericName[ja]=ブートローダの設定
+GenericName[nl]=Bootloaderconfiguratie
+GenericName[pt]=Configuração do Gestor de Arranque
+GenericName[pt_BR]=Configuração do Gerenciador de Inicialização
+GenericName[sr]=Подешавање подизања система
+GenericName[sr@Latn]=Podešavanje podizanja sistema
+GenericName[sv]=Inställning av startprogram
+GenericName[xx]=xxBoot Loader Configurationxx
diff --git a/grubconfig/grubconfig.py b/grubconfig/grubconfig.py
new file mode 100644
index 0000000..2445132
--- /dev/null
+++ b/grubconfig/grubconfig.py
@@ -0,0 +1,697 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# grubconfig.py - description #
+# ------------------------------ #
+# begin : Sun Dec 10 2006 #
+# copyright : (C) 2006-2007 by Martin Böhm #
+# email : martin.bohm@kubuntu.org #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+
+
+from qt import *
+from kdeui import *
+from kdecore import *
+from kfile import *
+import sys, os, string, re
+import os.path
+import shutil
+import locale
+import tempfile
+
+programname = "Boot Loader Configuration"
+version = "0.0.2"
+
+standalone = __name__=='__main__'
+
+
+if standalone:
+ programbase = KDialogBase
+else:
+ programbase = KCModule
+
+parsable = ["default","menu","color","timeout","hiddenmenu","title","root","kernel","initrd"]
+cat1 = ["default","menu","color","timeout","hiddenmenu","root","initrd"]
+cat2 = ["savedefault","makeactive","chainloader"]
+cat3 = ["kernel"]
+
+
+class GreyListViewItem(KListViewItem):
+ def paintCell(self, p, cg, column, width, align ):
+ cgGrey = cg
+ cgGrey.setColor(QColorGroup.Text,QColor("grey"))
+ KListViewItem.paintCell(self, p, cgGrey, column, width, align)
+ cg.restore()
+
+
+class BoldListViewItem(KListViewItem):
+ def paintCell(self, p, cg, column, width, align ):
+ p.save()
+ f = p.font()
+ f.setBold(True)
+ KListViewItem.paintCell(self, p, cg, column, width, align)
+ p.restore()
+
+
+class GrubConfigAppClass(programbase):
+ def __init__(self,parent=None,name=None):
+ if standalone:
+ KDialogBase.__init__(self,KJanusWidget.Tabbed,i18n("Boot Loader Configuration"),
+ KDialogBase.Help|KDialogBase.Ok|KDialogBase.Close, KDialogBase.Close)
+ # no need to include About button yet
+ self.menulstlocation = "/boot/grub/menu.lst"
+ self.readfilename = self.menulstlocation
+ self.globalvars = {}
+ self.itemslist = []
+
+ #--- Load menu.lst using the load_menulst() method
+ self.load_menulst()
+ print self.globalvars
+ print self.itemslist
+
+ # - GRUB Options Tab -
+ if standalone:
+ usershbox = self.addHBoxPage(i18n("Grub Options"))
+ vbox = QVBox(usershbox)
+ else:
+ vbox = QVBox(tabcontrol)
+ vbox.setMargin(KDialog.marginHint())
+
+ # -- Operating Systems List & MakeDefault Button --
+ horizontalbox = QHBox(vbox)
+ self.itemslistview = KListView(horizontalbox)
+ self.itemslistview.addColumn("")
+ self.itemslistview.setSorting(-1)
+ self.itemslistview.header().hide()
+ self.itemslistviewitems = []
+ arrowsbox = QVBox(horizontalbox)
+ self.upbutton = KPushButton(i18n("Move Up"),arrowsbox)
+ self.connect(self.upbutton,SIGNAL("clicked()"),self.slotUpButtonClicked)
+
+ self.downbutton = KPushButton(i18n("Move Down"),arrowsbox)
+ self.connect(self.downbutton,SIGNAL("clicked()"),self.slotDownButtonClicked)
+
+ self.defaultbutton = KPushButton(i18n("Make Default"),vbox)
+ self.connect(self.defaultbutton,SIGNAL("clicked()"),self.slotSetDefaultButtonClicked)
+
+
+ # -- Boot Options Group Box --
+ bootoptionsbasebox = QVGroupBox(vbox,"Boot Options")
+ bootoptionsbasebox.setTitle(i18n("Boot Options"));
+
+ bootoptionsbasevbox = QWidget(bootoptionsbasebox)
+
+ infogrid = QGridLayout(bootoptionsbasevbox,3,2)
+ infogrid.setSpacing(KDialog.spacingHint())
+
+ # --- Timeout ---
+ label = QLabel(i18n("Timeout:"),bootoptionsbasevbox)
+ infogrid.addWidget(label,0,0)
+
+ timeoutbox = QHBox(bootoptionsbasevbox)
+ timeoutbox.setSpacing(KDialog.spacingHint())
+
+ self.timeout = KIntSpinBox(timeoutbox,"Timeout")
+ if "timeout" in self.globalvars:
+ self.timeout.setValue(int(self.globalvars['timeout'][0]))
+ label = QLabel(i18n("seconds"),timeoutbox)
+ infogrid.addWidget(timeoutbox,0,1)
+
+
+ infogrid.addWidget(self.timeout,0,1)
+
+ # --- Hide Menu on Boot ---
+ self.hidemenuonboot = QCheckBox(i18n("Hide Menu on Boot"),bootoptionsbasevbox)
+ if 'hiddenmenu' in self.globalvars:
+ self.hidemenuonboot.setChecked(int(self.globalvars['hiddenmenu'][0]))
+ infogrid.addWidget(self.hidemenuonboot,1,1)
+
+ # --- Make Last OS Default ---
+ self.lastdefault = QCheckBox(i18n("Make Last Operating System Default"),bootoptionsbasevbox)
+ infogrid.addWidget(self.lastdefault,2,1)
+
+
+ # -- Security Group Box --
+ securitybox = QVGroupBox(vbox,"Security")
+ securitybox.setTitle(i18n("Security"));
+ securityvbox = QWidget(securitybox)
+
+ infogrid = QGridLayout(securityvbox,2,2)
+ infogrid.setSpacing(KDialog.spacingHint())
+
+ # --- Password ---
+ label = QLabel(i18n("Password:"),securityvbox)
+ infogrid.addWidget(label,0,0)
+ self.userpassword = KPasswordEdit(securityvbox)
+ infogrid.addWidget(self.userpassword,0,1)
+
+ # --- Repeat Password ---
+ label = QLabel(i18n("Repeat Password:"),securityvbox)
+ infogrid.addWidget(label,1,0)
+ self.userrepeatpassword = KPasswordEdit(securityvbox)
+ infogrid.addWidget(self.userrepeatpassword,1,1)
+
+ # -- Splash Screen Group Box --
+ splashbox = QVGroupBox(vbox,"Splash screen")
+ splashbox.setTitle(i18n("Splash screen"));
+
+ # --- Background Color ---
+ labelandeditbox = QHBox(splashbox)
+ label = QLabel(i18n("Background Color:"),labelandeditbox)
+ self.backgroundcolor = QComboBox(labelandeditbox)
+
+ # --- Highlight Color ---
+ labelandeditbox = QHBox(splashbox)
+ label = QLabel(i18n("Highlight Color:"),labelandeditbox)
+ self.highlightcolor = QComboBox(labelandeditbox)
+
+ # - Operating Systems Tab -
+
+ if standalone:
+ groupsvbox = self.addVBoxPage(i18n("Operating Systems"))
+ vb = QVBox(groupsvbox)
+ else:
+ groupsvbox = QVBox(tabcontrol)
+ roupsvbox.setMargin(KDialog.marginHint())
+ vb = QVBox(groupsvbox)
+
+ # -- Operating Systems List --
+
+ horizontalbox = QHBox(vb)
+ self.oslistview = KListView(horizontalbox)
+ self.oslistview.addColumn("")
+ self.oslistview.addColumn("")
+ self.oslistview.setSorting(-1)
+ self.oslistview.header().hide()
+ self.oslistviewitems = []
+ self.connect(self.oslistview,SIGNAL("selectionChanged()"),self.oslistviewitemSelected)
+
+ # -- Operating Systems Details Box --
+ osdetailsbox = QVGroupBox(vb,"Operating System Details")
+ # label = QLabel(i18n("Security"),securitybox)
+ detailsvbox = QWidget(osdetailsbox)
+
+ infogrid = QGridLayout(detailsvbox,7,2)
+ infogrid.setSpacing(KDialog.spacingHint())
+
+ osdetailsbox.setTitle(i18n("Operating System Details"));
+
+ # --- List in GRUB Menu ---
+ self.listingrub = QCheckBox(i18n("List in GRUB Menu"),detailsvbox)
+ infogrid.addWidget(self.listingrub,0,1)
+
+ # --- Display Name ---
+ label = QLabel(i18n("Display Name:"),detailsvbox)
+ infogrid.addWidget(label,1,0)
+ self.displaynamelabel = QLineEdit("",detailsvbox)
+ infogrid.addWidget(self.displaynamelabel,1,1)
+ self.connect(self.displaynamelabel,SIGNAL("textChanged(const QString &)"),self.slotDisplayNameLabelChanged)
+
+ # --- Operating System ---
+ label = QLabel(i18n("Operating System:"),detailsvbox)
+ infogrid.addWidget(label,2,0)
+ self.operatingsystem = QComboBox(detailsvbox)
+ infogrid.addWidget(self.operatingsystem,2,1)
+
+ # --- Kernel ---
+ label = QLabel(i18n("Kernel:"),detailsvbox)
+ infogrid.addWidget(label,3,0)
+ self.kernel = KURLRequester(detailsvbox)
+ infogrid.addWidget(self.kernel,3,1)
+
+ # --- Failsafe Kernel ---
+ # not sure if that is possible - requested by seele
+ label = QLabel(i18n("Failsafe Kernel:"),detailsvbox)
+ infogrid.addWidget(label,4,0)
+ self.failsafekernel = QComboBox(detailsvbox)
+ infogrid.addWidget(self.failsafekernel,4,1)
+
+ # --- Initial RAM Disk ---
+ label = QLabel(i18n("Initial RAM Disk:"),detailsvbox)
+ infogrid.addWidget(label,5,0)
+ self.initrd = KURLRequester(detailsvbox)
+ infogrid.addWidget(self.initrd,5,1)
+
+ # --- Root Filesystem ---
+ label = QLabel(i18n("Root Filesystem:"),detailsvbox)
+ infogrid.addWidget(label,6,0)
+ self.rootfilesystem = QComboBox(detailsvbox)
+ infogrid.addWidget(self.rootfilesystem,6,1)
+
+
+ # -- Boot Options Box --
+ bootoptionsbox = QVGroupBox(vb,"Boot Options")
+ # label = QLabel(i18n("Security"),securitybox)
+ bootoptionsbox.setTitle(i18n("Boot Options"));
+
+
+
+ self.acpibox = QCheckBox(i18n("Power Management (ACPI) "),bootoptionsbox)
+ self.debugbox = QCheckBox(i18n("Debugging Messages "),bootoptionsbox)
+ self.selinuxbox = QCheckBox(i18n("SELinux Support "),bootoptionsbox)
+ self.splashbox = QCheckBox(i18n("Splash Screen"),bootoptionsbox)
+
+ labelandeditbox = QHBox(bootoptionsbox)
+ label = QLabel(i18n("Custom Options:"),labelandeditbox)
+ self.customoptions = KLineEdit("",labelandeditbox)
+
+ # -- (static) UI finished --
+ self.reloadListViews("oslist")
+ self.reloadListViews("itemslist")
+ try:
+ self.oslistview.setSelected(self.oslistviewitems[int(self.globalvars['default'][0])],True)
+ except ValueError:
+ self.oslistview.setSelected(self.oslistviewitems[0],True)
+
+ ops_list = self.load_osprobe()
+ print ops_list # mhb debug
+
+ #######################################################################
+ # reload listviews, because they have changed
+ def reloadListViews(self,name):
+ print "reloaded"
+ # you should repaint the one that is not changed on screen
+ if name == "oslist":
+ self.oslistview.clear()
+
+ for item in self.itemslist:
+ try:
+ if self.itemslist.index(item) == int(self.globalvars['default'][0]):
+ self.oslistviewitems.append(BoldListViewItem(self.oslistview,self.oslistview.lastItem(),item['title'][0]))
+ else:
+ self.oslistviewitems.append(KListViewItem(self.oslistview,self.oslistview.lastItem(),item['title'][0]))
+ except ValueError:
+ self.oslistviewitems.append(KListViewItem(self.oslistview,self.oslistview.lastItem(),item['title'][0]))
+ # if it has a root option (other than 1 which means only root by itself), it is an OS
+ else:
+ self.itemslistview.clear()
+ #repaint main list
+ for item in self.itemslist:
+ try:
+ if self.itemslist.index(item) == int(self.globalvars['default'][0]):
+ print "bam!"
+ self.itemslistviewitems.append(BoldListViewItem(self.itemslistview,self.itemslistview.lastItem(),item['title'][0]))
+ else:
+ self.itemslistviewitems.append(KListViewItem(self.itemslistview,self.itemslistview.lastItem(),item['title'][0]))
+ except ValueError:
+ self.itemslistviewitems.append(KListViewItem(self.itemslistview,self.itemslistview.lastItem(),item['title'][0]))
+
+ #######################################################################
+ def slotUser1(self):
+ self.aboutus.show()
+
+
+ #######################################################################
+ # def slotClose(self):
+ # self.close()
+
+ #######################################################################
+ def slotOk(self):
+ self.save_menulst()
+ # mhb TODO: catching exceptions here would be useful
+ self.close()
+
+ #######################################################################
+ def slotCheckOsClicked(self):
+ self.OsProbedList = self.load_osprobe()
+
+ #######################################################################
+ def oslistviewitemSelected(self):
+ # save current item changes & select another one
+ i = self.oslistviewitems.index(self.oslistview.selectedItem())
+ self.updatingGUI = True
+ self.displaynamelabel.setText(self.itemslist[i]["title"][0])
+ # visible in GRUB reload
+ # kernel reload
+ try:
+ self.kernel.setURL(self.itemslist[i]["kernel"][0])
+ except KeyError:
+ self.initrd.setURL("unavailable") # mhb debug
+ # initrd reload
+ try:
+ self.initrd.setURL(self.itemslist[i]["initrd"][0])
+ except KeyError:
+ self.initrd.setURL("unavailable") # mhb debug
+
+ # custom options reload
+ customoptions = ""
+ for word in self.itemslist[i]["kernel"][1:-1]:
+ customoptions += word + " "
+ self.customoptions.setText(customoptions[:-1])
+
+ self.updatingGUI = False
+ print "oslistview item selected" #mhb debug
+ pass
+ #######################################################################
+ def slotDisplayNameLabelChanged(self, string):
+ if(self.updatingGUI == False):
+ print "display name changed" #mhb debug
+ i = self.oslistviewitems.index(self.oslistview.selectedItem())
+ self.itemslist[i]["title"][0] = string
+ self.oslistview.selectedItem().setText(0,string)
+ self.reloadListViews("itemslist")
+ pass
+ #######################################################################
+ def slotUpButtonClicked(self):
+ print "UpButton clicked" #mhb debug
+ i = self.itemslistviewitems.index(self.itemslistview.selectedItem())
+ self.itemslistview.selectedItem().itemAbove().moveItem(self.itemslistview.selectedItem())
+ # itemslist should have the same i for the same option
+ if(i != 0):
+ container = self.itemslist[i]
+ self.itemslist[i] = self.itemslist[i-1]
+ self.itemslist[i-1] = container
+ self.reloadListViews("oslist")
+ return "not working yet"
+
+ #######################################################################
+ def slotDownButtonClicked(self):
+ print "DownButton clicked" #mhb debug
+ i = self.itemslistviewitems.index(self.itemslistview.selectedItem())
+ self.itemslistview.selectedItem().moveItem(self.itemslistview.selectedItem().itemBelow())
+ if(i != len(self.itemslist)-1):
+ container = self.itemslist[i]
+ self.itemslist[i] = self.itemslist[i+1]
+ self.itemslist[i+1] = container
+ self.reloadListViews("oslist")
+ return "not working yet"
+
+ #######################################################################
+ def slotSetDefaultButtonClicked(self):
+ print "SetDefaultButton cliicked" #mhb debug
+ try:
+ defaultn = int(self.globalvars["default"][0])
+ except ValueError:
+ pass
+ else:
+ container = self.itemslistviewitems[defaultn]
+ self.itemslistviewitems[defaultn] = KListViewItem(self.itemslistview,container,self.itemslist[defaultn]['title'][0])
+ self.itemslistview.takeItem(container)
+
+
+ indexn = self.itemslistviewitems.index(self.itemslistview.selectedItem())
+ self.globalvars["default"] = str(indexn)
+ self.itemslistviewitems[indexn] = BoldListViewItem(self.itemslistview,self.itemslistview.selectedItem(),self.itemslist[indexn]['title'][0])
+ self.itemslistview.takeItem(self.itemslistview.selectedItem())
+
+ self.reloadListViews("oslist")
+
+ return "not working yet"
+
+
+
+ #######################################################################
+ # loop
+ def exec_loop(self):
+ global programbase
+ # self.__loadOptions()
+ self.updatingGUI = True
+ #self.__updateUserList()
+ #self.__updateGroupList()
+ self.updatingGUI = False
+ programbase.exec_loop(self)
+ print "done"
+
+
+ #######################################################################
+ # loads menu.lst
+ # NOT YET parsing:
+ #  fallback
+ # currently parsing: (type of the location number)
+ # default <int>
+ # timeout <int>
+ # hiddenmenu <int>
+ # color <int>
+ #  password (consider an md5 sum?) <int>
+ #  AUTOMAGIC KERNELS LIST <interval - two ints>
+ # GRUBCONFIG DISABLED ITEMS <interval - two ints>
+ # IMPORTANT note:
+ # any value that is not parsed MUST not be ommited at the end!
+ #  any value that is commented (parsed or not) MUST not be omitted at the end!
+ # not so important note:
+ # if a value we parse is not defined:
+ # apply defaults (how do find them out?)
+ # but specify it in the menu.lst when saving
+ # mhb TODO: somehow handle automagic kernel list (target: feisty)
+ # mhb TODO: adapt to more distributions, find menu.lst on different locations
+ def load_menulst(self):
+ self.modifiedlines = []
+ menufd = open(self.menulstlocation,"r")
+ linenum = 0
+ lock = 0
+ itemlock = 0
+ currentitem = 0
+ for line in menufd:
+ # Checks if the first non-white char in a line is a #
+ if re.search(r'^(/s)*#',line) or re.search(r'^(/s)*$',line):
+ print "a commented line" # mhb debug
+ if itemlock == 1:
+ itemlock = 0
+ currentitem += 1
+
+ # if it is a start of an area we parse, use a lock
+ if re.search(r'sumthin',line) and (lock == 0):
+ lock = 1
+ elif re.search(r'sumthin_other',line) and (lock == 0):
+ lock = 2
+ # else if it is an end of an area we parse, close the lock
+ elif re.search(r'sumthin_other_end',line) and (lock == 2):
+ lock = 0
+ elif re.search(r'sumthin_end',line) and (lock == 1):
+ lock = 0
+
+ # errors
+ # mhb TODO: exception catching
+ elif re.search(r'sumthin',line) and (lock == 0):
+ raise IdentationError
+ elif re.search(r'sumthin_other',line) and (lock == 1):
+ raise EndOfNotOpenedError
+
+ # if it is in the lock, do the mumbo-jumbo
+ # find out what kind of lock it is
+ # AUTOCONFIG
+ if lock == 1:
+
+
+ # automagic kernels list?
+ if re.search(r'sumthin',line):
+ pass
+ # or the other one (grubconfig disabled kernel's list )?
+ else:
+ self.modifiedlines.append(linenum)
+ # else save it as a commented line (does not save the locks)
+ # GRUBCONFiG commented item
+ elif lock == 2:
+ # remove leading spaces and one #
+ # the parse as a normal menu item
+ pass
+ # it's a commented, no need to do anything
+ else:
+ pass
+ # okay, it's not commented
+ else:
+ print "a not commented line" # mhb debug
+ self.modifiedlines.append(linenum)
+ # we presume the first character is already a name
+ var_name = line.split()[0]
+ #print "variable name is " + var_name # mhb debug
+ # var_value's last item is always the line that has to be changed
+ var_value = []
+ if var_name in parsable:
+ # cat 0 - a title - triggers itemlock, has a name and a value, which should be stored as text
+ if var_name == "title":
+ print line.split(None,1)
+ var_value.append(line.split(None,1)[1][:-1])
+ itemlock = 1
+ self.itemslist.append({})
+ # cat 1 - has a name and 1 value
+ elif var_name in cat1:
+ try:
+ var_value.append(line.split()[1])
+ except IndexError:
+ var_value.append(1)
+ # cat 2 - has a name, but no value ( implicit 1 )
+ elif var_name in cat2:
+ var_value.append(1)
+ # cat 3 - has a name, has multiple values, should be saved as list
+ elif var_name in cat3:
+ var_value = line.split()[1:]
+ # now, append the number
+ var_value.append(linenum)
+
+ if itemlock == 1:
+ self.itemslist[currentitem][var_name] = var_value
+ else:
+ self.globalvars[var_name] = var_value
+
+
+
+
+
+ #if var_name in parsable:
+ #print "variable name " + var_name + " is parsable " # mhb debug
+ #if var_name == "title":
+ #itemlock = 1
+ #self.itemslist.append({})
+ #if(len(line.split()) > 1):
+ #var_value = line.split()[1]
+ #if itemlock == 1:
+
+ #else:
+
+ #print "variable value is " + var_value # mhb debug
+
+ #else:
+ #if itemlock == 1:
+ #self.itemslist[currentitem][var_name] = var_value
+ #else:
+ #self.globalvars[var_name] = 1
+ #else:
+ #print "variable name " + var_name + " is currently not parsable" # mhb debug
+
+ #print "it has no value" # mhb debug
+ # print "parsed another line" # mhb debug
+ linenum += 1;
+ print "load_menulst() called" # mhb debug
+ return "not working yet"
+
+ #######################################################################
+ # writes menu.lst
+ def save_menulst(self):
+ delimeter = " "
+ # phase 1: preparing the values
+ lines = []
+ linecontent = []
+ # this consists of:
+ #  1. concatenating the list of lines that were modified
+ # 2. writing the lines in another list (or something more efficient
+ output = {}
+ # the globals first
+ for unit, value in self.globalvars.items():
+ lines.append(value[-1])
+ temp_str=""
+ temp_str+=(str(unit)+" ")
+ for index in range(len(value)-1):
+ temp_str+=(str(value[index])+" ")
+ linecontent.append(temp_str)
+
+ # itemslist next (abattoir)
+ for item in self.itemslist:
+ for unit, value in reversed(item.items()):
+ lines.append(value[-1])
+ temp_str=""
+ temp_str+=(str(unit)+" ")
+ for index in range(len(value)-1):
+ temp_str+=(str(value[index])+" ")
+ linecontent.append(temp_str)
+
+ # phase 2: writing the file
+ # by now we have a list of numbers (let's call it lines[])
+ # and a list of mofified lines (let's call it linecontent[] )
+ # lines[i] corresponds with linecontent[]
+ trfile = open(self.readfilename, "r" )
+ twfilename = tempfile.mkstemp("menulst")[1]
+ twfile = open(twfilename,"w")
+ # the current solution is:
+ # read the menu.lst again (or rather its copy, to prevent the file being changed)
+ # line by line write it in the output file (to be exact, to a file in /tmp)
+ linenum = 0
+ print linecontent
+ print lines
+ # foreach file as line:
+ for originalline in trfile:
+ # if its number isn't in the location list, simply write it
+ if linenum in lines:
+ twfile.writelines(linecontent[linenum])
+ else:
+ twfile.writelines(originalline)
+
+ linenum += 1;
+
+ # if there are any more lines to be written (newly detected options)
+ # write them at the end (now)
+
+ # when that process works out fine do a quick rewrite to /boot/grub/menu.lst
+ # mhb TODO: declare self.menulstlocation
+ twfile.close()
+ shutil.move(twfilename,self.menulstlocation)
+ # mhb TODO: Exception handling
+ os.remove(self.readfilename)
+
+ print "save_menulst() called" # mhb debug
+ return "not working yet"
+
+
+ #######################################################################
+ # loads output from os-probe
+ def load_osprobe(self):
+ detected = os.popen('os-prober').readlines()
+ ops_list = []
+ for ops in detected:
+ ops = string.replace(ops,"\n","")
+ temp_list = ops.split(':')
+ partition = temp_list[0]
+ temp_list[0] = string.replace(temp_list[0],"/dev/","")
+ re_obj = re.search(r'([sh]d)([a-z])([0-9])*$',temp_list[0])
+ disk = ord(re_obj.group(2))%97
+ part = int(re_obj.group(3))-1
+ if re_obj == None:
+ re_obj = re.search(r'(fd[0-9]*)$',temp_list[0])
+ if re_obj:
+ disk = temp_list[0]
+ part = ""
+ else : re_obj = re.search(r'(part[0-9]*$', temp_list[0])
+ if re_obj:
+ disk = '/disc'
+ part = temp_list[0]
+ temp_list[0] = '('+re_obj.group(1)+str(disk)+','+str(part)+')'
+ if temp_list[3].lower() == "linux":
+ mounted = os.popen('mount | grep '+partition).readlines()
+ if mounted:
+ linux_os = os.popen('linux-boot-prober --mounted '+partition).readlines()
+ else:
+ linux_os = os.popen('linux-boot-prober '+partition).readlines()
+ linux_list = []
+ for lops in linux_os:
+ lops = string.replace(lops,"\n","")
+ temp_linux_list = lops.split(':')
+ linux_list.append(temp_linux_list)
+ temp_list.append(linux_list)
+ ops_list.append(temp_list)
+ temp_list = []
+ return ops_list
+
+
+############################################################################
+# Factory function for KControl
+def create_grubconfig(parent,name):
+ return GrubConfigAppClass(parent, name)
+
+
+##########################################################################
+def MakeAboutData():
+ aboutdata = KAboutData("guidance", programname, version,
+ unicode(i18n("Boot Loader Configuration Tool")).encode(locale.getpreferredencoding()),
+ KAboutData.License_GPL, "Copyright (C) 2006-2007 Martin Böhm")
+ aboutdata.addAuthor("Martin Böhm", "Developer", "martin.bohm@kubuntu.org", "http://mhb.ath.cx/")
+ aboutdata.addAuthor("Simon Edwards", "Developer", "simon@simonzone.com", "http://www.simonzone.com/software/")
+ aboutdata.addAuthor("Sebastian Kügler", "Developer", "sebas@kde.org", "http://vizZzion.org")
+ return aboutdata
+
+if standalone:
+ aboutdata = MakeAboutData()
+
+ KCmdLineArgs.init(sys.argv,aboutdata)
+
+ kapp = KApplication()
+ grubconfigapp = GrubConfigAppClass()
+ grubconfigapp.exec_loop()
diff --git a/kde/displayconfig/pics/16x16/displayconfig.png b/kde/displayconfig/pics/16x16/displayconfig.png
new file mode 100644
index 0000000..63b2cfc
--- /dev/null
+++ b/kde/displayconfig/pics/16x16/displayconfig.png
Binary files differ
diff --git a/kde/displayconfig/pics/colors.png b/kde/displayconfig/pics/colors.png
new file mode 100644
index 0000000..add7885
--- /dev/null
+++ b/kde/displayconfig/pics/colors.png
Binary files differ
diff --git a/kde/displayconfig/pics/display_1280x1024.png b/kde/displayconfig/pics/display_1280x1024.png
new file mode 100644
index 0000000..b8945c2
--- /dev/null
+++ b/kde/displayconfig/pics/display_1280x1024.png
Binary files differ
diff --git a/kde/displayconfig/pics/dualhead/monitor_1.png b/kde/displayconfig/pics/dualhead/monitor_1.png
new file mode 100644
index 0000000..29fb1d0
--- /dev/null
+++ b/kde/displayconfig/pics/dualhead/monitor_1.png
Binary files differ
diff --git a/kde/displayconfig/pics/dualhead/monitor_2.png b/kde/displayconfig/pics/dualhead/monitor_2.png
new file mode 100644
index 0000000..484bea0
--- /dev/null
+++ b/kde/displayconfig/pics/dualhead/monitor_2.png
Binary files differ
diff --git a/kde/displayconfig/pics/energystar.png b/kde/displayconfig/pics/energystar.png
new file mode 100644
index 0000000..7561140
--- /dev/null
+++ b/kde/displayconfig/pics/energystar.png
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam14.gif b/kde/displayconfig/pics/gammapics/MGam14.gif
new file mode 100644
index 0000000..3813ffe
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam14.gif
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam14.png b/kde/displayconfig/pics/gammapics/MGam14.png
new file mode 100644
index 0000000..2cff688
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam14.png
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam16.gif b/kde/displayconfig/pics/gammapics/MGam16.gif
new file mode 100644
index 0000000..4dd9af3
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam16.gif
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam16.png b/kde/displayconfig/pics/gammapics/MGam16.png
new file mode 100644
index 0000000..59dc493
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam16.png
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam18.gif b/kde/displayconfig/pics/gammapics/MGam18.gif
new file mode 100644
index 0000000..a73c832
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam18.gif
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam18.png b/kde/displayconfig/pics/gammapics/MGam18.png
new file mode 100644
index 0000000..050f4d3
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam18.png
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam20.gif b/kde/displayconfig/pics/gammapics/MGam20.gif
new file mode 100644
index 0000000..2e98232
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam20.gif
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam20.png b/kde/displayconfig/pics/gammapics/MGam20.png
new file mode 100644
index 0000000..a60ab3d
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam20.png
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam22.gif b/kde/displayconfig/pics/gammapics/MGam22.gif
new file mode 100644
index 0000000..cb10c1f
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam22.gif
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam22.png b/kde/displayconfig/pics/gammapics/MGam22.png
new file mode 100644
index 0000000..398a919
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam22.png
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam24.gif b/kde/displayconfig/pics/gammapics/MGam24.gif
new file mode 100644
index 0000000..c7bde11
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam24.gif
Binary files differ
diff --git a/kde/displayconfig/pics/gammapics/MGam24.png b/kde/displayconfig/pics/gammapics/MGam24.png
new file mode 100644
index 0000000..9faa4b5
--- /dev/null
+++ b/kde/displayconfig/pics/gammapics/MGam24.png
Binary files differ
diff --git a/kde/displayconfig/pics/hi32-display.png b/kde/displayconfig/pics/hi32-display.png
new file mode 100644
index 0000000..2acfd79
--- /dev/null
+++ b/kde/displayconfig/pics/hi32-display.png
Binary files differ
diff --git a/kde/displayconfig/pics/hi32-gfxcard.png b/kde/displayconfig/pics/hi32-gfxcard.png
new file mode 100644
index 0000000..0101e1e
--- /dev/null
+++ b/kde/displayconfig/pics/hi32-gfxcard.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/background.png b/kde/displayconfig/pics/monitor_resizable/background.png
new file mode 100644
index 0000000..1f588bb
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/background.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/background_r90.png b/kde/displayconfig/pics/monitor_resizable/background_r90.png
new file mode 100644
index 0000000..fbb1ec2
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/background_r90.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/background_wide.png b/kde/displayconfig/pics/monitor_resizable/background_wide.png
new file mode 100644
index 0000000..8843bde
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/background_wide.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/background_wide_r90.png b/kde/displayconfig/pics/monitor_resizable/background_wide_r90.png
new file mode 100644
index 0000000..518f415
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/background_wide_r90.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/monitor.png b/kde/displayconfig/pics/monitor_resizable/monitor.png
new file mode 100644
index 0000000..ff5c6f9
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/monitor.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/monitor_r90.png b/kde/displayconfig/pics/monitor_resizable/monitor_r90.png
new file mode 100644
index 0000000..4be9587
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/monitor_r90.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/monitor_wide.png b/kde/displayconfig/pics/monitor_resizable/monitor_wide.png
new file mode 100644
index 0000000..d0e2b0f
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/monitor_wide.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/monitor_wide_r90.png b/kde/displayconfig/pics/monitor_resizable/monitor_wide_r90.png
new file mode 100644
index 0000000..e4e4edc
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/monitor_wide_r90.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/window_4th.png b/kde/displayconfig/pics/monitor_resizable/window_4th.png
new file mode 100644
index 0000000..90a1867
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/window_4th.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/window_bottom_left_4th.png b/kde/displayconfig/pics/monitor_resizable/window_bottom_left_4th.png
new file mode 100644
index 0000000..e86c500
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/window_bottom_left_4th.png
Binary files differ
diff --git a/kde/displayconfig/pics/monitor_resizable/window_bottom_right_4th.png b/kde/displayconfig/pics/monitor_resizable/window_bottom_right_4th.png
new file mode 100644
index 0000000..4ff6a1e
--- /dev/null
+++ b/kde/displayconfig/pics/monitor_resizable/window_bottom_right_4th.png
Binary files differ
diff --git a/kde/mountconfig/pics/16x16/disksfilesystems.png b/kde/mountconfig/pics/16x16/disksfilesystems.png
new file mode 100644
index 0000000..ff9f673
--- /dev/null
+++ b/kde/mountconfig/pics/16x16/disksfilesystems.png
Binary files differ
diff --git a/kde/mountconfig/pics/exec.png b/kde/mountconfig/pics/exec.png
new file mode 100644
index 0000000..b060832
--- /dev/null
+++ b/kde/mountconfig/pics/exec.png
Binary files differ
diff --git a/kde/mountconfig/pics/file.png b/kde/mountconfig/pics/file.png
new file mode 100644
index 0000000..df9d426
--- /dev/null
+++ b/kde/mountconfig/pics/file.png
Binary files differ
diff --git a/kde/mountconfig/pics/greenled.png b/kde/mountconfig/pics/greenled.png
new file mode 100644
index 0000000..ac36b32
--- /dev/null
+++ b/kde/mountconfig/pics/greenled.png
Binary files differ
diff --git a/kde/mountconfig/pics/greyled.png b/kde/mountconfig/pics/greyled.png
new file mode 100644
index 0000000..b01d502
--- /dev/null
+++ b/kde/mountconfig/pics/greyled.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-blockdevice.png b/kde/mountconfig/pics/hi16-blockdevice.png
new file mode 100644
index 0000000..5e4df3a
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-blockdevice.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-burner.png b/kde/mountconfig/pics/hi16-burner.png
new file mode 100644
index 0000000..a1f0e56
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-burner.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-cdrom.png b/kde/mountconfig/pics/hi16-cdrom.png
new file mode 100644
index 0000000..3f68c16
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-cdrom.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-floppy.png b/kde/mountconfig/pics/hi16-floppy.png
new file mode 100644
index 0000000..25acdae
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-floppy.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-hdd.png b/kde/mountconfig/pics/hi16-hdd.png
new file mode 100644
index 0000000..ec2bb62
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-hdd.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-lock.png b/kde/mountconfig/pics/hi16-lock.png
new file mode 100644
index 0000000..2fc54e2
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-lock.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-memory.png b/kde/mountconfig/pics/hi16-memory.png
new file mode 100644
index 0000000..4781b8f
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-memory.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-network.png b/kde/mountconfig/pics/hi16-network.png
new file mode 100644
index 0000000..ff9c822
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-network.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-password.png b/kde/mountconfig/pics/hi16-password.png
new file mode 100644
index 0000000..539c617
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-password.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi16-usbpen.png b/kde/mountconfig/pics/hi16-usbpen.png
new file mode 100644
index 0000000..86fecf7
--- /dev/null
+++ b/kde/mountconfig/pics/hi16-usbpen.png
Binary files differ
diff --git a/kde/mountconfig/pics/hi32-samba.png b/kde/mountconfig/pics/hi32-samba.png
new file mode 100644
index 0000000..904b467
--- /dev/null
+++ b/kde/mountconfig/pics/hi32-samba.png
Binary files differ
diff --git a/kde/mountconfig/pics/important.png b/kde/mountconfig/pics/important.png
new file mode 100644
index 0000000..4e39d9e
--- /dev/null
+++ b/kde/mountconfig/pics/important.png
Binary files differ
diff --git a/kde/mountconfig/pics/kcmpartitions.png b/kde/mountconfig/pics/kcmpartitions.png
new file mode 100644
index 0000000..8214fb4
--- /dev/null
+++ b/kde/mountconfig/pics/kcmpartitions.png
Binary files differ
diff --git a/kde/mountconfig/pics/kde1.png b/kde/mountconfig/pics/kde1.png
new file mode 100644
index 0000000..d69149a
--- /dev/null
+++ b/kde/mountconfig/pics/kde1.png
Binary files differ
diff --git a/kde/mountconfig/pics/kde2.png b/kde/mountconfig/pics/kde2.png
new file mode 100644
index 0000000..0df86b1
--- /dev/null
+++ b/kde/mountconfig/pics/kde2.png
Binary files differ
diff --git a/kde/mountconfig/pics/kde3.png b/kde/mountconfig/pics/kde3.png
new file mode 100644
index 0000000..a94ab9a
--- /dev/null
+++ b/kde/mountconfig/pics/kde3.png
Binary files differ
diff --git a/kde/mountconfig/pics/kde4.png b/kde/mountconfig/pics/kde4.png
new file mode 100644
index 0000000..51f2267
--- /dev/null
+++ b/kde/mountconfig/pics/kde4.png
Binary files differ
diff --git a/kde/mountconfig/pics/kde5.png b/kde/mountconfig/pics/kde5.png
new file mode 100644
index 0000000..3bbe93d
--- /dev/null
+++ b/kde/mountconfig/pics/kde5.png
Binary files differ
diff --git a/kde/mountconfig/pics/kde6.png b/kde/mountconfig/pics/kde6.png
new file mode 100644
index 0000000..4037802
--- /dev/null
+++ b/kde/mountconfig/pics/kde6.png
Binary files differ
diff --git a/kde/mountconfig/pics/laserwarn.png b/kde/mountconfig/pics/laserwarn.png
new file mode 100644
index 0000000..f14986d
--- /dev/null
+++ b/kde/mountconfig/pics/laserwarn.png
Binary files differ
diff --git a/kde/mountconfig/pics/tux.png b/kde/mountconfig/pics/tux.png
new file mode 100644
index 0000000..e00ab26
--- /dev/null
+++ b/kde/mountconfig/pics/tux.png
Binary files differ
diff --git a/kde/mountconfig/pics/user.png b/kde/mountconfig/pics/user.png
new file mode 100644
index 0000000..9625ccc
--- /dev/null
+++ b/kde/mountconfig/pics/user.png
Binary files differ
diff --git a/kde/powermanager/pics/ac-adapter.png b/kde/powermanager/pics/ac-adapter.png
new file mode 100644
index 0000000..a2fb495
--- /dev/null
+++ b/kde/powermanager/pics/ac-adapter.png
Binary files differ
diff --git a/kde/powermanager/pics/ac-adapter.svg b/kde/powermanager/pics/ac-adapter.svg
new file mode 100644
index 0000000..d1de32c
--- /dev/null
+++ b/kde/powermanager/pics/ac-adapter.svg
@@ -0,0 +1,982 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="128"
+ id="svg1307"
+ sodipodi:version="0.32"
+ inkscape:version="0.44+devel"
+ version="1.0"
+ sodipodi:docbase="/home/kwwii/Desktop/actions"
+ sodipodi:docname="power-manager.svg"
+ inkscape:export-filename="/home/kwwii/Desktop/tempsvn/powermanager/icons/power-manager-64.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ sodipodi:modified="true">
+ <defs
+ id="defs1309">
+ <linearGradient
+ id="linearGradient13461">
+ <stop
+ style="stop-color:#fd0;stop-opacity:1;"
+ offset="0"
+ id="stop13463" />
+ <stop
+ style="stop-color:#e3ad00;stop-opacity:1;"
+ offset="1"
+ id="stop13465" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient13461"
+ id="radialGradient13467"
+ cx="64"
+ cy="64.968025"
+ fx="64"
+ fy="64.968025"
+ r="19.72229"
+ gradientTransform="matrix(1.611098,0,0,3.009366,-79.1103,-131.5445)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3846">
+ <stop
+ style="stop-color:#590000;stop-opacity:1;"
+ offset="0"
+ id="stop3848" />
+ <stop
+ style="stop-color:#590000;stop-opacity:0;"
+ offset="1"
+ id="stop3850" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3832">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3834" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3836" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3822">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3824" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3826" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2895">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2897" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2899" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2877">
+ <stop
+ style="stop-color:#390000;stop-opacity:1;"
+ offset="0"
+ id="stop2879" />
+ <stop
+ style="stop-color:#970000;stop-opacity:0;"
+ offset="1"
+ id="stop2881" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3164">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3166" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3168" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3140">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3142" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3144" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3082">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3084" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3086" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3041">
+ <stop
+ id="stop3043"
+ offset="0"
+ style="stop-color:#303030;stop-opacity:1;" />
+ <stop
+ style="stop-color:#555;stop-opacity:1;"
+ offset="0.11538462"
+ id="stop3045" />
+ <stop
+ id="stop3053"
+ offset="0.26590282"
+ style="stop-color:#3b3b3b;stop-opacity:1;" />
+ <stop
+ style="stop-color:#646464;stop-opacity:1;"
+ offset="0.28553563"
+ id="stop3057" />
+ <stop
+ style="stop-color:#7b7b7b;stop-opacity:1;"
+ offset="0.43724003"
+ id="stop3055" />
+ <stop
+ style="stop-color:#888;stop-opacity:1;"
+ offset="0.69156802"
+ id="stop3047" />
+ <stop
+ id="stop3049"
+ offset="0.90384614"
+ style="stop-color:#747474;stop-opacity:1;" />
+ <stop
+ id="stop3051"
+ offset="1"
+ style="stop-color:#5d5d5d;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2916">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2918" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2920" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2874">
+ <stop
+ style="stop-color:#414141;stop-opacity:1;"
+ offset="0"
+ id="stop2876" />
+ <stop
+ style="stop-color:#414141;stop-opacity:0;"
+ offset="1"
+ id="stop2878" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2858">
+ <stop
+ style="stop-color:#303030;stop-opacity:1;"
+ offset="0"
+ id="stop2860" />
+ <stop
+ id="stop2863"
+ offset="0.05769231"
+ style="stop-color:white;stop-opacity:0.59215689;" />
+ <stop
+ id="stop2868"
+ offset="0.11538462"
+ style="stop-color:#4b4b4b;stop-opacity:0.18431373;" />
+ <stop
+ id="stop2866"
+ offset="0.69156802"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:0.09747292;"
+ offset="0.90384614"
+ id="stop2870" />
+ <stop
+ id="stop2867"
+ offset="0.95192307"
+ style="stop-color:white;stop-opacity:0.54509807;" />
+ <stop
+ style="stop-color:#5d5d5d;stop-opacity:1;"
+ offset="1"
+ id="stop2862" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3291">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3164"
+ id="linearGradient3170"
+ x1="73.511299"
+ y1="1"
+ x2="73.511299"
+ y2="5.7553549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.672581,0,0,1.903227,22.30711,6.096774)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3846"
+ id="linearGradient3852"
+ x1="10.073669"
+ y1="18.5"
+ x2="13.3511"
+ y2="18.5"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="66.022942"
+ fy="115.70919"
+ r="63.912209" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3041"
+ id="linearGradient3165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,53.1978,7.426068)"
+ x1="1.4227993"
+ y1="1.022699"
+ x2="5.5960732"
+ y2="1.022699" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient3167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,53.1978,7.426068)"
+ x1="6.4523492"
+ y1="-2.8016193"
+ x2="5.5593128"
+ y2="1.0485095" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3822"
+ id="linearGradient3169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.07834,0,0,5.82831,6.789136,0)"
+ x1="11.434079"
+ y1="1.0289581"
+ x2="11.174653"
+ y2="2.2792649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient3171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,53.1978,7.426068)"
+ x1="5.6568542"
+ y1="6.0850325"
+ x2="5.6568542"
+ y2="1.4639859" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2858"
+ id="linearGradient3173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.084878,0,0,0.961444,23.50461,6.682619)"
+ x1="18.01074"
+ y1="65.760353"
+ x2="72.498932"
+ y2="65.760353" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient3175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.069646,0,0,0.962358,24.70483,6.672295)"
+ x1="69.07917"
+ y1="1.0128831"
+ x2="63.575024"
+ y2="39.769947" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient3177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.962358,56.01045,6.672295)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient3179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.083993,0,0,0.84067,23.52057,-131.7705)"
+ x1="63.948738"
+ y1="-163.6496"
+ x2="43.918915"
+ y2="54.970299" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient3181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.085374,0,0,0.865765,23.49566,-132.0539)"
+ x1="43.918915"
+ y1="7.8450942"
+ x2="43.918915"
+ y2="15.315003" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="radialGradient3183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.055718,0,0,1.666364,0.815341,73.26644)"
+ cx="68.000046"
+ cy="-117.34602"
+ fx="68.000046"
+ fy="-117.34602"
+ r="27.999956" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2895"
+ id="linearGradient3185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.82831,0,0,5.82831,9,0)"
+ x1="11.543377"
+ y1="3.4375"
+ x2="10.88339"
+ y2="5.9006019" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient3187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.821275,56.01045,8.410494)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient3189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,1.808891,56.01045,-3.756896)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3832"
+ id="radialGradient3191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,2.962963e-2,0,2.950605)"
+ cx="12.308078"
+ cy="3.0406888"
+ fx="13.944797"
+ fy="3.0406888"
+ r="2.9831069" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3832"
+ id="radialGradient3193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,2.962963e-2,0,2.950605)"
+ cx="12.308078"
+ cy="3.0406888"
+ fx="13.944797"
+ fy="3.0406888"
+ r="2.9831069" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient4093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,1.808891,63.01045,-3.756896)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient4096"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.821275,63.01045,8.410494)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2895"
+ id="linearGradient4099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.82831,0,0,5.82831,16,0)"
+ x1="11.543377"
+ y1="3.4375"
+ x2="10.88339"
+ y2="5.9006019" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="radialGradient4102"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.055718,0,0,1.666364,7.815341,73.26644)"
+ cx="68.000046"
+ cy="-117.34602"
+ fx="68.000046"
+ fy="-117.34602"
+ r="27.999956" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient4105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.085374,0,0,0.865765,30.49566,-132.0539)"
+ x1="43.918915"
+ y1="7.8450942"
+ x2="43.918915"
+ y2="15.315003" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient4108"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.083993,0,0,0.84067,30.52057,-131.7705)"
+ x1="63.948738"
+ y1="-163.6496"
+ x2="43.918915"
+ y2="54.970299" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient4111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.962358,63.01045,6.672295)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient4114"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.069646,0,0,0.962358,31.70483,6.672295)"
+ x1="69.07917"
+ y1="1.0128831"
+ x2="63.575024"
+ y2="39.769947" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2858"
+ id="linearGradient4117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.084878,0,0,0.961444,30.50461,6.682619)"
+ x1="18.01074"
+ y1="65.760353"
+ x2="72.498932"
+ y2="65.760353" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient4121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,60.1978,7.426068)"
+ x1="5.6568542"
+ y1="6.0850325"
+ x2="5.6568542"
+ y2="1.4639859" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3822"
+ id="linearGradient4124"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.07834,0,0,5.82831,13.78914,0)"
+ x1="11.434079"
+ y1="1.0289581"
+ x2="11.174653"
+ y2="2.2792649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient4127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,60.1978,7.426068)"
+ x1="6.4523492"
+ y1="-2.8016193"
+ x2="5.5593128"
+ y2="1.0485095" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3041"
+ id="linearGradient4130"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,60.1978,7.426068)"
+ x1="1.4227993"
+ y1="1.022699"
+ x2="5.5960732"
+ y2="1.022699" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5374"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="66.022942"
+ fy="115.70919"
+ r="63.912209" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3041"
+ id="linearGradient5376"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,60.1978,7.426068)"
+ x1="1.4227993"
+ y1="1.022699"
+ x2="5.5960732"
+ y2="1.022699" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient5378"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,60.1978,7.426068)"
+ x1="6.4523492"
+ y1="-2.8016193"
+ x2="5.5593128"
+ y2="1.0485095" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3822"
+ id="linearGradient5380"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.07834,0,0,5.82831,13.78914,0)"
+ x1="11.434079"
+ y1="1.0289581"
+ x2="11.174653"
+ y2="2.2792649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient5382"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,60.1978,7.426068)"
+ x1="5.6568542"
+ y1="6.0850325"
+ x2="5.6568542"
+ y2="1.4639859" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2858"
+ id="linearGradient5384"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.084878,0,0,0.961444,30.50461,6.682619)"
+ x1="18.01074"
+ y1="65.760353"
+ x2="72.498932"
+ y2="65.760353" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient5386"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.069646,0,0,0.962358,31.70483,6.672295)"
+ x1="69.07917"
+ y1="1.0128831"
+ x2="63.575024"
+ y2="39.769947" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient5388"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.962358,63.01045,6.672295)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient5390"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.083993,0,0,0.84067,30.52057,-131.7705)"
+ x1="63.948738"
+ y1="-163.6496"
+ x2="43.918915"
+ y2="54.970299" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient5392"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.085374,0,0,0.865765,30.49566,-132.0539)"
+ x1="43.918915"
+ y1="7.8450942"
+ x2="43.918915"
+ y2="15.315003" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="radialGradient5394"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.055718,0,0,1.666364,7.815341,73.26644)"
+ cx="68.000046"
+ cy="-117.34602"
+ fx="68.000046"
+ fy="-117.34602"
+ r="27.999956" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2895"
+ id="linearGradient5396"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.82831,0,0,5.82831,16,0)"
+ x1="11.543377"
+ y1="3.4375"
+ x2="10.88339"
+ y2="5.9006019" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient5398"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.821275,63.01045,8.410494)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient5400"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,1.808891,63.01045,-3.756896)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3832"
+ id="radialGradient5402"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,2.962963e-2,0,2.950605)"
+ cx="12.308078"
+ cy="3.0406888"
+ fx="13.944797"
+ fy="3.0406888"
+ r="2.9831069" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3832"
+ id="radialGradient5404"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,2.962963e-2,0,2.950605)"
+ cx="12.308078"
+ cy="3.0406888"
+ fx="13.944797"
+ fy="3.0406888"
+ r="2.9831069" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient2290"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,1.808891,65.89819,-3.756896)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient2293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.821275,65.89819,8.410494)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2895"
+ id="linearGradient2296"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.82831,0,0,5.82831,18.88774,0)"
+ x1="11.543377"
+ y1="3.4375"
+ x2="10.88339"
+ y2="5.9006019" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="radialGradient2299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.055718,0,0,1.666364,10.70308,73.26644)"
+ cx="68.000046"
+ cy="-117.34602"
+ fx="68.000046"
+ fy="-117.34602"
+ r="27.999956" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient2302"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.085374,0,0,0.865765,33.3834,-132.0539)"
+ x1="43.918915"
+ y1="7.8450942"
+ x2="43.918915"
+ y2="15.315003" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient2305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.083993,0,0,0.84067,33.40831,-131.7705)"
+ x1="63.948738"
+ y1="-163.6496"
+ x2="43.918915"
+ y2="54.970299" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient2308"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.962358,65.89819,6.672295)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient2316"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.069646,0,0,0.962358,34.59257,6.672295)"
+ x1="69.07917"
+ y1="1.0128831"
+ x2="63.575024"
+ y2="39.769947" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2858"
+ id="linearGradient2319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.084878,0,0,0.961444,33.39235,6.682619)"
+ x1="18.01074"
+ y1="65.760353"
+ x2="72.498932"
+ y2="65.760353" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient2322"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,63.08554,7.426068)"
+ x1="5.6568542"
+ y1="6.0850325"
+ x2="5.6568542"
+ y2="1.4639859" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3822"
+ id="linearGradient2325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.07834,0,0,5.82831,16.67688,0)"
+ x1="11.434079"
+ y1="1.0289581"
+ x2="11.174653"
+ y2="2.2792649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient2328"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,63.08554,7.426068)"
+ x1="6.4523492"
+ y1="-2.8016193"
+ x2="5.5593128"
+ y2="1.0485095" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3041"
+ id="linearGradient2331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,63.08554,7.426068)"
+ x1="1.4227993"
+ y1="1.022699"
+ x2="5.5960732"
+ y2="1.022699" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient2340"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="66.022942"
+ fy="115.70919"
+ r="63.912209" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient13461"
+ id="radialGradient2342"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.611098,0,0,3.009366,-79.1103,-131.5445)"
+ cx="64"
+ cy="64.968025"
+ fx="64"
+ fy="64.968025"
+ r="19.72229" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.0214592"
+ inkscape:cx="63.5"
+ inkscape:cy="61.5"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ guidetolerance="0.1px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1106"
+ inkscape:window-height="904"
+ inkscape:window-x="304"
+ inkscape:window-y="0"
+ width="128px"
+ height="128px" />
+ <metadata
+ id="metadata1312">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Oxygen team</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/LGPL/2.1/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <rect
+ style="opacity:0;fill:#590000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.59500003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect2869"
+ width="128.16599"
+ height="128.16599"
+ x="0"
+ y="-4.5116963e-07"
+ ry="0.017196547"
+ rx="0.017196547" />
+ <path
+ sodipodi:nodetypes="ccc"
+ id="path2276"
+ d="M 50.892799,3.2812959 L 50.892799,0.48658747 L 50.892799,3.2812959 z "
+ style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient2340);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path3289"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.637727,0,0,0.417459,23.24146,74.4977)" />
+ <g
+ id="g2335"
+ transform="translate(39.98659,-3)">
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path2247"
+ d="M 33.430369,12.681554 L 30.372339,54.257815 L 44.249109,53.082135 L 15.935969,117.25449 L 17.887679,70.301791 L 4.804529,71.410233 L 33.430369,12.681554 z "
+ style="fill:#555753;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path2541"
+ d="M 32.90355,11.681554 L 29.84552,53.257815 L 43.72229,52.082135 L 15.40915,116.25449 L 17.36086,69.301791 L 4.27771,70.410233 L 32.90355,11.681554 z "
+ style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:red;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.5125" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path2307"
+ d="M 32.90355,11.681554 L 29.84552,53.257815 L 43.72229,52.082135 L 15.40915,116.25449 L 17.36086,69.301791 L 4.27771,70.410233 L 32.90355,11.681554 z "
+ style="fill:url(#radialGradient2342);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.00000012;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/kde/powermanager/pics/battery-charging-000.png b/kde/powermanager/pics/battery-charging-000.png
new file mode 100644
index 0000000..7d2fedb
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-000.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-010.png b/kde/powermanager/pics/battery-charging-010.png
new file mode 100644
index 0000000..2a7b053
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-010.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-020.png b/kde/powermanager/pics/battery-charging-020.png
new file mode 100644
index 0000000..91e9924
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-020.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-030.png b/kde/powermanager/pics/battery-charging-030.png
new file mode 100644
index 0000000..f72e1a6
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-030.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-040.png b/kde/powermanager/pics/battery-charging-040.png
new file mode 100644
index 0000000..a1a9b3a
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-040.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-050.png b/kde/powermanager/pics/battery-charging-050.png
new file mode 100644
index 0000000..00f16d3
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-050.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-060.png b/kde/powermanager/pics/battery-charging-060.png
new file mode 100644
index 0000000..3782b8d
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-060.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-070.png b/kde/powermanager/pics/battery-charging-070.png
new file mode 100644
index 0000000..e9c09cd
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-070.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-090.png b/kde/powermanager/pics/battery-charging-090.png
new file mode 100644
index 0000000..843a91d
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-090.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-charging-100.png b/kde/powermanager/pics/battery-charging-100.png
new file mode 100644
index 0000000..f604a38
--- /dev/null
+++ b/kde/powermanager/pics/battery-charging-100.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-000.png b/kde/powermanager/pics/battery-discharging-000.png
new file mode 100644
index 0000000..aaa46c5
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-000.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-010.png b/kde/powermanager/pics/battery-discharging-010.png
new file mode 100644
index 0000000..8e97a04
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-010.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-020.png b/kde/powermanager/pics/battery-discharging-020.png
new file mode 100644
index 0000000..9de7b1b
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-020.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-020.svg b/kde/powermanager/pics/battery-discharging-020.svg
new file mode 100644
index 0000000..93fd330
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-020.svg
@@ -0,0 +1,662 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="128"
+ id="svg1307"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ version="1.0"
+ sodipodi:docbase="/home/pinheiro/artwork/Oxygen/theme/svg/actions/small/22x22"
+ sodipodi:docname="battery-020.svg"
+ inkscape:export-filename="/home/pinheiro/artwork/Oxygen/theme/svg/actions/small/battery22-100.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs1309">
+ <linearGradient
+ id="linearGradient2845">
+ <stop
+ style="stop-color:#bf0000;stop-opacity:1;"
+ offset="0"
+ id="stop2847" />
+ <stop
+ id="stop2853"
+ offset="0.5"
+ style="stop-color:#bf0000;stop-opacity:0;" />
+ <stop
+ style="stop-color:#bf0000;stop-opacity:0;"
+ offset="1"
+ id="stop2849" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3846">
+ <stop
+ style="stop-color:#590000;stop-opacity:1;"
+ offset="0"
+ id="stop3848" />
+ <stop
+ style="stop-color:#590000;stop-opacity:0;"
+ offset="1"
+ id="stop3850" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3832">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3834" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3836" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3822">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3824" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3826" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2895">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2897" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2899" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2877">
+ <stop
+ style="stop-color:#390000;stop-opacity:1;"
+ offset="0"
+ id="stop2879" />
+ <stop
+ style="stop-color:#970000;stop-opacity:0;"
+ offset="1"
+ id="stop2881" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3164">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3166" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3168" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3140">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop3142" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3144" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient3011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.085374,0,0,0.865765,14.49566,-132.0539)"
+ x1="43.918915"
+ y1="7.8450942"
+ x2="43.918915"
+ y2="15.315003" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient3014"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.083993,0,0,0.84067,14.52057,-131.7705)"
+ x1="63.948738"
+ y1="-163.6496"
+ x2="43.918915"
+ y2="54.970299" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient3017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.962358,47.01045,6.672295)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2874"
+ id="linearGradient3020"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.069646,0,0,0.962358,15.70483,6.672295)"
+ x1="69.07917"
+ y1="1.0128831"
+ x2="63.575024"
+ y2="39.769947" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2858"
+ id="linearGradient3023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.084878,0,0,0.961444,14.50461,6.682619)"
+ x1="18.01074"
+ y1="65.760353"
+ x2="72.498932"
+ y2="65.760353" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient3096"
+ gradientUnits="userSpaceOnUse"
+ x1="5.6568542"
+ y1="6.0850325"
+ x2="5.6568542"
+ y2="1.4639859"
+ gradientTransform="matrix(5.390888,0,0,5.390888,44.1978,7.426068)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3082"
+ id="linearGradient3092"
+ gradientUnits="userSpaceOnUse"
+ x1="6.4523492"
+ y1="-2.8016193"
+ x2="5.5593128"
+ y2="1.0485095"
+ gradientTransform="matrix(5.390888,0,0,5.390888,44.1978,7.426068)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3082">
+ <stop
+ style="stop-color:black;stop-opacity:1;"
+ offset="0"
+ id="stop3084" />
+ <stop
+ style="stop-color:black;stop-opacity:0;"
+ offset="1"
+ id="stop3086" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3041">
+ <stop
+ id="stop3043"
+ offset="0"
+ style="stop-color:#303030;stop-opacity:1;" />
+ <stop
+ style="stop-color:#555;stop-opacity:1;"
+ offset="0.11538462"
+ id="stop3045" />
+ <stop
+ id="stop3053"
+ offset="0.26590282"
+ style="stop-color:#3b3b3b;stop-opacity:1;" />
+ <stop
+ style="stop-color:#646464;stop-opacity:1;"
+ offset="0.28553563"
+ id="stop3057" />
+ <stop
+ style="stop-color:#7b7b7b;stop-opacity:1;"
+ offset="0.43724003"
+ id="stop3055" />
+ <stop
+ style="stop-color:#888;stop-opacity:1;"
+ offset="0.69156802"
+ id="stop3047" />
+ <stop
+ id="stop3049"
+ offset="0.90384614"
+ style="stop-color:#747474;stop-opacity:1;" />
+ <stop
+ id="stop3051"
+ offset="1"
+ style="stop-color:#5d5d5d;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3041"
+ id="linearGradient3077"
+ x1="1.4227993"
+ y1="1.022699"
+ x2="5.5960732"
+ y2="1.022699"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(5.390888,0,0,5.390888,44.1978,7.426068)" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2916">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop2918" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop2920" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2874">
+ <stop
+ style="stop-color:#414141;stop-opacity:1;"
+ offset="0"
+ id="stop2876" />
+ <stop
+ style="stop-color:#414141;stop-opacity:0;"
+ offset="1"
+ id="stop2878" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2858">
+ <stop
+ style="stop-color:#303030;stop-opacity:1;"
+ offset="0"
+ id="stop2860" />
+ <stop
+ id="stop2863"
+ offset="0.05769231"
+ style="stop-color:white;stop-opacity:0.59215689;" />
+ <stop
+ id="stop2868"
+ offset="0.11538462"
+ style="stop-color:#4b4b4b;stop-opacity:0.18431373;" />
+ <stop
+ id="stop2866"
+ offset="0.69156802"
+ style="stop-color:black;stop-opacity:0;" />
+ <stop
+ style="stop-color:black;stop-opacity:0.09747292;"
+ offset="0.90384614"
+ id="stop2870" />
+ <stop
+ id="stop2867"
+ offset="0.95192307"
+ style="stop-color:white;stop-opacity:0.54509807;" />
+ <stop
+ style="stop-color:#5d5d5d;stop-opacity:1;"
+ offset="1"
+ id="stop2862" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient3291">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3297"
+ cx="63.912209"
+ cy="115.70919"
+ fx="66.022942"
+ fy="115.70919"
+ r="63.912209"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3140"
+ id="radialGradient3146"
+ cx="68.000046"
+ cy="-117.34602"
+ fx="68.000046"
+ fy="-117.34602"
+ r="27.999956"
+ gradientTransform="matrix(1.055718,0,0,1.666364,-8.184659,73.26644)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3164"
+ id="linearGradient3170"
+ x1="73.511299"
+ y1="1"
+ x2="73.511299"
+ y2="5.7553549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.672581,0,0,1.903227,22.30711,6.096774)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2895"
+ id="linearGradient2909"
+ gradientUnits="userSpaceOnUse"
+ x1="11.543377"
+ y1="3.4375"
+ x2="10.88339"
+ y2="5.9006019"
+ gradientTransform="scale(5.82831,5.82831)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient2915"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,1.808891,47.01045,-3.756896)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2916"
+ id="linearGradient3820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.545256,0,0,0.821275,47.01045,8.410494)"
+ x1="38.875084"
+ y1="67.528122"
+ x2="90.409752"
+ y2="67.528122" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3822"
+ id="linearGradient3828"
+ x1="11.434079"
+ y1="1.0289581"
+ x2="11.174653"
+ y2="2.2792649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(6.07834,0,0,5.82831,-2.210864,0)" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3832"
+ id="radialGradient3838"
+ cx="12.308078"
+ cy="3.0406888"
+ fx="13.944797"
+ fy="3.0406888"
+ r="2.9831069"
+ gradientTransform="matrix(1,0,0,2.962963e-2,0,2.950605)"
+ gradientUnits="userSpaceOnUse" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3832"
+ id="radialGradient3842"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,2.962963e-2,0,2.950605)"
+ cx="12.308078"
+ cy="3.0406888"
+ fx="13.944797"
+ fy="3.0406888"
+ r="2.9831069" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3846"
+ id="linearGradient3852"
+ x1="10.073669"
+ y1="18.5"
+ x2="13.3511"
+ y2="18.5"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2845"
+ id="linearGradient2851"
+ x1="-70.026154"
+ y1="-107.9012"
+ x2="-31.896311"
+ y2="-107.9012"
+ gradientUnits="userSpaceOnUse"
+ spreadMethod="reflect"
+ gradientTransform="matrix(1,0,0,0.607494,0,-42.03426)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8284271"
+ inkscape:cx="134.55101"
+ inkscape:cy="8.8799765"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:document-units="px"
+ inkscape:grid-bbox="true"
+ guidetolerance="0.1px"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="1106"
+ inkscape:window-height="958"
+ inkscape:window-x="482"
+ inkscape:window-y="121"
+ width="128px"
+ height="128px">
+ <sodipodi:guide
+ orientation="horizontal"
+ position="32.487481"
+ id="guide2204" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata1312">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <cc:license
+ rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
+ <dc:contributor>
+ <cc:Agent>
+ <dc:title>Oxygen team</dc:title>
+ </cc:Agent>
+ </dc:contributor>
+ </cc:Work>
+ <cc:License
+ rdf:about="http://creativecommons.org/licenses/LGPL/2.1/">
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Reproduction" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/Distribution" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/Notice" />
+ <cc:permits
+ rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/ShareAlike" />
+ <cc:requires
+ rdf:resource="http://web.resource.org/cc/SourceCode" />
+ </cc:License>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <rect
+ style="opacity:0;fill:#590000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.59500003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect2869"
+ width="128.16599"
+ height="128.16599"
+ x="0"
+ y="-4.5116963e-07"
+ ry="0.017196547"
+ rx="0.017196547" />
+ <path
+ sodipodi:nodetypes="ccc"
+ id="path2276"
+ d="M 50.892799,3.2812959 L 50.892799,0.48658747 L 50.892799,3.2812959 z "
+ style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient3297);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path3289"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.637727,0,0,0.417459,23.29065,74.4977)" />
+ <path
+ style="fill:url(#linearGradient3077);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:4;stroke-opacity:1"
+ d="M 52.090255,7.4260983 L 74.216749,7.4260983 C 75.602624,7.4260983 76.718322,8.5418006 76.718322,9.9276791 L 76.718322,18.23111 L 49.588674,18.23111 L 49.588674,9.9276791 C 49.588674,8.5418006 50.704377,7.4260983 52.090255,7.4260983 z "
+ id="rect3069"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ style="fill:url(#linearGradient3092);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:4;stroke-opacity:1"
+ d="M 52.090255,7.4260983 L 74.216749,7.4260983 C 75.602624,7.4260983 76.718322,8.5418006 76.718322,9.9276791 L 76.718322,13.07847 L 49.588674,13.07847 L 49.588674,9.9276791 C 49.588674,8.5418006 50.704377,7.4260983 52.090255,7.4260983 z "
+ id="path3090"
+ sodipodi:nodetypes="ccccccc" />
+ <path
+ sodipodi:nodetypes="ccccccc"
+ id="path3080"
+ d="M 53.770186,8.2457042 L 73.533605,8.2457042 C 74.77148,8.2457042 75.768017,9.2012584 75.768017,10.388208 L 75.768017,11.590575 C 58.516185,15.26916 70.560223,11.848151 51.535772,11.590575 L 51.535772,10.388208 C 51.535772,9.2012584 52.532319,8.2457042 53.770186,8.2457042 z "
+ style="fill:url(#linearGradient3828);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:4;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path3094"
+ d="M 76.718322,15.318565 L 76.718322,18.182964 L 49.588674,18.182964 L 49.588674,15.318565 L 76.718322,15.318565 z "
+ style="fill:url(#linearGradient3096);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:4;stroke-opacity:1" />
+ <rect
+ style="opacity:1;fill:#590000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.59500003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect2871"
+ width="43.851925"
+ height="17.831902"
+ x="-84.610558"
+ y="-116.81715"
+ ry="0.04110394"
+ transform="scale(-1,-1)"
+ rx="0.04110394" />
+ <rect
+ style="fill:url(#linearGradient3023);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect1969"
+ width="59.113007"
+ height="104.77455"
+ x="34.04409"
+ y="17.520124"
+ rx="0.27439758"
+ ry="0.2450213" />
+ <rect
+ ry="0.24557458"
+ rx="0.27541947"
+ y="17.520124"
+ x="34.969944"
+ height="37.07901"
+ width="58.282997"
+ id="rect2872"
+ style="opacity:0.51000001;fill:url(#linearGradient3020);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
+ <rect
+ style="opacity:0.352459;fill:url(#linearGradient3017);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect2914"
+ width="14.03992"
+ height="102.9884"
+ x="68.274475"
+ y="18.528465"
+ rx="0"
+ ry="0" />
+ <rect
+ style="opacity:0.87000002;fill:url(#linearGradient3014);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect2882"
+ width="59.064732"
+ height="59.797035"
+ x="34.04409"
+ y="-122.29468"
+ rx="0.26041183"
+ ry="0.24077456"
+ transform="scale(1,-1)" />
+ <rect
+ transform="scale(1,-1)"
+ ry="0.23952232"
+ rx="0.259693"
+ y="-122.29468"
+ x="34.04409"
+ height="61.583176"
+ width="59.140068"
+ id="rect2886"
+ style="opacity:1;fill:url(#linearGradient3011);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
+ <rect
+ style="opacity:0.41000001;fill:url(#radialGradient3146);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect3136"
+ width="59.120022"
+ height="61.287357"
+ x="34.04409"
+ y="-122.24918"
+ rx="0.26217785"
+ ry="0.24254379"
+ transform="scale(1,-1)" />
+ <path
+ style="opacity:1;fill:url(#linearGradient2909);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ d="M 38.976817,20.034812 C 38.421853,20.034812 38.066143,20.572656 38.066143,21.127619 L 38.066143,24.22391 C 49.669954,42.880162 73.463169,32.60421 89.792381,29.32368 L 89.792381,21.127619 C 89.792381,20.572656 89.43668,20.034812 88.881711,20.034812 L 38.976817,20.034812 z "
+ id="rect2885"
+ sodipodi:nodetypes="ccccccc" />
+ <rect
+ ry="0"
+ rx="0"
+ y="18.528465"
+ x="68.274475"
+ height="33.926319"
+ width="14.03992"
+ id="rect2911"
+ style="opacity:0.352459;fill:url(#linearGradient3820);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
+ <rect
+ style="opacity:0.352459;fill:url(#linearGradient2915);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="rect2913"
+ width="14.03992"
+ height="74.724487"
+ x="68.274475"
+ y="18.528465"
+ rx="0"
+ ry="0" />
+ <path
+ sodipodi:type="arc"
+ style="opacity:1;fill:url(#radialGradient3838);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path3830"
+ sodipodi:cx="12.308078"
+ sodipodi:cy="3.0406995"
+ sodipodi:rx="2.9831069"
+ sodipodi:ry="0.088388346"
+ d="M 15.291185 3.0406995 A 2.9831069 0.088388346 0 1 1 9.324971,3.0406995 A 2.9831069 0.088388346 0 1 1 15.291185 3.0406995 z"
+ transform="matrix(5.82831,0,0,5.82831,-1.469448,0.551147)" />
+ <path
+ transform="matrix(3.480147,0,0,5.82831,20.0025,-9.375189)"
+ d="M 15.291185 3.0406995 A 2.9831069 0.088388346 0 1 1 9.324971,3.0406995 A 2.9831069 0.088388346 0 1 1 15.291185 3.0406995 z"
+ sodipodi:ry="0.088388346"
+ sodipodi:rx="2.9831069"
+ sodipodi:cy="3.0406995"
+ sodipodi:cx="12.308078"
+ id="path3840"
+ style="opacity:1;fill:url(#radialGradient3842);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.04;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ sodipodi:type="arc" />
+ <rect
+ rx="0.04110394"
+ transform="scale(-1,-1)"
+ ry="0.024970405"
+ y="-113"
+ x="-84.610558"
+ height="10.832777"
+ width="43.851925"
+ id="rect1957"
+ style="opacity:1;fill:url(#linearGradient2851);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.59500003;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/kde/powermanager/pics/battery-discharging-030.png b/kde/powermanager/pics/battery-discharging-030.png
new file mode 100644
index 0000000..29d42a7
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-030.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-040.png b/kde/powermanager/pics/battery-discharging-040.png
new file mode 100644
index 0000000..93d1128
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-040.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-050.png b/kde/powermanager/pics/battery-discharging-050.png
new file mode 100644
index 0000000..3d84a36
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-050.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-060.png b/kde/powermanager/pics/battery-discharging-060.png
new file mode 100644
index 0000000..98f00f8
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-060.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-070.png b/kde/powermanager/pics/battery-discharging-070.png
new file mode 100644
index 0000000..5003115
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-070.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-090.png b/kde/powermanager/pics/battery-discharging-090.png
new file mode 100644
index 0000000..e106f1d
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-090.png
Binary files differ
diff --git a/kde/powermanager/pics/battery-discharging-100.png b/kde/powermanager/pics/battery-discharging-100.png
new file mode 100644
index 0000000..ea795ea
--- /dev/null
+++ b/kde/powermanager/pics/battery-discharging-100.png
Binary files differ
diff --git a/kde/powermanager/pics/battery_charging_0.svg b/kde/powermanager/pics/battery_charging_0.svg
new file mode 100644
index 0000000..77d97ba
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_0.svg
@@ -0,0 +1,1350 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_0.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11201"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11203"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11229"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11245"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient11247"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11249"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11251"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11253"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11456"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11458"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11460"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11462"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11464"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11466"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11468"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11470"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11472"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11474"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11476"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11478"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11480"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11482"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11484"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11486"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11488"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11490"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11492"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11494"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11496"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11498"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11500"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11502"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11504"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11506"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11508"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11510"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11514"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11516"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11518"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient11520"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11522"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11528"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11530"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11532"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11534"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11536"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11538"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11540"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11542"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11544"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11546"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11548"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11550"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11556"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11558"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11560"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11562"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11564"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11566"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11568"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11570"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11572"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11576"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11578"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11582"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11584"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11586"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11588"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11590"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11592"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11598"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11600"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11602"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11604"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-360)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11606"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-360)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11608"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11610"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-360)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11612"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-360)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="83.133447"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient11468);fill-opacity:1"
+ x="0"
+ id="rect3805"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient11466)"
+ y="0"
+ id="rect3807"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient11464)"
+ id="rect3809"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient11462);fill-opacity:1"
+ id="rect3813"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3817"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient11460);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path3819"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g3823"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path3825"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path3827"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient11456);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path3829"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path3831"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient11458);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_1.svg b/kde/powermanager/pics/battery_charging_1.svg
new file mode 100644
index 0000000..213708d
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_1.svg
@@ -0,0 +1,3551 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_1.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9842"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9848"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9850"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10103"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10109"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10111"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10115"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10121"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10123"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10697"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10699"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10701"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10703"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10723"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10729"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10731"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10785"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10791"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10793"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10910"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10912"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10914"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10916"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10918"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10920"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10922"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10924"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10926"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10930"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10934"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10938"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10940"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10942"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10944"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10946"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10948"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10950"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10954"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10956"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10958"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10960"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10962"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10964"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10966"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10968"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10970"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10972"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10974"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10976"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10978"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10980"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10982"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10984"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10986"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10988"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10990"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10992"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10994"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10996"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10998"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11000"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11002"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11004"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11006"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11008"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11010"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11012"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11014"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11016"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11018"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11020"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11022"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11024"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11026"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11030"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11032"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11034"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11036"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11038"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11040"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11042"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11044"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11046"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11048"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11050"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11052"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11054"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11056"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11058"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11060"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11066"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11199"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11201"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11203"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11205"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11207"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11209"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11211"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11213"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11215"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11217"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11219"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11221"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11223"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient11225"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient11227"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11229"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11231"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11233"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11237"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11245"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient11247"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11249"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11251"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11253"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11257"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11259"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11261"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11271"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11277"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11283"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11285"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11301"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11309"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11337"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="83.133447"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient11253);fill-opacity:1"
+ x="0"
+ id="rect9452"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient11251)"
+ y="0"
+ id="rect9454"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient11249)"
+ id="rect9456"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient11247);fill-opacity:1"
+ id="rect9458"
+ height="10"
+ width="2"
+ i:knockout="Off"
+ y="1"
+ x="19" /><svg:rect
+ style="fill:url(#linearGradient11245);fill-opacity:1"
+ id="rect9460"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient11243);fill-opacity:1"
+ id="rect9462"
+ height="2"
+ width="2"
+ i:knockout="Off"
+ y="9"
+ x="19" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9464"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient11229);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9638"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9772"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9774"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9776"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient11201);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9778"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9780"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient11203);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_2.svg b/kde/powermanager/pics/battery_charging_2.svg
new file mode 100644
index 0000000..e458901
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_2.svg
@@ -0,0 +1,2822 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_2.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9842"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9848"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9850"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10103"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10109"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10111"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10115"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10121"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10123"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10697"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10699"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10701"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10703"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10723"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10729"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10731"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10785"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10791"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10793"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10910"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10912"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10914"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10916"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10918"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10920"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10922"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10924"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10926"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10928"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10930"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10932"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10934"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10936"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10938"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10940"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10942"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10944"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10946"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10948"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10950"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10952"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10954"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10956"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10958"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10960"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10962"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10964"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10966"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10968"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10970"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10972"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10974"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10976"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10978"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10980"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10982"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10984"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10986"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10988"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10990"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10992"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10994"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10996"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10998"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11000"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11002"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11004"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11006"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11008"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11010"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11012"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11014"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11016"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11018"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11020"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11022"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11024"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11026"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11028"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11030"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11032"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11034"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11036"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11038"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11040"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11042"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11044"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11046"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11048"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11050"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11052"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient11054"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient11056"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11058"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient11060"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient11062"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11064"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient11066"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="83.133447"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient10992);fill-opacity:1"
+ x="0"
+ id="rect9436"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient10990)"
+ y="0"
+ id="rect9438"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient10988)"
+ id="rect9440"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient10986);fill-opacity:1"
+ id="rect9442"
+ height="10"
+ width="4"
+ i:knockout="Off"
+ y="1"
+ x="17" /><svg:rect
+ style="fill:url(#linearGradient10984);fill-opacity:1"
+ id="rect9444"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient10982);fill-opacity:1"
+ id="rect9446"
+ height="2"
+ width="4"
+ i:knockout="Off"
+ y="9"
+ x="17" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9448"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient10958);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9634"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9758"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9760"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9762"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient10932);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9764"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9766"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient10934);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_3.svg b/kde/powermanager/pics/battery_charging_3.svg
new file mode 100644
index 0000000..d5c431a
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_3.svg
@@ -0,0 +1,2093 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_3.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9842"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9848"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9850"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10103"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10109"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10111"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10115"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10121"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10123"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10697"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10699"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10701"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10703"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10723"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10729"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10731"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10785"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10791"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10793"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-17.866553"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient10731);fill-opacity:1"
+ x="0"
+ id="rect9420"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient10729)"
+ y="0"
+ id="rect9422"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient10727)"
+ id="rect9424"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient10725);fill-opacity:1"
+ id="rect9426"
+ height="10"
+ width="6"
+ i:knockout="Off"
+ y="1"
+ x="15" /><svg:rect
+ style="fill:url(#linearGradient10723);fill-opacity:1"
+ id="rect9428"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient10721);fill-opacity:1"
+ id="rect9430"
+ height="2"
+ width="6"
+ i:knockout="Off"
+ y="9"
+ x="15" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9432"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient10687);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9630"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9744"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9746"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9748"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient10663);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9750"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9752"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient10665);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_4.svg b/kde/powermanager/pics/battery_charging_4.svg
new file mode 100644
index 0000000..f6b66df
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_4.svg
@@ -0,0 +1,1364 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_4.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9842"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9848"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9850"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10103"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10109"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10111"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10115"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10121"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10123"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-17.866553"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient10111);fill-opacity:1"
+ x="0"
+ id="rect9404"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient10109)"
+ y="0"
+ id="rect9406"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient10107)"
+ id="rect9408"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient10105);fill-opacity:1"
+ id="rect9410"
+ height="10"
+ width="8"
+ i:knockout="Off"
+ y="1"
+ x="13" /><svg:rect
+ style="fill:url(#linearGradient10103);fill-opacity:1"
+ id="rect9412"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient10101);fill-opacity:1"
+ id="rect9414"
+ height="2"
+ width="8"
+ i:knockout="Off"
+ y="9"
+ x="13" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9416"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient10057);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9626"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9730"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9732"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9734"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient10035);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9736"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9738"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient10037);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_5.svg b/kde/powermanager/pics/battery_charging_5.svg
new file mode 100644
index 0000000..77568b7
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_5.svg
@@ -0,0 +1,2822 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_5.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8045"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8047"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8051"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8053"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8718"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8722"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8730"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8734"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8736"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8746"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8750"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8762"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient8778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8788"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient8790"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8792"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8796"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8806"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8818"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8822"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8824"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8826"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8828"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8830"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8832"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8834"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8836"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8838"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8842"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8848"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8850"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8852"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8854"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8856"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8860"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8862"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8864"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8866"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8868"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9271"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9277"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9283"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9285"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9301"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9309"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9337"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9343"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9349"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9353"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9355"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9361"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9369"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9385"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9387"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9389"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9393"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9395"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9734"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9736"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9746"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9750"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9762"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9788"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9790"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9792"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9796"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9806"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9818"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9822"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9824"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9826"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9828"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9830"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9832"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9834"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9836"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9838"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9842"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9848"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9850"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9852"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9854"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9856"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9860"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9862"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9864"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9866"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9868"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9870"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9872"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9874"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9876"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9878"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9880"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9882"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9884"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9886"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9888"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-101.86655"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient9850);fill-opacity:1"
+ x="0"
+ id="rect9388"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient9848)"
+ y="0"
+ id="rect9390"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient9846)"
+ id="rect9392"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient9844);fill-opacity:1"
+ id="rect9394"
+ height="10"
+ width="10"
+ i:knockout="Off"
+ y="1"
+ x="11" /><svg:rect
+ style="fill:url(#linearGradient9842);fill-opacity:1"
+ id="rect9396"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient9840);fill-opacity:1"
+ id="rect9398"
+ height="2"
+ width="10"
+ i:knockout="Off"
+ y="9"
+ x="11" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9400"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient9786);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9622"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9716"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9718"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9720"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient9766);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9722"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9724"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient9768);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_6.svg b/kde/powermanager/pics/battery_charging_6.svg
new file mode 100644
index 0000000..e72630c
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_6.svg
@@ -0,0 +1,3551 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_6.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8045"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8047"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8051"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8053"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8718"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8722"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8730"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8734"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8736"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8746"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8750"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8762"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient8778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8788"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient8790"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8792"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8796"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8806"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8818"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8822"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8824"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8826"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8828"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8830"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8832"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8834"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8836"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8838"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8842"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8848"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8850"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8852"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8854"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8856"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8860"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8862"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8864"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8866"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8868"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9271"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9277"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9283"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9285"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9301"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9309"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9337"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9343"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9349"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9353"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9355"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9361"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9369"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9385"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9387"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9389"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9393"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9395"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9734"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9736"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9746"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9750"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9762"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9788"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9790"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9792"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9796"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9806"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9818"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9822"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9824"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9826"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9828"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9830"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9832"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9834"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9836"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9838"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9842"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9848"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9850"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9852"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9854"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9856"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9860"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9862"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9864"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9866"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9868"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9870"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9872"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9874"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9876"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9878"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9880"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9882"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9884"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9886"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9888"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient10047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient10049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient10069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient10081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10115"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10121"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10123"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient10149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient10151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient10155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient10157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient10161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-101.86655"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient10123);fill-opacity:1"
+ x="0"
+ id="rect9372"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient10121)"
+ y="0"
+ id="rect9374"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient10119)"
+ id="rect9376"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient10117);fill-opacity:1"
+ id="rect9378"
+ height="10"
+ width="12"
+ i:knockout="Off"
+ y="1"
+ x="9" /><svg:rect
+ style="fill:url(#linearGradient10115);fill-opacity:1"
+ id="rect9380"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient10113);fill-opacity:1"
+ id="rect9382"
+ height="2"
+ width="12"
+ i:knockout="Off"
+ y="9"
+ x="9" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9384"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient10059);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9618"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9702"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9704"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9706"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient10039);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9708"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9710"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient10041);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_7.svg b/kde/powermanager/pics/battery_charging_7.svg
new file mode 100644
index 0000000..8a62312
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_7.svg
@@ -0,0 +1,1364 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_7.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8045"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8047"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8051"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8053"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8718"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8722"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8730"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8734"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8736"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8746"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8750"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8762"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient8778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8788"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient8790"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8792"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8796"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8806"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8818"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8822"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8824"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8826"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8828"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8830"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8832"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8834"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8836"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8838"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8842"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8848"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8850"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8852"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8854"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8856"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8860"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8862"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8864"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8866"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8868"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-101.86655"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient8856);fill-opacity:1"
+ x="0"
+ id="rect9356"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient8854)"
+ y="0"
+ id="rect9358"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient8852)"
+ id="rect9360"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient8850);fill-opacity:1"
+ id="rect9362"
+ height="10"
+ width="14"
+ i:knockout="Off"
+ y="1"
+ x="7" /><svg:rect
+ style="fill:url(#linearGradient8848);fill-opacity:1"
+ id="rect9364"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient8846);fill-opacity:1"
+ id="rect9366"
+ height="2"
+ width="14"
+ i:knockout="Off"
+ y="9"
+ x="7" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9368"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient8770);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9614"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9688"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9690"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9692"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient8750);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9694"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9696"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient8752);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_8.svg b/kde/powermanager/pics/battery_charging_8.svg
new file mode 100644
index 0000000..c841f00
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_8.svg
@@ -0,0 +1,2093 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_8.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7879"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7881"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7883"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7885"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7887"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,359.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7889"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7891"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7897"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7899"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7901"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7903"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7905"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7907"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7909"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7911"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7913"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7915"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7917"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7919"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7923"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7935"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7937"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7941"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7943"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7945"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,314.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient7949"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7951"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7953"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7955"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7957"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7959"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient7961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7963"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7965"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7967"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7969"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7971"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7973"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7975"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7977"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7979"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7981"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7983"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7985"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7987"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7989"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7991"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7993"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7995"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7997"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7999"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8003"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8045"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8047"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8051"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8053"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8718"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8722"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8724"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8730"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8734"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8736"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8738"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8746"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8750"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient8754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient8756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8758"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8762"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient8778"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8786"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8788"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient8790"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8792"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8794"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8796"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8798"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8800"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8802"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8804"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8806"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8808"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8810"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8812"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8814"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8816"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8818"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8820"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8822"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8824"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8826"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8828"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8830"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8832"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8834"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8836"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8838"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8840"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8842"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8844"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8846"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8848"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8850"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8852"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8854"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8856"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8858"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8860"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8862"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8864"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8866"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8868"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-101.86655"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient8868);fill-opacity:1"
+ x="0"
+ id="rect9340"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient8866)"
+ y="0"
+ id="rect9342"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient8864)"
+ id="rect9344"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient8862);fill-opacity:1"
+ id="rect9346"
+ height="10"
+ width="16"
+ i:knockout="Off"
+ y="1"
+ x="5" /><svg:rect
+ style="fill:url(#linearGradient8860);fill-opacity:1"
+ id="rect9348"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient8858);fill-opacity:1"
+ id="rect9350"
+ height="2"
+ width="16"
+ i:knockout="Off"
+ y="9"
+ x="5" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9352"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient8772);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9610"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g9674"
+ transform="matrix(0.175334,0,0,0.175334,7,-5.3845)"><svg:path
+ transform="translate(0,-5)"
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ id="path9676"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9678"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ transform="translate(0,-5)"
+ style="fill:url(#radialGradient8754);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 48.973473,11.822345 C 36.573338,21.003329 18.913812,49.599255 3.8843814,68.487743 L 26.016026,70.412409 C 22.337521,86.398883 19.266258,111.51795 14.905348,118.35389 C 23.687806,113.02894 46.397519,77.713742 62.121917,57.358298 L 36.245619,55.10798 C 40.488233,40.679435 42.796773,20.831891 48.973473,11.822345 z "
+ id="path9680"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ transform="translate(0,-5)"
+ sodipodi:nodetypes="ccccccc"
+ id="path9682"
+ d="M 52.024668,8.1716308 C 38.124975,15.290683 15.029431,51.00964 0,69.898128 L 24.099858,72.197691 C 20.421354,88.184166 15.756763,118.2706 8.9590401,122.76346 C 22.990045,121.37493 49.275613,76.402419 65,56.046975 L 37.797233,53.751404 C 42.03987,39.322859 45.84799,17.181177 52.024668,8.1716308 z "
+ style="opacity:0.41803278;fill:url(#linearGradient8756);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_charging_9.svg b/kde/powermanager/pics/battery_charging_9.svg
new file mode 100644
index 0000000..3a01ca9
--- /dev/null
+++ b/kde/powermanager/pics/battery_charging_9.svg
@@ -0,0 +1,1358 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_charging_9.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7879"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7881"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7883"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7885"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7887"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,359.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7889"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7891"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7897"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7899"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7901"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7903"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7905"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7907"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7909"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7911"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7913"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7915"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7917"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7919"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7923"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7935"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7937"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7941"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7943"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7945"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,314.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient7949"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7951"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7953"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7955"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7957"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7959"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient7961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7963"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7965"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7967"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7969"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7971"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7973"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7975"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7977"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7979"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7981"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7983"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7985"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7987"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7989"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7991"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7993"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7995"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7997"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7999"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8003"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient8041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient8043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8045"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient8047"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient8049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8051"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient8053"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-101.86655"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient8053);fill-opacity:1"
+ x="0"
+ id="rect9324"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient8051)"
+ y="0"
+ id="rect9326"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient8049)"
+ id="rect9328"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient8047);fill-opacity:1"
+ id="rect9330"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient8045);fill-opacity:1"
+ id="rect9332"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient8043);fill-opacity:1"
+ id="rect9334"
+ height="2"
+ width="18"
+ i:knockout="Off"
+ y="9"
+ x="3" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect9336"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient8041);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9338"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /><svg:g
+ id="g3781"><svg:path
+ style="opacity:0.41803278;fill:#cf4913;fill-opacity:0.75;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 16.121693,-4.8283693 C 13.684604,-3.5801574 9.63517,2.6825902 7,5.9943844 L 11.225525,6.397576 C 10.580558,9.2005486 9.762696,14.475723 8.570824,15.263474 C 11.030937,15.020018 15.63969,7.1348077 18.39671,3.5658063 L 13.62714,3.1633147 C 14.371019,0.63350016 15.038711,-3.2486895 16.121693,-4.8283693 z "
+ id="path9470"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ sodipodi:nodetypes="ccccccc"
+ id="path9472"
+ d="M 15.586715,-4.188275 C 13.41255,-2.5785363 10.316234,2.4353018 7.681064,5.7470959 L 11.561494,6.0845553 C 10.916527,8.8875278 10.37803,13.291754 9.613414,14.490327 C 11.153278,13.556682 15.135063,7.3647272 17.892084,3.7957258 L 13.355089,3.4011686 C 14.098964,0.87135406 14.503729,-2.6085952 15.586715,-4.188275 z "
+ style="fill:#e3ad00;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /><svg:path
+ style="fill:url(#radialGradient7893);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 15.586715,-4.188275 C 13.41255,-2.5785363 10.316234,2.4353018 7.681064,5.7470959 L 11.561494,6.0845553 C 10.916527,8.8875278 10.37803,13.291754 9.613414,14.490327 C 11.153278,13.556682 15.135063,7.3647272 17.892084,3.7957258 L 13.355089,3.4011686 C 14.098964,0.87135406 14.503729,-2.6085952 15.586715,-4.188275 z "
+ id="path9474"
+ sodipodi:nodetypes="ccccccc" /><svg:path
+ sodipodi:nodetypes="ccccccc"
+ id="path9476"
+ d="M 16.121693,-4.8283693 C 13.684604,-3.5801574 9.63517,2.6825902 7,5.9943844 L 11.225525,6.397576 C 10.580558,9.2005486 9.762696,14.475723 8.570824,15.263474 C 11.030937,15.020018 15.63969,7.1348077 18.39671,3.5658063 L 13.62714,3.1633147 C 14.371019,0.63350016 15.038711,-3.2486895 16.121693,-4.8283693 z "
+ style="opacity:0.41803278;fill:url(#linearGradient7895);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /></svg:g></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_0.svg b/kde/powermanager/pics/battery_discharging_0.svg
new file mode 100644
index 0000000..8bf6129
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_0.svg
@@ -0,0 +1,1941 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_0.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5514"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5516"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5518"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5520"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5522"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5542"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5546"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5548"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5550"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5570"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5572"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5576"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5578"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5598"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5600"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5602"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5604"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5606"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5608"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5626"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5628"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5630"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5634"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5654"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5656"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5662"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5682"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5684"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5688"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5690"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5692"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5710"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5712"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5718"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5738"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5740"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5746"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9478"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9480"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9482"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9484"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9486"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9488"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9490"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9492"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9494"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9496"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9498"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9500"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9502"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9506"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9508"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9510"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9514"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9516"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9520"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9522"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9528"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9530"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9534"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9536"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9538"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9540"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9542"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9544"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9548"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9550"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9556"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9558"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9562"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9564"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9566"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9568"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9570"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9572"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9576"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9578"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9582"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9584"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9586"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9590"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9592"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9598"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9600"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9612"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9616"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9620"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9624"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9628"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9640"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9662"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9666"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9668"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9670"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9672"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9684"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9698"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9700"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3833"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3835"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3841"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3845"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3847"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3853"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,0)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="106.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient3833);fill-opacity:1"
+ x="0"
+ id="rect3791"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient3835)"
+ y="0"
+ id="rect3793"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient3837)"
+ id="rect3795"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient3841);fill-opacity:1"
+ id="rect3799"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect3803"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient3859);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path3821"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_1.svg b/kde/powermanager/pics/battery_discharging_1.svg
new file mode 100644
index 0000000..fbbaea8
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_1.svg
@@ -0,0 +1,3343 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_1.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5514"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5516"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5518"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5520"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5522"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5542"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5546"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5548"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5550"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5570"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5572"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5576"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5578"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5598"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5600"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5602"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5604"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5606"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5608"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5626"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5628"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5630"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5634"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5654"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5656"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5662"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5682"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5684"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5688"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5690"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5692"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5710"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5712"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5718"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5738"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5740"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5746"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9478"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9480"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9482"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9484"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9486"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9488"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9490"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9492"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9494"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9496"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9498"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9500"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9502"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9506"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9508"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9510"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9514"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9516"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9520"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9522"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9528"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9530"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9534"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9536"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9538"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9540"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9542"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9544"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9548"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9550"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9556"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9558"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9562"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9564"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9566"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9568"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9570"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9572"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9576"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9578"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9582"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9584"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9586"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9590"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9592"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9598"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9600"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9612"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9616"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9620"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9624"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9628"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9640"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9662"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9666"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9668"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9670"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9672"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9684"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9698"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9700"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3833"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3835"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3841"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3845"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3847"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3853"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,0)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4199"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4201"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4203"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4205"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4207"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4209"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4211"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4213"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4215"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4217"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4219"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4221"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4223"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4225"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4227"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4229"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4231"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4233"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4237"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4245"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4247"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4249"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4251"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4253"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4257"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4259"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4261"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4271"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4277"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4283"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4285"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4301"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4309"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4337"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4343"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4349"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4353"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4355"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4361"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4369"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="106.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient4285);fill-opacity:1"
+ x="0"
+ id="rect5482"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient4283)"
+ y="0"
+ id="rect5484"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient4281)"
+ id="rect5486"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient4279);fill-opacity:1"
+ id="rect5488"
+ height="10"
+ width="2"
+ i:knockout="Off"
+ y="1"
+ x="19" /><svg:rect
+ style="fill:url(#linearGradient4277);fill-opacity:1"
+ id="rect5490"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient4275);fill-opacity:1"
+ id="rect5492"
+ height="2"
+ width="2"
+ i:knockout="Off"
+ y="9"
+ x="19" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5494"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient4133);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9656"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_2.svg b/kde/powermanager/pics/battery_discharging_2.svg
new file mode 100644
index 0000000..8297409
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_2.svg
@@ -0,0 +1,4713 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_2.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5514"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5516"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5518"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5520"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5522"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5542"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5546"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5548"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5550"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5570"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5572"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5576"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5578"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5598"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5600"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5602"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5604"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5606"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5608"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5626"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5628"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5630"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5634"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5654"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5656"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5662"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5682"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5684"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5688"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5690"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5692"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5710"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5712"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5718"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5738"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5740"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5746"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9478"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9480"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9482"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9484"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9486"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9488"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9490"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9492"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9494"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9496"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9498"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9500"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9502"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9506"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9508"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9510"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9514"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9516"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9520"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9522"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9528"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9530"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9534"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9536"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9538"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9540"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9542"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9544"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9548"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9550"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9556"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9558"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9562"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9564"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9566"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9568"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9570"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9572"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9576"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9578"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9582"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9584"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9586"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9590"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9592"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9598"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9600"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9612"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9616"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9620"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9624"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9628"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9640"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9662"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9666"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9668"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9670"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9672"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9684"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9698"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9700"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3833"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3835"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3841"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3845"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3847"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3853"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,0)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4199"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4201"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4203"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4205"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4207"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4209"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4211"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4213"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4215"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4217"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4219"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4221"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4223"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4225"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4227"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4229"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4231"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4233"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4237"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4245"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4247"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4249"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4251"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4253"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4257"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4259"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4261"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4271"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4277"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4283"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4285"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4301"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4309"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4337"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4343"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4349"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4353"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4355"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4361"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4369"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4625"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4631"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4633"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4697"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4699"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4701"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4703"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4723"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4729"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4731"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4785"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4791"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4793"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4797"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4801"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4803"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4805"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4809"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4811"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4817"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4819"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4821"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4825"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4827"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4829"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4831"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4833"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4835"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4839"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4841"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4843"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4845"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4847"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4851"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4853"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4855"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4867"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4869"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4871"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4873"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4875"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4877"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4879"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="106.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient4793);fill-opacity:1"
+ x="0"
+ id="rect5450"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient4791)"
+ y="0"
+ id="rect5452"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient4789)"
+ id="rect5454"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient4787);fill-opacity:1"
+ id="rect5456"
+ height="10"
+ width="4"
+ i:knockout="Off"
+ y="1"
+ x="17" /><svg:rect
+ style="fill:url(#linearGradient4785);fill-opacity:1"
+ id="rect5458"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient4783);fill-opacity:1"
+ id="rect5460"
+ height="2"
+ width="4"
+ i:knockout="Off"
+ y="9"
+ x="17" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5462"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient4643);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9654"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_3.svg b/kde/powermanager/pics/battery_discharging_3.svg
new file mode 100644
index 0000000..abade67
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_3.svg
@@ -0,0 +1,4713 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_3.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5514"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5516"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5518"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5520"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5522"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(0,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5542"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5546"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5548"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5550"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5570"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5572"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5574"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5576"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5578"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5598"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5600"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5602"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5604"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5606"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5608"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5626"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5628"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5630"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5634"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5654"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5656"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5662"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5682"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5684"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5688"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5690"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5692"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5710"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5712"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5716"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5718"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5720"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5738"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5740"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5744"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5746"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5748"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9478"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9480"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9482"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-360.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9484"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9486"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8"
+ gradientTransform="translate(50,-360)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9488"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-365.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9490"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9492"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9494"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9496"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9498"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9500"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9502"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9506"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9508"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9510"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9512"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9514"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-280)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9516"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9520"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9522"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9524"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9526"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9528"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-240)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9530"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9534"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9536"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9538"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9540"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9542"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-200)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9544"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9548"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9550"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9552"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9554"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9556"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-160)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9558"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9562"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9564"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9566"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient9568"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9570"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-120)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9572"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9576"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9578"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9580"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient9582"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9584"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9586"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9590"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient9592"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9594"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient9596"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient9598"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,-40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient9600"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9612"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9616"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9620"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9624"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9628"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9632"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9636"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9640"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9658"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9660"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9662"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9664"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9666"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9668"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9670"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient9672"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9684"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9686"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9698"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9700"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9712"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9714"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9726"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9728"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9742"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9768"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient9782"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient9784"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3833"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3835"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3841"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3845"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient3847"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(50,0)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient3853"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(50,0)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient3859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient3861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient3863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4199"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4201"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4203"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4205"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4207"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4209"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4211"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4213"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4215"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4217"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4219"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4221"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4223"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4225"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4227"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4229"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4231"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4233"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4235"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4237"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4239"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4241"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4243"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4245"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4247"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4249"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4251"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4253"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4255"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4257"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4259"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4261"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4263"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4265"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4267"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4269"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4271"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4273"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4277"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4283"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4285"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4287"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4289"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4291"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4293"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4295"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4301"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4303"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4305"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4307"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4309"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4311"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4313"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4315"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4319"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4321"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4327"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4329"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4331"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4333"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4335"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4337"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4339"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4341"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4343"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4345"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4347"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4349"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4351"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4353"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4355"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4357"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4361"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4369"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4373"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-325.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4375"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4377"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4379"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-320.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4625"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4631"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4633"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient4639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient4641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4697"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4699"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4701"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4703"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4723"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4729"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4731"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4785"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4791"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4793"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4797"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4801"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4803"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4805"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4809"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4811"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4817"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4819"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4821"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4825"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4827"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4829"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4831"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4833"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4835"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4839"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4841"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4843"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4845"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4847"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4851"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4853"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4855"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4867"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4869"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-285.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4871"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4873"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4875"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-280.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4877"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4879"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="106.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient4793);fill-opacity:1"
+ x="0"
+ id="rect5450"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient4791)"
+ y="0"
+ id="rect5452"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient4789)"
+ id="rect5454"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient4787);fill-opacity:1"
+ id="rect5456"
+ height="10"
+ width="4"
+ i:knockout="Off"
+ y="1"
+ x="17" /><svg:rect
+ style="fill:url(#linearGradient4785);fill-opacity:1"
+ id="rect5458"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient4783);fill-opacity:1"
+ id="rect5460"
+ height="2"
+ width="4"
+ i:knockout="Off"
+ y="9"
+ x="17" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5462"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient4643);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9654"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_4.svg b/kde/powermanager/pics/battery_discharging_4.svg
new file mode 100644
index 0000000..a415ad8
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_4.svg
@@ -0,0 +1,1964 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_4.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4277"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4283"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4285"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4723"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4729"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4731"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4785"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4791"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4793"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4797"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4801"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4803"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4805"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4809"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4811"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4817"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4819"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4821"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4825"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4827"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4829"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4831"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4833"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4835"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4839"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4841"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4843"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4845"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4847"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4851"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4853"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4855"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4867"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4869"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4871"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4873"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4875"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4877"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4879"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5199"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="106.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient4805);fill-opacity:1"
+ x="0"
+ id="rect5418"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient4803)"
+ y="0"
+ id="rect5420"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient4801)"
+ id="rect5422"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient4799);fill-opacity:1"
+ id="rect5424"
+ height="10"
+ width="6"
+ i:knockout="Off"
+ y="1"
+ x="15" /><svg:rect
+ style="fill:url(#linearGradient4797);fill-opacity:1"
+ id="rect5426"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient4795);fill-opacity:1"
+ id="rect5428"
+ height="2"
+ width="6"
+ i:knockout="Off"
+ y="9"
+ x="15" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5430"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient5141);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9652"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_5.svg b/kde/powermanager/pics/battery_discharging_5.svg
new file mode 100644
index 0000000..2a06ab3
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_5.svg
@@ -0,0 +1,3334 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_5.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4277"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4283"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4285"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4723"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4729"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4731"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4785"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4791"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4793"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4797"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4801"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4803"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4805"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4809"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4811"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4817"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4819"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4821"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4825"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4827"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4829"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4831"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4833"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4835"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4839"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4841"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4843"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4845"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4847"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4851"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4853"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4855"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4867"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4869"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4871"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4873"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4875"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4877"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4879"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5199"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5425"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5429"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5431"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5435"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5437"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5441"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5477"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5481"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5491"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5495"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5499"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5501"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5507"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5527"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5537"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5557"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5561"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5563"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5569"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5571"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5573"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5577"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5579"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5581"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5625"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5631"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5633"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="106.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient5633);fill-opacity:1"
+ x="0"
+ id="rect5386"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient5631)"
+ y="0"
+ id="rect5388"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient5629)"
+ id="rect5390"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient5627);fill-opacity:1"
+ id="rect5392"
+ height="10"
+ width="8"
+ i:knockout="Off"
+ y="1"
+ x="13" /><svg:rect
+ style="fill:url(#linearGradient5625);fill-opacity:1"
+ id="rect5394"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient5623);fill-opacity:1"
+ id="rect5396"
+ height="2"
+ width="8"
+ i:knockout="Off"
+ y="9"
+ x="13" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5398"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient5463);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9650"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_6.svg b/kde/powermanager/pics/battery_discharging_6.svg
new file mode 100644
index 0000000..149b530
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_6.svg
@@ -0,0 +1,4704 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_6.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4275"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4277"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient4279"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4281"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4283"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4285"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4705"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4707"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4709"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4711"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4713"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4715"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4717"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4719"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4721"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4723"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4725"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4727"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4729"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4731"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4733"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4735"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4737"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4739"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4741"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4743"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4745"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4747"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4749"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4751"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4753"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4755"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4757"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4759"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4761"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4763"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4765"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4767"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4769"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4771"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4773"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4775"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4777"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4779"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4781"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4783"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4785"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient4787"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4789"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4791"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4793"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4795"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4797"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4799"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4801"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4803"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4805"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4809"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4811"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4815"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4817"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4819"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4821"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4825"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4827"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4829"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4831"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4833"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4835"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4837"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4839"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4841"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4843"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4845"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4847"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4849"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4851"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4853"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4855"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4857"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4859"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4861"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4863"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4865"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient4867"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient4869"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-245.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4871"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient4873"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient4875"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-240.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4877"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient4879"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5193"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5197"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5199"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5425"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5429"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5431"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5435"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5437"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5441"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5477"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5481"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5491"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5495"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5499"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5501"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5507"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5527"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5537"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5557"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5561"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5563"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5569"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5571"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5573"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5577"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5579"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5581"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient5615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5625"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5631"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5633"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-205.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient5689"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5691"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-200.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5693"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5695"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5897"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5899"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5901"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5903"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5905"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5907"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5909"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5911"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5913"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5915"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5917"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5919"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5923"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5935"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5937"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5941"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5943"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5945"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5949"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient5951"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient5953"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5955"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5957"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5959"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5963"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5965"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5967"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5969"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5971"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5973"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5975"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5977"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5979"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5981"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5983"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5985"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5987"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient5989"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5991"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5993"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5995"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient5997"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient5999"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6003"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6133"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6139"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6141"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6161"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6167"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-125.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6169"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-120.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-165.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6185"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6187"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-160.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6189"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6191"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="106.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient6141);fill-opacity:1"
+ x="0"
+ id="rect5354"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient6139)"
+ y="0"
+ id="rect5356"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient6137)"
+ id="rect5358"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient6135);fill-opacity:1"
+ id="rect5360"
+ height="10"
+ width="10"
+ i:knockout="Off"
+ y="1"
+ x="11" /><svg:rect
+ style="fill:url(#linearGradient6133);fill-opacity:1"
+ id="rect5362"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient6131);fill-opacity:1"
+ id="rect5364"
+ height="2"
+ width="10"
+ i:knockout="Off"
+ y="9"
+ x="11" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5366"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient5961);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9648"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_7.svg b/kde/powermanager/pics/battery_discharging_7.svg
new file mode 100644
index 0000000..6b2ed81
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_7.svg
@@ -0,0 +1,1964 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_7.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6133"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6139"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6141"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6393"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6395"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6425"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6429"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6431"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6435"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6437"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6441"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6477"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6481"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6491"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6495"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6499"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6501"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6507"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6527"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6537"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6557"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6561"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6563"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6569"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6571"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6573"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6577"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6579"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6581"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6625"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6631"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6633"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6641"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6647"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6649"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6653"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6659"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6661"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="22.63513"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient6661);fill-opacity:1"
+ x="0"
+ id="rect5290"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient6659)"
+ y="0"
+ id="rect5292"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient6657)"
+ id="rect5294"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient6655);fill-opacity:1"
+ id="rect5296"
+ height="10"
+ width="14"
+ i:knockout="Off"
+ y="1"
+ x="7" /><svg:rect
+ style="fill:url(#linearGradient6653);fill-opacity:1"
+ id="rect5298"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient6651);fill-opacity:1"
+ id="rect5300"
+ height="2"
+ width="14"
+ i:knockout="Off"
+ y="9"
+ x="7" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5302"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient6461);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9644"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_8.svg b/kde/powermanager/pics/battery_discharging_8.svg
new file mode 100644
index 0000000..2c8438d
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_8.svg
@@ -0,0 +1,3334 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_8.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6133"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6139"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6141"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6393"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6395"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6425"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6429"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6431"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6435"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6437"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6441"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6477"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6481"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6491"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6495"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6499"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6501"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6507"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6527"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6537"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6557"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6561"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6563"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6569"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6571"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6573"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6577"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6579"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6581"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6625"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6631"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6633"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6641"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6647"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6649"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6653"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6659"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6661"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6887"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6889"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6891"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6897"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6899"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6901"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6903"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6905"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6907"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6909"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6911"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6913"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6915"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6917"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6919"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6923"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6935"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6937"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6941"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6943"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6945"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6949"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6951"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6953"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6955"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6957"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6959"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6963"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6965"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6967"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6969"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6971"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6973"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6975"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6977"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6979"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6981"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6983"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6985"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6987"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6989"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6991"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6993"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6995"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6997"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6999"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7003"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient7091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient7103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7161"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7167"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7169"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-61.36487"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient7169);fill-opacity:1"
+ x="0"
+ id="rect5258"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient7167)"
+ y="0"
+ id="rect5260"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient7165)"
+ id="rect5262"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient7163);fill-opacity:1"
+ id="rect5264"
+ height="10"
+ width="16"
+ i:knockout="Off"
+ y="1"
+ x="5" /><svg:rect
+ style="fill:url(#linearGradient7161);fill-opacity:1"
+ id="rect5266"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient7159);fill-opacity:1"
+ id="rect5268"
+ height="2"
+ width="16"
+ i:knockout="Off"
+ y="9"
+ x="5" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5270"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient6959);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path9642"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/battery_discharging_9.svg b/kde/powermanager/pics/battery_discharging_9.svg
new file mode 100644
index 0000000..b5eea78
--- /dev/null
+++ b/kde/powermanager/pics/battery_discharging_9.svg
@@ -0,0 +1,4703 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 11 Build 197, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<svg:svg
+ xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/"
+ xmlns:xap="http://ns.adobe.com/xap/1.0/"
+ xmlns:ns="http://ns.adobe.com/SaveForWeb/1.0/"
+ xmlns:ns0="http://ns.adobe.com/Variables/1.0/"
+ xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:x="adobe:ns:meta/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ i:viewOrigin="-3 14"
+ i:rulerOrigin="3 3"
+ i:pageBounds="-3 19 19 -3"
+ width="22"
+ height="22"
+ viewBox="0 0 22 12"
+ overflow="visible"
+ enable-background="new 0 0 22 12"
+ xml:space="preserve"
+ id="svg2065"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ sodipodi:docname="battery_discharging_9.svg"
+ sodipodi:docbase="/Users/kwwii/Desktop/powermanager_again"
+ version="1.0"
+ inkscape:export-filename="/Users/kwwii/Desktop/powermanager_again/battery_discharging_0.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90"><svg:defs
+ id="defs2113"><svg:linearGradient
+ id="linearGradient4870"
+ inkscape:collect="always"><svg:stop
+ id="stop4872"
+ offset="0"
+ style="stop-color:#fd0;stop-opacity:1;" /><svg:stop
+ id="stop4874"
+ offset="1"
+ style="stop-color:#fd0;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient4882"
+ inkscape:collect="always"><svg:stop
+ id="stop4884"
+ offset="0"
+ style="stop-color:#cf4913;stop-opacity:1;" /><svg:stop
+ id="stop4886"
+ offset="1"
+ style="stop-color:#cf4913;stop-opacity:0;" /></svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient6729">
+ <svg:stop
+ id="stop6731"
+ style="stop-color:#ffbf80;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop6733"
+ style="stop-color:#ff7e00"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient5838">
+ <svg:stop
+ id="stop5840"
+ style="stop-color:#ff8080;stop-opacity:1"
+ offset="0" />
+ <svg:stop
+ id="stop5842"
+ style="stop-color:#cd0000;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient><svg:linearGradient
+ id="linearGradient3291"><svg:stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3293" /><svg:stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3295" /></svg:linearGradient><svg:linearGradient
+ id="linearGradient3311"
+ gradientUnits="userSpaceOnUse"
+ x1="11.9995"
+ y1="2.2495"
+ x2="11.9995"
+ y2="9.7489996">
+ <svg:stop
+ offset="0"
+ style="stop-color:#3cff3c;stop-opacity:1;"
+ id="stop3313" />
+ <svg:stop
+ offset="1"
+ style="stop-color:#008c00"
+ id="stop3315" />
+ <a:midPointStop
+ offset="0"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="0.5"
+ style="stop-color:#99DCC6" />
+ <a:midPointStop
+ offset="1"
+ style="stop-color:#00734D" />
+ </svg:linearGradient><svg:linearGradient
+ inkscape:collect="always"
+ id="linearGradient3043"><svg:stop
+ style="stop-color:white;stop-opacity:0.5029586"
+ offset="0"
+ id="stop3045" /><svg:stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop3047" /></svg:linearGradient>
+ <svg:linearGradient
+ y2="1"
+ x2="1"
+ y1="11"
+ x1="1"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_7_">
+ <svg:stop
+ id="stop2071"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2073"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1"
+ x2="12"
+ y1="11"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_8_">
+ <svg:stop
+ id="stop2078"
+ style="stop-color:#454545"
+ offset="0" />
+ <svg:stop
+ id="stop2080"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#454545"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="1.001"
+ x2="12"
+ y1="9.0010004"
+ x1="12"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_9_">
+ <svg:stop
+ id="stop2085"
+ style="stop-color:#aeaeae;stop-opacity:1;"
+ offset="0" /><svg:stop
+ offset="0.25714287"
+ style="stop-color:#696969;stop-opacity:1;"
+ id="stop3403" />
+ <svg:stop
+ id="stop2087"
+ style="stop-color:#3a3a3a;stop-opacity:1;"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9.7489996"
+ x2="11.9995"
+ y1="2.2495"
+ x1="11.9995"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_10_">
+ <svg:stop
+ id="stop2092"
+ style="stop-color:#80ff80;stop-opacity:1;"
+ offset="0" />
+ <svg:stop
+ id="stop2094"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="4.0430002"
+ x2="1.5"
+ y1="8.0010004"
+ x1="1.5"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_11_">
+ <svg:stop
+ id="stop2099"
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <svg:stop
+ id="stop2101"
+ style="stop-color:#000000"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#FFFFFF"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#000000"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ y2="9"
+ x2="2.0005"
+ y1="3"
+ x1="2.0005"
+ gradientUnits="userSpaceOnUse"
+ id="XMLID_12_">
+ <svg:stop
+ id="stop2106"
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <svg:stop
+ id="stop2108"
+ style="stop-color:#00734D"
+ offset="1" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0" />
+ <a:midPointStop
+ style="stop-color:#99DCC6"
+ offset="0.5" />
+ <a:midPointStop
+ style="stop-color:#00734D"
+ offset="1" />
+ </svg:linearGradient>
+
+ <svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient5544"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,-320)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient5961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6133"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6139"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6141"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,80)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6393"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6395"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6425"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6429"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6431"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6435"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6437"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6441"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6477"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6481"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6491"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6495"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6499"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6501"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6507"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6527"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6537"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6557"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6561"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6563"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6569"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6571"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6573"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6577"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6579"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6581"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6625"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6631"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6633"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6641"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6647"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6649"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6653"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6659"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6661"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6671"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6673"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6677"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-85.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6679"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient6681"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6683"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-80.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6685"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6687"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6887"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6889"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6891"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6893"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6895"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6897"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6899"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6901"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6903"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6905"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6907"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6909"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6911"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6913"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6915"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6917"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6919"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6921"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6923"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6931"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6935"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6937"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6939"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6941"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient6943"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient6945"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6947"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6949"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6951"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6953"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6955"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6957"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6959"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6961"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6963"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6965"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6967"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6969"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6971"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6973"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient6975"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6977"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6979"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient6981"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6983"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6985"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6987"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient6989"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6991"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient6993"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient6995"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6997"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient6999"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7001"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7003"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7005"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7007"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7009"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7011"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7013"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7015"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7017"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7019"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7021"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7023"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7025"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7027"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7029"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7031"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7033"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7035"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7037"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7039"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7041"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7043"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7045"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7047"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7049"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7051"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7053"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7055"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7057"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7059"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7061"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7063"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7065"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7067"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7069"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7071"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7073"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7075"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7077"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7079"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7081"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7083"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7085"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7087"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7089"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient7091"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7093"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7095"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7097"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7099"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7101"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient7103"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7105"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7107"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7109"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7111"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7113"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7115"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7117"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7119"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7121"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7123"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7125"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7127"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7129"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7131"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7133"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7135"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7137"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7139"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7141"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7143"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7145"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7147"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7149"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7151"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7153"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7155"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7157"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7159"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,2.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7161"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7163"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,2.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7165"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7167"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7169"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1"
+ gradientTransform="translate(0,40)" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7171"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7173"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-45.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7175"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7177"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7179"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-40.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7181"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7183"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,-40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7385"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7387"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7389"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,360)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7393"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,359.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7395"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,360)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,360)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,359.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7403"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7405"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,360)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7407"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.355618,-6.03865,-20.42761)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7409"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.194405,0,0,0.194405,-6.03865,-8.832027)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7411"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7413"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7415"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7417"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7419"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7421"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7423"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7425"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7427"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7429"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7431"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7433"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7435"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7437"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4870"
+ id="radialGradient7439"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,2.02823,-74.36463,-80.79706)"
+ cx="96.8349"
+ cy="78.852486"
+ fx="96.8349"
+ fy="78.852486"
+ r="26.26219" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4882"
+ id="linearGradient7441"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.108772,0,0,1.108772,-74.36463,-14.66283)"
+ x1="112.96474"
+ y1="13.498544"
+ x2="102.22598"
+ y2="68.116089" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7443"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7445"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7447"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7449"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7451"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7453"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7455"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7457"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7459"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7461"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7463"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7467"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7471"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7473"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,68.66667,314.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7475"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient7477"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,68.66667,320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7479"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7481"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7483"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7485"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,66.33333,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7487"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient7489"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,66.33333,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7491"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7493"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7495"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7497"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,64,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7499"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7501"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,64,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7503"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7505"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7507"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7509"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,61.66667,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7511"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7513"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,61.66667,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7515"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7517"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7519"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7521"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,59.33333,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7523"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7525"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,59.33333,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7527"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7529"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7531"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7533"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,57,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7535"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7537"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,57,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7539"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7541"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7543"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7545"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,54.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7547"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7549"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,54.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7551"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7553"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7555"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7557"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1.463415,52.33333,34.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7559"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7561"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.888889,0,0,1,52.33333,40)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7563"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,39.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7565"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7567"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,40)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7569"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7571"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,50,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7573"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7575"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7577"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,50,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7579"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7581"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(50,0)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7583"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1.463415,18.66667,314.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7585"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5838"
+ id="linearGradient7587"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.111111,0,0,1,18.66667,320)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7589"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,319.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7591"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7593"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,320)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7595"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1.463415,16.33333,274.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7597"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6729"
+ id="linearGradient7599"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.222223,0,0,1,16.33333,280)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7601"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,279.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7603"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7605"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,280)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7607"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1.463415,14,234.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7609"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7611"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.333334,0,0,1,14,240)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7613"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,239.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7615"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7617"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,240)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7619"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1.463415,11.66667,194.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7621"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7623"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.444445,0,0,1,11.66667,200)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7625"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,199.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7627"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7629"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,200)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7631"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1.463415,9.33333,154.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7633"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.555556,0,0,1,9.33333,160)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,159.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,160)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1.463415,7,114.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7645"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.666667,0,0,1,7,120)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,119.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,120)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1.463415,4.66667,74.9024)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1.5"
+ y1="8.0010004"
+ x2="1.5"
+ y2="4.0430002" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.777778,0,0,1,4.66667,80)"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7661"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,79.75)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7663"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7665"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(0,80)"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /><svg:radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3291"
+ id="radialGradient7667"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,0.197802,0,92.82166)"
+ cx="63.912209"
+ cy="115.70919"
+ fx="63.912209"
+ fy="115.7093"
+ r="63.912209" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3043"
+ id="linearGradient7669"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.463415,0,-5.0976)"
+ x1="6.8666668"
+ y1="11.006487"
+ x2="6.8666668"
+ y2="9.6329269" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7671"
+ gradientUnits="userSpaceOnUse"
+ x1="1.5"
+ y1="4.0419998"
+ x2="1.5"
+ y2="8" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3311"
+ id="linearGradient7673"
+ gradientUnits="userSpaceOnUse"
+ x1="13.633333"
+ y1="1.5664186"
+ x2="13.633333"
+ y2="6" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_9_"
+ id="linearGradient7675"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.25,0,-0.25)"
+ x1="12"
+ y1="9.0010004"
+ x2="12"
+ y2="1.001" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7677"
+ gradientUnits="userSpaceOnUse"
+ x1="12"
+ y1="11"
+ x2="12"
+ y2="1" /><svg:linearGradient
+ inkscape:collect="always"
+ xlink:href="#XMLID_8_"
+ id="linearGradient7679"
+ gradientUnits="userSpaceOnUse"
+ x1="1"
+ y1="11"
+ x2="1"
+ y2="1" /></svg:defs><sodipodi:namedview
+ inkscape:window-height="825"
+ inkscape:window-width="823"
+ inkscape:pageshadow="2"
+ inkscape:pageopacity="0.0"
+ guidetolerance="10.0"
+ gridtolerance="10000"
+ objecttolerance="10.0"
+ borderopacity="1.0"
+ bordercolor="#666666"
+ pagecolor="#ffffff"
+ id="base"
+ height="22px"
+ showgrid="false"
+ inkscape:grid-points="true"
+ inkscape:grid-bbox="false"
+ showborder="true"
+ inkscape:zoom="1"
+ inkscape:cx="20"
+ inkscape:cy="-61.36487"
+ inkscape:window-x="526"
+ inkscape:window-y="24"
+ inkscape:current-layer="svg2065"
+ borderlayer="true"
+ inkscape:showpageshadow="false"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <svg:metadata
+ id="metadata2067">
+ <ns0:variableSets>
+ <ns0:variableSet
+ varSetName="binding1"
+ locked="none">
+ <ns0:variables />
+ <ns0:sampleDataSets />
+ </ns0:variableSet>
+ </ns0:variableSets>
+ <ns:sfw>
+ <ns:slices />
+ <ns:sliceSourceBounds
+ y="2"
+ x="-3"
+ width="22"
+ height="12"
+ bottomLeftOrigin="true" />
+ </ns:sfw>
+<xpacket /><x:xmpmeta
+ x:xmptk="XMP toolkit 3.0-29, framework 1.6">
+
+<svg:metadata
+ id="metadata2115"><rdf:RDF>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <xap:CreateDate>2006-11-06T19:51:02Z</xap:CreateDate>
+ <xap:ModifyDate>2006-11-06T19:51:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li
+ rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>140</xapGImg:height>
+ <xapGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
+AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
+DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
+Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAjAEAAwER
+AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
+AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
+UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
+1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
+qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
+obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
+0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
++DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FUh8+/8oN5i/wC2
+Ze/9Q74q/ObJK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FXYq/TfIq7FUi8+/8oN5i/wC2Ze/9Q74q/OWmSV6Z+XP5SWHmzQH1S41CW1dbh4PTjRWFEVWr
+Un/KxdTre0ThnwgXsyn/AKF00j/q8XH/ACKT+uGnE/lqX80O/wChdNI/6vFx/wAik/rjS/y1L+aH
+f9C6aR/1eLj/AJFJ/XGl/lqX80O/6F00j/q8XH/IpP640v8ALUv5od/0LppH/V4uP+RSf1xpf5al
+/NDv+hdNI/6vFx/yKT+uNL/LUv5od/0LppH/AFeLj/kUn9caX+WpfzQ7/oXTSP8Aq8XH/IpP640v
+8tS/mh3/AELppH/V4uP+RSf1xpf5al/NDv8AoXTSP+rxcf8AIpP640v8tS/mh3/Qumkf9Xi4/wCR
+Sf1xpf5al/NDv+hdNI/6vFx/yKT+uNL/AC1L+aHf9C6aR/1eLj/kUn9caX+WpfzQ7/oXTSP+rxcf
+8ik/rjS/y1L+aHf9C6aR/wBXi4/5FJ/XGl/lqX80O/6F00j/AKvFx/yKT+uNL/LUv5od/wBC6aR/
+1eLj/kUn9caX+WpfzQ7/AKF00j/q8XH/ACKT+uNL/LUv5od/0LppH/V4uP8AkUn9caX+WpfzQ7/o
+XTSP+rxcf8ik/rjS/wAtS/mh3/Qumkf9Xi4/5FJ/XGl/lqX80O/6F00j/q8XH/IpP640v8tS/mh3
+/Qumkf8AV4uP+RSf1xpf5al/NDv+hdNI/wCrxcf8ik/rjS/y1L+aHf8AQumkf9Xi4/5FJ/XGl/lq
+X80ML/M38sbLyfZWVxb3sl2buR42WRFULxUGoocDnaDXnOSCKp59TF2b9N8irsVSLz5/yg3mL/tm
+Xn/UO+Kvzp45JX0P+Qgp5Il/5jZf+IR4Q8x2x/fD+r+t6Ri6p2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5J/zkQK6PpH/MRJ/wAQGJd32L9Uvc8L44HoX6Z5FXYq
+kXnv/lB/MP8A2zLz/qHfFX528ckr6C/IpwnkmQf8vsp/4SPCHl+2P77/ADf1vRfWXF1Vu9ZcVt3r
+Litu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3
+rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitu9ZcVt3rLitvKP+cgmD6PpPtcSf8QxLu+xPql7n
+h/HA9E9s/wChr/zR/wB9aZ/0jyf9VcFK7/oa/wDNH/fWmf8ASPJ/1VxpVC+/5yc/MjVbK40u6i04
+W1/G9rOUgcN6cylG4kymho22NK8f44Ve6/kvJw8nsP8Al7lP/CphDyvbR/fD+qP0s8+sYXU276xi
+tu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK2
+76xitu+sYrbvrGK276xitu+sYrbvrGK276xitu+sYrbvrGK28y/PN+ekaZ7XD/8AEMBd52GfVL3P
+G+OB6RV44qi7LR9VvlZrGynulQ0doYnkAJ7HiDTFqyZoQ+qQHvKMt/K3mYXEROkXoAdSSbeXx/1c
+aYfnMP8APj8wp/4U8z/9Wi9/6Rpf+acaX85h/nx+YetfljbXun+WjBeW8ttMbiRvTmRo2oQtDRgD
+2yQeY7YyxlmuJBHD0+LLfrHvi6q3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9
+Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPf
+Fbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3nv5yPz0jT/a4b/iBwF33YJ9cvc8n44HplXjir0/8
+opPT0/UPeZPwU4Q8x2+fXH3Fn/1r3yToOJ31r3xXiUJ7irjftixMlP6x74ot31j3xW3fWPfFbd9Y
+98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfF
+bd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98Vt31j3xW3fWPfFbd9Y98VthH5qvz0q
+z9pz/wAQOAvQ+z59cvcHmfHIvUKvHFXoP5bSelp937zD8FyUXlPaI1OHuLMPrfvkqed43fW/fGl4
+1OS6HLr2w0xM1n1oeONI4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w
+760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760P
+HGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4w760PHGl4
+w760PHGl4wxT8xJPU0u270n/AONGyMg9J7OSuc/cGAccg9Yq8cVZl5Kcpp89DSsx/wCIrk4PH+03
+1w9xZD67eJyx5ii7128TitFozE98bWi71T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja07
+1T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+
+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tO9U+ONrTvVPjja071T442tMf86Ny0yL2mH/E
+Gyub0/sz9c/cGG8cg9gq8cVZT5Xbhp8nvM3/ABFclEvJe0YucPcU49X3yVvOcLvV98bXhbEmNo4X
+epja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xep
+ja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja
+8KT+aTy01PaZf+ItkZPSezY9c/cGK8ci9arcMVT/AEM8NPPvK/8AxFMLy3b4vJH3I/1cbef4Xerj
+a8K9JdsbQYt+phtHC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepj
+a8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8
+LvUxteF3qY2vCl2vnlpw9pl/4i+AvQezwqcvcx7hgerVeOKplYXUEdp6TvwYSM24JqGCjsD/AC4l
+0vaegyZ5AxrYIlbu3ZgqyqSTQCj9T/scFOt/kXN5fNR/ScPg33f240v8i5v6PzRcE/OJXGwapFfY
+0/hi67VaWWGXDLmqepjbj8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71Mb
+Xhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXh
+d6mNrwu9TG14Xepja8KF1U8rD5Sp/wARfCHe9giskvckvHF6hW44q7jiq+3X/SIv9df14qs44qmU
+DcbaEf5J/wCJtkS8r2yP33wC71MFup4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8Lv
+UxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUx
+teF3qY2vC71MbXhd6mNrwu9TG14Vl2eVi3/GVP8AiL5KLu+xB+8l7ku44XpX3R/g3yh/1Y9P/wCk
+WH/mnIq7/BvlD/qx6f8A9IsP/NOKpV5s8p+VYfK2szQ6NYxyx2Ny8ciW0KsrLCxDKQtQQcVfGPHJ
+KqI5C0r06ZCTzHaw/ffALvUyNus4Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxt
+eF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF3qY2vC71MbXhd6mNrwu9TG14Xepja8LvUxteF
+3qY2vC71MbXhd6mNrwu9TG14VOR2Yha7bkjtUf7eTg7fscVkP9X9IW8ck9G++8irsVSjzh/yiWt/
+8wF1/wAmWxV8Q8MkqlJsxGVz5vN9qf3vwW1OQdc6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVO
+KuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q6pxV1TirqnFXVOKuqcVdU4q3GKyfQf1jLIO07J/vD/V/
+SFbhk3oX3rkVdiqUeb/+UT1r/mAuv+TLYq+J+OTVCzikn0ZVPm832p/e/BTyDrnYq7FXYq7FXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVS3FZf9if1jLIO07J/vD/V/SEVxyx6
+F935BXYqlPm7/lFNa/5gLr/ky2KvinJq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY
+q7FXYq7FXYq7FXYq7FXYq7FXYq+7MgrsVSrzXw/wtrHOvD6jc8qdaei1aVxV8b/7gv8Al6/5J5NX
+f7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPF
+Xf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/y
+TxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9
+f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV3+4L/AJev+SeKu/3Bf8vX/JPFXf7gv+Xr/knirv8AcF/y
+9f8AJPFXf7gv+Xr/AJJ4q7/cF/y9f8k8Vd/uC/5ev+SeKu/3Bf8AL1/yTxV//9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+<cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></svg:metadata></x:xmpmeta>
+ <xpacket />
+ </svg:metadata>
+
+ <svg:rect
+ style="fill:url(#linearGradient7679);fill-opacity:1"
+ x="0"
+ id="rect5226"
+ height="6"
+ width="2"
+ i:knockout="Off"
+ y="3" /><svg:rect
+ style="fill:url(#linearGradient7677)"
+ y="0"
+ id="rect5228"
+ height="12"
+ width="20"
+ i:knockout="Off"
+ x="2"
+ ry="1"
+ rx="1" /><svg:rect
+ style="fill:url(#linearGradient7675)"
+ id="rect5230"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient7673);fill-opacity:1"
+ id="rect5232"
+ height="10"
+ width="18"
+ i:knockout="Off"
+ y="1"
+ x="3" /><svg:rect
+ style="fill:url(#linearGradient7671);fill-opacity:1"
+ id="rect5234"
+ height="3.9579999"
+ width="1"
+ i:knockout="Off"
+ y="4.0419922"
+ x="1" /><svg:rect
+ style="fill:url(#linearGradient7669);fill-opacity:1"
+ id="rect5236"
+ height="2"
+ width="18"
+ i:knockout="Off"
+ y="9"
+ x="3" /><svg:rect
+ style="opacity:0.1;fill:white;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+ id="rect5238"
+ width="1"
+ height="4"
+ x="2"
+ y="4" /><svg:path
+ sodipodi:type="arc"
+ style="opacity:0.38139535;fill:url(#radialGradient7667);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1"
+ id="path5240"
+ sodipodi:cx="63.912209"
+ sodipodi:cy="115.70919"
+ sodipodi:rx="63.912209"
+ sodipodi:ry="12.641975"
+ d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z"
+ transform="matrix(0.172079,0,0,-8.975362e-2,0,26.2507)" /></svg:svg> \ No newline at end of file
diff --git a/kde/powermanager/pics/processor.png b/kde/powermanager/pics/processor.png
new file mode 100644
index 0000000..1405687
--- /dev/null
+++ b/kde/powermanager/pics/processor.png
Binary files differ
diff --git a/kde/powermanager/pics/processor.svg b/kde/powermanager/pics/processor.svg
new file mode 100644
index 0000000..54a7e8e
--- /dev/null
+++ b/kde/powermanager/pics/processor.svg
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="22"
+ height="22"
+ id="svg1872"
+ sodipodi:version="0.32"
+ inkscape:version="0.44"
+ version="1.0"
+ sodipodi:docbase="/home/kwwii/Desktop/powermanager"
+ sodipodi:docname="processor.svg"
+ inkscape:export-filename="/home/kwwii/Desktop/powermanager/processor.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs1874">
+ <linearGradient
+ id="linearGradient6745">
+ <stop
+ style="stop-color:#323232;stop-opacity:1;"
+ offset="0"
+ id="stop6747" />
+ <stop
+ style="stop-color:#f0f0f0;stop-opacity:1;"
+ offset="1"
+ id="stop6749" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4872">
+ <stop
+ style="stop-color:#f0f0f0;stop-opacity:1;"
+ offset="0"
+ id="stop4874" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop4876" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4864">
+ <stop
+ style="stop-color:white;stop-opacity:1;"
+ offset="0"
+ id="stop4866" />
+ <stop
+ style="stop-color:white;stop-opacity:0;"
+ offset="1"
+ id="stop4868" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4872"
+ id="radialGradient6980"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(2.004249,0,0,1.820427,-6.602678,0.190761)"
+ cx="4.9607177"
+ cy="2.564851"
+ fx="4.9607177"
+ fy="2.564851"
+ r="9.25" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6745"
+ id="linearGradient6982"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.085659,0,0,0.741933,-0.941925,2.756039)"
+ x1="18.70451"
+ y1="16.786016"
+ x2="8.5717449"
+ y2="2.0000215" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4864"
+ id="radialGradient6984"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.890042,0,0,0.825481,-9.790136,1.119839)"
+ cx="11.000002"
+ cy="12.045759"
+ fx="11.000002"
+ fy="12.045759"
+ r="9.25" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6745"
+ id="linearGradient6986"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.083157,0,0,0.8881,-0.914393,0.722722)"
+ x1="18.70451"
+ y1="16.786016"
+ x2="8.5717449"
+ y2="2.0000215" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="5.7272727"
+ inkscape:cx="7.2063492"
+ inkscape:cy="8.3968254"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ width="22px"
+ height="22px"
+ inkscape:window-width="808"
+ inkscape:window-height="575"
+ inkscape:window-x="32"
+ inkscape:window-y="56" />
+ <metadata
+ id="metadata1877">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g6961"
+ transform="translate(0,1)">
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="2.7856784"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect6794"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="6.2901516"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect6796"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="9.7946253"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect6798"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="13.299097"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect6800"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="16.803576"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect6802"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <path
+ id="rect6771"
+ d="M 3.9774686,4.4485852 L 0.44907562,13.235889 L 0.44907562,14.997988 L 0.7544173,14.997988 L 0.7544173,15.276214 C 0.7544173,15.974402 1.2580706,16.551414 1.9079305,16.551415 C 2.5577901,16.551415 3.0953706,15.974402 3.0953705,15.276214 L 3.0953705,14.997988 L 4.2488836,14.997988 L 4.2488836,15.276214 C 4.2488836,15.974402 4.7864643,16.551414 5.4363234,16.551415 C 6.0861832,16.551415 6.5898365,15.974402 6.5898365,15.276214 L 6.5898365,14.997988 L 7.7772767,14.997988 L 7.7772767,15.276214 C 7.7772767,15.974402 8.3148569,16.551414 8.9647169,16.551415 C 9.6145761,16.551415 10.118231,15.974402 10.118231,15.276214 L 10.118231,14.997988 L 11.30567,14.997988 L 11.30567,15.276214 C 11.30567,15.974402 11.809324,16.551414 12.459185,16.551415 C 13.109042,16.551415 13.646624,15.974402 13.646624,15.276214 L 13.646624,14.997988 L 14.800136,14.997988 L 14.800136,15.276214 C 14.800136,15.974402 15.337718,16.551414 15.987576,16.551415 C 16.637435,16.551415 17.141088,15.974402 17.141088,15.276214 L 17.141088,14.997988 L 18.32853,14.997988 L 18.32853,15.276214 C 18.32853,15.974402 18.832182,16.551414 19.482041,16.551415 C 20.131901,16.551415 20.669481,15.974402 20.669481,15.276214 L 20.669481,14.997988 L 21.551579,14.997988 L 21.551579,13.235889 L 18.023187,4.4485852 L 3.9774686,4.4485852 z "
+ style="opacity:1;fill:black;fill-opacity:0;stroke:#323232;stroke-width:0.89749092;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="0.77808517"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect4896"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="4.2825584"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect4898"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="7.7870321"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect4904"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="11.291505"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect4906"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="14.79598"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect4908"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <rect
+ rx="2.0653524"
+ ry="1.6258657"
+ y="13.225575"
+ x="18.300453"
+ height="3.9719493"
+ width="2.3380265"
+ id="rect4910"
+ style="opacity:1;fill:#ffee03;fill-opacity:1;stroke:#323232;stroke-width:0.57388383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.4256757" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="rect1885"
+ d="M 3.9672831,6.2083298 L 18.033363,6.2083298 L 21.549881,15.000377 L 0.45076303,15.000377 L 3.9672831,6.2083298 z "
+ style="opacity:1;fill:#323232;fill-opacity:1;stroke:#323232;stroke-width:0.50761253;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="4.4497476"
+ x="3.9672832"
+ height="1.7585821"
+ width="14.066079"
+ id="rect1883"
+ style="opacity:1;fill:#323232;fill-opacity:1;stroke:#323232;stroke-width:0.50761253;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path4888"
+ d="M 3.9672831,4.4497479 L 0.45076303,13.242659 L 1.146741,13.242659 L 3.9672831,6.2083298 L 3.9672831,4.4497479 z M 18.033363,4.4497479 L 18.033363,6.2083298 L 20.853905,13.242659 L 21.549881,13.242659 L 18.033363,4.4497479 z "
+ style="opacity:1;fill:#696969;fill-opacity:1;stroke:#323232;stroke-width:0.50761253;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ id="path1888"
+ d="M 3.967283,4.4497479 L 18.033363,4.4497479 L 21.549881,13.241796 L 0.45076272,13.241796 L 3.967283,4.4497479 z "
+ style="fill:url(#radialGradient6980);fill-opacity:1;stroke:url(#linearGradient6982);stroke-width:0.50761253;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="13.274253"
+ x="0.47508472"
+ height="2.1050367"
+ width="21.050474"
+ id="rect1880"
+ style="fill:url(#radialGradient6984);fill-opacity:1;stroke:url(#linearGradient6986);stroke-width:0.55472744;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+ </g>
+</svg>
diff --git a/kde/serviceconfig/pics/16x16/daemons.png b/kde/serviceconfig/pics/16x16/daemons.png
new file mode 100644
index 0000000..1705fc8
--- /dev/null
+++ b/kde/serviceconfig/pics/16x16/daemons.png
Binary files differ
diff --git a/kde/serviceconfig/pics/hi32-app-daemons.png b/kde/serviceconfig/pics/hi32-app-daemons.png
new file mode 100644
index 0000000..0edb1cc
--- /dev/null
+++ b/kde/serviceconfig/pics/hi32-app-daemons.png
Binary files differ
diff --git a/kde/serviceconfig/pics/laserwarn.png b/kde/serviceconfig/pics/laserwarn.png
new file mode 100644
index 0000000..f14986d
--- /dev/null
+++ b/kde/serviceconfig/pics/laserwarn.png
Binary files differ
diff --git a/kde/userconfig/pics/16x16/userconfig.png b/kde/userconfig/pics/16x16/userconfig.png
new file mode 100644
index 0000000..9625ccc
--- /dev/null
+++ b/kde/userconfig/pics/16x16/userconfig.png
Binary files differ
diff --git a/kde/userconfig/pics/hi16-encrypted.png b/kde/userconfig/pics/hi16-encrypted.png
new file mode 100644
index 0000000..b4bf017
--- /dev/null
+++ b/kde/userconfig/pics/hi16-encrypted.png
Binary files differ
diff --git a/kde/userconfig/pics/hi32-group.png b/kde/userconfig/pics/hi32-group.png
new file mode 100644
index 0000000..23d6f66
--- /dev/null
+++ b/kde/userconfig/pics/hi32-group.png
Binary files differ
diff --git a/kde/userconfig/pics/hi32-identity.png b/kde/userconfig/pics/hi32-identity.png
new file mode 100644
index 0000000..afc3ab5
--- /dev/null
+++ b/kde/userconfig/pics/hi32-identity.png
Binary files differ
diff --git a/kde/userconfig/pics/hi32-password.png b/kde/userconfig/pics/hi32-password.png
new file mode 100644
index 0000000..655c964
--- /dev/null
+++ b/kde/userconfig/pics/hi32-password.png
Binary files differ
diff --git a/kde/userconfig/pics/hi32-user.png b/kde/userconfig/pics/hi32-user.png
new file mode 100644
index 0000000..8f73aec
--- /dev/null
+++ b/kde/userconfig/pics/hi32-user.png
Binary files differ
diff --git a/kde/wineconfig/pics/16x16/wineconfig.png b/kde/wineconfig/pics/16x16/wineconfig.png
new file mode 100644
index 0000000..7d6b40e
--- /dev/null
+++ b/kde/wineconfig/pics/16x16/wineconfig.png
Binary files differ
diff --git a/kde/wineconfig/pics/16x16/wineconfig.svg b/kde/wineconfig/pics/16x16/wineconfig.svg
new file mode 100644
index 0000000..b79faf0
--- /dev/null
+++ b/kde/wineconfig/pics/16x16/wineconfig.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ version="1.0"
+ width="48"
+ height="48"
+ id="svg22509">
+ <defs
+ id="defs22511" />
+ <g
+ id="layer1">
+ <g
+ transform="matrix(6.614026e-2,0,0,6.614026e-2,23.57494,24.26456)"
+ id="g22526">
+ <g
+ transform="translate(-404.6182,-509.8812)"
+ id="g11924">
+ <path
+ d="M 320.28415,294.71524 C 302.12118,346.41597 286.86665,399.57092 275.875,454.85732 C 270.30071,487.60345 272.03416,523.04105 277.22073,555.78719 C 281.2387,581.8239 298.41872,594.69854 320.28414,602.8878 C 345.07806,607.86225 366.26816,598.42143 387.57073,589.43048 C 448.25458,531.68994 484.10672,449.1177 512.72377,359.31036 C 509.28389,343.4312 500.39902,328.12757 479.08048,322.9756 C 449.89862,321.13261 423.99325,325.84259 398.33658,331.05 C 370.14588,322.93282 344.92504,313.47535 320.28415,294.71524 z "
+ style="fill:#a60033;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.25pt;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path9229" />
+ <path
+ d="M 372.76768,150.72195 C 436.92175,170.43677 497.91319,190.21936 558.47866,220.7 C 513.21157,358.93663 473.50299,559.90152 368.73048,604.23353 C 330.8273,613.39549 293.05338,597.80208 278.56646,567.89877 C 248.09144,482.84179 314.45201,283.09929 372.76768,150.72195 z "
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:15.4119997;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path1350" />
+ <path
+ d="M 321.62988,285.29512 C 342.43482,316.64859 374.03256,329.10119 409.10244,328.35854 C 489.13149,315.98935 517.35537,314.4253 515.41524,363.34756"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:15.31200027;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path3100" />
+ <path
+ d="M 431.97989 806.09326 A 150.72195 26.914635 0 1 1 130.53598,806.09326 A 150.72195 26.914635 0 1 1 431.97989 806.09326 z"
+ transform="matrix(0.936355,0.351057,-0.351057,0.936355,265.8961,-43.39585)"
+ style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:15.31200027;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4850" />
+ <path
+ d="M 274.52926,562.51585 C 292.93894,584.84886 300.19467,727.34615 197.82256,767.06707 L 306.82683,814.16767 C 267.11729,731.62249 312.57755,609.41308 370.07621,605.57926 C 310.86206,610.96805 298.81425,595.97371 274.52926,562.51585 z "
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:14.21199989;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path5727" />
+ </g>
+ <path
+ d="M 114.83421,-123.65617 C 110.70662,-52.728825 231.18146,-55.493285 312.65677,-57.715315 C 294.69575,18.085265 283.11684,97.076905 223.83848,152.21882 C 148.92208,164.14898 41.634572,154.55539 7.1756821,88.969445 C 48.299602,49.878035 95.797142,-33.679755 114.83421,-123.65617 z "
+ style="fill:#40dd38;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path12847" />
+ <path
+ d="M 0.10128211,95.006635 C 37.691372,174.00836 155.82048,171.93536 218.45555,161.63894 C 178.96282,234.74806 140.46928,281.44214 81.190922,336.58406 C 6.2745221,348.51422 -67.369698,318.73465 -101.82859,253.1487 C -60.704668,214.05729 -18.935788,184.98304 0.10128211,95.006635 z "
+ style="fill:#f3ef2d;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path13722" />
+ <path
+ d="M -12.973098,102.38955 C -68.908908,132.16528 -134.37248,113.50025 -147.58347,39.906025 C -152.47753,-3.352935 -148.88358,-45.782585 -135.47188,-103.4702 L -134.61822,-109.51899 C -147.3714,-89.605505 -157.51337,-74.080805 -167.61822,-51.518985 L -236.61822,-52.518985 L -249.61822,-2.518985 L -184.61822,20.481015 C -186.0155,38.942245 -183.82539,52.228695 -182.61822,65.481015 L -234.61822,109.48101 L -207.61822,155.48101 L -149.61822,130.48101 C -137.14072,141.16268 -130.88217,146.99031 -117.61822,152.48101 L -124.61822,210.48101 L -83.618218,223.48101 C -55.108848,196.54981 -23.847578,153.13007 -12.973098,102.38955 z "
+ style="fill:#639de2;fill-opacity:1;fill-rule:evenodd;stroke:#1b63e6;stroke-width:6.11199999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path15517" />
+ </g>
+ </g>
+</svg>
diff --git a/kde/wineconfig/pics/32-wine.png b/kde/wineconfig/pics/32-wine.png
new file mode 100644
index 0000000..e417ba1
--- /dev/null
+++ b/kde/wineconfig/pics/32-wine.png
Binary files differ
diff --git a/kde/wineconfig/pics/48-wine.png b/kde/wineconfig/pics/48-wine.png
new file mode 100644
index 0000000..cca8510
--- /dev/null
+++ b/kde/wineconfig/pics/48-wine.png
Binary files differ
diff --git a/kde/wineconfig/pics/kdewinewizard.png b/kde/wineconfig/pics/kdewinewizard.png
new file mode 100644
index 0000000..81e91fe
--- /dev/null
+++ b/kde/wineconfig/pics/kdewinewizard.png
Binary files differ
diff --git a/modules/ixf86misc.c b/modules/ixf86misc.c
new file mode 100644
index 0000000..90e330e
--- /dev/null
+++ b/modules/ixf86misc.c
@@ -0,0 +1,516 @@
+/*#########################################################################
+# ixf86misc.c - #
+# ------------------------------ #
+# copyright : (C) 2004-2007 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+# A small binding for playing with the gamma and RandR settings under #
+# XFree86. #
+# #
+# Simon Edwards <simon@simonzone.com> #
+#########################################################################*/
+
+#include "Python.h"
+#include <X11/Xlib.h>
+#include <X11/extensions/xf86vmode.h>
+#include <X11/extensions/Xrandr.h>
+#include <X11/extensions/scrnsaver.h>
+
+/***************************************************************************
+ XOpenDisplay(displayname)
+
+ Args:
+ displayname - String
+
+ Returns:
+ opaque display reference.
+*/
+static void ixf86misc_destroydisplay(void *ptr) {
+ if(ptr!=NULL) {
+ XCloseDisplay((Display *)ptr);
+ }
+}
+
+static PyObject *ixf86misc_xopendisplay(PyObject *self, PyObject *args) {
+ Display *dpy;
+ char *displayname = NULL;
+
+ if(!PyArg_ParseTuple(args, "z", &displayname)) {
+ return NULL;
+ }
+
+ dpy = XOpenDisplay(displayname);
+ if(dpy==NULL) {
+ return Py_BuildValue("");
+ } else {
+ return PyCObject_FromVoidPtr((void *)dpy,ixf86misc_destroydisplay);
+ }
+}
+
+/***************************************************************************
+ DefaultScreen(display)
+
+ Args:
+ display - display object.
+ Returns:
+
+ screen number - integer
+*/
+static PyObject *ixf86misc_defaultscreen(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ int screen;
+
+ if(!PyArg_ParseTuple(args, "O", &pydisplay)) {
+ return NULL;
+ }
+ screen = DefaultScreen((Display *)PyCObject_AsVoidPtr(pydisplay));
+ return Py_BuildValue("i", screen);
+}
+
+/***************************************************************************
+ ScreenCount(display)
+
+ Args:
+ display - display object.
+ Returns:
+
+ number of screens - integer
+*/
+static PyObject *ixf86misc_screencount(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ int count;
+
+ if(!PyArg_ParseTuple(args, "O", &pydisplay)) {
+ return NULL;
+ }
+ count = ScreenCount((Display *)PyCObject_AsVoidPtr(pydisplay));
+ return Py_BuildValue("i", count);
+}
+
+/***************************************************************************
+ RootWindow(display,screennumber)
+
+*/
+static PyObject *ixf86misc_rootwindow(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ int screen = 0;
+ Drawable pydrawable;
+
+ if(!PyArg_ParseTuple(args, "Oi", &pydisplay, &screen)) {
+ return NULL;
+ }
+
+ pydrawable = RootWindow((Display *)PyCObject_AsVoidPtr(pydisplay),screen);
+ return Py_BuildValue("l",pydrawable);
+}
+
+/***************************************************************************
+
+*/
+static PyObject *ixf86misc_getgamma(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ int screen = 0;
+ XF86VidModeGamma gamma;
+
+ if(!PyArg_ParseTuple(args, "Oi", &pydisplay, &screen)) {
+ return NULL;
+ }
+
+ if(!XF86VidModeGetGamma((Display *)PyCObject_AsVoidPtr(pydisplay), screen, &gamma)) {
+ /* FIXME set an exception? */
+ return NULL;
+ }
+
+ return Py_BuildValue("(fff)", gamma.red, gamma.green, gamma.blue);
+}
+
+/***************************************************************************
+
+*/
+static PyObject *ixf86misc_setgamma(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Display *display;
+ int screen = 0;
+ XF86VidModeGamma gamma;
+ float red,green,blue;
+
+ if(!PyArg_ParseTuple(args, "Oifff", &pydisplay, &screen, &red, &green, &blue)) {
+ return NULL;
+ }
+
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+
+ if(!XF86VidModeGetGamma(display, screen, &gamma)) {
+ return NULL;
+ }
+
+ gamma.red = red;
+ gamma.green = green;
+ gamma.blue = blue;
+ if(!XF86VidModeSetGamma(display, screen, &gamma)) {
+ /* FIXME set an exception? */
+ return NULL;
+ }
+ XFlush(display);
+ return Py_BuildValue("");
+}
+
+/***************************************************************************
+
+XRRQueryExtension (Display *dpy,
+ int *event_basep, int *error_basep);
+*/
+static PyObject *ixf86misc_xrrqueryextension(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Display *display;
+ int event_basep, error_basep;
+
+ if(!PyArg_ParseTuple(args, "O", &pydisplay)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+
+ Bool rc = XRRQueryExtension(display, &event_basep, &error_basep);
+ return Py_BuildValue("(iii)",(int)rc, event_basep, error_basep);
+}
+
+/***************************************************************************
+ XRRScreenConfiguration *XRRGetScreenInfo(Display *dpy,Drawable d)
+*/
+static void ixf86misc_destroyxrrscreenconfig(void *ptr) {
+ if(ptr!=NULL) {
+ XRRFreeScreenConfigInfo((XRRScreenConfiguration *)ptr);
+ }
+}
+static PyObject *ixf86misc_xrrgetscreeninfo(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Drawable pydrawable;
+ XRRScreenConfiguration *xrrconfig;
+
+ if(!PyArg_ParseTuple(args, "Ol", &pydisplay, &pydrawable)) {
+ return NULL;
+ }
+
+ xrrconfig = XRRGetScreenInfo((Display *)PyCObject_AsVoidPtr(pydisplay), pydrawable);
+
+ if(xrrconfig==NULL) {
+ return Py_BuildValue("");
+ } else {
+ return PyCObject_FromVoidPtr((void *)xrrconfig,ixf86misc_destroyxrrscreenconfig);
+ }
+}
+
+/***************************************************************************
+ SizeID XRRConfigCurrentConfiguration(XRRScreenConfiguration *config)
+*/
+static PyObject *ixf86misc_xrrconfigcurrentconfiguration(PyObject *self, PyObject *args) {
+ PyObject *pyconfig = NULL;
+ Rotation currentrotation;
+ SizeID currentsize;
+
+ if(!PyArg_ParseTuple(args, "O", &pyconfig)) {
+ return NULL;
+ }
+ currentsize = XRRConfigCurrentConfiguration((XRRScreenConfiguration *)PyCObject_AsVoidPtr(pyconfig), &currentrotation);
+ return Py_BuildValue("(ll)", (long)currentsize, (long)currentrotation);
+}
+
+/***************************************************************************
+ XRRRotations(display,screen)
+*/
+static PyObject *ixf86misc_xrrrotations(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Display *display;
+ int screen = 0;
+ Rotation currentrotation,availablerotations;
+
+ if(!PyArg_ParseTuple(args, "Oi", &pydisplay, &screen)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+ availablerotations = XRRRotations(display, screen, &currentrotation);
+ return Py_BuildValue("l", (long)availablerotations);
+}
+
+/***************************************************************************
+ XRRSizes(display,screen)
+*/
+static PyObject *ixf86misc_xrrsizes(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ PyObject *sizelist,*item;
+ Display *display;
+ XRRScreenSize *sizes;
+ int screen = 0;
+ int numSizes;
+ int i;
+
+ if(!PyArg_ParseTuple(args, "Oi", &pydisplay, &screen)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+
+ sizelist = PyList_New(0);
+ sizes = XRRSizes(display, screen, &numSizes);
+ for(i = 0; i < numSizes; i++) {
+ item = Py_BuildValue("(iiii)",sizes[i].width, sizes[i].height,sizes[i].mwidth, sizes[i].mheight);
+ PyList_Append(sizelist, item);
+ }
+
+ return sizelist;
+}
+
+/***************************************************************************
+ short XRRConfigCurrentRate(config)
+*/
+static PyObject *ixf86misc_xrrconfigcurrentrate(PyObject *self, PyObject *args) {
+ PyObject *pyconfig = NULL;
+ int rate;
+
+ if(!PyArg_ParseTuple(args, "O", &pyconfig)) {
+ return NULL;
+ }
+ rate = XRRConfigCurrentRate((XRRScreenConfiguration *)PyCObject_AsVoidPtr(pyconfig));
+ return Py_BuildValue("i", (int)rate);
+}
+
+/***************************************************************************
+
+*/
+static PyObject *ixf86misc_xrrrates(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ PyObject *ratelist,*item;
+ Display *display;
+ int numrates;
+ int size;
+ int screen = 0;
+ int i;
+ short *rates;
+
+ if(!PyArg_ParseTuple(args, "Oii", &pydisplay, &screen,&size)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+ rates = XRRRates(display, screen, (SizeID)size, &numrates);
+
+ ratelist = PyList_New(0);
+ for(i = 0; i < numrates; i++) {
+ item = Py_BuildValue("i",(int)rates[i]);
+ PyList_Append(ratelist, item);
+ }
+ return ratelist;
+}
+
+/***************************************************************************
+Time XRRConfigTimes( XRRScreenConfiguration *config, Time *config_timestamp )
+*/
+
+static PyObject *ixf86misc_xrrconfigtimes(PyObject *self, PyObject *args) {
+ PyObject *pyconfig = NULL;
+ int rate;
+ Time ts,ts2;
+
+ if(!PyArg_ParseTuple(args, "O", &pyconfig)) {
+ return NULL;
+ }
+ ts2 = XRRConfigTimes((XRRScreenConfiguration *)PyCObject_AsVoidPtr(pyconfig),&ts);
+ return Py_BuildValue("l", (long)ts);
+}
+
+/***************************************************************************
+status = XRRSetScreenConfigAndRate(display, config, window, newsize, newrotation, newrefresh, currenttime)
+*/
+static PyObject *ixf86misc_xrrsetscreenconfigandrate(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Display *display = NULL;
+ PyObject *pyconfig = NULL;
+ Drawable pydrawable;
+ Rotation newrotation;
+ long newrefresh;
+// Time currenttime;
+ Status status;
+ long newsize;
+
+ if(!PyArg_ParseTuple(args, "OOllll", &pydisplay, &pyconfig, &pydrawable, &newsize, &newrotation, &newrefresh /*, &currenttime*/ )) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+
+ status = XRRSetScreenConfigAndRate(display, (XRRScreenConfiguration *)PyCObject_AsVoidPtr(pyconfig), pydrawable,
+ (SizeID)newsize, newrotation, newrefresh, CurrentTime);
+
+ return Py_BuildValue("i", (int)status);
+}
+
+/***************************************************************************
+ (dotclock,hdisplay,hsyncstart,hsyncend,htotal,vdisplay,vsyncstart,vsyncend,vtotal,flags) = \
+ ixf86misc_vidmodegetmodeline(display,screen)
+
+*/
+
+static PyObject *ixf86misc_vidmodegetmodeline(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Display *display = NULL;
+ long screen;
+ int dotclock_return;
+ XF86VidModeModeLine modeline;
+ PyObject *returnvalue;
+
+ if(!PyArg_ParseTuple(args, "Ol", &pydisplay, &screen)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+
+ if(XF86VidModeGetModeLine(display,screen,&dotclock_return,&modeline)) {
+ returnvalue = Py_BuildValue("(iiiiiiiiii)",
+ dotclock_return,
+ modeline.hdisplay, /* Number of display pixels horizontally */
+ modeline.hsyncstart, /* Horizontal sync start */
+ modeline.hsyncend, /* Horizontal sync end */
+ modeline.htotal, /* Total horizontal pixels */
+ modeline.vdisplay, /* Number of display pixels vertically */
+ modeline.vsyncstart, /* Vertical sync start */
+ modeline.vsyncend, /* Vertical sync start */
+ modeline.vtotal, /* Total vertical pixels */
+ modeline.flags /* Mode flags */);
+ if(modeline.private!=NULL) {
+ XFree(modeline.private);
+ }
+ return returnvalue;
+ } else {
+ return Py_BuildValue("");
+ }
+
+}
+
+/***************************************************************************
+
+ DisplaySize(display,screen_num)
+
+ Args:
+ display - display object.
+ screen_num - screen number
+ Returns:
+
+ dimensions - a tuple consisting of 4 integers (width_pixels, height_pixels,
+ width_mm, height_mm)
+*/
+static PyObject *ixf86misc_displaysize(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Display *display = NULL;
+ int screennum = 0;
+
+ if(!PyArg_ParseTuple(args, "Oi", &pydisplay,&screennum)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+
+ return Py_BuildValue("(iiii)",
+ DisplayWidth(display,screennum),
+ DisplayHeight(display,screennum),
+ DisplayWidthMM(display,screennum),
+ DisplayHeightMM(display,screennum));
+}
+
+/***************************************************************************
+
+*/
+static PyObject *ixf86misc_xscreensaverqueryextension(PyObject *self, PyObject *args) {
+ PyObject *pydisplay = NULL;
+ Display *display;
+
+ if(!PyArg_ParseTuple(args, "O", &pydisplay)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+ int event_base, error_base;
+
+ int rc = XScreenSaverQueryExtension(display, &event_base, &error_base);
+ return Py_BuildValue("i", rc);
+}
+
+/***************************************************************************
+
+*/
+static void ixf86misc_destroyscreensaver(void *ptr) {
+ if(ptr!=NULL) {
+ XFree(ptr);
+ }
+}
+
+static PyObject *ixf86misc_xscreensaverallocinfo(PyObject *self, PyObject *args) {
+ XScreenSaverInfo *ss_info;
+ ss_info = XScreenSaverAllocInfo();
+ return PyCObject_FromVoidPtr((void *)ss_info,ixf86misc_destroyscreensaver);
+}
+
+/***************************************************************************
+
+*/
+
+static PyObject *ixf86misc_xscreensaverqueryinfo(PyObject *self, PyObject *args) {
+ PyObject *pydisplay;
+ Display *display;
+ Drawable window;
+ PyObject *pyscreensaverinfo;
+ XScreenSaverInfo *screensaverinfo;
+
+if(!PyArg_ParseTuple(args, "OlO", &pydisplay, &window, &pyscreensaverinfo)) {
+ return NULL;
+ }
+ display = (Display *)PyCObject_AsVoidPtr(pydisplay);
+ screensaverinfo = (XScreenSaverInfo *)PyCObject_AsVoidPtr(pyscreensaverinfo);
+
+ int state = 0;
+ int kind = 0;
+ unsigned long idle = 0;
+ unsigned long til_or_since = 0;
+ if(XScreenSaverQueryInfo(display, window, screensaverinfo)) {
+ state = screensaverinfo->state;
+ kind = screensaverinfo->kind;
+ til_or_since = screensaverinfo->til_or_since;
+ idle = screensaverinfo->idle;
+ }
+
+ return Py_BuildValue("(iikk)", state, kind ,til_or_since, idle);
+}
+
+/***************************************************************************
+
+*/
+
+static struct PyMethodDef ixf86misc_methods[] = {
+ { "XOpenDisplay", ixf86misc_xopendisplay, METH_VARARGS },
+ { "DefaultScreen", ixf86misc_defaultscreen, METH_VARARGS },
+ { "ScreenCount", ixf86misc_screencount, METH_VARARGS },
+ { "GetGamma", ixf86misc_getgamma, METH_VARARGS },
+ { "SetGamma", ixf86misc_setgamma, METH_VARARGS },
+ { "RootWindow", ixf86misc_rootwindow, METH_VARARGS },
+ { "XRRGetScreenInfo", ixf86misc_xrrgetscreeninfo, METH_VARARGS },
+ { "XRRConfigCurrentConfiguration", ixf86misc_xrrconfigcurrentconfiguration, METH_VARARGS },
+ { "XRRRotations", ixf86misc_xrrrotations, METH_VARARGS },
+ { "XRRSizes", ixf86misc_xrrsizes, METH_VARARGS },
+ { "XRRConfigCurrentRate", ixf86misc_xrrconfigcurrentrate, METH_VARARGS },
+ { "XRRRates", ixf86misc_xrrrates, METH_VARARGS },
+ { "XRRConfigTimes", ixf86misc_xrrconfigtimes, METH_VARARGS },
+ { "XRRSetScreenConfigAndRate", ixf86misc_xrrsetscreenconfigandrate, METH_VARARGS },
+ { "XF86VidModeGetModeLine", ixf86misc_vidmodegetmodeline, METH_VARARGS },
+ { "DisplaySize", ixf86misc_displaysize, METH_VARARGS },
+ { "XScreenSaverQueryExtension", ixf86misc_xscreensaverqueryextension, METH_VARARGS },
+ { "XScreenSaverAllocInfo", ixf86misc_xscreensaverallocinfo, METH_VARARGS },
+ { "XScreenSaverQueryInfo", ixf86misc_xscreensaverqueryinfo, METH_VARARGS },
+ { "XRRQueryExtension", ixf86misc_xrrqueryextension, METH_VARARGS },
+ { NULL, NULL }
+};
+
+void initixf86misc(void) {
+ PyObject *ixf86misc = Py_InitModule3("ixf86misc",ixf86misc_methods,"Bindings for some XFree86 config functions.");
+
+}
diff --git a/modules/xf86misc.py b/modules/xf86misc.py
new file mode 100755
index 0000000..8b952d8
--- /dev/null
+++ b/modules/xf86misc.py
@@ -0,0 +1,197 @@
+#!/usr/bin/env python
+###########################################################################
+# xf86misc.py - #
+# ------------------------------ #
+# copyright : (C) 2004 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+"""A simple interface for changing the current gamma setting under XFree86.
+"""
+import ixf86misc
+import os, time
+
+class XF86Screen(object):
+
+ RR_Rotate_0 = 1
+ RR_Rotate_90 = 2
+ RR_Rotate_180 = 4
+ RR_Rotate_270 = 8
+ RR_Reflect_X = 16
+ RR_Reflect_Y = 32
+
+ def __init__(self,display,screenid):
+ self.screenid = screenid
+ self.display = display
+ self.ssinfo = None
+ self.starttime = time.time()
+ self.resettime = 0
+ self.lastidle = 0
+
+ self.screenconfig = None
+ self._load()
+
+ def _load(self):
+ # Check for the presence of the xrandr extension.
+ try:
+ (rc,x,y) = ixf86misc.XRRQueryExtension(self.display)
+ if rc==0:
+ return
+ except AttributeError, errmsg:
+ print "Trapped AttributeError:", errmsg, " - attempting to continue."
+ return
+
+ self.screenconfig = ixf86misc.XRRGetScreenInfo(self.display, ixf86misc.RootWindow(self.display, self.screenid))
+ if self.screenconfig is not None:
+ (self.currentsizeid,self.currentrotation) = ixf86misc.XRRConfigCurrentConfiguration(self.screenconfig)
+ self.availablerotations = ixf86misc.XRRRotations(self.display, self.screenid)
+ self.sizes = ixf86misc.XRRSizes(self.display, self.screenid)
+ self.currentrefreshrate = ixf86misc.XRRConfigCurrentRate(self.screenconfig)
+
+ def resolutionSupportAvailable(self):
+ return self.screenconfig is not None
+
+ def getScreenId(self):
+ return self.screenid
+
+ def getGamma(self):
+ return ixf86misc.GetGamma(self.display,self.screenid)
+
+ def setGamma(self,gammatuple):
+ ixf86misc.SetGamma(self.display,self.screenid,gammatuple[0],gammatuple[1],gammatuple[2])
+
+ def getRotation(self):
+ return self.currentrotation
+
+ def getAvailableRotations(self):
+ return self.availablerotations
+
+ def getSize(self):
+ return self.sizes[self.currentsizeid]
+
+ def getSizeID(self):
+ return self.currentsizeid
+
+ def getAvailableSizes(self):
+ return self.sizes[:]
+
+ def getRefreshRate(self):
+ return self.currentrefreshrate
+
+ def getAvailableRefreshRates(self,sizeid):
+ return ixf86misc.XRRRates(self.display,self.screenid,sizeid)
+
+ def setScreenConfigAndRate(self, sizeid, rotation, refresh):
+ rc = ixf86misc.XRRSetScreenConfigAndRate(self.display, self.screenconfig, \
+ ixf86misc.RootWindow(self.display, self.screenid), sizeid, rotation, refresh)
+ #ixf86misc.XRRConfigTimes(self.screenconfig) \
+
+ self._load()
+ return rc # FIXME handle failures due to the timestamp.
+
+ def getDimensions(self):
+ return ixf86misc.DisplaySize(self.display,self.screenid)
+
+ def getIdleSeconds(self):
+ data = self.__getScreenSaverInfo()
+ if data is None:
+ return 0
+
+ (state, kind, til_or_since, idle) = data
+ idletime = idle/1000.0
+
+ if (self.lastidle > idletime) or (self.resettime > idletime): # Something has moved in the meantime
+ self.starttime = 0
+ self.resettime = 0
+ else:
+ idletime = idletime - self.resettime
+ self.lastidle = idletime
+ return idletime
+
+ def resetIdleSeconds(self):
+ self.resettime = time.time() - self.starttime
+
+ # See man XScreenSaver(3)
+ def __getScreenSaverInfo(self):
+ if self.ssinfo is None:
+ if ixf86misc.XScreenSaverQueryExtension(self.display):
+ self.ssinfo = ixf86misc.XScreenSaverAllocInfo()
+ else:
+ return 0 # Error actually.
+
+ return ixf86misc.XScreenSaverQueryInfo(self.display,
+ ixf86misc.RootWindow(self.display, self.screenid), self.ssinfo)
+
+
+class XF86Server(object):
+ def __init__(self,displayname=None):
+ if displayname==None:
+ if 'DISPLAY' in os.environ:
+ displayname = os.environ['DISPLAY']
+ else:
+ displayname = ":0.0"
+ self.displayname = displayname
+ self.display = ixf86misc.XOpenDisplay(displayname)
+ if self.display is None:
+ raise XF86Error, "Couldn't connect to X server."
+
+ self._defaultscreen = ixf86misc.DefaultScreen(self.display)
+
+ self.screens = []
+ for i in range(ixf86misc.ScreenCount(self.display)):
+ self.screens.append(XF86Screen(self.display,i))
+
+ def getDefaultScreen(self):
+ return self.screens[self._defaultscreen]
+
+ def getDisplay(self):
+ return self.display
+
+ def getDisplayName(self):
+ return self.displayname
+
+ def getScreens(self):
+ return self.screens[:]
+
+ def resolutionSupportAvailable(self):
+ return self.screens[0].resolutionSupportAvailable()
+
+class XF86Error(Exception):
+ """Just an exception when some goes wrong with X."""
+
+if __name__=='__main__':
+ xg = XF86Server()
+ xs = xg.getDefaultScreen()
+ print "Number of screens:",str(len(xg.screens))
+ print "Idle seconds:",xs.getIdleSeconds()
+ print
+ print "Gamma:"+str(xs.getGamma())
+ print
+ if xg.resolutionSupportAvailable():
+ print "SizeID:"+str(xs.getSizeID())
+ print "Size:"+str(xs.getSize())
+ sizes = xs.getAvailableSizes()
+ print "Available Sizes:" + str(sizes)
+ print
+ print "Rotation:" + str(xs.getRotation())
+ print "Available Rotations:" + str(xs.getAvailableRotations())
+ print
+ print "Refresh rate:" + str(xs.getRefreshRate())
+ print "Refresh rates for the current screen:"+str(xs.getAvailableRefreshRates(xs.getSizeID()))
+
+ for i in range(len(sizes)):
+ print "All Refresh Rates:"+str(xs.getAvailableRefreshRates(i))
+ xs.setScreenConfigAndRate(0,1,75)
+ print "SizeID:"+str(xs.getSizeID())
+ print "Size:"+str(xs.getSize())
+ sizes = xs.getAvailableSizes()
+ print "Available Sizes:" + str(sizes)
+ else:
+ print "(no resolution / randr support available)"
diff --git a/mountconfig/MicroHAL.py b/mountconfig/MicroHAL.py
new file mode 100755
index 0000000..9ce8b83
--- /dev/null
+++ b/mountconfig/MicroHAL.py
@@ -0,0 +1,884 @@
+#!/usr/bin/python
+###########################################################################
+# MicroHAL.py - #
+# ------------------------------ #
+# begin : Tue Oct 30 2004 #
+# copyright : (C) 2004 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+import os
+import os.path
+from SimpleCommandRunner import *
+
+############################################################################
+class MicroHAL__(object):
+
+ # Major device numbers for Linux block devices that support partitions.
+ partitionblockdevs = [
+ 3, # IDE harddisks
+ 8, # SCSI disks
+ 13, # 8-bit MFM/RLL/IDE controller
+ 14, # BIOS harddrive callback support {2.6}
+ 21, # Acorn MFM hard drive interface
+ 22, # Second IDE hard disk/CD-ROM interface
+ 28, # ACSI disk (68k/Atari)
+ 33, # Third IDE hard disk/CD-ROM interface
+ 34, # Fourth IDE hard disk/CD-ROM interface
+ 36, # MCA ESDI hard disk
+ 44, # Flash Translation Layer (FTL) filesystems
+ 45, # Parallel port IDE disk devices
+ 48, # Mylex DAC960 PCI RAID controller; first controller
+ 49, # Mylex DAC960 PCI RAID controller; second controller
+ 50, # Mylex DAC960 PCI RAID controller; third controller
+ 51, # Mylex DAC960 PCI RAID controller; fourth controller
+ 52, # Mylex DAC960 PCI RAID controller; fifth controller
+ 53, # Mylex DAC960 PCI RAID controller; sixth controller
+ 54, # Mylex DAC960 PCI RAID controller; seventh controller
+ 55, # Mylex DAC960 PCI RAID controller; eigth controller
+ 56, # Fifth IDE hard disk/CD-ROM interface
+ 57, # Sixth IDE hard disk/CD-ROM interface
+ 65, # SCSI disk devices (16-31)
+ 66, # SCSI disk devices (32-47)
+ 67, # SCSI disk devices (48-63)
+ 68, # SCSI disk devices (64-79)
+ 69, # SCSI disk devices (80-95)
+ 70, # SCSI disk devices (96-111)
+ 71, # SCSI disk devices (112-127)
+ 72, # Compaq Intelligent Drive Array, first controller
+ 73, # Compaq Intelligent Drive Array, second controller
+ 74, # Compaq Intelligent Drive Array, third controller
+ 75, # Compaq Intelligent Drive Array, fourth controller
+ 76, # Compaq Intelligent Drive Array, fifth controller
+ 77, # Compaq Intelligent Drive Array, sixth controller
+ 78, # Compaq Intelligent Drive Array, seventh controller
+ 79, # Compaq Intelligent Drive Array, eigth controller
+ 80, # I2O hard disk
+ 81, # I2O hard disk
+ 82, # I2O hard disk
+ 83, # I2O hard disk
+ 84, # I2O hard disk
+ 85, # I2O hard disk
+ 86, # I2O hard disk
+ 87, # I2O hard disk
+ 88, # Seventh IDE hard disk/CD-ROM interface
+ 89, # Eighth IDE hard disk/CD-ROM interface
+ 90, # Ninth IDE hard disk/CD-ROM interface
+ 91, # Tenth IDE hard disk/CD-ROM interface
+ 92, # PPDD encrypted disk driver
+ 95, # IBM S/390 DASD block storage
+ 101, # AMI HyperDisk RAID controller
+ 102, # Compressed block device
+ 104, # Compaq Next Generation Drive Array, first controller
+ 105, # Compaq Next Generation Drive Array, second controller
+ 106, # Compaq Next Generation Drive Array, third controller
+ 107, # Compaq Next Generation Drive Array, fourth controller
+ 108, # Compaq Next Generation Drive Array, fifth controller
+ 109, # Compaq Next Generation Drive Array, sixth controller
+ 110, # Compaq Next Generation Drive Array, seventh controller
+ 111, # Compaq Next Generation Drive Array, eigth controller
+ 112, # IBM iSeries virtual disk
+ 114, # IDE BIOS powered software RAID interfaces such as the Promise Fastrak
+ 128, # SCSI disk devices (128-143)
+ 129, # SCSI disk devices (144-159)
+ 130, # SCSI disk devices (160-175)
+ 131, # SCSI disk devices (176-191)
+ 132, # SCSI disk devices (192-207)
+ 133, # SCSI disk devices (208-223)
+ 134, # SCSI disk devices (224-239)
+ 135, # SCSI disk devices (240-255)
+ 136, # Mylex DAC960 PCI RAID controller; ninth controller
+ 137, # Mylex DAC960 PCI RAID controller; tenth controller
+ 138, # Mylex DAC960 PCI RAID controller; eleventh controller
+ 139, # Mylex DAC960 PCI RAID controller; twelfth controller
+ 140, # Mylex DAC960 PCI RAID controller; thirteenth controller
+ 141, # Mylex DAC960 PCI RAID controller; fourteenth controller
+ 142, # Mylex DAC960 PCI RAID controller; fifteenth controller
+ 143, # Mylex DAC960 PCI RAID controller; sixteenth controller
+ 160, # Promise SX8 8-port SATA Disks on First Controller
+ 161 # Promise SX8 8-port SATA Disks on Second Controller
+ ]
+
+ floppydevs = [
+ 2, # Floppy disks
+ 40 # Syquest EZ135 parallel port removable drive
+ ]
+
+ cdromsdevs = [
+ 11, # SCSI CD-ROM devices
+ 12, # MSCDEX CD-ROM callback support {2.6}
+ 15, # Sony CDU-31A/CDU-33A CD-ROM
+ 16, # GoldStar CD-ROM
+ 17, # Optics Storage CD-ROM
+ 18, # Sanyo CD-ROM
+ 20, # Hitachi CD-ROM (under development)
+ 23, # Mitsumi proprietary CD-ROM
+ 24, # Sony CDU-535 CD-ROM
+ 25, # First Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 26, # Second Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 27, # Third Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 28, # Fourth Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 29, # Aztech/Orchid/Okano/Wearnes CD-ROM
+ 30, # Philips LMS CM-205 CD-ROM
+ 32, # Philips LMS CM-206 CD-ROM
+ 41, # MicroSolutions BackPack parallel port CD-ROM
+ 46, # Parallel port ATAPI CD-ROM devices
+ 47, # Parallel port ATAPI disk devices
+ 48, # Mylex DAC960 PCI RAID controller; first controller
+ 113 # IBM iSeries virtual CD-ROM
+ ]
+
+ burnerpacketdevs = [
+ 97 # Packet writing for CD/DVD devices
+ ]
+
+ # We provide a mapping between filesystems and kernelmodules, so filesystems
+ # that are built as modules can be loaded on demand. (In fact, mountconfig will
+ # load all filesystem modules needed to be able to mount all fstab entries.)
+ FilesystemProcDriver = [
+ # fstab name, /proc name, kernel module name
+ ('auto','autofs','autofs4'),
+ ('iso9660','iso9660','isofs'),
+ ('nfs','nfsd','nfs')
+ ]
+
+ ############################################################################
+ def __init__(self):
+ self.devices = None
+ self.supportedfs = None
+ self.partitionsizelines = None
+
+ ############################################################################
+ def getDevices(self):
+ if self.devices is None:
+ self.devices = []
+ # Scan through /sys/block for devices. Find out which disks are
+ # installed and should be shown in the listview. For real
+ # disks we put a 'group' in the listview and under the group
+ # we list the partitions, whether they are mounted or not.
+ # FIXME: Check if sysfs is mounted.
+ blockdevices = os.listdir("/sys/block")
+ blockdevices.sort()
+
+ for blockdevice in blockdevices:
+ # We are looking for block devices that represent hard disks or
+ # things that have partitions.
+ # Grab the major device number
+ fhandle = open(os.path.join("/sys/block",blockdevice,"dev"))
+ devnumbers = fhandle.read()
+ fhandle.close()
+ devnum = int(devnumbers.split(":")[0])
+ # Is it on our list of partition devices?
+ if devnum in MicroHAL.partitionblockdevs:
+ fulldevice = os.path.join("/dev",blockdevice)
+
+ # Check for removable devices.
+ fhandle = open(os.path.join("/sys/block",blockdevice,"removable"))
+ removable = fhandle.read().strip()=="1"
+ fhandle.close()
+
+ if not removable:
+ newdisk = Disk()
+ else:
+ if os.readlink(os.path.join("/sys/block",blockdevice,"device")).split(os.path.sep)[5].startswith("usb"):
+ newdisk = USBDisk()
+ else:
+ newdisk = RemovableDisk()
+ newdisk.dev = fulldevice
+ newdisk.major = devnum
+ newdisk.removable = removable
+ newdisk.modelname = self.getModelName(fulldevice)
+
+ if not removable or isinstance(newdisk, USBDisk):
+ # We have a not removable block device or a USB Disk here.
+ partitions = os.listdir(os.path.join("/sys/block",blockdevice))
+ partitions.sort()
+ i = 1
+ for partition in partitions:
+ # Look for a partitions device names and not the other
+ # stuff that lives in the directory.
+ if partition.startswith(blockdevice):
+ fullpartition = os.path.join("/dev",partition)
+ newpartition = Partition()
+ newpartition.dev = fullpartition
+ newpartition.size = self.getPartitionSize(fullpartition)
+ newpartition.num = i
+ newdisk.partitions.append(newpartition)
+ i += 1
+ self.devices.append(newdisk)
+
+ elif devnum in MicroHAL.cdromsdevs:
+ fulldevice = os.path.join("/dev",blockdevice)
+ newdisk = RemovableDisk()
+ newdisk.dev = fulldevice
+ newdisk.major = devnum
+ newdisk.modelname = self.getModelName(fulldevice)
+ self.devices.append(newdisk)
+
+ elif devnum in MicroHAL.burnerpacketdevs:
+ fulldevice = os.path.join("/dev",blockdevice)
+ newdisk = BurnerDisk(self)
+ newdisk.dev = fulldevice
+ newdisk.major = devnum
+ newdisk.modelname = self.getModelName(fulldevice)
+
+ self.devices.append(newdisk)
+
+ return self.devices[:]
+
+ ############################################################################
+ def getPartitionSize(self,devicename):
+ partitionname = os.path.basename(devicename)
+
+ if self.partitionsizelines is None:
+ fhandle = open('/proc/partitions')
+ self.partitionsizelines = fhandle.readlines()
+ fhandle.close()
+
+ i = 0
+ for line in self.partitionsizelines:
+ if i>=2:
+ (major, minor, blocks, name) = line.split()
+ if name==partitionname:
+ blocks = int(blocks) # 1K blocks now.
+ if blocks<1024:
+ return str(blocks)+" Kb"
+ if blocks<1024*1024:
+ return str(round(float(blocks)/1024.0,1))+" Mb"
+ blocks /= 1024
+ if blocks<1024*1024:
+ return str(round(float(blocks)/1024.0,1))+" Gb"
+ blocks /= 1024
+ return str(round(float(blocks)/1024.0,1))+" Tb"
+ i += 1
+ return None
+
+ ############################################################################
+ def getIDEModel(self,devname):
+ try:
+ fhandle = open(os.path.join("/proc/ide",os.path.basename(devname),"model"))
+ model = fhandle.read()
+ fhandle.close()
+ return model.strip()
+ except (OSError, IOError):
+ return None
+
+ ############################################################################
+ def getSCSIModel(self,devname):
+ try:
+ fhandle_model = open(os.path.join("/sys/block",os.path.basename(devname),"device/model"))
+ fhandle_vendor = open(os.path.join("/sys/block",os.path.basename(devname),"device/vendor"))
+ model = fhandle_model.read()[:-1]
+ vendor = fhandle_vendor.read()[:-1]
+ fhandle_model.close()
+ fhandle_vendor.close()
+ except (OSError, IOError):
+ pass
+ if len(model) + len(vendor) == 0:
+ return None
+ return vendor + " " + model
+
+ ############################################################################
+ def getModelName(self,devname):
+ modelname = self.getIDEModel(devname)
+ if modelname is None:
+ modelname = self.getSCSIModel(devname)
+ if modelname is None:
+ modelname = devname
+ return " '"+modelname+"'"
+
+ ############################################################################
+ def getSupportedFileSystems(self):
+ if self.supportedfs is None:
+ if os.path.isfile("/proc/filesystems"):
+ fhandle = open("/proc/filesystems")
+ self.supportedfs = []
+ for fs in fhandle.readlines():
+ try:
+ self.supportedfs.append(fs.strip().split()[1])
+ except IndexError:
+ self.supportedfs.append(fs.strip().split()[0])
+ # The following filesystems aren't found there, but usually they are
+ # supported.
+ self.supportedfs.extend(('swap','shm'))
+ return self.supportedfs[:]
+
+ ############################################################################
+ def isSupportedFileSystem(self,fs):
+ # Look up the /proc and kernel driver name for the given filesystem type.
+ module = fs
+ proc = fs
+ for entry in self.FilesystemProcDriver:
+ if entry[0]==fs:
+ proc = entry[1]
+ module = entry[2]
+
+ if proc not in self.getSupportedFileSystems():
+ # The filesystem is not supported by the running kernel,
+ # but it might be built as module, so we try to load that.
+ retval, msg = SimpleCommandRunner().run(["/sbin/modprobe",module])
+ if retval > 0:
+ print msg
+ print "Couldn't load driver " + module + " for filesystem " + fs
+ # Force refresh of list of supported filesystems
+ self.supportedfs = None
+ return proc in self.getSupportedFileSystems()
+
+############################################################################
+class Device(object):
+ def __init__(self):
+ self.dev = None
+ self.major = None
+ self.removable = None
+ self.uuid = None
+ self.label = None
+
+ def getDev(self):
+ return self.dev
+
+ def getMajor(self):
+ return self.major
+
+ def getName(self):
+ return self.dev
+
+ def getUUID(self):
+ if not self.uuid:
+ return ""
+ return self.uuid
+
+ def getLabel(self):
+ if not self.label:
+ return ""
+ return self.label
+
+ def isRemovable(self):
+ return self.removable
+
+ def __str__(self):
+ return "Name: %s, Device: %s, Major: %i, " % (self.getName(),
+ self.getDev(),
+ self.getMajor())
+
+############################################################################
+class Disk(Device):
+ def __init__(self):
+ super(Disk,self).__init__()
+ self.removable = False
+ self.partitions = []
+ self.modelname = None
+ self.iconname = "hi16-hdd"
+
+ def getModelName(self):
+ return self.modelname
+
+ def getName(self):
+ if self.getModelName():
+ return i18n("Disk ")+self.getModelName()
+ else:
+ return i18n("Unknown Disk")
+
+ def getPartitions(self):
+ return self.partitions[:]
+
+ def appendPartition(self,partition):
+ self.partitions.append(partition)
+ def cmpNum(a,b): return cmp(a.num,b.num)
+ self.partitions.sort(cmpNum)
+
+ def __str__(self):
+ x = Device.__str__(self) + "Partitions: ["
+ for part in self.partitions:
+ x += "["
+ x += str(part)
+ x += "], "
+ x += "],"
+ return x
+
+############################################################################
+class RemovableDisk(Disk):
+ def __init__(self):
+ super(RemovableDisk,self).__init__()
+ self.iconname = "hi16-cdrom"
+ self.removable = True
+
+ def getName(self):
+ return "Optical Disk "+self.getModelName()
+
+############################################################################
+class USBDisk(Disk):
+ def __init__(self):
+ super(USBDisk,self).__init__()
+ self.iconname = "hi16-usbpen"
+ self.removable = True
+
+ def getName(self):
+ return "Removable USB Disk "+self.getModelName()
+
+############################################################################
+class BurnerDisk(RemovableDisk):
+ def __init__(self):
+ super(BurnerDisk,self).__init__()
+ self.iconname = "hi16-burner"
+
+ def getName(self):
+ return "Burner "+self.modelname
+
+############################################################################
+class Floppy(Device):
+ def isRemovable(self):
+ return True
+
+ def getName(self):
+ return "Floppy"
+
+############################################################################
+class Partition(Device):
+ def __init__(self):
+ super(Partition,self).__init__()
+ self.num = None
+ self.size = None
+ self.iconname = "hi16-hdd"
+
+ def getName(self):
+ return str(self.num)+" Partition "+ self.getSize()
+ # A group item for all of the other kernel/system mount entries.
+
+ def getSize(self):
+ return self.size
+
+ def __str__(self):
+ return "Device: %s, Num: %i, Size: %s, Label: %s, UUID: %s" % (self.dev, self.num, self.getSize(),
+ self.getLabel(), self.getUUID())
+
+############################################################################
+class FakeSystemDevice(object):
+ def getName(self): return "System"
+ def getIconName(self): return "hi16-blockdevice"
+
+############################################################################
+class MicroHAL(object):
+
+ # Major device numbers for Linux block devices that support partitions.
+ partitionblockdevs = [
+ 3, # IDE harddisks
+ 8, # SCSI disks
+ 13, # 8-bit MFM/RLL/IDE controller
+ 14, # BIOS harddrive callback support {2.6}
+ 21, # Acorn MFM hard drive interface
+ 22, # Second IDE hard disk/CD-ROM interface
+ 28, # ACSI disk (68k/Atari)
+ 33, # Third IDE hard disk/CD-ROM interface
+ 34, # Fourth IDE hard disk/CD-ROM interface
+ 36, # MCA ESDI hard disk
+ 44, # Flash Translation Layer (FTL) filesystems
+ 45, # Parallel port IDE disk devices
+ 48, # Mylex DAC960 PCI RAID controller; first controller
+ 49, # Mylex DAC960 PCI RAID controller; second controller
+ 50, # Mylex DAC960 PCI RAID controller; third controller
+ 51, # Mylex DAC960 PCI RAID controller; fourth controller
+ 52, # Mylex DAC960 PCI RAID controller; fifth controller
+ 53, # Mylex DAC960 PCI RAID controller; sixth controller
+ 54, # Mylex DAC960 PCI RAID controller; seventh controller
+ 55, # Mylex DAC960 PCI RAID controller; eigth controller
+ 56, # Fifth IDE hard disk/CD-ROM interface
+ 57, # Sixth IDE hard disk/CD-ROM interface
+ 65, # SCSI disk devices (16-31)
+ 66, # SCSI disk devices (32-47)
+ 67, # SCSI disk devices (48-63)
+ 68, # SCSI disk devices (64-79)
+ 69, # SCSI disk devices (80-95)
+ 70, # SCSI disk devices (96-111)
+ 71, # SCSI disk devices (112-127)
+ 72, # Compaq Intelligent Drive Array, first controller
+ 73, # Compaq Intelligent Drive Array, second controller
+ 74, # Compaq Intelligent Drive Array, third controller
+ 75, # Compaq Intelligent Drive Array, fourth controller
+ 76, # Compaq Intelligent Drive Array, fifth controller
+ 77, # Compaq Intelligent Drive Array, sixth controller
+ 78, # Compaq Intelligent Drive Array, seventh controller
+ 79, # Compaq Intelligent Drive Array, eigth controller
+ 80, # I2O hard disk
+ 81, # I2O hard disk
+ 82, # I2O hard disk
+ 83, # I2O hard disk
+ 84, # I2O hard disk
+ 85, # I2O hard disk
+ 86, # I2O hard disk
+ 87, # I2O hard disk
+ 88, # Seventh IDE hard disk/CD-ROM interface
+ 89, # Eighth IDE hard disk/CD-ROM interface
+ 90, # Ninth IDE hard disk/CD-ROM interface
+ 91, # Tenth IDE hard disk/CD-ROM interface
+ 92, # PPDD encrypted disk driver
+ 95, # IBM S/390 DASD block storage
+ 101, # AMI HyperDisk RAID controller
+ 102, # Compressed block device
+ 104, # Compaq Next Generation Drive Array, first controller
+ 105, # Compaq Next Generation Drive Array, second controller
+ 106, # Compaq Next Generation Drive Array, third controller
+ 107, # Compaq Next Generation Drive Array, fourth controller
+ 108, # Compaq Next Generation Drive Array, fifth controller
+ 109, # Compaq Next Generation Drive Array, sixth controller
+ 110, # Compaq Next Generation Drive Array, seventh controller
+ 111, # Compaq Next Generation Drive Array, eigth controller
+ 112, # IBM iSeries virtual disk
+ 114, # IDE BIOS powered software RAID interfaces such as the Promise Fastrak
+ 128, # SCSI disk devices (128-143)
+ 129, # SCSI disk devices (144-159)
+ 130, # SCSI disk devices (160-175)
+ 131, # SCSI disk devices (176-191)
+ 132, # SCSI disk devices (192-207)
+ 133, # SCSI disk devices (208-223)
+ 134, # SCSI disk devices (224-239)
+ 135, # SCSI disk devices (240-255)
+ 136, # Mylex DAC960 PCI RAID controller; ninth controller
+ 137, # Mylex DAC960 PCI RAID controller; tenth controller
+ 138, # Mylex DAC960 PCI RAID controller; eleventh controller
+ 139, # Mylex DAC960 PCI RAID controller; twelfth controller
+ 140, # Mylex DAC960 PCI RAID controller; thirteenth controller
+ 141, # Mylex DAC960 PCI RAID controller; fourteenth controller
+ 142, # Mylex DAC960 PCI RAID controller; fifteenth controller
+ 143, # Mylex DAC960 PCI RAID controller; sixteenth controller
+ 160, # Promise SX8 8-port SATA Disks on First Controller
+ 161 # Promise SX8 8-port SATA Disks on Second Controller
+ ]
+
+ floppydevs = [
+ 2, # Floppy disks
+ 40 # Syquest EZ135 parallel port removable drive
+ ]
+
+ cdromsdevs = [
+ 11, # SCSI CD-ROM devices
+ 12, # MSCDEX CD-ROM callback support {2.6}
+ 15, # Sony CDU-31A/CDU-33A CD-ROM
+ 16, # GoldStar CD-ROM
+ 17, # Optics Storage CD-ROM
+ 18, # Sanyo CD-ROM
+ 20, # Hitachi CD-ROM (under development)
+ 23, # Mitsumi proprietary CD-ROM
+ 24, # Sony CDU-535 CD-ROM
+ 25, # First Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 26, # Second Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 27, # Third Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 28, # Fourth Matsushita (Panasonic/SoundBlaster) CD-ROM
+ 29, # Aztech/Orchid/Okano/Wearnes CD-ROM
+ 30, # Philips LMS CM-205 CD-ROM
+ 32, # Philips LMS CM-206 CD-ROM
+ 41, # MicroSolutions BackPack parallel port CD-ROM
+ 46, # Parallel port ATAPI CD-ROM devices
+ 47, # Parallel port ATAPI disk devices
+ 48, # Mylex DAC960 PCI RAID controller; first controller
+ 113 # IBM iSeries virtual CD-ROM
+ ]
+
+ burnerpacketdevs = [
+ 97 # Packet writing for CD/DVD devices
+ ]
+
+ # We provide a mapping between filesystems and kernelmodules, so filesystems
+ # that are built as modules can be loaded on demand. (In fact, mountconfig will
+ # load all filesystem modules needed to be able to mount all fstab entries.)
+ FilesystemProcDriver = [
+ # fstab name, /proc name, kernel module name
+ ('auto','autofs','autofs4'),
+ ('iso9660','iso9660','isofs'),
+ ('nfs','nfsd','nfs')
+ ]
+
+ ############################################################################
+ def __init__(self):
+ self.devices = None
+ self.supportedfs = None
+
+ ############################################################################
+ def getDevices(self):
+ if self.devices is None:
+ self.devices = []
+
+ retval, msg = SimpleCommandRunner().run(["/usr/bin/lshal"])
+ if retval > 0:
+ return []
+
+ partition_to_uid = {}
+ uid_to_disk = {}
+
+ READING_TOP = 0
+ READING_DEVICE = 1
+ state = READING_TOP
+
+ parsed_hash = None
+ current_uid = None
+
+ for line in msg.split('\n'):
+
+ if state==READING_TOP:
+ if line.startswith("udi ="):
+ parsed_hash = {}
+ current_uid = self._parseString(line[6:])
+ state = READING_DEVICE
+
+ elif state==READING_DEVICE:
+ if line=="" or not line.startswith(" "):
+ # Detect the end of this block of device data.
+ state = READING_TOP
+
+ if u"info.category" in parsed_hash:
+
+ new_device = None
+
+ capabilities_string = u" ".join(parsed_hash[u"info.capabilities"])
+ capabilities = self._parseStringList(capabilities_string)
+
+ category = self._parseString(' '.join(parsed_hash[u"info.category"]))
+ if category==u"volume":
+ # Is it a volume?
+
+ is_disc = parsed_hash.get(u"volume.is_disc")
+ if is_disc is not None and is_disc[0]=='true':
+ continue
+
+ is_partition = parsed_hash.get(u"volume.is_partition")
+ if is_partition is not None:
+ is_partition = is_partition[0]
+
+ if is_partition=='true':
+ new_device = Partition()
+ new_device.num = int(parsed_hash[u"volume.partition.number"][0])
+ partition_to_uid[new_device] = current_uid
+
+ if u"info.parent" in parsed_hash:
+ parent_uid = self._parseString(' '.join(parsed_hash[u"info.parent"]))
+ partition_to_uid[new_device] = parent_uid
+
+ else:
+ new_device = Disk()
+ uid_to_disk[current_uid] = new_device
+
+ if u"volume.uuid" in parsed_hash:
+ new_device.uuid = self._parseString(' '.join(parsed_hash[u"volume.uuid"]))
+
+ if u"volume.label" in parsed_hash:
+ new_device.label = self._parseString(parsed_hash[u"volume.label"][0])
+
+ if u"volume.size" in parsed_hash:
+ size = parsed_hash[u"volume.size"][0]
+ new_device.size = self.formatSizeBytes(int(size))
+ else:
+ new_device.size = "?"
+
+
+ # is it a storage device?
+ elif category==u"storage":
+ storage_model = self._parseString(' '.join(parsed_hash[u"storage.model"]))
+ storage_removable = parsed_hash[u"storage.removable"][0]==u"true"
+
+ if u"storage.cdrom" in capabilities:
+
+ if u"storage.cdrom.cdrw" in parsed_hash \
+ and parsed_hash[u"storage.cdrom.cdrw"][0]==u"true":
+ new_device = BurnerDisk()
+ else:
+ new_device= RemovableDisk()
+
+ elif u"storage.floppy" in capabilities:
+ new_device = FloppyDevice()
+ else:
+ if u"storage.bus" in parsed_hash \
+ and self._parseString(' '.join(parsed_hash[u"storage.bus"]))==u"usb":
+
+ new_device = USBDisk()
+ else:
+ new_device = Disk()
+
+ new_device.modelname = storage_model
+ uid_to_disk[current_uid] = new_device
+ else:
+ # Not interesting, skip it.
+ continue
+
+ # Handle the generic properties.
+ new_device.dev = self._parseString(' '.join(parsed_hash[u"block.device"]))
+ new_device.major = int(parsed_hash[u"block.major"][0])
+
+ self.devices.append(new_device)
+
+ else:
+ # Keep on accumulating info about this device.
+ parts = line.split()
+ parsed_hash[ parts[0] ] = parts[2:]
+
+ # Attach the partitions to thier devices.
+ for partition in partition_to_uid.keys():
+ parent = partition_to_uid[partition]
+ if parent in uid_to_disk.keys():
+ parent_device = uid_to_disk[parent]
+ parent_device.appendPartition(partition)
+ self.devices.remove(partition)
+
+ return self.devices[:]
+
+ ############################################################################
+ def _parseStringList(self,source_string):
+ STATE_TOP = 0
+ STATE_STRING = 1
+
+ state = STATE_TOP
+ current_string = ""
+ string_list = []
+ for c in source_string:
+ if state==STATE_TOP:
+ if c=='}':
+ break
+ if c=="'":
+ state = STATE_STRING
+ else:
+ if c=="'":
+ state = STATE_TOP
+ string_list.append(current_string)
+ current_string = ""
+ else:
+ current_string += c
+
+ return string_list
+
+ ############################################################################
+ def _parseString(self,source_string):
+ STATE_TOP = 0
+ STATE_STRING = 1
+
+ state = STATE_TOP
+ current_string = ""
+ for c in source_string:
+ if state==STATE_TOP:
+ if c=="'":
+ state = STATE_STRING
+ else:
+ if c=="'":
+ break
+ else:
+ current_string += c
+ return current_string
+
+ ############################################################################
+ def formatSizeBytes(self,size):
+ if size<1024:
+ return str(size+" B")
+ if size<1024*1042:
+ return str(round(float(size)/1024.0,1))+" Kb"
+ size /= 1024
+ if size<1024*1024:
+ return str(round(float(size)/1024.0,1))+" Mb"
+ size /= 1024
+ if size<1024*1024:
+ return str(round(float(size)/1024.0,1))+" Gb"
+ size /= 1024
+ return str(round(float(size)/1024.0,1))+" Tb"
+
+ ############################################################################
+ def getSupportedFileSystems(self):
+ if self.supportedfs is None:
+ if os.path.isfile("/proc/filesystems"):
+ fhandle = open("/proc/filesystems")
+ self.supportedfs = []
+ for fs in fhandle.readlines():
+ try:
+ self.supportedfs.append(fs.strip().split()[1])
+ except IndexError:
+ self.supportedfs.append(fs.strip().split()[0])
+ # The following filesystems aren't found there, but usually they are
+ # supported.
+ self.supportedfs.extend(('swap','shm'))
+ return self.supportedfs[:]
+
+ ############################################################################
+ def isSupportedFileSystem(self,fs):
+ # Look up the /proc and kernel driver name for the given filesystem type.
+ module = fs
+ proc = fs
+ for entry in self.FilesystemProcDriver:
+ if entry[0]==fs:
+ proc = entry[1]
+ module = entry[2]
+
+ if proc not in self.getSupportedFileSystems():
+ # The filesystem is not supported by the running kernel,
+ # but it might be built as module, so we try to load that.
+ retval, msg = SimpleCommandRunner().run(["/sbin/modprobe",module])
+ if retval > 0:
+ print msg
+ print "Couldn't load driver " + module + " for filesystem " + fs
+ # Force refresh of list of supported filesystems
+ self.supportedfs = None
+ return proc in self.getSupportedFileSystems()
+
+ ############################################################################
+ def getDeviceByLabel(self, label):
+ for device in self.getDevices():
+ if device.getLabel()==label:
+ return device
+
+ if isinstance(device,Disk):
+ for partition in device.getPartitions():
+ if partition.getLabel()==label:
+ return partition
+ return None
+
+ def getLabelByDevice(self, device):
+ for item in self.getDevices():
+ for partition in item.partitions:
+ if partition.dev==device:
+ return partition.label
+ print "No Label found for ",device
+ return ""
+
+ def getUUIDByDevice(self, device):
+ for item in self.getDevices():
+ for partition in item.partitions:
+ #print partition, partition.getUUID()
+ if partition.dev==device:
+ return partition.uuid
+ print "No UUID found for ",device
+ return ""
+
+ def getDeviceByUUID(self, uuid):
+ for device in self.getDevices():
+ if device.getUUID()==uuid:
+ return device
+
+ if isinstance(device,Disk):
+ for partition in device.getPartitions():
+ if partition.getUUID()==uuid:
+ return partition
+
+ return None
+
+############################################################################
+if __name__=='__main__':
+ hal = MicroHAL()
+ for item in hal.getDevices():
+ print(str(item))
+
+ print
+
+ #"""
+ for item in hal.getDevices():
+ for partition in item.partitions:
+ print partition, partition.getLabel()
+ #"""
+ #realhal = RealHAL()
+ #for item in realhal.getDevices():
+ # print(str(item))
+
+ print
+
+
diff --git a/mountconfig/SMBShareSelectDialog.py b/mountconfig/SMBShareSelectDialog.py
new file mode 100644
index 0000000..171cf5d
--- /dev/null
+++ b/mountconfig/SMBShareSelectDialog.py
@@ -0,0 +1,573 @@
+###########################################################################
+# SMBShareSelectDialog.py - Dialog for selecting an SMB share on a network#
+# ------------------------------ #
+# begin : Tue Oct 30 2004 #
+# copyright : (C) 2004 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdeui import *
+from kdecore import *
+from kio import *
+
+############################################################################
+class SMBShareSelectDialog(KDialogBase):
+
+ STATUS_IDLE = 0
+ STATUS_SEARCH_TOP_LEVEL = 1
+ STATUS_SEARCH = 2
+ STATUS_RESOLVE = 3
+
+ ########################################################################
+ def __init__(self,parent,name=None):
+ super(SMBShareSelectDialog,self).__init__(parent,name,1,"",KDialogBase.Ok|KDialogBase.Cancel)
+ self.updatinggui = False
+
+ self.resize(600,400)
+
+ vbox = self.makeVBoxMainWidget()
+
+ hbox = QHBox(vbox)
+ hbox.setSpacing(self.spacingHint())
+ tmplabel = QLabel(hbox)
+ tmplabel.setPixmap(UserIcon("hi32-samba"))
+
+ hbox.setStretchFactor(tmplabel,0)
+
+ self.headinglabel = QLabel(hbox)
+ self.headinglabel.setText(i18n("Select a network share"))
+ hbox.setStretchFactor(self.headinglabel,1)
+
+ hbox2 = QHBox(vbox)
+
+ # The main treeview where the action happens.
+ self.treeview = KListView(hbox2)
+ self.treeview.addColumn("(hidden)")
+ self.treeview.header().hide()
+ self.treeview.setRootIsDecorated(True)
+
+ self.connect(self.treeview,SIGNAL("expanded(QListViewItem *)"),self.slotNodeExpanded)
+ self.connect(self.treeview,SIGNAL("selectionChanged(QListViewItem *)"),self.slotNodeSelected)
+ self.connect(self.treeview,SIGNAL("clicked(QListViewItem *)"),self.slotClicked)
+ self.dirlister = KDirLister()
+ self.dirlister.setDirOnlyMode(True)
+ self.dirlister.setAutoUpdate(False)
+ self.dirlister.setAutoErrorHandlingEnabled(True,self)
+ self.connect(self.dirlister,SIGNAL("newItems(const KFileItemList &)"),self.slotNewItems)
+ self.connect(self.dirlister,SIGNAL("completed()"),self.slotDirListCompleted)
+ self.connect(self.dirlister,SIGNAL("canceled()"),self.slotDirListCanceled)
+ self.connect(self.dirlister,SIGNAL("redirection(const KURL &,const KURL &)"),self.slotDirListRedirection)
+ self.enableButtonOK(False)
+
+ # The "Connect as" part
+ widget = QWidget(hbox2)
+ grid = QGridLayout(widget,6,4,KDialog.spacingHint())
+ grid.setRowStretch(5,1)
+
+ tmplabel = QLabel(widget)
+ tmplabel.setPixmap(UserIcon("hi16-password"))
+ grid.addWidget(tmplabel,0,0)
+
+ self.connectaslabel = QLabel(widget)
+ self.connectaslabel.setText("Connect to 'XXX' as:")
+ grid.addMultiCellWidget(self.connectaslabel,0,0,1,3)
+
+ self.guestradio = QRadioButton(widget)
+ self.guestradio.setChecked(True)
+ grid.addWidget(self.guestradio,1,1)
+ tmplabel = QLabel(widget)
+ tmplabel.setText(i18n("Guest"))
+ grid.addWidget(tmplabel,1,2)
+ self.connect(self.guestradio,SIGNAL("stateChanged(int)"),self.slotGuestRadioClicked)
+
+ self.userradio = QRadioButton(widget)
+ grid.addWidget(self.userradio,2,1)
+ tmplabel = QLabel(widget)
+ tmplabel.setText(i18n("Username:"))
+ grid.addWidget(tmplabel,2,2)
+ self.connect(self.userradio,SIGNAL("stateChanged(int)"),self.slotUserRadioClicked)
+
+ self.usernameedit = KLineEdit(widget)
+ grid.addWidget(self.usernameedit,2,3)
+ self.connect(self.usernameedit,SIGNAL("textChanged(const QString &)"),self.slotUsernameChanged)
+
+ tmplabel = QLabel(widget)
+ tmplabel.setText(i18n("Password:"))
+ grid.addWidget(tmplabel,3,2)
+
+ self.passwordedit = KLineEdit(widget)
+ grid.addWidget(self.passwordedit,3,3)
+
+ self.reconnectbutton = KPushButton(i18n("Reconnect now"),widget)
+ grid.addMultiCellWidget(self.reconnectbutton,4,4,1,3)
+ self.connect(self.reconnectbutton,SIGNAL("clicked()"),self.slotReconnectClicked)
+
+ self.dirlistertimer = None
+
+ ########################################################################
+ def choose(self,currenturl):
+ self.lookupqueue = []
+ self.selecteditem = None
+
+ self.treeview.clear()
+ self.url_to_list_item_map = {}
+
+ # Fill the first level
+ root_url = KURL("smb:/")
+ self.rootitem = SMBShareListViewItem(self.treeview, i18n("Network Neighbourhood"), root_url, self)
+
+ self.searchurl = currenturl
+ self._updateConnectGUI()
+ self.enableButtonOK(False)
+ self._openDefaultURL()
+
+ self.spintimerid = self.startTimer(250)
+ self.exec_loop()
+ self.stopResolve()
+
+ self.killTimer(self.spintimerid)
+
+ if self.result()==self.Accepted:
+ currenturl = self.selecteditem.getURL()
+
+ self.url_to_list_item_map = None
+
+ return currenturl
+
+ ########################################################################
+ def _openDefaultURL(self):
+ if self.searchurl is not None:
+ rc = self.rootitem.selectURL(self.searchurl)
+ if rc==self.rootitem.OPEN_SUCCESS:
+ self.currenturl = self.searchurl
+ self.searchurl = None
+ self.enableButtonOK(True)
+ elif rc==self.rootitem.OPEN_FAIL or rc==self.rootitem.OPEN_SUCCESS_INVALID:
+ self.searchurl = None
+
+ ########################################################################
+ def stopResolve(self):
+ if self.dirlistertimer is not None:
+ self.killTimer(self.dirlistertimer)
+ self.dirlister.stop()
+ for item in self.lookupqueue:
+ item.cancelResolve()
+ self.lookupqueue = []
+
+ self.searchurl = None # Stop trying to open this URL too.
+
+ ########################################################################
+ def setOpen(self,item,open):
+ if item.isResolved():
+ KListView.setOpen(self.treeview,item,open)
+ else:
+ item.startResolve(True)
+
+ ########################################################################
+ def appendToResolveQueue(self,item):
+ if item not in self.lookupqueue:
+ self.lookupqueue.append(item)
+ self._startDirLister()
+ return True
+ else:
+ return False
+
+ ########################################################################
+ def slotNodeExpanded(self,item):
+ self.setOpen(item,True)
+
+ ########################################################################
+ def slotClicked(self):
+ if self.treeview.selectedItem() is None:
+ self.selecteditem = None
+ self._updateConnectGUI()
+ self.enableButtonOK(False)
+
+ ########################################################################
+ def slotNodeSelected(self,item):
+ self.selecteditem = item
+ self._updateConnectGUI()
+ self.enableButtonOK(item.getLevel()==item.LEVEL_DIR)
+
+ if not self.selecteditem.isResolved():
+ self.selecteditem.startResolve(False)
+
+ ########################################################################
+ def slotNewItems(self,items):
+ for entry in items:
+ newitem = SMBShareListViewItem(self.lookupqueue[0], unicode(entry.name()), KURL(entry.url()), self)
+ self.url_to_list_item_map[unicode(entry.url().prettyURL())] = newitem
+ # Notice how I copied the KURL object and QString (to a python string)
+
+ ########################################################################
+ def slotDirListCompleted(self):
+ item = self.lookupqueue[0]
+ item.setBusyIcon(False)
+ del self.lookupqueue[0]
+
+ item.resolveComplete()
+ self._startDirLister()
+
+ self._openDefaultURL()
+
+ ########################################################################
+ def slotDirListCanceled(self):
+ self.stopResolve()
+
+ ########################################################################
+ def slotDirListRedirection(self,oldUrl,newUrl):
+ list_item = self.url_to_list_item_map[unicode(oldUrl.prettyURL())]
+ list_item.setURL(KURL(newUrl)) # The copy is important.
+
+ # Reselect the selected node. (This will force a refresh).
+ if self.selecteditem is not None:
+ self.updatinggui = True
+ self.slotNodeSelected(self.selecteditem)
+ self.updatinggui = False
+
+ ########################################################################
+ def slotUsernameChanged(self,newtext):
+ self.reconnectbutton.setEnabled(self.usernameedit.text()!="")
+
+ ########################################################################
+ def slotReconnectClicked(self):
+ if self.updatinggui:
+ return
+ self.updatinggui = True
+
+ if self.selecteditem is None: # Sanity check.
+ return
+
+ # The user wants to change how we connect to this remote machine.
+
+ machineitem = self.selecteditem.getMachineItem()
+ if machineitem is None:
+ return # Shouldn't happen.
+
+ self.stopResolve()
+
+ # Grab the URL object before we delete the listviewitem that holds it.
+ selectedurl = self.selecteditem.getURL()
+
+ # Close up the machine item and remove the items under the machine item.
+ machineitem.unresolve()
+
+ # Set the username/password for the machine item.
+ if self.guestradio.isChecked():
+ machineitem.getURL().setUser(QString.null)
+ machineitem.getURL().setPass(QString.null)
+ selectedurl.setUser(QString.null)
+ selectedurl.setPass(QString.null)
+ else:
+ machineitem.getURL().setUser(self.usernameedit.text())
+ machineitem.getURL().setPass(self.passwordedit.text())
+ selectedurl.setUser(self.usernameedit.text())
+ selectedurl.setPass(self.passwordedit.text())
+ self.selecteditem = None
+ self._updateConnectGUI()
+
+ self.searchurl = selectedurl
+ self._openDefaultURL()
+ self.updatinggui = False
+
+ ########################################################################
+ def _startDirLister(self):
+ if self.dirlistertimer is None:
+ # Check the URL lister queue the next the event loop runs.
+ # Don't get all "recursed up"!
+ self.dirlistertimer = self.startTimer(0)
+
+ ########################################################################
+ def timerEvent(self,event):
+ KDialogBase.timerEvent(self,event)
+ if self.spintimerid==event.timerId():
+ # Spin the current folder icon
+ if len(self.lookupqueue)!=0:
+ self.lookupqueue[0].setBusyIcon(True)
+ elif event.timerId()==self.dirlistertimer:
+ self.killTimer(self.dirlistertimer)
+ self.dirlistertimer = None
+ if self.dirlister.isFinished():
+ if len(self.lookupqueue)!=0:
+ self.dirlister.openURL(self.lookupqueue[0].getURL())
+
+ ########################################################################
+ def slotGuestRadioClicked(self,state):
+ if self.updatinggui:
+ return
+ self.updatinggui = True
+
+ if self.selecteditem is None:
+ return
+
+ if state==QButton.Off:
+ self.guestradio.setChecked(True)
+ self.userradio.setChecked(False)
+
+ self.passwordedit.setEnabled(False)
+ self.usernameedit.setEnabled(False)
+
+ selectedurl = self.selecteditem.getURL()
+ self.reconnectbutton.setEnabled(unicode(selectedurl.user())!="")
+
+ self.updatinggui = False
+
+ ########################################################################
+ def slotUserRadioClicked(self,state):
+ if self.updatinggui:
+ return
+ self.updatinggui = True
+ if state==QButton.Off:
+ self.userradio.setChecked(True)
+ self.guestradio.setChecked(False)
+
+ self.passwordedit.setEnabled(True)
+ self.usernameedit.setEnabled(True)
+
+ username = unicode(self.usernameedit.text())
+ password = unicode(self.passwordedit.text())
+ selectedurl = self.selecteditem.getURL()
+ if username!="" and password!="" and \
+ ((unicode(selectedurl.user())!=username) or (unicode(selectedurl.pass_())!=password)):
+ self.reconnectbutton.setEnabled(True)
+ else:
+ self.reconnectbutton.setEnabled(False)
+
+ self.updatinggui = False
+
+ ########################################################################
+ def _updateConnectGUI(self):
+ if self.selecteditem is not None:
+ selectedurl = self.selecteditem.getURL()
+ self.guestradio.setEnabled(True)
+ self.userradio.setEnabled(True)
+ self.usernameedit.setEnabled(selectedurl.hasUser())
+ self.passwordedit.setEnabled(selectedurl.hasUser())
+ self.connectaslabel.setText(i18n("Connect to '%1' as:").arg(selectedurl.host()))
+ if selectedurl.hasUser():
+ self.guestradio.setChecked(False)
+ self.userradio.setChecked(True)
+ self.usernameedit.setText(selectedurl.user())
+ self.passwordedit.setText(selectedurl.pass_())
+ else:
+ self.guestradio.setChecked(True)
+ self.userradio.setChecked(False)
+ self.passwordedit.setText("")
+ self.usernameedit.setText("")
+ self.reconnectbutton.setEnabled(False)
+ else:
+ self.guestradio.setChecked(True)
+ self.userradio.setChecked(False)
+ self.guestradio.setEnabled(False)
+ self.userradio.setEnabled(False)
+ self.passwordedit.setEnabled(False)
+ self.usernameedit.setEnabled(False)
+ self.connectaslabel.setText(i18n("Connect to 'machine' as:"))
+ self.guestradio.setChecked(True)
+ self.userradio.setChecked(False)
+ self.passwordedit.setText("")
+ self.usernameedit.setText("")
+ self.reconnectbutton.setEnabled(False)
+
+############################################################################
+class SMBShareListViewItem(KListViewItem):
+ # Return codes for selectURL()
+ OPEN_SUCCESS = 1
+ OPEN_SUCCESS_INVALID = 2
+ OPEN_FAIL = 0
+ OPEN_BUSY = 3
+
+ # Node types.
+ LEVEL_ROOT = 0
+ LEVEL_WORKGROUP = 1
+ LEVEL_MACHINE = 2
+ LEVEL_DIR = 3 # and deeper.
+
+ ########################################################################
+ def __init__(self,parentitem,name,url,smbdialog):
+ KListViewItem.__init__(self,parentitem,name)
+ if not isinstance(parentitem,SMBShareListViewItem):
+ self._setIcon(0)
+ self.setSelectable(False)
+ else:
+ self._setIcon(parentitem.depth()+1)
+ self.setSelectable(parentitem.getLevel()>=self.LEVEL_WORKGROUP)
+ self.setExpandable(True)
+
+ if url.hasPath() and url.path(-1)!="/":
+ parts = [x for x in unicode(url.path(-1)).split("/") if x!=""]
+ self.component = parts[-1].lower()
+ elif url.hasHost():
+ self.component = unicode(url.host()).lower()
+ else:
+ self.component = None
+
+ self.smbdialog = smbdialog
+ self.resolved = False
+ self.url = url
+ self.autoopen = False
+ self.animationcounter = 0
+
+ ########################################################################
+ def getURL(self):
+ return self.url
+
+ ########################################################################
+ def setURL(self,url):
+ self.url = url
+
+ ########################################################################
+ def getComponent(self):
+ return self.component
+
+ ########################################################################
+ def isResolved(self):
+ return self.resolved
+
+ ########################################################################
+ def startResolve(self,autoopen):
+ if self.smbdialog.appendToResolveQueue(self):
+ self.setBusyIcon(True)
+ self.autoopen = self.autoopen or autoopen
+
+ ########################################################################
+ def cancelResolve(self):
+ self.setBusyIcon(False)
+ self.autoopen = False
+ self.resolved = False
+ while self.childCount()!=0:
+ self.takeItem(self.firstChild())
+ self.setOpen(False)
+
+ ########################################################################
+ def unresolve(self):
+ self.cancelResolve()
+
+ ########################################################################
+ def getMachineItem(self):
+ if self.getLevel()<=self.LEVEL_WORKGROUP:
+ return None
+ elif self.getLevel()==self.LEVEL_DIR:
+ return self.parent().getMachineItem()
+ else:
+ return self
+
+ ########################################################################
+ def _setIcon(self,depth):
+ if depth==self.LEVEL_ROOT or depth==self.LEVEL_WORKGROUP:
+ self.setPixmap(0,SmallIcon("network"))
+ elif depth==self.LEVEL_MACHINE:
+ self.setPixmap(0,SmallIcon("network_local"))
+ else:
+ self.setPixmap(0,SmallIcon("folder"))
+
+ ########################################################################
+ def setBusyIcon(self,on):
+ if on:
+ self.setPixmap(0,UserIcon("kde1"))
+ self.setPixmap(0,UserIcon("kde"+str(self.animationcounter+1)))
+ self.animationcounter += 1
+ self.animationcounter %= 6
+ else:
+ self._setIcon(self.depth())
+
+ ########################################################################
+ def resolveComplete(self):
+ self.resolved = True
+ if self.childCount()==0:
+ self.setExpandable(False)
+ else:
+ if self.autoopen:
+ self.setOpen(True)
+ ########################################################################
+ def getLevel(self):
+ if self.depth()>self.LEVEL_DIR:
+ return self.LEVEL_DIR
+ else:
+ return self.depth()
+
+ ########################################################################
+ # This is one of the more nasty pieces of code. It tries to select a given
+ # URL in the treeview. Opening and resolving the contents of URLs as neccessary
+ # while at the same time trying not have list everything on the network.
+ # Another wrinkle is that the treeview contains a level of workgroups while
+ # a given URL omits the workgroup a jumps directly to the machine name.
+ def selectURL(self,targeturl):
+ path = unicode(targeturl.path(-1))
+ parts = [x for x in path.split("/") if x!=""]
+ if targeturl.hasHost():
+ tmp = [targeturl.host()]
+ tmp.extend(parts)
+ parts = tmp
+
+ if self.getLevel()==self.LEVEL_ROOT:
+ # Root item.
+ # We should first resolve our contents. the Workgroups.
+ if not self.resolved:
+ self.startResolve(True)
+ return self.OPEN_BUSY
+ else:
+ if len(parts)==0:
+ # The URL is really short, and is not selectable.
+ # So we just say that we couldn't resolve/select it.
+ return self.OPEN_SUCCESS_INVALID
+ else:
+ # OK, the url has some more components. Ask each of the Workgroup items
+ # to help resolve it.
+ kid = self.firstChild()
+ while kid is not None:
+ rc = kid.selectURL(targeturl)
+ if rc==self.OPEN_SUCCESS or rc==self.OPEN_SUCCESS_INVALID:
+ kid.setOpen(True)
+ return rc
+ elif rc==self.OPEN_BUSY:
+ return rc
+ kid = kid.nextSibling()
+ return self.OPEN_FAIL
+ elif self.getLevel()==self.LEVEL_WORKGROUP:
+ # Workgroup level
+ if not self.resolved:
+ self.startResolve(False)
+ return self.OPEN_BUSY
+ else:
+ # Find a child named after the next part of the URL path.
+ kid = self.firstChild()
+ partname = parts[0].lower()
+ while kid is not None:
+ if kid.getComponent()==partname:
+ self.setOpen(True)
+ return kid.selectURL(targeturl)
+ kid = kid.nextSibling()
+ return self.OPEN_FAIL
+ elif self.getLevel()==self.LEVEL_MACHINE:
+ # Machine level
+ if len(parts)==1:
+ # The URL is successfully resolved but is not selectable!
+ return self.OPEN_SUCCESS_INVALID
+ else:
+ # Share level
+ if len(parts)==self.depth()-1:
+ self.smbdialog.treeview.setSelected(self,True)
+ return self.OPEN_SUCCESS
+
+ if not self.resolved:
+ self.startResolve(True)
+ return self.OPEN_BUSY
+ else:
+ # Find a child item that matches the next part of the URL path.
+ kid = self.firstChild()
+ partname = parts[self.depth()-1].lower()
+ while kid is not None:
+ if kid.getComponent()==partname:
+ return kid.selectURL(targeturl)
+ kid = kid.nextSibling()
+ return self.OPEN_FAIL
diff --git a/mountconfig/SimpleCommandRunner.py b/mountconfig/SimpleCommandRunner.py
new file mode 100644
index 0000000..d533563
--- /dev/null
+++ b/mountconfig/SimpleCommandRunner.py
@@ -0,0 +1,69 @@
+###########################################################################
+# SimpleCommandRunner.py - description #
+# ------------------------------ #
+# begin : Tue May 17 2005 #
+# copyright : (C) 2005 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+from qt import *
+from kdecore import *
+import locale
+
+debug = False
+#debug = True
+
+
+class SimpleCommandRunner(QObject):
+ ########################################################################
+ def __init__(self):
+ QObject.__init__(self)
+
+ ########################################################################
+ def run(self,cmdlist,STDOUT_only=False):
+ """Run the given command and return the result.
+
+ Keyword arguments:
+ cmdlist - Command and arguments. Given as a list of strings. The first item is
+ the executable.
+ STDOUT_only - Do not return STDERR in the output stream.
+
+ Returns a tuple (rc,output). rc is the numeric return code from
+ the command, or None if the command couldn't be started. output
+ is the output from stdout and stderr.
+ """
+ global debug
+ if debug: print cmdlist
+ self.STDOUT_only = STDOUT_only
+ self.output = u""
+ proc = KProcess()
+ proc.setEnvironment("LANG","US")
+ proc.setEnvironment("LC_ALL","US")
+ self.connect(proc,SIGNAL("receivedStdout(KProcess *,char *,int)"),self.slotStdout)
+ self.connect(proc,SIGNAL("receivedStderr(KProcess *,char *,int)"),self.slotStderr)
+ proc.setArguments(cmdlist)
+ rc = None
+ if proc.start(proc.Block,proc.AllOutput)==True:
+ if proc.normalExit():
+ rc = proc.exitStatus()
+ return (rc,self.output)
+
+ ########################################################################
+ def slotStdout(self,proc,buffer,buflen):
+ global debug
+ if debug: print "slotStdout() |"+buffer+"|"
+ self.output += buffer.decode(locale.getpreferredencoding())
+
+ ########################################################################
+ def slotStderr(self,proc,buffer,buflen):
+ global debug
+ if debug: print "slotStderr() |"+buffer+"|"
+ if not self.STDOUT_only:
+ self.output += buffer.decode(locale.getpreferredencoding())
diff --git a/mountconfig/fuser.py b/mountconfig/fuser.py
new file mode 100644
index 0000000..d898b37
--- /dev/null
+++ b/mountconfig/fuser.py
@@ -0,0 +1,299 @@
+#!/usr/bin/python
+###########################################################################
+# fuser.py - description #
+# ------------------------------ #
+# begin : Wed Jun 15 2005 #
+# copyright : (C) 2005-2006 by Sebastian Kuegler #
+# email : sebas@vizZzion.org #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+"""
+TODO:
+- Fix running standalone:
+ * KCmdLineArgs stuff.
+"""
+
+import sys
+import os
+from qt import *
+from kdeui import *
+#import kdedesigner
+from fuser_ui import *
+from SimpleCommandRunner import *
+
+standalone = __name__ == "__main__"
+
+class FileProcess(QListViewItem):
+ """ A FileProcess is simply one line from lsof, one filedescriptor that's in use
+ by a process represented as a listviewitem in the lsof processtable. """
+
+ # Available signals.
+ signals = {
+ "TERM":15,
+ "KILL":9 }
+
+ # Column names mapping.
+ cols = {
+ "pname":0,
+ "pid":1,
+ "powner":2,
+ "pfile":3 }
+
+ def __init__(self,parent,pid,isparent=False):
+ QListViewItem.__init__(self,parent)
+ self.setPid(pid)
+ self.isparent = isparent
+ self.pfile = ""
+ self.pix = None
+
+ def setPid(self,pid):
+ self.pid = pid
+
+ def setName(self,pname):
+ self.pname = pname
+
+ def setOwner(self,powner):
+ self.powner = powner
+
+ def setFile(self,pfile):
+ self.pfile = pfile
+
+ def setPixmaps(self,pix):
+ """ Eats a dict with pixmaps. """
+ self.pix = pix
+
+ def sendSignal(self,signal):
+ """ Parses a signal string representation or a signal number and sends it to
+ the process."""
+ if not self.isparent:
+ print "Item is not a process, only a filedescriptor."
+ return
+ try:
+ signal_int = int(signal)
+ except ValueError:
+ try:
+ signal_int = self.signals[signal]
+ except IndexError:
+ print "No known signal received ", signal
+ return False
+ try:
+ rc = os.kill(int(self.pid),signal_int) # TODO: Catch OSError
+ except OSError, message:
+ print "OSError: Couldn't %s %s %s" % (signal,self.pname,self.pid)
+ print message
+ if not rc:
+ print "Successfully sent signal ", signal_int, " to process ", self.pid
+ return True
+ print "Signal %i didn't succeed" % signal_int
+ return False
+
+ def fillColumns(self):
+ """ Writes strings into columns once an entry is completed. """
+ if self.isparent:
+ self.setText(self.cols["pid"],self.pid)
+ self.setText(self.cols["pname"],self.pname)
+ self.setText(self.cols["powner"],self.powner)
+ self.setPixmap(0,self.pix["exec"])
+ self.setPixmap(1,self.pix["pid"])
+ self.setPixmap(2,self.pix["owner"])
+ else:
+ self.setText(self.cols["pfile"],self.pfile)
+ self.setPixmap(3,self.pix["file"])
+
+########################################################################################################
+class FUser(FUserUI):
+ """ done() / result() return 0 on successful umount and 1 if cancelled. """
+
+ def __init__(self,device,parentdialog=None,lsof_bin='/usr/sbin/lsof',kapp=None):
+ FUserUI.__init__(self,parentdialog,name = None,modal = 0,fl = 0)
+ self.device = device
+ self.fileprocesses = []
+ self.lsof_bin = '/usr/sbin/lsof'
+ self.setLsof(lsof_bin)
+ self.setApp(kapp)
+
+ self.processlist.clear()
+ self.processhidden = False
+ # We're having processes blocking umounting, show that.
+ self.umountbutton.setEnabled(False)
+
+ self.explanationlabel.setText(
+ unicode(i18n("""The volume %s is in use and can not be disabled.<br>
+ <br>
+ The processes that are blocking %s are listed below. These processes must be closed
+ before %s can be disabled.
+ Killing a process may cause data loss! Make sure all work is saved before killing an
+ application.
+ """)) % (self.device,self.device,self.device))
+
+ self.connect(self.cancelbutton,SIGNAL("clicked()"),self.slotCancelButtonClicked)
+ self.connect(self.killbutton,SIGNAL("clicked()"),self.slotKillButtonClicked)
+ self.connect(self.killallbutton,SIGNAL("clicked()"),self.slotKillallButtonClicked)
+ self.connect(self.refreshbutton,SIGNAL("clicked()"),self.refreshProcesslist)
+ self.connect(self.processlist,SIGNAL("selectionChanged()"),self.slotSelectionChanged)
+ self.connect(self.umountbutton,SIGNAL("clicked()"),self.slotUmountButtonClicked)
+
+ # TODO: Make optionsbutton resize dialog if processframe is hidden, hide Optionsbutton until then.
+ self.optionsbutton.hide()
+ self.readPixmaps()
+ self.warningimage.setPixmap(MainBarIcon("messagebox_warning"))
+
+ # Delayed initialisation.
+ QTimer.singleShot(0,self.isMounted)
+ QTimer.singleShot(0,self.refreshProcesslist)
+
+ def setApp(self,app):
+ """ We need a reference to the (K|Q)Application for certain things, e.g. setting
+ the MouseCursor. """
+ self.app = app
+
+ def setLsof(self,path):
+ """ Where's the lsof binary? """
+ if os.path.isfile(path):
+ self.lsof_bin = path
+ else:
+ print path, " is not a valid binary, keeping %s", self.lsof_bin
+
+ def readPixmaps(self):
+ self.pix = {
+ "exec": UserIcon("exec"),
+ "owner": UserIcon("user"),
+ "pid": UserIcon("tux"),
+ "file": UserIcon("file")}
+
+ def refreshProcesslist(self):
+ """ Read lsof output and add the processdescriptors to the listview. """
+ kapp = self.app
+
+ kapp.setOverrideCursor(QCursor(Qt.BusyCursor))
+
+ self.processlist.clear()
+ rc, output = SimpleCommandRunner().run([self.lsof_bin,'-FpcLn',self.device],True)
+ procs = output.split()
+
+ self.processes = []
+ self.realprocesses = []
+ for line in procs:
+ line = str(line)
+ type = line[0]
+ info = line[1:]
+
+ if type is "p":
+ pid = info
+ parentproc = FileProcess(self.processlist,pid,True)
+ self.processes.append(parentproc)
+ self.realprocesses.append(parentproc)
+ parentproc.setPixmaps(self.pix)
+ files = 0
+
+ if type == "c":
+ pname = info
+ parentproc.setName(pname)
+
+ if type == "L":
+ powner = info
+ parentproc.setOwner(powner)
+
+ if type == "n":
+ pfile = info
+ childproc = FileProcess(parentproc,pid)
+ self.processes.append(childproc)
+ childproc.setPixmaps(self.pix)
+ childproc.setFile(pfile)
+ childproc.setOwner(powner)
+ childproc.setName(pname)
+ if files == 0:
+ parentproc.fillColumns()
+ files += 1
+ childproc.fillColumns()
+
+ kapp.restoreOverrideCursor()
+
+ # Enable / disable buttons which are (in)appropriate.
+ self.killallbutton.setEnabled(len(self.realprocesses)!=0)
+ self.killbutton.setEnabled(len(self.realprocesses)!=0)
+ self.umountbutton.setEnabled(len(self.realprocesses)==0)
+ if self.processlist.selectedItem() == None:
+ self.killbutton.setEnabled(False)
+
+ def isMounted(self):
+ rc,output = SimpleCommandRunner().run(["/bin/mount"],False)
+ mounts = []
+ for line in output.split('\n'):
+ try:
+ mounts.append(line.split()[0])
+ except IndexError:
+ pass
+ ismounted = self.device in mounts
+ self.umountbutton.setEnabled(ismounted)
+ return ismounted
+
+ def slotCancelButtonClicked(self):
+ self.done(1)
+
+ def slotKillButtonClicked(self):
+ try:
+ self.processlist.selectedItem().sendSignal("KILL")
+ self.refreshProcesslist()
+ except AttributeError:
+ print "No killable item selected."
+
+ def slotKillallButtonClicked(self):
+ for process in self.realprocesses:
+ process.sendSignal("KILL")
+ self.refreshProcesslist()
+
+ def slotOptionsButtonCLicked(self):
+ self.processhidden = not self.processhidden
+ self.processframe.setHidden(self.processhidden)
+
+ def slotSelectionChanged(self):
+ """ Check if item is a process or a file, disable killbutton for children. """
+ selected = self.processlist.selectedItem()
+ if not selected.isparent:
+ self.killbutton.setEnabled(False)
+ else:
+ self.killbutton.setEnabled(True)
+
+ def slotUmountButtonClicked(self):
+ SimpleCommandRunner
+ rc, output = SimpleCommandRunner().run(['/bin/umount',self.device])
+ if rc == 0:
+ print "%s successfully unmounted." % self.device
+ # Close dialog and return 0 - sucessfully umounted.
+ self.done(0)
+ else:
+ print "Unmounting %s failed: %s" % (self.device,output[:-1])
+ self.isMounted()
+
+################################################################################################
+if standalone:
+ device = "/dev/hda1"
+ print 'Device is ', device
+
+ cmd_args = KCmdLineArgs.init(sys.argv, "FUser",
+ "A graphical frontend to fuser, but without using it :-)", "0.2")
+
+ # ----------------------------------------------------------------------------
+ # FIXME: All the arg-parsing stuff does not work yet since I don't understand KCmdLineArgs.
+ options = [("device <device>", "Device to umount")]
+ KCmdLineArgs.addCmdLineOptions(options)
+ args = KCmdLineArgs.parsedArgs()
+ # print args.count()
+ # ----------------------------------------------------------------------------
+
+ kapp = KApplication()
+ KGlobal.iconLoader().addAppDir("guidance")
+ fuserapp = FUser(device)
+
+ fuserapp.setApp(kapp)
+ kapp.setMainWidget(fuserapp)
+ fuserapp.show()
+ kapp.exec_loop()
diff --git a/mountconfig/fuser_ui.ui b/mountconfig/fuser_ui.ui
new file mode 100644
index 0000000..4499f93
--- /dev/null
+++ b/mountconfig/fuser_ui.ui
@@ -0,0 +1,352 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>FUserUI</class>
+<comment>Python:from kdeui import *
+Python:from kdecore import *</comment>
+<author>Sebastian Kuegler</author>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>Process</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>546</width>
+ <height>536</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>400</width>
+ <height>250</height>
+ </size>
+ </property>
+ <property name="baseSize">
+ <size>
+ <width>400</width>
+ <height>250</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Error: Volume in use</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout10</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>warningimage</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="scaledContents">
+ <bool>false</bool>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>explanationlabel</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="text">
+ <string>The volume $VOLUME is in use and can not be disabled.
+
+The processes that are blocking $VOLUME are listed below. These processes must be closed before $VOLUME can be disabled.
+Killing a process may cause data loss. Make sure all work is saved before killing an application.</string>
+ </property>
+ <property name="alignment">
+ <set>WordBreak|AlignVCenter</set>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QFrame">
+ <property name="name">
+ <cstring>processframe</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Raised</enum>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>5</number>
+ </property>
+ <property name="spacing">
+ <number>4</number>
+ </property>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout7</cstring>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QListView">
+ <column>
+ <property name="text">
+ <string>Process</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Process ID</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Owner</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>File</string>
+ </property>
+ <property name="clickable">
+ <bool>true</bool>
+ </property>
+ <property name="resizable">
+ <bool>true</bool>
+ </property>
+ </column>
+ <property name="name">
+ <cstring>processlist</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>7</vsizetype>
+ <horstretch>1</horstretch>
+ <verstretch>1</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="resizePolicy">
+ <enum>Manual</enum>
+ </property>
+ <property name="allColumnsShowFocus">
+ <bool>true</bool>
+ </property>
+ <property name="showSortIndicator">
+ <bool>true</bool>
+ </property>
+ <property name="rootIsDecorated">
+ <bool>true</bool>
+ </property>
+ <property name="resizeMode">
+ <enum>LastColumn</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout11</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>killallbutton</cstring>
+ </property>
+ <property name="text">
+ <string>Kill all listed processes</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>listbuttonspacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>184</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>killbutton</cstring>
+ </property>
+ <property name="text">
+ <string>Kill process</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>refreshbutton</cstring>
+ </property>
+ <property name="text">
+ <string>Refresh list</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout12</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>optionsbutton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>&gt;&gt;&gt; Options</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>bottombuttonspacer</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>280</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>umountbutton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Disable volume</string>
+ </property>
+ </widget>
+ <widget class="KPushButton">
+ <property name="name">
+ <cstring>cancelbutton</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Cancel</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<pixmapfunction>QPixmap</pixmapfunction>
+<layoutdefaults spacing="6" margin="6"/>
+<includehints>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+ <includehint>kpushbutton.h</includehint>
+</includehints>
+</UI>
diff --git a/mountconfig/mountconfig.desktop b/mountconfig/mountconfig.desktop
new file mode 100644
index 0000000..e0fa311
--- /dev/null
+++ b/mountconfig/mountconfig.desktop
@@ -0,0 +1,51 @@
+[Desktop Entry]
+Name=Disk & Filesystems
+Name[da]=Disk & Filesystemer
+Name[el]=Δίσκοι & συστήματα αρχείων
+Name[es]=Disco y sistemas de archivos
+Name[et]=Ketas ja failisüsteemid
+Name[it]=Dischi e filesystem
+Name[ja]=ディスクとファイルシステム
+Name[nl]=Schijven en bestandssystemen
+Name[pt]=Disco & Sistemas de Ficheiros
+Name[pt_BR]=Disco & Sistemas de Arquivos
+Name[sr]=Диск и фајл-системи
+Name[sr@Latn]=Disk i fajl-sistemi
+Name[sv]=Disk- och filsystem
+Name[xx]=xxDisk & Filesystemsxx
+name[en_GB]=Disk & Filesystems
+Comment=Disk & Filesystem Configuration
+Comment[el]=Ρυθμίσεις δίσκων & συστημάτων αρχείων
+Comment[es]=Configuración del disco y sistema de archivos
+Comment[et]=Ketta ja failisüsteemi seadistamine
+Comment[it]=Configurazione di dischi e filesystem
+Comment[ja]=ディスクとファイルシステムの設定
+Comment[nl]=Schijven en bestandssystemen instellen
+Comment[pt]=Configuração do Disco & Sistema de Ficheiros
+Comment[pt_BR]=Configuração de Disco e Sistemas de Arquivos
+Comment[sr]=Подешавање диска и фајл-система
+Comment[sr@Latn]=Podešavanje diska i fajl-sistema
+Comment[sv]=Disk och filsysteminitierníng
+Comment[xx]=xxDisk & Filesystem Configurationxx
+Icon=disksfilesystems.png
+Encoding=UTF-8
+X-KDE-ModuleType=Library
+X-KDE-Library=mountconfig
+X-KDE-FactoryName=mountconfig
+X-KDE-RootOnly=true
+Type=Application
+Exec=kcmshell System/mountconfig
+Categories=Qt;KDE;X-KDE-settings-system;
+GenericName=Mount Point Editor
+GenericName[el]=Επεξεργαστής σημείων προσάρτησης
+GenericName[es]=Editor del punto de montaje
+GenericName[et]=Ühenduspunktide redaktor
+GenericName[it]=Editor dei punti di montaggio
+GenericName[ja]=マウントポイントエディタ
+GenericName[nl]=Aankoppelpunten bewerken
+GenericName[pt]=Editor de Pontos de Montagem
+GenericName[pt_BR]=Editor de Pontos de Montagem
+GenericName[sr]=Уређивач тачки монтирања
+GenericName[sr@Latn]=Uređivač tački montiranja
+GenericName[sv]=Editor för monteringspunkter
+GenericName[xx]=xxMount Point Editorxx
diff --git a/mountconfig/mountconfig.py b/mountconfig/mountconfig.py
new file mode 100755
index 0000000..1f31f13
--- /dev/null
+++ b/mountconfig/mountconfig.py
@@ -0,0 +1,3303 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# mountconfig.py - description #
+# ------------------------------ #
+# begin : Fri Nov 30 2003 #
+# copyright : (C) 2003 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdeui import *
+from kdecore import *
+from kfile import *
+from kio import *
+import sys
+import os
+import os.path
+from types import StringType,UnicodeType
+import pwd
+import grp
+import math
+import locale
+import codecs
+import subprocess
+import MicroHAL
+from SMBShareSelectDialog import *
+from SimpleCommandRunner import *
+from fuser import *
+import sizeview
+
+programname = "Disk & Filesystem Configuration"
+version = "0.8.0"
+
+# Are we running as a separate standalone application or in KControl?
+standalone = __name__=='__main__'
+
+# Running as the root user or not?
+isroot = os.getuid()==0
+allowuuid = True
+allowlabel = True
+
+
+"""
+Universal Options
+-----------------
+
+async/sync
+atime/noatime
+auto/noauto
+dev/nodev
+exec/noexec
+ro/rw
+suid/nosuid
+dirsync
+nouser/user/users
+
+defaults =>rw, suid, dev, exec, auto, nouser, and async.
+
+Automatically set
+=================
+_netdev
+The filesystem resides on a device that requires network access (used to
+prevent the system from attempting to mount these filesystems until the
+network has been enabled on the system).
+
+remount
+Attempt to remount an already-mounted file system. This is commonly used
+to change the mount flags for a file system, especially to make a readonly
+file system writeable. It does not change device or mount point.
+
+Supported filesystems
+---------------------
+nfs
+ext2
+ext3
+reiserfs
+vfat
+ntfs
+udf
+iso9660
+supermount
+reiser4
+xfs
+jfs
+hfs
+hfsplus
+
+cifs (replacement for smbfs)
+auto
+
+swap
+
+proc
+sysfs
+usbdevfs
+procbususb
+
+TODO
+----
+* SMB finished the connection username nad password fields.
+* SMB entry: finished writing the config.
+* SMBSelector: setting the username and password.
+
+"""
+
+############################################################################
+class UserComboBox(KComboBox):
+ def __init__(self,parent,name=None):
+ KComboBox.__init__(self,parent,name)
+ tmplist = []
+ users = pwd.getpwall()
+ for user in users:
+ uid = int(user[2])
+ username = user[4]
+ tmplist.append( (int(uid),"%s (%s)" % (username,uid)) )
+ tmplist.sort(lambda a,b: cmp(a[1],b[1]))
+ self.userlist = []
+ for user in tmplist:
+ self.insertItem(user[1])
+ self.userlist.append(user[0])
+
+ ########################################################################
+ def setUID(self,uid):
+ if uid in self.userlist:
+ self.setCurrentItem(self.userlist.index(int(uid)))
+ return True
+ else:
+ return False
+
+ ########################################################################
+ def UID(self):
+ return self.userlist[self.currentItem()]
+
+############################################################################
+class GroupComboBox(KComboBox):
+ def __init__(self,parent,name=None):
+ KComboBox.__init__(self,parent,name)
+ self.grouplist = []
+ groups = grp.getgrall()
+ tmplist = []
+ for group in groups:
+ gid = group[2]
+ groupname = group[0]
+ tmplist.append( (int(gid),"%s (%s)" % (groupname,gid)) )
+ tmplist.sort(lambda a,b: cmp(a[1],b[1]))
+ self.grouplist = []
+ for group in tmplist:
+ self.insertItem(group[1])
+ self.grouplist.append(group[0])
+
+ ########################################################################
+ def setGID(self,gid):
+ if gid in self.grouplist:
+ self.setCurrentItem(self.grouplist.index(int(gid)))
+ return True
+ else:
+ return False
+
+ ########################################################################
+ def GID(self):
+ return self.grouplist[self.currentItem()]
+
+
+############################################################################
+class MountEntryExt(object):
+ use_as_device = "devicenode" # Can be one of "devicenode", "uuid" or "label"
+ showdevice = True
+ showlabel = False
+ showuuid = False
+
+ ########################################################################
+ # Base can be either a fstab format line of text, of another MountEntry
+ # object.
+ def __init__(self,base=None):
+ if base==None:
+ self.device = unicode(i18n("<device>"))
+ self.mountpoint = unicode(i18n("<mount point>"))
+ self.mounttype = 'ext2'
+ self.uuid = ""
+ self.label = ""
+ self.extraoptions = "noauto"
+ self.fs_freq = 0
+ self.fs_passno = 0
+ self.enabled = False
+ self.managed = False
+ self.device_string = ""
+
+ elif isinstance(base,StringType) or isinstance(base,UnicodeType):
+ parts = base.split()
+
+ device_ref = MountEntry.decodeMountEntryString(parts[0])
+ self.uuid = ""
+ self.label = ""
+ if device_ref.startswith("UUID="):
+ self.uuid = device_ref[5:]
+ self.setUseAsDevice("uuid")
+ mapped_device = microhal.getDeviceByUUID(self.uuid)
+ if mapped_device is not None:
+ self.device = mapped_device.getDev()
+ else:
+ self.device = ""
+ try:
+ self.label = mapped_device.getLabel()
+ except AttributeError:
+ pass
+ elif device_ref.startswith("LABEL="):
+ self.label = device_ref[6:]
+ self.setUseAsDevice("label")
+ mapped_device = microhal.getDeviceByLabel(self.label)
+ if mapped_device is not None:
+ self.device = mapped_device.getDev()
+ else:
+ self.device = ""
+ else:
+ self.device = device_ref
+
+ self.mountpoint = MountEntry.decodeMountEntryString(parts[1])
+ self.mounttype = MountEntry.decodeMountEntryString(parts[2])
+ self.extraoptions = MountEntry.decodeMountEntryString(parts[3])
+ self.fs_freq = int(parts[4])
+ self.fs_passno = int(parts[5])
+ self.enabled = False
+
+ options = self.extraoptions.split(",")
+ self.managed = "managed" in options
+ try:
+ options.remove("managed")
+ except ValueError:
+ pass
+ self.extraoptions = ",".join(options)
+
+ else:
+ # This is a new entry, but it's based on another one.
+ self.device = base.device
+ self.mountpoint = base.mountpoint
+ self.mounttype = base.mounttype
+ self.extraoptions = base.extraoptions
+ self.fs_freq = base.fs_freq
+ self.fs_passno = base.fs_passno
+ self.uuid = base.uuid
+ self.enabled = base.enabled
+ self.managed = False
+ self.iconname = self.getIconName()
+
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExt()
+ # FIXME: use "newobject = self.__class__()" and get rid of the newobject parameter.
+ newobject.device = self.device
+ newobject.mountpoint = self.mountpoint
+ newobject.mounttype = self.mounttype
+ newobject.use_as_device = self.use_as_device
+ newobject.showlabel = self.showlabel
+ newobject.showdevice = self.showdevice
+ newobject.showuuid = self.showuuid
+ newobject.extraoptions = self.extraoptions
+ newobject.fs_freq = self.fs_freq
+ newobject.fs_passno = self.fs_passno
+ newobject.enabled = self.enabled
+ newobject.uuid = self.uuid
+ newobject.label = self.label
+ return newobject
+
+ ########################################################################
+ def cleanup(self):
+ # This method is called after the entry has been removed from the
+ # mounttable.
+ pass
+
+ ########################################################################
+ def setMountType(self,mounttypename): self.mounttype = mounttypename
+
+ ########################################################################
+ def isFileSystemAvailable(self):
+ return microhal.isSupportedFileSystem(self.mounttype)
+
+ def getDevice(self): return self.device
+ def setDevice(self,device): self.device = device
+ def setUseAsDevice(self,use_as): self.use_as_device = use_as
+ def getUseAsDevice(self): return self.use_as_device
+ def setUUID(self,uuid): self.uuid = uuid
+ def setLabel(self,label): self.label = label
+ def getMountPoint(self): return self.mountpoint
+ def setMountPoint(self,mountpoint): self.mountpoint = mountpoint
+ def getExtraOptions(self): return self.extraoptions
+ def setExtraOptions(self,extraoptions): self.extraoptions = extraoptions
+ def getFSFreq(self): return self.fs_freq
+ def setFSFreq(self,fs_freq): self.fs_freq = fs_freq
+ def getFSPassno(self): return self.fs_passno
+ def setFSPassno(self,fs_passno): self.fs_passno = fs_passno
+ def isManaged(self): return self.managed
+
+ def getUUID(self):
+ if not self.uuid:
+ return ""
+ return self.uuid
+
+ def getLabel(self):
+ try:
+ if not self.label:
+ return ""
+ return self.label
+ except AttributeError:
+ return ""
+
+ def getDeviceString(self):
+ if self.getUseAsDevice() == "label":
+ if self.label != "":
+ return MountEntry.encodeMountEntryString("LABEL="+self.label)
+ else:
+ print "No Label set, preventing you from shooting yourself in the foot"
+ elif self.getUseAsDevice() == "uuid":
+ if self.uuid != "":
+ return "UUID="+self.uuid
+ return MountEntry.encodeMountEntryString("UUID="+self.uuid)
+ else:
+ print "No UUID set, preventing you from shooting yourself in the foot"
+ return MountEntry.encodeMountEntryString(self.device)
+
+ ########################################################################
+ def getName(self):
+ if os.path.basename(self.device).startswith("fd"):
+ return "Floppy"
+ else:
+ return self.mountpoint
+
+ ########################################################################
+ def getIconName(self):
+ if self.device is not None and os.path.basename(self.device).startswith("fd"):
+ return "hi16-floppy"
+ else:
+ return "hi16-blockdevice"
+
+ ########################################################################
+ def updateStatus(self,mtablist):
+ self.enabled = self.mountpoint in mtablist
+
+ ########################################################################
+ def getFstabOptions(self):
+ if self.extraoptions!="":
+ return self.extraoptions.split(",")
+ else:
+ return []
+
+ ########################################################################
+ def getFstabLine(self):
+ # Construct the options field.
+ _options = self.getFstabOptions()
+ options = []
+ # Remove whitespace and dupes
+ for o in _options:
+ if o.strip() not in options:
+ options.append(o.strip())
+
+ return self.getDeviceString() + \
+ u" " + MountEntry.encodeMountEntryString(self.mountpoint.replace("%20","\040")) + \
+ u" " + MountEntry.encodeMountEntryString(self.mounttype) + \
+ u" " + MountEntry.encodeMountEntryString(u",".join(options)) + \
+ u" " + unicode(self.fs_freq) + u" " + unicode(self.fs_passno)
+
+ ########################################################################
+ def getCategory(self):
+ return self.device
+
+ ########################################################################
+ def isEnabled(self): return self.enabled
+
+ ########################################################################
+ def enable(self,parentdialog):
+ self._setBusy(parentdialog,True)
+ try:
+ (rc,output) = SimpleCommandRunner().run(["/bin/mount",self.mountpoint])
+ finally:
+ self._setBusy(parentdialog,False)
+ if rc!=0:
+ self.handleMountFailure(parentdialog,rc,output,True)
+
+ ########################################################################
+ def disable(self,parentdialog):
+ self._setBusy(parentdialog,True)
+ try:
+ (rc,output) = SimpleCommandRunner().run(["/bin/umount",self.mountpoint])
+ finally:
+ self._setBusy(parentdialog,False)
+ if rc!=0:
+ self.handleMountFailure(parentdialog,rc,output,False)
+
+ ########################################################################
+ def handleMountFailure(self,parentdialog,rc,output,mount_action=True):
+ """
+ Keyword arguments:
+ mount_action - True=enable, False=disable
+ """
+ global kapp
+ if mount_action:
+ msg = i18n("An error occurred while enabling %1.\n\nThe system reported: %2").arg( \
+ self.mountpoint).arg(output)
+ captionmsg = i18n("Unable to enable %1").arg(self.mountpoint)
+ else:
+ msg = i18n("An error occurred while disabling %1.\n\nThe system reported: %2").arg(
+ self.mountpoint).arg(output)
+ captionmsg = i18n("Unable to disable %1").arg(self.mountpoint)
+
+ extramsg = unicode(i18n("Return code from mount was %1.\n").arg(rc))
+
+ if (rc & 1)!=0:
+ extramsg += unicode(i18n("\"incorrect invocation or permissions\"\n"))
+ if (rc & 2)!=0:
+ extramsg += unicode(i18n("\"system error (out of memory, cannot fork, no more loop devices)\"\n"))
+ if (rc & 4)!=0:
+ extramsg += unicode(i18n("\"internal mount bug or missing nfs support in mount\"\n"))
+ if (rc & 8)!=0:
+ extramsg += unicode(i18n("\"user interrupt\"\n"))
+ if (rc & 16)!=0:
+ extramsg += unicode(i18n("\"problems writing or locking /etc/mtab\"\n"))
+ if (rc & 32)!=0:
+ extramsg += unicode(i18n("\"mount failure\"\n"))
+ if (rc & 64)!=0:
+ extramsg += unicode(i18n("\"some mount succeeded\"\n"))
+
+ in_use = False
+ if not mount_action:
+ # Use lsof to find out what is blocking the device.
+ lsof_bin = '/usr/bin/lsof'
+ rc, output = SimpleCommandRunner().run([lsof_bin,'-FncL',str(self.mountpoint)])
+ if rc==0:
+ # Check if there is one or more processes using the device.
+ in_use = len(output.split())>3
+ if in_use:
+ # Start fuser.py which lists open filedescriptors on device and offers to get
+ # rid of them.
+ fuser = FUser(str(self.mountpoint),None,lsof_bin,kapp)
+ fuser.exec_loop()
+ in_use_message = ""
+ if fuser.result() != 0:
+ in_use_message = unicode(i18n("Unmounting %1 failed or was cancelled.").arg(self.device))
+ extramsg += in_use_message
+ else:
+ extramsg += unicode(i18n("(none)"))
+
+ if not in_use:
+ KMessageBox.detailedSorry(parentdialog, msg, extramsg, captionmsg)
+
+ ########################################################################
+ def _setBusy(self,parentdialog,flag):
+ global kapp
+ if flag:
+ kapp.setOverrideCursor( QCursor(Qt.WaitCursor) )
+ parentdialog.setEnabled(False)
+
+ # It is necessary to process some of the events in the event queue.
+ # Otherwise the user won't see that the window is disabled.
+ # ( setEnabled() here above doesn't redraw the window immediately.
+ # Redrawing is done via the event queue.)
+ kapp.processEvents()
+ else:
+ parentdialog.setEnabled(True)
+ kapp.restoreOverrideCursor()
+
+############################################################################
+class MountEntryExtCommonUnix(MountEntryExt):
+
+ USERMOUNT_NO = 0
+ USERMOUNT_ONE = 1
+ USERMOUNT_ANY = 2
+ USERMOUNT_OWNER = 3
+
+ ########################################################################
+ # Base can be either a fstab format line of text, or another MountEntry
+ # object.
+ def __init__(self,base=None):
+ super(MountEntryExtCommonUnix,self).__init__(base)
+
+ if isinstance(base,MountEntryExtCommonUnix):
+ # Being initalised from an existing object.
+ # Only mess with objects
+ self.atime = base.atime
+ self.auto = base.auto
+ self.writeable = base.writeable
+ self.usedevpoints = base.usedevpoints
+ self.showlabel = True
+ self.showuuid = True
+ self.allowexecutables = base.allowexecutables
+ self.allowsuid = base.allowsuid
+ self.allowusermount = base.allowusermount
+
+ elif isinstance(base,StringType) or isinstance(base,UnicodeType):
+ options = self.extraoptions.split(",")
+
+ self.atime = True
+ if "noatime" in options:
+ self.atime = False
+ self.auto = True
+ if "noauto" in options:
+ self.auto = False
+ self.writeable = True
+ if "ro" in options:
+ self.writeable = False
+ self.usedevpoints = True
+ if "nodev" in options:
+ self.usedevpoints = False
+ self.allowexecutables = True
+ if "noexec" in options:
+ self.allowexecutables = False
+ self.allowsuid = True
+ if "nosuid" in options:
+ self.allowsuid = False
+ self.allowusermount = self.USERMOUNT_NO
+ if "user" in options:
+ self.allowusermount = self.USERMOUNT_ONE
+ if "users" in options:
+ self.allowusermount = self.USERMOUNT_ANY
+ if "owner" in options:
+ self.allowusermount = self.USERMOUNT_OWNER
+
+ self.showlabel = True
+ self.showuuid = True
+
+ for x in ["noatime","atime","auto","noauto","dev","nodev","nouser", \
+ "owner","users","user","suid","nosuid","exec","noexec","rw","ro"]:
+ try:
+ options.remove(x)
+ except ValueError:
+ pass
+
+ self.extraoptions = ",".join(options)
+
+ else:
+ # Set some sane defaults.
+ self.showlabel = True
+ self.showuuid = True
+ self.atime = True
+ self.auto = False
+ self.writeable = True
+ self.usedevpoints = False
+ self.allowexecutables = False
+ self.allowsuid = False
+ self.allowusermount = self.USERMOUNT_NO
+
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExtCommonUnix()
+ super(MountEntryExtCommonUnix,self).copy(newobject)
+ newobject.atime = self.atime
+ newobject.auto = self.auto
+ newobject.use_as_device = self.use_as_device
+ newobject.showlabel = self.showlabel
+ newobject.showdevice = self.showdevice
+ newobject.showuuid = self.showuuid
+ newobject.uuid = self.uuid
+ newobject.label = self.label
+ newobject.writeable = self.writeable
+ newobject.usedevpoints = self.usedevpoints
+ newobject.allowexecutables = self.allowexecutables
+ newobject.allowsuid = self.allowsuid
+ newobject.allowusermount = self.allowusermount
+ return newobject
+
+ ########################################################################
+ def getFstabOptions(self):
+ options = []
+
+ # These options must appear before the others. 'user', according to the
+ # mount man page implies 'noexec' too, BUT the noexec can be overridden
+ # by specifying 'exec' after the 'user' keyword. Therefore 'exec' etc
+ # must come after 'user', 'users' and friends.
+ options.append(['nouser','user','users','owner'][self.allowusermount])
+
+ super_options = super(MountEntryExtCommonUnix,self).getFstabOptions()
+ options.extend(super_options)
+
+ options.append(['noatime','atime'][self.atime])
+ options.append(['noauto','auto'][self.auto])
+ options.append(['ro','rw'][self.writeable])
+ options.append(['nodev','dev'][self.usedevpoints])
+ options.append(['noexec','exec'][self.allowexecutables])
+ options.append(['nosuid','suid'][self.allowsuid])
+ return options
+
+ ########################################################################
+ # atime/noatime
+ def getAtime(self): return self.atime
+ def setAtime(self,val): self.atime = val
+ # auto/noauto
+ def getMountAtBoot(self): return self.auto
+ def setMountAtBoot(self,val): self.auto = val
+ # ro/rw
+ def getWritable(self): return self.writeable
+ def setWritable(self,val): self.writeable = val
+ # dev, nodev
+ def getUseDevPoints(self): return self.usedevpoints
+ def setUseDevPoints(self,val): self.usedevpoints = val
+ # exec/noexec
+ def getAllowExecutables(self): return self.allowexecutables
+ def setAllowExecutable(self,val): self.allowexecutables = val
+ # suid/nosuid
+ def getSUID(self): return self.allowsuid
+ def setSUID(self,val): self.allowsuid = val
+ # nouser/user/users/owner
+ def setAllowUserMount(self,val): self.allowusermount = val
+ def getAllowUserMount(self): return self.allowusermount
+
+
+############################################################################
+# Common unix filesystems, but for local hard disks. i.e. partitions.
+class MountEntryExtCommonUnixLocal(MountEntryExtCommonUnix):
+ ########################################################################
+ def __init__(self,base=None):
+ super(MountEntryExtCommonUnixLocal,self).__init__(base)
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExtCommonUnixLocal()
+ super(MountEntryExtCommonUnixLocal,self).copy(newobject)
+ newobject.showlabel = self.showlabel
+ newobject.showdevice = self.showdevice
+ newobject.showuuid = self.showuuid
+ return newobject
+
+
+############################################################################
+class MountEntryExtAlien(MountEntryExt):
+
+ USERMOUNT_NO = 0
+ USERMOUNT_ONE = 1
+ USERMOUNT_ANY = 2
+ USERMOUNT_OWNER = 3
+
+ ########################################################################
+ # Base can be either a fstab format line of text, of another MountEntry
+ # object.
+ def __init__(self,base=None):
+ super(MountEntryExtAlien,self).__init__(base)
+
+ if isinstance(base,MountEntryExtAlien):
+ self.uid = base.uid
+ self.gid = base.gid
+ self.label = base.label
+ self.writeable = base.writeable
+ self.auto = base.auto
+ self.allowusermount = base.allowusermount
+
+ elif isinstance(base,StringType) or isinstance(base,UnicodeType):
+ self.uid = 0
+ self.gid = 0
+ options = self.extraoptions.split(",")
+ newoptions = []
+ for line in options:
+ if line.startswith("uid="):
+ try:
+ self.uid = int(line[4:])
+ except ValueError:
+ self.uid = 0
+ elif line.startswith("gid="):
+ try:
+ self.gid = int(line[4:])
+ except ValueError:
+ self.gid = 0
+ else:
+ # We hang on to unknown options for later.
+ newoptions.append(line)
+ options = newoptions
+
+ self.writeable = True
+ if "ro" in options:
+ self.writeable = False
+ self.auto = True
+ if "noauto" in options:
+ self.auto = False
+ self.allowusermount = self.USERMOUNT_NO
+ if "user" in options:
+ self.allowusermount = self.USERMOUNT_ONE
+ if "users" in options:
+ self.allowusermount = self.USERMOUNT_ANY
+ if "owner" in options:
+ self.allowusermount = self.USERMOUNT_OWNER
+
+ for x in ["noatime","atime","auto","noauto","dev","nodev","nouser", \
+ "owner","users","user","suid","nosuid","exec","noexec","rw", \
+ "ro"]:
+ try:
+ options.remove(x)
+ except ValueError:
+ pass
+ self.extraoptions = ",".join(options)
+
+ else:
+ self.uid = 0
+ self.gid = 0
+ self.writeable = False
+ self.auto = False
+ self.allowusermount = self.USERMOUNT_NO
+
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExtAlien()
+ super(MountEntryExtAlien,self).copy(newobject)
+ newobject.uid = self.uid
+ newobject.gid = self.gid
+ newobject.use_as_device = self.use_as_device
+ newobject.showlabel = self.showlabel
+ newobject.showdevice = self.showdevice
+ newobject.showuuid = self.showuuid
+ newobject.writeable = self.writeable
+ newobject.auto = self.auto
+ newobject.allowusermount = self.allowusermount
+ return newobject
+
+ ########################################################################
+ def getFstabOptions(self):
+ # Construct the options field.
+ options = super(MountEntryExtAlien,self).getFstabOptions()
+ options.append('uid='+unicode(self.uid))
+ options.append('gid='+unicode(self.gid))
+ options.append(['noauto','auto'][self.auto])
+ options.append(['ro','rw'][self.writeable])
+ options.append(['nouser','user','users','owner'][self.allowusermount])
+ return options
+
+ ########################################################################
+ def getUID(self): return self.uid
+ def setUID(self,val): self.uid = val
+ def getGID(self): return self.gid
+ def setGID(self,val): self.gid = val
+
+ # ro/rw
+ def getWritable(self): return self.writeable
+ def setWritable(self,val): self.writeable = val
+ # auto/noauto
+ def getMountAtBoot(self): return self.auto
+ def setMountAtBoot(self,val): self.auto = val
+ # nouser/user/users/owner
+ def setAllowUserMount(self,val): self.allowusermount = val
+ def getAllowUserMount(self): return self.allowusermount
+
+############################################################################
+class MountEntryExtVFAT(MountEntryExtAlien):
+ def __init__(self,base=None):
+ super(MountEntryExtVFAT,self).__init__(base)
+
+ if isinstance(base,MountEntryExtVFAT):
+ self.suppresspermissionerrors = base.suppresspermissionerrors
+ elif isinstance(base,StringType) or isinstance(base,UnicodeType):
+ options = self.extraoptions.split(",")
+ self.suppresspermissionerrors = "quiet" in options
+ try:
+ options.remove("quiet")
+ except ValueError:
+ pass
+ self.extraoptions = ",".join(options)
+
+ else:
+ self.suppresspermissionerrors = False
+
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExtVFAT()
+ super(MountEntryExtVFAT,self).copy(newobject)
+ newobject.suppresspermissionerrors = self.suppresspermissionerrors
+ newobject.showlabel = self.showlabel
+ newobject.showdevice = self.showdevice
+ newobject.showuuid = self.showuuid
+ return newobject
+
+ ########################################################################
+ def getFstabOptions(self):
+ options = super(MountEntryExtVFAT,self).getFstabOptions()
+ if self.suppresspermissionerrors:
+ options.append('quiet')
+ return options
+
+ def getSuppressPermissionErrors(self): return self.suppresspermissionerrors
+ def setSuppressPermissionErrors(self,val): self.suppresspermissionerrors = val
+
+############################################################################
+class MountEntryExtSMB(MountEntryExtAlien):
+ CREDENTIALSBASENAME = "/etc/fstab_smb_credentials_"
+ ########################################################################
+ def __init__(self,base=None):
+ super(MountEntryExtSMB,self).__init__(base)
+
+ if isinstance(base,MountEntryExtSMB):
+ self.username = base.username
+ self.password = base.password
+ self.credentialsfile = base.credentialsfile
+
+ elif isinstance(base,StringType) or isinstance(base,UnicodeType):
+ self.username = None
+ self.password = ""
+ self.credentialsfile = None
+
+ newoptions = []
+ options = self.extraoptions.split(",")
+ for line in options:
+ if line.startswith("username="):
+ self.username = line[9:]
+ elif line.startswith("password="):
+ self.password = line[9:]
+ elif line.startswith("credentials="):
+ self.credentialsfile = line[12:]
+ try:
+ fhandle = codecs.open(self.credentialsfile,'r',locale.getpreferredencoding())
+ for line in fhandle.readlines():
+ if line.startswith("username"):
+ self.username = line[8:].strip()[1:].strip()
+ elif line.startswith("password"):
+ self.password = line[8:].strip()[1:].strip()
+ fhandle.close()
+
+ if not self.credentialsfile.startswith(self.CREDENTIALSBASENAME):
+ self.credentialsfile = None
+
+ except IOError:
+ self.credentialsfile = None
+
+ elif line=="guest":
+ pass
+ else:
+ # We hang on to unknown options for later.
+ newoptions.append(line)
+ options = newoptions
+
+ if self.username == "":
+ self.username = None
+
+ self.extraoptions = ",".join(options)
+
+ else:
+ self.username = None
+ self.password = ""
+ self.credentialsfile = None
+
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExtSMB()
+ super(MountEntryExtSMB,self).copy(newobject)
+ newobject.username = self.username
+ newobject.password = self.password
+ newobject.credentialsfile = self.credentialsfile
+ newobject.showlabel = self.showlabel
+ newobject.showdevice = self.showdevice
+ newobject.showuuid = self.showuuid
+ return newobject
+
+ ########################################################################
+ def cleanup(self):
+ if (self.credentialsfile is not None) and os.path.exists(self.credentialsfile) and os.path.isfile(self.credentialsfile):
+ os.remove(self.credentialsfile)
+
+ ########################################################################
+ def getIconName(self):
+ return "hi16-network"
+
+ ########################################################################
+ def getFstabOptions(self):
+ options = super(MountEntryExtSMB,self).getFstabOptions()
+ if self.username is None:
+ if (self.credentialsfile is not None) and os.path.exists(self.credentialsfile) and os.path.isfile(self.credentialsfile):
+ os.remove(self.credentialsfile)
+ options.append("guest") # This option should stop mount(8) from asking for a password.
+ else:
+ # Write out the credentials file
+ if self.credentialsfile is None:
+ i = 1
+ while os.path.exists(self.CREDENTIALSBASENAME+unicode(i)):
+ i += 1
+ self.credentialsfile = self.CREDENTIALSBASENAME+unicode(i)
+ fd = os.open(self.credentialsfile,os.O_WRONLY|os.O_CREAT,0600)
+ fhandle = os.fdopen(fd,'w')
+ fhandle.write((u"username = %s\npassword = %s\n" % (self.username,self.password))
+ .encode(locale.getpreferredencoding(),'replace') )
+ fhandle.close()
+ options.append(u"credentials="+self.credentialsfile)
+ return options
+
+ ########################################################################
+ def getUsername(self): return self.username
+ def setUsername(self,username): self.username = username
+ def getPassword(self): return self.password
+ def setPassword(self,password): self.password = password
+
+############################################################################
+class MountEntryExtSystem(MountEntryExt):
+ ########################################################################
+ def __init__(self,base=None):
+ super(MountEntryExtSystem,self).__init__(base)
+ self.use_as_device = "devicenode"
+ self.label = ""
+ self.showuuid = False
+ self.showlabel = False
+
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExtSystem()
+ super(MountEntryExtSystem,self).copy(newobject)
+ return newobject
+
+ ########################################################################
+ def getCategory(self):
+ return "system"
+
+ def disable(self,parentdialog):
+ """ This shouldn't happen since system entries have the disable button disabled """
+ msg = i18n("Disabling %1 is not supported.").arg(self.mountpoint)
+ extramsg = i18n("""Some system devices cannot be disabled because they are needed for \
+ basic functionality of the operating system.""")
+ KMessageBox.detailedSorry(parentdialog,msg,extramsg,\
+ i18n("Error occurred while disabling %1").arg(self.mountpoint))
+
+############################################################################
+class MountEntryExtSwap(MountEntryExt):
+
+ ########################################################################
+ # Base can be either a fstab format line of text, of another MountEntry
+ # object.
+ def __init__(self,base=None):
+ super(MountEntryExtSwap,self).__init__(base)
+
+ if isinstance(base,StringType) or isinstance(base,UnicodeType):
+ options = self.extraoptions.split(",")
+ try:
+ options.remove('defaults')
+ except ValueError:
+ pass
+ self.extraoptions = u",".join(options)
+
+ ########################################################################
+ def copy(self,newobject=None):
+ if newobject is None:
+ newobject = MountEntryExtSwap()
+ super(MountEntryExtSwap,self).copy(newobject)
+ return newobject
+
+ ########################################################################
+ def getFstabOptions(self):
+ options = super(MountEntryExtSwap,self).getFstabOptions()
+ if len(options)==0:
+ # Make sure there is at least one option in the list.
+ options.append('defaults')
+ return options
+
+ ########################################################################
+ def updateStatus(self,mtablist):
+
+ this_device = self.device
+ if this_device is None:
+ # Find the device name by its UUID.
+ if self.uuid:
+ hal_device = microhal.getDeviceByUUID(self.uuid)
+ if self.label:
+ hal_device = microhal.getDeviceByLabel(self.label)
+ if hal_device is None:
+ self.enabled = False
+ return
+ this_device = hal_device.getDev()
+
+ # If the device is a symlink, then grab the complete target.
+ if os.path.islink(this_device):
+ this_device = os.path.join(os.path.dirname(this_device),os.readlink(this_device))
+
+ fhandle = open("/proc/swaps")
+ lines = fhandle.readlines()
+ fhandle.close()
+
+ try: del lines[0]
+ except IndexError: pass
+
+ self.enabled = False
+ for line in lines:
+ parts = line.split()
+ if parts[0]==this_device:
+ self.enabled = True
+ return
+
+ ########################################################################
+ # Returns a list of command+arguments
+ def enable(self,parentdialog):
+ self._setBusy(parentdialog,True)
+ try:
+ (rc,output) = SimpleCommandRunner().run(['/sbin/swapon',self.device])
+ if rc!=0:
+ msg = i18n("An error occurred while enabling swap partition %1.\n\nThe system reported: %2").arg(self.device).arg(output)
+ KMessageBox.sorry(parentdialog,msg,\
+ i18n("Error occurred while enabling swap partition %1").arg(self.device))
+ finally:
+ self._setBusy(parentdialog,False)
+
+ ########################################################################
+ # Returns a list of command+arguments or None.
+ def disable(self,parentdialog):
+ self._setBusy(parentdialog,True)
+ try:
+ (rc,output) = SimpleCommandRunner().run(['/sbin/swapoff',self.device])
+ if rc!=0:
+ msg = i18n("An error occurred while disabling swap partition %1.\n\nThe system reported: %2").arg(self.device).arg(output)
+ KMessageBox.sorry(parentdialog,msg,\
+ i18n("Error occurred while disabling swap partition %1").arg(self.device))
+ finally:
+ self._setBusy(parentdialog,False)
+
+############################################################################
+# This represents a mount entry.
+#
+# It also does a little trick with the MountEntryExt classes. MountEntry
+# objects kind of 'change' class under your nose when they are set to
+# different mount types. The handling of the different kinds of mount types
+# is handled by MountEntryExt objects and subclasses.
+
+class MountEntry(object):
+
+ MountTypes = {
+ 'proc' : (MountEntryExtSystem,i18n("proc")),
+ 'sysfs' : (MountEntryExtSystem,i18n("sysfs")),
+ 'rootfs' : (MountEntryExtSystem,i18n("rootfs")),
+ 'bdev' : (MountEntryExtSystem,i18n("bdev")),
+ 'sockfs' : (MountEntryExtSystem,i18n("sockfs")),
+ 'tmpfs' : (MountEntryExtSystem,i18n("tmpfs")),
+ 'shm' : (MountEntryExtSystem,i18n("shm")),
+ 'pipefs' : (MountEntryExtSystem,i18n("pipefs")),
+ 'devfs' : (MountEntryExtSystem,i18n("devfs - Device File System")),
+ 'devpts' : (MountEntryExtSystem,i18n("devpts")),
+ 'ramfs' : (MountEntryExtSystem,i18n("ramfs")),
+ 'auto' : (MountEntryExtCommonUnix,i18n("Automatic")),
+ 'usbdevfs' : (MountEntryExtSystem,i18n("usbdevfs")),
+ 'procbususb' : (MountEntryExtSystem,i18n("procbususb")),
+ 'usbfs' : (MountEntryExtSystem,i18n("usbfs")),
+ 'supermount' : (MountEntryExt,i18n("supermount")),
+ 'swap' : (MountEntryExtSwap,i18n("Swap - Linux Swap Space")),
+
+ 'nfs' : (MountEntryExtCommonUnix,i18n("NFS - Network File System")),
+ 'cifs' : (MountEntryExtSMB,i18n("Windows File Sharing")),
+
+ 'ext2' : (MountEntryExtCommonUnixLocal,i18n("Ext2 - Second Extended FS")),
+ 'ext3' : (MountEntryExtCommonUnixLocal,i18n("Ext3 - Third Extended FS")),
+ 'reiserfs' : (MountEntryExtCommonUnixLocal,i18n("ReiserFS")),
+ 'reiser4' : (MountEntryExtCommonUnixLocal,i18n("Reiser4")),
+ 'xfs' : (MountEntryExtCommonUnixLocal,i18n("XFS - SGI's journaling filesystem")),
+ 'hfs' : (MountEntryExtCommonUnixLocal,i18n("HFS - Apple's Hierarchical File System")),
+ 'hfsplus' : (MountEntryExtVFAT,i18n("HFS+ - Apple's modernized Hierarchical File System")),
+ 'jfs' : (MountEntryExtCommonUnixLocal,i18n("JFS - IBM's Journaled File System")),
+ 'vfat' : (MountEntryExtVFAT,i18n("VFAT - Microsoft FAT File Systems")),
+ 'ntfs' : (MountEntryExtVFAT,i18n("NTFS - NT File System")),
+ 'udf' : (MountEntryExtSystem,i18n("udf")),
+ 'iso9660' : (MountEntryExt,i18n("iso9660 - CD-ROM")),
+ }
+
+ notInFstab = False
+ maydisable = True # Some entries, such as /proc can't be disabled.
+
+ ########################################################################
+ # Base can be either a fstab format line of text, of another MountEntry
+ # object.
+ def __init__(self,base=None):
+ try:
+ self.extensionObjects = {}
+ if base==None:
+ self.mounttype = 'auto'
+ elif isinstance(base,StringType) or isinstance(base,UnicodeType):
+ parts = base.split()
+ self.mounttype = parts[2]
+ # 'udf,iso9660' seems default for some devices in fstab,
+ # check if all listed filesystems are available, if yes set to 'auto'.
+ if len(self.mounttype.split(',')) > 1:
+ """
+ # We could check here, but then we'd need a reference to MicroHAL.
+ #for m in self.mounttype.split(','):
+ #if m not in supported_fs:
+ # print "Filesystem ", m, "not supported by the kernel"
+ # break
+ """
+ self.mounttype = "auto"
+ else:
+ # This is a new entry, but it's based on another one.
+ self.mounttype = base.mounttype
+ self.extension = self.MountTypes[self.mounttype][0](base)
+ self.extensionObjects[self.mounttype] = self.extension
+ except (KeyError,IndexError):
+ raise InvalidMountEntryError, u"Unable to parse mount entry:"+unicode(base)
+
+ ########################################################################
+ def getMountType(self):
+ return self.mounttype
+
+ ########################################################################
+ def setMountType(self,newtypename):
+ if newtypename not in self.extensionObjects:
+ try:
+ self.extensionObjects[newtypename] = self.MountTypes[newtypename][0](self.extension)
+ except KeyError:
+ raise NotImplementedError, "Unknown mounttype:"+newtypename
+ self.mounttype = newtypename
+ self.extension = self.extensionObjects[newtypename]
+ self.extension.setMountType(newtypename)
+
+ ########################################################################
+ def copy(self):
+ newentry = MountEntry()
+ newentry.mounttype = self.mounttype
+ newext = self.extension.copy()
+ newentry.use_as_device = self.use_as_device
+ newentry.showlabel = self.showlabel
+ newentry.showdevice = self.showdevice
+ newentry.showuuid = self.showuuid
+ newentry.extensionObjects[self.mounttype] = newext
+ newentry.extension = newext
+ return newentry
+
+ ########################################################################
+ def inPlaceCopyFrom(self,sourceentry):
+ self.extension.cleanup()
+
+ tmpcopy = sourceentry.copy()
+ self.extensionObjects = tmpcopy.extensionObjects
+ self.mounttype = tmpcopy.mounttype
+ self.extension = tmpcopy.extension
+
+ # Override the attribute lookup, set/get, to use the extension object
+ ########################################################################
+ def __getattr__(self,name):
+ try:
+ return getattr(self.extension,name)
+ except AttributeError, a:
+ print a
+
+ ########################################################################
+# FIXME
+## def __setattr__(self,name,value):
+## if 'extension' in self.__dict__:
+## if name in self.extension.__dict__:
+## setattr(self.extension,name,value)
+## return
+## self.__dict__[name] = value
+
+ ########################################################################
+ def getMountTypes():
+ return MountEntry.MountTypes.keys()
+ getMountTypes = staticmethod(getMountTypes)
+
+ ########################################################################
+ def getMountTypeLongName(typename):
+ return MountEntry.MountTypes[typename][1]
+ getMountTypeLongName = staticmethod(getMountTypeLongName)
+
+ ########################################################################
+ def encodeMountEntryString(string):
+ newstring = u""
+ for c in string:
+ if c==' ':
+ newstring += "\\040"
+ elif c=="\t":
+ newstring += "\\012"
+ elif c=='\\':
+ newstring += "\\134"
+ else:
+ newstring += c
+ return newstring
+ encodeMountEntryString = staticmethod(encodeMountEntryString)
+
+ ########################################################################
+ def decodeMountEntryString(string):
+ newstring = ""
+ while string!="":
+ if len(string)>=4 and string[0]=='\\' and isoct(string[1]) \
+ and isoct(string[2]) and isoct(string[3]):
+ newstring += chr(64*(ord(string[1])-ord('0')) + \
+ 8*(ord(string[2])-ord('0')) + (ord(string[3])-ord('0')))
+ string = string[4:]
+ else:
+ newstring += string[0]
+ string = string[1:]
+ return newstring
+ decodeMountEntryString = staticmethod(decodeMountEntryString)
+
+############################################################################
+class MountEntryComment(MountEntry):
+ """ This represents a comment mount entry or generally something that we don't
+ understand (might be comment, might be fstab syntax we don't know, might be
+ a faulty line in there). We don't want to wipe that stuff out, but we can't
+ deal with it in a sensible way, so we keep it in a MountEntryComment,
+ exclude it from most operations, but will write it back to fstab afterwards
+
+ As a result of that we only define the stuff that's necessary, namely saving
+ the fstab line and returning it when writing."""
+
+ ########################################################################
+ def __init__(self,base=None):
+ self.row = base
+
+ ########################################################################
+ def getFstabLine(self): return self.row
+
+############################################################################
+def isoct(c): return c in '01234567'
+
+############################################################################
+class InvalidMountEntryError(Exception):
+
+ ########################################################################
+ def __init__(self,arg=None):
+ self.arg = arg
+
+ ########################################################################
+ def __str__(self):
+ return str(self.arg)
+
+############################################################################
+class MountTable(object):
+
+ ########################################################################
+ def __init__(self,fstab_filename,mtab_filename):
+ self.fstab_filename = fstab_filename
+ self.mtab_filename = mtab_filename
+
+ self.entries = []
+ self.allentries = []
+
+ # sysfs does not need an entry in fstab, so we add it even if it's not
+ # in there, it's mounted automatically anyway and shows up in mtab
+ sysfs_in_fstab = False
+ usbdevfs_in_fstab = False
+
+ fhandle = codecs.open(self.fstab_filename,'r',locale.getpreferredencoding())
+ for row in fhandle.readlines():
+ row = row.strip('\n') # Carefully remove any trailing newline.
+ if row.strip().startswith("#") or row.strip()=="":
+ entry = MountEntryComment(row)
+ else:
+ try:
+ entry = MountEntry(row)
+ self.append(entry)
+
+ if entry.getMountType() == "sysfs":
+ sysfs_in_fstab = True
+ if entry.getMountType() == "usbdevfs" or "procbususb":
+ usbdevfs_in_fstab = True
+ if entry.getMountType() == "proc":
+ entry.maydisable = False
+ except InvalidMountEntryError:
+ entry = MountEntryComment(row)
+ # We keep a list with references to _all_ entries, also the comments,
+ # this is the one we'll use to write out our new fstab, only 'real'
+ # entries (real == entries we understand) are added to self to let them
+ # be handled by iterator.
+ # allentries includes comments and invalid lines, self doesn't.
+ self.allentries.append(entry)
+ fhandle.close()
+
+ if not sysfs_in_fstab:
+ sysfsentry = MountEntry(u"sysfs /sys sysfs defaults 0 0")
+ sysfsentry.notInFstab = True
+ sysfsentry.maydisable = False
+ #self.append(sysfsentry)
+
+ if not usbdevfs_in_fstab:
+ usbdevfsentry = MountEntry(u"procbususb /proc/bus/usb usbdevfs defaults 0 0")
+ usbdevfsentry.notInFstab = True
+ usbdevfsentry.maydisable = False
+ self.append(usbdevfsentry)
+
+ self.updateStatus()
+
+ ########################################################################
+ def append(self,entry):
+ self.entries.append(entry)
+
+ ########################################################################
+ def remove(self,entry):
+ self.allentries.remove(entry)
+ entry.cleanup()
+
+ ########################################################################
+ def updateStatus(self,entry=None):
+ mtablist = self.getMtabList()
+ if entry==None:
+ for entry in self.entries:
+ entry.updateStatus(mtablist)
+ else:
+ entry.updateStatus(mtablist)
+
+ ########################################################################
+ def getMtabList(self):
+ fhandle = open(self.mtab_filename)
+ mtablist = []
+ for row in fhandle.readlines():
+ if row.strip()[0]!='#':
+ parts = row.split()
+ mtablist.append(parts[1])
+ fhandle.close()
+ return mtablist
+
+ ########################################################################
+ def updateFstabOnDisk(self):
+ fhandle = None
+ try:
+ try:
+ fhandle = codecs.open(self.fstab_filename+"~","w",locale.getpreferredencoding(),'replace')
+ for entry in self.allentries:
+ if not entry.notInFstab:
+ line = entry.getFstabLine()
+ fhandle.write(line+u"\n")
+ print line
+ fhandle.close()
+ fhandle = None
+
+ # Move it over the original
+ os.rename(self.fstab_filename+"~",self.fstab_filename)
+ return True
+ finally:
+ if fhandle:
+ fhandle.close()
+ except IOError:
+ return False
+
+ ########################################################################
+ # We make this class look like a container, and just forward everything
+ # on to the entries attribute.
+ def __contains__(self,item):
+ return self.entries.__contains(item)
+ ########################################################################
+ def __delitem__(self,key):
+ raise NotImplementedError, "No __delitem__ on MountTable."
+
+ ########################################################################
+ def __getitem__(self,key):
+ return self.entries.__getitem__(key)
+ ########################################################################
+
+ def __iter__(self):
+ return self.entries.__iter__()
+ ########################################################################
+ def __len__(self):
+ return self.entries.__len__()
+ ########################################################################
+ def __setitem__(self,key,value):
+ raise NotImplementedError, "No __setitem__ on MountTable."
+
+############################################################################
+class MountEntryDialogOptions(QWidget):
+
+ deviceexample = i18n("(for example /dev/hdb3)")
+
+ ########################################################################
+ def __init__(self,parent,showmountpoint=True,showdevice=True,
+ showfs_freq=True,showfs_passno=True,showuuid=True,showlabel=True):
+ QWidget.__init__(self,parent)
+ self.showmountpoint = showmountpoint
+ self.showdevice = showdevice
+ self.showfs_freq = showfs_freq
+ self.showfs_passno = showfs_passno
+ self.showuuid = showuuid
+ self.showlabel = showlabel
+ self._fillPage()
+ # TODO: KDirSelectDialog needs "Create new Folder"
+ self.mountpointdialog = KDirSelectDialog("/",True,self,"Select Mount Point",True)
+
+ ########################################################################
+ def _fillPage(self):
+ row = 0
+ grid = QGridLayout(self,1,2)
+ grid.setSpacing(KDialog.spacingHint())
+ grid.setColStretch(0,0)
+ grid.setColStretch(2,0)
+
+ if self.showmountpoint:
+
+ label = QLabel(i18n("Mount Point:"),self)
+ grid.addWidget(label,row,0)
+
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.mountpointlineedit = KLineEdit(hbox)
+ hbox.setStretchFactor(self.mountpointlineedit,1)
+ #self.connect(self.homediredit, SIGNAL("textChanged(const QString &)"), self.slotHomeDirChanged)
+ self.mountpointbutton = KPushButton(i18n("Browse..."),hbox)
+ hbox.setStretchFactor(self.mountpointbutton,0)
+ self.connect(self.mountpointbutton,SIGNAL("clicked()"),self.slotBrowseMountPointClicked)
+ grid.addMultiCellWidget(hbox,row,row,1,3)
+ row += 1
+
+ if self.showdevice:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ label = QLabel(i18n("Device:"),self)
+ grid.addWidget(label,row,0)
+
+ self.devicecheckbox = QRadioButton(i18n("by name"),hbox)
+ self.connect(self.devicecheckbox,SIGNAL("clicked()"), \
+ self.slotDeviceCheckboxClicked)
+ self.devicelineedit = KLineEdit(hbox)
+ grid.addMultiCellWidget(hbox,row,row,1,3)
+ row += 1
+ example = QLabel(self.deviceexample,self)
+ grid.addMultiCellWidget(example,row,row,1,3)
+ row += 1
+
+ if self.showuuid:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.uuidcheckbox = QRadioButton(i18n("by UUID"),hbox)
+ self.connect(self.uuidcheckbox,SIGNAL("clicked()"), \
+ self.slotUUIDCheckboxClicked)
+ self.uuidlineedit = KLineEdit(hbox)
+ grid.addMultiCellWidget(hbox,row,row,1,3)
+ row += 1
+
+ if self.showlabel:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.labelcheckbox = QRadioButton(i18n("by label"),hbox)
+ self.connect(self.labelcheckbox,SIGNAL("clicked()"), \
+ self.slotLabelCheckboxClicked)
+ self.labellineedit = KLineEdit(hbox)
+ grid.addMultiCellWidget(hbox,row,row,1,3)
+ row += 1
+ else:
+ if self.showdevice:
+ label = QLabel(i18n("Device:"),self)
+ grid.addWidget(label,row,0)
+ self.devicelineedit = KLineEdit(self)
+ grid.addMultiCellWidget(self.devicelineedit,row,row,1,3)
+ row += 1
+ example = QLabel(self.deviceexample,self)
+ grid.addWidget(example,row,1)
+
+ if self.showuuid:
+ label = QLabel(i18n("Device UUID:"),self)
+ grid.addWidget(label,row,0)
+ self.uuidlineedit = KLineEdit(self)
+ grid.addMultiCellWidget(self.uuidlineedit,row,row,1,3)
+ row += 1
+
+ if self.showlabel:
+ label = QLabel(i18n("Device Label:"),self)
+ grid.addWidget(label,row,0)
+ self.labellineedit = KLineEdit(self)
+ grid.addMultiCellWidget(self.labellineedit,row,row,1,3)
+ row += 1
+
+ label = QLabel(i18n("Options:"),self)
+ grid.addWidget(label,row,0)
+ self.optionslineedit = KLineEdit(self)
+ grid.addMultiCellWidget(self.optionslineedit,row,row,1,3)
+ row += 1
+
+ if self.showfs_freq:
+ label = QLabel(i18n("fs_freq:"),self)
+ grid.addWidget(label,row,0)
+ self.fsfreqspinbox = KIntSpinBox (0,1000,1,0,10,self)
+ grid.addWidget(self.fsfreqspinbox,row,1)
+
+ if self.showfs_passno:
+ label = QLabel(i18n("fs_passno:"),self)
+ grid.addWidget(label,row,2)
+ self.fspassnospinbox = KIntSpinBox (0,1000,1,0,10,self)
+ grid.addWidget(self.fspassnospinbox,row,3)
+ row += 1
+
+ grid.addWidget(QWidget(self),row,0)
+
+ for x in range(grid.numRows()):
+ grid.setRowStretch(x,0)
+ grid.setRowStretch(grid.numRows()-1,1)
+
+ ########################################################################
+ def displayMountEntry(self,entry):
+ global allowuuid, allowlabel
+ if self.showmountpoint:
+ self.mountpointlineedit.setText(entry.getMountPoint())
+
+ uuid = entry.getUUID()
+ if entry.getDevice() == "" and uuid != "":
+ device = microhal.getDeviceByUUID(uuid)
+ self.devicelineedit.setText(uuid)
+ else:
+ if self.showdevice:
+ self.devicelineedit.setText(entry.getDevice())
+
+ if self.showuuid:
+ if entry.getUUID()!="":
+ self.uuidlineedit.setText(entry.getUUID())
+
+ if self.showlabel:
+ if entry.getLabel()!="":
+ self.labellineedit.setText(entry.getLabel())
+
+ if entry.getUseAsDevice() == "devicenode":
+ if self.showdevice:
+ self.devicelineedit.setEnabled(True)
+ self.devicecheckbox.setChecked(True)
+ if self.showuuid:
+ self.uuidcheckbox.setChecked(False)
+ self.uuidlineedit.setEnabled(False)
+ if self.showlabel:
+ self.labelcheckbox.setChecked(False)
+ self.labellineedit.setEnabled(False)
+ elif entry.getUseAsDevice() == "label":
+ if self.showlabel:
+ self.labellineedit.setEnabled(True)
+ self.labelcheckbox.setChecked(True)
+ if self.showdevice:
+ self.devicelineedit.setEnabled(False)
+ self.devicecheckbox.setChecked(False)
+ if self.showuuid:
+ self.uuidlineedit.setEnabled(False)
+ self.uuidcheckbox.setChecked(False)
+ elif entry.getUseAsDevice() == "uuid":
+ if self.showdevice:
+ self.devicecheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(False)
+ if self.showlabel:
+ self.labelcheckbox.setChecked(False)
+ self.labellineedit.setEnabled(False)
+ if self.showuuid:
+ self.uuidlineedit.setEnabled(True)
+ self.uuidcheckbox.setChecked(True)
+
+## if allowlabel:
+## self.labellineedit.setText(entry.getLabel())
+## if allowuuid:
+## self.uuidlineedit.setText(entry.getUUID())
+## self.devicelineedit.setText(entry.getDevice())
+
+ self.optionslineedit.setText(entry.getExtraOptions())
+ if self.showfs_freq:
+ self.fsfreqspinbox.setValue(entry.getFSFreq())
+ if self.showfs_passno:
+ self.fspassnospinbox.setValue(entry.getFSPassno())
+
+ ########################################################################
+ def undisplayMountEntry(self,entry):
+ if self.showmountpoint:
+ entry.setMountPoint( unicode(self.mountpointlineedit.text()) )
+ if self.showdevice:
+ entry.setDevice( unicode(self.devicelineedit.text()) )
+
+ if self.showuuid and self.showdevice:
+ if self.devicecheckbox.isChecked():
+ entry.setUUID(None)
+ else:
+ entry.setUUID( unicode(self.uuidlineedit.text()) )
+ if self.showlabel and self.showdevice:
+ if self.devicecheckbox.isChecked():
+ entry.setLabel(None)
+ else:
+ entry.setLabel( unicode(self.labellineedit.text()) )
+
+ if allowuuid and self.showuuid:
+ if self.uuidcheckbox.isChecked():
+ entry.setUseAsDevice("uuid")
+ if allowlabel and self.showlabel:
+ if self.labelcheckbox.isChecked():
+ entry.setUseAsDevice("label")
+ if self.showdevice:
+ if self.devicecheckbox.isChecked():
+ entry.setUseAsDevice("devicenode")
+
+ entry.setExtraOptions( unicode(self.optionslineedit.text()) )
+ if self.showfs_freq:
+ entry.setFSFreq(self.fsfreqspinbox.value())
+ if self.showfs_passno:
+ entry.setFSPassno(self.fspassnospinbox.value())
+
+ ########################################################################
+ def slotBrowseMountPointClicked(self):
+ fileurl = KURL()
+ fileurl.setPath(self.mountpointlineedit.text())
+ self.mountpointdialog.setCurrentURL(fileurl)
+ if self.mountpointdialog.exec_loop()==QDialog.Accepted:
+ self.mountpointlineedit.setText(self.mountpointdialog.url().path())
+
+ ########################################################################
+ def slotDeviceCheckboxClicked(self):
+ self.uuidcheckbox.setChecked(False)
+ self.labelcheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(True)
+ self.uuidlineedit.setEnabled(False)
+ self.labellineedit.setEnabled(False)
+
+ ########################################################################
+ def slotUUIDCheckboxClicked(self):
+ if self.uuidlineedit.text() == "":
+ label = microhal.getUUIDByDevice(unicode(self.devicelineedit.text()))
+ self.uuidlineedit.setText(label)
+ self.devicecheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(False)
+ self.uuidlineedit.setEnabled(True)
+ self.labelcheckbox.setChecked(False)
+ self.labellineedit.setEnabled(False)
+
+ def slotLabelCheckboxClicked(self):
+ if self.labellineedit.text() == "":
+ label = microhal.getLabelByDevice(unicode(self.devicelineedit.text()))
+ self.labellineedit.setText(label)
+ self.uuidcheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(False)
+ self.uuidlineedit.setEnabled(False)
+ self.labelcheckbox.setChecked(True)
+ self.labellineedit.setEnabled(True)
+
+############################################################################
+class MountEntryDialogOptionsCommonUnix(MountEntryDialogOptions):
+
+ ########################################################################
+ def __init__(self,parent):
+ MountEntryDialogOptions.__init__(self,parent)
+ self.advanceddialog = MountEntryAdvancedCommonUnixDialog(None)
+
+ ########################################################################
+ def _fillPage(self):
+
+ row = 0
+ grid = QGridLayout(self,1,2)
+ grid.setSpacing(KDialog.spacingHint())
+ grid.setColStretch(0,0)
+ grid.setRowStretch(6,1)
+
+ label = QLabel(i18n("Mount Point:"),self)
+ grid.addWidget(label,row,0)
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.mountpointlineedit = KLineEdit(hbox)
+ hbox.setStretchFactor(self.mountpointlineedit,1)
+ #self.connect(self.homediredit, SIGNAL("textChanged(const QString &)"), self.slotHomeDirChanged)
+ self.mountpointbutton = KPushButton(i18n("Browse..."),hbox)
+ hbox.setStretchFactor(self.mountpointbutton,0)
+ self.connect(self.mountpointbutton,SIGNAL("clicked()"), \
+ self.slotBrowseMountPointClicked)
+ grid.addWidget(hbox,row,1)
+ row += 1
+
+ if self.showuuid or self.showlabel:
+
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ label = QLabel(i18n("Device:"),self)
+ grid.addWidget(label,row,0)
+
+ self.devicecheckbox = QRadioButton(i18n("by name"),hbox)
+ self.connect(self.devicecheckbox,SIGNAL("clicked()"), \
+ self.slotDeviceCheckboxClicked)
+ self.devicelineedit = KLineEdit(hbox)
+ grid.addWidget(hbox,row,1)
+ row += 1
+ example = QLabel(self.deviceexample,self)
+ grid.addWidget(example,row,1)
+ row += 1
+
+ if self.showuuid:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.uuidcheckbox = QRadioButton(i18n("by UUID"),hbox)
+ self.connect(self.uuidcheckbox,SIGNAL("clicked()"), \
+ self.slotUUIDCheckboxClicked)
+ self.uuidlineedit = KLineEdit(hbox)
+ grid.addWidget(hbox,row,1)
+ row += 1
+
+ if self.showlabel:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.labelcheckbox = QRadioButton(i18n("by label"),hbox)
+ self.connect(self.labelcheckbox,SIGNAL("clicked()"), \
+ self.slotLabelCheckboxClicked)
+ self.labellineedit = KLineEdit(hbox)
+ grid.addWidget(hbox,row,1)
+ row += 1
+
+ else:
+ label = QLabel(i18n("Device:"),self)
+ grid.addWidget(label,row,0)
+ self.devicelineedit = KLineEdit(self)
+ grid.addWidget(self.devicelineedit,row,1)
+ row += 1
+ example = QLabel(self.deviceexample,self)
+ grid.addWidget(example,row,1)
+ row += 1
+
+ self.autocheckbox = QCheckBox(i18n("Enable at start up"),self)
+ grid.addWidget(self.autocheckbox,row,1)
+ row += 1
+
+ self.writeablecheckbox = QCheckBox(i18n("Writeable"),self)
+ grid.addWidget(self.writeablecheckbox,row,1)
+ row += 1
+
+ label = QLabel(i18n("Mount Permission:"),self)
+ grid.addWidget(label,row,0)
+ self.usermountcombobox = KComboBox(self)
+ self.usermountcombobox.insertItem(i18n("Root user only may enable/disable"))
+ self.usermountcombobox.insertItem(i18n("One user at a time may enable/disable"))
+ self.usermountcombobox.insertItem(i18n("Any user may enable/disable anytime"))
+ self.usermountcombobox.insertItem(i18n("Device owner may enable/disable"))
+ grid.addWidget(self.usermountcombobox,row,1)
+ row += 1
+
+ #grid.addWidget(,9,0)
+ button = KPushButton(i18n("Advanced..."),self)
+ button.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
+ self.connect(button,SIGNAL("clicked()"),self.slotAdvancedClicked)
+ grid.addWidget(button,row,1,Qt.AlignRight)
+ row += 1
+
+ grid.addWidget(QWidget(self),row,0)
+
+ for x in range(grid.numRows()):
+ grid.setRowStretch(x,0)
+ grid.setRowStretch(grid.numRows()-1,1)
+
+ ########################################################################
+ def displayMountEntry(self,entry):
+ self.devicelineedit.setText(entry.getDevice())
+
+ if self.showuuid:
+ if entry.getUUID()!="":
+ self.uuidlineedit.setText(entry.getUUID())
+
+ if self.showlabel:
+ if entry.getLabel()!="":
+ self.labellineedit.setText(entry.getLabel())
+
+ if entry.getUseAsDevice() == "devicenode":
+ self.devicelineedit.setEnabled(True)
+ self.devicecheckbox.setChecked(True)
+ self.uuidcheckbox.setChecked(False)
+ self.uuidlineedit.setEnabled(False)
+ self.labelcheckbox.setChecked(False)
+ self.labellineedit.setEnabled(False)
+ elif entry.getUseAsDevice() == "label":
+ self.labellineedit.setEnabled(True)
+ self.labelcheckbox.setChecked(True)
+ self.devicelineedit.setEnabled(False)
+ self.devicecheckbox.setChecked(False)
+ self.uuidlineedit.setEnabled(False)
+ self.uuidcheckbox.setChecked(False)
+ elif entry.getUseAsDevice() == "uuid":
+ self.devicecheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(False)
+ self.labelcheckbox.setChecked(False)
+ self.labellineedit.setEnabled(False)
+ self.uuidlineedit.setEnabled(True)
+ self.uuidcheckbox.setChecked(True)
+
+ self.devicelineedit.setText(entry.getDevice())
+ self.mountpointlineedit.setText(entry.getMountPoint())
+ self.options = entry.getExtraOptions()
+ self.fsfreq = entry.getFSFreq()
+ self.fspassno = entry.getFSPassno()
+ self.autocheckbox.setChecked(entry.getMountAtBoot())
+ self.writeablecheckbox.setChecked(entry.getWritable())
+ self.accesstime = entry.getAtime()
+ self.allowexecutable = entry.getAllowExecutables()
+ self.allowsuid = entry.getSUID()
+ self.usedevpoints = entry.getUseDevPoints()
+ self.usermountcombobox.setCurrentItem(entry.getAllowUserMount())
+
+ ########################################################################
+ def undisplayMountEntry(self,entry):
+
+ entry.setDevice( unicode(self.devicelineedit.text()) )
+ if self.showuuid:
+ if self.devicecheckbox.isChecked() or self.labelcheckbox.isChecked():
+ entry.setUUID(None)
+ else:
+ entry.setUUID( unicode(self.uuidlineedit.text()) )
+
+ if self.showlabel:
+ if self.devicecheckbox.isChecked() or self.uuidcheckbox.isChecked():
+ entry.setLabel(None)
+ else:
+ entry.setLabel( unicode(self.labellineedit.text()) )
+
+ if not self.showlabel and not self.showuuid:
+ if self.uuidcheckbox.isChecked() or self.labelcheckbox.isChecked():
+ entry.setLabel(None)
+ else:
+ entry.setLabel( unicode(self.devicelineedit.text()) )
+
+ if allowuuid:
+ if self.uuidcheckbox.isChecked():
+ entry.setUseAsDevice("uuid")
+ if allowlabel:
+ if self.labelcheckbox.isChecked():
+ entry.setUseAsDevice("label")
+ if self.devicecheckbox.isChecked():
+ entry.setUseAsDevice("devicenode")
+
+ entry.setMountPoint( unicode(self.mountpointlineedit.text()) )
+ entry.setExtraOptions(self.options)
+ entry.setFSFreq(self.fsfreq)
+ entry.setFSPassno(self.fspassno)
+ entry.setAtime(self.accesstime)
+ entry.setMountAtBoot(self.autocheckbox.isChecked())
+ entry.setWritable(self.writeablecheckbox.isChecked())
+ entry.setUseDevPoints(self.usedevpoints)
+ entry.setAllowExecutable(self.allowexecutable)
+ entry.setSUID(self.allowsuid)
+ entry.setAllowUserMount(self.usermountcombobox.currentItem())
+
+ ########################################################################
+ def slotAdvancedClicked(self):
+ (self.accesstime, self.allowexecutable, self.allowsuid, self.usedevpoints, self.options, self.fsfreq,
+ self.fspassno)\
+ = self.advanceddialog.do(self.accesstime, self.allowexecutable, self.allowsuid, self.usedevpoints,
+ self.options, self.fsfreq, self.fspassno)
+
+ ########################################################################
+ def slotDeviceCheckboxClicked(self):
+ self.uuidcheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(True)
+ self.labelcheckbox.setChecked(False)
+ self.labellineedit.setEnabled(False)
+ self.uuidlineedit.setEnabled(False)
+
+ ########################################################################
+ def slotUUIDCheckboxClicked(self):
+ if self.uuidlineedit.text() == "":
+ label = microhal.getUUIDByDevice(unicode(self.devicelineedit.text()))
+ self.uuidlineedit.setText(label)
+ self.devicecheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(False)
+ self.labelcheckbox.setChecked(False)
+ self.labellineedit.setEnabled(False)
+ self.uuidlineedit.setEnabled(True)
+
+ def slotLabelCheckboxClicked(self):
+ if self.labellineedit.text() == "":
+ label = microhal.getLabelByDevice(unicode(self.devicelineedit.text()))
+ self.labellineedit.setText(label)
+ self.devicecheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(False)
+ self.uuidcheckbox.setChecked(False)
+ self.uuidlineedit.setEnabled(False)
+ self.labellineedit.setEnabled(True)
+
+############################################################################
+class MountEntryDialogOptionsSys(MountEntryDialogOptions):
+ ########################################################################
+ def __init__(self,parent):
+ MountEntryDialogOptions.__init__(self,parent,True,False,False,False,False,False)
+
+############################################################################
+class MountEntryDialogOptionsSwap(MountEntryDialogOptions):
+ ########################################################################
+ def __init__(self,parent):
+ MountEntryDialogOptions.__init__(self,parent,False,True,False,False)
+
+class MountEntryDialogOptionsNfs(MountEntryDialogOptionsCommonUnix):
+
+ deviceexample = i18n("(for example 192.168.1.66:/export)")
+
+############################################################################
+class MountEntryDialogOptionsVFAT(MountEntryDialogOptions):
+ ########################################################################
+ def __init__(self,parent):
+ MountEntryDialogOptions.__init__(self,parent)
+ self.advanceddialog = MountEntryAdvancedPlainDialog(None)
+ self.updatinggui= False
+
+ ########################################################################
+ def _fillPage(self):
+ global allowuuid, allowlabel
+
+ row = 0
+ grid = QGridLayout(self,11,2)
+ grid.setSpacing(KDialog.spacingHint())
+ grid.setColStretch(0,0)
+ grid.setColStretch(2,0)
+ grid.setRowStretch(10,1)
+
+ label = QLabel(i18n("Mount Point:"),self)
+ grid.addWidget(label,row,0)
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.mountpointlineedit = KLineEdit(hbox)
+ hbox.setStretchFactor(self.mountpointlineedit,1)
+ #self.connect(self.homediredit, SIGNAL("textChanged(const QString &)"), self.slotHomeDirChanged)
+ self.mountpointbutton = KPushButton(i18n("Browse..."),hbox)
+ hbox.setStretchFactor(self.mountpointbutton,0)
+ self.connect(self.mountpointbutton,SIGNAL("clicked()"),self.slotBrowseMountPointClicked)
+ grid.addMultiCellWidget(hbox,row,row,1,3)
+ row += 1
+
+ if allowuuid or allowlabel:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ label = QLabel(i18n("Device:"),self)
+ grid.addWidget(label,row,0)
+
+ self.devicecheckbox = QRadioButton(i18n("by name"),hbox)
+ self.connect(self.devicecheckbox,SIGNAL("clicked()"), \
+ self.slotDeviceCheckboxClicked)
+ self.devicelineedit = KLineEdit(hbox)
+ grid.addWidget(hbox,row,1)
+ row += 1
+ example = QLabel(self.deviceexample,self)
+ grid.addWidget(example,row,1)
+ row += 1
+
+ if allowuuid and self.showuuid:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.uuidcheckbox = QRadioButton(i18n("by UUID"),hbox)
+ self.connect(self.uuidcheckbox,SIGNAL("clicked()"), \
+ self.slotUUIDCheckboxClicked)
+ self.uuidlineedit = KLineEdit(hbox)
+ grid.addWidget(hbox,row,1)
+ row += 1
+
+ if allowlabel and self.showlabel:
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.labelcheckbox = QRadioButton(i18n("by label"),hbox)
+ self.connect(self.labelcheckbox,SIGNAL("clicked()"), \
+ self.slotLabelCheckboxClicked)
+ self.labellineedit = KLineEdit(hbox)
+ grid.addWidget(hbox,row,1)
+ row += 1
+
+ else:
+
+ label = QLabel(i18n("Device:"),self)
+ grid.addWidget(label,row,0)
+ self.devicelineedit = KLineEdit(self)
+ grid.addMultiCellWidget(self.devicelineedit,row,row,1,3)
+ row += 1
+
+ example = QLabel(self.deviceexample,self)
+ grid.addWidget(example,row,1)
+ row += 1
+
+ self.autocheckbox = QCheckBox(i18n("Enable at start up"),self)
+ grid.addMultiCellWidget(self.autocheckbox,row,row,1,3)
+ row += 1
+
+ # Security & Safety line.
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ tmplabel = QLabel(hbox)
+ tmplabel.setPixmap(UserIcon("hi16-lock"))
+ hbox.setStretchFactor(tmplabel,0)
+ tmplabel = QLabel(hbox)
+ tmplabel.setText(i18n("Security & Safety"))
+ hbox.setStretchFactor(tmplabel,0)
+ sep = KSeparator(KSeparator.Horizontal,hbox)
+ hbox.setStretchFactor(sep,1)
+ grid.addMultiCellWidget(hbox,row,row,0,3)
+ row += 1
+
+ self.writeablecheckbox = QCheckBox(i18n("Writeable"),self)
+ grid.addMultiCellWidget(self.writeablecheckbox,row,row,1,3)
+ row += 1
+
+ label = QLabel(i18n("Files belong to user:"),self)
+ grid.addWidget(label,row,0)
+ self.uidcombobox = UserComboBox(self)
+ grid.addMultiCellWidget(self.uidcombobox,row,row,1,3)
+ row += 1
+
+ label = QLabel(i18n("Files belong to group:"),self)
+ grid.addWidget(label,row,0)
+ self.gidcombobox = GroupComboBox(self)
+ grid.addMultiCellWidget(self.gidcombobox,row,row,1,3)
+ row += 1
+
+ label = QLabel(i18n("Mount Permission:"),self)
+ grid.addWidget(label,row,0)
+ self.usermountcombobox = KComboBox(self)
+ self.usermountcombobox.insertItem(i18n("Root user only may enable/disable"))
+ self.usermountcombobox.insertItem(i18n("One user at a time may enable/disable"))
+ self.usermountcombobox.insertItem(i18n("Any user may enable/disable anytime"))
+ self.usermountcombobox.insertItem(i18n("Device owner may enable/disable"))
+ grid.addMultiCellWidget(self.usermountcombobox,row,row,1,3)
+ row += 1
+
+ self.suppresspermissionerrorcheckbox = QCheckBox(i18n("Suppress permission errors"),self)
+ grid.addMultiCellWidget(self.suppresspermissionerrorcheckbox,row,row,1,3)
+ row += 1
+
+ row += 1
+ button = KPushButton(i18n("Advanced..."),self)
+ button.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
+ self.connect(button,SIGNAL("clicked()"),self.slotAdvancedClicked)
+ grid.addMultiCellWidget(button,row,row,1,3,Qt.AlignRight)
+
+ ########################################################################
+ def displayMountEntry(self,entry):
+ global allowuuid, allowlabel
+
+ uuid = entry.getUUID()
+ if entry.getDevice() == "" and uuid != "":
+ device = microhal.getDeviceByUUID(uuid)
+ self.devicelineedit.setText(uuid)
+ else:
+ self.devicelineedit.setText(entry.getDevice())
+
+ if allowuuid:
+ self.uuidlineedit.setText(uuid)
+ if entry.getUUID()!="":
+ self.uuidlineedit.setEnabled(True)
+ self.devicelineedit.setEnabled(False)
+ self.devicecheckbox.setChecked(False)
+ self.uuidcheckbox.setChecked(True)
+ else:
+ self.devicelineedit.setEnabled(True)
+ self.uuidlineedit.setEnabled(False)
+ self.devicecheckbox.setChecked(True)
+ self.uuidcheckbox.setChecked(False)
+
+ if allowlabel: # If the filesystem has a label override the UUID settings
+ self.labellineedit.setText(entry.getLabel())
+ if entry.getLabel()!="":
+ self.labellineedit.setEnabled(True)
+ self.devicelineedit.setEnabled(False)
+ self.devicecheckbox.setChecked(False)
+ self.labelcheckbox.setChecked(True)
+ self.uuidlineedit.setEnabled(False)
+ self.uuidcheckbox.setChecked(False)
+ else:
+ if entry.getUUID()!="":
+ self.uuidlineedit.setEnabled(True)
+ self.devicelineedit.setEnabled(False)
+ self.devicecheckbox.setChecked(False)
+ self.uuidcheckbox.setChecked(True)
+ else:
+ self.devicelineedit.setEnabled(True)
+ self.uuidlineedit.setEnabled(False)
+ self.devicecheckbox.setChecked(True)
+ self.uuidcheckbox.setChecked(False)
+
+ if allowlabel:
+ self.labellineedit.setText(entry.getLabel())
+ if allowuuid:
+ self.uuidlineedit.setText(entry.getUUID())
+ self.devicelineedit.setText(entry.getDevice())
+
+ self.mountpointlineedit.setText(entry.getMountPoint())
+ self.options = entry.getExtraOptions()
+ self.fsfreq = entry.getFSFreq()
+ self.fspassno = entry.getFSPassno()
+ self.writeablecheckbox.setChecked(entry.getWritable())
+ self.autocheckbox.setChecked(entry.getMountAtBoot())
+ self.usermountcombobox.setCurrentItem(entry.getAllowUserMount())
+ self.uidcombobox.setUID(entry.getUID())
+ self.gidcombobox.setGID(entry.getGID())
+ self.suppresspermissionerrorcheckbox.setChecked(entry.getSuppressPermissionErrors())
+
+ ########################################################################
+ def undisplayMountEntry(self,entry):
+ global allowuuid, allowlabel
+ if allowuuid:
+ if self.devicecheckbox.isChecked():
+ entry.setUUID(None)
+ else:
+ if allowlabel:
+ if self.labelcheckbox.isChecked():
+ entry.setLabel( unicode(self.labellineedit.text()) )
+ else:
+ entry.setUUID( unicode(self.uuidlineedit.text()) )
+ else:
+ entry.setUUID( unicode(self.uuidlineedit.text()) )
+
+ if allowlabel:
+ if self.devicecheckbox.isChecked():
+ entry.setLabel(None)
+ else:
+ if allowuuid:
+ if self.uuidcheckbox.isChecked():
+ entry.setUUID( unicode(self.uuidlineedit.text()) )
+ else:
+ entry.setLabel( unicode(self.labellineedit.text()) )
+ else:
+ entry.setLabel( unicode(self.labellineedit.text()) )
+
+ entry.setDevice( unicode(self.devicelineedit.text()) )
+
+ entry.setMountPoint( unicode(self.mountpointlineedit.text()) )
+ entry.setExtraOptions(self.options)
+ entry.setFSFreq(self.fsfreq)
+ entry.setFSPassno(self.fspassno)
+ entry.setMountAtBoot(self.autocheckbox.isChecked())
+ entry.setWritable(self.writeablecheckbox.isChecked())
+ entry.setAllowUserMount(self.usermountcombobox.currentItem())
+ entry.setUID(self.uidcombobox.UID())
+ entry.setGID(self.gidcombobox.GID())
+ entry.setSuppressPermissionErrors(self.suppresspermissionerrorcheckbox.isChecked())
+
+ ########################################################################
+ def slotAdvancedClicked(self):
+ (self.options, self.fsfreq, self.fspassno)\
+ = self.advanceddialog.do(self.options, self.fsfreq, self.fspassno)
+
+ ########################################################################
+ def slotDeviceCheckboxClicked(self):
+ self.uuidcheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(True)
+ self.uuidlineedit.setEnabled(False)
+
+ ########################################################################
+ def slotUUIDCheckboxClicked(self):
+ if self.uuidlineedit.text() == "":
+ label = microhal.getUUIDByDevice(unicode(self.devicelineedit.text()))
+ self.uuidlineedit.setText(label)
+ self.devicecheckbox.setChecked(False)
+ self.devicelineedit.setEnabled(False)
+ self.uuidlineedit.setEnabled(True)
+
+############################################################################
+class MountEntryDialogOptionsSMB(MountEntryDialogOptions):
+
+ ########################################################################
+ def __init__(self,parent):
+ MountEntryDialogOptions.__init__(self,parent)
+ self.advanceddialog = MountEntryAdvancedPlainDialog(None)
+ self.updatinggui= False
+
+ ########################################################################
+ def _fillPage(self):
+ grid = QGridLayout(self,14,4)
+ grid.setSpacing(KDialog.spacingHint())
+ grid.setColStretch(0,0)
+ grid.setColStretch(2,0)
+ grid.setRowStretch(12,1)
+
+ label = QLabel(i18n("Mount Point:"),self)
+ grid.addWidget(label,0,0)
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.mountpointlineedit = KLineEdit(hbox)
+ hbox.setStretchFactor(self.mountpointlineedit,1)
+ #self.connect(self.homediredit, SIGNAL("textChanged(const QString &)"), self.slotHomeDirChanged)
+ self.mountpointbutton = KPushButton(i18n("Browse..."),hbox)
+ hbox.setStretchFactor(self.mountpointbutton,0)
+ self.connect(self.mountpointbutton,SIGNAL("clicked()"),self.slotBrowseMountPointClicked)
+ grid.addMultiCellWidget(hbox,0,0,1,3)
+
+ label = QLabel(i18n("Network Share:"),self)
+ grid.addWidget(label,1,0)
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ self.devicelineedit = KLineEdit(hbox)
+ hbox.setStretchFactor(self.devicelineedit,1)
+ self.devicelinebutton = KPushButton(i18n("Scan..."),hbox)
+ hbox.setStretchFactor(self.devicelinebutton,0)
+ self.connect(self.devicelinebutton,SIGNAL("clicked()"),self.slotBrowseDeviceLineClicked)
+ grid.addMultiCellWidget(hbox,1,1,1,3)
+
+ # Connect as:
+ connectaslabel = QLabel(self)
+ connectaslabel.setText(i18n("Connect as:"))
+ grid.addWidget(connectaslabel,2,0)
+
+ self.guestradio = QRadioButton(self)
+ self.guestradio.setChecked(True)
+ grid.addWidget(self.guestradio,2,1)
+ tmplabel = QLabel(self)
+ tmplabel.setText(i18n("Guest"))
+ grid.addMultiCellWidget(tmplabel,2,2,2,3)
+ self.connect(self.guestradio,SIGNAL("stateChanged(int)"),self.slotGuestRadioClicked)
+
+ self.userradio = QRadioButton(self)
+ grid.addWidget(self.userradio,3,1)
+ tmplabel = QLabel(self)
+ tmplabel.setText(i18n("Username:"))
+ grid.addWidget(tmplabel,3,2)
+ self.connect(self.userradio,SIGNAL("stateChanged(int)"),self.slotUserRadioClicked)
+
+ self.usernameedit = KLineEdit(self)
+ grid.addWidget(self.usernameedit,3,3)
+
+ tmplabel = QLabel(self)
+ tmplabel.setText(i18n("Password:"))
+ grid.addWidget(tmplabel,4,2)
+
+ self.passwordedit = KLineEdit(self)
+ grid.addWidget(self.passwordedit,4,3)
+
+ self.autocheckbox = QCheckBox(i18n("Enable at start up"),self)
+ grid.addMultiCellWidget(self.autocheckbox,5,5,1,3)
+
+ # Security & Safety line.
+ hbox = QHBox(self)
+ hbox.setSpacing(KDialog.spacingHint())
+ tmplabel = QLabel(hbox)
+ tmplabel.setPixmap(UserIcon("hi16-lock"))
+ hbox.setStretchFactor(tmplabel,0)
+ tmplabel = QLabel(hbox)
+ tmplabel.setText(i18n("Security & Safety"))
+ hbox.setStretchFactor(tmplabel,0)
+ sep = KSeparator(KSeparator.Horizontal,hbox)
+ hbox.setStretchFactor(sep,1)
+ grid.addMultiCellWidget(hbox,6,6,0,3)
+
+ self.writeablecheckbox = QCheckBox(i18n("Writeable"),self)
+ grid.addMultiCellWidget(self.writeablecheckbox,7,7,1,3)
+
+ label = QLabel(i18n("Files belong to user:"),self)
+ grid.addWidget(label,8,0)
+ self.uidcombobox = UserComboBox(self)
+ grid.addMultiCellWidget(self.uidcombobox,8,8,1,3)
+
+ label = QLabel(i18n("Files belong to group:"),self)
+ grid.addWidget(label,9,0)
+ self.gidcombobox = GroupComboBox(self)
+ grid.addMultiCellWidget(self.gidcombobox,9,9,1,3)
+
+ label = QLabel(i18n("Mount Permission:"),self)
+ grid.addWidget(label,10,0)
+ self.usermountcombobox = KComboBox(self)
+ self.usermountcombobox.insertItem(i18n("Root user only may enable/disable"))
+ self.usermountcombobox.insertItem(i18n("One user at a time may enable/disable"))
+ self.usermountcombobox.insertItem(i18n("Any user may enable/disable anytime"))
+ self.usermountcombobox.insertItem(i18n("Device owner may enable/disable"))
+ grid.addMultiCellWidget(self.usermountcombobox,10,10,1,3)
+
+ button = KPushButton(i18n("Advanced..."),self)
+ button.setSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed)
+ self.connect(button,SIGNAL("clicked()"),self.slotAdvancedClicked)
+ grid.addMultiCellWidget(button,13,13,1,3,Qt.AlignRight)
+
+ self.selectsmbdialog = None
+
+ ########################################################################
+ def slotBrowseDeviceLineClicked(self):
+ if self.updatinggui:
+ return
+ self.updatinggui = True
+
+ if self.selectsmbdialog is None:
+ self.selectsmbdialog = SMBShareSelectDialog(None)
+
+ # This just converts a \\zootv\data\ share name to smb:/zootv/data
+ parts = [x.replace("/",'\\') for x in unicode(self.devicelineedit.text()).split('\\') if x!=""]
+ oldurl = u"smb:/"+("/".join(parts) )
+
+ urlobj = KURL(oldurl)
+ if self.userradio.isChecked():
+ urlobj.setUser(self.usernameedit.text())
+ urlobj.setPass(self.passwordedit.text())
+
+ newurlobj = self.selectsmbdialog.choose(urlobj)
+ # This just converts smb:/zootv/data to \\zootv\data.
+ plainurl = KURL(newurlobj)
+ plainurl.setUser(QString.null)
+ plainurl.setPass(QString.null)
+ parts = [x.replace('\\',"/") for x in unicode(plainurl.url())[4:].split("/") if x !=""]
+ #convert the first part to an IP address
+ nmboutput = subprocess.Popen(["nmblookup",parts[0]], stdout=subprocess.PIPE).stdout
+ nmboutput.readline()
+ ipaddress = nmboutput.readline().split(" ")[0]
+ parts[0] = ipaddress
+ self.devicelineedit.setText(r'\\'+('\\'.join(parts)))
+
+ if not newurlobj.hasUser():
+ self.guestradio.setChecked(True)
+ self.userradio.setChecked(False)
+ self.passwordedit.setEnabled(False)
+ self.usernameedit.setEnabled(False)
+ self.usernameedit.setText("")
+ self.passwordedit.setText("")
+ else:
+ self.guestradio.setChecked(False)
+ self.userradio.setChecked(True)
+ self.passwordedit.setEnabled(True)
+ self.usernameedit.setEnabled(True)
+ self.usernameedit.setText(newurlobj.user())
+ self.passwordedit.setText(newurlobj.pass_())
+
+ self.updatinggui = False
+
+ ########################################################################
+ def displayMountEntry(self,entry):
+ self.devicelineedit.setText(entry.getDevice())
+ self.mountpointlineedit.setText(entry.getMountPoint())
+ self.options = entry.getExtraOptions()
+ self.fsfreq = entry.getFSFreq()
+ self.fspassno = entry.getFSPassno()
+ self.writeablecheckbox.setChecked(entry.getWritable())
+ self.autocheckbox.setChecked(entry.getMountAtBoot())
+ self.usermountcombobox.setCurrentItem(entry.getAllowUserMount())
+ self.uidcombobox.setUID(entry.getUID())
+ self.gidcombobox.setGID(entry.getGID())
+
+ if entry.getUsername() is None:
+ self.guestradio.setChecked(True)
+ self.userradio.setChecked(False)
+ self.passwordedit.setEnabled(False)
+ self.usernameedit.setEnabled(False)
+ self.usernameedit.setText("")
+ self.passwordedit.setText("")
+ else:
+ self.guestradio.setChecked(False)
+ self.userradio.setChecked(True)
+ self.passwordedit.setEnabled(True)
+ self.usernameedit.setEnabled(True)
+ self.usernameedit.setText(entry.getUsername())
+ self.passwordedit.setText(entry.getPassword())
+
+ ########################################################################
+ def undisplayMountEntry(self,entry):
+ entry.setDevice( unicode(self.devicelineedit.text()) )
+ entry.setMountPoint( unicode(self.mountpointlineedit.text()) )
+ entry.setExtraOptions(self.options)
+ entry.setFSFreq(self.fsfreq)
+ entry.setFSPassno(self.fspassno)
+ entry.setMountAtBoot(self.autocheckbox.isChecked())
+ entry.setWritable(self.writeablecheckbox.isChecked())
+ entry.setAllowUserMount(self.usermountcombobox.currentItem())
+ entry.setUID(self.uidcombobox.UID())
+ entry.setGID(self.gidcombobox.GID())
+
+ if self.guestradio.isChecked():
+ entry.setUsername(None)
+ entry.setPassword(None)
+ else:
+ entry.setUsername( unicode(self.usernameedit.text()) )
+ entry.setPassword( unicode(self.passwordedit.text()) )
+
+ ########################################################################
+ def slotAdvancedClicked(self):
+ (self.options, self.fsfreq, self.fspassno)\
+ = self.advanceddialog.do(self.options, self.fsfreq, self.fspassno)
+
+ ########################################################################
+ def slotGuestRadioClicked(self,state):
+ if self.updatinggui:
+ return
+ self.updatinggui = True
+
+ if state==QButton.Off:
+ self.guestradio.setChecked(True)
+ self.userradio.setChecked(False)
+
+ self.passwordedit.setEnabled(False)
+ self.usernameedit.setEnabled(False)
+
+ self.updatinggui = False
+
+ ########################################################################
+ def slotUserRadioClicked(self,state):
+ if self.updatinggui:
+ return
+ self.updatinggui = True
+ if state==QButton.Off:
+ self.userradio.setChecked(True)
+ self.guestradio.setChecked(False)
+
+ self.passwordedit.setEnabled(True)
+ self.usernameedit.setEnabled(True)
+
+ self.updatinggui = False
+
+############################################################################
+class ROListBoxItem(QListBoxPixmap):
+ """A read-only ListBox item that also uses the 'alternate' background colour
+ as background.
+ """
+ def __init__(self,listbox,pix,text):
+ QListBoxPixmap.__init__(self,listbox,pix,text)
+ self.setSelectable(False)
+ def paint(self,p):
+ boldfont = QFont(p.font())
+ boldfont.setWeight(QFont.Bold)
+ p.setFont(boldfont)
+ p.setBackgroundColor(KGlobalSettings.alternateBackgroundColor())
+ p.eraseRect(0,0,self.listBox().width(),self.height(self.listBox()))
+ QListBoxPixmap.paint(self,p)
+
+############################################################################
+class MountEntryDialog(KDialogBase):
+
+ MountTypeEditorsDisk = {
+ 'ext2' : MountEntryDialogOptionsCommonUnix,
+ 'ext3' : MountEntryDialogOptionsCommonUnix,
+ 'reiserfs' : MountEntryDialogOptionsCommonUnix,
+ 'reiser4' : MountEntryDialogOptionsCommonUnix,
+ 'xfs' : MountEntryDialogOptionsCommonUnix,
+ 'jfs' : MountEntryDialogOptionsCommonUnix,
+ 'vfat' : MountEntryDialogOptionsVFAT,
+ 'ntfs' : MountEntryDialogOptionsVFAT,
+ 'hfsplus' : MountEntryDialogOptionsVFAT,
+ 'udf' : MountEntryDialogOptions,
+ 'iso9660' : MountEntryDialogOptions,
+ }
+ MountTypeEditorsNetwork = {
+ 'nfs' : MountEntryDialogOptionsNfs,
+ 'cifs' : MountEntryDialogOptionsSMB,
+ }
+ MountTypeEditorsSystem = {
+ 'proc' : MountEntryDialogOptionsSys,
+ 'sysfs' : MountEntryDialogOptionsSys,
+ 'rootfs' : MountEntryDialogOptions,
+ 'bdev' : MountEntryDialogOptions,
+ 'sockfs' : MountEntryDialogOptions,
+ 'tmpfs' : MountEntryDialogOptions,
+ 'shm' : MountEntryDialogOptions,
+ 'pipefs' : MountEntryDialogOptions,
+ 'ramfs' : MountEntryDialogOptionsSys,
+ 'devfs' : MountEntryDialogOptions,
+ 'devpts' : MountEntryDialogOptionsSys,
+ 'auto' : MountEntryDialogOptionsCommonUnix,
+ 'usbdevfs' : MountEntryDialogOptions,
+ 'procbususb' : MountEntryDialogOptions,
+ 'usbfs' : MountEntryDialogOptions,
+ 'supermount' : MountEntryDialogOptions,
+ 'swap' : MountEntryDialogOptionsSwap
+ }
+
+ ########################################################################
+ def __init__(self,parent):
+ KDialogBase.__init__(self,parent,None,True,"Configuration",KDialogBase.Ok|KDialogBase.Cancel,
+ KDialogBase.Cancel)
+
+ self.updatingGUI = True
+
+ # Maps MountEntry classes to MountEntryDialogOptions objects
+ self.mountTypeToOptionWidget = {}
+
+ # Maps indexes in the combobox to mounttypes
+ self.comboIndexToMountType = []
+ self.currentOptionWidget = None
+
+ self.topvbox = QVBox(self)
+ self.setMainWidget(self.topvbox)
+ self.topvbox.setSpacing(self.spacingHint())
+
+ hb = QHBox(self.topvbox)
+ hb.setSpacing(self.spacingHint())
+ self.topvbox.setStretchFactor(hb,0)
+
+ label = QLabel(i18n("Type:"),hb)
+ hb.setStretchFactor(label,0)
+ self.mounttypecombo = KComboBox(hb)
+
+ # Disk types
+ ROListBoxItem(self.mounttypecombo.listBox(),UserIcon("hi16-hdd"),i18n("Disk Filesystems"))
+ self.comboIndexToMountType.append(None)
+ items = self.MountTypeEditorsDisk.keys()
+ items.sort()
+ for mounttype in items:
+ self.mounttypecombo.insertItem(MountEntry.getMountTypeLongName(mounttype))
+ self.comboIndexToMountType.append(mounttype)
+
+ # Network types
+ ROListBoxItem(self.mounttypecombo.listBox(),UserIcon("hi16-network"),i18n("Network Filesystems"))
+ self.comboIndexToMountType.append(None)
+ items = self.MountTypeEditorsNetwork.keys()
+ items.sort()
+ for mounttype in items:
+ self.mounttypecombo.insertItem(MountEntry.getMountTypeLongName(mounttype))
+ self.comboIndexToMountType.append(mounttype)
+
+ # System types
+ ROListBoxItem(self.mounttypecombo.listBox(),UserIcon("hi16-blockdevice"),i18n("Operating System"))
+ self.comboIndexToMountType.append(None)
+ items = self.MountTypeEditorsSystem.keys()
+ items.sort()
+ for mounttype in items:
+ self.mounttypecombo.insertItem(MountEntry.getMountTypeLongName(mounttype))
+ self.comboIndexToMountType.append(mounttype)
+
+ self.MountTypeEditors = self.MountTypeEditorsDisk.copy()
+ self.MountTypeEditors.update(self.MountTypeEditorsNetwork)
+ self.MountTypeEditors.update(self.MountTypeEditorsSystem)
+
+ #hb.setStretchFactor(self.runlevelcombo,0)
+ self.connect(self.mounttypecombo, SIGNAL("activated(int)"), self.slotMountTypeChanged)
+
+ widget = QWidget(hb)
+ hb.setStretchFactor(widget,1)
+
+ # Create the stack of option edit widgets.
+ gb = QVGroupBox(self.topvbox)
+ self.topvbox.setStretchFactor(gb,1)
+ self.optionsstack = QWidgetStack(gb)
+
+ for mounttype in self.MountTypeEditors:
+ editpage = self.MountTypeEditors[mounttype](self.optionsstack)
+ self.mountTypeToOptionWidget[mounttype] = editpage
+ self.optionsstack.addWidget(editpage)
+
+ self.fsunavailablelabel = QHBox(gb)
+ self.fsunavailablelabel.setSpacing(KDialog.spacingHint())
+ tmplabel = QLabel(self.fsunavailablelabel)
+ self.fsunavailablelabel.setStretchFactor(tmplabel,0)
+ tmplabel.setPixmap(SmallIcon('info'))
+ label = QLabel(i18n("This filesystem type is currently unavailable on the running kernel."),
+ self.fsunavailablelabel)
+ self.fsunavailablelabel.setStretchFactor(label,1)
+ self.fsunavailablelabel.hide()
+
+ self.updatingGUI = False
+
+ #######################################################################
+ def doEditMount(self,mounttable,mountentry):
+ self.newEntry = False
+ self.mounttable = mounttable
+ self.originalMountEntry = mountentry
+ self.currentMountEntry = mountentry.copy()
+
+ self.updatingGUI = True
+ self.selectEntry(self.currentMountEntry.getMountType())
+ self.updatingGUI = False
+ if self.exec_loop()==QDialog.Accepted:
+ # All of the update stuff is in slotOk()
+ return True
+ return False
+
+ #######################################################################
+ def doNewMount(self,mounttable,defaultdevice):
+ self.newEntry = True
+ self.mounttable = mounttable
+ self.currentMountEntry = MountEntry()
+ if defaultdevice is not None:
+ self.currentMountEntry.setDevice(defaultdevice)
+ self.updatingGUI = True
+ self.currentOptionWidget = None
+ self.selectEntry(self.currentMountEntry.mounttype)
+ self.updatingGUI = False
+ if self.exec_loop()==QDialog.Accepted:
+ self.mounttable.allentries.append(self.currentMountEntry)
+ self.mounttable.updateFstabOnDisk()
+ return self.currentMountEntry
+ return None
+
+ #######################################################################
+ def selectEntry(self,mounttype):
+ #if self.currentOptionWidget!=None:
+ # # Update the mount entry from the
+ # self.currentOptionWidget.undisplayMountEntry(self.currentMountEntry)
+ self.currentMountEntry.setMountType(mounttype)
+ # Update GUI
+ self.mounttypecombo.setCurrentItem(self.comboIndexToMountType.index(mounttype))
+ self.currentOptionWidget = self.mountTypeToOptionWidget[mounttype]
+ self.currentOptionWidget.displayMountEntry(self.currentMountEntry)
+ self.optionsstack.raiseWidget(self.currentOptionWidget)
+ if microhal.isSupportedFileSystem(mounttype):
+ self.fsunavailablelabel.hide()
+ else:
+ self.fsunavailablelabel.show()
+
+ #######################################################################
+ def slotMountTypeChanged(self,index):
+ if self.updatingGUI==False:
+ self.updatingGUI = True
+ self.selectEntry(self.comboIndexToMountType[index])
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotOk(self):
+ global allowlabel, allowuuid
+ self.currentOptionWidget.undisplayMountEntry(self.currentMountEntry)
+ if allowuuid:
+ if self.currentOptionWidget.uuidcheckbox.isChecked():
+ self.currentMountEntry.setUseAsDevice("uuid")
+ if allowlabel:
+ if self.currentOptionWidget.labelcheckbox.isChecked():
+ self.currentMountEntry.setUseAsDevice("label")
+ conflictentry = None
+ if self.newEntry:
+ for entry in self.mounttable:
+ if entry.getMountPoint()==self.currentMountEntry.getMountPoint():
+ # Conflict found.
+ conflictentry = entry
+ else:
+ # Check if the mountpoint is already in use elsewhere in the mounttable.
+ if self.originalMountEntry.getMountPoint()!=self.currentMountEntry.getMountPoint():
+ for entry in self.mounttable:
+ if (entry.getMountPoint()==self.currentMountEntry.getMountPoint()
+ and entry is not self.originalMountEntry):
+ # Conflict found.
+ conflictentry = entry
+ if conflictentry is not None:
+ if KMessageBox.warningContinueCancel(self, \
+ i18n("The mountpoint '%1' is already in use by another entry?\nContinue?").arg(
+ self.currentMountEntry.getMountPoint()), \
+ i18n("Mountpoint already in use"))!=KMessageBox.Continue:
+ return
+
+ if self.currentMountEntry.getMountType() in MountEntryDialog.MountTypeEditorsDisk.keys():
+ # If device is not in /dev and it's no bind mount, ask if that's meant this way ...
+ options = self.currentMountEntry.getFstabOptions()
+ if (not self.currentMountEntry.getDevice().startswith("/dev/")
+ and not ("loop" in options or "bind" in options)):
+ ask = KMessageBox.warningYesNoCancel(self,
+ i18n("'%1' does not seem to be a device and the option 'bind' has not been specified in the \
+ \"Advanced\" page?\n Should I add the 'loop' option?").arg(self.currentMountEntry.device),
+ i18n("Options may be missing"))
+ if ask==KMessageBox.Cancel:
+ return
+ elif ask==KMessageBox.Yes:
+ # Add loop option
+ extraoptions = self.currentMountEntry.getExtraOptions().split(',')
+ extraoptions.append('loop')
+ self.currentMountEntry.setExtraOptions(','.join(extraoptions))
+
+ if (not os.path.isdir(self.currentMountEntry.getMountPoint())
+ and not os.path.isfile(self.currentMountEntry.getMountPoint())
+ and not self.currentMountEntry.mounttype == 'swap'):
+ ask = KMessageBox.warningYesNoCancel(self,
+ i18n("""The mountpoint '%1' does not exist. You will not be able to enable it until it is created.\
+ \nShould I create the mountpoint?""").arg(self.currentMountEntry.getMountPoint()),
+ i18n("Mountpoint does not exist"))
+ if ask==KMessageBox.Cancel:
+ return
+ elif ask==KMessageBox.Yes:
+ os.mkdir(self.currentMountEntry.getMountPoint())
+ elif os.path.isfile(self.currentMountEntry.getMountPoint()):
+ if KMessageBox.warningContinueCancel(self,
+ i18n("""The mountpoint '%1' is a file, but it has to be a directory. You will probably not \
+ be able to enable it.\nContinue?""").arg(self.currentMountEntry.getMountPoint()),
+ i18n("Invalid mountpoint"))!=KMessageBox.Continue:
+ return
+
+ if self.newEntry==False:
+ # How to Change a Mount Entry.
+ # 1. Disable the exisiting entry (if needed)
+ # 2. Update existing entry from the mount table.
+ # 3. Enable the updated entry (if needed)
+ # 4. Write new fstab file.
+ # 5. Enable the new entry (if needed)
+
+ # 1. Disable the exisiting entry (if needed)
+ enabled = self.originalMountEntry.isEnabled()
+ if enabled:
+ self.disablingold = True
+ self.originalMountEntry.disable(self)
+ self.originalMountEntry.inPlaceCopyFrom(self.currentMountEntry)
+ self.mounttable.updateFstabOnDisk()
+ if enabled and self.originalMountEntry.isFileSystemAvailable():
+ self.originalMountEntry.enable(self)
+ self.accept()
+
+############################################################################
+class MountEntryAdvancedCommonUnixDialog(KDialogBase):
+ ########################################################################
+ def __init__(self,parent,name=None):
+ KDialogBase.__init__(self,parent,name,1,"",KDialogBase.Ok|KDialogBase.Cancel)
+
+ grid = self.makeGridMainWidget(2,Qt.Horizontal)
+ grid.setSpacing(self.spacingHint())
+
+ QWidget(grid)
+ self.accesstimecheckbox = QCheckBox(i18n("Update file access timestamps"),grid)
+
+ QWidget(grid)
+ self.allowexecutablecheckbox = QCheckBox(i18n("Allow Executables"),grid)
+
+ QWidget(grid)
+ self.allowsuidcheckbox = QCheckBox(i18n("Allow the SUID and SGID attributes"),grid)
+
+ QWidget(grid)
+ self.usedevpointscheckbox = QCheckBox(i18n("Allow device points"),grid)
+
+ label = QLabel(i18n("Options:"),grid)
+ self.optionslineedit = KLineEdit(grid)
+
+ label = QLabel(i18n("fs_freq:"),grid)
+ self.fsfreqspinbox = KIntSpinBox (0,1000,1,0,10,grid)
+
+ label = QLabel(i18n("fs_passno:"),grid)
+ self.fspassnospinbox = KIntSpinBox (0,1000,1,0,10,grid)
+
+ ########################################################################
+ def do(self,atime,allowexecutable,allowsuid,usedevpoints,options,fsfreq,fspassno):
+
+ self.accesstimecheckbox.setChecked(atime)
+ self.allowexecutablecheckbox.setChecked(allowexecutable)
+ self.allowsuidcheckbox.setChecked(allowsuid)
+ self.usedevpointscheckbox.setChecked(usedevpoints)
+ self.optionslineedit.setText(options)
+ self.fsfreqspinbox.setValue(fsfreq)
+ self.fspassnospinbox.setValue(fspassno)
+ self.exec_loop()
+ return ( self.accesstimecheckbox.isChecked(),
+ self.allowexecutablecheckbox.isChecked(),
+ self.allowsuidcheckbox.isChecked(),
+ self.usedevpointscheckbox.isChecked(),
+ unicode(self.optionslineedit.text()),
+ self.fsfreqspinbox.value(),
+ self.fspassnospinbox.value())
+
+############################################################################
+class MountEntryAdvancedPlainDialog(KDialogBase):
+ ########################################################################
+ def __init__(self,parent,name=None):
+ KDialogBase.__init__(self,parent,name,1,"",KDialogBase.Ok|KDialogBase.Cancel)
+
+ grid = self.makeGridMainWidget(2,Qt.Horizontal)
+ grid.setSpacing(self.spacingHint())
+
+ label = QLabel(i18n("Options:"),grid)
+ self.optionslineedit = KLineEdit(grid)
+
+ label = QLabel(i18n("fs_freq:"),grid)
+ self.fsfreqspinbox = KIntSpinBox (0,1000,1,0,10,grid)
+
+ label = QLabel(i18n("fs_passno:"),grid)
+ self.fspassnospinbox = KIntSpinBox (0,1000,1,0,10,grid)
+
+ ########################################################################
+ def do(self,options,fsfreq,fspassno):
+ self.optionslineedit.setText(options)
+ self.fsfreqspinbox.setValue(fsfreq)
+ self.fspassnospinbox.setValue(fspassno)
+ self.exec_loop()
+ return (unicode(self.optionslineedit.text()), self.fsfreqspinbox.value(), self.fspassnospinbox.value())
+
+############################################################################
+class MountListViewItem(KListViewItem):
+ ########################################################################
+ def __init__(self,parentitem,mountentry,haldevice=None):
+ self.haldevice = haldevice
+ self.mountentry = mountentry
+ if self.mountentry is None:
+ # There is no mount entry right now. This acts as a place holder
+ # for now.
+ KListViewItem.__init__(self,parentitem,self.haldevice.getName(),"","",self.haldevice.getDev(),"")
+ else:
+ if mountentry.isEnabled():
+ enabled = i18n("Enabled")
+ else:
+ enabled = i18n("Disabled")
+ if self.haldevice is not None:
+ name = self.haldevice.getName()
+ else:
+ name = self.mountentry.getName()
+ KListViewItem.__init__(self, parentitem, \
+ name,
+ self.mountentry.getMountPoint(), \
+ self.mountentry.mounttype, \
+ self.mountentry.getDevice(), \
+ enabled)
+
+ if self.mountentry.isEnabled():
+ self.setPixmap(4,UserIcon("greenled"))
+ else:
+ self.setPixmap(4,UserIcon("greyled"))
+ self.__updateIcon()
+
+ ########################################################################
+ def hasHAL(self):
+ return self.haldevice is not None
+
+ ########################################################################
+ def getHAL(self): return self.haldevice
+
+ ########################################################################
+ def updateDisplay(self):
+ if self.mountentry is not None:
+ if self.mountentry.isEnabled():
+ enabled = i18n("Enabled")
+ self.setPixmap(4,UserIcon("greenled"))
+ else:
+ enabled = i18n("Disabled")
+ self.setPixmap(4,UserIcon("greyled"))
+
+ if self.haldevice is not None:
+ self.setText(0,self.haldevice.getName())
+ else:
+ self.setText(0,self.mountentry.getMountPoint())
+
+ self.setText(1,self.mountentry.getMountPoint())
+ self.setText(2,self.mountentry.mounttype)
+
+ if self.mountentry.getDevice() is not None:
+ self.setText(3,self.mountentry.getDevice())
+ else:
+ uuid_device = microhal.getDeviceByUUID(self.mountentry.getUUID())
+ label_device = microhal.getDeviceByUUID(self.mountentry.getUUID())
+ if label_device is not None:
+ self.setText(3,label_device.getDev()+" (Label)")
+ elif real_device is not None:
+ self.setText(3,real_device.getDev()+" (UUID)")
+ else:
+ self.setText(3,"UUID="+self.mountentry.getUUID())
+
+ self.setText(4,enabled)
+ else:
+ self.setText(0,self.haldevice.getName())
+ self.setText(1,"")
+ self.setText(2,"")
+ self.setText(3,self.haldevice.getDev())
+ self.setText(4,"")
+ self.setPixmap(4,QPixmap())
+ self.__updateIcon()
+
+ ########################################################################
+ def setMountEntry(self,entry):
+ self.mountentry = entry
+ self.updateDisplay()
+
+ ########################################################################
+ def getMountEntry(self):
+ return self.mountentry
+
+ ########################################################################
+ def getDevice(self): return self.haldevice.getDev()
+
+ ########################################################################
+
+ def __updateIcon(self):
+ if self.haldevice is not None:
+ self.setPixmap(0,UserIcon(self.haldevice.iconname))
+ else:
+ self.setPixmap(0,UserIcon(self.mountentry.getIconName()))
+
+############################################################################
+class MountGroupListViewItem(KListViewItem):
+ ########################################################################
+ def __init__(self,parentitem,haldevice):
+ self.haldevice = haldevice
+ KListViewItem.__init__(self,parentitem,self.haldevice.getName(),"","","","")
+
+ if self.haldevice is not None:
+ iconname = self.haldevice.iconname
+ else:
+ iconname = self.mountentry.getIconName()
+ self.setPixmap(0,UserIcon(iconname))
+
+ ########################################################################
+ def getMountEntry(self):
+ return None
+
+ ########################################################################
+ def updateDisplay(self):
+ pass
+
+ def hasHAL(self):
+ return False
+
+############################################################################
+# Try translating this code to C++. I dare ya!
+if standalone:
+ programbase = KDialogBase
+else:
+ programbase = KCModule
+
+class MountConfigApp(programbase):
+ ########################################################################
+ def __init__(self,parent=None,name=None):
+ global standalone,isroot
+ KGlobal.locale().insertCatalogue("guidance")
+
+ if standalone:
+ KDialogBase.__init__(self,KJanusWidget.Plain,i18n("Disk & Filesystems"),
+ KDialogBase.User1|KDialogBase.Close, KDialogBase.Close)
+ self.setButtonText(KDialogBase.User1,i18n("About"))
+ topwidget = self.plainPage()
+ else:
+ KCModule.__init__(self,parent,name)
+ self.setButtons(0)
+ self.aboutdata = MakeAboutData()
+ topwidget = self
+
+ # Create a configuration object.
+ self.config = KConfig("mountconfigrc")
+
+ KGlobal.iconLoader().addAppDir("guidance")
+ self.updatingGUI = False
+ self.mounttable = MountTable('/etc/fstab','/etc/mtab')
+ self.selectedentry = None
+ self.aboutus = KAboutApplication(self)
+ self.sizeviewdialogs = {}
+ toplayout = QVBoxLayout(topwidget, 0, KDialog.spacingHint())
+ #topwidget.setEnabled(isroot)
+
+ hb = QHBox(topwidget)
+ hb.setSpacing(KDialog.spacingHint())
+ #if standalone:
+ # hb.setMargin(KDialog.marginHint())
+
+ toplayout.addWidget(hb)
+
+ label = QLabel(hb)
+ label.setPixmap(UserIcon("kcmpartitions"))
+ hb.setStretchFactor(label,0)
+
+ label = QLabel(i18n("Available Disks and Filesystems:"),hb)
+ hb.setStretchFactor(label,1)
+
+ self.mountlist = KListView(topwidget,"Mount list")
+ toplayout.addWidget(self.mountlist)
+ self.mountlist.addColumn(i18n("Name"))
+ self.mountlist.addColumn(i18n("Mount Point"))
+ self.mountlist.addColumn(i18n("Type"))
+ self.mountlist.addColumn(i18n("Device"))
+ self.mountlist.addColumn(i18n("Enabled"))
+ self.mountlist.setAllColumnsShowFocus(True)
+ self.mountlist.setSelectionMode(QListView.Single)
+ self.mountlist.setRootIsDecorated(True)
+ self.mountlist.setSorting(-1)
+ self.connect(self.mountlist, SIGNAL("selectionChanged(QListViewItem *)"), self.slotListClicked)
+ # Doubleclick in item opens modify dialogue.
+ self.connect(self.mountlist, SIGNAL("doubleClicked(QListViewItem *)"), self.slotModifyClicked)
+ # Rightclick: Open ContextMenu
+ self.connect(self.mountlist, SIGNAL("contextMenu(KListView*,QListViewItem*,const QPoint&)"),
+ self.slotContextMenu)
+
+ hbox = QHBox(topwidget)
+ toplayout.addWidget(hbox)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ toplayout.setStretchFactor(hbox,0)
+ self.newbutton = KPushButton(i18n("New..."),hbox)
+ hbox.setStretchFactor(self.newbutton,1)
+ self.connect(self.newbutton,SIGNAL("clicked()"),self.slotNewClicked)
+ self.newbutton.setEnabled(isroot)
+
+ self.modifybutton = KPushButton(i18n("Modify..."),hbox)
+ hbox.setStretchFactor(self.modifybutton,1)
+ self.connect(self.modifybutton,SIGNAL("clicked()"),self.slotModifyClicked)
+
+ self.deletebutton = KPushButton(i18n("Delete..."),hbox)
+ hbox.setStretchFactor(self.deletebutton,1)
+ self.connect(self.deletebutton,SIGNAL("clicked()"),self.slotDeleteClicked)
+
+ self.enablebutton = KPushButton(i18n("Enable"),hbox)
+ hbox.setStretchFactor(self.enablebutton,1)
+ self.connect(self.enablebutton,SIGNAL("clicked()"),self.slotEnableClicked)
+
+ self.disablebutton = KPushButton(i18n("Disable"),hbox)
+ hbox.setStretchFactor(self.disablebutton,1)
+ self.connect(self.disablebutton,SIGNAL("clicked()"),self.slotDisableClicked)
+
+ self.detailsbutton = KPushButton(i18n("Details..."),hbox)
+ hbox.setStretchFactor(self.detailsbutton,1)
+ self.connect(self.detailsbutton,SIGNAL("clicked()"),self.slotDetailsClicked)
+
+ self.devstolistitems = None
+ self.uuidstolistitems = None
+ self.mountentriestolistitems = None
+ self.__updateMountList()
+ self.__selectEntry(self.mounttable[0])
+
+ self.configuredialog = MountEntryDialog(None)
+
+ ########################################################################
+ def exec_loop(self):
+ global programbase
+ self.__loadOptions()
+ programbase.exec_loop(self)
+ self.__saveOptions()
+
+ ########################################################################
+ def slotContextMenu(self,lv,lv_item,p):
+
+ hal_device = lv_item.haldevice
+ if hal_device is not None and not isinstance(hal_device,MicroHAL.FakeSystemDevice):
+
+ self.cmenu = KPopupMenu(self,"MyActions")
+ if isinstance(hal_device,MicroHAL.RemovableDisk) or isinstance(lv_item,MountListViewItem):
+ self.cmenu.insertItem(i18n("Modify..."), self.slotModifyClicked, 0, 0)
+ self.cmenu.insertItem(i18n("Delete..."), self.slotDeleteClicked, 0, 1)
+ if not isroot:
+ self.cmenu.setItemEnabled(0,False)
+ self.cmenu.setItemEnabled(1,False)
+ elif isinstance(hal_device,MicroHAL.Disk) or isinstance(hal_device,MicroHAL.USBDisk):
+ self.cmenu.insertItem(i18n("Show details..."), self.slotDetailsClicked, 0, 0)
+ self.cmenu.insertItem(i18n("New..."), self.slotNewClicked, 0, 1)
+ if not isroot:
+ self.cmenu.setItemEnabled(1,False)
+
+ self.cmenu.exec_loop(p)
+
+ ########################################################################
+ def slotUser1(self):
+ self.aboutus.show()
+
+ ########################################################################
+ def slotEnableClicked(self):
+ if self.selectedentry!=None:
+ self.selectedentry.enable(self)
+ self.mounttable.updateStatus(self.selectedentry)
+ self.__updateEntry(self.selectedentry)
+ self.enablebutton.setEnabled(not self.selectedentry.isEnabled())
+ self.disablebutton.setEnabled(self.selectedentry.isEnabled())
+
+ ########################################################################
+ def slotDisableClicked(self):
+ if self.selectedentry!=None:
+ self.__disableEntry()
+
+ ########################################################################
+ def slotModifyClicked(self):
+ global isroot
+ if not isroot:
+ return
+
+ if self.selectedentry!=None:
+ self.configuredialog.doEditMount(self.mounttable,self.selectedentry)
+
+ lvi = self.mountentriestolistitems[self.selectedentry]
+ if lvi.hasHAL():
+ if lvi.getHAL().getDev()!=self.selectedentry.getDevice():
+ # The (device-)item in the listview no longer matches this mount entry.
+ del self.mountentriestolistitems[self.selectedentry]
+ lvi.setMountEntry(None)
+ lvi.updateDisplay()
+ # Reinsert this mount entry into the list view.
+ self.__insertMountEntryIntoListView(self.selectedentry)
+
+ elif self.selectedentry.getDevice() is not None \
+ and self.selectedentry.getDevice() in self.devstolistitems:
+ # The mount entry can now merged with any existing (HAL-)item.
+ # Remove the existing lose item.
+ self.mountlist.takeItem(lvi)
+ del self.mountentriestolistitems[self.selectedentry]
+ del self.devstolistitems[self.selectedentry.getDevice()]
+ del lvi
+ # Reinsert this mount entry into the list view.
+ self.__insertMountEntryIntoListView(self.selectedentry)
+
+ elif self.selectedentry.getUUID() is not None \
+ and self.selectedentry.getUUID() in self.uuidstolistitems:
+ # The mount entry can now merged with any existing (HAL-)item.
+ # Remove the existing lose item.
+ self.mountlist.takeItem(lvi)
+ del self.mountentriestolistitems[self.selectedentry]
+ del self.uuidstolistitems[self.selectedentry.getUUID()]
+ del lvi
+ # Reinsert this mount entry into the list view.
+ self.__insertMountEntryIntoListView(self.selectedentry)
+
+ self.__updateEntry(self.selectedentry)
+ self.__selectEntry(self.selectedentry)
+ else:
+ self.slotNewClicked()
+
+ ########################################################################
+ def slotNewClicked(self):
+ defaultdevice = None
+ if self.selectedentry is None:
+ lvi = self.mountlist.selectedItem()
+ if lvi is not None and lvi.hasHAL() and (lvi.getMountEntry() is None):
+ defaultdevice = lvi.getDevice()
+ newentry = self.configuredialog.doNewMount(self.mounttable,defaultdevice)
+ if newentry!=None:
+ self.updatingGUI = True
+ self.__insertMountEntryIntoListView(newentry)
+ self.__selectEntry(newentry)
+ self.updatingGUI = False
+
+ ########################################################################
+ def slotDeleteClicked(self):
+ if self.selectedentry!=None:
+ if self.selectedentry.isEnabled():
+ if not self.__disableEntry():
+ return # If we couldn't disable it, then we can't continue.
+ message = i18n("Are you sure you want to delete mount '%1' of type %2 at '%3'?\n " +
+ "(This will only remove the mount, no data will be deleted.)") \
+ .arg(self.selectedentry.getMountPoint()).arg(self.selectedentry.mounttype).arg(
+ self.selectedentry.getDevice())
+ if KMessageBox.warningYesNo(self,message,i18n("Delete Mount?"))==KMessageBox.Yes:
+ lvi = self.mountentriestolistitems[self.selectedentry]
+ if not lvi.hasHAL():
+ self.mountlist.takeItem(lvi)
+ del lvi
+ del self.mountentriestolistitems[self.selectedentry]
+ else:
+ lvi.setMountEntry(None)
+ self.mounttable.remove(self.selectedentry)
+ self.mounttable.updateFstabOnDisk()
+ self.__selectEntry(None)
+
+ ########################################################################
+ def slotDetailsClicked(self):
+ # Popup a dialog showing disklayout and a graphical represenation of 'df'
+ hal_device = self.mountlist.selectedItem().haldevice
+ if isinstance(hal_device,MicroHAL.Disk):
+ blk = hal_device.getDev()
+ devicepath, devicename = ('/'.join(blk.split('/')[0:-1])+'/', blk.split('/')[-1])
+ # We keep a dict with those widgets, that saves us some time reading out all the values.
+ if devicename not in self.sizeviewdialogs.keys():
+ self.sizeviewdialogs[devicename] = sizeview.SizeView(self,devicename,devicepath)
+ self.sizeviewdialogs[devicename].exec_loop()
+ else:
+ self.sizeviewdialogs[devicename].exec_loop()
+ else:
+ print "Sizeview doesn't support",blk.__class__," yet."
+
+ ########################################################################
+ def slotListClicked(self,item):
+ if self.updatingGUI==False:
+ self.__selectEntry(item.getMountEntry())
+
+ ########################################################################
+ def __disableEntry(self):
+ self.selectedentry.disable(self)
+ self.mounttable.updateStatus(self.selectedentry)
+ self.__updateEntry(self.selectedentry)
+ self.enablebutton.setEnabled(not self.selectedentry.isEnabled() and self.selectedentry.isFileSystemAvailable())
+ self.disablebutton.setEnabled(self.selectedentry.isEnabled())
+ return not self.selectedentry.isEnabled()
+
+ ########################################################################
+ def __updateEntry(self,selectedentry):
+ # Update the display.
+ lvi = self.mountentriestolistitems[selectedentry]
+ lvi.updateDisplay()
+
+ ########################################################################
+ def __loadOptions(self):
+ self.config.setGroup("General")
+ size = self.config.readSizeEntry("Geometry")
+ if size.isEmpty()==False:
+ self.resize(size)
+
+ #######################################################################
+ def __saveOptions(self):
+ global isroot
+ if isroot:
+ return
+ self.config.setGroup("General")
+ self.config.writeEntry("Geometry", self.size())
+ self.config.sync()
+
+ ########################################################################
+ def __updateMountList(self):
+ self.mountentriestolistitems = {}
+
+ self.mountlist.clear()
+
+ self.listgroups = {}
+ self.devstolistitems = {}
+ self.uuidstolistitems = {}
+
+ lasttopitem = None
+
+ # Find out which disks are installed and should be shown in the
+ # listview. For real disks we put a 'group' in the listview and
+ # under the group we list the partitions, whether they are
+ # mounted or not.
+ for blockdevice in microhal.getDevices():
+ # We are looking for block devices that represent hard disks or
+ # things that have partitions and are not removable
+ if (blockdevice.major in microhal.partitionblockdevs and not blockdevice.removable) \
+ or isinstance(blockdevice,MicroHAL.USBDisk):
+
+ # We have a not removable block device.
+ # We want to create a listitem for the device and subitems
+ # for each partition.
+ groupitem = MountGroupListViewItem(self.mountlist,blockdevice)
+ groupitem.setOpen(True)
+ lasttopitem = groupitem
+ lvi = None
+ for partition in blockdevice.getPartitions():
+ # Try to find a matching mount entry for this partition.
+ lastlvi = lvi
+ lvi = MountListViewItem(groupitem,None,partition)
+
+ if partition.getUUID() is not None:
+ self.uuidstolistitems[partition.getUUID()] = lvi
+ if partition.getDev() is not None:
+ self.devstolistitems[partition.getDev()] = lvi
+
+ if lastlvi is not None:
+ lvi.moveItem(lastlvi)
+ elif blockdevice.getMajor() in microhal.cdromsdevs or blockdevice.isRemovable():
+ # Removable block device, assume CDROM (even if it's a partitionblockdevice)
+ lvi = MountListViewItem(self.mountlist,None,blockdevice)
+ if blockdevice.getUUID() is not None:
+ self.uuidstolistitems[blockdevice.getUUID()] = lvi
+ if blockdevice.getDev() is not None:
+ self.devstolistitems[blockdevice.getDev()] = lvi
+ lasttopitem = lvi
+
+
+ systemdevice = MicroHAL.FakeSystemDevice()
+ systemdevice.iconname = systemdevice.getIconName()
+ groupitem = MountGroupListViewItem(self.mountlist,systemdevice)
+
+ if lasttopitem is not None:
+ groupitem.moveItem(lasttopitem)
+ lasttopitem = groupitem
+
+ self.listgroups["system"] = groupitem
+
+ self.mountentriestolistitems = {}
+ for entry in self.mounttable:
+ self.__insertMountEntryIntoListView(entry)
+
+ ########################################################################
+ def __insertMountEntryIntoListView(self,mountentry):
+ if mountentry.getDevice() in self.devstolistitems:
+ lvi = self.devstolistitems[mountentry.getDevice()]
+ lvi.setMountEntry(mountentry)
+ elif mountentry.getUUID() in self.uuidstolistitems:
+ lvi = self.uuidstolistitems[mountentry.getUUID()]
+ lvi.setMountEntry(mountentry)
+ else:
+ cat = mountentry.getCategory() # Place it under a special node?
+ if cat not in self.listgroups:
+ lvi = MountListViewItem(self.mountlist,mountentry)
+ item = self.mountlist.firstChild()
+ else:
+ lvi = MountListViewItem(self.listgroups[cat],mountentry)
+ item = self.listgroups[cat].firstChild()
+
+ # Move the item to the end of this (sub-list).
+ while item.nextSibling() is not None:
+ item = item.nextSibling()
+ lvi.moveItem(item)
+
+ self.mountentriestolistitems[mountentry] = lvi
+
+ ########################################################################
+ def __selectEntry(self,mountentry):
+ if mountentry is not None and isroot:
+ lvi = self.mountentriestolistitems[mountentry]
+ self.mountlist.setSelected(lvi,True)
+ self.enablebutton.setEnabled(not mountentry.isEnabled() and mountentry.isFileSystemAvailable())
+ self.selectedentry = mountentry
+ # disable unsupported stuff, such as SystemEntries that canot be disabled and modified
+ if not mountentry.maydisable:
+ disable = False
+ else:
+ disable = mountentry.isEnabled()
+ if mountentry.notInFstab:
+ delete = False
+ modify = False
+ else:
+ delete = True
+ modify = True
+
+ self.disablebutton.setEnabled(disable)
+ self.deletebutton.setEnabled(delete)
+ self.modifybutton.setEnabled(modify)
+
+ else:
+ self.enablebutton.setEnabled(False)
+ self.disablebutton.setEnabled(False)
+ self.deletebutton.setEnabled(False)
+ self.modifybutton.setEnabled(False)
+ self.detailsbutton.setEnabled(False)
+ self.selectedentry = None
+ selected_item = self.mountlist.selectedItem()
+ if selected_item is not None:
+ self.detailsbutton.setEnabled(isinstance(selected_item.haldevice,MicroHAL.Disk) \
+ and not isinstance(selected_item.haldevice,MicroHAL.RemovableDisk))
+ else:
+ self.detailsbutton.setEnabled(False)
+
+ #######################################################################
+ # KControl virtual void methods
+ def load(self):
+ pass
+ def save(self):
+ pass
+ def defaults(self):
+ pass
+ def sysdefaults(self):
+ pass
+
+ def aboutData(self):
+ # Return the KAboutData object which we created during initialisation.
+ return self.aboutdata
+ def buttons(self):
+ # Only supply a Help button. Other choices are Default and Apply.
+ return KCModule.Help
+
+############################################################################
+# Factory function for KControl
+def create_mountconfig(parent,name):
+ global kapp, microhal
+ microhal = MicroHAL.MicroHAL()
+ kapp = KApplication.kApplication()
+ return MountConfigApp(parent, name)
+
+############################################################################
+def MakeAboutData():
+ aboutdata = KAboutData("mountconfig",programname,version,"Disk & Filesystem Configuration Tool",
+ KAboutData.License_GPL, "Copyright (C) 2003-2007 Simon Edwards")
+ aboutdata.addAuthor("Simon Edwards","Developer","simon@simonzone.com",
+ "http://www.simonzone.com/software/guidance")
+ aboutdata.addAuthor("Sebastian Kügler","Developer","sebas@kde.org","http://vizZzion.org");
+ return aboutdata
+
+if standalone:
+ aboutdata = MakeAboutData()
+ KCmdLineArgs.init(sys.argv,aboutdata)
+
+ microhal = MicroHAL.MicroHAL()
+ kapp = KApplication()
+ sysvapp = MountConfigApp()
+ sysvapp.exec_loop()
diff --git a/mountconfig/sizeview.py b/mountconfig/sizeview.py
new file mode 100644
index 0000000..bbb1f5b
--- /dev/null
+++ b/mountconfig/sizeview.py
@@ -0,0 +1,504 @@
+#!/usr/bin/env python
+
+from qt import *
+from kdecore import *
+import sys, os
+
+def getLabel(blocks):
+ """ Translates blocksize into human readable labels, such as 17.3 Gb, 2.1 Mb. """
+
+ try:
+ blocks = int(blocks) # 1K blocks now.
+ except ValueError:
+ return i18n("n/a")
+ if blocks<1024:
+ return i18n("%1 Kb").arg(blocks)
+ if blocks<1024*1024:
+ return i18n("%1 Mb").arg(round(float(blocks)/1024.0,1))
+ blocks /= 1024
+ if blocks<1024*1024:
+ return i18n("%1 Gb").arg(round(float(blocks)/1024.0,1))
+ blocks /= 1024
+ return i18n("%1 Tb").arg(round(float(blocks)/1024.0,1))
+
+
+class SizeViewApplication(QApplication):
+ """ Boilerplate """
+ def __init__(self,devicename,devicepath,args=[]):
+ QApplication.__init__(self,args)
+
+ self.maindialog = SizeView(None,devicename,devicepath)
+ self.setMainWidget(self.maindialog)
+ self.maindialog.show()
+ self.exec_loop()
+
+class SizeView(QDialog):
+ """ A SizeView represents a horizontal list of PartitionGroupWidgets.
+ It supplies the code to read the sizes and the values that have
+ to be filled in, using the /proc filesystem and the program "df".
+ """
+
+ dev_path = "/dev/" # Where to look for the partitions
+ devicename = "" # Such as hda1
+ partitions = {} # List of partitions
+ sizes = {} # Maps devicenames to blocksizes
+ mountpoints = {} # Maps devicenames to mountpoints
+ used = {} # Blocks used on a partition
+ available = {} # Blocks available
+ part_types = {} # Maps devicenames to partitiontypes
+ partitionwidgets = [] # Holds a list of the PartitionGroup widgets
+
+ def __init__(self,parent,devicename,devicepath=None):
+ self.partitionwidgets = []
+ QDialog.__init__(self,None,None,0,0)
+ self.dialogtitle = i18n("Diskspace & Partitions")
+ self.setCaption(self.dialogtitle)
+ self.devicename = devicename
+ if devicepath:
+ self.dev_path = devicepath
+
+ # Retrieve all information from the system.
+ self.readMounts()
+ self.readSize()
+ self.readSwaps()
+
+ partitions = self.partitions.keys()
+ partitions.sort()
+
+ number=1
+ for part in partitions:
+ try:
+ fill = self.sizes[part]
+ mountpoint = self.mountpoints[part]
+ used = self.used[part]
+ available = self.available[part]
+ except KeyError:
+ # Handles empty or not-mounted partitions
+ fill = None
+ mountpoint = i18n("n/a")
+ used = str(i18n("n/a"))
+ available = str(i18n("n/a"))
+
+ pwidg = PartitionGroup(part,self,fill,number,self.part_types,self.dev_path)
+ pwidg.setSize(self.partitions[part])
+ pwidg.setMountPoint(mountpoint)
+ pwidg.setUsed(used)
+ pwidg.setAvailable(available)
+ pwidg.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding,QSizePolicy.MinimumExpanding,0,0,
+ pwidg.sizePolicy().hasHeightForWidth()))
+ self.partitionwidgets.append(pwidg)
+ number += 1
+
+ n = len(partitions)
+ r = 2
+ c = 0
+ cols = 1
+
+ # Compute number of rows needed for partitions.
+ if n%cols > 0:
+ rows = int(n/cols)+1
+ else:
+ rows = int(n/cols)
+ if n is 1: rows = 2
+
+ # Build main Gridlayout.
+ total_rows = rows+2
+ self.grid = QGridLayout(self,total_rows,2,5)
+ #self.setSizeGripEnabled(1)
+
+ self.buttonCancel = QPushButton(i18n("Close"),self,"buttonCancel")
+ self.buttonCancel.setAutoDefault(1)
+ self.buttonCancel.setFixedWidth(80)
+ self.grid.addWidget(self.buttonCancel,total_rows-1,1,Qt.AlignRight)
+
+ self.grid.setRowStretch(0,0)
+ self.grid.setRowStretch(total_rows-1,0)
+
+ # Stretch all but first and last rows.
+ for row in range(1,total_rows-1):
+ self.grid.setRowStretch(row,5)
+
+ self.clearWState(Qt.WState_Polished)
+ self.connect(self.buttonCancel,SIGNAL("clicked()"),self.hide)
+
+ #self.mainlabel = QLabel("<font size=+2><b>"+self.dialogtitle+"</b></font>",self)
+ #self.grid.addWidget(self.mainlabel,0,0)
+
+ self.diskgroup = DiskGroup(self,self.devicename,self.dev_path,self.partitions,self.totalsize,self.mountpoints)
+ self.grid.addMultiCellWidget(self.diskgroup,1,1,0,1)
+
+ for pw in self.partitionwidgets:
+ self.grid.addWidget(pw,r,c)
+ if c is cols:
+ r += 1
+ c = 0
+ else:
+ c += 1
+
+ def readSize(self):
+ fhandle = open("/proc/partitions","r")
+ self.partitions = {}
+ self.totalsize = 0
+ for line in fhandle.readlines():
+ try:
+ major,minor,blocks,name = line.split()
+ if name == self.devicename:
+ self.totalsize = blocks
+ if name[:len(self.devicename)] == self.devicename and len(name) > len(self.devicename):
+ self.partitions[name] = blocks
+ except ValueError:
+ pass
+ fhandle.close()
+
+ def readMounts(self):
+ fhandle = os.popen("/bin/df")
+ for l in fhandle.readlines():
+ v = l.split()
+ try:
+ p,s = v[0].split("/")[2],v[4][:-1]
+ self.sizes[p] = s
+ self.mountpoints[p] = v[5]
+ self.used[p] = v[2]
+ self.available[p] = v[3]
+ self.part_types[p] = "filesystem"
+ except IndexError:
+ pass
+ fhandle.close()
+
+ def readSwaps(self):
+ fhandle = open("/proc/swaps")
+ for line in fhandle.readlines():
+ try:
+ device,type,size,used,priority = line.split()
+ device = device[len(self.dev_path):]
+ self.used[device] = used
+ self.sizes[device] = round(float(used)/float(size)*100 ,1)
+ self.available[device] = str(int(size)-int(used))
+ self.mountpoints[device] = "swap"
+ self.part_types[device] = "swap"
+ except:
+ pass
+ fhandle.close()
+
+ """
+ def __show__(self):
+ print self.partitions
+ print "Device", self.devicename, self.totalsize
+ for p in self.partitions:
+ print p, self.partitions[p], self.partitions[p]
+ """
+class DiskGroup(QGroupBox):
+ """ Shows an overview of the physical layout of the disks, with the different partitions on it. """
+
+ def __init__(self,parent,device,dev_path,partitions,totalsize,mountpoints):
+
+ QGroupBox.__init__(self,parent,"DiskViewGroup")
+ self.setTitle(i18n("Disk %1%2").arg(dev_path).arg(device))
+ self.mountpoints = mountpoints
+ self.partitions = partitions
+ self.totalsize = totalsize
+
+ self.setColumnLayout(0,Qt.Vertical)
+ self.layout().setSpacing(6)
+ self.layout().setMargin(11)
+ DiskViewGroupLayout = QVBoxLayout(self.layout())
+ DiskViewGroupLayout.setAlignment(Qt.AlignTop)
+ colors = ["dark orange","dodger blue","gold","green","firebrick","navy","darkorange","darkblue"]
+
+ self.diskview = DiskView(self,self.percentages(),colors)
+ self.diskview.setScaledContents(1)
+ DiskViewGroupLayout.addWidget(self.diskview)
+
+ parts = self.partitions.keys()
+ parts.sort()
+ self.percentages()
+
+ cols = 3 # Number of columns to use for colorlabels.
+ rows = len(parts)/cols
+ mod = len(parts)%cols
+ if mod > 0:
+ rows += cols-mod
+
+ # We multiply the number of cols by 3, first for the colorlabel, second for the name, third for spacing.
+ cols = cols*3
+ DiskViewPartitionListLayout = QGridLayout(DiskViewGroupLayout,rows,cols)
+
+ i = cl = r = c = 0
+ ps = ls = {}
+ for dev in parts:
+ ps[i] = LegendLabel(self,colors[cl])
+ DiskViewPartitionListLayout.addWidget(ps[i],r,c)
+ try:
+ lbl = self.mountpoints[dev]
+ except KeyError:
+ lbl = "not mounted"
+ ls[i] = QLabel(self,lbl+'<br /> ('+dev_path+dev+')',self)
+ DiskViewPartitionListLayout.addWidget(ls[i],r,c+1)
+ cl += 1
+ if cl == len(colors):
+ cl = 0
+ i += 1
+ if c is cols:
+ c = 0
+ r += 1
+ else:
+ c += 3
+
+ def percentages(self):
+
+ p_t = 0
+ for p in self.partitions.values():
+ p_t += int(p)
+
+ self.perc = {}
+ for p in self.partitions.keys():
+ self.perc[p] = float(float(self.partitions[p])/float(p_t))
+ return self.perc
+
+
+class PartitionGroup(QGroupBox):
+ """ Represents a groupbox with the filled bar and a couple of labels with
+ information about the partition in it."""
+
+ blocksize = 0
+ title = str(i18n("Partition"))
+
+ def __init__(self,device,parent,fill_percent,number,part_types,dev_path):
+ QGroupBox.__init__(self,parent)
+ self.part_types = part_types
+ self.dev_path = dev_path
+ self.setGeometry(QRect(110,100,370,203))
+ self.setColumnLayout(0,Qt.Vertical)
+ self.layout().setSpacing(3)
+ self.layout().setMargin(5)
+ self.setMinimumSize(280,120)
+
+ partitiongroup_layout = QGridLayout(self.layout())
+ partitiongroup_layout.setAlignment(Qt.AlignTop)
+ self.available = QLabel(i18n("available"),self)
+ partitiongroup_layout.addWidget(self.available,3,4)
+
+ self.device = QLabel(i18n("device"),self)
+ partitiongroup_layout.addMultiCellWidget(self.device,1,1,3,4)
+
+ self.partpixmap = PartitionView(self,fill_percent,self.part_types,device)
+ self.partpixmap.setScaledContents(1)
+
+ partitiongroup_layout.addMultiCellWidget(self.partpixmap,0,0,0,4)
+ self.textLabel1_3 = QLabel("textLabel1_3",self)
+ partitiongroup_layout.addWidget(self.textLabel1_3,3,0)
+ self.totalsize = QLabel("totalsize",self)
+ partitiongroup_layout.addWidget(self.totalsize,2,1)
+ self.textLabel1_2 = QLabel(self,"textLabel1_2")
+ partitiongroup_layout.addWidget(self.textLabel1_2,2,0)
+ self.textLabel1 = QLabel(self,"textLabel1")
+ partitiongroup_layout.addWidget(self.textLabel1,1,0)
+ self.textLabel3_2 = QLabel(self,"textLabel3_2")
+ partitiongroup_layout.addMultiCellWidget(self.textLabel3_2,2,2,2,3)
+ self.percentfilled = QLabel(self,"percentfree")
+ partitiongroup_layout.addWidget(self.percentfilled,2,4)
+ self.textLabel3_3 = QLabel(self,"textLabel3_3")
+ partitiongroup_layout.addWidget(self.textLabel3_3,3,2)
+ self.textLabel3 = QLabel(self,"textLabel3")
+ partitiongroup_layout.addWidget(self.textLabel3,1,2)
+ self.used = QLabel(self,"used")
+ partitiongroup_layout.addWidget(self.used,3,1)
+ self.mountpoint = QLabel(self,"mountpoint")
+ self.mountpoint.setMinimumSize(QSize(60,0))
+ partitiongroup_layout.addWidget(self.mountpoint,1,1)
+ self.clearWState(Qt.WState_Polished)
+
+ self.setTitle(i18n("%1. Partition").arg(number))
+ self.textLabel1_3.setText(i18n("Used:"))
+ self.textLabel1_2.setText(i18n("Total Size:"))
+ self.textLabel1.setText(i18n("Mountpoint:"))
+ self.textLabel3_2.setText(i18n("% Used:"))
+ self.textLabel3_3.setText(i18n("Available:"))
+ self.textLabel3.setText(i18n("Device:"))
+
+ self.setDevice(self.dev_path+device)
+ self.setFillPercentage(fill_percent)
+
+ def setSize(self,label):
+ self.totalsize.setText(getLabel(label))
+
+ def setDevice(self,device):
+ self.device.setText(device)
+
+ def setMountPoint(self,mountpoint):
+ self.mountpoint.setText(mountpoint)
+ self.setTitle(i18n("Partition %1").arg(mountpoint))
+
+ def setTotalSize(self,totalsize):
+ self.totalsize.setText(getLabel(totalsize))
+
+ def setFillPercentage(self,fill_percent):
+ self.fill_percent = self.partpixmap.fill_percent = fill_percent
+ if fill_percent is not None:
+ self.percentfilled.setText("%s%%" % fill_percent)
+ else:
+ self.percentfilled.setText(i18n("Unknown"))
+
+ def setUsed(self,used):
+ self.used.setText(getLabel(used))
+
+ def setAvailable(self,available):
+ self.available.setText(getLabel(available))
+
+class LegendLabel(QLabel):
+ """ Show some color in the DiskView legend """
+
+ def __init__(self,parent,color="green",style=QBrush.SolidPattern):
+ QLabel.__init__(self,parent,"bla")
+ self.w = 40
+ self.h = 20
+ self.pmsize = QSize(self.w,self.h)
+ self.pm = QPixmap(self.pmsize)
+ self.linewidth = 2
+ self.color = QColor(color)
+ self.style = style
+ self.framecolor = QColor("black")
+ self.paintMe()
+ self.setPixmap(self.pm)
+ self.setScaledContents(1)
+ self.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,
+ self.sizePolicy().hasHeightForWidth()))
+
+ def paintMe(self):
+ p = QPainter(self.pm)
+ p.fillRect(0,0,self.w,self.h,QBrush(self.color,self.style))
+ p.setPen(QPen(QColor("black"),self.linewidth))
+ p.drawRect(self.linewidth/2,self.linewidth/2,self.w-self.linewidth/2,self.h-self.linewidth/2)
+ p.end()
+
+class PartitionView(QLabel):
+ """ PartitionView is a label carryig a pixmap. This class's main purpose is handlig layout
+ of the underlying pixmap."""
+ w = 250
+ h = 35
+ def __init__(self,parent,fill_percent,part_types,device):
+ self.part_types = part_types
+ self.fill_percent = fill_percent
+ QLabel.__init__(self,parent,"pview")
+ self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding,0,0,
+ self.sizePolicy().hasHeightForWidth()))
+ self.setMinimumSize(QSize(self.w,self.h))
+ self.setPixmap(PartitionPixmap(QSize(self.w,self.h),self.fill_percent,self.part_types,device))
+ self.setScaledContents(1)
+ self.setAlignment(QLabel.AlignCenter)
+
+class DiskView(PartitionView):
+ """ PartitionView is a label carryig a pixmap. This class's main purpose is handlig layout
+ of the underlying pixmap."""
+
+ w = 540
+ h = 50
+ linewidth = 2
+
+ def __init__(self,parent,percents,colors):
+ QLabel.__init__(self,parent)
+
+ self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding,0,0,
+ self.sizePolicy().hasHeightForWidth()))
+ self.setPixmap(DiskPixmap(percents,colors,(self.w,self.h)))
+ self.setScaledContents(1)
+ self.setAlignment(QLabel.AlignCenter)
+
+class DiskPixmap(QPixmap):
+
+ linewidth = 2 # Width of surrounding frame
+
+ def __init__(self,percents,colors,(w,h)):
+ self.percents = percents
+ self.w,self.h = w,h
+ self.colors = colors
+ QPixmap.__init__(self,w,h)
+ self.paintMe()
+
+ def paintMe(self):
+ p = QPainter(self)
+ w,h = self.w,self.h
+ i = 0
+ x0 = 0
+ y = 0
+
+ # Paint background, this is interesting for empty partitions.
+ p.fillRect(0,0,w,h,QBrush(QColor("white")))
+
+ parts = self.percents.keys()
+ parts.sort()
+ xa = wa = 0
+ for part in parts:
+ W = (w * self.percents[part])
+ # We need to adjust a little to avoid to get wholes.
+ if x0>0: xa = 2
+ if W < self.w: wa = 2
+ p.fillRect(x0-xa,0,W+wa,h,QBrush(QColor(self.colors[i])))
+ i += 1
+ x0 += W
+
+ # Paint Frame around it.
+ p.setPen(QPen(QColor("black"),self.linewidth))
+ p.drawRect(self.linewidth/2,self.linewidth/2,self.width()-self.linewidth/2,self.height()-self.linewidth/2)
+ p.end()
+
+
+class PartitionPixmap(QPixmap):
+ """ A PartitionPixmap is a two colored bar with a black frame. The first color represents the
+ percentage that's used, the second one the free percentage."""
+ linewidth = 2 # Width of surrounding frame
+
+ def __init__(self,pmsize,fill_percent,part_types,device):
+ QPixmap.__init__(self,pmsize)
+
+ self.pmsize = pmsize # Size of the pixmap
+ self.part_types = part_types # Array to look up the type of the partition
+ self.fill_percent = fill_percent
+ self.device = device # Device name of the partition
+
+ self.w = self.pmsize.width()
+ self.h = self.pmsize.height()
+ self.paintMe()
+
+ def paintMe(self):
+ p = QPainter(self)
+ try:
+ fill_percent = int(self.fill_percent)
+ if self.part_types[self.device] == "swap":
+ # Swap partitions get blueish colors.
+ color_used = QColor("blue")
+ color_free = QColor("lightblue")
+ else:
+ # Regular partitions get a red / green color combo.
+ color_used = QColor("red")
+ color_free = QColor("forest green")
+ except (KeyError,TypeError):
+ # Partition has no fillsize, might be empty or not mounted partition
+ p.fillRect(0,0,self.w,self.h,QBrush(QColor("darkgrey")))
+ p.setPen(QPen(QColor("black"),self.linewidth))
+ p.drawRect(self.linewidth/2,self.linewidth/2,self.w-self.linewidth/2,self.h-self.linewidth/2)
+ p.end()
+ return
+ # Total width of the pixmap
+ W,H = float(self.w),float(self.h)
+
+ # Paint filled == red part of the bar.
+ x = y = 0
+ w = W - (W*(1-(fill_percent/100.00)))
+ h = H
+ p.fillRect(x,y,w,h,QBrush(color_used))
+
+ # Paint green part == space left
+ x = w
+ w = W - w
+ p.fillRect(x,y,w,h,QBrush(color_free))
+
+ # Paint Frame around it.
+ p.setPen(QPen(QColor("black"),self.linewidth))
+ p.drawRect(self.linewidth/2,self.linewidth/2,W-self.linewidth/2,H-self.linewidth/2)
+
+ p.end()
+
+if __name__ == "__main__":
+ device = "sdc"
+ app = SizeViewApplication(device,None,sys.argv)
diff --git a/package/mandrake/guidance-kcmdisplayconfig b/package/mandrake/guidance-kcmdisplayconfig
new file mode 100644
index 0000000..ea49619
--- /dev/null
+++ b/package/mandrake/guidance-kcmdisplayconfig
@@ -0,0 +1 @@
+?package(guidance): needs="kde" kde_filename="displayconfig" section="System/Configuration/KDE/Peripherals" title="Display & Monitor" icon="displayconfig.png" command="/usr/bin/displayconfig" kde_command="kcmshell displayconfig" longtitle="Display and monitor settings" kde_opt="\\nEncoding=UTF-8\\nX-KDE-ModuleType=Library\\nX-KDE-Library=displayconfig\\nX-KDE-FactoryName=displayconfig\\nX-KDE-ParentApp=kcontrol\\nX-KDE-RootOnly=true\\nX-KDE-SubstituteUID=true\\nKeywords=resolution;display;monitor;video;X11;xorg;gfx\\n"
diff --git a/package/mandrake/guidance-kcmmountconfig b/package/mandrake/guidance-kcmmountconfig
new file mode 100644
index 0000000..1473fee
--- /dev/null
+++ b/package/mandrake/guidance-kcmmountconfig
@@ -0,0 +1 @@
+?package(guidance): needs="kde" kde_filename="mountconfig" section="System/Configuration/KDE/System" title="Disk & Filesystems" icon="disksfilesystems.png" command="/usr/bin/mountconfig" kde_command="kcmshell mountconfig" longtitle="Manage disks and filesystems" kde_opt="\\nEncoding=UTF-8\\nX-KDE-ModuleType=Library\\nX-KDE-Library=mountconfig\\nX-KDE-FactoryName=mountconfig\\nX-KDE-ParentApp=kcontrol\\nX-KDE-RootOnly=true\\nX-KDE-SubstituteUID=true\\nKeywords=disk;filesystem;mount\\n"
diff --git a/package/mandrake/guidance-kcmserviceconfig b/package/mandrake/guidance-kcmserviceconfig
new file mode 100644
index 0000000..5374240
--- /dev/null
+++ b/package/mandrake/guidance-kcmserviceconfig
@@ -0,0 +1 @@
+?package(guidance): needs="kde" kde_filename="serviceconfig" section="System/Configuration/KDE/System" title="Services" icon="daemons.png" command="/usr/bin/serviceconfig" kde_command="kcmshell serviceconfig" longtitle="Manage running services" kde_opt="\\nEncoding=UTF-8\\nX-KDE-ModuleType=Library\\nX-KDE-Library=serviceconfig\\nX-KDE-FactoryName=serviceconfig\\nX-KDE-ParentApp=kcontrol\\nX-KDE-RootOnly=true\\nX-KDE-SubstituteUID=true\\nKeywords=init.d;service;boot;daemon;demon\\n"
diff --git a/package/mandrake/guidance-kcmuserconfig b/package/mandrake/guidance-kcmuserconfig
new file mode 100644
index 0000000..ee045e9
--- /dev/null
+++ b/package/mandrake/guidance-kcmuserconfig
@@ -0,0 +1 @@
+?package(guidance): needs="kde" kde_filename="userconfig" section="System/Configuration/KDE/System" title="Users and Groups" icon="userconfig.png" command="/usr/bin/userconfig" kde_command="kcmshell userconfig" longtitle="Manage user accounts and groups" kde_opt="\\nEncoding=UTF-8\\nX-KDE-ModuleType=Library\\nX-KDE-Library=userconfig\\nX-KDE-FactoryName=userconfig\\nX-KDE-ParentApp=kcontrol\\nX-KDE-RootOnly=true\\nX-KDE-SubstituteUID=true\\nKeywords=user;account;group;password\\n"
diff --git a/package/mandrake/guidance.spec b/package/mandrake/guidance.spec
new file mode 100644
index 0000000..96ca9c7
--- /dev/null
+++ b/package/mandrake/guidance.spec
@@ -0,0 +1,79 @@
+%define name guidance
+%define version 0.3.0
+%define release 1mdk
+
+Summary: Configuration Utilities
+Name: %{name}
+Version: %{version}
+Release: %{release}
+Packager: Simon Edwards <simon@simonzone.com>
+Source: %{name}-%{version}.tar.bz2
+License: GPL
+Group: System/Configuration
+URL: http://www.simonzone.com/software/guidance/
+Requires: python
+Requires: libpythonize0
+BuildRequires: python-devel
+BuildRequires: libpythonize0-devel
+Requires: PyKDE
+Buildroot: %_tmppath/%name-buildroot
+
+%description
+Guidance.
+
+Development version.
+
+%prep
+rm -rf $RPM_BUILD_ROOT
+
+%setup -q
+
+%build
+%install
+./setup.py install --root=$RPM_BUILD_ROOT build_kcm
+install -D --mode=a=r,u+w package/mandrake/guidance-kcmuserconfig $RPM_BUILD_ROOT/%{_menudir}/guidance-kcmuserconfig
+install -D --mode=a=r,u+w package/mandrake/guidance-kcmmountconfig $RPM_BUILD_ROOT/%{_menudir}/guidance-kcmmountconfig
+install -D --mode=a=r,u+w package/mandrake/guidance-kcmserviceconfig $RPM_BUILD_ROOT/%{_menudir}/guidance-kcmserviceconfig
+install -D --mode=a=r,u+w package/mandrake/guidance-kcmdisplayconfig $RPM_BUILD_ROOT/%{_menudir}/guidance-kcmdisplayconfig
+
+install -D kde/serviceconfig/pics/16x16/daemons.png $RPM_BUILD_ROOT/%{_iconsdir}/daemons.png
+install -D kde/mountconfig/pics/16x16/disksfilesystems.png $RPM_BUILD_ROOT/%{_iconsdir}/disksfilesystems.png
+install -D kde/userconfig/pics/16x16/userconfig.png $RPM_BUILD_ROOT/%{_iconsdir}/userconfig.png
+install -D kde/displayconfig/pics/16x16/displayconfig.png $RPM_BUILD_ROOT/%{_iconsdir}/displayconfig.png
+
+rm $RPM_BUILD_ROOT/usr/share/applnk/Settings/Peripherals/displayconfig.desktop
+rm $RPM_BUILD_ROOT/usr/share/applnk/Settings/System/mountconfig.desktop
+rm $RPM_BUILD_ROOT/usr/share/applnk/Settings/System/serviceconfig.desktop
+rm $RPM_BUILD_ROOT/usr/share/applnk/Settings/System/userconfig.desktop
+rm $RPM_BUILD_ROOT/usr/share/icons/crystalsvg/16x16/apps/daemons.png
+rm $RPM_BUILD_ROOT/usr/share/icons/crystalsvg/16x16/apps/disksfilesystems.png
+rm $RPM_BUILD_ROOT/usr/share/icons/crystalsvg/16x16/apps/displayconfig.png
+rm $RPM_BUILD_ROOT/usr/share/icons/crystalsvg/16x16/apps/userconfig.png
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+%doc README TODO COPYING ChangeLog
+%_bindir/*
+%_datadir/apps/guidance/*
+%_libdir/kde3/*
+%_libdir/python2.3/*
+%{_menudir}/*
+%{_iconsdir}/daemons.png
+%{_iconsdir}/disksfilesystems.png
+%{_iconsdir}/userconfig.png
+%{_iconsdir}/displayconfig.png
+
+%post
+%{update_menus}
+%postun
+%{clean_menus}
+
+%changelog
+* Sun Mar 20 2005 Simon Edwards <simon@simonzone.com> 0.3.0-1mdk
+- 0.3.0.
+
+* Thu Dec 9 2004 Simon Edwards <simon@simonzone.com> 0.2.0-1mdk
+- Initial rpm.
diff --git a/powermanager/TODO b/powermanager/TODO
new file mode 100644
index 0000000..bf6d671
--- /dev/null
+++ b/powermanager/TODO
@@ -0,0 +1,49 @@
+guidance-power-manager TODO:
+------------------------------
+- [brightness preview], see below
+- make power-manager non-blocking
+- Wait with hibernate / suspending if the plug has just been pulled
+ Some batteries only report remaining_time correctly after 30 or so
+ seconds
+
+
+DUNNO's:
+---------
+- How to detect how long the machine is idle?
+- How to perform actions that need root privileges (and are not available via HAL)?
+- Should we notify when battery is fully charged?
+
+FIXED:
+-------
+- What is "blank"? "Screen Saver", "Blank Screen" or "Monitor off"?
+- Handle CPU hotplugging gracefully (try switching off one CPU when g-p-m is running...)
+- Make use of kstandardirs
+- Add icons to contextmenu
+- Remove brightness controls when not hasBrighness
+- Remove battery-specifif items from tooltip when there's no battery
+- Make settings dialogue not apply instantly (Save config only on OK and Apply)
+- Add cpu frequency to tooltip
+- Add icons to tooltip
+- Make tooltip size properly
+- battery hotplugging
+- Implement switchToBattery(), collecting all stuff for onBattery
+ - notify
+ - blankscreensaveronly
+ - lowerbrightness
+
+- Implement switchToAC(), collecting stuff to run when plugged in:
+ - notify
+ - undo blankscreensaveronly
+ - up brightness
+- Clicking onto the slider should move the handle to the closest tick, but how?
+- support for second battery
+
+[brightness preview]
+Currently there is only a brightness preview for the currently active scheme (_either_ mains or battery powered).
+That means if you want to set the battery brightness when you are currently mains powered, you'll probably
+move the battery slider, realise that there is no preview, go to the mains slider, move it till you found a nice
+brightness level, then go back to the battery slider and set it there. Would be nicer to have a preview for both sliders:
+Whenever you move to a new location, the brightness is adjusted. Has to be tested if it should be set back to
+previous value after 5 seconds, or if it should remain till you either move the other slider or click save (assuming
+explicit apply).
+
diff --git a/powermanager/g-p-m-restart b/powermanager/g-p-m-restart
new file mode 100755
index 0000000..d957de1
--- /dev/null
+++ b/powermanager/g-p-m-restart
@@ -0,0 +1,6 @@
+#!/bin/bash
+echo "stopping guidance-power-manager ..."
+dcop `dcopfind -a "power-manager*"` MainApplication-Interface quit
+
+echo "starting guidance-power-manager ..."
+guidance-power-manager.py &
diff --git a/powermanager/gpmhelper.py b/powermanager/gpmhelper.py
new file mode 100644
index 0000000..65094f7
--- /dev/null
+++ b/powermanager/gpmhelper.py
@@ -0,0 +1,147 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+"""
+Copyright 2008 Sebastian Kügler, Canonical Ltd, Luka Renko
+
+Authors:
+ Andreas Wenning <awen@awen.dk>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+"""
+
+"""
+A frontend to HAL's power features for KDE - Helper application
+This application listens for HAL signals and issues dcop-calls to the
+kde-power-manager that originally started it. To avoid the need for
+kde-power-manager to shut it's helper down, this application
+will automatically shut down if it's kde-power-manager isn't running.
+"""
+
+import dbus, sys, time
+from dbus.mainloop.glib import DBusGMainLoop
+import gobject
+from dcopext import DCOPClient, DCOPObj, DCOPApp
+
+class GPMHelper():
+ def mother_alive(self):
+ """Check that our mother is still alive"""
+ found = False
+ for name in self.dcop.registeredApplications():
+ name = str(name)
+ if name == self.motherName:
+ found = True
+ if not found:
+ """No mother; commit suicide"""
+ print "guidance-power-manager not alive; exiting"
+ loop.quit()
+
+ """Called when signal is received"""
+ def signal_recv(self, *args):
+ if args[0] == "ButtonPressed":
+ if args[1] == "brightness-up":
+ if time.time()-0.02 <= self.last_brightness_up <= time.time():
+ """Most likely an extra brightness-up call, discarding"""
+ print "Extra brightness-up call discarded"
+ return
+ try:
+ ok, foo = self.mother.brightnessUp()
+ if not ok:
+ print "brightnessUp-call failed"
+ return self.mother_alive()
+ self.last_brightness_up = time.time()
+ except:
+ print "brightnessUp-call failed"
+ return self.mother_alive()
+ elif args[1] == "brightness-down":
+ if time.time()-0.02 <= self.last_brightness_down <= time.time():
+ """Most likely an extra brightness-down call, discarding"""
+ print "Extra brightness-down call discarded"
+ return
+ try:
+ ok, foo = self.mother.brightnessDown()
+ if not ok:
+ print "brightnessDown-call failed"
+ return self.mother_alive()
+ self.last_brightness_down = time.time()
+ except:
+ print "brightnessDown-call failed"
+ return self.mother_alive()
+ elif args[1] == "sleep":
+ if time.time()-1 <= self.last_sleep <= time.time():
+ """Most likely an extra sleep-call, discarding"""
+ print "Extra sleep-call discarded"
+ return
+ try:
+ ok, foo = self.mother.suspend()
+ if not ok:
+ print "suspend-call failed"
+ return self.mother_alive()
+ self.last_sleep = time.time()
+ except:
+ print "suspend-call failed"
+ return self.mother_alive()
+ elif args[1] == "hibernate":
+ if time.time()-1 <= self.last_hibernate <= time.time():
+ """Most likely an extra hibernate-call, discarding"""
+ print "Extra hibernate-call discarded"
+ return
+ try:
+ ok, foo = self.mother.hibernate()
+ if not ok:
+ print "hibernate-call failed"
+ return self.mother_alive()
+ self.last_hibernate = time.time()
+ except:
+ print "hibernate failed"
+ return self.mother_alive()
+
+ def __init__(self):
+ """Connect to HAL"""
+ self.dbus_loop = DBusGMainLoop(set_as_default=True)
+ self.bus = dbus.SystemBus(mainloop=self.dbus_loop)
+ hal_manager_obj = self.bus.get_object("org.freedesktop.Hal",u'/org/freedesktop/Hal/Manager')
+ self.hal_manager = dbus.Interface(hal_manager_obj, "org.freedesktop.Hal.Manager")
+
+ """Find button-devices and to connect to"""
+ button_devices = self.hal_manager.FindDeviceByCapability("button")
+ for device in button_devices:
+ self.bus.add_signal_receiver(self.signal_recv,
+ "Condition",
+ "org.freedesktop.Hal.Device",
+ "org.freedesktop.Hal",
+ device)
+ """Let's find our mother"""
+ self.dcop = DCOPClient()
+ self.dcop.attach()
+ found = False
+ for name in self.dcop.registeredApplications():
+ name = str(name)
+ if name.startswith('guidance-'):
+ self.motherName = name
+ try:
+ self.mother = DCOPObj(name, self.dcop, 'power-manager')
+ found = True
+ except:
+ """Do nothing, catched by found=False"""
+ break
+ if not found:
+ """No mother; commit suicide"""
+ print "No guidance-power-manager is running"
+ sys.exit()
+
+ """Some laptops issue double sleep/hibernate-calls, we need to discard one in that case"""
+ self.last_sleep = 0
+ self.last_hibernate = 0
+
+ """And multiple brightness calls is also possible"""
+ self.last_brightness_up = 0
+ self.last_brightness_down = 0
+
+if __name__ == "__main__":
+ gpmh = GPMHelper()
+ loop = gobject.MainLoop()
+ loop.run()
diff --git a/powermanager/guidance-power-manager.desktop b/powermanager/guidance-power-manager.desktop
new file mode 100644
index 0000000..2fdaad0
--- /dev/null
+++ b/powermanager/guidance-power-manager.desktop
@@ -0,0 +1,35 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Power Manager
+Name[el]=Διαχειριστής ενέργειας
+Name[es]=Administrador de energía
+Name[et]=Toitehaldur
+Name[it]=Gestore dell'energia
+Name[ja]=電源管理
+Name[nl]=Energiebeheer
+Name[pt]=Gestor de Energia
+Name[pt_BR]=Gerenciador de Energia
+Name[sr]=Управљач енергијом
+Name[sr@Latn]=Upravljač energijom
+Name[sv]=Energisparfunktion
+Name[xx]=xxPower Managerxx
+Comment=Power management applet
+Comment[el]=Μικροεφαρμογή διαχείρισης ενέργειας
+Comment[es]=Applet de administrador de potencia
+Comment[et]=Toitehalduse aplett
+Comment[it]=Applicazione per la gestione dell'energia
+Comment[ja]=電源管理アプレット
+Comment[nl]=Energiebeheer-applet
+Comment[pt]='Applet' de gestão de energia
+Comment[pt_BR]=Mini-aplicativo de gerenciamento de energia
+Comment[sr]=Аплет за управљање енергијом
+Comment[sr@Latn]=Aplet za upravljanje energijom
+Comment[sv]=Miniprogram för energisparfunktion
+Comment[xx]=xxPower management appletxx
+Icon=guidance-power-manager
+Exec=guidance-power-manager
+Terminal=false
+Type=Application
+Categories=Qt;KDE;
+OnlyShowIn=KDE;
+X-DCOP-ServiceType=Unique
diff --git a/powermanager/guidance-power-manager.py b/powermanager/guidance-power-manager.py
new file mode 100755
index 0000000..41df5e8
--- /dev/null
+++ b/powermanager/guidance-power-manager.py
@@ -0,0 +1,1134 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+"""
+Copyright 2006-2007 Sebastian Kügler, Canonical Ltd, Luka Renko
+
+Authors:
+ Sebastian Kügler <sebas@kde.org>
+ Jonathan Riddell <jriddell@ubuntu.com>
+ Luka Renko <lure@kubuntu.org>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+"""
+
+"""
+A frontend to HAL's power features for KDE.
+Supports screen brightness, battery level, plugged/unplugged notices, laptop lid closing actions
+Specification at https://wiki.kubuntu.org/KubuntuPowerManagement
+
+Issues:
+ - We have to keep polling HAL rather than listening for signals because the Python DBUS bindings
+ don't have Qt mainloop integration
+ - Written in Python so will be slow to load up, will probably port to C++ Qt 4.2 in future
+ - Should also handle UPS and bluetooth batteries
+ - systray applet should be hidden if no battery, but then how do you suspend if no battery?
+ (ksmserver integration please)
+ - Needs lots more testing
+ - Use KUniqueApplication again as soon as dcop problem is sorted outc
+ - dcop calls need patch to dcopexport.py, already submitted upstream
+"""
+
+import os
+import sys
+import subprocess
+import dbus
+
+from qt import *
+from kdecore import *
+from kdeui import *
+
+from dcopext import DCOPClient, DCOPApp # used to lock the screen
+from dcopexport import DCOPExObj
+
+from guidance_power_manager_ui import PowerManagerUI
+from notify import NotifyWidget
+from tooltip import ToolTip
+
+from powermanage import *
+
+POLL_INTERVAL = 5000 # in milliseconds
+
+class Notify(NotifyWidget):
+ """ Pop up a passive notication windows. """
+
+ def __init__(self,parent,msg,icon,caption=None):
+ NotifyWidget.__init__(self,parent,"notify")
+ self.setIcon(icon)
+ self.setText(msg)
+ if caption:
+ self.Caption(caption)
+
+ def setIcon(self,pixmap):
+ """ Set an icon to be displayed in the notification. """
+ if pixmap:
+ self.Icon.setPixmap(pixmap)
+
+ def setCaption(self,caption):
+ """ Text to show in bold letters. """
+ self.Caption.setText(QString("<b>")+caption+QString("</b>"))
+
+ def setText(self,msg):
+ """" Set actual notification message. """
+ self.Text.setText(msg)
+
+
+class PowerManager(PowerManagerUI):
+ """ Our configuration dialog. """
+
+ def __init__ (self, parent, name):
+ PowerManagerUI.__init__(self, parent, name)
+ KGlobal.iconLoader().addAppDir("guidance")
+
+ # The systray icon should show and hide the KDialogBase, not only this widget,
+ # therefore, it gets our parent as parent.
+ self.systray = KSystemTray(parent)
+ self.icon = "battery-charging-100"
+ self.systray.setPixmap(QPixmap(UserIcon(self.icon)))
+ self.connect(self.systray, SIGNAL("quitSelected()"), self.quit)
+
+ # Configuration filename
+ self.config = KConfig("power-managerrc")
+
+ self.powermanager = PowerManage()
+
+ def prepare(self):
+ """ Prepare UI. """
+ self._initBrightness()
+ self._initLid()
+ self._initBattery()
+ self.lastidlesec = 0
+
+ self._initConfigKeywords()
+
+ self._initUI(self.parent())
+
+ self.configToUi()
+
+ # Polling: evil. can't receive signals in python-dbus unless we have a glib mainloop,
+ # so we need to poll
+ self.pollTimer = QTimer(self)
+ self.connect(self.pollTimer, SIGNAL("timeout()"), self.poll)
+ self.pollTimer.start(POLL_INTERVAL) # 5 second poll, maybe make this configurable
+ self.poll(False)
+
+ # check CPU freq policy and notify if it was changed
+ msg = self.checkCpuFreq()
+ if msg != "":
+ self.notify(msg)
+
+ self.systray.show()
+
+ def _initBrightness(self):
+ """ Check for brightness support and disable widgets if it's not there. """
+ if not self.powermanager.hasBrightness:
+ self.PoweredBrightnessLabel.hide()
+ self.PoweredBrightnessSlider.hide()
+ self.BatteryBrightnessLabel.hide()
+ self.BatteryBrightnessSlider.hide()
+
+ def _initLid(self):
+ """ Check for lid support and disable widgets if it's not there. """
+ if not self.powermanager.hasLid:
+ self.LaptopLidRadios.setEnabled(False)
+
+ def _initCB(self, combo, options, values):
+ """ Initialize QComboBox with proper values from provided options. """
+ combo.clear()
+ for option in options:
+ combo.insertItem(values[option])
+
+ def _getCB(self, combo, options):
+ """ Get current item from QComboBox from config file (string) value. """
+ try:
+ return options[combo.currentItem()]
+ except IndexError:
+ return ""
+
+ def _setCB(self, combo, options, default, value):
+ """ Set current item in QComboBox from string value. """
+ try:
+ num = options.index(value)
+ except ValueError:
+ num = default
+ pass
+ combo.setCurrentItem(num)
+
+ def _getRB(self, radios, options):
+ """ Get current item from QRadioButton from config file (string) value. """
+ try:
+ return options[radios.selectedId()]
+ except IndexError:
+ return ""
+
+ def _setRB(self, radios, options, default, value):
+ """ Set current item in QRadioButton from string value. """
+ try:
+ num = options.index(value)
+ except ValueError:
+ num = default
+ pass
+ radios.setButton(num)
+
+ def _checkOldConfig(self, value, blank):
+ """ Convert old numerical values to keywords. """
+ try:
+ num_val = int(value)
+ except ValueError:
+ return value
+ if blank:
+ if num_val == 0: return 'nothing'
+ if num_val == 1: return 'blank'
+ if num_val == 2: return 'suspend'
+ if num_val == 3: return 'hibernate'
+ if num_val == 4: return 'shutdown'
+ else:
+ if num_val == 0: return 'nothing'
+ if num_val == 1: return 'suspend'
+ if num_val == 2: return 'hibernate'
+ if num_val == 3: return 'shutdown'
+ return value
+
+
+ def _initConfigKeywords(self):
+ """ Define helper maps used with config file keywords. """
+ # map action keyword to displayed name (l10n)
+ self.act_name = {}
+ self.act_name['nothing'] = i18n("Do nothing")
+ self.act_name['blank'] = i18n("Blank screen")
+ self.act_name['suspend'] = i18n("Suspend")
+ self.act_name['hibernate'] = i18n("Hibernate")
+ self.act_name['shutdown'] = i18n("Shutdown")
+
+ # map action keyword to action methods
+ self.act_call = {}
+ self.act_call['nothing'] = None
+ self.act_call['blank'] = self.blankScreen
+ self.act_call['suspend'] = self.suspend
+ self.act_call['hibernate'] = self.hibernate
+ self.act_call['shutdown'] = self.shutdown
+
+ # map action keyword to notification description (l10n)
+ self.act_notify = {}
+ self.act_notify['nothing'] = i18n("doing nothing")
+ self.act_notify['blank'] = i18n("blanking screen")
+ self.act_notify['suspend'] = i18n("suspending")
+ self.act_notify['hibernate'] = i18n("hibernating")
+ self.act_notify['shutdown'] = i18n("shutting down")
+
+ # map action keyword to action icon used in notification window
+ self.act_icon = {}
+ self.act_icon['nothing'] = None
+ self.act_icon['blank'] = None
+ self.act_icon['suspend'] = SmallIcon("suspend")
+ self.act_icon['hibernate'] = SmallIcon("hibernate")
+ self.act_icon['shutdown'] = SmallIcon("exit")
+
+ # map policy keyword to displayed name (l10n)
+ self.freq_name = {}
+ self.freq_name['dynamic'] = i18n("Dynamic")
+ self.freq_name['powersave'] = i18n("Powersave")
+ self.freq_name['performance'] = i18n("Performance")
+
+ # map policy keyword to policy change methods
+ self.freq_call = {}
+ self.freq_call['dynamic'] = self.setCpuPolicyDynamic
+ self.freq_call['powersave'] = self.setCpuPolicyPowersave
+ self.freq_call['performance'] = self.setCpuPolicyPerformance
+
+
+ def _initUI(self, parent):
+ """ Build dynamic parts of the UI: context menu and tooltip. """
+ self.canSuspend = self.powermanager.canSuspend and not self.config.readBoolEntry("disableSuspend", False)
+ self.canHibernate = self.powermanager.canHibernate and not self.config.readBoolEntry("disableHibernate", False)
+
+ # Connect some signals. Updates in the dialogue apply instantly
+ self.connect(self.PoweredBrightnessSlider, SIGNAL("valueChanged(int)"), self.changePoweredBrightness)
+ self.connect(self.BatteryBrightnessSlider, SIGNAL("valueChanged(int)"), self.changeBatteryBrightness)
+
+ #Add a blank tooltip, the tooltipgroup signals are then used for our KPassivePopup
+ toolTipGroup = QToolTipGroup(self.systray)
+ QToolTip.add(self.systray, "", toolTipGroup, "blah")
+ self.connect(toolTipGroup, SIGNAL("showTip(const QString&)"), self.showTip)
+ self.connect(toolTipGroup, SIGNAL("removeTip()"), self.hideTip)
+
+ # Popup tooltip showing battery level
+ self.popup = KPassivePopup(self.systray)
+
+ self.tooltip = ToolTip(self.popup)
+
+ self._addBatteryWidgets()
+
+ self._addCpuWidgets()
+ self.popup.setView(self.tooltip)
+
+ # fill actions for LID
+ self.lid_act = ['nothing', 'blank', 'suspend', 'hibernate', 'shutdown']
+ self.lid_act_def = 0
+ # hide LID close actions that are not supported
+ if not self.canSuspend:
+ self.laptopClosedSuspend.hide()
+ if not self.canHibernate:
+ self.laptopClosedHibernate.hide()
+
+ # fill in only CPU policies that are supported by HW
+ self.cb_freq = [] # list of supported cpu freq policies
+ self.cb_freq_def = 0 # always use first policy as default
+ if self.powermanager.hasCpuFreqGovernors:
+ self.cb_freq = self.powermanager.getSupportedCpuPolicies()
+ if len(self.cb_freq) > 0:
+ self._initCB(self.PoweredFreqCombo, self.cb_freq, self.freq_name)
+ self._initCB(self.BatteryFreqCombo, self.cb_freq, self.freq_name)
+ else:
+ self.PoweredFreqLabel.hide()
+ self.PoweredFreqCombo.hide()
+ self.BatteryFreqLabel.hide()
+ self.BatteryFreqCombo.hide()
+
+ # fill actions in Idle/Critical battery combo boxes
+ self.cb_act = ['nothing'] # list of supported actions (keywords)
+ self.cb_act_def_critical = 0 # default action when critical battery
+ if self.canSuspend:
+ self.cb_act.append('suspend')
+ if self.canHibernate:
+ self.cb_act.append('hibernate')
+ self.cb_act_def_critical = len(self.cb_act) - 1 # hibernate
+ self.cb_act.append('shutdown')
+ if self.cb_act_def_critical == 0:
+ self.cb_act_def_critical = len(self.cb_act) - 1 # shutdown
+ self._initCB(self.PoweredIdleCombo, self.cb_act, self.act_name)
+ self._initCB(self.BatteryIdleCombo, self.cb_act, self.act_name)
+ self._initCB(self.BatteryCriticalCombo, self.cb_act, self.act_name)
+
+ self.connect(self.PoweredIdleCombo,SIGNAL("activated(int)"),self.slotPoweredIdleActivated)
+ self.connect(self.BatteryIdleCombo,SIGNAL("activated(int)"),self.slotBatteryIdleActivated)
+ self.connect(self.BatteryCriticalCombo,SIGNAL("activated(int)"),self.slotBatteryCriticalActivated)
+
+ # add suspend/hibernate to tray's context menu
+ menu = self.systray.contextMenu()
+ if self.canSuspend:
+ action = KAction( i18n("Suspend"), KShortcut(), self.suspend,
+ self.systray.actionCollection(), "suspend")
+ action.setIcon("suspend")
+ action.plug(menu)
+ if self.canHibernate:
+ action = KAction( i18n("Hibernate"), KShortcut(), self.hibernate,
+ self.systray.actionCollection(), "hibernate")
+ action.setIcon("hibernate")
+ action.plug(menu)
+
+ # add list of governators
+ if self.powermanager.hasCpuFreqGovernors and len(self.cb_freq) > 0:
+ submenu = KPopupMenu(menu)
+ for policy in self.cb_freq:
+ action = KRadioAction(self.freq_name[policy], KShortcut(),
+ self.freq_call[policy],
+ self.systray.actionCollection(), policy)
+ action.setExclusiveGroup("freqs")
+ action.plug(submenu)
+
+ policy = self.powermanager.getCpuPolicy()
+ if policy in self.cb_freq:
+ self.systray.actionCollection().action(policy).setChecked(True);
+ menu.insertItem(i18n("CPU policy"), submenu)
+
+
+ # KGlobalAccel crashes the application in pykde
+ # see http://mats.gmd.de/pipermail/pykde/2006-May/013224.html
+ #self.globalActions = KGlobalAccel(self)
+ #self.suspendShortcut = KShortcut("XF86Sleep")
+ #self.hibernateShortcut = KShortcut("XF86Standby")
+ #self.hshutdownShortcut = KShortcut("XF86PowerOff")
+ #self.globalActions.insert("suspend", i18n("Suspend"), i18n("what's this?"), self.suspendShortcut, #self.suspendShortcut, self.suspend)
+ #self.globalActions.updateConnections()
+
+ def _initBattery(self):
+ """ Remove non-battery-related widgets if there's no battery bay. """
+ if not self.powermanager.hasBattery:
+ # Disable the Batterybox in the config dialogue,
+ self.BatteryBox.setEnabled(False)
+ # And change the icon in the systray, remove the restore option
+ # This way, we're basically becoming a systray applet, you can
+ # hibernate and suspend from
+ self.systray.setPixmap(QPixmap(UserIcon(self.icon)))
+ if self.powermanager.hasAC:
+ self.wasOnBattery = self.powermanager.onBattery()
+
+ def configToUi(self):
+ """ Setup the the values from the config file in the UI."""
+ # brightness.
+ if self.powermanager.hasBrightness:
+ brightness_high = self.powermanager.brightness_levels
+ self.BatteryBrightnessSlider.setMaxValue(self.powermanager.brightness_levels-1)
+ self.PoweredBrightnessSlider.setMaxValue(self.powermanager.brightness_levels-1)
+ self.BatteryBrightnessSlider.setValue(self.config.readNumEntry("batteryBrightness", int(brightness_high/2))) #default middle
+ self.PoweredBrightnessSlider.setValue(self.config.readNumEntry("poweredBrightness", brightness_high)) #default highest
+
+ tt_text = "Every step increases or decreases the brightness by %i%%" % int(100/brightness_high)
+ QToolTip.add(self.BatteryBrightnessSlider, tt_text)
+ QToolTip.add(self.PoweredBrightnessSlider, tt_text)
+
+ self.lockScreenOnResume.setChecked(self.config.readBoolEntry("lockOnResume", True))
+
+ # Idletime-related configuration
+ self._setCB(self.PoweredIdleCombo, self.cb_act, 0, str(self.config.readEntry("poweredIdleAction")))
+ self.PoweredIdleTime.setValue(self.config.readNumEntry("poweredIdleTime", 60))
+ self._setCB(self.BatteryIdleCombo, self.cb_act, 0, str(self.config.readEntry("batteryIdleAction")))
+ self.BatteryIdleTime.setValue(self.config.readNumEntry("batteryIdleTime", 10))
+
+ self._setCB(self.PoweredFreqCombo, self.cb_freq, self.cb_freq_def, str(self.config.readEntry("poweredFreqPolicy")))
+ self._setCB(self.BatteryFreqCombo, self.cb_freq, self.cb_freq_def, str(self.config.readEntry("batteryFreqPolicy")))
+
+ self.BatteryIdleTime.setValue(self.config.readNumEntry("batteryIdleTime", 10)) # default Do nothing
+ # battery critical and lid actions.
+ self._setCB(self.BatteryCriticalCombo, self.cb_act, self.cb_act_def_critical, self._checkOldConfig(self.config.readEntry("batteryCriticalAction", ""), False))
+ self._setRB(self.LaptopLidRadios, self.lid_act, self.lid_act_def, self._checkOldConfig(self.config.readEntry("laptopLidAction", ""), True))
+ self.CriticalRemainTime.setValue(self.config.readNumEntry("criticalRemainTime", BATTERY_CRITICAL_MINUTES))
+ self.criticalLevel = self.CriticalRemainTime.value()
+
+ # Call some slots to disable various spinboxes if necessary
+ self.slotBatteryCriticalActivated()
+ self.slotPoweredIdleActivated()
+ self.slotBatteryIdleActivated()
+
+
+ def uiToConfig(self):
+ """ Read all values from the UI and write them to the config file. """
+ self.config.writeEntry("poweredBrightness", self.PoweredBrightnessSlider.value())
+ self.config.writeEntry("batteryBrightness", self.BatteryBrightnessSlider.value())
+
+ self.config.writeEntry("poweredIdleTime", self.PoweredIdleTime.value())
+ self.config.writeEntry("poweredIdleAction", self._getCB(self.PoweredIdleCombo, self.cb_act))
+ self.config.writeEntry("batteryIdleTime", self.BatteryIdleTime.value())
+ self.config.writeEntry("batteryIdleAction", self._getCB(self.BatteryIdleCombo, self.cb_act))
+ self.config.writeEntry("poweredFreqPolicy", self._getCB(self.PoweredFreqCombo, self.cb_freq))
+ self.config.writeEntry("batteryFreqPolicy", self._getCB(self.BatteryFreqCombo, self.cb_freq))
+
+ self.config.writeEntry("batteryCriticalAction", self._getCB(self.BatteryCriticalCombo, self.cb_act))
+ self.config.writeEntry("criticalRemainTime", self.CriticalRemainTime.value())
+
+ self.config.writeEntry("laptopLidAction", self._getRB(self.LaptopLidRadios, self.lid_act))
+ self.config.writeEntry("lockOnResume", self.lockScreenOnResume.isChecked())
+
+ self.criticalLevel = self.CriticalRemainTime.value()
+
+ self.config.sync()
+
+ def quit(self):
+ """ Quit application. """
+ kapp.quit()
+
+ def showTip(self, text=""):
+ """ Pop up the tooltip showing battery data and CPU frequencies. """
+ self.popup.show()
+
+
+ def showBrightnessPopup(self):
+ if self.powermanager.onBattery():
+ value=self.BatteryBrightnessSlider.value()*100/self.BatteryBrightnessSlider.maxValue()
+ else:
+ value=self.PoweredBrightnessSlider.value()*100/self.PoweredBrightnessSlider.maxValue()
+ self.brightnessPopup = KPassivePopup.message('<b>Brightness:</b> '+str(value)+'%', self.systray)
+ """pop.setTimeout(3000)"""
+ self.brightnessPopup.show()
+
+ def setBrightnessUp(self):
+ """Increments slider value by 10%"""
+ if self.powermanager.onBattery():
+ self.BatteryBrightnessSlider.setValue(float(self.BatteryBrightnessSlider.value())+max(float(self.BatteryBrightnessSlider.maxValue())/float(10),1))
+ else:
+ self.PoweredBrightnessSlider.setValue(float(self.PoweredBrightnessSlider.value())+max(float(self.PoweredBrightnessSlider.maxValue())/float(10),1))
+ self.showBrightnessPopup()
+
+ def setBrightnessDown(self):
+ """Decrements slider value by 10%"""
+ if self.powermanager.onBattery():
+ self.BatteryBrightnessSlider.setValue(float(self.BatteryBrightnessSlider.value())-max(float(self.BatteryBrightnessSlider.maxValue())/float(10),1))
+ else:
+ self.PoweredBrightnessSlider.setValue(float(self.PoweredBrightnessSlider.value())-max(float(self.PoweredBrightnessSlider.maxValue())/float(10),1))
+ self.showBrightnessPopup()
+
+ def getBrightness(self):
+ """Work with percentages - it's a bit nicer"""
+ if self.powermanager.onBattery():
+ value=self.BatteryBrightnessSlider.value()*100/self.BatteryBrightnessSlider.maxValue()
+ else:
+ value=self.PoweredBrightnessSlider.value()*100/self.PoweredBrightnessSlider.maxValue()
+ return QString(str(value))
+
+ def hideTip(self):
+ """ Hide the tooltip."""
+ self.popup.hide()
+
+ def lockScreen(self):
+ """ locks the screen using kdesktop """
+ # create a new DCOP-Client:
+ client = DCOPClient()
+ # connect the client to the local DCOP-server:
+ client.attach()
+ # create a DCOP-Application-Object to talk to kdesktop:
+ kdesktop = DCOPApp('kdesktop', client)
+ # call a DCOP-function:
+ try:
+ ok, foo = kdesktop.KScreensaverIface.lock()
+ except:
+ print "Unable to lock the screen. The KDE Screensaver does not seem to be running."
+ def suspend(self):
+ """ Lock the screen and initiate a suspend to RAM (S3). """
+ if self.config.readBoolEntry("lockOnResume", True):
+ self.lockScreen()
+ try:
+ self.warningPopup.hide()
+ except AttributeError:
+ pass # No warningpopup, that's OK.
+ self.powermanager.suspend()
+ self.powermanager.resetIdleSeconds()
+
+ def hibernate(self):
+ """ Lock the screen and initiate a suspend to disk (S4). """
+ if self.config.readBoolEntry("lockOnResume", True):
+ self.lockScreen()
+ try:
+ self.warningPopup.hide()
+ except AttributeError:
+ pass # No warningpopup, that's OK.
+ self.powermanager.hibernate()
+ self.powermanager.resetIdleSeconds()
+
+ def shutdown(self):
+ """ Perform system shutdown. """
+ self.powermanager.shutdown()
+
+ def setCpuPolicyDynamic(self):
+ """Change frequ for all cpu"""
+ self.powermanager.setCpuPolicy('dynamic')
+ self.notify(i18n("CPU frequency policy changed to %1.").arg(self.freq_name['dynamic']))
+
+ def setCpuPolicyPerformance(self):
+ """Change frequ for all cpu"""
+ self.powermanager.setCpuPolicy('performance')
+ self.notify(i18n("CPU frequency policy changed to %1.").arg(self.freq_name['performance']))
+
+ def setCpuPolicyPowersave(self):
+ """Change frequ for all cpu"""
+ self.powermanager.setCpuPolicy('powersave')
+ self.notify(i18n("CPU frequency policy changed to %1.").arg(self.freq_name['powersave']))
+
+ def trySuspend(self):
+ """ If supported, lock the screen and initiate a suspend to RAM (S3). """
+ if self.canSuspend:
+ self.suspend()
+ else:
+ print "Warning: DCOP suspend() called, but not supported."
+
+ def tryHibernate(self):
+ """ If supported, lock the screen and initiate a suspend to disk (S4). """
+ if self.canHibernate:
+ self.hibernate()
+ else:
+ print "Warning: DCOP hibernate() called, but not supported."
+
+ def blankScreen(self):
+ """ Lock and blank screen. """
+ if self.config.readBoolEntry("lockOnResume", True):
+ self.lockScreen()
+ self.powermanager.blankScreen()
+
+ def _getIcon(self):
+ """ Set systray icon depending on battery status/level. """
+ if self.powermanager.hasBattery:
+ if self.batt_state == "not present":
+ self.icon = "ac-adapter"
+ if self.batt_state == "charged":
+ self.icon = "battery-charging-100"
+ elif self.batt_state == "discharging":
+ if self.batt_level >= 95:
+ self.icon = "battery-discharging-100"
+ elif self.batt_level < 95 and self.batt_level >= 85:
+ self.icon = "battery-discharging-090"
+ elif self.batt_level < 85 and self.batt_level >= 75:
+ self.icon = "battery-discharging-070"
+ elif self.batt_level < 75 and self.batt_level >= 60:
+ self.icon = "battery-discharging-060"
+ elif self.batt_level < 65 and self.batt_level >= 45:
+ self.icon = "battery-discharging-050"
+ elif self.batt_level < 45 and self.batt_level >= 30:
+ self.icon = "battery-discharging-040"
+ elif self.batt_level < 30 and self.batt_level >= 20:
+ self.icon = "battery-discharging-030"
+ elif self.batt_level < 20 and self.batt_level >= 10:
+ self.icon = "battery-discharging-020"
+ elif self.batt_level < 10 and self.batt_level >= 5:
+ self.icon = "battery-discharging-010"
+ else:
+ self.icon = "battery-discharging-000"
+ elif self.batt_state == "charging":
+ if self.batt_level >= 95:
+ self.icon = "battery-charging-100"
+ elif self.batt_level < 95 and self.batt_level >= 85:
+ self.icon = "battery-charging-090"
+ elif self.batt_level < 85 and self.batt_level >= 75:
+ self.icon = "battery-charging-070"
+ elif self.batt_level < 75 and self.batt_level >= 60:
+ self.icon = "battery-charging-060"
+ elif self.batt_level < 65 and self.batt_level >= 45:
+ self.icon = "battery-charging-050"
+ elif self.batt_level < 45 and self.batt_level >= 30:
+ self.icon = "battery-charging-040"
+ elif self.batt_level < 30 and self.batt_level >= 20:
+ self.icon = "battery-charging-030"
+ elif self.batt_level < 20 and self.batt_level >= 10:
+ self.icon = "battery-charging-020"
+ elif self.batt_level < 10 and self.batt_level >= 5:
+ self.icon = "battery-charging-010"
+ else:
+ self.icon = "battery-charging-000"
+ else:
+ self.icon = "ac-adapter"
+ return self.icon
+
+ def getIcon(self):
+ """ Return current icon."""
+ return UserIcon(self.icon)
+
+ def setIcon(self):
+ """ Change the systray/tooltip icon."""
+ oldIcon = self.icon
+ self.icon = self._getIcon()
+ if self.icon != oldIcon:
+ self.systray.setPixmap(QPixmap(UserIcon(self.icon)))
+ self.BattPixmap.setPixmap(QPixmap(UserIcon(self.icon)))
+
+ def notify(self, msg, icon=None):
+ """ Send a notification popup. """
+ if icon:
+ icon = QPixmap(icon)
+ else:
+ icon = QPixmap(SmallIcon("messagebox_info"))
+ try:
+ del self.warningPopup
+ except:
+ pass
+ self.warningPopup = KPassivePopup(self.systray)
+ label = Notify(self.warningPopup, msg, icon)
+ self.warningPopup.setView(label)
+ position = QPoint(5,5)
+ self.warningPopup.show(position)
+
+ def poll(self,notify=True):
+ """ Check for changes in plugged in status, battery status and laptop lid closed status. """
+ debug( "------------ POLL ---------------")
+
+ self.powermanager.checkHAL()
+ # Battery stuff:
+ # check for last state, and run plugged / unplugged message if the state changed.
+ if self.powermanager.hasBattery:
+ plugged_num = 0
+ self.batt_state = "not present" # unknown yet
+ self.batt_level = self.batt_remain = 0
+ self.batt_rate = self.batt_charge = self.batt_full = 0
+ for batt in self.powermanager.batteries:
+ state, level, remain, rate, current, full = self.powermanager.getBatteryState(batt)
+ self._updateBatteryWidget(batt, state, level, remain, rate)
+
+ ## notify plugged/unplugged batteries
+ if state == "not present":
+ if self.powermanager.batteryIsPresent[batt]:
+ self.notify(i18n("The battery has been removed."))
+ self.powermanager.batteryIsPresent[batt] = False
+ else: # battery present
+ if not self.powermanager.batteryIsPresent[batt]:
+ self.notify(i18n("The battery has been inserted."))
+ self.powermanager.batteryIsPresent[batt] = True
+
+ ## get cumulative charge levels/rate
+ self.batt_rate += rate
+ self.batt_charge += current
+ self.batt_full += full
+
+ ## calculate overall level (average of present batteries)
+ self.batt_remain += remain
+ self.batt_level += level
+ plugged_num += 1
+
+ ## calculate overall state (charging/discharging/charged)
+ if state in ("charging","discharging"):
+ self.batt_state = state
+ elif not self.batt_state in ("charging, discharging"):
+ self.batt_state = state
+
+ # if we know charge and full -> recalculate overall level
+ if self.batt_full > 0 and self.batt_charge > 0:
+ self.batt_level = 100 * self.batt_charge / self.batt_full
+ else:
+ # if more than one battery present, we need to calculate average level
+ if plugged_num > 1:
+ self.batt_level /= plugged_num
+
+ # if rate is reported, calculate remaining time on our own
+ if self.batt_rate > 0:
+ if self.batt_state == "charging":
+ self.batt_remain = 3600 * (float(self.batt_full - self.batt_charge) / self.batt_rate)
+ if self.batt_state == "discharging":
+ self.batt_remain = 3600 * (float(self.batt_charge) / self.batt_rate)
+
+ remain_h = self.batt_remain/3600
+ remain_m = (self.batt_remain/60)%60
+
+ blabel = i18n("<b>Battery:</b>")
+ if self.batt_state == "charged":
+ blabel += i18n(" fully charged")
+ elif self.batt_state == "charging":
+ blabel += i18n(" %i:%02ih to charge" % (remain_h,remain_m))
+ elif self.batt_state == "discharging":
+ blabel += i18n(" %i:%02ih remaining" % (remain_h,remain_m))
+ self.BattMainLabel.setText(blabel)
+
+ # update tray icon if needed
+ self.setIcon()
+
+ # check battery state
+ self.checkBatteryCritical()
+
+ # check Idletime
+ self.checkIdletime()
+
+ # CPU stuff
+ self._updateCpuWidgets()
+
+ if self.powermanager.hasBattery:
+ on_battery = self.powermanager.onBattery()
+ if self.powermanager.wasOnBattery != on_battery:
+ self.powermanager.wasOnBattery = on_battery
+ debug("poll: states differ")
+ if not on_battery:
+ debug("poll: Now on AC")
+ if notify:
+ self.powerHasBeenPlugged()
+ else:
+ debug("poll: Now on battery")
+ if notify:
+ self.powerHasBeenUnplugged()
+ else:
+ debug("poll: state is the same")
+
+ # Lid stuff
+ if self.powermanager.hasLid:
+ if self.powermanager.getLidClosedState():
+ if not self.powermanager.lidClosedState:
+ self.powermanager.lidClosedState = True
+
+ action = self._getRB(self.LaptopLidRadios, self.lid_act)
+ if not self.act_name.has_key(action):
+ action = self.act_name[self.lid_act_def]
+
+ if self.act_call[action] != None:
+ note = i18n("Laptop lid is closed, %1 now.").arg(self.act_notify[action])
+ self.notify(note, self.act_icon[action])
+ QTimer.singleShot(2000, self.act_call[action])
+ else:
+ self.powermanager.lidClosedState = False
+
+ def _addBatteryWidgets(self):
+ """ Adds progressbars to show battery status to the tooltip."""
+ BattLayout = QHBoxLayout(None,0,6,"BattLayout")
+
+ self.BattPixmap = QLabel(self.tooltip,"BattLabLayout")
+ self.BattPixmap.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.BattPixmap.sizePolicy().hasHeightForWidth()))
+ self.BattPixmap.setPixmap(QPixmap(UserIcon(self.icon)))
+ self.BattPixmap.setScaledContents(1)
+ BattLayout.addWidget(self.BattPixmap)
+ self.BattMainLabel = QLabel(self.tooltip,"BattMainLabel")
+ self.BattMainLabel.setText(i18n("<b>Battery:</b>"))
+ BattLayout.addWidget(self.BattMainLabel)
+
+ # Add to tooltip
+ self.tooltip.layout().addLayout(BattLayout)
+
+ # Create a progressbar and a label for every battery found, and add it to tooltip
+ self.BattLabel = {}
+ self.BattLayout = {}
+ self.BattProgress = {}
+ i = 1
+ for batt in self.powermanager.batteries:
+ self.BattLayout[batt] = QHBoxLayout(None,0,6,"BattBarLayout")
+ self.BattLabel[batt] = QLabel(self.tooltip,"BattLabel")
+ if len(self.powermanager.batteries) > 1:
+ self.BattLabel[batt].setText(i18n("Battery %i" % i))
+ self.BattLayout[batt].addWidget(self.BattLabel[batt])
+ self.BattProgress[batt] = KProgress(self.tooltip,"BattProgress")
+ self.BattProgress[batt].setMinimumSize(QSize(200,0))
+ self.BattLayout[batt].addWidget(self.BattProgress[batt])
+ self.tooltip.layout().addLayout(self.BattLayout[batt])
+ i += 1
+
+
+ def _updateBatteryWidget(self, batt, state, level, remain, rate):
+ """ Retrieve battery information and update the related widgets accordingly. """
+ self.BattProgress[batt].setEnabled(True)
+ self.BattProgress[batt].setTotalSteps(100)
+ self.BattProgress[batt].setProgress(level)
+ if state == "not present":
+ self.BattProgress[batt].setFormat(i18n("not present"))
+ elif state == "charging":
+ self.BattProgress[batt].setFormat(i18n("Charging (%p%)"))
+ elif state == "discharging":
+ if rate > 0:
+ showrate = rate/1000
+ self.BattProgress[batt].setFormat(i18n("Discharging (%p%)") + " - %.d W" % showrate)
+ else:
+ self.BattProgress[batt].setFormat(i18n("Discharging (%p%)"))
+ else:
+ self.BattProgress[batt].setFormat("%p%")
+
+ def _addCpuWidgets(self):
+ """ Adds progressbars to show CPU frequencies to the tooltip."""
+ if not SHOW_CPUFREQ:
+ return
+ if len(self.powermanager.cpus) == 0:
+ return
+
+ LabelLayout = QHBoxLayout(None,0,6,"layout5")
+
+ self.CpuPixmap = QLabel(self.tooltip,"CpuPixmap")
+ self.CpuPixmap.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.CpuPixmap.sizePolicy().hasHeightForWidth()))
+ self.CpuPixmap.setPixmap(QPixmap(UserIcon("processor")))
+ self.CpuPixmap.setScaledContents(1)
+ LabelLayout.addWidget(self.CpuPixmap)
+ self.CpuMainLabel = QLabel(self.tooltip,"CpuMainLabel")
+ self.CpuMainLabel.setText(i18n("<b>CPU Frequency:</b>"))
+ LabelLayout.addWidget(self.CpuMainLabel)
+
+ # Add to tooltip
+ self.tooltip.layout().addLayout(LabelLayout)
+
+ # Create a progressbar and a label for every CPU found, and add it to tooltip
+ self.CpuLabel = {}
+ self.CpuLayout = {}
+ self.CpuProgress = {}
+ i = 1
+ for cpu in self.powermanager.cpus:
+ self.CpuLayout[cpu] = QHBoxLayout(None,0,6,"layout2")
+ self.CpuLabel[cpu] = QLabel(self.tooltip,"CpuLabel")
+ if len(self.powermanager.cpus) > 1:
+ self.CpuLabel[cpu].setText(i18n("Processor %i" % i))
+ self.CpuLayout[cpu].addWidget(self.CpuLabel[cpu])
+ self.CpuProgress[cpu] = KProgress(self.tooltip,"CpuProgress")
+ self.CpuProgress[cpu].setFormat("%v MHz")
+ self.CpuLayout[cpu].addWidget(self.CpuProgress[cpu])
+ self.tooltip.layout().addLayout(self.CpuLayout[cpu])
+ i += 1
+
+ def slotPoweredIdleActivated(self, index=False):
+ """ Signal slot for activated powered idle action. """
+ if not index:
+ index = self.PoweredIdleCombo.currentItem()
+ self.PoweredIdleTime.setEnabled(index != 0)
+
+ def slotBatteryIdleActivated(self, index=False):
+ """ Signal slot for activated battery idle action. """
+ if not index:
+ index = self.BatteryIdleCombo.currentItem()
+ self.BatteryIdleTime.setEnabled(index != 0)
+
+ def slotBatteryCriticalActivated(self, index=False):
+ """ Signal slot for activated battery critical action. """
+ if not index:
+ index = self.BatteryCriticalCombo.currentItem()
+ self.CriticalRemainTime.setEnabled(index != 0)
+
+ def _updateCpuWidgets(self):
+ """ Retrieve CPU freq information and update the related widgets accordingly. """
+ if not SHOW_CPUFREQ:
+ return
+ if len(self.powermanager.cpus) == 0:
+ return
+
+ clabel = i18n("<b>CPU Frequency:</b>") + " "
+ policy = self.powermanager.getCpuPolicy()
+ if self.freq_name.has_key(policy):
+ clabel += self.freq_name[policy] # get l10n name
+ else:
+ clabel += policy
+ self.CpuMainLabel.setText(clabel)
+
+ for cpu in self.powermanager.cpus:
+ cpustate = self.powermanager.getCpuState(cpu)
+ if not cpustate['online']:
+ self.CpuProgress[cpu].setEnabled(False)
+ else:
+ self.CpuProgress[cpu].setEnabled(True)
+ self.CpuProgress[cpu].setTotalSteps(cpustate['max'])
+ self.CpuProgress[cpu].setProgress(cpustate['cur'])
+ if policy != "":
+ self.systray.actionCollection().action(policy).setChecked(True)
+ if policy in self.cb_freq:
+ self.systray.actionCollection().action(policy).setChecked(True)
+
+ def changePoweredBrightness(self, level=None):
+ """ Mains-powered brigthness slider has been moved. """
+ # Check if the state applies and adjust brightness immediately.
+ if not self.powermanager.onBattery() and self.powermanager.hasBrightness:
+ if not level:
+ level = self.PoweredBrightnessSlider.value()
+ self.powermanager.adjustBrightness(level)
+
+ def changeBatteryBrightness(self, level=None):
+ """ Battery-powered brigthness slider has been moved. """
+ # Check if the state applies and adjust brightness immediately.
+ if self.powermanager.onBattery() and self.powermanager.hasBrightness:
+ if not level:
+ level = self.BatteryBrightnessSlider.value()
+ self.powermanager.adjustBrightness(level)
+
+
+
+
+ def checkCpuFreq(self):
+ """ Adjust CPU frequency policy according to current state """
+ if not self.powermanager.hasCpuFreqGovernors:
+ return ""
+
+ if self.powermanager.onBattery():
+ policy = str(self.config.readEntry("batteryFreqPolicy"))
+ else:
+ policy = str(self.config.readEntry("poweredFreqPolicy"))
+ if policy == "":
+ policy = 'dynamic'
+
+ # check if specified policy is supported by HW
+ if not policy in self.cb_freq:
+ print "Warning: policy from config file not supported: ", policy
+ return ""
+
+ current_policy = self.powermanager.getCpuPolicy()
+ if current_policy != policy:
+ debug("Switching CPU policy from %s to %s." % (current_policy, policy))
+ self.powermanager.setCpuPolicy(policy)
+ return i18n("CPU frequency policy changed to %1.").arg(self.freq_name[policy])
+ elif current_policy == 'dynamic':
+ debug("Dynamic policy -> update policy (conservative/ondemand)")
+ self.powermanager.setCpuPolicy(policy)
+
+ debug("CPU policy will stay %s" % current_policy)
+ return ""
+
+ def powerHasBeenUnplugged(self):
+ """ Actions to perform when the plug has been pulled."""
+ if self.powermanager.hasBrightness:
+ self.powermanager.adjustBrightness(self.BatteryBrightnessSlider.value())
+ self.powermanager.setPowerSave(True)
+ self.checkBatteryCritical()
+ self.changeBatteryBrightness()
+ self.powermanager.setScreensaverBlankOnly(True)
+ self.powermanager.resetIdleSeconds()
+ msg = self.checkCpuFreq()
+ if self.powermanager.hasAC:
+ self.notify(i18n("The AC adapter has been unplugged, switching to battery mode.")+"\n"+msg, self.getIcon())
+
+ def powerHasBeenPlugged(self):
+ """ Actions to perform when AC adapter has been plugged in. """
+ if self.powermanager.hasBrightness:
+ self.powermanager.adjustBrightness(self.PoweredBrightnessSlider.value())
+ self.powermanager.setPowerSave(False)
+ self.changePoweredBrightness()
+ self.powermanager.setScreensaverBlankOnly(False)
+ msg = self.checkCpuFreq()
+ self.powermanager.resetIdleSeconds()
+ self.notify(i18n("The AC adapter has been plugged in, switching to AC mode.")+"\n"+msg, self.getIcon())
+
+ def checkBatteryCritical(self):
+ """ Check for warning and critical battery label and notify-warn or
+ initiate the configured action. """
+
+ if not self.powermanager.hasBattery:
+ return
+
+ if self.batt_state == "discharging":
+ currentLevel = int(self.batt_remain/60)
+
+ warningLevel = self.criticalLevel + 5 # warn five minutes before critical
+ criticalLevel = self.criticalLevel
+
+ debug("CurrentBat: %i, WarningBat: %i, CriticalBat: %i" % (currentLevel, warningLevel, criticalLevel))
+ # We only want to suspend if the chargelevel is above a certain threshold,
+ # it sometimes takes some time for HAL to report remaining time correctly
+ if currentLevel <= criticalLevel and self.batt_level < CHARGE_LEVEL_THRESHOLD:
+ if not self.powermanager.criticalBatteryState and self.powermanager.onBattery():
+ self.powermanager.criticalBatteryState = True
+
+ action = str(self.config.readEntry("batteryCriticalAction"))
+ if not self.act_name.has_key(action):
+ action = self.act_name[self.cb_act_def_critical]
+
+ note = i18n("You are about to run out of battery power, %1 now.").arg(self.act_notify[action])
+ self.notify(note, self.act_icon[action])
+ if self.act_call[action] != None:
+ QTimer.singleShot(2000, self.act_call[action])
+ else:
+ self.powermanager.criticalBatteryState = False
+ if currentLevel <= warningLevel and self.batt_level < CHARGE_LEVEL_THRESHOLD:
+ if not self.powermanager.warningBatteryState:
+ self.powermanager.warningBatteryState = True
+ self.notify(i18n("You are low on battery power."), self.getIcon())
+ else:
+ self.powermanager.warningBatteryState = False
+
+ def checkIdletime(self):
+ """ Reads the idle time and does some action. """
+ idlesec = round(self.powermanager.getIdleSeconds()/60, 2)
+ if self.powermanager.onBattery():
+ idleTime = self.config.readNumEntry("batteryIdleTime", 10)
+ action = str(self.config.readEntry("batteryIdleAction"))
+ else:
+ idleTime = self.config.readNumEntry("poweredIdleTime", 60)
+ action = str(self.config.readEntry("poweredIdleAction"))
+ if not self.act_name.has_key(action):
+ action = 'nothing'
+
+ if idlesec - self.lastidlesec > 100:
+ debug("last: %u" % (idlesec - self.lastidlesec))
+ return # probably bogus idleseconds right after suspend
+ self.lastidlesec = idlesec
+ if self.act_call[action] == None:
+ return # doing nothing anyway
+ if idlesec > idleTime:
+ note = i18n("System idle for at least %1 minutes, %2 now.").arg(idleTime).arg(self.act_notify[action])
+ self.notify(note, self.act_icon[action])
+ QTimer.singleShot(2000, self.act_call[action])
+
+
+
+def doDcop(kapp):
+ """ Register kvandale in dcop, so it can be controlled from outside. """
+ my_dcop = kapp.dcopClient()
+ #my_dcop.attach()
+ #my_dcop.registerAs("power-manager")
+
+
+class DcopIface (DCOPExObj):
+ """ Add some interface so we can use powermanager from the outside. """
+ def __init__ (self, app, id='power-manager'):
+ DCOPExObj.__init__ (self, id)
+ # addMethod (<signature>, <Python method>)
+ #self.addMethod ('QString getQuery()', gvd.getZoekbegrip)
+
+ # PM related.
+ self.addMethod ('void suspend ()', app.trySuspend)
+ self.addMethod ('void hibernate ()', app.tryHibernate)
+ self.addMethod ('void shutdown ()', app.shutdown)
+
+ # UI related.
+ self.addMethod ('void showTip ()', app.showTip)
+ #self.addMethod ('void show ()', app.parent().show)
+ #self.addMethod ('void hide ()', app.parent().hide)
+
+ #self.addMethod ('void plugged ()', app.powerHasBeenPlugged)
+ #self.addMethod ('void unplugged ()', app.powerHasBeenUnplugged)
+ self.addMethod ('bool onBattery ()', app.powermanager.onBattery)
+
+ self.addMethod('void brightnessUp ()', app.setBrightnessUp)
+ self.addMethod('void brightnessDown ()', app.setBrightnessDown)
+ self.addMethod('QString getBrightness ()', app.getBrightness)
+
+ #self.addMethod ('QString getCurrentResult()', gvd.getRawResult)
+
+
+class PowermanagerApp(KDialogBase):
+ """ The KDialog providing the OK, Apply and Cancel buttons."""
+
+ def __init__(self,parent=None,name=None):
+ """ Initialise dialog and set mainwidget. """
+ KGlobal.locale().insertCatalogue("guidance")
+ KGlobal.iconLoader().addAppDir("guidance")
+
+ # We would like to use a KUniqueApplication, but that breaks dcop due to some
+ # strange bug. The following line is the revenge code for this bug, it is
+ # intentionally ugly.
+ if len(os.popen("dcop |grep guidance-").readlines()) > 1:
+ print "There is already an instance of power manager running. Exiting."
+ sys.exit(0)
+
+ # Which buttons do we want?
+ KDialogBase.__init__(self,KJanusWidget.Swallow,i18n("Power Manager"),
+ KDialogBase.Ok|KDialogBase.Apply|KDialogBase.Cancel|KDialogBase.User1, KDialogBase.Close)
+ self.pmwidget = PowerManager(self,name)
+ self.setButtonText(KDialogBase.User1, i18n("About"))
+
+ if not self.pmwidget.powermanager.isLaptop():
+ print "This is not a laptop, quitting ... "
+ sys.exit(1)
+
+ self.pmwidget.prepare()
+
+ self.setMainWidget(self.pmwidget)
+ self.aboutus = KAboutApplication(self)
+
+ def slotOk(self):
+ """ The OK button has been pressed, save configuration and pass on do whatever
+ needs to be done by KDialog. """
+ self.pmwidget.uiToConfig()
+ self.pmwidget.checkCpuFreq()
+ KDialogBase.slotOk(self)
+
+ def slotApply(self):
+ """ The Apply button has been pressed, save configuration and pass on do whatever
+ needs to be done by KDialog. """
+ self.pmwidget.uiToConfig()
+ self.pmwidget.checkCpuFreq()
+ KDialogBase.slotApply(self)
+
+ def slotCancel(self):
+ """ The Cancel button has been pressed, reset some values and hide dialogue. """
+ # In case brightness has changed, we reset it to the configured value.
+ if self.pmwidget.powermanager.hasBrightness:
+ brightness_high = self.pmwidget.powermanager.brightness_levels
+ if not self.pmwidget.powermanager.onBattery():
+ level = self.pmwidget.config.readNumEntry("poweredBrightness", brightness_high)
+ else:
+ level = self.pmwidget.config.readNumEntry("batteryBrightness", int(brightness_high/2))
+ self.pmwidget.powermanager.adjustBrightness(level)
+ self.pmwidget.configToUi()
+ KDialogBase.slotCancel(self)
+
+ def slotUser1(self):
+ self.aboutus.show()
+
+# There's a bug in KUniqueApplication that shows the pid in the dcop name,
+# this fugly hack works around it.
+class PMApp(KApplication):
+
+ def name(self):
+ return "power-manager"
+
+
+if __name__ == "__main__":
+ aboutdata = KAboutData("guidance", "Power Manager", "0.8.0",
+ "Handles battery, display and suspend modes for your computer.", KAboutData.License_GPL,
+ "(C) 2006-2007 Sebastian Kügler, Canonical Ltd, Luka Renko",
+ None, None, "jriddell@ubuntu.com")
+ aboutdata.addAuthor("Sebastian Kügler", "Developer", "sebas@kde.org","http://vizZzion.org")
+ aboutdata.addAuthor("Jonathan Riddell", "Developer", "jriddell@ubuntu.com")
+ aboutdata.addAuthor("Luka Renko", "Developer", "lure@kubuntu.org")
+ aboutdata.setProgramLogo(QImage("power-manager.png"))
+ KCmdLineArgs.init(sys.argv, aboutdata)
+ #kapp = KUniqueApplication(True, True, False)
+ #kapp = KApplication()
+ kapp = PMApp(True, True)
+ mainWindow = PowermanagerApp(None, "main window")
+ doDcop(kapp)
+ dcop_iface = DcopIface(mainWindow.pmwidget)
+ """Start helper module / button listener"""
+ try:
+ helperPid = os.spawnl(os.P_NOWAIT, os.path.dirname(__file__)+'/gpmhelper.py', 'gpmhelper.py')
+ except:
+ """Non-fatal if this fails"""
+ print "Unable to start button-listener"
+
+ kapp.exec_loop()
+
+ """Kill helper module / button listener"""
+ os.system('kill '+str(helperPid))
diff --git a/powermanager/guidance_power_manager_ui.py b/powermanager/guidance_power_manager_ui.py
new file mode 100644
index 0000000..13cbc7c
--- /dev/null
+++ b/powermanager/guidance_power_manager_ui.py
@@ -0,0 +1,241 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'guidance_power_manager_ui.ui'
+#
+# Created: Thu Apr 10 00:50:39 2008
+# by: The PyQt User Interface Compiler (pyuic) 3.17.4
+#
+# WARNING! All changes made in this file will be lost!
+
+
+import sys
+from qt import *
+from kdecore import KCmdLineArgs, KApplication
+from kdecore import i18n
+from kdeui import *
+
+
+
+class PowerManagerUI(QWidget):
+ def __init__(self,parent = None,name = None,fl = 0):
+ QWidget.__init__(self,parent,name,fl)
+
+ if not name:
+ self.setName("PowerManagerUI")
+
+ self.setMouseTracking(1)
+
+ PowerManagerUILayout = QVBoxLayout(self,11,6,"PowerManagerUILayout")
+
+ self.GeneralSettingsBox = QGroupBox(self,"GeneralSettingsBox")
+ self.GeneralSettingsBox.setColumnLayout(0,Qt.Vertical)
+ self.GeneralSettingsBox.layout().setSpacing(6)
+ self.GeneralSettingsBox.layout().setMargin(11)
+ GeneralSettingsBoxLayout = QVBoxLayout(self.GeneralSettingsBox.layout())
+ GeneralSettingsBoxLayout.setAlignment(Qt.AlignTop)
+
+ self.lockScreenOnResume = QCheckBox(self.GeneralSettingsBox,"lockScreenOnResume")
+ GeneralSettingsBoxLayout.addWidget(self.lockScreenOnResume)
+ PowerManagerUILayout.addWidget(self.GeneralSettingsBox)
+
+ self.MainsPoweredBox = QGroupBox(self,"MainsPoweredBox")
+ self.MainsPoweredBox.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Fixed,0,0,self.MainsPoweredBox.sizePolicy().hasHeightForWidth()))
+ self.MainsPoweredBox.setColumnLayout(0,Qt.Vertical)
+ self.MainsPoweredBox.layout().setSpacing(6)
+ self.MainsPoweredBox.layout().setMargin(11)
+ MainsPoweredBoxLayout = QVBoxLayout(self.MainsPoweredBox.layout())
+ MainsPoweredBoxLayout.setAlignment(Qt.AlignTop)
+
+ layout17 = QHBoxLayout(None,0,6,"layout17")
+
+ self.PoweredBrightnessLabel = QLabel(self.MainsPoweredBox,"PoweredBrightnessLabel")
+ layout17.addWidget(self.PoweredBrightnessLabel)
+
+ self.PoweredBrightnessSlider = QSlider(self.MainsPoweredBox,"PoweredBrightnessSlider")
+ self.PoweredBrightnessSlider.setMouseTracking(1)
+ self.PoweredBrightnessSlider.setAcceptDrops(1)
+ self.PoweredBrightnessSlider.setMaxValue(7)
+ self.PoweredBrightnessSlider.setLineStep(1)
+ self.PoweredBrightnessSlider.setPageStep(1)
+ self.PoweredBrightnessSlider.setOrientation(QSlider.Horizontal)
+ self.PoweredBrightnessSlider.setTickmarks(QSlider.Both)
+ self.PoweredBrightnessSlider.setTickInterval(0)
+ layout17.addWidget(self.PoweredBrightnessSlider)
+ MainsPoweredBoxLayout.addLayout(layout17)
+
+ layout13 = QHBoxLayout(None,0,6,"layout13")
+ spacer12_3_2_2 = QSpacerItem(200,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ layout13.addItem(spacer12_3_2_2)
+
+ self.PoweredIdleLabel = QLabel(self.MainsPoweredBox,"PoweredIdleLabel")
+ layout13.addWidget(self.PoweredIdleLabel)
+
+ self.PoweredIdleTime = QSpinBox(self.MainsPoweredBox,"PoweredIdleTime")
+ layout13.addWidget(self.PoweredIdleTime)
+
+ self.PoweredIdleCombo = QComboBox(0,self.MainsPoweredBox,"PoweredIdleCombo")
+ layout13.addWidget(self.PoweredIdleCombo)
+ MainsPoweredBoxLayout.addLayout(layout13)
+
+ layout13_2_2 = QHBoxLayout(None,0,6,"layout13_2_2")
+ spacer12_3_2_2_3_2 = QSpacerItem(200,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ layout13_2_2.addItem(spacer12_3_2_2_3_2)
+
+ self.PoweredFreqLabel = QLabel(self.MainsPoweredBox,"PoweredFreqLabel")
+ layout13_2_2.addWidget(self.PoweredFreqLabel)
+
+ self.PoweredFreqCombo = QComboBox(0,self.MainsPoweredBox,"PoweredFreqCombo")
+ layout13_2_2.addWidget(self.PoweredFreqCombo)
+ MainsPoweredBoxLayout.addLayout(layout13_2_2)
+ PowerManagerUILayout.addWidget(self.MainsPoweredBox)
+
+ self.BatteryBox = QGroupBox(self,"BatteryBox")
+ self.BatteryBox.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Fixed,0,0,self.BatteryBox.sizePolicy().hasHeightForWidth()))
+ self.BatteryBox.setColumnLayout(0,Qt.Vertical)
+ self.BatteryBox.layout().setSpacing(6)
+ self.BatteryBox.layout().setMargin(11)
+ BatteryBoxLayout = QVBoxLayout(self.BatteryBox.layout())
+ BatteryBoxLayout.setAlignment(Qt.AlignTop)
+
+ layout16 = QHBoxLayout(None,0,6,"layout16")
+
+ self.BatteryBrightnessLabel = QLabel(self.BatteryBox,"BatteryBrightnessLabel")
+ layout16.addWidget(self.BatteryBrightnessLabel)
+
+ self.BatteryBrightnessSlider = QSlider(self.BatteryBox,"BatteryBrightnessSlider")
+ self.BatteryBrightnessSlider.setMouseTracking(1)
+ self.BatteryBrightnessSlider.setMaxValue(7)
+ self.BatteryBrightnessSlider.setPageStep(1)
+ self.BatteryBrightnessSlider.setOrientation(QSlider.Horizontal)
+ self.BatteryBrightnessSlider.setTickmarks(QSlider.Both)
+ layout16.addWidget(self.BatteryBrightnessSlider)
+ BatteryBoxLayout.addLayout(layout16)
+
+ layout14 = QGridLayout(None,1,1,0,6,"layout14")
+
+ self.BatteryIdleCombo = QComboBox(0,self.BatteryBox,"BatteryIdleCombo")
+
+ layout14.addWidget(self.BatteryIdleCombo,1,4)
+
+ self.BatteryIdleLabel = QLabel(self.BatteryBox,"BatteryIdleLabel")
+
+ layout14.addWidget(self.BatteryIdleLabel,1,2)
+
+ self.BatteryCriticalCombo = QComboBox(0,self.BatteryBox,"BatteryCriticalCombo")
+
+ layout14.addWidget(self.BatteryCriticalCombo,0,4)
+
+ self.BatteryCriticalLabel = QLabel(self.BatteryBox,"BatteryCriticalLabel")
+
+ layout14.addMultiCellWidget(self.BatteryCriticalLabel,0,0,1,2)
+
+ self.BatteryIdleTime = QSpinBox(self.BatteryBox,"BatteryIdleTime")
+
+ layout14.addWidget(self.BatteryIdleTime,1,3)
+
+ self.CriticalRemainTime = QSpinBox(self.BatteryBox,"CriticalRemainTime")
+
+ layout14.addWidget(self.CriticalRemainTime,0,3)
+ spacer12_3 = QSpacerItem(28,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ layout14.addItem(spacer12_3,0,0)
+ spacer12_3_2 = QSpacerItem(50,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ layout14.addMultiCell(spacer12_3_2,1,1,0,1)
+ BatteryBoxLayout.addLayout(layout14)
+
+ layout13_2 = QHBoxLayout(None,0,6,"layout13_2")
+ spacer12_3_2_2_3 = QSpacerItem(200,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ layout13_2.addItem(spacer12_3_2_2_3)
+
+ self.BatteryFreqLabel = QLabel(self.BatteryBox,"BatteryFreqLabel")
+ layout13_2.addWidget(self.BatteryFreqLabel)
+
+ self.BatteryFreqCombo = QComboBox(0,self.BatteryBox,"BatteryFreqCombo")
+ layout13_2.addWidget(self.BatteryFreqCombo)
+ BatteryBoxLayout.addLayout(layout13_2)
+ PowerManagerUILayout.addWidget(self.BatteryBox)
+
+ self.LaptopLidRadios = QButtonGroup(self,"LaptopLidRadios")
+ self.LaptopLidRadios.setSizePolicy(QSizePolicy(QSizePolicy.Preferred,QSizePolicy.Fixed,0,0,self.LaptopLidRadios.sizePolicy().hasHeightForWidth()))
+ self.LaptopLidRadios.setFrameShape(QButtonGroup.GroupBoxPanel)
+ self.LaptopLidRadios.setColumnLayout(0,Qt.Vertical)
+ self.LaptopLidRadios.layout().setSpacing(5)
+ self.LaptopLidRadios.layout().setMargin(11)
+ LaptopLidRadiosLayout = QHBoxLayout(self.LaptopLidRadios.layout())
+ LaptopLidRadiosLayout.setAlignment(Qt.AlignTop)
+
+ self.laptopClosedNone = QRadioButton(self.LaptopLidRadios,"laptopClosedNone")
+ LaptopLidRadiosLayout.addWidget(self.laptopClosedNone)
+
+ self.laptopClosedBlank = QRadioButton(self.LaptopLidRadios,"laptopClosedBlank")
+ LaptopLidRadiosLayout.addWidget(self.laptopClosedBlank)
+
+ self.laptopClosedSuspend = QRadioButton(self.LaptopLidRadios,"laptopClosedSuspend")
+ LaptopLidRadiosLayout.addWidget(self.laptopClosedSuspend)
+
+ self.laptopClosedHibernate = QRadioButton(self.LaptopLidRadios,"laptopClosedHibernate")
+ LaptopLidRadiosLayout.addWidget(self.laptopClosedHibernate)
+
+ self.laptopClosedShutdown = QRadioButton(self.LaptopLidRadios,"laptopClosedShutdown")
+ LaptopLidRadiosLayout.addWidget(self.laptopClosedShutdown)
+ spacer12_2 = QSpacerItem(213,20,QSizePolicy.Expanding,QSizePolicy.Minimum)
+ LaptopLidRadiosLayout.addItem(spacer12_2)
+ PowerManagerUILayout.addWidget(self.LaptopLidRadios)
+ spacer11 = QSpacerItem(31,80,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ PowerManagerUILayout.addItem(spacer11)
+
+ self.languageChange()
+
+ self.resize(QSize(505,374).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+
+ def languageChange(self):
+ self.setCaption(i18n("PowerManagerUI"))
+ self.GeneralSettingsBox.setTitle(i18n("General Settings"))
+ self.lockScreenOnResume.setText(i18n("Lock screen on resume"))
+ self.MainsPoweredBox.setTitle(i18n("Mains Powered"))
+ self.PoweredBrightnessLabel.setText(i18n("Brightness"))
+ QWhatsThis.add(self.PoweredBrightnessSlider,i18n("With this slider you can set the brightness when the system is plugged into the socket outlet"))
+ self.PoweredIdleLabel.setText(i18n("When the system is idle for more than"))
+ self.PoweredIdleTime.setPrefix(QString.null)
+ self.PoweredIdleTime.setSuffix(i18n(" min"))
+ QWhatsThis.add(self.PoweredIdleTime,i18n("To prevent data loss or other damage, you can have the system suspend or hibernate, so you don't run accidentally out of battery power. Configure the number of minutes below which the machine will run the configured action."))
+ self.PoweredFreqLabel.setText(i18n("CPU frequency scaling policy"))
+ self.BatteryBox.setTitle(i18n("Battery Powered"))
+ self.BatteryBrightnessLabel.setText(i18n("Brightness"))
+ QWhatsThis.add(self.BatteryBrightnessSlider,i18n("This slider controls the brightness when the system runs on batteries"))
+ self.BatteryIdleLabel.setText(i18n("When the system is idle for more than"))
+ self.BatteryCriticalLabel.setText(i18n("When battery remaining time drops below"))
+ self.BatteryIdleTime.setPrefix(QString.null)
+ self.BatteryIdleTime.setSuffix(i18n(" min"))
+ QWhatsThis.add(self.BatteryIdleTime,i18n("To prevent data loss or other damage, you can have the system suspend or hibernate, so you don't run accidentally out of battery power. Configure the number of minutes below which the machine will run the configured action."))
+ self.CriticalRemainTime.setPrefix(QString.null)
+ self.CriticalRemainTime.setSuffix(i18n(" min"))
+ QWhatsThis.add(self.CriticalRemainTime,i18n("To prevent data loss or other damage, you can have the system suspend or hibernate, so you don't run accidentally out of battery power. Configure the number of minutes below which the machine will run the configured action."))
+ self.BatteryFreqLabel.setText(i18n("CPU frequency scaling policy"))
+ self.LaptopLidRadios.setTitle(i18n("When Laptop Lid Closed"))
+ self.laptopClosedNone.setText(i18n("Do nothing"))
+ self.laptopClosedBlank.setText(i18n("Lock screen"))
+ self.laptopClosedSuspend.setText(i18n("Suspend"))
+ QToolTip.add(self.laptopClosedSuspend,i18n("Suspend to Memory"))
+ QWhatsThis.add(self.laptopClosedSuspend,i18n("Suspend is a sleep state, the system will consume only very little energy when suspended"))
+ self.laptopClosedHibernate.setText(i18n("Hibernate"))
+ QToolTip.add(self.laptopClosedHibernate,i18n("Suspend to Disk"))
+ QWhatsThis.add(self.laptopClosedHibernate,i18n("Hibernate or \"Suspend to Disk\" is a deep sleepstate, allowing the system to power off completely"))
+ self.laptopClosedShutdown.setText(i18n("Shutdown"))
+ QToolTip.add(self.laptopClosedShutdown,i18n("Halt the machine"))
+
+
+if __name__ == "__main__":
+ appname = ""
+ description = ""
+ version = ""
+
+ KCmdLineArgs.init (sys.argv, appname, description, version)
+ a = KApplication ()
+
+ QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
+ w = PowerManagerUI()
+ a.setMainWidget(w)
+ w.show()
+ a.exec_loop()
diff --git a/powermanager/guidance_power_manager_ui.ui b/powermanager/guidance_power_manager_ui.ui
new file mode 100644
index 0000000..77aa884
--- /dev/null
+++ b/powermanager/guidance_power_manager_ui.ui
@@ -0,0 +1,530 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>PowerManagerUI</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>PowerManagerUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>505</width>
+ <height>374</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>PowerManagerUI</string>
+ </property>
+ <property name="mouseTracking">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>GeneralSettingsBox</cstring>
+ </property>
+ <property name="title">
+ <string>General Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>lockScreenOnResume</cstring>
+ </property>
+ <property name="text">
+ <string>Lock screen on resume</string>
+ </property>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>MainsPoweredBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Mains Powered</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>PoweredBrightnessLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Brightness</string>
+ </property>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>PoweredBrightnessSlider</cstring>
+ </property>
+ <property name="mouseTracking">
+ <bool>true</bool>
+ </property>
+ <property name="acceptDrops">
+ <bool>true</bool>
+ </property>
+ <property name="maxValue">
+ <number>7</number>
+ </property>
+ <property name="lineStep">
+ <number>1</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Both</enum>
+ </property>
+ <property name="tickInterval">
+ <number>0</number>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>With this slider you can set the brightness when the system is plugged into the socket outlet</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer12_3_2_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>200</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>PoweredIdleLabel</cstring>
+ </property>
+ <property name="text">
+ <string>When the system is idle for more than</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>PoweredIdleTime</cstring>
+ </property>
+ <property name="prefix">
+ <string></string>
+ </property>
+ <property name="suffix">
+ <string> min</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>To prevent data loss or other damage, you can have the system suspend or hibernate, so you don't run accidentally out of battery power. Configure the number of minutes below which the machine will run the configured action.</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>PoweredIdleCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13_2_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer12_3_2_2_3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>200</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>PoweredFreqLabel</cstring>
+ </property>
+ <property name="text">
+ <string>CPU frequency scaling policy</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>PoweredFreqCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>BatteryBox</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Battery Powered</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>BatteryBrightnessLabel</cstring>
+ </property>
+ <property name="text">
+ <string>Brightness</string>
+ </property>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>BatteryBrightnessSlider</cstring>
+ </property>
+ <property name="mouseTracking">
+ <bool>true</bool>
+ </property>
+ <property name="maxValue">
+ <number>7</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Both</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>This slider controls the brightness when the system runs on batteries</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout14</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QComboBox" row="1" column="4">
+ <property name="name">
+ <cstring>BatteryIdleCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="2">
+ <property name="name">
+ <cstring>BatteryIdleLabel</cstring>
+ </property>
+ <property name="text">
+ <string>When the system is idle for more than</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="4">
+ <property name="name">
+ <cstring>BatteryCriticalCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>BatteryCriticalLabel</cstring>
+ </property>
+ <property name="text">
+ <string>When battery remaining time drops below</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="1" column="3">
+ <property name="name">
+ <cstring>BatteryIdleTime</cstring>
+ </property>
+ <property name="prefix">
+ <string></string>
+ </property>
+ <property name="suffix">
+ <string> min</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>To prevent data loss or other damage, you can have the system suspend or hibernate, so you don't run accidentally out of battery power. Configure the number of minutes below which the machine will run the configured action.</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox" row="0" column="3">
+ <property name="name">
+ <cstring>CriticalRemainTime</cstring>
+ </property>
+ <property name="prefix">
+ <string></string>
+ </property>
+ <property name="suffix">
+ <string> min</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>To prevent data loss or other damage, you can have the system suspend or hibernate, so you don't run accidentally out of battery power. Configure the number of minutes below which the machine will run the configured action.</string>
+ </property>
+ </widget>
+ <spacer row="0" column="0">
+ <property name="name">
+ <cstring>spacer12_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>28</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>spacer12_3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>50</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </grid>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout13_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer>
+ <property name="name">
+ <cstring>spacer12_3_2_2_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>200</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>BatteryFreqLabel</cstring>
+ </property>
+ <property name="text">
+ <string>CPU frequency scaling policy</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <property name="name">
+ <cstring>BatteryFreqCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QButtonGroup">
+ <property name="name">
+ <cstring>LaptopLidRadios</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>GroupBoxPanel</enum>
+ </property>
+ <property name="title">
+ <string>When Laptop Lid Closed</string>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="spacing">
+ <number>5</number>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>laptopClosedNone</cstring>
+ </property>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>laptopClosedBlank</cstring>
+ </property>
+ <property name="text">
+ <string>Lock screen</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>laptopClosedSuspend</cstring>
+ </property>
+ <property name="text">
+ <string>Suspend</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Suspend to Memory</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Suspend is a sleep state, the system will consume only very little energy when suspended</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>laptopClosedHibernate</cstring>
+ </property>
+ <property name="text">
+ <string>Hibernate</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Suspend to Disk</string>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Hibernate or "Suspend to Disk" is a deep sleepstate, allowing the system to power off completely</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>laptopClosedShutdown</cstring>
+ </property>
+ <property name="text">
+ <string>Shutdown</string>
+ </property>
+ <property name="toolTip" stdset="0">
+ <string>Halt the machine</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer12_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>213</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer11</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>31</width>
+ <height>80</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/powermanager/hal-test.py b/powermanager/hal-test.py
new file mode 100644
index 0000000..f9ef90c
--- /dev/null
+++ b/powermanager/hal-test.py
@@ -0,0 +1,35 @@
+import dbus
+
+bus = dbus.SystemBus()
+hal_manager_obj = bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager")
+hal_manager = dbus.Interface(hal_manager_obj, "org.freedesktop.Hal.Manager")
+#device_names = hal_manager.GetAllDevices()
+
+ac = hal_manager.FindDeviceByCapability("ac_adapter")
+
+#all_devices = hal_manager.GetAllDevices()
+
+#for n in device_names: print n
+#obj = bus.get_object("org.freedesktop.Hal", u'/org/freedesktop/Hal/devices/acpi_AC')
+#obj.GetAllProperties()
+
+name = ac[0]
+device_dbus_obj = bus.get_object("org.freedesktop.Hal" ,ac[0])
+properties = device_dbus_obj.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
+
+try:
+ parent_name = properties["info.parent"]
+except KeyError:
+ # no parent, must be parent of virtual_root
+ parent_name = "/"
+except TypeError:
+ print "Error: no properties for device %s"%name
+ #continue
+print properties['ac_adapter.present']
+#for p in properties:
+# print p, " :: ", properties[p]
+if properties['ac_adapter.present']:
+ print "plugged in"
+else:
+ print "unplugged"
+
diff --git a/powermanager/notify.py b/powermanager/notify.py
new file mode 100644
index 0000000..869f064
--- /dev/null
+++ b/powermanager/notify.py
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'notify.ui'
+#
+# Created: Thu Apr 10 00:50:39 2008
+# by: The PyQt User Interface Compiler (pyuic) 3.17.4
+#
+# WARNING! All changes made in this file will be lost!
+
+
+import sys
+from qt import *
+from kdecore import KCmdLineArgs, KApplication
+from kdecore import i18n
+from kdeui import *
+
+
+class NotifyWidget(QWidget):
+ def __init__(self,parent = None,name = None,fl = 0):
+ QWidget.__init__(self,parent,name,fl)
+
+ if not name:
+ self.setName("NotifyWidgetUI")
+
+ self.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding,QSizePolicy.MinimumExpanding,0,0,self.sizePolicy().hasHeightForWidth()))
+ self.setBaseSize(QSize(0,0))
+
+ NotifyWidgetUILayout = QGridLayout(self,1,1,11,6,"NotifyWidgetUILayout")
+
+ self.Icon = QLabel(self,"Icon")
+ self.Icon.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.Icon.sizePolicy().hasHeightForWidth()))
+ self.Icon.setScaledContents(1)
+
+ NotifyWidgetUILayout.addMultiCellWidget(self.Icon,0,1,0,0)
+
+ self.Text = QLabel(self,"Text")
+
+ NotifyWidgetUILayout.addWidget(self.Text,1,1)
+
+ self.Caption = QLabel(self,"Caption")
+
+ NotifyWidgetUILayout.addWidget(self.Caption,0,1)
+
+ self.languageChange()
+
+ self.resize(QSize(151,60).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+
+ def languageChange(self):
+ self.setCaption(i18n("Form3"))
+ self.Text.setText(QString.null)
+ self.Caption.setText(i18n("<b>Powermanager:</b>"))
+
+
+if __name__ == "__main__":
+ appname = ""
+ description = ""
+ version = ""
+
+ KCmdLineArgs.init (sys.argv, appname, description, version)
+ a = KApplication ()
+
+ QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
+ w = NotifyWidget()
+ a.setMainWidget(w)
+ w.show()
+ a.exec_loop()
diff --git a/powermanager/notify.ui b/powermanager/notify.ui
new file mode 100644
index 0000000..ebf2950
--- /dev/null
+++ b/powermanager/notify.ui
@@ -0,0 +1,75 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>NotifyWidget</class>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>NotifyWidgetUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>151</width>
+ <height>60</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="baseSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Form3</string>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel" row="0" column="0" rowspan="2" colspan="1">
+ <property name="name">
+ <cstring>Icon</cstring>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="pixmap">
+ <pixmap></pixmap>
+ </property>
+ <property name="scaledContents">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="1">
+ <property name="name">
+ <cstring>Text</cstring>
+ </property>
+ <property name="text">
+ <string></string>
+ </property>
+ </widget>
+ <widget class="QLabel" row="0" column="1">
+ <property name="name">
+ <cstring>Caption</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;b&gt;Powermanager:&lt;/b&gt;</string>
+ </property>
+ </widget>
+ </grid>
+</widget>
+<pixmapfunction>QPixmap</pixmapfunction>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/powermanager/powermanage.py b/powermanager/powermanage.py
new file mode 100644
index 0000000..db62e8c
--- /dev/null
+++ b/powermanager/powermanage.py
@@ -0,0 +1,606 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# Copyright (C) 2006 by Sebastian Kügler
+# <sebas@kde.org>
+#
+# Copyright: See COPYING file that comes with this distribution
+#
+###########################################################################
+# An API for changing the powerstate of a notebook
+
+import dbus
+import dbus.glib
+import os, time
+from dcopext import DCOPClient, DCOPApp # Used for kscreensaver
+import xf86misc
+
+DEBUG = False
+
+def debug(msg):
+ """ Print debug message to terminal. """
+ if DEBUG:
+ print msg
+
+# Default values for actions when battery runs out.
+BATTERY_CRITICAL_MINUTES=5
+
+# Only do an emergency suspend if charge level percentage is below ...
+CHARGE_LEVEL_THRESHOLD = 10
+
+isroot = os.environ["USER"] == "root"
+
+# Send suspend / hibernate commands to HAL or use Sx_COMMANDS
+SUSPEND_USE_HAL = True
+
+# Show the cpu frequency widgets in the tooltip?
+SHOW_CPUFREQ = True
+
+
+# Command to initiate suspend-to-disk when not using HAL
+S4_COMMAND = "/usr/local/bin/hibernate"
+# Command to initiate suspend-to-ram when not using HAL
+S3_COMMAND = "/usr/local/bin/s2ram"
+
+# Override isLaptop method
+#IS_LAPTOP = True
+
+def _readValue(filename, line=0):
+ """ Reads a single value from the first line of a file. """
+ fhandle = open(filename)
+ value = fhandle.readlines()[line][:-1]
+ fhandle.close()
+ return value
+
+class PowerManage:
+ """ Class providing low-level power managerment functionality. """
+
+ def __init__(self):
+ # (En|Dis)able using hdparm to set disk timeout
+ self.USE_HDPARM = True
+ # (En|Dis)able using laptop_mode to make the disk spin up less often
+ self.USE_LAPTOP_MODE = True
+ # (En|Dis)able using cpufreq to control cpu frequency scaling
+ self.USE_CPUFREQ = True
+ # (En|Dis)able using wireless adapter powermanagement (causes lag in network connection)
+ self.USE_WI_PM = True
+ # (En|Dis)able using display powermanagement
+ self.USE_DPMS = True
+ # (En|Dis)able using display brightness switching
+ self.USE_DISPLAY = True
+ # (En|Dis)able screensaver blankonly
+ self.SCREENSAVER_BLANKONLY = True
+
+
+ try:
+ xg = xf86misc.XF86Server()
+ self.xscreen = xg.getDefaultScreen()
+ except xf86misc.XF86Error:
+ print "Problem connecting to X server for idletime detection."
+ # Currently only used in the test method
+ self.display_dark = 0.5
+ self.display_light = 1
+
+ # Some status initialisations
+ self.lowBatteryState = False
+ self.warningBatteryState = False
+ self.criticalBatteryState = False
+
+ self.criticalBatteryState = False
+ self.lidClosedState = False
+
+ # What does HAL support on this machine
+ self.hasBrightness = False
+ self.hasAC = False
+ self.hasLid = False
+ self.hasBattery = False
+ self.hasCpuFreqGovernors = False
+
+ # Used to track if the previous check reported a battery to determine
+ # if we want to fire a notice "battery removed|plugged in"
+ self.wasOnBattery = False
+ self._initHAL()
+ self._initBrightness()
+ self._initBattery()
+ self._initAc()
+ self._initLid()
+ self._checkSuspend()
+ self._checkCpuCapabilities()
+ self._findDisks()
+
+ def checkHAL(self):
+ """ Handle HAL and DBus restarts """
+ try:
+ self.hal_manager.FindDeviceByCapability("")
+ except dbus.DBusException, e:
+ if str(e) == 'org.freedesktop.DBus.Error.Disconnected: Connection is closed' \
+ or str(e) == 'org.freedesktop.DBus.Error.Disconnected: Connection was disconnected before a reply was received':
+ # DBus doesn't support on-the-fly restart
+ print "connection with DBus lost, please restart the display manager"
+ return
+
+ if os.system("ps aux|grep [h]ald-runner") == 0:
+ print "connection with HAL lost, trying to reconnect"
+ self._initHAL()
+ self._initBrightness()
+ self._initBattery()
+ self._initAc()
+ self._initLid()
+ self._checkSuspend()
+ self._checkCpuCapabilities()
+ else:
+ print "HAL is not running"
+
+ def isLaptop(self):
+ """ Detect if system is laptop. """
+ try:
+ return IS_LAPTOP
+ except NameError:
+ pass
+ self.computerObject = self.bus.get_object("org.freedesktop.Hal",
+ u'/org/freedesktop/Hal/devices/computer')
+ properties = self.computerObject.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
+ # formfactor sometimes (ppc) also reports "unknown" for laptops
+ # workaround: consider laptop anything with primary battery (see LP #64053)
+ return properties["system.formfactor"] == "laptop" or self.hasBattery
+
+ def _findDisks(self):
+ """ Scan /sys/block for non-removable and non-ramdisks, used for hdparm actions,
+ currently not implemented in the powermanager frontend. """
+ self.disks = []
+ blk_path = "/sys/block/"
+ for d in os.listdir(blk_path):
+ # No RAM disks, no DM-RAID
+ if d.startswith("ram") or d.startswith("dm"):
+ continue
+ fhandle = open(blk_path+d+"/removable")
+ if fhandle.readlines()[0][:-1] == "0":
+ self.disks.append(d)
+ debug("Detected disks: "+" ".join(self.disks))
+
+ def onBattery(self):
+ """ Find out if we're on AC or on battery using HAL. """
+ if not self.hasAC:
+ print "No AC adapter found - assume that we are on batteries."
+ return False
+ properties = self.acObject.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
+ if properties.has_key("ac_adapter.present"):
+ return not properties['ac_adapter.present']
+ else:
+ print "Error: ac_adapter has no property \"present\""
+ return False
+
+ def _initBattery(self):
+ """ Looks for a battery in HAL. """
+ batteryDevices = self.hal_manager.FindDeviceByCapability("battery")
+ self.batteries = {}
+ self.batteryIsPresent = {}
+
+ numBatt = 0
+ for batt in batteryDevices:
+ battObj = self.bus.get_object("org.freedesktop.Hal", batt)
+ properties = battObj.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
+ if properties['battery.type'] != "primary":
+ continue
+ self.batteries[numBatt] = battObj
+ self.batteryIsPresent[numBatt] = properties['battery.present']
+ numBatt += 1
+
+ if numBatt > 0:
+ self.hasBattery = True
+ else:
+ self.hasBattery = False
+ print "No battery found."
+
+ def getBatteryState(self,batt):
+ """ Read battery status from HAL and return
+ (battery state, charge percentage, remaining seconds).
+ """
+ try:
+ properties = self.batteries[batt].GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
+ except dbus.DBusException:
+ print "problem getting battery state from dbus."
+ return "not present", 0, 0, 0, 0, 0
+
+ if not properties['battery.present']:
+ return "not present", 0, 0, 0, 0, 0
+ else:
+ current = full = level = remain = rate = 0
+ if properties.has_key("battery.charge_level.current"):
+ current = properties["battery.charge_level.current"]
+ if properties.has_key("battery.charge_level.last_full"):
+ full = properties["battery.charge_level.last_full"]
+
+ if properties["battery.rechargeable.is_charging"]:
+ state = "charging"
+ elif properties["battery.rechargeable.is_discharging"]:
+ if self.onBattery():
+ state = "discharging"
+ else:
+ state = "charged"
+ elif not properties["battery.rechargeable.is_discharging"] \
+ and not properties["battery.rechargeable.is_charging"]:
+ if current == 0:
+ state = "empty"
+ else:
+ state = "charged"
+ else:
+ print "Unknown battery state ..."
+
+ # Sometimes, HAL doesn't report the percentage, but we can compute that ourselves anyway
+ if properties.has_key("battery.charge_level.percentage"):
+ level = properties["battery.charge_level.percentage"]
+ elif current > 0 and full > 0:
+ level = current / full
+
+ if state in ("charging","discharging"):
+ if properties.has_key("battery.remaining_time"):
+ remain = properties["battery.remaining_time"]
+ if properties.has_key("battery.charge_level.rate"):
+ rate = properties["battery.charge_level.rate"]
+
+ return state, level, remain, rate, current, full
+
+ def showInfo(self):
+ """ Outputs some random information to show that it does not work yet. """
+ print "OnBattery:", self.onBattery()
+ print "CPUs:", len(self.cpus)
+
+ def _initHAL(self):
+ """ Initialise HAL client to be used later. """
+ self.bus = dbus.SystemBus()
+ hal_manager_obj = self.bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/Manager")
+ self.hal_manager = dbus.Interface(hal_manager_obj, "org.freedesktop.Hal.Manager")
+
+ def _initLid(self):
+ """ Find out if there's a Lid device. """
+ lidDevice = self.hal_manager.FindDeviceStringMatch("button.type", "lid")
+ if len(lidDevice) >= 1:
+ self.hasLid = True
+ self.lidObject = self.bus.get_object("org.freedesktop.Hal" ,lidDevice[0])
+
+ def _initAc(self):
+ """ Search HAL for detecting if power is plugged in. """
+ acDevice = self.hal_manager.FindDeviceByCapability("ac_adapter")
+ if len(acDevice) >= 1:
+ self.hasAC = True
+ self.acObject = self.bus.get_object("org.freedesktop.Hal" ,acDevice[0])
+
+ def _checkSuspend(self):
+ """ Ask HAL whether we can suspend / hibernate. """
+ if SUSPEND_USE_HAL:
+ self.computerObject = self.bus.get_object("org.freedesktop.Hal",
+ u'/org/freedesktop/Hal/devices/computer')
+ properties = self.computerObject.GetAllProperties(
+ dbus_interface="org.freedesktop.Hal.Device")
+ self.canSuspend = properties["power_management.can_suspend"]
+ self.canHibernate = properties["power_management.can_hibernate"]
+ else:
+ self.canSuspend = self.canHibernate = True
+
+ def _initBrightness(self):
+ """ Search HAL for a screen with brightness controls."""
+
+ brightnessDevice = self.hal_manager.FindDeviceByCapability("laptop_panel")
+
+ if len(brightnessDevice) >= 1:
+ self.hasBrightness = True
+ self.brightnessObject = self.bus.get_object("org.freedesktop.Hal", brightnessDevice[0])
+ self.brightness_properties = self.brightnessObject.GetAllProperties(
+ dbus_interface="org.freedesktop.Hal.Device")
+ try:
+ self.brightness_levels = self.brightness_properties[u'laptop_panel.num_levels']
+ except KeyError,e:
+ self.hasBrightness = False
+ return 0 # Really don't know what to do here, but don't crash in any case.
+ try:
+ self.old_b = self.brightness_levels[-1] # Setting cached brightness value to brightest
+ except TypeError,e:
+ return 0 # Really don't know what to do here, but don't crash in any case.
+
+ def getBrightness(self):
+ """ Read brightness from HAL. """
+ if not self.hasBrightness:
+ debug("Brightness setting not supported.")
+ return
+ try:
+ b = self.brightnessObject.GetBrightness(
+ dbus_interface="org.freedesktop.Hal.Device.LaptopPanel")
+ except dbus.DBusException, e:
+ # Sometimes, right after resume, the HAL call
+ # fails, in that case, we return the last value
+ # and hope that it goes well next time.
+ print "Warning: in getBrightness(): ", e
+ # try and return the old brightness setting, but don't die in any case:
+ try:
+ return self.old_b
+ except AttributeError, errmsg:
+ return
+ self.old_b = b
+ return b
+
+ def adjustBrightness(self, level):
+ """ Adjust the brightness via HAL. """
+ if not self.hasBrightness:
+ debug("Brightness setting not supported.")
+ return
+ try:
+ self.brightnessObject.SetBrightness(level,
+ dbus_interface="org.freedesktop.Hal.Device.LaptopPanel")
+ except dbus.DBusException, e:
+ print e
+
+ def _checkCpuCapabilities(self):
+ """ Find out the number of CPUs / cores, check which governors are avaible."""
+ cpufreq_dir = "/sys/devices/system/cpu"
+ self.cpus = []
+ for cpu in os.listdir(cpufreq_dir):
+ if cpu.startswith('cpu') and cpu != 'cpuidle':
+ self.cpus.append(cpu)
+ self.cpus.sort()
+
+ # Map our policies to cpufreq governors.
+ self.cpu_policy = {}
+ self.cpu_policy['dynamic/ac'] = []
+ self.cpu_policy['dynamic/battery'] = []
+ self.cpu_policy['powersave'] = []
+ self.cpu_policy['performance'] = []
+
+ try:
+ comp_obj = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/devices/computer')
+ self.cpufreq = dbus.Interface(comp_obj, 'org.freedesktop.Hal.Device.CPUFreq')
+ self.governor_available = self.cpufreq.GetCPUFreqAvailableGovernors()
+ except dbus.DBusException:
+ return
+ self.hasCpuFreqGovernors = True
+
+ if 'ondemand' in self.governor_available:
+ self.cpu_policy['dynamic/ac'].append('ondemand')
+ self.cpu_policy['dynamic/battery'].append('ondemand')
+ if 'conservative' in self.governor_available:
+ self.cpu_policy['dynamic/ac'].append('conservative')
+ self.cpu_policy['dynamic/battery'].insert(0,'conservative')
+ if 'userspace' in self.governor_available:
+ self.cpu_policy['dynamic/ac'].append('userspace')
+ self.cpu_policy['dynamic/battery'].append('userspace')
+ if 'powersave' in self.governor_available:
+ self.cpu_policy['powersave'].append('powersave')
+ if 'performance' in self.governor_available:
+ self.cpu_policy['performance'].append('performance')
+
+ def getSupportedCpuPolicies(self):
+ """ Report a list of supported CPU policies """
+ policies = []
+ if len(self.cpu_policy['dynamic/ac']) > 0:
+ policies.append('dynamic')
+ if len(self.cpu_policy['powersave']) > 0:
+ policies.append('powersave')
+ if len(self.cpu_policy['performance']) > 0:
+ policies.append('performance')
+ return policies
+
+ def getCpuPolicy(self):
+ """ Translate current CPU frequency governor into policy """
+ if not self.USE_CPUFREQ or not self.hasCpuFreqGovernors:
+ return ""
+ gov = self.cpufreq.GetCPUFreqGovernor()
+ for policy in self.cpu_policy.keys():
+ if gov in self.cpu_policy[policy]:
+ return policy.split('/')[0] # strip ac or battery off
+ return gov ## return as-is - no conversion
+
+ def setCpuPolicy(self,policy):
+ """ Using cpufreq governors. Mode is powersave, dynamic or performance. We're assuming that
+ the available governors are the same for all CPUs. This method changes the cpufreq
+ governor on all CPUs to a certain policy."""
+ if not self.USE_CPUFREQ or not self.hasCpuFreqGovernors:
+ return False
+
+ if policy == "dynamic":
+ if self.onBattery():
+ policy = "dynamic/battery"
+ else:
+ policy = "dynamic/ac"
+
+ for gov in self.cpu_policy[policy]:
+ try:
+ self.cpufreq.SetCPUFreqGovernor(gov)
+ return True
+ except dbus.DBusException:
+ pass
+ return False # no of governor worked
+
+ def cpuIsOnline(self,cpu):
+ """ Check if cpu is online. CPU0 is always online, CPU1 might be unplugged. Since
+ /sys/devices/system/cpu/$cpu/cpufreq is not readable for normal users, we just
+ check for the cpufreq subdir (which is where it's really needed anyway).
+ """
+ if cpu == "cpu0": return True
+ else: return os.path.isdir("/sys/devices/system/cpu/"+cpu+"/cpufreq")
+
+ def getCpuState(self,cpu):
+ """ Reads the status of a CPU from /sys. """
+ state = {}
+ state['online'] = self.cpuIsOnline(cpu)
+ if not state['online']:
+ debug("getCpuState: "+cpu+" is offline")
+ return state
+ try:
+ state['cpu'] = cpu
+ state['cur'] = int(_readValue("/sys/devices/system/cpu/"+cpu+"/cpufreq/scaling_cur_freq"))/1000
+ state['governor'] = _readValue("/sys/devices/system/cpu/"+cpu+"/cpufreq/scaling_governor")
+ state['driver'] = _readValue("/sys/devices/system/cpu/"+cpu+"/cpufreq/scaling_driver")
+ state['steps'] = []
+ freqs = _readValue("/sys/devices/system/cpu/"+cpu+"/cpufreq/scaling_available_frequencies")
+ except IOError:
+ # CPUFREQ has gone away, let's disable it.
+ state['online'] = False
+ return state
+ for v in freqs.split():
+ state['steps'].append(int(v)/1000)
+ state['max'] = max(state['steps'])
+ state['min'] = min(state['steps'])
+ debug(state)
+ return state
+
+ def getLidClosedState(self):
+ """ Returns True if the lid is currently closed, or False if it isn't. """
+ try:
+ properties = self.lidObject.GetAllProperties(dbus_interface="org.freedesktop.Hal.Device")
+ return properties["button.state.value"]
+ except (KeyError, dbus.DBusException):
+ return False
+
+ def setPowerSave(self, state):
+ # No SetPowerSave in Ubuntu's HAL
+ try:
+ self.computerObject.SetPowerSave(state,
+ dbus_interface="org.freedesktop.Hal.Device.SystemPowerManagement")
+ except dbus.DBusException, e:
+ print "Warning: While setting SystemPowerManagement to ", state, ": ",
+ print e
+
+ def blankScreen(self):
+ """ Call dpms to switch off the screen immediately. """
+ os.system('xset dpms force standby')
+
+ def setScreensaverBlankOnly(self,blankonly):
+ """ Switches a screensaver to blankonly, so cpu hungry screensavers will not drain the poor
+ battery."""
+ # create a new DCOP-Client:
+ client = DCOPClient()
+ # connect the client to the local DCOP-server:
+ client.attach()
+ # create a DCOP-Application-Object to talk to amarok:
+ kdesktop = DCOPApp('kdesktop', client)
+ # call a DCOP-function:
+ ok, foo = kdesktop.KScreensaverIface.setBlankOnly(blankonly)
+ if not ok:
+ debug("Failed to set kdesktop screensaver to blankonly.")
+ return False
+ return True
+
+ def getIdleSeconds(self):
+ """ Get idle seconds from X server. """
+ return self.xscreen.getIdleSeconds()
+
+ def resetIdleSeconds(self):
+ """ Reset idle seconds. """
+ return self.xscreen.resetIdleSeconds()
+
+ def test(self):
+ """ Try all kinds of stuff and see what breaks."""
+ print "Trying to adjust brightness ..."
+ bright = self.getBrightness()
+ self.adjustBrightness(2)
+ time.sleep(1)
+ self.adjustBrightness(bright)
+ print " ... OK."
+
+ if self.USE_CPUFREQ:
+ print "Reading speeds from cpufreq..."
+ for cpu in self.cpus:
+ print self.getCpuState(cpu)
+ print "Report supported cpufreq policies..."
+ for policy in self.cpu_policy.keys():
+ print "Policy:", policy, "=", self.cpu_policy[policy]
+
+ print "Trying all cpufreq policies ..."
+ orig_pol = self.getCpuPolicy()
+ for pol in self.cpu_policy.keys():
+ print ". ", pol
+ self.setCpuPolicy(pol)
+ self.setCpuPolicy(orig_pol)
+ print "... OK."
+ else:
+ print "Skipping CPUFREQ: USE_CPUFREQ = False"
+
+ if self.SCREENSAVER_BLANKONLY:
+ if self.setScreensaverBlankOnly(True):
+ debug("Manipulating screensaver seems to work well.")
+ else:
+ debug("Manipulating screensaver seems broken.")
+
+ if isroot:
+ print "Trying to use Disk powermanagement and laptop_mode"
+ self.setDiskPM(True)
+ time.sleep(1)
+ self.setDiskPM(False)
+ print "...OK"
+ else:
+ print "Skipping DiskPM, not root."
+
+ if self.hasLid:
+ if self.getLidClosedState():
+ print "Lid is closed."
+ else:
+ print "Lid is currently open."
+
+ def setDiskPM(self,on=True):
+ """ Switches on laptop_mode and sets disks to advanced powermanagement."""
+ if self.USE_LAPTOP_MODE:
+ # Check if laptop_mode exists:
+ laptop_mode = "/proc/sys/vm/laptop_mode"
+ if not os.path.isfile(laptop_mode):
+ self.USE_LAPTOP_MODE = False
+ debug("Laptop mode not supported, no "+laptop_mode)
+ else:
+ fhandle = open(laptop_mode,"w")
+ if on: val = 1
+ else: val = 0
+ fhandle.write(str(val))
+ fhandle.close()
+
+ if self.USE_HDPARM:
+ # Set disks to advanced PM
+ for disk in self.disks:
+ if on:
+ # Switch on advanced powermanagement
+ cmd = "hdparm -B1 /dev/"+disk+" > /dev/null"
+ else:
+ # Switch off advanced powermanagement
+ cmd = "hdparm -B255 /dev/"+disk+" > /dev/null"
+ if os.system(cmd) != 0:
+ self.USE_HDPARM = False
+ print "Switching advanced powermanagement failed, not using hdparm anymore"
+
+ def suspend(self):
+ """ Run a suspend command, either via HAL or script. """
+ if SUSPEND_USE_HAL:
+ try:
+ self.computerObject.Suspend(0, dbus_interface="org.freedesktop.Hal.Device.SystemPowerManagement")
+ except dbus.DBusException:
+ pass #we get a DBusException: No reply within specified time
+ else:
+ self._sleepMode(S3_COMMAND)
+
+ def hibernate(self):
+ """ Implements suspend to disk (S4). """
+ if SUSPEND_USE_HAL:
+ try:
+ self.computerObject.Hibernate(dbus_interface="org.freedesktop.Hal.Device.SystemPowerManagement")
+ except dbus.DBusException:
+ pass #we get a DBusException: No reply within specified time
+ else:
+ self._sleepMode(S4_COMMAND)
+
+ def _sleepMode(self, command):
+ """ Send the system into S3 or S4 not using HAL. """
+ debug("Initiating a sleep cycle")
+ if os.system(command) != 0:
+ print "sleepmode failed. ("+command+")"
+ return False
+ debug("Everything is dandy")
+ return True
+
+ def shutdown(self):
+ """ Shutdown the system via HAL. """
+ self.computerObject.Shutdown(dbus_interface="org.freedesktop.Hal.Device.SystemPowerManagement")
+
+
+if __name__ == "__main__":
+ """ Run some tests, used for debugging."""
+ pman = PowerManage()
+ pman.showInfo()
+ pman.test()
+
diff --git a/powermanager/powermanager_ui.ui b/powermanager/powermanager_ui.ui
new file mode 100644
index 0000000..1fc9cfb
--- /dev/null
+++ b/powermanager/powermanager_ui.ui
@@ -0,0 +1,924 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>Powermanager</class>
+<widget class="QDialog">
+ <property name="name">
+ <cstring>Powermanager</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>568</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="caption">
+ <string>Powermanager</string>
+ </property>
+ <property name="sizeGripEnabled">
+ <bool>true</bool>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>11</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QTabWidget">
+ <property name="name">
+ <cstring>tabWidget</cstring>
+ </property>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget8</cstring>
+ </property>
+ <attribute name="title">
+ <string>Power Schemes</string>
+ </attribute>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>PerformanceGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Performance</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>Brightness</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>551</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>PerrformanceBrightnessSlider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>10</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Both</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Control the brightness setting in the active scheme</string>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>When system is inactive for</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>PerformanceMinutesSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3</cstring>
+ </property>
+ <property name="text">
+ <string>minutes ...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>311</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>PerformanceNothing</cstring>
+ </property>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>PerformanceFade</cstring>
+ </property>
+ <property name="text">
+ <string>Fade display</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>PerformanceSleepmode</cstring>
+ </property>
+ <property name="text">
+ <string>Initiate sleepmode</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Hibernate (S4)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Standby (S3)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>PerformanceSleepmodeCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>AutomaticGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Automatic</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_3</cstring>
+ </property>
+ <property name="text">
+ <string>Brightness</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>551</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>AutomaticBrightnessSlider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>10</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Both</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Control the brightness setting in the active scheme</string>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1_3</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_3</cstring>
+ </property>
+ <property name="text">
+ <string>When system is inactive for</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>AutomaticMinutesSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3_3</cstring>
+ </property>
+ <property name="text">
+ <string>minutes ...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4_3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>311</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3_3</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>AutomaticNothing</cstring>
+ </property>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>AutomaticFade</cstring>
+ </property>
+ <property name="text">
+ <string>Fade display</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>AutomaticSleepmode</cstring>
+ </property>
+ <property name="text">
+ <string>Initiate sleepmode</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Hibernate (S4)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Standby (S3)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>AutomaticSleepmodeCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>PowersaveGroup</cstring>
+ </property>
+ <property name="title">
+ <string>Powersave</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout4_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1_2</cstring>
+ </property>
+ <property name="text">
+ <string>Brightness</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>551</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QSlider">
+ <property name="name">
+ <cstring>PowersaveBrightnessSlider</cstring>
+ </property>
+ <property name="maxValue">
+ <number>10</number>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="tickmarks">
+ <enum>Both</enum>
+ </property>
+ <property name="whatsThis" stdset="0">
+ <string>Control the brightness setting in the active scheme</string>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1_2</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>When system is inactive for</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>PowersaveMinutesSpin</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel3_2</cstring>
+ </property>
+ <property name="text">
+ <string>minutes ...</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4_2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>311</width>
+ <height>21</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout3_2</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>PowersaveNothing</cstring>
+ </property>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>PowersaveFade</cstring>
+ </property>
+ <property name="text">
+ <string>Fade display</string>
+ </property>
+ </widget>
+ <widget class="QRadioButton">
+ <property name="name">
+ <cstring>PowersaveSleepmode</cstring>
+ </property>
+ <property name="text">
+ <string>Initiate sleepmode</string>
+ </property>
+ </widget>
+ <widget class="QComboBox">
+ <item>
+ <property name="text">
+ <string>Hibernate (S4)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Standby (S3)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>PowersaveSleepmodeCombo</cstring>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+ </widget>
+ </vbox>
+ </widget>
+ <widget class="QWidget">
+ <property name="name">
+ <cstring>Widget9</cstring>
+ </property>
+ <attribute name="title">
+ <string>Events</string>
+ </attribute>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <spacer row="1" column="0" rowspan="1" colspan="2">
+ <property name="name">
+ <cstring>spacer9</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>520</width>
+ <height>260</height>
+ </size>
+ </property>
+ </spacer>
+ <spacer row="0" column="1">
+ <property name="name">
+ <cstring>spacer10</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>110</width>
+ <height>80</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QLayoutWidget" row="0" column="0">
+ <property name="name">
+ <cstring>layout17</cstring>
+ </property>
+ <grid>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QComboBox" row="1" column="1">
+ <item>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Performance</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Automatic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Powersave</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Suspend (S3)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Hibernate (S4)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ACPluggedinCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLayoutWidget" row="2" column="0">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel7</cstring>
+ </property>
+ <property name="text">
+ <string>When battery power is below</string>
+ </property>
+ </widget>
+ <widget class="QSpinBox">
+ <property name="name">
+ <cstring>BatteryLowPercentage</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel8</cstring>
+ </property>
+ <property name="text">
+ <string>%</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <widget class="QLabel" row="0" column="0">
+ <property name="name">
+ <cstring>textLabel4</cstring>
+ </property>
+ <property name="text">
+ <string>When AC adapter is removed</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="2" column="1">
+ <item>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Performance</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Automatic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Powersave</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Suspend (S3)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Hibernate (S4)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>BatteryLowCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="1" column="0">
+ <property name="name">
+ <cstring>textLabel6</cstring>
+ </property>
+ <property name="text">
+ <string>When AC adapter is plugged in</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="3" column="1">
+ <item>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Performance</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Automatic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Powersave</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Suspend (S3)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Hibernate (S4)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>LidCloseCombo</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel" row="3" column="0">
+ <property name="name">
+ <cstring>textLabel5</cstring>
+ </property>
+ <property name="text">
+ <string>When the lid is closed</string>
+ </property>
+ </widget>
+ <widget class="QComboBox" row="0" column="1">
+ <item>
+ <property name="text">
+ <string>Do nothing</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Performance</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Automatic</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Switch to Powersave</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Suspend (S3)</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Hibernate (S4)</string>
+ </property>
+ </item>
+ <property name="name">
+ <cstring>ACRemovedCombo</cstring>
+ </property>
+ </widget>
+ </grid>
+ </widget>
+ </grid>
+ </widget>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>Layout1</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonHelp</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Help</string>
+ </property>
+ <property name="accel">
+ <string>F1</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Horizontal Spacing2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonOk</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;OK</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ <property name="default">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QPushButton">
+ <property name="name">
+ <cstring>buttonCancel</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Cancel</string>
+ </property>
+ <property name="accel">
+ <string></string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ </vbox>
+</widget>
+<connections>
+ <connection>
+ <sender>buttonOk</sender>
+ <signal>clicked()</signal>
+ <receiver>Powermanager</receiver>
+ <slot>accept()</slot>
+ </connection>
+ <connection>
+ <sender>buttonCancel</sender>
+ <signal>clicked()</signal>
+ <receiver>Powermanager</receiver>
+ <slot>reject()</slot>
+ </connection>
+</connections>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/powermanager/recompile-ui-files b/powermanager/recompile-ui-files
new file mode 100644
index 0000000..170797c
--- /dev/null
+++ b/powermanager/recompile-ui-files
@@ -0,0 +1,6 @@
+#!/bin/bash
+pyuic -tr i18n tooltip.ui -o tooltip.py
+pyuic -tr i18n guidance_power_manager_ui.ui -o guidance_power_manager_ui.py
+pyuic -tr i18n notify.ui -o notify.py
+
+
diff --git a/powermanager/tooltip.py b/powermanager/tooltip.py
new file mode 100644
index 0000000..37b62f3
--- /dev/null
+++ b/powermanager/tooltip.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'tooltip.ui'
+#
+# Created: Thu Apr 10 00:50:39 2008
+# by: The PyQt User Interface Compiler (pyuic) 3.17.4
+#
+# WARNING! All changes made in this file will be lost!
+
+
+import sys
+from qt import *
+from kdecore import KCmdLineArgs, KApplication
+from kdecore import i18n
+from kdeui import *
+
+from kdeui import *
+
+class ToolTip(QWidget):
+ def __init__(self,parent = None,name = None,fl = 0):
+ QWidget.__init__(self,parent,name,fl)
+
+ if not name:
+ self.setName("ToolTip")
+
+ self.setSizePolicy(QSizePolicy(QSizePolicy.MinimumExpanding,QSizePolicy.MinimumExpanding,0,0,self.sizePolicy().hasHeightForWidth()))
+ self.setMinimumSize(QSize(240,0))
+ self.setBaseSize(QSize(200,0))
+
+ ToolTipLayout = QVBoxLayout(self,0,6,"ToolTipLayout")
+
+ self.languageChange()
+
+ self.resize(QSize(300,80).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+
+ def languageChange(self):
+ self.setCaption(i18n("Form1"))
+
+
+ def ToolTip_destroyed(self,a0):
+ print "ToolTip.ToolTip_destroyed(QObject*): Not implemented yet"
+
+if __name__ == "__main__":
+ appname = ""
+ description = ""
+ version = ""
+
+ KCmdLineArgs.init (sys.argv, appname, description, version)
+ a = KApplication ()
+
+ QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
+ w = ToolTip()
+ a.setMainWidget(w)
+ w.show()
+ a.exec_loop()
diff --git a/powermanager/tooltip.ui b/powermanager/tooltip.ui
new file mode 100644
index 0000000..8d7640d
--- /dev/null
+++ b/powermanager/tooltip.ui
@@ -0,0 +1,53 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>ToolTip</class>
+<comment>Python:from kdeui import *</comment>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>ToolTip</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>300</width>
+ <height>80</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>3</hsizetype>
+ <vsizetype>3</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>240</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="baseSize">
+ <size>
+ <width>200</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="caption">
+ <string>Form1</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ </vbox>
+</widget>
+<slots>
+ <slot>ToolTip_destroyed( QObject * )</slot>
+</slots>
+<pixmapfunction>QPixmap</pixmapfunction>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
diff --git a/review_guidance_malaga.pdf b/review_guidance_malaga.pdf
new file mode 100644
index 0000000..a4ef5ec
--- /dev/null
+++ b/review_guidance_malaga.pdf
Binary files differ
diff --git a/serviceconfig/serviceconfig.desktop b/serviceconfig/serviceconfig.desktop
new file mode 100644
index 0000000..9f8cfb7
--- /dev/null
+++ b/serviceconfig/serviceconfig.desktop
@@ -0,0 +1,50 @@
+[Desktop Entry]
+Name=System Services
+Name[el]=Υπηρεσίες συστήματος
+Name[es]=Servicios del sistema
+Name[et]=Süsteemsed teenused
+Name[it]=Servizi di sistema
+Name[ja]=システムサービス
+Name[nl]=Systeemdiensten
+Name[pt]=Serviços do Sistema
+Name[pt_BR]=Serviços do Sistema
+Name[sr]=Системски сервиси
+Name[sr@Latn]=Sistemski servisi
+Name[sv]=Systemtjänster
+Name[xx]=xxSystem Servicesxx
+name[en_GB]=System Services
+Comment=System Service Configuration
+Comment[el]=Ρυθμίσεις υπηρεσιών συστήματος
+Comment[es]=Configuración del servicio del sistema
+Comment[et]=Süsteemi teenuste seadistamine
+Comment[it]=Configurazione dei servizi di sistema
+Comment[ja]=システムサービスの設定
+Comment[nl]=Systeemdiensten instellen
+Comment[pt]=Configuração dos Serviços do Sistema
+Comment[pt_BR]=Configuração dos Serviços do Sistema
+Comment[sr]=Подешавање системских сервиса
+Comment[sr@Latn]=Podešavanje sistemskih servisa
+Comment[sv]=Inställning av systemtjänster
+Comment[xx]=xxSystem Service Configurationxx
+Icon=daemons.png
+Encoding=UTF-8
+X-KDE-ModuleType=Library
+X-KDE-Library=serviceconfig
+X-KDE-FactoryName=serviceconfig
+X-KDE-RootOnly=true
+Type=Application
+Exec=kcmshell System/serviceconfig
+Categories=Qt;KDE;X-KDE-settings-system;
+GenericName=Runlevel Editor
+GenericName[el]=Επεξεργαστής επιπέδων εκτέλεσης
+GenericName[es]=Editor del nivel de ejecución
+GenericName[et]=Käitustasemete redaktor
+GenericName[it]=Editor dei runlevel
+GenericName[ja]=ランレベルエディタ
+GenericName[nl]=Runlevel-bewerker
+GenericName[pt]=Editor de Níveis de Execução
+GenericName[pt_BR]=Editor de Níveis de Execução
+GenericName[sr]=Уређивач радних нивоа
+GenericName[sr@Latn]=Uređivač radnih nivoa
+GenericName[sv]=Editor för körnivå
+GenericName[xx]=xxRunlevel Editorxx
diff --git a/serviceconfig/serviceconfig.py b/serviceconfig/serviceconfig.py
new file mode 100755
index 0000000..0da85a0
--- /dev/null
+++ b/serviceconfig/serviceconfig.py
@@ -0,0 +1,1481 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# serviceconfig.py - description #
+# ------------------------------ #
+# begin : Wed Apr 30 2003 #
+# copyright : (C) 2003-2006 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdeui import *
+from kdecore import *
+import sys
+import os
+import os.path
+import posix
+import re
+from pickle import Pickler,Unpickler
+import locale
+
+programname = "Services Configuration"
+version = "0.8.1"
+
+# Holding the name of the distribution, defaults to ...
+DISTRO = "Mandrake"
+
+# These get overridden for Debian.
+initdir = "/etc/init.d"
+rcdir = "/etc/rc.d"
+
+chkconfigpath = "/sbin/chkconfig"
+statusblacklist = ['iptables']
+
+# Are we running as a separate standalone application or in KControl?
+standalone = __name__=='__main__'
+
+# Running as the root user or not?
+isroot = os.getuid()==0
+
+#print "Warning:: root check is disabled"
+#isroot = True
+
+############################################################################
+class DescriptionCache(object):
+
+ proto = 2 ## Choose latest available version of Pickler
+ _lines = []
+ data = {}
+
+ def __init__(self,filename,path="/tmp"):
+ if not os.path.isdir(path):
+ print path, "is not a valid directory, can't cache."
+
+ self.filename = os.path.join(path,filename)
+
+ def loadCache(self):
+ try:
+ fhandle = open(self.filename, "r")
+ pickler = Unpickler(fhandle)
+ self.data = pickler.load()
+ fhandle.close()
+ except IOError, e:
+ print "Couldn't load file:", e
+ print "Not reading description cache data"
+
+ def saveCache(self):
+ """ Save pickled dataobject to the file. We don't want the user to be able to save a datastructure that root
+ will read in since that would have implications for security."""
+ if not isroot:
+ print "Not saving description cache data for security reasons, we're not root"
+ return
+
+ try:
+ fhandle = open(self.filename, "w")
+ pickler = Pickler(fhandle, self.proto)
+ pickler.dump(self.data)
+ fhandle.close()
+ #print "Saved description cache data to ", self.filename
+ except IOError, e:
+ print "Can't cache:", e
+
+ def add(self,filename,packagename,description):
+ self.data[filename] = (packagename,description)
+
+ def readDescription(self,filename):
+ """ Tries to look up the package description, returns None if it can't find it."""
+ try:
+ return self.data[filename][1]
+ except KeyError:
+ return None
+
+ def readPackagename(self,filename):
+ """ Tries to look up the Packagename, returns None if it can't find it."""
+ try:
+ return self.data[filename][0]
+ except KeyError:
+ return None
+
+############################################################################
+# Holds all of the info about a single service.
+class Service(object):
+ ########################################################################
+ def __init__(self,context,filename):
+ self.context = context
+ self.filename = filename
+ self.longname = ""
+ self.description = ""
+ self.runlevels = []
+ self.gotStatus = False
+ self.statusable = False
+ self.status = unicode(i18n("?"))
+ self.startpriority = "50"
+ self.killpriority = "50"
+
+ try:
+ fhandle = open(os.path.join(initdir,self.filename))
+ place = 0
+ for line in fhandle.readlines():
+ line = line.strip()
+ if place==0:
+ if line.startswith("#!/bin/sh") or line.startswith("#! /bin/sh") or \
+ line.startswith("#!/bin/bash") or line.startswith("#! /bin/bash"):
+ place = 1
+ elif place==1: # Grab the short description line.
+ if line!="#":
+ if line.startswith("# chkconfig:"):
+ parts = line[12:].split()
+ if len(parts)>=1:
+ for c in parts[0]:
+ try:
+ rl = self.context.getRunLevelByNumber(int(c))
+ if rl is not None:
+ self.runlevels.append(rl)
+ rl.availableservices.append(self)
+ except ValueError:
+ pass
+ if len(parts)>=2:
+ self.startpriority = parts[1]
+ if len(parts)>=3:
+ self.killpriority = parts[2]
+ else:
+ self.longname = line[2:]
+ place = 2
+ elif place==2: # Look for the description line
+ if line.startswith("# chkconfig:"):
+ parts = line[12:].split()
+ if len(parts)>=1:
+ for c in parts[0]:
+ try:
+ rl = self.context.getRunLevelByNumber(int(c))
+ if rl is not None:
+ self.runlevels.append(rl)
+ rl.availableservices.append(self)
+ except ValueError:
+ pass
+ if len(parts)>=2:
+ self.startpriority = parts[1]
+ if len(parts)>=3:
+ self.killpriority = parts[2]
+ elif line.startswith("# description:"):
+ self.description = line[15:]
+ if self.description[-1:]=="\\":
+ self.description = self.description[:-1]
+ place = 3
+ else:
+ place = 2
+ elif place==3: # Grab a description continuation line.
+ if line[0]=="#":
+ self.description += line[1:].strip()
+ if self.description[-1:]=="\\":
+ self.description = self.description[:-1]
+ else:
+ place = 2
+ if line.startswith("status)"):
+ self.statusable = True
+
+ fhandle.close()
+ if self.filename in statusblacklist:
+ self.statusable = False
+ except IOError:
+ pass
+
+ if self.longname=="":
+ self.longname = self.filename
+
+ if len(self.runlevels)==0:
+ self.runlevels = self.context.runlevels[:]
+ for rl in self.context.runlevels:
+ rl.availableservices.append(self)
+
+ ########################################################################
+ def isAvailableInRunlevel(self,level):
+ return level in self.runlevels
+
+ ########################################################################
+ def fetchStatus(self):
+ global initdir
+ if self.statusable:
+ self.status = os.popen(os.path.join(initdir,self.filename) + " status").read()
+ self.gotStatus = True
+
+ ########################################################################
+ def doStartCommand(self):
+ self.gotStatus = False
+ return "export CONSOLETYPE=serial && " + os.path.join(self.context.initdir,self.filename) + " start"
+
+ ########################################################################
+ def doStopCommand(self):
+ self.gotStatus = False
+ return "export CONSOLETYPE=serial && " + os.path.join(self.context.initdir,self.filename) + " stop"
+
+ ########################################################################
+ def doRestartCommand(self):
+ self.gotStatus = False
+ return "export CONSOLETYPE=serial && " + os.path.join(self.context.initdir,self.filename) + " restart"
+
+############################################################################
+class ServiceContext(object):
+ def __init__(self):
+ self.runlevels = []
+ self.services = {}
+
+ def loadInfo(self): pass
+ def currentRunLevel(self): pass
+ def newRunLevel(self): pass
+ def newService(self,file): pass
+ def getRunLevelByNumber(self,num):
+ for rl in self.runlevels:
+ if rl.levelnum==num:
+ return rl
+ return None
+
+############################################################################
+def getServiceContext():
+ global DISTRO
+ # Detect if we are running on Debian, Mandrake or what.
+
+ # Uncomment here to test Gentoo compatibility.
+ #DISTRO = "Gentoo"; return GentooServiceContext()
+
+ # Check for Debian - is this the 'good' way?
+ etc_issue = '/etc/issue'
+
+ # Knoppix and Kanotix have a symlink called /etc/issue
+ if os.path.islink(etc_issue):
+ etc_issue = posix.readlink(etc_issue)
+
+ if os.path.isfile(etc_issue):
+ etc_issue = open(etc_issue)
+ system_name = etc_issue.readline()
+ etc_issue.close()
+ if system_name.startswith("Debian") or system_name.startswith("Ubuntu"):
+ DISTRO = "Debian"
+ return DebianServiceContext()
+
+ # Might this be Gentoo Linux?
+ if os.path.isfile('/etc/gentoo-release'):
+ DISTRO = "Gentoo"
+ return GentooServiceContext()
+
+ # Mandrake is default.
+ return MandrakeServiceContext()
+
+############################################################################
+class MandrakeServiceContext(ServiceContext):
+ ########################################################################
+ def __init__(self):
+ ServiceContext.__init__(self)
+ self.initdir = "/etc/init.d"
+ self.rcdir = "/etc/rc.d"
+ self.runlevels.append(SysVRunLevel(self,0,i18n("Halt (0)")))
+ self.runlevels.append(SysVRunLevel(self,1,i18n("Single User Mode (1)")))
+ self.runlevels.append(SysVRunLevel(self,2,i18n("Multiuser mode with Networking (2)")))
+ self.runlevels.append(SysVRunLevel(self,3,i18n("Multiuser mode (3)")))
+ self.__currentrunlevel = SysVRunLevel(self,5,i18n("GUI Multiuser mode (5)"))
+ self.runlevels.append(self.__currentrunlevel)
+ self.runlevels.append(SysVRunLevel(self,6,i18n("Reboot (6)")))
+ self._filenametoservice = {}
+
+ ########################################################################
+ def currentRunLevel(self):
+ return self.__currentrunlevel
+
+ ########################################################################
+ def loadInfo(self):
+ # Load in all of the service info.
+ for filename in os.listdir(self.initdir):
+ newservice = self.newService(filename)
+ self.services[filename] = newservice
+ self._filenametoservice[filename] = newservice
+
+ # Now load in which services are active in which run level.
+ for rl in self.runlevels:
+ rl.loadInfo()
+
+ ########################################################################
+ def newService(self,file):
+ return Service(self,file)
+
+############################################################################
+class SysVRunLevel(object):
+ ########################################################################
+ def __init__(self,context,levelnum,name):
+ self.context = context
+ self.levelnum = levelnum
+ self.name = name
+ self.availableservices = []
+ self.activeservices = []
+ self.leveldir = os.path.join(self.context.rcdir,"rc"+str(self.levelnum)+".d")
+
+ ########################################################################
+ def loadInfo(self):
+ #print "SysVRunLevel(object).loadInfo",self.leveldir
+ for filename in os.listdir(self.leveldir):
+ if filename.startswith("S") and os.path.islink(self.leveldir+"/"+filename):
+ target = os.path.basename(posix.readlink(self.leveldir+"/"+filename))
+ if target in self.context._filenametoservice:
+ self.activeservices.append(self.context._filenametoservice[target])
+ #else:
+ # print "Couldn't find service '%s' in runlevel %i." % (target, self.levelnum)
+
+ ########################################################################
+ def isActiveAtBoot(self,service):
+ return service in self.activeservices
+
+ ########################################################################
+ def setActiveAtBoot(self,service,activeflag):
+ leveldir = self.leveldir
+
+ # Remove any existing links to the service script
+ for filename in os.listdir(leveldir):
+ link = os.path.join(leveldir,filename)
+ if os.path.islink(link):
+ target = os.path.basename(posix.readlink(os.path.join(leveldir,filename)))
+ if target==service.filename:
+ # Kill target.
+ #print "Killing link",link
+ os.remove(link)
+
+ if activeflag:
+ #print "symlink(",leveldir+"/S"+service.startpriority+service.filename,",",self.context.initdir+"/"+service.filename,")"
+ posix.symlink( os.path.join(self.context.initdir,service.filename),
+ os.path.join(leveldir,"S"+service.startpriority+service.filename))
+ self.activeservices.append(service)
+ else:
+ #print "symlink(", leveldir+"/K"+service.killpriority+service.filename,",",self.context.initdir+"/"+service.filename,")"
+ posix.symlink( os.path.join(self.context.initdir,service.filename),
+ os.path.join(leveldir,"K"+service.killpriority+service.filename))
+ self.activeservices.remove(service)
+
+############################################################################
+#
+# Here's the Debian specific stuff, a Service, a ServiceContext and a RunLevel
+#
+# Enjoy. ;-)
+
+class DebianService(Service):
+ """ Mapping for services which don't use a pidfile like /var/run/<service>.pid
+ Services not in here are lookup up "normally" """
+ pidfiles = { 'acpid':'acpid.socket',
+ 'spamassassin':'spamd.pid',
+ 'dbus':'dbus/pid',
+ 'klogd':'klogd/klogd.pid',
+ 'samba':'samba/smbd.pid',
+ 'zope':'zope/default/Z2.pid',
+ 'mysql':'mysqld/mysqld.pid',
+ 'hald':'hal/hald.pid',
+ 'sysklogd':'syslogd.pid',
+ 'ssh':'sshd.pid',
+ 'cron':'crond.pid',
+ 'slapd':'slapd/slapd.pid',
+ 'laptop-mode':'laptop-mode-enabled',
+ 'cupsys':'cups/cupsd.pid'
+ }
+
+ ########################################################################
+ def __init__(self,context,filename):
+ self.context = context
+ self.filename = filename
+ self.path_and_filename = os.path.join(context.initdir, self.filename)
+ self.packagename = False
+ self.description = i18n("Description is being loaded.")
+ self.runlevels = []
+ self.gotStatus = False
+ self.statusable = False
+ self.status = unicode(i18n("not running"))
+ self.startpriority = "50"
+ self.killpriority = "50"
+ self.getStatusFrom = "pidfile"
+
+ self.fetchStatus()
+
+ if len(self.runlevels)==0:
+ self.runlevels = self.context.runlevels[:]
+ for rl in self.context.runlevels:
+ rl.availableservices.append(self)
+
+ def fetchDescription(self):
+ self.description = self.context.descriptioncache.readDescription(self.filename)
+ self.packagename = self.context.descriptioncache.readPackagename(self.filename)
+ if not self.description:
+ if not self.packagename:
+ self.fetchPackageName()
+ #print " packagename", self.packagename
+ if self.packagename:
+ # FIXME: don't assume english output!
+ command = "apt-cache show " + self.packagename
+
+ self.description = ""
+ description_label = "Description:"
+ for line in os.popen(command).readlines():
+ if line.startswith(description_label):
+ self.description = line.strip()[len(description_label):]
+
+ self.context.descriptioncache.add(self.filename, self.packagename, self.description, )
+ else:
+ self.description = i18n("Couldn't fetch a description from apt.")
+
+ def fetchPackageName(self):
+ if os.path.isfile(self.path_and_filename):
+ command = "dpkg -S " + self.path_and_filename
+ self.packagename = None # as opposed to False( = not yet fetched)
+ for line in os.popen(command).readlines():
+ if ":" in line:
+ self.packagename = line.strip().split(":")[0]
+ else:
+ print self.path_and_filename + " is no file or does not exist!"
+
+ ########################################################################
+ def fetchStatus(self):
+ if self.getStatusFrom == "pidfile":
+ self.fetchStatusFromPidFile()
+ elif self.getStatusFrom == "top":
+ # FIXME: not yet implemented
+ self.fetchStatusFromTop()
+
+ ########################################################################
+ def fetchStatusFromTop(self):
+ # FIXME, incomplete.
+ top = os.popen("ps -aux")
+
+ ########################################################################
+ def fetchStatusFromPidFile(self):
+ try:
+ if os.path.isfile(os.path.join('/var/run',self.pidfiles[self.filename])):
+ self.status = unicode(i18n("running"))
+ else:
+ self.status = unicode(i18n("not running"))
+ except KeyError:
+ if os.path.isfile(os.path.join('/var/run',self.filename + '.pid')):
+ self.status = unicode(i18n("running"))
+ else:
+ self.status = unicode(i18n("not running"))
+ self.gotStatus = True
+
+############################################################################
+class DebianServiceContext(ServiceContext):
+ """ bootscripts are scripts that are only running once at boot and where starting,
+ stopping and restarting does not really make sense, generally exclude these from
+ serviceconfig list."""
+ bootscripts = ( 'README',
+ 'acpi-support',
+ 'xorg-common',
+ 'binfmt-support',
+ 'bootclean.sh',
+ 'bootmisc.sh',
+ 'checkfs.sh',
+ 'checkroot.sh',
+ 'console-screen.sh',
+ 'dns-clean',
+ 'glibc.sh',
+ 'halt',
+ 'hostname.sh',
+ 'hwclock.sh',
+ 'hwclockfirst.sh',
+ 'initrd-tools.sh',
+ 'keymap.sh',
+ 'makedev',
+ 'module-init-tools',
+ 'mountall.sh',
+ 'mountvirtfs',
+ 'mountnfs.sh',
+ 'nvidia-kernel',
+ 'procps.sh',
+ 'pppd-dns',
+ 'powernowd.early',
+ 'rc',
+ 'rc.local',
+ 'rcS',
+ 'readahead',
+ 'readahead-desktop',
+ 'reboot',
+ 'rmnologin',
+ 'screen-cleanup',
+ 'screen',
+ 'sendsigs',
+ 'single',
+ 'skeleton',
+ 'stop-bootlogd',
+ 'stop-readahead',
+ 'umountfs',
+ 'umountnfs.sh',
+ 'urandom'
+ )
+
+ def __init__(self):
+ """
+ Debian uses the following runlevels:
+
+ 1 (single-user mode),
+ 2 through 5 (multiuser modes), and
+ 0 (halt the system),
+ 6 (reboot the system).
+
+ Runlevels 7, 8, and 9 can also be used but their rc directories are not populated
+ when packages are installed. They are intentionally left out here, but should be
+ easy to add.
+ """
+ ServiceContext.__init__(self)
+
+ self.initdir = "/etc/init.d"
+ self.rcdir = "/etc"
+ self.relative_initdir = "../init.d"
+
+ deb_runlevels = { 0 : i18n("Halt (0)"),
+ 1 : i18n("Single User Mode (1)"),
+ "S" : i18n("Single User Mode (S)"),
+ 2 : i18n("Multiuser Mode (2)"),
+ 3 : i18n("Multiuser Mode (3)"),
+ 4 : i18n("Multiuser Mode (4)"),
+ 5 : i18n("Multiuser Mode (5)"),
+ 6 : i18n("Reboot (6)") }
+
+ # Lookup what runlevel we're in.
+ shell_output = os.popen('/sbin/runlevel')
+ raw_runlevel = shell_output.readline()
+ shell_output.close()
+ cur_runlevel = raw_runlevel[2:-1]
+
+ for num in deb_runlevels.keys():
+ if cur_runlevel.isdigit():
+ if num == int(cur_runlevel):
+ self.__currentrunlevel = DebianRunLevel(self, num, deb_runlevels[num])
+ self.runlevels.append(self.__currentrunlevel)
+ else:
+ self.runlevels.append(DebianRunLevel(self, num, deb_runlevels[num]))
+ else:
+ if num == cur_runlevel:
+ self.__currentrunlevel = DebianRunLevel(self, num, deb_runlevels[num])
+ self.runlevels.append(self.__currentrunlevel)
+ else:
+ self.runlevels.append(DebianRunLevel(self, num, deb_runlevels[num]))
+ self._filenametoservice = {}
+
+ ########################################################################
+ def currentRunLevel(self):
+ return self.__currentrunlevel
+
+ ########################################################################
+ def loadInfo(self):
+ # Load in all of the service info.
+ initscripts = os.listdir(self.initdir)
+ # Remove "bootscripts" from our list.
+ servicefiles = []
+ self.services = []
+ for script in initscripts:
+ if script not in self.bootscripts:
+ try:
+ # Exclude backup copies.
+ if script.split(".")[1] not in ("orig","dpkg-dist"):
+ servicefiles.append(script)
+ except IndexError:
+ servicefiles.append(script)
+
+ for filename in servicefiles:
+ if filename not in self.bootscripts:
+ newservice = self.newService(filename)
+ self.services.append(newservice)
+ self._filenametoservice[filename] = newservice
+
+ # Now load in which services are active in which run level.
+ for rl in self.runlevels:
+ rl.loadInfo()
+
+ ########################################################################
+ def newService(self,file):
+ return DebianService(self,file)
+
+############################################################################
+class DebianRunLevel(SysVRunLevel):
+ ########################################################################
+ def setActiveAtBoot(self,service,activeflag):
+ """ Adds a Service to a runlevel.
+
+ Activating a service adds start symlinks in the respective levels, and
+ maintains symlinks in levels 0, 1 and 6 (halt, single user and reboot).
+ """
+ leveldir = self.context.rcdir
+
+ def createSymlink(target, linkname):
+ """ Creates a symlink after having checked if it makes sense to do so.
+ We first change to the rcdir, then create a relative symlink and then
+ change back, sounds weird, but Debian's own scripts break when the
+ symlinks are not relative.
+
+ Returns True or False and prints debugging message.
+ """
+ odir = os.getcwd()
+ tmpdir = "/".join(linkname.split("/")[0:-1]) # FIXME use os.path
+ os.chdir(tmpdir)
+
+ if not os.path.isfile(target) or os.path.islink(target):
+ #print target + " is not a valid filename. Can't create symlink."
+ os.chdir(odir)
+ return False
+
+ if os.path.islink(linkname) and posix.readlink(linkname) == target:
+ #print "Symlink " + linkname + " -> " + target + " already exists."
+ os.chdir(odir)
+ return True
+
+ if os.path.islink(linkname) and posix.readlink(linkname) != target:
+ #print "Removing symlink, " + linkname + ", the target does not match."
+ try:
+ posix.unlink(linkname)
+ except OSError, e:
+ print "Couldn't remove symlink " + linkname + " :: " + str(e)
+
+ try:
+ posix.symlink(target, linkname)
+ #print "Created symlink " + linkname + " -> " + target + " successfully."
+ os.chdir(odir)
+ return True
+ except OSError, e:
+ #print "Creating symlink " + linkname + " -> " + target + " failed: " + str(e)
+ os.chdir(odir)
+ return False
+
+ def removeSymlink(servicename, runleveldir, KorS):
+ if KorS not in ('K','S'):
+ print "OUCH, symlinks have to start with S or K!"
+ return
+ for link in os.listdir(runleveldir):
+ if (link[0] == KorS) and (link[3:] == servicename):
+ #print "Killing ...", runleveldir+link
+ posix.unlink(os.path.join(runleveldir,link))
+
+ # In these levels, the K symlinks are created.
+ stop_levels = (0,1,6)
+ l_num = str(self.levelnum)
+
+ if activeflag:
+ target = os.path.join(self.context.relative_initdir,service.filename)
+ createSymlink(target, os.path.join(self.context.rcdir,"rc"+l_num+".d","S"+service.startpriority+service.filename))
+ # Kill links:
+ for i in stop_levels:
+ createSymlink(target, os.path.join(self.context.rcdir,"rc"+str(i)+".d","K"+service.killpriority+service.filename))
+ self.activeservices.append(service)
+ else:
+
+ try:
+ s_link = os.path.join(leveldir,"rc"+l_num+".d","S"+service.startpriority+service.filename)
+ runleveldir = os.path.join(leveldir,"rc"+l_num+".d")
+ #print "Removing symlink " + s_link
+ removeSymlink(service.filename, runleveldir, "S")
+ except OSError, e:
+ print "Could not remove symlink " + s_link + " :: " + str(e)
+
+ self.activeservices.remove(service)
+
+ # check if service has to be started in other runlevels:
+ # Y: Don't touch links
+ # N: Remove symlinks
+
+ #print "Should remove symlinks here."
+ for rl in self.context.runlevels:
+ if service in rl.activeservices:
+ #print "Service " + service.filename + " is still used in runlevel " + \
+ # str(rl.levelnum) + ", not removing K-Links."
+ break
+ else:
+ # The service is not being used anywhere. We can remove it now.
+
+ #print "Service completely inactive, removing K-links."
+ for i in stop_levels:
+ k_link = os.path.join(leveldir,"rc"+str(i)+".d","K"+service.killpriority+service.filename)
+ runleveldir = os.path.join(leveldir,"rc"+str(i)+".d")
+
+ try:
+ #print "Removing " + k_link
+ removeSymlink(service.filename, runleveldir, "K")
+ except OSError, e:
+ print "Could not remove " + k_link + " :: " + str(e)
+
+
+############################################################################
+#
+# Here come all the Gentoo specific pieces.
+# Gentoo Linux has a special way of organizing the init and runlevels stuff.
+
+class GentooService(DebianService):
+ """ GentooService
+
+ Services in Gentoo are handled very much like the ones in Debian, except
+ that there is rc-status to check whether a service is running or not.
+ """
+ ########################################################################
+ def fetchStatus(self):
+ # rc-status is run everytime we check a service, this might be some
+ # more efficiently solved.
+ # FIXME: add check if 'rc-status' is in current PATH
+ rc_status_fhandle = os.popen('rc-status')
+ for line in rc_status_fhandle.readlines():
+ parts = line.split()
+ if parts[0] == self.filename:
+ # Who needs Perl? ;-)
+ # FIXME: set the terminal type to serial when running rc-status.
+ self.status = line.split(';01m')[2].split('\x1b[')[0].strip()
+ rc_status_fhandle.close()
+ self.gotStatus = True
+
+ def fetchDescription(self):
+ # Temporary vars.
+ description_lines = []
+ first_block = True
+
+ if os.path.isfile(self.path_and_filename):
+ fhandle = open(self.path_and_filename)
+ for line in fhandle.readlines():
+ # Ignore blank lines and CVS Headers:
+ if len(line.strip()) > 1 and line[:2] != '#!' and line[:10] != '# $Header:':
+ # Cut off newline at the end.
+ line = line[:-1]
+ # The first commencted block might be the description.
+ if first_block:
+ if line[0] != '#': first_block = False
+ else: description_lines.append(line[1:].strip())
+ fhandle.close()
+ else:
+ print self.path_and_filename + " is no file or does not exist!"
+
+ if len(description_lines):
+ self.description = "\n".join(description_lines)
+ else:
+ self.description = i18n("Could not extract description.")
+
+ ########################################################################
+ def doZapCommand(self):
+ self.gotStatus = False
+ return "export CONSOLETYPE=serial && rc-status"
+ return "export CONSOLETYPE=serial && "+os.path.join(self.context.initdir,self.filename)+" zap"
+
+############################################################################
+class GentooServiceContext(ServiceContext):
+ ########################################################################
+ def __init__(self):
+ """
+ Gentoo uses customized runlevels, see the Gentoo Documentation for
+ the dirty details. The runlevels are defined in inittab, so we have
+ a look there.
+
+ - Runlevel links reside in /etc/runlevels/${RUNLEVEL}/.
+ - Default existing runlevels are boot/, nonetwork/ and default/.
+ - Custom runlevels and default are defined in /etc/inittab.
+
+ Dependencies between runscripts / initscrips are not handled here,
+ this is responsibility of rc-update. Also, after rc-update has run,
+ some items might be necessary to refresh.
+
+ """
+ ServiceContext.__init__(self)
+
+ # Here comes the Gentoo specific stuff.
+ # First off, parsing inittab for runlevels available.
+ def parseInittab():
+ if os.path.isfile(self.inittab):
+ inittab_fhandle = open(self.inittab, 'r')
+ rl_appended = []
+ for line in inittab_fhandle.readlines():
+ line = line[:-1]
+ # Ignore blank and commented lines.
+ if len(line.strip()) > 1 and line.strip()[0] != '#':
+ parts = line.split(':')
+ if len(parts) == 4 and parts[2] == 'wait':
+ rl_num, rl_label = parts[1], parts[3].split()[1] +' ('+parts[1]+')'
+ rl_name = parts[3].split()[1]
+ #print "Num: " + rl_num + " Label: " + rl_label + " Name: " + parts[3].split()[1]
+ # This is a runlevel in Gentoo, is it the current one?
+ if parts[1] == self.current_runlevelnum:
+ self.__currentrunlevel = GentooRunLevel(self, rl_num, rl_name, rl_label)
+ self.runlevels.append(self.__currentrunlevel)
+ rl_appended.append(rl_name)
+ else:
+ if rl_name not in rl_appended:
+ self.runlevels.append(GentooRunLevel(self, rl_num, rl_name, rl_label))
+ rl_appended.append(rl_name)
+ elif len(parts) == 4 and parts[2] == 'bootwait':
+ # The boot runlevel does not have a 'real' runlevel number, so we use 0.
+ self.runlevels.append(GentooRunLevel(self, 0, parts[3].split()[1], 'boot'))
+ rl_appended.append('boot')
+ inittab_fhandle.close()
+
+ def currentRunLevelNum():
+ runlevelbin = "/sbin/runlevel"
+ if not os.path.isfile(runlevelbin):
+ print "Couldn't find %s, that sucks. :o" % runlevelbin
+ sys.exit(1)
+ shell_output = os.popen(runlevelbin)
+ raw_runlevel = shell_output.readline()
+ shell_output.close()
+ return raw_runlevel[2:-1]
+
+ self.initdir = "/etc/init.d"
+ self.rcdir = "/etc/runlevels"
+ self.inittab = "/etc/inittab"
+
+ #self.initdir = "/home/sebas/gentooinit/init.d"
+ #self.rcdir = "/home/sebas/gentooinit/runlevels"
+ #self.inittab = "/home/sebas/gentooinit/inittab"
+
+ self.current_runlevelnum = currentRunLevelNum()
+ parseInittab()
+ self._filenametoservice = {}
+
+ ########################################################################
+ def currentRunLevel(self):
+ return self.__currentrunlevel
+
+ ########################################################################
+ def loadInfo(self):
+ """ Load in all of the service info for every file in the init.d directory. """
+ for filename in os.listdir(self.initdir):
+ # Exclude backup files from portage and .sh files like shutdown, depscan, etc.
+ if (filename.find('._cfg')<0) and not filename.endswith(".sh"):
+ newservice = self.newService(filename)
+ self.services[filename] = newservice
+ self._filenametoservice[filename] = newservice
+
+ # Now load in which services are active in which run level.
+ for rl in self.runlevels:
+ rl.loadInfo()
+
+ ########################################################################
+ def newService(self,file):
+ return GentooService(self,file)
+
+
+############################################################################
+class GentooRunLevel(SysVRunLevel):
+ """ Gentoo Runlevel
+
+ GentooRunLevel has an additional parameter. the 'label' gets displayed in the
+ 'Run level:' drop-down menu, the 'name' is used. 'name' is internally handled
+ in very much the same way as SysVRunLevel.levelnum. It corresponds to the
+ actual runlevels Gentoo uses, such as /etc/runlevels/default/, rather than
+ using SysVRunLevel.levelnum, as it would be in a SysV init. """
+
+ ########################################################################
+ def __init__(self,context,levelnum,dirname,label):
+ SysVRunLevel.__init__(self,context,levelnum,label)
+
+ self.dirname = dirname
+
+ self.leveldir = self.context.rcdir+'/'+self.dirname
+ # Not all runlevels in Gentoo correspond to a runlevel directory.
+ self.no_dirs = []
+ if not os.path.isdir(self.leveldir):
+ #self.no_dirs = ('reboot', 'shutdown', 'single')
+ if self.dirname not in self.no_dirs:
+ self.no_dirs.append(self.dirname)
+ print "Runlevel " + self.leveldir + " is not a valid path. '" + self.dirname + "'"
+ self.leveldir = False
+ return
+
+ ########################################################################
+ def loadInfo(self):
+ """ Only look up active services if runlevel path exists, else leave empty. """
+ if self.leveldir:
+ print "GentooRunLevel.loadInfo() from " + self.leveldir
+ for filename in os.listdir(self.leveldir):
+ # Exclude backup files from portage and .sh files like shutdown, depscan, etc.
+ if (filename.find('._cfg')<0) and not filename.endswith('.sh'):
+ linkname = self.leveldir+"/"+filename
+ if os.path.islink(linkname):
+ target = os.path.basename(posix.readlink(linkname))
+ if target in self.context._filenametoservice:
+ self.activeservices.append(self.context._filenametoservice[target])
+ else:
+ print "Couldn't find service '%s'. " % target
+ else:
+ print "%s is not a valid symlink." % linkname
+
+ ########################################################################
+ def setActiveAtBoot(self,service,activeflag):
+ """ Runs rc-update to add and remove Services from RunLevels.
+
+ Dependencies are checked from within runscript.sh, so we don't handle them here. """
+
+ # FIXME :: "Start at Boot" column does not properly get updated once it's "False".
+ # The commands issued might better be passed through via CommandRunner.
+ if self.name in self.no_dirs:
+ print "Runlevel has no corresponding path, running rc-update anyway."
+ if activeflag:
+ if not service in self.activeservices:
+ rc_add_cmd = "rc-update add %s %s" % (service.filename, self.dirname)
+ print rc_add_cmd
+ # The brave really run it yet.
+ os.system(rc_add_cmd)
+ self.activeservices.append(service)
+ else:
+ if service in self.activeservices:
+ rc_del_cmd = "rc-update del %s %s" % (service.filename, self.dirname)
+ print rc_del_cmd
+ # The brave really run it yet.
+ os.system(rc_dell_cmd)
+ self.activeservices.remove(service)
+
+############################################################################
+
+# Try translating this code to C++. I dare ya!
+if standalone:
+ programbase = KDialogBase
+else:
+ programbase = KCModule
+
+# is_shown exists to prevent loadDescriptions from running two times, which is
+# the case when we're running inside kcontrol. Yes, this is an ugly hack. :(
+# It's set to True after show has finished once. It doesn't play a role when
+# we're running standalone.
+is_shown = False
+
+class SysVInitApp(programbase):
+ ########################################################################
+
+ def __init__(self,parent=None,name=None):
+ global standalone,isroot, DISTRO, is_shown
+ KGlobal.locale().insertCatalogue("guidance")
+
+ if standalone:
+ KDialogBase.__init__(self,KJanusWidget.Plain,i18n("Service Configuration"), \
+ KDialogBase.User1|KDialogBase.Close, KDialogBase.Close)
+ self.setButtonText(KDialogBase.User1,i18n("About"))
+ else:
+ KCModule.__init__(self,parent,name)
+ self.setButtons(1)
+ self.aboutdata = MakeAboutData()
+
+ # Create a configuration object.
+ self.config = KConfig("serviceconfigrc")
+ KGlobal.iconLoader().addAppDir("guidance")
+
+ self.updatingGUI = False
+ self.context = getServiceContext()
+ self.servicestolistitems = {} # Map service names to QListViewItems
+ self.currentrunlevel = self.context.currentRunLevel()
+
+ self.context.loadInfo()
+
+ self.aboutus = KAboutApplication(self)
+
+ if standalone:
+ toplayout = QVBoxLayout( self.plainPage(), 0, KDialog.spacingHint() )
+ tophb = QSplitter(Qt.Horizontal, self.plainPage())
+ else:
+ toplayout = QVBoxLayout( self, 0, KDialog.spacingHint() )
+ tophb = QSplitter(Qt.Horizontal, self)
+
+ toplayout.addWidget(tophb)
+
+ vb = QVBox(tophb)
+ vb.setSpacing(KDialog.spacingHint())
+
+ hb = QHBox(vb)
+ hb.setSpacing(KDialog.spacingHint())
+ vb.setStretchFactor(hb,0)
+
+ label = QLabel(hb)
+ label.setPixmap(UserIcon("hi32-app-daemons"))
+ hb.setStretchFactor(label,0)
+
+ label = QLabel(i18n("Run level:"),hb)
+ hb.setStretchFactor(label,0)
+ self.runlevelcombo = QComboBox(hb)
+
+ # Load up the runlevel combo box.
+ i = 0
+ for runlevel in self.context.runlevels:
+ self.runlevelcombo.insertItem(runlevel.name)
+ if self.context.currentRunLevel() is runlevel:
+ self.runlevelcombo.setCurrentItem(i)
+ i += 1
+
+ hb.setStretchFactor(self.runlevelcombo,0)
+
+ self.connect(self.runlevelcombo, SIGNAL("activated(int)"), self.slotRunLevelChanged)
+
+ widget = QWidget(hb)
+ hb.setStretchFactor(widget,1)
+
+ self.servicelistview = KListView(vb)
+ self.servicelistview.addColumn(i18n("Service"))
+ self.servicelistview.addColumn(i18n("Start at Boot"))
+ self.servicelistview.addColumn(i18n("Status"))
+ self.servicelistview.setAllColumnsShowFocus(True)
+ self.servicelistview.setSelectionMode(QListView.Single)
+ self.connect(self.servicelistview, SIGNAL("selectionChanged(QListViewItem *)"), self.slotListClicked)
+
+ # Right hand side of the dialog.
+ vb = QVBox(tophb)
+ vb.setSpacing(KDialog.spacingHint())
+
+ hgb = QHGroupBox(i18n("Service Details"),vb)
+ vb.setStretchFactor(hgb,1)
+ vb2 = QVBox(hgb)
+ vb2.setSpacing(KDialog.spacingHint())
+
+ label = QLabel(i18n("Description:"),vb2)
+ vb2.setStretchFactor(label,0)
+ self.descriptiontextedit = QTextEdit(vb2)
+ vb2.setStretchFactor(self.descriptiontextedit,2)
+ self.descriptiontextedit.setReadOnly(True)
+ self.startatbootcheckbox = QCheckBox(i18n("Start during boot"),vb2)
+ vb2.setStretchFactor(self.startatbootcheckbox,0)
+ self.connect(self.startatbootcheckbox, SIGNAL("toggled(bool)"), self.slotBootChanged)
+
+ label = QLabel(i18n("Status:"),vb2)
+ vb2.setStretchFactor(label,0)
+ self.statustext = QTextEdit(vb2)
+ self.statustext.setReadOnly(True)
+ vb2.setStretchFactor(self.statustext,1)
+
+ hb2 = QHBox(vb2)
+ hb2.setSpacing(KDialog.spacingHint())
+ vb2.setStretchFactor(hb2,0)
+ self.startbutton = QPushButton(i18n("Start"),hb2)
+ hb2.setStretchFactor(self.startbutton,1)
+ self.connect(self.startbutton, SIGNAL("clicked()"), self.slotStartButton)
+ self.stopbutton = QPushButton(i18n("Stop"),hb2)
+ hb2.setStretchFactor(self.stopbutton,1)
+ self.connect(self.stopbutton, SIGNAL("clicked()"), self.slotStopButton)
+ self.restartbutton = QPushButton(i18n("Restart"),hb2)
+ hb2.setStretchFactor(self.restartbutton,1)
+ self.connect(self.restartbutton, SIGNAL("clicked()"), self.slotRestartButton)
+
+ if DISTRO == "Gentoo":
+ # Gentoo Linux gets an extra button.
+ self.zapbutton = QPushButton(i18n("Zap"),hb2)
+ hb2.setStretchFactor(self.zapbutton,1)
+ self.connect(self.zapbutton, SIGNAL("clicked()"), self.slotZapButton)
+
+ if not isroot:
+ self.disableStuff()
+ else:
+ self.connect(self.servicelistview, SIGNAL("contextMenu(KListView*,QListViewItem*,const QPoint&)"),
+ self.slotServiceContextMenu)
+
+ self.__fillListView(self.currentrunlevel)
+ self.__selectFirstService()
+
+ self.cr = CommandRunner(None,"title")
+ self.timerid = None
+
+ ########################################################################
+ def __del__(self):
+ pass
+
+ def disableStuff(self):
+ """Disable a couple of widgets when not running as root"""
+ self.startatbootcheckbox.setDisabled(True)
+ self.startbutton.setDisabled(True)
+ self.restartbutton.setDisabled(True)
+ self.stopbutton.setDisabled(True)
+ if DISTRO == "Gentoo":
+ self.zapbutton.setDisabled(True)
+
+ def slotServiceContextMenu(self,l,v,p):
+ self.cmenu = KPopupMenu(self,"MyActions")
+ self.cmenu.insertItem(i18n("Start..."), self.slotStartButton)
+ self.cmenu.insertItem(i18n("Stop..."), self.slotStopButton)
+ self.cmenu.insertItem(i18n("Restart..."), self.slotRestartButton)
+ self.cmenu.insertItem(i18n("Toggle start during boot..."), self.slotBootChangedAndToggle)
+
+ self.cmenu.exec_loop(p)
+
+ def slotBootChangedAndToggle(self):
+ """Wrap slotBootChanged in order to pass the status of the checkbox, used from contextmenu."""
+ self.startatbootcheckbox.toggle()
+
+ ########################################################################
+ # KDialogBase method
+ def exec_loop(self):
+ global programbase
+
+ self.__loadOptions()
+ programbase.exec_loop(self)
+ self.__saveOptions()
+
+ ########################################################################
+ def __selectFirstService(self):
+ # Grab the first service in the list and select it.
+ services = self.currentrunlevel.availableservices[:]
+ services.sort(lambda x,y: cmp(x.filename,y.filename))
+ self.selectedservice = None
+ try:
+ self.selectedservice = services[0]
+ lvi = self.servicestolistitems[self.selectedservice]
+ self.servicelistview.setSelected(lvi,True)
+ except IndexError:
+ pass
+ self.__selectService(self.selectedservice)
+
+ ########################################################################
+ def show(self):
+ global standalone,isroot, is_shown
+
+ programbase.show(self)
+ self.updatingGUI = True
+ if isroot:
+ self.__selectFirstService()
+ self.updatingGUI = False
+ self.__checkServiceStatus()
+
+ if DISTRO == "Debian" and (standalone or (not standalone and is_shown)):
+ QTimer.singleShot(0,self.__startLoadDescriptions)
+ is_shown = True
+
+
+ ########################################################################
+ # KDialogBase method
+ def slotUser1(self):
+ self.aboutus.show()
+
+ ########################################################################
+ def __fillListView(self,runlevelobj):
+ self.servicelistview.clear()
+ self.servicestolistitems = {}
+
+ services = self.currentrunlevel.availableservices[:]
+ services.sort(lambda x,y: cmp(x.filename,y.filename))
+
+ for item in services:
+ if item.isAvailableInRunlevel(runlevelobj):
+ status = item.status.strip().replace("\n",", ")[:32]
+ if item in runlevelobj.activeservices:
+ lvi = QListViewItem(self.servicelistview,item.filename,i18n("Yes"),status)
+ else:
+ lvi = QListViewItem(self.servicelistview,item.filename,i18n("No"),status)
+ self.servicestolistitems[item] = lvi
+
+ ########################################################################
+ def __selectService(self,service):
+ if service!=None:
+ self.descriptiontextedit.setEnabled(True)
+ self.descriptiontextedit.setText(service.description)
+
+ if isroot:
+ self.startatbootcheckbox.setEnabled(True)
+
+ self.startatbootcheckbox.setChecked(self.currentrunlevel.isActiveAtBoot(service))
+ self.statustext.setEnabled(True)
+ self.statustext.setText(service.status)
+ else:
+ self.disableStuff()
+ self.descriptiontextedit.setText("")
+ self.descriptiontextedit.setEnabled(False)
+ self.statustext.setText("")
+ self.statustext.setEnabled(False)
+
+ ########################################################################
+ def slotRunLevelChanged(self,levelnum):
+ if self.updatingGUI:
+ return
+ self.updatingGUI = True
+
+ self.currentrunlevel = self.context.runlevels[levelnum]
+ self.__fillListView(self.currentrunlevel)
+ self.__selectFirstService()
+ self.__checkServiceStatus()
+
+ self.updatingGUI = False
+
+ ########################################################################
+ def slotListClicked(self,item):
+ if self.updatingGUI:
+ return
+ self.updatingGUI = True
+
+ for service in self.servicestolistitems.keys():
+ if self.servicestolistitems[service] is item:
+ self.selectedservice = service
+ self.__selectService(self.selectedservice)
+ break
+ self.updatingGUI = False
+
+ ########################################################################
+ def slotBootChanged(self,state):
+ if self.updatingGUI:
+ return
+ self.updatingGUI = True
+ level = self.currentrunlevel
+ level.setActiveAtBoot(self.selectedservice,state)
+ if level.isActiveAtBoot(self.selectedservice):
+ self.servicestolistitems[self.selectedservice].setText(1,i18n("Yes"))
+ else:
+ self.servicestolistitems[self.selectedservice].setText(1,i18n("No"))
+ self.updatingGUI = False
+
+ ########################################################################
+ def slotCloseButton(self):
+ self.close()
+
+ ########################################################################
+ def slotStartButton(self):
+ self.__runInitScript(i18n("Starting %1").arg(self.selectedservice.filename), \
+ self.selectedservice,"start")
+
+ ########################################################################
+ def slotStopButton(self):
+ self.__runInitScript(i18n("Stopping %1").arg(self.selectedservice.filename), \
+ self.selectedservice,"stop")
+
+ ########################################################################
+ def slotRestartButton(self):
+ self.__runInitScript(i18n("Restarting %1").arg(self.selectedservice.filename), \
+ self.selectedservice,"restart")
+
+ ########################################################################
+ def slotZapButton(self):
+ """This button lets the Gentoo user use the zap command, if process
+ information has not properly been cleaned up by the init script.
+ """
+ if DISTRO == "Gentoo":
+ self.__runInitScript(i18n("Zapping %1").arg(self.selectedservice.filename), \
+ self.selectedservice,"zap")
+
+
+ ########################################################################
+ def __startLoadDescriptions(self):
+ if DISTRO=="Debian":
+ cachepath = "/var/tmp"
+ cachefile = "guidance-packagedescriptioncache"
+ self.context.descriptioncache = DescriptionCache(cachefile,cachepath)
+ self.context.descriptioncache.loadCache()
+ self.__loadDescriptions()
+
+ ########################################################################
+ def __loadDescriptions(self):
+ """
+ Loads the description of all services showing a progressbar if it takes longer,
+ tries to get the descriptions from cache first.
+ """
+ for service in self.context.services:
+ if service.packagename is None:
+ continue
+ # Check if we want to fetch a description for the currently selected item
+ # before we go on fetching other descriptions.
+ if not self.selectedservice.packagename:
+ self.selectedservice.fetchDescription()
+ self.slotListClicked(self.servicelistview.currentItem())
+ break
+ if not service.packagename:
+ service.fetchDescription()
+ break
+ else:
+ self.slotListClicked(self.servicelistview.currentItem())
+ if DISTRO=="Debian":
+ self.context.descriptioncache.saveCache()
+ return
+
+ QTimer.singleShot(0,self.__loadDescriptions)
+
+ ########################################################################
+ def __runInitScript(self,title,service,command):
+ global DISTRO
+ self.cr.setCaption(title)
+ self.cr.setHeading(title)
+ if command=="start":
+ cmd = service.doStartCommand()
+ elif command=="stop":
+ cmd = service.doStopCommand()
+ elif command=="restart":
+ cmd = service.doRestartCommand()
+ elif DISTRO == "Gentoo" and command=="zap":
+ cmd = service.doZapCommand()
+
+ self.cr.run(["/bin/bash","-c",cmd])
+
+ # Does not seem to properly update ...
+ self.__checkServiceStatus()
+
+ ########################################################################
+ def __checkServiceStatus(self):
+ global kapp
+ global progcount
+
+ # Put up the progress dialog. (User pacifier).
+ dialog = KProgressDialog(self,"statusprogress",
+ i18n("Querying System Service Status"),
+ i18n("Querying system service status"))
+ dialog.setLabel(i18n("Querying system service status"))
+ dialog.setAutoClose(True)
+ dialog.showCancelButton(False)
+
+ services = self.currentrunlevel.availableservices[:]
+ services.sort(lambda x,y: cmp(x.filename,y.filename))
+ dialog.progressBar().setTotalSteps(len(services))
+
+ kapp.processEvents()
+ self.updatingGUI = True
+
+ for item in services:
+ if item.gotStatus==False:
+ item.fetchStatus()
+ lvi = self.servicestolistitems[item]
+ lvi.setText(2,item.status.strip().replace("\n",", ")[:32])
+ if self.selectedservice is item:
+ self.statustext.setText(item.status)
+ dialog.progressBar().advance(1)
+ kapp.processEvents()
+ dialog.setMinimumDuration(2000000000)
+ dialog.hide()
+ self.updatingGUI = False
+
+ ########################################################################
+ def __loadOptions(self):
+ self.config.setGroup("General")
+ size = self.config.readSizeEntry("Geometry")
+ if size.isEmpty()==False:
+ self.resize(size)
+ size = self.config.readSizeEntry("CommandRunnerGeometry")
+ if size.isEmpty()==False:
+ self.cr.resize(size)
+
+ #######################################################################
+ def __saveOptions(self):
+ global isroot
+ if isroot:
+ return
+ self.config.setGroup("General")
+ self.config.writeEntry("Geometry", self.size())
+ self.config.writeEntry("CommandRunnerGeometry",self.cr.size())
+ self.config.sync()
+
+ #######################################################################
+ # KControl virtual void methods
+ def load(self):
+ pass
+ def save(self):
+ pass
+ def defaults(self):
+ pass
+ def sysdefaults(self):
+ pass
+
+ def aboutData(self):
+ # Return the KAboutData object which we created during initialisation.
+ return self.aboutdata
+
+ def buttons(self):
+ # Only supply a Help button. Other choices are Default and Apply.
+ return KCModule.Help
+
+############################################################################
+class CommandRunner(KDialogBase):
+ ########################################################################
+ def __init__(self,parent,name):
+ KDialogBase.__init__(self,parent,name,1,"",KDialogBase.Ok)
+ self.output = ""
+ self.running = False
+
+ self.resize(400,200)
+ vbox = self.makeVBoxMainWidget()
+
+ hbox = QHBox(vbox)
+ hbox.setSpacing(self.spacingHint())
+
+ tmplabel = QLabel(hbox)
+ tmplabel.setPixmap(UserIcon("laserwarn"))
+ hbox.setStretchFactor(tmplabel,0)
+
+ self.headinglabel = QLabel(hbox)
+ hbox.setStretchFactor(self.headinglabel,1)
+
+ self.outputtextview = QTextView(vbox)
+ self.outputtextview.setTextFormat(QTextView.PlainText)
+
+ self.kid = QProcess()
+ self.kid.setCommunication(QProcess.Stdout|QProcess.Stderr)
+ self.connect(self.kid,SIGNAL("processExited()"),self.slotProcessExited)
+ self.connect(self.kid,SIGNAL("readyReadStdout()"),self.slotReadyReadStdout)
+ self.connect(self.kid,SIGNAL("readyReadStderr()"),self.slotReadyReadStderr)
+
+ ########################################################################
+ def run(self,argslist):
+ self.kid.clearArguments()
+ for arg in argslist:
+ self.kid.addArgument(arg)
+ self.output = ""
+ self.outputtextview.setText(self.output)
+ self.bootstraptimer = self.startTimer(0)
+ self.running = True
+ self.enableButtonOK(False)
+ self.exec_loop()
+
+ ########################################################################
+ def timerEvent(self,timer):
+ self.killTimer(self.bootstraptimer)
+
+ # Create a slightly new environment where TERM is vt100
+ new_env = QStringList()
+ for key in os.environ:
+ if key=="TERM":
+ new_env.append("TERM=vt100")
+ else:
+ new_env.append(key + "=" + os.environ[key])
+
+ self.kid.launch("",new_env)
+
+ ########################################################################
+ def setHeading(self,heading):
+ self.headinglabel.setText(heading)
+
+ ########################################################################
+ def slotOKButton(self):
+ self.accept()
+
+ ########################################################################
+ def slotReadyReadStdout(self):
+ # Remove the colors used by some programs.
+ # FIXME: this probably isn't neccessary anymore.
+ uncolor = lambda text: re.compile('\\x1b\[[0-9]+;01m').sub("", \
+ re.compile('\\x1b\[0m').sub("", re.compile('\\033\[1;[0-9]+m').sub("", \
+ re.compile('\\033\[0m').sub("", text))))
+ self.output += uncolor(unicode(self.kid.readStdout()))
+ self.outputtextview.setText(self.output)
+ self.outputtextview.ensureVisible(0,self.outputtextview.contentsHeight())
+
+ ########################################################################
+ def slotReadyReadStderr(self):
+ self.output += unicode(self.kid.readStderr())
+ self.outputtextview.setText(self.output)
+ self.outputtextview.ensureVisible(0,self.outputtextview.contentsHeight())
+
+ ########################################################################
+ def slotProcessExited(self):
+ self.running = False
+ self.enableButtonOK(True)
+
+############################################################################
+# Factory function for KControl
+def create_serviceconfig(parent,name):
+ global kapp
+ kapp = KApplication.kApplication()
+ return SysVInitApp(parent, name)
+
+############################################################################
+def MakeAboutData():
+ aboutdata = KAboutData("guidance",programname,version, \
+ "Services Configuration Tool", KAboutData.License_GPL, \
+ "Copyright (C) 2003-2007 Simon Edwards", \
+ "Thanks go to Phil Thompson, Jim Bublitz and David Boddie.")
+ aboutdata.addAuthor("Simon Edwards","Developer","simon@simonzone.com","http://www.simonzone.com/software/")
+ aboutdata.addAuthor("Sebastian Kügler","Developer","sebas@kde.nl","http://vizZzion.org");
+ return aboutdata
+
+if standalone:
+ aboutdata = MakeAboutData()
+ KCmdLineArgs.init(sys.argv,aboutdata)
+
+ kapp = KApplication()
+ sysvapp = SysVInitApp()
+ sysvapp.exec_loop()
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..ba15267
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,2 @@
+[sdist]
+formats=bztar
diff --git a/setup.py b/setup.py
new file mode 100755
index 0000000..bd98ad2
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,208 @@
+#!/usr/bin/python
+###########################################################################
+# setup - description #
+# ------------------------------ #
+# begin : Fri Jun 27 2003 #
+# copyright : (C) 2003-2006 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from distutils.core import Extension
+import kdedistutils
+
+###########################################################################
+def doit():
+ kdedistutils.setup(name="guidance",
+ version="0.8.0",
+ author="Simon Edwards",
+ author_email="simon@simonzone.com",
+ url="http://www.simonzone.com/software/guidance/",
+ min_kde_version = "3.0.0",
+ min_qt_version = "3.0.0",
+ license = "GPL",
+ executable_links = [('serviceconfig','serviceconfig.py'),
+ ('userconfig','userconfig.py'),
+ ('mountconfig','mountconfig.py'),
+ ('displayconfig','displayconfig.py'),
+ ('displayconfig-restore','displayconfig-restore.py'),
+ ('wineconfig','wineconfig.py'),
+ ('grubconfig','grubconfig.py')],
+
+ data_files = [# Icons for in KControl
+ ('share/icons/crystalsvg/16x16/apps',['kde/serviceconfig/pics/16x16/daemons.png',
+ 'kde/mountconfig/pics/16x16/disksfilesystems.png',
+ 'kde/userconfig/pics/16x16/userconfig.png',
+ 'kde/displayconfig/pics/16x16/displayconfig.png',
+ 'kde/wineconfig/pics/16x16/wineconfig.svg']),
+ ('/etc/X11/Xsession.d',['displayconfig/40guidance-displayconfig_restore'])],
+
+ i18n = ('po',['mountconfig','userconfig','serviceconfig','displayconfig','wineconfig','powermanager']),
+
+ application_data = [('pics',
+ ['kde/serviceconfig/pics/laserwarn.png',
+ 'kde/serviceconfig/pics/hi32-app-daemons.png',
+ 'kde/userconfig/pics/hi16-encrypted.png',
+ 'kde/userconfig/pics/hi32-user.png',
+ 'kde/userconfig/pics/hi32-group.png',
+ 'kde/userconfig/pics/hi32-identity.png',
+ 'kde/userconfig/pics/hi32-password.png',
+ 'kde/mountconfig/pics/kcmpartitions.png',
+ 'kde/mountconfig/pics/kde1.png',
+ 'kde/mountconfig/pics/kde2.png',
+ 'kde/mountconfig/pics/kde3.png',
+ 'kde/mountconfig/pics/kde4.png',
+ 'kde/mountconfig/pics/kde5.png',
+ 'kde/mountconfig/pics/kde6.png',
+ 'kde/mountconfig/pics/hi32-samba.png',
+ 'kde/mountconfig/pics/hi16-hdd.png',
+ 'kde/mountconfig/pics/hi16-cdrom.png',
+ 'kde/mountconfig/pics/hi16-burner.png',
+ 'kde/mountconfig/pics/hi16-floppy.png',
+ 'kde/mountconfig/pics/hi16-blockdevice.png',
+ 'kde/mountconfig/pics/hi16-password.png',
+ 'kde/mountconfig/pics/hi16-memory.png',
+ 'kde/mountconfig/pics/hi16-network.png',
+ 'kde/mountconfig/pics/hi16-lock.png',
+ 'kde/mountconfig/pics/hi16-usbpen.png',
+ 'kde/mountconfig/pics/greenled.png',
+ 'kde/mountconfig/pics/greyled.png',
+ 'kde/mountconfig/pics/exec.png',
+ 'kde/mountconfig/pics/file.png',
+ 'kde/mountconfig/pics/important.png',
+ 'kde/mountconfig/pics/tux.png',
+ 'kde/mountconfig/pics/user.png',
+ 'kde/displayconfig/pics/energystar.png',
+ 'kde/displayconfig/pics/hi32-gfxcard.png',
+ 'kde/displayconfig/pics/hi32-display.png',
+ 'kde/wineconfig/pics/32-wine.png',
+ 'kde/wineconfig/pics/kdewinewizard.png',
+ 'kde/powermanager/pics/ac-adapter.png',
+ 'kde/powermanager/pics/ac-adapter.svg',
+ 'kde/powermanager/pics/battery-charging-000.png',
+ 'kde/powermanager/pics/battery-charging-010.png',
+ 'kde/powermanager/pics/battery-charging-020.png',
+ 'kde/powermanager/pics/battery-charging-030.png',
+ 'kde/powermanager/pics/battery-charging-040.png',
+ 'kde/powermanager/pics/battery-charging-050.png',
+ 'kde/powermanager/pics/battery-charging-060.png',
+ 'kde/powermanager/pics/battery-charging-070.png',
+ 'kde/powermanager/pics/battery-charging-090.png',
+ 'kde/powermanager/pics/battery_charging_0.svg',
+ 'kde/powermanager/pics/battery-charging-100.png',
+ 'kde/powermanager/pics/battery_charging_1.svg',
+ 'kde/powermanager/pics/battery_charging_2.svg',
+ 'kde/powermanager/pics/battery_charging_3.svg',
+ 'kde/powermanager/pics/battery_charging_4.svg',
+ 'kde/powermanager/pics/battery_charging_5.svg',
+ 'kde/powermanager/pics/battery_charging_6.svg',
+ 'kde/powermanager/pics/battery_charging_7.svg',
+ 'kde/powermanager/pics/battery_charging_8.svg',
+ 'kde/powermanager/pics/battery_charging_9.svg',
+ 'kde/powermanager/pics/battery-discharging-000.png',
+ 'kde/powermanager/pics/battery-discharging-010.png',
+ 'kde/powermanager/pics/battery-discharging-020.png',
+ 'kde/powermanager/pics/battery-discharging-020.svg',
+ 'kde/powermanager/pics/battery-discharging-030.png',
+ 'kde/powermanager/pics/battery-discharging-040.png',
+ 'kde/powermanager/pics/battery-discharging-050.png',
+ 'kde/powermanager/pics/battery-discharging-060.png',
+ 'kde/powermanager/pics/battery-discharging-070.png',
+ 'kde/powermanager/pics/battery-discharging-090.png',
+ 'kde/powermanager/pics/battery_discharging_0.svg',
+ 'kde/powermanager/pics/battery-discharging-100.png',
+ 'kde/powermanager/pics/battery_discharging_1.svg',
+ 'kde/powermanager/pics/battery_discharging_2.svg',
+ 'kde/powermanager/pics/battery_discharging_3.svg',
+ 'kde/powermanager/pics/battery_discharging_4.svg',
+ 'kde/powermanager/pics/battery_discharging_5.svg',
+ 'kde/powermanager/pics/battery_discharging_6.svg',
+ 'kde/powermanager/pics/battery_discharging_7.svg',
+ 'kde/powermanager/pics/battery_discharging_8.svg',
+ 'kde/powermanager/pics/battery_discharging_9.svg',
+ 'kde/powermanager/pics/processor.png',
+ 'kde/powermanager/pics/processor.svg']),
+ ('pics/displayconfig/dualhead',
+ ['kde/displayconfig/pics/dualhead/monitor_1.png',
+ 'kde/displayconfig/pics/dualhead/monitor_2.png']),
+ ('pics/displayconfig/monitor_resizable',
+ ['kde/displayconfig/pics/monitor_resizable/background.png',
+ 'kde/displayconfig/pics/monitor_resizable/background_r90.png',
+ 'kde/displayconfig/pics/monitor_resizable/background_wide.png',
+ 'kde/displayconfig/pics/monitor_resizable/background_wide_r90.png',
+ 'kde/displayconfig/pics/monitor_resizable/monitor.png',
+ 'kde/displayconfig/pics/monitor_resizable/monitor_r90.png',
+ 'kde/displayconfig/pics/monitor_resizable/monitor_wide.png',
+ 'kde/displayconfig/pics/monitor_resizable/monitor_wide_r90.png',
+ 'kde/displayconfig/pics/monitor_resizable/window_4th.png',
+ 'kde/displayconfig/pics/monitor_resizable/window_bottom_left_4th.png',
+ 'kde/displayconfig/pics/monitor_resizable/window_bottom_right_4th.png']),
+ ('pics/displayconfig/gammapics',
+ ['kde/displayconfig/pics/gammapics/MGam14.png',
+ 'kde/displayconfig/pics/gammapics/MGam16.png',
+ 'kde/displayconfig/pics/gammapics/MGam18.png',
+ 'kde/displayconfig/pics/gammapics/MGam20.png',
+ 'kde/displayconfig/pics/gammapics/MGam22.png',
+ 'kde/displayconfig/pics/gammapics/MGam24.png']),
+ 'serviceconfig/serviceconfig.py',
+ 'userconfig/userconfig.py',
+ 'userconfig/unixauthdb.py',
+ 'mountconfig/mountconfig.py',
+ 'mountconfig/MicroHAL.py',
+ 'mountconfig/SMBShareSelectDialog.py',
+ 'mountconfig/SimpleCommandRunner.py',
+ 'mountconfig/fuser.py',
+ 'mountconfig/fuser_ui.ui',
+ 'mountconfig/sizeview.py',
+ 'displayconfig/displayconfig.py',
+ 'displayconfig/displayconfigabstraction.py',
+ 'displayconfig/displayconfigwidgets.py',
+ 'displayconfig/displayconfig-restore.py',
+ 'displayconfig/execwithcapture.py',
+ 'displayconfig/infimport.py',
+ 'displayconfig/ScanPCI.py',
+ 'displayconfig/ktimerdialog.py',
+ 'displayconfig/servertestdialog.py',
+ 'displayconfig/xorgconfig.py',
+ 'displayconfig/vesamodes',
+ 'displayconfig/extramodes',
+ 'displayconfig/widescreenmodes',
+ 'displayconfig/ldetect-lst/Cards+',
+ 'displayconfig/ldetect-lst/MonitorsDB',
+ 'displayconfig/ldetect-lst/pcitable',
+ 'wineconfig/wineconfig.py',
+ 'wineconfig/wineread.py',
+ 'wineconfig/winewrite.py',
+ 'wineconfig/drivedetect.py',
+ 'powermanager/guidance-power-manager.py',
+ 'powermanager/powermanage.py',
+ 'powermanager/gpmhelper.py',
+ 'powermanager/guidance_power_manager_ui.ui',
+ 'powermanager/powermanager_ui.ui',
+ 'grubconfig/grubconfig.py'],
+
+ kcontrol_modules = [ \
+ ('serviceconfig/serviceconfig.desktop','serviceconfig.py'),
+ ('userconfig/userconfig.desktop','userconfig.py'),
+ ('mountconfig/mountconfig.desktop','mountconfig.py'),
+ ('displayconfig/displayconfig.desktop','displayconfig.py'),
+ ('wineconfig/wineconfig.desktop','wineconfig.py')],
+
+ docbooks = [ ('doc/en','en') ],
+
+ package_dir={'':'modules'},
+ py_modules=['xf86misc'],
+ ext_modules=[\
+ Extension('ixf86misc',\
+ sources=['modules/ixf86misc.c'],\
+ library_dirs=['/usr/X11R6/lib'],\
+ libraries=['X11','Xxf86vm','Xext','Xrandr','Xrender','Xss'])]
+ )
+doit()
diff --git a/uninstall_rude.py b/uninstall_rude.py
new file mode 100644
index 0000000..9e0c435
--- /dev/null
+++ b/uninstall_rude.py
@@ -0,0 +1,5 @@
+import os
+fhandle = open("install_log.txt","r")
+for line in fhandle.readlines():
+ print "deleting ", line[:-1]
+ os.system("rm -f "+line[:-1])
diff --git a/userconfig/unixauthdb.py b/userconfig/unixauthdb.py
new file mode 100755
index 0000000..92ffcc8
--- /dev/null
+++ b/userconfig/unixauthdb.py
@@ -0,0 +1,1154 @@
+#!/usr/bin/python
+###########################################################################
+# Copyright (C) 2004-2006 by Simon Edwards
+# <simon@simonzone.com>
+#
+# Copyright: See COPYING file that comes with this distribution
+#
+###########################################################################
+# An API for querying and modifying the authorisation database on Unix systems.
+#
+# The first function that you need to use is getContext(). It returns a
+# Context object that contains all relevant information concerning
+# the current authorisation database on this machine.
+
+import crypt
+import random
+import fcntl
+import time
+import os
+import os.path
+import stat
+import shutil
+import codecs
+import locale
+import tempfile
+
+ldaperror = ""
+try:
+ import ldap
+except ImportError:
+ ldaperror = "The LDAP Python Module is not installed, but needed to use LDAP. Install it."
+
+def createTempFile(origfile):
+ origstat = os.stat(origfile)
+ tmp_prefix = os.path.basename(origfile) + "."
+ tmp_dir = os.path.dirname(origfile)
+ try:
+ ret = tempfile.mkstemp(prefix=tmp_prefix, dir=tmp_dir)
+ except:
+ raise IOError, "Unable to create a new temporary file for " + origfile
+ (fd, tmpfile) = ret
+ shutil.copymode(origfile, tmpfile)
+ os.chown(tmpfile, origstat.st_uid, origstat.st_gid)
+
+ return ret
+
+def getContext(editmode=False):
+ """Get a Context object describing the system's authorisation database.
+
+ Parameters:
+
+ editmode - Set to true if you also wish change the information in this
+ context. Root access is required. Defaults to false.
+
+ Returns a Context object.
+
+ If the environmental variable "USERCONFIG_USES_LDAP" is set to "true",
+ userconfig will use LDAP as the backend. This feature is in development
+ and using it is not recommended, it won't work.
+ """
+
+ # Detect what kind of auth system we are running on and create
+ # and initialise the corresponding Context object type.
+
+ # Check for Mandrake
+
+ # Check libuser.conf
+ try:
+ if os.environ["USERCONFIG_USES_LDAP"].lower() == "true":
+ use_ldap = True
+ except KeyError,e:
+ use_ldap = False
+ if not use_ldap:
+ return PwdContext(editmode)
+ else:
+ print "==================================================================="
+ print "Warning:"
+ print "\tYou are using LDAP as backend. This feature is under development"
+ print "\tand it is currently not recommended to use it."
+ print "\tIf you do not want to use LDAP as backend, set the environmental"
+ print "\tvariabale 'USERCONFIG_USES_LDAP' to 'False'."
+ print "==================================================================="
+ return LdapContext(editmode)
+
+###########################################################################
+# Base classes.
+#
+class Context(object):
+ """Contains all of the information about the current authorisation
+ database, plus some useful methods for modify this information.
+
+ """
+ def __init__(self):
+ self._users = []
+ self._groups = []
+ self._shells = None
+ self._setDefaultValues()
+
+ def newUser(self,defaults=False,systemuser=False):
+ """Create a new UnixUser object.
+
+ Creates a new blank UnixUser object. The object is not part of the
+ current Context. You need to add it yourself using addUser().
+
+ Newly allocated UIDs are unique with respect to the list of UnixUser
+ objects in the Context.
+
+ Keyword arguments:
+ defaults -- Set to true if the new object should be filled in with
+ reasonable default values for the UID and username.
+ (default False)
+ systemuser -- Should the new user be allocated a UID from the system
+ range of UIDs. (default is False)
+
+ Returns a new UnixUser object.
+ """
+ newuserobj = self._createUser()
+ if defaults:
+ if systemuser:
+ r = xrange(0,self.last_system_uid)
+ else:
+ r = xrange(self.first_uid,self.last_uid)
+ for candiate in r:
+ for u in self._users:
+ if u.getUID()==candiate:
+ break
+ else:
+ newuserobj.setUID(candiate)
+ break
+
+ if self.lookupUsername(u'new_user') is None:
+ newuserobj.setUsername(u'new_user')
+ else:
+ i = 1
+ while 1:
+ if self.lookupUsername(u'new_user_'+str(i)) is None:
+ newuserobj.setUsername(u'new_user_'+str(i))
+ break
+ i += 1
+ return newuserobj
+
+ def getUsers(self):
+ """Get a list of all existing users.
+
+ Returns an array of UnixUser objects.
+ """
+ #print "USERS:", self._users
+ return self._users[:]
+
+ def getGroups(self):
+ """Get a list of all existing groups.
+
+ Returns an array of UnixGroup objects.
+ """
+ try:
+ self._groups.remove("new_user")
+ except ValueError:
+ print "no user removed"
+ pass
+ return self._groups[:]
+
+ def newGroup(self,defaults=False,systemgroup=False):
+ """Create a new UnixGroup object.
+
+ Creates a new blank UnixGroup object. The object is not part of the
+ current Context. You need to add it yourself using addGroup().
+
+ Newly allocated GIDs are unique with respect to the list of UnixGroup
+ objects in the Context.
+
+ Keyword arguments:
+ defaults -- Set to true if the new object should be filled in with
+ reasonable default values for the GID and groupname.
+ (default False)
+ systemgroup -- Set to True if the newly allocated GID should come
+ from the pool of system group IDs. (default False)
+
+ Returns a new UnixGroup object.
+ """
+ newgroupobj = self._createGroup()
+ if defaults:
+ if systemgroup:
+ r = xrange(0,self.last_system_gid)
+ else:
+ r = xrange(self.first_gid,self.last_gid)
+ for candiate in r:
+ for u in self._groups:
+ if u.getGID()==candiate:
+ break
+ else:
+ newgroupobj.setGID(candiate)
+ break
+ if self.lookupGroupname(u'new_group') is None:
+ newgroupobj.setGroupname(u'new_group')
+ else:
+ i = 1
+ while 1:
+ if self.lookupGroupname(u'new_user_'+str(i)) is None:
+ newgroupobj.setGroupname(u'new_user_'+str(i))
+ break
+ i += 1
+ return newgroupobj
+
+ def _createGroup(self):
+ raise NotImplementedError, "Context.newGroup()"
+
+ def addUser(self,userobj):
+ """Adds the given user to the authorisation database.
+
+ This change only takes effect after calling context.save().
+
+ Keyword arguments:
+ userobj -- The UnixUser object to add.
+ """
+ self._users.append(userobj)
+
+ def addGroup(self,groupobj):
+ """Adds the given group to the authorisation database.
+
+ This change only takes effect after calling context.save().
+
+ Keyword arguments:
+ groupobj -- The UnixGroup object to add.
+ """
+ if groupobj not in self._groups:
+ self._groups.append(groupobj)
+
+ def removeUser(self,userobj):
+ """Removes the given user object from the authorisation database.
+
+ The user is also removed from all groups.
+
+ This change only takes effect after calling context.save().
+ """
+ for g in userobj.getGroups():
+ userobj.removeFromGroup(g)
+
+ self._users.remove(userobj)
+
+ def removeGroup(self,groupobj):
+ """Removes the given group object from the authorisation database.
+
+ All users are removed from the group.
+
+ This change only takes effect after calling context.save().
+ """
+ for u in groupobj.getUsers():
+ u.removeFromGroup(groupobj)
+
+ self._groups.remove(groupobj)
+
+ def lookupUID(self,uid):
+ """Lookup a UnixUser object by its numeric user ID.
+
+ Keyword arguments:
+ uid -- User ID to lookup, integer.
+
+ Returns the matching UnixUser object or None if it was not found.
+ """
+ for user in self._users:
+ if user.getUID()==uid:
+ return user
+ return None
+
+ def lookupUsername(self,username):
+ """Lookup a UnixUser object by username.
+
+ Keyword arguments:
+ username -- Username to lookup, string.
+
+ Returns the matching UnixUser object or None if it was not found.
+ """
+ for user in self._users:
+ if user.getUsername()==username:
+ return user
+ return None
+
+ def lookupGID(self,gid):
+ """Lookup a UnixGroup object by its numeric group ID.
+
+ Keyword arguments:
+ gid -- Group ID to lookup, integer.
+
+ Returns the matching UnixGroup object or None if it was not found.
+ """
+ for group in self._groups:
+ if group.getGID()==gid:
+ return group
+ return None
+
+ def lookupGroupname(self,groupname):
+ """Lookup a UnixGroup object by groupname.
+
+ Returns the matching UnixGroup object or None if it was not found.
+ """
+ for group in self._groups:
+ if group.getGroupname()==groupname:
+ return group
+ return None
+
+ def getUserShells(self):
+ """Get the list of available login shells.
+
+ Returns an array of strings.
+ """
+ if self._shells is None:
+ self._shells = []
+ fhandle = codecs.open('/etc/shells','r',locale.getpreferredencoding())
+ for l in fhandle.readlines():
+ # TODO: strangely this lets some comented lines slip through
+ if len(l.strip()) > 1 and l.strip()[0] is not "#":
+ # Only show existing shells
+ if os.path.isfile(l.strip()):
+ self._shells.append(l.strip())
+ fhandle.close()
+ return self._shells[:]
+
+ def save(self):
+ """Synchronises the Context with the underlying operating system.
+
+ After a successful save, any changes to the Context will be reflected
+ system wide.
+ """
+ raise NotImplementedError, "Context.save()"
+
+ def createHomeDirectory(self,userobj):
+ if os.path.exists(userobj.getHomeDirectory()):
+ raise IOError, u"Home directory %s already exists." % userobj.getHomeDirectory()
+
+ # Copy the skeleton directory over
+ shutil.copytree(self._getSkeletonDirectory(),userobj.getHomeDirectory(),True)
+
+ # Fix the file ownership stuff
+ uid = userobj.getUID()
+ gid = userobj.getPrimaryGroup().getGID()
+ os.chmod(userobj.getHomeDirectory(),self.dir_mode)
+ #os.system("chmod "+self.dir_mode+" "+userobj.getHomeDirectory())
+ #print "Setting permissions:", userobj.getHomeDirectory(),self.dir_mode
+ os.lchown(userobj.getHomeDirectory(),uid,gid)
+ for root,dirs,files in os.walk(userobj.getHomeDirectory()):
+ for d in dirs:
+ os.lchown(os.path.join(root,d),uid,gid)
+ for f in files:
+ os.lchown(os.path.join(root,f),uid,gid)
+
+ def removeHomeDirectory(self,userobj):
+ if os.path.exists(userobj.getHomeDirectory()):
+ shutil.rmtree(userobj.getHomeDirectory())
+
+ def _createUser(self):
+ raise NotImplementedError, "Context._createUser()"
+
+ def _sanityCheck(self):
+ userids = []
+ for u in self._users:
+ if isinstance(u,UnixUser)==False:
+ raise TypeError,"Found an object in the list of users that is not a UnixUser object."
+ uid = u.getUID()
+ if uid in userids:
+ raise ValueError, "User ID %i appears more than once." % uid
+ userids.append(uid)
+ u._sanityCheck()
+
+ groupids = []
+ for g in self._groups:
+ if isinstance(g,UnixGroup)==False:
+ raise TypeError,"Found an object in the list of groups that is not a UnixGroup object."
+ gid = g.getGID()
+ if gid in groupids:
+ raise ValueError, "Group ID %i appears more than once." % gid
+ groupids.append(gid)
+ g._sanityCheck()
+
+ def _getSkeletonDirectory(self):
+ return self.skel
+
+ def _readAdduserConf(self):
+ """ Fill a dictionary with the values from /etc/adduser.conf
+ which then can be used as default values, if the file exists
+ at least.
+ Attention: We're not validating!"""
+ self.defaults = {}
+ self.adduserconf = '/etc/adduser.conf'
+ if not os.path.isfile(self.adduserconf):
+ return
+ fhandle = codecs.open(self.adduserconf,'r',locale.getpreferredencoding())
+ for line in fhandle.readlines():
+ line = line.strip()
+ parts = line.split("=")
+ if len(parts) == 2:
+ self.defaults[str(parts[0].strip())] = parts[1].strip()
+
+ def _setDefaultValues(self):
+ """ Set a lot of default values for UIDs and GIDs, try to use the values
+ from /etc/adduser.conf."""
+ self._readAdduserConf()
+
+ try:
+ self.skel = self.defaults["SKEL"]
+ except KeyError:
+ self.skel = '/etc/skel'
+
+ # IDs for new users and groups.
+ try:
+ self.first_uid = int(self.defaults['FIRST_UID'])
+ except (KeyError,ValueError):
+ self.first_uid = 1000
+
+ try:
+ self.last_uid = int(self.defaults["LAST_UID"])
+ except (KeyError,ValueError):
+ self.last_uid = 29999
+
+ try:
+ self.first_gid = int(self.defaults["FIRST_GID"])
+ except (KeyError,ValueError):
+ self.first_gid = 1000
+
+ try:
+ self.last_gid = int(self.defaults["LAST_GID"])
+ except (KeyError,ValueError):
+ self.last_gid = 65534
+
+ # Which IDs are system user and system groups?
+ try:
+ self.first_system_uid = int(self.defaults["FIRST_SYSTEM_UID"])
+ except (KeyError,ValueError):
+ self.first_system_uid = 500
+
+ try:
+ self.last_system_uid = int(self.defaults["LAST_SYSTEM_UID"])
+ except (KeyError,ValueError):
+ self.last_system_uid = 65534
+
+ try:
+ self.first_system_gid = int(self.defaults["FIRST_SYSTEM_GID"])
+ except (KeyError,ValueError):
+ self.first_system_gid = 500
+
+ try:
+ self.last_system_gid = int(self.defaults["LAST_SYSTEM_GID"])
+ except (KeyError,ValueError):
+ self.last_system_gid = 65534
+
+ # More defaults which might make sense.
+ try:
+ self.dir_mode = int(self.defaults["DIR_MODE"],8)
+ except (KeyError,ValueError):
+ self.dir_mode = int("0755",8)
+ print "Didn't read default DIR_MODE"
+
+ try:
+ self.dhome = self.defaults["DHOME"]
+ except KeyError:
+ self.dhome = "/home"
+
+ try:
+ self.dshell = self.defaults["DSHELL"]
+ except KeyError:
+ # Will be set in showNewUser()
+ self.dshell = None
+
+###########################################################################
+class UnixUser(object):
+ def __init__(self,context):
+ self._context = context
+ self._uid = None
+ self._username = None
+
+ # UnixGroup object.
+ self._primarygroup = None
+
+ # List of UnixGroup objects.
+ self._groups = []
+
+ self._gecos = None
+ self._homedirectory = None
+ self._loginshell = None
+
+ self._islocked = False
+
+ self._encpass = ""
+
+ # FIXME : This should actually be days since epoch or something like this
+ self._passlastchange = 0
+ self._passminimumagebeforechange = 0
+ self._passmaximumage = None
+ self._passexpirewarn = 7
+ self._passexpiredisabledays = None
+ self._disableddays = None
+
+ def polish(self):
+ primary_group = self._context.lookupGID(self._gid)
+ if primary_group is None:
+ # The GID didn't match an existing group. Quickly make a new group.
+ new_group = self._context.newGroup()
+ new_group.setGID(self._gid)
+
+ new_group_name = u"group%i" % self._gid
+ i = 0
+ while self._context.lookupGroupname(new_group_name) is not None:
+ i += 1
+ new_group_name = u"group%i_%i" % (self._gid,i)
+ new_group.setGroupname(new_group_name)
+
+ self._context.addGroup(new_group)
+ primary_group = new_group
+
+ self.setPrimaryGroup(primary_group)
+ for group in self._context._groups:
+ if group.contains(self):
+ self._groups.append(group)
+
+ def getUID(self):
+ """Get the unix user ID.
+
+ Returns the integer.
+ """
+ return self._uid
+
+ def setUID(self,uid):
+ """Set the unix user ID.
+
+ Keyword arguments:
+ uid -- Integer user id.
+ """
+ uid = int(uid)
+ if uid<0:
+ raise ValueError, "User ID (%i) is a negative number." % uid
+ self._uid = uid
+
+ def isSystemUser(self):
+ """See if this user is a system user.
+
+ Returns True or False.
+ """
+ return not (self._context.first_uid <= self._uid < self._context.last_uid)
+
+ def getUsername(self): return self._username
+
+ def setUsername(self,username): self._username = username
+
+ def getPrimaryGroup(self):
+ """Get the primary group for this user.
+
+ Returns a UnixGroup object.
+ """
+ return self._primarygroup
+
+ def setPrimaryGroup(self,groupobj):
+ """Set the primary group for this user.
+
+ If the given group is not part of this user's list of groups, then
+ it will be added.
+
+ Keyword arguments:
+ groupobj -- The group to set as the primary group.
+ """
+ self.addToGroup(groupobj)
+ self._primarygroup = groupobj
+
+ def getGroups(self):
+ """Get the list of groups that this user belongs to.
+
+ The user's primary group is also included in the returned list.
+
+ Returns a list of UnixGroup objects. Modify the list does not affect
+ this UnixUser object.
+ """
+ return self._groups[:]
+
+ def addToGroup(self,groupobj):
+ """Add this user to the given group.
+
+ Keyword arguments:
+ groupobj -- UnixGroup object.
+ """
+ groupobj._addUser(self)
+ if groupobj not in self._groups:
+ self._groups.append(groupobj)
+
+ def removeFromGroup(self,groupobj):
+ """Remove this user from the given group.
+
+ If group is current this user's primary group, then
+
+ Keyword arguments:
+ groupobj -- UnixGroup object.
+ """
+ groupobj._removeUser(self)
+ try:
+ self._groups.remove(groupobj)
+ except ValueError:
+ pass
+ if self._primarygroup is groupobj:
+ if len(self._groups)==0:
+ self._primarygroup = None
+ else:
+ self._primarygroup = self._groups[0]
+
+ def setPassword(self,password):
+ # Make some salt.
+ space = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQSRTUVWXYZ0123456789./'
+ salt = ""
+ for x in range(8):
+ salt += space[random.randint(0,len(space)-1)]
+ self._encpass = crypt.crypt(password,'$1$'+salt+'$')
+
+ def isLocked(self): return self._islocked
+ def setLocked(self,locked): self._islocked = locked
+
+ def getRealName(self):
+ if not self._gecos:
+ return ""
+ try:
+ return self._gecos.split(",")[0]
+ except AttributeError:
+ return self._gecos
+
+ def setRealName(self,realname): self._gecos = realname
+ def getHomeDirectory(self): return self._homedirectory
+ def setHomeDirectory(self,homedirectory): self._homedirectory = homedirectory
+ def getLoginShell(self): return self._loginshell
+ def setLoginShell(self,loginshell): self._loginshell = loginshell
+
+ # 'None' means that there is no maximum password age.
+ def getMaximumPasswordAge(self): return self._passmaximumage
+ def setMaximumPasswordAge(self,days): self._passmaximumage = days
+
+ def getMinimumPasswordAgeBeforeChange(self): return self._passminimumagebeforechange
+ def setMinimumPasswordAgeBeforeChange(self,days): self._passminimumagebeforechange = days
+ def getPasswordDisableAfterExpire(self): return self._passexpiredisabledays
+ def setPasswordDisableAfterExpire(self,days): self._passexpiredisabledays = days
+ def getPasswordExpireWarning(self): return self._passexpirewarn
+ def setPasswordExpireWarning(self,days): self._passexpirewarn = days
+ def getLastPasswordChange(self): return self._passlastchange
+ def getExpirationDate(self): return self._disableddays
+ def setExpirationDate(self,unixdate): self._disableddays = unixdate
+
+ def __str__(self):
+ return "%s(%i)" % (self._username,self._uid)
+
+ def _sanityCheck(self):
+ if self._primarygroup is None:
+ raise ValueError,"Userobj has no primary group!"
+ if self._uid is None:
+ raise ValueError,"Userobj has no UID!"
+
+###########################################################################
+class UnixGroup(object):
+ def __init__(self,context):
+ self._context = context
+
+ # List of UnixUser objects.
+ self._members = []
+
+ self._gid = None
+ self._groupname = None
+
+ def contains(self,userobj):
+ """Check if a the given user is a member of this group.
+
+ Returns True or False.
+ """
+ return userobj in self._members
+
+ def polish(self): pass
+ def isSystemGroup(self):
+ """Check if this group is a system group.
+
+ Returns True or False.
+ """
+ return not (self._context.first_gid <= self._gid < self._context.last_gid)
+ #return not (500 <= self._gid < 65534)
+
+ def getGID(self):
+ """Get the unix group ID.
+
+ Returns the integer group id.
+ """
+ return self._gid
+
+ def setGID(self,gid):
+ """Set the unix group ID.
+
+ Keyword arguments:
+ gid -- new group id, integer.
+ """
+ self._gid = gid
+
+ def getGroupname(self): return self._groupname
+ def setGroupname(self,groupname): self._groupname = groupname
+ def getUsers(self): return self._members[:]
+ def _addUser(self,userobj):
+ if not self.contains(userobj):
+ self._members.append(userobj)
+
+ def _removeUser(self,userobj):
+ try:
+ self._members.remove(userobj)
+ except ValueError:
+ pass
+
+ def __str__(self):
+ # FIXME encoding
+ return str(self._groupname) + " (" + str(self._gid) + ") " + str([str(u) for u in self._members])
+
+ def _sanityCheck(self):
+ pass
+
+###########################################################################
+class PwdContext(Context):
+ #def __init__(self,editmode,passwordfile="etc-passwd",groupfile='etc-group',shadowfile="etc-shadow"):
+ def __init__(self,editmode,passwordfile="/etc/passwd",groupfile='/etc/group',shadowfile="/etc/shadow"):
+ Context.__init__(self)
+ self.__editmode = editmode
+ self.__passwordfile = passwordfile
+ self.__groupfile = groupfile
+ self.__shadowfile = shadowfile
+ self._setDefaultValues()
+
+ # Read in the password file
+ fhandle = codecs.open(passwordfile,'r',locale.getpreferredencoding())
+ if LockFDRead(fhandle.fileno())==False:
+ raise IOError,"Unable to lock the "+passwordfile+" file."
+ try:
+ for line in fhandle.readlines():
+ if line.strip()!="":
+ newuserobj = self.newUser(False)
+ newuserobj._initString(line)
+ self._users.append(newuserobj)
+ finally:
+ UnlockFD(fhandle.fileno())
+ fhandle.close()
+
+ # Read the group file
+ fhandle = codecs.open(groupfile,'r',locale.getpreferredencoding())
+ if LockFDRead(fhandle.fileno())==False:
+ raise IOError,"Unable to lock the "+groupfile+" file."
+ try:
+ for line in fhandle.readlines():
+ if line.strip()!="":
+ newgroupobj = self.newGroup(False)
+ newgroupobj._initString(line)
+ self._groups.append(newgroupobj)
+ finally:
+ UnlockFD(fhandle.fileno())
+ fhandle.close()
+
+ if self.__editmode:
+ # Load up the info from the shadow file too.
+ fhandle = codecs.open(shadowfile,'r',locale.getpreferredencoding())
+ if LockFDRead(fhandle.fileno())==False:
+ raise IOError,"Unable to lock the "+shadowfile+" file."
+ try:
+ for line in fhandle.readlines():
+ if line.strip()!="":
+ try:
+ (username,encpass,passlastchange,passminimumagebeforechange,passmaximumage, \
+ passexpirewarn,passexpiredisabledays,disableddays,reserve) = \
+ tuple(line.strip().split(":"))
+ userobj = self.lookupUsername(username)
+ if userobj is not None:
+ if encpass=="":
+ encpass = u"*"
+ userobj._encpass = encpass
+ if userobj._encpass[0]=='!':
+ userobj._islocked = True
+ userobj._encpass = userobj._encpass[1:]
+ else:
+ userobj._islocked = False
+ # FIXME : set time
+ if passlastchange and passlastchange!=u"None":
+ userobj._passlastchange = int(passlastchange)
+ else:
+ passlastchange = 0
+
+ if passminimumagebeforechange=="":
+ passminimumagebeforechange = None
+ else:
+ passminimumagebeforechange = int(passminimumagebeforechange)
+ if passminimumagebeforechange>=99999:
+ passminimumagebeforechange = None
+ userobj._passminimumagebeforechange = passminimumagebeforechange
+
+ if passmaximumage=="":
+ passmaximumage = None
+ else:
+ passmaximumage = int(passmaximumage)
+ if passmaximumage>=99999:
+ passmaximumage = None
+ userobj._passmaximumage = passmaximumage
+
+ if passexpirewarn=="":
+ passexpirewarn = None
+ else:
+ passexpirewarn = int(passexpirewarn)
+ if passexpirewarn>=99999:
+ passexpirewarn = None
+ userobj._passexpirewarn = passexpirewarn
+
+ if passexpiredisabledays=="":
+ userobj._passexpiredisabledays = None
+ else:
+ userobj._passexpiredisabledays = int(passexpiredisabledays)
+
+ if disableddays=="" or disableddays==u"99999":
+ userobj._disableddays = None
+ else:
+ userobj._disableddays = int(disableddays)
+
+ userobj._reserve = reserve
+ else:
+ print "Couldn't find",username
+ except ValueError:
+ pass
+ finally:
+ UnlockFD(fhandle.fileno())
+ fhandle.close()
+
+ for group in self._groups:
+ group.polish()
+ for user in self._users:
+ user.polish()
+
+ def _createUser(self):
+ return PwdUser(self)
+
+ def _createGroup(self):
+ return PwdGroup(self)
+
+ def save(self):
+ if self.__editmode==False:
+ raise IOError, "Can't save, the context was created Read only."
+
+ self._sanityCheck()
+
+ # Write out the new password file.
+ (fd, tmpname) = createTempFile(self.__passwordfile)
+ for u in self._users:
+ os.write(fd, u._getPasswdEntry().encode(locale.getpreferredencoding(),'replace'))
+ #print u._getPasswdEntry()
+ os.close(fd)
+
+ # Update the passwd file
+ passwordlock = os.open(self.__passwordfile, os.O_WRONLY) # FIXME encoding
+ if LockFDWrite(passwordlock)==False:
+ raise IOError,"Couldn't get a write lock on "+self.__passwordfile
+ try:
+ os.rename(tmpname, self.__passwordfile)
+ finally:
+ UnlockFD(passwordlock)
+ os.close(passwordlock)
+
+ # Write out the new group file
+ (fd, tmpname) = createTempFile(self.__groupfile)
+ origstat = os.stat(self.__groupfile)
+ for g in self._groups:
+ os.write(fd,g._getGroupFileEntry().encode(locale.getpreferredencoding()))
+ #print g._getGroupFileEntry()[:-1]
+ os.close(fd)
+ os.chown(tmpname, origstat.st_uid, origstat.st_gid)
+
+ # Update the group file.
+ grouplock = os.open(self.__groupfile, os.O_WRONLY)
+ if LockFDWrite(grouplock)==False:
+ raise IOError,"Couldn't get write lock on "+self.__groupfile
+ try:
+ os.rename(tmpname, self.__groupfile)
+ finally:
+ UnlockFD(grouplock)
+ os.close(grouplock)
+
+ # Write out the new shadow file
+ origstat = os.stat(self.__shadowfile)
+ (fd, tmpname) = createTempFile(self.__shadowfile)
+ for u in self._users:
+ os.write(fd,u._getShadowEntry().encode(locale.getpreferredencoding()))
+ #print u._getShadowEntry()[:-1]
+ os.close(fd)
+
+ # Update the shadow file.
+
+ # Make sure that it is writable.
+ if (origstat.st_mode & stat.S_IWUSR)==0:
+ os.chmod(self.__shadowfile,origstat.st_mode|stat.S_IWUSR)
+
+ shadowlock = os.open(self.__shadowfile, os.O_WRONLY)
+ if LockFDWrite(shadowlock)==False:
+ raise IOError,"Couldn't get write lock on "+self.__shadowfile
+ try:
+ os.rename(tmpname, self.__shadowfile)
+ finally:
+ UnlockFD(shadowlock)
+ os.close(shadowlock)
+
+ # set the permissions back to thier default.
+ if (origstat.st_mode & stat.S_IWUSR)==0:
+ os.chmod(self.__shadowfile,origstat.st_mode)
+
+###########################################################################
+class LdapContext(Context):
+
+ def __init__(self,editmode,server="localhost",admin_dn="",admin_pass=""):
+ """ Connect to the LDAP server and invoke further actions.
+ """
+ Context.__init__(self)
+ # admin_dn is DistinguishedName? (or dn, for short)
+ self.server = server
+ self.baseDN = "dc=vizZzion,dc=net"
+
+ self.url = "ldap://"+self.server
+
+ self.ldapserver = ldap.initialize(self.url)
+ self.ldapserver.protocol_version = ldap.VERSION3
+
+ self.editmode = editmode
+ if not self.editmode:
+ self.ldapserver.simple_bind("admin",admin_pass)
+ print "Connected to ", self.url
+
+ self._users = self._getUsers()
+
+ def _getUsers(self):
+ """ Retrieve a list of users from the LDAP server.
+ """
+ _users = []
+ print "LdapContext._getUsers"
+ searchScope = ldap.SCOPE_SUBTREE
+ retrieveAttributes = None
+ searchFilter = "cn=*"
+ try:
+ ldap_result_id = self.ldapserver.search(self.baseDN, searchScope, searchFilter, retrieveAttributes)
+ result_set = []
+ while 1:
+ result_type, result_data = self.ldapserver.result(ldap_result_id, 0)
+ if (result_data == []):
+ break
+ else:
+ if result_type == ldap.RES_SEARCH_ENTRY:
+ #print result_data[0][1]
+ #print " --------------------- "
+ result_set.append(result_data[0][1])
+ #print result_set
+ except ldap.LDAPError, e:
+ print "ERROR: ",e
+
+ if len(result_set) == 0:
+ print "No Results."
+ return
+ count = 0
+ """
+ for entry in result_set:
+ for d in entry.keys():
+ print d, "::", entry[d]
+ print "======== Next User =============="
+ """
+ # Walk through result_set and create users.
+ for entry in result_set:
+ try:
+ name = entry['cn'][0]
+ login = entry['uid'][0]
+ loginshell = entry['loginShell'][0]
+ homedirectory = entry['homeDirectory'][0]
+ uid = entry['uidNumber'][0]
+ gid = entry['gidNumber'][0]
+ count = count + 1
+ #print "\n%d. User: %s\n\tName: %s\n\tShell: %s\n\tHomeDir: %s\n\tUID: %s\n\tGID: %s\n" %\
+ # (count, login, name, loginshell, homedirectory, uid, gid)
+ # Create a new userobject
+ new_user = self._createUser()
+ new_user.setHomeDirectory(homedirectory)
+ new_user.setUID(uid)
+ new_user.setRealName(name)
+ new_user.setLoginShell(loginshell)
+ new_user.setUsername(login)
+ _users.append(new_user)
+ print "Number of Users:", len(self._users)
+
+ except KeyError, e:
+ # Debugging output...
+ print "ERR:: ",e
+ print 'err:: ',entry
+ return _users
+
+ def _createUser(self):
+ return LdapUser(self)
+
+ def _createGroup(self):
+ return LdapGroup(self)
+
+ def save(self):
+ print "LdapContext.save() does nothing yet."
+
+###########################################################################
+class LdapUser(UnixUser):
+
+ def __str__(self):
+ return "LdapUser: %s(%i)" % (self._username,self._uid)
+
+
+###########################################################################
+class LdapGroup(UnixGroup):
+
+ def __str__(self):
+ return "LdapGroup: %s(%i)" % (self._username,self._uid)
+
+
+###########################################################################
+class PwdUser(UnixUser):
+ def __init__(self,context):
+ UnixUser.__init__(self,context)
+ self._reserve = u""
+
+ def _initString(self,line):
+ (self._username,x,self._uid,self._gid,self._gecos,self._homedirectory, \
+ self._loginshell) = tuple(line.strip().split(":"))
+ self._uid = int(self._uid)
+ self._gid = int(self._gid)
+
+ def _getPasswdEntry(self):
+ return u":".join( [self._username,
+ u"x",
+ unicode(self._uid),
+ unicode(self._primarygroup.getGID()),
+ self._gecos,
+ self._homedirectory,
+ self._loginshell ] ) + u"\n"
+
+ def _getShadowEntry(self):
+ if self._islocked:
+ encpass = u'!' + self._encpass
+ else:
+ encpass = self._encpass
+
+ if self._passminimumagebeforechange==None:
+ passminimumagebeforechange = ""
+ else:
+ passminimumagebeforechange = str(self._passminimumagebeforechange)
+
+ if self._passmaximumage==None:
+ passmaximumage = u"99999"
+ else:
+ passmaximumage = unicode(self._passmaximumage)
+
+ if self._disableddays==None:
+ disableddays = u""
+ else:
+ disableddays = unicode(self._disableddays)
+
+ if self._passexpiredisabledays==None:
+ passexpiredisabledays = u""
+ else:
+ passexpiredisabledays = unicode(self._passexpiredisabledays)
+
+ if self._passexpirewarn==None:
+ passexpirewarn = u""
+ else:
+ passexpirewarn = unicode(self._passexpirewarn)
+
+ return u":".join( [self._username,
+ encpass,
+ unicode(self._passlastchange),
+ passminimumagebeforechange,
+ passmaximumage,
+ passexpirewarn,
+ passexpiredisabledays,
+ disableddays,
+ self._reserve ])+ u"\n"
+
+###########################################################################
+class PwdGroup(UnixGroup):
+ def __init__(self,context):
+ UnixGroup.__init__(self,context)
+ self._memberids = u""
+ self._encpass = u""
+
+ def _initString(self,line):
+ (self._groupname,self._encpass,self._gid,self._memberids) = tuple(line.strip().split(":"))
+ self._gid = int(self._gid)
+
+ def polish(self):
+ membernames = self._memberids.split(",")
+ for username in membernames:
+ userobj = self._context.lookupUsername(username)
+ if userobj!=None:
+ self._members.append(userobj)
+
+ def _getGroupFileEntry(self):
+ return u":".join( [ self._groupname,
+ self._encpass,
+ unicode(self._gid),
+ u",".join([u.getUsername() for u in self._members if u.getPrimaryGroup() is not self])]) + u"\n"
+
+###########################################################################
+def LockFDRead(fd):
+ retries = 6
+ while retries!=0:
+ try:
+ fcntl.lockf(fd,fcntl.LOCK_SH | fcntl.LOCK_NB)
+ return True
+ except IOError:
+ # Wait a moment
+ time.sleep(1)
+ return False
+
+def LockFDWrite(fd):
+ retries = 6
+ while retries!=0:
+ try:
+ fcntl.lockf(fd,fcntl.LOCK_EX | fcntl.LOCK_NB)
+ return True
+ except IOError:
+ # Wait a moment
+ time.sleep(1)
+ return False
+
+def UnlockFD(fd):
+ fcntl.lockf(fd,fcntl.LOCK_UN)
+
+###########################################################################
+
+if __name__=='__main__':
+ print "Testing"
+ context = getContext(True)
+
+ print "Stopping here..."
+ #import sys
+ #sys.exit(0) ## Remove.
+ #print "Users:"
+ #for user in context.getUsers():
+ for user in context._users:
+ print "--------------------------------------------------"
+ print "UID:",user.getUID()
+ print "Is system user:",user.isSystemUser()
+ print "Username:",user.getUsername()
+ print "Primary Group:",str(user.getPrimaryGroup())
+ print "Groups:",[str(u) for u in user.getGroups()]
+ print "Is locked:",user.isLocked()
+ print "Real name:",user.getRealName()
+ print "Home Dir:",user.getHomeDirectory()
+ print "Maximum password age:",user.getMaximumPasswordAge()
+ print "Minimum password age before change:",user.getMinimumPasswordAgeBeforeChange()
+ print "Expire warning:",user.getPasswordExpireWarning()
+ print "Disable after Expire:",user.getPasswordDisableAfterExpire()
+ #print user._getPasswdEntry()
+
+ print "Groups"
+ for group in context.getGroups():
+ print str(group)
+ #print group._getGroupFileEntry()
+
+ print "Saving"
+ context.save()
diff --git a/userconfig/userconfig.desktop b/userconfig/userconfig.desktop
new file mode 100644
index 0000000..276bfc3
--- /dev/null
+++ b/userconfig/userconfig.desktop
@@ -0,0 +1,49 @@
+[Desktop Entry]
+Name=User Management
+Name[el]=Διαχείριση χρηστών
+Name[es]=Administrador de usuarios
+Name[et]=Kasutajate haldamine
+Name[it]=Gestione degli utenti
+Name[ja]=ユーザの管理
+Name[nl]=Gebruikersbeheer
+Name[pt]=Gestão de Utilizadores
+Name[pt_BR]=Gerenciamento de Usuários
+Name[sr]=Управљање корисницима
+Name[sr@Latn]=Upravljanje korisnicima
+Name[sv]=Användarhantering
+Name[xx]=xxUser Managementxx
+Comment=Users & Groups Administration
+Comment[el]=Διαχείριση χρηστών & ομάδων
+Comment[es]=Administrador de usuarios y grupos
+Comment[et]=Kasutajate ja gruppide haldamine
+Comment[it]=Amministrazione di utenti e gruppi
+Comment[ja]=ユーザとグループの管理
+Comment[nl]=Gebruikers en groepen beheren
+Comment[pt]=Administração dos Utilizadores & Grupos
+Comment[pt_BR]=Administração de Usuários & Grupos
+Comment[sr]=Администрирање корисника и група
+Comment[sr@Latn]=Administriranje korisnika i grupa
+Comment[sv]=Administration av användare och grupper
+Comment[xx]=xxUsers & Groups Administrationxx
+Icon=userconfig.png
+Encoding=UTF-8
+X-KDE-ModuleType=Library
+X-KDE-Library=userconfig
+X-KDE-FactoryName=userconfig
+X-KDE-RootOnly=true
+Type=Application
+Exec=kcmshell System/userconfig
+Categories=Qt;KDE;X-KDE-settings-system;
+GenericName=User Account Editor
+GenericName[el]=Επεξεργαστής λογαριασμών χρηστών
+GenericName[es]=Editor de cuenta de usuario
+GenericName[et]=Kasutajakonto redaktor
+GenericName[it]=Editor degli account degli utenti
+GenericName[ja]=ユーザアカウントエディタ
+GenericName[nl]=Gebruikeraccounts bewerken
+GenericName[pt]=Editor de Contas dos Utilizadores
+GenericName[pt_BR]=Editor de Contas de Usuários
+GenericName[sr]=Уређивач корисничких налога
+GenericName[sr@Latn]=Uređivač korisničkih naloga
+GenericName[sv]=Editor för användarkonton
+GenericName[xx]=xxUser Account Editorxx
diff --git a/userconfig/userconfig.py b/userconfig/userconfig.py
new file mode 100755
index 0000000..b400531
--- /dev/null
+++ b/userconfig/userconfig.py
@@ -0,0 +1,1753 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# userconfig.py - description #
+# ------------------------------ #
+# begin : Wed Apr 30 2003 #
+# copyright : (C) 2003-2006 by Simon Edwards #
+# email : simon@simonzone.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdeui import *
+from kdecore import *
+from kfile import *
+import sys
+import os.path
+import shutil
+import unixauthdb
+import locale
+
+programname = "userconfig"
+version = "0.8.0"
+# Are we running as a separate standalone application or in KControl?
+standalone = __name__=='__main__'
+
+# Running as the root user or not?
+isroot = os.getuid()==0
+#isroot = True
+
+###########################################################################
+def SptimeToQDate(sptime):
+ t = QDateTime()
+ t.setTime_t(0)
+ return t.addDays(sptime).date()
+
+###########################################################################
+def QDateToSptime(qdate):
+ x = QDateTime()
+ x.setTime_t(0)
+ return x.daysTo(QDateTime(qdate))
+
+###########################################################################
+# Try translating this code to C++. I dare ya!
+if standalone:
+ programbase = KDialogBase
+else:
+ programbase = KCModule
+
+class UserConfigApp(programbase):
+ def __init__(self,parent=None,name=None):
+ global standalone,isroot
+ KGlobal.locale().insertCatalogue("guidance")
+
+ if standalone:
+ KDialogBase.__init__(self,KJanusWidget.Tabbed,i18n("User Accounts and Groups"),
+ KDialogBase.User1|KDialogBase.Close, KDialogBase.Close)
+ self.setButtonText(KDialogBase.User1,i18n("About"))
+ else:
+ KCModule.__init__(self,parent,name)
+ self.setButtons(0)
+ self.aboutdata = MakeAboutData()
+
+ toplayout = QVBoxLayout( self, 0, KDialog.spacingHint() )
+ tabcontrol = QTabWidget(self)
+ toplayout.addWidget(tabcontrol)
+ toplayout.setStretchFactor(tabcontrol,1)
+
+ # Create a configuration object.
+ self.config = KConfig("userconfigrc")
+
+ KGlobal.iconLoader().addAppDir("guidance")
+
+ self.usersToListItems = None
+ self.selecteduserid = None
+ self.selectedgroupid = None
+ self.showsystemaccounts = False
+ self.showsystemgroups = False
+
+ self.updatingGUI = True
+
+
+ self.aboutus = KAboutApplication(self)
+
+ # --- User Tab ---
+ if standalone:
+ usershbox = self.addHBoxPage("Users")
+ vbox = QVBox(usershbox)
+ else:
+ vbox = QVBox(tabcontrol)
+ vbox.setMargin(KDialog.marginHint())
+
+ vbox.setSpacing(KDialog.spacingHint())
+
+ hb = QHBox(vbox)
+ hb.setSpacing(KDialog.spacingHint())
+ vbox.setStretchFactor(hb,0)
+
+ label = QLabel(hb)
+ label.setPixmap(UserIcon("hi32-user"))
+ hb.setStretchFactor(label,0)
+
+ label = QLabel(i18n("User Accounts:"),hb)
+ hb.setStretchFactor(label,1)
+
+ self.userlist = KListView(vbox)
+ self.userlist.addColumn(i18n("Login Name"))
+ self.userlist.addColumn(i18n("Real Name"))
+ self.userlist.addColumn(i18n("UID"))
+ self.userlist.setAllColumnsShowFocus(True)
+ self.userlist.setSelectionMode(QListView.Single)
+
+ self.connect(self.userlist, SIGNAL("selectionChanged(QListViewItem *)"), self.slotListClicked)
+ if isroot:
+ self.connect(self.userlist, SIGNAL("doubleClicked(QListViewItem *)"), self.slotModifyClicked)
+ self.connect(self.userlist, SIGNAL("contextMenu(KListView*,QListViewItem*,const QPoint&)"), self.slotUserContext)
+
+ self.showspecialcheckbox = QCheckBox(i18n("Show system accounts"),vbox)
+ vbox.setStretchFactor(self.showspecialcheckbox,0)
+ self.connect(self.showspecialcheckbox,SIGNAL("toggled(bool)"), self.slotShowSystemToggled)
+
+ hbox = QHBox(vbox)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ vbox.setStretchFactor(hbox,0)
+
+ self.modifybutton = KPushButton(i18n("Modify..."),hbox)
+ hbox.setStretchFactor(self.modifybutton,1)
+ self.connect(self.modifybutton,SIGNAL("clicked()"),self.slotModifyClicked)
+
+ self.newbutton = KPushButton(i18n("New..."),hbox)
+ hbox.setStretchFactor(self.newbutton,1)
+ self.connect(self.newbutton,SIGNAL("clicked()"),self.slotNewClicked)
+
+ self.deletebutton = KPushButton(i18n("Delete..."),hbox)
+ hbox.setStretchFactor(self.deletebutton,1)
+ self.connect(self.deletebutton,SIGNAL("clicked()"),self.slotDeleteClicked)
+
+ detailsbox = QVGroupBox(i18n("Details"),vbox)
+ userinfovbox = QWidget(detailsbox)
+
+ infogrid = QGridLayout(userinfovbox,3,4)
+ infogrid.setSpacing(KDialog.spacingHint())
+
+ label = QLabel(i18n("Login Name:"),userinfovbox)
+ infogrid.addWidget(label,0,0)
+ self.loginnamelabel = KLineEdit("",userinfovbox)
+ self.loginnamelabel.setReadOnly(True)
+ infogrid.addWidget(self.loginnamelabel,0,1)
+
+ label = QLabel(i18n("Real Name:"),userinfovbox)
+ infogrid.addWidget(label,0,2)
+ self.realnamelabel = KLineEdit("",userinfovbox)
+ self.realnamelabel.setReadOnly(True)
+ infogrid.addWidget(self.realnamelabel,0,3)
+
+ label = QLabel(i18n("UID:"),userinfovbox)
+ infogrid.addWidget(label,1,0)
+ self.uidlabel = KLineEdit("",userinfovbox)
+ self.uidlabel.setReadOnly(True)
+ infogrid.addWidget(self.uidlabel,1,1)
+
+ label = QLabel(i18n("Status:"),userinfovbox)
+ infogrid.addWidget(label,1,2)
+ self.statuslabel = KLineEdit("",userinfovbox)
+ self.statuslabel.setReadOnly(True)
+ infogrid.addWidget(self.statuslabel,1,3)
+
+ label = QLabel(i18n("Primary Group:"),userinfovbox)
+ infogrid.addWidget(label,2,0)
+ self.primarygrouplabel = KLineEdit("",userinfovbox)
+ self.primarygrouplabel.setReadOnly(True)
+ infogrid.addWidget(self.primarygrouplabel,2,1)
+
+ label = QLabel(i18n("Secondary Groups:"),userinfovbox)
+ infogrid.addWidget(label,2,2)
+ self.secondarygrouplabel = KLineEdit("",userinfovbox)
+ self.secondarygrouplabel.setReadOnly(True)
+ infogrid.addWidget(self.secondarygrouplabel,2,3)
+
+ if not standalone:
+ tabcontrol.addTab(vbox,i18n("Users"))
+
+ #--- Groups Tab ---
+ if standalone:
+ groupsvbox = self.addVBoxPage(i18n("Groups"))
+ hb = QHBox(groupsvbox)
+ else:
+ groupsvbox = QVBox(tabcontrol)
+ groupsvbox.setMargin(KDialog.marginHint())
+ hb = QHBox(groupsvbox)
+
+ topframe = QFrame(groupsvbox)
+ groupsvbox.setSpacing(KDialog.spacingHint())
+ hb.setSpacing(KDialog.spacingHint())
+ groupsvbox.setStretchFactor(hb,0)
+
+ label = QLabel(hb)
+ label.setPixmap(UserIcon("hi32-group"))
+ hb.setStretchFactor(label,0)
+
+ label = QLabel(i18n("Groups:"),hb)
+ hb.setStretchFactor(label,1)
+
+ groupsplitter = QSplitter(Qt.Vertical,groupsvbox)
+
+ self.grouplist = KListView(groupsplitter)
+ self.grouplist.addColumn(i18n("Group Name"))
+ self.grouplist.addColumn(i18n("GID"))
+ self.grouplist.setAllColumnsShowFocus(True)
+ self.connect(self.grouplist, SIGNAL("selectionChanged(QListViewItem *)"), self.slotGroupListClicked)
+
+ if isroot:
+ self.connect(self.grouplist, SIGNAL("doubleClicked(QListViewItem *)"), self.slotModifyGroupClicked)
+ self.connect(self.grouplist, SIGNAL("contextMenu(KListView*,QListViewItem*,const QPoint&)"),
+ self.slotGroupContext)
+
+ groupbottomvbox = QVBox(groupsplitter)
+ groupbottomvbox.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding)
+
+ self.showspecialgroupscheckbox = QCheckBox(i18n("Show system groups"),groupbottomvbox)
+ vbox.setStretchFactor(self.showspecialgroupscheckbox,0)
+ self.connect(self.showspecialgroupscheckbox,SIGNAL("toggled(bool)"), self.slotShowSystemGroupsToggled)
+
+ hbox = QHBox(groupbottomvbox)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ groupsvbox.setStretchFactor(hbox,0)
+
+ self.modifygroupbutton = KPushButton(i18n("Modify..."),hbox)
+ hbox.setStretchFactor(self.modifygroupbutton,1)
+ self.connect(self.modifygroupbutton,SIGNAL("clicked()"),self.slotModifyGroupClicked)
+
+ self.newgroupbutton = KPushButton(i18n("New..."),hbox)
+ hbox.setStretchFactor(self.newgroupbutton,1)
+ self.connect(self.newgroupbutton,SIGNAL("clicked()"),self.slotNewGroupClicked)
+
+ self.deletegroupbutton = KPushButton(i18n("Delete..."),hbox)
+ hbox.setStretchFactor(self.deletegroupbutton,1)
+ self.connect(self.deletegroupbutton,SIGNAL("clicked()"),self.slotDeleteGroupClicked)
+
+ if not isroot:
+ disablebuttons = ( self.modifybutton, self.modifygroupbutton, self.deletebutton, self.deletegroupbutton,
+ self.newbutton, self.newgroupbutton)
+ for widget in disablebuttons:
+ widget.setDisabled(True)
+
+ label = QLabel(i18n("Group Members:"),groupbottomvbox)
+ groupsvbox.setStretchFactor(label,0)
+
+ self.groupmemberlist = KListView(groupbottomvbox)
+ self.groupmemberlist.addColumn(i18n("Login Name"))
+ self.groupmemberlist.addColumn(i18n("Real Name"))
+ self.groupmemberlist.addColumn(i18n("UID"))
+ self.groupmemberlist.setAllColumnsShowFocus(True)
+
+ if not standalone:
+ tabcontrol.addTab(groupsvbox,i18n("Groups"))
+
+ self.admincontext = unixauthdb.getContext(isroot)
+
+ self.updatingGUI = True
+
+ self.showspecialcheckbox.setChecked(self.showsystemaccounts)
+ self.showspecialgroupscheckbox.setChecked(self.showsystemgroups)
+
+ self.__updateUserList()
+ self.__updateGroupList()
+ self.updatingGUI = False
+
+ self.usereditdialog = UserEditDialog(None,self.admincontext)
+ self.userdeletedialog = UserDeleteDialog(None,self.admincontext)
+ self.groupeditdialog = GroupEditDialog(None,self.admincontext)
+
+ #######################################################################
+ def exec_loop(self):
+ global programbase
+ self.__loadOptions()
+ self.updatingGUI = True
+ self.__updateUserList()
+ self.__updateGroupList()
+ self.updatingGUI = False
+ programbase.exec_loop(self)
+ self.__saveOptions()
+
+ #######################################################################
+ def slotUser1(self):
+ self.aboutus.show()
+
+ #######################################################################
+ def slotUserContext(self,l,v,p):
+ cmenu = KPopupMenu(self,"MyActions")
+ cmenu.insertItem(i18n("Modify..."), self.slotModifyClicked, 0, 0)
+ cmenu.insertItem(i18n("Delete..."), self.slotDeleteClicked, 0, 1)
+ if not isroot:
+ cmenu.setItemEnabled(0,False)
+ cmenu.setItemEnabled(1,False)
+
+ cmenu.exec_loop(p)
+
+ #######################################################################
+ def slotGroupContext(self,l,v,p):
+ cmenu = KPopupMenu(self,"MyActions")
+ cmenu.insertItem(i18n("Modify..."), self.slotModifyGroupClicked, 0, 0)
+ cmenu.insertItem(i18n("Delete..."), self.slotDeleteGroupClicked, 0, 1)
+ if not isroot:
+ cmenu.setItemEnabled(0,False)
+ cmenu.setItemEnabled(1,False)
+ cmenu.exec_loop(p)
+
+ #######################################################################
+ def sizeHint(self):
+ global programbase
+ size_hint = programbase.sizeHint(self)
+ # Just make the dialog a little shorter by default.
+ size_hint.setHeight(size_hint.height()-200)
+ return size_hint
+
+ #######################################################################
+ def slotCloseButton(self):
+ self.close()
+
+ #######################################################################
+ def slotListClicked(self,item):
+ if self.updatingGUI==False:
+ for userid in self.useridsToListItems:
+ if self.useridsToListItems[userid]==item:
+ self.updatingGUI = True
+ self.__selectUser(userid)
+ self.updatingGUI = False
+ return
+
+ #######################################################################
+ def slotShowSystemToggled(self,on):
+ self.showsystemaccounts = on
+ if self.updatingGUI==False:
+ self.updatingGUI = True
+ self.__updateUserList()
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotModifyClicked(self):
+ self.usereditdialog.showEditUser(self.selecteduserid)
+ self.updatingGUI = True
+ self.__updateUser(self.selecteduserid)
+ self.__selectUser(self.selecteduserid)
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotNewClicked(self):
+ newuid = self.usereditdialog.showNewUser()
+ if newuid!=None:
+ self.updatingGUI = True
+ self.__updateUserList()
+ self.__selectUser(newuid)
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotDeleteClicked(self):
+ if self.userdeletedialog.deleteUser(self.selecteduserid):
+ self.updatingGUI = True
+ self.selecteduserid = None
+ self.__updateUserList()
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotGroupListClicked(self,item):
+ if self.updatingGUI==False:
+ for groupid in self.groupidsToListItems:
+ if groupid and self.groupidsToListItems[groupid]==item:
+ self.updatingGUI = True
+ self.__selectGroup(groupid)
+ self.updatingGUI = False
+ return
+
+ #######################################################################
+ def slotShowSystemGroupsToggled(self,on):
+ self.showsystemgroups = on
+ if self.updatingGUI==False:
+ self.updatingGUI = True
+ self.__updateGroupList()
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotModifyGroupClicked(self):
+ if self.selectedgroupid!=None:
+ if self.groupeditdialog.showEditGroup(self.selectedgroupid):
+ self.__selectGroup(self.selectedgroupid)
+ self.updatingGUI = True
+ self.__updateUser(self.selecteduserid)
+ self.__selectUser(self.selecteduserid)
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotNewGroupClicked(self):
+ newgroupid = self.groupeditdialog.showNewGroup()
+ if newgroupid!=None:
+ self.updatingGUI = True
+ self.__updateGroupList()
+ self.__updateGroupList()
+ self.__selectGroup(newgroupid)
+ self.__updateUser(self.selecteduserid)
+ self.__selectUser(self.selecteduserid)
+ self.updatingGUI = False
+
+ #######################################################################
+ def slotDeleteGroupClicked(self):
+ if self.selectedgroupid!=None:
+ groupobj = self.admincontext.lookupGID(self.selectedgroupid)
+ groupname = groupobj.getGroupname()
+ gid = groupobj.getGID()
+ nummembers = len(groupobj.getUsers())
+
+ message = i18n("Are you sure you want to delete group '%1' (%2)?\nIt currently has %3 members.").arg(groupname).arg(gid).arg(nummembers)
+ if KMessageBox.warningYesNo(self,message,i18n("Delete Group?"))==KMessageBox.Yes:
+ self.admincontext.removeGroup(groupobj)
+ self.admincontext.save()
+ self.updatingGUI = True
+ self.__updateGroupList()
+ self.__updateUser(self.selecteduserid)
+ self.__selectUser(self.selecteduserid)
+ self.updatingGUI = False
+
+ #######################################################################
+ def __updateUserList(self):
+ self.userlist.clear()
+ self.useridsToListItems = {}
+ firstselecteduserid = None
+
+ users = self.admincontext.getUsers()
+
+ for userobj in users:
+ uid = userobj.getUID()
+ if self.showsystemaccounts or not userobj.isSystemUser():
+ lvi = KListViewItem(self.userlist,userobj.getUsername(),userobj.getRealName(),unicode(uid))
+ if userobj.isLocked():
+ lvi.setPixmap(0,UserIcon("hi16-encrypted"))
+ self.useridsToListItems[uid] = lvi
+ if self.selecteduserid==uid:
+ firstselecteduserid = uid
+ elif firstselecteduserid==None:
+ firstselecteduserid = uid
+ self.selecteduserid = firstselecteduserid
+ self.__selectUser(self.selecteduserid)
+ self.userlist.ensureItemVisible(self.userlist.currentItem())
+
+ #######################################################################
+ def __updateUser(self,userid):
+ lvi = self.useridsToListItems[userid]
+ userobj = self.admincontext.lookupUID(userid)
+ lvi.setText(0,userobj.getUsername())
+ lvi.setText(1,userobj.getRealName())
+ lvi.setText(2,unicode(userobj.getUID()))
+ if userobj.isLocked():
+ lvi.setPixmap(0,UserIcon("hi16-encrypted"))
+ else:
+ lvi.setPixmap(0,QPixmap())
+
+ #######################################################################
+ def __selectUser(self,userid):
+ self.selecteduserid = userid
+ # Only go on if there are actual users.
+ if len(self.useridsToListItems)>0:
+ lvi = self.useridsToListItems[userid]
+ self.userlist.setSelected(lvi,True)
+ self.userlist.setCurrentItem(lvi)
+
+ userobj = self.admincontext.lookupUID(userid)
+
+ username = userobj.getUsername()
+ self.loginnamelabel.setText(username)
+ self.realnamelabel.setText(userobj.getRealName())
+ self.uidlabel.setText(unicode(userid))
+ if userobj.isLocked():
+ self.statuslabel.setText(i18n("Disabled"))
+ else:
+ self.statuslabel.setText(i18n("Enabled"))
+
+ # Primary Group
+ primarygroupobj = userobj.getPrimaryGroup()
+ primarygroupname = primarygroupobj.getGroupname()
+ self.primarygrouplabel.setText(primarygroupname)
+
+ # Secondary Groups
+ secondarygroups = [g.getGroupname() for g in userobj.getGroups() if g is not userobj.getPrimaryGroup()]
+ self.secondarygrouplabel.setText(unicode(i18n(", ")).join(secondarygroups))
+
+ if isroot:
+ self.deletebutton.setDisabled(userobj.getUID()==0)
+
+ #######################################################################
+ def __updateGroupList(self):
+ self.grouplist.clear()
+ self.groupidsToListItems = {}
+ firstselectedgroupid = None
+
+ groups = self.admincontext.getGroups()
+ for groupobj in groups:
+ gid = groupobj.getGID()
+ if self.showsystemgroups or not groupobj.isSystemGroup():
+ lvi = QListViewItem(self.grouplist,groupobj.getGroupname(),unicode(gid))
+ self.groupidsToListItems[gid] = lvi
+ if self.selectedgroupid==gid:
+ firstselectedgroupid = gid
+ elif firstselectedgroupid==None:
+ firstselectedgroupid = gid
+ self.selectedgroupid = firstselectedgroupid
+ self.__selectGroup(self.selectedgroupid)
+ self.grouplist.ensureItemVisible(self.grouplist.currentItem())
+
+ #######################################################################
+ def __selectGroup(self,groupid):
+ if groupid:
+ self.selectedgroupid = groupid
+ lvi = self.groupidsToListItems[groupid]
+ self.grouplist.setSelected(lvi,True)
+ self.grouplist.setCurrentItem(lvi)
+
+ groupobj = self.admincontext.lookupGID(groupid)
+ members = groupobj.getUsers()
+ self.groupmemberlist.clear()
+ for userobj in members:
+ if userobj!=None:
+ lvi = QListViewItem(self.groupmemberlist,userobj.getUsername(),userobj.getRealName(),unicode(userobj.getUID()))
+ if isroot:
+ self.deletegroupbutton.setDisabled(groupobj.getGID()==0)
+
+ #######################################################################
+ def __loadOptions(self):
+ self.config.setGroup("General")
+ size = self.config.readSizeEntry("Geometry")
+ if size.isEmpty()==False:
+ self.resize(size)
+ self.config.setGroup("Options")
+ self.showsystemaccounts = self.config.readBoolEntry("ShowSystemAccounts")
+ self.showspecialcheckbox.setChecked(self.showsystemaccounts)
+ self.showsystemgroups = self.config.readBoolEntry("ShowSystemGroups")
+ self.showspecialgroupscheckbox.setChecked(self.showsystemgroups)
+
+ #######################################################################
+ def __saveOptions(self):
+ global isroot
+ if isroot:
+ return
+ self.config.setGroup("General")
+ self.config.writeEntry("Geometry", self.size())
+ self.config.setGroup("Options")
+ self.config.writeEntry("ShowSystemAccounts",self.showsystemaccounts)
+ self.config.writeEntry("ShowSystemGroups",self.showsystemgroups)
+ self.config.sync()
+
+ #######################################################################
+ # KControl virtual void methods
+ def load(self):
+ pass
+ def save(self):
+ pass
+ def defaults(self):
+ pass
+ def sysdefaults(self):
+ pass
+
+ def aboutData(self):
+ # Return the KAboutData object which we created during initialisation.
+ return self.aboutdata
+ def buttons(self):
+ # Only supply a Help button. Other choices are Default and Apply.
+ return KCModule.Help
+
+###########################################################################
+
+# Rudd-O convenience class to map groups to privilege names
+class PrivilegeNames(dict):
+ """Convenience dict-derived class: map known secondary groups to privilege names, provide default mapping for groups that do not have a description. This could be replaced by a simple dict() but I simply preferred the class declaration.
+
+ FIXME This should ideally be included in a more general module so it can be reused."""
+
+ def __init__(self):
+ dict.__init__(self, {
+ "plugdev":i18n("Access external storage devices automatically"),
+ "adm":i18n("Administer the system"),
+ "ltsp":i18n("Allow use of FUSE filesystems like LTSP thin client block devices"),
+ "dialout":i18n("Connect to the Internet using a modem"),
+ "syslog":i18n("Monitor system logs"),
+ "fax":i18n("Send and receive faxes"),
+ "cdrom":i18n("Use CD-ROM and DVD drives"),
+ "floppy":i18n("Use floppy drives"),
+ "modem":i18n("Use modems"),
+ "scanner":i18n("Use scanners"),
+ })
+
+ def __getitem__(self,name):
+ # This is cruft but I couldn't bring myself to kill it bua!
+ if name in self: return dict.__getitem__(self,name)
+ return i18n("Be a member of the %s group")%name
+
+class UserEditDialog(KDialogBase):
+ def __init__(self,parent,admincontext):
+ KDialogBase.__init__(self,KJanusWidget.Tabbed,i18n("User Account"),KDialogBase.Ok|KDialogBase.Cancel,
+ KDialogBase.Cancel,parent)
+
+ self.admincontext = admincontext
+ self.updatingGUI = True
+
+ detailsvbox = self.addHBoxPage(i18n("Details"))
+ detailspace = QWidget(detailsvbox)
+
+ infogrid = QGridLayout(detailspace,9,2)
+ infogrid.setSpacing(self.spacingHint())
+ infogrid.setColStretch(0,0)
+ infogrid.setColStretch(1,1)
+
+ self.enabledradiogroup = QButtonGroup()
+ self.enabledradiogroup.setRadioButtonExclusive(True)
+ hb = QHBox(detailspace)
+ hb.setSpacing(self.spacingHint())
+ label = QLabel(hb)
+ label.setPixmap(UserIcon("hi32-identity"))
+ hb.setStretchFactor(label,0)
+ label = QLabel(i18n("Status:"),hb)
+ hb.setStretchFactor(label,1)
+ infogrid.addMultiCellWidget(hb,0,1,0,0)
+
+ self.enabledradio = QRadioButton(i18n("Enabled"),detailspace)
+ infogrid.addWidget(self.enabledradio,0,1)
+
+ hbox = QHBox(detailspace)
+ hbox.setSpacing(self.spacingHint())
+ self.disabledradio = QRadioButton(i18n("Disabled"),hbox)
+ hbox.setStretchFactor(self.disabledradio,0)
+ label = QLabel(hbox)
+ label.setPixmap(UserIcon("hi16-encrypted"))
+ hbox.setStretchFactor(label,1)
+ infogrid.addWidget(hbox,1,1)
+
+ self.enabledradiogroup.insert(self.enabledradio,0)
+ self.enabledradiogroup.insert(self.disabledradio,1)
+
+ label = QLabel(i18n("Login Name:"),detailspace)
+ infogrid.addWidget(label,2,0)
+ self.loginnameedit = KLineEdit("",detailspace)
+ self.loginnameedit.setValidator(LoginNameValidator(self.loginnameedit))
+
+ infogrid.addWidget(self.loginnameedit,2,1)
+ self.connect(self.loginnameedit, SIGNAL("textChanged(const QString &)"), self.slotLoginChanged)
+
+ label = QLabel(i18n("Real Name:"),detailspace)
+ infogrid.addWidget(label,3,0)
+ self.realnameedit = KLineEdit("",detailspace)
+ self.realnameedit.setValidator(RealUserNameValidator(self.realnameedit))
+
+ infogrid.addWidget(self.realnameedit,3,1)
+
+ label = QLabel(i18n("User ID:"),detailspace)
+ infogrid.addWidget(label,4,0)
+ self.uidedit = KLineEdit("",detailspace)
+ self.uidedit.setValidator(QIntValidator(0,65535,detailspace))
+ infogrid.addWidget(self.uidedit,4,1)
+
+ label = QLabel(i18n("Primary Group:"),detailspace)
+ infogrid.addWidget(label,5,0)
+ self.primarygroupedit = KComboBox(False,detailspace)
+ infogrid.addWidget(self.primarygroupedit,5,1)
+
+ label = QLabel(i18n("Home Directory:"),detailspace)
+ infogrid.addWidget(label,7,0)
+
+ hbox = QHBox(detailspace)
+ hbox.setSpacing(self.spacingHint())
+ self.homediredit = KLineEdit("",hbox)
+ hbox.setStretchFactor(self.homediredit,1)
+ self.connect(self.homediredit, SIGNAL("textChanged(const QString &)"), self.slotHomeDirChanged)
+ self.homedirbutton = KPushButton(i18n("Browse..."),hbox)
+ hbox.setStretchFactor(self.homedirbutton,0)
+ self.connect(self.homedirbutton,SIGNAL("clicked()"),self.slotBrowseHomeDirClicked)
+ infogrid.addWidget(hbox,7,1)
+
+ label = QLabel(i18n("Shell:"),detailspace)
+ infogrid.addWidget(label,8,0)
+
+ self.shelledit = KComboBox(True,detailspace)
+ for shell in self.admincontext.getUserShells():
+ self.shelledit.insertItem(shell)
+ infogrid.addWidget(self.shelledit,8,1)
+
+ # Rudd-O rules. Not so much, but enough to rule.
+ # yeah it's not my finest hour, but it works like a charm over here. Please feel free to clean up dead code that I commented
+ # I extend my deepest thanks to the people that have worked hard to construct this tool in the first place. I have no idea who the authors and contributors are, but it would make sense to have all the contributors listed on top of the file.
+ # Privileges and groups tab
+ groupsvbox = self.addHBoxPage(i18n("Privileges and groups"))
+
+ # Rudd-O now here we create the widget that will hold the group listing, and fill it with the groups.
+ self.privilegeslistview = QListView(groupsvbox)
+ self.privilegeslistview.addColumn(i18n("Privilege"),-1)
+ self.groupslistview = QListView(groupsvbox)
+ self.groupslistview.addColumn(i18n("Secondary group"),-1)
+ groupsvbox.setStretchFactor(self.privilegeslistview,3)
+ groupsvbox.setStretchFactor(self.groupslistview,2)
+
+ # Password and Security Tab.
+ passwordvbox = self.addVBoxPage(i18n("Password && Security"))
+
+ passwordspace = QWidget(passwordvbox)
+ passwordgrid = QGridLayout(passwordspace,8,3)
+ passwordgrid.setSpacing(self.spacingHint())
+ passwordgrid.setColStretch(0,0)
+ passwordgrid.setColStretch(1,0)
+ passwordgrid.setColStretch(2,1)
+ passwordvbox.setStretchFactor(passwordspace,0)
+
+ hb = QHBox(passwordspace)
+ hb.setSpacing(self.spacingHint())
+ label = QLabel(hb)
+ label.setPixmap(UserIcon("hi32-password"))
+ hb.setStretchFactor(label,0)
+ label = QLabel(i18n("Password:"),hb)
+ hb.setStretchFactor(label,1)
+ passwordgrid.addWidget(hb,0,0)
+
+ self.passwordedit = KPasswordEdit(passwordspace)
+ passwordgrid.addWidget(self.passwordedit,0,1)
+
+ # Last Change
+ label = QLabel(i18n("Last changed:"),passwordspace)
+ passwordgrid.addWidget(label,1,0)
+ self.lastchangelabel = KLineEdit("",passwordspace)
+ self.lastchangelabel.setReadOnly(True)
+ passwordgrid.addWidget(self.lastchangelabel,1,1)
+
+ self.validradiogroup = QButtonGroup()
+ self.validradiogroup.setRadioButtonExclusive(True)
+
+ # Valid until.
+ label = QLabel(i18n("Valid until:"),passwordspace)
+ passwordgrid.addWidget(label,2,0)
+ self.validalwaysradio = QRadioButton(i18n("Always"),passwordspace)
+ passwordgrid.addWidget(self.validalwaysradio,2,1)
+
+ hbox = QHBox(passwordspace)
+ hbox.setSpacing(self.spacingHint())
+ self.expireradio = QRadioButton(hbox)
+ hbox.setStretchFactor(self.expireradio,0)
+
+ self.expiredate = KDateWidget(hbox)
+ hbox.setStretchFactor(self.expiredate,1)
+ passwordgrid.addWidget(hbox,3,1)
+
+ self.validradiogroup.insert(self.validalwaysradio,0)
+ self.validradiogroup.insert(self.expireradio,1)
+ self.connect(self.validradiogroup,SIGNAL("clicked(int)"),self.slotValidUntilClicked)
+
+ # Password Aging & Expiration.
+ passwordaginggroup = QVGroupBox(i18n("Password Aging"),passwordvbox)
+ passwordaginggroup.setInsideSpacing(self.spacingHint())
+ passwordvbox.setStretchFactor(passwordaginggroup,0)
+
+ passwordagingwidget = QWidget(passwordaginggroup)
+
+ passwordaginggrid = QGridLayout(passwordagingwidget,4,3)
+ passwordaginggrid.setSpacing(self.spacingHint())
+
+ # [*] Require new password after: [_____5 days]
+ self.forcepasswordchangecheckbox = QCheckBox(passwordagingwidget)
+ self.connect(self.forcepasswordchangecheckbox,SIGNAL("toggled(bool)"),self.slotForcePasswordChangeToggled)
+ passwordaginggrid.addWidget(self.forcepasswordchangecheckbox,0,0)
+ label = QLabel(i18n("Require new password after:"),passwordagingwidget)
+ passwordaginggrid.addWidget(label,0,1)
+ self.maximumpasswordedit = QSpinBox(passwordagingwidget)
+ self.maximumpasswordedit.setSuffix(i18n(" days"))
+ self.maximumpasswordedit.setMinValue(1)
+ self.maximumpasswordedit.setMaxValue(365*5)
+ passwordaginggrid.addWidget(self.maximumpasswordedit,0,2)
+
+ label = QLabel(i18n("Warn before password expires:"),passwordagingwidget)
+ passwordaginggrid.addWidget(label,1,1)
+ self.warningedit = QSpinBox(passwordagingwidget)
+ self.warningedit.setPrefix(i18n("After "))
+ self.warningedit.setSuffix(i18n(" days"))
+ self.warningedit.setMinValue(0)
+ self.warningedit.setMaxValue(365*5)
+ self.warningedit.setSpecialValueText(i18n("Never"))
+ passwordaginggrid.addWidget(self.warningedit,1,2)
+
+ label = QLabel(i18n("Disable account after password expires:"),passwordagingwidget)
+ passwordaginggrid.addWidget(label,2,1)
+ self.disableexpireedit = QSpinBox(passwordagingwidget)
+ self.disableexpireedit.setPrefix(i18n("After "))
+ self.disableexpireedit.setSuffix(i18n(" days"))
+ self.disableexpireedit.setMinValue(0)
+ self.disableexpireedit.setMaxValue(365*5)
+ self.disableexpireedit.setSpecialValueText(i18n("Never"))
+ passwordaginggrid.addWidget(self.disableexpireedit,2,2)
+
+ self.enforcepasswordminagecheckbox = QCheckBox(passwordagingwidget)
+ self.connect(self.enforcepasswordminagecheckbox,SIGNAL("toggled(bool)"),self.slotEnforePasswordAgeToggled)
+ passwordaginggrid.addWidget(self.enforcepasswordminagecheckbox,3,0)
+
+ label = QLabel(i18n("Enforce minimum password age:"),passwordagingwidget)
+ passwordaginggrid.addWidget(label,3,1)
+ self.minimumpasswordedit = QSpinBox(passwordagingwidget)
+ self.minimumpasswordedit.setSuffix(i18n(" days"))
+ passwordaginggrid.addWidget(self.minimumpasswordedit,3,2)
+
+ spacer = QWidget(passwordvbox)
+ passwordvbox.setStretchFactor(spacer,1)
+
+ self.homedirdialog = KDirSelectDialog("/",True,self,"Select Home Directory",True)
+ self.createhomedirectorydialog = OverwriteHomeDirectoryDialog(None)
+ self.updatingGUI = False
+
+ def _repopulateGroupsPrivileges(self,excludegroups=None):
+ # needs listviews to be constructed. Expects a list of PwdGroups to be excluded
+
+ # rehash everything
+ self.privilegeslistview.clear()
+ self.groupslistview.clear()
+ self.secondarygroupcheckboxes = {}
+ pn = PrivilegeNames()
+
+ if excludegroups: excludegroups = [ g.getGroupname() for g in excludegroups ]
+ else: excludegroups = []
+ for group in [g.getGroupname() for g in self.admincontext.getGroups()]:
+ if group in excludegroups: continue
+ if group in pn:
+ name = i18n(unicode(pn[group]).encode(locale.getpreferredencoding()))
+ wid = self.privilegeslistview
+ else:
+ name = unicode(group).encode(locale.getpreferredencoding())
+ wid = self.groupslistview
+ self.secondarygroupcheckboxes[group] = QCheckListItem(wid,name,QCheckListItem.CheckBox)
+
+ ########################################################################
+ def showEditUser(self,userid):
+ self.updatingGUI = True
+ self.newusermode = False
+ self.userobj = self.admincontext.lookupUID(userid)
+ self.userid = userid
+ self.passwordedit.erase()
+ self.selectedgroups = [g.getGroupname() for g in self.userobj.getGroups()
+ if g is not self.userobj.getPrimaryGroup()]
+
+ # Rudd-O: now here we tick the appropriate group listing checkbox, and hide the currently active primary group of the user. We are repopulating because if the user to edit changes, we need to hide the user's secondary group. FIXME we should repopulate the groups privileges list when the primary group is changed in the other tab -- that is, on the change slot of the primary group drop down.
+ self._repopulateGroupsPrivileges(excludegroups=[self.userobj.getPrimaryGroup()])
+ for group,checkbox in self.secondarygroupcheckboxes.items():
+ if group in self.selectedgroups: checkbox.setState(QCheckListItem.On)
+ else: checkbox.setState(QCheckListItem.Off)
+
+ self.originalgroups = self.selectedgroups[:]
+ self.selectedgroups.sort()
+ self.__syncGUI()
+ self.uidedit.setReadOnly(True)
+ self.updatingGUI = False
+ self.homedirectoryislinked = False
+ if self.exec_loop()==QDialog.Accepted:
+ self.__updateObjectFromGUI(self.userobj)
+ # Set the password.
+ if self.passwordedit.password()!="":
+ self.userobj.setPassword(self.passwordedit.password())
+ # Update the groups for this user object. Rudd-O here's when you go in, stud.
+ # we collect the selected groups
+ self.selectedgroups = [ group for group,checkbox in self.secondarygroupcheckboxes.items() if checkbox.isOn() ]
+
+ for g in self.userobj.getGroups(): # this seems wasteful to remove the user from all groups then re-add, why not a cross check?
+ self.userobj.removeFromGroup(g)
+ for gn in self.selectedgroups:
+ self.userobj.addToGroup(self.admincontext.lookupGroupname(gn))
+
+ primarygroupname = unicode(self.primarygroupedit.currentText())
+ self.userobj.setPrimaryGroup(self.admincontext.lookupGroupname(primarygroupname))
+
+ # Enable/Disable the account
+ self.userobj.setLocked(self.enabledradiogroup.id(self.enabledradiogroup.selected())!=0)
+ self.admincontext.save()
+
+ ########################################################################
+ def showNewUser(self):
+ self.updatingGUI = True
+ self.newusermode = True
+ self.userobj = self.admincontext.newUser(True)
+
+ self.newgroup = self.admincontext.newGroup(True)
+ self.newgroup.setGroupname(self.__fudgeNewGroupName(self.userobj.getUsername()))
+ self.userobj.setPrimaryGroup(self.newgroup)
+
+ self.selectedgroups = [ u'dialout',u'cdrom',u'floppy',u'audio',u'video',
+ u'plugdev',u'lpadmin',u'scanner']
+ homedir = self.__fudgeNewHomeDirectory(self.userobj.getUsername())
+
+ # Rudd-O FIXME: now here we tick the proper groups that should be allowed. Now it selects what userconfig selected before. FIXME consider adding a drop down that will select the appropriate profile Limited User, Advanced User or Administrator (and see if there is a config file where these profiles can be read). We are repopulating because if the user to edit changes, we need to hide the user's secondary group. FIXME we should repopulate the groups privileges list when the primary group is changed in the other tab -- that is, on the change slot of the primary group drop down.
+ self._repopulateGroupsPrivileges()
+ for group,checkbox in self.secondarygroupcheckboxes.items():
+ if group in self.selectedgroups: checkbox.setState(QCheckListItem.On)
+ else: checkbox.setState(QCheckListItem.Off)
+
+ self.userobj.setHomeDirectory(homedir)
+ self.homediredit.setText(homedir)
+
+ shells = self.admincontext.getUserShells()
+ dshell = self.admincontext.dshell
+ if dshell and (dshell in shells):
+ self.userobj.setLoginShell(dshell)
+ elif '/bin/bash' in shells:
+ self.userobj.setLoginShell('/bin/bash')
+ elif '/bin/sh' in shells:
+ self.userobj.setLoginShell('/bin/sh')
+ elif len(shells)!=0:
+ self.userobj.setLoginShell(shells[0])
+
+ self.__syncGUI()
+
+ self.uidedit.setReadOnly(False)
+ self.updatingGUI = False
+ self.homedirectoryislinked = True
+ self.passwordedit.erase()
+ if self.exec_loop()==QDialog.Accepted:
+ self.__updateObjectFromGUI(self.userobj)
+
+ makehomedir = True
+ deleteoldhomedir = False
+
+ if os.path.exists(self.userobj.getHomeDirectory()):
+ rc = self.createhomedirectorydialog.do(self.userobj)
+ if rc==OverwriteHomeDirectoryDialog.CANCEL:
+ return None
+ if rc==OverwriteHomeDirectoryDialog.OK_KEEP:
+ makehomedir = False
+ else:
+ deleteoldhomedir = True
+
+ self.admincontext.addUser(self.userobj)
+
+ if self.admincontext.lookupGroupname(self.primarygroupname) is None:
+ # Create a new group
+ newgroup = self.admincontext.newGroup(True)
+ newgroup.setGroupname(self.primarygroupname)
+ self.admincontext.addGroup(newgroup)
+ self.userobj.setPrimaryGroup(newgroup)
+
+ # Update the groups for this user object. Rudd-O here's when you go in, stud.
+ # we collect the selected groups
+ self.selectedgroups = [ group for group,checkbox in self.secondarygroupcheckboxes.items() if checkbox.isOn() ]
+ for gn in self.selectedgroups:
+ self.userobj.addToGroup(self.admincontext.lookupGroupname(gn))
+
+ # Set the password.
+ if self.passwordedit.password()!="":
+ self.userobj.setPassword(self.passwordedit.password())
+
+ # Enable/Disable the account
+ self.userobj.setLocked(self.enabledradiogroup.id(self.enabledradiogroup.selected())!=0)
+ self.admincontext.save()
+
+ if deleteoldhomedir:
+ if os.path.exists(self.userobj.getHomeDirectory()):
+ shutil.rmtree(self.userobj.getHomeDirectory())
+ if makehomedir:
+ self.admincontext.createHomeDirectory(self.userobj)
+
+ return self.userobj.getUID()
+ else:
+ return None
+
+ ########################################################################
+ def slotOk(self):
+ ok = True
+ # Sanity check all values.
+ if self.newusermode:
+ newusername = unicode(self.realnameedit.text())
+ if self.admincontext.lookupUsername(newusername)!=None:
+ KMessageBox.sorry(self,i18n("Sorry, you must choose a different user name.\n'%1' is already being used.").arg(newusername))
+ ok = False
+ else:
+ newuid = int(unicode(self.uidedit.text()))
+ originaluid = self.userobj.getUID()
+ if self.admincontext.lookupUID(newuid)!=None:
+ rc = KMessageBox.questionYesNo(self,i18n("User ID in use"),
+ i18n("Sorry, the UID %1 is already in use. Should %2 be used instead?").arg(newuid).arg(originaluid))
+ if rc==KMessageBox.Yes:
+ self.uidedit.setValue(unicode(originaluid))
+ else:
+ ok = False
+ else:
+ self.userobj.setUID(newuid)
+ if ok:
+ self.passwordedit.clear()
+ KDialogBase.slotOk(self)
+
+ ########################################################################
+ def slotLoginChanged(self,text):
+ newtext = unicode(text)
+ if not self.updatingGUI:
+ if self.newusermode:
+ self.newprimarygroupname = self.__fudgeNewGroupName(newtext)
+ self.updatingGUI = True
+ self.primarygroupedit.changeItem(self.newprimarygroupname,0)
+ if self.homedirectoryislinked:
+ homedir = self.__fudgeNewHomeDirectory(newtext)
+ self.homediredit.setText(homedir)
+ self.updatingGUI = False
+
+ ########################################################################
+ def slotHomeDirChanged(self,text):
+ if self.updatingGUI==False:
+ self.homedirectoryislinked = False
+
+ ########################################################################
+ def __syncGUI(self):
+ if self.userobj.isLocked():
+ self.enabledradiogroup.setButton(1)
+ else:
+ self.enabledradiogroup.setButton(0)
+
+ self.loginnameedit.setText(self.userobj.getUsername())
+ self.realnameedit.setText(self.userobj.getRealName())
+ self.uidedit.setText(unicode(self.userobj.getUID()))
+ self.homediredit.setText(self.userobj.getHomeDirectory())
+ self.shelledit.setCurrentText(self.userobj.getLoginShell())
+
+ # Primary Group
+ self.primarygroupedit.clear()
+ allgroups = [g.getGroupname() for g in self.admincontext.getGroups()]
+ allgroups.sort()
+ self.availablegroups = allgroups[:]
+
+ try:
+ self.availablegroups.remove(self.userobj.getPrimaryGroup().getGroupname())
+ except ValueError:
+ pass
+
+ if self.newusermode:
+ # New user mode
+ self.newprimarygroupname = self.__fudgeNewGroupName(unicode(self.userobj.getUsername()))
+ primarygroupname = self.newprimarygroupname
+ self.primarygroupedit.insertItem(self.newprimarygroupname)
+ else:
+ # Existing user mode
+ primarygroupname = self.userobj.getPrimaryGroup().getGroupname()
+ for group in allgroups:
+ self.primarygroupedit.insertItem(group)
+ self.primarygroupedit.setCurrentText(primarygroupname)
+
+ # If ShadowExpire is turn off then we change the radio box.
+ if self.userobj.getExpirationDate() is None:
+ self.validradiogroup.setButton(0)
+ self.expiredate.setDisabled(True)
+ self.expiredate.setDate(SptimeToQDate(99999L))
+ else:
+ self.validradiogroup.setButton(1)
+ self.expiredate.setDisabled(False)
+ self.expiredate.setDate(SptimeToQDate(self.userobj.getExpirationDate()))
+
+ if self.userobj.getMaximumPasswordAge() is None:
+ # Password aging is turn off
+ self.forcepasswordchangecheckbox.setChecked(False)
+ d = True
+ else:
+ # Password aging is turn on
+ self.forcepasswordchangecheckbox.setChecked(True)
+ d = False
+ self.warningedit.setDisabled(d)
+ self.maximumpasswordedit.setDisabled(d)
+ self.disableexpireedit.setDisabled(d)
+
+ if self.userobj.getPasswordExpireWarning() is None:
+ self.warningedit.setValue(0)
+ else:
+ self.warningedit.setValue(self.userobj.getPasswordExpireWarning())
+
+ if self.userobj.getMaximumPasswordAge() is None:
+ self.maximumpasswordedit.setValue(30)
+ else:
+ self.maximumpasswordedit.setValue(self.userobj.getMaximumPasswordAge())
+
+ if self.userobj.getPasswordDisableAfterExpire() is None:
+ self.disableexpireedit.setValue(0)
+ else:
+ self.disableexpireedit.setValue(self.userobj.getPasswordDisableAfterExpire())
+
+ minage = self.userobj.getMinimumPasswordAgeBeforeChange()
+ self.enforcepasswordminagecheckbox.setChecked(minage>0)
+ self.minimumpasswordedit.setDisabled(minage<=0)
+ if minage<=0:
+ minage = 1
+ self.minimumpasswordedit.setValue(minage)
+
+ if self.userobj.getLastPasswordChange() in (None,0):
+ self.lastchangelabel.setText('-');
+ else:
+ self.lastchangelabel.setText(KGlobal.locale().formatDate(SptimeToQDate(int(self.userobj.getLastPasswordChange()))))
+
+ ########################################################################
+ def __updateObjectFromGUI(self,userobj):
+ username = unicode(self.loginnameedit.text())
+ userobj.setUsername(username)
+ userobj.setRealName(unicode(self.realnameedit.text()))
+
+ userobj.setHomeDirectory(unicode(self.homediredit.text()))
+ userobj.setLoginShell(unicode(self.shelledit.currentText()))
+ self.primarygroupname = unicode(self.primarygroupedit.currentText())
+ groupobj = self.admincontext.lookupGroupname(self.primarygroupname)
+ if groupobj is not None:
+ userobj.setPrimaryGroup(groupobj)
+
+ # Password expiration.
+ if self.validradiogroup.id(self.validradiogroup.selected())==0:
+ # Password is always valid.
+ userobj.setExpirationDate(None)
+ else:
+ # Password will expire at...
+ userobj.setExpirationDate(QDateToSptime(self.expiredate.date()))
+
+ if self.forcepasswordchangecheckbox.isChecked():
+ userobj.setMaximumPasswordAge(self.maximumpasswordedit.value())
+ else:
+ userobj.setMaximumPasswordAge(None)
+
+ if self.disableexpireedit.value()==0:
+ userobj.setPasswordDisableAfterExpire(None)
+ else:
+ userobj.setPasswordDisableAfterExpire(self.disableexpireedit.value())
+
+ if self.enforcepasswordminagecheckbox.isChecked():
+ userobj.setMinimumPasswordAgeBeforeChange(self.minimumpasswordedit.value())
+ else:
+ userobj.setMinimumPasswordAgeBeforeChange(0)
+
+ userobj.setPasswordExpireWarning(self.warningedit.value())
+
+ ########################################################################
+ def slotBrowseHomeDirClicked(self):
+ fileurl = KURL()
+ fileurl.setPath(self.homediredit.text())
+ self.homedirdialog.setCurrentURL(fileurl)
+ if self.homedirdialog.exec_loop()==QDialog.Accepted:
+ self.homediredit.setText(self.homedirdialog.url().path())
+ self.homedirectoryislinked = False
+
+ ########################################################################
+ def slotValidUntilClicked(self,id):
+ if id==0:
+ self.expiredate.setDisabled(True)
+ else:
+ self.expiredate.setDisabled(False)
+
+ ########################################################################
+ def slotForcePasswordChangeToggled(self,on):
+ on = not on
+ self.warningedit.setDisabled(on)
+ self.maximumpasswordedit.setDisabled(on)
+ self.disableexpireedit.setDisabled(on)
+
+ ########################################################################
+ def slotEnforePasswordAgeToggled(self,on):
+ self.minimumpasswordedit.setDisabled(not on)
+
+ #######################################################################
+ def __fudgeNewGroupName(self,basename):
+ if self.admincontext.lookupGroupname(basename) is None:
+ return basename
+ x = 1
+ while self.admincontext.lookupGroupname(basename + u'_' + unicode(x)) is not None:
+ x += 1
+ return basename + u'_' + unicode(x)
+
+ #######################################################################
+ def __fudgeNewHomeDirectory(self,origbasename):
+ basename = origbasename.replace("/","")
+ if basename=="":
+ basename = u"user"
+
+ dhome = self.admincontext.dhome
+ if not os.path.isdir(dhome):
+ raise OSError, dhome+" does not exist, is it correctly set in "+ \
+ self.admincontext.adduserconf+" ?"
+ else:
+ # Make sure there's a trailing /
+ if dhome[-1] is not '/':
+ dhome = dhome+'/'
+
+ if os.path.exists(dhome+basename)==False:
+ return dhome+basename
+ else:
+ x = 1
+ while os.path.exists(dhome+basename + u'_' + unicode(x)):
+ x += 1
+ return dhome+basename
+
+
+###########################################################################
+class LoginNameValidator(QValidator):
+ def __init__(self,parent):
+ QValidator.__init__(self,parent)
+
+ #######################################################################
+ def validate(self,inputstr,pos):
+ instr = unicode(inputstr)
+ if len(instr)==0:
+ return (QValidator.Intermediate,pos)
+ for c in instr:
+ if ord(c)<0x20 or ord(c)>0x7f or c.isspace() or c==":" or c=="," or c==".":
+ return (QValidator.Invalid,pos)
+
+ # Try to encode this string in the system encoding.
+ try:
+ instr.encode(locale.getpreferredencoding())
+ except UnicodeEncodeError:
+ # won't encode -> reject it.
+ return (QValidator.Invalid,pos)
+
+ return (QValidator.Acceptable,pos)
+
+ #######################################################################
+ def fixup(self,inputstr):
+ instr = unicode(inputstr)
+ newstr = ""
+ for c in instr:
+ if (ord(c)<0x20 or ord(c)>0x7f or c.isspace() or c==":" or c=="," or c==".")==False:
+ newstr += c
+
+ if newstr=="":
+ return "user"
+ else:
+ return newstr
+
+###########################################################################
+class RealUserNameValidator(QValidator):
+ def __init__(self,parent):
+ QValidator.__init__(self,parent)
+
+ #######################################################################
+ def validate(self,inputstr,pos):
+ instr = unicode(inputstr)
+ for c in instr:
+ if c==":":
+ return (QValidator.Invalid,pos)
+
+ # Try to encode this string in the system encoding.
+ try:
+ instr.encode(locale.getpreferredencoding())
+ except UnicodeEncodeError:
+ # won't encode -> reject it.
+ return (QValidator.Invalid,pos)
+
+ return (QValidator.Acceptable,pos)
+
+ #######################################################################
+ def fixup(self,inputstr):
+ return unicode(inputstr).replace(":","")
+
+###########################################################################
+class ListPickerDialog(KDialogBase):
+ def __init__(self,parent,caption,leftlabel,rightlabel):
+ KDialogBase.__init__(self,parent,None,True,caption,KDialogBase.Ok|KDialogBase.Cancel, KDialogBase.Cancel)
+
+ self.tophbox = QHBox(self)
+ self.setMainWidget(self.tophbox)
+ self.tophbox.setSpacing(self.spacingHint())
+ # Available Groups
+ vbox = QVBox(self.tophbox)
+ self.tophbox.setStretchFactor(vbox,1)
+ label = QLabel(leftlabel,vbox)
+ vbox.setStretchFactor(label,0)
+ self.availablelist = KListBox(vbox)
+ vbox.setStretchFactor(self.availablelist,1)
+
+ # ->, <- Buttons
+ vbox = QVBox(self.tophbox)
+ self.tophbox.setStretchFactor(vbox,0)
+ spacer = QWidget(vbox);
+ vbox.setStretchFactor(spacer,1)
+ self.addbutton = KPushButton(i18n("Add ->"),vbox)
+ self.connect(self.addbutton,SIGNAL("clicked()"),self.slotAddClicked)
+ vbox.setStretchFactor(self.addbutton,0)
+ self.removebutton = KPushButton(i18n("<- Remove"),vbox)
+ self.connect(self.removebutton,SIGNAL("clicked()"),self.slotRemoveClicked)
+ vbox.setStretchFactor(self.removebutton,0)
+ spacer = QWidget(vbox);
+ vbox.setStretchFactor(spacer,1)
+
+ # Selected Groups
+ vbox = QVBox(self.tophbox)
+ self.tophbox.setStretchFactor(vbox,1)
+ label = QLabel(rightlabel,vbox)
+ vbox.setStretchFactor(label,0)
+ self.selectedlist = KListBox(vbox)
+ vbox.setStretchFactor(self.selectedlist,1)
+
+ #######################################################################
+ def do(self,grouplist,selectedlist):
+ self.selectedlist.clear()
+ for item in selectedlist:
+ self.selectedlist.insertItem(item)
+ self.selectedlist.sort()
+
+ self.availablelist.clear()
+ for item in grouplist:
+ if item not in selectedlist:
+ self.availablelist.insertItem(item)
+ self.availablelist.sort()
+
+ self._selectFirstAvailable()
+ self.addbutton.setDisabled(self.availablelist.selectedItem()==None)
+
+ self._selectFirstSelected()
+ self.removebutton.setDisabled(self.selectedlist.selectedItem()==None)
+
+ if self.exec_loop()==QDialog.Accepted:
+ newlist = []
+ for i in range(self.selectedlist.count()):
+ newlist.append(unicode(self.selectedlist.item(i).text()))
+ return newlist
+ else:
+ return selectedlist
+
+ #######################################################################
+ def slotAddClicked(self):
+ item = self.availablelist.selectedItem()
+ if item!=None:
+ self.selectedlist.insertItem(item.text())
+ self.availablelist.removeItem(self.availablelist.index(item))
+ self._selectFirstAvailable()
+ self._selectFirstSelected()
+ self.addbutton.setDisabled(self.availablelist.selectedItem()==None)
+ self.removebutton.setDisabled(self.selectedlist.selectedItem()==None)
+
+ #######################################################################
+ def slotRemoveClicked(self):
+ item = self.selectedlist.selectedItem()
+ if item!=None:
+ self.availablelist.insertItem(item.text())
+ self.selectedlist.removeItem(self.selectedlist.index(item))
+ self._selectFirstAvailable()
+ self._selectFirstSelected()
+ self.addbutton.setDisabled(self.availablelist.selectedItem()==None)
+ self.removebutton.setDisabled(self.selectedlist.selectedItem()==None)
+
+ #######################################################################
+ def _selectFirstAvailable(self):
+ if self.availablelist.count()!=0:
+ if self.availablelist.selectedItem()==None:
+ self.availablelist.setSelected(0,True)
+
+ #######################################################################
+ def _selectFirstSelected(self):
+ if self.selectedlist.count()!=0:
+ if self.selectedlist.selectedItem()==None:
+ self.selectedlist.setSelected(0,True)
+
+###########################################################################
+class UserDeleteDialog(KDialog):
+ def __init__(self,parent,admincontext):
+ KDialog.__init__(self,parent,"Delete user dialog",True,Qt.WType_Dialog)
+ self.setCaption(i18n("Delete User Account"))
+ self.admincontext = admincontext
+ self.updatingGUI = True
+
+ toplayout = QVBoxLayout(self)
+ toplayout.setSpacing(self.spacingHint())
+ toplayout.setMargin(self.marginHint())
+
+ contentbox = QHBox(self)
+ contentbox.setSpacing(self.spacingHint())
+ toplayout.addWidget(contentbox)
+ toplayout.setStretchFactor(contentbox,1)
+
+ label = QLabel(contentbox)
+ label.setPixmap(KGlobal.iconLoader().loadIcon("messagebox_warning", KIcon.NoGroup, KIcon.SizeMedium,
+ KIcon.DefaultState, None, True))
+ contentbox.setStretchFactor(label,0)
+
+ textbox = QVBox(contentbox)
+
+ textbox.setSpacing(self.spacingHint())
+ textbox.setMargin(self.marginHint())
+
+ self.usernamelabel = QLabel("",textbox)
+ textbox.setStretchFactor(self.usernamelabel,0)
+
+ # Remove directory checkbox.
+ self.deletedirectorycheckbox = QCheckBox(i18n("Delete home directory ()"),textbox)
+ textbox.setStretchFactor(self.deletedirectorycheckbox,0)
+
+ # Delete the User's private group.
+ self.deletegroupcheckbox = QCheckBox(i18n("Delete group ()"),textbox)
+ textbox.setStretchFactor(self.deletegroupcheckbox ,0)
+
+ # Buttons
+ buttonbox = QHBox(self)
+ toplayout.addWidget(buttonbox)
+
+ buttonbox.setSpacing(self.spacingHint())
+ toplayout.setStretchFactor(buttonbox,0)
+
+ spacer = QWidget(buttonbox)
+ buttonbox.setStretchFactor(spacer,1)
+
+ okbutton = QPushButton(i18n("OK"),buttonbox)
+ buttonbox.setStretchFactor(okbutton,0)
+ self.connect(okbutton,SIGNAL("clicked()"),self.slotOkClicked)
+
+ cancelbutton = QPushButton(i18n("Cancel"),buttonbox)
+ cancelbutton.setDefault(True)
+ buttonbox.setStretchFactor(cancelbutton,0)
+ self.connect(cancelbutton,SIGNAL("clicked()"),self.slotCancelClicked)
+
+ def deleteUser(self,userid):
+ # Setup the
+ userobj = self.admincontext.lookupUID(userid)
+ self.usernamelabel.setText(i18n("Are you sure want to delete user account '%1' (%2)?").arg(userobj.getUsername()).arg(userobj.getUID()) )
+ self.deletedirectorycheckbox.setChecked(False)
+ self.deletedirectorycheckbox.setText(i18n("Delete home directory (%1)").arg(userobj.getHomeDirectory()))
+ primarygroupobj = userobj.getPrimaryGroup()
+ primarygroupname = primarygroupobj.getGroupname()
+ self.deletegroupcheckbox.setText(i18n("Delete group '%1' (%2)").arg(primarygroupname).arg(primarygroupobj.getGID()))
+ self.deletegroupcheckbox.setChecked(len(primarygroupobj.getUsers())==1)
+ if self.exec_loop()==QDialog.Accepted:
+ self.admincontext.removeUser(userobj)
+ if self.deletedirectorycheckbox.isChecked():
+ self.admincontext.removeHomeDirectory(userobj)
+ # FIXME
+ #self.admincontext.removeMail(userobj)
+ if self.deletegroupcheckbox.isChecked():
+ self.admincontext.removeGroup(primarygroupobj)
+ self.admincontext.save()
+ return True
+ else:
+ return False
+
+ def slotOkClicked(self):
+ self.accept()
+
+ def slotCancelClicked(self):
+ self.reject()
+
+###########################################################################
+class OverwriteHomeDirectoryDialog(KDialog):
+ CANCEL = 0
+ OK_KEEP = 1
+ OK_REPLACE = 2
+
+ def __init__(self,parent):
+ KDialog.__init__(self,parent,"Create home directory",True,Qt.WType_Dialog)
+ self.setCaption(i18n("Create home directory"))
+ self.updatingGUI = True
+
+ toplayout = QVBoxLayout(self)
+ toplayout.setSpacing(self.spacingHint())
+ toplayout.setMargin(self.marginHint())
+
+ contentbox = QHBox(self)
+ contentbox.setSpacing(self.spacingHint())
+ toplayout.addWidget(contentbox)
+ toplayout.setStretchFactor(contentbox,1)
+
+ label = QLabel(contentbox)
+ label.setPixmap(KGlobal.iconLoader().loadIcon("messagebox_warning", KIcon.NoGroup, KIcon.SizeMedium,
+ KIcon.DefaultState, None, True))
+ contentbox.setStretchFactor(label,0)
+
+ textbox = QVBox(contentbox)
+
+ textbox.setSpacing(self.spacingHint())
+ textbox.setMargin(self.marginHint())
+
+ # "%dir was selected as the home directory for %user. This directory already exists. Shall I:."
+ self.toplabel = QLabel("",textbox)
+ textbox.setStretchFactor(self.toplabel,0)
+
+ self.radiogroup = QButtonGroup()
+ self.radiogroup.setRadioButtonExclusive(True)
+
+ # Use Existing home directory radio button.
+ self.usehomedirectoryradio = QRadioButton(i18n("Use the existing directory without changing it."),textbox)
+ textbox.setStretchFactor(self.usehomedirectoryradio,0)
+
+ # Replace home directory radio button
+ self.replacehomedirectoryradio = QRadioButton(i18n("Delete the directory and replace it with a new home directory."),textbox)
+ textbox.setStretchFactor(self.replacehomedirectoryradio ,0)
+
+ self.radiogroup.insert(self.usehomedirectoryradio,0)
+ self.radiogroup.insert(self.replacehomedirectoryradio,1)
+
+ # Buttons
+ buttonbox = QHBox(self)
+ toplayout.addWidget(buttonbox)
+
+ buttonbox.setSpacing(self.spacingHint())
+ toplayout.setStretchFactor(buttonbox,0)
+
+ spacer = QWidget(buttonbox)
+ buttonbox.setStretchFactor(spacer,1)
+
+ okbutton = QPushButton(i18n("OK"),buttonbox)
+ buttonbox.setStretchFactor(okbutton,0)
+ self.connect(okbutton,SIGNAL("clicked()"),self.slotOkClicked)
+
+ cancelbutton = QPushButton(i18n("Cancel"),buttonbox)
+ cancelbutton.setDefault(True)
+ buttonbox.setStretchFactor(cancelbutton,0)
+ self.connect(cancelbutton,SIGNAL("clicked()"),self.slotCancelClicked)
+
+ def do(self,userobj):
+ # Setup the
+ self.toplabel.setText(i18n("The directory '%1' was entered as the home directory for new user '%2'.\n This directory already exists.") \
+ .arg(userobj.getHomeDirectory()).arg(userobj.getUsername()) )
+ self.radiogroup.setButton(0)
+
+ if self.exec_loop()==QDialog.Accepted:
+ if self.radiogroup.selectedId()==0:
+ return OverwriteHomeDirectoryDialog.OK_KEEP
+ else:
+ return OverwriteHomeDirectoryDialog.OK_REPLACE
+ else:
+ return OverwriteHomeDirectoryDialog.CANCEL
+
+ def slotOkClicked(self):
+ self.accept()
+
+ def slotCancelClicked(self):
+ self.reject()
+
+###########################################################################
+class GroupEditDialog(KDialogBase):
+ def __init__(self,parent,admincontext):
+ KDialogBase.__init__(self,parent,None,True,i18n("Edit Group"),KDialogBase.Ok|KDialogBase.Cancel,
+ KDialogBase.Cancel)
+
+ self.admincontext = admincontext
+
+ topvbox = QVBox(self)
+ topvbox.setSpacing(self.spacingHint())
+ self.setMainWidget(topvbox)
+
+ detailspace = QWidget(topvbox)
+
+ # Info about the group.
+ editgrid = QGridLayout(detailspace,2,2)
+ editgrid.setSpacing(self.spacingHint())
+
+ label = QLabel(i18n("Group Name:"),detailspace)
+ editgrid.addWidget(label,0,0)
+ self.groupnamelabel = KLineEdit("",detailspace)
+ self.groupnamelabel.setReadOnly(True)
+ editgrid.addWidget(self.groupnamelabel,0,1)
+
+ label = QLabel(i18n("Group ID:"),detailspace)
+ editgrid.addWidget(label,1,0)
+ self.groupidlabel = KLineEdit("",detailspace)
+ self.groupidlabel.setReadOnly(True)
+ editgrid.addWidget(self.groupidlabel,1,1)
+
+ # Available Groups
+ tophbox = QHBox(topvbox)
+ tophbox.setSpacing(self.spacingHint())
+
+ hbox = tophbox
+
+ vbox = QVBox(hbox)
+ vbox.setSpacing(self.spacingHint())
+ hbox.setStretchFactor(vbox,1)
+ label = QLabel(i18n("Available Accounts"),vbox)
+ vbox.setStretchFactor(label,0)
+ self.availablelist = KListBox(vbox)
+ vbox.setStretchFactor(self.availablelist,1)
+
+ # ->, <- Buttons
+ vbox = QVBox(hbox)
+ vbox.setSpacing(self.spacingHint())
+ hbox.setStretchFactor(vbox,0)
+ spacer = QWidget(vbox);
+ vbox.setStretchFactor(spacer,1)
+ self.addbutton = KPushButton(i18n("Add ->"),vbox)
+ self.connect(self.addbutton,SIGNAL("clicked()"),self.slotAddClicked)
+ vbox.setStretchFactor(self.addbutton,0)
+ self.removebutton = KPushButton(i18n("<- Remove"),vbox)
+ self.connect(self.removebutton,SIGNAL("clicked()"),self.slotRemoveClicked)
+ vbox.setStretchFactor(self.removebutton,0)
+ spacer = QWidget(vbox);
+ vbox.setStretchFactor(spacer,1)
+
+ # Selected Groups
+ vbox = QVBox(hbox)
+ vbox.setSpacing(self.spacingHint())
+ hbox.setStretchFactor(vbox,1)
+ label = QLabel(i18n("Selected Accounts"),vbox)
+ vbox.setStretchFactor(label,0)
+ self.selectedlist = KListBox(vbox)
+ vbox.setStretchFactor(self.selectedlist,1)
+
+ #######################################################################
+ def showEditGroup(self,groupid):
+ self.groupid = groupid
+ self.newgroupmode = False
+
+ groupobj = self.admincontext.lookupGID(groupid)
+
+ self.groupnamelabel.setText(groupobj.getGroupname())
+ self.groupidlabel.setText(unicode(groupid))
+
+ availablemembers = [u.getUsername() for u in self.admincontext.getUsers()]
+ originalmembers = [u.getUsername() for u in groupobj.getUsers()]
+
+ self.__updateLists(availablemembers,originalmembers)
+
+ if self.exec_loop()==QDialog.Accepted:
+ newmembers = []
+ for i in range(self.selectedlist.count()):
+ newmembers.append(unicode(self.selectedlist.item(i).text()))
+
+ # Remove from the group object any unselected users.
+ for member in originalmembers:
+ if u not in newmembers:
+ self.admincontext.lookupUsername(member).removeFromGroup(groupobj)
+ # Put the additional members in the group
+ for member in newmembers:
+ self.admincontext.lookupUsername(member).addToGroup(groupobj)
+ self.admincontext.save()
+ return True
+ else:
+ return False
+
+ #######################################################################
+ def showNewGroup(self):
+ self.updatingGUI = True
+ self.newgroupmode = True
+
+ groupname = self.__fudgeNewGroupName(i18n("<Base string for creating new group names>","new_group"))
+
+ self.groupobj = self.admincontext.newGroup(True)
+ self.groupobj.setGroupname(groupname)
+
+ groupname = self.groupobj.getGroupname()
+ self.groupnamelabel.setText(groupname)
+ self.groupnamelabel.setReadOnly(False)
+ self.groupidlabel.setText(unicode(self.groupobj.getGID()))
+ self.groupidlabel.setReadOnly(False)
+
+ availablemembers = [u.getUsername() for u in self.admincontext.getUsers()]
+
+ self.__updateLists(availablemembers,[])
+
+ if self.exec_loop()==QDialog.Accepted:
+ self.groupobj.setGroupname(unicode(self.groupnamelabel.text()))
+ newgroupid = int(unicode(self.groupidlabel.text()))
+ self.groupobj.setGID(newgroupid)
+
+ newmembers = []
+ for i in range(self.selectedlist.count()):
+ newmembers.append(unicode(self.selectedlist.item(i).text()))
+
+ self.admincontext.addGroup(self.groupobj)
+
+ # Put the additional members in the group
+ for member in newmembers:
+ self.admincontext.lookupUsername(member).addToGroup(self.groupobj)
+ self.admincontext.save()
+
+ return newgroupid
+ else:
+ return None
+
+ #######################################################################
+ def slotAddClicked(self):
+ item = self.availablelist.selectedItem()
+ if item!=None:
+ self.selectedlist.insertItem(item.text())
+ self.availablelist.removeItem(self.availablelist.index(item))
+ self._selectFirstAvailable()
+ self._selectFirstSelected()
+ self.addbutton.setDisabled(self.availablelist.selectedItem()==None)
+ self.removebutton.setDisabled(self.selectedlist.selectedItem()==None)
+
+ #######################################################################
+ def slotRemoveClicked(self):
+ item = self.selectedlist.selectedItem()
+ if item!=None:
+ self.availablelist.insertItem(item.text())
+ self.selectedlist.removeItem(self.selectedlist.index(item))
+ self._selectFirstAvailable()
+ self._selectFirstSelected()
+ self.addbutton.setDisabled(self.availablelist.selectedItem()==None)
+ self.removebutton.setDisabled(self.selectedlist.selectedItem()==None)
+
+ #######################################################################
+ def __updateLists(self,grouplist,selectedlist):
+ self.selectedlist.clear()
+ for item in selectedlist:
+ self.selectedlist.insertItem(item)
+ self.selectedlist.sort()
+
+ self.availablelist.clear()
+ for item in grouplist:
+ if item not in selectedlist:
+ self.availablelist.insertItem(item)
+ self.availablelist.sort()
+
+ self._selectFirstAvailable()
+ self.addbutton.setDisabled(self.availablelist.selectedItem()==None)
+
+ self._selectFirstSelected()
+ self.removebutton.setDisabled(self.selectedlist.selectedItem()==None)
+
+ #######################################################################
+ def _selectFirstAvailable(self):
+ if self.availablelist.count()!=0:
+ if self.availablelist.selectedItem()==None:
+ self.availablelist.setSelected(0,True)
+
+ #######################################################################
+ def _selectFirstSelected(self):
+ if self.selectedlist.count()!=0:
+ if self.selectedlist.selectedItem()==None:
+ self.selectedlist.setSelected(0,True)
+
+ #######################################################################
+ def __fudgeNewGroupName(self,basename):
+ availablegroups = [g.getGroupname() for g in self.admincontext.getGroups()]
+ if basename not in availablegroups:
+ return basename
+ x = 1
+ while basename + u'_' + unicode(x) in availablegroups:
+ x += 1
+ return basename + u'_' + unicode(x)
+
+############################################################################
+# Factory function for KControl
+def create_userconfig(parent,name):
+ return UserConfigApp(parent, name)
+
+##########################################################################
+def MakeAboutData():
+ aboutdata = KAboutData("guidance", programname, version,
+ unicode(i18n("User and Group Configuration Tool")).encode(locale.getpreferredencoding()),
+ KAboutData.License_GPL, "Copyright (C) 2003-2007 Simon Edwards")
+ aboutdata.addAuthor("Simon Edwards", "Developer", "simon@simonzone.com", "http://www.simonzone.com/software/")
+ aboutdata.addAuthor("Sebastian Kügler", "Developer", "sebas@kde.org", "http://vizZzion.org")
+ return aboutdata
+
+if standalone:
+ aboutdata = MakeAboutData()
+
+ KCmdLineArgs.init(sys.argv,aboutdata)
+
+ kapp = KApplication()
+ userconfigapp = UserConfigApp()
+ userconfigapp.exec_loop()
diff --git a/wineconfig/drivedetect.py b/wineconfig/drivedetect.py
new file mode 100644
index 0000000..5916b18
--- /dev/null
+++ b/wineconfig/drivedetect.py
@@ -0,0 +1,122 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# wineread.py - description #
+# ------------------------------ #
+# begin : Fri Mar 26 2004 #
+# copyright : (C) 2006 by Yuriy Kozlov #
+# email : yuriy.kozlov@gmail.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+import os
+import wineread
+
+""" Reads a default set of drives from /etc/fstab """
+
+fstabpath = "/etc/fstab"
+
+# Listed in winecfg
+ignored_fs_types = set(["devpts",
+ "tmpfs",
+ "proc",
+ "sysfs",
+ "swap",
+ "usbdevfs",
+ "rpc_pipefs",
+ "binfmt_misc"])
+
+# Listed in winecfg
+ignored_mnt_pts = set(["/boot"])
+
+cd_fs_types = set(["cdfs","udf","iso9660"])
+
+# An incomplete listing, I don't know how winecfg does this.
+# RAMFS is included here because I don't know what the correct type for it is in wine.
+hd_fs_types = set(["ext4","ext3","ext2","ext","fat","fat32","fat16","ntfs","reiserfs","reiser4",
+ "jfs","xfs","ramfs","vfat","ufs","hfs","hfsplus"])
+
+# Listed in winecfg
+net_fs_types = set(["nfs","nfs4","smbfs","cifs","coda"])
+
+def autodetect(drives=None):
+ """ Returns a set of drives found by scanning /etc/fstab, and an error code """
+ if not drives:
+ drives = wineread.GetEmptyDrives()
+ mappings = set()
+ if not drives[2][2]:
+ drives[2][2] = "../drive_c"
+ drives[2][3] = "hd"
+
+ for drive in drives:
+ mapping = drive[2]
+ if mapping:
+ mappings.add(mapping)
+
+ driveid = 3
+ fstab=open(fstabpath,'r')
+
+ for driveline in fstab:
+ if driveline[0] == '#' or len(driveline.strip()) == 0: # Comment or empty line
+ continue
+ else:
+ driveprops = driveline.split()
+ fs = driveprops[0]
+ mnt = driveprops[1]
+ fstypes = set(driveprops[2].split(','))
+
+ ignore = False
+ for fstype in fstypes:
+ if fstype in ignored_fs_types:
+ ignore = True
+ break
+
+ if mnt in ignored_mnt_pts or mnt in mappings:
+ ignore = True
+
+ if not ignore:
+ while drives[driveid][2]: # Drive is in use, don't overwrite.
+ driveid += 1
+ if driveid > 25:
+ return (1,drives)
+ drives[driveid][2] = mnt
+ if "/dev/fd" in fs or "floppy" in mnt:
+ drives[driveid][3] = "floppy"
+ elif fstype in cd_fs_types or "/dev/cdrom" in fs or "cdrom" in mnt:
+ drives[driveid][3] = "cdrom"
+ elif fstype in hd_fs_types:
+ drives[driveid][3] = "hd"
+ elif fstype in net_fs_types:
+ drives[driveid][3] = "network"
+ else:
+ drives[driveid][3] = "auto"
+ driveid += 1
+
+ fstab.close()
+ return (0,drives)
+
+def autodetectshelllinks(shelllinks = None):
+ """ Returns a default set of windows shell folder mappings """
+ if not shelllinks:
+ shelllinks = wineread.GetEmptyShellLinks()
+
+ for link in shelllinks:
+ if link[2]:
+ continue
+ else:
+ link[3] = "shellfolder"
+ #link[4] = wineread.winepath + "/dosdevices/c:/windows/profiles/" + os.environ['USER'] + "/" + link[1]
+ link[4] = wineread.defaultwinfolderspath + "\\" + link[1]
+ link[5] = wineread.defaultwinfolderspath + "\\" + link[1]
+ link[2] = os.environ['HOME']
+ if link[1] == "Desktop":
+ link[2] = os.environ['HOME'] + "/Desktop"
+
+ return shelllinks
diff --git a/wineconfig/firstrunwizard.py b/wineconfig/firstrunwizard.py
new file mode 100755
index 0000000..c6d3d67
--- /dev/null
+++ b/wineconfig/firstrunwizard.py
@@ -0,0 +1,326 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# wineconfig.py - description #
+# ------------------------------ #
+# begin : Fri Mar 26 2004 #
+# copyright : (C) 2006 by Yuriy Kozlov #
+# email : yuriy.kozlov@gmail.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdecore import *
+from kdeui import *
+from kfile import *
+from kio import *
+import os
+import sys
+import signal
+import wineread
+import winewrite
+import drivedetect
+
+class FirstRunWizard(KWizard):
+ default_winepath = os.environ['HOME'] + "/.wine"
+
+ def __init__(self, parent = None, name=None, modal=0, fl=0):
+ KWizard.__init__(self,parent,name,modal,fl)
+
+ if not name:
+ self.setName("firstrunwizard")
+
+ self.imagedir = unicode(KGlobal.dirs().findDirs("data","guidance/pics")[0])
+
+ self.setupPage1()
+ self.setupPageVersion()
+ self.setupPageExistingWine()
+ self.setupPageCreateWine()
+ self.slotCreateExistingToggled(0)
+ #self.connect(self,SIGNAL("selected(const QString &)"),self.slotPageChanged)
+
+ #self.resize(QSize(600,480).expandedTo(self.minimumSizeHint()))
+ self.clearWState(Qt.WState_Polished)
+
+ def setupPage1(self):
+ page1 = QHBox(self,"page1")
+
+ self.kdewinepicture = QLabel(page1,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(page1)
+ spacer.setMinimumSize(QSize(6,300))
+
+ pagebody = QVBox(page1,"pagebody")
+ page1.setStretchFactor(pagebody,1)
+
+ introtext = QLabel(pagebody,"introtext")
+ introtext.setText(i18n("It appears that you do not yet have a Windows drive set up.\n" +\
+ "This wizard will help set it up so that you can run windows applications.\n"))
+
+ spacer = QWidget(pagebody)
+ spacer.setMinimumSize(QSize(6,20))
+
+ self.createinstall = True
+
+ createwinepathchoice = QRadioButton(i18n("Set up the fake windows installation " +\
+ "in the following directory:"),pagebody)
+
+ self.winepath = self.default_winepath
+ hbox = QHBox(pagebody)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.winefolderedit = KLineEdit(self.winepath,hbox)
+ self.urlcompletion = KURLCompletion(KURLCompletion.DirCompletion)
+ self.winefolderedit.setCompletionObject(self.urlcompletion)
+ self.winefolderedit.setCompletionMode(KGlobalSettings.CompletionPopup)
+ self.connect(self.winefolderedit,SIGNAL("textChanged(const QString &)"),self.slotWineFolderEdited)
+
+ self.browsecreatebutton = KPushButton(i18n("Browse"),hbox)
+ self.connect(self.browsecreatebutton,SIGNAL("clicked()"),self.slotBrowseClicked)
+
+ spacer = QWidget(pagebody)
+ spacer.setMinimumSize(QSize(6,10))
+
+ existingwinepathchoice = QRadioButton(i18n("There is already a fake windows installation " +\
+ "in the following directory:"),pagebody)
+
+ hbox = QHBox(pagebody)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.existingwinefolderedit = KLineEdit("",hbox)
+ self.urlcompletion = KURLCompletion(KURLCompletion.DirCompletion)
+ self.existingwinefolderedit.setCompletionObject(self.urlcompletion)
+ self.existingwinefolderedit.setCompletionMode(KGlobalSettings.CompletionPopup)
+ self.connect(self.existingwinefolderedit,SIGNAL("textChanged(const QString &)"),self.slotWineFolderEdited)
+
+ self.browseexistingbutton = KPushButton(i18n("Browse"),hbox)
+ self.connect(self.browseexistingbutton,SIGNAL("clicked()"),self.slotBrowseClicked)
+
+ self.createexistingchoicesgroup = QButtonGroup(pagebody,"createexistingchoicesgroup")
+ self.createexistingchoicesgroup.insert(createwinepathchoice,0)
+ self.createexistingchoicesgroup.insert(existingwinepathchoice,1)
+ self.createexistingchoicesgroup.setExclusive(True)
+ self.createexistingchoicesgroup.hide()
+ self.createexistingchoicesgroup.setButton(0)
+ self.connect(self.createexistingchoicesgroup,SIGNAL("clicked(int)"),self.slotCreateExistingToggled)
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( page1, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( page1, False )
+ self.setNextEnabled( page1, True )
+ self.setHelpEnabled( page1, False )
+ self.setFinishEnabled( page1, False )
+
+ def setupPageExistingWine(self):
+ self.pageexisting = QHBox(self,"pageexisting")
+
+ self.kdewinepicture = QLabel(self.pageexisting,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(self.pageexisting)
+ spacer.setMinimumSize(QSize(6,300))
+
+ valid = wineread.VerifyWineDrive(self.winepath)
+
+ pagebody = QVBox(self.pageexisting,"pagebody")
+ self.pageexisting.setStretchFactor(pagebody,1)
+
+ existstext = QLabel(pagebody,"existstext")
+ if valid:
+ existstext.setText(i18n("A fake windows installation was found."))
+ else:
+ existstext.setText(i18n("No fake windows installation was found in\n" +\
+ self.winepath + "\nPlease go back and create one."))
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( self.pageexisting, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( self.pageexisting, True )
+ self.setNextEnabled( self.pageexisting, True )
+ self.setHelpEnabled( self.pageexisting, False )
+ self.setFinishEnabled( self.pageexisting, True )
+
+ def setupPageCreateWine(self):
+ self.pagecreate = QHBox(self,"pagecreate")
+
+ self.kdewinepicture = QLabel(self.pagecreate,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(self.pagecreate)
+ spacer.setMinimumSize(QSize(6,300))
+
+ pagebody = QVBox(self.pagecreate,"pagebody")
+ self.pagecreate.setStretchFactor(pagebody,1)
+
+ self.createdtext = QLabel(pagebody,"existstext")
+ self.createdtext.setText(i18n("A fake windows installation was created for you in\n" +\
+ self.winepath))
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( self.pagecreate, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( self.pagecreate, False )
+ self.setNextEnabled( self.pagecreate, True )
+ self.setHelpEnabled( self.pagecreate, False )
+ self.setFinishEnabled( self.pagecreate, True )
+
+ def setupPageVersion(self):
+ self.pageversion = QHBox(self,"pageversion")
+
+ self.kdewinepicture = QLabel(self.pageversion,"kdewinepicture")
+ self.kdewinepicture.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed,0,0,self.kdewinepicture.sizePolicy().hasHeightForWidth()))
+ self.kdewinepicture.setMinimumSize(QSize(140,320))
+ self.kdewinepicture.setPixmap(QPixmap(self.imagedir+"kdewinewizard.png"))
+ #self.kdewinepicture.setScaledContents(1)
+
+ spacer = QWidget(self.pageversion)
+ spacer.setMinimumSize(QSize(6,300))
+
+ pagebody = QVBox(self.pageversion,"pagebody")
+ self.pageversion.setStretchFactor(pagebody,1)
+
+ versiontext = QLabel(pagebody,"versiontext")
+ versiontext.setText(i18n("What windows version would you like to emulate?\n"))
+
+ self.winversions = wineread.winversions
+
+ self.verid=1
+ self.versioncombo = KComboBox(0,pagebody,"versioncombo")
+ self.fillVersionCombo(self.versioncombo)
+ self.connect(self.versioncombo,SIGNAL("activated(int)"),self.slotVersionActivated)
+ self.__selectWinVer(self.verid)
+
+ bottomspacer = QWidget(pagebody)
+ pagebody.setStretchFactor(bottomspacer,1)
+
+ self.addPage( self.pageversion, i18n("Setting up your windows drive") )
+
+ self.setBackEnabled( self.pageversion, True )
+ self.setNextEnabled( self.pageversion, True )
+ self.setHelpEnabled( self.pageversion, False )
+ self.setFinishEnabled( self.pageversion, False )
+
+ def fillVersionCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for version in self.winversions:
+ combo.insertItem(version[1])
+
+ def __selectWinVer(self,verid):
+ """
+ Sets the current windows version and selects it in the combo box
+ """
+ self.versioncombo.setCurrentItem(verid)
+
+ def slotVersionActivated(self,verid):
+ self.verid = verid
+
+ def slotFolderChanged(self,folder):
+ """ Change the directory when a new one is entered in the URL box """
+ self.winepath = str(folder)
+
+ def slotWineFolderEdited(self,folder):
+ """ Change the directory when a new one is entered manually in the URL box """
+ self.urlcompletion.makeCompletion("") # Doesn't seem like this should be required.
+ self.slotFolderChanged(folder)
+
+ def slotBrowseClicked(self):
+ """ Bring up a browse window to choose a directory """
+ path = KFileDialog.getExistingDirectory(wineread.winepath,self,i18n("Windows Directory"))
+ if path:
+ self.winepath = str(path)
+
+ #def slotPageChanged(self,pagename):
+ # if pagename == "pagecreate":
+ # self.CreateWindowsInstall()
+
+ def slotCreateExistingToggled(self, buttonid):
+ """ Called when the choice to create a new windows drive or use an existing one is changed """
+ if buttonid == 0:
+ self.createinstall = True
+ self.winefolderedit.setEnabled(True)
+ self.browsecreatebutton.setEnabled(True)
+ self.existingwinefolderedit.setEnabled(False)
+ self.browseexistingbutton.setEnabled(False)
+ self.setAppropriate(self.pageversion,True)
+ self.setAppropriate(self.pageexisting,False)
+ self.setAppropriate(self.pagecreate,True)
+ elif buttonid == 1:
+ self.createinstall = False
+ self.winefolderedit.setEnabled(False)
+ self.browsecreatebutton.setEnabled(False)
+ self.existingwinefolderedit.setEnabled(True)
+ self.browseexistingbutton.setEnabled(True)
+ self.setAppropriate(self.pageversion,False)
+ self.setAppropriate(self.pageexisting,True)
+ self.setAppropriate(self.pagecreate,False)
+
+ def showPage(self,page):
+ if page == self.pagecreate:
+ self.CreateWindowsInstall()
+
+ KWizard.showPage(self,page)
+
+ def CreateWindowsInstall(self):
+ winewrite.CreateWineDrive(self.winepath)
+ wineread.SetWinePath(self.winepath)
+
+ autodrives = drivedetect.autodetect()
+ autoshelllinks = drivedetect.autodetectshelllinks()
+
+ if autodrives[0] == 1:
+ KMessageBox.sorry(self, \
+ i18n("There were not enough letters to add all the autodetected drives."))
+ drives = autodrives[1]
+ drives[26:] = autoshelllinks
+
+ winewrite.SetDriveMappings(drives)
+
+ winewrite.SetAudioDriver('alsa')
+
+ dsoundsettings = {"HardwareAcceleration":"Full",
+ "DefaultSampleRate":"44100",
+ "DefaultBitsPerSample":"8",
+ "EmulDriver":"N"}
+
+ winewrite.SetDSoundSettings(dsoundsettings)
+
+ windowsettings = {"DXGrab":"N",
+ "DesktopDoubleBuffered":"Y",
+ "Managed":"Y",
+ "Desktop":""}
+
+ winewrite.SetWindowSettings(windowsettings)
+
+ d3dsettings = {"VertexShaderMode":"hardware",
+ "PixelShaderMode":"Y"}
+
+ winewrite.SetD3DSettings(d3dsettings)
+
+ winewrite.SetWinVersion(self.winversions[self.verid])
+
+ self.createdtext.setText(i18n("A fake windows installation was created for you in\n" +\
+ self.winepath)) \ No newline at end of file
diff --git a/wineconfig/kcm_wineconfig.cpp b/wineconfig/kcm_wineconfig.cpp
new file mode 100644
index 0000000..bfd9217
--- /dev/null
+++ b/wineconfig/kcm_wineconfig.cpp
@@ -0,0 +1,156 @@
+
+/*
+ * pykcm_launcher.cpp
+ *
+ * Launch Control Centre modules written in Python using an embedded Python
+ * interpreter.
+ * Based on David Boddie's PyKDE-components.
+ */
+
+// pythonize.h must be included first.
+#include <pythonize.h>
+#include <kcmodule.h>
+#include <kglobal.h>
+#include <klocale.h>
+#include <klibloader.h>
+#include <kstandarddirs.h>
+#include <ksimpleconfig.h>
+#include <qstring.h>
+#include <sip.h>
+
+#define MODULE_DIR "/opt/kde3/share/apps/guidance"
+#define EXTRA_MODULE_DIR "/opt/kde3/share/python-support/kde-guidance-kde3"
+#define EXTRA_MODULE_DIR_TWO "/opt/kde3/share/python-support/guidance-backends-kde3"
+#define EXTRA_MODULE_DIR_THREE "/opt/kde3/share/python-support/kde-guidance-powermanager-kde3"
+#define MODULE_NAME "wineconfig"
+#define FACTORY "create_wineconfig"
+#define CPP_FACTORY create_wineconfig
+#define LIB_PYTHON "libpython2.5.so"
+#define debug 1
+
+static KCModule *report_error(char *msg) {
+ if (debug) printf ("error: %s\n", msg);
+ return NULL;
+}
+
+static KCModule* return_instance( QWidget *parent, const char *name ) {
+ KCModule* kcmodule;
+ PyObject *pyKCModuleTuple;
+ PyObject *pyKCModule;
+ Pythonize *pyize; // Pythonize object to manage the Python interpreter.
+ int isErr;
+
+ // Try to determine what py script we're loading. Note that "name"
+ // typically appears to be NULL.
+ QString script(MODULE_NAME);
+
+ // Reload libpython, but this time tell the runtime linker to make the
+ // symbols global and available for later loaded libraries/module.
+ KLibLoader::self()->globalLibrary(LIB_PYTHON);
+
+ // Start the interpreter.
+ pyize = initialize();
+ if (!pyize) {
+ return report_error ("***Failed to start interpreter\n");
+ }
+
+ // Add the path to the python script to the interpreter search path.
+ QString path = QString(MODULE_DIR);
+ if(path == QString::null) {
+ return report_error ("***Failed to locate script path");
+ }
+ if(!pyize->appendToSysPath (path.latin1 ())) {
+ return report_error ("***Failed to set sys.path\n");
+ }
+ QString extrapath = QString(EXTRA_MODULE_DIR);
+ if(!pyize->appendToSysPath (extrapath.latin1 ())) {
+ return report_error ("***Failed to set extra sys.path\n");
+ }
+ QString extrapath_two = QString(EXTRA_MODULE_DIR_TWO);
+ if(!pyize->appendToSysPath (extrapath_two.latin1 ())) {
+ return report_error ("***Failed to set extra 2 sys.path\n");
+ }
+ QString extrapath_three = QString(EXTRA_MODULE_DIR_THREE);
+ if(!pyize->appendToSysPath (extrapath_three.latin1 ())) {
+ return report_error ("***Failed to set extra 3 sys.path\n");
+ }
+
+ // Load the Python script.
+ PyObject *pyModule = pyize->importModule ((char *)script.latin1 ());
+ if(!pyModule) {
+ PyErr_Print();
+ return report_error ("***failed to import module\n");
+ }
+
+ // Inject a helper function
+ QString bridge = QString("import sip\n"
+ "import qt\n"
+ "def kcontrol_bridge_" FACTORY "(parent,name):\n"
+ " if parent!=0:\n"
+#if SIP_VERSION >= 0x040200
+ " wparent = sip.wrapinstance(parent,qt.QWidget)\n"
+#else
+ " wparent = sip.wrapinstance(parent,'QWidget')\n"
+#endif
+ " else:\n"
+ " wparent = None\n"
+ " inst = " FACTORY "(wparent, name)\n"
+ " return (inst,sip.unwrapinstance(inst))\n");
+ PyRun_String(bridge.latin1(),Py_file_input,PyModule_GetDict(pyModule),PyModule_GetDict(pyModule));
+
+ // Get the Python module's factory function.
+ PyObject *kcmFactory = pyize->getNewObjectRef(pyModule, "kcontrol_bridge_" FACTORY);
+ if(!kcmFactory) {
+ return report_error ("***failed to find module factory\n");
+ }
+
+ // Call the factory function. Set up the args.
+ PyObject *pyParent = PyLong_FromVoidPtr(parent);
+ PyObject *pyName = PyString_FromString(MODULE_NAME);
+ // Using NN here is effect gives our references to the arguement away.
+ PyObject *args = Py_BuildValue ("NN", pyParent, pyName);
+ if(pyName && pyParent && args) {
+ // run the factory function
+ pyKCModuleTuple = pyize->runFunction(kcmFactory, args);
+ if(!pyKCModuleTuple) {
+ PyErr_Print();
+ return report_error ("*** runFunction failure\n;");
+ }
+ } else {
+ return report_error ("***failed to create args\n");
+ }
+ // cleanup a bit
+ pyize->decref(args);
+ pyize->decref(kcmFactory);
+
+ // Stop this from getting garbage collected.
+ Py_INCREF(PyTuple_GET_ITEM(pyKCModuleTuple,0));
+
+ // convert the KCModule PyObject to a real C++ KCModule *.
+ isErr = 0;
+ pyKCModule = PyTuple_GET_ITEM(pyKCModuleTuple,1);
+ kcmodule = (KCModule *)PyLong_AsVoidPtr(pyKCModule);
+ if(!kcmodule) {
+ return report_error ("***failed sip conversion to C++ pointer\n");
+ }
+ pyize->decref(pyKCModuleTuple);
+
+ // PyKDE can't run the module without this - Pythonize
+ // grabs the lock at initialization and we have to give
+ // it back before exiting. At this point, we no longer need
+ // it.
+ //pyize->releaseLock ();
+
+ // take care of any translation info
+ KGlobal::locale()->insertCatalogue(script);
+
+ // Return the pointer to our new KCModule
+ return kcmodule;
+}
+
+extern "C" {
+ // Factory function that kcontrol will call.
+ KCModule* CPP_FACTORY(QWidget *parent, const char *name) {
+ return return_instance(parent, name);
+ }
+}
diff --git a/wineconfig/wineconfig.desktop b/wineconfig/wineconfig.desktop
new file mode 100644
index 0000000..c485e65
--- /dev/null
+++ b/wineconfig/wineconfig.desktop
@@ -0,0 +1,57 @@
+[Desktop Entry]
+Categories=Qt;KDE;X-KDE-settings-system;X-KDE-systemsettings-advancedadministration;
+Comment=Wine Configuration
+Comment[el]=Ρυθμίσεις του Wine
+Comment[es]=Configuración de wine
+Comment[et]=Wine seadistamine
+Comment[it]=Configurazione di Wine
+Comment[ja]=Wine の設定
+Comment[nl]=Wine instellen
+Comment[pt]=Configuração do Wine
+Comment[pt_BR]=Configuração do Wine
+Comment[sr]=Wine подешавања
+Comment[sr@Latn]=Wine podešavanja
+Comment[sv]=Inställning av Wine
+Comment[xx]=xxWine Configurationxx
+Encoding=UTF-8
+Exec=kcmshell System/wineconfig
+GenericName=Wine Configuration Editor
+GenericName[el]=Επεξεργαστής ρυθμίσεων του Wine
+GenericName[es]=Editor de la configuración de wine
+GenericName[et]=Wine seadistuste redaktor
+GenericName[it]=Editor della configurazione di Wine
+GenericName[ja]=Wine 設定エディタ
+GenericName[nl]=Wine-configuratiemodule
+GenericName[pt]=Editor de Configuração do Wine
+GenericName[pt_BR]=Editor de Configurações do Wine
+GenericName[sr]=Уређивач Wine подешавања
+GenericName[sr@Latn]=Uređivač Wine podešavanja
+GenericName[sv]=Editor för inställning av Wine
+GenericName[xx]=xxWine Configuration Editorxx
+Icon=wineconfig
+MimeType=
+Name=Windows Applications
+Name[el]=Εφαρμογές Windows
+Name[es]=Aplicaciones de Windows
+Name[et]=Windowsi rakendused
+Name[it]=Applicazioni Windows
+Name[ja]=Windows アプリケーション
+Name[nl]=Windows-programma's
+Name[pt]=Aplicações do Windows
+Name[pt_BR]=Aplicativos Windows
+Name[sr]=Windows програми
+Name[sr@Latn]=Windows programi
+Name[sv]=Windows-program
+Name[xx]=xxWindows Applicationsxx
+Path=
+StartupNotify=true
+Terminal=false
+TerminalOptions=
+Type=Application
+X-DCOP-ServiceType=
+X-KDE-FactoryName=wineconfig
+X-KDE-Library=wineconfig
+X-KDE-ModuleType=Library
+X-KDE-RootOnly=false
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/wineconfig/wineconfig.py b/wineconfig/wineconfig.py
new file mode 100755
index 0000000..d4c39ac
--- /dev/null
+++ b/wineconfig/wineconfig.py
@@ -0,0 +1,3552 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# wineconfig.py - description #
+# ------------------------------ #
+# begin : Fri Mar 26 2004 #
+# copyright : (C) 2006 by Yuriy Kozlov #
+# email : yuriy.kozlov@gmail.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+from qt import *
+from kdecore import *
+from kdeui import *
+from kfile import *
+from kio import *
+#import string
+#import math
+import os
+import shutil
+#import select
+import sys
+#import struct
+#import csv
+#import time
+import signal
+#import shutil
+import wineread
+import winewrite
+import drivedetect
+import wineconfig
+
+programname = "Wine Configuration"
+version = "0.7.1"
+
+default_winepath = os.environ['HOME'] + "/.wine"
+
+# Are we running as a separate standalone application or in KControl?
+standalone = __name__=='__main__'
+
+# Editing application specific settings? For which application?
+application = None
+
+# Running as the root user or not? Doesn't matter for wine
+isroot = os.getuid()==0
+
+############################################################################
+if standalone:
+ programbase = KDialogBase
+else:
+ programbase = KCModule
+
+############################################################################
+class WineConfigApp(programbase):
+ ########################################################################
+ def __init__(self,parent=None,name=None):
+ global standalone,kapp,default_winepath,application
+ KGlobal.locale().insertCatalogue("guidance")
+
+ if standalone:
+ KDialogBase.__init__(self,KJanusWidget.Tabbed,"Wine Configuration",\
+ KDialogBase.Apply|KDialogBase.User1|KDialogBase.User2|KDialogBase.Close, KDialogBase.Close)
+ self.setButtonText(KDialogBase.User1,i18n("Reset"))
+ self.setButtonText(KDialogBase.User2,i18n("About"))
+ args = KCmdLineArgs.parsedArgs()
+ if args.count() > 0:
+ application = args.arg(0)
+ else:
+ KCModule.__init__(self,parent,name)
+ self.setButtons(KCModule.Apply|KCModule.Reset)
+ self.aboutdata = MakeAboutData()
+
+ # Create a configuration object.
+ self.config = KConfig("wineconfigrc")
+
+ # Compact mode means that we have to make the GUI
+ # much smaller to fit on low resolution screens.
+ self.compact_mode = kapp.desktop().height()<=600
+
+ KGlobal.iconLoader().addAppDir("guidance")
+
+ self.wineconfigchanged = False
+
+ self.updatingGUI = True
+
+ if not wineread.GetWineBuildPath():
+ install = KMessageBox.questionYesNo(self, \
+ i18n("It appears that you do not have Wine installed. Wine " + \
+ "can be used to run some programs designed for Windows. " + \
+ "Would you " + \
+ "like to install it?\n" + \
+ "You will need administrative privileges, and the " + \
+ "community-maintained (universe) repository will be enabled."), \
+ i18n("Windows Applications"))
+ if install == KMessageBox.Yes:
+ self.InstallWine()
+
+ wineread.SetWineBuildPath(wineread.GetWineBuildPath())
+
+ if wineread.GetWineBuildPath():
+ # wine doesn't set the WINEPREFIX globally, but just in case...
+ wineprefix = os.environ.get('WINEPREFIX',default_winepath)
+ newrc = not self.config.hasKey("ColorScheme")
+ firstrun = not wineread.VerifyWineDrive(wineprefix)
+ if firstrun:
+ KMessageBox.information(self, \
+ i18n("It appears that you do not yet have a Windows drive set up. " + \
+ "A fake Windows installation will be created for you in " + \
+ wineprefix + "\nThis may take up to a minute."), \
+ i18n("Setting up your Windows drive"))
+ self.CreateWindowsInstall()
+
+ self._buildGUI()
+
+ if firstrun and newrc:
+ self.appearancepage.slotColorSchemeActivated(1)
+ else:
+ self._buildGUI_noWine()
+
+ self.aboutus = KAboutApplication(self)
+
+ if standalone:
+ self.enableButton(KDialogBase.User1,False) # Reset button
+ self.enableButtonApply(False) # Apply button
+
+ self.updatingGUI = False
+
+
+ def _buildGUI(self):
+ global standalone,application
+ if not standalone:
+ toplayout = QVBoxLayout( self, 0, KDialog.spacingHint() )
+ tabcontrol = QTabWidget(self)
+ toplayout.addWidget(tabcontrol)
+ toplayout.setStretchFactor(tabcontrol,1)
+
+ #--- General tab ---
+ tabname = i18n("General")
+ if standalone:
+ general1page = self.addGridPage(1,QGrid.Horizontal,tabname)
+ general1page.setSpacing(0)
+ self.generalpage = GeneralPage(general1page,self.compact_mode)
+ else:
+ self.generalpage = GeneralPage(tabcontrol,self.compact_mode)
+ self.generalpage.setMargin(KDialog.marginHint())
+
+ # Connect all PYSIGNALs from GeneralPage Widget to appropriate actions.
+ self.connect(self.generalpage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+
+ if not standalone:
+ tabcontrol.addTab(self.generalpage,tabname)
+
+ #--- Drives tab ---
+ if not application:
+ tabname = i18n("Drives && Directories")
+ if standalone:
+ drives1page = self.addGridPage(1,QGrid.Horizontal,tabname)
+ drives1page.setSpacing(0)
+ self.drivespage = DrivesPage(drives1page,self.compact_mode)
+ else:
+ self.drivespage = DrivesPage(tabcontrol,self.compact_mode)
+ self.drivespage.setMargin(KDialog.marginHint())
+
+ # Connect all PYSIGNALs from DrivesPage Widget to appropriate actions.
+ self.connect(self.drivespage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+
+ if not standalone:
+ tabcontrol.addTab(self.drivespage,tabname)
+
+ #--- Audio tab ---
+ tabname = i18n("Audio")
+ if standalone:
+ audio1page = self.addGridPage(1,QGrid.Horizontal,tabname)
+ self.audiopage = AudioPage(audio1page)
+ else:
+ self.audiopage = AudioPage(tabcontrol)
+ self.audiopage.setMargin(KDialog.marginHint())
+
+ # Connect all PYSIGNALs from AudioPage Widget to appropriate actions.
+ self.connect(self.audiopage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+
+ if not standalone:
+ tabcontrol.addTab(self.audiopage,tabname)
+
+ #--- Graphics tab ---
+ tabname = i18n("Graphics")
+ if standalone:
+ graphics1page = self.addGridPage(1,QGrid.Horizontal,tabname)
+ self.graphicspage = GraphicsPage(graphics1page)
+ else:
+ self.graphicspage = GraphicsPage(tabcontrol)
+ self.graphicspage.setMargin(KDialog.marginHint())
+
+
+ # Connect all PYSIGNALs from GraphicsPage Widget to appropriate actions.
+ self.connect(self.graphicspage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+
+ if not standalone:
+ tabcontrol.addTab(self.graphicspage,tabname)
+
+ #--- Appearance tab ---
+ if not application:
+ tabname = i18n("Appearance")
+ if standalone:
+ appearance1page = self.addGridPage(1,QGrid.Horizontal,tabname)
+ self.appearancepage = AppearancePage(appearance1page)
+ else:
+ self.appearancepage = AppearancePage(tabcontrol)
+ self.appearancepage.setMargin(KDialog.marginHint())
+
+ # Connect all PYSIGNALs from DesktopPage Widget to appropriate actions.
+ self.connect(self.appearancepage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+ self.graphicspage.connect(self.graphicspage.allowwmcheckbox,
+ SIGNAL("toggled(bool)"),
+ self.appearancepage.slotFillItemCombo)
+ self.connect(self.graphicspage.emudesktopcheckbox,
+ SIGNAL("toggled(bool)"),
+ self.appearancepage.slotFillItemComboDesktop)
+
+ self.appearancepage.slotFillItemComboDesktop(\
+ self.graphicspage.currentemudesktop)
+
+ if not standalone:
+ tabcontrol.addTab(self.appearancepage,tabname)
+
+ #--- Applications tab ---
+ if not application:
+ tabname = i18n("Applications")
+ if standalone:
+ apps1page = self.addGridPage(1,QGrid.Horizontal,tabname)
+ self.appspage = ApplicationsPage(apps1page)
+ else:
+ self.appspage = ApplicationsPage(tabcontrol)
+ self.appspage.setMargin(KDialog.marginHint())
+
+ # Connect all PYSIGNALs from ApplicationsPage Widget to appropriate actions.
+ self.connect(self.appspage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+
+ if not standalone:
+ tabcontrol.addTab(self.appspage,tabname)
+
+ #--- Libraries tab ---
+ tabname = i18n("Libraries")
+ if standalone:
+ libs1page = self.addGridPage(1,QGrid.Horizontal,tabname)
+ self.libspage = LibrariesPage(libs1page)
+ else:
+ self.libspage = LibrariesPage(tabcontrol)
+ self.libspage.setMargin(KDialog.marginHint())
+
+ # Connect all PYSIGNALs from LibrariesPage Widget to appropriate actions.
+ self.connect(self.libspage,PYSIGNAL("changedSignal()"),self._sendChangedSignal)
+
+ if not standalone:
+ tabcontrol.addTab(self.libspage,tabname)
+
+
+ def _buildGUI_noWine(self):
+ """ Displays an error that wine is not installed """
+ global standalone
+ if not standalone:
+ toplayout = QVBoxLayout( self, 0, KDialog.spacingHint() )
+
+ if not standalone:
+ nowinewarning = QLabel(self,"nowinewarning")
+ toplayout.addWidget(nowinewarning)
+ else:
+ vbox = self.addVBoxPage ("Wine Not Installed")
+ nowinewarning = QLabel(vbox,"nowinewarning")
+ nowinewarning.setText(i18n("It appears that you do not have wine " +\
+ "installed.\nwine " + \
+ "can be used to run some programs designed for " + \
+ "Windows.\nPlease " +\
+ "install the wine package to get this functionality."))
+ nowinewarning.setFrameStyle( QFrame.Box | QFrame.Raised )
+
+ def InstallWine(self):
+ """ Allows the user to enable the proper repositories and
+ install wine.
+ Currently Kubuntu specific, requires kdesudo, adept_batch
+ and software-properties-kde """
+ if not isroot:
+ if os.system("kdesudo \"software-properties-kde --enable-component universe\""):
+ KMessageBox.error(self, i18n("There was a problem running " + \
+ "software-properties-kde. Make sure " + \
+ "software-properties-kde is installed."))
+ elif os.system("kdesudo \"adept_batch install wine\""):
+ KMessageBox.error(self, i18n("There was a problem running " + \
+ "adept_batch. Make sure " + \
+ "Adept is installed."))
+ else:
+ if os.system("software-properties-kde --enable-component=universe" + \
+ " && adept_batch install wine"):
+ KMessageBox.error(self, i18n("There was a problem running " + \
+ "software-properties-kde and adept_batch. Make sure " + \
+ "Adept and software-properties-kde are installed."))
+
+ def CreateWindowsInstall(self,winepath = None):
+ if not winepath:
+ winepath = default_winepath
+ winewrite.CreateWineDrive(winepath)
+ wineread.SetWinePath(winepath)
+
+ drives = wineread.LoadDrives()
+ autodrives = drivedetect.autodetect(drives)
+ autoshelllinks = drivedetect.autodetectshelllinks()
+
+ if autodrives[0] == 1:
+ KMessageBox.sorry(self, \
+ i18n("There were not enough letters to add all the autodetected drives."))
+ drives = autodrives[1]
+ drives[26:] = autoshelllinks
+
+ winewrite.SetDriveMappings(drives)
+
+ winewrite.SetAudioDriver('alsa')
+
+ dsoundsettings = {"HardwareAcceleration":"Full",
+ "DefaultSampleRate":"44100",
+ "DefaultBitsPerSample":"8",
+ "EmulDriver":"N"}
+
+ winewrite.SetDSoundSettings(dsoundsettings)
+
+ windowsettings = {"DXGrab":"N",
+ "DesktopDoubleBuffered":"Y",
+ "Managed":"Y",
+ "Desktop":""}
+
+ winewrite.SetWindowSettings(windowsettings)
+
+ d3dsettings = {"VertexShaderMode":"hardware",
+ "PixelShaderMode":"Y",
+ "UseGLSL":"enabled"}
+
+ winewrite.SetD3DSettings(d3dsettings)
+
+ winewrite.SetWinVersion(wineread.winversions[1])
+
+ # Removed pending a patch to winebrowser
+ #winewrite.SetFirstBrowser("kfmclient exec")
+ #winewrite.SetFirstMailer("kfmclient exec")
+
+ def exec_loop(self,appname):
+ global application, programbase
+ if appname:
+ application = appname
+ KDialogBase.exec_loop(self)
+ else:
+ programbase.exec_loop(self)
+
+ def save(self): # KCModule
+ # Find out what's changed
+ generalchanged = self.generalpage.isChanged()
+ driveschanged = not application and self.drivespage.isChanged()
+ audiochanged = self.audiopage.isChanged()
+ graphicschanged = self.graphicspage.isChanged()
+ appearancechanged = not application and self.appearancepage.isChanged()
+ applicationschanged = not application and self.appspage.isChanged()
+ libschanged = self.libspage.isChanged()
+
+ # Apply changes for each tab
+ if generalchanged:
+ self.generalpage.applyChanges()
+ if driveschanged:
+ self.drivespage.applyChanges()
+ if audiochanged:
+ self.audiopage.applyChanges()
+ if graphicschanged:
+ self.graphicspage.applyChanges()
+ if appearancechanged:
+ self.appearancepage.applyChanges()
+ if applicationschanged:
+ self.appspage.applyChanges()
+ if libschanged:
+ self.libspage.applyChanges()
+
+ self._sendChangedSignal()
+
+ def slotApply(self): # KDialogBase
+ self.save()
+
+ def slotClose(self): # KDialogBase
+ KDialogBase.slotClose(self)
+
+ def load(self): # KCModule
+ self.__reset()
+ self._sendChangedSignal()
+
+ def slotUser1(self): # Reset button, KDialogBase
+ self.load()
+
+ def slotUser2(self): # About button, KDialogBase
+ self.aboutus.show()
+
+ def __reset(self):
+ # Reset each configuration page
+ if not application:
+ self.drivespage.reset()
+ self.audiopage.reset()
+ self.graphicspage.reset()
+ self.appearancepage.reset()
+ if not application:
+ self.appspage.reset()
+ self.libspage.reset()
+
+ # Kcontrol expects updates about whether the contents have changed.
+ # Also we fake the Apply and Reset buttons here when running outside kcontrol.
+ def _sendChangedSignal(self):
+ global standalone
+
+ changed = False
+ changed = changed or (not application and self.drivespage.isChanged()) or \
+ self.audiopage.isChanged() \
+ or self.generalpage.isChanged() or \
+ (not application and self.appspage.isChanged()) or \
+ self.libspage.isChanged() or \
+ (not application and self.appearancepage.isChanged())
+ graphicschanged = self.graphicspage.isChanged()
+ changed = changed or graphicschanged
+
+ if standalone:
+ self.enableButton(KDialogBase.User1,changed) # Reset button
+ self.enableButtonApply(changed) # Apply button
+ else:
+ self.emit(SIGNAL("changed(bool)"), (changed,) )
+
+############################################################################
+''' Not used.
+class ErrorPage(QWidget):
+ """
+ Displayed when there is no fake Windows drive
+ """
+
+ def __init__(self,parent = None, name = None, parentapp = None, modal = 0,fl=0):
+ QWidget.__init__(self,parent)
+
+ if not name:
+ self.setName("ErrorPage")
+
+ self.parent = parentapp
+
+ self.top_layout = QVBoxLayout(self,0,0,"ErrorPageLayout")
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ self.top_layout.addWidget(vbox)
+
+ errortext = QLabel(vbox,"errortext")
+ errortext.setText(i18n("You need to set up a " +\
+ "fake Windows drive\n before you can edit settings or run " +\
+ "Windows applications."))
+
+ self.createbutton = KPushButton(i18n("Create Fake Windows Drive"),vbox)
+ self.connect(self.createbutton,SIGNAL("clicked()"),self.slotCreateClicked)
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ self.top_layout.addItem(bottomspacer)
+
+ self.clearWState(Qt.WState_Polished)
+
+ def slotCreateClicked(self):
+ self.parent.CreateWindowsInstall()
+ self.parent._buildGUI()
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+'''
+
+##############################################################################
+
+class DrivesPage(QWidget):
+ """
+ A TabPage with configuration for drive mappings
+ """
+
+ types = (
+ (0,i18n("Autodetect"),"auto"),
+ (1,i18n("Local Hard Disk"),"hd"),
+ (2,i18n("Network Share"),"network"),
+ (3,i18n("Floppy Disk"),"floppy"),
+ (4,i18n("CD-ROM"),"cdrom"))
+
+ typesdic = {
+ 'auto':0,
+ 'hd':1,
+ 'network':2,
+ 'floppy':3,
+ 'cdrom':4}
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ QWidget.__init__(self,parent)
+
+ self.updatingGUI = True
+
+ self.selecteddriveid = None
+
+ if not name:
+ self.setName("DrivesTab")
+
+ self.drives = wineread.LoadDrives()
+ self.drives[26:] = wineread.GetShellLinks()
+
+ drives_tab_layout = QVBoxLayout(self,0,0,"DrivesTabLayout")
+ self.top_layout = drives_tab_layout
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ drives_tab_layout.addWidget(vbox)
+
+ # -- Drive mappings group
+ self.mappings_group_box = QHGroupBox(vbox)
+ self.mappings_group_box.setTitle(i18n("Drive and Directory Mappings"))
+ self.mappings_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.mappings_group_box.setInsideMargin(KDialog.marginHint())
+
+ vbox2 = QVBox(self.mappings_group_box)
+ vbox2.setSpacing(KDialog.spacingHint())
+
+ spacer = QWidget(vbox2)
+ vbox2.setStretchFactor(spacer,1)
+
+ self.driveslist = KListView(vbox2)
+ self.driveslist.addColumn(i18n("Directory"))
+ self.driveslist.addColumn(i18n("Links to"))
+ self.driveslist.setAllColumnsShowFocus(True)
+ self.driveslist.setSelectionMode(QListView.Single)
+ self.driveslist.setSorting(-1,True)
+
+ self.connect(self.driveslist, SIGNAL("selectionChanged(QListViewItem *)"), self.slotListClicked)
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.addbutton = KPushButton(i18n("Add Drive..."),hbox)
+ self.connect(self.addbutton,SIGNAL("clicked()"),self.slotAddClicked)
+
+ self.removebutton = KPushButton(i18n("Remove Drive"),hbox)
+ self.connect(self.removebutton,SIGNAL("clicked()"),self.slotRemoveClicked)
+
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+
+ self.autobutton = KPushButton(i18n("Autodetect"),hbox)
+ self.connect(self.autobutton,SIGNAL("clicked()"),self.slotAutoClicked)
+
+ hbox2 = QHBox(vbox2)
+ hbox2.setSpacing(KDialog.spacingHint())
+
+ pathtext = QLabel(hbox2,"pathtext")
+ pathtext.setText(i18n("Path:"))
+
+ self.fsfolderedit = KLineEdit("/",hbox2)
+ self.urlcompletion = KURLCompletion(KURLCompletion.DirCompletion)
+ self.fsfolderedit.setCompletionObject(self.urlcompletion)
+ self.fsfolderedit.setCompletionMode(KGlobalSettings.CompletionPopup)
+ self.connect(self.fsfolderedit,SIGNAL("textChanged(const QString &)"),self.slotFolderEdited)
+
+ self.browsebutton = KPushButton(i18n("Browse"),hbox2)
+ self.connect(self.browsebutton,SIGNAL("clicked()"),self.slotBrowseClicked)
+
+ hbox2 = QHBox(vbox2)
+ hbox2.setSpacing(KDialog.spacingHint())
+
+ self.typetext = QLabel(hbox2,"typetext")
+ self.typetext.setText(i18n("Type:"))
+
+ self.typecombo = KComboBox(0,hbox2,"typecombo")
+ self.fillTypeCombo(self.typecombo)
+ self.connect(self.typecombo,SIGNAL("activated(int)"),self.slotTypeActivated)
+
+ spacer = QWidget(hbox2)
+ hbox2.setStretchFactor(spacer,1)
+
+ hbox2 = QHBox(vbox2)
+ hbox2.setSpacing(KDialog.spacingHint())
+
+ self.infotext1 = QLabel(hbox2,"infotext1")
+
+ hbox2 = QHBox(vbox2)
+ hbox2.setSpacing(KDialog.spacingHint())
+
+ self.infotext2 = QLabel(hbox2,"infotext2")
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ drives_tab_layout.addItem(bottomspacer)
+
+ self.changed = False
+
+ self.clearWState(Qt.WState_Polished)
+
+ self.updatingGUI=False
+
+ self.updateDrivesList()
+
+ def reset(self):
+ self.drives = wineread.LoadDrives()
+ self.drives[26:] = wineread.GetShellLinks()
+ self.updatingGUI=True
+ self.updateDrivesList()
+ self.updatingGUI=False
+ self.changed = False
+
+ def isChanged(self):
+ """ Check if something has changed since startup or last apply(). """
+ return self.changed
+
+ def applyChanges(self):
+ """ Apply the changes """
+ winewrite.SetDriveMappings(self.drives)
+ self.reset()
+
+ def updateChanges(self):
+ """ Update the GUI and send the signal that changes were made """
+ self.updatingGUI=True
+ self.updateDrivesList()
+ self.updatingGUI=False
+ self.changed = True
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotListClicked(self,item):
+ """ Show the drive information and settings for the newly selected drive """
+ if self.updatingGUI==False:
+ for driveid in self.drivesToListItems:
+ if self.drivesToListItems[driveid]==item:
+ self.updatingGUI = True
+ self.__selectDrive(driveid)
+ self.updatingGUI = False
+ return
+
+ def slotFolderChanged(self,folder):
+ """ Change the directory mapping when a new one is entered in the URL box """
+ self.drives[self.selecteddriveid][2] = unicode(folder)
+ self.updateChanges()
+
+ def slotFolderEdited(self,folder):
+ """ Change the directory mapping when a new one is entered manually in the URL box """
+ if not self.updatingGUI:
+ self.urlcompletion.makeCompletion("") # Doesn't seem like this should be required.
+ self.slotFolderChanged(folder)
+
+ def slotBrowseClicked(self):
+ """ Bring up a browse window to choose a ndew mapping directory """
+ mapping = KFileDialog.getExistingDirectory(wineread.winepath,self,i18n("Drive Mapping"))
+ if mapping:
+ mapping = unicode(mapping)
+ self.drives[self.selecteddriveid][2] = mapping
+ self.updateChanges()
+
+ def slotAddClicked(self):
+ """
+ Let the user choose a directory to map a new drive to.
+ Uses the next available drive letter. """
+ # TODO: Maybe the user should choose the drive letter?
+ for drive in self.drives[2:26]:
+ if drive[2]:
+ continue
+ else:
+ mapping = KFileDialog.getExistingDirectory(wineread.winepath,self,i18n("Drive Mapping"))
+ if mapping:
+ mapping = unicode(mapping)
+ drive[2] = mapping
+ else:
+ return
+ self.selecteddriveid = drive[0]
+ break
+ else:
+ KMessageBox.sorry(self, \
+ i18n("Can't add another drive. There can only be 26, for letters A-Z"))
+ return
+
+ self.updateChanges()
+
+ def slotRemoveClicked(self):
+ """ Removes the currently selected drive """
+ if self.selecteddriveid == 2: # Drive C:
+ if KMessageBox.warningContinueCancel(self, \
+ i18n("Are you sure you want to delete drive C:?\n\n"\
+ "Most Windows applications expect drive C: to exist, "\
+ "and will die messily if it doesn't. If you proceed "\
+ "remember to recreate it!"),\
+ i18n("Warning")) != KMessageBox.Continue:
+ return
+ self.drives[self.selecteddriveid][2:4] = ("","")
+ self.selecteddriveid -= 1 # Not quite correct, should select previous drive.
+ self.updateChanges()
+
+ def slotAutoClicked(self):
+ """
+ Autodetects a default set of drives from /etc/fstab
+ Allows the user to start with a fresh list of drives or append to the current one
+ """
+ automethod = KMessageBox.questionYesNoCancel(self, \
+ i18n("Would you like to remove the current set of drives?"),\
+ i18n("Drive Autodetection"))
+ if automethod == KMessageBox.Yes:
+ autodrives = drivedetect.autodetect()
+ autoshelllinks = drivedetect.autodetectshelllinks()
+ elif automethod == KMessageBox.No:
+ autodrives = drivedetect.autodetect(self.drives[:26])
+ autoshelllinks = drivedetect.autodetectshelllinks(self.drives[26:])
+ else:
+ return
+
+ if autodrives[0] == 1:
+ KMessageBox.sorry(self, \
+ i18n("There were not enough letters to add all the autodetected drives."))
+ self.drives[0:26] = autodrives[1]
+ self.drives[26:] = autoshelllinks
+
+ self.updateChanges()
+
+ def slotTypeActivated(self,index):
+ self.__selectType(self.types[index][2])
+ self.updateChanges()
+
+ def fillTypeCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for drivetype in self.types:
+ combo.insertItem(drivetype[1])
+
+ def __selectType(self,typename):
+ if typename:
+ typeid = self.typesdic[typename]
+ else:
+ typeid = self.typesdic['auto']
+ self.drives[self.selecteddriveid][3] = typename
+ self.typecombo.setCurrentItem(typeid)
+
+ def updateDrivesList(self):
+ """ Updates the displayed list of drives """
+ self.driveslist.clear()
+ self.drivesToListItems = {}
+ firstselecteddriveid = None
+ lastdriveid = None
+
+ for driveid, driveletter, mapping, drivetype, drivelabel, serial in reversed(self.drives):
+ if mapping or drivelabel:
+ lvi = QListViewItem(self.driveslist,driveletter,mapping)
+ self.drivesToListItems[driveid] = lvi
+ if self.selecteddriveid==driveid:
+ firstselecteddriveid = driveid
+ lastdriveid = driveid
+ else:
+ continue
+
+ if firstselecteddriveid==None:
+ firstselecteddriveid = lastdriveid
+
+ self.selecteddriveid = firstselecteddriveid
+ self.__selectDrive(self.selecteddriveid)
+ self.driveslist.ensureItemVisible(self.driveslist.currentItem())
+
+ def __selectDrive(self,driveid):
+ """ Updates the GUI for a newly selected drive """
+ self.selecteddriveid = driveid
+ lvi = self.drivesToListItems[driveid]
+ self.driveslist.setSelected(lvi,True)
+ self.driveslist.setCurrentItem(lvi)
+
+ self.fsfolderedit.setText(self.drives[driveid][2])
+ if self.drives[driveid][3] == 'shellfolder':
+ self.typecombo.insertItem(i18n("Shell Folder"))
+ self.typecombo.setCurrentItem(5)
+ self.typecombo.setEnabled(False)
+
+ self.removebutton.setEnabled(False)
+
+ self.infotext1.setText(unicode(i18n("Windows path: ")) + self.drives[driveid][4])
+
+ # It seems some old versions of wine didn't store the shell folders in the same place
+ if self.drives[driveid][5] != self.drives[driveid][4]:
+ changeregistryshell = KMessageBox.warningYesNo(self, \
+ i18n("The " + self.drives[driveid][1] + " folder is currently located in\n" + \
+ self.drives[driveid][5] + "\nIt is recommended that it is put in the default " + \
+ "location in\n" + wineread.defaultwinfolderspath + "\nWould you like to move it there?"),\
+ i18n("Shell Folder Mapping"))
+ changeregistryshell = changeregistryshell == KMessageBox.Yes
+
+ if changeregistryshell:
+ self.drives[driveid][5] = self.drives[driveid][4]
+ self.changed = True
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ if self.drives[driveid][2] == wineread.profilesdirectory + self.drives[driveid][1]:
+ realfolderwarning = KMessageBox.information(self, \
+ i18n(self.drives[driveid][1] + " is an actual folder and is not linked elsewhere." + \
+ " Remapping it will create a backup of the directory in " + \
+ wineread.profilesdirectory),\
+ i18n("Shell Folder Mapping"))
+ else:
+ if self.typecombo.count() > 5:
+ self.typecombo.removeItem(5)
+ self.typecombo.setEnabled(True)
+ self.__selectType(self.drives[driveid][3])
+
+ self.removebutton.setEnabled(True)
+
+ if self.drives[driveid][4]:
+ self.infotext1.setText(unicode(i18n("Label: ")) + self.drives[driveid][4])
+ else:
+ self.infotext1.setText("")
+ if self.drives[driveid][5]:
+ self.infotext2.setText(unicode(i18n("Serial: ")) + self.drives[driveid][5])
+ else:
+ self.infotext2.setText("")
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+############################################################################
+class AudioPage(QWidget):
+ driversdic = {
+ "":i18n("None - Disable Sound"),
+ "alsa":"ALSA",
+ "arts":"aRts",
+ "esd":"EsounD",
+ "oss":"OSS",
+ "jack":"JACK",
+ "nas":"NAS",
+ "coreaudio":"CoreAudio"}
+
+ drivers = ("","alsa","arts","esd","oss","jack","nas","coreaudio")
+
+ accel = (
+ (0,i18n("Full")),
+ (1,i18n("Standard")),
+ (2,i18n("Basic")),
+ (3,i18n("Emulation")))
+
+ samplerates = (
+ (0,"48000",48000),
+ (1,"44100",44100),
+ (2,"22050",22050),
+ (3,"16000",16000),
+ (4,"11025",11025),
+ (5,"8000",8000))
+
+ bitspersample = (
+ (0,"8",8),
+ (1,"16",16))
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ global application
+ QWidget.__init__(self,parent)
+
+ if not name:
+ self.setName("AudioTab")
+
+ audio_tab_layout = QVBoxLayout(self,0,0,"AudioTabLayout")
+ self.top_layout = audio_tab_layout
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ audio_tab_layout.addWidget(vbox)
+
+ if application:
+ appwarning = QLabel(vbox,"appwarning")
+ appwarning.setText(i18n("Application specific settings for <b>" +\
+ application + "</b><p>Changing a setting here will permanently " +\
+ "make that setting independent of settings for all other " +\
+ "applications.</p>"))
+ appwarning.setFrameStyle( QFrame.Box | QFrame.Raised )
+
+ # -- Drivers group
+ self.driver_group_box = QHGroupBox(vbox)
+ self.driver_group_box.setTitle(i18n("Driver Selection"))
+ self.driver_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.driver_group_box.setInsideMargin(KDialog.marginHint())
+
+ vbox2 = QVBox(self.driver_group_box)
+ vbox2.setSpacing(KDialog.spacingHint())
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ drivertext = QLabel(hbox,"drivertext")
+ drivertext.setText(i18n("Audio Driver:"))
+
+ self.drivercombo = KComboBox(0,hbox,"drivercombo")
+ self.fillDriverCombo(self.drivercombo)
+ self.connect(self.drivercombo,SIGNAL("activated(int)"),self.slotDriverActivated)
+
+ QToolTip.add(hbox, i18n("Choose an audio driver. Not all audio " +\
+ "drivers are available."))
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+
+ if application:
+ self.driver_group_box.hide()
+
+ # -- DirectSound Settings group
+ self.dsound_group_box = QHGroupBox(vbox)
+ self.dsound_group_box.setTitle(i18n("DirectSound"))
+ self.dsound_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.dsound_group_box.setInsideMargin(KDialog.marginHint())
+
+ vbox2 = QVBox(self.dsound_group_box)
+ vbox2.setSpacing(KDialog.spacingHint())
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ acceltext = QLabel(hbox,"acceltext")
+ acceltext.setText(i18n("Hardware Acceleration:"))
+
+ self.accelcombo = KComboBox(0,hbox,"accelcombo")
+ self.fillAccelCombo(self.accelcombo)
+ self.connect(self.accelcombo,SIGNAL("activated(int)"),self.slotAccelActivated)
+
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.overridecheckbox = QCheckBox(i18n("Override KDE Sample Rate"),hbox)
+ hbox.setStretchFactor(self.overridecheckbox,0)
+ self.connect(self.overridecheckbox,SIGNAL("toggled(bool)"),self.slotOverrideKDESoundToggled)
+ self.overridecheckbox.hide()
+
+ self.sampleratehbox = QHBox(vbox2)
+ self.sampleratehbox.setSpacing(KDialog.spacingHint())
+
+ sampletext = QLabel(self.sampleratehbox,"sampletext")
+ sampletext.setText(i18n("Default Sample Rate:"))
+
+ self.samplecombo = KComboBox(0,self.sampleratehbox,"samplecombo")
+ self.fillSampleCombo(self.samplecombo)
+ self.connect(self.samplecombo,SIGNAL("activated(int)"),self.slotSampleActivated)
+
+ bitstext = QLabel(self.sampleratehbox,"bitstext")
+ bitstext.setText(i18n("Default Bits Per Sample:"))
+
+ self.bitscombo = KComboBox(0,self.sampleratehbox,"bitscombo")
+ self.fillBitsCombo(self.bitscombo)
+ self.connect(self.bitscombo,SIGNAL("activated(int)"),self.slotBitsActivated)
+
+ spacer = QWidget(self.sampleratehbox)
+ self.sampleratehbox.setStretchFactor(spacer,1)
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.drvemucheckbox = QCheckBox(i18n("Driver Emulation"),hbox)
+ hbox.setStretchFactor(self.drvemucheckbox,0)
+ self.connect(self.drvemucheckbox,SIGNAL("toggled(bool)"), self.slotDriverEmulToggled)
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ audio_tab_layout.addItem(bottomspacer)
+
+ self.reset()
+
+ self.clearWState(Qt.WState_Polished)
+
+ def fillDriverCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for driver in self.drivers:
+ combo.insertItem(self.driversdic[driver])
+
+ def fillAccelCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for accel in self.accel:
+ combo.insertItem(accel[1])
+
+ def fillSampleCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for rate in self.samplerates:
+ combo.insertItem(rate[1])
+
+ def fillBitsCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for bits in self.bitspersample:
+ combo.insertItem(bits[1])
+
+ def isChanged(self):
+ changed = False
+ changed = changed or (not application and self.currentdriver != self.originaldriver)
+ changed = changed or self.currentaccel != self.originalaccel
+ changed = changed or self.currentsamplerate != self.originalsamplerate
+ changed = changed or self.currentbitspersample != self.originalbitspersample
+ changed = changed or self.currentemuldriver != self.originalemuldriver
+ return changed
+
+ def reset(self):
+ if not application:
+ self.currentdriver = wineread.GetAudioDriver()
+ self.originaldriver = self.currentdriver
+ self.__selectDriver(self.currentdriver)
+
+ dsoundsettings = wineread.GetDSoundSettings(application)
+ globaldsoundsettings = wineread.GetDSoundSettings()
+
+ self.currentaccel = dsoundsettings.get("HardwareAcceleration",\
+ globaldsoundsettings.get("HardwareAcceleration", "Full"))
+ self.originalaccel = self.currentaccel
+ self.__selectAccel(self.currentaccel)
+
+ self.currentsamplerate = dsoundsettings.get("DefaultSampleRate",\
+ globaldsoundsettings.get("DefaultSampleRate", "44100"))
+ self.originalsamplerate = self.currentsamplerate
+ self.__selectSampleRate(self.currentsamplerate)
+
+ self.currentbitspersample = dsoundsettings.get("DefaultBitsPerSample",\
+ globaldsoundsettings.get("DefaultBitsPerSample","16"))
+ self.originalbitspersample = self.currentbitspersample
+ self.__selectBitsPerSample(self.currentbitspersample)
+
+ self.currentemuldriver = dsoundsettings.get("EmulDriver",\
+ globaldsoundsettings.get("EmulDriver", "N"))
+ self.originalemuldriver = self.currentemuldriver
+ self.__setDriverEmul(self.currentemuldriver)
+
+ self.currentkdeoverride = True
+ self.originalkdeoverride = self.currentkdeoverride
+ self.__setOverrideKDESound(self.currentkdeoverride)
+
+ def applyChanges(self):
+ if not application:
+ winewrite.SetAudioDriver(self.currentdriver)
+
+ dsoundsettings = {"HardwareAcceleration":self.currentaccel,
+ "DefaultSampleRate":self.currentsamplerate,
+ "DefaultBitsPerSample":self.currentbitspersample,
+ "EmulDriver":self.currentemuldriver}
+
+ winewrite.SetDSoundSettings(dsoundsettings, application)
+
+ self.reset()
+
+ def slotDriverActivated(self,driverid):
+ self.currentdriver = self.drivers[driverid]
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotAccelActivated(self,accelid):
+ self.currentaccel = self.accel[accelid][1]
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotSampleActivated(self,sampleid):
+ self.currentsamplerate = self.samplerates[sampleid][1]
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotBitsActivated(self,bitsid):
+ self.currentbitspersample = self.bitspersample[bitsid][1]
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotDriverEmulToggled(self,driveremul):
+ if driveremul:
+ self.currentemuldriver = 'Y'
+ else:
+ self.currentemuldriver = 'N'
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotOverrideKDESoundToggled(self,override):
+ self.__setOverrideKDESound(override)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def __selectDriver(self,drivername):
+ """
+ Sets the current driver and selects it in the combo box
+ Assumes drivername is a valid driver
+ """
+ driverid = 0
+ for driver in self.drivers:
+ if driver == drivername:
+ break
+ else:
+ driverid += 1
+
+ self.currentdriver = drivername
+ self.drivercombo.setCurrentItem(driverid)
+
+ def __selectAccel(self,accelmode):
+ """
+ Sets the current acceleration mode and selects it in the combo box
+ Assumes accelmode i sa valid acceleration mode
+ """
+ accelid = 0
+ for accelmode1 in self.accel:
+ if accelmode1[1] == accelmode:
+ break
+ else:
+ accelid += 1
+
+ self.currentaccel = accelmode
+ self.accelcombo.setCurrentItem(accelid)
+
+ def __selectSampleRate(self,samplerate):
+ """
+ Sets the current acceleration mode and selects it in the combo box
+ Assumes samplerate is a valid sample rate
+ """
+ sampleid = 0
+ for samplerate1 in self.samplerates:
+ if samplerate1[1] == samplerate:
+ break
+ else:
+ sampleid += 1
+
+ self.currentsamplerate = samplerate
+ self.samplecombo.setCurrentItem(sampleid)
+
+ def __selectBitsPerSample(self,bits):
+ """
+ Sets the current acceleration mode and selects it in the combo box
+ Assumes bits is a valid value for bits per sample
+ """
+ bitsid = 0
+ for bits1 in self.bitspersample:
+ if bits1[1] == bits:
+ break
+ else:
+ bitsid += 1
+
+ self.currentbitspersample = bits
+ self.bitscombo.setCurrentItem(bitsid)
+
+ def __setDriverEmul(self,driveremul):
+ """ Enables/disables the driver emulation mode """
+ self.currentdriveremul = driveremul
+ driveremul = driveremul != 'N'
+ self.drvemucheckbox.setChecked(driveremul)
+
+ def __setOverrideKDESound(self,override):
+ """ Enables/disables use of KDE's (aRts) sample rate settings """
+ self.currentkdeoverride = override
+ self.sampleratehbox.setEnabled(override)
+ self.overridecheckbox.setChecked(override)
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+
+############################################################################
+class GraphicsPage(QWidget):
+
+ # Mapping values in seconds to human-readable labels.
+ vertexshadersupport = (
+ (0,i18n("Hardware")),
+ (1,i18n("None")),
+ (2,i18n("Emulation")))
+
+ vertexshadersupportdic = {
+ "hardware":0,
+ "none":1,
+ "emulation":2}
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ global currentallowwm
+ QWidget.__init__(self,parent)
+
+ if not name:
+ self.setName("GraphicsTab")
+
+ graphics_tab_layout = QVBoxLayout(self,0,0,"GraphicsTabLayout")
+ self.top_layout = graphics_tab_layout
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ graphics_tab_layout.addWidget(vbox)
+
+ if application:
+ appwarning = QLabel(vbox,"appwarning")
+ appwarning.setText(i18n("Application specific settings for <b>" +\
+ application + "</b><p>Changing a setting here will permanently " +\
+ "make that setting independent of settings for all other " +\
+ "applications.</p>"))
+ appwarning.setFrameStyle( QFrame.Box | QFrame.Raised )
+
+ # -- Window settings group
+ self.windows_group_box = QHGroupBox(vbox)
+ self.windows_group_box.setTitle(i18n("Window Settings"))
+ self.windows_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.windows_group_box.setInsideMargin(KDialog.marginHint())
+
+ vbox2 = QVBox(self.windows_group_box)
+ vbox2.setSpacing(KDialog.spacingHint())
+
+ self.allowcursorcheckbox = QCheckBox(i18n("Allow DirectX applications to stop the mouse leaving their window"),vbox2)
+ self.connect(self.allowcursorcheckbox,SIGNAL("toggled(bool)"), self.slotAllowCursorToggled)
+
+ self.dubbuffercheckbox = QCheckBox(i18n("Enable desktop double buffering"),vbox2)
+ self.connect(self.dubbuffercheckbox,SIGNAL("toggled(bool)"), self.slotDubBufferToggled)
+
+ self.allowwmcheckbox = QCheckBox(i18n("Allow the window manager to control the windows"),vbox2)
+ self.connect(self.allowwmcheckbox,SIGNAL("toggled(bool)"), self.slotAllowWMToggled)
+
+ QToolTip.add(self.allowwmcheckbox, \
+ i18n("<p>If windows are managed by your window manager, then they" +\
+ " will have the standard borders, they will respect your virtual" +\
+ " desktop and appear in your window list.\n</p><p>" +\
+ "If the windows are unmanaged, they will be disconnected from your" +\
+ " window manager. This will mean the windows do not integrate as" +\
+ " closely with your desktop, but the emulation will be more" +\
+ " accurate so it can help some programs work better.</p>"))
+
+ self.showdragcheckbox = QCheckBox(i18n("Display window contents while dragging"),vbox2)
+ self.connect(self.showdragcheckbox,SIGNAL("toggled(bool)"), self.slotShowDragToggled)
+
+ self.emudesktopcheckbox = QCheckBox(i18n("Emulate a virtual desktop"),vbox2)
+ self.connect(self.emudesktopcheckbox,SIGNAL("toggled(bool)"), self.slotEmuDesktopToggled)
+
+ self.desksizehbox = QHBox(vbox2)
+ self.desksizehbox.setSpacing(KDialog.spacingHint())
+
+ desksizetext = QLabel(self.desksizehbox,"desksizetext")
+ desksizetext.setText(i18n("Desktop size:"))
+
+ self.xsizeedit = KLineEdit("640",self.desksizehbox)
+ self.xsizeedit.setValidator(QIntValidator(self.xsizeedit))
+ self.connect(self.xsizeedit,SIGNAL("textChanged(const QString &)"),self.slotDesktopSizeChanged)
+ bytext = QLabel(self.desksizehbox,"bytext")
+ bytext.setText(i18n("x"))
+ self.ysizeedit = KLineEdit("480",self.desksizehbox)
+ self.ysizeedit.setValidator(QIntValidator(self.ysizeedit))
+ self.connect(self.ysizeedit,SIGNAL("textChanged(const QString &)"),self.slotDesktopSizeChanged)
+
+ spacer = QWidget(self.desksizehbox)
+ self.desksizehbox.setStretchFactor(spacer,1)
+
+ QToolTip.add(self.emudesktopcheckbox,
+ i18n("<p>You can choose to emulate a Windows desktop, where all" +\
+ " the windows are confined to one 'virtual screen', or you" +\
+ " can have the windows placed on your standard desktop.</p>"))
+ QToolTip.add(self.desksizehbox, QToolTip.textFor(self.emudesktopcheckbox))
+
+ if application:
+ self.emudesktopcheckbox.hide()
+ self.desksizehbox.hide()
+ self.showdragcheckbox.hide()
+
+ # -- Direct3D settings group
+ self.d3d_group_box = QHGroupBox(vbox)
+ self.d3d_group_box.setTitle(i18n("Direct3D"))
+ self.d3d_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.d3d_group_box.setInsideMargin(KDialog.marginHint())
+
+ vbox2 = QVBox(self.d3d_group_box)
+ vbox2.setSpacing(KDialog.spacingHint())
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ vertexshadertext = QLabel(hbox,"vertexshadertext")
+ vertexshadertext.setText(i18n("Vertex Shader Support:"))
+
+ self.accelcombo = KComboBox(0,hbox,"accelcombo")
+ self.fillCombo(self.accelcombo)
+ self.connect(self.accelcombo,SIGNAL("activated(int)"),self.slotVertexShaderModeActivated)
+
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.pixelshadercheckbox = QCheckBox(i18n("Allow Pixel Shader (if supported by hardware)"),hbox)
+ self.connect(self.pixelshadercheckbox,SIGNAL("toggled(bool)"), self.slotPixelShaderModeToggled)
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.glslcheckbox = QCheckBox(i18n("Use GL Shader Language"),hbox)
+ self.connect(self.glslcheckbox,SIGNAL("toggled(bool)"), self.slotGLSLToggled)
+
+ QToolTip.add(hbox,
+ i18n("<p>This enables the use of GL Shading Language for vertex" +\
+ " and pixel shaders, as long as the hardware supports it." +\
+ " This is experimental.</p>"))
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ graphics_tab_layout.addItem(bottomspacer)
+
+ self.reset()
+
+ self.clearWState(Qt.WState_Polished)
+
+ def fillCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for accel in self.vertexshadersupport:
+ combo.insertItem(accel[1])
+
+ def isChanged(self):
+ changed = False
+ changed = changed or self.originalallowcursor != self.currentallowcursor
+ changed = changed or self.originaldubbuffer != self.currentdubbuffer
+ changed = changed or self.originalallowwm != currentallowwm
+ changed = changed or (not application and \
+ self.originalemudesktop != self.currentemudesktop)
+ changed = changed or self.originalvertexshadermode != self.currentvertexshadermode
+ changed = changed or self.originalpixelshadermode != self.currentpixelshadermode
+ changed = changed or self.originalglsl != self.currentglsl
+ changed = changed or (not application and \
+ self.originalshowdrag != self.currentshowdrag)
+ return changed
+
+ def reset(self):
+ """ Resets the settings to ones read from the registry """
+ global currentallowwm
+ settings = wineread.GetWindowSettings(application)
+ globalsettings = wineread.GetWindowSettings()
+
+ self.currentallowcursor = settings.get("DXGrab",\
+ globalsettings.get("DXGrab",'N'))
+ self.originalallowcursor = self.currentallowcursor
+ self.__setAllowCursor(self.currentallowcursor)
+
+ self.currentdubbuffer = settings.get("DesktopDoubleBuffered",\
+ globalsettings.get("DesktopDoubleBuffered",'Y'))
+ self.originaldubbuffer = self.currentdubbuffer
+ self.__setDubBuffer(self.currentdubbuffer)
+
+ currentallowwm = settings.get("Managed",\
+ globalsettings.get("Managed",'Y'))
+ self.originalallowwm = currentallowwm
+
+ if not application:
+ self.currentemudesktop = settings.get("Desktop","")
+ self.originalemudesktop = self.currentemudesktop
+ self.__setEmuDesktop(self.currentemudesktop)
+ self.__setAllowWM(currentallowwm)
+
+ d3dsettings = wineread.GetD3DSettings(application)
+ globald3dsettings = wineread.GetD3DSettings()
+
+ self.currentvertexshadermode = d3dsettings.get("VertexShaderMode",\
+ globald3dsettings.get("VertexShaderMode","hardware"))
+ self.originalvertexshadermode = self.currentvertexshadermode
+ self.__selectVertexShaderMode(self.currentvertexshadermode)
+
+ self.currentpixelshadermode = d3dsettings.get("PixelShaderMode",\
+ globald3dsettings.get("PixelShaderMode","enabled"))
+ self.originalpixelshadermode = self.currentpixelshadermode
+ self.__setPixelShaderMode(self.currentpixelshadermode)
+
+ self.currentglsl = d3dsettings.get("UseGLSL",\
+ globald3dsettings.get("UseGLSL","disabled"))
+ self.originalglsl = self.currentglsl
+ self.__setGLSL(self.currentglsl)
+
+ if not application:
+ cpdesktopsettings = wineread.GetDesktopSettings()
+
+ self.currentshowdrag = cpdesktopsettings.get("DragFullWindows","0")
+ self.originalshowdrag = self.currentshowdrag
+ self.__setShowDrag(self.currentshowdrag)
+
+ def applyChanges(self):
+ """ Applies the changes to wine's configuration """
+ settings = {"DXGrab":self.currentallowcursor,
+ "DesktopDoubleBuffered":self.currentdubbuffer,
+ "Managed":currentallowwm}
+
+ if not application:
+ settings["Desktop"] = self.currentemudesktop
+
+ winewrite.SetWindowSettings(settings, application)
+
+ d3dsettings = {"VertexShaderMode":self.currentvertexshadermode,
+ "PixelShaderMode":self.currentpixelshadermode,
+ "UseGLSL":self.currentglsl}
+
+ winewrite.SetD3DSettings(d3dsettings, application)
+
+ if not application:
+ cpdesktopsettings = {"DragFullWindows":self.currentshowdrag}
+
+ winewrite.SetDesktopSettings(cpdesktopsettings)
+
+ self.reset()
+
+ def slotAllowCursorToggled(self,allow):
+ if allow:
+ self.currentallowcursor = 'Y'
+ else:
+ self.currentallowcursor = 'N'
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotDubBufferToggled(self,dub):
+ if dub:
+ self.currentdubbuffer = 'Y'
+ else:
+ self.currentdubbuffer = 'N'
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotAllowWMToggled(self,allow):
+ global currentallowwm
+ if allow:
+ currentallowwm = 'Y'
+ else:
+ currentallowwm = 'N'
+ if not application:
+ if allow and self.currentemudesktop == "":
+ self.showdragcheckbox.setEnabled(False)
+ else:
+ self.showdragcheckbox.setEnabled(True)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotShowDragToggled(self,show):
+ if show:
+ self.currentshowdrag = '2'
+ else:
+ self.currentshowdrag = '0'
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotEmuDesktopToggled(self,emudesktop):
+ if emudesktop:
+ self.currentemudesktop = unicode(self.xsizeedit.text()) + 'x' + str(self.ysizeedit.text())
+ else:
+ self.currentemudesktop = ""
+ self.__setEmuDesktop(self.currentemudesktop)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotDesktopSizeChanged(self,size):
+ self.slotEmuDesktopToggled(True)
+
+ def slotVertexShaderModeActivated(self,modeid):
+ mode = self.vertexshadersupport[modeid][1][0].lower() + self.vertexshadersupport[modeid][1][1:]
+ self.currentvertexshadermode = mode
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotPixelShaderModeToggled(self,mode):
+ if mode:
+ self.currentpixelshadermode = 'enabled'
+ else:
+ self.currentpixelshadermode = 'disabled'
+
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotGLSLToggled(self,mode):
+ if mode:
+ self.currentglsl = 'enabled'
+ else:
+ self.currentglsl = 'disabled'
+
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def __setAllowCursor(self, allow):
+ self.currentallowcursor = allow
+ allow = allow != 'N'
+ self.allowcursorcheckbox.setChecked(allow)
+
+ def __setDubBuffer(self, dub):
+ self.currentdubbuffer = dub
+ dub = dub != 'N'
+ self.dubbuffercheckbox.setChecked(dub)
+
+ def __setAllowWM(self, allow):
+ global currentallowwm
+ currentallowwm = allow
+ allow = allow != 'N'
+ self.allowwmcheckbox.setChecked(allow)
+ if not application:
+ if allow and self.currentemudesktop == "":
+ self.showdragcheckbox.setEnabled(False)
+ else:
+ self.showdragcheckbox.setEnabled(True)
+
+ def __setEmuDesktop(self, emudesktop):
+ self.currentemudesktop = emudesktop
+ emudesktopbool = emudesktop != ""
+ self.emudesktopcheckbox.setChecked(emudesktopbool)
+ self.desksizehbox.setEnabled(emudesktopbool)
+ if emudesktopbool:
+ desktopsize = emudesktop.split('x')
+ self.xsizeedit.setText(desktopsize[0])
+ self.ysizeedit.setText(desktopsize[1])
+ self.showdragcheckbox.setEnabled(True)
+ elif currentallowwm:
+ self.showdragcheckbox.setEnabled(False)
+
+ def __selectVertexShaderMode(self,mode):
+ self.currentvertexshadermode = mode
+ self.accelcombo.setCurrentItem(self.vertexshadersupportdic[mode])
+
+ def __setPixelShaderMode(self,mode):
+ self.currentpixelshadermode = mode
+ mode = mode == 'enabled'
+ self.pixelshadercheckbox.setChecked(mode)
+
+ def __setGLSL(self,mode):
+ self.currentglsl = mode
+ mode = mode == 'enabled'
+ self.glslcheckbox.setChecked(mode)
+
+ def __setShowDrag(self,show):
+ self.currentshowdrag = show
+ show = show != '0'
+ self.showdragcheckbox.setChecked(show)
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+
+############################################################################
+class AppearancePage(QWidget):
+
+ themes = [unicode(i18n("No Theme"))]
+ colorschemes = [unicode(i18n("Custom"))]
+ sizes = [("NormalSize",unicode(i18n("Normal"))),
+ ("LargeSize",unicode(i18n("Large Fonts"))),
+ ("ExtraLargeSize",unicode(i18n("Extra Large Fonts")))]
+
+ # Items for the combo box reference a tuple of dictionaries for color
+ # and size values and translations for that item
+ # For example, the value of BorderWidth is
+ # customizableitems[str(i18n("Window Border"))][1]["BorderWidth"][1]
+ customizableitems = {"Window Border":
+ ({"ActiveBorder":[unicode(i18n("Active Color:")),QColor()],
+ "InactiveBorder":[unicode(i18n("Inactive Color:")),QColor()]},
+ {"BorderWidth":[unicode(i18n("Width:")),1]}), #ActiveBorder, InactiveBorder, metrics: BorderWidth
+ "Title Bar":
+ ({"ActiveTitle":[unicode(i18n("Active Color:")),QColor()],
+ "GradientActiveTitle":[unicode(i18n("Gradient:")),QColor()],
+ "InactiveTitle":[unicode(i18n("Inactive Color:")),QColor()],
+ "GradientInactiveTitle":[unicode(i18n("Gradient:")),QColor()],
+ "TitleText":[unicode(i18n("Active Text:")),QColor()],
+ "InactiveTitleText":[unicode(i18n("Inactive Text:")),QColor()]},
+ {}), #ActiveTitle, GradientActiveTitle, InactiveTitle, GradientInactiveTitle, TitleText, InactiveTitleText
+ "Application Workspace":
+ ({"AppWorkSpace":[unicode(i18n("Background Color:")),QColor()]},
+ {}), #AppWorkSpace "Background"
+ "Buttons":
+ ({"ButtonFace":[unicode(i18n("Face:")),QColor()],
+ "ButtonHilight":[unicode(i18n("Hilight:")),QColor()],
+ "ButtonLight":[unicode(i18n("Light:")),QColor()],
+ "ButtonShadow":[unicode(i18n("Shadow:")),QColor()],
+ "ButtonText":[unicode(i18n("Text Color:")),QColor()],
+ "ButtonAlternateFace":[unicode(i18n("Alternate Face:")),QColor()],
+ "ButtonDkShadow":[unicode(i18n("Dark Shadow:")),QColor()],
+ "WindowFrame":[unicode(i18n("Frame:")),QColor()]},
+ {}), #ButtonFace, ButtonHilight, ButtonLight, ButtonShadow, ButtonText, ButtonAlternateFace, ButtonDkShadow, WindowFrame
+ "Caption Buttons":
+ ({},
+ {"CaptionHeight":[unicode(i18n("Height:")),1],
+ "CaptionWidth":[unicode(i18n("Width:")),1]}), #Metrics: CaptionHeight, CaptionWidth
+ "Desktop":
+ ({"Background":[unicode(i18n("Background:")),QColor()]},
+ {}), #Background
+ "Menu":
+ ({"Menu":[unicode(i18n("Menu Background:")),QColor()],
+ "MenuBar":[unicode(i18n("Menu Bar Color:")),QColor()],
+ "MenuHilight":[unicode(i18n("Menu Hilight:")),QColor()],
+ "MenuText":[unicode(i18n("Text Color:")),QColor()]},
+ {"MenuHeight":[unicode(i18n("Menu Bar Height:")),1]}), #Menu (Background), MenuBar, MenuHilight, MenuText, metrics: MenuHeight, MenuWidth (does nothing)
+ "Scrollbar":
+ ({"Scrollbar":[unicode(i18n("Color:")),QColor()]},
+ {"ScrollWidth":[unicode(i18n("Width:")),1]}), #Scrollbar, metrics: ScrollHeight (does nothing), ScrollWidth
+ "Window":
+ ({"Window":[unicode(i18n("Background:")),QColor()],
+ "WindowText":[unicode(i18n("Text Color:")),QColor()]},
+ {}), #Window "Background", WindowText
+ "Selected Items":
+ ({"Hilight":[unicode(i18n("Hilight Color:")),QColor()],
+ "HilightText":[unicode(i18n("Text Color:")),QColor()]},
+ {})} #Hilight, HilightText
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ global imagedir
+ QWidget.__init__(self,parent)
+
+ if not name:
+ self.setName("AppearanceTab")
+
+ appearance_tab_layout = QVBoxLayout(self,0,0,"AppearanceTabLayout")
+ self.top_layout = appearance_tab_layout
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ appearance_tab_layout.addWidget(vbox)
+
+ # -- Appearance group
+ self.appearance_group_box = QVGroupBox(vbox)
+ self.appearance_group_box.setTitle(i18n("Style and Colors"))
+ self.appearance_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.appearance_group_box.setInsideMargin(KDialog.marginHint())
+
+ themebox = QWidget(self.appearance_group_box)
+
+ theme_layout = QGridLayout(themebox,3,3)
+ theme_layout.setSpacing(KDialog.spacingHint())
+ theme_layout.setColStretch(1,1)
+
+ styletext = QLabel(themebox,"styletext")
+ styletext.setText(i18n("Widget Style:"))
+ theme_layout.addWidget(styletext,0,0)
+
+ self.themes = self.themes + wineread.GetThemesList()
+ self.themecombo = KComboBox(0,themebox,"themecombo")
+ self.fillThemeCombo(self.themecombo)
+ self.connect(self.themecombo,SIGNAL("activated(int)"),self.slotThemeActivated)
+ theme_layout.addWidget(self.themecombo,0,1)
+
+ self.installbutton = KPushButton(i18n("Install style..."),themebox)
+ self.connect(self.installbutton,SIGNAL("clicked()"),self.slotInstallThemeClicked)
+ theme_layout.addWidget(self.installbutton,0,2)
+
+ fontsizetext = QLabel(themebox,"fontsizetext")
+ fontsizetext.setText(i18n("Font Size:"))
+ theme_layout.addWidget(fontsizetext,1,0)
+
+ self.fontsizecombo = KComboBox(0,themebox,"fontsizecombo")
+ self.fillFontSizeCombo(self.fontsizecombo)
+ self.connect(self.fontsizecombo,SIGNAL("activated(int)"),self.slotFontSizeActivated)
+ theme_layout.addWidget(self.fontsizecombo,1,1)
+
+ colorschemetext = QLabel(themebox,"colorschemetext")
+ colorschemetext.setText(i18n("Color Scheme:"))
+ theme_layout.addWidget(colorschemetext,2,0)
+
+ self.colorschemecombo = KComboBox(0,themebox,"colorschemecombo")
+ self.fillColorSchemeCombo(self.colorschemecombo)
+ self.connect(self.colorschemecombo,SIGNAL("activated(int)"),self.slotColorSchemeActivated)
+ theme_layout.addWidget(self.colorschemecombo,2,1)
+
+ self.saveschemebutton = KPushButton(i18n("Save..."),themebox)
+ self.connect(self.saveschemebutton,SIGNAL("clicked()"),self.slotSaveSchemeClicked)
+ theme_layout.addWidget(self.saveschemebutton,2,2)
+
+ # --- Custom Colors ---
+ hbox = QHBox(self.appearance_group_box)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.sizehbox = hbox
+ self.leftspacer = QWidget(hbox)
+
+ self.customcolorsvbox = QVBox(hbox)
+ self.customcolorsvbox.setSpacing(KDialog.spacingHint())
+
+ hbox = QHBox(self.customcolorsvbox)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ itemtext = QLabel(hbox,"itemtext")
+ itemtext.setText(i18n("Item:"))
+
+ self.itemcombo = KComboBox(0,hbox,"itemcombo")
+ self.fillItemCombo(self.itemcombo)
+ self.connect(self.itemcombo,SIGNAL("activated(int)"),self.slotItemActivated)
+ hbox.setStretchFactor(self.itemcombo,1)
+
+ self.customcolorsgrid = QWidget(self.customcolorsvbox)
+ self.customcolorsgrid_layout = QGridLayout(self.customcolorsgrid,4,2)
+ self.customcolorsgrid_layout.setSpacing(KDialog.spacingHint())
+
+ # Box 1 of 8
+ self.colorsizehbox1 = QWidget(self.customcolorsgrid,"colorsizehbox1")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox1,0,0)
+ self.colorsizehbox1_layout = QGridLayout(self.colorsizehbox1,1,2)
+ self.colorsizehbox1_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext1 = QLabel(self.colorsizehbox1,"colorsizetext1")
+ self.colorsizetext1.setText(i18n(":"))
+ self.colorsizehbox1_layout.addWidget(self.colorsizetext1,0,0,Qt.AlignRight)
+
+ self.sizespinbox1 = QSpinBox(self.colorsizehbox1,"sizespinbox1")
+ self.sizespinbox1.setMinValue(0)
+ self.connect(self.sizespinbox1,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo1 = KColorCombo(self.colorsizehbox1,"colorcombo1")
+ self.connect(self.colorcombo1,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ # Box 2 of 8
+ self.colorsizehbox2 = QWidget(self.customcolorsgrid,"colorsizehbox2")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox2,0,1)
+ self.colorsizehbox2_layout = QGridLayout(self.colorsizehbox2,1,2)
+ self.colorsizehbox2_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext2 = QLabel(self.colorsizehbox2,"colorsizetext2")
+ self.colorsizetext2.setText(i18n(":"))
+ self.colorsizehbox2_layout.addWidget(self.colorsizetext2,0,0,Qt.AlignRight)
+
+ self.sizespinbox2 = QSpinBox(self.colorsizehbox2,"sizespinbox2")
+ self.sizespinbox2.setMinValue(0)
+ self.connect(self.sizespinbox2,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo2 = KColorCombo(self.colorsizehbox2,"colorcombo2")
+ self.connect(self.colorcombo2,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ # Box 3 of 8
+ self.colorsizehbox3 = QWidget(self.customcolorsgrid,"colorsizehbox3")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox3,1,0)
+ self.colorsizehbox3_layout = QGridLayout(self.colorsizehbox3,1,2)
+ self.colorsizehbox3_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext3 = QLabel(self.colorsizehbox3,"colorsizetext3")
+ self.colorsizetext3.setText(i18n(":"))
+ self.colorsizehbox3_layout.addWidget(self.colorsizetext3,0,0,Qt.AlignRight)
+
+ self.sizespinbox3 = QSpinBox(self.colorsizehbox3,"sizespinbox3")
+ self.sizespinbox3.setMinValue(0)
+ self.connect(self.sizespinbox3,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo3 = KColorCombo(self.colorsizehbox3,"colorcombo3")
+ self.connect(self.colorcombo3,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ # Box 4 of 8
+ self.colorsizehbox4 = QWidget(self.customcolorsgrid,"colorsizehbox4")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox4,1,1)
+ self.colorsizehbox4_layout = QGridLayout(self.colorsizehbox4,1,2)
+ self.colorsizehbox4_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext4 = QLabel(self.colorsizehbox4,"colorsizetext4")
+ self.colorsizetext4.setText(i18n(":"))
+ self.colorsizehbox4_layout.addWidget(self.colorsizetext4,0,0,Qt.AlignRight)
+
+ self.sizespinbox4 = QSpinBox(self.colorsizehbox4,"sizespinbox4")
+ self.sizespinbox4.setMinValue(0)
+ self.connect(self.sizespinbox4,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo4 = KColorCombo(self.colorsizehbox4,"colorcombo4")
+ self.connect(self.colorcombo4,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ # Box 5 of 8
+ self.colorsizehbox5 = QWidget(self.customcolorsgrid,"colorsizehbox5")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox5,2,0)
+ self.colorsizehbox5_layout = QGridLayout(self.colorsizehbox5,1,2)
+ self.colorsizehbox5_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext5 = QLabel(self.colorsizehbox5,"colorsizetext5")
+ self.colorsizetext5.setText(i18n(":"))
+ self.colorsizehbox5_layout.addWidget(self.colorsizetext5,0,0,Qt.AlignRight)
+
+ self.sizespinbox5 = QSpinBox(self.colorsizehbox5,"sizespinbox5")
+ self.sizespinbox5.setMinValue(0)
+ self.connect(self.sizespinbox5,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo5 = KColorCombo(self.colorsizehbox5,"colorcombo5")
+ self.connect(self.colorcombo5,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ # Box 6 of 8
+ self.colorsizehbox6 = QWidget(self.customcolorsgrid,"colorsizehbox6")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox6,2,1)
+ self.colorsizehbox6_layout = QGridLayout(self.colorsizehbox6,1,2)
+ self.colorsizehbox6_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext6 = QLabel(self.colorsizehbox6,"colorsizetext6")
+ self.colorsizetext6.setText(i18n(":"))
+ self.colorsizehbox6_layout.addWidget(self.colorsizetext6,0,0,Qt.AlignRight)
+
+ self.sizespinbox6 = QSpinBox(self.colorsizehbox6,"sizespinbox6")
+ self.sizespinbox6.setMinValue(0)
+ self.connect(self.sizespinbox6,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo6 = KColorCombo(self.colorsizehbox6,"colorcombo6")
+ self.connect(self.colorcombo6,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ # Box 7 of 8
+ self.colorsizehbox7 = QWidget(self.customcolorsgrid,"colorsizehbox7")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox7,3,0)
+ self.colorsizehbox7_layout = QGridLayout(self.colorsizehbox7,1,2)
+ self.colorsizehbox7_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext7 = QLabel(self.colorsizehbox7,"colorsizetext7")
+ self.colorsizetext7.setText(i18n(":"))
+ self.colorsizehbox7_layout.addWidget(self.colorsizetext7,0,0,Qt.AlignRight)
+
+ self.sizespinbox7 = QSpinBox(self.colorsizehbox7,"sizespinbox7")
+ self.sizespinbox7.setMinValue(0)
+ self.connect(self.sizespinbox7,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo7 = KColorCombo(self.colorsizehbox7,"colorcombo7")
+ self.connect(self.colorcombo7,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ # Box 8 of 8
+ self.colorsizehbox8 = QWidget(self.customcolorsgrid,"colorsizehbox8")
+ self.customcolorsgrid_layout.addWidget(self.colorsizehbox8,3,1)
+ self.colorsizehbox8_layout = QGridLayout(self.colorsizehbox8,1,2)
+ self.colorsizehbox8_layout.setSpacing(KDialog.spacingHint())
+
+ self.colorsizetext8 = QLabel(self.colorsizehbox8,"colorsizetext8")
+ self.colorsizetext8.setText(i18n(":"))
+ self.colorsizehbox8_layout.addWidget(self.colorsizetext8,0,0,Qt.AlignRight)
+
+ self.sizespinbox8 = QSpinBox(self.colorsizehbox8,"sizespinbox8")
+ self.sizespinbox8.setMinValue(0)
+ self.connect(self.sizespinbox8,SIGNAL("valueChanged(int)"),self.slotSizeActivated)
+
+ self.colorcombo8 = KColorCombo(self.colorsizehbox8,"colorcombo8")
+ self.connect(self.colorcombo8,SIGNAL("activated(const QColor &)"),self.slotColorActivated)
+
+ spacer = QWidget(self.customcolorsvbox)
+ self.customcolorsvbox.setStretchFactor(spacer,1)
+ self.customcolorsvbox.setMinimumHeight(itemtext.height()*4.5)
+ #self.customcolorsvbox.setStretchFactor(self.customcolorsgrid,1)
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ appearance_tab_layout.addItem(bottomspacer)
+
+ self.selecteditem = None
+ self.config = KConfig("wineconfigrc",False,False)
+ self.reset()
+
+ self.clearWState(Qt.WState_Polished)
+
+ def isChanged(self):
+ changed = False
+ changed = changed or self.currenttheme != self.originaltheme\
+ or self.currentthemecolorscheme != self.originalthemecolorscheme\
+ or self.currentfontsize != self.originalfontsize\
+ or self.customizableItemsChanged()
+ return changed
+
+ def customizableItemsChanged(self):
+ """ Returns true if any custom setting was changed """
+ colors = wineread.GetColorSettings()
+ metrics = wineread.GetWindowMetrics()
+
+ changed = False
+ custom = False # For a little efficiency
+ for item in self.customizableitems.keys():
+ for key in self.customizableitems[item][0].keys():
+ color = colors.get(key,"0 0 0")
+ color = color.split()
+ color = QColor(int(color[0]),int(color[1]),int(color[2]))
+ if not custom and self.customizableitems[item][0][key][1] !=\
+ self.config.readColorEntry(key,QColor(0,0,0)):
+ self.__selectColorScheme(0)
+ custom = True
+ if self.customizableitems[item][0][key][1] != color:
+ if custom:
+ return True
+ else:
+ changed = True
+ for key in self.customizableitems[item][1].keys():
+ size = int(metrics.get(key,1))
+ if not custom and self.customizableitems[item][1][key][1] !=\
+ self.config.readNumEntry(key,1):
+ self.__selectColorScheme(0)
+ custom = True
+ if self.customizableitems[item][1][key][1] != size:
+ if custom:
+ return True
+ else:
+ changed = True
+ return changed
+
+ def reset(self):
+ self.fillItemCombo(self.itemcombo)
+ self.config.setGroup("")
+ self.currentcustomcolorscheme = unicode(self.config.readEntry("ColorScheme",i18n("Custom")))
+ self.originalcustomcolorscheme = self.currentcustomcolorscheme
+ schemeslist = self.config.readListEntry("ColorSchemes")
+ self.colorschemes = [unicode(i18n("Custom")),
+ unicode(i18n("Get KDE Colors"))] + list(schemeslist)
+ self.config.setGroup(self.currentcustomcolorscheme)
+
+ for preset in self.presets:
+ if preset[0] not in schemeslist:
+ self.saveColorScheme(preset[0],preset[1])
+ self.colorschemes.append(preset[0])
+
+ self.fillColorSchemeCombo(self.colorschemecombo)
+
+ theme = wineread.GetCurrentTheme()
+ if not theme:
+ self.currenttheme = self.themes[0]
+ self.originaltheme = self.currenttheme
+ self.__selectTheme(0)
+
+ self.currentthemecolorscheme = "NormalColor"
+ self.originalthemecolorscheme = self.currentthemecolorscheme
+
+ self.currentfontsize = self.sizes[0][0]
+ self.originalfontsize = self.currentfontsize
+ for i,sizename in enumerate(self.sizes):
+ if sizename[0] == self.currentfontsize:
+ self.__selectFontSize(i)
+ break
+ else:
+ self.currenttheme = theme[0]
+ self.originaltheme = self.currenttheme
+ for i,themename in enumerate(self.themes):
+ if themename == self.currenttheme:
+ self.__selectTheme(i)
+ break
+ self.currentthemecolorscheme = theme[1]
+ self.originalthemecolorscheme = self.currentthemecolorscheme
+
+ self.currentfontsize = theme[2]
+ self.originalfontsize = self.currentfontsize
+ for i,sizename in enumerate(self.sizes):
+ if sizename[0] == self.currentfontsize:
+ self.__selectFontSize(i)
+ break
+
+ colors = wineread.GetColorSettings()
+ metrics = wineread.GetWindowMetrics()
+
+ for item in self.customizableitems.keys():
+ for key in self.customizableitems[item][0].keys():
+ color = colors.get(key,"0 0 0")
+ color = color.split()
+ color = QColor(int(color[0]),int(color[1]),int(color[2]))
+ if color != self.config.readColorEntry(key,QColor(0,0,0)):
+ self.currentcustomcolorscheme = self.colorschemes[0]
+ self.customizableitems[item][0][key][1] = color
+ for key in self.customizableitems[item][1].keys():
+ size = int(metrics.get(key,1))
+ if size != self.config.readNumEntry(key,1):
+ self.currentcustomcolorscheme = self.colorschemes[0]
+ self.customizableitems[item][1][key][1] = size
+
+ for i,colorname in enumerate(self.colorschemes):
+ if colorname == self.currentcustomcolorscheme:
+ self.__selectColorScheme(i)
+ break
+
+ self.desktopsettings = wineread.GetDesktopSettings()
+
+ def applyChanges(self):
+ """ Applies the changes to wine's configuration """
+ if self.currenttheme == self.themes[0]:
+ winewrite.SetCurrentTheme(None)
+ else:
+ winewrite.SetCurrentTheme((self.currenttheme,
+ self.currentthemecolorscheme,
+ self.currentfontsize))
+
+ colorsettings = {}
+ metricssettings = {}
+ for item in self.customizableitems.keys():
+ for key in self.customizableitems[item][0].keys():
+ color = self.customizableitems[item][0][key][1]
+ color = str(color.red()) + " " + str(color.green()) +\
+ " " + str(color.blue())
+ colorsettings[key] = color
+ for key in self.customizableitems[item][1].keys():
+ size = self.customizableitems[item][1][key][1]
+
+ metricssettings[key] = str(size)
+
+ winewrite.SetColorSettings(colorsettings)
+ winewrite.SetWindowMetrics(metricssettings)
+
+ self.config.setGroup("")
+ if self.currentcustomcolorscheme == self.colorschemes[1]:
+ self.currentcustomcolorscheme = self.colorschemes[0]
+ self.config.writeEntry("ColorScheme",self.currentcustomcolorscheme)
+ self.config.sync()
+
+ if self.customizableitems["Title Bar"][0]["ActiveTitle"][1]\
+ !=\
+ self.customizableitems["Title Bar"][0]["GradientActiveTitle"][1]\
+ or\
+ self.customizableitems["Title Bar"][0]["InactiveTitle"][1]\
+ !=\
+ self.customizableitems["Title Bar"][0]["GradientInactiveTitle"][1]:
+ prefmask = self.desktopsettings["UserPreferencemask"]
+ prefmask = prefmask[:4] + "1" + prefmask[5:]
+ self.desktopsettings["UserPreferencemask"] = prefmask
+ else:
+ prefmask = self.desktopsettings["UserPreferencemask"]
+ prefmask = prefmask[:4] + "0" + prefmask[5:]
+ self.desktopsettings["UserPreferencemask"] = prefmask
+
+ winewrite.SetDesktopSettings(self.desktopsettings)
+
+ self.reset()
+
+ def fillThemeCombo(self,combo):
+ """ Fill the combo box with the list of themes """
+ for theme in self.themes:
+ combo.insertItem(theme)
+
+ def fillColorSchemeCombo(self,combo):
+ """ Fill the combo box with the list of color schemes """
+ combo.clear()
+ for color in self.colorschemes:
+ combo.insertItem(color)
+
+ def fillFontSizeCombo(self,combo):
+ """ Fill the combo box with the list of font sizes """
+ for size in self.sizes:
+ combo.insertItem(size[1])
+
+ def slotFillItemCombo(self,allowwm):
+ """
+ Fill the combo box with the list of customizable items
+ Called when window managing is changed
+ """
+ combo = self.itemcombo
+ combo.clear()
+ items = self.customizableitems.keys()
+ items.sort()
+ for item in items:
+ if not (allowwm and (item == "Window Border" \
+ or item == "Title Bar" or \
+ item == "Caption Buttons")):
+ combo.insertItem(unicode(i18n(item)))
+
+ def slotFillItemComboDesktop(self,desktop):
+ """
+ Fill the combo box with the list of customizable items
+ Called when virtual desktop is changed
+ """
+ self.slotFillItemCombo(not desktop)
+
+ def fillItemCombo(self,combo = None):
+ """ Fill the combo box with the list of customizable items """
+ if not combo:
+ combo = self.itemcombo
+ combo.clear()
+ items = self.customizableitems.keys()
+ items.sort()
+ self.currentitems = []
+ for item in items:
+ if not (currentallowwm == 'Y' and (item == "Window Border" \
+ or item == "Title Bar" or \
+ item == "Caption Buttons")):
+ combo.insertItem(unicode(i18n(item)))
+ self.currentitems.append(item)
+
+ def slotThemeActivated(self,themeid):
+ """ Picks an already installed theme """
+ self.__selectTheme(themeid)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotInstallThemeClicked(self):
+ """ Opens up a dialog to install a new theme """
+ themepath = unicode(KFileDialog.getOpenFileName(os.environ['HOME'],\
+ "*.msstyles|" + str(i18n("Windows Styles (*.msstyles)")),self,i18n("Install Style")))
+ if themepath:
+ themename = themepath.split('/')
+ themename = themename[-1]
+ themename = themename.split('.')
+ themename = themename[0]
+ themedir = wineread.winepath +\
+ "/dosdevices/c:/windows/Resources/Themes/" +\
+ themename
+ if not os.path.exists(themedir):
+ os.mkdir(themedir)
+ shutil.copy(themepath, themedir)
+ self.themes.append(str(i18n(themename)))
+ self.themecombo.insertItem(self.themes[-1])
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotSaveSchemeClicked(self):
+ """ Lets the user save the current color scheme """
+ schemename = KInputDialog.getText(i18n("Save Color Scheme"),\
+ i18n("Name: "),\
+ i18n("CustomScheme"),\
+ self,"schemenameinput")
+
+ while schemename[1] and schemename[0] == "" or \
+ schemename[0] == self.colorschemes[0] or \
+ schemename[0] == self.colorschemes[1]:
+ KMessageBox.information(self, \
+ i18n("Please enter a unique name for the color scheme."), \
+ i18n("Save Color Scheme"))
+ schemename = KInputDialog.getText(i18n("Save Color Scheme"),\
+ i18n("Name: "),\
+ i18n("CustomScheme"),\
+ self,"schemenameinput")
+
+ if schemename[1]:
+ schemename = str(schemename[0])
+ self.saveColorScheme(schemename)
+ if schemename not in self.colorschemes:
+ self.colorschemes.append(schemename)
+ self.colorschemecombo.insertItem(schemename)
+ for i,colorname in enumerate(self.colorschemes):
+ if colorname == schemename:
+ self.__selectColorScheme(i)
+ break
+
+ def saveColorScheme(self,name,schemesettings = None):
+ """ Saves the colorscheme """
+ if not schemesettings:
+ schemesettings = self.customizableitems
+ self.config.setGroup("")
+ if name != self.colorschemes[1]:
+ self.config.writeEntry("ColorScheme",name)
+ schemeslist = self.config.readListEntry("ColorSchemes")
+ if name not in schemeslist and name != self.colorschemes[0] and \
+ name != self.colorschemes[1]:
+ schemeslist.append(name)
+ self.config.writeEntry("ColorSchemes",schemeslist)
+ self.config.setGroup(name)
+ for item in self.customizableitems.keys():
+ for key in schemesettings[item][0].keys():
+ self.config.writeEntry(key,schemesettings[item][0][key][1])
+ for key in schemesettings[item][1].keys():
+ self.config.writeEntry(key,schemesettings[item][1][key][1])
+ self.config.sync()
+
+ def GetKdeColorScheme(self):
+ """ Sets the current color scheme settings to those currently set in KDE """
+ # Create a configuration object.
+ config = KConfig("kdesktoprc")
+
+ config.setGroup("General")
+ self.customizableitems["Application Workspace"][0]["AppWorkSpace"][1] =\
+ config.readColorEntry("background",QColor(100,100,100))
+ self.customizableitems["Buttons"][0]["ButtonFace"][1] =\
+ config.readColorEntry("background",QColor(230,230,230))
+ self.customizableitems["Buttons"][0]["ButtonHilight"][1] =\
+ config.readColorEntry("windowBackground",QColor(240,240,240))
+ self.customizableitems["Buttons"][0]["ButtonLight"][1] =\
+ config.readColorEntry("selectBackground",QColor(200,200,200)).light(135)
+ self.customizableitems["Buttons"][0]["ButtonShadow"][1] =\
+ config.readColorEntry("background",QColor(100,100,100)).dark(180)
+ self.customizableitems["Buttons"][0]["ButtonText"][1] =\
+ config.readColorEntry("buttonForeground",QColor(0,0,0))
+ self.customizableitems["Buttons"][0]["ButtonAlternateFace"][1] =\
+ config.readColorEntry("background",QColor(230,230,230))
+ self.customizableitems["Buttons"][0]["ButtonDkShadow"][1] =\
+ config.readColorEntry("selectBackground",QColor(0,0,0)).dark(146)
+ self.customizableitems["Buttons"][0]["WindowFrame"][1] =\
+ config.readColorEntry("selectBackground",QColor(0,0,0))
+ self.customizableitems["Menu"][0]["Menu"][1] =\
+ config.readColorEntry("background",QColor(230,230,230)).light(105)
+ self.customizableitems["Menu"][0]["MenuBar"][1] =\
+ config.readColorEntry("background",QColor(230,230,230))
+ self.customizableitems["Menu"][0]["MenuHilight"][1] =\
+ config.readColorEntry("selectBackground",QColor(0,0,0))
+ self.customizableitems["Menu"][0]["MenuText"][1] =\
+ config.readColorEntry("foreground",QColor(0,0,0))
+ self.customizableitems["Scrollbar"][0]["Scrollbar"][1] =\
+ config.readColorEntry("background",QColor(230,230,230))
+ self.customizableitems["Window"][0]["Window"][1] =\
+ config.readColorEntry("windowBackground",QColor(255,255,255))
+ self.customizableitems["Window"][0]["WindowText"][1] =\
+ config.readColorEntry("foreground",QColor(0,0,0))
+ self.customizableitems["Selected Items"][0]["Hilight"][1] =\
+ config.readColorEntry("selectBackground",QColor(0,0,0))
+ self.customizableitems["Selected Items"][0]["HilightText"][1] =\
+ config.readColorEntry("selectForeground",QColor(255,255,255))
+
+ config.setGroup("WM")
+ self.customizableitems["Title Bar"][0]["ActiveTitle"][1] =\
+ config.readColorEntry("activeBackground",QColor(10,10,100))
+ self.customizableitems["Title Bar"][0]["GradientActiveTitle"][1] =\
+ config.readColorEntry("activeBlend",QColor(10,10,200)).light(110)
+ self.customizableitems["Title Bar"][0]["InactiveTitle"][1] =\
+ config.readColorEntry("inactiveBackground",QColor(100,100,100))
+ self.customizableitems["Title Bar"][0]["GradientInactiveTitle"][1] =\
+ config.readColorEntry("inactiveBlend",QColor(100,100,200))
+ self.customizableitems["Title Bar"][0]["TitleText"][1] =\
+ config.readColorEntry("activeForeground",QColor(255,255,255))
+ self.customizableitems["Title Bar"][0]["InactiveTitleText"][1] =\
+ config.readColorEntry("inactiveForeground",QColor(250,250,250))
+ self.customizableitems["Window Border"][0]["ActiveBorder"][1] =\
+ config.readColorEntry("frame",QColor(10,10,100))
+ self.customizableitems["Window Border"][0]["InactiveBorder"][1] =\
+ config.readColorEntry("frame",QColor(100,100,200))
+
+ config.setGroup("Desktop0")
+ self.customizableitems["Desktop"][0]["Background"][1] =\
+ config.readColorEntry("Color1",QColor(50,150,85))
+
+ self.saveColorScheme(self.colorschemes[1])
+
+ def slotColorSchemeActivated(self,colorid):
+ """ Picks a color scheme """
+ self.__selectColorScheme(colorid)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotFontSizeActivated(self,fontid):
+ """ Picks a font size """
+ self.__selectFontSize(fontid)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotItemActivated(self,itemid):
+ """ Picks an item to customize """
+ items = self.customizableitems.keys()
+ items.sort()
+ for i,item in enumerate(self.currentitems):
+ if i == itemid:
+ if item != self.selecteditem:
+ self.__selectItem(item)
+
+ def slotColorActivated(self,color):
+ """ Picks a color for the currently selected item """
+ key = self.sender().name()
+ self.customizableitems[self.selecteditem][0][key][1] = color
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotSizeActivated(self,sizevalue):
+ """ Sets the size value from the spin box """
+ key = self.sender().name()
+ self.customizableitems[self.selecteditem][1][key][1] = sizevalue
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def __selectTheme(self,themeid):
+ """ Selects the browser in the combobox """
+ self.currenttheme = self.themes[themeid]
+
+ self.themecombo.setCurrentItem(themeid)
+
+ #if themeid == 0:
+ # self.colorfontbox.setEnabled(False)
+ #else:
+ # self.colorfontbox.setEnabled(True)
+
+ def __selectColorScheme(self,colorid):
+ """ Selects a color scheme in the combo box """
+ self.currentcustomcolorscheme = self.colorschemes[colorid]
+
+ self.colorschemecombo.setCurrentItem(colorid)
+
+ if colorid > 1:
+ self.config.setGroup("")
+ self.config.writeEntry("ColorScheme",self.colorschemes[colorid])
+ self.config.setGroup(self.colorschemes[colorid])
+ for item in self.customizableitems.keys():
+ for key in self.customizableitems[item][0].keys():
+ color = self.config.readColorEntry(key,QColor(0,0,0))
+ self.customizableitems[item][0][key][1] = color
+ for key in self.customizableitems[item][1].keys():
+ size = self.config.readNumEntry(key,1)
+ self.customizableitems[item][1][key][1] = size
+ elif colorid == 1:
+ self.GetKdeColorScheme()
+
+ if not self.selecteditem:
+ self.__selectItem("Desktop")
+ else:
+ self.__selectItem(self.selecteditem)
+
+ def __selectColorSchemeByName(self,name):
+ """ Finds the index of name in colorschemes and calls the above function """
+ for i,colorname in enumerate(self.colorschemes):
+ if colorname == name:
+ self.__selectColorScheme(i)
+ break
+
+ def __selectFontSize(self,sizeid):
+ """ Selects a font size in the combo box """
+ self.currentfontsize = self.sizes[sizeid][0]
+
+ self.fontsizecombo.setCurrentItem(sizeid)
+
+ def __selectItem(self,item):
+ """ Sets the color and size settings boxes to those for item """
+ self.selecteditem = item
+
+ for i,item1 in enumerate(self.currentitems):
+ if item1 == item:
+ self.itemcombo.setCurrentItem(i)
+
+ if item == "Application Workspace":
+ key = "AppWorkSpace"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ self.colorsizehbox2.hide()
+ self.colorsizehbox3.hide()
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Buttons":
+ key = "ButtonFace"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ key = "WindowFrame"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox2.hide()
+ self.colorsizehbox2_layout.remove(self.sizespinbox2)
+ self.colorsizehbox2_layout.addWidget(self.colorcombo2,0,1)
+ self.colorcombo2.show()
+ self.colorcombo2.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo2.setName(key)
+
+ key = "ButtonShadow"
+ self.colorsizehbox3.show()
+ self.colorsizetext3.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox3.hide()
+ self.colorsizehbox3_layout.remove(self.sizespinbox3)
+ self.colorsizehbox3_layout.addWidget(self.colorcombo3,0,1)
+ self.colorcombo3.show()
+ self.colorcombo3.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo3.setName(key)
+
+ key = "ButtonDkShadow"
+ self.colorsizehbox4.show()
+ self.colorsizetext4.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox4.hide()
+ self.colorsizehbox4_layout.remove(self.sizespinbox4)
+ self.colorsizehbox4_layout.addWidget(self.colorcombo4,0,1)
+ self.colorcombo4.show()
+ self.colorcombo4.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo4.setName(key)
+
+ key = "ButtonLight"
+ self.colorsizehbox5.show()
+ self.colorsizetext5.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox5.hide()
+ self.colorsizehbox5_layout.remove(self.sizespinbox5)
+ self.colorsizehbox5_layout.addWidget(self.colorcombo5,0,1)
+ self.colorcombo5.show()
+ self.colorcombo5.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo5.setName(key)
+
+ key = "ButtonHilight"
+ self.colorsizehbox6.show()
+ self.colorsizetext6.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox6.hide()
+ self.colorsizehbox6_layout.remove(self.sizespinbox6)
+ self.colorsizehbox6_layout.addWidget(self.colorcombo6,0,1)
+ self.colorcombo6.show()
+ self.colorcombo6.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo6.setName(key)
+
+ key = "ButtonAlternateFace"
+ self.colorsizehbox7.show()
+ self.colorsizetext7.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox7.hide()
+ self.colorsizehbox7_layout.remove(self.sizespinbox7)
+ self.colorsizehbox7_layout.addWidget(self.colorcombo7,0,1)
+ self.colorcombo7.show()
+ self.colorcombo7.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo7.setName(key)
+
+ key = "ButtonText"
+ self.colorsizehbox8.show()
+ self.colorsizetext8.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox8.hide()
+ self.colorsizehbox8_layout.remove(self.sizespinbox8)
+ self.colorsizehbox8_layout.addWidget(self.colorcombo8,0,1)
+ self.colorcombo8.show()
+ self.colorcombo8.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo8.setName(key)
+ elif item == "Caption Buttons":
+ key = "CaptionHeight"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][1][key][0])
+ self.colorcombo1.hide()
+ self.colorsizehbox1_layout.remove(self.colorcombo1)
+ self.colorsizehbox1_layout.addWidget(self.sizespinbox1,0,1)
+ self.sizespinbox1.show()
+ self.sizespinbox1.setName(key)
+ self.sizespinbox1.setValue(\
+ self.customizableitems[item][1][key][1])
+ self.sizespinbox1.setMinValue(8)
+ self.sizespinbox1.setMaxValue(100)
+
+ key = "CaptionWidth"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][1][key][0])
+ self.colorcombo2.hide()
+ self.colorsizehbox2_layout.remove(self.colorcombo2)
+ self.colorsizehbox2_layout.addWidget(self.sizespinbox2,0,1)
+ self.sizespinbox2.show()
+ self.sizespinbox2.setName(key)
+ self.sizespinbox2.setValue(\
+ self.customizableitems[item][1][key][1])
+ self.sizespinbox2.setMinValue(8)
+ self.sizespinbox2.setMaxValue(100)
+
+ self.colorsizehbox3.hide()
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Desktop":
+ key = "Background"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ self.colorsizehbox2.hide()
+ self.colorsizehbox3.hide()
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Menu":
+ key = "Menu"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ key = "MenuBar"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox2.hide()
+ self.colorsizehbox2_layout.remove(self.sizespinbox2)
+ self.colorsizehbox2_layout.addWidget(self.colorcombo2,0,1)
+ self.colorcombo2.show()
+ self.colorcombo2.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo2.setName(key)
+
+ key = "MenuHilight"
+ self.colorsizehbox3.show()
+ self.colorsizetext3.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox3.hide()
+ self.colorsizehbox3_layout.remove(self.sizespinbox3)
+ self.colorsizehbox3_layout.addWidget(self.colorcombo3,0,1)
+ self.colorcombo3.show()
+ self.colorcombo3.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo3.setName(key)
+
+ key = "MenuText"
+ self.colorsizehbox4.show()
+ self.colorsizetext4.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox4.hide()
+ self.colorsizehbox4_layout.remove(self.sizespinbox4)
+ self.colorsizehbox4_layout.addWidget(self.colorcombo4,0,1)
+ self.colorcombo4.show()
+ self.colorcombo4.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo4.setName(key)
+
+ key = "MenuHeight"
+ self.colorsizehbox5.show()
+ self.colorsizetext5.setText(\
+ self.customizableitems[item][1][key][0])
+ self.colorcombo5.hide()
+ self.colorsizehbox5_layout.remove(self.colorcombo5)
+ self.colorsizehbox5_layout.addWidget(self.sizespinbox5,0,1)
+ self.sizespinbox5.show()
+ self.sizespinbox5.setName(key)
+ self.sizespinbox5.setValue(\
+ self.customizableitems[item][1][key][1])
+ self.sizespinbox5.setMinValue(15)
+ self.sizespinbox5.setMaxValue(100)
+
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Scrollbar":
+ key = "Scrollbar"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ key = "ScrollWidth"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][1][key][0])
+ self.colorcombo2.hide()
+ self.colorsizehbox2_layout.remove(self.colorcombo2)
+ self.colorsizehbox2_layout.addWidget(self.sizespinbox2,0,1)
+ self.sizespinbox2.show()
+ self.sizespinbox2.setName(key)
+ self.sizespinbox2.setValue(\
+ self.customizableitems[item][1][key][1])
+ self.sizespinbox2.setMinValue(8)
+ self.sizespinbox2.setMaxValue(100)
+
+ self.colorsizehbox3.hide()
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Selected Items":
+ key = "Hilight"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ key = "HilightText"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox2.hide()
+ self.colorsizehbox2_layout.remove(self.sizespinbox2)
+ self.colorsizehbox2_layout.addWidget(self.colorcombo2,0,1)
+ self.colorcombo2.show()
+ self.colorcombo2.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo2.setName(key)
+
+ self.colorsizehbox3.hide()
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Title Bar":
+ key = "ActiveTitle"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ key = "GradientActiveTitle"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox2.hide()
+ self.colorsizehbox2_layout.remove(self.sizespinbox2)
+ self.colorsizehbox2_layout.addWidget(self.colorcombo2,0,1)
+ self.colorcombo2.show()
+ self.colorcombo2.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo2.setName(key)
+
+ key = "InactiveTitle"
+ self.colorsizehbox3.show()
+ self.colorsizetext3.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox3.hide()
+ self.colorsizehbox3_layout.remove(self.sizespinbox3)
+ self.colorsizehbox3_layout.addWidget(self.colorcombo3,0,1)
+ self.colorcombo3.show()
+ self.colorcombo3.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo3.setName(key)
+
+ key = "GradientInactiveTitle"
+ self.colorsizehbox4.show()
+ self.colorsizetext4.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox4.hide()
+ self.colorsizehbox4_layout.remove(self.sizespinbox4)
+ self.colorsizehbox4_layout.addWidget(self.colorcombo4,0,1)
+ self.colorcombo4.show()
+ self.colorcombo4.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo4.setName(key)
+
+ key = "TitleText"
+ self.colorsizehbox5.show()
+ self.colorsizetext5.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox5.hide()
+ self.colorsizehbox5_layout.remove(self.sizespinbox5)
+ self.colorsizehbox5_layout.addWidget(self.colorcombo5,0,1)
+ self.colorcombo5.show()
+ self.colorcombo5.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo5.setName(key)
+
+ key = "InactiveTitleText"
+ self.colorsizehbox6.show()
+ self.colorsizetext6.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox6.hide()
+ self.colorsizehbox6_layout.remove(self.sizespinbox6)
+ self.colorsizehbox6_layout.addWidget(self.colorcombo6,0,1)
+ self.colorcombo6.show()
+ self.colorcombo6.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo6.setName(key)
+
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Window":
+ key = "Window"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ key = "WindowText"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox2.hide()
+ self.colorsizehbox2_layout.remove(self.sizespinbox2)
+ self.colorsizehbox2_layout.addWidget(self.colorcombo2,0,1)
+ self.colorcombo2.show()
+ self.colorcombo2.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo2.setName(key)
+
+ self.colorsizehbox3.hide()
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ elif item == "Window Border":
+ key = "ActiveBorder"
+ self.colorsizehbox1.show()
+ self.colorsizetext1.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox1.hide()
+ self.colorsizehbox1_layout.remove(self.sizespinbox1)
+ self.colorsizehbox1_layout.addWidget(self.colorcombo1,0,1)
+ self.colorcombo1.show()
+ self.colorcombo1.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo1.setName(key)
+
+ key = "InactiveBorder"
+ self.colorsizehbox2.show()
+ self.colorsizetext2.setText(\
+ self.customizableitems[item][0][key][0])
+ self.sizespinbox2.hide()
+ self.colorsizehbox2_layout.remove(self.sizespinbox2)
+ self.colorsizehbox2_layout.addWidget(self.colorcombo2,0,1)
+ self.colorcombo2.show()
+ self.colorcombo2.setColor(\
+ self.customizableitems[item][0][key][1])
+ self.colorcombo2.setName(key)
+
+ key = "BorderWidth"
+ self.colorsizehbox3.show()
+ self.colorsizetext3.setText(\
+ self.customizableitems[item][1][key][0])
+ self.colorcombo3.hide()
+ self.colorsizehbox3_layout.remove(self.colorcombo3)
+ self.colorsizehbox3_layout.addWidget(self.sizespinbox3,0,1)
+ self.sizespinbox3.show()
+ self.sizespinbox3.setName(key)
+ self.sizespinbox3.setValue(\
+ self.customizableitems[item][1][key][1])
+ self.sizespinbox3.setMinValue(1)
+ self.sizespinbox3.setMaxValue(50)
+
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+ else:
+ # Shouldn't happen.
+ self.colorsizehbox1.hide()
+ self.colorsizehbox2.hide()
+ self.colorsizehbox3.hide()
+ self.colorsizehbox4.hide()
+ self.colorsizehbox5.hide()
+ self.colorsizehbox6.hide()
+ self.colorsizehbox7.hide()
+ self.colorsizehbox8.hide()
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+ # --- Some default color schemes, with names ---
+ preset1 = (unicode(i18n("Purple")),
+ {"Window Border":
+ ({"ActiveBorder":[unicode(i18n("Active Color:")),QColor(239,239,239)],
+ "InactiveBorder":[unicode(i18n("Inactive Color:")),QColor(239,239,239)]},
+ {"BorderWidth":[unicode(i18n("Width:")),1]}), #ActiveBorder, InactiveBorder, metrics: BorderWidth
+ "Title Bar":
+ ({"ActiveTitle":[unicode(i18n("Active Color:")),QColor(91,86,168)],
+ "GradientActiveTitle":[unicode(i18n("Gradient:")),QColor(136,118,202)],
+ "InactiveTitle":[unicode(i18n("Inactive Color:")),QColor(223,225,230)],
+ "GradientInactiveTitle":[unicode(i18n("Gradient:")),QColor(157,170,186)],
+ "TitleText":[unicode(i18n("Active Text:")),QColor(255,255,255)],
+ "InactiveTitleText":[unicode(i18n("Inactive Text:")),QColor(168,168,168)]},
+ {}), #ActiveTitle, GradientActiveTitle, InactiveTitle, GradientInactiveTitle, TitleText, InactiveTitleText
+ "Application Workspace":
+ ({"AppWorkSpace":[unicode(i18n("Background Color:")),QColor(90,90,90)]},
+ {}), #AppWorkSpace "Background"
+ "Buttons":
+ ({"ButtonFace":[unicode(i18n("Face:")),QColor(238,239,242)],
+ "ButtonHilight":[unicode(i18n("Hilight:")),QColor(255,255,255)],
+ "ButtonLight":[unicode(i18n("Light:")),QColor(201,199,255)],
+ "ButtonShadow":[unicode(i18n("Shadow:")),QColor(132,132,134)],
+ "ButtonText":[unicode(i18n("Text Color:")),QColor(0,0,0)],
+ "ButtonAlternateFace":[unicode(i18n("Alternate Face:")),QColor(238,239,242)],
+ "ButtonDkShadow":[unicode(i18n("Dark Shadow:")),QColor(98,96,143)],
+ "WindowFrame":[unicode(i18n("Frame:")),QColor(144,140,209)]},
+ {}), #ButtonFace, ButtonHilight, ButtonLight, ButtonShadow, ButtonText, ButtonAlternateFace, ButtonDkShadow, WindowFrame
+ "Caption Buttons":
+ ({},
+ {"CaptionHeight":[unicode(i18n("Height:")),22],
+ "CaptionWidth":[unicode(i18n("Width:")),22]}), #Metrics: CaptionHeight, CaptionWidth
+ "Desktop":
+ ({"Background":[unicode(i18n("Background:")),QColor(146,127,188)]},
+ {}), #Background
+ "Menu":
+ ({"Menu":[unicode(i18n("Menu Background:")),QColor(250,251,254)],
+ "MenuBar":[unicode(i18n("Menu Bar Color:")),QColor(238,239,242)],
+ "MenuHilight":[unicode(i18n("Menu Hilight:")),QColor(144,140,209)],
+ "MenuText":[unicode(i18n("Text Color:")),QColor(0,0,0)]},
+ {"MenuHeight":[unicode(i18n("Menu Bar Height:")),22]}), #Menu (Background), MenuBar, MenuHilight, MenuText, metrics: MenuHeight, MenuWidth (does nothing)
+ "Scrollbar":
+ ({"Scrollbar":[unicode(i18n("Color:")),QColor(238,239,242)]},
+ {"ScrollWidth":[unicode(i18n("Width:")),16]}), #Scrollbar, metrics: ScrollHeight (does nothing), ScrollWidth
+ "Window":
+ ({"Window":[unicode(i18n("Background:")),QColor(255,255,255)],
+ "WindowText":[unicode(i18n("Text Color:")),QColor(0,0,0)]},
+ {}), #Window "Background", WindowText
+ "Selected Items":
+ ({"Hilight":[unicode(i18n("Hilight Color:")),QColor(144,140,209)],
+ "HilightText":[unicode(i18n("Text Color:")),QColor(255,255,255)]},
+ {})}) #Hilight, HilightText
+
+ preset2 = (unicode(i18n("Blue")),
+ {"Window Border":
+ ({"ActiveBorder":[unicode(i18n("Active Color:")),QColor(239,239,239)],
+ "InactiveBorder":[unicode(i18n("Inactive Color:")),QColor(239,239,239)]},
+ {"BorderWidth":[unicode(i18n("Width:")),1]}), #ActiveBorder, InactiveBorder, metrics: BorderWidth
+ "Title Bar":
+ ({"ActiveTitle":[unicode(i18n("Active Color:")),QColor(0,113,201)],
+ "GradientActiveTitle":[unicode(i18n("Gradient:")),QColor(87,161,219)],
+ "InactiveTitle":[unicode(i18n("Inactive Color:")),QColor(191,191,191)],
+ "GradientInactiveTitle":[unicode(i18n("Gradient:")),QColor(171,171,171)],
+ "TitleText":[unicode(i18n("Active Text:")),QColor(255,255,255)],
+ "InactiveTitleText":[unicode(i18n("Inactive Text:")),QColor(95,95,95)]},
+ {}), #ActiveTitle, GradientActiveTitle, InactiveTitle, GradientInactiveTitle, TitleText, InactiveTitleText
+ "Application Workspace":
+ ({"AppWorkSpace":[unicode(i18n("Background Color:")),QColor(90,90,90)]},
+ {}), #AppWorkSpace "Background"
+ "Buttons":
+ ({"ButtonFace":[unicode(i18n("Face:")),QColor(239,239,239)],
+ "ButtonHilight":[unicode(i18n("Hilight:")),QColor(246,246,246)],
+ "ButtonLight":[unicode(i18n("Light:")),QColor(191,207,251)],
+ "ButtonShadow":[unicode(i18n("Shadow:")),QColor(148,148,153)],
+ "ButtonText":[unicode(i18n("Text Color:")),QColor(0,0,0)],
+ "ButtonAlternateFace":[unicode(i18n("Alternate Face:")),QColor(238,239,242)],
+ "ButtonDkShadow":[unicode(i18n("Dark Shadow:")),QColor(50,101,146)],
+ "WindowFrame":[unicode(i18n("Frame:")),QColor(74,149,214)]},
+ {}), #ButtonFace, ButtonHilight, ButtonLight, ButtonShadow, ButtonText, ButtonAlternateFace, ButtonDkShadow, WindowFrame
+ "Caption Buttons":
+ ({},
+ {"CaptionHeight":[unicode(i18n("Height:")),22],
+ "CaptionWidth":[unicode(i18n("Width:")),22]}), #Metrics: CaptionHeight, CaptionWidth
+ "Desktop":
+ ({"Background":[unicode(i18n("Background:")),QColor(44,109,189)]},
+ {}), #Background
+ "Menu":
+ ({"Menu":[unicode(i18n("Menu Background:")),QColor(249,249,249)],
+ "MenuBar":[unicode(i18n("Menu Bar Color:")),QColor(239,239,239)],
+ "MenuHilight":[unicode(i18n("Menu Hilight:")),QColor(74,149,214)],
+ "MenuText":[unicode(i18n("Text Color:")),QColor(0,0,0)]},
+ {"MenuHeight":[unicode(i18n("Menu Bar Height:")),22]}), #Menu (Background), MenuBar, MenuHilight, MenuText, metrics: MenuHeight, MenuWidth (does nothing)
+ "Scrollbar":
+ ({"Scrollbar":[unicode(i18n("Color:")),QColor(230,230,230)]},
+ {"ScrollWidth":[unicode(i18n("Width:")),16]}), #Scrollbar, metrics: ScrollHeight (does nothing), ScrollWidth
+ "Window":
+ ({"Window":[unicode(i18n("Background:")),QColor(255,255,255)],
+ "WindowText":[unicode(i18n("Text Color:")),QColor(0,0,0)]},
+ {}), #Window "Background", WindowText
+ "Selected Items":
+ ({"Hilight":[unicode(i18n("Hilight Color:")),QColor(74,149,214)],
+ "HilightText":[unicode(i18n("Text Color:")),QColor(255,255,255)]},
+ {})}) #Hilight, HilightText
+ presets = [preset1,preset2]
+
+############################################################################
+class GeneralPage(QWidget):
+
+ winversions = wineread.winversions
+
+ verdic = {
+ "win2003":0,
+ "winxp":1,
+ "win2k":2,
+ "winme":3,
+ "win98":4,
+ "win95":5,
+ "nt40":6,
+ "nt351":7,
+ "win31":8,
+ "win30":9,
+ "win20":10}
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ global application
+ QWidget.__init__(self,parent)
+
+ if not name:
+ self.setName("GeneralTab")
+
+ general_tab_layout = QVBoxLayout(self,0,0,"GeneralTabLayout")
+ self.top_layout = general_tab_layout
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ general_tab_layout.addWidget(vbox)
+
+ if application:
+ appwarning = QLabel(vbox,"appwarning")
+ appwarning.setText(i18n("Application specific settings for <b>" +\
+ application + "</b><p>Changing a setting here will permanently " +\
+ "make that setting independent of settings for all other " +\
+ "applications.</p>"))
+ appwarning.setFrameStyle( QFrame.Box | QFrame.Raised )
+ self.winversions = self.winversions + (( "global",\
+ unicode(i18n("Use Global Setting")), 0, 0, 0, "", "", 0, 0, ""),)
+ self.verdic["global"]=11
+
+ hbox = QHBox(vbox)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ versiontext = QLabel(hbox,"versiontext")
+ versiontext.setText(i18n("Windows version:"))
+
+ self.versioncombo = KComboBox(0,hbox,"versioncombo")
+ self.fillVersionCombo(self.versioncombo)
+ self.connect(self.versioncombo,SIGNAL("activated(int)"),self.slotVersionActivated)
+
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ general_tab_layout.addItem(bottomspacer)
+
+ self.reset()
+
+ self.clearWState(Qt.WState_Polished)
+
+ def isChanged(self):
+ changed = False
+ changed = changed or self.currentwinverid != self.originalwinverid
+ return changed
+
+ def reset(self):
+ settings = wineread.GetGeneralWineSettings(application)
+
+ if application:
+ self.currentwinverid = self.verdic[settings.get("Version","global")]
+ else:
+ self.currentwinverid = self.verdic[settings.get("Version","winxp")]
+ self.originalwinverid = self.currentwinverid
+ self.__selectWinVer(self.currentwinverid)
+
+ def applyChanges(self):
+ """ Applies the changes to wine's configuration """
+ winewrite.SetWinVersion(self.winversions[self.currentwinverid], application)
+
+ self.reset()
+
+ def fillVersionCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for version in self.winversions:
+ combo.insertItem(version[1])
+
+ def slotVersionActivated(self,verid):
+ self.currentwinverid = verid
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def __selectWinVer(self,verid):
+ """
+ Sets the current Windows version and selects it in the combo box
+ """
+ self.versioncombo.setCurrentItem(verid)
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+
+############################################################################
+class ApplicationsPage(QWidget):
+
+ applications = []
+
+ browsers = []
+ mailers = []
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ QWidget.__init__(self,parent)
+
+ if not name:
+ self.setName("ApplicationsTab")
+
+ applications_tab_layout = QVBoxLayout(self,0,0,"ApplicationsTabLayout")
+ self.top_layout = applications_tab_layout
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ applications_tab_layout.addWidget(vbox)
+
+ # -- Application Specific Settings group --
+ self.perapp_group_box = QHGroupBox(vbox)
+ self.perapp_group_box.setTitle(i18n("Application specific settings"))
+ self.perapp_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.perapp_group_box.setInsideMargin(KDialog.marginHint())
+
+ vbox2 = QVBox(self.perapp_group_box)
+ vbox2.setSpacing(KDialog.spacingHint())
+
+ applicationstext = QLabel(vbox2,"applicationstext")
+ applicationstext.setText(i18n("Change application specific settings for:"))
+
+ self.appslist = KListBox(vbox2)
+ self.connect(self.appslist, SIGNAL("selectionChanged(QListBoxItem *)"), self.slotListClicked)
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.addbutton = KPushButton(i18n("Add Application..."),hbox)
+ self.connect(self.addbutton,SIGNAL("clicked()"),self.slotAddClicked)
+
+ self.removebutton = KPushButton(i18n("Remove..."),hbox)
+ self.connect(self.removebutton,SIGNAL("clicked()"),self.slotRemoveClicked)
+
+ spacer = QWidget(hbox)
+ hbox.setStretchFactor(spacer,1)
+
+ self.settingsbutton = KPushButton(i18n("Settings"),hbox)
+ self.connect(self.settingsbutton,SIGNAL("clicked()"),self.slotSettingsClicked)
+
+ # -- Native Applications Settings group --
+ # Removed pending a patch to winebrowser
+ #self.nativeapp_group_box = QVGroupBox(vbox)
+ #self.nativeapp_group_box.setTitle(i18n("Native applications"))
+ #self.nativeapp_group_box.setInsideSpacing(KDialog.spacingHint())
+ #self.nativeapp_group_box.setInsideMargin(KDialog.marginHint())
+
+ #vbox3 = QWidget(self.nativeapp_group_box)
+
+ #native_apps_layout = QGridLayout(vbox3,2,3)
+ #native_apps_layout.setSpacing(KDialog.spacingHint())
+
+ #browsertext = QLabel(vbox3,"browsertext")
+ #browsertext.setText(i18n("Web Browser:"))
+ #native_apps_layout.addWidget(browsertext,0,0)
+
+ #self.browsercombo = KComboBox(0,vbox3,"browsercombo")
+ #self.browsercombo.setEditable(False)
+ #self.connect(self.browsercombo,SIGNAL("activated(int)"),self.slotBrowserActivated)
+ #native_apps_layout.addWidget(self.browsercombo,0,1)
+ #native_apps_layout.setColStretch(1,1)
+
+ #QToolTip.add(self.browsercombo,
+ #i18n("<p>Select the browser to be launched when clicking on a link" +\
+ #" in a Windows application.</p>"))
+
+ #self.browserbutton = KPushButton(i18n("..."),vbox3)
+ #self.connect(self.browserbutton,SIGNAL("clicked()"),self.slotBrowserClicked)
+ #native_apps_layout.addWidget(self.browserbutton,0,2)
+
+ #mailertext = QLabel(vbox3,"mailertext")
+ #mailertext.setText(i18n("Mail Client:"))
+ #native_apps_layout.addWidget(mailertext,1,0)
+
+ #self.mailercombo = KComboBox(0,vbox3,"mailercombo")
+ #self.connect(self.mailercombo,SIGNAL("activated(int)"),self.slotMailerActivated)
+ #native_apps_layout.addWidget(self.mailercombo,1,1)
+
+ #QToolTip.add(self.mailercombo,
+ #i18n("<p>Select the mail client to be launched when clicking on" +\
+ #" a mailto link in a Windows application.</p>"))
+
+ #self.mailerbutton = KPushButton(i18n("..."),vbox3)
+ #self.connect(self.mailerbutton,SIGNAL("clicked()"),self.slotMailerClicked)
+ #native_apps_layout.addWidget(self.mailerbutton,1,2)
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ applications_tab_layout.addItem(bottomspacer)
+
+ self.changed = False
+
+ # Removed pending a patch to winebrowser
+ #browsers = wineread.GetNativeBrowserList()
+ #if "kfmclient exec" not in browsers:
+ #browsers.append("kfmclient exec")
+ #self.currentbrowser = wineread.GetBrowser()
+ #self.browsers = self.createBrowserList(browsers,[self.currentbrowser])
+ #self.fillCombo(self.browsercombo,self.browsers)
+
+ #mailers = wineread.GetNativeMailerList()
+ #if "kfmclient exec" not in mailers:
+ #mailers.append("kfmclient exec")
+ #self.currentmailer = wineread.GetMailer()
+ #self.mailers = self.createMailerList(mailers,[self.currentmailer])
+ #self.fillCombo(self.mailercombo,self.mailers)
+
+ self.reset()
+
+ self.clearWState(Qt.WState_Polished)
+
+ def isChanged(self):
+ changed = False
+ changed = changed or self.applications != self.originalapplications
+ #changed = changed or self.currentbrowser != self.originalbrowser
+ #changed = changed or self.currentmailer != self.originalmailer
+ return changed
+
+ def reset(self):
+ self.applications = wineread.GetApps()
+ self.originalapplications = self.applications[:]
+ self.updateAppsList()
+
+ # Removed pending a patch to winebrowser
+ #self.currentbrowser = wineread.GetBrowser()
+ #self.__selectBrowser(self.currentbrowser)
+ #self.originalbrowser = self.currentbrowser
+
+ #self.currentmailer = wineread.GetMailer()
+ #self.__selectMailer(self.currentmailer)
+ #self.originalmailer = self.currentmailer
+
+ def applyChanges(self):
+ """ Applies the changes to wine's configuration """
+ if self.applications != self.originalapplications:
+ winewrite.SetApps(self.applications)
+ # Removed pending a patch to winebrowser
+ #if self.currentbrowser != self.originalbrowser:
+ #winewrite.SetDefaultBrowser(self.currentbrowser)
+ #if self.currentmailer != self.originalmailer:
+ #winewrite.SetDefaultMailer(self.currentmailer)
+ self.reset()
+
+ def createBrowserList(self,native,wine):
+ """
+ Takes a list of native browsers and a list wine browsers
+ and creates a list of the commands with descriptions
+ """
+
+ browsers = []
+
+ for browser in native:
+ browserwords = browser.split()
+ if browserwords and browserwords[0] == "kfmclient":
+ browserkfmcmd = browser.split(' ')
+ if len(browserkfmcmd) > 2 and \
+ browserkfmcmd[1] == 'openProfile':
+ browsertr = "Konqueror " + browserkfmcmd[2] +\
+ str(i18n(" profile (Native)"))
+ elif len(browserkfmcmd) > 1 and \
+ browserkfmcmd[1] == 'exec':
+ browsertr = str(i18n("Use KDE Default"))
+ else:
+ browsertr = str(i18n("Konqueror (Native)"))
+ else:
+ browsertr = browser.capitalize() + str(i18n(" (Native)"))
+ browsers.append((browser,browsertr))
+ for browser in wine:
+ if browser and browser[1] == ':':
+ browser = browser.lower()
+ browsertr = browser[browser.rfind('\\\\')+2:browser.rfind('.exe')]
+ browsertr = browsertr.capitalize() + str(i18n(" (Windows, set by application)"))
+ else: # winebrowser
+ continue
+ browsers.append((browser,browsertr))
+
+ return browsers
+
+ def createMailerList(self,native,wine):
+ """
+ Takes a list of native mailers and a list wine mailers
+ and creates a list of the commands with descriptions
+ """
+
+ mailers = []
+
+ for mailer in native:
+ mailerwords = mailer.split()
+ if mailerwords and mailerwords[0] == "kfmclient":
+ mailerkfmcmd = mailer.split(' ')
+ if len(mailerkfmcmd) > 1 and \
+ mailerkfmcmd[1] == 'exec':
+ mailertr = str(i18n("Use KDE Default"))
+ else:
+ mailertr = str(i18n("KDE (Native)"))
+ else:
+ mailertr = mailer.capitalize() + unicode(i18n(" (Native)"))
+ mailers.append((mailer,mailertr))
+ for mailer in wine:
+ if mailer and mailer[1] == ':':
+ mailer = mailer.lower()
+ mailertr = mailer[mailer.rfind('\\\\')+2:mailer.rfind('.exe')]
+ mailertr = mailertr.capitalize() + unicode(i18n(" (Windows, set by application)"))
+ else: # winebrowser
+ continue
+ mailers.append((mailer,mailertr))
+
+ return mailers
+
+ def slotListClicked(self,item):
+ """ Called when an application in the list is clicked """
+ for appid,appname in enumerate(self.applications):
+ if appname==item.text():
+ self.__selectApp(appid)
+ return
+
+ def slotAddClicked(self):
+ """
+ Let the user choose a new application to change settings for
+ """
+ app = KFileDialog.getOpenFileName(wineread.winepath + \
+ "/dosdevices/c:",\
+ "*.exe|" + unicode(i18n("Windows Executables (*.exe)")),self,i18n("Application"))
+ if app:
+ app = str(app).split('/')
+ app = app[-1]
+ self.applications.append(app)
+ self.updateAppsList()
+ for appid,appname in enumerate(self.applications):
+ if appname==app:
+ self.__selectApp(appid)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotRemoveClicked(self):
+ """ Removes settings for selected application """
+ if KMessageBox.warningContinueCancel(self, \
+ i18n("This will remove all application specific settings for \n" +\
+ self.applications[self.selectedappid] +"\n" +\
+ "Do you want to proceed?"),\
+ i18n("Warning")) == KMessageBox.Continue:
+ del self.applications[self.selectedappid]
+ self.updateAppsList()
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotSettingsClicked(self):
+ """
+ Launches a new wineconfig window for the selected application
+ """
+ os.system("wineconfig " + self.applications[self.selectedappid])
+
+ def slotBrowserEdited(self,browser):
+ """ Sets the first browser to use to the one selected in the combo box """
+ self.currentbrowser = str(browser).strip()
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotBrowserActivated(self,browserid):
+ """ Sets the first browser to use to the one selected in the combo box """
+ self.currentbrowser = self.browsers[browserid][0]
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotBrowserClicked(self):
+ """ Sets the first browser to use to the one selected in the combo box """
+ browserdlg = KOpenWithDlg(self)
+ browserdlg.hideNoCloseOnExit()
+ browserdlg.hideRunInTerminal()
+ if browserdlg.exec_loop():#i18n("Choose a Web Browser"),self.currentbrowser)
+ self.__selectBrowser(str(browserdlg.text()))
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotMailerEdited(self,mailer):
+ """ Sets the first mailer to use to the one selected in the combo box """
+ self.currentmailer = str(mailer).strip()
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotMailerActivated(self,mailerid):
+ """ Sets the first browser to use to the one selected in the combo box """
+ self.currentmailer = self.mailers[mailerid][0]
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotMailerClicked(self):
+ """ Sets the first mailer to use to the one selected in the combo box """
+ mailerdlg = KOpenWithDlg(self)
+ mailerdlg.hideNoCloseOnExit()
+ mailerdlg.hideRunInTerminal()
+ if mailerdlg.exec_loop():#i18n("Choose a Web Browser"),self.currentbrowser)
+ self.__selectMailer(str(mailerdlg.text()))
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def fillCombo(self,combo,_list):
+ """ Fill the combobox with the values from our list
+ Uses the second value from each tuple """
+ for item in _list:
+ combo.insertItem(item[1])
+
+ def updateAppsList(self):
+ """ Updates the displayed list of applications """
+ self.appslist.clear()
+
+ self.applications.sort()
+
+ self.appslist.insertStringList(QStringList.fromStrList(self.applications))
+
+ self.__selectApp(None)
+
+ def __selectBrowser(self,browsercommand):
+ """ Selects the browser in the combobox """
+ self.currentbrowser = browsercommand
+
+ for i,browser in enumerate(self.browsers):
+ if browser[0].lower() == browsercommand.lower():
+ self.browsercombo.setCurrentItem(i)
+ break
+ else:
+ browserwords = browsercommand.split()
+ #if len(browserwords) > 1 and browserwords[0] != "kfmclient":
+ # browsercommand = browserwords[0]
+ self.browsers = self.browsers +\
+ self.createBrowserList([browsercommand],[])
+ self.browsercombo.insertItem(self.browsers[-1][1])
+ self.__selectBrowser(browsercommand)
+
+ def __selectMailer(self,mailercommand):
+ """ Selects the mailer in the combobox """
+ self.currentmailer = mailercommand
+
+ for i,mailer in enumerate(self.mailers):
+ if mailer[0] == mailercommand:
+ self.mailercombo.setCurrentItem(i)
+ break
+ else:
+ mailerwords = mailercommand.split()
+ #if len(mailerwords) > 1 and mailerwords[0] != "kfmclient":
+ # mailercommand = mailerwords[0]
+ self.mailers = self.mailers +\
+ self.createBrowserList([mailercommand],[])
+ self.mailercombo.insertItem(self.mailers[-1][1])
+ self.__selectMailer(mailercommand)
+
+ def __selectApp(self,appid):
+ """ Selects the application """
+ if appid or appid == 0:
+ self.selectedappid = appid
+ self.appslist.setCurrentItem(appid)
+ self.removebutton.setEnabled(True)
+ self.settingsbutton.setEnabled(True)
+ else:
+ self.selectedappid = None
+ self.removebutton.setEnabled(False)
+ self.settingsbutton.setEnabled(False)
+
+ def GetKdeDefaultBrowser(self):
+ """ Returns the default browser set in KDE """
+ # Create a configuration object.
+ config = KConfig("wineconfigrc")
+ return str(config.lookupData(KEntryKey("General","BrowserApplication")).mValue).strip('!')
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+
+############################################################################
+class LibrariesPage(QWidget):
+
+ dlls = [""]
+ overriddendlls = {}
+
+ orderoptions = ("builtin","native","builtin,native","native,builtin","")
+ orderoptionstr = [
+ unicode(i18n("Built-in (Wine)")),
+ unicode(i18n("Native (Windows)")),
+ unicode(i18n("Built-in then Native")),
+ unicode(i18n("Native then Built-in")),
+ unicode(i18n("Disable"))]
+
+ def __init__(self,parent = None,name = None,modal = 0,fl = 0):
+ QWidget.__init__(self,parent)
+
+ if not name:
+ self.setName("LibrariesTab")
+
+ libraries_tab_layout = QVBoxLayout(self,0,0,"LibrariesTabLayout")
+ self.top_layout = libraries_tab_layout
+
+ vbox = QVBox(self)
+ vbox.setSpacing(KDialog.spacingHint())
+
+ libraries_tab_layout.addWidget(vbox)
+
+ # -- DLL overrides group
+ self.overrides_group_box = QHGroupBox(vbox)
+ self.overrides_group_box.setTitle(i18n("DLL Overrides"))
+ self.overrides_group_box.setInsideSpacing(KDialog.spacingHint())
+ self.overrides_group_box.setInsideMargin(KDialog.marginHint())
+
+ vbox2 = QVBox(self.overrides_group_box)
+ vbox2.setSpacing(KDialog.spacingHint())
+
+ spacer = QWidget(vbox2)
+ vbox2.setStretchFactor(spacer,1)
+
+ newtext = QLabel(vbox2,"newtext")
+ newtext.setText(i18n("New override for library:"))
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.dllcombo = KComboBox(0,hbox,"dllcombo")
+ self.dllcombo.setEditable(True)
+ hbox.setStretchFactor(self.dllcombo,3)
+ self.connect(self.dllcombo,SIGNAL("activated(int)"),self.slotDllComboActivated)
+
+ QToolTip.add(self.dllcombo,
+ i18n("<p>Dynamic Link Libraries can be specified individually to" +\
+ " be either builtin (provided by Wine) or native (taken from" +\
+ " Windows or provided by the application).</p>"))
+ self.addbutton = KPushButton(i18n("Add"),hbox)
+ hbox.setStretchFactor(self.addbutton,1)
+ self.connect(self.addbutton,SIGNAL("clicked()"),self.slotAddClicked)
+
+ existingtext = QLabel(vbox2,"existingtext")
+ existingtext.setText(i18n("Existing overrides:"))
+
+ hbox = QHBox(vbox2)
+ hbox.setSpacing(KDialog.spacingHint())
+
+ self.dllslist = KListView(hbox)
+ self.dllslist.addColumn(i18n("Library"))
+ self.dllslist.addColumn(i18n("Load Order"))
+ self.dllslist.setAllColumnsShowFocus(True)
+ self.dllslist.setSelectionMode(QListView.Single)
+ self.dllslist.setSorting(-1,True)
+ hbox.setStretchFactor(self.dllslist,3)
+
+ self.connect(self.dllslist, SIGNAL("selectionChanged(QListViewItem *)"), self.slotListClicked)
+
+ vbox3 = QVBox(hbox)
+ vbox3.setSpacing(KDialog.spacingHint())
+ hbox.setStretchFactor(vbox3,1)
+
+ self.editbutton = KPushButton(i18n("Edit"),vbox3)
+ self.connect(self.editbutton,SIGNAL("clicked()"),self.slotEditClicked)
+ self.editbutton.setEnabled(False)
+
+ self.removebutton = KPushButton(i18n("Remove"),vbox3)
+ self.connect(self.removebutton,SIGNAL("clicked()"),self.slotRemoveClicked)
+ self.removebutton.setEnabled(False)
+
+ spacer = QWidget(vbox3)
+ vbox3.setStretchFactor(spacer,1)
+
+ bottomspacer = QSpacerItem(51,160,QSizePolicy.Minimum,QSizePolicy.Expanding)
+ libraries_tab_layout.addItem(bottomspacer)
+
+ self.changed = False
+
+ self.reset()
+
+ self.clearWState(Qt.WState_Polished)
+
+ def isChanged(self):
+ changed = False
+ changed = changed or self.overriddendlls != self.originaloverriddendlls
+ return changed
+
+ def reset(self):
+ self.dlls = wineread.GetDllsList()
+ self.fillCombo(self.dllcombo)
+
+ self.overriddendlls = wineread.GetDllOverrides(application)
+ self.originaloverriddendlls = self.overriddendlls.copy()
+ self.selecteddll = None
+ self.updateDllOverridesList()
+
+ def applyChanges(self):
+ """ Applies the changes to wine's configuration """
+ winewrite.SetDllOverrides(self.overriddendlls,application)
+ self.reset()
+
+ def slotListClicked(self,item):
+ """ Called when an application in the list is clicked """
+ self.__selectOverriddenDll(item.text(0))
+
+ def slotAddClicked(self):
+ """
+ Adds the selected library to the overrides list
+ """
+ dll = self.dllcombo.currentText()
+ if dll:
+ self.overriddendlls[str(dll)]="native,builtin"
+ self.updateDllOverridesList()
+ self.__selectOverriddenDll(dll)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotRemoveClicked(self):
+ """ Removes override for selected library """
+ del self.overriddendlls[str(self.selecteddll)]
+ self.updateDllOverridesList()
+ self.__selectOverriddenDll(None)
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotEditClicked(self):
+ """
+ Gives a choice for the load order for the library
+ """
+ if self.selecteddll:
+ order = KInputDialog.getItem(i18n("Edit Library Override"),\
+ unicode(i18n("Load order for %s:")) % (unicode(self.selecteddll),),
+ QStringList.fromStrList(self.orderoptionstr),\
+ False,0,self,"editdll")
+
+ if order[1]:
+ self.overriddendlls[str(self.selecteddll)] = \
+ self.orderoptions[self.orderoptionstr.index(str(order[0]))]
+ self.updateDllOverridesList()
+ self.emit(PYSIGNAL("changedSignal()"), ())
+
+ def slotDllComboActivated(self,dllid):
+ return
+
+ def fillCombo(self,combo):
+ """ Fill the combobox with the values from our list """
+ for dll in self.dlls:
+ combo.insertItem(dll)
+
+ def updateDllOverridesList(self):
+ """ Updates the displayed list of drives """
+ self.dllslist.clear()
+ self.dllsToListItems = {}
+ firstselecteddll = None
+ lastdll = None
+
+ for dll,order in self.overriddendlls.iteritems():
+ lvi = QListViewItem(self.dllslist,dll,order)
+ self.dllsToListItems[dll] = lvi
+ if self.selecteddll and self.selecteddll==dll:
+ firstselecteddll = dll
+ lastdll = dll
+
+ self.dllslist.setSortColumn(0)
+ self.selecteddll = firstselecteddll
+ self.__selectOverriddenDll(self.selecteddll)
+ self.dllslist.ensureItemVisible(self.dllslist.currentItem())
+
+ def __selectOverriddenDll(self,dll):
+ """ Select a dll from the overridden list """
+ self.selecteddll = dll
+ if dll:
+ self.dllslist.setSelected(self.dllsToListItems[str(dll)],True)
+ self.editbutton.setEnabled(True)
+ self.removebutton.setEnabled(True)
+ else:
+ self.editbutton.setEnabled(False)
+ self.removebutton.setEnabled(False)
+
+ def setMargin(self,margin):
+ self.top_layout.setMargin(margin)
+
+ def setSpacing(self,spacing):
+ self.top_layout.setSpacing(spacing)
+
+
+############################################################################
+def create_wineconfig(parent,name):
+ """ Factory function for KControl """
+ global kapp
+ kapp = KApplication.kApplication()
+ return WineConfigApp(parent, name)
+
+############################################################################
+def MakeAboutData():
+ aboutdata = KAboutData("guidance",programname,version, \
+ "Wine Configuration Tool", KAboutData.License_GPL, \
+ "Copyright (C) 2006-2007 Yuriy Kozlov", \
+ "Thanks go to Simon Edwards, Sebastian Kügler")
+ aboutdata.addAuthor("Yuriy Kozlov","Developer","yuriy.kozlov@gmail.com", \
+ "http://www.yktech.us/")
+ aboutdata.addAuthor("Simon Edwards","Developer","simon@simonzone.com", \
+ "http://www.simonzone.com/software/")
+ aboutdata.addAuthor("Sebastian Kügler","Developer","sebas@kde.org", \
+ "http://vizZzion.org")
+ return aboutdata
+
+if standalone:
+ aboutdata = MakeAboutData()
+ KCmdLineArgs.init(sys.argv,aboutdata)
+
+ # Can't do i18n?
+ options = [("+[appname]", str(i18n("Application to change settings for")))]
+ KCmdLineArgs.addCmdLineOptions( options )
+
+ kapp = KApplication()
+
+ wineconfigapp = WineConfigApp()
+ wineconfigapp.exec_loop(None)
diff --git a/wineconfig/wineread.py b/wineconfig/wineread.py
new file mode 100644
index 0000000..c1fa3c5
--- /dev/null
+++ b/wineconfig/wineread.py
@@ -0,0 +1,543 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# wineread.py - description #
+# ------------------------------ #
+# begin : Fri Mar 26 2004 #
+# copyright : (C) 2006 by Yuriy Kozlov #
+# email : yuriy.kozlov@gmail.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+import os
+
+""" Provides a set of functions for accessing wine's settings """
+
+# Assumes the fake windows is installed in ~/.wine
+default_winepath = os.environ['HOME'] + "/.wine"
+winepath = default_winepath
+defaultwinfolderspath = "c:\\windows\\profiles\\" + os.environ['USER']
+
+# Where the dll's are
+default_winebuildpath = "/usr/lib/wine"
+default_winebuildpath2 = "/usr/lib32/wine"
+default_winebuildpath3 = "/usr/local/lib/wine"
+
+winebuildpath = None
+
+def GetWineBuildPath():
+ """ Returns the wine build path, None if not present """
+ path = None
+ if winebuildpath:
+ path = winebuildpath
+ elif os.path.exists(default_winebuildpath):
+ path = default_winebuildpath
+ elif os.path.exists(default_winebuildpath2):
+ path = default_winebuildpath2
+ elif os.path.exists(default_winebuildpath3):
+ path = default_winebuildpath3
+
+ return path
+
+def SetWineBuildPath(path):
+ """ Sets the winebuildpath to path """
+ global winebuildpath
+ winebuildpath = path
+
+# drive = [index, letter, unixpath/mapping, type, label, serial]
+empty_drives = (
+ [0,"A:","","","",""],
+ [1,"B:","","","",""],
+ [2,"C:","","","",""],
+ [3,"D:","","","",""],
+ [4,"E:","","","",""],
+ [5,"F:","","","",""],
+ [6,"G:","","","",""],
+ [7,"H:","","","",""],
+ [8,"I:","","","",""],
+ [9,"J:","","","",""],
+ [10,"K:","","","",""],
+ [11,"L:","","","",""],
+ [12,"M:","","","",""],
+ [13,"N:","","","",""],
+ [14,"O:","","","",""],
+ [15,"P:","","","",""],
+ [16,"Q:","","","",""],
+ [17,"R:","","","",""],
+ [18,"S:","","","",""],
+ [19,"T:","","","",""],
+ [20,"U:","","","",""],
+ [21,"V:","","","",""],
+ [22,"W:","","","",""],
+ [23,"X:","","","",""],
+ [24,"Y:","","","",""],
+ [25,"Z:","","","",""])
+
+def GetEmptyDrives():
+ """ Returns a list of 26 empty drives """
+ drives = []
+ for drive in empty_drives:
+ drives.append(drive[:])
+ return drives
+
+def LoadDrives():
+ drives = GetEmptyDrives()
+
+ driveletters = os.listdir(winepath + "/dosdevices")
+ for folder in driveletters:
+ if len(folder) > 2 or folder[1] != ':':
+ del folder
+ set(driveletters)
+
+ drivetypes = GetDriveTypes()
+
+ for drive in drives:
+ letter = drive[1].lower()
+ if letter in driveletters:
+ drive[2] = os.readlink(winepath + "/dosdevices/" + letter)
+ if drivetypes.has_key(drive[1]):
+ drive[3] = drivetypes[drive[1]]
+ return drives
+
+empty_shelllinks = ([26,"Desktop","","","",""],
+ [27,"My Documents","","","",""],
+ [28,"My Pictures","","","",""],
+ [29,"My Music","","","",""],
+ [30,"My Video","","","",""])
+
+folder_nonexistent = "This folder does not exist, please map it."
+profilesdirectory = winepath + "/dosdevices/c:/windows/profiles/" + os.environ['USER']
+
+def GetEmptyShellLinks():
+ """ Returns a list of important windows folders """
+ shelllinks = []
+ for link in empty_shelllinks:
+ shelllinks.append(link[:])
+ return shelllinks
+
+def GetShellLinks():
+ shelllinks = GetEmptyShellLinks()
+
+ existingshelllinks = os.listdir(profilesdirectory)
+ set(existingshelllinks)
+ shellregistry = GetShellRegistry()
+ usershellregistry = GetUserShellRegistry()
+
+ for link in shelllinks:
+ if link[1] in existingshelllinks:
+ linkpath = profilesdirectory + "/" + link[1]
+ if os.path.islink(linkpath):
+ link[2] = os.readlink(linkpath)
+ else:
+ link[2] = linkpath
+ link[3] = "shellfolder"
+ winpath = defaultwinfolderspath + "\\" + link[1]
+ link[4] = winpath
+ link[5] = shellregistry.get(link[1], defaultwinfolderspath + "\\" + link[1])
+ link[5] = link[5].replace("\\\\","\\")
+ else:
+ link[3] = "shellfolder"
+ link[4] = folder_nonexistent
+ link[5] = shellregistry.get(link[1], folder_nonexistent)
+ link[5] = link[5].replace("\\\\","\\")
+
+ return shelllinks
+
+def GetValue(key, value):
+ """ Returns a specific value, returns a blank string if the value is not there. """
+ # Need 4 \'s to generate one because both python and the shell use it as an escape character
+ key = key.replace("\\","\\\\")
+ key = key.replace(" ","\\ ")
+ error = os.system("wine regedit /E .registryvalue.reg " + key)
+ if error != 0:
+ return ""
+
+ file=open('.registryvalue.reg')
+
+ for line in file:
+ if line and line[0] == '"' or line[0] == '@':
+ line = line.strip('\r\n')
+ line = line.split('=')
+ line = (line[0].strip('"'),line[1].strip('"@'))
+ if line[0] == value:
+ file.close()
+ os.remove(".registryvalue.reg")
+ return line[1]
+ else:
+ file.close()
+ os.remove(".registryvalue.reg")
+ return ""
+
+def GetKeyValues(key):
+ """ Returns a dictionary of all the values in the key
+ Returns an empty dictionary if the key does not exist
+ Does not read subkeys within the key """
+ # Need 4 \'s to generate one because both python and the shell use it as an escape character
+ key = key.replace("\\","\\\\")
+ key = key.replace(" ","\\ ")
+ error = os.system("wine regedit /E .registrykey.reg " + key)
+ if error != 0:
+ return {}
+
+ settings = {}
+
+ file=open('.registrykey.reg')
+
+ keycount = 0
+ for line in file:
+ if keycount > 1:
+ break
+ elif line and line[0] == '[':
+ keycount += 1
+ elif line and line[0] == '"':
+ line = line.split('=')
+ settings[line[0].strip('"')] = line[1].strip('"\r\n@')
+
+ file.close()
+ os.remove(".registrykey.reg")
+
+ return settings
+
+def GetUserShellRegistry():
+ error = os.system("wine regedit /E .registryshelluser.reg HKEY_USERS\\\\.Default\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\User\\ Shell\\ Folders")
+ if error != 0:
+ return {}
+
+ usershellfile=open('.registryshelluser.reg')
+ usershellfilelines = usershellfile.readlines()
+ usershellfile.close()
+ os.remove(".registryshelluser.reg")
+
+ settings = {}
+
+ del(usershellfilelines[:3])
+
+ for usershellline in usershellfilelines:
+ usershellline = usershellline.split('=')
+ settings[usershellline[0].strip('"')] = usershellline[1].strip('"\r\n')
+
+ return settings
+
+def GetShellRegistry():
+ error = os.system("wine regedit /E .registryshell.reg HKEY_USERS\\\\.Default\\\\Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\\\\Shell\\ Folders")
+ if error != 0:
+ return {}
+
+ shellfile=open('.registryshell.reg')
+ shellfilelines = shellfile.readlines()
+ shellfile.close()
+ os.remove(".registryshell.reg")
+
+ settings = {}
+
+ del(shellfilelines[:3])
+
+ for shellline in shellfilelines:
+ shellline = shellline.split('=')
+ settings[shellline[0].strip('"')] = shellline[1].strip('"\r\n')
+
+ return settings
+
+def GetDriveTypes():
+ """ Returns a dictionary of the drive types """
+ # Drive C: doesn't get stored in the registry
+ defaulttypes = {"C:":"hd"}
+
+ types = GetKeyValues("HKEY_LOCAL_MACHINE\\Software\\Wine\\Drives")
+ types.update(defaulttypes)
+
+ return types
+
+def GetAudioDriver():
+ """ Returns the audio driver currently set in the registry """
+ return GetValue("HKEY_CURRENT_USER\\Software\\Wine\\Drivers","Audio")
+
+def GetDSoundSettings(app = None):
+ """ Returns a dictionary of the settings for the DirectSound section """
+ if not app:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\DirectSound")
+ else:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\DirectSound")
+
+def GetWindowSettings(app = None):
+ """ Returns a dictionary of the Window Settings """
+ if not app:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver")
+ else:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\X11 Driver")
+
+def GetD3DSettings(app = None):
+ """ Returns a dictionary of the Direct3D Settings """
+ if not app:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\Direct3D")
+ else:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\Direct3D")
+
+# Copied from winecfg
+winversions = (
+ ( "win2003", "Windows 2003", 5, 2, 0xECE, "VER_PLATFORM_WIN32_NT", "Service Pack 1", 1, 0, "ServerNT"),
+ ( "winxp", "Windows XP", 5, 1, 0xA28, "VER_PLATFORM_WIN32_NT", "Service Pack 2", 2, 0, "WinNT"),
+ ( "win2k", "Windows 2000", 5, 0, 0x893, "VER_PLATFORM_WIN32_NT", "Service Pack 4", 4, 0, "WinNT"),
+ ( "winme", "Windows ME", 4, 90, 0xBB8, "VER_PLATFORM_WIN32_WINDOWS", " ", 0, 0, ""),
+ ( "win98", "Windows 98", 4, 10, 0x8AE, "VER_PLATFORM_WIN32_WINDOWS", " A ", 0, 0, ""),
+ ( "win95", "Windows 95", 4, 0, 0x3B6, "VER_PLATFORM_WIN32_WINDOWS", "", 0, 0, ""),
+ ( "nt40", "Windows NT 4.0", 4, 0, 0x565, "VER_PLATFORM_WIN32_NT", "Service Pack 6a", 6, 0, "WinNT"),
+ ( "nt351", "Windows NT 3.5", 3, 51, 0x421, "VER_PLATFORM_WIN32_NT", "Service Pack 2", 0, 0, "WinNT"),
+ ( "win31", "Windows 3.1", 2, 10, 0, "VER_PLATFORM_WIN32s", "Win32s 1.3", 0, 0, ""),
+ ( "win30", "Windows 3.0", 3, 0, 0, "VER_PLATFORM_WIN32s", "Win32s 1.3", 0, 0, ""),
+ ( "win20", "Windows 2.0", 2, 0, 0, "VER_PLATFORM_WIN32s", "Win32s 1.3", 0, 0, ""))
+
+def GetGeneralWineSettings(app = None):
+ """ Returns a dictionary of the general wine Settings, including the windows version """
+ if not app:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine")
+ else:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app)
+
+def GetApps():
+ """
+ Returns a list of the applications which have keys for application
+ specific settings.
+ """
+ error = os.system("wine regedit /E .registryapps.reg HKEY_CURRENT_USER\\\\Software\\\\Wine\\\\AppDefaults")
+ if error != 0:
+ return []
+
+ settingsfile=open('.registryapps.reg')
+ settingsfilelines = settingsfile.readlines()
+ settingsfile.close()
+ os.remove('.registryapps.reg')
+
+ apps = set([])
+
+ del(settingsfilelines[:3])
+
+ for line in settingsfilelines:
+ if line[0] == '[':
+ line = line.split('\\')
+ line[4] = line[4].strip(']\r\n')
+ apps.add(line[4])
+
+ apps = list(apps)
+ apps.sort()
+
+ return apps
+
+builtin_only = set(("advapi32",
+ "capi2032",
+ "dbghelp",
+ "ddraw",
+ "gdi32",
+ "glu32",
+ "icmp",
+ "iphlpapi",
+ "joystick.drv",
+ "kernel32",
+ "mswsock",
+ "ntdll",
+ "opengl32",
+ "stdole2.tlb",
+ "stdole32.tlb",
+ "twain_32",
+ "unicows",
+ "user32",
+ "vdmdbg",
+ "w32skrnl",
+ "winealsa.drv",
+ "winearts.drv",
+ "wineaudioio.drv",
+ "wined3d",
+ "winedos",
+ "wineesd.drv",
+ "winejack.drv",
+ "winemp3.acm",
+ "winenas.drv",
+ "wineoss.drv",
+ "wineps",
+ "wineps.drv",
+ "winex11.drv",
+ "winmm",
+ "wintab32",
+ "wnaspi32",
+ "wow32",
+ "ws2_32",
+ "wsock32"))
+
+def GetDllsList():
+ """ Returns a list of dlls that can be overridden """
+ origdlls = os.listdir(GetWineBuildPath())
+ dlls = [""]
+
+ for dll in origdlls:
+ dll = dll.rstrip('.so')
+ dots = dll.count('.')
+ if dots != 1:
+ continue
+ dll, extension = dll.split('.')
+ if not (extension != "dll" or dll in builtin_only):
+ dlls.append(dll)
+
+ dlls.sort()
+ return dlls
+
+def GetDllOverrides(app = None):
+ """ Returns a dictionary of overridden dlls """
+ if not app:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\DllOverrides")
+ else:
+ return GetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\DllOverrides")
+
+
+# --- Getting and Setting the Default browser ---
+
+# WineBrowser>Browsers
+# List of browsers that Wine will attempt to launch when running winebrowser
+# command or clicking on a link in a windows application. Default value is
+default_browserlist = ["firefox","konqueror","mozilla","netscape","galeon","opera","dillo"]
+
+# WineBrowser>Mailers
+# List of mail clients that Wine will attempt to launch when running winebrowser
+# Default value is
+default_mailerlist = ["mozilla-thunderbird","thunderbird","evolution","kmail"]
+
+#with firefox installed
+browser_formats = ["CHROME","FirefoxHTML","HTML","htmlfile","FTP","GOPHER","http","https"]
+
+default_browser_formats = ["htmlfile","http","https"] # just "winebrowser"
+
+default_mailer_formats = ["mailto"] # "winebrowser %1"
+
+def GetBrowser():
+ """ Returns the default browser """
+ browser = GetValue("HKEY_LOCAL_MACHINE\\Software\\Classes\\http\\shell\\open\\command",'@')
+
+ if browser == "winebrowser":
+ return GetWineBrowser()
+ else:
+ return browser
+
+def GetWineBrowser():
+ """ Returns the first browser tried by winebrowser """
+ browserlist = GetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Browsers")
+ if browserlist:
+ browser = browserlist.split(',')[0].strip()
+ return browser
+ else:
+ return default_browserlist[0]
+
+#def GetWinBrowserList():
+
+def GetNativeBrowserList():
+ """ Returns the list of browsers tried by winebrowser """
+ browserlist = GetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Browsers")
+ if browserlist:
+ browserlist = list(set(browserlist.split(',')))
+ for i,item in enumerate(browserlist):
+ browserlist[i] = item.strip()
+ return browserlist
+ else:
+ return default_browserlist
+
+def GetMailer():
+ """ Returns the default mail client """
+ mailer = GetValue("HKEY_LOCAL_MACHINE\\Software\\Classes\\mailto\\shell\\open\\command",'@')
+
+ if mailer == "winebrowser" or mailer == "winebrowser %1":
+ return GetWineMailer()
+ else:
+ return mailer
+
+def GetWineMailer():
+ """ Returns the first mail client tried by winebrowser """
+ mailerlist = GetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Mailers")
+ if mailerlist:
+ mailer = mailerlist.split(',')[0].strip()
+ return mailer
+ else:
+ # Default first mailer to try in wine is mozilla-thunderbird
+ return default_mailerlist[0]
+
+def GetNativeMailerList():
+ """ Returns the list of mail clients tried by winebrowser """
+ mailerlist = GetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Mailers")
+ if mailerlist:
+ mailerlist = list(set(mailerlist.split(',')))
+ for i,item in enumerate(mailerlist):
+ mailerlist[i] = item.strip()
+ return mailerlist
+ else:
+ return default_mailerlist
+
+
+# ----- Theming -----
+
+def GetThemesList():
+ """ Returns a list of installed thiemes """
+ if not os.path.exists(winepath + "/dosdevices/c:/windows/Resources/Themes"):
+ return []
+ origthemes = os.listdir(winepath + "/dosdevices/c:/windows/Resources/Themes")
+ themes = []
+
+ for i,theme in enumerate(origthemes):
+ if os.path.exists(winepath +\
+ "/dosdevices/c:/windows/Resources/Themes/" + theme +\
+ "/" + theme + ".msstyles"):
+ themes.append(theme)
+
+ themes.sort()
+ return themes
+
+def GetCurrentTheme():
+ """ Returns the current (theme,color,size), None if none is set """
+ themeinfo = GetKeyValues("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager")
+
+ if not themeinfo or themeinfo["ThemeActive"] == "0":
+ return None
+ else:
+ # themename from themename.msstyles
+ themename = themeinfo["DllName"].split('\\\\')[-1].split('.')[0]
+ theme = (themename, themeinfo["ColorName"], themeinfo["SizeName"])
+ return theme
+
+def GetColorSettings():
+ """ Returns a dictionary of the set colors """
+ return GetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Colors")
+
+def GetWindowMetrics():
+ """ Returns a dictionary of the WindowMetrics settings """
+ return GetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Desktop\\WindowMetrics")
+
+def GetDesktopSettings():
+ """ Returns a dictionary of the control panel \ Desktop settings """
+ return GetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Desktop")
+
+def SetWinePath(path):
+ """ Sets the winepath to path """
+ global winepath
+ winepath = path
+
+def GetWinePath():
+ return winepath
+
+def VerifyWineDrive(path = None):
+ """ Does a very basic check of if the given path is a valid fake windows installation
+ Returns False if there is no C: drive """
+ if not path:
+ path = self.default_winepath
+
+ return os.path.exists(path + "/dosdevices/c:/windows/profiles/" + os.environ['USER']) and \
+ os.path.exists(path + "/dosdevices/c:/windows/system32") and \
+ os.path.exists(path + "/system.reg") and os.path.exists(path + "/userdef.reg") and \
+ os.path.exists(path + "/user.reg")
diff --git a/wineconfig/winewrite.py b/wineconfig/winewrite.py
new file mode 100644
index 0000000..0d0d365
--- /dev/null
+++ b/wineconfig/winewrite.py
@@ -0,0 +1,489 @@
+#!/usr/bin/python
+# -*- coding: UTF-8 -*-
+###########################################################################
+# winewrite.py - description #
+# ------------------------------ #
+# begin : Fri Mar 26 2004 #
+# copyright : (C) 2006 by Yuriy Kozlov #
+# email : yuriy.kozlov@gmail.com #
+# #
+###########################################################################
+# #
+# This program is free software; you can redistribute it and/or modify #
+# it under the terms of the GNU General Public License as published by #
+# the Free Software Foundation; either version 2 of the License, or #
+# (at your option) any later version. #
+# #
+###########################################################################
+
+import os
+import wineread
+import random
+
+""" Provides functions for changings settings in wine """
+
+def SetDriveMappings(drives):
+ """ Sets wine's drive settings """
+ driveletters = os.listdir(wineread.winepath + "/dosdevices")
+ set(driveletters)
+
+ for drive in drives[:26]:
+ letter = drive[1].lower()
+ defineDrive = False
+ if letter in driveletters: # The drive exists
+ if drive[2]: # The drive is in use
+ # Compare for changes
+ changed = False
+ # Check if the mapping changed
+ if drive[2] != os.readlink(wineread.winepath + "/dosdevices/" + letter):
+ changed = True
+
+ # If it's changed, it will be recreated
+ if changed:
+ os.unlink(wineread.winepath + "/dosdevices/" + letter)
+ defineDrive = True
+ else:
+ # Remove the drive
+ os.unlink(wineread.winepath + "/dosdevices/" + letter)
+ else: # The drive doesn't exist
+ if drive[2]: # The drive is in use
+ # Create it
+ defineDrive = True
+ else:
+ # Do nothing
+ continue
+
+ if defineDrive:
+ os.symlink(drive[2], wineread.winepath + "/dosdevices/" + letter)
+
+ SetDriveTypes(drives[:26])
+ SetShellLinks(drives[26:])
+
+def SetShellLinks(shelllinks):
+ existingshelllinks = os.listdir(wineread.winepath + "/dosdevices/c:/windows/profiles/" + os.environ['USER'])
+ set(existingshelllinks)
+ shellregistry = wineread.GetShellRegistry()
+
+ for link in shelllinks:
+ createLink = False
+ if link[1] in existingshelllinks: # The link exists
+ linkpath = wineread.winepath + "/dosdevices/c:/windows/profiles/" + os.environ['USER'] + "/" + link[1]
+ if link[2]: # The folder is mapped
+ # Compare for changes
+ changed = False
+ # Check if the mapping changed
+ if os.path.islink(linkpath) and link[2] != os.readlink(linkpath):
+ changed = True
+ elif not os.path.islink(linkpath) and link[2] != linkpath:
+ changed = True
+ elif link[5] != shellregistry.get(link[1], wineread.defaultwinfolderspath + "\\" + link[1]):
+ changed = True
+
+ # If it's changed, it will be recreated
+ if changed:
+ if os.path.islink(linkpath):
+ os.unlink(linkpath)
+ else:
+ os.rename(linkpath,linkpath + "-backup" + str(random.randint(1,1000000)))
+ createLink = True
+ else:
+ # Remove the link
+ os.unlink(linkpath)
+ else: # The link doesn't exist
+ if link[2]: # The folder is mapped
+ # Create it
+ createLink = True
+ else:
+ # Do nothing
+ continue
+
+ if createLink:
+ os.symlink(link[2], wineread.winepath + "/dosdevices/c:/windows/profiles/" + os.environ['USER'] + "/" + link[1])
+ if shellregistry.has_key(link[1]):
+ SetShellRegistry(link)
+
+
+def SetShellRegistry(link):
+ shellfile=open('.registryshellw.reg','w')
+ shellfile.write("REGEDIT4\n\n[HKEY_USERS\\.Default\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders]\n")
+
+ link[5] = link[5].replace("\\","\\\\")
+ shellfile.write('"' + link[1] + '"="' + link[5] + '"\n')
+
+ shellfile.write("\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders]\n")
+
+ link[5] = link[5].replace("\\","\\\\")
+ shellfile.write('"' + link[1] + '"="' + link[5] + '"\n')
+
+ shellfile.write("\n[HKEY_USERS\\.Default\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders]\n")
+
+ shellfile.write('"' + link[1] + '"="' + "%USERPROFILE%\\\\" + link[1] + '"')
+
+ shellfile.write("\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders]\n")
+
+ shellfile.write('"' + link[1] + '"="' + "%USERPROFILE%\\\\" + link[1] + '"')
+ shellfile.close()
+
+ os.system("wine regedit .registryshellw.reg")
+ os.remove(".registryshellw.reg")
+
+def SetKeyValues(key,settings):
+ """ Sets all the values in key to those from the dictionary settings """
+ file=open('.registrykey.reg','w')
+ file.write("REGEDIT4\n\n[" + key + "]\n")
+
+ for setting in settings:
+ # Casting to a python string is necessary for older versions of pyQT
+ if str(settings[setting])[:4] == 'hex:':
+ file.write('"'+str(setting)+'"='+str(settings[setting])+'\n')
+ else:
+ file.write('"'+str(setting)+'"="'+str(settings[setting])+'"\n')
+
+ file.close()
+ os.system("wine regedit .registrykey.reg")
+ os.remove(".registrykey.reg")
+
+def SetValue(key,value,data):
+ """ Sets the value in key to data """
+ file=open('.registryvalue.reg','w')
+ file.write("REGEDIT4\n\n[" + key + "]\n")
+ file.write('"' + value + '"="' + data + '"')
+ file.close()
+
+ os.system("wine regedit .registryvalue.reg")
+ os.remove(".registryvalue.reg")
+
+def SetDriveTypes(drives):
+ """ Sets the type for the drives in the registry """
+ drivesfile=open('.registrydrives.reg','w')
+ drivesfile.write("REGEDIT4\n\n[HKEY_LOCAL_MACHINE\\Software\\Wine\\Drives]\n")
+
+ for drive in drives:
+ mapping = drive[2]
+ if mapping:
+ drivesfile.write('"' + drive[1] + '"="' + drive[3] + '"\n')
+
+ drivesfile.close()
+
+ os.system("wine regedit .registrydrives.reg")
+ os.remove(".registrydrives.reg")
+
+def SetAudioDriver(driver):
+ """ Sets the audio driver in the registry """
+ SetValue("HKEY_CURRENT_USER\\Software\\Wine\\Drivers","Audio",driver)
+
+def SetDSoundSettings(settings, app = None):
+ """ Sets the settings for Direct Sound in the registry """
+ if not app:
+ SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\DirectSound", settings)
+ else:
+ SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\DirectSound", settings)
+
+def SetWindowSettings(settings, app = None):
+ """ Sets the window settings in the registry """
+ windowsfile=open('.registrywindows.reg','w')
+ if not app:
+ windowsfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver]\n")
+ else:
+ windowsfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\X11 Driver]\n")
+
+ # There is a bug in wine that doesn't allow removing of registry entries from
+ # a reg file, so unchecking emulate desktop can't be implemented this way yet.
+
+ for setting in settings:
+ if settings[setting]:
+ windowsfile.write('"'+str(setting)+'"="'+str(settings[setting])+'"\n')
+ else:
+ # winecfg removes the value when the emulate desktop checkbox is unchecked
+ windowsfile.write('"'+str(setting)+'"=-\n')
+
+ windowsfile.close()
+ os.system("wine regedit .registrywindows.reg")
+ os.remove(".registrywindows.reg")
+
+def SetD3DSettings(settings, app = None):
+ """ Sets the settings for Direct3D in the registry """
+ if not app:
+ SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\Direct3D", settings)
+ else:
+ SetKeyValues("HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\Direct3D", settings)
+
+def SetDesktopSettings(settings):
+ """ Sets the control panel \ Desktop settings in the registry """
+ SetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Desktop", settings)
+
+def SetWinVersion(version, app = None):
+ """
+ Sets the windows version in the registry
+ Sample format for version:
+ ( "winxp", "Windows XP", 5, 1, 0xA28, "VER_PLATFORM_WIN32_NT", "Service Pack 2", 2, 0, "WinNT")
+ """
+ winverfile=open('.registrywinver.reg','w')
+ if not app:
+ winverfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine]\n")
+ winverfile.write('"Version"="' + version[0] + '"\n')
+
+ Key9x = "\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion]\n"
+ KeyNT = "\n[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion]\n"
+ KeyProdNT = "\n[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\ProductOptions]\n"
+ KeyWindNT = "\n[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Windows\n"
+ KeyEnvNT = "\n[HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\Environment]\n"
+
+ versionnumber9x = str(version[2]) + '.' + str(version[3]) + '.' + str(version[4])
+ versionnumberNT = str(version[2]) + '.' + str(version[3])
+
+ if version[5] == "VER_PLATFORM_WIN32_WINDOWS":
+ winverfile.write(Key9x + '"VersionNumber"="' + versionnumber9x + '"\n')
+ winverfile.write(Key9x + '"SubVersionNumber"="' + str(version[6]) + '"\n')
+
+ winverfile.write(KeyNT + '"CSDVersion"=-\n')
+ winverfile.write(KeyNT + '"CurrentVersion"=-\n')
+ winverfile.write(KeyNT + '"CurrentBuildNumber"=-\n')
+ winverfile.write(KeyProdNT + '"ProductType"=-\n')
+ winverfile.write(KeyWindNT + '"CSDVersion"=-\n')
+ winverfile.write(KeyEnvNT + '"OS"=-\n')
+ elif version[5] == "VER_PLATFORM_WIN32_NT":
+ winverfile.write(KeyNT + '"CurrentVersion"="' + versionnumberNT + '"\n')
+ winverfile.write(KeyNT + '"CSDVersion"="' + str(version[6]) + '"\n')
+ winverfile.write(KeyNT + '"CurrentBuildNumber"="' + str(version[4]) + '"\n')
+ winverfile.write(KeyProdNT + '"ProductType"="' + str(version[9]) + '"\n')
+ winverfile.write(KeyWindNT + '"CSDVersion"=dword:00000' + str(version[7]) + '00\n')
+ winverfile.write(KeyEnvNT + '"OS"="Windows_NT"\n')
+
+ winverfile.write(Key9x + '"VersionNumber"=-\n')
+ winverfile.write(Key9x + '"SubVersionNumber"=-\n')
+ elif version[5] == "VER_PLATFORM_WIN32s":
+ winverfile.write(Key9x + '"VersionNumber"=-\n')
+ winverfile.write(Key9x + '"SubVersionNumber"=-\n')
+ winverfile.write(KeyNT + '"CSDVersion"=-\n')
+ winverfile.write(KeyNT + '"CurrentVersion"=-\n')
+ winverfile.write(KeyNT + '"CurrentBuildNumber"=-\n')
+ winverfile.write(KeyProdNT + '"ProductType"=-\n')
+ winverfile.write(KeyWindNT + '"CSDVersion"=-\n')
+ winverfile.write(KeyEnvNT + '"OS"=-\n')
+ else:
+ winverfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "]\n")
+ if version[0] == "global":
+ winverfile.write('"Version"=-\n')
+ else:
+ winverfile.write('"Version"="' + version[0] + '"\n')
+
+ winverfile.close()
+
+ os.system("wine regedit .registrywinver.reg")
+ os.remove(".registrywinver.reg")
+
+def SetApps(apps):
+ """ Adds and removes keys for app specific settings for apps """
+ oldapps = wineread.GetApps()
+ newapps = []
+
+ # Add new app keys
+ for app in apps:
+ if app not in oldapps:
+ newapps.append(app)
+ AddApps(newapps)
+
+ # Remove removed app keys
+ for app in oldapps:
+ if app not in apps:
+ RemoveApp(app)
+
+def RemoveApp(app):
+ """ Removes the key for settings for app """
+ os.system("wine regedit /D HKEY_USERS\\\\S-1-5-4\\\\Software\\\\Wine\\\\AppDefaults\\\\" +\
+ app)
+
+def AddApps(apps):
+ """ Adds a key for app """
+ appsfile=open('.registryapps.reg','w')
+ appsfile.write("REGEDIT4\n\n")
+
+ for app in apps:
+ appsfile.write('[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\' +\
+ app + ']\n')
+
+ appsfile.close()
+ os.system("wine regedit .registryapps.reg")
+ os.remove(".registryapps.reg")
+
+def SetDllOverrides(overrides, app = None):
+ """ Sets the dll override settings in the registry """
+ dllfile=open('.registrydll.reg','w')
+ if not app:
+ dllfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\DllOverrides]\n")
+ else:
+ dllfile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Wine\\AppDefaults\\" +\
+ app + "\\DllOverrides]\n")
+
+ origoverrides = wineread.GetDllOverrides(app)
+
+ for dll in overrides.keys():
+ dllfile.write('"'+str(dll)+'"="'+str(overrides[dll])+'"\n')
+
+ for dll in origoverrides.keys():
+ if dll not in overrides:
+ dllfile.write('"'+str(dll)+'"=-\n')
+
+ dllfile.close()
+ os.system("wine regedit .registrydll.reg")
+ os.remove(".registrydll.reg")
+
+def SetDefaultBrowser(browser):
+ """
+ Sets the default browser to browser
+ Doesn't set windows browsers, leaves it for the program to do.
+ """
+ file=open('.registrybrowser.reg','w')
+ file.write("REGEDIT4\n")
+
+ if browser[1] == ':':
+ for format in wineread.default_browser_formats:
+ file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\
+ format + "\\shell\\open\\command]\n")
+ file.write('@="' + browser + '"\n')
+ file.close()
+
+ os.system("wine regedit .registrybrowser.reg")
+ os.remove(".registrybrowser.reg")
+ else: # winebrowser
+ for format in wineread.default_browser_formats:
+ file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\
+ format + "\\shell\\open\\command]\n")
+ file.write('@="winebrowser"\n')
+ file.close()
+
+ os.system("wine regedit .registrybrowser.reg")
+ os.remove(".registrybrowser.reg")
+
+ SetFirstBrowser(browser)
+
+def SetDefaultMailer(mailer):
+ """
+ Sets the default mailer to mailer
+ Doesn't set windows mailers, leaves it for the program to do.
+ """
+ file=open('.registrymailer.reg','w')
+ file.write("REGEDIT4\n")
+
+ if mailer[1] == ':':
+ for format in wineread.default_mailer_formats:
+ file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\
+ format + "\\shell\\open\\command]\n")
+ file.write('@="' + mailer + '"\n')
+ file.close()
+
+ os.system("wine regedit .registrymailer.reg")
+ os.remove(".registrymailer.reg")
+ else: # winebrowser
+ for format in wineread.default_mailer_formats:
+ file.write("\n[HKEY_LOCAL_MACHINE\\Software\\Classes\\" +\
+ format + "\\shell\\open\\command]\n")
+ file.write('@="winebrowser %1"\n')
+ file.close()
+
+ os.system("wine regedit .registrymailer.reg")
+ os.remove(".registrymailer.reg")
+
+ SetFirstMailer(mailer)
+
+def SetFirstBrowser(browser):
+ """ Sets the first in the list of browsers for winebrowser to use to browser """
+ originalbrowserlist = wineread.GetNativeBrowserList()
+
+ if browser in originalbrowserlist:
+ originalbrowserlist.remove(browser)
+ browserlist = [browser] + originalbrowserlist
+
+ browserlist = str(browserlist).strip('[]')
+ browserlist = browserlist.replace("'","")
+ browserlist = browserlist.replace(", ",",")
+
+ SetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Browsers",browserlist)
+
+def SetFirstMailer(mailer):
+ """ Sets the first in the list of mailers for winebrowser to use to mailer """
+ originalmailerlist = wineread.GetNativeMailerList()
+
+ if mailer in originalmailerlist:
+ originalmailerlist.remove(mailer)
+ mailerlist = [mailer] + originalmailerlist
+
+ mailerlist = str(mailerlist).strip('[]')
+ mailerlist = mailerlist.replace("'","")
+ mailerlist = mailerlist.replace(", ",",")
+
+ SetValue("HKEY_CURRENT_USER\\Software\\Wine\\WineBrowser","Mailers",mailerlist)
+
+def CreateWineDrive(path = None):
+ """
+ Creates a fake windows installation in path
+ """
+ if not path:
+ path = wineread.default_winepath
+
+ os.system("WINEPREFIX=" + path + " wineprefixcreate --wait")
+
+# ----- Theming -----
+
+def SetCurrentTheme(theme):
+ """
+ Sets the current theme
+ theme = (theme,color,size), None if none is set
+ """
+ if not theme:
+ theme = ("", "", "")
+
+ themesettings = {"ColorName":theme[1],
+ "SizeName":theme[2],
+ "ThemeActive":"1"}
+
+ if not theme[0]:
+ themesettings["DllName"] = ""
+ themesettings["ThemeActive"] = "0"
+ else:
+ themesettings["DllName"] = "C:\\\\windows\\\\Resources\\\\Themes\\\\" +\
+ theme[0] + "\\\\" + theme[0] +".msstyles"
+
+ themefile=open('.registrytheme.reg','w')
+ themefile.write("REGEDIT4\n\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager]\n")
+ for setting in themesettings:
+ if themesettings[setting]:
+ themefile.write('"'+str(setting)+'"="'+str(themesettings[setting])+'"\n')
+ else:
+ themefile.write('"'+str(setting)+'"=-\n')
+
+ themefile.close()
+ os.system("wine regedit .registrytheme.reg")
+ os.remove(".registrytheme.reg")
+
+def SetColorSettings(colors):
+ """ Takes a dictionary of color settings and sets them in the registry """
+ SetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Colors",colors)
+ SetKeyValues("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\ThemeManager\\Control Panel\\Colors",colors)
+
+def SetWindowMetrics(metrics):
+ """
+ Takes a dictionary of WindowMetrics settings and sets them in the registry
+ """
+ SetKeyValues("HKEY_CURRENT_USER\\Control Panel\\Desktop\\WindowMetrics",metrics)
+
+ports_translation = {"lp":"lpt","ttyS":"com"}
+
+def CreatePorts(ports = None):
+ """
+ Creates links to ports in dosdevices
+ """
+ if not ports:
+ # Find ports in /dev
+ ports = ["lp0"]
+
+ for port in ports:
+ winport = ports_translation[port.rstrip("012345678")] +\
+ str(int(port.lstrip("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) + 1)
+ os.symlink("/dev/" + port, wineread.winepath + "/dosdevices/" + winport)
+ \ No newline at end of file