Updated python-purple's debianization.
authorBruno Abinader <bruno.abinader@openbossa.org>
Tue, 9 Dec 2008 14:39:24 +0000 (14:39 +0000)
committerAnderson Briglia <anderson.briglia@openbossa.org>
Sat, 28 Feb 2009 21:11:22 +0000 (17:11 -0400)
FIXES:
 - Updated python-purple's debianization to support Maemo.
 - Added cython-made purple.c file.

Signed-off-by: Bruno Abinader <bruno.abinader@openbossa.org>
Acked-by: Anderson Briglia <anderson.briglia@openbossa.org>

git-svn-id: https://garage.maemo.org/svn/carman/branches/carman-0.7-beta2/python-purple@1654 596f6dd7-e928-0410-a184-9e12fd12cf7e

debian/control
debian/files [deleted file]
debian/pyversions [deleted file]
debian/rules
purple.c [new file with mode: 0644]

index 6a817d4..08da9c2 100644 (file)
@@ -2,14 +2,15 @@ Source: python-purple
 Section: python
 Priority: optional
 Maintainer: Bruno Abinader <bruno.abinader@openbossa.org>
-Build-Depends: cdbs, debhelper, libpurple-dev
+Build-Depends: cdbs, debhelper, libpurple-dev, libglib2.0-dev
 Standards-Version: 3.8.0
 
 Package: python-purple
 Architecture: any
-Depends: ${python:Depends}, ${shlibs:Depends}, ${misc:Depends}
-Provides: ${python:Provides}
-Suggests: ${shlibs:Suggests}, cython
+Depends: python | python2.5, libc6 (>= 2.1.3), libglib2.0-0 (>= 2.12.0),
+ libpurple0 (>= 2.5.1)
+Provides: python2.5-purple
+Suggests: cython | python2.5-cython
 Description: Python bind for libpurple
  Libpurple is a library intended to be used by programmers seeking
  to write an IM client that connects to many IM networks.
diff --git a/debian/files b/debian/files
deleted file mode 100644 (file)
index 6e0d65d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-python-purple_0.1_i386.deb python optional
diff --git a/debian/pyversions b/debian/pyversions
deleted file mode 100644 (file)
index 95e3ba8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-2.5
index a8f2098..735ac07 100755 (executable)
@@ -1,10 +1,37 @@
 #!/usr/bin/make -f
-# -*- makefile -*-
+DEB_DIR=debian/python-purple
 
-DEB_PYTHON_SYSTEM=pysupport
+build:
 
-include /usr/share/cdbs/1/rules/debhelper.mk
-include /usr/share/cdbs/1/class/python-distutils.mk
+clean:
+       dh_testdir
+       python2.5 setup_dist.py clean
+       rm -f `find $(CURDIR) -name '*.py[co]'`
+       rm -rf build-stamp build
+       rm -rf $(DEB_DIR)
+       #rm -rf purple.c
+       dh_clean install-stamp
 
-install/cython::
-#      dh_installman debian/python-purple.1
+install: build install-stamp
+install-stamp:
+       dh_testdir
+       dh_testroot
+       dh_installdirs
+       python2.5 setup_dist.py install --root=$(DEB_DIR)
+
+binary-indep: build install
+       dh_testdir
+       dh_testroot
+       dh_installdocs
+       dh_installchangelogs
+       dh_compress -X.py
+       dh_fixperms
+       dh_installdeb
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary-arch:
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
diff --git a/purple.c b/purple.c
new file mode 100644 (file)
index 0000000..a8c4a07
--- /dev/null
+++ b/purple.c
@@ -0,0 +1,23985 @@
+/* Generated by Cython 0.10 on Tue Dec  9 09:17:03 2008 */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#include "structmember.h"
+#ifndef PY_LONG_LONG
+  #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef DL_EXPORT
+  #define DL_EXPORT(t) t
+#endif
+#if PY_VERSION_HEX < 0x02040000
+  #define METH_COEXIST 0
+#endif
+#if PY_VERSION_HEX < 0x02050000
+  typedef int Py_ssize_t;
+  #define PY_SSIZE_T_MAX INT_MAX
+  #define PY_SSIZE_T_MIN INT_MIN
+  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
+  #define PyInt_AsSsize_t(o)   PyInt_AsLong(o)
+  #define PyNumber_Index(o)    PyNumber_Int(o)
+  #define PyIndex_Check(o)     PyNumber_Check(o)
+#endif
+#if PY_VERSION_HEX < 0x02060000
+  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
+  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
+  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
+  #define PyVarObject_HEAD_INIT(type, size) \
+          PyObject_HEAD_INIT(type) size,
+  #define PyType_Modified(t)
+
+  typedef struct {
+       void *buf;
+       PyObject *obj;
+       Py_ssize_t len;
+       Py_ssize_t itemsize;
+       int readonly;
+       int ndim;
+       char *format;
+       Py_ssize_t *shape;
+       Py_ssize_t *strides;
+       Py_ssize_t *suboffsets;
+       void *internal;
+  } Py_buffer;
+
+  #define PyBUF_SIMPLE 0
+  #define PyBUF_WRITABLE 0x0001
+  #define PyBUF_LOCK 0x0002
+  #define PyBUF_FORMAT 0x0004
+  #define PyBUF_ND 0x0008
+  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
+  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
+  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
+  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
+  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
+
+#endif
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+#else
+  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define Py_TPFLAGS_CHECKTYPES 0
+  #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyBaseString_Type            PyUnicode_Type
+  #define PyString_Type                PyBytes_Type
+  #define PyInt_Type                   PyLong_Type
+  #define PyInt_Check(op)              PyLong_Check(op)
+  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+  #define PyInt_FromString             PyLong_FromString
+  #define PyInt_FromUnicode            PyLong_FromUnicode
+  #define PyInt_FromLong               PyLong_FromLong
+  #define PyInt_FromSize_t             PyLong_FromSize_t
+  #define PyInt_FromSsize_t            PyLong_FromSsize_t
+  #define PyInt_AsLong                 PyLong_AsLong
+  #define PyInt_AS_LONG                PyLong_AS_LONG
+  #define PyInt_AsSsize_t              PyLong_AsSsize_t
+  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
+  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define PyBytes_Type                 PyString_Type
+#endif
+#if PY_MAJOR_VERSION >= 3
+  #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func)
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+  #ifndef __stdcall
+    #define __stdcall
+  #endif
+  #ifndef __cdecl
+    #define __cdecl
+  #endif
+#else
+  #define _USE_MATH_DEFINES
+#endif
+#ifdef __cplusplus
+#define __PYX_EXTERN_C extern "C"
+#else
+#define __PYX_EXTERN_C extern
+#endif
+#include <math.h>
+#define __PYX_HAVE_API__purple
+#include "libpurple/purple.h"
+#include "c_purple.h"
+#include "glib.h"
+#include "libpurple/blist.h"
+#include "libpurple/connection.h"
+#include "libpurple/log.h"
+#include "libpurple/proxy.h"
+#include "libpurple/status.h"
+#include "libpurple/account.h"
+#include "libpurple/prefs.h"
+#include "libpurple/accountopt.h"
+#include "libpurple/buddyicon.h"
+#include "libpurple/plugin.h"
+#include "libpurple/prpl.h"
+#include "time.h"
+#include "libpurple/conversation.h"
+#include "libpurple/core.h"
+#include "libpurple/debug.h"
+#include "libpurple/eventloop.h"
+#include "libpurple/ft.h"
+#include "libpurple/idle.h"
+#include "libpurple/notify.h"
+#include "libpurple/pounce.h"
+#include "libpurple/privacy.h"
+#include "libpurple/request.h"
+#include "libpurple/roomlist.h"
+#include "libpurple/server.h"
+#include "libpurple/signals.h"
+#include "libpurple/value.h"
+#include "libpurple/savedstatuses.h"
+#include "libpurple/xmlnode.h"
+#include "libpurple/util.h"
+
+
+#ifdef __GNUC__
+#define INLINE __inline__
+#elif _WIN32
+#define INLINE __inline
+#else
+#define INLINE 
+#endif
+
+typedef struct {PyObject **p; char *s; long n; char is_unicode; char intern; char is_identifier;} __Pyx_StringTabEntry; /*proto*/
+
+
+
+static int __pyx_skip_dispatch = 0;
+
+
+/* Type Conversion Predeclarations */
+
+#if PY_MAJOR_VERSION < 3
+#define __Pyx_PyBytes_FromString PyString_FromString
+#define __Pyx_PyBytes_AsString   PyString_AsString
+#else
+#define __Pyx_PyBytes_FromString PyBytes_FromString
+#define __Pyx_PyBytes_AsString   PyBytes_AsString
+#endif
+
+#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
+static INLINE int __Pyx_PyObject_IsTrue(PyObject* x);
+static INLINE PY_LONG_LONG __pyx_PyInt_AsLongLong(PyObject* x);
+static INLINE unsigned PY_LONG_LONG __pyx_PyInt_AsUnsignedLongLong(PyObject* x);
+static INLINE Py_ssize_t __pyx_PyIndex_AsSsize_t(PyObject* b);
+
+#define __pyx_PyInt_AsLong(x) (PyInt_CheckExact(x) ? PyInt_AS_LONG(x) : PyInt_AsLong(x))
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+
+static INLINE unsigned char __pyx_PyInt_unsigned_char(PyObject* x);
+static INLINE unsigned short __pyx_PyInt_unsigned_short(PyObject* x);
+static INLINE char __pyx_PyInt_char(PyObject* x);
+static INLINE short __pyx_PyInt_short(PyObject* x);
+static INLINE int __pyx_PyInt_int(PyObject* x);
+static INLINE long __pyx_PyInt_long(PyObject* x);
+static INLINE signed char __pyx_PyInt_signed_char(PyObject* x);
+static INLINE signed short __pyx_PyInt_signed_short(PyObject* x);
+static INLINE signed int __pyx_PyInt_signed_int(PyObject* x);
+static INLINE signed long __pyx_PyInt_signed_long(PyObject* x);
+static INLINE long double __pyx_PyInt_long_double(PyObject* x);
+#ifdef __GNUC__
+/* Test for GCC > 2.95 */
+#if __GNUC__ > 2 ||               (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 
+#define likely(x)   __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* __GNUC__ > 2 ... */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ > 2 ... */
+#else /* __GNUC__ */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ */
+    
+static PyObject *__pyx_m;
+static PyObject *__pyx_b;
+static PyObject *__pyx_empty_tuple;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+static const char **__pyx_f;
+
+static INLINE PyObject *__Pyx_GetItemInt(PyObject *o, Py_ssize_t i, int is_unsigned) {
+    PyObject *r;
+    if (PyList_CheckExact(o) && 0 <= i && i < PyList_GET_SIZE(o)) {
+        r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (PyTuple_CheckExact(o) && 0 <= i && i < PyTuple_GET_SIZE(o)) {
+        r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0) || !is_unsigned))
+        r = PySequence_GetItem(o, i);
+    else {
+        PyObject *j = (likely(i >= 0) || !is_unsigned) ? PyInt_FromLong(i) : PyLong_FromUnsignedLongLong((sizeof(unsigned long long) > sizeof(Py_ssize_t) ? (1ULL << (sizeof(Py_ssize_t)*8)) : 0) + i);
+        if (!j)
+            return 0;
+        r = PyObject_GetItem(o, j);
+        Py_DECREF(j);
+    }
+    return r;
+}
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name, PyObject* kw_name); /*proto*/
+
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
+
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
+
+static INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict,
+    const char* function_name, int kw_allowed); /*proto*/
+
+static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact); /*proto*/
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
+    if (likely(PyList_CheckExact(L))) {
+        if (PyList_Append(L, x) < 0) return NULL;
+        Py_INCREF(Py_None);
+        return Py_None; // this is just to have an accurate signature
+    }
+    else {
+        return PyObject_CallMethod(L, "append", "(O)", x);
+    }
+}
+
+static void __Pyx_WriteUnraisable(const char *name); /*proto*/
+
+static INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
+static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/
+
+static void __Pyx_AddTraceback(const char *funcname); /*proto*/
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+
+/* Type declarations */
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/buddy.pyx":22
+ * cimport purple
+ * 
+ * cdef class Buddy:             # <<<<<<<<<<<<<<
+ *     """
+ *     Buddy class
+ */
+
+struct __pyx_obj_6purple_Buddy {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Buddy *__pyx_vtab;
+  PyObject *__account;
+  PyObject *__name;
+  PyObject *__exists;
+};
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":61
+ * include "util.pxd"
+ * 
+ * cdef class Purple:             # <<<<<<<<<<<<<<
+ *     """ Purple class.
+ * 
+ */
+
+struct __pyx_obj_6purple_Purple {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Purple *__pyx_vtab;
+};
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/proxy.pyx":56
+ *     USE_ENVVAR = property(get_USE_ENVVAR)
+ * 
+ * cdef class ProxyInfo:             # <<<<<<<<<<<<<<
+ * 
+ *     cdef proxy.PurpleProxyInfo *c_proxyinfo
+ */
+
+struct __pyx_obj_6purple_ProxyInfo {
+  PyObject_HEAD
+  PurpleProxyInfo *c_proxyinfo;
+  PyObject *types;
+};
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/protocol.pyx":22
+ * cimport purple
+ * 
+ * cdef class Protocol:             # <<<<<<<<<<<<<<
+ *     """
+ *     Protocol class
+ */
+
+struct __pyx_obj_6purple_Protocol {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Protocol *__pyx_vtab;
+  PyObject *__id;
+  PyObject *__exists;
+};
+
+struct __pyx_obj_6purple_ProxyInfoType {
+  PyObject_HEAD
+  PurpleProxyType c_type;
+};
+
+struct __pyx_obj_6purple_Conversation {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Conversation *__pyx_vtab;
+  PyObject *__account;
+  PyObject *__name;
+  PyObject *__type;
+  PyObject *__exists;
+};
+
+struct __pyx_obj_6purple_Account {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_6purple_Account *__pyx_vtab;
+  PyObject *__username;
+  PyObject *__protocol;
+  PyObject *__core;
+  PyObject *__exists;
+};
+
+
+struct __pyx_vtabstruct_6purple_Protocol {
+  PurplePlugin *(*_get_structure)(struct __pyx_obj_6purple_Protocol *);
+};
+static struct __pyx_vtabstruct_6purple_Protocol *__pyx_vtabptr_6purple_Protocol;
+
+
+struct __pyx_vtabstruct_6purple_Buddy {
+  PurpleBuddy *(*_get_structure)(struct __pyx_obj_6purple_Buddy *);
+};
+static struct __pyx_vtabstruct_6purple_Buddy *__pyx_vtabptr_6purple_Buddy;
+
+
+struct __pyx_vtabstruct_6purple_Conversation {
+  PurpleConversation *(*_get_structure)(struct __pyx_obj_6purple_Conversation *);
+};
+static struct __pyx_vtabstruct_6purple_Conversation *__pyx_vtabptr_6purple_Conversation;
+
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/purple.pyx":61
+ * include "util.pxd"
+ * 
+ * cdef class Purple:             # <<<<<<<<<<<<<<
+ *     """ Purple class.
+ * 
+ */
+
+struct __pyx_vtabstruct_6purple_Purple {
+  void (*__core_ui_ops_ui_prefs_init)(struct __pyx_obj_6purple_Purple *);
+  void (*__core_ui_ops_debug_init)(struct __pyx_obj_6purple_Purple *);
+  void (*__core_ui_ops_ui_init)(struct __pyx_obj_6purple_Purple *);
+  void (*__core_ui_ops_quit)(struct __pyx_obj_6purple_Purple *);
+  GHashTable *(*__core_ui_ops_get_ui_info)(struct __pyx_obj_6purple_Purple *);
+};
+static struct __pyx_vtabstruct_6purple_Purple *__pyx_vtabptr_6purple_Purple;
+
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account.pyx":22
+ * cimport purple
+ * 
+ * cdef class Account:             # <<<<<<<<<<<<<<
+ *     """
+ *     Account class
+ */
+
+struct __pyx_vtabstruct_6purple_Account {
+  PurpleAccount *(*_get_structure)(struct __pyx_obj_6purple_Account *);
+};
+static struct __pyx_vtabstruct_6purple_Account *__pyx_vtabptr_6purple_Account;
+/* Module declarations from glib */
+
+/* Module declarations from account */
+
+/* Module declarations from prefs */
+
+/* Module declarations from accountopt */
+
+/* Module declarations from buddyicon */
+
+/* Module declarations from blist */
+
+/* Module declarations from prpl */
+
+/* Module declarations from plugin */
+
+/* Module declarations from connection */
+
+/* Module declarations from conversation */
+
+/* Module declarations from core */
+
+/* Module declarations from debug */
+
+/* Module declarations from eventloop */
+
+/* Module declarations from ft */
+
+/* Module declarations from idle */
+
+/* Module declarations from notify */
+
+/* Module declarations from pounce */
+
+/* Module declarations from privacy */
+
+/* Module declarations from proxy */
+
+/* Module declarations from request */
+
+/* Module declarations from roomlist */
+
+/* Module declarations from server */
+
+/* Module declarations from signals */
+
+/* Module declarations from value */
+
+/* Module declarations from status */
+
+/* Module declarations from savedstatuses */
+
+/* Module declarations from xmlnode */
+
+/* Module declarations from util */
+
+/* Module declarations from purple */
+
+static PyTypeObject *__pyx_ptype_6purple_Purple = 0;
+static PyTypeObject *__pyx_ptype_6purple_Protocol = 0;
+static PyTypeObject *__pyx_ptype_6purple_ProxyInfoType = 0;
+static PyTypeObject *__pyx_ptype_6purple_ProxyInfo = 0;
+static PyTypeObject *__pyx_ptype_6purple_Account = 0;
+static PyTypeObject *__pyx_ptype_6purple_Buddy = 0;
+static PyTypeObject *__pyx_ptype_6purple_Conversation = 0;
+static GHashTable *__pyx_v_6purple_c_ui_info;
+static char *__pyx_v_6purple_c_ui_name;
+static char *__pyx_v_6purple_c_ui_version;
+static char *__pyx_v_6purple_c_ui_website;
+static char *__pyx_v_6purple_c_ui_dev_website;
+static PurpleAccountUiOps __pyx_v_6purple_c_account_ui_ops;
+static PurpleBlistUiOps __pyx_v_6purple_c_blist_ui_ops;
+static PurpleConnectionUiOps __pyx_v_6purple_c_conn_ui_ops;
+static PurpleConversationUiOps __pyx_v_6purple_c_conv_ui_ops;
+static PurpleCoreUiOps __pyx_v_6purple_c_core_ui_ops;
+static PurpleEventLoopUiOps __pyx_v_6purple_c_eventloop_ui_ops;
+static PurpleNotifyUiOps __pyx_v_6purple_c_notify_ui_ops;
+static PurpleRequestUiOps __pyx_v_6purple_c_request_ui_ops;
+static PurpleAccountRequestAuthorizationCb __pyx_v_6purple_c_request_authorize_authorize_cb;
+static PurpleAccountRequestAuthorizationCb __pyx_v_6purple_c_request_authorize_deny_cb;
+static void *__pyx_v_6purple_c_request_authorize_user_data;
+static void __pyx_f_6purple_notify_added(PurpleAccount *, const char *, const char *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_status_changed(PurpleAccount *, PurpleStatus *); /*proto*/
+static void __pyx_f_6purple_request_add(PurpleAccount *, const char *, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_request_authorize(PurpleAccount *, const char *, const char *, const char *, const char *, gboolean, PurpleAccountRequestAuthorizationCb, PurpleAccountRequestAuthorizationCb, void *); /*proto*/
+static void __pyx_f_6purple_close_account_request(void *); /*proto*/
+static void __pyx_f_6purple___group_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___contact_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___buddy_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___chat_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple___other_node_cb(PurpleBlistNode *, PyObject *); /*proto*/
+static void __pyx_f_6purple_new_list(PurpleBuddyList *); /*proto*/
+static void __pyx_f_6purple_new_node(PurpleBlistNode *); /*proto*/
+static void __pyx_f_6purple_show(PurpleBuddyList *); /*proto*/
+static void __pyx_f_6purple_update(PurpleBuddyList *, PurpleBlistNode *); /*proto*/
+static void __pyx_f_6purple_remove(PurpleBuddyList *, PurpleBlistNode *); /*proto*/
+static void __pyx_f_6purple_destroy(PurpleBuddyList *); /*proto*/
+static void __pyx_f_6purple_set_visible(PurpleBuddyList *, gboolean); /*proto*/
+static void __pyx_f_6purple_request_add_buddy(PurpleAccount *, const char *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_request_add_chat(PurpleAccount *, PurpleGroup *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_request_add_group(void); /*proto*/
+static void __pyx_f_6purple_connect_progress(PurpleConnection *, const char *, size_t, size_t); /*proto*/
+static void __pyx_f_6purple_connected(PurpleConnection *); /*proto*/
+static void __pyx_f_6purple_disconnected(PurpleConnection *); /*proto*/
+static void __pyx_f_6purple_notice(PurpleConnection *, const char *); /*proto*/
+static void __pyx_f_6purple_report_disconnect(PurpleConnection *, const char *); /*proto*/
+static void __pyx_f_6purple_network_connected(void); /*proto*/
+static void __pyx_f_6purple_network_disconnected(void); /*proto*/
+static void __pyx_f_6purple_report_disconnect_reason(PurpleConnection *, PurpleConnectionError, const char *); /*proto*/
+static void __pyx_f_6purple_create_conversation(PurpleConversation *); /*proto*/
+static void __pyx_f_6purple_destroy_conversation(PurpleConversation *); /*proto*/
+static void __pyx_f_6purple_write_chat(PurpleConversation *, const char *, const char *, PurpleMessageFlags, time_t); /*proto*/
+static void __pyx_f_6purple_write_im(PurpleConversation *, const char *, const char *, PurpleMessageFlags, time_t); /*proto*/
+static void __pyx_f_6purple_write_conv(PurpleConversation *, const char *, const char *, const char *, PurpleMessageFlags, time_t); /*proto*/
+static void __pyx_f_6purple_chat_add_users(PurpleConversation *, GList *, gboolean); /*proto*/
+static void __pyx_f_6purple_chat_rename_user(PurpleConversation *, const char *, const char *, const char *); /*proto*/
+static void __pyx_f_6purple_chat_remove_users(PurpleConversation *, GList *); /*proto*/
+static void __pyx_f_6purple_chat_update_user(PurpleConversation *, const char *); /*proto*/
+static void __pyx_f_6purple_present(PurpleConversation *); /*proto*/
+static gboolean __pyx_f_6purple_has_focus(PurpleConversation *); /*proto*/
+static gboolean __pyx_f_6purple_custom_smiley_add(PurpleConversation *, const char *, gboolean); /*proto*/
+static void __pyx_f_6purple_custom_smiley_write(PurpleConversation *, const char *, const guchar *, gsize); /*proto*/
+static void __pyx_f_6purple_custom_smiley_close(PurpleConversation *, const char *); /*proto*/
+static void __pyx_f_6purple_send_confirm(PurpleConversation *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_message(PurpleNotifyMsgType, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_email(PurpleConnection *, const char *, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_emails(PurpleConnection *, size_t, gboolean, const char **, const char **, const char **, const char **); /*proto*/
+static void *__pyx_f_6purple_notify_formatted(const char *, const char *, const char *, const char *); /*proto*/
+static void *__pyx_f_6purple_notify_searchresults(PurpleConnection *, const char *, const char *, const char *, PurpleNotifySearchResults *, gpointer); /*proto*/
+static void __pyx_f_6purple_notify_searchresults_new_rows(PurpleConnection *, PurpleNotifySearchResults *, void *); /*proto*/
+static void *__pyx_f_6purple_notify_userinfo(PurpleConnection *, const char *, PurpleNotifyUserInfo *); /*proto*/
+static void *__pyx_f_6purple_notify_uri(const char *); /*proto*/
+static void __pyx_f_6purple_close_notify(PurpleNotifyType, void *); /*proto*/
+static void *__pyx_f_6purple_request_input(const char *, const char *, const char *, const char *, gboolean, gboolean, gchar *, const char *, GCallback, const char *, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void *__pyx_f_6purple_request_choice(const char *, const char *, const char *, int, const char *, GCallback, const char *, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *, va_list); /*proto*/
+static void *__pyx_f_6purple_request_action(const char *, const char *, const char *, int, PurpleAccount *, const char *, PurpleConversation *, void *, size_t, va_list); /*proto*/
+static void *__pyx_f_6purple_request_fields(const char *, const char *, const char *, PurpleRequestFields *, const char *, GCallback, const char *, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void *__pyx_f_6purple_request_file(const char *, const char *, gboolean, GCallback, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void __pyx_f_6purple_close_request(PurpleRequestType, void *); /*proto*/
+static void *__pyx_f_6purple_request_folder(const char *, const char *, GCallback, GCallback, PurpleAccount *, const char *, PurpleConversation *, void *); /*proto*/
+static void __pyx_f_6purple_signal_signed_on_cb(PurpleConnection *, gpointer); /*proto*/
+static void __pyx_f_6purple_signal_signed_off_cb(PurpleConnection *, gpointer); /*proto*/
+static void __pyx_f_6purple_signal_connection_error_cb(PurpleConnection *, PurpleConnectionError, const gchar *); /*proto*/
+static void __pyx_f_6purple_signal_buddy_signed_on_cb(PurpleBuddy *); /*proto*/
+static void __pyx_f_6purple_signal_buddy_signed_off_cb(PurpleBuddy *); /*proto*/
+static gboolean __pyx_f_6purple_signal_receiving_im_msg_cb(PurpleAccount *, char **, char **, PurpleConversation *, PurpleMessageFlags *); /*proto*/
+static void __pyx_f_6purple_jabber_receiving_xmlnode_cb(PurpleConnection *, xmlnode **, gpointer); /*proto*/
+
+
+/* Implementation of purple */
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_2;
+static PyObject *__pyx_int_3;
+static PyObject *__pyx_int_4;
+static PyObject *__pyx_int_5;
+static PyObject *__pyx_int_6;
+static PyObject *__pyx_int_7;
+static PyObject *__pyx_int_8;
+static PyObject *__pyx_int_9;
+static PyObject *__pyx_int_10;
+static PyObject *__pyx_int_11;
+static PyObject *__pyx_int_12;
+static PyObject *__pyx_int_13;
+static PyObject *__pyx_int_14;
+static PyObject *__pyx_int_15;
+static PyObject *__pyx_int_16;
+static char __pyx_k___init__[] = "__init__";
+static PyObject *__pyx_kp___init__;
+static char __pyx_k_destroy[] = "destroy";
+static PyObject *__pyx_kp_destroy;
+static char __pyx_k___get_ui_name[] = "__get_ui_name";
+static PyObject *__pyx_kp___get_ui_name;
+static char __pyx_k_ui_name[] = "ui_name";
+static PyObject *__pyx_kp_ui_name;
+static char __pyx_k_1[] = "__glib_iteration_when_idle";
+static PyObject *__pyx_kp_1;
+static char __pyx_k_purple_init[] = "purple_init";
+static PyObject *__pyx_kp_purple_init;
+static char __pyx_k_add_callback[] = "add_callback";
+static PyObject *__pyx_kp_add_callback;
+static char __pyx_k_signal_connect[] = "signal_connect";
+static PyObject *__pyx_kp_signal_connect;
+static char __pyx_k_accounts_get_all[] = "accounts_get_all";
+static PyObject *__pyx_kp_accounts_get_all;
+static char __pyx_k_2[] = "accounts_get_all_active";
+static PyObject *__pyx_kp_2;
+static char __pyx_k_protocols_get_all[] = "protocols_get_all";
+static PyObject *__pyx_kp_protocols_get_all;
+static char __pyx_k___get_exists[] = "__get_exists";
+static PyObject *__pyx_kp___get_exists;
+static char __pyx_k_exists[] = "exists";
+static PyObject *__pyx_kp_exists;
+static char __pyx_k___get_id[] = "__get_id";
+static PyObject *__pyx_kp___get_id;
+static char __pyx_k_id[] = "id";
+static PyObject *__pyx_kp_id;
+static char __pyx_k___get_name[] = "__get_name";
+static PyObject *__pyx_kp___get_name;
+static char __pyx_k_name[] = "name";
+static PyObject *__pyx_kp_name;
+static char __pyx_k_3[] = "__get_options_labels";
+static PyObject *__pyx_kp_3;
+static char __pyx_k_options_labels[] = "options_labels";
+static PyObject *__pyx_kp_options_labels;
+static char __pyx_k_4[] = "__get_options_values";
+static PyObject *__pyx_kp_4;
+static char __pyx_k_options_values[] = "options_values";
+static PyObject *__pyx_kp_options_values;
+static char __pyx_k_get_NONE[] = "get_NONE";
+static PyObject *__pyx_kp_get_NONE;
+static char __pyx_k_NONE[] = "NONE";
+static PyObject *__pyx_kp_NONE;
+static char __pyx_k_get_USE_GLOBAL[] = "get_USE_GLOBAL";
+static PyObject *__pyx_kp_get_USE_GLOBAL;
+static char __pyx_k_USE_GLOBAL[] = "USE_GLOBAL";
+static PyObject *__pyx_kp_USE_GLOBAL;
+static char __pyx_k_get_HTTP[] = "get_HTTP";
+static PyObject *__pyx_kp_get_HTTP;
+static char __pyx_k_HTTP[] = "HTTP";
+static PyObject *__pyx_kp_HTTP;
+static char __pyx_k_5[] = "get_SOCKS4";
+static PyObject *__pyx_kp_5;
+static char __pyx_k_6[] = "get_SOCKS5";
+static PyObject *__pyx_kp_6;
+static char __pyx_k_get_USE_ENVVAR[] = "get_USE_ENVVAR";
+static PyObject *__pyx_kp_get_USE_ENVVAR;
+static char __pyx_k_USE_ENVVAR[] = "USE_ENVVAR";
+static PyObject *__pyx_kp_USE_ENVVAR;
+static char __pyx_k_set_type[] = "set_type";
+static PyObject *__pyx_kp_set_type;
+static char __pyx_k_set_host[] = "set_host";
+static PyObject *__pyx_kp_set_host;
+static char __pyx_k_set_port[] = "set_port";
+static PyObject *__pyx_kp_set_port;
+static char __pyx_k_set_username[] = "set_username";
+static PyObject *__pyx_kp_set_username;
+static char __pyx_k_set_password[] = "set_password";
+static PyObject *__pyx_kp_set_password;
+static char __pyx_k_get_types[] = "get_types";
+static PyObject *__pyx_kp_get_types;
+static char __pyx_k_set_info[] = "set_info";
+static PyObject *__pyx_kp_set_info;
+static char __pyx_k___is_connected[] = "__is_connected";
+static PyObject *__pyx_kp___is_connected;
+static char __pyx_k_is_connected[] = "is_connected";
+static PyObject *__pyx_kp_is_connected;
+static char __pyx_k___is_connecting[] = "__is_connecting";
+static PyObject *__pyx_kp___is_connecting;
+static char __pyx_k_is_connecting[] = "is_connecting";
+static PyObject *__pyx_kp_is_connecting;
+static char __pyx_k___is_disconnected[] = "__is_disconnected";
+static PyObject *__pyx_kp___is_disconnected;
+static char __pyx_k_is_disconnected[] = "is_disconnected";
+static PyObject *__pyx_kp_is_disconnected;
+static char __pyx_k___get_core[] = "__get_core";
+static PyObject *__pyx_kp___get_core;
+static char __pyx_k_core[] = "core";
+static PyObject *__pyx_kp_core;
+static char __pyx_k___get_username[] = "__get_username";
+static PyObject *__pyx_kp___get_username;
+static char __pyx_k_username[] = "username";
+static PyObject *__pyx_kp_username;
+static char __pyx_k___get_protocol[] = "__get_protocol";
+static PyObject *__pyx_kp___get_protocol;
+static char __pyx_k_protocol[] = "protocol";
+static PyObject *__pyx_kp_protocol;
+static char __pyx_k_7[] = "_get_protocol_options";
+static PyObject *__pyx_kp_7;
+static char __pyx_k_protocol_options[] = "protocol_options";
+static PyObject *__pyx_kp_protocol_options;
+static char __pyx_k___get_password[] = "__get_password";
+static PyObject *__pyx_kp___get_password;
+static char __pyx_k_password[] = "password";
+static PyObject *__pyx_kp_password;
+static char __pyx_k___get_alias[] = "__get_alias";
+static PyObject *__pyx_kp___get_alias;
+static char __pyx_k_alias[] = "alias";
+static PyObject *__pyx_kp_alias;
+static char __pyx_k___get_user_info[] = "__get_user_info";
+static PyObject *__pyx_kp___get_user_info;
+static char __pyx_k_user_info[] = "user_info";
+static PyObject *__pyx_kp_user_info;
+static char __pyx_k_8[] = "__get_remember_password";
+static PyObject *__pyx_kp_8;
+static char __pyx_k_remember_password[] = "remember_password";
+static PyObject *__pyx_kp_remember_password;
+static char __pyx_k___get_enabled[] = "__get_enabled";
+static PyObject *__pyx_kp___get_enabled;
+static char __pyx_k_enabled[] = "enabled";
+static PyObject *__pyx_kp_enabled;
+static char __pyx_k___get_status_types[] = "__get_status_types";
+static PyObject *__pyx_kp___get_status_types;
+static char __pyx_k_status_types[] = "status_types";
+static PyObject *__pyx_kp_status_types;
+static char __pyx_k___get_active_status[] = "__get_active_status";
+static PyObject *__pyx_kp___get_active_status;
+static char __pyx_k_active_status[] = "active_status";
+static PyObject *__pyx_kp_active_status;
+static char __pyx_k_set_protocol[] = "set_protocol";
+static PyObject *__pyx_kp_set_protocol;
+static char __pyx_k_9[] = "set_protocol_options";
+static PyObject *__pyx_kp_9;
+static char __pyx_k_set_alias[] = "set_alias";
+static PyObject *__pyx_kp_set_alias;
+static char __pyx_k_set_user_info[] = "set_user_info";
+static PyObject *__pyx_kp_set_user_info;
+static char __pyx_k_10[] = "set_remember_password";
+static PyObject *__pyx_kp_10;
+static char __pyx_k_set_enabled[] = "set_enabled";
+static PyObject *__pyx_kp_set_enabled;
+static char __pyx_k_new[] = "new";
+static PyObject *__pyx_kp_new;
+static char __pyx_k_remove[] = "remove";
+static PyObject *__pyx_kp_remove;
+static char __pyx_k_connect[] = "connect";
+static PyObject *__pyx_kp_connect;
+static char __pyx_k_disconnect[] = "disconnect";
+static PyObject *__pyx_kp_disconnect;
+static char __pyx_k_add_buddy[] = "add_buddy";
+static PyObject *__pyx_kp_add_buddy;
+static char __pyx_k_remove_buddy[] = "remove_buddy";
+static PyObject *__pyx_kp_remove_buddy;
+static char __pyx_k_get_buddies_online[] = "get_buddies_online";
+static PyObject *__pyx_kp_get_buddies_online;
+static char __pyx_k_request_add_buddy[] = "request_add_buddy";
+static PyObject *__pyx_kp_request_add_buddy;
+static char __pyx_k_set_active_status[] = "set_active_status";
+static PyObject *__pyx_kp_set_active_status;
+static char __pyx_k_set_status_message[] = "set_status_message";
+static PyObject *__pyx_kp_set_status_message;
+static char __pyx_k___get_account[] = "__get_account";
+static PyObject *__pyx_kp___get_account;
+static char __pyx_k_account[] = "account";
+static PyObject *__pyx_kp_account;
+static char __pyx_k___get_group[] = "__get_group";
+static PyObject *__pyx_kp___get_group;
+static char __pyx_k_group[] = "group";
+static PyObject *__pyx_kp_group;
+static char __pyx_k___get_server_alias[] = "__get_server_alias";
+static PyObject *__pyx_kp___get_server_alias;
+static char __pyx_k_server_alias[] = "server_alias";
+static PyObject *__pyx_kp_server_alias;
+static char __pyx_k___get_contact_alias[] = "__get_contact_alias";
+static PyObject *__pyx_kp___get_contact_alias;
+static char __pyx_k_contact_alias[] = "contact_alias";
+static PyObject *__pyx_kp_contact_alias;
+static char __pyx_k___get_local_alias[] = "__get_local_alias";
+static PyObject *__pyx_kp___get_local_alias;
+static char __pyx_k_local_alias[] = "local_alias";
+static PyObject *__pyx_kp_local_alias;
+static char __pyx_k___get_available[] = "__get_available";
+static PyObject *__pyx_kp___get_available;
+static char __pyx_k_available[] = "available";
+static PyObject *__pyx_kp_available;
+static char __pyx_k___get_online[] = "__get_online";
+static PyObject *__pyx_kp___get_online;
+static char __pyx_k_online[] = "online";
+static PyObject *__pyx_kp_online;
+static char __pyx_k___get_idle[] = "__get_idle";
+static PyObject *__pyx_kp___get_idle;
+static char __pyx_k_idle[] = "idle";
+static PyObject *__pyx_kp_idle;
+static char __pyx_k_set_group[] = "set_group";
+static PyObject *__pyx_kp_set_group;
+static char __pyx_k_set_ui_ops[] = "set_ui_ops";
+static PyObject *__pyx_kp_set_ui_ops;
+static char __pyx_k_im_send[] = "im_send";
+static PyObject *__pyx_kp_im_send;
+static char __pyx_k_message[] = "message";
+static PyObject *__pyx_kp_message;
+static char __pyx_k_ui_version[] = "ui_version";
+static PyObject *__pyx_kp_ui_version;
+static char __pyx_k_ui_website[] = "ui_website";
+static PyObject *__pyx_kp_ui_website;
+static char __pyx_k_ui_dev_website[] = "ui_dev_website";
+static PyObject *__pyx_kp_ui_dev_website;
+static char __pyx_k_debug_enabled[] = "debug_enabled";
+static PyObject *__pyx_kp_debug_enabled;
+static char __pyx_k_default_path[] = "default_path";
+static PyObject *__pyx_kp_default_path;
+static char __pyx_k_type[] = "type";
+static PyObject *__pyx_kp_type;
+static char __pyx_k_callback[] = "callback";
+static PyObject *__pyx_kp_callback;
+static char __pyx_k_cb[] = "cb";
+static PyObject *__pyx_kp_cb;
+static char __pyx_k_host[] = "host";
+static PyObject *__pyx_kp_host;
+static char __pyx_k_port[] = "port";
+static PyObject *__pyx_kp_port;
+static char __pyx_k_acc[] = "acc";
+static PyObject *__pyx_kp_acc;
+static char __pyx_k_info[] = "info";
+static PyObject *__pyx_kp_info;
+static char __pyx_k_po[] = "po";
+static PyObject *__pyx_kp_po;
+static char __pyx_k_value[] = "value";
+static PyObject *__pyx_kp_value;
+static char __pyx_k_buddy_username[] = "buddy_username";
+static PyObject *__pyx_kp_buddy_username;
+static char __pyx_k_buddy_alias[] = "buddy_alias";
+static PyObject *__pyx_kp_buddy_alias;
+static char __pyx_k_msg[] = "msg";
+static PyObject *__pyx_kp_msg;
+static char __pyx_k_cbs[] = "cbs";
+static PyObject *__pyx_kp_cbs;
+static char __pyx_k_ecore[] = "ecore";
+static PyObject *__pyx_kp_ecore;
+static char __pyx_k_account_cbs[] = "account_cbs";
+static PyObject *__pyx_kp_account_cbs;
+static char __pyx_k_blist_cbs[] = "blist_cbs";
+static PyObject *__pyx_kp_blist_cbs;
+static char __pyx_k_connection_cbs[] = "connection_cbs";
+static PyObject *__pyx_kp_connection_cbs;
+static char __pyx_k_conversation_cbs[] = "conversation_cbs";
+static PyObject *__pyx_kp_conversation_cbs;
+static char __pyx_k_notify_cbs[] = "notify_cbs";
+static PyObject *__pyx_kp_notify_cbs;
+static char __pyx_k_request_cbs[] = "request_cbs";
+static PyObject *__pyx_kp_request_cbs;
+static char __pyx_k_signal_cbs[] = "signal_cbs";
+static PyObject *__pyx_kp_signal_cbs;
+static char __pyx_k_property[] = "property";
+static PyObject *__pyx_kp_property;
+static char __pyx_k_has_key[] = "has_key";
+static PyObject *__pyx_kp_has_key;
+static char __pyx_k_call_authorize_cb[] = "call_authorize_cb";
+static PyObject *__pyx_kp_call_authorize_cb;
+static char __pyx_k_call_deny_cb[] = "call_deny_cb";
+static PyObject *__pyx_kp_call_deny_cb;
+static char __pyx_k_54[] = "show";
+static PyObject *__pyx_kp_54;
+static char __pyx_k_55[] = "show";
+static PyObject *__pyx_kp_55;
+static char __pyx_k_60[] = "update";
+static PyObject *__pyx_kp_60;
+static char __pyx_k_61[] = "update";
+static PyObject *__pyx_kp_61;
+static char __pyx_k_62[] = "update";
+static PyObject *__pyx_kp_62;
+static char __pyx_k_63[] = "update";
+static PyObject *__pyx_kp_63;
+static char __pyx_k_64[] = "update";
+static PyObject *__pyx_kp_64;
+static char __pyx_k_65[] = "update";
+static PyObject *__pyx_kp_65;
+static char __pyx_k_69[] = "remove";
+static PyObject *__pyx_kp_69;
+static char __pyx_k_70[] = "remove";
+static PyObject *__pyx_kp_70;
+static char __pyx_k_71[] = "remove";
+static PyObject *__pyx_kp_71;
+static char __pyx_k_72[] = "remove";
+static PyObject *__pyx_kp_72;
+static char __pyx_k_73[] = "remove";
+static PyObject *__pyx_kp_73;
+static char __pyx_k_74[] = "remove";
+static PyObject *__pyx_kp_74;
+static char __pyx_k_78[] = "destroy";
+static PyObject *__pyx_kp_78;
+static char __pyx_k_79[] = "destroy";
+static PyObject *__pyx_kp_79;
+static char __pyx_k_112[] = "connected";
+static PyObject *__pyx_kp_112;
+static char __pyx_k_113[] = "connected";
+static PyObject *__pyx_kp_113;
+static char __pyx_k_118[] = "disconnected";
+static PyObject *__pyx_kp_118;
+static char __pyx_k_119[] = "disconnected";
+static PyObject *__pyx_kp_119;
+static char __pyx_k_124[] = "notice";
+static PyObject *__pyx_kp_124;
+static char __pyx_k_125[] = "notice";
+static PyObject *__pyx_kp_125;
+static char __pyx_k_185[] = "SEND";
+static PyObject *__pyx_kp_185;
+static char __pyx_k_186[] = "RECV";
+static PyObject *__pyx_kp_186;
+static char __pyx_k_222[] = "present";
+static PyObject *__pyx_kp_222;
+static char __pyx_k_223[] = "present";
+static PyObject *__pyx_kp_223;
+static char __pyx_k_timer_add[] = "timer_add";
+static PyObject *__pyx_kp_timer_add;
+static char __pyx_k_c_ui_info[] = "c_ui_info";
+static PyObject *__pyx_kp_c_ui_info;
+static char __pyx_k_405[] = "account";
+static PyObject *__pyx_kp_405;
+static char __pyx_k_406[] = "blist";
+static PyObject *__pyx_kp_406;
+static char __pyx_k_407[] = "connection";
+static PyObject *__pyx_kp_407;
+static char __pyx_k_408[] = "conversation";
+static PyObject *__pyx_kp_408;
+static char __pyx_k_409[] = "notify";
+static PyObject *__pyx_kp_409;
+static char __pyx_k_410[] = "request";
+static PyObject *__pyx_kp_410;
+static char __pyx_k_append[] = "append";
+static PyObject *__pyx_kp_append;
+static char __pyx_k_427[] = "HTTP";
+static PyObject *__pyx_kp_427;
+static char __pyx_k_428[] = "USER_GLOBAL";
+static PyObject *__pyx_kp_428;
+static char __pyx_k_429[] = "USE_ENVVAR";
+static PyObject *__pyx_kp_429;
+static char __pyx_k_430[] = "SOCKS4";
+static PyObject *__pyx_kp_430;
+static char __pyx_k_431[] = "SOCKS5";
+static PyObject *__pyx_kp_431;
+static char __pyx_k_432[] = "NONE";
+static PyObject *__pyx_kp_432;
+static char __pyx_k_keys[] = "keys";
+static PyObject *__pyx_kp_keys;
+static char __pyx_k_433[] = "type";
+static PyObject *__pyx_kp_433;
+static char __pyx_k_434[] = "type";
+static PyObject *__pyx_kp_434;
+static char __pyx_k_435[] = "type";
+static PyObject *__pyx_kp_435;
+static char __pyx_k_436[] = "HTTP";
+static PyObject *__pyx_kp_436;
+static char __pyx_k_437[] = "host";
+static PyObject *__pyx_kp_437;
+static char __pyx_k_438[] = "host";
+static PyObject *__pyx_kp_438;
+static char __pyx_k_439[] = "host";
+static PyObject *__pyx_kp_439;
+static char __pyx_k_440[] = "port";
+static PyObject *__pyx_kp_440;
+static char __pyx_k_441[] = "port";
+static PyObject *__pyx_kp_441;
+static char __pyx_k_442[] = "port";
+static PyObject *__pyx_kp_442;
+static char __pyx_k_443[] = "username";
+static PyObject *__pyx_kp_443;
+static char __pyx_k_444[] = "username";
+static PyObject *__pyx_kp_444;
+static char __pyx_k_445[] = "username";
+static PyObject *__pyx_kp_445;
+static char __pyx_k_446[] = "password";
+static PyObject *__pyx_kp_446;
+static char __pyx_k_447[] = "password";
+static PyObject *__pyx_kp_447;
+static char __pyx_k_448[] = "password";
+static PyObject *__pyx_kp_448;
+static char __pyx_k_451[] = "type";
+static PyObject *__pyx_kp_451;
+static char __pyx_k_452[] = "name";
+static PyObject *__pyx_kp_452;
+static char __pyx_k_453[] = "message";
+static PyObject *__pyx_kp_453;
+static char __pyx_k_459[] = "type";
+static PyObject *__pyx_kp_459;
+static char __pyx_k_460[] = "name";
+static PyObject *__pyx_kp_460;
+static char __pyx_k_461[] = "message";
+static PyObject *__pyx_kp_461;
+static char __pyx_k_462[] = "UNKNOWN";
+static PyObject *__pyx_kp_462;
+static char __pyx_k_463[] = "IM";
+static PyObject *__pyx_kp_463;
+static char __pyx_k_464[] = "CHAT";
+static PyObject *__pyx_kp_464;
+static char __pyx_k_465[] = "MISC";
+static PyObject *__pyx_kp_465;
+static char __pyx_k_466[] = "ANY";
+static PyObject *__pyx_kp_466;
+static PyObject *__pyx_builtin_property;
+static PyObject *__pyx_kp_14;
+static PyObject *__pyx_kp_15;
+static char __pyx_k_11[] = "account";
+static char __pyx_k_12[] = "%s";
+static char __pyx_k_13[] = "notify-added\n";
+static char __pyx_k_14[] = "notify-added";
+static char __pyx_k_15[] = "notify-added";
+static PyObject *__pyx_kp_19;
+static PyObject *__pyx_kp_20;
+static char __pyx_k_16[] = "account";
+static char __pyx_k_17[] = "%s";
+static char __pyx_k_18[] = "status-changed\n";
+static char __pyx_k_19[] = "status-changed";
+static char __pyx_k_20[] = "status-changed";
+static PyObject *__pyx_kp_24;
+static PyObject *__pyx_kp_25;
+static char __pyx_k_21[] = "account";
+static char __pyx_k_22[] = "%s";
+static char __pyx_k_23[] = "request-add\n";
+static char __pyx_k_24[] = "request-add";
+static char __pyx_k_25[] = "request-add";
+static PyObject *__pyx_kp_29;
+static PyObject *__pyx_kp_30;
+static char __pyx_k_26[] = "account";
+static char __pyx_k_27[] = "%s";
+static char __pyx_k_28[] = "request-authorize\n";
+static char __pyx_k_29[] = "request-authorize";
+static char __pyx_k_30[] = "request-authorize";
+static PyObject *__pyx_kp_34;
+static PyObject *__pyx_kp_35;
+static char __pyx_k_31[] = "account";
+static char __pyx_k_32[] = "%s";
+static char __pyx_k_33[] = "close-account-request\n";
+static char __pyx_k_34[] = "close-account-request";
+static char __pyx_k_35[] = "close-account-request";
+static PyObject *__pyx_kp_39;
+static PyObject *__pyx_kp_40;
+static PyObject *__pyx_kp_41;
+static char __pyx_k_36[] = "blist";
+static char __pyx_k_37[] = "%s";
+static char __pyx_k_38[] = "new-list\n";
+static char __pyx_k_39[] = "new-list";
+static char __pyx_k_40[] = "new-list";
+static char __pyx_k_41[] = "new-list: TODO";
+static PyObject *__pyx_kp_45;
+static PyObject *__pyx_kp_46;
+static PyObject *__pyx_kp_47;
+static PyObject *__pyx_kp_48;
+static PyObject *__pyx_kp_49;
+static PyObject *__pyx_kp_50;
+static char __pyx_k_42[] = "blist";
+static char __pyx_k_43[] = "%s";
+static char __pyx_k_44[] = "new-node\n";
+static char __pyx_k_45[] = "new-node";
+static char __pyx_k_46[] = "new-node";
+static char __pyx_k_47[] = "new-node";
+static char __pyx_k_48[] = "new-node";
+static char __pyx_k_49[] = "new-node";
+static char __pyx_k_50[] = "new-node";
+static PyObject *__pyx_kp_56;
+static char __pyx_k_51[] = "blist";
+static char __pyx_k_52[] = "%s";
+static char __pyx_k_53[] = "show\n";
+static char __pyx_k_56[] = "show: TODO";
+static char __pyx_k_57[] = "blist";
+static char __pyx_k_58[] = "%s";
+static char __pyx_k_59[] = "update\n";
+static char __pyx_k_66[] = "blist";
+static char __pyx_k_67[] = "%s";
+static char __pyx_k_68[] = "remove\n";
+static PyObject *__pyx_kp_80;
+static char __pyx_k_75[] = "blist";
+static char __pyx_k_76[] = "%s";
+static char __pyx_k_77[] = "destroy\n";
+static char __pyx_k_80[] = "destroy: TODO";
+static PyObject *__pyx_kp_84;
+static PyObject *__pyx_kp_85;
+static PyObject *__pyx_kp_86;
+static char __pyx_k_81[] = "blist";
+static char __pyx_k_82[] = "%s";
+static char __pyx_k_83[] = "set-visible\n";
+static char __pyx_k_84[] = "set-visible";
+static char __pyx_k_85[] = "set-visible";
+static char __pyx_k_86[] = "set-visible: TODO";
+static PyObject *__pyx_kp_90;
+static PyObject *__pyx_kp_91;
+static char __pyx_k_87[] = "blist";
+static char __pyx_k_88[] = "%s";
+static char __pyx_k_89[] = "request-add-buddy\n";
+static char __pyx_k_90[] = "request-add-buddy";
+static char __pyx_k_91[] = "request-add-buddy";
+static PyObject *__pyx_kp_95;
+static PyObject *__pyx_kp_96;
+static PyObject *__pyx_kp_97;
+static char __pyx_k_92[] = "blist";
+static char __pyx_k_93[] = "%s";
+static char __pyx_k_94[] = "request-add-chat\n";
+static char __pyx_k_95[] = "request-add-chat";
+static char __pyx_k_96[] = "request-add-chat";
+static char __pyx_k_97[] = "request-add-chat: TODO";
+static PyObject *__pyx_kp_101;
+static PyObject *__pyx_kp_102;
+static PyObject *__pyx_kp_103;
+static char __pyx_k_98[] = "blist";
+static char __pyx_k_99[] = "%s";
+static char __pyx_k_100[] = "request-add-group\n";
+static char __pyx_k_101[] = "request-add-chat";
+static char __pyx_k_102[] = "request-add-chat";
+static char __pyx_k_103[] = "request-add-group: TODO";
+static PyObject *__pyx_kp_107;
+static PyObject *__pyx_kp_108;
+static char __pyx_k_104[] = "connection";
+static char __pyx_k_105[] = "%s";
+static char __pyx_k_106[] = "connect-progress\n";
+static char __pyx_k_107[] = "connect-progress";
+static char __pyx_k_108[] = "connect-progress";
+static PyObject *__pyx_kp_114;
+static char __pyx_k_109[] = "connection";
+static char __pyx_k_110[] = "%s";
+static char __pyx_k_111[] = "connected\n";
+static char __pyx_k_114[] = "connected: TODO";
+static PyObject *__pyx_kp_120;
+static char __pyx_k_115[] = "connection";
+static char __pyx_k_116[] = "%s";
+static char __pyx_k_117[] = "disconnected\n";
+static char __pyx_k_120[] = "disconnected: TODO";
+static PyObject *__pyx_kp_126;
+static char __pyx_k_121[] = "connection";
+static char __pyx_k_122[] = "%s";
+static char __pyx_k_123[] = "notice\n";
+static char __pyx_k_126[] = "notice: TODO";
+static PyObject *__pyx_kp_130;
+static PyObject *__pyx_kp_131;
+static char __pyx_k_127[] = "connection";
+static char __pyx_k_128[] = "%s";
+static char __pyx_k_129[] = "report-disconnect\n";
+static char __pyx_k_130[] = "report-disconnect";
+static char __pyx_k_131[] = "report-disconnect";
+static PyObject *__pyx_kp_135;
+static PyObject *__pyx_kp_136;
+static char __pyx_k_132[] = "connection";
+static char __pyx_k_133[] = "%s";
+static char __pyx_k_134[] = "network-connected\n";
+static char __pyx_k_135[] = "network-connected";
+static char __pyx_k_136[] = "network-connected";
+static PyObject *__pyx_kp_140;
+static PyObject *__pyx_kp_141;
+static char __pyx_k_137[] = "connection";
+static char __pyx_k_138[] = "%s";
+static char __pyx_k_139[] = "network-disconnected\n";
+static char __pyx_k_140[] = "network-disconnected";
+static char __pyx_k_141[] = "network-disconnected";
+static PyObject *__pyx_kp_145;
+static PyObject *__pyx_kp_146;
+static PyObject *__pyx_kp_147;
+static PyObject *__pyx_kp_148;
+static PyObject *__pyx_kp_149;
+static PyObject *__pyx_kp_150;
+static PyObject *__pyx_kp_151;
+static PyObject *__pyx_kp_152;
+static PyObject *__pyx_kp_153;
+static PyObject *__pyx_kp_154;
+static PyObject *__pyx_kp_155;
+static PyObject *__pyx_kp_156;
+static PyObject *__pyx_kp_157;
+static PyObject *__pyx_kp_158;
+static PyObject *__pyx_kp_159;
+static PyObject *__pyx_kp_160;
+static PyObject *__pyx_kp_161;
+static PyObject *__pyx_kp_162;
+static PyObject *__pyx_kp_163;
+static char __pyx_k_142[] = "connection";
+static char __pyx_k_143[] = "%s";
+static char __pyx_k_144[] = "report-disconnect-reason\n";
+static char __pyx_k_145[] = "Network error";
+static char __pyx_k_146[] = "Invalid username";
+static char __pyx_k_147[] = "Authentication failed";
+static char __pyx_k_148[] = "Authentication impossible";
+static char __pyx_k_149[] = "No SSL support";
+static char __pyx_k_150[] = "Encryption error";
+static char __pyx_k_151[] = "Name in use";
+static char __pyx_k_152[] = "Invalid settings";
+static char __pyx_k_153[] = "Certificate not provided";
+static char __pyx_k_154[] = "Certificate untrusted";
+static char __pyx_k_155[] = "Certificate expired";
+static char __pyx_k_156[] = "Certificate not activated";
+static char __pyx_k_157[] = "Certificate hostname mismatch";
+static char __pyx_k_158[] = "Certificate fingerprint mismatch";
+static char __pyx_k_159[] = "Certificate self signed";
+static char __pyx_k_160[] = "Certificate error (other)";
+static char __pyx_k_161[] = "Other error";
+static char __pyx_k_162[] = "report-disconnect-reason";
+static char __pyx_k_163[] = "report-disconnect-reason";
+static PyObject *__pyx_kp_167;
+static PyObject *__pyx_kp_168;
+static char __pyx_k_164[] = "conversation";
+static char __pyx_k_165[] = "%s";
+static char __pyx_k_166[] = "create-conversation\n";
+static char __pyx_k_167[] = "create-conversation";
+static char __pyx_k_168[] = "create-conversation";
+static PyObject *__pyx_kp_172;
+static PyObject *__pyx_kp_173;
+static PyObject *__pyx_kp_174;
+static char __pyx_k_169[] = "conversation";
+static char __pyx_k_170[] = "%s";
+static char __pyx_k_171[] = "destroy-conversation\n";
+static char __pyx_k_172[] = "destroy-conversation";
+static char __pyx_k_173[] = "destroy-conversation";
+static char __pyx_k_174[] = "destroy-conversation: TODO";
+static PyObject *__pyx_kp_178;
+static PyObject *__pyx_kp_179;
+static PyObject *__pyx_kp_180;
+static char __pyx_k_175[] = "conversation";
+static char __pyx_k_176[] = "%s";
+static char __pyx_k_177[] = "write-chat\n";
+static char __pyx_k_178[] = "write-chat";
+static char __pyx_k_179[] = "write-chat";
+static char __pyx_k_180[] = "write-chat: TODO";
+static PyObject *__pyx_kp_184;
+static PyObject *__pyx_kp_187;
+static PyObject *__pyx_kp_188;
+static char __pyx_k_181[] = "conversation";
+static char __pyx_k_182[] = "%s";
+static char __pyx_k_183[] = "write-im\n";
+static char __pyx_k_184[] = "utf-8";
+static char __pyx_k_187[] = "write-im";
+static char __pyx_k_188[] = "write-im";
+static PyObject *__pyx_kp_192;
+static PyObject *__pyx_kp_193;
+static PyObject *__pyx_kp_194;
+static char __pyx_k_189[] = "conversation";
+static char __pyx_k_190[] = "%s";
+static char __pyx_k_191[] = "write-conv\n";
+static char __pyx_k_192[] = "write-conv";
+static char __pyx_k_193[] = "write-conv";
+static char __pyx_k_194[] = "write-conv: TODO";
+static PyObject *__pyx_kp_198;
+static PyObject *__pyx_kp_199;
+static PyObject *__pyx_kp_200;
+static char __pyx_k_195[] = "conversation";
+static char __pyx_k_196[] = "%s";
+static char __pyx_k_197[] = "chat-add-users\n";
+static char __pyx_k_198[] = "chat-add-users";
+static char __pyx_k_199[] = "chat-add-users";
+static char __pyx_k_200[] = "chat-add-users: TODO";
+static PyObject *__pyx_kp_204;
+static PyObject *__pyx_kp_205;
+static PyObject *__pyx_kp_206;
+static char __pyx_k_201[] = "conversation";
+static char __pyx_k_202[] = "%s";
+static char __pyx_k_203[] = "chat-rename-user\n";
+static char __pyx_k_204[] = "chat-rename-user";
+static char __pyx_k_205[] = "chat-rename-user";
+static char __pyx_k_206[] = "chat-rename-user: TODO";
+static PyObject *__pyx_kp_210;
+static PyObject *__pyx_kp_211;
+static PyObject *__pyx_kp_212;
+static char __pyx_k_207[] = "conversation";
+static char __pyx_k_208[] = "%s";
+static char __pyx_k_209[] = "chat-remove-users\n";
+static char __pyx_k_210[] = "chat-remove-users";
+static char __pyx_k_211[] = "chat-remove-users";
+static char __pyx_k_212[] = "chat-remove-users: TODO";
+static PyObject *__pyx_kp_216;
+static PyObject *__pyx_kp_217;
+static PyObject *__pyx_kp_218;
+static char __pyx_k_213[] = "conversation";
+static char __pyx_k_214[] = "%s";
+static char __pyx_k_215[] = "chat-update-user\n";
+static char __pyx_k_216[] = "chat-update-user";
+static char __pyx_k_217[] = "chat-update-user";
+static char __pyx_k_218[] = "chat-update-user: TODO";
+static PyObject *__pyx_kp_224;
+static char __pyx_k_219[] = "conversation";
+static char __pyx_k_220[] = "%s";
+static char __pyx_k_221[] = "present\n";
+static char __pyx_k_224[] = "present: TODO";
+static PyObject *__pyx_kp_228;
+static PyObject *__pyx_kp_229;
+static PyObject *__pyx_kp_230;
+static char __pyx_k_225[] = "conversation";
+static char __pyx_k_226[] = "%s";
+static char __pyx_k_227[] = "has-focus\n";
+static char __pyx_k_228[] = "has-focus";
+static char __pyx_k_229[] = "has-focus";
+static char __pyx_k_230[] = "has-focus: TODO";
+static PyObject *__pyx_kp_234;
+static PyObject *__pyx_kp_235;
+static PyObject *__pyx_kp_236;
+static char __pyx_k_231[] = "conversation";
+static char __pyx_k_232[] = "%s";
+static char __pyx_k_233[] = "custom-smiley-add\n";
+static char __pyx_k_234[] = "custom-smiley-add";
+static char __pyx_k_235[] = "custom-smiley-add";
+static char __pyx_k_236[] = "custom-smiley-add: TODO";
+static PyObject *__pyx_kp_240;
+static PyObject *__pyx_kp_241;
+static PyObject *__pyx_kp_242;
+static char __pyx_k_237[] = "conversation";
+static char __pyx_k_238[] = "%s";
+static char __pyx_k_239[] = "custom-smiley-write\n";
+static char __pyx_k_240[] = "custom-smiley-write";
+static char __pyx_k_241[] = "custom-smiley-write";
+static char __pyx_k_242[] = "custom-smiley-write: TODO";
+static PyObject *__pyx_kp_246;
+static PyObject *__pyx_kp_247;
+static PyObject *__pyx_kp_248;
+static char __pyx_k_243[] = "conversation";
+static char __pyx_k_244[] = "%s";
+static char __pyx_k_245[] = "custom-smiley-close\n";
+static char __pyx_k_246[] = "custom-smiley-close";
+static char __pyx_k_247[] = "custom-smiley-close";
+static char __pyx_k_248[] = "custom-smiley-close: TODO";
+static PyObject *__pyx_kp_252;
+static PyObject *__pyx_kp_253;
+static PyObject *__pyx_kp_254;
+static char __pyx_k_249[] = "conversation";
+static char __pyx_k_250[] = "%s";
+static char __pyx_k_251[] = "send-confirm\n";
+static char __pyx_k_252[] = "send-confirm";
+static char __pyx_k_253[] = "send-confirm";
+static char __pyx_k_254[] = "send-confirm: TODO";
+static PyObject *__pyx_kp_258;
+static PyObject *__pyx_kp_259;
+static PyObject *__pyx_kp_260;
+static char __pyx_k_255[] = "notify";
+static char __pyx_k_256[] = "%s";
+static char __pyx_k_257[] = "notify-message\n";
+static char __pyx_k_258[] = "notif-message";
+static char __pyx_k_259[] = "notify-message";
+static char __pyx_k_260[] = "notify-message: TODO";
+static PyObject *__pyx_kp_264;
+static PyObject *__pyx_kp_265;
+static PyObject *__pyx_kp_266;
+static char __pyx_k_261[] = "notify";
+static char __pyx_k_262[] = "%s";
+static char __pyx_k_263[] = "notify-email\n";
+static char __pyx_k_264[] = "notify-email";
+static char __pyx_k_265[] = "notify-email";
+static char __pyx_k_266[] = "notify-email: TODO";
+static PyObject *__pyx_kp_270;
+static PyObject *__pyx_kp_271;
+static PyObject *__pyx_kp_272;
+static char __pyx_k_267[] = "notify";
+static char __pyx_k_268[] = "%s";
+static char __pyx_k_269[] = "notify-emails\n";
+static char __pyx_k_270[] = "notify-emails";
+static char __pyx_k_271[] = "notify-emails";
+static char __pyx_k_272[] = "notify-emails: TODO";
+static PyObject *__pyx_kp_276;
+static PyObject *__pyx_kp_277;
+static PyObject *__pyx_kp_278;
+static char __pyx_k_273[] = "notify";
+static char __pyx_k_274[] = "%s";
+static char __pyx_k_275[] = "notify-formatted\n";
+static char __pyx_k_276[] = "notify-formatted";
+static char __pyx_k_277[] = "notify-formatted";
+static char __pyx_k_278[] = "notify-formatted: TODO";
+static PyObject *__pyx_kp_282;
+static PyObject *__pyx_kp_283;
+static PyObject *__pyx_kp_284;
+static char __pyx_k_279[] = "notify";
+static char __pyx_k_280[] = "%s";
+static char __pyx_k_281[] = "notify-searchresults\n";
+static char __pyx_k_282[] = "notify-searchresults";
+static char __pyx_k_283[] = "notify-searchresults";
+static char __pyx_k_284[] = "notify-searchresults: TODO";
+static PyObject *__pyx_kp_288;
+static PyObject *__pyx_kp_289;
+static PyObject *__pyx_kp_290;
+static char __pyx_k_285[] = "notify";
+static char __pyx_k_286[] = "%s";
+static char __pyx_k_287[] = "notify-searchresults-new-rows\n";
+static char __pyx_k_288[] = "notify-searchresults-new-rows";
+static char __pyx_k_289[] = "notify-searchresults-new-rows";
+static char __pyx_k_290[] = "notify-searchresults-new-rows: TODO";
+static PyObject *__pyx_kp_294;
+static PyObject *__pyx_kp_295;
+static PyObject *__pyx_kp_296;
+static char __pyx_k_291[] = "notify";
+static char __pyx_k_292[] = "%s";
+static char __pyx_k_293[] = "notify-userinfo\n";
+static char __pyx_k_294[] = "notify-userinfo";
+static char __pyx_k_295[] = "notify-userinfo";
+static char __pyx_k_296[] = "notify-userinfo: TODO";
+static PyObject *__pyx_kp_300;
+static PyObject *__pyx_kp_301;
+static PyObject *__pyx_kp_302;
+static char __pyx_k_297[] = "notify";
+static char __pyx_k_298[] = "%s";
+static char __pyx_k_299[] = "notify-uri\n";
+static char __pyx_k_300[] = "notify-uri";
+static char __pyx_k_301[] = "notify-uri";
+static char __pyx_k_302[] = "notify-uri: TODO";
+static PyObject *__pyx_kp_306;
+static PyObject *__pyx_kp_307;
+static PyObject *__pyx_kp_308;
+static char __pyx_k_303[] = "notify";
+static char __pyx_k_304[] = "%s";
+static char __pyx_k_305[] = "close-notify\n";
+static char __pyx_k_306[] = "close-notify";
+static char __pyx_k_307[] = "close-notify";
+static char __pyx_k_308[] = "close-notify: TODO";
+static PyObject *__pyx_kp_312;
+static PyObject *__pyx_kp_313;
+static PyObject *__pyx_kp_314;
+static char __pyx_k_309[] = "request";
+static char __pyx_k_310[] = "%s";
+static char __pyx_k_311[] = "request-input\n";
+static char __pyx_k_312[] = "request-input";
+static char __pyx_k_313[] = "request-input";
+static char __pyx_k_314[] = "request-input: TODO";
+static PyObject *__pyx_kp_318;
+static PyObject *__pyx_kp_319;
+static PyObject *__pyx_kp_320;
+static char __pyx_k_315[] = "request";
+static char __pyx_k_316[] = "%s";
+static char __pyx_k_317[] = "request-choice\n";
+static char __pyx_k_318[] = "request-choice";
+static char __pyx_k_319[] = "request-choice";
+static char __pyx_k_320[] = "request-choice: TODO";
+static PyObject *__pyx_kp_324;
+static PyObject *__pyx_kp_325;
+static PyObject *__pyx_kp_326;
+static char __pyx_k_321[] = "request";
+static char __pyx_k_322[] = "%s";
+static char __pyx_k_323[] = "request-action\n";
+static char __pyx_k_324[] = "request-action";
+static char __pyx_k_325[] = "request-action";
+static char __pyx_k_326[] = "request-action: TODo";
+static PyObject *__pyx_kp_330;
+static PyObject *__pyx_kp_331;
+static PyObject *__pyx_kp_332;
+static char __pyx_k_327[] = "request";
+static char __pyx_k_328[] = "%s";
+static char __pyx_k_329[] = "request-fields\n";
+static char __pyx_k_330[] = "request-fields";
+static char __pyx_k_331[] = "request-fields";
+static char __pyx_k_332[] = "request-fields: TODO";
+static PyObject *__pyx_kp_336;
+static PyObject *__pyx_kp_337;
+static PyObject *__pyx_kp_338;
+static char __pyx_k_333[] = "request";
+static char __pyx_k_334[] = "%s";
+static char __pyx_k_335[] = "request-file\n";
+static char __pyx_k_336[] = "request-file";
+static char __pyx_k_337[] = "request-file";
+static char __pyx_k_338[] = "request-file: TODO";
+static PyObject *__pyx_kp_342;
+static PyObject *__pyx_kp_343;
+static PyObject *__pyx_kp_344;
+static char __pyx_k_339[] = "request";
+static char __pyx_k_340[] = "%s";
+static char __pyx_k_341[] = "close-request\n";
+static char __pyx_k_342[] = "close-request";
+static char __pyx_k_343[] = "close-request";
+static char __pyx_k_344[] = "close-request: TODO";
+static PyObject *__pyx_kp_348;
+static PyObject *__pyx_kp_349;
+static PyObject *__pyx_kp_350;
+static char __pyx_k_345[] = "request";
+static char __pyx_k_346[] = "%s";
+static char __pyx_k_347[] = "request-folder\n";
+static char __pyx_k_348[] = "request-folder";
+static char __pyx_k_349[] = "request-folder";
+static char __pyx_k_350[] = "request-folder: TODO";
+static PyObject *__pyx_kp_351;
+static PyObject *__pyx_kp_352;
+static char __pyx_k_351[] = "signed-on";
+static char __pyx_k_352[] = "signed-on";
+static PyObject *__pyx_kp_353;
+static PyObject *__pyx_kp_354;
+static char __pyx_k_353[] = "signed-off";
+static char __pyx_k_354[] = "signed-off";
+static PyObject *__pyx_kp_355;
+static PyObject *__pyx_kp_356;
+static PyObject *__pyx_kp_357;
+static PyObject *__pyx_kp_358;
+static PyObject *__pyx_kp_359;
+static PyObject *__pyx_kp_360;
+static PyObject *__pyx_kp_361;
+static PyObject *__pyx_kp_362;
+static PyObject *__pyx_kp_363;
+static PyObject *__pyx_kp_364;
+static PyObject *__pyx_kp_365;
+static PyObject *__pyx_kp_366;
+static PyObject *__pyx_kp_367;
+static PyObject *__pyx_kp_368;
+static PyObject *__pyx_kp_369;
+static PyObject *__pyx_kp_370;
+static PyObject *__pyx_kp_371;
+static PyObject *__pyx_kp_372;
+static PyObject *__pyx_kp_373;
+static char __pyx_k_355[] = "Network error";
+static char __pyx_k_356[] = "Invalid username";
+static char __pyx_k_357[] = "Authentication failed";
+static char __pyx_k_358[] = "Authentication impossible";
+static char __pyx_k_359[] = "No SSL support";
+static char __pyx_k_360[] = "Encryption error";
+static char __pyx_k_361[] = "Name in use";
+static char __pyx_k_362[] = "Invalid settings";
+static char __pyx_k_363[] = "SSL certificate not provided";
+static char __pyx_k_364[] = "SSL certificate untrusted";
+static char __pyx_k_365[] = "SSL certificate expired";
+static char __pyx_k_366[] = "SSL certificate not activated";
+static char __pyx_k_367[] = "SSL certificate hostname mismatch";
+static char __pyx_k_368[] = "SSL certificate fingerprint mismatch";
+static char __pyx_k_369[] = "SSL certificate self signed";
+static char __pyx_k_370[] = "SSL certificate other error";
+static char __pyx_k_371[] = "Other error";
+static char __pyx_k_372[] = "connection-error";
+static char __pyx_k_373[] = "connection-error";
+static PyObject *__pyx_kp_374;
+static PyObject *__pyx_kp_375;
+static char __pyx_k_374[] = "buddy-signed-on";
+static char __pyx_k_375[] = "buddy-signed-on";
+static PyObject *__pyx_kp_376;
+static PyObject *__pyx_kp_377;
+static char __pyx_k_376[] = "buddy-signed-off";
+static char __pyx_k_377[] = "buddy-signed-off";
+static PyObject *__pyx_kp_378;
+static PyObject *__pyx_kp_379;
+static char __pyx_k_378[] = "receiving-im-msg";
+static char __pyx_k_379[] = "receiving-im-msg";
+static PyObject *__pyx_kp_380;
+static PyObject *__pyx_kp_381;
+static char __pyx_k_380[] = "jabber-receiving-xmlnode";
+static char __pyx_k_381[] = "jabber-receiving-xmlnode";
+static char __pyx_k_382[] = "core_ui_ops";
+static char __pyx_k_383[] = "%s";
+static char __pyx_k_384[] = "ui_prefs_init\n";
+static char __pyx_k_385[] = "/carman";
+static char __pyx_k_386[] = "core_ui_ops";
+static char __pyx_k_387[] = "%s";
+static char __pyx_k_388[] = "debug_ui_init\n";
+static char __pyx_k_389[] = "core_ui_ops";
+static char __pyx_k_390[] = "%s";
+static char __pyx_k_391[] = "ui_init\n";
+static char __pyx_k_392[] = "core_ui_ops";
+static char __pyx_k_393[] = "%s";
+static char __pyx_k_394[] = "quit\n";
+static char __pyx_k_395[] = "name";
+static char __pyx_k_396[] = "version";
+static char __pyx_k_397[] = "website";
+static char __pyx_k_398[] = "dev_website";
+static char __pyx_k_399[] = "main";
+static char __pyx_k_400[] = "%s";
+static char __pyx_k_401[] = "libpurple initialization failed.\n";
+static char __pyx_k_402[] = "main";
+static char __pyx_k_403[] = "%s";
+static char __pyx_k_404[] = "Another instance of libpurple is already running.\n";
+static PyObject *__pyx_kp_412;
+static PyObject *__pyx_kp_414;
+static PyObject *__pyx_kp_416;
+static PyObject *__pyx_kp_418;
+static PyObject *__pyx_kp_420;
+static PyObject *__pyx_kp_422;
+static PyObject *__pyx_kp_424;
+static char __pyx_k_411[] = "prpl-jabber";
+static char __pyx_k_412[] = "signed-on";
+static char __pyx_k_413[] = "signed-on";
+static char __pyx_k_414[] = "signed-off";
+static char __pyx_k_415[] = "signed-off";
+static char __pyx_k_416[] = "connection-error";
+static char __pyx_k_417[] = "connection-error";
+static char __pyx_k_418[] = "buddy-signed-on";
+static char __pyx_k_419[] = "buddy-signed-on";
+static char __pyx_k_420[] = "buddy-signed-off";
+static char __pyx_k_421[] = "buddy-signed-off";
+static char __pyx_k_422[] = "receiving-im-msg";
+static char __pyx_k_423[] = "receiving-im-msg";
+static char __pyx_k_424[] = "jabber-receiving-xmlnode";
+static char __pyx_k_425[] = "jabber-receiving-xmlnode";
+static char __pyx_k_426[] = "";
+static char __pyx_k_449[] = "";
+static char __pyx_k_450[] = "message";
+static char __pyx_k_454[] = "message";
+static char __pyx_k_455[] = "/purple/savedstatus/idleaway";
+static char __pyx_k_456[] = "message";
+static PyObject *__pyx_kp_457;
+static char __pyx_k_457[] = "utf-8";
+static char __pyx_k_458[] = "message";
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":31
+ * cdef void *c_request_authorize_user_data = NULL
+ * 
+ * def call_authorize_cb():             # <<<<<<<<<<<<<<
+ *     global c_request_authorize_authorize_cb
+ *     global c_request_authorize_deny_cb
+ */
+
+static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_call_authorize_cb(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  __pyx_self = __pyx_self;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":36
+ *     global c_request_authorize_user_data
+ * 
+ *     if c_request_authorize_authorize_cb:             # <<<<<<<<<<<<<<
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ */
+  __pyx_1 = (__pyx_v_6purple_c_request_authorize_authorize_cb != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":37
+ * 
+ *     if c_request_authorize_authorize_cb:
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ */
+    __pyx_v_6purple_c_request_authorize_authorize_cb(__pyx_v_6purple_c_request_authorize_user_data);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":38
+ *     if c_request_authorize_authorize_cb:
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":39
+ *         c_request_authorize_authorize_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = NULL
+ * 
+ */
+  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":40
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
+ * 
+ * def call_deny_cb():
+ */
+  __pyx_v_6purple_c_request_authorize_user_data = NULL;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":42
+ *     c_request_authorize_user_data = NULL
+ * 
+ * def call_deny_cb():             # <<<<<<<<<<<<<<
+ *     global c_request_authorize_authorize_cb
+ *     global c_request_authorize_deny_cb
+ */
+
+static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_6purple_call_deny_cb(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r;
+  int __pyx_1;
+  __pyx_self = __pyx_self;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":47
+ *     global c_request_authorize_user_data
+ * 
+ *     if c_request_authorize_deny_cb:             # <<<<<<<<<<<<<<
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ */
+  __pyx_1 = (__pyx_v_6purple_c_request_authorize_deny_cb != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":48
+ * 
+ *     if c_request_authorize_deny_cb:
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)             # <<<<<<<<<<<<<<
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ */
+    __pyx_v_6purple_c_request_authorize_deny_cb(__pyx_v_6purple_c_request_authorize_user_data);
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":49
+ *     if c_request_authorize_deny_cb:
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":50
+ *         c_request_authorize_deny_cb(c_request_authorize_user_data)
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = NULL
+ * 
+ */
+  __pyx_v_6purple_c_request_authorize_deny_cb = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":51
+ *     c_request_authorize_authorize_cb = NULL
+ *     c_request_authorize_deny_cb = NULL
+ *     c_request_authorize_user_data = NULL             # <<<<<<<<<<<<<<
+ * 
+ * cdef void notify_added(account.PurpleAccount *c_account, \
+ */
+  __pyx_v_6purple_c_request_authorize_user_data = NULL;
+
+  __pyx_r = Py_None; Py_INCREF(Py_None);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":53
+ *     c_request_authorize_user_data = NULL
+ * 
+ * cdef void notify_added(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message):
+ */
+
+static  void __pyx_f_6purple_notify_added(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":61
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")
+ */
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":63
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
+ */
+  purple_debug_info(__pyx_k_11, __pyx_k_12, __pyx_k_13);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":65
+ *     debug.purple_debug_info("account", "%s", "notify-added\n")
+ * 
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":66
+ * 
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":68
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if id:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":70
+ *         remote_alias = None
+ * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":71
+ * 
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":72
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ */
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":73
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":75
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":77
+ *         username = account.purple_account_get_username(c_account)
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":79
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":80
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":82
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("notify-added"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":84
+ *         message = None
+ * 
+ *     if account_cbs.has_key("notify-added"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_14);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_14);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":85
+ * 
+ *     if account_cbs.has_key("notify-added"):
+ *         (<object> account_cbs["notify-added"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_15); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":86
+ *     if account_cbs.has_key("notify-added"):
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), message)
+ * 
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":87
+ *         (<object> account_cbs["notify-added"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void status_changed(account.PurpleAccount *c_account, \
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.notify_added");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":89
+ *                 (username, protocol_id), message)
+ * 
+ * cdef void status_changed(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         status.PurpleStatus *c_status):
+ *     """
+ */
+
+static  void __pyx_f_6purple_status_changed(PurpleAccount *__pyx_v_c_account, PurpleStatus *__pyx_v_c_status) {
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_status_id;
+  PyObject *__pyx_v_status_name;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_status_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_status_name = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":94
+ *     This account's status changed.
+ *     """
+ *     debug.purple_debug_info("account", "%s", "status-changed\n")             # <<<<<<<<<<<<<<
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ */
+  purple_debug_info(__pyx_k_16, __pyx_k_17, __pyx_k_18);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":96
+ *     debug.purple_debug_info("account", "%s", "status-changed\n")
+ * 
+ *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_username);
+  __pyx_v_username = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":97
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     status_id = status.purple_status_get_id(c_status)
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":99
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     status_id = status.purple_status_get_id(c_status)             # <<<<<<<<<<<<<<
+ *     status_name = status.purple_status_get_name(c_status)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_id(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_status_id);
+  __pyx_v_status_id = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":100
+ * 
+ *     status_id = status.purple_status_get_id(c_status)
+ *     status_name = status.purple_status_get_name(c_status)             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("status-changed"):
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_status_get_name(__pyx_v_c_status)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_status_name);
+  __pyx_v_status_name = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":102
+ *     status_name = status.purple_status_get_name(c_status)
+ * 
+ *     if account_cbs.has_key("status-changed"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["status-changed"])( \
+ *                 (username, protocol_id), status_id, status_name)
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_19);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_19);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":103
+ * 
+ *     if account_cbs.has_key("status-changed"):
+ *         (<object> account_cbs["status-changed"])( \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), status_id, status_name)
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_20); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":104
+ *     if account_cbs.has_key("status-changed"):
+ *         (<object> account_cbs["status-changed"])( \
+ *                 (username, protocol_id), status_id, status_name)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add(account.PurpleAccount *c_account, \
+ */
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_protocol_id);
+    __pyx_2 = PyTuple_New(3); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_2, 0, ((PyObject *)__pyx_3));
+    Py_INCREF(__pyx_v_status_id);
+    PyTuple_SET_ITEM(__pyx_2, 1, __pyx_v_status_id);
+    Py_INCREF(__pyx_v_status_name);
+    PyTuple_SET_ITEM(__pyx_2, 2, __pyx_v_status_name);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.status_changed");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_status_id);
+  Py_DECREF(__pyx_v_status_name);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":106
+ *                 (username, protocol_id), status_id, status_name)
+ * 
+ * cdef void request_add(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message):
+ */
+
+static  void __pyx_f_6purple_request_add(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":113
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-add\n")
+ */
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":115
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-add\n")             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
+ */
+  purple_debug_info(__pyx_k_21, __pyx_k_22, __pyx_k_23);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":117
+ *     debug.purple_debug_info("account", "%s", "request-add\n")
+ * 
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":118
+ * 
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":120
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if id:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":122
+ *         remote_alias = None
+ * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":123
+ * 
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":124
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ */
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":125
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":127
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":129
+ *         username = account.purple_account_get_username(c_account)
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":131
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":132
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":134
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("request-add"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":136
+ *         message = None
+ * 
+ *     if account_cbs.has_key("request-add"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_24);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_24);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":137
+ * 
+ *     if account_cbs.has_key("request-add"):
+ *         (<object> account_cbs["request-add"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_25); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":138
+ *     if account_cbs.has_key("request-add"):
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), message)
+ * 
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":139
+ *         (<object> account_cbs["request-add"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), message)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_authorize(account.PurpleAccount *c_account, \
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_5 = PyTuple_New(3); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_5, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_5, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_message);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.request_add");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":141
+ *                 (username, protocol_id), message)
+ * 
+ * cdef void *request_authorize(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *remote_user, const_char *id, const_char *alias, \
+ *         const_char *c_message, glib.gboolean on_list, \
+ */
+
+static  void *__pyx_f_6purple_request_authorize(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_remote_user, const char *__pyx_v_id, const char *__pyx_v_alias, const char *__pyx_v_c_message, gboolean __pyx_v_on_list, PurpleAccountRequestAuthorizationCb __pyx_v_authorize_cb, PurpleAccountRequestAuthorizationCb __pyx_v_deny_cb, void *__pyx_v_user_data) {
+  PurpleConnection *__pyx_v_gc;
+  PyObject *__pyx_v_remote_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_message;
+  void *__pyx_r;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  PyObject *__pyx_7 = 0;
+  PyObject *__pyx_8 = 0;
+  __pyx_v_remote_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":154
+ *     """
+ *     cdef connection.PurpleConnection *gc = \
+ *             account.purple_account_get_connection(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-authorize\n")
+ */
+  __pyx_v_gc = purple_account_get_connection(__pyx_v_c_account);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":156
+ *             account.purple_account_get_connection(c_account)
+ * 
+ *     debug.purple_debug_info("account", "%s", "request-authorize\n")             # <<<<<<<<<<<<<<
+ * 
+ *     global c_request_authorize_authorize_cb
+ */
+  purple_debug_info(__pyx_k_26, __pyx_k_27, __pyx_k_28);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":162
+ *     global c_request_authorize_user_data
+ * 
+ *     c_request_authorize_authorize_cb = authorize_cb             # <<<<<<<<<<<<<<
+ *     c_request_authorize_deny_cb = deny_cb
+ *     c_request_authorize_user_data = user_data
+ */
+  __pyx_v_6purple_c_request_authorize_authorize_cb = __pyx_v_authorize_cb;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":163
+ * 
+ *     c_request_authorize_authorize_cb = authorize_cb
+ *     c_request_authorize_deny_cb = deny_cb             # <<<<<<<<<<<<<<
+ *     c_request_authorize_user_data = user_data
+ * 
+ */
+  __pyx_v_6purple_c_request_authorize_deny_cb = __pyx_v_deny_cb;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":164
+ *     c_request_authorize_authorize_cb = authorize_cb
+ *     c_request_authorize_deny_cb = deny_cb
+ *     c_request_authorize_user_data = user_data             # <<<<<<<<<<<<<<
+ * 
+ *     if alias:
+ */
+  __pyx_v_6purple_c_request_authorize_user_data = __pyx_v_user_data;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":166
+ *     c_request_authorize_user_data = user_data
+ * 
+ *     if alias:             # <<<<<<<<<<<<<<
+ *         remote_alias = <char *> alias
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":167
+ * 
+ *     if alias:
+ *         remote_alias = <char *> alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         remote_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_alias)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":169
+ *         remote_alias = <char *> alias
+ *     else:
+ *         remote_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if id:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_remote_alias);
+    __pyx_v_remote_alias = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":171
+ *         remote_alias = None
+ * 
+ *     if id:             # <<<<<<<<<<<<<<
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ */
+  __pyx_1 = (__pyx_v_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":172
+ * 
+ *     if id:
+ *         username = <char *> id             # <<<<<<<<<<<<<<
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":173
+ *     if id:
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:             # <<<<<<<<<<<<<<
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ */
+  __pyx_1 = (purple_connection_get_display_name(__pyx_v_gc) != NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":174
+ *         username = <char *> id
+ *     elif connection.purple_connection_get_display_name(gc) != NULL:
+ *         username = connection.purple_connection_get_display_name(gc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = account.purple_account_get_username(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_connection_get_display_name(__pyx_v_gc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":176
+ *         username = connection.purple_connection_get_display_name(gc)
+ *     else:
+ *         username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":178
+ *         username = account.purple_account_get_username(c_account)
+ * 
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":180
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":181
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":183
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("request-authorize"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":185
+ *         message = None
+ * 
+ *     if account_cbs.has_key("request-authorize"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_29);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_29);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":186
+ * 
+ *     if account_cbs.has_key("request-authorize"):
+ *         (<object> account_cbs["request-authorize"])( \             # <<<<<<<<<<<<<<
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_30); if (!__pyx_2) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":187
+ *     if account_cbs.has_key("request-authorize"):
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), \
+ *                 message, on_list, \
+ */
+    __pyx_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_remote_user)); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_4);
+    Py_INCREF(__pyx_v_remote_alias);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_remote_alias);
+    __pyx_4 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":188
+ *         (<object> account_cbs["request-authorize"])( \
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
+ *                 message, on_list, \
+ *                 call_authorize_cb, call_deny_cb)
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":189
+ *                 (<char *> remote_user, remote_alias), \
+ *                 (username, protocol_id), \
+ *                 message, on_list, \             # <<<<<<<<<<<<<<
+ *                 call_authorize_cb, call_deny_cb)
+ * 
+ */
+    __pyx_5 = PyInt_FromLong(__pyx_v_on_list); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":190
+ *                 (username, protocol_id), \
+ *                 message, on_list, \
+ *                 call_authorize_cb, call_deny_cb)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void close_account_request (void *ui_handle):
+ */
+    __pyx_6 = __Pyx_GetName(__pyx_m, __pyx_kp_call_authorize_cb); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_7 = __Pyx_GetName(__pyx_m, __pyx_kp_call_deny_cb); if (unlikely(!__pyx_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_8 = PyTuple_New(6); if (unlikely(!__pyx_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_8, 0, ((PyObject *)__pyx_3));
+    PyTuple_SET_ITEM(__pyx_8, 1, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_8, 2, __pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_8, 3, __pyx_5);
+    PyTuple_SET_ITEM(__pyx_8, 4, __pyx_6);
+    PyTuple_SET_ITEM(__pyx_8, 5, __pyx_7);
+    __pyx_3 = 0;
+    __pyx_4 = 0;
+    __pyx_5 = 0;
+    __pyx_6 = 0;
+    __pyx_7 = 0;
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_8), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_8)); __pyx_8 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  Py_XDECREF(__pyx_7);
+  Py_XDECREF(__pyx_8);
+  __Pyx_WriteUnraisable("purple.request_authorize");
+  __pyx_r = 0;
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_remote_alias);
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_message);
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":192
+ *                 call_authorize_cb, call_deny_cb)
+ * 
+ * cdef void close_account_request (void *ui_handle):             # <<<<<<<<<<<<<<
+ *     """
+ *     Close a pending request for authorization. ui_handle is a handle as
+ */
+
+static  void __pyx_f_6purple_close_account_request(void *__pyx_v_ui_handle) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":197
+ *     returned by request_authorize.
+ *     """
+ *     debug.purple_debug_info("account", "%s", "close-account-request\n")             # <<<<<<<<<<<<<<
+ * 
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
+ */
+  purple_debug_info(__pyx_k_31, __pyx_k_32, __pyx_k_33);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":199
+ *     debug.purple_debug_info("account", "%s", "close-account-request\n")
+ * 
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)             # <<<<<<<<<<<<<<
+ * 
+ *     if account_cbs.has_key("close-account-request"):
+ */
+  purple_request_close(PURPLE_REQUEST_ACTION, __pyx_v_ui_handle);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":201
+ *     request.purple_request_close(request.PURPLE_REQUEST_ACTION, ui_handle)
+ * 
+ *     if account_cbs.has_key("close-account-request"):             # <<<<<<<<<<<<<<
+ *         (<object> account_cbs["close-account-request"])()
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_34);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_34);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/account_cbs.pxd":202
+ * 
+ *     if account_cbs.has_key("close-account-request"):
+ *         (<object> account_cbs["close-account-request"])()             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_account_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_35); if (!__pyx_1) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.close_account_request");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":27
+ * blist_cbs = {}
+ * 
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
+ *     cdef char *c_name = NULL
+ */
+
+static  void __pyx_f_6purple___group_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleGroup *__pyx_v_group;
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_currentsize;
+  PyObject *__pyx_v_totalsize;
+  PyObject *__pyx_v_online;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_currentsize = Py_None; Py_INCREF(Py_None);
+  __pyx_v_totalsize = Py_None; Py_INCREF(Py_None);
+  __pyx_v_online = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":28
+ * 
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ * 
+ */
+  __pyx_v_group = ((PurpleGroup *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":29
+ * cdef void __group_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleGroup *group = <blist.PurpleGroup *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":31
+ *     cdef char *c_name = NULL
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_group_get_name(__pyx_v_group));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":32
+ * 
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":33
+ *     c_name = <char *> blist.purple_group_get_name(group)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":35
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":37
+ *         name = c_name
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)             # <<<<<<<<<<<<<<
+ *     totalsize = blist.purple_blist_get_group_size(group, True)
+ *     online = blist.purple_blist_get_group_online_count(group)
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 0)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_currentsize);
+  __pyx_v_currentsize = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":38
+ * 
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ *     totalsize = blist.purple_blist_get_group_size(group, True)             # <<<<<<<<<<<<<<
+ *     online = blist.purple_blist_get_group_online_count(group)
+ * 
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_size(__pyx_v_group, 1)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_totalsize);
+  __pyx_v_totalsize = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":39
+ *     currentsize = blist.purple_blist_get_group_size(group, False)
+ *     totalsize = blist.purple_blist_get_group_size(group, True)
+ *     online = blist.purple_blist_get_group_online_count(group)             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, name, totalsize, currentsize, online)
+ */
+  __pyx_2 = PyInt_FromLong(purple_blist_get_group_online_count(__pyx_v_group)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_online);
+  __pyx_v_online = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":41
+ *     online = blist.purple_blist_get_group_online_count(group)
+ * 
+ *     callback(node.type, name, totalsize, currentsize, online)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(5); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  Py_INCREF(__pyx_v_totalsize);
+  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_totalsize);
+  Py_INCREF(__pyx_v_currentsize);
+  PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_currentsize);
+  Py_INCREF(__pyx_v_online);
+  PyTuple_SET_ITEM(__pyx_3, 4, __pyx_v_online);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__group_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_currentsize);
+  Py_DECREF(__pyx_v_totalsize);
+  Py_DECREF(__pyx_v_online);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":43
+ *     callback(node.type, name, totalsize, currentsize, online)
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
+ *     cdef char *c_alias = NULL
+ */
+
+static  void __pyx_f_6purple___contact_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleContact *__pyx_v_contact;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":44
+ * 
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_contact = ((PurpleContact *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":45
+ * cdef void __contact_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleContact *contact = <blist.PurpleContact *>node
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":47
+ *     cdef char *c_alias = NULL
+ * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
+ */
+  __pyx_v_c_alias = ((char *)purple_contact_get_alias(__pyx_v_contact));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":48
+ * 
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":49
+ *     c_alias = <char *> blist.purple_contact_get_alias(contact)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":51
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":53
+ *         alias = c_alias
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \             # <<<<<<<<<<<<<<
+ *              contact.online)
+ * 
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyInt_FromLong(__pyx_v_contact->totalsize); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_4 = PyInt_FromLong(__pyx_v_contact->currentsize); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":54
+ * 
+ *     callback(node.type, alias, contact.totalsize, contact.currentsize, \
+ *              contact.online)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_5 = PyInt_FromLong(__pyx_v_contact->online); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_6 = PyTuple_New(5); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_6, 0, __pyx_2);
+  Py_INCREF(__pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_6, 1, __pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_6, 2, __pyx_3);
+  PyTuple_SET_ITEM(__pyx_6, 3, __pyx_4);
+  PyTuple_SET_ITEM(__pyx_6, 4, __pyx_5);
+  __pyx_2 = 0;
+  __pyx_3 = 0;
+  __pyx_4 = 0;
+  __pyx_5 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  __Pyx_WriteUnraisable("purple.__contact_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":56
+ *              contact.online)
+ * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL
+ */
+
+static  void __pyx_f_6purple___buddy_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleBuddy *__pyx_v_buddy;
+  char *__pyx_v_c_name;
+  char *__pyx_v_c_alias;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_alias;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":57
+ * 
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL
+ */
+  __pyx_v_buddy = ((PurpleBuddy *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":58
+ * cdef void __buddy_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_alias = NULL
+ * 
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":59
+ *     cdef blist.PurpleBuddy *buddy = <blist.PurpleBuddy *>node
+ *     cdef char *c_name = NULL
+ *     cdef char *c_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ */
+  __pyx_v_c_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":61
+ *     cdef char *c_alias = NULL
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_buddy_get_name(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":62
+ * 
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":63
+ *     c_name = <char *> blist.purple_buddy_get_name(buddy)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":65
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":67
+ *         name = c_name
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ *     if c_alias == NULL:
+ *         alias = None
+ */
+  __pyx_v_c_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":68
+ * 
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:             # <<<<<<<<<<<<<<
+ *         alias = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_alias == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":69
+ *     c_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ *     if c_alias == NULL:
+ *         alias = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         alias = c_alias
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":71
+ *         alias = None
+ *     else:
+ *         alias = c_alias             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, name, alias)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_alias);
+    __pyx_v_alias = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":73
+ *         alias = c_alias
+ * 
+ *     callback(node.type, name, alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(3); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  Py_INCREF(__pyx_v_alias);
+  PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_alias);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__buddy_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":75
+ *     callback(node.type, name, alias)
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
+ *     cdef char *c_name = NULL
+ */
+
+static  void __pyx_f_6purple___chat_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PurpleChat *__pyx_v_chat;
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":76
+ * 
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ * 
+ */
+  __pyx_v_chat = ((PurpleChat *)__pyx_v_node);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":77
+ * cdef void __chat_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     cdef blist.PurpleChat *chat = <blist.PurpleChat *>node
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":79
+ *     cdef char *c_name = NULL
+ * 
+ *     c_name = <char *> blist.purple_chat_get_name(chat)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_chat_get_name(__pyx_v_chat));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":80
+ * 
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":81
+ *     c_name = <char *> blist.purple_chat_get_name(chat)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":83
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     callback(node.type, name)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":85
+ *         name = c_name
+ * 
+ *     callback(node.type, name)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
+ */
+  __pyx_2 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+  Py_INCREF(__pyx_v_name);
+  PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_name);
+  __pyx_2 = 0;
+  __pyx_2 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.__chat_node_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":87
+ *     callback(node.type, name)
+ * 
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):             # <<<<<<<<<<<<<<
+ *     callback(node.type)
+ * 
+ */
+
+static  void __pyx_f_6purple___other_node_cb(PurpleBlistNode *__pyx_v_node, PyObject *__pyx_v_callback) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":88
+ * 
+ * cdef void __other_node_cb(blist.PurpleBlistNode *node, object callback):
+ *     callback(node.type)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void new_list(blist.PurpleBuddyList *list):
+ */
+  __pyx_1 = PyInt_FromLong(__pyx_v_node->type); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_1);
+  __pyx_1 = 0;
+  __pyx_1 = PyObject_Call(__pyx_v_callback, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  __Pyx_WriteUnraisable("purple.__other_node_cb");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":90
+ *     callback(node.type)
+ * 
+ * cdef void new_list(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
+ *     """
+ *     Sets UI-specific data on a buddy list.
+ */
+
+static  void __pyx_f_6purple_new_list(PurpleBuddyList *__pyx_v_list) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":94
+ *     Sets UI-specific data on a buddy list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("new-list"):
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
+ */
+  purple_debug_info(__pyx_k_36, __pyx_k_37, __pyx_k_38);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":95
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")
+ *     if blist_cbs.has_key("new-list"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_39);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_39);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":96
+ *     debug.purple_debug_info("blist", "%s", "new-list\n")
+ *     if blist_cbs.has_key("new-list"):
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void new_node(blist.PurpleBlistNode *node):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_40); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_41);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_41);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.new_list");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":98
+ *         (<object> blist_cbs["new-list"])("new-list: TODO")
+ * 
+ * cdef void new_node(blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
+ *     """
+ *     Sets UI-specific data on a node.
+ */
+
+static  void __pyx_f_6purple_new_node(PurpleBlistNode *__pyx_v_node) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":102
+ *     Sets UI-specific data on a node.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ */
+  purple_debug_info(__pyx_k_42, __pyx_k_43, __pyx_k_44);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":103
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")
+ *     if blist_cbs.has_key("new-node"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_45);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_45);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":104
+ *     debug.purple_debug_info("blist", "%s", "new-node\n")
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":105
+ *     if blist_cbs.has_key("new-node"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_46); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":106
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":107
+ *             __group_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_47); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":108
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":109
+ *             __contact_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_48); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":110
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":111
+ *             __buddy_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["new-node"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_49); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":112
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["new-node"])
+ * 
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":113
+ *             __chat_node_cb(node, blist_cbs["new-node"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["new-node"])             # <<<<<<<<<<<<<<
+ * 
+ * cdef void show(blist.PurpleBuddyList *list):
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_50); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+    __pyx_L4:;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.new_node");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":115
+ *             __other_node_cb(node, blist_cbs["new-node"])
+ * 
+ * cdef void show(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
+ *     """
+ *     The core will call this when it's finished doing its core stuff.
+ */
+
+static  void __pyx_f_6purple_show(PurpleBuddyList *__pyx_v_list) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":119
+ *     The core will call this when it's finished doing its core stuff.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "show\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("show"):
+ *         (<object> blist_cbs["show"])("show: TODO")
+ */
+  purple_debug_info(__pyx_k_51, __pyx_k_52, __pyx_k_53);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":120
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "show\n")
+ *     if blist_cbs.has_key("show"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["show"])("show: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_54);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_54);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":121
+ *     debug.purple_debug_info("blist", "%s", "show\n")
+ *     if blist_cbs.has_key("show"):
+ *         (<object> blist_cbs["show"])("show: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_55); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_56);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_56);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.show");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":123
+ *         (<object> blist_cbs["show"])("show: TODO")
+ * 
+ * cdef void update(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
+ *     """
+ *     This will update a node in the buddy list.
+ */
+
+static  void __pyx_f_6purple_update(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":127
+ *     This will update a node in the buddy list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "update\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ */
+  purple_debug_info(__pyx_k_57, __pyx_k_58, __pyx_k_59);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":128
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "update\n")
+ *     if blist_cbs.has_key("update"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_60);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_60);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":129
+ *     debug.purple_debug_info("blist", "%s", "update\n")
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":130
+ *     if blist_cbs.has_key("update"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_61); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":131
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":132
+ *             __group_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_62); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":133
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":134
+ *             __contact_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_63); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":135
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":136
+ *             __buddy_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["update"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_64); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":137
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["update"])
+ * 
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":138
+ *             __chat_node_cb(node, blist_cbs["update"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["update"])             # <<<<<<<<<<<<<<
+ * 
+ * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_65); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+    __pyx_L4:;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.update");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":140
+ *             __other_node_cb(node, blist_cbs["update"])
+ * 
+ * cdef void remove(blist.PurpleBuddyList *list, blist.PurpleBlistNode *node):             # <<<<<<<<<<<<<<
+ *     """
+ *     This removes a node from the list.
+ */
+
+static  void __pyx_f_6purple_remove(PurpleBuddyList *__pyx_v_list, PurpleBlistNode *__pyx_v_node) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":144
+ *     This removes a node from the list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "remove\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ */
+  purple_debug_info(__pyx_k_66, __pyx_k_67, __pyx_k_68);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":145
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "remove\n")
+ *     if blist_cbs.has_key("remove"):             # <<<<<<<<<<<<<<
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_69);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_69);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":146
+ *     debug.purple_debug_info("blist", "%s", "remove\n")
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:             # <<<<<<<<<<<<<<
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_GROUP_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":147
+ *     if blist_cbs.has_key("remove"):
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_70); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___group_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":148
+ *         if node.type == blist.PURPLE_BLIST_GROUP_NODE:
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:             # <<<<<<<<<<<<<<
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CONTACT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":149
+ *             __group_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_71); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___contact_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":150
+ *         elif node.type == blist.PURPLE_BLIST_CONTACT_NODE:
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:             # <<<<<<<<<<<<<<
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_BUDDY_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":151
+ *             __contact_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_3 = PyObject_GetItem(__pyx_1, __pyx_kp_72); if (!__pyx_3) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      __pyx_f_6purple___buddy_node_cb(__pyx_v_node, __pyx_3);
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":152
+ *         elif node.type == blist.PURPLE_BLIST_BUDDY_NODE:
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:             # <<<<<<<<<<<<<<
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_CHAT_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":153
+ *             __buddy_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["remove"])
+ */
+      __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_73); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      __pyx_f_6purple___chat_node_cb(__pyx_v_node, __pyx_1);
+      Py_DECREF(__pyx_1); __pyx_1 = 0;
+      goto __pyx_L4;
+    }
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":154
+ *         elif node.type == blist.PURPLE_BLIST_CHAT_NODE:
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:             # <<<<<<<<<<<<<<
+ *             __other_node_cb(node, blist_cbs["remove"])
+ * 
+ */
+    __pyx_4 = (__pyx_v_node->type == PURPLE_BLIST_OTHER_NODE);
+    if (__pyx_4) {
+
+      /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":155
+ *             __chat_node_cb(node, blist_cbs["remove"])
+ *         elif node.type == blist.PURPLE_BLIST_OTHER_NODE:
+ *             __other_node_cb(node, blist_cbs["remove"])             # <<<<<<<<<<<<<<
+ * 
+ * cdef void destroy(blist.PurpleBuddyList *list):
+ */
+      __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_74); if (!__pyx_2) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      Py_DECREF(__pyx_3); __pyx_3 = 0;
+      __pyx_f_6purple___other_node_cb(__pyx_v_node, __pyx_2);
+      Py_DECREF(__pyx_2); __pyx_2 = 0;
+      goto __pyx_L4;
+    }
+    __pyx_L4:;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.remove");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":157
+ *             __other_node_cb(node, blist_cbs["remove"])
+ * 
+ * cdef void destroy(blist.PurpleBuddyList *list):             # <<<<<<<<<<<<<<
+ *     """
+ *     When the list gets destroyed, this gets called to destroy the UI.
+ */
+
+static  void __pyx_f_6purple_destroy(PurpleBuddyList *__pyx_v_list) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":161
+ *     When the list gets destroyed, this gets called to destroy the UI.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("destroy"):
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
+ */
+  purple_debug_info(__pyx_k_75, __pyx_k_76, __pyx_k_77);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":162
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")
+ *     if blist_cbs.has_key("destroy"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_78);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_78);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":163
+ *     debug.purple_debug_info("blist", "%s", "destroy\n")
+ *     if blist_cbs.has_key("destroy"):
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_79); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_80);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_80);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.destroy");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":165
+ *         (<object> blist_cbs["destroy"])("destroy: TODO")
+ * 
+ * cdef void set_visible(blist.PurpleBuddyList *list, glib.gboolean show):             # <<<<<<<<<<<<<<
+ *     """
+ *     Hides or unhides the buddy list.
+ */
+
+static  void __pyx_f_6purple_set_visible(PurpleBuddyList *__pyx_v_list, gboolean __pyx_v_show) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":169
+ *     Hides or unhides the buddy list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("set-visible"):
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+ */
+  purple_debug_info(__pyx_k_81, __pyx_k_82, __pyx_k_83);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":170
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")
+ *     if blist_cbs.has_key("set-visible"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_84);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_84);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":171
+ *     debug.purple_debug_info("blist", "%s", "set-visible\n")
+ *     if blist_cbs.has_key("set-visible"):
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add_buddy(account.PurpleAccount *c_account, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_85); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_86);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_86);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.set_visible");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":173
+ *         (<object> blist_cbs["set-visible"])("set-visible: TODO")
+ * 
+ * cdef void request_add_buddy(account.PurpleAccount *c_account, \             # <<<<<<<<<<<<<<
+ *         const_char *c_buddy_username, const_char *c_buddy_group, \
+ *         const_char *c_buddy_alias):
+ */
+
+static  void __pyx_f_6purple_request_add_buddy(PurpleAccount *__pyx_v_c_account, const char *__pyx_v_c_buddy_username, const char *__pyx_v_c_buddy_group, const char *__pyx_v_c_buddy_alias) {
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_buddy_username;
+  PyObject *__pyx_v_buddy_group;
+  PyObject *__pyx_v_buddy_alias;
+  PyObject *__pyx_1 = 0;
+  int __pyx_2;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_group = Py_None; Py_INCREF(Py_None);
+  __pyx_v_buddy_alias = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":180
+ *     list.
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")             # <<<<<<<<<<<<<<
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ */
+  purple_debug_info(__pyx_k_87, __pyx_k_88, __pyx_k_89);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":182
+ *     debug.purple_debug_info("blist", "%s", "request-add-buddy\n")
+ * 
+ *     username = account.purple_account_get_username(c_account)             # <<<<<<<<<<<<<<
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_username(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_username);
+  __pyx_v_username = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":183
+ * 
+ *     username = account.purple_account_get_username(c_account)
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_username:
+ */
+  __pyx_1 = __Pyx_PyBytes_FromString(purple_account_get_protocol_id(__pyx_v_c_account)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_protocol_id);
+  __pyx_v_protocol_id = __pyx_1;
+  __pyx_1 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":185
+ *     protocol_id = account.purple_account_get_protocol_id(c_account)
+ * 
+ *     if c_buddy_username:             # <<<<<<<<<<<<<<
+ *         buddy_username = <char *> c_buddy_username
+ *     else:
+ */
+  __pyx_2 = (__pyx_v_c_buddy_username != 0);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":186
+ * 
+ *     if c_buddy_username:
+ *         buddy_username = <char *> c_buddy_username             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_username = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_username)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_buddy_username);
+    __pyx_v_buddy_username = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":188
+ *         buddy_username = <char *> c_buddy_username
+ *     else:
+ *         buddy_username = None             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_group:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_username);
+    __pyx_v_buddy_username = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":190
+ *         buddy_username = None
+ * 
+ *     if c_buddy_group:             # <<<<<<<<<<<<<<
+ *         buddy_group = <char *> c_buddy_group
+ *     else:
+ */
+  __pyx_2 = (__pyx_v_c_buddy_group != 0);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":191
+ * 
+ *     if c_buddy_group:
+ *         buddy_group = <char *> c_buddy_group             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_group = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_group)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_buddy_group);
+    __pyx_v_buddy_group = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":193
+ *         buddy_group = <char *> c_buddy_group
+ *     else:
+ *         buddy_group = None             # <<<<<<<<<<<<<<
+ * 
+ *     if c_buddy_alias:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_group);
+    __pyx_v_buddy_group = Py_None;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":195
+ *         buddy_group = None
+ * 
+ *     if c_buddy_alias:             # <<<<<<<<<<<<<<
+ *         buddy_alias = <char *> c_buddy_alias
+ *     else:
+ */
+  __pyx_2 = (__pyx_v_c_buddy_alias != 0);
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":196
+ * 
+ *     if c_buddy_alias:
+ *         buddy_alias = <char *> c_buddy_alias             # <<<<<<<<<<<<<<
+ *     else:
+ *         buddy_alias = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_buddy_alias)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_buddy_alias);
+    __pyx_v_buddy_alias = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":198
+ *         buddy_alias = <char *> c_buddy_alias
+ *     else:
+ *         buddy_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if blist_cbs.has_key("request-add-buddy"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_buddy_alias);
+    __pyx_v_buddy_alias = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":200
+ *         buddy_alias = None
+ * 
+ *     if blist_cbs.has_key("request-add-buddy"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_90);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_90);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_2 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_2 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_2) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":201
+ * 
+ *     if blist_cbs.has_key("request-add-buddy"):
+ *         (<object> blist_cbs["request-add-buddy"])( \             # <<<<<<<<<<<<<<
+ *                 (username, protocol_id), \
+ *                 buddy_username, buddy_group, buddy_alias)
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_kp_91); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":202
+ *     if blist_cbs.has_key("request-add-buddy"):
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \             # <<<<<<<<<<<<<<
+ *                 buddy_username, buddy_group, buddy_alias)
+ * 
+ */
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":203
+ *         (<object> blist_cbs["request-add-buddy"])( \
+ *                 (username, protocol_id), \
+ *                 buddy_username, buddy_group, buddy_alias)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add_chat(account.PurpleAccount *acc, \
+ */
+    __pyx_3 = PyTuple_New(4); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, ((PyObject *)__pyx_4));
+    Py_INCREF(__pyx_v_buddy_username);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_v_buddy_username);
+    Py_INCREF(__pyx_v_buddy_group);
+    PyTuple_SET_ITEM(__pyx_3, 2, __pyx_v_buddy_group);
+    Py_INCREF(__pyx_v_buddy_alias);
+    PyTuple_SET_ITEM(__pyx_3, 3, __pyx_v_buddy_alias);
+    __pyx_4 = 0;
+    __pyx_4 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_4); __pyx_4 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.request_add_buddy");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+  Py_DECREF(__pyx_v_buddy_username);
+  Py_DECREF(__pyx_v_buddy_group);
+  Py_DECREF(__pyx_v_buddy_alias);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":205
+ *                 buddy_username, buddy_group, buddy_alias)
+ * 
+ * cdef void request_add_chat(account.PurpleAccount *acc, \             # <<<<<<<<<<<<<<
+ *         blist.PurpleGroup *group, const_char *alias, const_char *name):
+ *     """
+ */
+
+static  void __pyx_f_6purple_request_add_chat(PurpleAccount *__pyx_v_acc, PurpleGroup *__pyx_v_group, const char *__pyx_v_alias, const char *__pyx_v_name) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":210
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ */
+  purple_debug_info(__pyx_k_92, __pyx_k_93, __pyx_k_94);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":211
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
+ *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_95);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_95);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":212
+ *     debug.purple_debug_info("blist", "%s", "request-add-chat\n")
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void request_add_group():
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_96); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_97);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_97);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_add_chat");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":214
+ *         (<object> blist_cbs["request-add-chat"])("request-add-chat: TODO")
+ * 
+ * cdef void request_add_group():             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void __pyx_f_6purple_request_add_group(void) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":218
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")             # <<<<<<<<<<<<<<
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
+ */
+  purple_debug_info(__pyx_k_98, __pyx_k_99, __pyx_k_100);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":219
+ *     """
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
+ *     if blist_cbs.has_key("request-add-chat"):             # <<<<<<<<<<<<<<
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_101);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_101);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/blist_cbs.pxd":220
+ *     debug.purple_debug_info("blist", "%s", "request-add-group\n")
+ *     if blist_cbs.has_key("request-add-chat"):
+ *         (<object>blist_cbs["request-add-chat"])("request-add-group: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_blist_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_102); if (!__pyx_1) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_103);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_103);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_add_group");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":30
+ *     ctypedef int size_t
+ * 
+ * cdef void connect_progress(connection.PurpleConnection *gc, const_char *text, \             # <<<<<<<<<<<<<<
+ *         size_t step, size_t step_count):
+ *     """
+ */
+
+static  void __pyx_f_6purple_connect_progress(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text, size_t __pyx_v_step, size_t __pyx_v_step_count) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  PyObject *__pyx_6 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":37
+ *     reached (which might be displayed as a progress bar).
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("connect-progress"):
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+ */
+  purple_debug_info(__pyx_k_104, __pyx_k_105, __pyx_k_106);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":38
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
+ *     if connection_cbs.has_key("connect-progress"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_107);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_107);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 38; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":39
+ *     debug.purple_debug_info("connection", "%s", "connect-progress\n")
+ *     if connection_cbs.has_key("connect-progress"):
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void connected(connection.PurpleConnection *gc):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_108); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyInt_FromLong(__pyx_v_step); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_5 = PyInt_FromLong(__pyx_v_step_count); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_6 = PyTuple_New(3); if (unlikely(!__pyx_6)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_6, 0, __pyx_3);
+    PyTuple_SET_ITEM(__pyx_6, 1, __pyx_2);
+    PyTuple_SET_ITEM(__pyx_6, 2, __pyx_5);
+    __pyx_3 = 0;
+    __pyx_2 = 0;
+    __pyx_5 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_6), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_6)); __pyx_6 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_5);
+  Py_XDECREF(__pyx_6);
+  __Pyx_WriteUnraisable("purple.connect_progress");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":41
+ *         (<object> connection_cbs["connect-progress"])(<char *> text, step, step_count)
+ * 
+ * cdef void connected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a connection is established (just before the signed-on signal).
+ */
+
+static  void __pyx_f_6purple_connected(PurpleConnection *__pyx_v_gc) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":45
+ *     Called when a connection is established (just before the signed-on signal).
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("connected"):
+ *         (<object> connection_cbs["connected"])("connected: TODO")
+ */
+  purple_debug_info(__pyx_k_109, __pyx_k_110, __pyx_k_111);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":46
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "connected\n")
+ *     if connection_cbs.has_key("connected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["connected"])("connected: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_112);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_112);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":47
+ *     debug.purple_debug_info("connection", "%s", "connected\n")
+ *     if connection_cbs.has_key("connected"):
+ *         (<object> connection_cbs["connected"])("connected: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void disconnected(connection.PurpleConnection *gc):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_113); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_114);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_114);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.connected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":49
+ *         (<object> connection_cbs["connected"])("connected: TODO")
+ * 
+ * cdef void disconnected(connection.PurpleConnection *gc):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a connection is ended (between the signing-off and signed-off
+ */
+
+static  void __pyx_f_6purple_disconnected(PurpleConnection *__pyx_v_gc) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":54
+ *     signal).
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("disconnected"):
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
+ */
+  purple_debug_info(__pyx_k_115, __pyx_k_116, __pyx_k_117);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":55
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")
+ *     if connection_cbs.has_key("disconnected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_118);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_118);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":56
+ *     debug.purple_debug_info("connection", "%s", "disconnected\n")
+ *     if connection_cbs.has_key("disconnected"):
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void notice(connection.PurpleConnection *gc, const_char *text):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_119); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_120);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_120);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.disconnected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":58
+ *         (<object> connection_cbs["disconnected"])("disconnected: TODO")
+ * 
+ * cdef void notice(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
+ *     """
+ *     Used to display connection-specific notices. (Pidgin's Gtk user interface
+ */
+
+static  void __pyx_f_6purple_notice(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":64
+ *     operation, is not used by any of the protocols shipped with libpurple.)
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "notice\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("notice"):
+ *         (<object> connection_cbs["notice"])("notice: TODO")
+ */
+  purple_debug_info(__pyx_k_121, __pyx_k_122, __pyx_k_123);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":65
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "notice\n")
+ *     if connection_cbs.has_key("notice"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["notice"])("notice: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_124);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_124);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":66
+ *     debug.purple_debug_info("connection", "%s", "notice\n")
+ *     if connection_cbs.has_key("notice"):
+ *         (<object> connection_cbs["notice"])("notice: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_125); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_126);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_126);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notice");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":68
+ *         (<object> connection_cbs["notice"])("notice: TODO")
+ * 
+ * cdef void report_disconnect(connection.PurpleConnection *gc, const_char *text):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when an error causes a connection to be disconnected.
+ */
+
+static  void __pyx_f_6purple_report_disconnect(PurpleConnection *__pyx_v_gc, const char *__pyx_v_text) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":77
+ *                 PurpleConnectionUiOps.report_disconnect_reason.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("report-disconnect"):
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+ */
+  purple_debug_info(__pyx_k_127, __pyx_k_128, __pyx_k_129);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":78
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
+ *     if connection_cbs.has_key("report-disconnect"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_130);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_130);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":79
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect\n")
+ *     if connection_cbs.has_key("report-disconnect"):
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void network_connected():
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_131); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_text)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_2, 0, __pyx_3);
+    __pyx_3 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.report_disconnect");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":81
+ *         (<object> connection_cbs["report-disconnect"])(<char *> text)
+ * 
+ * cdef void network_connected():             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when libpurple discovers that the computer's network connection
+ */
+
+static  void __pyx_f_6purple_network_connected(void) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":87
+ *     it uses Win32's network change notification infrastructure.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("network-connected"):
+ *         (<object> connection_cbs["network-connected"])()
+ */
+  purple_debug_info(__pyx_k_132, __pyx_k_133, __pyx_k_134);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":88
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")
+ *     if connection_cbs.has_key("network-connected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["network-connected"])()
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_135);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_135);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":89
+ *     debug.purple_debug_info("connection", "%s", "network-connected\n")
+ *     if connection_cbs.has_key("network-connected"):
+ *         (<object> connection_cbs["network-connected"])()             # <<<<<<<<<<<<<<
+ * 
+ * cdef void network_disconnected():
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_136); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.network_connected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":91
+ *         (<object> connection_cbs["network-connected"])()
+ * 
+ * cdef void network_disconnected():             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when libpurple discovers that the computer's network connection
+ */
+
+static  void __pyx_f_6purple_network_disconnected(void) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":96
+ *     has gone away.
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")             # <<<<<<<<<<<<<<
+ *     if connection_cbs.has_key("network-disconnected"):
+ *         (<object> connection_cbs["network-disconnected"])()
+ */
+  purple_debug_info(__pyx_k_137, __pyx_k_138, __pyx_k_139);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":97
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")
+ *     if connection_cbs.has_key("network-disconnected"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["network-disconnected"])()
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_140);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_140);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":98
+ *     debug.purple_debug_info("connection", "%s", "network-disconnected\n")
+ *     if connection_cbs.has_key("network-disconnected"):
+ *         (<object> connection_cbs["network-disconnected"])()             # <<<<<<<<<<<<<<
+ * 
+ * cdef void report_disconnect_reason(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_141); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.network_disconnected");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":100
+ *         (<object> connection_cbs["network-disconnected"])()
+ * 
+ * cdef void report_disconnect_reason(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         connection.PurpleConnectionError reason, const_char *c_text):
+ *     """
+ */
+
+static  void __pyx_f_6purple_report_disconnect_reason(PurpleConnection *__pyx_v_gc, PurpleConnectionError __pyx_v_reason, const char *__pyx_v_c_text) {
+  PyObject *__pyx_v_reason_string;
+  PyObject *__pyx_v_text;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  char *__pyx_5;
+  __pyx_v_reason_string = Py_None; Py_INCREF(Py_None);
+  __pyx_v_text = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":114
+ *     @since 2.3.0
+ *     """
+ *     debug.purple_debug_info("connection", "%s", "report-disconnect-reason\n")             # <<<<<<<<<<<<<<
+ * 
+ *     reason_string = {
+ */
+  purple_debug_info(__pyx_k_142, __pyx_k_143, __pyx_k_144);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":133
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',
+ *         16: 'Other error' }[reason]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_text:
+ */
+  __pyx_1 = PyDict_New(); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":117
+ * 
+ *     reason_string = {
+ *         0: 'Network error',             # <<<<<<<<<<<<<<
+ *         1: 'Invalid username',
+ *         2: 'Authentication failed',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_0, __pyx_kp_145) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":118
+ *     reason_string = {
+ *         0: 'Network error',
+ *         1: 'Invalid username',             # <<<<<<<<<<<<<<
+ *         2: 'Authentication failed',
+ *         3: 'Authentication impossible',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_1, __pyx_kp_146) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":119
+ *         0: 'Network error',
+ *         1: 'Invalid username',
+ *         2: 'Authentication failed',             # <<<<<<<<<<<<<<
+ *         3: 'Authentication impossible',
+ *         4: 'No SSL support',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_2, __pyx_kp_147) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":120
+ *         1: 'Invalid username',
+ *         2: 'Authentication failed',
+ *         3: 'Authentication impossible',             # <<<<<<<<<<<<<<
+ *         4: 'No SSL support',
+ *         5: 'Encryption error',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_3, __pyx_kp_148) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":121
+ *         2: 'Authentication failed',
+ *         3: 'Authentication impossible',
+ *         4: 'No SSL support',             # <<<<<<<<<<<<<<
+ *         5: 'Encryption error',
+ *         6: 'Name in use',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_4, __pyx_kp_149) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":122
+ *         3: 'Authentication impossible',
+ *         4: 'No SSL support',
+ *         5: 'Encryption error',             # <<<<<<<<<<<<<<
+ *         6: 'Name in use',
+ *         7: 'Invalid settings',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_5, __pyx_kp_150) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":123
+ *         4: 'No SSL support',
+ *         5: 'Encryption error',
+ *         6: 'Name in use',             # <<<<<<<<<<<<<<
+ *         7: 'Invalid settings',
+ *         8: 'Certificate not provided',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_6, __pyx_kp_151) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":124
+ *         5: 'Encryption error',
+ *         6: 'Name in use',
+ *         7: 'Invalid settings',             # <<<<<<<<<<<<<<
+ *         8: 'Certificate not provided',
+ *         9: 'Certificate untrusted',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_7, __pyx_kp_152) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":125
+ *         6: 'Name in use',
+ *         7: 'Invalid settings',
+ *         8: 'Certificate not provided',             # <<<<<<<<<<<<<<
+ *         9: 'Certificate untrusted',
+ *         10: 'Certificate expired',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_8, __pyx_kp_153) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":126
+ *         7: 'Invalid settings',
+ *         8: 'Certificate not provided',
+ *         9: 'Certificate untrusted',             # <<<<<<<<<<<<<<
+ *         10: 'Certificate expired',
+ *         11: 'Certificate not activated',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_9, __pyx_kp_154) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":127
+ *         8: 'Certificate not provided',
+ *         9: 'Certificate untrusted',
+ *         10: 'Certificate expired',             # <<<<<<<<<<<<<<
+ *         11: 'Certificate not activated',
+ *         12: 'Certificate hostname mismatch',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_10, __pyx_kp_155) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":128
+ *         9: 'Certificate untrusted',
+ *         10: 'Certificate expired',
+ *         11: 'Certificate not activated',             # <<<<<<<<<<<<<<
+ *         12: 'Certificate hostname mismatch',
+ *         13: 'Certificate fingerprint mismatch',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_11, __pyx_kp_156) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":129
+ *         10: 'Certificate expired',
+ *         11: 'Certificate not activated',
+ *         12: 'Certificate hostname mismatch',             # <<<<<<<<<<<<<<
+ *         13: 'Certificate fingerprint mismatch',
+ *         14: 'Certificate self signed',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_12, __pyx_kp_157) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":130
+ *         11: 'Certificate not activated',
+ *         12: 'Certificate hostname mismatch',
+ *         13: 'Certificate fingerprint mismatch',             # <<<<<<<<<<<<<<
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_13, __pyx_kp_158) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":131
+ *         12: 'Certificate hostname mismatch',
+ *         13: 'Certificate fingerprint mismatch',
+ *         14: 'Certificate self signed',             # <<<<<<<<<<<<<<
+ *         15: 'Certificate error (other)',
+ *         16: 'Other error' }[reason]
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_14, __pyx_kp_159) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":132
+ *         13: 'Certificate fingerprint mismatch',
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',             # <<<<<<<<<<<<<<
+ *         16: 'Other error' }[reason]
+ * 
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_15, __pyx_kp_160) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":133
+ *         14: 'Certificate self signed',
+ *         15: 'Certificate error (other)',
+ *         16: 'Other error' }[reason]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_text:
+ */
+  if (PyDict_SetItem(__pyx_1, __pyx_int_16, __pyx_kp_161) < 0) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyInt_FromLong(__pyx_v_reason); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetItem(((PyObject *)__pyx_1), __pyx_2); if (!__pyx_3) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(__pyx_v_reason_string);
+  __pyx_v_reason_string = __pyx_3;
+  __pyx_3 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":135
+ *         16: 'Other error' }[reason]
+ * 
+ *     if c_text:             # <<<<<<<<<<<<<<
+ *         text = <char *> c_text
+ *     else:
+ */
+  __pyx_4 = (__pyx_v_c_text != 0);
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":136
+ * 
+ *     if c_text:
+ *         text = <char *> c_text             # <<<<<<<<<<<<<<
+ *     else:
+ *         text = None
+ */
+    __pyx_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_text)); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_text);
+    __pyx_v_text = __pyx_1;
+    __pyx_1 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":138
+ *         text = <char *> c_text
+ *     else:
+ *         text = None             # <<<<<<<<<<<<<<
+ * 
+ *     if connection_cbs.has_key("report-disconnect-reason"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_text);
+    __pyx_v_text = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":140
+ *         text = None
+ * 
+ *     if connection_cbs.has_key("report-disconnect-reason"):             # <<<<<<<<<<<<<<
+ *         (<object> connection_cbs["report-disconnect-reason"])(reason_string, <char *> text)
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_162);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_162);
+  __pyx_2 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_2); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/connection_cbs.pxd":141
+ * 
+ *     if connection_cbs.has_key("report-disconnect-reason"):
+ *         (<object> connection_cbs["report-disconnect-reason"])(reason_string, <char *> text)             # <<<<<<<<<<<<<<
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_connection_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_3, __pyx_kp_163); if (!__pyx_1) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_5 = __Pyx_PyBytes_AsString(__pyx_v_text); if (unlikely((!__pyx_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_5)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_reason_string);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_v_reason_string);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_2);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.report_disconnect_reason");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_reason_string);
+  Py_DECREF(__pyx_v_text);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":29
+ * conversation_cbs = {}
+ * 
+ * cdef void create_conversation(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called when a conv is created (but before the conversation-created
+ */
+
+static  void __pyx_f_6purple_create_conversation(PurpleConversation *__pyx_v_conv) {
+  char *__pyx_v_c_name;
+  PyObject *__pyx_v_name;
+  PyObject *__pyx_v_type;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_name = Py_None; Py_INCREF(Py_None);
+  __pyx_v_type = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":34
+ *     signal is emitted).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "create-conversation\n")             # <<<<<<<<<<<<<<
+ *     cdef char *c_name = NULL
+ * 
+ */
+  purple_debug_info(__pyx_k_164, __pyx_k_165, __pyx_k_166);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":35
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "create-conversation\n")
+ *     cdef char *c_name = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)
+ */
+  __pyx_v_c_name = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":37
+ *     cdef char *c_name = NULL
+ * 
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)             # <<<<<<<<<<<<<<
+ *     if c_name == NULL:
+ *         name = None
+ */
+  __pyx_v_c_name = ((char *)purple_conversation_get_name(__pyx_v_conv));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":38
+ * 
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)
+ *     if c_name == NULL:             # <<<<<<<<<<<<<<
+ *         name = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_name == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":39
+ *     c_name = <char *> conversation.purple_conversation_get_name(conv)
+ *     if c_name == NULL:
+ *         name = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         name = c_name
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":41
+ *         name = None
+ *     else:
+ *         name = c_name             # <<<<<<<<<<<<<<
+ * 
+ *     type = conversation.purple_conversation_get_type(conv)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_name); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_name);
+    __pyx_v_name = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":43
+ *         name = c_name
+ * 
+ *     type = conversation.purple_conversation_get_type(conv)             # <<<<<<<<<<<<<<
+ * 
+ *     if conversation_cbs.has_key("create-conversation"):
+ */
+  __pyx_2 = PyInt_FromLong(purple_conversation_get_type(__pyx_v_conv)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 43; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_type);
+  __pyx_v_type = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":45
+ *     type = conversation.purple_conversation_get_type(conv)
+ * 
+ *     if conversation_cbs.has_key("create-conversation"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["create-conversation"])(name, type)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_167);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_167);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":46
+ * 
+ *     if conversation_cbs.has_key("create-conversation"):
+ *         (<object> conversation_cbs["create-conversation"])(name, type)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void destroy_conversation(conversation.PurpleConversation *conv):
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_168); if (!__pyx_2) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_name);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_name);
+    Py_INCREF(__pyx_v_type);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_type);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.create_conversation");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_name);
+  Py_DECREF(__pyx_v_type);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":48
+ *         (<object> conversation_cbs["create-conversation"])(name, type)
+ * 
+ * cdef void destroy_conversation(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     Called just before a conv is freed.
+ */
+
+static  void __pyx_f_6purple_destroy_conversation(PurpleConversation *__pyx_v_conv) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":52
+ *     Called just before a conv is freed.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("destroy-conversation"):
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+ */
+  purple_debug_info(__pyx_k_169, __pyx_k_170, __pyx_k_171);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":53
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")
+ *     if conversation_cbs.has_key("destroy-conversation"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_172);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_172);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":54
+ *     debug.purple_debug_info("conversation", "%s", "destroy-conversation\n")
+ *     if conversation_cbs.has_key("destroy-conversation"):
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void write_chat(conversation.PurpleConversation *conv, const_char *who, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_173); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_174);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_174);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.destroy_conversation");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":56
+ *         (<object> conversation_cbs["destroy-conversation"])("destroy-conversation: TODO")
+ * 
+ * cdef void write_chat(conversation.PurpleConversation *conv, const_char *who, \             # <<<<<<<<<<<<<<
+ *         const_char *message, conversation.PurpleMessageFlags flags, \
+ *         time_t mtime):
+ */
+
+static  void __pyx_f_6purple_write_chat(PurpleConversation *__pyx_v_conv, const char *__pyx_v_who, const char *__pyx_v_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":64
+ *     @see purple_conv_chat_write()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-chat\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("write-chat"):
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ */
+  purple_debug_info(__pyx_k_175, __pyx_k_176, __pyx_k_177);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":65
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-chat\n")
+ *     if conversation_cbs.has_key("write-chat"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_178);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_178);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":66
+ *     debug.purple_debug_info("conversation", "%s", "write-chat\n")
+ *     if conversation_cbs.has_key("write-chat"):
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void write_im(conversation.PurpleConversation *conv, const_char *who, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_179); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_180);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_180);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.write_chat");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":68
+ *         (<object> conversation_cbs["write-chat"])("write-chat: TODO")
+ * 
+ * cdef void write_im(conversation.PurpleConversation *conv, const_char *who, \             # <<<<<<<<<<<<<<
+ *         const_char *c_message, conversation.PurpleMessageFlags flags, \
+ *         time_t mtime):
+ */
+
+static  void __pyx_f_6purple_write_im(PurpleConversation *__pyx_v_conv, const char *__pyx_v_who, const char *__pyx_v_c_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
+  PurpleAccount *__pyx_v_acc;
+  PurpleBuddy *__pyx_v_buddy;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_sender_alias;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_sender;
+  PyObject *__pyx_v_sender_alias;
+  PyObject *__pyx_v_message;
+  PyObject *__pyx_v_flag;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_sender = Py_None; Py_INCREF(Py_None);
+  __pyx_v_sender_alias = Py_None; Py_INCREF(Py_None);
+  __pyx_v_message = Py_None; Py_INCREF(Py_None);
+  __pyx_v_flag = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":76
+ *     @see purple_conv_im_write()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-im\n")             # <<<<<<<<<<<<<<
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ */
+  purple_debug_info(__pyx_k_181, __pyx_k_182, __pyx_k_183);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":77
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-im\n")
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)             # <<<<<<<<<<<<<<
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ *     cdef char *c_username = NULL
+ */
+  __pyx_v_acc = purple_conversation_get_account(__pyx_v_conv);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":78
+ *     debug.purple_debug_info("conversation", "%s", "write-im\n")
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
+ *     cdef blist.PurpleBuddy *buddy = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_sender_alias = NULL
+ */
+  __pyx_v_buddy = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":79
+ *     cdef account.PurpleAccount *acc = conversation.purple_conversation_get_account(conv)
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_sender_alias = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":80
+ *     cdef blist.PurpleBuddy *buddy = NULL
+ *     cdef char *c_username = NULL
+ *     cdef char *c_sender_alias = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_sender_alias = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":82
+ *     cdef char *c_sender_alias = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username:
+ *         username = c_username
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":83
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:             # <<<<<<<<<<<<<<
+ *         username = c_username
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":84
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:
+ *         username = c_username             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":86
+ *         username = c_username
+ *     else:
+ *         username = None             # <<<<<<<<<<<<<<
+ * 
+ *     if who == NULL:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":88
+ *         username = None
+ * 
+ *     if who == NULL:             # <<<<<<<<<<<<<<
+ *         who = conversation.purple_conversation_get_name(conv)
+ * 
+ */
+  __pyx_1 = (__pyx_v_who == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":89
+ * 
+ *     if who == NULL:
+ *         who = conversation.purple_conversation_get_name(conv)             # <<<<<<<<<<<<<<
+ * 
+ *     sender = <char *> who
+ */
+    __pyx_v_who = purple_conversation_get_name(__pyx_v_conv);
+    goto __pyx_L4;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":91
+ *         who = conversation.purple_conversation_get_name(conv)
+ * 
+ *     sender = <char *> who             # <<<<<<<<<<<<<<
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)
+ *     if buddy:
+ */
+  __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_who)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_v_sender);
+  __pyx_v_sender = __pyx_2;
+  __pyx_2 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":92
+ * 
+ *     sender = <char *> who
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)             # <<<<<<<<<<<<<<
+ *     if buddy:
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ */
+  __pyx_v_buddy = purple_find_buddy(__pyx_v_acc, ((char *)__pyx_v_who));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":93
+ *     sender = <char *> who
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)
+ *     if buddy:             # <<<<<<<<<<<<<<
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ * 
+ */
+  __pyx_1 = (__pyx_v_buddy != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":94
+ *     buddy = blist.purple_find_buddy(acc, <char *> who)
+ *     if buddy:
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)             # <<<<<<<<<<<<<<
+ * 
+ *     if c_sender_alias:
+ */
+    __pyx_v_c_sender_alias = ((char *)purple_buddy_get_alias_only(__pyx_v_buddy));
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":96
+ *         c_sender_alias = <char *> blist.purple_buddy_get_alias_only(buddy)
+ * 
+ *     if c_sender_alias:             # <<<<<<<<<<<<<<
+ *         sender_alias = unicode(c_sender_alias, 'utf-8')
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_sender_alias != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":97
+ * 
+ *     if c_sender_alias:
+ *         sender_alias = unicode(c_sender_alias, 'utf-8')             # <<<<<<<<<<<<<<
+ *     else:
+ *         sender_alias = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_sender_alias); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_3 = PyTuple_New(2); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_2);
+    Py_INCREF(__pyx_kp_184);
+    PyTuple_SET_ITEM(__pyx_3, 1, __pyx_kp_184);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyUnicode_Type)), ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_v_sender_alias);
+    __pyx_v_sender_alias = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":99
+ *         sender_alias = unicode(c_sender_alias, 'utf-8')
+ *     else:
+ *         sender_alias = None             # <<<<<<<<<<<<<<
+ * 
+ *     if c_message:
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_sender_alias);
+    __pyx_v_sender_alias = Py_None;
+  }
+  __pyx_L6:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":101
+ *         sender_alias = None
+ * 
+ *     if c_message:             # <<<<<<<<<<<<<<
+ *         message = <char *> c_message
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_message != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":102
+ * 
+ *     if c_message:
+ *         message = <char *> c_message             # <<<<<<<<<<<<<<
+ *     else:
+ *         message = None
+ */
+    __pyx_3 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_message)); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = __pyx_3;
+    __pyx_3 = 0;
+    goto __pyx_L7;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":104
+ *         message = <char *> c_message
+ *     else:
+ *         message = None             # <<<<<<<<<<<<<<
+ * 
+ *     # FIXME: Maybe we need add more purple flags in the future
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_message);
+    __pyx_v_message = Py_None;
+  }
+  __pyx_L7:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":107
+ * 
+ *     # FIXME: Maybe we need add more purple flags in the future
+ *     if flags & conversation.PURPLE_MESSAGE_SEND:             # <<<<<<<<<<<<<<
+ *         flag = "SEND"
+ *     else:
+ */
+  __pyx_4 = (__pyx_v_flags & PURPLE_MESSAGE_SEND);
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":108
+ *     # FIXME: Maybe we need add more purple flags in the future
+ *     if flags & conversation.PURPLE_MESSAGE_SEND:
+ *         flag = "SEND"             # <<<<<<<<<<<<<<
+ *     else:
+ *         flag = "RECV"
+ */
+    Py_INCREF(__pyx_kp_185);
+    Py_DECREF(__pyx_v_flag);
+    __pyx_v_flag = __pyx_kp_185;
+    goto __pyx_L8;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":110
+ *         flag = "SEND"
+ *     else:
+ *         flag = "RECV"             # <<<<<<<<<<<<<<
+ * 
+ *     if conversation_cbs.has_key("write-im"):
+ */
+    Py_INCREF(__pyx_kp_186);
+    Py_DECREF(__pyx_v_flag);
+    __pyx_v_flag = __pyx_kp_186;
+  }
+  __pyx_L8:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":112
+ *         flag = "RECV"
+ * 
+ *     if conversation_cbs.has_key("write-im"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["write-im"])(username, sender, \
+ *                             sender_alias, message, flag)
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_187);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_187);
+  __pyx_5 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":113
+ * 
+ *     if conversation_cbs.has_key("write-im"):
+ *         (<object> conversation_cbs["write-im"])(username, sender, \             # <<<<<<<<<<<<<<
+ *                             sender_alias, message, flag)
+ * 
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_188); if (!__pyx_2) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":114
+ *     if conversation_cbs.has_key("write-im"):
+ *         (<object> conversation_cbs["write-im"])(username, sender, \
+ *                             sender_alias, message, flag)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void write_conv(conversation.PurpleConversation *conv, const_char *name, \
+ */
+    __pyx_5 = PyTuple_New(5); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_5, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_sender);
+    PyTuple_SET_ITEM(__pyx_5, 1, __pyx_v_sender);
+    Py_INCREF(__pyx_v_sender_alias);
+    PyTuple_SET_ITEM(__pyx_5, 2, __pyx_v_sender_alias);
+    Py_INCREF(__pyx_v_message);
+    PyTuple_SET_ITEM(__pyx_5, 3, __pyx_v_message);
+    Py_INCREF(__pyx_v_flag);
+    PyTuple_SET_ITEM(__pyx_5, 4, __pyx_v_flag);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_5), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_5)); __pyx_5 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L9;
+  }
+  __pyx_L9:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_5);
+  __Pyx_WriteUnraisable("purple.write_im");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_sender);
+  Py_DECREF(__pyx_v_sender_alias);
+  Py_DECREF(__pyx_v_message);
+  Py_DECREF(__pyx_v_flag);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":116
+ *                             sender_alias, message, flag)
+ * 
+ * cdef void write_conv(conversation.PurpleConversation *conv, const_char *name, \             # <<<<<<<<<<<<<<
+ *         const_char *alias, const_char *message, \
+ *         conversation.PurpleMessageFlags flags, time_t mtime):
+ */
+
+static  void __pyx_f_6purple_write_conv(PurpleConversation *__pyx_v_conv, const char *__pyx_v_name, const char *__pyx_v_alias, const char *__pyx_v_message, PurpleMessageFlags __pyx_v_flags, time_t __pyx_v_mtime) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":127
+ *     @see purple_conversation_write()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-conv\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("write-conv"):
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")
+ */
+  purple_debug_info(__pyx_k_189, __pyx_k_190, __pyx_k_191);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":128
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "write-conv\n")
+ *     if conversation_cbs.has_key("write-conv"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_192);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_192);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":129
+ *     debug.purple_debug_info("conversation", "%s", "write-conv\n")
+ *     if conversation_cbs.has_key("write-conv"):
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_add_users(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_193); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_194);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_194);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.write_conv");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":131
+ *         (<object> conversation_cbs["write-conv"])("write-conv: TODO")
+ * 
+ * cdef void chat_add_users(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         glib.GList *cbuddies, glib.gboolean new_arrivals):
+ *     """
+ */
+
+static  void __pyx_f_6purple_chat_add_users(PurpleConversation *__pyx_v_conv, GList *__pyx_v_cbuddies, gboolean __pyx_v_new_arrivals) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":141
+ *     @see purple_conv_chat_add_users()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-add-users\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-add-users"):
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")
+ */
+  purple_debug_info(__pyx_k_195, __pyx_k_196, __pyx_k_197);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":142
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-add-users\n")
+ *     if conversation_cbs.has_key("chat-add-users"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_198);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_198);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":143
+ *     debug.purple_debug_info("conversation", "%s", "chat-add-users\n")
+ *     if conversation_cbs.has_key("chat-add-users"):
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_rename_user(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_199); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_200);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_200);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_add_users");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":145
+ *         (<object> conversation_cbs["chat-add-users"])("chat-add-users: TODO")
+ * 
+ * cdef void chat_rename_user(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *old_name, const_char *new_name,
+ *         const_char *new_alias):
+ */
+
+static  void __pyx_f_6purple_chat_rename_user(PurpleConversation *__pyx_v_conv, const char *__pyx_v_old_name, const char *__pyx_v_new_name, const char *__pyx_v_new_alias) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":154
+ *     @see purple_conv_chat_rename_user()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-rename-user\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-rename-user"):
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")
+ */
+  purple_debug_info(__pyx_k_201, __pyx_k_202, __pyx_k_203);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":155
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-rename-user\n")
+ *     if conversation_cbs.has_key("chat-rename-user"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_204);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_204);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":156
+ *     debug.purple_debug_info("conversation", "%s", "chat-rename-user\n")
+ *     if conversation_cbs.has_key("chat-rename-user"):
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_remove_users(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_205); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_206);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_206);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_rename_user");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":158
+ *         (<object> conversation_cbs["chat-rename-user"])("chat-rename-user: TODO")
+ * 
+ * cdef void chat_remove_users(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         glib.GList *users):
+ *     """
+ */
+
+static  void __pyx_f_6purple_chat_remove_users(PurpleConversation *__pyx_v_conv, GList *__pyx_v_users) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":164
+ *     @param  users  A GList of const char *s.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-remove-users\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-remove-users"):
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")
+ */
+  purple_debug_info(__pyx_k_207, __pyx_k_208, __pyx_k_209);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":165
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-remove-users\n")
+ *     if conversation_cbs.has_key("chat-remove-users"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_210);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_210);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":166
+ *     debug.purple_debug_info("conversation", "%s", "chat-remove-users\n")
+ *     if conversation_cbs.has_key("chat-remove-users"):
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void chat_update_user(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_211); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_212);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_212);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_remove_users");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":168
+ *         (<object> conversation_cbs["chat-remove-users"])("chat-remove-users: TODO")
+ * 
+ * cdef void chat_update_user(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *user):
+ *     """
+ */
+
+static  void __pyx_f_6purple_chat_update_user(PurpleConversation *__pyx_v_conv, const char *__pyx_v_user) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":174
+ *     @see purple_conv_chat_user_set_flags()
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-update-user\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("chat-update-user"):
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")
+ */
+  purple_debug_info(__pyx_k_213, __pyx_k_214, __pyx_k_215);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":175
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "chat-update-user\n")
+ *     if conversation_cbs.has_key("chat-update-user"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_216);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_216);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":176
+ *     debug.purple_debug_info("conversation", "%s", "chat-update-user\n")
+ *     if conversation_cbs.has_key("chat-update-user"):
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void present(conversation.PurpleConversation *conv):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_217); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_218);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_218);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.chat_update_user");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":178
+ *         (<object> conversation_cbs["chat-update-user"])("chat-update-user: TODO")
+ * 
+ * cdef void present(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     Present this conversation to the user; for example, by displaying the IM
+ */
+
+static  void __pyx_f_6purple_present(PurpleConversation *__pyx_v_conv) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":183
+ *     dialog.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "present\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("present"):
+ *         (<object> conversation_cbs["present"])("present: TODO")
+ */
+  purple_debug_info(__pyx_k_219, __pyx_k_220, __pyx_k_221);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":184
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "present\n")
+ *     if conversation_cbs.has_key("present"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["present"])("present: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_222);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_222);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":185
+ *     debug.purple_debug_info("conversation", "%s", "present\n")
+ *     if conversation_cbs.has_key("present"):
+ *         (<object> conversation_cbs["present"])("present: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef glib.gboolean has_focus(conversation.PurpleConversation *conv):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_223); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_224);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_224);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.present");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":187
+ *         (<object> conversation_cbs["present"])("present: TODO")
+ * 
+ * cdef glib.gboolean has_focus(conversation.PurpleConversation *conv):             # <<<<<<<<<<<<<<
+ *     """
+ *     If this UI has a concept of focus (as in a windowing system) and this
+ */
+
+static  gboolean __pyx_f_6purple_has_focus(PurpleConversation *__pyx_v_conv) {
+  gboolean __pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":192
+ *     conversation has the focus, return TRUE; otherwise, return FALSE.
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "has-focus\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("has-focus"):
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")
+ */
+  purple_debug_info(__pyx_k_225, __pyx_k_226, __pyx_k_227);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":193
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "has-focus\n")
+ *     if conversation_cbs.has_key("has-focus"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")
+ *     return False
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_228);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_228);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 193; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":194
+ *     debug.purple_debug_info("conversation", "%s", "has-focus\n")
+ *     if conversation_cbs.has_key("has-focus"):
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")             # <<<<<<<<<<<<<<
+ *     return False
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_229); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_230);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_230);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":195
+ *     if conversation_cbs.has_key("has-focus"):
+ *         (<object> conversation_cbs["has-focus"])("has-focus: TODO")
+ *     return False             # <<<<<<<<<<<<<<
+ * 
+ * cdef glib.gboolean custom_smiley_add(conversation.PurpleConversation *conv, \
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.has_focus");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":197
+ *     return False
+ * 
+ * cdef glib.gboolean custom_smiley_add(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *smile, glib.gboolean remote):
+ *     """
+ */
+
+static  gboolean __pyx_f_6purple_custom_smiley_add(PurpleConversation *__pyx_v_conv, const char *__pyx_v_smile, gboolean __pyx_v_remote) {
+  gboolean __pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":202
+ *     Custom smileys (add).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-add\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("custom-smiley-add"):
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")
+ */
+  purple_debug_info(__pyx_k_231, __pyx_k_232, __pyx_k_233);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":203
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-add\n")
+ *     if conversation_cbs.has_key("custom-smiley-add"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")
+ *     return False
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_234);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_234);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":204
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-add\n")
+ *     if conversation_cbs.has_key("custom-smiley-add"):
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")             # <<<<<<<<<<<<<<
+ *     return False
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_235); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_236);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_236);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":205
+ *     if conversation_cbs.has_key("custom-smiley-add"):
+ *         (<object> conversation_cbs["custom-smiley-add"])("custom-smiley-add: TODO")
+ *     return False             # <<<<<<<<<<<<<<
+ * 
+ * cdef void custom_smiley_write(conversation.PurpleConversation *conv, \
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.custom_smiley_add");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":207
+ *     return False
+ * 
+ * cdef void custom_smiley_write(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *smile, const_guchar *data, glib.gsize size):
+ *     """
+ */
+
+static  void __pyx_f_6purple_custom_smiley_write(PurpleConversation *__pyx_v_conv, const char *__pyx_v_smile, const guchar *__pyx_v_data, gsize __pyx_v_size) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":212
+ *     Custom smileys (write).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-write\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("custom-smiley-write"):
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")
+ */
+  purple_debug_info(__pyx_k_237, __pyx_k_238, __pyx_k_239);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":213
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-write\n")
+ *     if conversation_cbs.has_key("custom-smiley-write"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_240);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_240);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":214
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-write\n")
+ *     if conversation_cbs.has_key("custom-smiley-write"):
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void custom_smiley_close(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_241); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_242);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_242);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.custom_smiley_write");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":216
+ *         (<object> conversation_cbs["custom-smiley-write"])("custom-smiley-write: TODO")
+ * 
+ * cdef void custom_smiley_close(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *smile):
+ *     """
+ */
+
+static  void __pyx_f_6purple_custom_smiley_close(PurpleConversation *__pyx_v_conv, const char *__pyx_v_smile) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":221
+ *     Custom smileys (close).
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-close\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("custom-smiley-close"):
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")
+ */
+  purple_debug_info(__pyx_k_243, __pyx_k_244, __pyx_k_245);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":222
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-close\n")
+ *     if conversation_cbs.has_key("custom-smiley-close"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_246);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_246);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":223
+ *     debug.purple_debug_info("conversation", "%s", "custom-smiley-close\n")
+ *     if conversation_cbs.has_key("custom-smiley-close"):
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void send_confirm(conversation.PurpleConversation *conv, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_247); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_248);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_248);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.custom_smiley_close");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":225
+ *         (<object> conversation_cbs["custom-smiley-close"])("custom-smiley-close: TODO")
+ * 
+ * cdef void send_confirm(conversation.PurpleConversation *conv, \             # <<<<<<<<<<<<<<
+ *         const_char *message):
+ *     """
+ */
+
+static  void __pyx_f_6purple_send_confirm(PurpleConversation *__pyx_v_conv, const char *__pyx_v_message) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":232
+ *     is NULL, libpurple will fall back to using purple_request_action().
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "send-confirm\n")             # <<<<<<<<<<<<<<
+ *     if conversation_cbs.has_key("send-confirm"):
+ *         (<object> conversation_cbs["send-confirm"])("send-confirm: TODO")
+ */
+  purple_debug_info(__pyx_k_249, __pyx_k_250, __pyx_k_251);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":233
+ *     """
+ *     debug.purple_debug_info("conversation", "%s", "send-confirm\n")
+ *     if conversation_cbs.has_key("send-confirm"):             # <<<<<<<<<<<<<<
+ *         (<object> conversation_cbs["send-confirm"])("send-confirm: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_252);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_252);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/conversation_cbs.pxd":234
+ *     debug.purple_debug_info("conversation", "%s", "send-confirm\n")
+ *     if conversation_cbs.has_key("send-confirm"):
+ *         (<object> conversation_cbs["send-confirm"])("send-confirm: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_conversation_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_253); if (!__pyx_1) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_254);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_254);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.send_confirm");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":28
+ * notify_cbs = {}
+ * 
+ * cdef void *notify_message(notify.PurpleNotifyMsgType type, \             # <<<<<<<<<<<<<<
+ *         const_char *title, const_char *primary, const_char *secondary):
+ *     """
+ */
+
+static  void *__pyx_f_6purple_notify_message(PurpleNotifyMsgType __pyx_v_type, const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":33
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-message\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notif-message"):
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")
+ */
+  purple_debug_info(__pyx_k_255, __pyx_k_256, __pyx_k_257);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":34
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-message\n")
+ *     if notify_cbs.has_key("notif-message"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_258);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_258);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 34; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":35
+ *     debug.purple_debug_info("notify", "%s", "notify-message\n")
+ *     if notify_cbs.has_key("notif-message"):
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_email(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_259); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_260);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_260);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_message");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":37
+ *         (<object> notify_cbs["notify-message"])("notify-message: TODO")
+ * 
+ * cdef void *notify_email(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         const_char *subject, const_char *_from, const_char *to, \
+ *         const_char *url):
+ */
+
+static  void *__pyx_f_6purple_notify_email(PurpleConnection *__pyx_v_gc, const char *__pyx_v_subject, const char *__pyx_v__from, const char *__pyx_v_to, const char *__pyx_v_url) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":43
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-email\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-email"):
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")
+ */
+  purple_debug_info(__pyx_k_261, __pyx_k_262, __pyx_k_263);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":44
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-email\n")
+ *     if notify_cbs.has_key("notify-email"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_264);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_264);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":45
+ *     debug.purple_debug_info("notify", "%s", "notify-email\n")
+ *     if notify_cbs.has_key("notify-email"):
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_emails(connection.PurpleConnection *gc, size_t count, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_265); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_266);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_266);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 45; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_email");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":47
+ *         (<object> notify_cbs["notify-email"])("notify-email: TODO")
+ * 
+ * cdef void *notify_emails(connection.PurpleConnection *gc, size_t count, \             # <<<<<<<<<<<<<<
+ *         glib.gboolean detailed, const_char **subjects, \
+ *         const_char **froms, const_char **tos, const_char **urls):
+ */
+
+static  void *__pyx_f_6purple_notify_emails(PurpleConnection *__pyx_v_gc, size_t __pyx_v_count, gboolean __pyx_v_detailed, const char **__pyx_v_subjects, const char **__pyx_v_froms, const char **__pyx_v_tos, const char **__pyx_v_urls) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":53
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-emails\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-emails"):
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")
+ */
+  purple_debug_info(__pyx_k_267, __pyx_k_268, __pyx_k_269);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":54
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-emails\n")
+ *     if notify_cbs.has_key("notify-emails"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_270);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_270);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":55
+ *     debug.purple_debug_info("notify", "%s", "notify-emails\n")
+ *     if notify_cbs.has_key("notify-emails"):
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_formatted(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_271); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_272);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_272);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_emails");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":57
+ *         (<object> notify_cbs["notify-emails"])("notify-emails: TODO")
+ * 
+ * cdef void *notify_formatted(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, const_char *text):
+ *     """
+ */
+
+static  void *__pyx_f_6purple_notify_formatted(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, const char *__pyx_v_text) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":62
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-formatted\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-formatted"):
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")
+ */
+  purple_debug_info(__pyx_k_273, __pyx_k_274, __pyx_k_275);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":63
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-formatted\n")
+ *     if notify_cbs.has_key("notify-formatted"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_276);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_276);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":64
+ *     debug.purple_debug_info("notify", "%s", "notify-formatted\n")
+ *     if notify_cbs.has_key("notify-formatted"):
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_searchresults(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_277); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_278);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_278);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_formatted");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":66
+ *         (<object> notify_cbs["notify-formatted"])("notify-formatted: TODO")
+ * 
+ * cdef void *notify_searchresults(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         const_char *title, const_char *primary, const_char *secondary, \
+ *         notify.PurpleNotifySearchResults *results, glib.gpointer user_data):
+ */
+
+static  void *__pyx_f_6purple_notify_searchresults(PurpleConnection *__pyx_v_gc, const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, PurpleNotifySearchResults *__pyx_v_results, gpointer __pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":72
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-searchresults"):
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")
+ */
+  purple_debug_info(__pyx_k_279, __pyx_k_280, __pyx_k_281);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":73
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults\n")
+ *     if notify_cbs.has_key("notify-searchresults"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_282);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_282);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":74
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults\n")
+ *     if notify_cbs.has_key("notify-searchresults"):
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void notify_searchresults_new_rows(connection.PurpleConnection *gc, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_283); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_284);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_284);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_searchresults");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":76
+ *         (<object> notify_cbs["notify-searchresults"])("notify-searchresults: TODO")
+ * 
+ * cdef void notify_searchresults_new_rows(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         notify.PurpleNotifySearchResults *results, void *data):
+ *     """
+ */
+
+static  void __pyx_f_6purple_notify_searchresults_new_rows(PurpleConnection *__pyx_v_gc, PurpleNotifySearchResults *__pyx_v_results, void *__pyx_v_data) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":81
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults-new-rows\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-searchresults-new-rows"):
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")
+ */
+  purple_debug_info(__pyx_k_285, __pyx_k_286, __pyx_k_287);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":82
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults-new-rows\n")
+ *     if notify_cbs.has_key("notify-searchresults-new-rows"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_288);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_288);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":83
+ *     debug.purple_debug_info("notify", "%s", "notify-searchresults-new-rows\n")
+ *     if notify_cbs.has_key("notify-searchresults-new-rows"):
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_userinfo(connection.PurpleConnection *gc, const_char *who, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_289); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_290);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_290);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_searchresults_new_rows");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":85
+ *         (<object> notify_cbs["notify-searchresults-new-rows"])("notify-searchresults-new-rows: TODO")
+ * 
+ * cdef void *notify_userinfo(connection.PurpleConnection *gc, const_char *who, \             # <<<<<<<<<<<<<<
+ *         notify.PurpleNotifyUserInfo *user_info):
+ *     """
+ */
+
+static  void *__pyx_f_6purple_notify_userinfo(PurpleConnection *__pyx_v_gc, const char *__pyx_v_who, PurpleNotifyUserInfo *__pyx_v_user_info) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":90
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-userinfo\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-userinfo"):
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")
+ */
+  purple_debug_info(__pyx_k_291, __pyx_k_292, __pyx_k_293);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":91
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-userinfo\n")
+ *     if notify_cbs.has_key("notify-userinfo"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_294);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_294);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":92
+ *     debug.purple_debug_info("notify", "%s", "notify-userinfo\n")
+ *     if notify_cbs.has_key("notify-userinfo"):
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *notify_uri(const_char *uri):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_295); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_296);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_296);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_userinfo");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":94
+ *         (<object> notify_cbs["notify-userinfo"])("notify-userinfo: TODO")
+ * 
+ * cdef void *notify_uri(const_char *uri):             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void *__pyx_f_6purple_notify_uri(const char *__pyx_v_uri) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":98
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-uri\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("notify-uri"):
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")
+ */
+  purple_debug_info(__pyx_k_297, __pyx_k_298, __pyx_k_299);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":99
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "notify-uri\n")
+ *     if notify_cbs.has_key("notify-uri"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_300);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_300);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":100
+ *     debug.purple_debug_info("notify", "%s", "notify-uri\n")
+ *     if notify_cbs.has_key("notify-uri"):
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void close_notify(notify.PurpleNotifyType type, void *ui_handle):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_301); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_302);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_302);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.notify_uri");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":102
+ *         (<object> notify_cbs["notify-uri"])("notify-uri: TODO")
+ * 
+ * cdef void close_notify(notify.PurpleNotifyType type, void *ui_handle):             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void __pyx_f_6purple_close_notify(PurpleNotifyType __pyx_v_type, void *__pyx_v_ui_handle) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":106
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "close-notify\n")             # <<<<<<<<<<<<<<
+ *     if notify_cbs.has_key("close-notify"):
+ *         (<object> notify_cbs["close-notify"])("close-notify: TODO")
+ */
+  purple_debug_info(__pyx_k_303, __pyx_k_304, __pyx_k_305);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":107
+ *     """
+ *     debug.purple_debug_info("notify", "%s", "close-notify\n")
+ *     if notify_cbs.has_key("close-notify"):             # <<<<<<<<<<<<<<
+ *         (<object> notify_cbs["close-notify"])("close-notify: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_306);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_306);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/notify_cbs.pxd":108
+ *     debug.purple_debug_info("notify", "%s", "close-notify\n")
+ *     if notify_cbs.has_key("close-notify"):
+ *         (<object> notify_cbs["close-notify"])("close-notify: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_notify_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_307); if (!__pyx_1) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_308);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_308);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.close_notify");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":29
+ * request_cbs = {}
+ * 
+ * cdef void *request_input(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, const_char *default_value, \
+ *         glib.gboolean multiline, glib.gboolean masked, glib.gchar *hint, \
+ */
+
+static  void *__pyx_f_6purple_request_input(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, const char *__pyx_v_default_value, gboolean __pyx_v_multiline, gboolean __pyx_v_masked, gchar *__pyx_v_hint, const char *__pyx_v_ok_text, GCallback __pyx_v_ok_cb, const char *__pyx_v_cancel_text, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":39
+ *     @see purple_request_input().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-input\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-input"):
+ *         (<object> request_cbs["request-input"])("request-input: TODO")
+ */
+  purple_debug_info(__pyx_k_309, __pyx_k_310, __pyx_k_311);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":40
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-input\n")
+ *     if request_cbs.has_key("request-input"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-input"])("request-input: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_312);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_312);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":41
+ *     debug.purple_debug_info("request", "%s", "request-input\n")
+ *     if request_cbs.has_key("request-input"):
+ *         (<object> request_cbs["request-input"])("request-input: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_choice(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_313); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_314);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_314);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_input");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":43
+ *         (<object> request_cbs["request-input"])("request-input: TODO")
+ * 
+ * cdef void *request_choice(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, int default_value, const_char *ok_text, \
+ *         glib.GCallback ok_cb, const_char *cancel_text, \
+ */
+
+static  void *__pyx_f_6purple_request_choice(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, int __pyx_v_default_value, const char *__pyx_v_ok_text, GCallback __pyx_v_ok_cb, const char *__pyx_v_cancel_text, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data, va_list __pyx_v_choices) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":52
+ *     @see purple_request_choice_varg().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-choice\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-choice"):
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")
+ */
+  purple_debug_info(__pyx_k_315, __pyx_k_316, __pyx_k_317);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":53
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-choice\n")
+ *     if request_cbs.has_key("request-choice"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_318);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_318);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":54
+ *     debug.purple_debug_info("request", "%s", "request-choice\n")
+ *     if request_cbs.has_key("request-choice"):
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_action(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_319); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_320);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_320);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_choice");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":56
+ *         (<object> request_cbs["request-choice"])("request-choice: TODO")
+ * 
+ * cdef void *request_action(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, int default_action, \
+ *         account.PurpleAccount *account, const_char *who, \
+ */
+
+static  void *__pyx_f_6purple_request_action(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, int __pyx_v_default_action, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data, size_t __pyx_v_action_count, va_list __pyx_v_actions) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":64
+ *     @see purple_request_action_varg().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-action\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-action"):
+ *         (<object> request_cbs["request-action"])("request-action: TODo")
+ */
+  purple_debug_info(__pyx_k_321, __pyx_k_322, __pyx_k_323);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":65
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-action\n")
+ *     if request_cbs.has_key("request-action"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-action"])("request-action: TODo")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_324);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_324);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":66
+ *     debug.purple_debug_info("request", "%s", "request-action\n")
+ *     if request_cbs.has_key("request-action"):
+ *         (<object> request_cbs["request-action"])("request-action: TODo")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_fields(const_char *title, const_char *primary, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_325); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_326);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_326);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_action");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":68
+ *         (<object> request_cbs["request-action"])("request-action: TODo")
+ * 
+ * cdef void *request_fields(const_char *title, const_char *primary, \             # <<<<<<<<<<<<<<
+ *         const_char *secondary, request.PurpleRequestFields *fields, \
+ *         const_char *ok_text, glib.GCallback ok_cb, const_char *cancel_text, \
+ */
+
+static  void *__pyx_f_6purple_request_fields(const char *__pyx_v_title, const char *__pyx_v_primary, const char *__pyx_v_secondary, PurpleRequestFields *__pyx_v_fields, const char *__pyx_v_ok_text, GCallback __pyx_v_ok_cb, const char *__pyx_v_cancel_text, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":77
+ *     @see purple_request_fields().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-fields\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-fields"):
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")
+ */
+  purple_debug_info(__pyx_k_327, __pyx_k_328, __pyx_k_329);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":78
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-fields\n")
+ *     if request_cbs.has_key("request-fields"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_330);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_330);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":79
+ *     debug.purple_debug_info("request", "%s", "request-fields\n")
+ *     if request_cbs.has_key("request-fields"):
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_file(const_char *title, const_char *filename, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_331); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_332);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_332);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_fields");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":81
+ *         (<object> request_cbs["request-fields"])("request-fields: TODO")
+ * 
+ * cdef void *request_file(const_char *title, const_char *filename, \             # <<<<<<<<<<<<<<
+ *         glib.gboolean savedialog, glib.GCallback ok_cb, \
+ *         glib.GCallback cancel_cb, account.PurpleAccount *account, \
+ */
+
+static  void *__pyx_f_6purple_request_file(const char *__pyx_v_title, const char *__pyx_v_filename, gboolean __pyx_v_savedialog, GCallback __pyx_v_ok_cb, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":89
+ *     @see purple_request_file().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-file\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-file"):
+ *         (<object> request_cbs["request-file"])("request-file: TODO")
+ */
+  purple_debug_info(__pyx_k_333, __pyx_k_334, __pyx_k_335);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":90
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-file\n")
+ *     if request_cbs.has_key("request-file"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-file"])("request-file: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_336);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_336);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":91
+ *     debug.purple_debug_info("request", "%s", "request-file\n")
+ *     if request_cbs.has_key("request-file"):
+ *         (<object> request_cbs["request-file"])("request-file: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void close_request(request.PurpleRequestType type, void *ui_handle):
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_337); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_338);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_338);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_file");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":93
+ *         (<object> request_cbs["request-file"])("request-file: TODO")
+ * 
+ * cdef void close_request(request.PurpleRequestType type, void *ui_handle):             # <<<<<<<<<<<<<<
+ *     """
+ *     TODO
+ */
+
+static  void __pyx_f_6purple_close_request(PurpleRequestType __pyx_v_type, void *__pyx_v_ui_handle) {
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":97
+ *     TODO
+ *     """
+ *     debug.purple_debug_info("request", "%s", "close-request\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("close-request"):
+ *         (<object> request_cbs["close-request"])("close-request: TODO")
+ */
+  purple_debug_info(__pyx_k_339, __pyx_k_340, __pyx_k_341);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":98
+ *     """
+ *     debug.purple_debug_info("request", "%s", "close-request\n")
+ *     if request_cbs.has_key("close-request"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["close-request"])("close-request: TODO")
+ * 
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_342);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_342);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":99
+ *     debug.purple_debug_info("request", "%s", "close-request\n")
+ *     if request_cbs.has_key("close-request"):
+ *         (<object> request_cbs["close-request"])("close-request: TODO")             # <<<<<<<<<<<<<<
+ * 
+ * cdef void *request_folder(const_char *title, const_char *dirname, \
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_343); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_344);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_344);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 99; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.close_request");
+  __pyx_L0:;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":101
+ *         (<object> request_cbs["close-request"])("close-request: TODO")
+ * 
+ * cdef void *request_folder(const_char *title, const_char *dirname, \             # <<<<<<<<<<<<<<
+ *         glib.GCallback ok_cb, glib.GCallback cancel_cb, \
+ *         account.PurpleAccount *account, const_char *who, \
+ */
+
+static  void *__pyx_f_6purple_request_folder(const char *__pyx_v_title, const char *__pyx_v_dirname, GCallback __pyx_v_ok_cb, GCallback __pyx_v_cancel_cb, PurpleAccount *__pyx_v_account, const char *__pyx_v_who, PurpleConversation *__pyx_v_conv, void *__pyx_v_user_data) {
+  void *__pyx_r;
+  PyObject *__pyx_1 = 0;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  int __pyx_4;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":108
+ *     @see purple_request_folder().
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-folder\n")             # <<<<<<<<<<<<<<
+ *     if request_cbs.has_key("request-folder"):
+ *         (<object> request_cbs["request-folder"])("request-folder: TODO")
+ */
+  purple_debug_info(__pyx_k_345, __pyx_k_346, __pyx_k_347);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":109
+ *     """
+ *     debug.purple_debug_info("request", "%s", "request-folder\n")
+ *     if request_cbs.has_key("request-folder"):             # <<<<<<<<<<<<<<
+ *         (<object> request_cbs["request-folder"])("request-folder: TODO")
+ */
+  __pyx_1 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_1, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_1); __pyx_1 = 0;
+  __pyx_1 = PyTuple_New(1); if (unlikely(!__pyx_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_348);
+  PyTuple_SET_ITEM(__pyx_1, 0, __pyx_kp_348);
+  __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_1), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_1)); __pyx_1 = 0;
+  __pyx_4 = __Pyx_PyObject_IsTrue(__pyx_3); if (unlikely(__pyx_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  if (__pyx_4) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/request_cbs.pxd":110
+ *     debug.purple_debug_info("request", "%s", "request-folder\n")
+ *     if request_cbs.has_key("request-folder"):
+ *         (<object> request_cbs["request-folder"])("request-folder: TODO")             # <<<<<<<<<<<<<<
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_request_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_1 = PyObject_GetItem(__pyx_2, __pyx_kp_349); if (!__pyx_1) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    __pyx_3 = PyTuple_New(1); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_kp_350);
+    PyTuple_SET_ITEM(__pyx_3, 0, __pyx_kp_350);
+    __pyx_2 = PyObject_Call(__pyx_1, ((PyObject *)__pyx_3), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_1); __pyx_1 = 0;
+    Py_DECREF(((PyObject *)__pyx_3)); __pyx_3 = 0;
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  __pyx_L3:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_1);
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  __Pyx_WriteUnraisable("purple.request_folder");
+  __pyx_r = 0;
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":27
+ *     ctypedef char const_gchar "const gchar"
+ * 
+ * cdef void signal_signed_on_cb(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         glib.gpointer null):
+ *     """
+ */
+
+static  void __pyx_f_6purple_signal_signed_on_cb(PurpleConnection *__pyx_v_gc, gpointer __pyx_v_null) {
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_protocol_id;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":33
+ *     @params gc  The connection that has signed on.
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL
+ */
+  __pyx_v_acc = purple_connection_get_account(__pyx_v_gc);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":34
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_protocol_id = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":35
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_protocol_id = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":37
+ *     cdef char *c_protocol_id = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username == NULL:
+ *         username = None
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":38
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:             # <<<<<<<<<<<<<<
+ *         username = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":39
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:
+ *         username = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = c_username
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":41
+ *         username = None
+ *     else:
+ *         username = c_username             # <<<<<<<<<<<<<<
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":43
+ *         username = c_username
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None
+ */
+  __pyx_v_c_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":44
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:             # <<<<<<<<<<<<<<
+ *         protocol_id = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_protocol_id == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":45
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         protocol_id = c_protocol_id
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":47
+ *         protocol_id = None
+ *     else:
+ *         protocol_id = c_protocol_id             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("signed-on"):
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_protocol_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 47; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":49
+ *         protocol_id = c_protocol_id
+ * 
+ *     if signal_cbs.has_key("signed-on"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["signed-on"])(username, protocol_id)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_351);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_351);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 49; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":50
+ * 
+ *     if signal_cbs.has_key("signed-on"):
+ *         (<object> signal_cbs["signed-on"])(username, protocol_id)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void signal_signed_off_cb(connection.PurpleConnection *gc, \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_352); if (!__pyx_2) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.signal_signed_on_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":52
+ *         (<object> signal_cbs["signed-on"])(username, protocol_id)
+ * 
+ * cdef void signal_signed_off_cb(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         glib.gpointer null):
+ *     """
+ */
+
+static  void __pyx_f_6purple_signal_signed_off_cb(PurpleConnection *__pyx_v_gc, gpointer __pyx_v_null) {
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_protocol_id;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  PyObject *__pyx_3 = 0;
+  PyObject *__pyx_4 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":58
+ *     @params gc  The connection that has signed off.
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL
+ */
+  __pyx_v_acc = purple_connection_get_account(__pyx_v_gc);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":59
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_protocol_id = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":60
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_protocol_id = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":62
+ *     cdef char *c_protocol_id = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username == NULL:
+ *         username = None
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":63
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:             # <<<<<<<<<<<<<<
+ *         username = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":64
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username == NULL:
+ *         username = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = c_username
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":66
+ *         username = None
+ *     else:
+ *         username = c_username             # <<<<<<<<<<<<<<
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_username); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":68
+ *         username = c_username
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None
+ */
+  __pyx_v_c_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":69
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:             # <<<<<<<<<<<<<<
+ *         protocol_id = None
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_protocol_id == NULL);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":70
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id == NULL:
+ *         protocol_id = None             # <<<<<<<<<<<<<<
+ *     else:
+ *         protocol_id = c_protocol_id
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = Py_None;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":72
+ *         protocol_id = None
+ *     else:
+ *         protocol_id = c_protocol_id             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("signed-off"):
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(__pyx_v_c_protocol_id); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = __pyx_2;
+    __pyx_2 = 0;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":74
+ *         protocol_id = c_protocol_id
+ * 
+ *     if signal_cbs.has_key("signed-off"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["signed-off"])(username, protocol_id)
+ * 
+ */
+  __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = PyObject_GetAttr(__pyx_2, __pyx_kp_has_key); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  __pyx_2 = PyTuple_New(1); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_353);
+  PyTuple_SET_ITEM(__pyx_2, 0, __pyx_kp_353);
+  __pyx_4 = PyObject_Call(__pyx_3, ((PyObject *)__pyx_2), NULL); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_3); __pyx_3 = 0;
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_4); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":75
+ * 
+ *     if signal_cbs.has_key("signed-off"):
+ *         (<object> signal_cbs["signed-off"])(username, protocol_id)             # <<<<<<<<<<<<<<
+ * 
+ * cdef void signal_connection_error_cb(connection.PurpleConnection *gc, \
+ */
+    __pyx_3 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_2 = PyObject_GetItem(__pyx_3, __pyx_kp_354); if (!__pyx_2) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    __pyx_4 = PyTuple_New(2); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_INCREF(__pyx_v_username);
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_v_username);
+    Py_INCREF(__pyx_v_protocol_id);
+    PyTuple_SET_ITEM(__pyx_4, 1, __pyx_v_protocol_id);
+    __pyx_3 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_3); __pyx_3 = 0;
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  Py_XDECREF(__pyx_2);
+  Py_XDECREF(__pyx_3);
+  Py_XDECREF(__pyx_4);
+  __Pyx_WriteUnraisable("purple.signal_signed_off_cb");
+  __pyx_L0:;
+  Py_DECREF(__pyx_v_username);
+  Py_DECREF(__pyx_v_protocol_id);
+}
+
+/* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":77
+ *         (<object> signal_cbs["signed-off"])(username, protocol_id)
+ * 
+ * cdef void signal_connection_error_cb(connection.PurpleConnection *gc, \             # <<<<<<<<<<<<<<
+ *         connection.PurpleConnectionError err, const_gchar *c_desc):
+ *     """
+ */
+
+static  void __pyx_f_6purple_signal_connection_error_cb(PurpleConnection *__pyx_v_gc, PurpleConnectionError __pyx_v_err, const gchar *__pyx_v_c_desc) {
+  PurpleAccount *__pyx_v_acc;
+  char *__pyx_v_c_username;
+  char *__pyx_v_c_protocol_id;
+  PyObject *__pyx_v_username;
+  PyObject *__pyx_v_protocol_id;
+  PyObject *__pyx_v_short_desc;
+  PyObject *__pyx_v_desc;
+  int __pyx_1;
+  PyObject *__pyx_2 = 0;
+  int __pyx_3;
+  PyObject *__pyx_4 = 0;
+  PyObject *__pyx_5 = 0;
+  __pyx_v_username = Py_None; Py_INCREF(Py_None);
+  __pyx_v_protocol_id = Py_None; Py_INCREF(Py_None);
+  __pyx_v_short_desc = Py_None; Py_INCREF(Py_None);
+  __pyx_v_desc = Py_None; Py_INCREF(Py_None);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":85
+ *     @params desc A description of the error, giving more information
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)             # <<<<<<<<<<<<<<
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL
+ */
+  __pyx_v_acc = purple_connection_get_account(__pyx_v_gc);
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":86
+ *     """
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL             # <<<<<<<<<<<<<<
+ *     cdef char *c_protocol_id = NULL
+ * 
+ */
+  __pyx_v_c_username = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":87
+ *     cdef account.PurpleAccount *acc = connection.purple_connection_get_account(gc)
+ *     cdef char *c_username = NULL
+ *     cdef char *c_protocol_id = NULL             # <<<<<<<<<<<<<<
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ */
+  __pyx_v_c_protocol_id = NULL;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":89
+ *     cdef char *c_protocol_id = NULL
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)             # <<<<<<<<<<<<<<
+ *     if c_username:
+ *         username = <char *> c_username
+ */
+  __pyx_v_c_username = ((char *)purple_account_get_username(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":90
+ * 
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:             # <<<<<<<<<<<<<<
+ *         username = <char *> c_username
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_username != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":91
+ *     c_username = <char *> account.purple_account_get_username(acc)
+ *     if c_username:
+ *         username = <char *> c_username             # <<<<<<<<<<<<<<
+ *     else:
+ *         username = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_username)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L3;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":93
+ *         username = <char *> c_username
+ *     else:
+ *         username = None             # <<<<<<<<<<<<<<
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_username);
+    __pyx_v_username = Py_None;
+  }
+  __pyx_L3:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":95
+ *         username = None
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)             # <<<<<<<<<<<<<<
+ *     if c_protocol_id:
+ *         protocol_id = <char *> c_protocol_id
+ */
+  __pyx_v_c_protocol_id = ((char *)purple_account_get_protocol_id(__pyx_v_acc));
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":96
+ * 
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id:             # <<<<<<<<<<<<<<
+ *         protocol_id = <char *> c_protocol_id
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_protocol_id != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":97
+ *     c_protocol_id = <char *> account.purple_account_get_protocol_id(acc)
+ *     if c_protocol_id:
+ *         protocol_id = <char *> c_protocol_id             # <<<<<<<<<<<<<<
+ *     else:
+ *         protocol_id = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_protocol_id)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L4;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":99
+ *         protocol_id = <char *> c_protocol_id
+ *     else:
+ *         protocol_id = None             # <<<<<<<<<<<<<<
+ * 
+ *     short_desc = {
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_protocol_id);
+    __pyx_v_protocol_id = Py_None;
+  }
+  __pyx_L4:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":118
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",
+ *         16: "Other error" }[<int> err]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_desc:
+ */
+  __pyx_2 = PyDict_New(); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":102
+ * 
+ *     short_desc = {
+ *         0: "Network error",             # <<<<<<<<<<<<<<
+ *         1: "Invalid username",
+ *         2: "Authentication failed",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_0, __pyx_kp_355) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":103
+ *     short_desc = {
+ *         0: "Network error",
+ *         1: "Invalid username",             # <<<<<<<<<<<<<<
+ *         2: "Authentication failed",
+ *         3: "Authentication impossible",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_1, __pyx_kp_356) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":104
+ *         0: "Network error",
+ *         1: "Invalid username",
+ *         2: "Authentication failed",             # <<<<<<<<<<<<<<
+ *         3: "Authentication impossible",
+ *         4: "No SSL support",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_2, __pyx_kp_357) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":105
+ *         1: "Invalid username",
+ *         2: "Authentication failed",
+ *         3: "Authentication impossible",             # <<<<<<<<<<<<<<
+ *         4: "No SSL support",
+ *         5: "Encryption error",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_3, __pyx_kp_358) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":106
+ *         2: "Authentication failed",
+ *         3: "Authentication impossible",
+ *         4: "No SSL support",             # <<<<<<<<<<<<<<
+ *         5: "Encryption error",
+ *         6: "Name in use",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_4, __pyx_kp_359) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":107
+ *         3: "Authentication impossible",
+ *         4: "No SSL support",
+ *         5: "Encryption error",             # <<<<<<<<<<<<<<
+ *         6: "Name in use",
+ *         7: "Invalid settings",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_5, __pyx_kp_360) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":108
+ *         4: "No SSL support",
+ *         5: "Encryption error",
+ *         6: "Name in use",             # <<<<<<<<<<<<<<
+ *         7: "Invalid settings",
+ *         8: "SSL certificate not provided",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_6, __pyx_kp_361) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":109
+ *         5: "Encryption error",
+ *         6: "Name in use",
+ *         7: "Invalid settings",             # <<<<<<<<<<<<<<
+ *         8: "SSL certificate not provided",
+ *         9: "SSL certificate untrusted",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_7, __pyx_kp_362) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":110
+ *         6: "Name in use",
+ *         7: "Invalid settings",
+ *         8: "SSL certificate not provided",             # <<<<<<<<<<<<<<
+ *         9: "SSL certificate untrusted",
+ *         10: "SSL certificate expired",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_8, __pyx_kp_363) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":111
+ *         7: "Invalid settings",
+ *         8: "SSL certificate not provided",
+ *         9: "SSL certificate untrusted",             # <<<<<<<<<<<<<<
+ *         10: "SSL certificate expired",
+ *         11: "SSL certificate not activated",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_9, __pyx_kp_364) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":112
+ *         8: "SSL certificate not provided",
+ *         9: "SSL certificate untrusted",
+ *         10: "SSL certificate expired",             # <<<<<<<<<<<<<<
+ *         11: "SSL certificate not activated",
+ *         12: "SSL certificate hostname mismatch",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_10, __pyx_kp_365) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":113
+ *         9: "SSL certificate untrusted",
+ *         10: "SSL certificate expired",
+ *         11: "SSL certificate not activated",             # <<<<<<<<<<<<<<
+ *         12: "SSL certificate hostname mismatch",
+ *         13: "SSL certificate fingerprint mismatch",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_11, __pyx_kp_366) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":114
+ *         10: "SSL certificate expired",
+ *         11: "SSL certificate not activated",
+ *         12: "SSL certificate hostname mismatch",             # <<<<<<<<<<<<<<
+ *         13: "SSL certificate fingerprint mismatch",
+ *         14: "SSL certificate self signed",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_12, __pyx_kp_367) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":115
+ *         11: "SSL certificate not activated",
+ *         12: "SSL certificate hostname mismatch",
+ *         13: "SSL certificate fingerprint mismatch",             # <<<<<<<<<<<<<<
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_13, __pyx_kp_368) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":116
+ *         12: "SSL certificate hostname mismatch",
+ *         13: "SSL certificate fingerprint mismatch",
+ *         14: "SSL certificate self signed",             # <<<<<<<<<<<<<<
+ *         15: "SSL certificate other error",
+ *         16: "Other error" }[<int> err]
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_14, __pyx_kp_369) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":117
+ *         13: "SSL certificate fingerprint mismatch",
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",             # <<<<<<<<<<<<<<
+ *         16: "Other error" }[<int> err]
+ * 
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_15, __pyx_kp_370) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":118
+ *         14: "SSL certificate self signed",
+ *         15: "SSL certificate other error",
+ *         16: "Other error" }[<int> err]             # <<<<<<<<<<<<<<
+ * 
+ *     if c_desc:
+ */
+  if (PyDict_SetItem(__pyx_2, __pyx_int_16, __pyx_kp_371) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_3 = ((int)__pyx_v_err);
+  __pyx_4 = __Pyx_GetItemInt(((PyObject *)__pyx_2), __pyx_3, 0); if (!__pyx_4) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(((PyObject *)__pyx_2)); __pyx_2 = 0;
+  Py_DECREF(__pyx_v_short_desc);
+  __pyx_v_short_desc = __pyx_4;
+  __pyx_4 = 0;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":120
+ *         16: "Other error" }[<int> err]
+ * 
+ *     if c_desc:             # <<<<<<<<<<<<<<
+ *         desc = str(<char *> c_desc)
+ *     else:
+ */
+  __pyx_1 = (__pyx_v_c_desc != 0);
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":121
+ * 
+ *     if c_desc:
+ *         desc = str(<char *> c_desc)             # <<<<<<<<<<<<<<
+ *     else:
+ *         desc = None
+ */
+    __pyx_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_c_desc)); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyTuple_SET_ITEM(__pyx_4, 0, __pyx_2);
+    __pyx_2 = 0;
+    __pyx_2 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+    Py_DECREF(__pyx_v_desc);
+    __pyx_v_desc = __pyx_2;
+    __pyx_2 = 0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":123
+ *         desc = str(<char *> c_desc)
+ *     else:
+ *         desc = None             # <<<<<<<<<<<<<<
+ * 
+ *     if signal_cbs.has_key("connection-error"):
+ */
+    Py_INCREF(Py_None);
+    Py_DECREF(__pyx_v_desc);
+    __pyx_v_desc = Py_None;
+  }
+  __pyx_L5:;
+
+  /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":125
+ *         desc = None
+ * 
+ *     if signal_cbs.has_key("connection-error"):             # <<<<<<<<<<<<<<
+ *         (<object> signal_cbs["connection-error"])(username, protocol_id, \
+ *                 short_desc, desc)
+ */
+  __pyx_4 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_2 = PyObject_GetAttr(__pyx_4, __pyx_kp_has_key); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_4); __pyx_4 = 0;
+  __pyx_4 = PyTuple_New(1); if (unlikely(!__pyx_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_INCREF(__pyx_kp_372);
+  PyTuple_SET_ITEM(__pyx_4, 0, __pyx_kp_372);
+  __pyx_5 = PyObject_Call(__pyx_2, ((PyObject *)__pyx_4), NULL); if (unlikely(!__pyx_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_2); __pyx_2 = 0;
+  Py_DECREF(((PyObject *)__pyx_4)); __pyx_4 = 0;
+  __pyx_1 = __Pyx_PyObject_IsTrue(__pyx_5); if (unlikely(__pyx_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  Py_DECREF(__pyx_5); __pyx_5 = 0;
+  if (__pyx_1) {
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":126
+ * 
+ *     if signal_cbs.has_key("connection-error"):
+ *         (<object> signal_cbs["connection-error"])(username, protocol_id, \             # <<<<<<<<<<<<<<
+ *                 short_desc, desc)
+ * 
+ */
+    __pyx_2 = __Pyx_GetName(__pyx_m, __pyx_kp_signal_cbs); if (unlikely(!__pyx_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_4 = PyObject_GetItem(__pyx_2, __pyx_kp_373); if (!__pyx_4) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    Py_DECREF(__pyx_2); __pyx_2 = 0;
+
+    /* "/scratchbox/users/bruno/home/bruno/carman/python-purple/signal_cbs.pxd":127
+ *     if signal_cbs.has_key("connection-error"):
+ *         (<object> signal_cbs["connection-error"])(username,