- 1.1.10:

- New udev rules for adding/enabling/disabling USB printers automatically.
- Now uses gnome-packagekit utility to install packages instead of the
    D-Bus API.
- Fixed detection of stopped jobs with CUPS 1.4.
- Fixed tracebacks when adding a new printer and when receiving IPP
    notifications.
- Fixed 'location' field for printers added on remote CUPS servers.
- Fixed handling of incorrect authentication.
- Some UI and troubleshooter fixes have been made.
This commit is contained in:
Tim Waugh 2009-07-22 14:25:19 +00:00
parent d4fb98f696
commit ec4a192d6b
16 changed files with 68 additions and 356 deletions

View File

@ -201,3 +201,4 @@ system-config-printer-1.1.6.tar.bz2
system-config-printer-1.1.7.tar.bz2 system-config-printer-1.1.7.tar.bz2
pycups-1.9.46.tar.bz2 pycups-1.9.46.tar.bz2
system-config-printer-1.1.8.tar.bz2 system-config-printer-1.1.8.tar.bz2
system-config-printer-1.1.10.tar.bz2

View File

@ -1,3 +1,3 @@
ac8f98a40b0fc4b6ab4470f10489887a pysmbc-1.0.6.tar.bz2 ac8f98a40b0fc4b6ab4470f10489887a pysmbc-1.0.6.tar.bz2
895d4170542ec80c74d41746a9474409 pycups-1.9.46.tar.bz2 895d4170542ec80c74d41746a9474409 pycups-1.9.46.tar.bz2
fa520cbf9cd86dc6fa8becd872bbbfa9 system-config-printer-1.1.8.tar.bz2 18d7455f832a9bc5b72d15e5e38913cd system-config-printer-1.1.10.tar.bz2

Binary file not shown.

View File

@ -1,79 +0,0 @@
diff -up system-config-printer-1.1.8/glade/NewPrinterWindow.glade.arrows system-config-printer-1.1.8/glade/NewPrinterWindow.glade
--- system-config-printer-1.1.8/glade/NewPrinterWindow.glade.arrows 2009-06-03 09:20:26.000000000 +0100
+++ system-config-printer-1.1.8/glade/NewPrinterWindow.glade 2009-07-03 18:18:50.640997051 +0100
@@ -3662,6 +3662,7 @@ DTR/DSR (Hardware)</property>
<property name="fixed_height_mode">False</property>
<property name="hover_selection">False</property>
<property name="hover_expand">False</property>
+ <signal name="cursor_changed" handler="on_tvNCMembers_cursor_changed" last_modification_time="Tue, 30 Jun 2009 15:15:42 GMT"/>
</widget>
</child>
</widget>
@@ -3693,6 +3694,7 @@ DTR/DSR (Hardware)</property>
<child>
<widget class="GtkButton" id="btnNCAddMember">
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
@@ -3771,6 +3773,7 @@ DTR/DSR (Hardware)</property>
<child>
<widget class="GtkButton" id="btnNCDelMember">
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
@@ -3823,6 +3826,7 @@ DTR/DSR (Hardware)</property>
<property name="fixed_height_mode">False</property>
<property name="hover_selection">False</property>
<property name="hover_expand">False</property>
+ <signal name="cursor_changed" handler="on_tvNCNotMembers_cursor_changed" last_modification_time="Tue, 30 Jun 2009 15:15:49 GMT"/>
</widget>
</child>
</widget>
diff -up system-config-printer-1.1.8/system-config-printer.py.arrows system-config-printer-1.1.8/system-config-printer.py
--- system-config-printer-1.1.8/system-config-printer.py.arrows 2009-07-03 18:18:36.478996538 +0100
+++ system-config-printer-1.1.8/system-config-printer.py 2009-07-03 18:18:50.643996718 +0100
@@ -174,7 +174,6 @@ def moveClassMembers(treeview_from, tree
for row in rows:
path = row.get_path()
iter = model_from.get_iter(path)
-
row_data = model_from.get(iter, 0)
model_to.append(row_data)
model_from.remove(iter)
@@ -3547,6 +3546,8 @@ class NewPrinterGUI(GtkGUI):
"entNPTDevice",
"tvNCMembers",
"tvNCNotMembers",
+ "btnNCAddMember",
+ "btnNCDelMember",
"ntbkPPDSource",
"rbtnNPPPD",
"tvNPMakes",
@@ -4089,11 +4090,23 @@ class NewPrinterGUI(GtkGUI):
moveClassMembers(self.tvNCNotMembers, self.tvNCMembers)
self.btnNPApply.set_sensitive(
bool(getCurrentClassMembers(self.tvNCMembers)))
+ button.set_sensitive(False)
def on_btnNCDelMember_clicked(self, button):
moveClassMembers(self.tvNCMembers, self.tvNCNotMembers)
self.btnNPApply.set_sensitive(
bool(getCurrentClassMembers(self.tvNCMembers)))
+ button.set_sensitive(False)
+
+ def on_tvNCMembers_cursor_changed(self, widget):
+ selection = widget.get_selection()
+ model_from, rows = selection.get_selected_rows()
+ self.btnNCDelMember.set_sensitive(rows != [])
+
+ def on_tvNCNotMembers_cursor_changed(self, widget):
+ selection = widget.get_selection()
+ model_from, rows = selection.get_selected_rows()
+ self.btnNCAddMember.set_sensitive(rows != [])
# Navigation buttons

View File

@ -1,15 +0,0 @@
diff -up system-config-printer-1.1.8/system-config-printer.py.bug507489 system-config-printer-1.1.8/system-config-printer.py
--- system-config-printer-1.1.8/system-config-printer.py.bug507489 2009-06-17 18:39:51.000000000 +0100
+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-23 12:23:49.888572438 +0100
@@ -6644,6 +6644,11 @@ class NewPrinterGUI(GtkGUI):
iter = model.iter_next (iter)
+ # Load information about the printer,
+ # e.g. self.mainapp.server_side_options and self.mainapp.ppd
+ # (both used below).
+ self.mainapp.fillPrinterTab (name)
+
if check:
try:
self.checkDriverExists (name, ppd=checkppd)

View File

@ -1,14 +0,0 @@
diff -up system-config-printer-1.1.8/cupshelpers/cupshelpers.py.gutenprint system-config-printer-1.1.8/cupshelpers/cupshelpers.py
--- system-config-printer-1.1.8/cupshelpers/cupshelpers.py.gutenprint 2009-06-17 18:39:51.000000000 +0100
+++ system-config-printer-1.1.8/cupshelpers/cupshelpers.py 2009-07-03 18:09:03.598995561 +0100
@@ -736,8 +736,10 @@ def missingPackagesAndExecutables(ppd):
# IJS servers (used by foomatic)
'hpijs': 'hpijs',
'ijsgutenprint.5.0': 'gutenprint',
+ 'ijsgutenprint.5.2': 'gutenprint',
# CUPS filters
'rastertogutenprint.5.0': 'gutenprint-cups',
+ 'rastertogutenprint.5.2': 'gutenprint-cups',
'commandtoepson': 'gutenprint-cups',
'commandtocanon': 'gutenprint-cups',
}

View File

@ -1,29 +0,0 @@
diff -up system-config-printer-1.1.8/system-config-printer.py.https system-config-printer-1.1.8/system-config-printer.py
--- system-config-printer-1.1.8/system-config-printer.py.https 2009-06-24 10:46:14.873192155 +0100
+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-24 10:46:25.057317039 +0100
@@ -5431,7 +5431,13 @@ class NewPrinterGUI(GtkGUI):
(host, port) = urllib.splitnport (host, defport=port)
try:
- c = cups.Connection (host=host, port=port)
+ if self.device.type == "https":
+ encrypt = cups.HTTP_ENCRYPT_ALWAYS
+ else:
+ encrypt = cups.HTTP_ENCRYPT_IF_REQUESTED
+
+ c = cups.Connection (host=host, port=port,
+ encryption=encrypt)
printers = c.getPrinters ()
del c
except cups.IPPError, (e, m):
@@ -5492,6 +5498,10 @@ class NewPrinterGUI(GtkGUI):
self.entNPTIPPHostname.set_text (match.group (2))
self.entNPTIPPQueuename.set_text (match.group (3))
+ if self.device.type == "https" and uri.startswith ("ipp:"):
+ # Use https in our device URI for this printer.
+ uri = "https:" + uri[4:]
+
self.lblIPPURI.set_text (uri)
self.lblIPPURI.show()
self.setNPButtons()

View File

@ -1,12 +0,0 @@
diff -up system-config-printer-1.1.8/authconn.py.incorrect-auth system-config-printer-1.1.8/authconn.py
--- system-config-printer-1.1.8/authconn.py.incorrect-auth 2009-06-18 16:45:49.000000000 +0100
+++ system-config-printer-1.1.8/authconn.py 2009-06-25 17:51:23.943329108 +0100
@@ -389,6 +389,8 @@ class Connection:
_("The password may be incorrect."))
if self._lock:
d.connect ("response", self._on_not_authorized_dialog_response)
+ d.show_all ()
+ d.show_now ()
gtk.gdk.threads_leave ()
else:
d.run ()

View File

@ -1,12 +0,0 @@
diff -up system-config-printer-1.1.8/system-config-printer.py.ipp-nonfatal-exception system-config-printer-1.1.8/system-config-printer.py
--- system-config-printer-1.1.8/system-config-printer.py.ipp-nonfatal-exception 2009-06-24 10:28:47.773317435 +0100
+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-24 10:29:24.339192122 +0100
@@ -4167,6 +4167,8 @@ class NewPrinterGUI(GtkGUI):
self.entNPDescription.set_text (info)
if len (location) > 0:
self.entNPLocation.set_text (location)
+ except RuntimeError:
+ pass
except:
nonfatalException ()

View File

@ -1,14 +0,0 @@
diff -U0 system-config-printer-1.1.8/ChangeLog.nmblookup-failure system-config-printer-1.1.8/ChangeLog
diff -up system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py.nmblookup-failure system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py
--- system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py.nmblookup-failure 2009-05-12 10:36:36.000000000 +0100
+++ system-config-printer-1.1.8/troubleshoot/CheckPrinterSanity.py 2009-06-25 17:49:39.628328710 +0100
@@ -99,7 +99,8 @@ class CheckPrinterSanity(Question):
if line.startswith ("querying"):
continue
spc = line.find (' ')
- if spc != -1:
+ if (spc != -1 and
+ not line[spc:].startswith (" failed ")):
# Remember the IP address.
self.answers['remote_server_name'] = line[:spc]
break

View File

@ -1,77 +0,0 @@
diff -up system-config-printer-1.1.8/installpackage.py.packagekit system-config-printer-1.1.8/installpackage.py
--- system-config-printer-1.1.8/installpackage.py.packagekit 2009-05-12 10:36:36.000000000 +0100
+++ system-config-printer-1.1.8/installpackage.py 2009-07-03 18:07:09.560995667 +0100
@@ -2,8 +2,8 @@
## system-config-printer
-## Copyright (C) 2008 Red Hat, Inc.
-## Copyright (C) 2008 Tim Waugh <twaugh@redhat.com>
+## Copyright (C) 2008, 2009 Red Hat, Inc.
+## Copyright (C) 2008, 2009 Tim Waugh <twaugh@redhat.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
@@ -19,53 +19,18 @@
## along with this program; if not, write to the Free Software
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-import dbus
-import xml.etree.ElementTree
-from dbus.mainloop.glib import DBusGMainLoop
-DBusGMainLoop (set_as_default=True)
+import os
+import glib
class PackageKit:
def __init__ (self):
- bus = dbus.SessionBus ()
- obj = bus.get_object ("org.freedesktop.PackageKit",
- "/org/freedesktop/PackageKit")
-
- # Find out which API is required.
- num_args = -1
- introsp = dbus.Interface (obj, "org.freedesktop.DBus.Introspectable")
- api = introsp.Introspect ()
- top = xml.etree.ElementTree.XML (api)
- for interface in top.findall ("interface"):
- if interface.attrib.get ("name") != "org.freedesktop.PackageKit":
- continue
-
- for method in interface.findall ("method"):
- if method.attrib.get ("name") != "InstallPackageName":
- continue
+ for dir in os.environ.get ("PATH", "").split (":"):
+ path = dir + os.path.sep + "gpk-install-package-name"
+ if os.access (path, os.X_OK):
+ self.gpk_install_package_name = path
+ return
- num_args = len (method.findall ("arg"))
- break
-
- if num_args == -1:
- raise RuntimeError, "Introspection failed for PackageKit"
-
- self.proxy = dbus.Interface (obj, "org.freedesktop.PackageKit")
- self.num_args = num_args
+ raise RuntimeError, "No gpk-install-package-name program available"
def InstallPackageName (self, xid, timestamp, name):
- proxy = self.proxy
- if self.num_args == 3:
- return proxy.InstallPackageName (xid, timestamp, name,
- reply_handler=self.reply_handler,
- error_handler=self.error_handler)
- else:
- # Old PackageKit interface
- return proxy.InstallPackageName (name,
- reply_handler=self.reply_handler,
- error_handler=self.error_handler)
-
- def reply_handler (self, *args):
- pass
-
- def error_handler (self, *args):
- pass
+ glib.spawn_async ([self.gpk_install_package_name, name])

View File

@ -1,12 +0,0 @@
diff -up system-config-printer-1.1.8/system-config-printer.py.properties-cancel system-config-printer-1.1.8/system-config-printer.py
--- system-config-printer-1.1.8/system-config-printer.py.properties-cancel 2009-06-25 17:50:16.256328643 +0100
+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-25 17:50:37.650328968 +0100
@@ -1045,7 +1045,7 @@ class GUI(GtkGUI, monitor.Watcher):
if ((response == gtk.RESPONSE_OK and not success) or
response == gtk.RESPONSE_CANCEL):
- del self.printer
+ self.printer = None
dialog.hide ()
def dests_iconview_selection_changed (self, iconview):

View File

@ -1,18 +0,0 @@
diff -up system-config-printer-1.1.8/system-config-printer.py.remote-location-field system-config-printer-1.1.8/system-config-printer.py
--- system-config-printer-1.1.8/system-config-printer.py.remote-location-field 2009-06-25 17:46:36.895328974 +0100
+++ system-config-printer-1.1.8/system-config-printer.py 2009-06-25 17:46:52.622454030 +0100
@@ -5791,8 +5791,12 @@ class NewPrinterGUI(GtkGUI):
try:
if len (location) == 0 and self.device.device_class == "direct":
# Set location to the name of this host.
- u = os.uname ()
- location = u[1]
+ if (self.mainapp.connect_server == 'localhost' or
+ self.mainapp.connect_server[0] == '/'):
+ u = os.uname ()
+ location = u[1]
+ else:
+ location = self.mainapp.connect_server
# Pre-fill location field.
self.entNPLocation.set_text (location)

View File

@ -1,15 +0,0 @@
diff -up system-config-printer-1.1.8/jobviewer.py.stopped-jobs system-config-printer-1.1.8/jobviewer.py
--- system-config-printer-1.1.8/jobviewer.py.stopped-jobs 2009-06-17 18:39:51.000000000 +0100
+++ system-config-printer-1.1.8/jobviewer.py 2009-07-03 18:08:28.040995881 +0100
@@ -1375,7 +1375,10 @@ class JobViewer (GtkGUI, monitor.Watcher
self.notify_completed_job (jobid)
# Look out for stopped jobs.
- if (self.trayicon and eventname == 'job-stopped' and
+ if (self.trayicon and
+ (eventname == 'job-stopped' or
+ (eventname == 'job-state-changed' and
+ event['job-state'] == cups.IPP_JOB_STOPPED))and
not jobid in self.stopped_job_prompts):
# Why has the job stopped? It might be due to a job error
# of some sort, or it might be that the backend requires

View File

@ -6,25 +6,14 @@
Summary: A printer administration tool Summary: A printer administration tool
Name: system-config-printer Name: system-config-printer
Version: 1.1.8 Version: 1.1.10
Release: 6%{?dist} Release: 1%{?dist}
License: GPLv2+ License: GPLv2+
URL: http://cyberelk.net/tim/software/system-config-printer/ URL: http://cyberelk.net/tim/software/system-config-printer/
Group: System Environment/Base Group: System Environment/Base
Source0: http://cyberelk.net/tim/data/system-config-printer/1.1/system-config-printer-%{version}.tar.bz2 Source0: http://cyberelk.net/tim/data/system-config-printer/1.1/system-config-printer-%{version}.tar.bz2
Source1: http://cyberelk.net/tim/data/pycups/pycups-%{pycups_version}.tar.bz2 Source1: http://cyberelk.net/tim/data/pycups/pycups-%{pycups_version}.tar.bz2
Source2: http://cyberelk.net/tim/data/pysmbc/pysmbc-%{pysmbc_version}.tar.bz2 Source2: http://cyberelk.net/tim/data/pysmbc/pysmbc-%{pysmbc_version}.tar.bz2
Patch1: system-config-printer-bug507489.patch
Patch2: system-config-printer-ipp-nonfatal-exception.patch
Patch3: system-config-printer-https.patch
Patch4: system-config-printer-remote-location-field.patch
Patch5: system-config-printer-nmblookup-failure.patch
Patch6: system-config-printer-properties-cancel.patch
Patch7: system-config-printer-incorrect-auth.patch
Patch8: system-config-printer-packagekit.patch
Patch9: system-config-printer-stopped-jobs.patch
Patch10: system-config-printer-gutenprint.patch
Patch11: system-config-printer-arrows.patch
BuildRequires: cups-devel >= 1.2 BuildRequires: cups-devel >= 1.2
BuildRequires: python-devel >= 2.4 BuildRequires: python-devel >= 2.4
@ -32,6 +21,7 @@ BuildRequires: libsmbclient-devel >= 3.2
BuildRequires: desktop-file-utils >= 0.2.92 BuildRequires: desktop-file-utils >= 0.2.92
BuildRequires: gettext-devel BuildRequires: gettext-devel
BuildRequires: intltool BuildRequires: intltool
BuildRequires: libusb-devel, libudev-devel
BuildRequires: xmlto BuildRequires: xmlto
BuildRequires: epydoc BuildRequires: epydoc
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -73,22 +63,22 @@ Provides: pysmbc = %{pysmbc_version}
The common code used by both the graphical and non-graphical parts of The common code used by both the graphical and non-graphical parts of
the configuration tool. the configuration tool.
%package udev
Summary: Rules for udev for automatic configuration of USB printers
Group: System Environment/Base
Requires: system-config-printer-libs = %{version}-%{release}
Obsoletes: hal-cups-utils <= 0.6.20
Provides: hal-cups-utils = 0.6.20
%description udev
The udev rules and helper programs for automatically configuring USB
printers.
%prep %prep
%setup -q -a 1 -a 2 %setup -q -a 1 -a 2
%patch1 -p1 -b .bug507489
%patch2 -p1 -b .ipp-nonfatal-exception
%patch3 -p1 -b .https
%patch4 -p1 -b .remote-location-field
%patch5 -p1 -b .nmblookup-failure
%patch6 -p1 -b .properties-cancel
%patch7 -p1 -b .incorrect-auth
%patch8 -p1 -b .packagekit
%patch9 -p1 -b .stopped-jobs
%patch10 -p1 -b .gutenprint
%patch11 -p1 -b .arrows
%build %build
%configure %configure --with-udev-rules
pushd pycups-%{pycups_version} pushd pycups-%{pycups_version}
make make
@ -133,6 +123,11 @@ rm -rf %buildroot
%{python_sitelib}/cupshelpers/ppds.py* %{python_sitelib}/cupshelpers/ppds.py*
%{python_sitelib}/*.egg-info %{python_sitelib}/*.egg-info
%files udev
%defattr(-,root,root,-)
%{_sysconfdir}/udev/rules.d/*.rules
/lib/udev/*
%files %files
%defattr(-,root,root,-) %defattr(-,root,root,-)
%doc ChangeLog README %doc ChangeLog README
@ -188,6 +183,19 @@ rm -rf %buildroot
exit 0 exit 0
%changelog %changelog
* Wed Jul 22 2009 Tim Waugh <twaugh@redhat.com> 1.1.10-1
- 1.1.10:
- New udev rules for adding/enabling/disabling USB printers
automatically.
- Now uses gnome-packagekit utility to install packages
instead of the D-Bus API.
- Fixed detection of stopped jobs with CUPS 1.4.
- Fixed tracebacks when adding a new printer and when receiving
IPP notifications.
- Fixed 'location' field for printers added on remote CUPS servers.
- Fixed handling of incorrect authentication.
- Some UI and troubleshooter fixes have been made.
* Mon Jul 6 2009 Tim Waugh <twaugh@redhat.com> 1.1.8-6 * Mon Jul 6 2009 Tim Waugh <twaugh@redhat.com> 1.1.8-6
- Requires gnome-packagekit for gpk-install-package-name. - Requires gnome-packagekit for gpk-install-package-name.

View File

@ -1,36 +1,36 @@
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.7 (GNU/Linux) Version: GnuPG v1.4.9 (GNU/Linux)
mQGiBEa5fNcRBACJCPsz2q0hj0p5pJABzMKTb4r5lko0upe6ZYOQ2NFZw61upKzI mQGiBEpnDbARBADRsKGwS54yxqAoniGaI8X+saG4ezdZ1OmPr9f7L4PugzjjL7qR
uFanlwDVi3MaEHIGf8hsYr82GxTFUc+O2DFskKwEuZ3O4Q50qqkHAnMLZ2VFKXyF p9O7hj+RZNVM7QR9nPUFTawBTfWQisyS8/a3xiBbQxlhW8uuORhM2gTkVGGlGbCc
VJRPUrezpiXifbRjdV3ED0ikc7+ANArUStqbaIvjM3zJOo5GuEcO7AAPiwCgofNk jH+RT0T8t/75m6n2IXKATqugrMH60NXreQQuCKWgCrT6TroMldlVQpBaFwCgx/s0
1DG1GNH8cBxqGQoEPYrm/pkD/1e7OsMk50XXTQd77hZW1ViIQK8P4tkj65FWBgNg 1KlfCY42Er0YA/DDpMgTYhUEAI0PgOpD6C8ncEpqvSYSs1qyvRsrpp86M/nyi+pm
d5PyXNqGfOcskn+iVbx9cGsTgAbfP5IVlnxCmf3QE2rLelJtX++aCUmM4irDclTv 15+7IZhlXE53gXeSLT+dTutvVQtbXbf2DwJmAKdjQw1Y4esjxwH1bPYnPnTlIlZ6
9hn5UQf1QPqvwHFr+h6FHAg8WjHhdORc8hDlWMntmAArjmqFY4FcF/DZMzddZNgf CHQbYO0n6u2pDnSF8sxi3ene6BSuL7NvKpejwXqLEQFGjaop5eAdDs6YvHNU3Yev
jklwA/0aOef82dkwMbgmtLMcx1m0QTSBV04x2z3UIuBLdG9klhzTSCzr0EbtoSWe os0UA/4t9TstI4laLwvCqZ7npwsNxT/1sXa5F09d26oTSZlJwSEmGe6+tOqAbDYn
8JN5LdZr//BDJV5elyEWuiQP5uMhXkrVWCZlt3hJ8zvncO/1gnPQPzRty3IuoAyO 1mrCajNt40pGPBKXhE2UNJIBrrWSjZCAp4LSmj6KCEXs35fpmUhUp54V79cC4AI/
j4uIWLupjdHVqqBDhJEmc+MvjRgQvUkdt07PEm5ehaRxaB36I7QdVGltIFdhdWdo rezLlZIB6l4Dey1is5bkw1yOsBT6Qf4lGJHkggyUfW/ymGZfqbQdVGltIFdhdWdo
IDx0d2F1Z2hAcmVkaGF0LmNvbT6IZgQTEQIAJgUCRrl9JAIbAwUJA8JnAAYLCQgH IDx0d2F1Z2hAcmVkaGF0LmNvbT6IZgQTEQIAJgUCSmcOPwIbAwUJA8JnAAYLCQgH
AwIEFQIIAwQWAgMBAh4BAheAAAoJEGklkaMet5kjzfYAoIjd5Y/5+BKxYMXndh4a AwIEFQIIAwQWAgMBAh4BAheAAAoJEAS0Gn2aStrXYHMAoLxVaLxFP6P6rRlQtla+
54MVmEXoAJ0f1pdb+zMVcCMs/lyB2oF/+nMWwYhGBBARAgAGBQJGuX11AAoJEO3n NO1KSkMBAJ9jNppMaAf2pHi1b9CoD4f4MEvOS4hGBBARAgAGBQJKZxDHAAoJEO3n
xuaBAwm9DF0AnAnBbra0+WvYa1TLgdIA/ME9r/NNAJ9hXtoFm8s/rAw3YUM79wK1 xuaBAwm91N0AoJROznoZyHKXRxgzLyXemIA4TYMAAJ9Y9HdZOenEMw9HMg36guZK
8P1RIrQcVGltIFdhdWdoIDx0aW1AY3liZXJlbGsubmV0PohmBBMRAgAmBQJGuXzX dBIVLLQcVGltIFdhdWdoIDx0aW1AY3liZXJlbGsubmV0PohmBBMRAgAmBQJKZw2w
AhsDBQkDwmcABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQaSWRox63mSPQowCg AhsDBQkDwmcABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQBLQafZpK2tet4gCf
jEKmAQght3t/7JVPX6H29kZyqFYAni3DbBuKULwKMuL71PA556bVbdsMiEYEEBEC VKhWbUJAcIlNpWpYD0kYgGty/ucAoIfsKq9FNBPw9pQPaDnxbKDyserxiEYEEBEC
AAYFAka5fXUACgkQ7efG5oEDCb3VrwCfft0SMdCYReiyNoazvWmVvfPk1hgAn2JH AAYFAkpnEMcACgkQ7efG5oEDCb0RvACePTmfisPxeKkGo6QoA42MFH5wtPIAn329
1pdBUCMeMVrxbIBfngNM6Me0uQINBEa5fNcQCACqm3SBctiw150XfY5AWUFPwmJB 9ur6BKDz/QrKVT13CxRoKosLuQINBEpnDbAQCACCZaJHH6EctIyz+PYBCzz889PR
xX2YTG867RiuaXntFCdERybikjmgNVVlCRudufdqs2bqeqY+oFvS3TMz7SOQmSwv iLAOyKlbrgaR4KhVGBFttKyOJkEk+UvxLUuRkOOY6i6TWbT3qNUnZT6QkftGulal
QJbEx7WrR7RWU9l0UWMPmiOZ6ZMZjwl2qArvR28RME+n2ooFjuOV3xzb1f4itbo0 8MAtBf2xnJXEsyKgPkRkeDAx3uvMBfrW0wgxcFw9K6E+p8x76bFFD+FtrduDRfxk
KDshdhoXvcr93z7+vSMjAGLwrLButh1BwbadSAFyIkIyguakKak+vY5kcBPbYUh6 2jDwJgyYubnM3+nPZzZXfuFnxSRYjJcoAq4O61YdH8O79TElEGqTwd/BHeIexEf2
AnLKWZJF/UNzC6gU4fqc1kLM7RbPLO8oXMgghqcEDK7AVQoXD13xXL6+oDCtwv1u BkBAscE4GCmGXTYCsLByY8sGD13U7OO3Kk4ul4FgI/mzM25zgqqhbAObjsIwJqE+
zZ6HTYK4l7Dcnpr9nQALF/yepD0xqpRcAA5GFrElFxdVoF24kRKy56+eOOkTAAMG 6MXqkkylmo+noTe3zlfNdnR1xkmYUCfUc4+WeFyziHRiXMkt5OYY5wDW5WGnAAMF
B/9npM+/tnF49zw4onQjqEtie1lxDKZAgOmbu34aaH0udF8n37XQdmd4z7M2/Jf8 B/4gvjt8SXekSxgdFCuEOQ0J2YM4DElQkaf+Tggbr9F3hnsWfJ49gEipCWEhKPt2
qFBqeO01MfYmuAfZ9esM+Sneh3/Nvmi5++kz7IKS4V6EE4DndLZW+hnO09i498Fe ks4kDexO/Cn6SI7SQUPiNUWylm80G1Dd+xaQ9qrN1KTsReACXOCKoRgz64MooSOj
dwEkhsxpU3YqB9IL6iNjKjQgYtfYBlDJvBwtlgUzKK80toAH6XPA6j/SBjJM6vZb Qs8YIGI/ejLzPkn6mUEmFRHssd4jmmSCbF99AmVh6Z4VnkKLTG+z3KQUymF0ng5b
P1XpZajWbkvhKzYfqXtjXZ2dqIGbtSW8uJr1Ighr9ZYQvK0r6XkhZBoUorteQUS4 AAcwTOJhlAR7xrBJGfhnRUTIaNtD+UnBsoxApeUJie2lc84Pc10p56TGomkEy3Ib
IrweKXRGnUeOHuUXr8d7rzsufSP6ZNhQQvwG80vr8V4Z++8YKpfyv8uOwAc3GK/u se1kk4w3mZ8kkR57voh/PovSl/8NyPmv81oVHbJnGLKAVku4XT0IBQOBdDKeRKHB
9O+CLk4lvD4SBCVoZaSCv/9aiE8EGBECAA8FAka5fNcCGwwFCQPCZwAACgkQaSWR tlPLsK9KFx2LxhtAmQN4C/j5iE8EGBECAA8FAkpnDbACGwwFCQPCZwAACgkQBLQa
ox63mSPTcgCfUiOr+XPLLhqJEQLQHp+Y8FvU7voAnRQuODX6A2Siap8Aw09esWVq fZpK2teQogCgg68475moQ7dh/HIUHRNJKZJfmoQAoIw92pM7V5VYMpz9kW+701Fu
L7PW JofS
=wzDO =vrpj
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----