Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] Carla: update to 2.5.9, adopt.
@ 2024-11-01  8:01 Rutpiv
  2024-11-24 20:53 ` ahesford
                   ` (10 more replies)
  0 siblings, 11 replies; 12+ messages in thread
From: Rutpiv @ 2024-11-01  8:01 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 732 bytes --]

There is a new pull request by Rutpiv against master on the void-packages repository

https://github.com/Rutpiv/void-packages Carla
https://github.com/void-linux/void-packages/pull/52860

Carla: update to 2.5.9, adopt.
#### Testing the changes
- I tested the changes in this PR: **YES**

#### Local build testing
- I built this PR locally for my native architecture (x86_64)
- I built this PR locally for these architectures using specific masterdirs:
  - x86_64-musl
  - i686
- I built this PR locally for these architectures (crossbuilds):
  - aarch64
  - aarch64-musl
  - armv7l
  - armv7l-musl
  - armv6l
  - armv6l-musl


A patch file from https://github.com/void-linux/void-packages/pull/52860.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-Carla-52860.patch --]
[-- Type: text/x-diff, Size: 1266 bytes --]

From 00c74521e17cf2c615a8f8210090ca7f18a6d3f7 Mon Sep 17 00:00:00 2001
From: Roger Freitas Pereira <roger_freitas@live.com>
Date: Fri, 1 Nov 2024 04:51:30 -0300
Subject: [PATCH] Carla: update to 2.5.9, adopt.

---
 srcpkgs/Carla/template | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/srcpkgs/Carla/template b/srcpkgs/Carla/template
index e672a58ceaea7a..d3079227e441a6 100755
--- a/srcpkgs/Carla/template
+++ b/srcpkgs/Carla/template
@@ -1,6 +1,6 @@
 # Template file for 'Carla'
 pkgname=Carla
-version=2.5.8
+version=2.5.9
 revision=1
 archs="x86_64* i686* aarch64* arm*"
 build_style=gnu-makefile
@@ -12,11 +12,11 @@ makedepends="python3-PyQt5 libmagic file-devel libsndfile-devel
  python3-rdflib"
 depends="python3 python3-PyQt5 python3-PyQt5-svg pyliblo which"
 short_desc="Audio plugin host"
-maintainer="Orphaned <orphan@voidlinux.org>"
+maintainer="Rutpiv <roger_freitas@live.com>"
 license="GPL-2.0-or-later"
 homepage="https://kx.studio/Applications:Carla"
 distfiles="https://github.com/falkTX/Carla/archive/v${version}.tar.gz"
-checksum=4ec96d06342ff28da4b80d4a76bc08fcaa5703726f96e5174afcdc4f7fc6195d
+checksum=226fb5d646b7541b82035080190e7440df1f92372fb798b4ad49289570e5ad81
 python_version=3
 
 build_options="win linux32"

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Carla: update to 2.5.9, adopt.
  2024-11-01  8:01 [PR PATCH] Carla: update to 2.5.9, adopt Rutpiv
@ 2024-11-24 20:53 ` ahesford
  2024-11-24 20:53 ` ahesford
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: ahesford @ 2024-11-24 20:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1115 bytes --]

New comment by ahesford on void-packages repository

https://github.com/void-linux/void-packages/pull/52860#issuecomment-2496227630

Comment:
Carla depends on `pyliblo` via its `carla-control` utility, which has a couple of problems:
- It depends on `python3-Cython0.29`, which is going to be removed with the Python 3.13 update in a couple of weeks. There is a simple patch to get this working, but
- Even when `pyliblo` builds, I believe it is broken, because it depends on old Python APIs that have been broken since Python 3.12 at the latest.

If nobody has noticed, maybe `carla-control` is not central to the functionality of Carla. Either way, we need one of the following fixes:
- Remove the `pyliblo` dependency from this package, knowing that `carla-control` will fail to function.
- Package the `pyliblo3` alternative described in https://github.com/falkTX/Carla/pull/1933, then patch `carla_host_control.py`. (I wouldn't necessarily use the try-except block, because we know we will require `pyliblo3`, so just `s/liblo/pyliblo3/` should be sufficient.

Please choose one of those alternatives.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: Carla: update to 2.5.9, adopt.
  2024-11-01  8:01 [PR PATCH] Carla: update to 2.5.9, adopt Rutpiv
  2024-11-24 20:53 ` ahesford
@ 2024-11-24 20:53 ` ahesford
  2024-11-25  0:30 ` [PR PATCH] [Updated] " Rutpiv
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: ahesford @ 2024-11-24 20:53 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 1116 bytes --]

New comment by ahesford on void-packages repository

https://github.com/void-linux/void-packages/pull/52860#issuecomment-2496227630

Comment:
Carla depends on `pyliblo` via its `carla-control` utility, which has a couple of problems:
- It depends on `python3-Cython0.29`, which is going to be removed with the Python 3.13 update in a couple of weeks. There is a simple patch to get this working, but
- Even when `pyliblo` builds, I believe it is broken, because it depends on old Python APIs that have been broken since Python 3.12 at the latest.

If nobody has noticed, maybe `carla-control` is not central to the functionality of Carla. Either way, we need one of the following fixes:
- Remove the `pyliblo` dependency from this package, knowing that `carla-control` will fail to function.
- Package the `pyliblo3` alternative described in https://github.com/falkTX/Carla/pull/1933, then patch `carla_host_control.py`. (I wouldn't necessarily use the try-except block, because we know we will require `pyliblo3`, so just `s/liblo/pyliblo3/` should be sufficient.)

Please choose one of those alternatives.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PR PATCH] [Updated] Carla: update to 2.5.9, adopt.
  2024-11-01  8:01 [PR PATCH] Carla: update to 2.5.9, adopt Rutpiv
  2024-11-24 20:53 ` ahesford
  2024-11-24 20:53 ` ahesford
@ 2024-11-25  0:30 ` Rutpiv
  2024-11-25  0:31 ` Rutpiv
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 12+ messages in thread
From: Rutpiv @ 2024-11-25  0:30 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 737 bytes --]

There is an updated pull request by Rutpiv against master on the void-packages repository

https://github.com/Rutpiv/void-packages Carla
https://github.com/void-linux/void-packages/pull/52860

Carla: update to 2.5.9, adopt.
#### Testing the changes
- I tested the changes in this PR: **YES**

#### Local build testing
- I built this PR locally for my native architecture (x86_64)
- I built this PR locally for these architectures using specific masterdirs:
  - x86_64-musl
  - i686
- I built this PR locally for these architectures (crossbuilds):
  - aarch64
  - aarch64-musl
  - armv7l
  - armv7l-musl
  - armv6l
  - armv6l-musl


A patch file from https://github.com/void-linux/void-packages/pull/52860.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-Carla-52860.patch --]
[-- Type: text/x-diff, Size: 1437088 bytes --]

From 2e2ea547a1cacd0f7ac1e273a50f6e6f87fc28de Mon Sep 17 00:00:00 2001
From: Roger Freitas Pereira <roger_freitas@live.com>
Date: Fri, 1 Nov 2024 04:51:30 -0300
Subject: [PATCH 1/2] Carla: update to 2.5.9, adopt.

---
 srcpkgs/Carla/patches/pyliblo3.patch | 13 +++++++++++++
 srcpkgs/Carla/template               |  8 ++++----
 2 files changed, 17 insertions(+), 4 deletions(-)
 create mode 100644 srcpkgs/Carla/patches/pyliblo3.patch

diff --git a/srcpkgs/Carla/patches/pyliblo3.patch b/srcpkgs/Carla/patches/pyliblo3.patch
new file mode 100644
index 00000000000000..801ea04af65d01
--- /dev/null
+++ b/srcpkgs/Carla/patches/pyliblo3.patch
@@ -0,0 +1,13 @@
+diff --git a/source/frontend/carla_host_control.py b/source/frontend/carla_host_control.py
+index 00c6958..2d5d4da 100755
+--- a/source/frontend/carla_host_control.py
++++ b/source/frontend/carla_host_control.py
+@@ -32,7 +32,7 @@ from carla_host import *
+ # ------------------------------------------------------------------------------------------------------------
+ # Imports (liblo)
+ 
+-from liblo import (
++from pyliblo3 import (
+   Address,
+   AddressError,
+   ServerError,
diff --git a/srcpkgs/Carla/template b/srcpkgs/Carla/template
index e672a58ceaea7a..856565347fd078 100755
--- a/srcpkgs/Carla/template
+++ b/srcpkgs/Carla/template
@@ -1,6 +1,6 @@
 # Template file for 'Carla'
 pkgname=Carla
-version=2.5.8
+version=2.5.9
 revision=1
 archs="x86_64* i686* aarch64* arm*"
 build_style=gnu-makefile
@@ -10,13 +10,13 @@ makedepends="python3-PyQt5 libmagic file-devel libsndfile-devel
  liblo-devel alsa-lib-devel pulseaudio-devel libX11-devel gtk+3-devel
  gtk+-devel qt5-devel fluidsynth-devel fftw-devel zlib-devel
  python3-rdflib"
-depends="python3 python3-PyQt5 python3-PyQt5-svg pyliblo which"
+depends="python3 python3-PyQt5 python3-PyQt5-svg pyliblo3 which"
 short_desc="Audio plugin host"
-maintainer="Orphaned <orphan@voidlinux.org>"
+maintainer="Rutpiv <roger_freitas@live.com>"
 license="GPL-2.0-or-later"
 homepage="https://kx.studio/Applications:Carla"
 distfiles="https://github.com/falkTX/Carla/archive/v${version}.tar.gz"
-checksum=4ec96d06342ff28da4b80d4a76bc08fcaa5703726f96e5174afcdc4f7fc6195d
+checksum=226fb5d646b7541b82035080190e7440df1f92372fb798b4ad49289570e5ad81
 python_version=3
 
 build_options="win linux32"

From cd119e25fe5802e3c8ab76978e557e61f4e7fb60 Mon Sep 17 00:00:00 2001
From: Roger Freitas Pereira <roger_freitas@live.com>
Date: Sun, 24 Nov 2024 20:04:16 -0300
Subject: [PATCH 2/2] New package: pyliblo3-0.16.2

---
 srcpkgs/pyliblo3/patches/python3.13.patch | 33017 ++++++++++++++++++++
 srcpkgs/pyliblo3/template                 |    15 +
 2 files changed, 33032 insertions(+)
 create mode 100644 srcpkgs/pyliblo3/patches/python3.13.patch
 create mode 100644 srcpkgs/pyliblo3/template

diff --git a/srcpkgs/pyliblo3/patches/python3.13.patch b/srcpkgs/pyliblo3/patches/python3.13.patch
new file mode 100644
index 00000000000000..6c5b75e919afcb
--- /dev/null
+++ b/srcpkgs/pyliblo3/patches/python3.13.patch
@@ -0,0 +1,33017 @@
+From 6f0c8a73fd25fd05f528f79ac204a25657cebab7 Mon Sep 17 00:00:00 2001
+From: Cristian Le <git@lecris.dev>
+Date: Wed, 4 Sep 2024 13:42:53 +0200
+Subject: [PATCH 1/2] type-erase lo_blob_dataptr input
+
+---
+ pyliblo3/_liblo.pyx | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/pyliblo3/_liblo.pyx b/pyliblo3/_liblo.pyx
+index 536cbf9..4fa70df 100644
+--- a/pyliblo3/_liblo.pyx
++++ b/pyliblo3/_liblo.pyx
+@@ -271,7 +271,7 @@ cdef int _msg_callback(const_char *path, const_char *types, lo_arg **argv,
+         elif t == 'm': v = (argv[i].m[0], argv[i].m[1], argv[i].m[2], argv[i].m[3])
+         elif t == 't': v = _timetag_to_double(argv[i].t)
+         elif t == 'b':
+-            v = bytes(<unsigned char*>lo_blob_dataptr(argv[i]))
++            v = bytes(<unsigned char*>lo_blob_dataptr(<lo_blob>argv[i]))
+         else:
+             v = None  # unhandled data type
+ 
+
+From 86c353ce282978df2e343a02a52496699326b67f Mon Sep 17 00:00:00 2001
+From: Cristian Le <git@lecris.dev>
+Date: Wed, 4 Sep 2024 13:57:17 +0200
+Subject: [PATCH 2/2] Add generated files to gitignore
+
+---
+ .gitignore        |     2 +-
+ pyliblo3/_liblo.c | 32965 --------------------------------------------
+ 2 files changed, 1 insertion(+), 32966 deletions(-)
+ delete mode 100644 pyliblo3/_liblo.c
+
+diff --git a/.gitignore b/.gitignore
+index 97b4797..20e0a9c 100755
+--- a/.gitignore
++++ b/.gitignore
+@@ -13,6 +13,6 @@ dist/
+ .deps
+ .idea
+ .mypy*
+-src/liblo.c
++pyliblo3/*.c
+ wheelhouse/
+ *.kate*
+diff --git a/pyliblo3/_liblo.c b/pyliblo3/_liblo.c
+deleted file mode 100644
+index 6a23be0..0000000
+--- a/pyliblo3/_liblo.c
++++ /dev/null
+@@ -1,32965 +0,0 @@
+-/* Generated by Cython 3.0.10 */
+-
+-/* BEGIN: Cython Metadata
+-{
+-    "distutils": {
+-        "depends": [
+-            "/usr/include/lo/lo.h"
+-        ],
+-        "extra_compile_args": [
+-            "-fno-strict-aliasing",
+-            "-Werror-implicit-function-declaration",
+-            "-Wfatal-errors"
+-        ],
+-        "include_dirs": [
+-            "pyliblo3",
+-            "/usr/include",
+-            "/usr/local/include"
+-        ],
+-        "libraries": [
+-            "lo"
+-        ],
+-        "library_dirs": [
+-            "/usr/local/lib"
+-        ],
+-        "name": "pyliblo3._liblo",
+-        "sources": [
+-            "pyliblo3/_liblo.pyx"
+-        ]
+-    },
+-    "module_name": "pyliblo3._liblo"
+-}
+-END: Cython Metadata */
+-
+-#ifndef PY_SSIZE_T_CLEAN
+-#define PY_SSIZE_T_CLEAN
+-#endif /* PY_SSIZE_T_CLEAN */
+-#if defined(CYTHON_LIMITED_API) && 0
+-  #ifndef Py_LIMITED_API
+-    #if CYTHON_LIMITED_API+0 > 0x03030000
+-      #define Py_LIMITED_API CYTHON_LIMITED_API
+-    #else
+-      #define Py_LIMITED_API 0x03030000
+-    #endif
+-  #endif
+-#endif
+-
+-#include "Python.h"
+-
+-    #if PY_MAJOR_VERSION >= 3
+-      #define __Pyx_PyFloat_FromString(obj)  PyFloat_FromString(obj)
+-    #else
+-      #define __Pyx_PyFloat_FromString(obj)  PyFloat_FromString(obj, NULL)
+-    #endif
+-    
+-
+-    #if PY_MAJOR_VERSION <= 2
+-    #define PyDict_GetItemWithError _PyDict_GetItemWithError
+-    #endif
+-    
+-
+-    #if (PY_VERSION_HEX < 0x030700b1 || (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030600)) && !defined(PyContextVar_Get)
+-    #define PyContextVar_Get(var, d, v)         ((d) ?             ((void)(var), Py_INCREF(d), (v)[0] = (d), 0) :             ((v)[0] = NULL, 0)         )
+-    #endif
+-    
+-#ifndef Py_PYTHON_H
+-    #error Python headers needed to compile C extensions, please install development version of Python.
+-#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+-    #error Cython requires Python 2.7+ or Python 3.3+.
+-#else
+-#if defined(CYTHON_LIMITED_API) && CYTHON_LIMITED_API
+-#define __PYX_EXTRA_ABI_MODULE_NAME "limited"
+-#else
+-#define __PYX_EXTRA_ABI_MODULE_NAME ""
+-#endif
+-#define CYTHON_ABI "3_0_10" __PYX_EXTRA_ABI_MODULE_NAME
+-#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
+-#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
+-#define CYTHON_HEX_VERSION 0x03000AF0
+-#define CYTHON_FUTURE_DIVISION 1
+-#include <stddef.h>
+-#ifndef offsetof
+-  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+-#endif
+-#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS)
+-  #ifndef __stdcall
+-    #define __stdcall
+-  #endif
+-  #ifndef __cdecl
+-    #define __cdecl
+-  #endif
+-  #ifndef __fastcall
+-    #define __fastcall
+-  #endif
+-#endif
+-#ifndef DL_IMPORT
+-  #define DL_IMPORT(t) t
+-#endif
+-#ifndef DL_EXPORT
+-  #define DL_EXPORT(t) t
+-#endif
+-#define __PYX_COMMA ,
+-#ifndef HAVE_LONG_LONG
+-  #define HAVE_LONG_LONG
+-#endif
+-#ifndef PY_LONG_LONG
+-  #define PY_LONG_LONG LONG_LONG
+-#endif
+-#ifndef Py_HUGE_VAL
+-  #define Py_HUGE_VAL HUGE_VAL
+-#endif
+-#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX
+-#if defined(GRAALVM_PYTHON)
+-  /* For very preliminary testing purposes. Most variables are set the same as PyPy.
+-     The existence of this section does not imply that anything works or is even tested */
+-  #define CYTHON_COMPILING_IN_PYPY 0
+-  #define CYTHON_COMPILING_IN_CPYTHON 0
+-  #define CYTHON_COMPILING_IN_LIMITED_API 0
+-  #define CYTHON_COMPILING_IN_GRAAL 1
+-  #define CYTHON_COMPILING_IN_NOGIL 0
+-  #undef CYTHON_USE_TYPE_SLOTS
+-  #define CYTHON_USE_TYPE_SLOTS 0
+-  #undef CYTHON_USE_TYPE_SPECS
+-  #define CYTHON_USE_TYPE_SPECS 0
+-  #undef CYTHON_USE_PYTYPE_LOOKUP
+-  #define CYTHON_USE_PYTYPE_LOOKUP 0
+-  #if PY_VERSION_HEX < 0x03050000
+-    #undef CYTHON_USE_ASYNC_SLOTS
+-    #define CYTHON_USE_ASYNC_SLOTS 0
+-  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+-    #define CYTHON_USE_ASYNC_SLOTS 1
+-  #endif
+-  #undef CYTHON_USE_PYLIST_INTERNALS
+-  #define CYTHON_USE_PYLIST_INTERNALS 0
+-  #undef CYTHON_USE_UNICODE_INTERNALS
+-  #define CYTHON_USE_UNICODE_INTERNALS 0
+-  #undef CYTHON_USE_UNICODE_WRITER
+-  #define CYTHON_USE_UNICODE_WRITER 0
+-  #undef CYTHON_USE_PYLONG_INTERNALS
+-  #define CYTHON_USE_PYLONG_INTERNALS 0
+-  #undef CYTHON_AVOID_BORROWED_REFS
+-  #define CYTHON_AVOID_BORROWED_REFS 1
+-  #undef CYTHON_ASSUME_SAFE_MACROS
+-  #define CYTHON_ASSUME_SAFE_MACROS 0
+-  #undef CYTHON_UNPACK_METHODS
+-  #define CYTHON_UNPACK_METHODS 0
+-  #undef CYTHON_FAST_THREAD_STATE
+-  #define CYTHON_FAST_THREAD_STATE 0
+-  #undef CYTHON_FAST_GIL
+-  #define CYTHON_FAST_GIL 0
+-  #undef CYTHON_METH_FASTCALL
+-  #define CYTHON_METH_FASTCALL 0
+-  #undef CYTHON_FAST_PYCALL
+-  #define CYTHON_FAST_PYCALL 0
+-  #ifndef CYTHON_PEP487_INIT_SUBCLASS
+-    #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
+-  #endif
+-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+-  #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+-  #undef CYTHON_USE_MODULE_STATE
+-  #define CYTHON_USE_MODULE_STATE 0
+-  #undef CYTHON_USE_TP_FINALIZE
+-  #define CYTHON_USE_TP_FINALIZE 0
+-  #undef CYTHON_USE_DICT_VERSIONS
+-  #define CYTHON_USE_DICT_VERSIONS 0
+-  #undef CYTHON_USE_EXC_INFO_STACK
+-  #define CYTHON_USE_EXC_INFO_STACK 0
+-  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+-    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+-  #endif
+-  #undef CYTHON_USE_FREELISTS
+-  #define CYTHON_USE_FREELISTS 0
+-#elif defined(PYPY_VERSION)
+-  #define CYTHON_COMPILING_IN_PYPY 1
+-  #define CYTHON_COMPILING_IN_CPYTHON 0
+-  #define CYTHON_COMPILING_IN_LIMITED_API 0
+-  #define CYTHON_COMPILING_IN_GRAAL 0
+-  #define CYTHON_COMPILING_IN_NOGIL 0
+-  #undef CYTHON_USE_TYPE_SLOTS
+-  #define CYTHON_USE_TYPE_SLOTS 0
+-  #ifndef CYTHON_USE_TYPE_SPECS
+-    #define CYTHON_USE_TYPE_SPECS 0
+-  #endif
+-  #undef CYTHON_USE_PYTYPE_LOOKUP
+-  #define CYTHON_USE_PYTYPE_LOOKUP 0
+-  #if PY_VERSION_HEX < 0x03050000
+-    #undef CYTHON_USE_ASYNC_SLOTS
+-    #define CYTHON_USE_ASYNC_SLOTS 0
+-  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+-    #define CYTHON_USE_ASYNC_SLOTS 1
+-  #endif
+-  #undef CYTHON_USE_PYLIST_INTERNALS
+-  #define CYTHON_USE_PYLIST_INTERNALS 0
+-  #undef CYTHON_USE_UNICODE_INTERNALS
+-  #define CYTHON_USE_UNICODE_INTERNALS 0
+-  #undef CYTHON_USE_UNICODE_WRITER
+-  #define CYTHON_USE_UNICODE_WRITER 0
+-  #undef CYTHON_USE_PYLONG_INTERNALS
+-  #define CYTHON_USE_PYLONG_INTERNALS 0
+-  #undef CYTHON_AVOID_BORROWED_REFS
+-  #define CYTHON_AVOID_BORROWED_REFS 1
+-  #undef CYTHON_ASSUME_SAFE_MACROS
+-  #define CYTHON_ASSUME_SAFE_MACROS 0
+-  #undef CYTHON_UNPACK_METHODS
+-  #define CYTHON_UNPACK_METHODS 0
+-  #undef CYTHON_FAST_THREAD_STATE
+-  #define CYTHON_FAST_THREAD_STATE 0
+-  #undef CYTHON_FAST_GIL
+-  #define CYTHON_FAST_GIL 0
+-  #undef CYTHON_METH_FASTCALL
+-  #define CYTHON_METH_FASTCALL 0
+-  #undef CYTHON_FAST_PYCALL
+-  #define CYTHON_FAST_PYCALL 0
+-  #ifndef CYTHON_PEP487_INIT_SUBCLASS
+-    #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
+-  #endif
+-  #if PY_VERSION_HEX < 0x03090000
+-    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+-    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+-  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+-    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+-  #endif
+-  #undef CYTHON_USE_MODULE_STATE
+-  #define CYTHON_USE_MODULE_STATE 0
+-  #undef CYTHON_USE_TP_FINALIZE
+-  #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
+-  #undef CYTHON_USE_DICT_VERSIONS
+-  #define CYTHON_USE_DICT_VERSIONS 0
+-  #undef CYTHON_USE_EXC_INFO_STACK
+-  #define CYTHON_USE_EXC_INFO_STACK 0
+-  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+-    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+-  #endif
+-  #undef CYTHON_USE_FREELISTS
+-  #define CYTHON_USE_FREELISTS 0
+-#elif defined(CYTHON_LIMITED_API)
+-  #ifdef Py_LIMITED_API
+-    #undef __PYX_LIMITED_VERSION_HEX
+-    #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API
+-  #endif
+-  #define CYTHON_COMPILING_IN_PYPY 0
+-  #define CYTHON_COMPILING_IN_CPYTHON 0
+-  #define CYTHON_COMPILING_IN_LIMITED_API 1
+-  #define CYTHON_COMPILING_IN_GRAAL 0
+-  #define CYTHON_COMPILING_IN_NOGIL 0
+-  #undef CYTHON_CLINE_IN_TRACEBACK
+-  #define CYTHON_CLINE_IN_TRACEBACK 0
+-  #undef CYTHON_USE_TYPE_SLOTS
+-  #define CYTHON_USE_TYPE_SLOTS 0
+-  #undef CYTHON_USE_TYPE_SPECS
+-  #define CYTHON_USE_TYPE_SPECS 1
+-  #undef CYTHON_USE_PYTYPE_LOOKUP
+-  #define CYTHON_USE_PYTYPE_LOOKUP 0
+-  #undef CYTHON_USE_ASYNC_SLOTS
+-  #define CYTHON_USE_ASYNC_SLOTS 0
+-  #undef CYTHON_USE_PYLIST_INTERNALS
+-  #define CYTHON_USE_PYLIST_INTERNALS 0
+-  #undef CYTHON_USE_UNICODE_INTERNALS
+-  #define CYTHON_USE_UNICODE_INTERNALS 0
+-  #ifndef CYTHON_USE_UNICODE_WRITER
+-    #define CYTHON_USE_UNICODE_WRITER 0
+-  #endif
+-  #undef CYTHON_USE_PYLONG_INTERNALS
+-  #define CYTHON_USE_PYLONG_INTERNALS 0
+-  #ifndef CYTHON_AVOID_BORROWED_REFS
+-    #define CYTHON_AVOID_BORROWED_REFS 0
+-  #endif
+-  #undef CYTHON_ASSUME_SAFE_MACROS
+-  #define CYTHON_ASSUME_SAFE_MACROS 0
+-  #undef CYTHON_UNPACK_METHODS
+-  #define CYTHON_UNPACK_METHODS 0
+-  #undef CYTHON_FAST_THREAD_STATE
+-  #define CYTHON_FAST_THREAD_STATE 0
+-  #undef CYTHON_FAST_GIL
+-  #define CYTHON_FAST_GIL 0
+-  #undef CYTHON_METH_FASTCALL
+-  #define CYTHON_METH_FASTCALL 0
+-  #undef CYTHON_FAST_PYCALL
+-  #define CYTHON_FAST_PYCALL 0
+-  #ifndef CYTHON_PEP487_INIT_SUBCLASS
+-    #define CYTHON_PEP487_INIT_SUBCLASS 1
+-  #endif
+-  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+-  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+-  #undef CYTHON_USE_MODULE_STATE
+-  #define CYTHON_USE_MODULE_STATE 1
+-  #ifndef CYTHON_USE_TP_FINALIZE
+-    #define CYTHON_USE_TP_FINALIZE 0
+-  #endif
+-  #undef CYTHON_USE_DICT_VERSIONS
+-  #define CYTHON_USE_DICT_VERSIONS 0
+-  #undef CYTHON_USE_EXC_INFO_STACK
+-  #define CYTHON_USE_EXC_INFO_STACK 0
+-  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+-    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+-  #endif
+-  #undef CYTHON_USE_FREELISTS
+-  #define CYTHON_USE_FREELISTS 0
+-#elif defined(Py_GIL_DISABLED) || defined(Py_NOGIL)
+-  #define CYTHON_COMPILING_IN_PYPY 0
+-  #define CYTHON_COMPILING_IN_CPYTHON 0
+-  #define CYTHON_COMPILING_IN_LIMITED_API 0
+-  #define CYTHON_COMPILING_IN_GRAAL 0
+-  #define CYTHON_COMPILING_IN_NOGIL 1
+-  #ifndef CYTHON_USE_TYPE_SLOTS
+-    #define CYTHON_USE_TYPE_SLOTS 1
+-  #endif
+-  #ifndef CYTHON_USE_TYPE_SPECS
+-    #define CYTHON_USE_TYPE_SPECS 0
+-  #endif
+-  #undef CYTHON_USE_PYTYPE_LOOKUP
+-  #define CYTHON_USE_PYTYPE_LOOKUP 0
+-  #ifndef CYTHON_USE_ASYNC_SLOTS
+-    #define CYTHON_USE_ASYNC_SLOTS 1
+-  #endif
+-  #ifndef CYTHON_USE_PYLONG_INTERNALS
+-    #define CYTHON_USE_PYLONG_INTERNALS 0
+-  #endif
+-  #undef CYTHON_USE_PYLIST_INTERNALS
+-  #define CYTHON_USE_PYLIST_INTERNALS 0
+-  #ifndef CYTHON_USE_UNICODE_INTERNALS
+-    #define CYTHON_USE_UNICODE_INTERNALS 1
+-  #endif
+-  #undef CYTHON_USE_UNICODE_WRITER
+-  #define CYTHON_USE_UNICODE_WRITER 0
+-  #ifndef CYTHON_AVOID_BORROWED_REFS
+-    #define CYTHON_AVOID_BORROWED_REFS 0
+-  #endif
+-  #ifndef CYTHON_ASSUME_SAFE_MACROS
+-    #define CYTHON_ASSUME_SAFE_MACROS 1
+-  #endif
+-  #ifndef CYTHON_UNPACK_METHODS
+-    #define CYTHON_UNPACK_METHODS 1
+-  #endif
+-  #undef CYTHON_FAST_THREAD_STATE
+-  #define CYTHON_FAST_THREAD_STATE 0
+-  #undef CYTHON_FAST_GIL
+-  #define CYTHON_FAST_GIL 0
+-  #ifndef CYTHON_METH_FASTCALL
+-    #define CYTHON_METH_FASTCALL 1
+-  #endif
+-  #undef CYTHON_FAST_PYCALL
+-  #define CYTHON_FAST_PYCALL 0
+-  #ifndef CYTHON_PEP487_INIT_SUBCLASS
+-    #define CYTHON_PEP487_INIT_SUBCLASS 1
+-  #endif
+-  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+-    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+-  #endif
+-  #ifndef CYTHON_USE_MODULE_STATE
+-    #define CYTHON_USE_MODULE_STATE 0
+-  #endif
+-  #ifndef CYTHON_USE_TP_FINALIZE
+-    #define CYTHON_USE_TP_FINALIZE 1
+-  #endif
+-  #undef CYTHON_USE_DICT_VERSIONS
+-  #define CYTHON_USE_DICT_VERSIONS 0
+-  #undef CYTHON_USE_EXC_INFO_STACK
+-  #define CYTHON_USE_EXC_INFO_STACK 0
+-  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+-    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
+-  #endif
+-  #ifndef CYTHON_USE_FREELISTS
+-    #define CYTHON_USE_FREELISTS 0
+-  #endif
+-#else
+-  #define CYTHON_COMPILING_IN_PYPY 0
+-  #define CYTHON_COMPILING_IN_CPYTHON 1
+-  #define CYTHON_COMPILING_IN_LIMITED_API 0
+-  #define CYTHON_COMPILING_IN_GRAAL 0
+-  #define CYTHON_COMPILING_IN_NOGIL 0
+-  #ifndef CYTHON_USE_TYPE_SLOTS
+-    #define CYTHON_USE_TYPE_SLOTS 1
+-  #endif
+-  #ifndef CYTHON_USE_TYPE_SPECS
+-    #define CYTHON_USE_TYPE_SPECS 0
+-  #endif
+-  #ifndef CYTHON_USE_PYTYPE_LOOKUP
+-    #define CYTHON_USE_PYTYPE_LOOKUP 1
+-  #endif
+-  #if PY_MAJOR_VERSION < 3
+-    #undef CYTHON_USE_ASYNC_SLOTS
+-    #define CYTHON_USE_ASYNC_SLOTS 0
+-  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+-    #define CYTHON_USE_ASYNC_SLOTS 1
+-  #endif
+-  #ifndef CYTHON_USE_PYLONG_INTERNALS
+-    #define CYTHON_USE_PYLONG_INTERNALS 1
+-  #endif
+-  #ifndef CYTHON_USE_PYLIST_INTERNALS
+-    #define CYTHON_USE_PYLIST_INTERNALS 1
+-  #endif
+-  #ifndef CYTHON_USE_UNICODE_INTERNALS
+-    #define CYTHON_USE_UNICODE_INTERNALS 1
+-  #endif
+-  #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
+-    #undef CYTHON_USE_UNICODE_WRITER
+-    #define CYTHON_USE_UNICODE_WRITER 0
+-  #elif !defined(CYTHON_USE_UNICODE_WRITER)
+-    #define CYTHON_USE_UNICODE_WRITER 1
+-  #endif
+-  #ifndef CYTHON_AVOID_BORROWED_REFS
+-    #define CYTHON_AVOID_BORROWED_REFS 0
+-  #endif
+-  #ifndef CYTHON_ASSUME_SAFE_MACROS
+-    #define CYTHON_ASSUME_SAFE_MACROS 1
+-  #endif
+-  #ifndef CYTHON_UNPACK_METHODS
+-    #define CYTHON_UNPACK_METHODS 1
+-  #endif
+-  #ifndef CYTHON_FAST_THREAD_STATE
+-    #define CYTHON_FAST_THREAD_STATE 1
+-  #endif
+-  #ifndef CYTHON_FAST_GIL
+-    #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6)
+-  #endif
+-  #ifndef CYTHON_METH_FASTCALL
+-    #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1)
+-  #endif
+-  #ifndef CYTHON_FAST_PYCALL
+-    #define CYTHON_FAST_PYCALL 1
+-  #endif
+-  #ifndef CYTHON_PEP487_INIT_SUBCLASS
+-    #define CYTHON_PEP487_INIT_SUBCLASS 1
+-  #endif
+-  #if PY_VERSION_HEX < 0x03050000
+-    #undef CYTHON_PEP489_MULTI_PHASE_INIT
+-    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+-  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+-    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+-  #endif
+-  #ifndef CYTHON_USE_MODULE_STATE
+-    #define CYTHON_USE_MODULE_STATE 0
+-  #endif
+-  #if PY_VERSION_HEX < 0x030400a1
+-    #undef CYTHON_USE_TP_FINALIZE
+-    #define CYTHON_USE_TP_FINALIZE 0
+-  #elif !defined(CYTHON_USE_TP_FINALIZE)
+-    #define CYTHON_USE_TP_FINALIZE 1
+-  #endif
+-  #if PY_VERSION_HEX < 0x030600B1
+-    #undef CYTHON_USE_DICT_VERSIONS
+-    #define CYTHON_USE_DICT_VERSIONS 0
+-  #elif !defined(CYTHON_USE_DICT_VERSIONS)
+-    #define CYTHON_USE_DICT_VERSIONS  (PY_VERSION_HEX < 0x030C00A5)
+-  #endif
+-  #if PY_VERSION_HEX < 0x030700A3
+-    #undef CYTHON_USE_EXC_INFO_STACK
+-    #define CYTHON_USE_EXC_INFO_STACK 0
+-  #elif !defined(CYTHON_USE_EXC_INFO_STACK)
+-    #define CYTHON_USE_EXC_INFO_STACK 1
+-  #endif
+-  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+-    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
+-  #endif
+-  #ifndef CYTHON_USE_FREELISTS
+-    #define CYTHON_USE_FREELISTS 1
+-  #endif
+-#endif
+-#if !defined(CYTHON_FAST_PYCCALL)
+-#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
+-#endif
+-#if !defined(CYTHON_VECTORCALL)
+-#define CYTHON_VECTORCALL  (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1)
+-#endif
+-#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1)
+-#if CYTHON_USE_PYLONG_INTERNALS
+-  #if PY_MAJOR_VERSION < 3
+-    #include "longintrepr.h"
+-  #endif
+-  #undef SHIFT
+-  #undef BASE
+-  #undef MASK
+-  #ifdef SIZEOF_VOID_P
+-    enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
+-  #endif
+-#endif
+-#ifndef __has_attribute
+-  #define __has_attribute(x) 0
+-#endif
+-#ifndef __has_cpp_attribute
+-  #define __has_cpp_attribute(x) 0
+-#endif
+-#ifndef CYTHON_RESTRICT
+-  #if defined(__GNUC__)
+-    #define CYTHON_RESTRICT __restrict__
+-  #elif defined(_MSC_VER) && _MSC_VER >= 1400
+-    #define CYTHON_RESTRICT __restrict
+-  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+-    #define CYTHON_RESTRICT restrict
+-  #else
+-    #define CYTHON_RESTRICT
+-  #endif
+-#endif
+-#ifndef CYTHON_UNUSED
+-  #if defined(__cplusplus)
+-    /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17
+-     * but leads to warnings with -pedantic, since it is a C++17 feature */
+-    #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
+-      #if __has_cpp_attribute(maybe_unused)
+-        #define CYTHON_UNUSED [[maybe_unused]]
+-      #endif
+-    #endif
+-  #endif
+-#endif
+-#ifndef CYTHON_UNUSED
+-# if defined(__GNUC__)
+-#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+-#     define CYTHON_UNUSED __attribute__ ((__unused__))
+-#   else
+-#     define CYTHON_UNUSED
+-#   endif
+-# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+-#   define CYTHON_UNUSED __attribute__ ((__unused__))
+-# else
+-#   define CYTHON_UNUSED
+-# endif
+-#endif
+-#ifndef CYTHON_UNUSED_VAR
+-#  if defined(__cplusplus)
+-     template<class T> void CYTHON_UNUSED_VAR( const T& ) { }
+-#  else
+-#    define CYTHON_UNUSED_VAR(x) (void)(x)
+-#  endif
+-#endif
+-#ifndef CYTHON_MAYBE_UNUSED_VAR
+-  #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
+-#endif
+-#ifndef CYTHON_NCP_UNUSED
+-# if CYTHON_COMPILING_IN_CPYTHON
+-#  define CYTHON_NCP_UNUSED
+-# else
+-#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
+-# endif
+-#endif
+-#ifndef CYTHON_USE_CPP_STD_MOVE
+-  #if defined(__cplusplus) && (\
+-    __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
+-    #define CYTHON_USE_CPP_STD_MOVE 1
+-  #else
+-    #define CYTHON_USE_CPP_STD_MOVE 0
+-  #endif
+-#endif
+-#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+-#ifdef _MSC_VER
+-    #ifndef _MSC_STDINT_H_
+-        #if _MSC_VER < 1300
+-            typedef unsigned char     uint8_t;
+-            typedef unsigned short    uint16_t;
+-            typedef unsigned int      uint32_t;
+-        #else
+-            typedef unsigned __int8   uint8_t;
+-            typedef unsigned __int16  uint16_t;
+-            typedef unsigned __int32  uint32_t;
+-        #endif
+-    #endif
+-    #if _MSC_VER < 1300
+-        #ifdef _WIN64
+-            typedef unsigned long long  __pyx_uintptr_t;
+-        #else
+-            typedef unsigned int        __pyx_uintptr_t;
+-        #endif
+-    #else
+-        #ifdef _WIN64
+-            typedef unsigned __int64    __pyx_uintptr_t;
+-        #else
+-            typedef unsigned __int32    __pyx_uintptr_t;
+-        #endif
+-    #endif
+-#else
+-    #include <stdint.h>
+-    typedef uintptr_t  __pyx_uintptr_t;
+-#endif
+-#ifndef CYTHON_FALLTHROUGH
+-  #if defined(__cplusplus)
+-    /* for clang __has_cpp_attribute(fallthrough) is true even before C++17
+-     * but leads to warnings with -pedantic, since it is a C++17 feature */
+-    #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
+-      #if __has_cpp_attribute(fallthrough)
+-        #define CYTHON_FALLTHROUGH [[fallthrough]]
+-      #endif
+-    #endif
+-    #ifndef CYTHON_FALLTHROUGH
+-      #if __has_cpp_attribute(clang::fallthrough)
+-        #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+-      #elif __has_cpp_attribute(gnu::fallthrough)
+-        #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
+-      #endif
+-    #endif
+-  #endif
+-  #ifndef CYTHON_FALLTHROUGH
+-    #if __has_attribute(fallthrough)
+-      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+-    #else
+-      #define CYTHON_FALLTHROUGH
+-    #endif
+-  #endif
+-  #if defined(__clang__) && defined(__apple_build_version__)
+-    #if __apple_build_version__ < 7000000
+-      #undef  CYTHON_FALLTHROUGH
+-      #define CYTHON_FALLTHROUGH
+-    #endif
+-  #endif
+-#endif
+-#ifdef __cplusplus
+-  template <typename T>
+-  struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);};
+-  #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL<type>::value)
+-#else
+-  #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0)
+-#endif
+-#if CYTHON_COMPILING_IN_PYPY == 1
+-  #define __PYX_NEED_TP_PRINT_SLOT  (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000)
+-#else
+-  #define __PYX_NEED_TP_PRINT_SLOT  (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000)
+-#endif
+-#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer))
+-
+-#ifndef CYTHON_INLINE
+-  #if defined(__clang__)
+-    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+-  #elif defined(__GNUC__)
+-    #define CYTHON_INLINE __inline__
+-  #elif defined(_MSC_VER)
+-    #define CYTHON_INLINE __inline
+-  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+-    #define CYTHON_INLINE inline
+-  #else
+-    #define CYTHON_INLINE
+-  #endif
+-#endif
+-
+-#define __PYX_BUILD_PY_SSIZE_T "n"
+-#define CYTHON_FORMAT_SSIZE_T "z"
+-#if PY_MAJOR_VERSION < 3
+-  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+-  #define __Pyx_DefaultClassType PyClass_Type
+-  #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+-          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+-#else
+-  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+-  #define __Pyx_DefaultClassType PyType_Type
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-    static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
+-                                                    PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+-                                                    PyObject *fv, PyObject *cell, PyObject* fn,
+-                                                    PyObject *name, int fline, PyObject *lnos) {
+-        PyObject *exception_table = NULL;
+-        PyObject *types_module=NULL, *code_type=NULL, *result=NULL;
+-        #if __PYX_LIMITED_VERSION_HEX < 0x030B0000
+-        PyObject *version_info;
+-        PyObject *py_minor_version = NULL;
+-        #endif
+-        long minor_version = 0;
+-        PyObject *type, *value, *traceback;
+-        PyErr_Fetch(&type, &value, &traceback);
+-        #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000
+-        minor_version = 11;
+-        #else
+-        if (!(version_info = PySys_GetObject("version_info"))) goto end;
+-        if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end;
+-        minor_version = PyLong_AsLong(py_minor_version);
+-        Py_DECREF(py_minor_version);
+-        if (minor_version == -1 && PyErr_Occurred()) goto end;
+-        #endif
+-        if (!(types_module = PyImport_ImportModule("types"))) goto end;
+-        if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end;
+-        if (minor_version <= 7) {
+-            (void)p;
+-            result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code,
+-                          c, n, v, fn, name, fline, lnos, fv, cell);
+-        } else if (minor_version <= 10) {
+-            result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code,
+-                          c, n, v, fn, name, fline, lnos, fv, cell);
+-        } else {
+-            if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end;
+-            result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code,
+-                          c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell);
+-        }
+-    end:
+-        Py_XDECREF(code_type);
+-        Py_XDECREF(exception_table);
+-        Py_XDECREF(types_module);
+-        if (type) {
+-            PyErr_Restore(type, value, traceback);
+-        }
+-        return result;
+-    }
+-    #ifndef CO_OPTIMIZED
+-    #define CO_OPTIMIZED 0x0001
+-    #endif
+-    #ifndef CO_NEWLOCALS
+-    #define CO_NEWLOCALS 0x0002
+-    #endif
+-    #ifndef CO_VARARGS
+-    #define CO_VARARGS 0x0004
+-    #endif
+-    #ifndef CO_VARKEYWORDS
+-    #define CO_VARKEYWORDS 0x0008
+-    #endif
+-    #ifndef CO_ASYNC_GENERATOR
+-    #define CO_ASYNC_GENERATOR 0x0200
+-    #endif
+-    #ifndef CO_GENERATOR
+-    #define CO_GENERATOR 0x0020
+-    #endif
+-    #ifndef CO_COROUTINE
+-    #define CO_COROUTINE 0x0080
+-    #endif
+-#elif PY_VERSION_HEX >= 0x030B0000
+-  static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
+-                                                    PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+-                                                    PyObject *fv, PyObject *cell, PyObject* fn,
+-                                                    PyObject *name, int fline, PyObject *lnos) {
+-    PyCodeObject *result;
+-    PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0);
+-    if (!empty_bytes) return NULL;
+-    result =
+-      #if PY_VERSION_HEX >= 0x030C0000
+-        PyUnstable_Code_NewWithPosOnlyArgs
+-      #else
+-        PyCode_NewWithPosOnlyArgs
+-      #endif
+-        (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes);
+-    Py_DECREF(empty_bytes);
+-    return result;
+-  }
+-#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY
+-  #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+-          PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+-#else
+-  #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+-          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+-#endif
+-#endif
+-#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
+-  #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
+-#else
+-  #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
+-#endif
+-#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
+-  #define __Pyx_Py_Is(x, y)  Py_Is(x, y)
+-#else
+-  #define __Pyx_Py_Is(x, y) ((x) == (y))
+-#endif
+-#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
+-  #define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
+-#else
+-  #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
+-#endif
+-#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
+-  #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
+-#else
+-  #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
+-#endif
+-#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
+-  #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
+-#else
+-  #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
+-#endif
+-#define __Pyx_NoneAsNull(obj)  (__Pyx_Py_IsNone(obj) ? NULL : (obj))
+-#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+-  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+-#else
+-  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+-#endif
+-#ifndef CO_COROUTINE
+-  #define CO_COROUTINE 0x80
+-#endif
+-#ifndef CO_ASYNC_GENERATOR
+-  #define CO_ASYNC_GENERATOR 0x200
+-#endif
+-#ifndef Py_TPFLAGS_CHECKTYPES
+-  #define Py_TPFLAGS_CHECKTYPES 0
+-#endif
+-#ifndef Py_TPFLAGS_HAVE_INDEX
+-  #define Py_TPFLAGS_HAVE_INDEX 0
+-#endif
+-#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
+-  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+-#endif
+-#ifndef Py_TPFLAGS_HAVE_FINALIZE
+-  #define Py_TPFLAGS_HAVE_FINALIZE 0
+-#endif
+-#ifndef Py_TPFLAGS_SEQUENCE
+-  #define Py_TPFLAGS_SEQUENCE 0
+-#endif
+-#ifndef Py_TPFLAGS_MAPPING
+-  #define Py_TPFLAGS_MAPPING 0
+-#endif
+-#ifndef METH_STACKLESS
+-  #define METH_STACKLESS 0
+-#endif
+-#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
+-  #ifndef METH_FASTCALL
+-     #define METH_FASTCALL 0x80
+-  #endif
+-  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
+-  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
+-                                                          Py_ssize_t nargs, PyObject *kwnames);
+-#else
+-  #if PY_VERSION_HEX >= 0x030d00A4
+-  #  define __Pyx_PyCFunctionFast PyCFunctionFast
+-  #  define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords
+-  #else
+-  #  define __Pyx_PyCFunctionFast _PyCFunctionFast
+-  #  define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+-  #endif
+-#endif
+-#if CYTHON_METH_FASTCALL
+-  #define __Pyx_METH_FASTCALL METH_FASTCALL
+-  #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
+-  #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
+-#else
+-  #define __Pyx_METH_FASTCALL METH_VARARGS
+-  #define __Pyx_PyCFunction_FastCall PyCFunction
+-  #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
+-#endif
+-#if CYTHON_VECTORCALL
+-  #define __pyx_vectorcallfunc vectorcallfunc
+-  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  PY_VECTORCALL_ARGUMENTS_OFFSET
+-  #define __Pyx_PyVectorcall_NARGS(n)  PyVectorcall_NARGS((size_t)(n))
+-#elif CYTHON_BACKPORT_VECTORCALL
+-  typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args,
+-                                            size_t nargsf, PyObject *kwnames);
+-  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  ((size_t)1 << (8 * sizeof(size_t) - 1))
+-  #define __Pyx_PyVectorcall_NARGS(n)  ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET))
+-#else
+-  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  0
+-  #define __Pyx_PyVectorcall_NARGS(n)  ((Py_ssize_t)(n))
+-#endif
+-#if PY_MAJOR_VERSION >= 0x030900B1
+-#define __Pyx_PyCFunction_CheckExact(func)  PyCFunction_CheckExact(func)
+-#else
+-#define __Pyx_PyCFunction_CheckExact(func)  PyCFunction_Check(func)
+-#endif
+-#define __Pyx_CyOrPyCFunction_Check(func)  PyCFunction_Check(func)
+-#if CYTHON_COMPILING_IN_CPYTHON
+-#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func)  (((PyCFunctionObject*)(func))->m_ml->ml_meth)
+-#elif !CYTHON_COMPILING_IN_LIMITED_API
+-#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func)  PyCFunction_GET_FUNCTION(func)
+-#endif
+-#if CYTHON_COMPILING_IN_CPYTHON
+-#define __Pyx_CyOrPyCFunction_GET_FLAGS(func)  (((PyCFunctionObject*)(func))->m_ml->ml_flags)
+-static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) {
+-    return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self;
+-}
+-#endif
+-static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void *cfunc) {
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-    return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
+-#else
+-    return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
+-#endif
+-}
+-#define __Pyx_IsSameCFunction(func, cfunc)   __Pyx__IsSameCFunction(func, cfunc)
+-#if __PYX_LIMITED_VERSION_HEX < 0x030900B1
+-  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  ((void)m, PyType_FromSpecWithBases(s, b))
+-  typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
+-#else
+-  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  PyType_FromModuleAndSpec(m, s, b)
+-  #define __Pyx_PyCMethod  PyCMethod
+-#endif
+-#ifndef METH_METHOD
+-  #define METH_METHOD 0x200
+-#endif
+-#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+-  #define PyObject_Malloc(s)   PyMem_Malloc(s)
+-  #define PyObject_Free(p)     PyMem_Free(p)
+-  #define PyObject_Realloc(p)  PyMem_Realloc(p)
+-#endif
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+-  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)
+-#else
+-  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+-  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
+-#endif
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-  #define __Pyx_PyThreadState_Current PyThreadState_Get()
+-#elif !CYTHON_FAST_THREAD_STATE
+-  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+-#elif PY_VERSION_HEX >= 0x030d00A1
+-  #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked()
+-#elif PY_VERSION_HEX >= 0x03060000
+-  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
+-#elif PY_VERSION_HEX >= 0x03000000
+-  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+-#else
+-  #define __Pyx_PyThreadState_Current _PyThreadState_Current
+-#endif
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op)
+-{
+-    void *result;
+-    result = PyModule_GetState(op);
+-    if (!result)
+-        Py_FatalError("Couldn't find the module state");
+-    return result;
+-}
+-#endif
+-#define __Pyx_PyObject_GetSlot(obj, name, func_ctype)  __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype)
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((func_ctype) PyType_GetSlot((type), Py_##name))
+-#else
+-  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((type)->name)
+-#endif
+-#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
+-#include "pythread.h"
+-#define Py_tss_NEEDS_INIT 0
+-typedef int Py_tss_t;
+-static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
+-  *key = PyThread_create_key();
+-  return 0;
+-}
+-static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
+-  Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
+-  *key = Py_tss_NEEDS_INIT;
+-  return key;
+-}
+-static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
+-  PyObject_Free(key);
+-}
+-static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
+-  return *key != Py_tss_NEEDS_INIT;
+-}
+-static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
+-  PyThread_delete_key(*key);
+-  *key = Py_tss_NEEDS_INIT;
+-}
+-static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
+-  return PyThread_set_key_value(*key, value);
+-}
+-static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
+-  return PyThread_get_key_value(*key);
+-}
+-#endif
+-#if PY_MAJOR_VERSION < 3
+-    #if CYTHON_COMPILING_IN_PYPY
+-        #if PYPY_VERSION_NUM < 0x07030600
+-            #if defined(__cplusplus) && __cplusplus >= 201402L
+-                [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]]
+-            #elif defined(__GNUC__) || defined(__clang__)
+-                __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")))
+-            #elif defined(_MSC_VER)
+-                __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))
+-            #endif
+-            static CYTHON_INLINE int PyGILState_Check(void) {
+-                return 0;
+-            }
+-        #else  // PYPY_VERSION_NUM < 0x07030600
+-        #endif  // PYPY_VERSION_NUM < 0x07030600
+-    #else
+-        static CYTHON_INLINE int PyGILState_Check(void) {
+-            PyThreadState * tstate = _PyThreadState_Current;
+-            return tstate && (tstate == PyGILState_GetThisThreadState());
+-        }
+-    #endif
+-#endif
+-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyDict_NewPresized)
+-#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
+-#else
+-#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
+-#endif
+-#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
+-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+-#else
+-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+-#endif
+-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && PY_VERSION_HEX < 0x030d0000 && CYTHON_USE_UNICODE_INTERNALS
+-#define __Pyx_PyDict_GetItemStrWithError(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
+-static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
+-    PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
+-    if (res == NULL) PyErr_Clear();
+-    return res;
+-}
+-#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000)
+-#define __Pyx_PyDict_GetItemStrWithError  PyDict_GetItemWithError
+-#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
+-#else
+-static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
+-#if CYTHON_COMPILING_IN_PYPY
+-    return PyDict_GetItem(dict, name);
+-#else
+-    PyDictEntry *ep;
+-    PyDictObject *mp = (PyDictObject*) dict;
+-    long hash = ((PyStringObject *) name)->ob_shash;
+-    assert(hash != -1);
+-    ep = (mp->ma_lookup)(mp, name, hash);
+-    if (ep == NULL) {
+-        return NULL;
+-    }
+-    return ep->me_value;
+-#endif
+-}
+-#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
+-#endif
+-#if CYTHON_USE_TYPE_SLOTS
+-  #define __Pyx_PyType_GetFlags(tp)   (((PyTypeObject *)tp)->tp_flags)
+-  #define __Pyx_PyType_HasFeature(type, feature)  ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
+-  #define __Pyx_PyObject_GetIterNextFunc(obj)  (Py_TYPE(obj)->tp_iternext)
+-#else
+-  #define __Pyx_PyType_GetFlags(tp)   (PyType_GetFlags((PyTypeObject *)tp))
+-  #define __Pyx_PyType_HasFeature(type, feature)  PyType_HasFeature(type, feature)
+-  #define __Pyx_PyObject_GetIterNextFunc(obj)  PyIter_Next
+-#endif
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-  #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v)
+-#else
+-  #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v)
+-#endif
+-#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000
+-#define __Pyx_PyHeapTypeObject_GC_Del(obj)  {\
+-    PyTypeObject *type = Py_TYPE((PyObject*)obj);\
+-    assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
+-    PyObject_GC_Del(obj);\
+-    Py_DECREF(type);\
+-}
+-#else
+-#define __Pyx_PyHeapTypeObject_GC_Del(obj)  PyObject_GC_Del(obj)
+-#endif
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-  #define CYTHON_PEP393_ENABLED 1
+-  #define __Pyx_PyUnicode_READY(op)       (0)
+-  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GetLength(u)
+-  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
+-  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((void)u, 1114111U)
+-  #define __Pyx_PyUnicode_KIND(u)         ((void)u, (0))
+-  #define __Pyx_PyUnicode_DATA(u)         ((void*)u)
+-  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
+-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GetLength(u))
+-#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+-  #define CYTHON_PEP393_ENABLED 1
+-  #if PY_VERSION_HEX >= 0x030C0000
+-    #define __Pyx_PyUnicode_READY(op)       (0)
+-  #else
+-    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+-                                                0 : _PyUnicode_Ready((PyObject *)(op)))
+-  #endif
+-  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
+-  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+-  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
+-  #define __Pyx_PyUnicode_KIND(u)         ((int)PyUnicode_KIND(u))
+-  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
+-  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+-  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, (Py_UCS4) ch)
+-  #if PY_VERSION_HEX >= 0x030C0000
+-    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+-  #else
+-    #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+-    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+-    #else
+-    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+-    #endif
+-  #endif
+-#else
+-  #define CYTHON_PEP393_ENABLED 0
+-  #define PyUnicode_1BYTE_KIND  1
+-  #define PyUnicode_2BYTE_KIND  2
+-  #define PyUnicode_4BYTE_KIND  4
+-  #define __Pyx_PyUnicode_READY(op)       (0)
+-  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
+-  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+-  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U)
+-  #define __Pyx_PyUnicode_KIND(u)         ((int)sizeof(Py_UNICODE))
+-  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
+-  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+-  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch)
+-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
+-#endif
+-#if CYTHON_COMPILING_IN_PYPY
+-  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
+-  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+-#else
+-  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
+-  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
+-      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+-#endif
+-#if CYTHON_COMPILING_IN_PYPY
+-  #if !defined(PyUnicode_DecodeUnicodeEscape)
+-    #define PyUnicode_DecodeUnicodeEscape(s, size, errors)  PyUnicode_Decode(s, size, "unicode_escape", errors)
+-  #endif
+-  #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500)
+-    #undef PyUnicode_Contains
+-    #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
+-  #endif
+-  #if !defined(PyByteArray_Check)
+-    #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
+-  #endif
+-  #if !defined(PyObject_Format)
+-    #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
+-  #endif
+-#endif
+-#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+-#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
+-#if PY_MAJOR_VERSION >= 3
+-  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
+-#else
+-  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
+-#endif
+-#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+-  #define PyObject_ASCII(o)            PyObject_Repr(o)
+-#endif
+-#if PY_MAJOR_VERSION >= 3
+-  #define PyBaseString_Type            PyUnicode_Type
+-  #define PyStringObject               PyUnicodeObject
+-  #define PyString_Type                PyUnicode_Type
+-  #define PyString_Check               PyUnicode_Check
+-  #define PyString_CheckExact          PyUnicode_CheckExact
+-#ifndef PyObject_Unicode
+-  #define PyObject_Unicode             PyObject_Str
+-#endif
+-#endif
+-#if PY_MAJOR_VERSION >= 3
+-  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
+-  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
+-#else
+-  #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
+-  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
+-#endif
+-#if CYTHON_COMPILING_IN_CPYTHON
+-  #define __Pyx_PySequence_ListKeepNew(obj)\
+-    (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
+-#else
+-  #define __Pyx_PySequence_ListKeepNew(obj)  PySequence_List(obj)
+-#endif
+-#ifndef PySet_CheckExact
+-  #define PySet_CheckExact(obj)        __Pyx_IS_TYPE(obj, &PySet_Type)
+-#endif
+-#if PY_VERSION_HEX >= 0x030900A4
+-  #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
+-  #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
+-#else
+-  #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
+-  #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
+-#endif
+-#if CYTHON_ASSUME_SAFE_MACROS
+-  #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i)
+-  #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)
+-  #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0))
+-  #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0))
+-  #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o)
+-  #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o)
+-  #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o)
+-  #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o)
+-  #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o)
+-#else
+-  #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i)
+-  #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)
+-  #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v)
+-  #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v)
+-  #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o)
+-  #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o)
+-  #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o)
+-  #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o)
+-  #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o)
+-#endif
+-#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
+-  #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
+-#else
+-  static CYTHON_INLINE PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
+-      PyObject *module = PyImport_AddModule(name);
+-      Py_XINCREF(module);
+-      return module;
+-  }
+-#endif
+-#if PY_MAJOR_VERSION >= 3
+-  #define PyIntObject                  PyLongObject
+-  #define PyInt_Type                   PyLong_Type
+-  #define PyInt_Check(op)              PyLong_Check(op)
+-  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+-  #define __Pyx_Py3Int_Check(op)       PyLong_Check(op)
+-  #define __Pyx_Py3Int_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 PyNumber_Int                 PyNumber_Long
+-#else
+-  #define __Pyx_Py3Int_Check(op)       (PyLong_Check(op) || PyInt_Check(op))
+-  #define __Pyx_Py3Int_CheckExact(op)  (PyLong_CheckExact(op) || PyInt_CheckExact(op))
+-#endif
+-#if PY_MAJOR_VERSION >= 3
+-  #define PyBoolObject                 PyLongObject
+-#endif
+-#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+-  #ifndef PyUnicode_InternFromString
+-    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+-  #endif
+-#endif
+-#if PY_VERSION_HEX < 0x030200A4
+-  typedef long Py_hash_t;
+-  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+-  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsHash_t
+-#else
+-  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+-  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsSsize_t
+-#endif
+-#if CYTHON_USE_ASYNC_SLOTS
+-  #if PY_VERSION_HEX >= 0x030500B1
+-    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+-    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+-  #else
+-    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+-  #endif
+-#else
+-  #define __Pyx_PyType_AsAsync(obj) NULL
+-#endif
+-#ifndef __Pyx_PyAsyncMethodsStruct
+-    typedef struct {
+-        unaryfunc am_await;
+-        unaryfunc am_aiter;
+-        unaryfunc am_anext;
+-    } __Pyx_PyAsyncMethodsStruct;
+-#endif
+-
+-#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
+-  #if !defined(_USE_MATH_DEFINES)
+-    #define _USE_MATH_DEFINES
+-  #endif
+-#endif
+-#include <math.h>
+-#ifdef NAN
+-#define __PYX_NAN() ((float) NAN)
+-#else
+-static CYTHON_INLINE float __PYX_NAN() {
+-  float value;
+-  memset(&value, 0xFF, sizeof(value));
+-  return value;
+-}
+-#endif
+-#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+-#define __Pyx_truncl trunc
+-#else
+-#define __Pyx_truncl truncl
+-#endif
+-
+-#define __PYX_MARK_ERR_POS(f_index, lineno) \
+-    { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__;  (void)__pyx_clineno; }
+-#define __PYX_ERR(f_index, lineno, Ln_error) \
+-    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }
+-
+-#ifdef CYTHON_EXTERN_C
+-    #undef __PYX_EXTERN_C
+-    #define __PYX_EXTERN_C CYTHON_EXTERN_C
+-#elif defined(__PYX_EXTERN_C)
+-    #ifdef _MSC_VER
+-    #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
+-    #else
+-    #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
+-    #endif
+-#else
+-  #ifdef __cplusplus
+-    #define __PYX_EXTERN_C extern "C"
+-  #else
+-    #define __PYX_EXTERN_C extern
+-  #endif
+-#endif
+-
+-#define __PYX_HAVE__pyliblo3___liblo
+-#define __PYX_HAVE_API__pyliblo3___liblo
+-/* Early includes */
+-#include <stdint.h>
+-#include <string.h>
+-#include <stdio.h>
+-#include "lo/lo.h"
+-#include <stddef.h>
+-#include "pythread.h"
+-#include <stdlib.h>
+-#include <math.h>
+-#ifdef _OPENMP
+-#include <omp.h>
+-#endif /* _OPENMP */
+-
+-#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
+-#define CYTHON_WITHOUT_ASSERTIONS
+-#endif
+-
+-typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
+-                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
+-
+-#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
+-#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
+-#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
+-#define __PYX_DEFAULT_STRING_ENCODING ""
+-#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
+-#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+-#define __Pyx_uchar_cast(c) ((unsigned char)c)
+-#define __Pyx_long_cast(x) ((long)x)
+-#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
+-    (sizeof(type) < sizeof(Py_ssize_t))  ||\
+-    (sizeof(type) > sizeof(Py_ssize_t) &&\
+-          likely(v < (type)PY_SSIZE_T_MAX ||\
+-                 v == (type)PY_SSIZE_T_MAX)  &&\
+-          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
+-                                v == (type)PY_SSIZE_T_MIN)))  ||\
+-    (sizeof(type) == sizeof(Py_ssize_t) &&\
+-          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
+-                               v == (type)PY_SSIZE_T_MAX)))  )
+-static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
+-    return (size_t) i < (size_t) limit;
+-}
+-#if defined (__cplusplus) && __cplusplus >= 201103L
+-    #include <cstdlib>
+-    #define __Pyx_sst_abs(value) std::abs(value)
+-#elif SIZEOF_INT >= SIZEOF_SIZE_T
+-    #define __Pyx_sst_abs(value) abs(value)
+-#elif SIZEOF_LONG >= SIZEOF_SIZE_T
+-    #define __Pyx_sst_abs(value) labs(value)
+-#elif defined (_MSC_VER)
+-    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
+-#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+-    #define __Pyx_sst_abs(value) llabs(value)
+-#elif defined (__GNUC__)
+-    #define __Pyx_sst_abs(value) __builtin_llabs(value)
+-#else
+-    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
+-#endif
+-static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s);
+-static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+-static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+-static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*);
+-#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
+-#define __Pyx_PyBytes_FromString        PyBytes_FromString
+-#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
+-static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
+-#if PY_MAJOR_VERSION < 3
+-    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
+-    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+-#else
+-    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
+-    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
+-#endif
+-#define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
+-#define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
+-#define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
+-#define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
+-#define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
+-#define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
+-#define __Pyx_PyObject_AsWritableString(s)    ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
+-#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
+-#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
+-#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
+-#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
+-#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
+-#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
+-#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
+-#define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
+-#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
+-#define __Pyx_PyUnicode_FromOrdinal(o)       PyUnicode_FromOrdinal((int)o)
+-#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
+-#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
+-#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
+-static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
+-static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+-static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
+-static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
+-#define __Pyx_PySequence_Tuple(obj)\
+-    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
+-static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+-static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+-static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
+-#if CYTHON_ASSUME_SAFE_MACROS
+-#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+-#else
+-#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+-#endif
+-#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+-#if PY_MAJOR_VERSION >= 3
+-#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+-#else
+-#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+-#endif
+-#if CYTHON_USE_PYLONG_INTERNALS
+-  #if PY_VERSION_HEX >= 0x030C00A7
+-  #ifndef _PyLong_SIGN_MASK
+-    #define _PyLong_SIGN_MASK 3
+-  #endif
+-  #ifndef _PyLong_NON_SIZE_BITS
+-    #define _PyLong_NON_SIZE_BITS 3
+-  #endif
+-  #define __Pyx_PyLong_Sign(x)  (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
+-  #define __Pyx_PyLong_IsNeg(x)  ((__Pyx_PyLong_Sign(x) & 2) != 0)
+-  #define __Pyx_PyLong_IsNonNeg(x)  (!__Pyx_PyLong_IsNeg(x))
+-  #define __Pyx_PyLong_IsZero(x)  (__Pyx_PyLong_Sign(x) & 1)
+-  #define __Pyx_PyLong_IsPos(x)  (__Pyx_PyLong_Sign(x) == 0)
+-  #define __Pyx_PyLong_CompactValueUnsigned(x)  (__Pyx_PyLong_Digits(x)[0])
+-  #define __Pyx_PyLong_DigitCount(x)  ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
+-  #define __Pyx_PyLong_SignedDigitCount(x)\
+-        ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
+-  #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
+-    #define __Pyx_PyLong_IsCompact(x)     PyUnstable_Long_IsCompact((PyLongObject*) x)
+-    #define __Pyx_PyLong_CompactValue(x)  PyUnstable_Long_CompactValue((PyLongObject*) x)
+-  #else
+-    #define __Pyx_PyLong_IsCompact(x)     (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
+-    #define __Pyx_PyLong_CompactValue(x)  ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
+-  #endif
+-  typedef Py_ssize_t  __Pyx_compact_pylong;
+-  typedef size_t  __Pyx_compact_upylong;
+-  #else
+-  #define __Pyx_PyLong_IsNeg(x)  (Py_SIZE(x) < 0)
+-  #define __Pyx_PyLong_IsNonNeg(x)  (Py_SIZE(x) >= 0)
+-  #define __Pyx_PyLong_IsZero(x)  (Py_SIZE(x) == 0)
+-  #define __Pyx_PyLong_IsPos(x)  (Py_SIZE(x) > 0)
+-  #define __Pyx_PyLong_CompactValueUnsigned(x)  ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
+-  #define __Pyx_PyLong_DigitCount(x)  __Pyx_sst_abs(Py_SIZE(x))
+-  #define __Pyx_PyLong_SignedDigitCount(x)  Py_SIZE(x)
+-  #define __Pyx_PyLong_IsCompact(x)  (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
+-  #define __Pyx_PyLong_CompactValue(x)\
+-        ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
+-  typedef sdigit  __Pyx_compact_pylong;
+-  typedef digit  __Pyx_compact_upylong;
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C00A5
+-  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->long_value.ob_digit)
+-  #else
+-  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->ob_digit)
+-  #endif
+-#endif
+-#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+-#include <string.h>
+-static int __Pyx_sys_getdefaultencoding_not_ascii;
+-static int __Pyx_init_sys_getdefaultencoding_params(void) {
+-    PyObject* sys;
+-    PyObject* default_encoding = NULL;
+-    PyObject* ascii_chars_u = NULL;
+-    PyObject* ascii_chars_b = NULL;
+-    const char* default_encoding_c;
+-    sys = PyImport_ImportModule("sys");
+-    if (!sys) goto bad;
+-    default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
+-    Py_DECREF(sys);
+-    if (!default_encoding) goto bad;
+-    default_encoding_c = PyBytes_AsString(default_encoding);
+-    if (!default_encoding_c) goto bad;
+-    if (strcmp(default_encoding_c, "ascii") == 0) {
+-        __Pyx_sys_getdefaultencoding_not_ascii = 0;
+-    } else {
+-        char ascii_chars[128];
+-        int c;
+-        for (c = 0; c < 128; c++) {
+-            ascii_chars[c] = (char) c;
+-        }
+-        __Pyx_sys_getdefaultencoding_not_ascii = 1;
+-        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
+-        if (!ascii_chars_u) goto bad;
+-        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
+-        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
+-            PyErr_Format(
+-                PyExc_ValueError,
+-                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
+-                default_encoding_c);
+-            goto bad;
+-        }
+-        Py_DECREF(ascii_chars_u);
+-        Py_DECREF(ascii_chars_b);
+-    }
+-    Py_DECREF(default_encoding);
+-    return 0;
+-bad:
+-    Py_XDECREF(default_encoding);
+-    Py_XDECREF(ascii_chars_u);
+-    Py_XDECREF(ascii_chars_b);
+-    return -1;
+-}
+-#endif
+-#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
+-#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
+-#else
+-#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
+-#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+-#include <string.h>
+-static char* __PYX_DEFAULT_STRING_ENCODING;
+-static int __Pyx_init_sys_getdefaultencoding_params(void) {
+-    PyObject* sys;
+-    PyObject* default_encoding = NULL;
+-    char* default_encoding_c;
+-    sys = PyImport_ImportModule("sys");
+-    if (!sys) goto bad;
+-    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+-    Py_DECREF(sys);
+-    if (!default_encoding) goto bad;
+-    default_encoding_c = PyBytes_AsString(default_encoding);
+-    if (!default_encoding_c) goto bad;
+-    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
+-    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
+-    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
+-    Py_DECREF(default_encoding);
+-    return 0;
+-bad:
+-    Py_XDECREF(default_encoding);
+-    return -1;
+-}
+-#endif
+-#endif
+-
+-
+-/* Test for GCC > 2.95 */
+-#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+-  #define likely(x)   __builtin_expect(!!(x), 1)
+-  #define unlikely(x) __builtin_expect(!!(x), 0)
+-#else /* !__GNUC__ or GCC < 2.95 */
+-  #define likely(x)   (x)
+-  #define unlikely(x) (x)
+-#endif /* __GNUC__ */
+-static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
+-
+-#if !CYTHON_USE_MODULE_STATE
+-static PyObject *__pyx_m = NULL;
+-#endif
+-static int __pyx_lineno;
+-static int __pyx_clineno = 0;
+-static const char * __pyx_cfilenm = __FILE__;
+-static const char *__pyx_filename;
+-
+-/* #### Code section: filename_table ### */
+-
+-static const char *__pyx_f[] = {
+-  "pyliblo3/_liblo.pyx",
+-  "contextvars.pxd",
+-  "<stringsource>",
+-  "type.pxd",
+-  "bool.pxd",
+-  "complex.pxd",
+-};
+-/* #### Code section: utility_code_proto_before_types ### */
+-/* ForceInitThreads.proto */
+-#ifndef __PYX_FORCE_INIT_THREADS
+-  #define __PYX_FORCE_INIT_THREADS 0
+-#endif
+-
+-/* NoFastGil.proto */
+-#define __Pyx_PyGILState_Ensure PyGILState_Ensure
+-#define __Pyx_PyGILState_Release PyGILState_Release
+-#define __Pyx_FastGIL_Remember()
+-#define __Pyx_FastGIL_Forget()
+-#define __Pyx_FastGilFuncInit()
+-
+-/* #### Code section: numeric_typedefs ### */
+-/* #### Code section: complex_type_declarations ### */
+-/* #### Code section: type_declarations ### */
+-
+-/*--- Type declarations ---*/
+-struct __pyx_obj_8pyliblo3_6_liblo_Callback;
+-struct __pyx_obj_8pyliblo3_6_liblo__ServerBase;
+-struct __pyx_obj_8pyliblo3_6_liblo_Server;
+-struct __pyx_obj_8pyliblo3_6_liblo_ServerThread;
+-struct __pyx_obj_8pyliblo3_6_liblo_Address;
+-struct __pyx_obj_8pyliblo3_6_liblo__Blob;
+-struct __pyx_obj_8pyliblo3_6_liblo_Message;
+-struct __pyx_obj_8pyliblo3_6_liblo_Bundle;
+-struct __pyx_opt_args_7cpython_11contextvars_get_value;
+-struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default;
+-
+-/* "cpython/contextvars.pxd":112
+- * 
+- * 
+- * cdef inline object get_value(var, default_value=None):             # <<<<<<<<<<<<<<
+- *     """Return a new reference to the value of the context variable,
+- *     or the default value of the context variable,
+- */
+-struct __pyx_opt_args_7cpython_11contextvars_get_value {
+-  int __pyx_n;
+-  PyObject *default_value;
+-};
+-
+-/* "cpython/contextvars.pxd":129
+- * 
+- * 
+- * cdef inline object get_value_no_default(var, default_value=None):             # <<<<<<<<<<<<<<
+- *     """Return a new reference to the value of the context variable,
+- *     or the provided default value if no such value was found.
+- */
+-struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default {
+-  int __pyx_n;
+-  PyObject *default_value;
+-};
+-
+-/* "pyliblo3/_liblo.pyx":76
+- * 
+- * 
+- * cdef class Callback:             # <<<<<<<<<<<<<<
+- *     """
+- *     Used internally to wrap a python function as a callback
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo_Callback {
+-  PyObject_HEAD
+-  PyObject *func;
+-  PyObject *user_data;
+-  int numargs;
+-  int has_varargs;
+-};
+-
+-
+-/* "pyliblo3/_liblo.pyx":116
+- * 
+- * # forward declarations
+- * cdef class _ServerBase             # <<<<<<<<<<<<<<
+- * cdef class Address
+- * cdef class Message
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo__ServerBase {
+-  PyObject_HEAD
+-  struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *__pyx_vtab;
+-  lo_server _server;
+-  PyObject *_keep_refs;
+-};
+-
+-
+-/* "pyliblo3/_liblo.pyx":589
+- * 
+- * 
+- * cdef class Server(_ServerBase):             # <<<<<<<<<<<<<<
+- *     """
+- *     A server that can receive OSC messages, blocking
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo_Server {
+-  struct __pyx_obj_8pyliblo3_6_liblo__ServerBase __pyx_base;
+-};
+-
+-
+-/* "pyliblo3/_liblo.pyx":668
+- * 
+- * 
+- * cdef class ServerThread(_ServerBase):             # <<<<<<<<<<<<<<
+- *     """
+- *     Server running in a thread
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo_ServerThread {
+-  struct __pyx_obj_8pyliblo3_6_liblo__ServerBase __pyx_base;
+-  lo_server_thread _server_thread;
+-};
+-
+-
+-/* "pyliblo3/_liblo.pyx":117
+- * # forward declarations
+- * cdef class _ServerBase
+- * cdef class Address             # <<<<<<<<<<<<<<
+- * cdef class Message
+- * cdef class Bundle
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo_Address {
+-  PyObject_HEAD
+-  lo_address _address;
+-};
+-
+-
+-/* "pyliblo3/_liblo.pyx":888
+- * ################################################################################
+- * 
+- * cdef class _Blob:             # <<<<<<<<<<<<<<
+- *     cdef lo_blob _blob
+- * 
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo__Blob {
+-  PyObject_HEAD
+-  lo_blob _blob;
+-};
+-
+-
+-/* "pyliblo3/_liblo.pyx":118
+- * cdef class _ServerBase
+- * cdef class Address
+- * cdef class Message             # <<<<<<<<<<<<<<
+- * cdef class Bundle
+- * 
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo_Message {
+-  PyObject_HEAD
+-  struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message *__pyx_vtab;
+-  PyObject *_path;
+-  lo_message _message;
+-  PyObject *_keep_refs;
+-};
+-
+-
+-/* "pyliblo3/_liblo.pyx":119
+- * cdef class Address
+- * cdef class Message
+- * cdef class Bundle             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-struct __pyx_obj_8pyliblo3_6_liblo_Bundle {
+-  PyObject_HEAD
+-  lo_bundle _bundle;
+-  PyObject *_keep_refs;
+-};
+-
+-
+-
+-/* "pyliblo3/_liblo.pyx":359
+- * # common base class for both Server and ServerThread
+- * 
+- * cdef class _ServerBase:             # <<<<<<<<<<<<<<
+- *     cdef lo_server _server
+- *     cdef list _keep_refs
+- */
+-
+-struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase {
+-  PyObject *(*_check)(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *);
+-};
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *__pyx_vtabptr_8pyliblo3_6_liblo__ServerBase;
+-
+-
+-/* "pyliblo3/_liblo.pyx":917
+- * 
+- * 
+- * cdef class Message:             # <<<<<<<<<<<<<<
+- *     """
+- *     An OSC message, consisting of a path and arbitrary arguments.
+- */
+-
+-struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message {
+-  PyObject *(*_add)(struct __pyx_obj_8pyliblo3_6_liblo_Message *, PyObject *, PyObject *);
+-  PyObject *(*_add_auto)(struct __pyx_obj_8pyliblo3_6_liblo_Message *, PyObject *);
+-};
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message *__pyx_vtabptr_8pyliblo3_6_liblo_Message;
+-
+-
+-/* "pyliblo3/_liblo.pyx":589
+- * 
+- * 
+- * cdef class Server(_ServerBase):             # <<<<<<<<<<<<<<
+- *     """
+- *     A server that can receive OSC messages, blocking
+- */
+-
+-struct __pyx_vtabstruct_8pyliblo3_6_liblo_Server {
+-  struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase __pyx_base;
+-};
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo_Server *__pyx_vtabptr_8pyliblo3_6_liblo_Server;
+-
+-
+-/* "pyliblo3/_liblo.pyx":668
+- * 
+- * 
+- * cdef class ServerThread(_ServerBase):             # <<<<<<<<<<<<<<
+- *     """
+- *     Server running in a thread
+- */
+-
+-struct __pyx_vtabstruct_8pyliblo3_6_liblo_ServerThread {
+-  struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase __pyx_base;
+-};
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo_ServerThread *__pyx_vtabptr_8pyliblo3_6_liblo_ServerThread;
+-/* #### Code section: utility_code_proto ### */
+-
+-/* --- Runtime support code (head) --- */
+-/* Refnanny.proto */
+-#ifndef CYTHON_REFNANNY
+-  #define CYTHON_REFNANNY 0
+-#endif
+-#if CYTHON_REFNANNY
+-  typedef struct {
+-    void (*INCREF)(void*, PyObject*, Py_ssize_t);
+-    void (*DECREF)(void*, PyObject*, Py_ssize_t);
+-    void (*GOTREF)(void*, PyObject*, Py_ssize_t);
+-    void (*GIVEREF)(void*, PyObject*, Py_ssize_t);
+-    void* (*SetupContext)(const char*, Py_ssize_t, const char*);
+-    void (*FinishContext)(void**);
+-  } __Pyx_RefNannyAPIStruct;
+-  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+-  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
+-  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+-#ifdef WITH_THREAD
+-  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+-          if (acquire_gil) {\
+-              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
+-              PyGILState_Release(__pyx_gilstate_save);\
+-          } else {\
+-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
+-          }
+-  #define __Pyx_RefNannyFinishContextNogil() {\
+-              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+-              __Pyx_RefNannyFinishContext();\
+-              PyGILState_Release(__pyx_gilstate_save);\
+-          }
+-#else
+-  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+-          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__))
+-  #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext()
+-#endif
+-  #define __Pyx_RefNannyFinishContextNogil() {\
+-              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+-              __Pyx_RefNannyFinishContext();\
+-              PyGILState_Release(__pyx_gilstate_save);\
+-          }
+-  #define __Pyx_RefNannyFinishContext()\
+-          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+-  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+-  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+-  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+-  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+-  #define __Pyx_XINCREF(r)  do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0)
+-  #define __Pyx_XDECREF(r)  do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0)
+-  #define __Pyx_XGOTREF(r)  do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0)
+-  #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0)
+-#else
+-  #define __Pyx_RefNannyDeclarations
+-  #define __Pyx_RefNannySetupContext(name, acquire_gil)
+-  #define __Pyx_RefNannyFinishContextNogil()
+-  #define __Pyx_RefNannyFinishContext()
+-  #define __Pyx_INCREF(r) Py_INCREF(r)
+-  #define __Pyx_DECREF(r) Py_DECREF(r)
+-  #define __Pyx_GOTREF(r)
+-  #define __Pyx_GIVEREF(r)
+-  #define __Pyx_XINCREF(r) Py_XINCREF(r)
+-  #define __Pyx_XDECREF(r) Py_XDECREF(r)
+-  #define __Pyx_XGOTREF(r)
+-  #define __Pyx_XGIVEREF(r)
+-#endif
+-#define __Pyx_Py_XDECREF_SET(r, v) do {\
+-        PyObject *tmp = (PyObject *) r;\
+-        r = v; Py_XDECREF(tmp);\
+-    } while (0)
+-#define __Pyx_XDECREF_SET(r, v) do {\
+-        PyObject *tmp = (PyObject *) r;\
+-        r = v; __Pyx_XDECREF(tmp);\
+-    } while (0)
+-#define __Pyx_DECREF_SET(r, v) do {\
+-        PyObject *tmp = (PyObject *) r;\
+-        r = v; __Pyx_DECREF(tmp);\
+-    } while (0)
+-#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+-#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
+-
+-/* PyErrExceptionMatches.proto */
+-#if CYTHON_FAST_THREAD_STATE
+-#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+-static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+-#else
+-#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
+-#endif
+-
+-/* PyThreadStateGet.proto */
+-#if CYTHON_FAST_THREAD_STATE
+-#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
+-#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
+-#if PY_VERSION_HEX >= 0x030C00A6
+-#define __Pyx_PyErr_Occurred()  (__pyx_tstate->current_exception != NULL)
+-#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
+-#else
+-#define __Pyx_PyErr_Occurred()  (__pyx_tstate->curexc_type != NULL)
+-#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->curexc_type)
+-#endif
+-#else
+-#define __Pyx_PyThreadState_declare
+-#define __Pyx_PyThreadState_assign
+-#define __Pyx_PyErr_Occurred()  (PyErr_Occurred() != NULL)
+-#define __Pyx_PyErr_CurrentExceptionType()  PyErr_Occurred()
+-#endif
+-
+-/* PyErrFetchRestore.proto */
+-#if CYTHON_FAST_THREAD_STATE
+-#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
+-#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+-#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+-#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+-#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+-static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+-static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6
+-#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
+-#else
+-#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+-#endif
+-#else
+-#define __Pyx_PyErr_Clear() PyErr_Clear()
+-#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+-#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
+-#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
+-#define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)
+-#define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)
+-#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
+-#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
+-#endif
+-
+-/* PyObjectGetAttrStr.proto */
+-#if CYTHON_USE_TYPE_SLOTS
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
+-#else
+-#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
+-#endif
+-
+-/* PyObjectGetAttrStrNoError.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);
+-
+-/* GetBuiltinName.proto */
+-static PyObject *__Pyx_GetBuiltinName(PyObject *name);
+-
+-/* TupleAndListFromArray.proto */
+-#if CYTHON_COMPILING_IN_CPYTHON
+-static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
+-static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
+-#endif
+-
+-/* IncludeStringH.proto */
+-#include <string.h>
+-
+-/* BytesEquals.proto */
+-static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+-
+-/* UnicodeEquals.proto */
+-static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
+-
+-/* fastcall.proto */
+-#if CYTHON_AVOID_BORROWED_REFS
+-    #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i)
+-#elif CYTHON_ASSUME_SAFE_MACROS
+-    #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i)
+-#else
+-    #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i)
+-#endif
+-#if CYTHON_AVOID_BORROWED_REFS
+-    #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg)
+-    #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg)
+-#else
+-    #define __Pyx_Arg_NewRef_VARARGS(arg) arg
+-    #define __Pyx_Arg_XDECREF_VARARGS(arg)
+-#endif
+-#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
+-#define __Pyx_KwValues_VARARGS(args, nargs) NULL
+-#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
+-#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
+-#if CYTHON_METH_FASTCALL
+-    #define __Pyx_Arg_FASTCALL(args, i) args[i]
+-    #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds)
+-    #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
+-    static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
+-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
+-    CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues);
+-  #else
+-    #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
+-  #endif
+-    #define __Pyx_Arg_NewRef_FASTCALL(arg) arg  /* no-op, __Pyx_Arg_FASTCALL is direct and this needs
+-                                                   to have the same reference counting */
+-    #define __Pyx_Arg_XDECREF_FASTCALL(arg)
+-#else
+-    #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS
+-    #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
+-    #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
+-    #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
+-    #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
+-    #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg)
+-    #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg)
+-#endif
+-#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start)
+-#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start)
+-#else
+-#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
+-#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
+-#endif
+-
+-/* RaiseDoubleKeywords.proto */
+-static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
+-
+-/* ParseKeywords.proto */
+-static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues,
+-    PyObject **argnames[],
+-    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,
+-    const char* function_name);
+-
+-/* RaiseArgTupleInvalid.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);
+-
+-/* ArgTypeTest.proto */
+-#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
+-    ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\
+-        __Pyx__ArgTypeTest(obj, type, name, exact))
+-static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
+-
+-/* StrEquals.proto */
+-#if PY_MAJOR_VERSION >= 3
+-#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
+-#else
+-#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
+-#endif
+-
+-/* PyObjectFormatSimple.proto */
+-#if CYTHON_COMPILING_IN_PYPY
+-    #define __Pyx_PyObject_FormatSimple(s, f) (\
+-        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+-        PyObject_Format(s, f))
+-#elif PY_MAJOR_VERSION < 3
+-    #define __Pyx_PyObject_FormatSimple(s, f) (\
+-        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+-        likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\
+-        PyObject_Format(s, f))
+-#elif CYTHON_USE_TYPE_SLOTS
+-    #define __Pyx_PyObject_FormatSimple(s, f) (\
+-        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+-        likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\
+-        likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\
+-        PyObject_Format(s, f))
+-#else
+-    #define __Pyx_PyObject_FormatSimple(s, f) (\
+-        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+-        PyObject_Format(s, f))
+-#endif
+-
+-/* JoinPyUnicode.proto */
+-static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength,
+-                                      Py_UCS4 max_char);
+-
+-/* PyFunctionFastCall.proto */
+-#if CYTHON_FAST_PYCALL
+-#if !CYTHON_VECTORCALL
+-#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+-    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+-static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
+-#endif
+-#define __Pyx_BUILD_ASSERT_EXPR(cond)\
+-    (sizeof(char [1 - 2*!(cond)]) - 1)
+-#ifndef Py_MEMBER_SIZE
+-#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
+-#endif
+-#if !CYTHON_VECTORCALL
+-#if PY_VERSION_HEX >= 0x03080000
+-  #include "frameobject.h"
+-#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
+-  #ifndef Py_BUILD_CORE
+-    #define Py_BUILD_CORE 1
+-  #endif
+-  #include "internal/pycore_frame.h"
+-#endif
+-  #define __Pxy_PyFrame_Initialize_Offsets()
+-  #define __Pyx_PyFrame_GetLocalsplus(frame)  ((frame)->f_localsplus)
+-#else
+-  static size_t __pyx_pyframe_localsplus_offset = 0;
+-  #include "frameobject.h"
+-  #define __Pxy_PyFrame_Initialize_Offsets()\
+-    ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
+-     (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
+-  #define __Pyx_PyFrame_GetLocalsplus(frame)\
+-    (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+-#endif
+-#endif
+-#endif
+-
+-/* PyObjectCall.proto */
+-#if CYTHON_COMPILING_IN_CPYTHON
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
+-#else
+-#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+-#endif
+-
+-/* PyObjectCallMethO.proto */
+-#if CYTHON_COMPILING_IN_CPYTHON
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
+-#endif
+-
+-/* PyObjectFastCall.proto */
+-#define __Pyx_PyObject_FastCall(func, args, nargs)  __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs);
+-
+-/* PyObjectCallOneArg.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
+-
+-/* RaiseException.proto */
+-static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
+-
+-/* PyDictVersioning.proto */
+-#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
+-#define __PYX_DICT_VERSION_INIT  ((PY_UINT64_T) -1)
+-#define __PYX_GET_DICT_VERSION(dict)  (((PyDictObject*)(dict))->ma_version_tag)
+-#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
+-    (version_var) = __PYX_GET_DICT_VERSION(dict);\
+-    (cache_var) = (value);
+-#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
+-    static PY_UINT64_T __pyx_dict_version = 0;\
+-    static PyObject *__pyx_dict_cached_value = NULL;\
+-    if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
+-        (VAR) = __pyx_dict_cached_value;\
+-    } else {\
+-        (VAR) = __pyx_dict_cached_value = (LOOKUP);\
+-        __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
+-    }\
+-}
+-static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
+-static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
+-static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
+-#else
+-#define __PYX_GET_DICT_VERSION(dict)  (0)
+-#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
+-#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP)  (VAR) = (LOOKUP);
+-#endif
+-
+-/* GetModuleGlobalName.proto */
+-#if CYTHON_USE_DICT_VERSIONS
+-#define __Pyx_GetModuleGlobalName(var, name)  do {\
+-    static PY_UINT64_T __pyx_dict_version = 0;\
+-    static PyObject *__pyx_dict_cached_value = NULL;\
+-    (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
+-        (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
+-        __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+-} while(0)
+-#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
+-    PY_UINT64_T __pyx_dict_version;\
+-    PyObject *__pyx_dict_cached_value;\
+-    (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+-} while(0)
+-static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
+-#else
+-#define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
+-#define __Pyx_GetModuleGlobalNameUncached(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
+-static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
+-#endif
+-
+-/* PyObjectSetAttrStr.proto */
+-#if CYTHON_USE_TYPE_SLOTS
+-#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL)
+-static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value);
+-#else
+-#define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
+-#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
+-#endif
+-
+-/* IterFinish.proto */
+-static CYTHON_INLINE int __Pyx_IterFinish(void);
+-
+-/* PyObjectCallNoArg.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
+-
+-/* PyObjectGetMethod.proto */
+-static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
+-
+-/* PyObjectCallMethod0.proto */
+-static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
+-
+-/* RaiseNeedMoreValuesToUnpack.proto */
+-static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+-
+-/* RaiseTooManyValuesToUnpack.proto */
+-static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+-
+-/* UnpackItemEndCheck.proto */
+-static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
+-
+-/* RaiseNoneIterError.proto */
+-static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
+-
+-/* UnpackTupleError.proto */
+-static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index);
+-
+-/* UnpackTuple2.proto */
+-#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\
+-    (likely(is_tuple || PyTuple_Check(tuple)) ?\
+-        (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\
+-            __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\
+-            (__Pyx_UnpackTupleError(tuple, 2), -1)) :\
+-        __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple))
+-static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
+-    PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple);
+-static int __Pyx_unpack_tuple2_generic(
+-    PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple);
+-
+-/* dict_iter.proto */
+-static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
+-                                                   Py_ssize_t* p_orig_length, int* p_is_dict);
+-static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
+-                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);
+-
+-/* PyIntBinop.proto */
+-#if !CYTHON_COMPILING_IN_PYPY
+-static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
+-#else
+-#define __Pyx_PyInt_SubtractObjC(op1, op2, intval, inplace, zerodivision_check)\
+-    (inplace ? PyNumber_InPlaceSubtract(op1, op2) : PyNumber_Subtract(op1, op2))
+-#endif
+-
+-/* KeywordStringCheck.proto */
+-static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed);
+-
+-/* GetAttr3.proto */
+-static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
+-
+-/* RaiseUnexpectedTypeError.proto */
+-static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj);
+-
+-/* ExtTypeTest.proto */
+-static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
+-
+-/* GetItemInt.proto */
+-#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+-    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
+-    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
+-               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+-#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+-    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+-    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
+-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+-                                                              int wraparound, int boundscheck);
+-#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+-    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+-    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
+-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+-                                                              int wraparound, int boundscheck);
+-static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+-                                                     int is_list, int wraparound, int boundscheck);
+-
+-/* pybytes_as_double.proto */
+-static double __Pyx_SlowPyString_AsDouble(PyObject *obj);
+-static double __Pyx__PyBytes_AsDouble(PyObject *obj, const char* start, Py_ssize_t length);
+-static CYTHON_INLINE double __Pyx_PyBytes_AsDouble(PyObject *obj) {
+-    char* as_c_string;
+-    Py_ssize_t size;
+-#if CYTHON_ASSUME_SAFE_MACROS
+-    as_c_string = PyBytes_AS_STRING(obj);
+-    size = PyBytes_GET_SIZE(obj);
+-#else
+-    if (PyBytes_AsStringAndSize(obj, &as_c_string, &size) < 0) {
+-        return (double)-1;
+-    }
+-#endif
+-    return __Pyx__PyBytes_AsDouble(obj, as_c_string, size);
+-}
+-static CYTHON_INLINE double __Pyx_PyByteArray_AsDouble(PyObject *obj) {
+-    char* as_c_string;
+-    Py_ssize_t size;
+-#if CYTHON_ASSUME_SAFE_MACROS
+-    as_c_string = PyByteArray_AS_STRING(obj);
+-    size = PyByteArray_GET_SIZE(obj);
+-#else
+-    as_c_string = PyByteArray_AsString(obj);
+-    if (as_c_string == NULL) {
+-        return (double)-1;
+-    }
+-    size = PyByteArray_Size(obj);
+-#endif
+-    return __Pyx__PyBytes_AsDouble(obj, as_c_string, size);
+-}
+-
+-/* pyunicode_as_double.proto */
+-#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS
+-static const char* __Pyx__PyUnicode_AsDouble_Copy(const void* data, const int kind, char* buffer, Py_ssize_t start, Py_ssize_t end) {
+-    int last_was_punctuation;
+-    Py_ssize_t i;
+-    last_was_punctuation = 1;
+-    for (i=start; i <= end; i++) {
+-        Py_UCS4 chr = PyUnicode_READ(kind, data, i);
+-        int is_punctuation = (chr == '_') | (chr == '.');
+-        *buffer = (char)chr;
+-        buffer += (chr != '_');
+-        if (unlikely(chr > 127)) goto parse_failure;
+-        if (unlikely(last_was_punctuation & is_punctuation)) goto parse_failure;
+-        last_was_punctuation = is_punctuation;
+-    }
+-    if (unlikely(last_was_punctuation)) goto parse_failure;
+-    *buffer = '\0';
+-    return buffer;
+-parse_failure:
+-    return NULL;
+-}
+-static double __Pyx__PyUnicode_AsDouble_inf_nan(const void* data, int kind, Py_ssize_t start, Py_ssize_t length) {
+-    int matches = 1;
+-    Py_UCS4 chr;
+-    Py_UCS4 sign = PyUnicode_READ(kind, data, start);
+-    int is_signed = (sign == '-') | (sign == '+');
+-    start += is_signed;
+-    length -= is_signed;
+-    switch (PyUnicode_READ(kind, data, start)) {
+-        #ifdef Py_NAN
+-        case 'n':
+-        case 'N':
+-            if (unlikely(length != 3)) goto parse_failure;
+-            chr = PyUnicode_READ(kind, data, start+1);
+-            matches &= (chr == 'a') | (chr == 'A');
+-            chr = PyUnicode_READ(kind, data, start+2);
+-            matches &= (chr == 'n') | (chr == 'N');
+-            if (unlikely(!matches)) goto parse_failure;
+-            return (sign == '-') ? -Py_NAN : Py_NAN;
+-        #endif
+-        case 'i':
+-        case 'I':
+-            if (unlikely(length < 3)) goto parse_failure;
+-            chr = PyUnicode_READ(kind, data, start+1);
+-            matches &= (chr == 'n') | (chr == 'N');
+-            chr = PyUnicode_READ(kind, data, start+2);
+-            matches &= (chr == 'f') | (chr == 'F');
+-            if (likely(length == 3 && matches))
+-                return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL;
+-            if (unlikely(length != 8)) goto parse_failure;
+-            chr = PyUnicode_READ(kind, data, start+3);
+-            matches &= (chr == 'i') | (chr == 'I');
+-            chr = PyUnicode_READ(kind, data, start+4);
+-            matches &= (chr == 'n') | (chr == 'N');
+-            chr = PyUnicode_READ(kind, data, start+5);
+-            matches &= (chr == 'i') | (chr == 'I');
+-            chr = PyUnicode_READ(kind, data, start+6);
+-            matches &= (chr == 't') | (chr == 'T');
+-            chr = PyUnicode_READ(kind, data, start+7);
+-            matches &= (chr == 'y') | (chr == 'Y');
+-            if (unlikely(!matches)) goto parse_failure;
+-            return (sign == '-') ? -Py_HUGE_VAL : Py_HUGE_VAL;
+-        case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
+-            break;
+-        default:
+-            goto parse_failure;
+-    }
+-    return 0.0;
+-parse_failure:
+-    return -1.0;
+-}
+-static double __Pyx_PyUnicode_AsDouble_WithSpaces(PyObject *obj) {
+-    double value;
+-    const char *last;
+-    char *end;
+-    Py_ssize_t start, length = PyUnicode_GET_LENGTH(obj);
+-    const int kind = PyUnicode_KIND(obj);
+-    const void* data = PyUnicode_DATA(obj);
+-    start = 0;
+-    while (Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, start)))
+-        start++;
+-    while (start < length - 1 && Py_UNICODE_ISSPACE(PyUnicode_READ(kind, data, length - 1)))
+-        length--;
+-    length -= start;
+-    if (unlikely(length <= 0)) goto fallback;
+-    value = __Pyx__PyUnicode_AsDouble_inf_nan(data, kind, start, length);
+-    if (unlikely(value == -1.0)) goto fallback;
+-    if (value != 0.0) return value;
+-    if (length < 40) {
+-        char number[40];
+-        last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length);
+-        if (unlikely(!last)) goto fallback;
+-        value = PyOS_string_to_double(number, &end, NULL);
+-    } else {
+-        char *number = (char*) PyMem_Malloc((length + 1) * sizeof(char));
+-        if (unlikely(!number)) goto fallback;
+-        last = __Pyx__PyUnicode_AsDouble_Copy(data, kind, number, start, start + length);
+-        if (unlikely(!last)) {
+-            PyMem_Free(number);
+-            goto fallback;
+-        }
+-        value = PyOS_string_to_double(number, &end, NULL);
+-        PyMem_Free(number);
+-    }
+-    if (likely(end == last) || (value == (double)-1 && PyErr_Occurred())) {
+-        return value;
+-    }
+-fallback:
+-    return __Pyx_SlowPyString_AsDouble(obj);
+-}
+-#endif
+-static CYTHON_INLINE double __Pyx_PyUnicode_AsDouble(PyObject *obj) {
+-#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY && CYTHON_ASSUME_SAFE_MACROS
+-    if (unlikely(__Pyx_PyUnicode_READY(obj) == -1))
+-        return (double)-1;
+-    if (likely(PyUnicode_IS_ASCII(obj))) {
+-        const char *s;
+-        Py_ssize_t length;
+-        s = PyUnicode_AsUTF8AndSize(obj, &length);
+-        return __Pyx__PyBytes_AsDouble(obj, s, length);
+-    }
+-    return __Pyx_PyUnicode_AsDouble_WithSpaces(obj);
+-#else
+-    return __Pyx_SlowPyString_AsDouble(obj);
+-#endif
+-}
+-
+-/* pystring_as_double.proto */
+-static CYTHON_INLINE double __Pyx_PyString_AsDouble(PyObject *obj) {
+-    #if PY_MAJOR_VERSION >= 3
+-    (void)__Pyx_PyBytes_AsDouble;
+-    return __Pyx_PyUnicode_AsDouble(obj);
+-    #else
+-    (void)__Pyx_PyUnicode_AsDouble;
+-    return __Pyx_PyBytes_AsDouble(obj);
+-    #endif
+-}
+-
+-/* ListAppend.proto */
+-#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
+-static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
+-    PyListObject* L = (PyListObject*) list;
+-    Py_ssize_t len = Py_SIZE(list);
+-    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
+-        Py_INCREF(x);
+-        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
+-        L->ob_item[len] = x;
+-        #else
+-        PyList_SET_ITEM(list, len, x);
+-        #endif
+-        __Pyx_SET_SIZE(list, len + 1);
+-        return 0;
+-    }
+-    return PyList_Append(list, x);
+-}
+-#else
+-#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
+-#endif
+-
+-/* SliceTupleAndList.proto */
+-#if CYTHON_COMPILING_IN_CPYTHON
+-static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
+-static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
+-#else
+-#define __Pyx_PyList_GetSlice(seq, start, stop)   PySequence_GetSlice(seq, start, stop)
+-#define __Pyx_PyTuple_GetSlice(seq, start, stop)  PySequence_GetSlice(seq, start, stop)
+-#endif
+-
+-/* WriteUnraisableException.proto */
+-static void __Pyx_WriteUnraisable(const char *name, int clineno,
+-                                  int lineno, const char *filename,
+-                                  int full_traceback, int nogil);
+-
+-/* PyIntBinop.proto */
+-#if !CYTHON_COMPILING_IN_PYPY
+-static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
+-#else
+-#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
+-    (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
+-#endif
+-
+-/* GetAttr.proto */
+-static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
+-
+-/* HasAttr.proto */
+-#if __PYX_LIMITED_VERSION_HEX >= 0x030d00A1
+-#define __Pyx_HasAttr(o, n)  PyObject_HasAttrWithError(o, n)
+-#else
+-static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
+-#endif
+-
+-/* PyObjectCall2Args.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
+-
+-/* PyObjectCallMethod1.proto */
+-static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
+-
+-/* append.proto */
+-static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x);
+-
+-/* IncludeStructmemberH.proto */
+-#include <structmember.h>
+-
+-/* FixUpExtensionType.proto */
+-#if CYTHON_USE_TYPE_SPECS
+-static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);
+-#endif
+-
+-/* FetchSharedCythonModule.proto */
+-static PyObject *__Pyx_FetchSharedCythonABIModule(void);
+-
+-/* FetchCommonType.proto */
+-#if !CYTHON_USE_TYPE_SPECS
+-static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
+-#else
+-static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases);
+-#endif
+-
+-/* PyMethodNew.proto */
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
+-    PyObject *typesModule=NULL, *methodType=NULL, *result=NULL;
+-    CYTHON_UNUSED_VAR(typ);
+-    if (!self)
+-        return __Pyx_NewRef(func);
+-    typesModule = PyImport_ImportModule("types");
+-    if (!typesModule) return NULL;
+-    methodType = PyObject_GetAttrString(typesModule, "MethodType");
+-    Py_DECREF(typesModule);
+-    if (!methodType) return NULL;
+-    result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL);
+-    Py_DECREF(methodType);
+-    return result;
+-}
+-#elif PY_MAJOR_VERSION >= 3
+-static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
+-    CYTHON_UNUSED_VAR(typ);
+-    if (!self)
+-        return __Pyx_NewRef(func);
+-    return PyMethod_New(func, self);
+-}
+-#else
+-    #define __Pyx_PyMethod_New PyMethod_New
+-#endif
+-
+-/* PyVectorcallFastCallDict.proto */
+-#if CYTHON_METH_FASTCALL
+-static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
+-#endif
+-
+-/* CythonFunctionShared.proto */
+-#define __Pyx_CyFunction_USED
+-#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
+-#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
+-#define __Pyx_CYFUNCTION_CCLASS        0x04
+-#define __Pyx_CYFUNCTION_COROUTINE     0x08
+-#define __Pyx_CyFunction_GetClosure(f)\
+-    (((__pyx_CyFunctionObject *) (f))->func_closure)
+-#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
+-  #define __Pyx_CyFunction_GetClassObj(f)\
+-      (((__pyx_CyFunctionObject *) (f))->func_classobj)
+-#else
+-  #define __Pyx_CyFunction_GetClassObj(f)\
+-      ((PyObject*) ((PyCMethodObject *) (f))->mm_class)
+-#endif
+-#define __Pyx_CyFunction_SetClassObj(f, classobj)\
+-    __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj))
+-#define __Pyx_CyFunction_Defaults(type, f)\
+-    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
+-#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
+-    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
+-typedef struct {
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-    PyObject_HEAD
+-    PyObject *func;
+-#elif PY_VERSION_HEX < 0x030900B1
+-    PyCFunctionObject func;
+-#else
+-    PyCMethodObject func;
+-#endif
+-#if CYTHON_BACKPORT_VECTORCALL
+-    __pyx_vectorcallfunc func_vectorcall;
+-#endif
+-#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API
+-    PyObject *func_weakreflist;
+-#endif
+-    PyObject *func_dict;
+-    PyObject *func_name;
+-    PyObject *func_qualname;
+-    PyObject *func_doc;
+-    PyObject *func_globals;
+-    PyObject *func_code;
+-    PyObject *func_closure;
+-#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
+-    PyObject *func_classobj;
+-#endif
+-    void *defaults;
+-    int defaults_pyobjects;
+-    size_t defaults_size;
+-    int flags;
+-    PyObject *defaults_tuple;
+-    PyObject *defaults_kwdict;
+-    PyObject *(*defaults_getter)(PyObject *);
+-    PyObject *func_annotations;
+-    PyObject *func_is_coroutine;
+-} __pyx_CyFunctionObject;
+-#undef __Pyx_CyOrPyCFunction_Check
+-#define __Pyx_CyFunction_Check(obj)  __Pyx_TypeCheck(obj, __pyx_CyFunctionType)
+-#define __Pyx_CyOrPyCFunction_Check(obj)  __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type)
+-#define __Pyx_CyFunction_CheckExact(obj)  __Pyx_IS_TYPE(obj, __pyx_CyFunctionType)
+-static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc);
+-#undef __Pyx_IsSameCFunction
+-#define __Pyx_IsSameCFunction(func, cfunc)   __Pyx__IsSameCyOrCFunction(func, cfunc)
+-static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
+-                                      int flags, PyObject* qualname,
+-                                      PyObject *closure,
+-                                      PyObject *module, PyObject *globals,
+-                                      PyObject* code);
+-static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
+-static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
+-                                                         size_t size,
+-                                                         int pyobjects);
+-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
+-                                                            PyObject *tuple);
+-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
+-                                                             PyObject *dict);
+-static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
+-                                                              PyObject *dict);
+-static int __pyx_CyFunction_init(PyObject *module);
+-#if CYTHON_METH_FASTCALL
+-static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+-static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+-static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+-static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+-#if CYTHON_BACKPORT_VECTORCALL
+-#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
+-#else
+-#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
+-#endif
+-#endif
+-
+-/* CythonFunction.proto */
+-static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
+-                                      int flags, PyObject* qualname,
+-                                      PyObject *closure,
+-                                      PyObject *module, PyObject *globals,
+-                                      PyObject* code);
+-
+-/* PyObject_Str.proto */
+-#define __Pyx_PyObject_Str(obj)\
+-    (likely(PyString_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj))
+-
+-/* UnpackUnboundCMethod.proto */
+-typedef struct {
+-    PyObject *type;
+-    PyObject **method_name;
+-    PyCFunction func;
+-    PyObject *method;
+-    int flag;
+-} __Pyx_CachedCFunction;
+-
+-/* CallUnboundCMethod0.proto */
+-static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
+-#if CYTHON_COMPILING_IN_CPYTHON
+-#define __Pyx_CallUnboundCMethod0(cfunc, self)\
+-    (likely((cfunc)->func) ?\
+-        (likely((cfunc)->flag == METH_NOARGS) ?  (*((cfunc)->func))(self, NULL) :\
+-         (PY_VERSION_HEX >= 0x030600B1 && likely((cfunc)->flag == METH_FASTCALL) ?\
+-            (PY_VERSION_HEX >= 0x030700A0 ?\
+-                (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0) :\
+-                (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL)) :\
+-          (PY_VERSION_HEX >= 0x030700A0 && (cfunc)->flag == (METH_FASTCALL | METH_KEYWORDS) ?\
+-            (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL) :\
+-            (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ?  ((*(PyCFunctionWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\
+-               ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) :\
+-               __Pyx__CallUnboundCMethod0(cfunc, self)))))) :\
+-        __Pyx__CallUnboundCMethod0(cfunc, self))
+-#else
+-#define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
+-#endif
+-
+-/* UnicodeAsUCS4.proto */
+-static CYTHON_INLINE Py_UCS4 __Pyx_PyUnicode_AsPy_UCS4(PyObject*);
+-
+-/* object_ord.proto */
+-#if PY_MAJOR_VERSION >= 3
+-#define __Pyx_PyObject_Ord(c)\
+-    (likely(PyUnicode_Check(c)) ? (long)__Pyx_PyUnicode_AsPy_UCS4(c) : __Pyx__PyObject_Ord(c))
+-#else
+-#define __Pyx_PyObject_Ord(c) __Pyx__PyObject_Ord(c)
+-#endif
+-static long __Pyx__PyObject_Ord(PyObject* c);
+-
+-/* GetException.proto */
+-#if CYTHON_FAST_THREAD_STATE
+-#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
+-static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+-#else
+-static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+-#endif
+-
+-/* SwapException.proto */
+-#if CYTHON_FAST_THREAD_STATE
+-#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
+-static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+-#else
+-static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
+-#endif
+-
+-/* GetTopmostException.proto */
+-#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
+-static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
+-#endif
+-
+-/* SaveResetException.proto */
+-#if CYTHON_FAST_THREAD_STATE
+-#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+-static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+-#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+-static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+-#else
+-#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
+-#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
+-#endif
+-
+-/* pyobject_as_double.proto */
+-static double __Pyx__PyObject_AsDouble(PyObject* obj);
+-#if CYTHON_COMPILING_IN_PYPY
+-#define __Pyx_PyObject_AsDouble(obj)\
+-(likely(PyFloat_CheckExact(obj)) ? PyFloat_AS_DOUBLE(obj) :\
+- likely(PyInt_CheckExact(obj)) ?\
+- PyFloat_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj))
+-#else
+-#define __Pyx_PyObject_AsDouble(obj)\
+-((likely(PyFloat_CheckExact(obj))) ?  PyFloat_AS_DOUBLE(obj) :\
+- likely(PyLong_CheckExact(obj)) ?\
+- PyLong_AsDouble(obj) : __Pyx__PyObject_AsDouble(obj))
+-#endif
+-
+-/* PySequenceContains.proto */
+-static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
+-    int result = PySequence_Contains(seq, item);
+-    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
+-}
+-
+-/* Import.proto */
+-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+-
+-/* ImportFrom.proto */
+-static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
+-
+-/* ValidateBasesTuple.proto */
+-#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
+-static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
+-#endif
+-
+-/* PyType_Ready.proto */
+-CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t);
+-
+-/* PyObject_GenericGetAttrNoDict.proto */
+-#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+-static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
+-#else
+-#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
+-#endif
+-
+-/* PyObject_GenericGetAttr.proto */
+-#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+-static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
+-#else
+-#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
+-#endif
+-
+-/* SetupReduce.proto */
+-#if !CYTHON_COMPILING_IN_LIMITED_API
+-static int __Pyx_setup_reduce(PyObject* type_obj);
+-#endif
+-
+-/* SetVTable.proto */
+-static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable);
+-
+-/* GetVTable.proto */
+-static void* __Pyx_GetVtable(PyTypeObject *type);
+-
+-/* MergeVTables.proto */
+-#if !CYTHON_COMPILING_IN_LIMITED_API
+-static int __Pyx_MergeVtables(PyTypeObject *type);
+-#endif
+-
+-/* TypeImport.proto */
+-#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_10
+-#define __PYX_HAVE_RT_ImportType_proto_3_0_10
+-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+-#include <stdalign.h>
+-#endif
+-#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L
+-#define __PYX_GET_STRUCT_ALIGNMENT_3_0_10(s) alignof(s)
+-#else
+-#define __PYX_GET_STRUCT_ALIGNMENT_3_0_10(s) sizeof(void*)
+-#endif
+-enum __Pyx_ImportType_CheckSize_3_0_10 {
+-   __Pyx_ImportType_CheckSize_Error_3_0_10 = 0,
+-   __Pyx_ImportType_CheckSize_Warn_3_0_10 = 1,
+-   __Pyx_ImportType_CheckSize_Ignore_3_0_10 = 2
+-};
+-static PyTypeObject *__Pyx_ImportType_3_0_10(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_10 check_size);
+-#endif
+-
+-/* ImportDottedModule.proto */
+-static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple);
+-#if PY_MAJOR_VERSION >= 3
+-static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple);
+-#endif
+-
+-/* PatchModuleWithCoroutine.proto */
+-static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code);
+-
+-/* PatchInspect.proto */
+-static PyObject* __Pyx_patch_inspect(PyObject* module);
+-
+-/* SetNameInClass.proto */
+-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && PY_VERSION_HEX < 0x030d0000
+-#define __Pyx_SetNameInClass(ns, name, value)\
+-    (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value))
+-#elif CYTHON_COMPILING_IN_CPYTHON
+-#define __Pyx_SetNameInClass(ns, name, value)\
+-    (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value))
+-#else
+-#define __Pyx_SetNameInClass(ns, name, value)  PyObject_SetItem(ns, name, value)
+-#endif
+-
+-/* CalculateMetaclass.proto */
+-static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
+-
+-/* PyObjectLookupSpecial.proto */
+-#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
+-#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 0)
+-#define __Pyx_PyObject_LookupSpecial(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 1)
+-static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error);
+-#else
+-#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n)
+-#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
+-#endif
+-
+-/* Py3ClassCreate.proto */
+-static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
+-                                           PyObject *mkw, PyObject *modname, PyObject *doc);
+-static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
+-                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);
+-
+-/* Py3UpdateBases.proto */
+-static PyObject* __Pyx_PEP560_update_bases(PyObject *bases);
+-
+-/* CLineInTraceback.proto */
+-#ifdef CYTHON_CLINE_IN_TRACEBACK
+-#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
+-#else
+-static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
+-#endif
+-
+-/* CodeObjectCache.proto */
+-#if !CYTHON_COMPILING_IN_LIMITED_API
+-typedef struct {
+-    PyCodeObject* code_object;
+-    int code_line;
+-} __Pyx_CodeObjectCacheEntry;
+-struct __Pyx_CodeObjectCache {
+-    int count;
+-    int max_count;
+-    __Pyx_CodeObjectCacheEntry* entries;
+-};
+-static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+-static PyCodeObject *__pyx_find_code_object(int code_line);
+-static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+-#endif
+-
+-/* AddTraceback.proto */
+-static void __Pyx_AddTraceback(const char *funcname, int c_line,
+-                               int py_line, const char *filename);
+-
+-/* GCCDiagnostics.proto */
+-#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
+-#define __Pyx_HAS_GCC_DIAGNOSTIC
+-#endif
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From___pyx_anon_enum(int value);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int32_t(int32_t value);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char value);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint8_t(uint8_t value);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE int32_t __Pyx_PyInt_As_int32_t(PyObject *);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE uint8_t __Pyx_PyInt_As_uint8_t(PyObject *);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_char(char value);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *);
+-
+-/* FormatTypeName.proto */
+-#if CYTHON_COMPILING_IN_LIMITED_API
+-typedef PyObject *__Pyx_TypeName;
+-#define __Pyx_FMT_TYPENAME "%U"
+-static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp);
+-#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
+-#else
+-typedef const char *__Pyx_TypeName;
+-#define __Pyx_FMT_TYPENAME "%.200s"
+-#define __Pyx_PyType_GetName(tp) ((tp)->tp_name)
+-#define __Pyx_DECREF_TypeName(obj)
+-#endif
+-
+-/* FastTypeChecks.proto */
+-#if CYTHON_COMPILING_IN_CPYTHON
+-#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
+-#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
+-static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
+-static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b);
+-static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
+-static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
+-#else
+-#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+-#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
+-#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
+-#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
+-#endif
+-#define __Pyx_PyErr_ExceptionMatches2(err1, err2)  __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2)
+-#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
+-
+-/* CheckBinaryVersion.proto */
+-static unsigned long __Pyx_get_runtime_version(void);
+-static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);
+-
+-/* InitStrings.proto */
+-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
+-
+-/* #### Code section: module_declarations ### */
+-static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self); /* proto*/
+-static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self); /* proto*/
+-static PyObject *__pyx_f_8pyliblo3_6_liblo_11_ServerBase__check(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto*/
+-static PyObject *__pyx_f_8pyliblo3_6_liblo_7Message__add(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_value); /* proto*/
+-static PyObject *__pyx_f_8pyliblo3_6_liblo_7Message__add_auto(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_value); /* proto*/
+-
+-/* Module declarations from "libc.stdint" */
+-
+-/* Module declarations from "libc.string" */
+-
+-/* Module declarations from "libc.stdio" */
+-
+-/* Module declarations from "cpython.version" */
+-
+-/* Module declarations from "__builtin__" */
+-
+-/* Module declarations from "cpython.type" */
+-
+-/* Module declarations from "cpython.object" */
+-
+-/* Module declarations from "cpython.ref" */
+-
+-/* Module declarations from "cpython.exc" */
+-
+-/* Module declarations from "cpython.module" */
+-
+-/* Module declarations from "cpython.mem" */
+-
+-/* Module declarations from "cpython.tuple" */
+-
+-/* Module declarations from "cpython.list" */
+-
+-/* Module declarations from "cpython.sequence" */
+-
+-/* Module declarations from "cpython.mapping" */
+-
+-/* Module declarations from "cpython.iterator" */
+-
+-/* Module declarations from "cpython.number" */
+-
+-/* Module declarations from "cpython.int" */
+-
+-/* Module declarations from "__builtin__" */
+-
+-/* Module declarations from "cpython.bool" */
+-
+-/* Module declarations from "cpython.long" */
+-
+-/* Module declarations from "cpython.float" */
+-
+-/* Module declarations from "__builtin__" */
+-
+-/* Module declarations from "cpython.complex" */
+-
+-/* Module declarations from "cpython.string" */
+-
+-/* Module declarations from "libc.stddef" */
+-
+-/* Module declarations from "cpython.unicode" */
+-
+-/* Module declarations from "cpython.pyport" */
+-
+-/* Module declarations from "cpython.dict" */
+-
+-/* Module declarations from "cpython.instance" */
+-
+-/* Module declarations from "cpython.function" */
+-
+-/* Module declarations from "cpython.method" */
+-
+-/* Module declarations from "cpython.weakref" */
+-
+-/* Module declarations from "cpython.getargs" */
+-
+-/* Module declarations from "cpython.pythread" */
+-
+-/* Module declarations from "cpython.pystate" */
+-
+-/* Module declarations from "cpython.cobject" */
+-
+-/* Module declarations from "cpython.oldbuffer" */
+-
+-/* Module declarations from "cpython.set" */
+-
+-/* Module declarations from "cpython.buffer" */
+-
+-/* Module declarations from "cpython.bytes" */
+-
+-/* Module declarations from "cpython.pycapsule" */
+-
+-/* Module declarations from "cpython.contextvars" */
+-
+-/* Module declarations from "cpython" */
+-
+-/* Module declarations from "libc.stdlib" */
+-
+-/* Module declarations from "libc.math" */
+-
+-/* Module declarations from "_liblo" */
+-
+-/* Module declarations from "pyliblo3._liblo" */
+-static CYTHON_INLINE PyObject *__pyx_f_8pyliblo3_6_liblo__decode(PyObject *); /*proto*/
+-static PyObject *__pyx_f_8pyliblo3_6_liblo__encode(PyObject *); /*proto*/
+-static lo_timetag __pyx_f_8pyliblo3_6_liblo__double_to_timetag(double); /*proto*/
+-static double __pyx_f_8pyliblo3_6_liblo__timetag_to_double(lo_timetag); /*proto*/
+-static PyObject *__pyx_f_8pyliblo3_6_liblo__send(PyObject *, struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *, PyObject *); /*proto*/
+-static int __pyx_f_8pyliblo3_6_liblo__msg_callback(const char *, const char *, lo_arg **, int, lo_message, void *); /*proto*/
+-static int __pyx_f_8pyliblo3_6_liblo__bundle_start_callback(lo_timetag, void *); /*proto*/
+-static int __pyx_f_8pyliblo3_6_liblo__bundle_end_callback(void *); /*proto*/
+-static void __pyx_f_8pyliblo3_6_liblo__err_handler(int, const char *, const char *); /*proto*/
+-static PyObject *__pyx_f_8pyliblo3_6_liblo___pyx_unpickle_Callback__set_state(struct __pyx_obj_8pyliblo3_6_liblo_Callback *, PyObject *); /*proto*/
+-/* #### Code section: typeinfo ### */
+-/* #### Code section: before_global_var ### */
+-#define __Pyx_MODULE_NAME "pyliblo3._liblo"
+-extern int __pyx_module_is_main_pyliblo3___liblo;
+-int __pyx_module_is_main_pyliblo3___liblo = 0;
+-
+-/* Implementation of "pyliblo3._liblo" */
+-/* #### Code section: global_var ### */
+-static PyObject *__pyx_builtin_property;
+-static PyObject *__pyx_builtin_ValueError;
+-static PyObject *__pyx_builtin_IOError;
+-static PyObject *__pyx_builtin_chr;
+-static PyObject *__pyx_builtin_RuntimeError;
+-static PyObject *__pyx_builtin_TypeError;
+-static PyObject *__pyx_builtin_OverflowError;
+-/* #### Code section: string_decls ### */
+-static const char __pyx_k_b[] = "b";
+-static const char __pyx_k_e[] = "e";
+-static const char __pyx_k_f[] = "f";
+-static const char __pyx_k_k[] = "k";
+-static const char __pyx_k_m[] = "m";
+-static const char __pyx_k_p[] = "p";
+-static const char __pyx_k_r[] = "r";
+-static const char __pyx_k_s[] = ": %s";
+-static const char __pyx_k_t[] = "t";
+-static const char __pyx_k_v[] = "v";
+-static const char __pyx_k_x[] = "x";
+-static const char __pyx_k_cb[] = "cb";
+-static const char __pyx_k_gc[] = "gc";
+-static const char __pyx_k_s2[] = "s2";
+-static const char __pyx_k_tt[] = "tt";
+-static const char __pyx_k_TCP[] = "TCP";
+-static const char __pyx_k_UDP[] = "UDP";
+-static const char __pyx_k__11[] = ".";
+-static const char __pyx_k__12[] = "*";
+-static const char __pyx_k__88[] = "?";
+-static const char __pyx_k_add[] = "add";
+-static const char __pyx_k_arg[] = "arg";
+-static const char __pyx_k_arr[] = "arr";
+-static const char __pyx_k_chr[] = "chr";
+-static const char __pyx_k_doc[] = "__doc__";
+-static const char __pyx_k_get[] = "__get__";
+-static const char __pyx_k_inf[] = "inf";
+-static const char __pyx_k_key[] = "key";
+-static const char __pyx_k_msg[] = "msg";
+-static const char __pyx_k_new[] = "__new__";
+-static const char __pyx_k_num[] = "num";
+-static const char __pyx_k_obj[] = "obj";
+-static const char __pyx_k_ref[] = "ref";
+-static const char __pyx_k_s_2[] = "s";
+-static const char __pyx_k_str[] = "__str__";
+-static const char __pyx_k_tmp[] = "tmp";
+-static const char __pyx_k_Blob[] = "_Blob";
+-static const char __pyx_k_UNIX[] = "UNIX";
+-static const char __pyx_k_addr[] = "addr";
+-static const char __pyx_k_args[] = "args";
+-static const char __pyx_k_call[] = "__call__";
+-static const char __pyx_k_dict[] = "__dict__";
+-static const char __pyx_k_free[] = "free";
+-static const char __pyx_k_func[] = "__func__";
+-static const char __pyx_k_in_s[] = " in %s";
+-static const char __pyx_k_init[] = "__init__";
+-static const char __pyx_k_main[] = "__main__";
+-static const char __pyx_k_name[] = "name";
+-static const char __pyx_k_path[] = "path";
+-static const char __pyx_k_port[] = "port";
+-static const char __pyx_k_recv[] = "recv";
+-static const char __pyx_k_self[] = "self";
+-static const char __pyx_k_send[] = "send";
+-static const char __pyx_k_sort[] = "sort";
+-static const char __pyx_k_spec[] = "spec";
+-static const char __pyx_k_stop[] = "stop";
+-static const char __pyx_k_test[] = "__test__";
+-static const char __pyx_k_time[] = "time";
+-static const char __pyx_k_Proto[] = "Proto ";
+-static const char __pyx_k_addr2[] = "addr2";
+-static const char __pyx_k_class[] = "__class__";
+-static const char __pyx_k_items[] = "items";
+-static const char __pyx_k_proto[] = "proto";
+-static const char __pyx_k_slots[] = "__slots__";
+-static const char __pyx_k_start[] = "start";
+-static const char __pyx_k_state[] = "state";
+-static const char __pyx_k_super[] = "super";
+-static const char __pyx_k_types[] = "types";
+-static const char __pyx_k_where[] = "where";
+-static const char __pyx_k_0_16_1[] = "0.16.1";
+-static const char __pyx_k_Bundle[] = "Bundle";
+-static const char __pyx_k_Server[] = "Server";
+-static const char __pyx_k_append[] = "append";
+-static const char __pyx_k_decode[] = "decode";
+-static const char __pyx_k_dict_2[] = "_dict";
+-static const char __pyx_k_enable[] = "enable";
+-static const char __pyx_k_encode[] = "encode";
+-static const char __pyx_k_fileno[] = "fileno";
+-static const char __pyx_k_func_2[] = "_func";
+-static const char __pyx_k_func_3[] = "func";
+-static const char __pyx_k_import[] = "__import__";
+-static const char __pyx_k_kwargs[] = "kwargs";
+-static const char __pyx_k_module[] = "__module__";
+-static const char __pyx_k_name_2[] = "__name__";
+-static const char __pyx_k_pickle[] = "pickle";
+-static const char __pyx_k_reduce[] = "__reduce__";
+-static const char __pyx_k_self_2[] = "__self__";
+-static const char __pyx_k_spec_2[] = "__spec__";
+-static const char __pyx_k_struct[] = "struct";
+-static const char __pyx_k_target[] = "target";
+-static const char __pyx_k_update[] = "update";
+-static const char __pyx_k_Address[] = "Address";
+-static const char __pyx_k_IOError[] = "IOError";
+-static const char __pyx_k_Message[] = "Message";
+-static const char __pyx_k_cb_data[] = "cb_data";
+-static const char __pyx_k_counter[] = "counter";
+-static const char __pyx_k_disable[] = "disable";
+-static const char __pyx_k_get_url[] = "get_url";
+-static const char __pyx_k_inspect[] = "_inspect";
+-static const char __pyx_k_isdigit[] = "isdigit";
+-static const char __pyx_k_message[] = "message";
+-static const char __pyx_k_methods[] = "methods";
+-static const char __pyx_k_prepare[] = "__prepare__";
+-static const char __pyx_k_timeout[] = "timeout";
+-static const char __pyx_k_varargs[] = "varargs";
+-static const char __pyx_k_version[] = "__version__";
+-static const char __pyx_k_weakref[] = "_weakref";
+-static const char __pyx_k_Callback[] = "Callback";
+-static const char __pyx_k_end_func[] = "end_func";
+-static const char __pyx_k_get_port[] = "get_port";
+-static const char __pyx_k_getstate[] = "__getstate__";
+-static const char __pyx_k_ismethod[] = "ismethod";
+-static const char __pyx_k_messages[] = "messages";
+-static const char __pyx_k_property[] = "property";
+-static const char __pyx_k_pyx_type[] = "__pyx_type";
+-static const char __pyx_k_qualname[] = "__qualname__";
+-static const char __pyx_k_set_name[] = "__set_name__";
+-static const char __pyx_k_setstate[] = "__setstate__";
+-static const char __pyx_k_typespec[] = "typespec";
+-static const char __pyx_k_TypeError[] = "TypeError";
+-static const char __pyx_k_counter_2[] = "_counter";
+-static const char __pyx_k_exception[] = "__exception";
+-static const char __pyx_k_inspect_2[] = "inspect";
+-static const char __pyx_k_isenabled[] = "isenabled";
+-static const char __pyx_k_metaclass[] = "__metaclass__";
+-static const char __pyx_k_pyx_state[] = "__pyx_state";
+-static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
+-static const char __pyx_k_user_data[] = "user_data";
+-static const char __pyx_k_weakref_2[] = "weakref";
+-static const char __pyx_k_Bundle_add[] = "Bundle.add";
+-static const char __pyx_k_ServerBase[] = "_ServerBase";
+-static const char __pyx_k_ValueError[] = "ValueError";
+-static const char __pyx_k_add_method[] = "add_method";
+-static const char __pyx_k_del_method[] = "del_method";
+-static const char __pyx_k_getmembers[] = "getmembers";
+-static const char __pyx_k_pyx_result[] = "__pyx_result";
+-static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+-static const char __pyx_k_start_func[] = "start_func";
+-static const char __pyx_k_Message_add[] = "Message.add";
+-static const char __pyx_k_PickleError[] = "PickleError";
+-static const char __pyx_k_ServerError[] = "ServerError";
+-static const char __pyx_k_Server_free[] = "Server.free";
+-static const char __pyx_k_Server_recv[] = "Server.recv";
+-static const char __pyx_k_end_handler[] = "end_handler";
+-static const char __pyx_k_make_method[] = "make_method";
+-static const char __pyx_k_method_spec[] = "_method_spec";
+-static const char __pyx_k_mro_entries[] = "__mro_entries__";
+-static const char __pyx_k_reg_methods[] = "reg_methods";
+-static const char __pyx_k_AddressError[] = "AddressError";
+-static const char __pyx_k_RuntimeError[] = "RuntimeError";
+-static const char __pyx_k_ServerThread[] = "ServerThread";
+-static const char __pyx_k_get_hostname[] = "get_hostname";
+-static const char __pyx_k_get_protocol[] = "get_protocol";
+-static const char __pyx_k_initializing[] = "_initializing";
+-static const char __pyx_k_is_coroutine[] = "_is_coroutine";
+-static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
+-static const char __pyx_k_stringsource[] = "<stringsource>";
+-static const char __pyx_k_use_setstate[] = "use_setstate";
+-static const char __pyx_k_OverflowError[] = "OverflowError";
+-static const char __pyx_k_blob_is_empty[] = "blob is empty";
+-static const char __pyx_k_init_subclass[] = "__init_subclass__";
+-static const char __pyx_k_invalid_URL_s[] = "invalid URL '%s'";
+-static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
+-static const char __pyx_k_start_handler[] = "start_handler";
+-static const char __pyx_k_struct___init[] = "struct.__init__";
+-static const char __pyx_k_getfullargspec[] = "getfullargspec";
+-static const char __pyx_k_server_error_d[] = "server error %d";
+-static const char __pyx_k_weakref_method[] = "_weakref_method";
+-static const char __pyx_k_Address_get_url[] = "Address.get_url";
+-static const char __pyx_k_ServerBase_send[] = "_ServerBase.send";
+-static const char __pyx_k_address_error_s[] = "address error: %s";
+-static const char __pyx_k_invalid_timetag[] = "invalid timetag";
+-static const char __pyx_k_protostr_to_int[] = "_protostr_to_int";
+-static const char __pyx_k_pyliblo3__liblo[] = "pyliblo3._liblo";
+-static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
+-static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
+-static const char __pyx_k_Address_get_port[] = "Address.get_port";
+-static const char __pyx_k_invalid_protocol[] = "invalid protocol";
+-static const char __pyx_k_register_methods[] = "register_methods";
+-static const char __pyx_k_sending_failed_s[] = "sending failed: %s";
+-static const char __pyx_k_ServerBase_fileno[] = "_ServerBase.fileno";
+-static const char __pyx_k_ServerError___str[] = "ServerError.__str__";
+-static const char __pyx_k_ServerThread_free[] = "ServerThread.free";
+-static const char __pyx_k_ServerThread_stop[] = "ServerThread.stop";
+-static const char __pyx_k_AddressError___str[] = "AddressError.__str__";
+-static const char __pyx_k_ServerBase_get_url[] = "_ServerBase.get_url";
+-static const char __pyx_k_ServerError___init[] = "ServerError.__init__";
+-static const char __pyx_k_ServerThread_start[] = "ServerThread.start";
+-static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines";
+-static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
+-static const char __pyx_k_make_method___call[] = "make_method.__call__";
+-static const char __pyx_k_make_method___init[] = "make_method.__init__";
+-static const char __pyx_k_AddressError___init[] = "AddressError.__init__";
+-static const char __pyx_k_ServerBase_get_port[] = "_ServerBase.get_port";
+-static const char __pyx_k_add_bundle_handlers[] = "add_bundle_handlers";
+-static const char __pyx_k_pyliblo3__liblo_pyx[] = "pyliblo3/_liblo.pyx";
+-static const char __pyx_k_weakref_method_func[] = "_weakref_method.func";
+-static const char __pyx_k_Address_get_hostname[] = "Address.get_hostname";
+-static const char __pyx_k_Address_get_protocol[] = "Address.get_protocol";
+-static const char __pyx_k_Blob___reduce_cython[] = "_Blob.__reduce_cython__";
+-static const char __pyx_k_ServerBase_add_method[] = "_ServerBase.add_method";
+-static const char __pyx_k_ServerBase_del_method[] = "_ServerBase.del_method";
+-static const char __pyx_k_pyx_unpickle_Callback[] = "__pyx_unpickle_Callback";
+-static const char __pyx_k_weakref_method___call[] = "_weakref_method.__call__";
+-static const char __pyx_k_weakref_method___init[] = "_weakref_method.__init__";
+-static const char __pyx_k_Blob___setstate_cython[] = "_Blob.__setstate_cython__";
+-static const char __pyx_k_Bundle___reduce_cython[] = "Bundle.__reduce_cython__";
+-static const char __pyx_k_Server___reduce_cython[] = "Server.__reduce_cython__";
+-static const char __pyx_k_Address___reduce_cython[] = "Address.__reduce_cython__";
+-static const char __pyx_k_Message___reduce_cython[] = "Message.__reduce_cython__";
+-static const char __pyx_k_ServerBase_get_protocol[] = "_ServerBase.get_protocol";
+-static const char __pyx_k_unknown_OSC_data_type_c[] = "unknown OSC data type '%c'";
+-static const char __pyx_k_Bundle___setstate_cython[] = "Bundle.__setstate_cython__";
+-static const char __pyx_k_Callback___reduce_cython[] = "Callback.__reduce_cython__";
+-static const char __pyx_k_Server___setstate_cython[] = "Server.__setstate_cython__";
+-static const char __pyx_k_Address___setstate_cython[] = "Address.__setstate_cython__";
+-static const char __pyx_k_Message___setstate_cython[] = "Message.__setstate_cython__";
+-static const char __pyx_k_Callback___setstate_cython[] = "Callback.__setstate_cython__";
+-static const char __pyx_k_ServerBase___reduce_cython[] = "_ServerBase.__reduce_cython__";
+-static const char __pyx_k_ServerBase_register_methods[] = "_ServerBase.register_methods";
+-static const char __pyx_k_ServerBase___setstate_cython[] = "_ServerBase.__setstate_cython__";
+-static const char __pyx_k_ServerThread___reduce_cython[] = "ServerThread.__reduce_cython__";
+-static const char __pyx_k_path_must_be_a_string_or_None[] = "path must be a string or None";
+-static const char __pyx_k_ServerBase_add_bundle_handlers[] = "_ServerBase.add_bundle_handlers";
+-static const char __pyx_k_ServerThread___setstate_cython[] = "ServerThread.__setstate_cython__";
+-static const char __pyx_k_not_understood_expected_one_of[] = " not understood, expected one of 'UDP', 'TCP' or 'UNIX'";
+-static const char __pyx_k_register_methods_locals_lambda[] = "register_methods.<locals>.<lambda>";
+-static const char __pyx_k_A_decorator_that_serves_as_a_mo[] = "\n    A decorator that serves as a more convenient alternative to [Server.add_method](#add_method).\n\n    Args:\n        path (str | None): the message path to be handled by the registered method.\n            `None` may be used as a wildcard to match any OSC message.\n        types (str): the argument types to be handled by the registered method.\n            `None` may be used as a wildcard to match any OSC message.\n        user_data: An arbitrary object that will be passed on to the decorated\n            method every time a matching message is received.\n\n    ";
+-static const char __pyx_k_Raised_when_creating_a_liblo_OS[] = "\n    Raised when creating a liblo OSC server fails.\n    ";
+-static const char __pyx_k_Raised_when_trying_to_create_an[] = "\n    Raised when trying to create an invalid `Address` object.\n    ";
+-static const char __pyx_k_Server_method_called_after_free[] = "Server method called after free()";
+-static const char __pyx_k_Weak_reference_to_a_function_in[] = "\n    Weak reference to a function, including support for bound methods.\n    ";
+-static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))";
+-static const char __pyx_k_self__address_cannot_be_converte[] = "self._address cannot be converted to a Python object for pickling";
+-static const char __pyx_k_self__blob_cannot_be_converted_t[] = "self._blob cannot be converted to a Python object for pickling";
+-static const char __pyx_k_self__bundle_cannot_be_converted[] = "self._bundle cannot be converted to a Python object for pickling";
+-static const char __pyx_k_self__message_cannot_be_converte[] = "self._message cannot be converted to a Python object for pickling";
+-static const char __pyx_k_self__server_cannot_be_converted[] = "self._server cannot be converted to a Python object for pickling";
+-static const char __pyx_k_self__server_self__server_thread[] = "self._server,self._server_thread cannot be converted to a Python object for pickling";
+-static const char __pyx_k_typespec_must_be_a_string_or_Non[] = "typespec must be a string or None";
+-static const char __pyx_k_unsupported_message_argument_typ[] = "unsupported message argument type";
+-/* #### Code section: decls ### */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo__protostr_to_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_proto); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_15_weakref_method___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_f); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_15_weakref_method_2func(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_15_weakref_method_4__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6struct___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_kwargs); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_8Callback___init__(struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_8Callback_2__reduce_cython__(struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_8Callback_4__setstate_cython__(struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_2time(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_4send(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_target, PyObject *__pyx_v_args); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11ServerError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_num, PyObject *__pyx_v_msg, PyObject *__pyx_v_where); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11ServerError_2__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11make_method___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_types, PyObject *__pyx_v_user_data); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11make_method_2__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_f); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_11_ServerBase___init__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_reg_methods); /* proto */
+-static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_2register_methods(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_obj); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_4get_url(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_6get_port(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_8get_protocol(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_10fileno(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_12add_method(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_typespec, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_14del_method(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_typespec); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_16add_bundle_handlers(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_start_handler, PyObject *__pyx_v_end_handler, PyObject *__pyx_v_user_data); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_18send(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_target, PyObject *__pyx_v_args); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_3url___get__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_4port___get__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_8protocol___get__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_6Server___init__(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self, PyObject *__pyx_v_port, PyObject *__pyx_v_proto, PyObject *__pyx_v_reg_methods); /* proto */
+-static void __pyx_pf_8pyliblo3_6_liblo_6Server_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_4free(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_6recv(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self, PyObject *__pyx_v_timeout); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_12ServerThread___init__(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self, PyObject *__pyx_v_port, PyObject *__pyx_v_proto, PyObject *__pyx_v_reg_methods); /* proto */
+-static void __pyx_pf_8pyliblo3_6_liblo_12ServerThread_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_4free(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_6start(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_8stop(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12AddressError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_msg); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12AddressError_2__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_7Address___init__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self, PyObject *__pyx_v_addr, PyObject *__pyx_v_addr2, PyObject *__pyx_v_proto); /* proto */
+-static void __pyx_pf_8pyliblo3_6_liblo_7Address_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_4get_url(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_6get_hostname(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_8get_port(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_10get_protocol(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_3url___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_8hostname___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_4port___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_8protocol___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_5_Blob___init__(struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self, PyObject *__pyx_v_arr); /* proto */
+-static void __pyx_pf_8pyliblo3_6_liblo_5_Blob_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_5_Blob_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_5_Blob_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_7Message___init__(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_args); /* proto */
+-static void __pyx_pf_8pyliblo3_6_liblo_7Message_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Message_4add(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_args); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Message_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Message_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+-static int __pyx_pf_8pyliblo3_6_liblo_6Bundle___init__(struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self, PyObject *__pyx_v_messages); /* proto */
+-static void __pyx_pf_8pyliblo3_6_liblo_6Bundle_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Bundle_4add(struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self, PyObject *__pyx_v_args); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Bundle_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Bundle_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6__pyx_unpickle_Callback(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Callback(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo__ServerBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Address(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Message(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Bundle(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Server(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_ServerThread(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo__Blob(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+-static __Pyx_CachedCFunction __pyx_umethod_PyBytes_Type_isdigit = {0, 0, 0, 0, 0};
+-/* #### Code section: late_includes ### */
+-/* #### Code section: module_state ### */
+-typedef struct {
+-  PyObject *__pyx_d;
+-  PyObject *__pyx_b;
+-  PyObject *__pyx_cython_runtime;
+-  PyObject *__pyx_empty_tuple;
+-  PyObject *__pyx_empty_bytes;
+-  PyObject *__pyx_empty_unicode;
+-  #ifdef __Pyx_CyFunction_USED
+-  PyTypeObject *__pyx_CyFunctionType;
+-  #endif
+-  #ifdef __Pyx_FusedFunction_USED
+-  PyTypeObject *__pyx_FusedFunctionType;
+-  #endif
+-  #ifdef __Pyx_Generator_USED
+-  PyTypeObject *__pyx_GeneratorType;
+-  #endif
+-  #ifdef __Pyx_IterableCoroutine_USED
+-  PyTypeObject *__pyx_IterableCoroutineType;
+-  #endif
+-  #ifdef __Pyx_Coroutine_USED
+-  PyTypeObject *__pyx_CoroutineAwaitType;
+-  #endif
+-  #ifdef __Pyx_Coroutine_USED
+-  PyTypeObject *__pyx_CoroutineType;
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  PyTypeObject *__pyx_ptype_7cpython_4type_type;
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  PyTypeObject *__pyx_ptype_7cpython_4bool_bool;
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  PyTypeObject *__pyx_ptype_7cpython_7complex_complex;
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  #endif
+-  #if CYTHON_USE_MODULE_STATE
+-  PyObject *__pyx_type_8pyliblo3_6_liblo_Callback;
+-  PyObject *__pyx_type_8pyliblo3_6_liblo__ServerBase;
+-  PyObject *__pyx_type_8pyliblo3_6_liblo_Address;
+-  PyObject *__pyx_type_8pyliblo3_6_liblo_Message;
+-  PyObject *__pyx_type_8pyliblo3_6_liblo_Bundle;
+-  PyObject *__pyx_type_8pyliblo3_6_liblo_Server;
+-  PyObject *__pyx_type_8pyliblo3_6_liblo_ServerThread;
+-  PyObject *__pyx_type_8pyliblo3_6_liblo__Blob;
+-  #endif
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo_Callback;
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo__ServerBase;
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo_Address;
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo_Message;
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo_Bundle;
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo_Server;
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo_ServerThread;
+-  PyTypeObject *__pyx_ptype_8pyliblo3_6_liblo__Blob;
+-  PyObject *__pyx_kp_s_0_16_1;
+-  PyObject *__pyx_kp_s_A_decorator_that_serves_as_a_mo;
+-  PyObject *__pyx_n_s_Address;
+-  PyObject *__pyx_n_s_AddressError;
+-  PyObject *__pyx_n_s_AddressError___init;
+-  PyObject *__pyx_n_s_AddressError___str;
+-  PyObject *__pyx_n_s_Address___reduce_cython;
+-  PyObject *__pyx_n_s_Address___setstate_cython;
+-  PyObject *__pyx_n_s_Address_get_hostname;
+-  PyObject *__pyx_n_s_Address_get_port;
+-  PyObject *__pyx_n_s_Address_get_protocol;
+-  PyObject *__pyx_n_s_Address_get_url;
+-  PyObject *__pyx_n_s_Blob;
+-  PyObject *__pyx_n_s_Blob___reduce_cython;
+-  PyObject *__pyx_n_s_Blob___setstate_cython;
+-  PyObject *__pyx_n_s_Bundle;
+-  PyObject *__pyx_n_s_Bundle___reduce_cython;
+-  PyObject *__pyx_n_s_Bundle___setstate_cython;
+-  PyObject *__pyx_n_s_Bundle_add;
+-  PyObject *__pyx_n_s_Callback;
+-  PyObject *__pyx_n_s_Callback___reduce_cython;
+-  PyObject *__pyx_n_s_Callback___setstate_cython;
+-  PyObject *__pyx_n_s_IOError;
+-  PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0;
+-  PyObject *__pyx_n_s_Message;
+-  PyObject *__pyx_n_s_Message___reduce_cython;
+-  PyObject *__pyx_n_s_Message___setstate_cython;
+-  PyObject *__pyx_n_s_Message_add;
+-  PyObject *__pyx_n_s_OverflowError;
+-  PyObject *__pyx_n_s_PickleError;
+-  PyObject *__pyx_kp_u_Proto;
+-  PyObject *__pyx_kp_s_Raised_when_creating_a_liblo_OS;
+-  PyObject *__pyx_kp_s_Raised_when_trying_to_create_an;
+-  PyObject *__pyx_n_s_RuntimeError;
+-  PyObject *__pyx_n_s_Server;
+-  PyObject *__pyx_n_s_ServerBase;
+-  PyObject *__pyx_n_s_ServerBase___reduce_cython;
+-  PyObject *__pyx_n_s_ServerBase___setstate_cython;
+-  PyObject *__pyx_n_s_ServerBase_add_bundle_handlers;
+-  PyObject *__pyx_n_s_ServerBase_add_method;
+-  PyObject *__pyx_n_s_ServerBase_del_method;
+-  PyObject *__pyx_n_s_ServerBase_fileno;
+-  PyObject *__pyx_n_s_ServerBase_get_port;
+-  PyObject *__pyx_n_s_ServerBase_get_protocol;
+-  PyObject *__pyx_n_s_ServerBase_get_url;
+-  PyObject *__pyx_n_s_ServerBase_register_methods;
+-  PyObject *__pyx_n_s_ServerBase_send;
+-  PyObject *__pyx_n_s_ServerError;
+-  PyObject *__pyx_n_s_ServerError___init;
+-  PyObject *__pyx_n_s_ServerError___str;
+-  PyObject *__pyx_n_s_ServerThread;
+-  PyObject *__pyx_n_s_ServerThread___reduce_cython;
+-  PyObject *__pyx_n_s_ServerThread___setstate_cython;
+-  PyObject *__pyx_n_s_ServerThread_free;
+-  PyObject *__pyx_n_s_ServerThread_start;
+-  PyObject *__pyx_n_s_ServerThread_stop;
+-  PyObject *__pyx_n_s_Server___reduce_cython;
+-  PyObject *__pyx_n_s_Server___setstate_cython;
+-  PyObject *__pyx_n_s_Server_free;
+-  PyObject *__pyx_kp_s_Server_method_called_after_free;
+-  PyObject *__pyx_n_s_Server_recv;
+-  PyObject *__pyx_n_s_TCP;
+-  PyObject *__pyx_n_s_TypeError;
+-  PyObject *__pyx_n_s_UDP;
+-  PyObject *__pyx_n_s_UNIX;
+-  PyObject *__pyx_n_s_ValueError;
+-  PyObject *__pyx_kp_s_Weak_reference_to_a_function_in;
+-  PyObject *__pyx_kp_u__11;
+-  PyObject *__pyx_n_s__12;
+-  PyObject *__pyx_n_s__88;
+-  PyObject *__pyx_n_s_add;
+-  PyObject *__pyx_n_s_add_bundle_handlers;
+-  PyObject *__pyx_n_s_add_method;
+-  PyObject *__pyx_n_s_addr;
+-  PyObject *__pyx_n_s_addr2;
+-  PyObject *__pyx_kp_s_address_error_s;
+-  PyObject *__pyx_n_s_append;
+-  PyObject *__pyx_n_s_arg;
+-  PyObject *__pyx_n_s_args;
+-  PyObject *__pyx_n_s_arr;
+-  PyObject *__pyx_n_s_asyncio_coroutines;
+-  PyObject *__pyx_n_s_b;
+-  PyObject *__pyx_kp_s_blob_is_empty;
+-  PyObject *__pyx_n_s_call;
+-  PyObject *__pyx_n_s_cb;
+-  PyObject *__pyx_n_s_cb_data;
+-  PyObject *__pyx_n_s_chr;
+-  PyObject *__pyx_n_s_class;
+-  PyObject *__pyx_n_s_cline_in_traceback;
+-  PyObject *__pyx_n_s_counter;
+-  PyObject *__pyx_n_s_counter_2;
+-  PyObject *__pyx_n_s_decode;
+-  PyObject *__pyx_n_s_del_method;
+-  PyObject *__pyx_n_s_dict;
+-  PyObject *__pyx_n_s_dict_2;
+-  PyObject *__pyx_kp_u_disable;
+-  PyObject *__pyx_n_s_doc;
+-  PyObject *__pyx_n_s_e;
+-  PyObject *__pyx_kp_u_enable;
+-  PyObject *__pyx_n_s_encode;
+-  PyObject *__pyx_n_s_end_func;
+-  PyObject *__pyx_n_s_end_handler;
+-  PyObject *__pyx_n_s_exception;
+-  PyObject *__pyx_n_s_f;
+-  PyObject *__pyx_n_s_fileno;
+-  PyObject *__pyx_n_s_free;
+-  PyObject *__pyx_n_s_func;
+-  PyObject *__pyx_n_s_func_2;
+-  PyObject *__pyx_n_s_func_3;
+-  PyObject *__pyx_kp_u_gc;
+-  PyObject *__pyx_n_s_get;
+-  PyObject *__pyx_n_s_get_hostname;
+-  PyObject *__pyx_n_s_get_port;
+-  PyObject *__pyx_n_s_get_protocol;
+-  PyObject *__pyx_n_s_get_url;
+-  PyObject *__pyx_n_s_getfullargspec;
+-  PyObject *__pyx_n_s_getmembers;
+-  PyObject *__pyx_n_s_getstate;
+-  PyObject *__pyx_n_s_import;
+-  PyObject *__pyx_kp_s_in_s;
+-  PyObject *__pyx_n_s_inf;
+-  PyObject *__pyx_n_s_init;
+-  PyObject *__pyx_n_s_init_subclass;
+-  PyObject *__pyx_n_s_initializing;
+-  PyObject *__pyx_n_s_inspect;
+-  PyObject *__pyx_n_s_inspect_2;
+-  PyObject *__pyx_kp_s_invalid_URL_s;
+-  PyObject *__pyx_kp_s_invalid_protocol;
+-  PyObject *__pyx_kp_s_invalid_timetag;
+-  PyObject *__pyx_n_s_is_coroutine;
+-  PyObject *__pyx_n_s_isdigit;
+-  PyObject *__pyx_kp_u_isenabled;
+-  PyObject *__pyx_n_s_ismethod;
+-  PyObject *__pyx_n_s_items;
+-  PyObject *__pyx_n_s_k;
+-  PyObject *__pyx_n_s_key;
+-  PyObject *__pyx_n_s_kwargs;
+-  PyObject *__pyx_n_s_m;
+-  PyObject *__pyx_n_s_main;
+-  PyObject *__pyx_n_s_make_method;
+-  PyObject *__pyx_n_s_make_method___call;
+-  PyObject *__pyx_n_s_make_method___init;
+-  PyObject *__pyx_n_s_message;
+-  PyObject *__pyx_n_s_messages;
+-  PyObject *__pyx_n_s_metaclass;
+-  PyObject *__pyx_n_s_method_spec;
+-  PyObject *__pyx_n_s_methods;
+-  PyObject *__pyx_n_s_module;
+-  PyObject *__pyx_n_s_mro_entries;
+-  PyObject *__pyx_n_s_msg;
+-  PyObject *__pyx_n_s_name;
+-  PyObject *__pyx_n_s_name_2;
+-  PyObject *__pyx_n_s_new;
+-  PyObject *__pyx_kp_u_not_understood_expected_one_of;
+-  PyObject *__pyx_n_s_num;
+-  PyObject *__pyx_n_s_obj;
+-  PyObject *__pyx_n_s_p;
+-  PyObject *__pyx_n_s_path;
+-  PyObject *__pyx_kp_s_path_must_be_a_string_or_None;
+-  PyObject *__pyx_n_s_pickle;
+-  PyObject *__pyx_n_s_port;
+-  PyObject *__pyx_n_s_prepare;
+-  PyObject *__pyx_n_s_property;
+-  PyObject *__pyx_n_s_proto;
+-  PyObject *__pyx_n_s_protostr_to_int;
+-  PyObject *__pyx_n_s_pyliblo3__liblo;
+-  PyObject *__pyx_kp_s_pyliblo3__liblo_pyx;
+-  PyObject *__pyx_n_s_pyx_PickleError;
+-  PyObject *__pyx_n_s_pyx_checksum;
+-  PyObject *__pyx_n_s_pyx_result;
+-  PyObject *__pyx_n_s_pyx_state;
+-  PyObject *__pyx_n_s_pyx_type;
+-  PyObject *__pyx_n_s_pyx_unpickle_Callback;
+-  PyObject *__pyx_n_s_pyx_vtable;
+-  PyObject *__pyx_n_s_qualname;
+-  PyObject *__pyx_n_s_r;
+-  PyObject *__pyx_n_s_recv;
+-  PyObject *__pyx_n_s_reduce;
+-  PyObject *__pyx_n_s_reduce_cython;
+-  PyObject *__pyx_n_s_reduce_ex;
+-  PyObject *__pyx_n_s_ref;
+-  PyObject *__pyx_n_s_reg_methods;
+-  PyObject *__pyx_n_s_register_methods;
+-  PyObject *__pyx_n_s_register_methods_locals_lambda;
+-  PyObject *__pyx_kp_s_s;
+-  PyObject *__pyx_n_s_s2;
+-  PyObject *__pyx_n_s_s_2;
+-  PyObject *__pyx_n_s_self;
+-  PyObject *__pyx_n_s_self_2;
+-  PyObject *__pyx_kp_s_self__address_cannot_be_converte;
+-  PyObject *__pyx_kp_s_self__blob_cannot_be_converted_t;
+-  PyObject *__pyx_kp_s_self__bundle_cannot_be_converted;
+-  PyObject *__pyx_kp_s_self__message_cannot_be_converte;
+-  PyObject *__pyx_kp_s_self__server_cannot_be_converted;
+-  PyObject *__pyx_kp_s_self__server_self__server_thread;
+-  PyObject *__pyx_n_s_send;
+-  PyObject *__pyx_kp_s_sending_failed_s;
+-  PyObject *__pyx_kp_s_server_error_d;
+-  PyObject *__pyx_n_s_set_name;
+-  PyObject *__pyx_n_s_setstate;
+-  PyObject *__pyx_n_s_setstate_cython;
+-  PyObject *__pyx_n_s_slots;
+-  PyObject *__pyx_n_s_sort;
+-  PyObject *__pyx_n_s_spec;
+-  PyObject *__pyx_n_s_spec_2;
+-  PyObject *__pyx_n_s_start;
+-  PyObject *__pyx_n_s_start_func;
+-  PyObject *__pyx_n_s_start_handler;
+-  PyObject *__pyx_n_s_state;
+-  PyObject *__pyx_n_s_stop;
+-  PyObject *__pyx_n_s_str;
+-  PyObject *__pyx_kp_s_stringsource;
+-  PyObject *__pyx_n_s_struct;
+-  PyObject *__pyx_n_s_struct___init;
+-  PyObject *__pyx_n_s_super;
+-  PyObject *__pyx_n_s_t;
+-  PyObject *__pyx_n_s_target;
+-  PyObject *__pyx_n_s_test;
+-  PyObject *__pyx_n_s_time;
+-  PyObject *__pyx_n_s_timeout;
+-  PyObject *__pyx_n_s_tmp;
+-  PyObject *__pyx_n_s_tt;
+-  PyObject *__pyx_n_s_types;
+-  PyObject *__pyx_n_s_typespec;
+-  PyObject *__pyx_kp_s_typespec_must_be_a_string_or_Non;
+-  PyObject *__pyx_kp_s_unknown_OSC_data_type_c;
+-  PyObject *__pyx_kp_s_unsupported_message_argument_typ;
+-  PyObject *__pyx_n_s_update;
+-  PyObject *__pyx_n_s_use_setstate;
+-  PyObject *__pyx_n_s_user_data;
+-  PyObject *__pyx_n_s_v;
+-  PyObject *__pyx_n_s_varargs;
+-  PyObject *__pyx_n_s_version;
+-  PyObject *__pyx_n_s_weakref;
+-  PyObject *__pyx_n_s_weakref_2;
+-  PyObject *__pyx_n_s_weakref_method;
+-  PyObject *__pyx_n_s_weakref_method___call;
+-  PyObject *__pyx_n_s_weakref_method___init;
+-  PyObject *__pyx_n_s_weakref_method_func;
+-  PyObject *__pyx_n_s_where;
+-  PyObject *__pyx_n_s_x;
+-  PyObject *__pyx_int_0;
+-  PyObject *__pyx_int_1;
+-  PyObject *__pyx_int_50507834;
+-  PyObject *__pyx_int_130844544;
+-  PyObject *__pyx_int_194199092;
+-  PyObject *__pyx_k__4;
+-  PyObject *__pyx_k__5;
+-  PyObject *__pyx_k__6;
+-  PyObject *__pyx_tuple_;
+-  PyObject *__pyx_tuple__2;
+-  PyObject *__pyx_tuple__3;
+-  PyObject *__pyx_tuple__7;
+-  PyObject *__pyx_tuple__8;
+-  PyObject *__pyx_tuple__9;
+-  PyObject *__pyx_tuple__10;
+-  PyObject *__pyx_tuple__13;
+-  PyObject *__pyx_tuple__15;
+-  PyObject *__pyx_tuple__16;
+-  PyObject *__pyx_tuple__18;
+-  PyObject *__pyx_tuple__20;
+-  PyObject *__pyx_tuple__22;
+-  PyObject *__pyx_tuple__24;
+-  PyObject *__pyx_tuple__26;
+-  PyObject *__pyx_tuple__28;
+-  PyObject *__pyx_tuple__30;
+-  PyObject *__pyx_tuple__32;
+-  PyObject *__pyx_tuple__34;
+-  PyObject *__pyx_tuple__36;
+-  PyObject *__pyx_tuple__38;
+-  PyObject *__pyx_tuple__40;
+-  PyObject *__pyx_tuple__42;
+-  PyObject *__pyx_tuple__47;
+-  PyObject *__pyx_tuple__49;
+-  PyObject *__pyx_tuple__51;
+-  PyObject *__pyx_tuple__53;
+-  PyObject *__pyx_tuple__58;
+-  PyObject *__pyx_tuple__67;
+-  PyObject *__pyx_tuple__78;
+-  PyObject *__pyx_tuple__82;
+-  PyObject *__pyx_tuple__86;
+-  PyObject *__pyx_codeobj__14;
+-  PyObject *__pyx_codeobj__17;
+-  PyObject *__pyx_codeobj__19;
+-  PyObject *__pyx_codeobj__21;
+-  PyObject *__pyx_codeobj__23;
+-  PyObject *__pyx_codeobj__25;
+-  PyObject *__pyx_codeobj__27;
+-  PyObject *__pyx_codeobj__29;
+-  PyObject *__pyx_codeobj__31;
+-  PyObject *__pyx_codeobj__33;
+-  PyObject *__pyx_codeobj__35;
+-  PyObject *__pyx_codeobj__37;
+-  PyObject *__pyx_codeobj__39;
+-  PyObject *__pyx_codeobj__41;
+-  PyObject *__pyx_codeobj__43;
+-  PyObject *__pyx_codeobj__44;
+-  PyObject *__pyx_codeobj__45;
+-  PyObject *__pyx_codeobj__46;
+-  PyObject *__pyx_codeobj__48;
+-  PyObject *__pyx_codeobj__50;
+-  PyObject *__pyx_codeobj__52;
+-  PyObject *__pyx_codeobj__54;
+-  PyObject *__pyx_codeobj__55;
+-  PyObject *__pyx_codeobj__56;
+-  PyObject *__pyx_codeobj__57;
+-  PyObject *__pyx_codeobj__59;
+-  PyObject *__pyx_codeobj__60;
+-  PyObject *__pyx_codeobj__61;
+-  PyObject *__pyx_codeobj__62;
+-  PyObject *__pyx_codeobj__63;
+-  PyObject *__pyx_codeobj__64;
+-  PyObject *__pyx_codeobj__65;
+-  PyObject *__pyx_codeobj__66;
+-  PyObject *__pyx_codeobj__68;
+-  PyObject *__pyx_codeobj__69;
+-  PyObject *__pyx_codeobj__70;
+-  PyObject *__pyx_codeobj__71;
+-  PyObject *__pyx_codeobj__72;
+-  PyObject *__pyx_codeobj__73;
+-  PyObject *__pyx_codeobj__74;
+-  PyObject *__pyx_codeobj__75;
+-  PyObject *__pyx_codeobj__76;
+-  PyObject *__pyx_codeobj__77;
+-  PyObject *__pyx_codeobj__79;
+-  PyObject *__pyx_codeobj__80;
+-  PyObject *__pyx_codeobj__81;
+-  PyObject *__pyx_codeobj__83;
+-  PyObject *__pyx_codeobj__84;
+-  PyObject *__pyx_codeobj__85;
+-  PyObject *__pyx_codeobj__87;
+-} __pyx_mstate;
+-
+-#if CYTHON_USE_MODULE_STATE
+-#ifdef __cplusplus
+-namespace {
+-  extern struct PyModuleDef __pyx_moduledef;
+-} /* anonymous namespace */
+-#else
+-static struct PyModuleDef __pyx_moduledef;
+-#endif
+-
+-#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o))
+-
+-#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef)))
+-
+-#define __pyx_m (PyState_FindModule(&__pyx_moduledef))
+-#else
+-static __pyx_mstate __pyx_mstate_global_static =
+-#ifdef __cplusplus
+-    {};
+-#else
+-    {0};
+-#endif
+-static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static;
+-#endif
+-/* #### Code section: module_state_clear ### */
+-#if CYTHON_USE_MODULE_STATE
+-static int __pyx_m_clear(PyObject *m) {
+-  __pyx_mstate *clear_module_state = __pyx_mstate(m);
+-  if (!clear_module_state) return 0;
+-  Py_CLEAR(clear_module_state->__pyx_d);
+-  Py_CLEAR(clear_module_state->__pyx_b);
+-  Py_CLEAR(clear_module_state->__pyx_cython_runtime);
+-  Py_CLEAR(clear_module_state->__pyx_empty_tuple);
+-  Py_CLEAR(clear_module_state->__pyx_empty_bytes);
+-  Py_CLEAR(clear_module_state->__pyx_empty_unicode);
+-  #ifdef __Pyx_CyFunction_USED
+-  Py_CLEAR(clear_module_state->__pyx_CyFunctionType);
+-  #endif
+-  #ifdef __Pyx_FusedFunction_USED
+-  Py_CLEAR(clear_module_state->__pyx_FusedFunctionType);
+-  #endif
+-  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4bool_bool);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_7complex_complex);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo_Callback);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo_Callback);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo__ServerBase);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo__ServerBase);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo_Address);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo_Address);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo_Message);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo_Message);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo_Bundle);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo_Bundle);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo_Server);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo_Server);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo_ServerThread);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo_ServerThread);
+-  Py_CLEAR(clear_module_state->__pyx_ptype_8pyliblo3_6_liblo__Blob);
+-  Py_CLEAR(clear_module_state->__pyx_type_8pyliblo3_6_liblo__Blob);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_0_16_1);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_A_decorator_that_serves_as_a_mo);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Address);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_AddressError);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_AddressError___init);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_AddressError___str);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Address___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Address___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Address_get_hostname);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Address_get_port);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Address_get_protocol);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Address_get_url);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Blob);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Blob___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Blob___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Bundle);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Bundle___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Bundle___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Bundle_add);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Callback);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Callback___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Callback___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_IOError);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Message);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Message___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Message___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Message_add);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_OverflowError);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_PickleError);
+-  Py_CLEAR(clear_module_state->__pyx_kp_u_Proto);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_Raised_when_creating_a_liblo_OS);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_Raised_when_trying_to_create_an);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_RuntimeError);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Server);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_add_bundle_handlers);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_add_method);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_del_method);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_fileno);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_get_port);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_get_protocol);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_get_url);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_register_methods);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerBase_send);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerError);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerError___init);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerError___str);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerThread);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerThread___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerThread___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerThread_free);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerThread_start);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ServerThread_stop);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Server___reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Server___setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Server_free);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_Server_method_called_after_free);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_Server_recv);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_TCP);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_TypeError);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_UDP);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_UNIX);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ValueError);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_Weak_reference_to_a_function_in);
+-  Py_CLEAR(clear_module_state->__pyx_kp_u__11);
+-  Py_CLEAR(clear_module_state->__pyx_n_s__12);
+-  Py_CLEAR(clear_module_state->__pyx_n_s__88);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_add);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_add_bundle_handlers);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_add_method);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_addr);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_addr2);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_address_error_s);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_append);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_arg);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_args);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_arr);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_b);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_blob_is_empty);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_call);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_cb);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_cb_data);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_chr);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_class);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_counter);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_counter_2);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_decode);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_del_method);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_dict);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_dict_2);
+-  Py_CLEAR(clear_module_state->__pyx_kp_u_disable);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_doc);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_e);
+-  Py_CLEAR(clear_module_state->__pyx_kp_u_enable);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_encode);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_end_func);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_end_handler);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_exception);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_f);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_fileno);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_free);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_func);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_func_2);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_func_3);
+-  Py_CLEAR(clear_module_state->__pyx_kp_u_gc);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_get);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_get_hostname);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_get_port);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_get_protocol);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_get_url);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_getfullargspec);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_getmembers);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_getstate);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_import);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_in_s);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_inf);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_init);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_init_subclass);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_initializing);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_inspect);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_inspect_2);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_invalid_URL_s);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_invalid_protocol);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_invalid_timetag);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_isdigit);
+-  Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ismethod);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_items);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_k);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_key);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_kwargs);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_m);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_main);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_make_method);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_make_method___call);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_make_method___init);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_message);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_messages);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_metaclass);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_method_spec);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_methods);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_module);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_mro_entries);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_msg);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_name);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_name_2);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_new);
+-  Py_CLEAR(clear_module_state->__pyx_kp_u_not_understood_expected_one_of);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_num);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_obj);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_p);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_path);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_path_must_be_a_string_or_None);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pickle);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_port);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_prepare);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_property);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_proto);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_protostr_to_int);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyliblo3__liblo);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_pyliblo3__liblo_pyx);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_PickleError);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_checksum);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_result);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_Callback);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_qualname);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_r);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_recv);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_reduce);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_ref);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_reg_methods);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_register_methods);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_register_methods_locals_lambda);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_s);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_s2);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_s_2);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_self);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_self_2);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_self__address_cannot_be_converte);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_self__blob_cannot_be_converted_t);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_self__bundle_cannot_be_converted);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_self__message_cannot_be_converte);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_self__server_cannot_be_converted);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_self__server_self__server_thread);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_send);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_sending_failed_s);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_server_error_d);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_set_name);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_setstate);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_slots);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_sort);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_spec);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_spec_2);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_start);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_start_func);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_start_handler);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_state);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_stop);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_str);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_struct);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_struct___init);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_super);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_t);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_target);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_test);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_time);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_timeout);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_tmp);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_tt);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_types);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_typespec);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_typespec_must_be_a_string_or_Non);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_unknown_OSC_data_type_c);
+-  Py_CLEAR(clear_module_state->__pyx_kp_s_unsupported_message_argument_typ);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_update);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_use_setstate);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_user_data);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_v);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_varargs);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_version);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_weakref);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_weakref_2);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_weakref_method);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_weakref_method___call);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_weakref_method___init);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_weakref_method_func);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_where);
+-  Py_CLEAR(clear_module_state->__pyx_n_s_x);
+-  Py_CLEAR(clear_module_state->__pyx_int_0);
+-  Py_CLEAR(clear_module_state->__pyx_int_1);
+-  Py_CLEAR(clear_module_state->__pyx_int_50507834);
+-  Py_CLEAR(clear_module_state->__pyx_int_130844544);
+-  Py_CLEAR(clear_module_state->__pyx_int_194199092);
+-  Py_CLEAR(clear_module_state->__pyx_k__4);
+-  Py_CLEAR(clear_module_state->__pyx_k__5);
+-  Py_CLEAR(clear_module_state->__pyx_k__6);
+-  Py_CLEAR(clear_module_state->__pyx_tuple_);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__2);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__3);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__7);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__8);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__9);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__10);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__13);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__15);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__16);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__18);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__20);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__22);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__24);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__26);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__28);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__30);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__32);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__34);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__36);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__38);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__40);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__42);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__47);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__49);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__51);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__53);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__58);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__67);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__78);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__82);
+-  Py_CLEAR(clear_module_state->__pyx_tuple__86);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__14);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__17);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__19);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__21);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__23);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__25);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__27);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__29);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__31);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__33);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__35);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__37);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__39);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__41);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__43);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__44);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__45);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__46);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__48);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__50);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__52);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__54);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__55);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__56);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__57);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__59);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__60);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__61);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__62);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__63);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__64);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__65);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__66);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__68);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__69);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__70);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__71);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__72);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__73);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__74);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__75);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__76);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__77);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__79);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__80);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__81);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__83);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__84);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__85);
+-  Py_CLEAR(clear_module_state->__pyx_codeobj__87);
+-  return 0;
+-}
+-#endif
+-/* #### Code section: module_state_traverse ### */
+-#if CYTHON_USE_MODULE_STATE
+-static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
+-  __pyx_mstate *traverse_module_state = __pyx_mstate(m);
+-  if (!traverse_module_state) return 0;
+-  Py_VISIT(traverse_module_state->__pyx_d);
+-  Py_VISIT(traverse_module_state->__pyx_b);
+-  Py_VISIT(traverse_module_state->__pyx_cython_runtime);
+-  Py_VISIT(traverse_module_state->__pyx_empty_tuple);
+-  Py_VISIT(traverse_module_state->__pyx_empty_bytes);
+-  Py_VISIT(traverse_module_state->__pyx_empty_unicode);
+-  #ifdef __Pyx_CyFunction_USED
+-  Py_VISIT(traverse_module_state->__pyx_CyFunctionType);
+-  #endif
+-  #ifdef __Pyx_FusedFunction_USED
+-  Py_VISIT(traverse_module_state->__pyx_FusedFunctionType);
+-  #endif
+-  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4bool_bool);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_7complex_complex);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo_Callback);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo_Callback);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo__ServerBase);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo__ServerBase);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo_Address);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo_Address);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo_Message);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo_Message);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo_Bundle);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo_Bundle);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo_Server);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo_Server);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo_ServerThread);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo_ServerThread);
+-  Py_VISIT(traverse_module_state->__pyx_ptype_8pyliblo3_6_liblo__Blob);
+-  Py_VISIT(traverse_module_state->__pyx_type_8pyliblo3_6_liblo__Blob);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_0_16_1);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_A_decorator_that_serves_as_a_mo);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Address);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_AddressError);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_AddressError___init);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_AddressError___str);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Address___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Address___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Address_get_hostname);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Address_get_port);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Address_get_protocol);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Address_get_url);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Blob);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Blob___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Blob___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Bundle);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Bundle___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Bundle___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Bundle_add);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Callback);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Callback___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Callback___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_IOError);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Message);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Message___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Message___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Message_add);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_OverflowError);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_PickleError);
+-  Py_VISIT(traverse_module_state->__pyx_kp_u_Proto);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_Raised_when_creating_a_liblo_OS);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_Raised_when_trying_to_create_an);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_RuntimeError);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Server);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_add_bundle_handlers);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_add_method);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_del_method);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_fileno);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_get_port);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_get_protocol);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_get_url);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_register_methods);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerBase_send);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerError);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerError___init);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerError___str);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerThread);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerThread___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerThread___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerThread_free);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerThread_start);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ServerThread_stop);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Server___reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Server___setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Server_free);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_Server_method_called_after_free);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_Server_recv);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_TCP);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_TypeError);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_UDP);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_UNIX);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ValueError);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_Weak_reference_to_a_function_in);
+-  Py_VISIT(traverse_module_state->__pyx_kp_u__11);
+-  Py_VISIT(traverse_module_state->__pyx_n_s__12);
+-  Py_VISIT(traverse_module_state->__pyx_n_s__88);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_add);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_add_bundle_handlers);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_add_method);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_addr);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_addr2);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_address_error_s);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_append);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_arg);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_args);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_arr);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_b);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_blob_is_empty);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_call);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_cb);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_cb_data);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_chr);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_class);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_counter);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_counter_2);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_decode);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_del_method);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_dict);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_dict_2);
+-  Py_VISIT(traverse_module_state->__pyx_kp_u_disable);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_doc);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_e);
+-  Py_VISIT(traverse_module_state->__pyx_kp_u_enable);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_encode);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_end_func);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_end_handler);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_exception);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_f);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_fileno);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_free);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_func);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_func_2);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_func_3);
+-  Py_VISIT(traverse_module_state->__pyx_kp_u_gc);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_get);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_get_hostname);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_get_port);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_get_protocol);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_get_url);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_getfullargspec);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_getmembers);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_getstate);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_import);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_in_s);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_inf);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_init);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_init_subclass);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_initializing);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_inspect);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_inspect_2);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_invalid_URL_s);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_invalid_protocol);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_invalid_timetag);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_isdigit);
+-  Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ismethod);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_items);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_k);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_key);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_kwargs);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_m);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_main);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_make_method);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_make_method___call);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_make_method___init);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_message);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_messages);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_metaclass);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_method_spec);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_methods);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_module);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_mro_entries);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_msg);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_name);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_name_2);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_new);
+-  Py_VISIT(traverse_module_state->__pyx_kp_u_not_understood_expected_one_of);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_num);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_obj);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_p);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_path);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_path_must_be_a_string_or_None);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pickle);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_port);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_prepare);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_property);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_proto);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_protostr_to_int);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyliblo3__liblo);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_pyliblo3__liblo_pyx);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_PickleError);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_checksum);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_result);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_Callback);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_qualname);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_r);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_recv);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_reduce);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_ref);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_reg_methods);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_register_methods);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_register_methods_locals_lambda);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_s);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_s2);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_s_2);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_self);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_self_2);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_self__address_cannot_be_converte);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_self__blob_cannot_be_converted_t);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_self__bundle_cannot_be_converted);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_self__message_cannot_be_converte);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_self__server_cannot_be_converted);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_self__server_self__server_thread);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_send);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_sending_failed_s);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_server_error_d);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_set_name);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_setstate);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_slots);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_sort);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_spec);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_spec_2);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_start);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_start_func);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_start_handler);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_state);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_stop);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_str);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_struct);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_struct___init);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_super);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_t);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_target);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_test);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_time);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_timeout);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_tmp);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_tt);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_types);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_typespec);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_typespec_must_be_a_string_or_Non);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_unknown_OSC_data_type_c);
+-  Py_VISIT(traverse_module_state->__pyx_kp_s_unsupported_message_argument_typ);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_update);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_use_setstate);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_user_data);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_v);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_varargs);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_version);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_weakref);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_weakref_2);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_weakref_method);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_weakref_method___call);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_weakref_method___init);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_weakref_method_func);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_where);
+-  Py_VISIT(traverse_module_state->__pyx_n_s_x);
+-  Py_VISIT(traverse_module_state->__pyx_int_0);
+-  Py_VISIT(traverse_module_state->__pyx_int_1);
+-  Py_VISIT(traverse_module_state->__pyx_int_50507834);
+-  Py_VISIT(traverse_module_state->__pyx_int_130844544);
+-  Py_VISIT(traverse_module_state->__pyx_int_194199092);
+-  Py_VISIT(traverse_module_state->__pyx_k__4);
+-  Py_VISIT(traverse_module_state->__pyx_k__5);
+-  Py_VISIT(traverse_module_state->__pyx_k__6);
+-  Py_VISIT(traverse_module_state->__pyx_tuple_);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__2);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__3);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__7);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__8);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__9);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__10);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__13);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__15);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__16);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__18);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__20);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__22);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__24);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__26);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__28);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__30);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__32);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__34);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__36);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__38);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__40);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__42);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__47);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__49);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__51);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__53);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__58);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__67);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__78);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__82);
+-  Py_VISIT(traverse_module_state->__pyx_tuple__86);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__14);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__17);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__19);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__21);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__23);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__25);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__27);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__29);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__31);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__33);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__35);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__37);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__39);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__41);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__43);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__44);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__45);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__46);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__48);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__50);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__52);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__54);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__55);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__56);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__57);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__59);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__60);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__61);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__62);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__63);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__64);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__65);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__66);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__68);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__69);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__70);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__71);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__72);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__73);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__74);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__75);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__76);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__77);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__79);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__80);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__81);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__83);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__84);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__85);
+-  Py_VISIT(traverse_module_state->__pyx_codeobj__87);
+-  return 0;
+-}
+-#endif
+-/* #### Code section: module_state_defines ### */
+-#define __pyx_d __pyx_mstate_global->__pyx_d
+-#define __pyx_b __pyx_mstate_global->__pyx_b
+-#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime
+-#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple
+-#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes
+-#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode
+-#ifdef __Pyx_CyFunction_USED
+-#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType
+-#endif
+-#ifdef __Pyx_FusedFunction_USED
+-#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType
+-#endif
+-#ifdef __Pyx_Generator_USED
+-#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType
+-#endif
+-#ifdef __Pyx_IterableCoroutine_USED
+-#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType
+-#endif
+-#ifdef __Pyx_Coroutine_USED
+-#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType
+-#endif
+-#ifdef __Pyx_Coroutine_USED
+-#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#define __pyx_ptype_7cpython_4bool_bool __pyx_mstate_global->__pyx_ptype_7cpython_4bool_bool
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#define __pyx_ptype_7cpython_7complex_complex __pyx_mstate_global->__pyx_ptype_7cpython_7complex_complex
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#endif
+-#if CYTHON_USE_MODULE_STATE
+-#define __pyx_type_8pyliblo3_6_liblo_Callback __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo_Callback
+-#define __pyx_type_8pyliblo3_6_liblo__ServerBase __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo__ServerBase
+-#define __pyx_type_8pyliblo3_6_liblo_Address __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo_Address
+-#define __pyx_type_8pyliblo3_6_liblo_Message __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo_Message
+-#define __pyx_type_8pyliblo3_6_liblo_Bundle __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo_Bundle
+-#define __pyx_type_8pyliblo3_6_liblo_Server __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo_Server
+-#define __pyx_type_8pyliblo3_6_liblo_ServerThread __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo_ServerThread
+-#define __pyx_type_8pyliblo3_6_liblo__Blob __pyx_mstate_global->__pyx_type_8pyliblo3_6_liblo__Blob
+-#endif
+-#define __pyx_ptype_8pyliblo3_6_liblo_Callback __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo_Callback
+-#define __pyx_ptype_8pyliblo3_6_liblo__ServerBase __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo__ServerBase
+-#define __pyx_ptype_8pyliblo3_6_liblo_Address __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo_Address
+-#define __pyx_ptype_8pyliblo3_6_liblo_Message __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo_Message
+-#define __pyx_ptype_8pyliblo3_6_liblo_Bundle __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo_Bundle
+-#define __pyx_ptype_8pyliblo3_6_liblo_Server __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo_Server
+-#define __pyx_ptype_8pyliblo3_6_liblo_ServerThread __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo_ServerThread
+-#define __pyx_ptype_8pyliblo3_6_liblo__Blob __pyx_mstate_global->__pyx_ptype_8pyliblo3_6_liblo__Blob
+-#define __pyx_kp_s_0_16_1 __pyx_mstate_global->__pyx_kp_s_0_16_1
+-#define __pyx_kp_s_A_decorator_that_serves_as_a_mo __pyx_mstate_global->__pyx_kp_s_A_decorator_that_serves_as_a_mo
+-#define __pyx_n_s_Address __pyx_mstate_global->__pyx_n_s_Address
+-#define __pyx_n_s_AddressError __pyx_mstate_global->__pyx_n_s_AddressError
+-#define __pyx_n_s_AddressError___init __pyx_mstate_global->__pyx_n_s_AddressError___init
+-#define __pyx_n_s_AddressError___str __pyx_mstate_global->__pyx_n_s_AddressError___str
+-#define __pyx_n_s_Address___reduce_cython __pyx_mstate_global->__pyx_n_s_Address___reduce_cython
+-#define __pyx_n_s_Address___setstate_cython __pyx_mstate_global->__pyx_n_s_Address___setstate_cython
+-#define __pyx_n_s_Address_get_hostname __pyx_mstate_global->__pyx_n_s_Address_get_hostname
+-#define __pyx_n_s_Address_get_port __pyx_mstate_global->__pyx_n_s_Address_get_port
+-#define __pyx_n_s_Address_get_protocol __pyx_mstate_global->__pyx_n_s_Address_get_protocol
+-#define __pyx_n_s_Address_get_url __pyx_mstate_global->__pyx_n_s_Address_get_url
+-#define __pyx_n_s_Blob __pyx_mstate_global->__pyx_n_s_Blob
+-#define __pyx_n_s_Blob___reduce_cython __pyx_mstate_global->__pyx_n_s_Blob___reduce_cython
+-#define __pyx_n_s_Blob___setstate_cython __pyx_mstate_global->__pyx_n_s_Blob___setstate_cython
+-#define __pyx_n_s_Bundle __pyx_mstate_global->__pyx_n_s_Bundle
+-#define __pyx_n_s_Bundle___reduce_cython __pyx_mstate_global->__pyx_n_s_Bundle___reduce_cython
+-#define __pyx_n_s_Bundle___setstate_cython __pyx_mstate_global->__pyx_n_s_Bundle___setstate_cython
+-#define __pyx_n_s_Bundle_add __pyx_mstate_global->__pyx_n_s_Bundle_add
+-#define __pyx_n_s_Callback __pyx_mstate_global->__pyx_n_s_Callback
+-#define __pyx_n_s_Callback___reduce_cython __pyx_mstate_global->__pyx_n_s_Callback___reduce_cython
+-#define __pyx_n_s_Callback___setstate_cython __pyx_mstate_global->__pyx_n_s_Callback___setstate_cython
+-#define __pyx_n_s_IOError __pyx_mstate_global->__pyx_n_s_IOError
+-#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0
+-#define __pyx_n_s_Message __pyx_mstate_global->__pyx_n_s_Message
+-#define __pyx_n_s_Message___reduce_cython __pyx_mstate_global->__pyx_n_s_Message___reduce_cython
+-#define __pyx_n_s_Message___setstate_cython __pyx_mstate_global->__pyx_n_s_Message___setstate_cython
+-#define __pyx_n_s_Message_add __pyx_mstate_global->__pyx_n_s_Message_add
+-#define __pyx_n_s_OverflowError __pyx_mstate_global->__pyx_n_s_OverflowError
+-#define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError
+-#define __pyx_kp_u_Proto __pyx_mstate_global->__pyx_kp_u_Proto
+-#define __pyx_kp_s_Raised_when_creating_a_liblo_OS __pyx_mstate_global->__pyx_kp_s_Raised_when_creating_a_liblo_OS
+-#define __pyx_kp_s_Raised_when_trying_to_create_an __pyx_mstate_global->__pyx_kp_s_Raised_when_trying_to_create_an
+-#define __pyx_n_s_RuntimeError __pyx_mstate_global->__pyx_n_s_RuntimeError
+-#define __pyx_n_s_Server __pyx_mstate_global->__pyx_n_s_Server
+-#define __pyx_n_s_ServerBase __pyx_mstate_global->__pyx_n_s_ServerBase
+-#define __pyx_n_s_ServerBase___reduce_cython __pyx_mstate_global->__pyx_n_s_ServerBase___reduce_cython
+-#define __pyx_n_s_ServerBase___setstate_cython __pyx_mstate_global->__pyx_n_s_ServerBase___setstate_cython
+-#define __pyx_n_s_ServerBase_add_bundle_handlers __pyx_mstate_global->__pyx_n_s_ServerBase_add_bundle_handlers
+-#define __pyx_n_s_ServerBase_add_method __pyx_mstate_global->__pyx_n_s_ServerBase_add_method
+-#define __pyx_n_s_ServerBase_del_method __pyx_mstate_global->__pyx_n_s_ServerBase_del_method
+-#define __pyx_n_s_ServerBase_fileno __pyx_mstate_global->__pyx_n_s_ServerBase_fileno
+-#define __pyx_n_s_ServerBase_get_port __pyx_mstate_global->__pyx_n_s_ServerBase_get_port
+-#define __pyx_n_s_ServerBase_get_protocol __pyx_mstate_global->__pyx_n_s_ServerBase_get_protocol
+-#define __pyx_n_s_ServerBase_get_url __pyx_mstate_global->__pyx_n_s_ServerBase_get_url
+-#define __pyx_n_s_ServerBase_register_methods __pyx_mstate_global->__pyx_n_s_ServerBase_register_methods
+-#define __pyx_n_s_ServerBase_send __pyx_mstate_global->__pyx_n_s_ServerBase_send
+-#define __pyx_n_s_ServerError __pyx_mstate_global->__pyx_n_s_ServerError
+-#define __pyx_n_s_ServerError___init __pyx_mstate_global->__pyx_n_s_ServerError___init
+-#define __pyx_n_s_ServerError___str __pyx_mstate_global->__pyx_n_s_ServerError___str
+-#define __pyx_n_s_ServerThread __pyx_mstate_global->__pyx_n_s_ServerThread
+-#define __pyx_n_s_ServerThread___reduce_cython __pyx_mstate_global->__pyx_n_s_ServerThread___reduce_cython
+-#define __pyx_n_s_ServerThread___setstate_cython __pyx_mstate_global->__pyx_n_s_ServerThread___setstate_cython
+-#define __pyx_n_s_ServerThread_free __pyx_mstate_global->__pyx_n_s_ServerThread_free
+-#define __pyx_n_s_ServerThread_start __pyx_mstate_global->__pyx_n_s_ServerThread_start
+-#define __pyx_n_s_ServerThread_stop __pyx_mstate_global->__pyx_n_s_ServerThread_stop
+-#define __pyx_n_s_Server___reduce_cython __pyx_mstate_global->__pyx_n_s_Server___reduce_cython
+-#define __pyx_n_s_Server___setstate_cython __pyx_mstate_global->__pyx_n_s_Server___setstate_cython
+-#define __pyx_n_s_Server_free __pyx_mstate_global->__pyx_n_s_Server_free
+-#define __pyx_kp_s_Server_method_called_after_free __pyx_mstate_global->__pyx_kp_s_Server_method_called_after_free
+-#define __pyx_n_s_Server_recv __pyx_mstate_global->__pyx_n_s_Server_recv
+-#define __pyx_n_s_TCP __pyx_mstate_global->__pyx_n_s_TCP
+-#define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError
+-#define __pyx_n_s_UDP __pyx_mstate_global->__pyx_n_s_UDP
+-#define __pyx_n_s_UNIX __pyx_mstate_global->__pyx_n_s_UNIX
+-#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError
+-#define __pyx_kp_s_Weak_reference_to_a_function_in __pyx_mstate_global->__pyx_kp_s_Weak_reference_to_a_function_in
+-#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11
+-#define __pyx_n_s__12 __pyx_mstate_global->__pyx_n_s__12
+-#define __pyx_n_s__88 __pyx_mstate_global->__pyx_n_s__88
+-#define __pyx_n_s_add __pyx_mstate_global->__pyx_n_s_add
+-#define __pyx_n_s_add_bundle_handlers __pyx_mstate_global->__pyx_n_s_add_bundle_handlers
+-#define __pyx_n_s_add_method __pyx_mstate_global->__pyx_n_s_add_method
+-#define __pyx_n_s_addr __pyx_mstate_global->__pyx_n_s_addr
+-#define __pyx_n_s_addr2 __pyx_mstate_global->__pyx_n_s_addr2
+-#define __pyx_kp_s_address_error_s __pyx_mstate_global->__pyx_kp_s_address_error_s
+-#define __pyx_n_s_append __pyx_mstate_global->__pyx_n_s_append
+-#define __pyx_n_s_arg __pyx_mstate_global->__pyx_n_s_arg
+-#define __pyx_n_s_args __pyx_mstate_global->__pyx_n_s_args
+-#define __pyx_n_s_arr __pyx_mstate_global->__pyx_n_s_arr
+-#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines
+-#define __pyx_n_s_b __pyx_mstate_global->__pyx_n_s_b
+-#define __pyx_kp_s_blob_is_empty __pyx_mstate_global->__pyx_kp_s_blob_is_empty
+-#define __pyx_n_s_call __pyx_mstate_global->__pyx_n_s_call
+-#define __pyx_n_s_cb __pyx_mstate_global->__pyx_n_s_cb
+-#define __pyx_n_s_cb_data __pyx_mstate_global->__pyx_n_s_cb_data
+-#define __pyx_n_s_chr __pyx_mstate_global->__pyx_n_s_chr
+-#define __pyx_n_s_class __pyx_mstate_global->__pyx_n_s_class
+-#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback
+-#define __pyx_n_s_counter __pyx_mstate_global->__pyx_n_s_counter
+-#define __pyx_n_s_counter_2 __pyx_mstate_global->__pyx_n_s_counter_2
+-#define __pyx_n_s_decode __pyx_mstate_global->__pyx_n_s_decode
+-#define __pyx_n_s_del_method __pyx_mstate_global->__pyx_n_s_del_method
+-#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict
+-#define __pyx_n_s_dict_2 __pyx_mstate_global->__pyx_n_s_dict_2
+-#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable
+-#define __pyx_n_s_doc __pyx_mstate_global->__pyx_n_s_doc
+-#define __pyx_n_s_e __pyx_mstate_global->__pyx_n_s_e
+-#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable
+-#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode
+-#define __pyx_n_s_end_func __pyx_mstate_global->__pyx_n_s_end_func
+-#define __pyx_n_s_end_handler __pyx_mstate_global->__pyx_n_s_end_handler
+-#define __pyx_n_s_exception __pyx_mstate_global->__pyx_n_s_exception
+-#define __pyx_n_s_f __pyx_mstate_global->__pyx_n_s_f
+-#define __pyx_n_s_fileno __pyx_mstate_global->__pyx_n_s_fileno
+-#define __pyx_n_s_free __pyx_mstate_global->__pyx_n_s_free
+-#define __pyx_n_s_func __pyx_mstate_global->__pyx_n_s_func
+-#define __pyx_n_s_func_2 __pyx_mstate_global->__pyx_n_s_func_2
+-#define __pyx_n_s_func_3 __pyx_mstate_global->__pyx_n_s_func_3
+-#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc
+-#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get
+-#define __pyx_n_s_get_hostname __pyx_mstate_global->__pyx_n_s_get_hostname
+-#define __pyx_n_s_get_port __pyx_mstate_global->__pyx_n_s_get_port
+-#define __pyx_n_s_get_protocol __pyx_mstate_global->__pyx_n_s_get_protocol
+-#define __pyx_n_s_get_url __pyx_mstate_global->__pyx_n_s_get_url
+-#define __pyx_n_s_getfullargspec __pyx_mstate_global->__pyx_n_s_getfullargspec
+-#define __pyx_n_s_getmembers __pyx_mstate_global->__pyx_n_s_getmembers
+-#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate
+-#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import
+-#define __pyx_kp_s_in_s __pyx_mstate_global->__pyx_kp_s_in_s
+-#define __pyx_n_s_inf __pyx_mstate_global->__pyx_n_s_inf
+-#define __pyx_n_s_init __pyx_mstate_global->__pyx_n_s_init
+-#define __pyx_n_s_init_subclass __pyx_mstate_global->__pyx_n_s_init_subclass
+-#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing
+-#define __pyx_n_s_inspect __pyx_mstate_global->__pyx_n_s_inspect
+-#define __pyx_n_s_inspect_2 __pyx_mstate_global->__pyx_n_s_inspect_2
+-#define __pyx_kp_s_invalid_URL_s __pyx_mstate_global->__pyx_kp_s_invalid_URL_s
+-#define __pyx_kp_s_invalid_protocol __pyx_mstate_global->__pyx_kp_s_invalid_protocol
+-#define __pyx_kp_s_invalid_timetag __pyx_mstate_global->__pyx_kp_s_invalid_timetag
+-#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine
+-#define __pyx_n_s_isdigit __pyx_mstate_global->__pyx_n_s_isdigit
+-#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled
+-#define __pyx_n_s_ismethod __pyx_mstate_global->__pyx_n_s_ismethod
+-#define __pyx_n_s_items __pyx_mstate_global->__pyx_n_s_items
+-#define __pyx_n_s_k __pyx_mstate_global->__pyx_n_s_k
+-#define __pyx_n_s_key __pyx_mstate_global->__pyx_n_s_key
+-#define __pyx_n_s_kwargs __pyx_mstate_global->__pyx_n_s_kwargs
+-#define __pyx_n_s_m __pyx_mstate_global->__pyx_n_s_m
+-#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main
+-#define __pyx_n_s_make_method __pyx_mstate_global->__pyx_n_s_make_method
+-#define __pyx_n_s_make_method___call __pyx_mstate_global->__pyx_n_s_make_method___call
+-#define __pyx_n_s_make_method___init __pyx_mstate_global->__pyx_n_s_make_method___init
+-#define __pyx_n_s_message __pyx_mstate_global->__pyx_n_s_message
+-#define __pyx_n_s_messages __pyx_mstate_global->__pyx_n_s_messages
+-#define __pyx_n_s_metaclass __pyx_mstate_global->__pyx_n_s_metaclass
+-#define __pyx_n_s_method_spec __pyx_mstate_global->__pyx_n_s_method_spec
+-#define __pyx_n_s_methods __pyx_mstate_global->__pyx_n_s_methods
+-#define __pyx_n_s_module __pyx_mstate_global->__pyx_n_s_module
+-#define __pyx_n_s_mro_entries __pyx_mstate_global->__pyx_n_s_mro_entries
+-#define __pyx_n_s_msg __pyx_mstate_global->__pyx_n_s_msg
+-#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name
+-#define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2
+-#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new
+-#define __pyx_kp_u_not_understood_expected_one_of __pyx_mstate_global->__pyx_kp_u_not_understood_expected_one_of
+-#define __pyx_n_s_num __pyx_mstate_global->__pyx_n_s_num
+-#define __pyx_n_s_obj __pyx_mstate_global->__pyx_n_s_obj
+-#define __pyx_n_s_p __pyx_mstate_global->__pyx_n_s_p
+-#define __pyx_n_s_path __pyx_mstate_global->__pyx_n_s_path
+-#define __pyx_kp_s_path_must_be_a_string_or_None __pyx_mstate_global->__pyx_kp_s_path_must_be_a_string_or_None
+-#define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle
+-#define __pyx_n_s_port __pyx_mstate_global->__pyx_n_s_port
+-#define __pyx_n_s_prepare __pyx_mstate_global->__pyx_n_s_prepare
+-#define __pyx_n_s_property __pyx_mstate_global->__pyx_n_s_property
+-#define __pyx_n_s_proto __pyx_mstate_global->__pyx_n_s_proto
+-#define __pyx_n_s_protostr_to_int __pyx_mstate_global->__pyx_n_s_protostr_to_int
+-#define __pyx_n_s_pyliblo3__liblo __pyx_mstate_global->__pyx_n_s_pyliblo3__liblo
+-#define __pyx_kp_s_pyliblo3__liblo_pyx __pyx_mstate_global->__pyx_kp_s_pyliblo3__liblo_pyx
+-#define __pyx_n_s_pyx_PickleError __pyx_mstate_global->__pyx_n_s_pyx_PickleError
+-#define __pyx_n_s_pyx_checksum __pyx_mstate_global->__pyx_n_s_pyx_checksum
+-#define __pyx_n_s_pyx_result __pyx_mstate_global->__pyx_n_s_pyx_result
+-#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state
+-#define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type
+-#define __pyx_n_s_pyx_unpickle_Callback __pyx_mstate_global->__pyx_n_s_pyx_unpickle_Callback
+-#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable
+-#define __pyx_n_s_qualname __pyx_mstate_global->__pyx_n_s_qualname
+-#define __pyx_n_s_r __pyx_mstate_global->__pyx_n_s_r
+-#define __pyx_n_s_recv __pyx_mstate_global->__pyx_n_s_recv
+-#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce
+-#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython
+-#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex
+-#define __pyx_n_s_ref __pyx_mstate_global->__pyx_n_s_ref
+-#define __pyx_n_s_reg_methods __pyx_mstate_global->__pyx_n_s_reg_methods
+-#define __pyx_n_s_register_methods __pyx_mstate_global->__pyx_n_s_register_methods
+-#define __pyx_n_s_register_methods_locals_lambda __pyx_mstate_global->__pyx_n_s_register_methods_locals_lambda
+-#define __pyx_kp_s_s __pyx_mstate_global->__pyx_kp_s_s
+-#define __pyx_n_s_s2 __pyx_mstate_global->__pyx_n_s_s2
+-#define __pyx_n_s_s_2 __pyx_mstate_global->__pyx_n_s_s_2
+-#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self
+-#define __pyx_n_s_self_2 __pyx_mstate_global->__pyx_n_s_self_2
+-#define __pyx_kp_s_self__address_cannot_be_converte __pyx_mstate_global->__pyx_kp_s_self__address_cannot_be_converte
+-#define __pyx_kp_s_self__blob_cannot_be_converted_t __pyx_mstate_global->__pyx_kp_s_self__blob_cannot_be_converted_t
+-#define __pyx_kp_s_self__bundle_cannot_be_converted __pyx_mstate_global->__pyx_kp_s_self__bundle_cannot_be_converted
+-#define __pyx_kp_s_self__message_cannot_be_converte __pyx_mstate_global->__pyx_kp_s_self__message_cannot_be_converte
+-#define __pyx_kp_s_self__server_cannot_be_converted __pyx_mstate_global->__pyx_kp_s_self__server_cannot_be_converted
+-#define __pyx_kp_s_self__server_self__server_thread __pyx_mstate_global->__pyx_kp_s_self__server_self__server_thread
+-#define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send
+-#define __pyx_kp_s_sending_failed_s __pyx_mstate_global->__pyx_kp_s_sending_failed_s
+-#define __pyx_kp_s_server_error_d __pyx_mstate_global->__pyx_kp_s_server_error_d
+-#define __pyx_n_s_set_name __pyx_mstate_global->__pyx_n_s_set_name
+-#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate
+-#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython
+-#define __pyx_n_s_slots __pyx_mstate_global->__pyx_n_s_slots
+-#define __pyx_n_s_sort __pyx_mstate_global->__pyx_n_s_sort
+-#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec
+-#define __pyx_n_s_spec_2 __pyx_mstate_global->__pyx_n_s_spec_2
+-#define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start
+-#define __pyx_n_s_start_func __pyx_mstate_global->__pyx_n_s_start_func
+-#define __pyx_n_s_start_handler __pyx_mstate_global->__pyx_n_s_start_handler
+-#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state
+-#define __pyx_n_s_stop __pyx_mstate_global->__pyx_n_s_stop
+-#define __pyx_n_s_str __pyx_mstate_global->__pyx_n_s_str
+-#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource
+-#define __pyx_n_s_struct __pyx_mstate_global->__pyx_n_s_struct
+-#define __pyx_n_s_struct___init __pyx_mstate_global->__pyx_n_s_struct___init
+-#define __pyx_n_s_super __pyx_mstate_global->__pyx_n_s_super
+-#define __pyx_n_s_t __pyx_mstate_global->__pyx_n_s_t
+-#define __pyx_n_s_target __pyx_mstate_global->__pyx_n_s_target
+-#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test
+-#define __pyx_n_s_time __pyx_mstate_global->__pyx_n_s_time
+-#define __pyx_n_s_timeout __pyx_mstate_global->__pyx_n_s_timeout
+-#define __pyx_n_s_tmp __pyx_mstate_global->__pyx_n_s_tmp
+-#define __pyx_n_s_tt __pyx_mstate_global->__pyx_n_s_tt
+-#define __pyx_n_s_types __pyx_mstate_global->__pyx_n_s_types
+-#define __pyx_n_s_typespec __pyx_mstate_global->__pyx_n_s_typespec
+-#define __pyx_kp_s_typespec_must_be_a_string_or_Non __pyx_mstate_global->__pyx_kp_s_typespec_must_be_a_string_or_Non
+-#define __pyx_kp_s_unknown_OSC_data_type_c __pyx_mstate_global->__pyx_kp_s_unknown_OSC_data_type_c
+-#define __pyx_kp_s_unsupported_message_argument_typ __pyx_mstate_global->__pyx_kp_s_unsupported_message_argument_typ
+-#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update
+-#define __pyx_n_s_use_setstate __pyx_mstate_global->__pyx_n_s_use_setstate
+-#define __pyx_n_s_user_data __pyx_mstate_global->__pyx_n_s_user_data
+-#define __pyx_n_s_v __pyx_mstate_global->__pyx_n_s_v
+-#define __pyx_n_s_varargs __pyx_mstate_global->__pyx_n_s_varargs
+-#define __pyx_n_s_version __pyx_mstate_global->__pyx_n_s_version
+-#define __pyx_n_s_weakref __pyx_mstate_global->__pyx_n_s_weakref
+-#define __pyx_n_s_weakref_2 __pyx_mstate_global->__pyx_n_s_weakref_2
+-#define __pyx_n_s_weakref_method __pyx_mstate_global->__pyx_n_s_weakref_method
+-#define __pyx_n_s_weakref_method___call __pyx_mstate_global->__pyx_n_s_weakref_method___call
+-#define __pyx_n_s_weakref_method___init __pyx_mstate_global->__pyx_n_s_weakref_method___init
+-#define __pyx_n_s_weakref_method_func __pyx_mstate_global->__pyx_n_s_weakref_method_func
+-#define __pyx_n_s_where __pyx_mstate_global->__pyx_n_s_where
+-#define __pyx_n_s_x __pyx_mstate_global->__pyx_n_s_x
+-#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0
+-#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1
+-#define __pyx_int_50507834 __pyx_mstate_global->__pyx_int_50507834
+-#define __pyx_int_130844544 __pyx_mstate_global->__pyx_int_130844544
+-#define __pyx_int_194199092 __pyx_mstate_global->__pyx_int_194199092
+-#define __pyx_k__4 __pyx_mstate_global->__pyx_k__4
+-#define __pyx_k__5 __pyx_mstate_global->__pyx_k__5
+-#define __pyx_k__6 __pyx_mstate_global->__pyx_k__6
+-#define __pyx_tuple_ __pyx_mstate_global->__pyx_tuple_
+-#define __pyx_tuple__2 __pyx_mstate_global->__pyx_tuple__2
+-#define __pyx_tuple__3 __pyx_mstate_global->__pyx_tuple__3
+-#define __pyx_tuple__7 __pyx_mstate_global->__pyx_tuple__7
+-#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8
+-#define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9
+-#define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10
+-#define __pyx_tuple__13 __pyx_mstate_global->__pyx_tuple__13
+-#define __pyx_tuple__15 __pyx_mstate_global->__pyx_tuple__15
+-#define __pyx_tuple__16 __pyx_mstate_global->__pyx_tuple__16
+-#define __pyx_tuple__18 __pyx_mstate_global->__pyx_tuple__18
+-#define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20
+-#define __pyx_tuple__22 __pyx_mstate_global->__pyx_tuple__22
+-#define __pyx_tuple__24 __pyx_mstate_global->__pyx_tuple__24
+-#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26
+-#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28
+-#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30
+-#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32
+-#define __pyx_tuple__34 __pyx_mstate_global->__pyx_tuple__34
+-#define __pyx_tuple__36 __pyx_mstate_global->__pyx_tuple__36
+-#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38
+-#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40
+-#define __pyx_tuple__42 __pyx_mstate_global->__pyx_tuple__42
+-#define __pyx_tuple__47 __pyx_mstate_global->__pyx_tuple__47
+-#define __pyx_tuple__49 __pyx_mstate_global->__pyx_tuple__49
+-#define __pyx_tuple__51 __pyx_mstate_global->__pyx_tuple__51
+-#define __pyx_tuple__53 __pyx_mstate_global->__pyx_tuple__53
+-#define __pyx_tuple__58 __pyx_mstate_global->__pyx_tuple__58
+-#define __pyx_tuple__67 __pyx_mstate_global->__pyx_tuple__67
+-#define __pyx_tuple__78 __pyx_mstate_global->__pyx_tuple__78
+-#define __pyx_tuple__82 __pyx_mstate_global->__pyx_tuple__82
+-#define __pyx_tuple__86 __pyx_mstate_global->__pyx_tuple__86
+-#define __pyx_codeobj__14 __pyx_mstate_global->__pyx_codeobj__14
+-#define __pyx_codeobj__17 __pyx_mstate_global->__pyx_codeobj__17
+-#define __pyx_codeobj__19 __pyx_mstate_global->__pyx_codeobj__19
+-#define __pyx_codeobj__21 __pyx_mstate_global->__pyx_codeobj__21
+-#define __pyx_codeobj__23 __pyx_mstate_global->__pyx_codeobj__23
+-#define __pyx_codeobj__25 __pyx_mstate_global->__pyx_codeobj__25
+-#define __pyx_codeobj__27 __pyx_mstate_global->__pyx_codeobj__27
+-#define __pyx_codeobj__29 __pyx_mstate_global->__pyx_codeobj__29
+-#define __pyx_codeobj__31 __pyx_mstate_global->__pyx_codeobj__31
+-#define __pyx_codeobj__33 __pyx_mstate_global->__pyx_codeobj__33
+-#define __pyx_codeobj__35 __pyx_mstate_global->__pyx_codeobj__35
+-#define __pyx_codeobj__37 __pyx_mstate_global->__pyx_codeobj__37
+-#define __pyx_codeobj__39 __pyx_mstate_global->__pyx_codeobj__39
+-#define __pyx_codeobj__41 __pyx_mstate_global->__pyx_codeobj__41
+-#define __pyx_codeobj__43 __pyx_mstate_global->__pyx_codeobj__43
+-#define __pyx_codeobj__44 __pyx_mstate_global->__pyx_codeobj__44
+-#define __pyx_codeobj__45 __pyx_mstate_global->__pyx_codeobj__45
+-#define __pyx_codeobj__46 __pyx_mstate_global->__pyx_codeobj__46
+-#define __pyx_codeobj__48 __pyx_mstate_global->__pyx_codeobj__48
+-#define __pyx_codeobj__50 __pyx_mstate_global->__pyx_codeobj__50
+-#define __pyx_codeobj__52 __pyx_mstate_global->__pyx_codeobj__52
+-#define __pyx_codeobj__54 __pyx_mstate_global->__pyx_codeobj__54
+-#define __pyx_codeobj__55 __pyx_mstate_global->__pyx_codeobj__55
+-#define __pyx_codeobj__56 __pyx_mstate_global->__pyx_codeobj__56
+-#define __pyx_codeobj__57 __pyx_mstate_global->__pyx_codeobj__57
+-#define __pyx_codeobj__59 __pyx_mstate_global->__pyx_codeobj__59
+-#define __pyx_codeobj__60 __pyx_mstate_global->__pyx_codeobj__60
+-#define __pyx_codeobj__61 __pyx_mstate_global->__pyx_codeobj__61
+-#define __pyx_codeobj__62 __pyx_mstate_global->__pyx_codeobj__62
+-#define __pyx_codeobj__63 __pyx_mstate_global->__pyx_codeobj__63
+-#define __pyx_codeobj__64 __pyx_mstate_global->__pyx_codeobj__64
+-#define __pyx_codeobj__65 __pyx_mstate_global->__pyx_codeobj__65
+-#define __pyx_codeobj__66 __pyx_mstate_global->__pyx_codeobj__66
+-#define __pyx_codeobj__68 __pyx_mstate_global->__pyx_codeobj__68
+-#define __pyx_codeobj__69 __pyx_mstate_global->__pyx_codeobj__69
+-#define __pyx_codeobj__70 __pyx_mstate_global->__pyx_codeobj__70
+-#define __pyx_codeobj__71 __pyx_mstate_global->__pyx_codeobj__71
+-#define __pyx_codeobj__72 __pyx_mstate_global->__pyx_codeobj__72
+-#define __pyx_codeobj__73 __pyx_mstate_global->__pyx_codeobj__73
+-#define __pyx_codeobj__74 __pyx_mstate_global->__pyx_codeobj__74
+-#define __pyx_codeobj__75 __pyx_mstate_global->__pyx_codeobj__75
+-#define __pyx_codeobj__76 __pyx_mstate_global->__pyx_codeobj__76
+-#define __pyx_codeobj__77 __pyx_mstate_global->__pyx_codeobj__77
+-#define __pyx_codeobj__79 __pyx_mstate_global->__pyx_codeobj__79
+-#define __pyx_codeobj__80 __pyx_mstate_global->__pyx_codeobj__80
+-#define __pyx_codeobj__81 __pyx_mstate_global->__pyx_codeobj__81
+-#define __pyx_codeobj__83 __pyx_mstate_global->__pyx_codeobj__83
+-#define __pyx_codeobj__84 __pyx_mstate_global->__pyx_codeobj__84
+-#define __pyx_codeobj__85 __pyx_mstate_global->__pyx_codeobj__85
+-#define __pyx_codeobj__87 __pyx_mstate_global->__pyx_codeobj__87
+-/* #### Code section: module_code ### */
+-
+-/* "cpython/complex.pxd":19
+- * 
+- *         @property
+- *         cdef inline double real(self) noexcept:             # <<<<<<<<<<<<<<
+- *             return self.cval.real
+- * 
+- */
+-
+-static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self) {
+-  double __pyx_r;
+-
+-  /* "cpython/complex.pxd":20
+- *         @property
+- *         cdef inline double real(self) noexcept:
+- *             return self.cval.real             # <<<<<<<<<<<<<<
+- * 
+- *         @property
+- */
+-  __pyx_r = __pyx_v_self->cval.real;
+-  goto __pyx_L0;
+-
+-  /* "cpython/complex.pxd":19
+- * 
+- *         @property
+- *         cdef inline double real(self) noexcept:             # <<<<<<<<<<<<<<
+- *             return self.cval.real
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L0:;
+-  return __pyx_r;
+-}
+-
+-/* "cpython/complex.pxd":23
+- * 
+- *         @property
+- *         cdef inline double imag(self) noexcept:             # <<<<<<<<<<<<<<
+- *             return self.cval.imag
+- * 
+- */
+-
+-static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self) {
+-  double __pyx_r;
+-
+-  /* "cpython/complex.pxd":24
+- *         @property
+- *         cdef inline double imag(self) noexcept:
+- *             return self.cval.imag             # <<<<<<<<<<<<<<
+- * 
+- *     # PyTypeObject PyComplex_Type
+- */
+-  __pyx_r = __pyx_v_self->cval.imag;
+-  goto __pyx_L0;
+-
+-  /* "cpython/complex.pxd":23
+- * 
+- *         @property
+- *         cdef inline double imag(self) noexcept:             # <<<<<<<<<<<<<<
+- *             return self.cval.imag
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L0:;
+-  return __pyx_r;
+-}
+-
+-/* "cpython/contextvars.pxd":112
+- * 
+- * 
+- * cdef inline object get_value(var, default_value=None):             # <<<<<<<<<<<<<<
+- *     """Return a new reference to the value of the context variable,
+- *     or the default value of the context variable,
+- */
+-
+-static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value *__pyx_optional_args) {
+-  PyObject *__pyx_v_default_value = ((PyObject *)Py_None);
+-  PyObject *__pyx_v_value;
+-  PyObject *__pyx_v_pyvalue = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_value", 1);
+-  if (__pyx_optional_args) {
+-    if (__pyx_optional_args->__pyx_n > 0) {
+-      __pyx_v_default_value = __pyx_optional_args->default_value;
+-    }
+-  }
+-
+-  /* "cpython/contextvars.pxd":117
+- *     or None if no such value or default was found.
+- *     """
+- *     cdef PyObject *value = NULL             # <<<<<<<<<<<<<<
+- *     PyContextVar_Get(var, NULL, &value)
+- *     if value is NULL:
+- */
+-  __pyx_v_value = NULL;
+-
+-  /* "cpython/contextvars.pxd":118
+- *     """
+- *     cdef PyObject *value = NULL
+- *     PyContextVar_Get(var, NULL, &value)             # <<<<<<<<<<<<<<
+- *     if value is NULL:
+- *         # context variable does not have a default
+- */
+-  __pyx_t_1 = PyContextVar_Get(__pyx_v_var, NULL, (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 118, __pyx_L1_error)
+-
+-  /* "cpython/contextvars.pxd":119
+- *     cdef PyObject *value = NULL
+- *     PyContextVar_Get(var, NULL, &value)
+- *     if value is NULL:             # <<<<<<<<<<<<<<
+- *         # context variable does not have a default
+- *         pyvalue = default_value
+- */
+-  __pyx_t_2 = (__pyx_v_value == NULL);
+-  if (__pyx_t_2) {
+-
+-    /* "cpython/contextvars.pxd":121
+- *     if value is NULL:
+- *         # context variable does not have a default
+- *         pyvalue = default_value             # <<<<<<<<<<<<<<
+- *     else:
+- *         # value or default value of context variable
+- */
+-    __Pyx_INCREF(__pyx_v_default_value);
+-    __pyx_v_pyvalue = __pyx_v_default_value;
+-
+-    /* "cpython/contextvars.pxd":119
+- *     cdef PyObject *value = NULL
+- *     PyContextVar_Get(var, NULL, &value)
+- *     if value is NULL:             # <<<<<<<<<<<<<<
+- *         # context variable does not have a default
+- *         pyvalue = default_value
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "cpython/contextvars.pxd":124
+- *     else:
+- *         # value or default value of context variable
+- *         pyvalue = <object>value             # <<<<<<<<<<<<<<
+- *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
+- *     return pyvalue
+- */
+-  /*else*/ {
+-    __pyx_t_3 = ((PyObject *)__pyx_v_value);
+-    __Pyx_INCREF(__pyx_t_3);
+-    __pyx_v_pyvalue = __pyx_t_3;
+-    __pyx_t_3 = 0;
+-
+-    /* "cpython/contextvars.pxd":125
+- *         # value or default value of context variable
+- *         pyvalue = <object>value
+- *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'             # <<<<<<<<<<<<<<
+- *     return pyvalue
+- * 
+- */
+-    Py_XDECREF(__pyx_v_value);
+-  }
+-  __pyx_L3:;
+-
+-  /* "cpython/contextvars.pxd":126
+- *         pyvalue = <object>value
+- *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
+- *     return pyvalue             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __Pyx_INCREF(__pyx_v_pyvalue);
+-  __pyx_r = __pyx_v_pyvalue;
+-  goto __pyx_L0;
+-
+-  /* "cpython/contextvars.pxd":112
+- * 
+- * 
+- * cdef inline object get_value(var, default_value=None):             # <<<<<<<<<<<<<<
+- *     """Return a new reference to the value of the context variable,
+- *     or the default value of the context variable,
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("cpython.contextvars.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_pyvalue);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "cpython/contextvars.pxd":129
+- * 
+- * 
+- * cdef inline object get_value_no_default(var, default_value=None):             # <<<<<<<<<<<<<<
+- *     """Return a new reference to the value of the context variable,
+- *     or the provided default value if no such value was found.
+- */
+-
+-static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value_no_default(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default *__pyx_optional_args) {
+-  PyObject *__pyx_v_default_value = ((PyObject *)Py_None);
+-  PyObject *__pyx_v_value;
+-  PyObject *__pyx_v_pyvalue = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_value_no_default", 1);
+-  if (__pyx_optional_args) {
+-    if (__pyx_optional_args->__pyx_n > 0) {
+-      __pyx_v_default_value = __pyx_optional_args->default_value;
+-    }
+-  }
+-
+-  /* "cpython/contextvars.pxd":135
+- *     Ignores the default value of the context variable, if any.
+- *     """
+- *     cdef PyObject *value = NULL             # <<<<<<<<<<<<<<
+- *     PyContextVar_Get(var, <PyObject*>default_value, &value)
+- *     # value of context variable or 'default_value'
+- */
+-  __pyx_v_value = NULL;
+-
+-  /* "cpython/contextvars.pxd":136
+- *     """
+- *     cdef PyObject *value = NULL
+- *     PyContextVar_Get(var, <PyObject*>default_value, &value)             # <<<<<<<<<<<<<<
+- *     # value of context variable or 'default_value'
+- *     pyvalue = <object>value
+- */
+-  __pyx_t_1 = PyContextVar_Get(__pyx_v_var, ((PyObject *)__pyx_v_default_value), (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 136, __pyx_L1_error)
+-
+-  /* "cpython/contextvars.pxd":138
+- *     PyContextVar_Get(var, <PyObject*>default_value, &value)
+- *     # value of context variable or 'default_value'
+- *     pyvalue = <object>value             # <<<<<<<<<<<<<<
+- *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
+- *     return pyvalue
+- */
+-  __pyx_t_2 = ((PyObject *)__pyx_v_value);
+-  __Pyx_INCREF(__pyx_t_2);
+-  __pyx_v_pyvalue = __pyx_t_2;
+-  __pyx_t_2 = 0;
+-
+-  /* "cpython/contextvars.pxd":139
+- *     # value of context variable or 'default_value'
+- *     pyvalue = <object>value
+- *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'             # <<<<<<<<<<<<<<
+- *     return pyvalue
+- */
+-  Py_XDECREF(__pyx_v_value);
+-
+-  /* "cpython/contextvars.pxd":140
+- *     pyvalue = <object>value
+- *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
+- *     return pyvalue             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __Pyx_INCREF(__pyx_v_pyvalue);
+-  __pyx_r = __pyx_v_pyvalue;
+-  goto __pyx_L0;
+-
+-  /* "cpython/contextvars.pxd":129
+- * 
+- * 
+- * cdef inline object get_value_no_default(var, default_value=None):             # <<<<<<<<<<<<<<
+- *     """Return a new reference to the value of the context variable,
+- *     or the provided default value if no such value was found.
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("cpython.contextvars.get_value_no_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_pyvalue);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":34
+- * 
+- * 
+- * def _protostr_to_int(str proto):             # <<<<<<<<<<<<<<
+- *     if proto == 'UDP':
+- *         return LO_UDP
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_1_protostr_to_int(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo__protostr_to_int, "_protostr_to_int(str proto)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_1_protostr_to_int = {"_protostr_to_int", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_1_protostr_to_int, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo__protostr_to_int};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_1_protostr_to_int(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_proto = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("_protostr_to_int (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_proto,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_proto)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 34, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "_protostr_to_int") < 0)) __PYX_ERR(0, 34, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_proto = ((PyObject*)values[0]);
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("_protostr_to_int", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 34, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._protostr_to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_proto), (&PyString_Type), 1, "proto", 1))) __PYX_ERR(0, 34, __pyx_L1_error)
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo__protostr_to_int(__pyx_self, __pyx_v_proto);
+-
+-  /* function exit code */
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo__protostr_to_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_proto) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  PyObject *__pyx_t_2 = NULL;
+-  Py_ssize_t __pyx_t_3;
+-  Py_UCS4 __pyx_t_4;
+-  PyObject *__pyx_t_5 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("_protostr_to_int", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":35
+- * 
+- * def _protostr_to_int(str proto):
+- *     if proto == 'UDP':             # <<<<<<<<<<<<<<
+- *         return LO_UDP
+- *     elif proto == 'TCP':
+- */
+-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_proto, __pyx_n_s_UDP, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 35, __pyx_L1_error)
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":36
+- * def _protostr_to_int(str proto):
+- *     if proto == 'UDP':
+- *         return LO_UDP             # <<<<<<<<<<<<<<
+- *     elif proto == 'TCP':
+- *         return LO_TCP
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_2 = __Pyx_PyInt_From___pyx_anon_enum(LO_UDP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_r = __pyx_t_2;
+-    __pyx_t_2 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":35
+- * 
+- * def _protostr_to_int(str proto):
+- *     if proto == 'UDP':             # <<<<<<<<<<<<<<
+- *         return LO_UDP
+- *     elif proto == 'TCP':
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":37
+- *     if proto == 'UDP':
+- *         return LO_UDP
+- *     elif proto == 'TCP':             # <<<<<<<<<<<<<<
+- *         return LO_TCP
+- *     elif proto == 'UNIX':
+- */
+-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_proto, __pyx_n_s_TCP, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 37, __pyx_L1_error)
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":38
+- *         return LO_UDP
+- *     elif proto == 'TCP':
+- *         return LO_TCP             # <<<<<<<<<<<<<<
+- *     elif proto == 'UNIX':
+- *         return LO_UNIX
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_2 = __Pyx_PyInt_From___pyx_anon_enum(LO_TCP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_r = __pyx_t_2;
+-    __pyx_t_2 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":37
+- *     if proto == 'UDP':
+- *         return LO_UDP
+- *     elif proto == 'TCP':             # <<<<<<<<<<<<<<
+- *         return LO_TCP
+- *     elif proto == 'UNIX':
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":39
+- *     elif proto == 'TCP':
+- *         return LO_TCP
+- *     elif proto == 'UNIX':             # <<<<<<<<<<<<<<
+- *         return LO_UNIX
+- *     else:
+- */
+-  __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_proto, __pyx_n_s_UNIX, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 39, __pyx_L1_error)
+-  if (likely(__pyx_t_1)) {
+-
+-    /* "pyliblo3/_liblo.pyx":40
+- *         return LO_TCP
+- *     elif proto == 'UNIX':
+- *         return LO_UNIX             # <<<<<<<<<<<<<<
+- *     else:
+- *         raise ValueError(f"Proto {proto} not understood, expected one of 'UDP', 'TCP' or 'UNIX'")
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_2 = __Pyx_PyInt_From___pyx_anon_enum(LO_UNIX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_r = __pyx_t_2;
+-    __pyx_t_2 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":39
+- *     elif proto == 'TCP':
+- *         return LO_TCP
+- *     elif proto == 'UNIX':             # <<<<<<<<<<<<<<
+- *         return LO_UNIX
+- *     else:
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":42
+- *         return LO_UNIX
+- *     else:
+- *         raise ValueError(f"Proto {proto} not understood, expected one of 'UDP', 'TCP' or 'UNIX'")             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  /*else*/ {
+-    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_3 = 0;
+-    __pyx_t_4 = 127;
+-    __Pyx_INCREF(__pyx_kp_u_Proto);
+-    __pyx_t_3 += 6;
+-    __Pyx_GIVEREF(__pyx_kp_u_Proto);
+-    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_u_Proto);
+-    __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_v_proto, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_5);
+-    __pyx_t_4 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_4) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_4;
+-    __pyx_t_3 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
+-    __Pyx_GIVEREF(__pyx_t_5);
+-    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
+-    __pyx_t_5 = 0;
+-    __Pyx_INCREF(__pyx_kp_u_not_understood_expected_one_of);
+-    __pyx_t_3 += 55;
+-    __Pyx_GIVEREF(__pyx_kp_u_not_understood_expected_one_of);
+-    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_kp_u_not_understood_expected_one_of);
+-    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_2, 3, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 42, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_5);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+-    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __PYX_ERR(0, 42, __pyx_L1_error)
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":34
+- * 
+- * 
+- * def _protostr_to_int(str proto):             # <<<<<<<<<<<<<<
+- *     if proto == 'UDP':
+- *         return LO_UDP
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_AddTraceback("pyliblo3._liblo._protostr_to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":51
+- *     __slots__ = ('_func', 'obj')
+- * 
+- *     def __init__(self, f):             # <<<<<<<<<<<<<<
+- *         if _inspect.ismethod(f):
+- *             self._func = f.__func__
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_15_weakref_method___init__, "_weakref_method.__init__(self, f)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_15_weakref_method_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_15_weakref_method___init__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  PyObject *__pyx_v_f = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[2] = {0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_f,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_f)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 51, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 51, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 51, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 2)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-    }
+-    __pyx_v_self = values[0];
+-    __pyx_v_f = values[1];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 51, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._weakref_method.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_15_weakref_method___init__(__pyx_self, __pyx_v_self, __pyx_v_f);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_15_weakref_method___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_f) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_t_5;
+-  PyObject *__pyx_t_6 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":52
+- * 
+- *     def __init__(self, f):
+- *         if _inspect.ismethod(f):             # <<<<<<<<<<<<<<
+- *             self._func = f.__func__
+- *             self.obj = _weakref.ref(f.__self__)
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_inspect); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ismethod); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  __pyx_t_2 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_3))) {
+-    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
+-    if (likely(__pyx_t_2)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+-      __Pyx_INCREF(__pyx_t_2);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_3, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_f};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  }
+-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 52, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_5) {
+-
+-    /* "pyliblo3/_liblo.pyx":53
+- *     def __init__(self, f):
+- *         if _inspect.ismethod(f):
+- *             self._func = f.__func__             # <<<<<<<<<<<<<<
+- *             self.obj = _weakref.ref(f.__self__)
+- *         else:
+- */
+-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_func); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_func_2, __pyx_t_1) < 0) __PYX_ERR(0, 53, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":54
+- *         if _inspect.ismethod(f):
+- *             self._func = f.__func__
+- *             self.obj = _weakref.ref(f.__self__)             # <<<<<<<<<<<<<<
+- *         else:
+- *             self._func = f
+- */
+-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_weakref); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ref); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 54, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_self_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_6 = NULL;
+-    __pyx_t_4 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (unlikely(PyMethod_Check(__pyx_t_2))) {
+-      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
+-      if (likely(__pyx_t_6)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-        __Pyx_INCREF(__pyx_t_6);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_2, function);
+-        __pyx_t_4 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_3};
+-      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
+-      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 54, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    }
+-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_obj, __pyx_t_1) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":52
+- * 
+- *     def __init__(self, f):
+- *         if _inspect.ismethod(f):             # <<<<<<<<<<<<<<
+- *             self._func = f.__func__
+- *             self.obj = _weakref.ref(f.__self__)
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":56
+- *             self.obj = _weakref.ref(f.__self__)
+- *         else:
+- *             self._func = f             # <<<<<<<<<<<<<<
+- *             self.obj = None
+- * 
+- */
+-  /*else*/ {
+-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_func_2, __pyx_v_f) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
+-
+-    /* "pyliblo3/_liblo.pyx":57
+- *         else:
+- *             self._func = f
+- *             self.obj = None             # <<<<<<<<<<<<<<
+- * 
+- *     @property
+- */
+-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_obj, Py_None) < 0) __PYX_ERR(0, 57, __pyx_L1_error)
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":51
+- *     __slots__ = ('_func', 'obj')
+- * 
+- *     def __init__(self, f):             # <<<<<<<<<<<<<<
+- *         if _inspect.ismethod(f):
+- *             self._func = f.__func__
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_6);
+-  __Pyx_AddTraceback("pyliblo3._liblo._weakref_method.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":59
+- *             self.obj = None
+- * 
+- *     @property             # <<<<<<<<<<<<<<
+- *     def func(self):
+- *         if self.obj:
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_3func(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_15_weakref_method_2func, "_weakref_method.func(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_15_weakref_method_3func = {"func", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_3func, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_15_weakref_method_2func};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_3func(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("func (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 59, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "func") < 0)) __PYX_ERR(0, 59, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_self = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("func", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 59, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._weakref_method.func", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_15_weakref_method_2func(__pyx_self, __pyx_v_self);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_15_weakref_method_2func(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  PyObject *__pyx_t_5 = NULL;
+-  PyObject *__pyx_t_6 = NULL;
+-  int __pyx_t_7;
+-  PyObject *__pyx_t_8 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("func", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":61
+- *     @property
+- *     def func(self):
+- *         if self.obj:             # <<<<<<<<<<<<<<
+- *             return self._func.__get__(self.obj(), self.obj().__class__)
+- *         else:
+- */
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_obj); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 61, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":62
+- *     def func(self):
+- *         if self.obj:
+- *             return self._func.__get__(self.obj(), self.obj().__class__)             # <<<<<<<<<<<<<<
+- *         else:
+- *             return self._func
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_func_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_4);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_obj); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_5);
+-    __pyx_t_6 = NULL;
+-    __pyx_t_7 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_5))) {
+-      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
+-      if (likely(__pyx_t_6)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+-        __Pyx_INCREF(__pyx_t_6);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_5, function);
+-        __pyx_t_7 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
+-      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7);
+-      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+-      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 62, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+-    }
+-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_obj); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_6);
+-    __pyx_t_8 = NULL;
+-    __pyx_t_7 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_6))) {
+-      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
+-      if (likely(__pyx_t_8)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+-        __Pyx_INCREF(__pyx_t_8);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_6, function);
+-        __pyx_t_7 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_8, NULL};
+-      __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_7, 0+__pyx_t_7);
+-      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+-      if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 62, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_5);
+-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+-    }
+-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_class); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 62, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_6);
+-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+-    __pyx_t_5 = NULL;
+-    __pyx_t_7 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_4))) {
+-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+-      if (likely(__pyx_t_5)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-        __Pyx_INCREF(__pyx_t_5);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_4, function);
+-        __pyx_t_7 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[3] = {__pyx_t_5, __pyx_t_3, __pyx_t_6};
+-      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
+-      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+-      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    }
+-    __pyx_r = __pyx_t_1;
+-    __pyx_t_1 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":61
+- *     @property
+- *     def func(self):
+- *         if self.obj:             # <<<<<<<<<<<<<<
+- *             return self._func.__get__(self.obj(), self.obj().__class__)
+- *         else:
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":64
+- *             return self._func.__get__(self.obj(), self.obj().__class__)
+- *         else:
+- *             return self._func             # <<<<<<<<<<<<<<
+- * 
+- *     def __call__(self, *args, **kwargs):
+- */
+-  /*else*/ {
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_func_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_r = __pyx_t_1;
+-    __pyx_t_1 = 0;
+-    goto __pyx_L0;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":59
+- *             self.obj = None
+- * 
+- *     @property             # <<<<<<<<<<<<<<
+- *     def func(self):
+- *         if self.obj:
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_XDECREF(__pyx_t_6);
+-  __Pyx_XDECREF(__pyx_t_8);
+-  __Pyx_AddTraceback("pyliblo3._liblo._weakref_method.func", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":66
+- *             return self._func
+- * 
+- *     def __call__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
+- *         return self.func(*args, **kwargs)
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_5__call__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_15_weakref_method_4__call__, "_weakref_method.__call__(self, *args, **kwargs)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_15_weakref_method_5__call__ = {"__call__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_5__call__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_15_weakref_method_4__call__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_15_weakref_method_5__call__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  PyObject *__pyx_v_args = 0;
+-  PyObject *__pyx_v_kwargs = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
+-  __Pyx_GOTREF(__pyx_v_kwargs);
+-  __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 1, __pyx_nargs);
+-  if (unlikely(!__pyx_v_args)) {
+-    __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
+-    __Pyx_RefNannyFinishContext();
+-    return NULL;
+-  }
+-  __Pyx_GOTREF(__pyx_v_args);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        default:
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        const Py_ssize_t used_pos_args = (kwd_pos_args < 1) ? kwd_pos_args : 1;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values + 0, used_pos_args, "__call__") < 0)) __PYX_ERR(0, 66, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs < 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_self = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 1, __pyx_nargs); __PYX_ERR(0, 66, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
+-  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
+-  __Pyx_AddTraceback("pyliblo3._liblo._weakref_method.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_15_weakref_method_4__call__(__pyx_self, __pyx_v_self, __pyx_v_args, __pyx_v_kwargs);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_args);
+-  __Pyx_DECREF(__pyx_v_kwargs);
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_15_weakref_method_4__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__call__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":67
+- * 
+- *     def __call__(self, *args, **kwargs):
+- *         return self.func(*args, **kwargs)             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_func_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_v_args, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  __pyx_r = __pyx_t_3;
+-  __pyx_t_3 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":66
+- *             return self._func
+- * 
+- *     def __call__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
+- *         return self.func(*args, **kwargs)
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo._weakref_method.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":71
+- * 
+- * class struct:
+- *     def __init__(self, **kwargs):             # <<<<<<<<<<<<<<
+- *         for k, v in kwargs.items():
+- *             setattr(self, k, v)
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6struct_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6struct___init__, "struct.__init__(self, **kwargs)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6struct_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6struct_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6struct___init__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6struct_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  PyObject *__pyx_v_kwargs = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  __pyx_v_kwargs = PyDict_New(); if (unlikely(!__pyx_v_kwargs)) return NULL;
+-  __Pyx_GOTREF(__pyx_v_kwargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 71, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_kwargs, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 71, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_self = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 71, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
+-  __Pyx_AddTraceback("pyliblo3._liblo.struct.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6struct___init__(__pyx_self, __pyx_v_self, __pyx_v_kwargs);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_kwargs);
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6struct___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_kwargs) {
+-  PyObject *__pyx_v_k = NULL;
+-  PyObject *__pyx_v_v = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  Py_ssize_t __pyx_t_2;
+-  Py_ssize_t __pyx_t_3;
+-  int __pyx_t_4;
+-  PyObject *__pyx_t_5 = NULL;
+-  PyObject *__pyx_t_6 = NULL;
+-  int __pyx_t_7;
+-  int __pyx_t_8;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":72
+- * class struct:
+- *     def __init__(self, **kwargs):
+- *         for k, v in kwargs.items():             # <<<<<<<<<<<<<<
+- *             setattr(self, k, v)
+- * 
+- */
+-  __pyx_t_2 = 0;
+-  __pyx_t_5 = __Pyx_dict_iterator(__pyx_v_kwargs, 1, __pyx_n_s_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 72, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_5);
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __pyx_t_1 = __pyx_t_5;
+-  __pyx_t_5 = 0;
+-  while (1) {
+-    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
+-    if (unlikely(__pyx_t_7 == 0)) break;
+-    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 72, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_5);
+-    __Pyx_GOTREF(__pyx_t_6);
+-    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_5);
+-    __pyx_t_5 = 0;
+-    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_6);
+-    __pyx_t_6 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":73
+- *     def __init__(self, **kwargs):
+- *         for k, v in kwargs.items():
+- *             setattr(self, k, v)             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-    __pyx_t_8 = PyObject_SetAttr(__pyx_v_self, __pyx_v_k, __pyx_v_v); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 73, __pyx_L1_error)
+-  }
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":71
+- * 
+- * class struct:
+- *     def __init__(self, **kwargs):             # <<<<<<<<<<<<<<
+- *         for k, v in kwargs.items():
+- *             setattr(self, k, v)
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_XDECREF(__pyx_t_6);
+-  __Pyx_AddTraceback("pyliblo3._liblo.struct.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_k);
+-  __Pyx_XDECREF(__pyx_v_v);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":89
+- *     cdef int has_varargs
+- * 
+- *     def __init__(self, func, user_data):             # <<<<<<<<<<<<<<
+- *         self.func = _weakref_method(func)
+- *         self.user_data = user_data,
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_8Callback_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_8Callback_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_func = 0;
+-  PyObject *__pyx_v_user_data = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[2] = {0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_func_3,&__pyx_n_s_user_data,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_func_3)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_data)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_VARARGS(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 89, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 89, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 2)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-      values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-    }
+-    __pyx_v_func = values[0];
+-    __pyx_v_user_data = values[1];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 89, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Callback.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return -1;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_8Callback___init__(((struct __pyx_obj_8pyliblo3_6_liblo_Callback *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_8Callback___init__(struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
+-  PyObject *__pyx_v_spec = NULL;
+-  PyObject *__pyx_v_numargs = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  Py_ssize_t __pyx_t_5;
+-  int __pyx_t_6;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":90
+- * 
+- *     def __init__(self, func, user_data):
+- *         self.func = _weakref_method(func)             # <<<<<<<<<<<<<<
+- *         self.user_data = user_data,
+- *         spec = _inspect.getfullargspec(func)
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_weakref_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 90, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_func};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 90, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  __Pyx_GOTREF(__pyx_v_self->func);
+-  __Pyx_DECREF(__pyx_v_self->func);
+-  __pyx_v_self->func = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":91
+- *     def __init__(self, func, user_data):
+- *         self.func = _weakref_method(func)
+- *         self.user_data = user_data,             # <<<<<<<<<<<<<<
+- *         spec = _inspect.getfullargspec(func)
+- *         numargs = len(spec.args)
+- */
+-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_INCREF(__pyx_v_user_data);
+-  __Pyx_GIVEREF(__pyx_v_user_data);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_user_data)) __PYX_ERR(0, 91, __pyx_L1_error);
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  __Pyx_GOTREF(__pyx_v_self->user_data);
+-  __Pyx_DECREF(__pyx_v_self->user_data);
+-  __pyx_v_self->user_data = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":92
+- *         self.func = _weakref_method(func)
+- *         self.user_data = user_data,
+- *         spec = _inspect.getfullargspec(func)             # <<<<<<<<<<<<<<
+- *         numargs = len(spec.args)
+- *         if _inspect.ismethod(func):
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_inspect); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 92, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_getfullargspec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 92, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  __pyx_t_2 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_3))) {
+-    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
+-    if (likely(__pyx_t_2)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+-      __Pyx_INCREF(__pyx_t_2);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_3, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_func};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 92, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  }
+-  __pyx_v_spec = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":93
+- *         self.user_data = user_data,
+- *         spec = _inspect.getfullargspec(func)
+- *         numargs = len(spec.args)             # <<<<<<<<<<<<<<
+- *         if _inspect.ismethod(func):
+- *             numargs -= 1
+- */
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_5 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 93, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_v_numargs = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":94
+- *         spec = _inspect.getfullargspec(func)
+- *         numargs = len(spec.args)
+- *         if _inspect.ismethod(func):             # <<<<<<<<<<<<<<
+- *             numargs -= 1
+- *         self.numargs = numargs
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_inspect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 94, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_ismethod); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 94, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_func};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 94, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_6) {
+-
+-    /* "pyliblo3/_liblo.pyx":95
+- *         numargs = len(spec.args)
+- *         if _inspect.ismethod(func):
+- *             numargs -= 1             # <<<<<<<<<<<<<<
+- *         self.numargs = numargs
+- *         self.has_varargs = 1 if spec.varargs is not None else 0
+- */
+-    __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_v_numargs, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 95, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF_SET(__pyx_v_numargs, __pyx_t_1);
+-    __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":94
+- *         spec = _inspect.getfullargspec(func)
+- *         numargs = len(spec.args)
+- *         if _inspect.ismethod(func):             # <<<<<<<<<<<<<<
+- *             numargs -= 1
+- *         self.numargs = numargs
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":96
+- *         if _inspect.ismethod(func):
+- *             numargs -= 1
+- *         self.numargs = numargs             # <<<<<<<<<<<<<<
+- *         self.has_varargs = 1 if spec.varargs is not None else 0
+- * 
+- */
+-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_numargs); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L1_error)
+-  __pyx_v_self->numargs = __pyx_t_4;
+-
+-  /* "pyliblo3/_liblo.pyx":97
+- *             numargs -= 1
+- *         self.numargs = numargs
+- *         self.has_varargs = 1 if spec.varargs is not None else 0             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_spec, __pyx_n_s_varargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 97, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_6 = (__pyx_t_1 != Py_None);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_6) {
+-    __pyx_t_4 = 1;
+-  } else {
+-    __pyx_t_4 = 0;
+-  }
+-  __pyx_v_self->has_varargs = __pyx_t_4;
+-
+-  /* "pyliblo3/_liblo.pyx":89
+- *     cdef int has_varargs
+- * 
+- *     def __init__(self, func, user_data):             # <<<<<<<<<<<<<<
+- *         self.func = _weakref_method(func)
+- *         self.user_data = user_data,
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Callback.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_spec);
+-  __Pyx_XDECREF(__pyx_v_numargs);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     cdef tuple state
+- *     cdef object _dict
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_8Callback_3__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_8Callback_2__reduce_cython__, "Callback.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_8Callback_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_8Callback_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_8Callback_2__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_8Callback_3__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_8Callback_2__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Callback *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_8Callback_2__reduce_cython__(struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_self) {
+-  PyObject *__pyx_v_state = 0;
+-  PyObject *__pyx_v__dict = 0;
+-  int __pyx_v_use_setstate;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_t_5;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":5
+- *     cdef object _dict
+- *     cdef bint use_setstate
+- *     state = (self.func, self.has_varargs, self.numargs, self.user_data)             # <<<<<<<<<<<<<<
+- *     _dict = getattr(self, '__dict__', None)
+- *     if _dict is not None:
+- */
+-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->has_varargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->numargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_INCREF(__pyx_v_self->func);
+-  __Pyx_GIVEREF(__pyx_v_self->func);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self->func)) __PYX_ERR(2, 5, __pyx_L1_error);
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error);
+-  __Pyx_GIVEREF(__pyx_t_2);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error);
+-  __Pyx_INCREF(__pyx_v_self->user_data);
+-  __Pyx_GIVEREF(__pyx_v_self->user_data);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_self->user_data)) __PYX_ERR(2, 5, __pyx_L1_error);
+-  __pyx_t_1 = 0;
+-  __pyx_t_2 = 0;
+-  __pyx_v_state = ((PyObject*)__pyx_t_3);
+-  __pyx_t_3 = 0;
+-
+-  /* "(tree fragment)":6
+- *     cdef bint use_setstate
+- *     state = (self.func, self.has_varargs, self.numargs, self.user_data)
+- *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
+- *     if _dict is not None:
+- *         state += (_dict,)
+- */
+-  __pyx_t_3 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_v__dict = __pyx_t_3;
+-  __pyx_t_3 = 0;
+-
+-  /* "(tree fragment)":7
+- *     state = (self.func, self.has_varargs, self.numargs, self.user_data)
+- *     _dict = getattr(self, '__dict__', None)
+- *     if _dict is not None:             # <<<<<<<<<<<<<<
+- *         state += (_dict,)
+- *         use_setstate = True
+- */
+-  __pyx_t_4 = (__pyx_v__dict != Py_None);
+-  if (__pyx_t_4) {
+-
+-    /* "(tree fragment)":8
+- *     _dict = getattr(self, '__dict__', None)
+- *     if _dict is not None:
+- *         state += (_dict,)             # <<<<<<<<<<<<<<
+- *         use_setstate = True
+- *     else:
+- */
+-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_INCREF(__pyx_v__dict);
+-    __Pyx_GIVEREF(__pyx_v__dict);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict)) __PYX_ERR(2, 8, __pyx_L1_error);
+-    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 8, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_2));
+-    __pyx_t_2 = 0;
+-
+-    /* "(tree fragment)":9
+- *     if _dict is not None:
+- *         state += (_dict,)
+- *         use_setstate = True             # <<<<<<<<<<<<<<
+- *     else:
+- *         use_setstate = self.func is not None or self.user_data is not None
+- */
+-    __pyx_v_use_setstate = 1;
+-
+-    /* "(tree fragment)":7
+- *     state = (self.func, self.has_varargs, self.numargs, self.user_data)
+- *     _dict = getattr(self, '__dict__', None)
+- *     if _dict is not None:             # <<<<<<<<<<<<<<
+- *         state += (_dict,)
+- *         use_setstate = True
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "(tree fragment)":11
+- *         use_setstate = True
+- *     else:
+- *         use_setstate = self.func is not None or self.user_data is not None             # <<<<<<<<<<<<<<
+- *     if use_setstate:
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, None), state
+- */
+-  /*else*/ {
+-    __pyx_t_5 = (__pyx_v_self->func != Py_None);
+-    if (!__pyx_t_5) {
+-    } else {
+-      __pyx_t_4 = __pyx_t_5;
+-      goto __pyx_L4_bool_binop_done;
+-    }
+-    __pyx_t_5 = (__pyx_v_self->user_data != Py_None);
+-    __pyx_t_4 = __pyx_t_5;
+-    __pyx_L4_bool_binop_done:;
+-    __pyx_v_use_setstate = __pyx_t_4;
+-  }
+-  __pyx_L3:;
+-
+-  /* "(tree fragment)":12
+- *     else:
+- *         use_setstate = self.func is not None or self.user_data is not None
+- *     if use_setstate:             # <<<<<<<<<<<<<<
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, None), state
+- *     else:
+- */
+-  if (__pyx_v_use_setstate) {
+-
+-    /* "(tree fragment)":13
+- *         use_setstate = self.func is not None or self.user_data is not None
+- *     if use_setstate:
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, None), state             # <<<<<<<<<<<<<<
+- *     else:
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, state)
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle_Callback); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+-    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 13, __pyx_L1_error);
+-    __Pyx_INCREF(__pyx_int_194199092);
+-    __Pyx_GIVEREF(__pyx_int_194199092);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_194199092)) __PYX_ERR(2, 13, __pyx_L1_error);
+-    __Pyx_INCREF(Py_None);
+-    __Pyx_GIVEREF(Py_None);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None)) __PYX_ERR(2, 13, __pyx_L1_error);
+-    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 13, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_GIVEREF(__pyx_t_2);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error);
+-    __Pyx_GIVEREF(__pyx_t_3);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error);
+-    __Pyx_INCREF(__pyx_v_state);
+-    __Pyx_GIVEREF(__pyx_v_state);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(2, 13, __pyx_L1_error);
+-    __pyx_t_2 = 0;
+-    __pyx_t_3 = 0;
+-    __pyx_r = __pyx_t_1;
+-    __pyx_t_1 = 0;
+-    goto __pyx_L0;
+-
+-    /* "(tree fragment)":12
+- *     else:
+- *         use_setstate = self.func is not None or self.user_data is not None
+- *     if use_setstate:             # <<<<<<<<<<<<<<
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, None), state
+- *     else:
+- */
+-  }
+-
+-  /* "(tree fragment)":15
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, None), state
+- *     else:
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, state)             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     __pyx_unpickle_Callback__set_state(self, __pyx_state)
+- */
+-  /*else*/ {
+-    __Pyx_XDECREF(__pyx_r);
+-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_Callback); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+-    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(2, 15, __pyx_L1_error);
+-    __Pyx_INCREF(__pyx_int_194199092);
+-    __Pyx_GIVEREF(__pyx_int_194199092);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_194199092)) __PYX_ERR(2, 15, __pyx_L1_error);
+-    __Pyx_INCREF(__pyx_v_state);
+-    __Pyx_GIVEREF(__pyx_v_state);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state)) __PYX_ERR(2, 15, __pyx_L1_error);
+-    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_GIVEREF(__pyx_t_1);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1)) __PYX_ERR(2, 15, __pyx_L1_error);
+-    __Pyx_GIVEREF(__pyx_t_3);
+-    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error);
+-    __pyx_t_1 = 0;
+-    __pyx_t_3 = 0;
+-    __pyx_r = __pyx_t_2;
+-    __pyx_t_2 = 0;
+-    goto __pyx_L0;
+-  }
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     cdef tuple state
+- *     cdef object _dict
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Callback.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_state);
+-  __Pyx_XDECREF(__pyx_v__dict);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":16
+- *     else:
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, state)
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     __pyx_unpickle_Callback__set_state(self, __pyx_state)
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_8Callback_5__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_8Callback_4__setstate_cython__, "Callback.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_8Callback_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_8Callback_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_8Callback_4__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_8Callback_5__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 16, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 16, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 16, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Callback.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_8Callback_4__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Callback *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_8Callback_4__setstate_cython__(struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":17
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, state)
+- * def __setstate_cython__(self, __pyx_state):
+- *     __pyx_unpickle_Callback__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
+- */
+-  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 17, __pyx_L1_error)
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo___pyx_unpickle_Callback__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "(tree fragment)":16
+- *     else:
+- *         return __pyx_unpickle_Callback, (type(self), 0xb933e34, state)
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     __pyx_unpickle_Callback__set_state(self, __pyx_state)
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Callback.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":100
+- * 
+- * 
+- * cdef inline str _decode(s):             # <<<<<<<<<<<<<<
+- *     # convert to standard string type, depending on python version
+- *     if PY_VERSION_HEX >= 0x03000000 and isinstance(s, bytes):
+- */
+-
+-static CYTHON_INLINE PyObject *__pyx_f_8pyliblo3_6_liblo__decode(PyObject *__pyx_v_s) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  PyObject *__pyx_t_5 = NULL;
+-  int __pyx_t_6;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("_decode", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":102
+- * cdef inline str _decode(s):
+- *     # convert to standard string type, depending on python version
+- *     if PY_VERSION_HEX >= 0x03000000 and isinstance(s, bytes):             # <<<<<<<<<<<<<<
+- *         return s.decode()
+- *     else:
+- */
+-  __pyx_t_2 = (PY_VERSION_HEX >= 0x03000000);
+-  if (__pyx_t_2) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_2;
+-    goto __pyx_L4_bool_binop_done;
+-  }
+-  __pyx_t_2 = PyBytes_Check(__pyx_v_s); 
+-  __pyx_t_1 = __pyx_t_2;
+-  __pyx_L4_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":103
+- *     # convert to standard string type, depending on python version
+- *     if PY_VERSION_HEX >= 0x03000000 and isinstance(s, bytes):
+- *         return s.decode()             # <<<<<<<<<<<<<<
+- *     else:
+- *         return s
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 103, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_4);
+-    __pyx_t_5 = NULL;
+-    __pyx_t_6 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_4))) {
+-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+-      if (likely(__pyx_t_5)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-        __Pyx_INCREF(__pyx_t_5);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_4, function);
+-        __pyx_t_6 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
+-      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
+-      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    }
+-    if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_3))) __PYX_ERR(0, 103, __pyx_L1_error)
+-    __pyx_r = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":102
+- * cdef inline str _decode(s):
+- *     # convert to standard string type, depending on python version
+- *     if PY_VERSION_HEX >= 0x03000000 and isinstance(s, bytes):             # <<<<<<<<<<<<<<
+- *         return s.decode()
+- *     else:
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":105
+- *         return s.decode()
+- *     else:
+- *         return s             # <<<<<<<<<<<<<<
+- * 
+- * cdef bytes _encode(s):
+- */
+-  /*else*/ {
+-    __Pyx_XDECREF(__pyx_r);
+-    if (!(likely(PyString_CheckExact(__pyx_v_s))||((__pyx_v_s) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_v_s))) __PYX_ERR(0, 105, __pyx_L1_error)
+-    __Pyx_INCREF(__pyx_v_s);
+-    __pyx_r = ((PyObject*)__pyx_v_s);
+-    goto __pyx_L0;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":100
+- * 
+- * 
+- * cdef inline str _decode(s):             # <<<<<<<<<<<<<<
+- *     # convert to standard string type, depending on python version
+- *     if PY_VERSION_HEX >= 0x03000000 and isinstance(s, bytes):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_AddTraceback("pyliblo3._liblo._decode", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":107
+- *         return s
+- * 
+- * cdef bytes _encode(s):             # <<<<<<<<<<<<<<
+- *     # convert unicode to bytestring
+- *     if isinstance(s, unicode):
+- */
+-
+-static PyObject *__pyx_f_8pyliblo3_6_liblo__encode(PyObject *__pyx_v_s) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_t_5;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("_encode", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":109
+- * cdef bytes _encode(s):
+- *     # convert unicode to bytestring
+- *     if isinstance(s, unicode):             # <<<<<<<<<<<<<<
+- *         return s.encode()
+- *     else:
+- */
+-  __pyx_t_1 = PyUnicode_Check(__pyx_v_s); 
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":110
+- *     # convert unicode to bytestring
+- *     if isinstance(s, unicode):
+- *         return s.encode()             # <<<<<<<<<<<<<<
+- *     else:
+- *         return s
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 110, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_4 = NULL;
+-    __pyx_t_5 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_3))) {
+-      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+-      if (likely(__pyx_t_4)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+-        __Pyx_INCREF(__pyx_t_4);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_3, function);
+-        __pyx_t_5 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
+-      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
+-      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 110, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_2);
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    }
+-    if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 110, __pyx_L1_error)
+-    __pyx_r = ((PyObject*)__pyx_t_2);
+-    __pyx_t_2 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":109
+- * cdef bytes _encode(s):
+- *     # convert unicode to bytestring
+- *     if isinstance(s, unicode):             # <<<<<<<<<<<<<<
+- *         return s.encode()
+- *     else:
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":112
+- *         return s.encode()
+- *     else:
+- *         return s             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  /*else*/ {
+-    __Pyx_XDECREF(__pyx_r);
+-    if (!(likely(PyBytes_CheckExact(__pyx_v_s))||((__pyx_v_s) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_v_s))) __PYX_ERR(0, 112, __pyx_L1_error)
+-    __Pyx_INCREF(__pyx_v_s);
+-    __pyx_r = ((PyObject*)__pyx_v_s);
+-    goto __pyx_L0;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":107
+- *         return s
+- * 
+- * cdef bytes _encode(s):             # <<<<<<<<<<<<<<
+- *     # convert unicode to bytestring
+- *     if isinstance(s, unicode):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_AddTraceback("pyliblo3._liblo._encode", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":132
+- * ################################################################################
+- * 
+- * cdef lo_timetag _double_to_timetag(double f):             # <<<<<<<<<<<<<<
+- *     cdef lo_timetag tt
+- *     cdef double intr, frac
+- */
+-
+-static lo_timetag __pyx_f_8pyliblo3_6_liblo__double_to_timetag(double __pyx_v_f) {
+-  lo_timetag __pyx_v_tt;
+-  double __pyx_v_intr;
+-  double __pyx_v_frac;
+-  lo_timetag __pyx_r;
+-
+-  /* "pyliblo3/_liblo.pyx":135
+- *     cdef lo_timetag tt
+- *     cdef double intr, frac
+- *     frac = modf(f, &intr)             # <<<<<<<<<<<<<<
+- *     tt.sec = <uint32_t>intr
+- *     tt.frac = <uint32_t>(frac * 4294967296.0)
+- */
+-  __pyx_v_frac = modf(__pyx_v_f, (&__pyx_v_intr));
+-
+-  /* "pyliblo3/_liblo.pyx":136
+- *     cdef double intr, frac
+- *     frac = modf(f, &intr)
+- *     tt.sec = <uint32_t>intr             # <<<<<<<<<<<<<<
+- *     tt.frac = <uint32_t>(frac * 4294967296.0)
+- *     return tt
+- */
+-  __pyx_v_tt.sec = ((uint32_t)__pyx_v_intr);
+-
+-  /* "pyliblo3/_liblo.pyx":137
+- *     frac = modf(f, &intr)
+- *     tt.sec = <uint32_t>intr
+- *     tt.frac = <uint32_t>(frac * 4294967296.0)             # <<<<<<<<<<<<<<
+- *     return tt
+- * 
+- */
+-  __pyx_v_tt.frac = ((uint32_t)(__pyx_v_frac * 4294967296.0));
+-
+-  /* "pyliblo3/_liblo.pyx":138
+- *     tt.sec = <uint32_t>intr
+- *     tt.frac = <uint32_t>(frac * 4294967296.0)
+- *     return tt             # <<<<<<<<<<<<<<
+- * 
+- * cdef double _timetag_to_double(lo_timetag tt):
+- */
+-  __pyx_r = __pyx_v_tt;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":132
+- * ################################################################################
+- * 
+- * cdef lo_timetag _double_to_timetag(double f):             # <<<<<<<<<<<<<<
+- *     cdef lo_timetag tt
+- *     cdef double intr, frac
+- */
+-
+-  /* function exit code */
+-  __pyx_L0:;
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":140
+- *     return tt
+- * 
+- * cdef double _timetag_to_double(lo_timetag tt):             # <<<<<<<<<<<<<<
+- *     return <double>tt.sec + (<double>(tt.frac) / 4294967296.0)
+- * 
+- */
+-
+-static double __pyx_f_8pyliblo3_6_liblo__timetag_to_double(lo_timetag __pyx_v_tt) {
+-  double __pyx_r;
+-
+-  /* "pyliblo3/_liblo.pyx":141
+- * 
+- * cdef double _timetag_to_double(lo_timetag tt):
+- *     return <double>tt.sec + (<double>(tt.frac) / 4294967296.0)             # <<<<<<<<<<<<<<
+- * 
+- * def time():
+- */
+-  __pyx_r = (((double)__pyx_v_tt.sec) + (((double)__pyx_v_tt.frac) / 4294967296.0));
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":140
+- *     return tt
+- * 
+- * cdef double _timetag_to_double(lo_timetag tt):             # <<<<<<<<<<<<<<
+- *     return <double>tt.sec + (<double>(tt.frac) / 4294967296.0)
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L0:;
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":143
+- *     return <double>tt.sec + (<double>(tt.frac) / 4294967296.0)
+- * 
+- * def time():             # <<<<<<<<<<<<<<
+- *     """
+- *     Return the current time as a floating point number (seconds since January 1, 1900).
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_3time(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_2time, "time()\n\n    Return the current time as a floating point number (seconds since January 1, 1900).\n\n    Returns:\n        (float) The liblo timetag as a float, representing seconds since 1900\n    ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_3time = {"time", (PyCFunction)__pyx_pw_8pyliblo3_6_liblo_3time, METH_NOARGS, __pyx_doc_8pyliblo3_6_liblo_2time};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_3time(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("time (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_2time(__pyx_self);
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_2time(CYTHON_UNUSED PyObject *__pyx_self) {
+-  lo_timetag __pyx_v_tt;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  double __pyx_t_1;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("time", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":151
+- *     """
+- *     cdef lo_timetag tt
+- *     lo_timetag_now(&tt)             # <<<<<<<<<<<<<<
+- *     return _timetag_to_double(tt)
+- * 
+- */
+-  lo_timetag_now((&__pyx_v_tt));
+-
+-  /* "pyliblo3/_liblo.pyx":152
+- *     cdef lo_timetag tt
+- *     lo_timetag_now(&tt)
+- *     return _timetag_to_double(tt)             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__timetag_to_double(__pyx_v_tt); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 152, __pyx_L1_error)
+-  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_r = __pyx_t_2;
+-  __pyx_t_2 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":143
+- *     return <double>tt.sec + (<double>(tt.frac) / 4294967296.0)
+- * 
+- * def time():             # <<<<<<<<<<<<<<
+- *     """
+- *     Return the current time as a floating point number (seconds since January 1, 1900).
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo.time", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":159
+- * ################################################################################
+- * 
+- * cdef _send(target, _ServerBase src, args):             # <<<<<<<<<<<<<<
+- *     cdef lo_server from_server
+- *     cdef Address target_address
+- */
+-
+-static PyObject *__pyx_f_8pyliblo3_6_liblo__send(PyObject *__pyx_v_target, struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_src, PyObject *__pyx_v_args) {
+-  lo_server __pyx_v_from_server;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_target_address = 0;
+-  int __pyx_v_r;
+-  PyObject *__pyx_v_packets = NULL;
+-  PyObject *__pyx_v_p = NULL;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_message = NULL;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_bundle = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  lo_server __pyx_t_4;
+-  int __pyx_t_5;
+-  Py_ssize_t __pyx_t_6;
+-  PyObject *(*__pyx_t_7)(PyObject *);
+-  char *__pyx_t_8;
+-  PyObject *__pyx_t_9 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("_send", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":165
+- * 
+- *     # convert target to Address object, if necessary
+- *     if isinstance(target, Address):             # <<<<<<<<<<<<<<
+- *         target_address = target
+- *     elif isinstance(target, tuple):
+- */
+-  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_target, __pyx_ptype_8pyliblo3_6_liblo_Address); 
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":166
+- *     # convert target to Address object, if necessary
+- *     if isinstance(target, Address):
+- *         target_address = target             # <<<<<<<<<<<<<<
+- *     elif isinstance(target, tuple):
+- *         # unpack tuple
+- */
+-    if (!(likely(((__pyx_v_target) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_target, __pyx_ptype_8pyliblo3_6_liblo_Address))))) __PYX_ERR(0, 166, __pyx_L1_error)
+-    __pyx_t_2 = __pyx_v_target;
+-    __Pyx_INCREF(__pyx_t_2);
+-    __pyx_v_target_address = ((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_t_2);
+-    __pyx_t_2 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":165
+- * 
+- *     # convert target to Address object, if necessary
+- *     if isinstance(target, Address):             # <<<<<<<<<<<<<<
+- *         target_address = target
+- *     elif isinstance(target, tuple):
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":167
+- *     if isinstance(target, Address):
+- *         target_address = target
+- *     elif isinstance(target, tuple):             # <<<<<<<<<<<<<<
+- *         # unpack tuple
+- *         target_address = Address(*target)
+- */
+-  __pyx_t_1 = PyTuple_Check(__pyx_v_target); 
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":169
+- *     elif isinstance(target, tuple):
+- *         # unpack tuple
+- *         target_address = Address(*target)             # <<<<<<<<<<<<<<
+- *     else:
+- *         target_address = Address(target)
+- */
+-    __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_v_target); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo_Address), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 169, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __pyx_v_target_address = ((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":167
+- *     if isinstance(target, Address):
+- *         target_address = target
+- *     elif isinstance(target, tuple):             # <<<<<<<<<<<<<<
+- *         # unpack tuple
+- *         target_address = Address(*target)
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":171
+- *         target_address = Address(*target)
+- *     else:
+- *         target_address = Address(target)             # <<<<<<<<<<<<<<
+- * 
+- *     # 'from' parameter is NULL if no server was specified
+- */
+-  /*else*/ {
+-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo_Address), __pyx_v_target); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 171, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_v_target_address = ((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":174
+- * 
+- *     # 'from' parameter is NULL if no server was specified
+- *     from_server = src._server if src else NULL             # <<<<<<<<<<<<<<
+- * 
+- *     if isinstance(args[0], (Message, Bundle)):
+- */
+-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_src)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 174, __pyx_L1_error)
+-  if (__pyx_t_1) {
+-    __pyx_t_4 = __pyx_v_src->_server;
+-  } else {
+-    __pyx_t_4 = NULL;
+-  }
+-  __pyx_v_from_server = __pyx_t_4;
+-
+-  /* "pyliblo3/_liblo.pyx":176
+- *     from_server = src._server if src else NULL
+- * 
+- *     if isinstance(args[0], (Message, Bundle)):             # <<<<<<<<<<<<<<
+- *         # args is already a list of Messages/Bundles
+- *         packets = args
+- */
+-  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_5 = __Pyx_TypeCheck(__pyx_t_3, __pyx_ptype_8pyliblo3_6_liblo_Message); 
+-  if (!__pyx_t_5) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_5;
+-    goto __pyx_L5_bool_binop_done;
+-  }
+-  __pyx_t_5 = __Pyx_TypeCheck(__pyx_t_3, __pyx_ptype_8pyliblo3_6_liblo_Bundle); 
+-  __pyx_t_1 = __pyx_t_5;
+-  __pyx_L5_bool_binop_done:;
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":178
+- *     if isinstance(args[0], (Message, Bundle)):
+- *         # args is already a list of Messages/Bundles
+- *         packets = args             # <<<<<<<<<<<<<<
+- *     else:
+- *         # make a single Message from all arguments
+- */
+-    __Pyx_INCREF(__pyx_v_args);
+-    __pyx_v_packets = __pyx_v_args;
+-
+-    /* "pyliblo3/_liblo.pyx":176
+- *     from_server = src._server if src else NULL
+- * 
+- *     if isinstance(args[0], (Message, Bundle)):             # <<<<<<<<<<<<<<
+- *         # args is already a list of Messages/Bundles
+- *         packets = args
+- */
+-    goto __pyx_L4;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":181
+- *     else:
+- *         # make a single Message from all arguments
+- *         packets = [Message(*args)]             # <<<<<<<<<<<<<<
+- * 
+- *     # send all packets
+- */
+-  /*else*/ {
+-    __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo_Message), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 181, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_GIVEREF(__pyx_t_2);
+-    if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error);
+-    __pyx_t_2 = 0;
+-    __pyx_v_packets = __pyx_t_3;
+-    __pyx_t_3 = 0;
+-  }
+-  __pyx_L4:;
+-
+-  /* "pyliblo3/_liblo.pyx":184
+- * 
+- *     # send all packets
+- *     for p in packets:             # <<<<<<<<<<<<<<
+- *         if isinstance(p, Message):
+- *             message = <Message> p
+- */
+-  if (likely(PyList_CheckExact(__pyx_v_packets)) || PyTuple_CheckExact(__pyx_v_packets)) {
+-    __pyx_t_3 = __pyx_v_packets; __Pyx_INCREF(__pyx_t_3);
+-    __pyx_t_6 = 0;
+-    __pyx_t_7 = NULL;
+-  } else {
+-    __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_packets); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 184, __pyx_L1_error)
+-  }
+-  for (;;) {
+-    if (likely(!__pyx_t_7)) {
+-      if (likely(PyList_CheckExact(__pyx_t_3))) {
+-        {
+-          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
+-          #if !CYTHON_ASSUME_SAFE_MACROS
+-          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 184, __pyx_L1_error)
+-          #endif
+-          if (__pyx_t_6 >= __pyx_temp) break;
+-        }
+-        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 184, __pyx_L1_error)
+-        #else
+-        __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_2);
+-        #endif
+-      } else {
+-        {
+-          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
+-          #if !CYTHON_ASSUME_SAFE_MACROS
+-          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 184, __pyx_L1_error)
+-          #endif
+-          if (__pyx_t_6 >= __pyx_temp) break;
+-        }
+-        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 184, __pyx_L1_error)
+-        #else
+-        __pyx_t_2 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_2);
+-        #endif
+-      }
+-    } else {
+-      __pyx_t_2 = __pyx_t_7(__pyx_t_3);
+-      if (unlikely(!__pyx_t_2)) {
+-        PyObject* exc_type = PyErr_Occurred();
+-        if (exc_type) {
+-          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+-          else __PYX_ERR(0, 184, __pyx_L1_error)
+-        }
+-        break;
+-      }
+-      __Pyx_GOTREF(__pyx_t_2);
+-    }
+-    __Pyx_XDECREF_SET(__pyx_v_p, __pyx_t_2);
+-    __pyx_t_2 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":185
+- *     # send all packets
+- *     for p in packets:
+- *         if isinstance(p, Message):             # <<<<<<<<<<<<<<
+- *             message = <Message> p
+- *             r = lo_send_message_from(target_address._address,
+- */
+-    __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_p, __pyx_ptype_8pyliblo3_6_liblo_Message); 
+-    if (__pyx_t_1) {
+-
+-      /* "pyliblo3/_liblo.pyx":186
+- *     for p in packets:
+- *         if isinstance(p, Message):
+- *             message = <Message> p             # <<<<<<<<<<<<<<
+- *             r = lo_send_message_from(target_address._address,
+- *                                      from_server,
+- */
+-      __pyx_t_2 = __pyx_v_p;
+-      __Pyx_INCREF(__pyx_t_2);
+-      __Pyx_XDECREF_SET(__pyx_v_message, ((struct __pyx_obj_8pyliblo3_6_liblo_Message *)__pyx_t_2));
+-      __pyx_t_2 = 0;
+-
+-      /* "pyliblo3/_liblo.pyx":189
+- *             r = lo_send_message_from(target_address._address,
+- *                                      from_server,
+- *                                      message._path,             # <<<<<<<<<<<<<<
+- *                                      message._message)
+- *         else:
+- */
+-      if (unlikely(__pyx_v_message->_path == Py_None)) {
+-        PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-        __PYX_ERR(0, 189, __pyx_L1_error)
+-      }
+-      __pyx_t_8 = __Pyx_PyBytes_AsWritableString(__pyx_v_message->_path); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error)
+-
+-      /* "pyliblo3/_liblo.pyx":187
+- *         if isinstance(p, Message):
+- *             message = <Message> p
+- *             r = lo_send_message_from(target_address._address,             # <<<<<<<<<<<<<<
+- *                                      from_server,
+- *                                      message._path,
+- */
+-      __pyx_v_r = lo_send_message_from(__pyx_v_target_address->_address, __pyx_v_from_server, __pyx_t_8, __pyx_v_message->_message);
+-
+-      /* "pyliblo3/_liblo.pyx":185
+- *     # send all packets
+- *     for p in packets:
+- *         if isinstance(p, Message):             # <<<<<<<<<<<<<<
+- *             message = <Message> p
+- *             r = lo_send_message_from(target_address._address,
+- */
+-      goto __pyx_L9;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":192
+- *                                      message._message)
+- *         else:
+- *             bundle = <Bundle> p             # <<<<<<<<<<<<<<
+- *             r = lo_send_bundle_from(target_address._address,
+- *                                     from_server,
+- */
+-    /*else*/ {
+-      __pyx_t_2 = __pyx_v_p;
+-      __Pyx_INCREF(__pyx_t_2);
+-      __Pyx_XDECREF_SET(__pyx_v_bundle, ((struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)__pyx_t_2));
+-      __pyx_t_2 = 0;
+-
+-      /* "pyliblo3/_liblo.pyx":193
+- *         else:
+- *             bundle = <Bundle> p
+- *             r = lo_send_bundle_from(target_address._address,             # <<<<<<<<<<<<<<
+- *                                     from_server,
+- *                                     bundle._bundle)
+- */
+-      __pyx_v_r = lo_send_bundle_from(__pyx_v_target_address->_address, __pyx_v_from_server, __pyx_v_bundle->_bundle);
+-    }
+-    __pyx_L9:;
+-
+-    /* "pyliblo3/_liblo.pyx":197
+- *                                     bundle._bundle)
+- * 
+- *         if r == -1:             # <<<<<<<<<<<<<<
+- *             raise IOError("sending failed: %s" %
+- *                           <char*>lo_address_errstr(target_address._address))
+- */
+-    __pyx_t_1 = (__pyx_v_r == -1L);
+-    if (unlikely(__pyx_t_1)) {
+-
+-      /* "pyliblo3/_liblo.pyx":199
+- *         if r == -1:
+- *             raise IOError("sending failed: %s" %
+- *                           <char*>lo_address_errstr(target_address._address))             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-      __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)lo_address_errstr(__pyx_v_target_address->_address))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 199, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_2);
+-
+-      /* "pyliblo3/_liblo.pyx":198
+- * 
+- *         if r == -1:
+- *             raise IOError("sending failed: %s" %             # <<<<<<<<<<<<<<
+- *                           <char*>lo_address_errstr(target_address._address))
+- * 
+- */
+-      __pyx_t_9 = __Pyx_PyString_Format(__pyx_kp_s_sending_failed_s, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 198, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_9);
+-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IOError, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 198, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_2);
+-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+-      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-      __PYX_ERR(0, 198, __pyx_L1_error)
+-
+-      /* "pyliblo3/_liblo.pyx":197
+- *                                     bundle._bundle)
+- * 
+- *         if r == -1:             # <<<<<<<<<<<<<<
+- *             raise IOError("sending failed: %s" %
+- *                           <char*>lo_address_errstr(target_address._address))
+- */
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":184
+- * 
+- *     # send all packets
+- *     for p in packets:             # <<<<<<<<<<<<<<
+- *         if isinstance(p, Message):
+- *             message = <Message> p
+- */
+-  }
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":159
+- * ################################################################################
+- * 
+- * cdef _send(target, _ServerBase src, args):             # <<<<<<<<<<<<<<
+- *     cdef lo_server from_server
+- *     cdef Address target_address
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_9);
+-  __Pyx_AddTraceback("pyliblo3._liblo._send", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF((PyObject *)__pyx_v_target_address);
+-  __Pyx_XDECREF(__pyx_v_packets);
+-  __Pyx_XDECREF(__pyx_v_p);
+-  __Pyx_XDECREF((PyObject *)__pyx_v_message);
+-  __Pyx_XDECREF((PyObject *)__pyx_v_bundle);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":202
+- * 
+- * 
+- * def send(target, *args):             # <<<<<<<<<<<<<<
+- *     """
+- *     Send a message without requiring a server
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_5send(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_4send, "send(target, *args)\n\n    Send a message without requiring a server\n\n    The function has two forms:\n\n    * `send(target, *messages)`\n    * `send(target, path, *args)`\n\n    Send messages to the the given target, without requiring a server.\n    Arguments may be one or more `Message` or `Bundle` objects,\n    or a single message given by its path and optional arguments.\n\n    Args:\n        target (Address | tuple[str, int] | int | str): the address to send the message to;\n            an `Address` object, a port number, a `(hostname, port)` tuple, or a URL.\n        path (str): the path of the message to be sent\n        args (Any): the information to send. These are used to construct a message\n        messages (Message | Bundle): one or more objects of type `Message` or `Bundle`.\n\n    Raises:\n        AddressError: if the given target is invalid\n        IOError: if the message couldn't be sent.\n    ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_5send = {"send", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_5send, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_4send};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_5send(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_target = 0;
+-  PyObject *__pyx_v_args = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("send (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 1, __pyx_nargs);
+-  if (unlikely(!__pyx_v_args)) {
+-    __Pyx_RefNannyFinishContext();
+-    return NULL;
+-  }
+-  __Pyx_GOTREF(__pyx_v_args);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_target,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        default:
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_target)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 202, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        const Py_ssize_t used_pos_args = (kwd_pos_args < 1) ? kwd_pos_args : 1;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, used_pos_args, "send") < 0)) __PYX_ERR(0, 202, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs < 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_target = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("send", 0, 1, 1, __pyx_nargs); __PYX_ERR(0, 202, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
+-  __Pyx_AddTraceback("pyliblo3._liblo.send", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_4send(__pyx_self, __pyx_v_target, __pyx_v_args);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_args);
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_4send(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_target, PyObject *__pyx_v_args) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("send", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":226
+- *         IOError: if the message couldn't be sent.
+- *     """
+- *     _send(target, None, args)             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__send(__pyx_v_target, ((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)Py_None), __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":202
+- * 
+- * 
+- * def send(target, *args):             # <<<<<<<<<<<<<<
+- *     """
+- *     Send a message without requiring a server
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo.send", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":237
+- *     Raised when creating a liblo OSC server fails.
+- *     """
+- *     def __init__(self, num, msg, where):             # <<<<<<<<<<<<<<
+- *         self.num = num
+- *         self.msg = msg
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11ServerError_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11ServerError___init__, "ServerError.__init__(self, num, msg, where)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11ServerError_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11ServerError_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11ServerError___init__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11ServerError_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  PyObject *__pyx_v_num = 0;
+-  PyObject *__pyx_v_msg = 0;
+-  PyObject *__pyx_v_where = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[4] = {0,0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_num,&__pyx_n_s_msg,&__pyx_n_s_where,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
+-        CYTHON_FALLTHROUGH;
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 237, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_num)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 237, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 1); __PYX_ERR(0, 237, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_msg)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 237, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 2); __PYX_ERR(0, 237, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  3:
+-        if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_where)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[3]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 237, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, 3); __PYX_ERR(0, 237, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 237, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 4)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-      values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
+-    }
+-    __pyx_v_self = values[0];
+-    __pyx_v_num = values[1];
+-    __pyx_v_msg = values[2];
+-    __pyx_v_where = values[3];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 237, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11ServerError___init__(__pyx_self, __pyx_v_self, __pyx_v_num, __pyx_v_msg, __pyx_v_where);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11ServerError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_num, PyObject *__pyx_v_msg, PyObject *__pyx_v_where) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":238
+- *     """
+- *     def __init__(self, num, msg, where):
+- *         self.num = num             # <<<<<<<<<<<<<<
+- *         self.msg = msg
+- *         self.where = where
+- */
+-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_num, __pyx_v_num) < 0) __PYX_ERR(0, 238, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":239
+- *     def __init__(self, num, msg, where):
+- *         self.num = num
+- *         self.msg = msg             # <<<<<<<<<<<<<<
+- *         self.where = where
+- *     def __str__(self):
+- */
+-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_msg, __pyx_v_msg) < 0) __PYX_ERR(0, 239, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":240
+- *         self.num = num
+- *         self.msg = msg
+- *         self.where = where             # <<<<<<<<<<<<<<
+- *     def __str__(self):
+- *         s = "server error %d" % self.num
+- */
+-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_where, __pyx_v_where) < 0) __PYX_ERR(0, 240, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":237
+- *     Raised when creating a liblo OSC server fails.
+- *     """
+- *     def __init__(self, num, msg, where):             # <<<<<<<<<<<<<<
+- *         self.num = num
+- *         self.msg = msg
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":241
+- *         self.msg = msg
+- *         self.where = where
+- *     def __str__(self):             # <<<<<<<<<<<<<<
+- *         s = "server error %d" % self.num
+- *         if self.where: s += " in %s" % self.where
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11ServerError_3__str__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11ServerError_2__str__, "ServerError.__str__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11ServerError_3__str__ = {"__str__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11ServerError_3__str__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11ServerError_2__str__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11ServerError_3__str__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 241, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__str__") < 0)) __PYX_ERR(0, 241, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_self = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 241, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerError.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11ServerError_2__str__(__pyx_self, __pyx_v_self);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11ServerError_2__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+-  PyObject *__pyx_v_s = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_t_3;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__str__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":242
+- *         self.where = where
+- *     def __str__(self):
+- *         s = "server error %d" % self.num             # <<<<<<<<<<<<<<
+- *         if self.where: s += " in %s" % self.where
+- *         s += ": %s" % self.msg
+- */
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_num); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 242, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_server_error_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 242, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_v_s = __pyx_t_2;
+-  __pyx_t_2 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":243
+- *     def __str__(self):
+- *         s = "server error %d" % self.num
+- *         if self.where: s += " in %s" % self.where             # <<<<<<<<<<<<<<
+- *         s += ": %s" % self.msg
+- *         return s
+- */
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_where); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 243, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  if (__pyx_t_3) {
+-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_where); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_in_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_2);
+-    __pyx_t_2 = 0;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":244
+- *         s = "server error %d" % self.num
+- *         if self.where: s += " in %s" % self.where
+- *         s += ": %s" % self.msg             # <<<<<<<<<<<<<<
+- *         return s
+- * 
+- */
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_msg); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_1 = __Pyx_PyString_FormatSafe(__pyx_kp_s_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF_SET(__pyx_v_s, __pyx_t_2);
+-  __pyx_t_2 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":245
+- *         if self.where: s += " in %s" % self.where
+- *         s += ": %s" % self.msg
+- *         return s             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __Pyx_INCREF(__pyx_v_s);
+-  __pyx_r = __pyx_v_s;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":241
+- *         self.msg = msg
+- *         self.where = where
+- *     def __str__(self):             # <<<<<<<<<<<<<<
+- *         s = "server error %d" % self.num
+- *         if self.where: s += " in %s" % self.where
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerError.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_s);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":248
+- * 
+- * 
+- * cdef int _msg_callback(const_char *path, const_char *types, lo_arg **argv,             # <<<<<<<<<<<<<<
+- *                        int argc, lo_message msg, void *cb_data) noexcept with gil:
+- *     cdef int i
+- */
+-
+-static int __pyx_f_8pyliblo3_6_liblo__msg_callback(const char *__pyx_v_path, const char *__pyx_v_types, lo_arg **__pyx_v_argv, int __pyx_v_argc, lo_message __pyx_v_msg, void *__pyx_v_cb_data) {
+-  int __pyx_v_i;
+-  char __pyx_v_t;
+-  PyObject *__pyx_v_args = NULL;
+-  PyObject *__pyx_v_v = NULL;
+-  char *__pyx_v_url;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_src = NULL;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_cb = NULL;
+-  PyObject *__pyx_v_func_args = NULL;
+-  PyObject *__pyx_v_r = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  double __pyx_t_4;
+-  PyObject *__pyx_t_5 = NULL;
+-  PyObject *__pyx_t_6 = NULL;
+-  PyObject *__pyx_t_7 = NULL;
+-  int __pyx_t_8;
+-  int __pyx_t_9;
+-  int __pyx_t_10;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  #ifdef WITH_THREAD
+-  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+-  #endif
+-  __Pyx_RefNannySetupContext("_msg_callback", 0);
+-
+-  /* "pyliblo3/_liblo.pyx":255
+- *     cdef uint32_t size, j
+- * 
+- *     args = []             # <<<<<<<<<<<<<<
+- * 
+- *     for i from 0 <= i < argc:
+- */
+-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_v_args = ((PyObject*)__pyx_t_1);
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":257
+- *     args = []
+- * 
+- *     for i from 0 <= i < argc:             # <<<<<<<<<<<<<<
+- *         t = types[i]
+- *         if   t == 'i': v = argv[i].i
+- */
+-  __pyx_t_2 = __pyx_v_argc;
+-  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
+-
+-    /* "pyliblo3/_liblo.pyx":258
+- * 
+- *     for i from 0 <= i < argc:
+- *         t = types[i]             # <<<<<<<<<<<<<<
+- *         if   t == 'i': v = argv[i].i
+- *         elif t == 'h': v = argv[i].h
+- */
+-    __pyx_v_t = (__pyx_v_types[__pyx_v_i]);
+-
+-    /* "pyliblo3/_liblo.pyx":259
+- *     for i from 0 <= i < argc:
+- *         t = types[i]
+- *         if   t == 'i': v = argv[i].i             # <<<<<<<<<<<<<<
+- *         elif t == 'h': v = argv[i].h
+- *         elif t == 'f': v = argv[i].f
+- */
+-    switch (__pyx_v_t) {
+-      case 'i':
+-      __pyx_t_1 = __Pyx_PyInt_From_int32_t((__pyx_v_argv[__pyx_v_i])->i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
+-      __pyx_t_1 = 0;
+-      break;
+-      case 'h':
+-
+-      /* "pyliblo3/_liblo.pyx":260
+- *         t = types[i]
+- *         if   t == 'i': v = argv[i].i
+- *         elif t == 'h': v = argv[i].h             # <<<<<<<<<<<<<<
+- *         elif t == 'f': v = argv[i].f
+- *         elif t == 'd': v = argv[i].d
+- */
+-      __pyx_t_1 = __Pyx_PyInt_From_int64_t((__pyx_v_argv[__pyx_v_i])->h); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
+-      __pyx_t_1 = 0;
+-      break;
+-      case 'f':
+-
+-      /* "pyliblo3/_liblo.pyx":261
+- *         if   t == 'i': v = argv[i].i
+- *         elif t == 'h': v = argv[i].h
+- *         elif t == 'f': v = argv[i].f             # <<<<<<<<<<<<<<
+- *         elif t == 'd': v = argv[i].d
+- *         elif t == 'c': v = chr(argv[i].c)
+- */
+-      __pyx_t_1 = PyFloat_FromDouble((__pyx_v_argv[__pyx_v_i])->f); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
+-      __pyx_t_1 = 0;
+-      break;
+-      case 'd':
+-
+-      /* "pyliblo3/_liblo.pyx":262
+- *         elif t == 'h': v = argv[i].h
+- *         elif t == 'f': v = argv[i].f
+- *         elif t == 'd': v = argv[i].d             # <<<<<<<<<<<<<<
+- *         elif t == 'c': v = chr(argv[i].c)
+- *         elif t == 's': v = _decode(&argv[i].s)
+- */
+-      __pyx_t_1 = PyFloat_FromDouble((__pyx_v_argv[__pyx_v_i])->d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
+-      __pyx_t_1 = 0;
+-      break;
+-      case 'c':
+-
+-      /* "pyliblo3/_liblo.pyx":263
+- *         elif t == 'f': v = argv[i].f
+- *         elif t == 'd': v = argv[i].d
+- *         elif t == 'c': v = chr(argv[i].c)             # <<<<<<<<<<<<<<
+- *         elif t == 's': v = _decode(&argv[i].s)
+- *         elif t == 'S': v = _decode(&argv[i].s)
+- */
+-      __pyx_t_1 = __Pyx_PyInt_From_unsigned_char((__pyx_v_argv[__pyx_v_i])->c); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_chr, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 263, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_3);
+-      __pyx_t_3 = 0;
+-      break;
+-      case 's':
+-
+-      /* "pyliblo3/_liblo.pyx":264
+- *         elif t == 'd': v = argv[i].d
+- *         elif t == 'c': v = chr(argv[i].c)
+- *         elif t == 's': v = _decode(&argv[i].s)             # <<<<<<<<<<<<<<
+- *         elif t == 'S': v = _decode(&argv[i].s)
+- *         elif t == 'T': v = True
+- */
+-      __pyx_t_3 = __Pyx_PyBytes_FromString((&(__pyx_v_argv[__pyx_v_i])->s)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_1);
+-      __pyx_t_1 = 0;
+-      break;
+-      case 'S':
+-
+-      /* "pyliblo3/_liblo.pyx":265
+- *         elif t == 'c': v = chr(argv[i].c)
+- *         elif t == 's': v = _decode(&argv[i].s)
+- *         elif t == 'S': v = _decode(&argv[i].s)             # <<<<<<<<<<<<<<
+- *         elif t == 'T': v = True
+- *         elif t == 'F': v = False
+- */
+-      __pyx_t_1 = __Pyx_PyBytes_FromString((&(__pyx_v_argv[__pyx_v_i])->s)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_3);
+-      __pyx_t_3 = 0;
+-      break;
+-      case 'T':
+-
+-      /* "pyliblo3/_liblo.pyx":266
+- *         elif t == 's': v = _decode(&argv[i].s)
+- *         elif t == 'S': v = _decode(&argv[i].s)
+- *         elif t == 'T': v = True             # <<<<<<<<<<<<<<
+- *         elif t == 'F': v = False
+- *         elif t == 'N': v = None
+- */
+-      __Pyx_INCREF(Py_True);
+-      __Pyx_XDECREF_SET(__pyx_v_v, Py_True);
+-      break;
+-      case 'F':
+-
+-      /* "pyliblo3/_liblo.pyx":267
+- *         elif t == 'S': v = _decode(&argv[i].s)
+- *         elif t == 'T': v = True
+- *         elif t == 'F': v = False             # <<<<<<<<<<<<<<
+- *         elif t == 'N': v = None
+- *         elif t == 'I': v = float('inf')
+- */
+-      __Pyx_INCREF(Py_False);
+-      __Pyx_XDECREF_SET(__pyx_v_v, Py_False);
+-      break;
+-      case 'N':
+-
+-      /* "pyliblo3/_liblo.pyx":268
+- *         elif t == 'T': v = True
+- *         elif t == 'F': v = False
+- *         elif t == 'N': v = None             # <<<<<<<<<<<<<<
+- *         elif t == 'I': v = float('inf')
+- *         elif t == 'm': v = (argv[i].m[0], argv[i].m[1], argv[i].m[2], argv[i].m[3])
+- */
+-      __Pyx_INCREF(Py_None);
+-      __Pyx_XDECREF_SET(__pyx_v_v, Py_None);
+-      break;
+-      case 'I':
+-
+-      /* "pyliblo3/_liblo.pyx":269
+- *         elif t == 'F': v = False
+- *         elif t == 'N': v = None
+- *         elif t == 'I': v = float('inf')             # <<<<<<<<<<<<<<
+- *         elif t == 'm': v = (argv[i].m[0], argv[i].m[1], argv[i].m[2], argv[i].m[3])
+- *         elif t == 't': v = _timetag_to_double(argv[i].t)
+- */
+-      __pyx_t_4 = __Pyx_PyString_AsDouble(__pyx_n_s_inf); if (unlikely(__pyx_t_4 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 269, __pyx_L1_error)
+-      __pyx_t_3 = PyFloat_FromDouble(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_3);
+-      __pyx_t_3 = 0;
+-      break;
+-      case 'm':
+-
+-      /* "pyliblo3/_liblo.pyx":270
+- *         elif t == 'N': v = None
+- *         elif t == 'I': v = float('inf')
+- *         elif t == 'm': v = (argv[i].m[0], argv[i].m[1], argv[i].m[2], argv[i].m[3])             # <<<<<<<<<<<<<<
+- *         elif t == 't': v = _timetag_to_double(argv[i].t)
+- *         elif t == 'b':
+- */
+-      __pyx_t_3 = __Pyx_PyInt_From_uint8_t(((__pyx_v_argv[__pyx_v_i])->m[0])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __pyx_t_1 = __Pyx_PyInt_From_uint8_t(((__pyx_v_argv[__pyx_v_i])->m[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __pyx_t_5 = __Pyx_PyInt_From_uint8_t(((__pyx_v_argv[__pyx_v_i])->m[2])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_5);
+-      __pyx_t_6 = __Pyx_PyInt_From_uint8_t(((__pyx_v_argv[__pyx_v_i])->m[3])); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_6);
+-      __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 270, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_7);
+-      __Pyx_GIVEREF(__pyx_t_3);
+-      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3)) __PYX_ERR(0, 270, __pyx_L1_error);
+-      __Pyx_GIVEREF(__pyx_t_1);
+-      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error);
+-      __Pyx_GIVEREF(__pyx_t_5);
+-      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error);
+-      __Pyx_GIVEREF(__pyx_t_6);
+-      if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error);
+-      __pyx_t_3 = 0;
+-      __pyx_t_1 = 0;
+-      __pyx_t_5 = 0;
+-      __pyx_t_6 = 0;
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_7);
+-      __pyx_t_7 = 0;
+-      break;
+-      case 't':
+-
+-      /* "pyliblo3/_liblo.pyx":271
+- *         elif t == 'I': v = float('inf')
+- *         elif t == 'm': v = (argv[i].m[0], argv[i].m[1], argv[i].m[2], argv[i].m[3])
+- *         elif t == 't': v = _timetag_to_double(argv[i].t)             # <<<<<<<<<<<<<<
+- *         elif t == 'b':
+- *             v = bytes(<unsigned char*>lo_blob_dataptr(argv[i]))
+- */
+-      __pyx_t_4 = __pyx_f_8pyliblo3_6_liblo__timetag_to_double((__pyx_v_argv[__pyx_v_i])->t); if (unlikely(__pyx_t_4 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 271, __pyx_L1_error)
+-      __pyx_t_7 = PyFloat_FromDouble(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_7);
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_7);
+-      __pyx_t_7 = 0;
+-      break;
+-      case 'b':
+-
+-      /* "pyliblo3/_liblo.pyx":273
+- *         elif t == 't': v = _timetag_to_double(argv[i].t)
+- *         elif t == 'b':
+- *             v = bytes(<unsigned char*>lo_blob_dataptr(argv[i]))             # <<<<<<<<<<<<<<
+- *         else:
+- *             v = None  # unhandled data type
+- */
+-      __pyx_t_7 = __Pyx_PyBytes_FromCString(((unsigned char *)lo_blob_dataptr((__pyx_v_argv[__pyx_v_i])))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_7);
+-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_6);
+-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+-      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_6);
+-      __pyx_t_6 = 0;
+-
+-      /* "pyliblo3/_liblo.pyx":272
+- *         elif t == 'm': v = (argv[i].m[0], argv[i].m[1], argv[i].m[2], argv[i].m[3])
+- *         elif t == 't': v = _timetag_to_double(argv[i].t)
+- *         elif t == 'b':             # <<<<<<<<<<<<<<
+- *             v = bytes(<unsigned char*>lo_blob_dataptr(argv[i]))
+- *         else:
+- */
+-      break;
+-      default:
+-
+-      /* "pyliblo3/_liblo.pyx":275
+- *             v = bytes(<unsigned char*>lo_blob_dataptr(argv[i]))
+- *         else:
+- *             v = None  # unhandled data type             # <<<<<<<<<<<<<<
+- * 
+- *         args.append(v)
+- */
+-      __Pyx_INCREF(Py_None);
+-      __Pyx_XDECREF_SET(__pyx_v_v, Py_None);
+-      break;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":277
+- *             v = None  # unhandled data type
+- * 
+- *         args.append(v)             # <<<<<<<<<<<<<<
+- * 
+- *     cdef char *url = lo_address_get_url(lo_message_get_source(msg))
+- */
+-    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_args, __pyx_v_v); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 277, __pyx_L1_error)
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":279
+- *         args.append(v)
+- * 
+- *     cdef char *url = lo_address_get_url(lo_message_get_source(msg))             # <<<<<<<<<<<<<<
+- *     src = Address(url)
+- *     free(url)
+- */
+-  __pyx_v_url = lo_address_get_url(lo_message_get_source(__pyx_v_msg));
+-
+-  /* "pyliblo3/_liblo.pyx":280
+- * 
+- *     cdef char *url = lo_address_get_url(lo_message_get_source(msg))
+- *     src = Address(url)             # <<<<<<<<<<<<<<
+- *     free(url)
+- * 
+- */
+-  __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_url); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 280, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_6);
+-  __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo_Address), __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 280, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_7);
+-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+-  __pyx_v_src = ((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_t_7);
+-  __pyx_t_7 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":281
+- *     cdef char *url = lo_address_get_url(lo_message_get_source(msg))
+- *     src = Address(url)
+- *     free(url)             # <<<<<<<<<<<<<<
+- * 
+- *     cb = <Callback>cb_data
+- */
+-  free(__pyx_v_url);
+-
+-  /* "pyliblo3/_liblo.pyx":283
+- *     free(url)
+- * 
+- *     cb = <Callback>cb_data             # <<<<<<<<<<<<<<
+- * 
+- *     func_args = (_decode(<char*>path),
+- */
+-  __pyx_t_7 = ((PyObject *)__pyx_v_cb_data);
+-  __Pyx_INCREF(__pyx_t_7);
+-  __pyx_v_cb = ((struct __pyx_obj_8pyliblo3_6_liblo_Callback *)__pyx_t_7);
+-  __pyx_t_7 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":285
+- *     cb = <Callback>cb_data
+- * 
+- *     func_args = (_decode(<char*>path),             # <<<<<<<<<<<<<<
+- *                  args,
+- *                  _decode(<char*>types),
+- */
+-  __pyx_t_7 = __Pyx_PyBytes_FromString(((char *)__pyx_v_path)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 285, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_7);
+-  __pyx_t_6 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 285, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_6);
+-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":287
+- *     func_args = (_decode(<char*>path),
+- *                  args,
+- *                  _decode(<char*>types),             # <<<<<<<<<<<<<<
+- *                  src,
+- *                  cb.user_data)
+- */
+-  __pyx_t_7 = __Pyx_PyBytes_FromString(((char *)__pyx_v_types)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 287, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_7);
+-  __pyx_t_5 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 287, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_5);
+-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":285
+- *     cb = <Callback>cb_data
+- * 
+- *     func_args = (_decode(<char*>path),             # <<<<<<<<<<<<<<
+- *                  args,
+- *                  _decode(<char*>types),
+- */
+-  __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 285, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_7);
+-  __Pyx_GIVEREF(__pyx_t_6);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6)) __PYX_ERR(0, 285, __pyx_L1_error);
+-  __Pyx_INCREF(__pyx_v_args);
+-  __Pyx_GIVEREF(__pyx_v_args);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_args)) __PYX_ERR(0, 285, __pyx_L1_error);
+-  __Pyx_GIVEREF(__pyx_t_5);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error);
+-  __Pyx_INCREF((PyObject *)__pyx_v_src);
+-  __Pyx_GIVEREF((PyObject *)__pyx_v_src);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 3, ((PyObject *)__pyx_v_src))) __PYX_ERR(0, 285, __pyx_L1_error);
+-  __Pyx_INCREF(__pyx_v_cb->user_data);
+-  __Pyx_GIVEREF(__pyx_v_cb->user_data);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_v_cb->user_data)) __PYX_ERR(0, 285, __pyx_L1_error);
+-  __pyx_t_6 = 0;
+-  __pyx_t_5 = 0;
+-  __pyx_v_func_args = ((PyObject*)__pyx_t_7);
+-  __pyx_t_7 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":293
+- *     # call function
+- *     # spec = _inspect.getfullargspec(func)
+- *     if cb.has_varargs == 1:             # <<<<<<<<<<<<<<
+- *         r = cb.func(*func_args)
+- *     else:
+- */
+-  __pyx_t_9 = (__pyx_v_cb->has_varargs == 1);
+-  if (__pyx_t_9) {
+-
+-    /* "pyliblo3/_liblo.pyx":294
+- *     # spec = _inspect.getfullargspec(func)
+- *     if cb.has_varargs == 1:
+- *         r = cb.func(*func_args)             # <<<<<<<<<<<<<<
+- *     else:
+- *         r = cb.func(*func_args[0:cb.numargs])
+- */
+-    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_cb->func, __pyx_v_func_args, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 294, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_7);
+-    __pyx_v_r = __pyx_t_7;
+-    __pyx_t_7 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":293
+- *     # call function
+- *     # spec = _inspect.getfullargspec(func)
+- *     if cb.has_varargs == 1:             # <<<<<<<<<<<<<<
+- *         r = cb.func(*func_args)
+- *     else:
+- */
+-    goto __pyx_L5;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":296
+- *         r = cb.func(*func_args)
+- *     else:
+- *         r = cb.func(*func_args[0:cb.numargs])             # <<<<<<<<<<<<<<
+- * 
+- *     return r if r is not None else 0
+- */
+-  /*else*/ {
+-    __pyx_t_7 = __Pyx_PyTuple_GetSlice(__pyx_v_func_args, 0, __pyx_v_cb->numargs); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 296, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_7);
+-    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_cb->func, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 296, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_5);
+-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+-    __pyx_v_r = __pyx_t_5;
+-    __pyx_t_5 = 0;
+-  }
+-  __pyx_L5:;
+-
+-  /* "pyliblo3/_liblo.pyx":298
+- *         r = cb.func(*func_args[0:cb.numargs])
+- * 
+- *     return r if r is not None else 0             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __pyx_t_9 = (__pyx_v_r != Py_None);
+-  if (__pyx_t_9) {
+-    __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_v_r); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 298, __pyx_L1_error)
+-    __pyx_t_2 = __pyx_t_10;
+-  } else {
+-    __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_2;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":248
+- * 
+- * 
+- * cdef int _msg_callback(const_char *path, const_char *types, lo_arg **argv,             # <<<<<<<<<<<<<<
+- *                        int argc, lo_message msg, void *cb_data) noexcept with gil:
+- *     cdef int i
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_XDECREF(__pyx_t_6);
+-  __Pyx_XDECREF(__pyx_t_7);
+-  __Pyx_WriteUnraisable("pyliblo3._liblo._msg_callback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_args);
+-  __Pyx_XDECREF(__pyx_v_v);
+-  __Pyx_XDECREF((PyObject *)__pyx_v_src);
+-  __Pyx_XDECREF((PyObject *)__pyx_v_cb);
+-  __Pyx_XDECREF(__pyx_v_func_args);
+-  __Pyx_XDECREF(__pyx_v_r);
+-  __Pyx_RefNannyFinishContext();
+-  #ifdef WITH_THREAD
+-  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+-  #endif
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":301
+- * 
+- * 
+- * cdef int _bundle_start_callback(lo_timetag t, void *cb_data) noexcept with gil:             # <<<<<<<<<<<<<<
+- *     cb = <object>cb_data
+- *     r = cb.start_func(_timetag_to_double(t), cb.user_data)
+- */
+-
+-static int __pyx_f_8pyliblo3_6_liblo__bundle_start_callback(lo_timetag __pyx_v_t, void *__pyx_v_cb_data) {
+-  PyObject *__pyx_v_cb = NULL;
+-  PyObject *__pyx_v_r = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  double __pyx_t_3;
+-  PyObject *__pyx_t_4 = NULL;
+-  PyObject *__pyx_t_5 = NULL;
+-  PyObject *__pyx_t_6 = NULL;
+-  int __pyx_t_7;
+-  int __pyx_t_8;
+-  int __pyx_t_9;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  #ifdef WITH_THREAD
+-  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+-  #endif
+-  __Pyx_RefNannySetupContext("_bundle_start_callback", 0);
+-
+-  /* "pyliblo3/_liblo.pyx":302
+- * 
+- * cdef int _bundle_start_callback(lo_timetag t, void *cb_data) noexcept with gil:
+- *     cb = <object>cb_data             # <<<<<<<<<<<<<<
+- *     r = cb.start_func(_timetag_to_double(t), cb.user_data)
+- *     return r if r is not None else 0
+- */
+-  __pyx_t_1 = ((PyObject *)__pyx_v_cb_data);
+-  __Pyx_INCREF(__pyx_t_1);
+-  __pyx_v_cb = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":303
+- * cdef int _bundle_start_callback(lo_timetag t, void *cb_data) noexcept with gil:
+- *     cb = <object>cb_data
+- *     r = cb.start_func(_timetag_to_double(t), cb.user_data)             # <<<<<<<<<<<<<<
+- *     return r if r is not None else 0
+- * 
+- */
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_cb, __pyx_n_s_start_func); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__timetag_to_double(__pyx_v_t); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 303, __pyx_L1_error)
+-  __pyx_t_4 = PyFloat_FromDouble(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 303, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_cb, __pyx_n_s_user_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 303, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_5);
+-  __pyx_t_6 = NULL;
+-  __pyx_t_7 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_6)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_6);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_7 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_5};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7);
+-    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_v_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":304
+- *     cb = <object>cb_data
+- *     r = cb.start_func(_timetag_to_double(t), cb.user_data)
+- *     return r if r is not None else 0             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __pyx_t_8 = (__pyx_v_r != Py_None);
+-  if (__pyx_t_8) {
+-    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_r); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 304, __pyx_L1_error)
+-    __pyx_t_7 = __pyx_t_9;
+-  } else {
+-    __pyx_t_7 = 0;
+-  }
+-  __pyx_r = __pyx_t_7;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":301
+- * 
+- * 
+- * cdef int _bundle_start_callback(lo_timetag t, void *cb_data) noexcept with gil:             # <<<<<<<<<<<<<<
+- *     cb = <object>cb_data
+- *     r = cb.start_func(_timetag_to_double(t), cb.user_data)
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_XDECREF(__pyx_t_6);
+-  __Pyx_WriteUnraisable("pyliblo3._liblo._bundle_start_callback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_cb);
+-  __Pyx_XDECREF(__pyx_v_r);
+-  __Pyx_RefNannyFinishContext();
+-  #ifdef WITH_THREAD
+-  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+-  #endif
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":307
+- * 
+- * 
+- * cdef int _bundle_end_callback(void *cb_data) noexcept with gil:             # <<<<<<<<<<<<<<
+- *     cb = <object>cb_data
+- *     r = cb.end_func(cb.user_data)
+- */
+-
+-static int __pyx_f_8pyliblo3_6_liblo__bundle_end_callback(void *__pyx_v_cb_data) {
+-  PyObject *__pyx_v_cb = NULL;
+-  PyObject *__pyx_v_r = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_t_5;
+-  int __pyx_t_6;
+-  int __pyx_t_7;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  #ifdef WITH_THREAD
+-  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+-  #endif
+-  __Pyx_RefNannySetupContext("_bundle_end_callback", 0);
+-
+-  /* "pyliblo3/_liblo.pyx":308
+- * 
+- * cdef int _bundle_end_callback(void *cb_data) noexcept with gil:
+- *     cb = <object>cb_data             # <<<<<<<<<<<<<<
+- *     r = cb.end_func(cb.user_data)
+- *     return r if r is not None else 0
+- */
+-  __pyx_t_1 = ((PyObject *)__pyx_v_cb_data);
+-  __Pyx_INCREF(__pyx_t_1);
+-  __pyx_v_cb = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":309
+- * cdef int _bundle_end_callback(void *cb_data) noexcept with gil:
+- *     cb = <object>cb_data
+- *     r = cb.end_func(cb.user_data)             # <<<<<<<<<<<<<<
+- *     return r if r is not None else 0
+- * 
+- */
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_cb, __pyx_n_s_end_func); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 309, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_cb, __pyx_n_s_user_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 309, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_4 = NULL;
+-  __pyx_t_5 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_4)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_4);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_5 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
+-    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_v_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":310
+- *     cb = <object>cb_data
+- *     r = cb.end_func(cb.user_data)
+- *     return r if r is not None else 0             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __pyx_t_6 = (__pyx_v_r != Py_None);
+-  if (__pyx_t_6) {
+-    __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_v_r); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 310, __pyx_L1_error)
+-    __pyx_t_5 = __pyx_t_7;
+-  } else {
+-    __pyx_t_5 = 0;
+-  }
+-  __pyx_r = __pyx_t_5;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":307
+- * 
+- * 
+- * cdef int _bundle_end_callback(void *cb_data) noexcept with gil:             # <<<<<<<<<<<<<<
+- *     cb = <object>cb_data
+- *     r = cb.end_func(cb.user_data)
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_WriteUnraisable("pyliblo3._liblo._bundle_end_callback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_cb);
+-  __Pyx_XDECREF(__pyx_v_r);
+-  __Pyx_RefNannyFinishContext();
+-  #ifdef WITH_THREAD
+-  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+-  #endif
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":313
+- * 
+- * 
+- * cdef void _err_handler(int num, const_char *msg, const_char *where) noexcept with gil:             # <<<<<<<<<<<<<<
+- *     # can't raise exception in cdef callback function, so use a global variable
+- *     # instead
+- */
+-
+-static void __pyx_f_8pyliblo3_6_liblo__err_handler(int __pyx_v_num, const char *__pyx_v_msg, const char *__pyx_v_where) {
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  PyObject *__pyx_t_5 = NULL;
+-  int __pyx_t_6;
+-  int __pyx_t_7;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  #ifdef WITH_THREAD
+-  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+-  #endif
+-  __Pyx_RefNannySetupContext("_err_handler", 0);
+-
+-  /* "pyliblo3/_liblo.pyx":317
+- *     # instead
+- *     global __exception
+- *     __exception = ServerError(num, <char*>msg, None)             # <<<<<<<<<<<<<<
+- *     if where: __exception.where = <char*>where
+- * 
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ServerError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_num); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 317, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_4 = __Pyx_PyBytes_FromString(((char *)__pyx_v_msg)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 317, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __pyx_t_5 = NULL;
+-  __pyx_t_6 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_5)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_5);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_6 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[4] = {__pyx_t_5, __pyx_t_3, __pyx_t_4, Py_None};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_6, 3+__pyx_t_6);
+-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_exception, __pyx_t_1) < 0) __PYX_ERR(0, 317, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":318
+- *     global __exception
+- *     __exception = ServerError(num, <char*>msg, None)
+- *     if where: __exception.where = <char*>where             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __pyx_t_7 = (__pyx_v_where != 0);
+-  if (__pyx_t_7) {
+-    __pyx_t_1 = __Pyx_PyBytes_FromString(((char *)__pyx_v_where)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_exception); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 318, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    if (__Pyx_PyObject_SetAttrStr(__pyx_t_2, __pyx_n_s_where, __pyx_t_1) < 0) __PYX_ERR(0, 318, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":313
+- * 
+- * 
+- * cdef void _err_handler(int num, const_char *msg, const_char *where) noexcept with gil:             # <<<<<<<<<<<<<<
+- *     # can't raise exception in cdef callback function, so use a global variable
+- *     # instead
+- */
+-
+-  /* function exit code */
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_WriteUnraisable("pyliblo3._liblo._err_handler", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+-  __pyx_L0:;
+-  __Pyx_RefNannyFinishContext();
+-  #ifdef WITH_THREAD
+-  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+-  #endif
+-}
+-
+-/* "pyliblo3/_liblo.pyx":340
+- *     _counter = 0
+- * 
+- *     def __init__(self, path, types, user_data=None):             # <<<<<<<<<<<<<<
+- *         self.spec = struct(counter=make_method._counter,
+- *                            path=path,
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11make_method_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11make_method___init__, "make_method.__init__(self, path, types, user_data=None)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11make_method_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11make_method_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11make_method___init__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11make_method_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  PyObject *__pyx_v_path = 0;
+-  PyObject *__pyx_v_types = 0;
+-  PyObject *__pyx_v_user_data = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[4] = {0,0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_path,&__pyx_n_s_types,&__pyx_n_s_user_data,0};
+-    values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
+-        CYTHON_FALLTHROUGH;
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 340, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_path)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 340, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 1); __PYX_ERR(0, 340, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_types)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 340, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 2); __PYX_ERR(0, 340, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  3:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_data);
+-          if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 340, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 340, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
+-        CYTHON_FALLTHROUGH;
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_self = values[0];
+-    __pyx_v_path = values[1];
+-    __pyx_v_types = values[2];
+-    __pyx_v_user_data = values[3];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 340, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.make_method.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11make_method___init__(__pyx_self, __pyx_v_self, __pyx_v_path, __pyx_v_types, __pyx_v_user_data);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11make_method___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_types, PyObject *__pyx_v_user_data) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":341
+- * 
+- *     def __init__(self, path, types, user_data=None):
+- *         self.spec = struct(counter=make_method._counter,             # <<<<<<<<<<<<<<
+- *                            path=path,
+- *                            types=types,
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 341, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_make_method); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 341, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_counter_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 341, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_counter, __pyx_t_4) < 0) __PYX_ERR(0, 341, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":342
+- *     def __init__(self, path, types, user_data=None):
+- *         self.spec = struct(counter=make_method._counter,
+- *                            path=path,             # <<<<<<<<<<<<<<
+- *                            types=types,
+- *                            user_data=user_data)
+- */
+-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_path, __pyx_v_path) < 0) __PYX_ERR(0, 341, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":343
+- *         self.spec = struct(counter=make_method._counter,
+- *                            path=path,
+- *                            types=types,             # <<<<<<<<<<<<<<
+- *                            user_data=user_data)
+- *         make_method._counter += 1
+- */
+-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_types, __pyx_v_types) < 0) __PYX_ERR(0, 341, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":344
+- *                            path=path,
+- *                            types=types,
+- *                            user_data=user_data)             # <<<<<<<<<<<<<<
+- *         make_method._counter += 1
+- * 
+- */
+-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_user_data, __pyx_v_user_data) < 0) __PYX_ERR(0, 341, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":341
+- * 
+- *     def __init__(self, path, types, user_data=None):
+- *         self.spec = struct(counter=make_method._counter,             # <<<<<<<<<<<<<<
+- *                            path=path,
+- *                            types=types,
+- */
+-  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 341, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_spec, __pyx_t_4) < 0) __PYX_ERR(0, 341, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":345
+- *                            types=types,
+- *                            user_data=user_data)
+- *         make_method._counter += 1             # <<<<<<<<<<<<<<
+- * 
+- *     def __call__(self, f):
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_make_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 345, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_counter_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-  __pyx_t_4 = __Pyx_PyInt_AddObjC(__pyx_t_2, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 345, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_make_method); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  if (__Pyx_PyObject_SetAttrStr(__pyx_t_2, __pyx_n_s_counter_2, __pyx_t_4) < 0) __PYX_ERR(0, 345, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":340
+- *     _counter = 0
+- * 
+- *     def __init__(self, path, types, user_data=None):             # <<<<<<<<<<<<<<
+- *         self.spec = struct(counter=make_method._counter,
+- *                            path=path,
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_AddTraceback("pyliblo3._liblo.make_method.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":347
+- *         make_method._counter += 1
+- * 
+- *     def __call__(self, f):             # <<<<<<<<<<<<<<
+- *         # we can't access the Server object here, because at the time the
+- *         # decorator is run it doesn't even exist yet, so we store the
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11make_method_3__call__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11make_method_2__call__, "make_method.__call__(self, f)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11make_method_3__call__ = {"__call__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11make_method_3__call__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11make_method_2__call__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11make_method_3__call__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  PyObject *__pyx_v_f = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[2] = {0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__call__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_f,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_f)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 347, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__call__", 1, 2, 2, 1); __PYX_ERR(0, 347, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__call__") < 0)) __PYX_ERR(0, 347, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 2)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-    }
+-    __pyx_v_self = values[0];
+-    __pyx_v_f = values[1];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__call__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 347, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.make_method.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11make_method_2__call__(__pyx_self, __pyx_v_self, __pyx_v_f);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11make_method_2__call__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_f) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_t_5;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__call__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":351
+- *         # decorator is run it doesn't even exist yet, so we store the
+- *         # path/typespec in the function object instead...
+- *         if not hasattr(f, '_method_spec'):             # <<<<<<<<<<<<<<
+- *             f._method_spec = []
+- *         f._method_spec.append(self.spec)
+- */
+-  __pyx_t_1 = __Pyx_HasAttr(__pyx_v_f, __pyx_n_s_method_spec); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 351, __pyx_L1_error)
+-  __pyx_t_2 = (!__pyx_t_1);
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":352
+- *         # path/typespec in the function object instead...
+- *         if not hasattr(f, '_method_spec'):
+- *             f._method_spec = []             # <<<<<<<<<<<<<<
+- *         f._method_spec.append(self.spec)
+- *         return f
+- */
+-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 352, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_f, __pyx_n_s_method_spec, __pyx_t_3) < 0) __PYX_ERR(0, 352, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":351
+- *         # decorator is run it doesn't even exist yet, so we store the
+- *         # path/typespec in the function object instead...
+- *         if not hasattr(f, '_method_spec'):             # <<<<<<<<<<<<<<
+- *             f._method_spec = []
+- *         f._method_spec.append(self.spec)
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":353
+- *         if not hasattr(f, '_method_spec'):
+- *             f._method_spec = []
+- *         f._method_spec.append(self.spec)             # <<<<<<<<<<<<<<
+- *         return f
+- * 
+- */
+-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_method_spec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 353, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_spec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 353, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 353, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":354
+- *             f._method_spec = []
+- *         f._method_spec.append(self.spec)
+- *         return f             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __Pyx_INCREF(__pyx_v_f);
+-  __pyx_r = __pyx_v_f;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":347
+- *         make_method._counter += 1
+- * 
+- *     def __call__(self, f):             # <<<<<<<<<<<<<<
+- *         # we can't access the Server object here, because at the time the
+- *         # decorator is run it doesn't even exist yet, so we store the
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_AddTraceback("pyliblo3._liblo.make_method.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":363
+- *     cdef list _keep_refs
+- * 
+- *     def __init__(self, reg_methods=True):             # <<<<<<<<<<<<<<
+- *         self._keep_refs = []
+- * 
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_11_ServerBase_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_11_ServerBase_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_reg_methods = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_reg_methods,0};
+-    values[0] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_True));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reg_methods);
+-          if (value) { values[0] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 363, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 363, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_reg_methods = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 363, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return -1;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase___init__(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self), __pyx_v_reg_methods);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_11_ServerBase___init__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_reg_methods) {
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_t_5;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":364
+- * 
+- *     def __init__(self, reg_methods=True):
+- *         self._keep_refs = []             # <<<<<<<<<<<<<<
+- * 
+- *         if reg_methods:
+- */
+-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  __Pyx_GOTREF(__pyx_v_self->_keep_refs);
+-  __Pyx_DECREF(__pyx_v_self->_keep_refs);
+-  __pyx_v_self->_keep_refs = ((PyObject*)__pyx_t_1);
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":366
+- *         self._keep_refs = []
+- * 
+- *         if reg_methods:             # <<<<<<<<<<<<<<
+- *             self.register_methods()
+- * 
+- */
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_reg_methods); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 366, __pyx_L1_error)
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":367
+- * 
+- *         if reg_methods:
+- *             self.register_methods()             # <<<<<<<<<<<<<<
+- * 
+- *     cdef _check(self):
+- */
+-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_register_methods); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 367, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_4 = NULL;
+-    __pyx_t_5 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_3))) {
+-      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+-      if (likely(__pyx_t_4)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+-        __Pyx_INCREF(__pyx_t_4);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_3, function);
+-        __pyx_t_5 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
+-      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
+-      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 367, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    }
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":366
+- *         self._keep_refs = []
+- * 
+- *         if reg_methods:             # <<<<<<<<<<<<<<
+- *             self.register_methods()
+- * 
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":363
+- *     cdef list _keep_refs
+- * 
+- *     def __init__(self, reg_methods=True):             # <<<<<<<<<<<<<<
+- *         self._keep_refs = []
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":369
+- *             self.register_methods()
+- * 
+- *     cdef _check(self):             # <<<<<<<<<<<<<<
+- *         if self._server == NULL:
+- *             raise RuntimeError("Server method called after free()")
+- */
+-
+-static PyObject *__pyx_f_8pyliblo3_6_liblo_11_ServerBase__check(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("_check", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":370
+- * 
+- *     cdef _check(self):
+- *         if self._server == NULL:             # <<<<<<<<<<<<<<
+- *             raise RuntimeError("Server method called after free()")
+- * 
+- */
+-  __pyx_t_1 = (__pyx_v_self->_server == NULL);
+-  if (unlikely(__pyx_t_1)) {
+-
+-    /* "pyliblo3/_liblo.pyx":371
+- *     cdef _check(self):
+- *         if self._server == NULL:
+- *             raise RuntimeError("Server method called after free()")             # <<<<<<<<<<<<<<
+- * 
+- *     def register_methods(self, obj=None):
+- */
+-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 371, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __PYX_ERR(0, 371, __pyx_L1_error)
+-
+-    /* "pyliblo3/_liblo.pyx":370
+- * 
+- *     cdef _check(self):
+- *         if self._server == NULL:             # <<<<<<<<<<<<<<
+- *             raise RuntimeError("Server method called after free()")
+- * 
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":369
+- *             self.register_methods()
+- * 
+- *     cdef _check(self):             # <<<<<<<<<<<<<<
+- *         if self._server == NULL:
+- *             raise RuntimeError("Server method called after free()")
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase._check", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":373
+- *             raise RuntimeError("Server method called after free()")
+- * 
+- *     def register_methods(self, obj=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Called internally during init if reg_methods is True
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_3register_methods(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_2register_methods, "_ServerBase.register_methods(self, obj=None)\n\n        Called internally during init if reg_methods is True\n\n        Args:\n            obj: The object that implements the OSC callbacks to be registered.\n                By default this is the server object itself.\n\n        This function is usually called automatically by the server's\n        constructor, unless its *reg_methods* parameter was set to `False`.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_3register_methods = {"register_methods", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_3register_methods, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_2register_methods};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_3register_methods(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_obj = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("register_methods (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,0};
+-    values[0] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj);
+-          if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 373, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "register_methods") < 0)) __PYX_ERR(0, 373, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_obj = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("register_methods", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 373, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.register_methods", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_2register_methods(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self), __pyx_v_obj);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":393
+- *                     methods.append(struct(spec=spec, name=m[1]))
+- *         # sort by counter
+- *         methods.sort(key=lambda x: x.spec.counter)             # <<<<<<<<<<<<<<
+- *         for e in methods:
+- *             self.add_method(e.spec.path, e.spec.types, e.name, e.spec.user_data)
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_16register_methods_lambda(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_16register_methods_lambda = {"lambda", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_16register_methods_lambda, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_16register_methods_lambda(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_x = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("lambda (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_x)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 393, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "lambda") < 0)) __PYX_ERR(0, 393, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_x = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("lambda", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 393, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.register_methods.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_lambda_funcdef_lambda(__pyx_self, __pyx_v_x);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_x) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("lambda", 1);
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_x, __pyx_n_s_spec); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_counter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_r = __pyx_t_2;
+-  __pyx_t_2 = 0;
+-  goto __pyx_L0;
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.register_methods.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":373
+- *             raise RuntimeError("Server method called after free()")
+- * 
+- *     def register_methods(self, obj=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Called internally during init if reg_methods is True
+- */
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_2register_methods(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_obj) {
+-  PyObject *__pyx_v_methods = NULL;
+-  PyObject *__pyx_v_m = NULL;
+-  PyObject *__pyx_v_spec = NULL;
+-  PyObject *__pyx_v_e = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_t_5;
+-  Py_ssize_t __pyx_t_6;
+-  PyObject *(*__pyx_t_7)(PyObject *);
+-  Py_ssize_t __pyx_t_8;
+-  PyObject *(*__pyx_t_9)(PyObject *);
+-  PyObject *__pyx_t_10 = NULL;
+-  PyObject *__pyx_t_11 = NULL;
+-  int __pyx_t_12;
+-  PyObject *__pyx_t_13 = NULL;
+-  PyObject *__pyx_t_14 = NULL;
+-  PyObject *__pyx_t_15 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("register_methods", 0);
+-  __Pyx_INCREF(__pyx_v_obj);
+-
+-  /* "pyliblo3/_liblo.pyx":384
+- *         constructor, unless its *reg_methods* parameter was set to `False`.
+- *         """
+- *         if obj == None:             # <<<<<<<<<<<<<<
+- *             obj = self
+- *         # find and register methods that were defined using decorators
+- */
+-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_obj, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error)
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 384, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":385
+- *         """
+- *         if obj == None:
+- *             obj = self             # <<<<<<<<<<<<<<
+- *         # find and register methods that were defined using decorators
+- *         methods = []
+- */
+-    __Pyx_INCREF((PyObject *)__pyx_v_self);
+-    __Pyx_DECREF_SET(__pyx_v_obj, ((PyObject *)__pyx_v_self));
+-
+-    /* "pyliblo3/_liblo.pyx":384
+- *         constructor, unless its *reg_methods* parameter was set to `False`.
+- *         """
+- *         if obj == None:             # <<<<<<<<<<<<<<
+- *             obj = self
+- *         # find and register methods that were defined using decorators
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":387
+- *             obj = self
+- *         # find and register methods that were defined using decorators
+- *         methods = []             # <<<<<<<<<<<<<<
+- *         for m in _inspect.getmembers(obj):
+- *             if hasattr(m[1], '_method_spec'):
+- */
+-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 387, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_v_methods = ((PyObject*)__pyx_t_1);
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":388
+- *         # find and register methods that were defined using decorators
+- *         methods = []
+- *         for m in _inspect.getmembers(obj):             # <<<<<<<<<<<<<<
+- *             if hasattr(m[1], '_method_spec'):
+- *                 for spec in m[1]._method_spec:
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_inspect); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getmembers); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 388, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __pyx_t_3 = NULL;
+-  __pyx_t_5 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_4))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_4, function);
+-      __pyx_t_5 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_obj};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-  }
+-  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
+-    __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4);
+-    __pyx_t_6 = 0;
+-    __pyx_t_7 = NULL;
+-  } else {
+-    __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 388, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_4);
+-    __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 388, __pyx_L1_error)
+-  }
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  for (;;) {
+-    if (likely(!__pyx_t_7)) {
+-      if (likely(PyList_CheckExact(__pyx_t_4))) {
+-        {
+-          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4);
+-          #if !CYTHON_ASSUME_SAFE_MACROS
+-          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 388, __pyx_L1_error)
+-          #endif
+-          if (__pyx_t_6 >= __pyx_temp) break;
+-        }
+-        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 388, __pyx_L1_error)
+-        #else
+-        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_1);
+-        #endif
+-      } else {
+-        {
+-          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4);
+-          #if !CYTHON_ASSUME_SAFE_MACROS
+-          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 388, __pyx_L1_error)
+-          #endif
+-          if (__pyx_t_6 >= __pyx_temp) break;
+-        }
+-        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 388, __pyx_L1_error)
+-        #else
+-        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_1);
+-        #endif
+-      }
+-    } else {
+-      __pyx_t_1 = __pyx_t_7(__pyx_t_4);
+-      if (unlikely(!__pyx_t_1)) {
+-        PyObject* exc_type = PyErr_Occurred();
+-        if (exc_type) {
+-          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+-          else __PYX_ERR(0, 388, __pyx_L1_error)
+-        }
+-        break;
+-      }
+-      __Pyx_GOTREF(__pyx_t_1);
+-    }
+-    __Pyx_XDECREF_SET(__pyx_v_m, __pyx_t_1);
+-    __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":389
+- *         methods = []
+- *         for m in _inspect.getmembers(obj):
+- *             if hasattr(m[1], '_method_spec'):             # <<<<<<<<<<<<<<
+- *                 for spec in m[1]._method_spec:
+- *                     methods.append(struct(spec=spec, name=m[1]))
+- */
+-    __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_m, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_t_2 = __Pyx_HasAttr(__pyx_t_1, __pyx_n_s_method_spec); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 389, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    if (__pyx_t_2) {
+-
+-      /* "pyliblo3/_liblo.pyx":390
+- *         for m in _inspect.getmembers(obj):
+- *             if hasattr(m[1], '_method_spec'):
+- *                 for spec in m[1]._method_spec:             # <<<<<<<<<<<<<<
+- *                     methods.append(struct(spec=spec, name=m[1]))
+- *         # sort by counter
+- */
+-      __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_m, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 390, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_method_spec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 390, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-      if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) {
+-        __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1);
+-        __pyx_t_8 = 0;
+-        __pyx_t_9 = NULL;
+-      } else {
+-        __pyx_t_8 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 390, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_1);
+-        __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 390, __pyx_L1_error)
+-      }
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      for (;;) {
+-        if (likely(!__pyx_t_9)) {
+-          if (likely(PyList_CheckExact(__pyx_t_1))) {
+-            {
+-              Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
+-              #if !CYTHON_ASSUME_SAFE_MACROS
+-              if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
+-              #endif
+-              if (__pyx_t_8 >= __pyx_temp) break;
+-            }
+-            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
+-            #else
+-            __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 390, __pyx_L1_error)
+-            __Pyx_GOTREF(__pyx_t_3);
+-            #endif
+-          } else {
+-            {
+-              Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
+-              #if !CYTHON_ASSUME_SAFE_MACROS
+-              if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
+-              #endif
+-              if (__pyx_t_8 >= __pyx_temp) break;
+-            }
+-            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_8); __Pyx_INCREF(__pyx_t_3); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(0, 390, __pyx_L1_error)
+-            #else
+-            __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 390, __pyx_L1_error)
+-            __Pyx_GOTREF(__pyx_t_3);
+-            #endif
+-          }
+-        } else {
+-          __pyx_t_3 = __pyx_t_9(__pyx_t_1);
+-          if (unlikely(!__pyx_t_3)) {
+-            PyObject* exc_type = PyErr_Occurred();
+-            if (exc_type) {
+-              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+-              else __PYX_ERR(0, 390, __pyx_L1_error)
+-            }
+-            break;
+-          }
+-          __Pyx_GOTREF(__pyx_t_3);
+-        }
+-        __Pyx_XDECREF_SET(__pyx_v_spec, __pyx_t_3);
+-        __pyx_t_3 = 0;
+-
+-        /* "pyliblo3/_liblo.pyx":391
+- *             if hasattr(m[1], '_method_spec'):
+- *                 for spec in m[1]._method_spec:
+- *                     methods.append(struct(spec=spec, name=m[1]))             # <<<<<<<<<<<<<<
+- *         # sort by counter
+- *         methods.sort(key=lambda x: x.spec.counter)
+- */
+-        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_struct); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 391, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_3);
+-        __pyx_t_10 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 391, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_10);
+-        if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_spec, __pyx_v_spec) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
+-        __pyx_t_11 = __Pyx_GetItemInt(__pyx_v_m, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 391, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_11);
+-        if (PyDict_SetItem(__pyx_t_10, __pyx_n_s_name, __pyx_t_11) < 0) __PYX_ERR(0, 391, __pyx_L1_error)
+-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+-        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 391, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_11);
+-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-        __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_methods, __pyx_t_11); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error)
+-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+-
+-        /* "pyliblo3/_liblo.pyx":390
+- *         for m in _inspect.getmembers(obj):
+- *             if hasattr(m[1], '_method_spec'):
+- *                 for spec in m[1]._method_spec:             # <<<<<<<<<<<<<<
+- *                     methods.append(struct(spec=spec, name=m[1]))
+- *         # sort by counter
+- */
+-      }
+-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-      /* "pyliblo3/_liblo.pyx":389
+- *         methods = []
+- *         for m in _inspect.getmembers(obj):
+- *             if hasattr(m[1], '_method_spec'):             # <<<<<<<<<<<<<<
+- *                 for spec in m[1]._method_spec:
+- *                     methods.append(struct(spec=spec, name=m[1]))
+- */
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":388
+- *         # find and register methods that were defined using decorators
+- *         methods = []
+- *         for m in _inspect.getmembers(obj):             # <<<<<<<<<<<<<<
+- *             if hasattr(m[1], '_method_spec'):
+- *                 for spec in m[1]._method_spec:
+- */
+-  }
+-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":393
+- *                     methods.append(struct(spec=spec, name=m[1]))
+- *         # sort by counter
+- *         methods.sort(key=lambda x: x.spec.counter)             # <<<<<<<<<<<<<<
+- *         for e in methods:
+- *             self.add_method(e.spec.path, e.spec.types, e.name, e.spec.user_data)
+- */
+-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_methods, __pyx_n_s_sort); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 393, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_11 = __Pyx_CyFunction_New(&__pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_16register_methods_lambda, 0, __pyx_n_s_register_methods_locals_lambda, NULL, __pyx_n_s_pyliblo3__liblo, __pyx_d, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 393, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_11);
+-  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_key, __pyx_t_11) < 0) __PYX_ERR(0, 393, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+-  __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 393, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_11);
+-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":394
+- *         # sort by counter
+- *         methods.sort(key=lambda x: x.spec.counter)
+- *         for e in methods:             # <<<<<<<<<<<<<<
+- *             self.add_method(e.spec.path, e.spec.types, e.name, e.spec.user_data)
+- * 
+- */
+-  __pyx_t_11 = __pyx_v_methods; __Pyx_INCREF(__pyx_t_11);
+-  __pyx_t_6 = 0;
+-  for (;;) {
+-    {
+-      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_11);
+-      #if !CYTHON_ASSUME_SAFE_MACROS
+-      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 394, __pyx_L1_error)
+-      #endif
+-      if (__pyx_t_6 >= __pyx_temp) break;
+-    }
+-    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_11, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(0, 394, __pyx_L1_error)
+-    #else
+-    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_11, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    #endif
+-    __Pyx_XDECREF_SET(__pyx_v_e, __pyx_t_1);
+-    __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":395
+- *         methods.sort(key=lambda x: x.spec.counter)
+- *         for e in methods:
+- *             self.add_method(e.spec.path, e.spec.types, e.name, e.spec.user_data)             # <<<<<<<<<<<<<<
+- * 
+- *     def get_url(self):
+- */
+-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_add_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_4);
+-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_e, __pyx_n_s_spec); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_10);
+-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_e, __pyx_n_s_spec); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_10);
+-    __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_types); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_13);
+-    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_e, __pyx_n_s_name); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_10);
+-    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_e, __pyx_n_s_spec); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_14);
+-    __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_user_data); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 395, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_15);
+-    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+-    __pyx_t_14 = NULL;
+-    __pyx_t_5 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_4))) {
+-      __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_4);
+-      if (likely(__pyx_t_14)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-        __Pyx_INCREF(__pyx_t_14);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_4, function);
+-        __pyx_t_5 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[5] = {__pyx_t_14, __pyx_t_3, __pyx_t_13, __pyx_t_10, __pyx_t_15};
+-      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 4+__pyx_t_5);
+-      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
+-      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 395, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    }
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":394
+- *         # sort by counter
+- *         methods.sort(key=lambda x: x.spec.counter)
+- *         for e in methods:             # <<<<<<<<<<<<<<
+- *             self.add_method(e.spec.path, e.spec.types, e.name, e.spec.user_data)
+- * 
+- */
+-  }
+-  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":373
+- *             raise RuntimeError("Server method called after free()")
+- * 
+- *     def register_methods(self, obj=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Called internally during init if reg_methods is True
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_XDECREF(__pyx_t_10);
+-  __Pyx_XDECREF(__pyx_t_11);
+-  __Pyx_XDECREF(__pyx_t_13);
+-  __Pyx_XDECREF(__pyx_t_14);
+-  __Pyx_XDECREF(__pyx_t_15);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.register_methods", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_methods);
+-  __Pyx_XDECREF(__pyx_v_m);
+-  __Pyx_XDECREF(__pyx_v_spec);
+-  __Pyx_XDECREF(__pyx_v_e);
+-  __Pyx_XDECREF(__pyx_v_obj);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":397
+- *             self.add_method(e.spec.path, e.spec.types, e.name, e.spec.user_data)
+- * 
+- *     def get_url(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Returns the url of the server
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_5get_url(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_4get_url, "_ServerBase.get_url(self)\n\n        Returns the url of the server\n\n        Returns:\n            (str) url of the server\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_5get_url = {"get_url", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_5get_url, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_4get_url};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_5get_url(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("get_url (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("get_url", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_url", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_4get_url(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_4get_url(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  char *__pyx_v_tmp;
+-  PyObject *__pyx_v_r = 0;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_url", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":404
+- *             (str) url of the server
+- *         """
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         cdef char *tmp = lo_server_get_url(self._server)
+- *         cdef object r = tmp
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self->__pyx_vtab)->_check(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":405
+- *         """
+- *         self._check()
+- *         cdef char *tmp = lo_server_get_url(self._server)             # <<<<<<<<<<<<<<
+- *         cdef object r = tmp
+- *         free(tmp)
+- */
+-  __pyx_v_tmp = lo_server_get_url(__pyx_v_self->_server);
+-
+-  /* "pyliblo3/_liblo.pyx":406
+- *         self._check()
+- *         cdef char *tmp = lo_server_get_url(self._server)
+- *         cdef object r = tmp             # <<<<<<<<<<<<<<
+- *         free(tmp)
+- *         return _decode(r)
+- */
+-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_tmp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_v_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":407
+- *         cdef char *tmp = lo_server_get_url(self._server)
+- *         cdef object r = tmp
+- *         free(tmp)             # <<<<<<<<<<<<<<
+- *         return _decode(r)
+- * 
+- */
+-  free(__pyx_v_tmp);
+-
+-  /* "pyliblo3/_liblo.pyx":408
+- *         cdef object r = tmp
+- *         free(tmp)
+- *         return _decode(r)             # <<<<<<<<<<<<<<
+- * 
+- *     def get_port(self):
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_v_r); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":397
+- *             self.add_method(e.spec.path, e.spec.types, e.name, e.spec.user_data)
+- * 
+- *     def get_url(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Returns the url of the server
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.get_url", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_r);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":410
+- *         return _decode(r)
+- * 
+- *     def get_port(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Returns the port number of this server
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_7get_port(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_6get_port, "_ServerBase.get_port(self)\n\n        Returns the port number of this server\n\n        Returns:\n            (int) port number\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_7get_port = {"get_port", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_7get_port, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_6get_port};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_7get_port(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("get_port (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("get_port", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_port", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_6get_port(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_6get_port(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_port", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":417
+- *             (int) port number
+- *         """
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         return lo_server_get_port(self._server)
+- * 
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self->__pyx_vtab)->_check(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":418
+- *         """
+- *         self._check()
+- *         return lo_server_get_port(self._server)             # <<<<<<<<<<<<<<
+- * 
+- *     def get_protocol(self):
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyInt_From_int(lo_server_get_port(__pyx_v_self->_server)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":410
+- *         return _decode(r)
+- * 
+- *     def get_port(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Returns the port number of this server
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.get_port", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":420
+- *         return lo_server_get_port(self._server)
+- * 
+- *     def get_protocol(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Returns the protocol of this server, as an int
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_9get_protocol(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_8get_protocol, "_ServerBase.get_protocol(self)\n\n        Returns the protocol of this server, as an int\n\n        This will be one of `LO_TCP`, `LO_TCP` or `LO_UNIX`\n\n        Returns:\n            (int) the protocol as an int\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_9get_protocol = {"get_protocol", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_9get_protocol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_8get_protocol};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_9get_protocol(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("get_protocol (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("get_protocol", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_protocol", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_8get_protocol(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_8get_protocol(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_protocol", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":429
+- *             (int) the protocol as an int
+- *         """
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         return lo_server_get_protocol(self._server)
+- * 
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self->__pyx_vtab)->_check(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":430
+- *         """
+- *         self._check()
+- *         return lo_server_get_protocol(self._server)             # <<<<<<<<<<<<<<
+- * 
+- *     def fileno(self):
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyInt_From_int(lo_server_get_protocol(__pyx_v_self->_server)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 430, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":420
+- *         return lo_server_get_port(self._server)
+- * 
+- *     def get_protocol(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Returns the protocol of this server, as an int
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.get_protocol", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":432
+- *         return lo_server_get_protocol(self._server)
+- * 
+- *     def fileno(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Return the file descriptor of the server socket
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_11fileno(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_10fileno, "_ServerBase.fileno(self)\n\n        Return the file descriptor of the server socket\n\n        Returns:\n            (int) the file descriptor, or -1 if not supported by the underlying server protocol\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_11fileno = {"fileno", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_11fileno, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_10fileno};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_11fileno(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("fileno (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("fileno", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "fileno", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_10fileno(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_10fileno(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("fileno", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":439
+- *             (int) the file descriptor, or -1 if not supported by the underlying server protocol
+- *         """
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         return lo_server_get_socket_fd(self._server)
+- * 
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self->__pyx_vtab)->_check(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 439, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":440
+- *         """
+- *         self._check()
+- *         return lo_server_get_socket_fd(self._server)             # <<<<<<<<<<<<<<
+- * 
+- *     def add_method(self, str path, str typespec, func, user_data=None):
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyInt_From_int(lo_server_get_socket_fd(__pyx_v_self->_server)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":432
+- *         return lo_server_get_protocol(self._server)
+- * 
+- *     def fileno(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Return the file descriptor of the server socket
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.fileno", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":442
+- *         return lo_server_get_socket_fd(self._server)
+- * 
+- *     def add_method(self, str path, str typespec, func, user_data=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Register a callback for OSC messages with matching path and argument types.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_13add_method(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_12add_method, "_ServerBase.add_method(self, str path, str typespec, func, user_data=None)\n\n        Register a callback for OSC messages with matching path and argument types.\n\n        Args:\n            path (str): the message path to be handled by the registered method.\n                `None` may be used as a wildcard to match any OSC message.\n            typespec (str): the argument types to be handled by the registered method.\n                `None` may be used as a wildcard to match any OSC message.\n            func: the callback function.  This may be a global function, a class\n                method, or any other callable object, pyliblo will know what\n                to do either way.\n            user_data: An arbitrary object that will be passed on to *func* every time\n                a matching message is received.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_13add_method = {"add_method", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_13add_method, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_12add_method};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_13add_method(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_path = 0;
+-  PyObject *__pyx_v_typespec = 0;
+-  PyObject *__pyx_v_func = 0;
+-  PyObject *__pyx_v_user_data = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[4] = {0,0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("add_method (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,&__pyx_n_s_typespec,&__pyx_n_s_func_3,&__pyx_n_s_user_data,0};
+-    values[3] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
+-        CYTHON_FALLTHROUGH;
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_path)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 442, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_typespec)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 442, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("add_method", 0, 3, 4, 1); __PYX_ERR(0, 442, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_func_3)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 442, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("add_method", 0, 3, 4, 2); __PYX_ERR(0, 442, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  3:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_data);
+-          if (value) { values[3] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 442, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "add_method") < 0)) __PYX_ERR(0, 442, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3);
+-        CYTHON_FALLTHROUGH;
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_path = ((PyObject*)values[0]);
+-    __pyx_v_typespec = ((PyObject*)values[1]);
+-    __pyx_v_func = values[2];
+-    __pyx_v_user_data = values[3];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("add_method", 0, 3, 4, __pyx_nargs); __PYX_ERR(0, 442, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.add_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_path), (&PyString_Type), 1, "path", 1))) __PYX_ERR(0, 442, __pyx_L1_error)
+-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_typespec), (&PyString_Type), 1, "typespec", 1))) __PYX_ERR(0, 442, __pyx_L1_error)
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_12add_method(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self), __pyx_v_path, __pyx_v_typespec, __pyx_v_func, __pyx_v_user_data);
+-
+-  /* function exit code */
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_12add_method(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_typespec, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
+-  char *__pyx_v_p;
+-  char *__pyx_v_t;
+-  PyObject *__pyx_v_s = NULL;
+-  PyObject *__pyx_v_s2 = NULL;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v_cb = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  char *__pyx_t_4;
+-  PyObject *__pyx_t_5 = NULL;
+-  int __pyx_t_6;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("add_method", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":460
+- *         cdef char *t
+- * 
+- *         if isinstance(path, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s = _encode(path)
+- *             p = s
+- */
+-  __pyx_t_2 = PyBytes_Check(__pyx_v_path); 
+-  if (!__pyx_t_2) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_2;
+-    goto __pyx_L4_bool_binop_done;
+-  }
+-  __pyx_t_2 = PyUnicode_Check(__pyx_v_path); 
+-  __pyx_t_1 = __pyx_t_2;
+-  __pyx_L4_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":461
+- * 
+- *         if isinstance(path, (bytes, unicode)):
+- *             s = _encode(path)             # <<<<<<<<<<<<<<
+- *             p = s
+- *         elif path is None:
+- */
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 461, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_v_s = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":462
+- *         if isinstance(path, (bytes, unicode)):
+- *             s = _encode(path)
+- *             p = s             # <<<<<<<<<<<<<<
+- *         elif path is None:
+- *             p = NULL
+- */
+-    if (unlikely(__pyx_v_s == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 462, __pyx_L1_error)
+-    }
+-    __pyx_t_4 = __Pyx_PyBytes_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 462, __pyx_L1_error)
+-    __pyx_v_p = __pyx_t_4;
+-
+-    /* "pyliblo3/_liblo.pyx":460
+- *         cdef char *t
+- * 
+- *         if isinstance(path, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s = _encode(path)
+- *             p = s
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":463
+- *             s = _encode(path)
+- *             p = s
+- *         elif path is None:             # <<<<<<<<<<<<<<
+- *             p = NULL
+- *         else:
+- */
+-  __pyx_t_1 = (__pyx_v_path == ((PyObject*)Py_None));
+-  if (likely(__pyx_t_1)) {
+-
+-    /* "pyliblo3/_liblo.pyx":464
+- *             p = s
+- *         elif path is None:
+- *             p = NULL             # <<<<<<<<<<<<<<
+- *         else:
+- *             raise TypeError("path must be a string or None")
+- */
+-    __pyx_v_p = NULL;
+-
+-    /* "pyliblo3/_liblo.pyx":463
+- *             s = _encode(path)
+- *             p = s
+- *         elif path is None:             # <<<<<<<<<<<<<<
+- *             p = NULL
+- *         else:
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":466
+- *             p = NULL
+- *         else:
+- *             raise TypeError("path must be a string or None")             # <<<<<<<<<<<<<<
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):
+- */
+-  /*else*/ {
+-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 466, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __PYX_ERR(0, 466, __pyx_L1_error)
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":468
+- *             raise TypeError("path must be a string or None")
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s2 = _encode(typespec)
+- *             t = s2
+- */
+-  __pyx_t_2 = PyBytes_Check(__pyx_v_typespec); 
+-  if (!__pyx_t_2) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_2;
+-    goto __pyx_L7_bool_binop_done;
+-  }
+-  __pyx_t_2 = PyUnicode_Check(__pyx_v_typespec); 
+-  __pyx_t_1 = __pyx_t_2;
+-  __pyx_L7_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":469
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):
+- *             s2 = _encode(typespec)             # <<<<<<<<<<<<<<
+- *             t = s2
+- *         elif typespec is None:
+- */
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_typespec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 469, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_v_s2 = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":470
+- *         if isinstance(typespec, (bytes, unicode)):
+- *             s2 = _encode(typespec)
+- *             t = s2             # <<<<<<<<<<<<<<
+- *         elif typespec is None:
+- *             t = NULL
+- */
+-    if (unlikely(__pyx_v_s2 == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 470, __pyx_L1_error)
+-    }
+-    __pyx_t_4 = __Pyx_PyBytes_AsWritableString(__pyx_v_s2); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 470, __pyx_L1_error)
+-    __pyx_v_t = __pyx_t_4;
+-
+-    /* "pyliblo3/_liblo.pyx":468
+- *             raise TypeError("path must be a string or None")
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s2 = _encode(typespec)
+- *             t = s2
+- */
+-    goto __pyx_L6;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":471
+- *             s2 = _encode(typespec)
+- *             t = s2
+- *         elif typespec is None:             # <<<<<<<<<<<<<<
+- *             t = NULL
+- *         else:
+- */
+-  __pyx_t_1 = (__pyx_v_typespec == ((PyObject*)Py_None));
+-  if (likely(__pyx_t_1)) {
+-
+-    /* "pyliblo3/_liblo.pyx":472
+- *             t = s2
+- *         elif typespec is None:
+- *             t = NULL             # <<<<<<<<<<<<<<
+- *         else:
+- *             raise TypeError("typespec must be a string or None")
+- */
+-    __pyx_v_t = NULL;
+-
+-    /* "pyliblo3/_liblo.pyx":471
+- *             s2 = _encode(typespec)
+- *             t = s2
+- *         elif typespec is None:             # <<<<<<<<<<<<<<
+- *             t = NULL
+- *         else:
+- */
+-    goto __pyx_L6;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":474
+- *             t = NULL
+- *         else:
+- *             raise TypeError("typespec must be a string or None")             # <<<<<<<<<<<<<<
+- * 
+- *         self._check()
+- */
+-  /*else*/ {
+-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 474, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __PYX_ERR(0, 474, __pyx_L1_error)
+-  }
+-  __pyx_L6:;
+-
+-  /* "pyliblo3/_liblo.pyx":476
+- *             raise TypeError("typespec must be a string or None")
+- * 
+- *         self._check()             # <<<<<<<<<<<<<<
+- * 
+- *         # use a weak reference if func is a method, to avoid circular
+- */
+-  __pyx_t_3 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self->__pyx_vtab)->_check(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 476, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":483
+- *         # class)
+- *         # cb = struct(func=_weakref_method(func), user_data=user_data)
+- *         cb = Callback(func, user_data)             # <<<<<<<<<<<<<<
+- *         # keep a reference to the callback data around
+- *         self._keep_refs.append(cb)
+- */
+-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 483, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_INCREF(__pyx_v_func);
+-  __Pyx_GIVEREF(__pyx_v_func);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_func)) __PYX_ERR(0, 483, __pyx_L1_error);
+-  __Pyx_INCREF(__pyx_v_user_data);
+-  __Pyx_GIVEREF(__pyx_v_user_data);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_user_data)) __PYX_ERR(0, 483, __pyx_L1_error);
+-  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo_Callback), __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 483, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_5);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __pyx_v_cb = ((struct __pyx_obj_8pyliblo3_6_liblo_Callback *)__pyx_t_5);
+-  __pyx_t_5 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":485
+- *         cb = Callback(func, user_data)
+- *         # keep a reference to the callback data around
+- *         self._keep_refs.append(cb)             # <<<<<<<<<<<<<<
+- * 
+- *         lo_server_add_method(self._server, p, t, _msg_callback, <void*>cb)
+- */
+-  if (unlikely(__pyx_v_self->_keep_refs == Py_None)) {
+-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
+-    __PYX_ERR(0, 485, __pyx_L1_error)
+-  }
+-  __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_self->_keep_refs, ((PyObject *)__pyx_v_cb)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 485, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":487
+- *         self._keep_refs.append(cb)
+- * 
+- *         lo_server_add_method(self._server, p, t, _msg_callback, <void*>cb)             # <<<<<<<<<<<<<<
+- * 
+- *     def del_method(self, path, typespec=None):
+- */
+-  (void)(lo_server_add_method(__pyx_v_self->_server, __pyx_v_p, __pyx_v_t, __pyx_f_8pyliblo3_6_liblo__msg_callback, ((void *)__pyx_v_cb)));
+-
+-  /* "pyliblo3/_liblo.pyx":442
+- *         return lo_server_get_socket_fd(self._server)
+- * 
+- *     def add_method(self, str path, str typespec, func, user_data=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Register a callback for OSC messages with matching path and argument types.
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.add_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_s);
+-  __Pyx_XDECREF(__pyx_v_s2);
+-  __Pyx_XDECREF((PyObject *)__pyx_v_cb);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":489
+- *         lo_server_add_method(self._server, p, t, _msg_callback, <void*>cb)
+- * 
+- *     def del_method(self, path, typespec=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Delete a callback function
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_15del_method(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_14del_method, "_ServerBase.del_method(self, path, typespec=None)\n\n        Delete a callback function\n\n        Delete a callback function.  For both *path* and *typespec*, `None`\n        may be used as a wildcard.\n\n        Args:\n            path (str | None): the method to delete\n            typespec (str | None): the typespec to match, or None to delete any\n                method matching the given path\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_15del_method = {"del_method", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_15del_method, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_14del_method};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_15del_method(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_path = 0;
+-  PyObject *__pyx_v_typespec = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[2] = {0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("del_method (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,&__pyx_n_s_typespec,0};
+-    values[1] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_path)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 489, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_typespec);
+-          if (value) { values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 489, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "del_method") < 0)) __PYX_ERR(0, 489, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_path = values[0];
+-    __pyx_v_typespec = values[1];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("del_method", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 489, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.del_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_14del_method(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self), __pyx_v_path, __pyx_v_typespec);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_14del_method(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_typespec) {
+-  char *__pyx_v_p;
+-  char *__pyx_v_t;
+-  PyObject *__pyx_v_s = NULL;
+-  PyObject *__pyx_v_s2 = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  char *__pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("del_method", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":504
+- *         cdef char *t
+- * 
+- *         if isinstance(path, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s = _encode(path)
+- *             p = s
+- */
+-  __pyx_t_2 = PyBytes_Check(__pyx_v_path); 
+-  if (!__pyx_t_2) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_2;
+-    goto __pyx_L4_bool_binop_done;
+-  }
+-  __pyx_t_2 = PyUnicode_Check(__pyx_v_path); 
+-  __pyx_t_1 = __pyx_t_2;
+-  __pyx_L4_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":505
+- * 
+- *         if isinstance(path, (bytes, unicode)):
+- *             s = _encode(path)             # <<<<<<<<<<<<<<
+- *             p = s
+- *         elif path == None:
+- */
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_v_s = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":506
+- *         if isinstance(path, (bytes, unicode)):
+- *             s = _encode(path)
+- *             p = s             # <<<<<<<<<<<<<<
+- *         elif path == None:
+- *             p = NULL
+- */
+-    if (unlikely(__pyx_v_s == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 506, __pyx_L1_error)
+-    }
+-    __pyx_t_4 = __Pyx_PyBytes_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 506, __pyx_L1_error)
+-    __pyx_v_p = __pyx_t_4;
+-
+-    /* "pyliblo3/_liblo.pyx":504
+- *         cdef char *t
+- * 
+- *         if isinstance(path, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s = _encode(path)
+- *             p = s
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":507
+- *             s = _encode(path)
+- *             p = s
+- *         elif path == None:             # <<<<<<<<<<<<<<
+- *             p = NULL
+- *         else:
+- */
+-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_path, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 507, __pyx_L1_error)
+-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 507, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  if (likely(__pyx_t_1)) {
+-
+-    /* "pyliblo3/_liblo.pyx":508
+- *             p = s
+- *         elif path == None:
+- *             p = NULL             # <<<<<<<<<<<<<<
+- *         else:
+- *             raise TypeError("path must be a string or None")
+- */
+-    __pyx_v_p = NULL;
+-
+-    /* "pyliblo3/_liblo.pyx":507
+- *             s = _encode(path)
+- *             p = s
+- *         elif path == None:             # <<<<<<<<<<<<<<
+- *             p = NULL
+- *         else:
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":510
+- *             p = NULL
+- *         else:
+- *             raise TypeError("path must be a string or None")             # <<<<<<<<<<<<<<
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):
+- */
+-  /*else*/ {
+-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 510, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __PYX_ERR(0, 510, __pyx_L1_error)
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":512
+- *             raise TypeError("path must be a string or None")
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s2 = _encode(typespec)
+- *             t = s2
+- */
+-  __pyx_t_2 = PyBytes_Check(__pyx_v_typespec); 
+-  if (!__pyx_t_2) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_2;
+-    goto __pyx_L7_bool_binop_done;
+-  }
+-  __pyx_t_2 = PyUnicode_Check(__pyx_v_typespec); 
+-  __pyx_t_1 = __pyx_t_2;
+-  __pyx_L7_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":513
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):
+- *             s2 = _encode(typespec)             # <<<<<<<<<<<<<<
+- *             t = s2
+- *         elif typespec == None:
+- */
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_typespec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 513, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_v_s2 = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":514
+- *         if isinstance(typespec, (bytes, unicode)):
+- *             s2 = _encode(typespec)
+- *             t = s2             # <<<<<<<<<<<<<<
+- *         elif typespec == None:
+- *             t = NULL
+- */
+-    if (unlikely(__pyx_v_s2 == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 514, __pyx_L1_error)
+-    }
+-    __pyx_t_4 = __Pyx_PyBytes_AsWritableString(__pyx_v_s2); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 514, __pyx_L1_error)
+-    __pyx_v_t = __pyx_t_4;
+-
+-    /* "pyliblo3/_liblo.pyx":512
+- *             raise TypeError("path must be a string or None")
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s2 = _encode(typespec)
+- *             t = s2
+- */
+-    goto __pyx_L6;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":515
+- *             s2 = _encode(typespec)
+- *             t = s2
+- *         elif typespec == None:             # <<<<<<<<<<<<<<
+- *             t = NULL
+- *         else:
+- */
+-  __pyx_t_3 = PyObject_RichCompare(__pyx_v_typespec, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error)
+-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 515, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  if (likely(__pyx_t_1)) {
+-
+-    /* "pyliblo3/_liblo.pyx":516
+- *             t = s2
+- *         elif typespec == None:
+- *             t = NULL             # <<<<<<<<<<<<<<
+- *         else:
+- *             raise TypeError("typespec must be a string or None")
+- */
+-    __pyx_v_t = NULL;
+-
+-    /* "pyliblo3/_liblo.pyx":515
+- *             s2 = _encode(typespec)
+- *             t = s2
+- *         elif typespec == None:             # <<<<<<<<<<<<<<
+- *             t = NULL
+- *         else:
+- */
+-    goto __pyx_L6;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":518
+- *             t = NULL
+- *         else:
+- *             raise TypeError("typespec must be a string or None")             # <<<<<<<<<<<<<<
+- * 
+- *         self._check()
+- */
+-  /*else*/ {
+-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 518, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __PYX_ERR(0, 518, __pyx_L1_error)
+-  }
+-  __pyx_L6:;
+-
+-  /* "pyliblo3/_liblo.pyx":520
+- *             raise TypeError("typespec must be a string or None")
+- * 
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         lo_server_del_method(self._server, p, t)
+- * 
+- */
+-  __pyx_t_3 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self->__pyx_vtab)->_check(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 520, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":521
+- * 
+- *         self._check()
+- *         lo_server_del_method(self._server, p, t)             # <<<<<<<<<<<<<<
+- * 
+- *     def add_bundle_handlers(self, start_handler, end_handler, user_data=None):
+- */
+-  lo_server_del_method(__pyx_v_self->_server, __pyx_v_p, __pyx_v_t);
+-
+-  /* "pyliblo3/_liblo.pyx":489
+- *         lo_server_add_method(self._server, p, t, _msg_callback, <void*>cb)
+- * 
+- *     def del_method(self, path, typespec=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Delete a callback function
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.del_method", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_s);
+-  __Pyx_XDECREF(__pyx_v_s2);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":523
+- *         lo_server_del_method(self._server, p, t)
+- * 
+- *     def add_bundle_handlers(self, start_handler, end_handler, user_data=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Add bundle notification handlers.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_17add_bundle_handlers(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_16add_bundle_handlers, "_ServerBase.add_bundle_handlers(self, start_handler, end_handler, user_data=None)\n\n        Add bundle notification handlers.\n\n        Args:\n            start_handler: a callback which fires when at the start of a bundle. This is\n                called with the bundle's timestamp and user_data.\n            end_handler: a callback which fires when at the end of a bundle. This is called\n                with user_data.\n            user_data: data to pass to the handlers.\n\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_17add_bundle_handlers = {"add_bundle_handlers", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_17add_bundle_handlers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_16add_bundle_handlers};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_17add_bundle_handlers(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_start_handler = 0;
+-  PyObject *__pyx_v_end_handler = 0;
+-  PyObject *__pyx_v_user_data = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[3] = {0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("add_bundle_handlers (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start_handler,&__pyx_n_s_end_handler,&__pyx_n_s_user_data,0};
+-    values[2] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_start_handler)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 523, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_end_handler)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 523, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("add_bundle_handlers", 0, 2, 3, 1); __PYX_ERR(0, 523, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_user_data);
+-          if (value) { values[2] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 523, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "add_bundle_handlers") < 0)) __PYX_ERR(0, 523, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_start_handler = values[0];
+-    __pyx_v_end_handler = values[1];
+-    __pyx_v_user_data = values[2];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("add_bundle_handlers", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 523, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.add_bundle_handlers", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_16add_bundle_handlers(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self), __pyx_v_start_handler, __pyx_v_end_handler, __pyx_v_user_data);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_16add_bundle_handlers(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_start_handler, PyObject *__pyx_v_end_handler, PyObject *__pyx_v_user_data) {
+-  PyObject *__pyx_v_cb_data = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  PyObject *__pyx_t_5 = NULL;
+-  int __pyx_t_6;
+-  int __pyx_t_7;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("add_bundle_handlers", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":535
+- * 
+- *         """
+- *         cb_data = struct(start_func=_weakref_method(start_handler),             # <<<<<<<<<<<<<<
+- *                          end_func=_weakref_method(end_handler),
+- *                          user_data=user_data)
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_struct); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 535, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 535, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_weakref_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 535, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __pyx_t_5 = NULL;
+-  __pyx_t_6 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_4))) {
+-    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+-    if (likely(__pyx_t_5)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-      __Pyx_INCREF(__pyx_t_5);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_4, function);
+-      __pyx_t_6 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_start_handler};
+-    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
+-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 535, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-  }
+-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start_func, __pyx_t_3) < 0) __PYX_ERR(0, 535, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":536
+- *         """
+- *         cb_data = struct(start_func=_weakref_method(start_handler),
+- *                          end_func=_weakref_method(end_handler),             # <<<<<<<<<<<<<<
+- *                          user_data=user_data)
+- *         self._keep_refs.append(cb_data)
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_weakref_method); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 536, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_4);
+-  __pyx_t_5 = NULL;
+-  __pyx_t_6 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (unlikely(PyMethod_Check(__pyx_t_4))) {
+-    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+-    if (likely(__pyx_t_5)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-      __Pyx_INCREF(__pyx_t_5);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_4, function);
+-      __pyx_t_6 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_end_handler};
+-    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
+-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 536, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-  }
+-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_end_func, __pyx_t_3) < 0) __PYX_ERR(0, 535, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":537
+- *         cb_data = struct(start_func=_weakref_method(start_handler),
+- *                          end_func=_weakref_method(end_handler),
+- *                          user_data=user_data)             # <<<<<<<<<<<<<<
+- *         self._keep_refs.append(cb_data)
+- * 
+- */
+-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_user_data, __pyx_v_user_data) < 0) __PYX_ERR(0, 535, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":535
+- * 
+- *         """
+- *         cb_data = struct(start_func=_weakref_method(start_handler),             # <<<<<<<<<<<<<<
+- *                          end_func=_weakref_method(end_handler),
+- *                          user_data=user_data)
+- */
+-  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 535, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  __pyx_v_cb_data = __pyx_t_3;
+-  __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":538
+- *                          end_func=_weakref_method(end_handler),
+- *                          user_data=user_data)
+- *         self._keep_refs.append(cb_data)             # <<<<<<<<<<<<<<
+- * 
+- *         lo_server_add_bundle_handlers(self._server, _bundle_start_callback,
+- */
+-  if (unlikely(__pyx_v_self->_keep_refs == Py_None)) {
+-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
+-    __PYX_ERR(0, 538, __pyx_L1_error)
+-  }
+-  __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_self->_keep_refs, __pyx_v_cb_data); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 538, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":540
+- *         self._keep_refs.append(cb_data)
+- * 
+- *         lo_server_add_bundle_handlers(self._server, _bundle_start_callback,             # <<<<<<<<<<<<<<
+- *                                       _bundle_end_callback, <void*>cb_data)
+- * 
+- */
+-  (void)(lo_server_add_bundle_handlers(__pyx_v_self->_server, __pyx_f_8pyliblo3_6_liblo__bundle_start_callback, __pyx_f_8pyliblo3_6_liblo__bundle_end_callback, ((void *)__pyx_v_cb_data)));
+-
+-  /* "pyliblo3/_liblo.pyx":523
+- *         lo_server_del_method(self._server, p, t)
+- * 
+- *     def add_bundle_handlers(self, start_handler, end_handler, user_data=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Add bundle notification handlers.
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.add_bundle_handlers", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_cb_data);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":543
+- *                                       _bundle_end_callback, <void*>cb_data)
+- * 
+- *     def send(self, target, *args):             # <<<<<<<<<<<<<<
+- *         """
+- *         Send a message or bundle from this server to the the given target.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_19send(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_18send, "_ServerBase.send(self, target, *args)\n\n        Send a message or bundle from this server to the the given target.\n\n        * `send(target, *messages)`\n        * `send(target, path, *args)`\n\n        Send a message or bundle from this server to the the given target.\n        Arguments may be one or more `Message` or `Bundle`\n        objects, or a single message given by its path and optional arguments.\n\n        Args:\n            target (Address | tuple[str, int] | str): the address to send the message to;\n                an `Address` object, a port number, a `(hostname, port)` tuple, or a URL.\n            messages (Message | Bundle): one or more objects of type `Message` or `Bundle`.\n            path (str): the path of the message to be sent.\n\n        Raises:\n            AddressError: if the given target is invalid.\n            IOError: if the message couldn't be sent.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_19send = {"send", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_19send, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_18send};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_19send(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_target = 0;
+-  PyObject *__pyx_v_args = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("send (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  __pyx_v_args = __Pyx_ArgsSlice_FASTCALL(__pyx_args, 1, __pyx_nargs);
+-  if (unlikely(!__pyx_v_args)) {
+-    __Pyx_RefNannyFinishContext();
+-    return NULL;
+-  }
+-  __Pyx_GOTREF(__pyx_v_args);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_target,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        default:
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_target)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 543, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        const Py_ssize_t used_pos_args = (kwd_pos_args < 1) ? kwd_pos_args : 1;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, used_pos_args, "send") < 0)) __PYX_ERR(0, 543, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs < 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_target = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("send", 0, 1, 1, __pyx_nargs); __PYX_ERR(0, 543, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.send", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_18send(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self), __pyx_v_target, __pyx_v_args);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_args);
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_18send(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, PyObject *__pyx_v_target, PyObject *__pyx_v_args) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("send", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":564
+- *             IOError: if the message couldn't be sent.
+- *         """
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         _send(target, self, args)
+- * 
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self->__pyx_vtab)->_check(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":565
+- *         """
+- *         self._check()
+- *         _send(target, self, args)             # <<<<<<<<<<<<<<
+- * 
+- *     property url:
+- */
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__send(__pyx_v_target, __pyx_v_self, __pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":543
+- *                                       _bundle_end_callback, <void*>cb_data)
+- * 
+- *     def send(self, target, *args):             # <<<<<<<<<<<<<<
+- *         """
+- *         Send a message or bundle from this server to the the given target.
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.send", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":571
+- *         The server's URL.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_url()
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_3url_1__get__(PyObject *__pyx_v_self); /*proto*/
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_3url_1__get__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_3url___get__(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_3url___get__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__get__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":572
+- *         """
+- *         def __get__(self):
+- *             return self.get_url()             # <<<<<<<<<<<<<<
+- * 
+- *     property port:
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_url); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 572, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 572, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":571
+- *         The server's URL.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_url()
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.url.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":578
+- *         The server's port number (int)
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_port()
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_4port_1__get__(PyObject *__pyx_v_self); /*proto*/
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_4port_1__get__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_4port___get__(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_4port___get__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__get__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":579
+- *         """
+- *         def __get__(self):
+- *             return self.get_port()             # <<<<<<<<<<<<<<
+- * 
+- *     property protocol:
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_port); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 579, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":578
+- *         The server's port number (int)
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_port()
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.port.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":585
+- *         The server's protocol (one of the constants `LO_UDP`, `LO_TCP` or `LO_UNIX`).
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_protocol()
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_8protocol_1__get__(PyObject *__pyx_v_self); /*proto*/
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_8protocol_1__get__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_8protocol___get__(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_8protocol___get__(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__get__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":586
+- *         """
+- *         def __get__(self):
+- *             return self.get_protocol()             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 586, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 586, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":585
+- *         The server's protocol (one of the constants `LO_UDP`, `LO_TCP` or `LO_UNIX`).
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_protocol()
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.protocol.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_21__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_20__reduce_cython__, "_ServerBase.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_21__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_21__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_20__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_21__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_20__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":2
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__server_cannot_be_converted, 0, 0);
+-  __PYX_ERR(2, 2, __pyx_L1_error)
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_23__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_11_ServerBase_22__setstate_cython__, "_ServerBase.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_11_ServerBase_23__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_23__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_22__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_23__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 3, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_11_ServerBase_22__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_11_ServerBase_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":4
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__server_cannot_be_converted, 0, 0);
+-  __PYX_ERR(2, 4, __pyx_L1_error)
+-
+-  /* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo._ServerBase.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":608
+- * 
+- *     """
+- *     def __init__(self, port=None, proto=LO_DEFAULT, reg_methods=True):             # <<<<<<<<<<<<<<
+- *         cdef char *cs
+- * 
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_6Server_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_6Server_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_port = 0;
+-  PyObject *__pyx_v_proto = 0;
+-  PyObject *__pyx_v_reg_methods = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[3] = {0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_port,&__pyx_n_s_proto,&__pyx_n_s_reg_methods,0};
+-    values[0] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_None));
+-    values[1] = __Pyx_Arg_NewRef_VARARGS(__pyx_k__4);
+-    values[2] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_True));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_port);
+-          if (value) { values[0] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 608, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_proto);
+-          if (value) { values[1] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 608, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reg_methods);
+-          if (value) { values[2] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 608, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 608, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_port = values[0];
+-    __pyx_v_proto = values[1];
+-    __pyx_v_reg_methods = values[2];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 608, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Server.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return -1;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Server___init__(((struct __pyx_obj_8pyliblo3_6_liblo_Server *)__pyx_v_self), __pyx_v_port, __pyx_v_proto, __pyx_v_reg_methods);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_6Server___init__(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self, PyObject *__pyx_v_port, PyObject *__pyx_v_proto, PyObject *__pyx_v_reg_methods) {
+-  char *__pyx_v_cs;
+-  PyObject *__pyx_v_p = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  char *__pyx_t_4;
+-  PyObject *__pyx_t_5 = NULL;
+-  int __pyx_t_6;
+-  PyObject *__pyx_t_7 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 0);
+-  __Pyx_INCREF(__pyx_v_proto);
+-
+-  /* "pyliblo3/_liblo.pyx":611
+- *         cdef char *cs
+- * 
+- *         if port != None:             # <<<<<<<<<<<<<<
+- *             p = _encode(str(port));
+- *             cs = p
+- */
+-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_port, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 611, __pyx_L1_error)
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 611, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":612
+- * 
+- *         if port != None:
+- *             p = _encode(str(port));             # <<<<<<<<<<<<<<
+- *             cs = p
+- *         else:
+- */
+-    __pyx_t_1 = __Pyx_PyObject_Str(__pyx_v_port); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 612, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 612, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __pyx_v_p = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":613
+- *         if port != None:
+- *             p = _encode(str(port));
+- *             cs = p             # <<<<<<<<<<<<<<
+- *         else:
+- *             cs = NULL
+- */
+-    if (unlikely(__pyx_v_p == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 613, __pyx_L1_error)
+-    }
+-    __pyx_t_4 = __Pyx_PyBytes_AsWritableString(__pyx_v_p); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 613, __pyx_L1_error)
+-    __pyx_v_cs = __pyx_t_4;
+-
+-    /* "pyliblo3/_liblo.pyx":611
+- *         cdef char *cs
+- * 
+- *         if port != None:             # <<<<<<<<<<<<<<
+- *             p = _encode(str(port));
+- *             cs = p
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":615
+- *             cs = p
+- *         else:
+- *             cs = NULL             # <<<<<<<<<<<<<<
+- * 
+- *         if isinstance(proto, str):
+- */
+-  /*else*/ {
+-    __pyx_v_cs = NULL;
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":617
+- *             cs = NULL
+- * 
+- *         if isinstance(proto, str):             # <<<<<<<<<<<<<<
+- *             proto = _protostr_to_int(proto)
+- * 
+- */
+-  __pyx_t_2 = PyString_Check(__pyx_v_proto); 
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":618
+- * 
+- *         if isinstance(proto, str):
+- *             proto = _protostr_to_int(proto)             # <<<<<<<<<<<<<<
+- * 
+- *         global __exception
+- */
+-    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_protostr_to_int); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 618, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_t_5 = NULL;
+-    __pyx_t_6 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (unlikely(PyMethod_Check(__pyx_t_1))) {
+-      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
+-      if (likely(__pyx_t_5)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+-        __Pyx_INCREF(__pyx_t_5);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_1, function);
+-        __pyx_t_6 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_proto};
+-      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
+-      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 618, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    }
+-    __Pyx_DECREF_SET(__pyx_v_proto, __pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":617
+- *             cs = NULL
+- * 
+- *         if isinstance(proto, str):             # <<<<<<<<<<<<<<
+- *             proto = _protostr_to_int(proto)
+- * 
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":621
+- * 
+- *         global __exception
+- *         __exception = None             # <<<<<<<<<<<<<<
+- *         self._server = lo_server_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:
+- */
+-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_exception, Py_None) < 0) __PYX_ERR(0, 621, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":622
+- *         global __exception
+- *         __exception = None
+- *         self._server = lo_server_new_with_proto(cs, proto, _err_handler)             # <<<<<<<<<<<<<<
+- *         if __exception:
+- *             raise __exception
+- */
+-  __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_proto); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 622, __pyx_L1_error)
+-  __pyx_v_self->__pyx_base._server = lo_server_new_with_proto(__pyx_v_cs, __pyx_t_6, __pyx_f_8pyliblo3_6_liblo__err_handler);
+-
+-  /* "pyliblo3/_liblo.pyx":623
+- *         __exception = None
+- *         self._server = lo_server_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:             # <<<<<<<<<<<<<<
+- *             raise __exception
+- * 
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 623, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 623, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  if (unlikely(__pyx_t_2)) {
+-
+-    /* "pyliblo3/_liblo.pyx":624
+- *         self._server = lo_server_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:
+- *             raise __exception             # <<<<<<<<<<<<<<
+- * 
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)
+- */
+-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 624, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __PYX_ERR(0, 624, __pyx_L1_error)
+-
+-    /* "pyliblo3/_liblo.pyx":623
+- *         __exception = None
+- *         self._server = lo_server_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:             # <<<<<<<<<<<<<<
+- *             raise __exception
+- * 
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":626
+- *             raise __exception
+- * 
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)             # <<<<<<<<<<<<<<
+- * 
+- *     def __dealloc__(self):
+- */
+-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo__ServerBase), __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 626, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 626, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_INCREF((PyObject *)__pyx_v_self);
+-  __Pyx_GIVEREF((PyObject *)__pyx_v_self);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self))) __PYX_ERR(0, 626, __pyx_L1_error);
+-  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 626, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_5);
+-  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_reg_methods, __pyx_v_reg_methods) < 0) __PYX_ERR(0, 626, __pyx_L1_error)
+-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 626, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_7);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":608
+- * 
+- *     """
+- *     def __init__(self, port=None, proto=LO_DEFAULT, reg_methods=True):             # <<<<<<<<<<<<<<
+- *         cdef char *cs
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_5);
+-  __Pyx_XDECREF(__pyx_t_7);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Server.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_p);
+-  __Pyx_XDECREF(__pyx_v_proto);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":628
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         self.free()
+- * 
+- */
+-
+-/* Python wrapper */
+-static void __pyx_pw_8pyliblo3_6_liblo_6Server_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+-static void __pyx_pw_8pyliblo3_6_liblo_6Server_3__dealloc__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_pf_8pyliblo3_6_liblo_6Server_2__dealloc__(((struct __pyx_obj_8pyliblo3_6_liblo_Server *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-static void __pyx_pf_8pyliblo3_6_liblo_6Server_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self) {
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__dealloc__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":629
+- * 
+- *     def __dealloc__(self):
+- *         self.free()             # <<<<<<<<<<<<<<
+- * 
+- *     def free(self):
+- */
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_free); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 629, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":628
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         self.free()
+- * 
+- */
+-
+-  /* function exit code */
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_WriteUnraisable("pyliblo3._liblo.Server.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+-  __pyx_L0:;
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-/* "pyliblo3/_liblo.pyx":631
+- *         self.free()
+- * 
+- *     def free(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Free the underlying server object and close its port.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_5free(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6Server_4free, "Server.free(self)\n\n        Free the underlying server object and close its port.\n\n        Note that this will also happen automatically when the server is deallocated.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6Server_5free = {"free", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_5free, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_4free};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_5free(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("free (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("free", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "free", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Server_4free(((struct __pyx_obj_8pyliblo3_6_liblo_Server *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_4free(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  __Pyx_RefNannySetupContext("free", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":637
+- *         Note that this will also happen automatically when the server is deallocated.
+- *         """
+- *         if self._server:             # <<<<<<<<<<<<<<
+- *             lo_server_free(self._server)
+- *             self._server = NULL
+- */
+-  __pyx_t_1 = (__pyx_v_self->__pyx_base._server != 0);
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":638
+- *         """
+- *         if self._server:
+- *             lo_server_free(self._server)             # <<<<<<<<<<<<<<
+- *             self._server = NULL
+- * 
+- */
+-    lo_server_free(__pyx_v_self->__pyx_base._server);
+-
+-    /* "pyliblo3/_liblo.pyx":639
+- *         if self._server:
+- *             lo_server_free(self._server)
+- *             self._server = NULL             # <<<<<<<<<<<<<<
+- * 
+- *     def recv(self, timeout=None):
+- */
+-    __pyx_v_self->__pyx_base._server = NULL;
+-
+-    /* "pyliblo3/_liblo.pyx":637
+- *         Note that this will also happen automatically when the server is deallocated.
+- *         """
+- *         if self._server:             # <<<<<<<<<<<<<<
+- *             lo_server_free(self._server)
+- *             self._server = NULL
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":631
+- *         self.free()
+- * 
+- *     def free(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Free the underlying server object and close its port.
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":641
+- *             self._server = NULL
+- * 
+- *     def recv(self, timeout=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Receive and dispatch one OSC message.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_7recv(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6Server_6recv, "Server.recv(self, timeout=None)\n\n        Receive and dispatch one OSC message.\n\n        Blocking by default, unless *timeout* is specified.\n\n        Args:\n            timeout (int, float): Time in milliseconds after which the function returns if no\n                messages have been received. May be 0, in which case the function always returns\n                immediately, whether messages have been received or not.\n\n        Returns:\n            `True` if a message was received, otherwise `False`.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6Server_7recv = {"recv", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_7recv, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_6recv};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_7recv(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_timeout = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("recv (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_timeout,0};
+-    values[0] = __Pyx_Arg_NewRef_FASTCALL(((PyObject *)Py_None));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_timeout);
+-          if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 641, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "recv") < 0)) __PYX_ERR(0, 641, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_timeout = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("recv", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 641, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Server.recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Server_6recv(((struct __pyx_obj_8pyliblo3_6_liblo_Server *)__pyx_v_self), __pyx_v_timeout);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_6recv(struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self, PyObject *__pyx_v_timeout) {
+-  int __pyx_v_t;
+-  int __pyx_v_r;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  int __pyx_t_3;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("recv", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":656
+- *         """
+- *         cdef int t, r
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         if timeout != None:
+- *             t = timeout
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo_Server *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._check(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 656, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":657
+- *         cdef int t, r
+- *         self._check()
+- *         if timeout != None:             # <<<<<<<<<<<<<<
+- *             t = timeout
+- *             with nogil:
+- */
+-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_timeout, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 657, __pyx_L1_error)
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 657, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":658
+- *         self._check()
+- *         if timeout != None:
+- *             t = timeout             # <<<<<<<<<<<<<<
+- *             with nogil:
+- *                 r = lo_server_recv_noblock(self._server, t)
+- */
+-    __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_timeout); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 658, __pyx_L1_error)
+-    __pyx_v_t = __pyx_t_3;
+-
+-    /* "pyliblo3/_liblo.pyx":659
+- *         if timeout != None:
+- *             t = timeout
+- *             with nogil:             # <<<<<<<<<<<<<<
+- *                 r = lo_server_recv_noblock(self._server, t)
+- *             return r and True or False
+- */
+-    {
+-        #ifdef WITH_THREAD
+-        PyThreadState *_save;
+-        _save = NULL;
+-        Py_UNBLOCK_THREADS
+-        __Pyx_FastGIL_Remember();
+-        #endif
+-        /*try:*/ {
+-
+-          /* "pyliblo3/_liblo.pyx":660
+- *             t = timeout
+- *             with nogil:
+- *                 r = lo_server_recv_noblock(self._server, t)             # <<<<<<<<<<<<<<
+- *             return r and True or False
+- *         else:
+- */
+-          __pyx_v_r = lo_server_recv_noblock(__pyx_v_self->__pyx_base._server, __pyx_v_t);
+-        }
+-
+-        /* "pyliblo3/_liblo.pyx":659
+- *         if timeout != None:
+- *             t = timeout
+- *             with nogil:             # <<<<<<<<<<<<<<
+- *                 r = lo_server_recv_noblock(self._server, t)
+- *             return r and True or False
+- */
+-        /*finally:*/ {
+-          /*normal exit:*/{
+-            #ifdef WITH_THREAD
+-            __Pyx_FastGIL_Forget();
+-            Py_BLOCK_THREADS
+-            #endif
+-            goto __pyx_L6;
+-          }
+-          __pyx_L6:;
+-        }
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":661
+- *             with nogil:
+- *                 r = lo_server_recv_noblock(self._server, t)
+- *             return r and True or False             # <<<<<<<<<<<<<<
+- *         else:
+- *             with nogil:
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    if (!__pyx_v_r) {
+-      goto __pyx_L8_next_or;
+-    } else {
+-    }
+-    if (!1) {
+-    } else {
+-      __pyx_t_4 = __Pyx_PyBool_FromLong(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 661, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_4);
+-      __pyx_t_1 = __pyx_t_4;
+-      __pyx_t_4 = 0;
+-      goto __pyx_L7_bool_binop_done;
+-    }
+-    __pyx_L8_next_or:;
+-    __pyx_t_4 = __Pyx_PyBool_FromLong(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 661, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_4);
+-    __pyx_t_1 = __pyx_t_4;
+-    __pyx_t_4 = 0;
+-    __pyx_L7_bool_binop_done:;
+-    __pyx_r = __pyx_t_1;
+-    __pyx_t_1 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":657
+- *         cdef int t, r
+- *         self._check()
+- *         if timeout != None:             # <<<<<<<<<<<<<<
+- *             t = timeout
+- *             with nogil:
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":663
+- *             return r and True or False
+- *         else:
+- *             with nogil:             # <<<<<<<<<<<<<<
+- *                 lo_server_recv(self._server)
+- *             return True
+- */
+-  /*else*/ {
+-    {
+-        #ifdef WITH_THREAD
+-        PyThreadState *_save;
+-        _save = NULL;
+-        Py_UNBLOCK_THREADS
+-        __Pyx_FastGIL_Remember();
+-        #endif
+-        /*try:*/ {
+-
+-          /* "pyliblo3/_liblo.pyx":664
+- *         else:
+- *             with nogil:
+- *                 lo_server_recv(self._server)             # <<<<<<<<<<<<<<
+- *             return True
+- * 
+- */
+-          (void)(lo_server_recv(__pyx_v_self->__pyx_base._server));
+-        }
+-
+-        /* "pyliblo3/_liblo.pyx":663
+- *             return r and True or False
+- *         else:
+- *             with nogil:             # <<<<<<<<<<<<<<
+- *                 lo_server_recv(self._server)
+- *             return True
+- */
+-        /*finally:*/ {
+-          /*normal exit:*/{
+-            #ifdef WITH_THREAD
+-            __Pyx_FastGIL_Forget();
+-            Py_BLOCK_THREADS
+-            #endif
+-            goto __pyx_L12;
+-          }
+-          __pyx_L12:;
+-        }
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":665
+- *             with nogil:
+- *                 lo_server_recv(self._server)
+- *             return True             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __Pyx_INCREF(Py_True);
+-    __pyx_r = Py_True;
+-    goto __pyx_L0;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":641
+- *             self._server = NULL
+- * 
+- *     def recv(self, timeout=None):             # <<<<<<<<<<<<<<
+- *         """
+- *         Receive and dispatch one OSC message.
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Server.recv", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_9__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6Server_8__reduce_cython__, "Server.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6Server_9__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_9__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_8__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_9__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Server_8__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Server *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_8__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":2
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__server_cannot_be_converted, 0, 0);
+-  __PYX_ERR(2, 2, __pyx_L1_error)
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Server.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_11__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6Server_10__setstate_cython__, "Server.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6Server_11__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_11__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_10__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Server_11__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 3, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Server.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Server_10__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Server *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Server_10__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Server *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":4
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__server_cannot_be_converted, 0, 0);
+-  __PYX_ERR(2, 4, __pyx_L1_error)
+-
+-  /* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server cannot be converted to a Python object for pickling"
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Server.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":699
+- *     cdef lo_server_thread _server_thread
+- * 
+- *     def __init__(self, port=None, proto=LO_DEFAULT, reg_methods=True):             # <<<<<<<<<<<<<<
+- *         cdef char *cs
+- * 
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_12ServerThread_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_12ServerThread_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_port = 0;
+-  PyObject *__pyx_v_proto = 0;
+-  PyObject *__pyx_v_reg_methods = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[3] = {0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_port,&__pyx_n_s_proto,&__pyx_n_s_reg_methods,0};
+-    values[0] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_None));
+-    values[1] = __Pyx_Arg_NewRef_VARARGS(__pyx_k__5);
+-    values[2] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_True));
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_port);
+-          if (value) { values[0] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 699, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_proto);
+-          if (value) { values[1] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 699, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_reg_methods);
+-          if (value) { values[2] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 699, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 699, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_port = values[0];
+-    __pyx_v_proto = values[1];
+-    __pyx_v_reg_methods = values[2];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 3, __pyx_nargs); __PYX_ERR(0, 699, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerThread.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return -1;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12ServerThread___init__(((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self), __pyx_v_port, __pyx_v_proto, __pyx_v_reg_methods);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_12ServerThread___init__(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self, PyObject *__pyx_v_port, PyObject *__pyx_v_proto, PyObject *__pyx_v_reg_methods) {
+-  char *__pyx_v_cs;
+-  PyObject *__pyx_v_p = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  char *__pyx_t_4;
+-  int __pyx_t_5;
+-  PyObject *__pyx_t_6 = NULL;
+-  PyObject *__pyx_t_7 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":702
+- *         cdef char *cs
+- * 
+- *         if port != None:             # <<<<<<<<<<<<<<
+- *             p = _encode(str(port));
+- *             cs = p
+- */
+-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_port, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 702, __pyx_L1_error)
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 702, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":703
+- * 
+- *         if port != None:
+- *             p = _encode(str(port));             # <<<<<<<<<<<<<<
+- *             cs = p
+- *         else:
+- */
+-    __pyx_t_1 = __Pyx_PyObject_Str(__pyx_v_port); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 703, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 703, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __pyx_v_p = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":704
+- *         if port != None:
+- *             p = _encode(str(port));
+- *             cs = p             # <<<<<<<<<<<<<<
+- *         else:
+- *             cs = NULL
+- */
+-    if (unlikely(__pyx_v_p == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 704, __pyx_L1_error)
+-    }
+-    __pyx_t_4 = __Pyx_PyBytes_AsWritableString(__pyx_v_p); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) __PYX_ERR(0, 704, __pyx_L1_error)
+-    __pyx_v_cs = __pyx_t_4;
+-
+-    /* "pyliblo3/_liblo.pyx":702
+- *         cdef char *cs
+- * 
+- *         if port != None:             # <<<<<<<<<<<<<<
+- *             p = _encode(str(port));
+- *             cs = p
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":706
+- *             cs = p
+- *         else:
+- *             cs = NULL             # <<<<<<<<<<<<<<
+- * 
+- *         # make sure python can handle threading
+- */
+-  /*else*/ {
+-    __pyx_v_cs = NULL;
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":709
+- * 
+- *         # make sure python can handle threading
+- *         PyEval_InitThreads()             # <<<<<<<<<<<<<<
+- * 
+- *         global __exception
+- */
+-  PyEval_InitThreads();
+-
+-  /* "pyliblo3/_liblo.pyx":712
+- * 
+- *         global __exception
+- *         __exception = None             # <<<<<<<<<<<<<<
+- *         self._server_thread = lo_server_thread_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:
+- */
+-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_exception, Py_None) < 0) __PYX_ERR(0, 712, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":713
+- *         global __exception
+- *         __exception = None
+- *         self._server_thread = lo_server_thread_new_with_proto(cs, proto, _err_handler)             # <<<<<<<<<<<<<<
+- *         if __exception:
+- *             raise __exception
+- */
+-  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_proto); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 713, __pyx_L1_error)
+-  __pyx_v_self->_server_thread = lo_server_thread_new_with_proto(__pyx_v_cs, __pyx_t_5, __pyx_f_8pyliblo3_6_liblo__err_handler);
+-
+-  /* "pyliblo3/_liblo.pyx":714
+- *         __exception = None
+- *         self._server_thread = lo_server_thread_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:             # <<<<<<<<<<<<<<
+- *             raise __exception
+- *         self._server = lo_server_thread_get_server(self._server_thread)
+- */
+-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 714, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 714, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  if (unlikely(__pyx_t_2)) {
+-
+-    /* "pyliblo3/_liblo.pyx":715
+- *         self._server_thread = lo_server_thread_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:
+- *             raise __exception             # <<<<<<<<<<<<<<
+- *         self._server = lo_server_thread_get_server(self._server_thread)
+- * 
+- */
+-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_exception); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 715, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __PYX_ERR(0, 715, __pyx_L1_error)
+-
+-    /* "pyliblo3/_liblo.pyx":714
+- *         __exception = None
+- *         self._server_thread = lo_server_thread_new_with_proto(cs, proto, _err_handler)
+- *         if __exception:             # <<<<<<<<<<<<<<
+- *             raise __exception
+- *         self._server = lo_server_thread_get_server(self._server_thread)
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":716
+- *         if __exception:
+- *             raise __exception
+- *         self._server = lo_server_thread_get_server(self._server_thread)             # <<<<<<<<<<<<<<
+- * 
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)
+- */
+-  __pyx_v_self->__pyx_base._server = lo_server_thread_get_server(__pyx_v_self->_server_thread);
+-
+-  /* "pyliblo3/_liblo.pyx":718
+- *         self._server = lo_server_thread_get_server(self._server_thread)
+- * 
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)             # <<<<<<<<<<<<<<
+- * 
+- *     def __dealloc__(self):
+- */
+-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo__ServerBase), __pyx_n_s_init); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 718, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 718, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_INCREF((PyObject *)__pyx_v_self);
+-  __Pyx_GIVEREF((PyObject *)__pyx_v_self);
+-  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self))) __PYX_ERR(0, 718, __pyx_L1_error);
+-  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 718, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_6);
+-  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_reg_methods, __pyx_v_reg_methods) < 0) __PYX_ERR(0, 718, __pyx_L1_error)
+-  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 718, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_7);
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":699
+- *     cdef lo_server_thread _server_thread
+- * 
+- *     def __init__(self, port=None, proto=LO_DEFAULT, reg_methods=True):             # <<<<<<<<<<<<<<
+- *         cdef char *cs
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_6);
+-  __Pyx_XDECREF(__pyx_t_7);
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerThread.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_p);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":720
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         self.free()
+- * 
+- */
+-
+-/* Python wrapper */
+-static void __pyx_pw_8pyliblo3_6_liblo_12ServerThread_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+-static void __pyx_pw_8pyliblo3_6_liblo_12ServerThread_3__dealloc__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_pf_8pyliblo3_6_liblo_12ServerThread_2__dealloc__(((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-static void __pyx_pf_8pyliblo3_6_liblo_12ServerThread_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self) {
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__dealloc__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":721
+- * 
+- *     def __dealloc__(self):
+- *         self.free()             # <<<<<<<<<<<<<<
+- * 
+- *     def free(self):
+- */
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_free); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 721, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 721, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":720
+- *         _ServerBase.__init__(self, reg_methods=reg_methods)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         self.free()
+- * 
+- */
+-
+-  /* function exit code */
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_WriteUnraisable("pyliblo3._liblo.ServerThread.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
+-  __pyx_L0:;
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-/* "pyliblo3/_liblo.pyx":723
+- *         self.free()
+- * 
+- *     def free(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Free the underlying server object and close its port.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_5free(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_12ServerThread_4free, "ServerThread.free(self)\n\n        Free the underlying server object and close its port.\n\n        !!! note\n\n            This method is called automatically when the server is deallocated.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_12ServerThread_5free = {"free", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_5free, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_4free};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_5free(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("free (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("free", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "free", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12ServerThread_4free(((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_4free(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  __Pyx_RefNannySetupContext("free", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":731
+- *             This method is called automatically when the server is deallocated.
+- *         """
+- *         if self._server_thread:             # <<<<<<<<<<<<<<
+- *             lo_server_thread_free(self._server_thread)
+- *             self._server_thread = NULL
+- */
+-  __pyx_t_1 = (__pyx_v_self->_server_thread != 0);
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":732
+- *         """
+- *         if self._server_thread:
+- *             lo_server_thread_free(self._server_thread)             # <<<<<<<<<<<<<<
+- *             self._server_thread = NULL
+- *             self._server = NULL
+- */
+-    lo_server_thread_free(__pyx_v_self->_server_thread);
+-
+-    /* "pyliblo3/_liblo.pyx":733
+- *         if self._server_thread:
+- *             lo_server_thread_free(self._server_thread)
+- *             self._server_thread = NULL             # <<<<<<<<<<<<<<
+- *             self._server = NULL
+- * 
+- */
+-    __pyx_v_self->_server_thread = NULL;
+-
+-    /* "pyliblo3/_liblo.pyx":734
+- *             lo_server_thread_free(self._server_thread)
+- *             self._server_thread = NULL
+- *             self._server = NULL             # <<<<<<<<<<<<<<
+- * 
+- *     def start(self):
+- */
+-    __pyx_v_self->__pyx_base._server = NULL;
+-
+-    /* "pyliblo3/_liblo.pyx":731
+- *             This method is called automatically when the server is deallocated.
+- *         """
+- *         if self._server_thread:             # <<<<<<<<<<<<<<
+- *             lo_server_thread_free(self._server_thread)
+- *             self._server_thread = NULL
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":723
+- *         self.free()
+- * 
+- *     def free(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Free the underlying server object and close its port.
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":736
+- *             self._server = NULL
+- * 
+- *     def start(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Start the server thread.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_7start(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_12ServerThread_6start, "ServerThread.start(self)\n\n        Start the server thread.\n\n        liblo will now start to dispatch any messages it receives.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_12ServerThread_7start = {"start", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_7start, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_6start};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_7start(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("start (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("start", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "start", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12ServerThread_6start(((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_6start(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("start", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":742
+- *         liblo will now start to dispatch any messages it receives.
+- *         """
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         lo_server_thread_start(self._server_thread)
+- * 
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._check(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 742, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":743
+- *         """
+- *         self._check()
+- *         lo_server_thread_start(self._server_thread)             # <<<<<<<<<<<<<<
+- * 
+- *     def stop(self):
+- */
+-  lo_server_thread_start(__pyx_v_self->_server_thread);
+-
+-  /* "pyliblo3/_liblo.pyx":736
+- *             self._server = NULL
+- * 
+- *     def start(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Start the server thread.
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerThread.start", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":745
+- *         lo_server_thread_start(self._server_thread)
+- * 
+- *     def stop(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Stop the server thread.
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_9stop(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_12ServerThread_8stop, "ServerThread.stop(self)\n\n        Stop the server thread.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_12ServerThread_9stop = {"stop", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_9stop, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_8stop};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_9stop(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("stop (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("stop", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "stop", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12ServerThread_8stop(((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_8stop(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("stop", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":749
+- *         Stop the server thread.
+- *         """
+- *         self._check()             # <<<<<<<<<<<<<<
+- *         lo_server_thread_stop(self._server_thread)
+- * 
+- */
+-  __pyx_t_1 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._check(((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":750
+- *         """
+- *         self._check()
+- *         lo_server_thread_stop(self._server_thread)             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  lo_server_thread_stop(__pyx_v_self->_server_thread);
+-
+-  /* "pyliblo3/_liblo.pyx":745
+- *         lo_server_thread_start(self._server_thread)
+- * 
+- *     def stop(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         Stop the server thread.
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerThread.stop", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_11__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_12ServerThread_10__reduce_cython__, "ServerThread.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_12ServerThread_11__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_10__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_11__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12ServerThread_10__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":2
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__server_self__server_thread, 0, 0);
+-  __PYX_ERR(2, 2, __pyx_L1_error)
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerThread.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_13__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_12ServerThread_12__setstate_cython__, "ServerThread.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_12ServerThread_13__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_12__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12ServerThread_13__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 3, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerThread.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12ServerThread_12__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12ServerThread_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":4
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__server_self__server_thread, 0, 0);
+-  __PYX_ERR(2, 4, __pyx_L1_error)
+-
+-  /* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._server,self._server_thread cannot be converted to a Python object for pickling"
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.ServerThread.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":761
+- *     Raised when trying to create an invalid `Address` object.
+- *     """
+- *     def __init__(self, msg):             # <<<<<<<<<<<<<<
+- *         self.msg = msg
+- *     def __str__(self):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12AddressError_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_12AddressError___init__, "AddressError.__init__(self, msg)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_12AddressError_1__init__ = {"__init__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12AddressError_1__init__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12AddressError___init__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12AddressError_1__init__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  PyObject *__pyx_v_msg = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[2] = {0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_msg,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 761, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_msg)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 761, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); __PYX_ERR(0, 761, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 761, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 2)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-    }
+-    __pyx_v_self = values[0];
+-    __pyx_v_msg = values[1];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 761, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.AddressError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12AddressError___init__(__pyx_self, __pyx_v_self, __pyx_v_msg);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12AddressError___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_msg) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":762
+- *     """
+- *     def __init__(self, msg):
+- *         self.msg = msg             # <<<<<<<<<<<<<<
+- *     def __str__(self):
+- *         return "address error: %s" % self.msg
+- */
+-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_msg, __pyx_v_msg) < 0) __PYX_ERR(0, 762, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":761
+- *     Raised when trying to create an invalid `Address` object.
+- *     """
+- *     def __init__(self, msg):             # <<<<<<<<<<<<<<
+- *         self.msg = msg
+- *     def __str__(self):
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.AddressError.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":763
+- *     def __init__(self, msg):
+- *         self.msg = msg
+- *     def __str__(self):             # <<<<<<<<<<<<<<
+- *         return "address error: %s" % self.msg
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12AddressError_3__str__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_12AddressError_2__str__, "AddressError.__str__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_12AddressError_3__str__ = {"__str__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12AddressError_3__str__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12AddressError_2__str__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_12AddressError_3__str__(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v_self = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_self)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 763, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__str__") < 0)) __PYX_ERR(0, 763, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v_self = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__str__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 763, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.AddressError.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_12AddressError_2__str__(__pyx_self, __pyx_v_self);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_12AddressError_2__str__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__str__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":764
+- *         self.msg = msg
+- *     def __str__(self):
+- *         return "address error: %s" % self.msg             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_msg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_kp_s_address_error_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_r = __pyx_t_2;
+-  __pyx_t_2 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":763
+- *     def __init__(self, msg):
+- *         self.msg = msg
+- *     def __str__(self):             # <<<<<<<<<<<<<<
+- *         return "address error: %s" % self.msg
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo.AddressError.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":793
+- *     cdef lo_address _address
+- * 
+- *     def __init__(self, addr, addr2=None, proto=LO_UDP):             # <<<<<<<<<<<<<<
+- *         if isinstance(proto, str):
+- *             proto = _protostr_to_int(proto)
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_7Address_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_7Address_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_addr = 0;
+-  PyObject *__pyx_v_addr2 = 0;
+-  PyObject *__pyx_v_proto = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[3] = {0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_addr,&__pyx_n_s_addr2,&__pyx_n_s_proto,0};
+-    values[1] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)Py_None));
+-    values[2] = __Pyx_Arg_NewRef_VARARGS(__pyx_k__6);
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_addr)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 793, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_addr2);
+-          if (value) { values[1] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 793, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (kw_args > 0) {
+-          PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_proto);
+-          if (value) { values[2] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+-          else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 793, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 793, __pyx_L3_error)
+-      }
+-    } else {
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-    }
+-    __pyx_v_addr = values[0];
+-    __pyx_v_addr2 = values[1];
+-    __pyx_v_proto = values[2];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 793, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return -1;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address___init__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self), __pyx_v_addr, __pyx_v_addr2, __pyx_v_proto);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_7Address___init__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self, PyObject *__pyx_v_addr, PyObject *__pyx_v_addr2, PyObject *__pyx_v_proto) {
+-  PyObject *__pyx_v_s = NULL;
+-  PyObject *__pyx_v_s2 = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_t_5;
+-  char *__pyx_t_6;
+-  char *__pyx_t_7;
+-  int __pyx_t_8;
+-  PyObject *__pyx_t_9 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 0);
+-  __Pyx_INCREF(__pyx_v_proto);
+-
+-  /* "pyliblo3/_liblo.pyx":794
+- * 
+- *     def __init__(self, addr, addr2=None, proto=LO_UDP):
+- *         if isinstance(proto, str):             # <<<<<<<<<<<<<<
+- *             proto = _protostr_to_int(proto)
+- * 
+- */
+-  __pyx_t_1 = PyString_Check(__pyx_v_proto); 
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":795
+- *     def __init__(self, addr, addr2=None, proto=LO_UDP):
+- *         if isinstance(proto, str):
+- *             proto = _protostr_to_int(proto)             # <<<<<<<<<<<<<<
+- * 
+- *         if addr2:
+- */
+-    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_protostr_to_int); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 795, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_4 = NULL;
+-    __pyx_t_5 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (unlikely(PyMethod_Check(__pyx_t_3))) {
+-      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+-      if (likely(__pyx_t_4)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+-        __Pyx_INCREF(__pyx_t_4);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_3, function);
+-        __pyx_t_5 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_proto};
+-      __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
+-      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-      if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_2);
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    }
+-    __Pyx_DECREF_SET(__pyx_v_proto, __pyx_t_2);
+-    __pyx_t_2 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":794
+- * 
+- *     def __init__(self, addr, addr2=None, proto=LO_UDP):
+- *         if isinstance(proto, str):             # <<<<<<<<<<<<<<
+- *             proto = _protostr_to_int(proto)
+- * 
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":797
+- *             proto = _protostr_to_int(proto)
+- * 
+- *         if addr2:             # <<<<<<<<<<<<<<
+- *             # Address(host, port[, proto])
+- *             s = _encode(addr)
+- */
+-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_addr2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 797, __pyx_L1_error)
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":799
+- *         if addr2:
+- *             # Address(host, port[, proto])
+- *             s = _encode(addr)             # <<<<<<<<<<<<<<
+- *             s2 = _encode(str(addr2))
+- *             self._address = lo_address_new_with_proto(proto, s, s2)
+- */
+-    __pyx_t_2 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_addr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_v_s = __pyx_t_2;
+-    __pyx_t_2 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":800
+- *             # Address(host, port[, proto])
+- *             s = _encode(addr)
+- *             s2 = _encode(str(addr2))             # <<<<<<<<<<<<<<
+- *             self._address = lo_address_new_with_proto(proto, s, s2)
+- *             if not self._address:
+- */
+-    __pyx_t_2 = __Pyx_PyObject_Str(__pyx_v_addr2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 800, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __pyx_v_s2 = ((PyObject*)__pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":801
+- *             s = _encode(addr)
+- *             s2 = _encode(str(addr2))
+- *             self._address = lo_address_new_with_proto(proto, s, s2)             # <<<<<<<<<<<<<<
+- *             if not self._address:
+- *                 raise AddressError("invalid protocol")
+- */
+-    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_proto); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 801, __pyx_L1_error)
+-    __pyx_t_6 = __Pyx_PyObject_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(0, 801, __pyx_L1_error)
+-    if (unlikely(__pyx_v_s2 == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 801, __pyx_L1_error)
+-    }
+-    __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_s2); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 801, __pyx_L1_error)
+-    __pyx_v_self->_address = lo_address_new_with_proto(__pyx_t_5, __pyx_t_6, __pyx_t_7);
+-
+-    /* "pyliblo3/_liblo.pyx":802
+- *             s2 = _encode(str(addr2))
+- *             self._address = lo_address_new_with_proto(proto, s, s2)
+- *             if not self._address:             # <<<<<<<<<<<<<<
+- *                 raise AddressError("invalid protocol")
+- *         elif isinstance(addr, int) or (isinstance(addr, str) and addr.isdigit()):
+- */
+-    __pyx_t_1 = (!(__pyx_v_self->_address != 0));
+-    if (unlikely(__pyx_t_1)) {
+-
+-      /* "pyliblo3/_liblo.pyx":803
+- *             self._address = lo_address_new_with_proto(proto, s, s2)
+- *             if not self._address:
+- *                 raise AddressError("invalid protocol")             # <<<<<<<<<<<<<<
+- *         elif isinstance(addr, int) or (isinstance(addr, str) and addr.isdigit()):
+- *             # Address(port)
+- */
+-      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_AddressError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 803, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_2);
+-      __pyx_t_4 = NULL;
+-      __pyx_t_5 = 0;
+-      #if CYTHON_UNPACK_METHODS
+-      if (unlikely(PyMethod_Check(__pyx_t_2))) {
+-        __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
+-        if (likely(__pyx_t_4)) {
+-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-          __Pyx_INCREF(__pyx_t_4);
+-          __Pyx_INCREF(function);
+-          __Pyx_DECREF_SET(__pyx_t_2, function);
+-          __pyx_t_5 = 1;
+-        }
+-      }
+-      #endif
+-      {
+-        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_kp_s_invalid_protocol};
+-        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
+-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 803, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_3);
+-        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-      }
+-      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      __PYX_ERR(0, 803, __pyx_L1_error)
+-
+-      /* "pyliblo3/_liblo.pyx":802
+- *             s2 = _encode(str(addr2))
+- *             self._address = lo_address_new_with_proto(proto, s, s2)
+- *             if not self._address:             # <<<<<<<<<<<<<<
+- *                 raise AddressError("invalid protocol")
+- *         elif isinstance(addr, int) or (isinstance(addr, str) and addr.isdigit()):
+- */
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":797
+- *             proto = _protostr_to_int(proto)
+- * 
+- *         if addr2:             # <<<<<<<<<<<<<<
+- *             # Address(host, port[, proto])
+- *             s = _encode(addr)
+- */
+-    goto __pyx_L4;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":804
+- *             if not self._address:
+- *                 raise AddressError("invalid protocol")
+- *         elif isinstance(addr, int) or (isinstance(addr, str) and addr.isdigit()):             # <<<<<<<<<<<<<<
+- *             # Address(port)
+- *             s = str(addr).encode()
+- */
+-  __pyx_t_8 = PyInt_Check(__pyx_v_addr); 
+-  if (!__pyx_t_8) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_8;
+-    goto __pyx_L6_bool_binop_done;
+-  }
+-  __pyx_t_8 = PyString_Check(__pyx_v_addr); 
+-  if (__pyx_t_8) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_8;
+-    goto __pyx_L6_bool_binop_done;
+-  }
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_addr, __pyx_n_s_isdigit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 804, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_4 = NULL;
+-  __pyx_t_5 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_4)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_4);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_5 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL};
+-    __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
+-    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 804, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_8 < 0))) __PYX_ERR(0, 804, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __pyx_t_1 = __pyx_t_8;
+-  __pyx_L6_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":806
+- *         elif isinstance(addr, int) or (isinstance(addr, str) and addr.isdigit()):
+- *             # Address(port)
+- *             s = str(addr).encode()             # <<<<<<<<<<<<<<
+- *             self._address = lo_address_new(NULL, s)
+- *         else:
+- */
+-    __pyx_t_2 = __Pyx_PyObject_Str(__pyx_v_addr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 806, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 806, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_4);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __pyx_t_2 = NULL;
+-    __pyx_t_5 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_4))) {
+-      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
+-      if (likely(__pyx_t_2)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-        __Pyx_INCREF(__pyx_t_2);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_4, function);
+-        __pyx_t_5 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
+-      __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
+-      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+-      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 806, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_3);
+-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    }
+-    __pyx_v_s = __pyx_t_3;
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":807
+- *             # Address(port)
+- *             s = str(addr).encode()
+- *             self._address = lo_address_new(NULL, s)             # <<<<<<<<<<<<<<
+- *         else:
+- *             # Address(url)
+- */
+-    __pyx_t_7 = __Pyx_PyObject_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L1_error)
+-    __pyx_v_self->_address = lo_address_new(NULL, __pyx_t_7);
+-
+-    /* "pyliblo3/_liblo.pyx":804
+- *             if not self._address:
+- *                 raise AddressError("invalid protocol")
+- *         elif isinstance(addr, int) or (isinstance(addr, str) and addr.isdigit()):             # <<<<<<<<<<<<<<
+- *             # Address(port)
+- *             s = str(addr).encode()
+- */
+-    goto __pyx_L4;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":810
+- *         else:
+- *             # Address(url)
+- *             s = _encode(addr)             # <<<<<<<<<<<<<<
+- *             self._address = lo_address_new_from_url(s)
+- *             # lo_address_errno() is of no use if self._addr == NULL
+- */
+-  /*else*/ {
+-    __pyx_t_3 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_addr); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 810, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_v_s = __pyx_t_3;
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":811
+- *             # Address(url)
+- *             s = _encode(addr)
+- *             self._address = lo_address_new_from_url(s)             # <<<<<<<<<<<<<<
+- *             # lo_address_errno() is of no use if self._addr == NULL
+- *             if not self._address:
+- */
+-    __pyx_t_7 = __Pyx_PyObject_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 811, __pyx_L1_error)
+-    __pyx_v_self->_address = lo_address_new_from_url(__pyx_t_7);
+-
+-    /* "pyliblo3/_liblo.pyx":813
+- *             self._address = lo_address_new_from_url(s)
+- *             # lo_address_errno() is of no use if self._addr == NULL
+- *             if not self._address:             # <<<<<<<<<<<<<<
+- *                 raise AddressError("invalid URL '%s'" % str(addr))
+- * 
+- */
+-    __pyx_t_1 = (!(__pyx_v_self->_address != 0));
+-    if (unlikely(__pyx_t_1)) {
+-
+-      /* "pyliblo3/_liblo.pyx":814
+- *             # lo_address_errno() is of no use if self._addr == NULL
+- *             if not self._address:
+- *                 raise AddressError("invalid URL '%s'" % str(addr))             # <<<<<<<<<<<<<<
+- * 
+- *     def __dealloc__(self):
+- */
+-      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_AddressError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 814, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_4);
+-      __pyx_t_2 = __Pyx_PyObject_Str(__pyx_v_addr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 814, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_2);
+-      __pyx_t_9 = __Pyx_PyString_FormatSafe(__pyx_kp_s_invalid_URL_s, __pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 814, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_9);
+-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-      __pyx_t_2 = NULL;
+-      __pyx_t_5 = 0;
+-      #if CYTHON_UNPACK_METHODS
+-      if (unlikely(PyMethod_Check(__pyx_t_4))) {
+-        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
+-        if (likely(__pyx_t_2)) {
+-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+-          __Pyx_INCREF(__pyx_t_2);
+-          __Pyx_INCREF(function);
+-          __Pyx_DECREF_SET(__pyx_t_4, function);
+-          __pyx_t_5 = 1;
+-        }
+-      }
+-      #endif
+-      {
+-        PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_9};
+-        __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
+-        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+-        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 814, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_3);
+-        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+-      }
+-      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      __PYX_ERR(0, 814, __pyx_L1_error)
+-
+-      /* "pyliblo3/_liblo.pyx":813
+- *             self._address = lo_address_new_from_url(s)
+- *             # lo_address_errno() is of no use if self._addr == NULL
+- *             if not self._address:             # <<<<<<<<<<<<<<
+- *                 raise AddressError("invalid URL '%s'" % str(addr))
+- * 
+- */
+-    }
+-  }
+-  __pyx_L4:;
+-
+-  /* "pyliblo3/_liblo.pyx":793
+- *     cdef lo_address _address
+- * 
+- *     def __init__(self, addr, addr2=None, proto=LO_UDP):             # <<<<<<<<<<<<<<
+- *         if isinstance(proto, str):
+- *             proto = _protostr_to_int(proto)
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_XDECREF(__pyx_t_9);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_s);
+-  __Pyx_XDECREF(__pyx_v_s2);
+-  __Pyx_XDECREF(__pyx_v_proto);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":816
+- *                 raise AddressError("invalid URL '%s'" % str(addr))
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_address_free(self._address)
+- * 
+- */
+-
+-/* Python wrapper */
+-static void __pyx_pw_8pyliblo3_6_liblo_7Address_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+-static void __pyx_pw_8pyliblo3_6_liblo_7Address_3__dealloc__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_pf_8pyliblo3_6_liblo_7Address_2__dealloc__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-static void __pyx_pf_8pyliblo3_6_liblo_7Address_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-
+-  /* "pyliblo3/_liblo.pyx":817
+- * 
+- *     def __dealloc__(self):
+- *         lo_address_free(self._address)             # <<<<<<<<<<<<<<
+- * 
+- *     def get_url(self):
+- */
+-  lo_address_free(__pyx_v_self->_address);
+-
+-  /* "pyliblo3/_liblo.pyx":816
+- *                 raise AddressError("invalid URL '%s'" % str(addr))
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_address_free(self._address)
+- * 
+- */
+-
+-  /* function exit code */
+-}
+-
+-/* "pyliblo3/_liblo.pyx":819
+- *         lo_address_free(self._address)
+- * 
+- *     def get_url(self):             # <<<<<<<<<<<<<<
+- *         """This Address as a liblo URL"""
+- *         cdef char *tmp = lo_address_get_url(self._address)
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_5get_url(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Address_4get_url, "Address.get_url(self)\nThis Address as a liblo URL");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Address_5get_url = {"get_url", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_5get_url, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_4get_url};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_5get_url(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("get_url (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("get_url", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_url", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_4get_url(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_4get_url(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  char *__pyx_v_tmp;
+-  PyObject *__pyx_v_r = 0;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_url", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":821
+- *     def get_url(self):
+- *         """This Address as a liblo URL"""
+- *         cdef char *tmp = lo_address_get_url(self._address)             # <<<<<<<<<<<<<<
+- *         cdef object r = tmp
+- *         free(tmp)
+- */
+-  __pyx_v_tmp = lo_address_get_url(__pyx_v_self->_address);
+-
+-  /* "pyliblo3/_liblo.pyx":822
+- *         """This Address as a liblo URL"""
+- *         cdef char *tmp = lo_address_get_url(self._address)
+- *         cdef object r = tmp             # <<<<<<<<<<<<<<
+- *         free(tmp)
+- *         return _decode(r)
+- */
+-  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_tmp); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 822, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_v_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":823
+- *         cdef char *tmp = lo_address_get_url(self._address)
+- *         cdef object r = tmp
+- *         free(tmp)             # <<<<<<<<<<<<<<
+- *         return _decode(r)
+- * 
+- */
+-  free(__pyx_v_tmp);
+-
+-  /* "pyliblo3/_liblo.pyx":824
+- *         cdef object r = tmp
+- *         free(tmp)
+- *         return _decode(r)             # <<<<<<<<<<<<<<
+- * 
+- *     def get_hostname(self):
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_v_r); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 824, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":819
+- *         lo_address_free(self._address)
+- * 
+- *     def get_url(self):             # <<<<<<<<<<<<<<
+- *         """This Address as a liblo URL"""
+- *         cdef char *tmp = lo_address_get_url(self._address)
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.get_url", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_r);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":826
+- *         return _decode(r)
+- * 
+- *     def get_hostname(self):             # <<<<<<<<<<<<<<
+- *         """The hostname of this Address"""
+- *         return _decode(lo_address_get_hostname(self._address))
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_7get_hostname(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Address_6get_hostname, "Address.get_hostname(self)\nThe hostname of this Address");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Address_7get_hostname = {"get_hostname", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_7get_hostname, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_6get_hostname};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_7get_hostname(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("get_hostname (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("get_hostname", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_hostname", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_6get_hostname(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_6get_hostname(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_hostname", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":828
+- *     def get_hostname(self):
+- *         """The hostname of this Address"""
+- *         return _decode(lo_address_get_hostname(self._address))             # <<<<<<<<<<<<<<
+- * 
+- *     def get_port(self):
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyBytes_FromString(lo_address_get_hostname(__pyx_v_self->_address)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 828, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_r = __pyx_t_2;
+-  __pyx_t_2 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":826
+- *         return _decode(r)
+- * 
+- *     def get_hostname(self):             # <<<<<<<<<<<<<<
+- *         """The hostname of this Address"""
+- *         return _decode(lo_address_get_hostname(self._address))
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.get_hostname", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":830
+- *         return _decode(lo_address_get_hostname(self._address))
+- * 
+- *     def get_port(self):             # <<<<<<<<<<<<<<
+- *         """The port number of this Address"""
+- *         cdef bytes s = lo_address_get_port(self._address)
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_9get_port(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Address_8get_port, "Address.get_port(self)\nThe port number of this Address");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Address_9get_port = {"get_port", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_9get_port, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_8get_port};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_9get_port(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("get_port (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("get_port", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_port", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_8get_port(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_8get_port(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_v_s = 0;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_port", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":832
+- *     def get_port(self):
+- *         """The port number of this Address"""
+- *         cdef bytes s = lo_address_get_port(self._address)             # <<<<<<<<<<<<<<
+- *         if s.isdigit():
+- *             return int(s)
+- */
+-  __pyx_t_1 = __Pyx_PyBytes_FromString(lo_address_get_port(__pyx_v_self->_address)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_v_s = ((PyObject*)__pyx_t_1);
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":833
+- *         """The port number of this Address"""
+- *         cdef bytes s = lo_address_get_port(self._address)
+- *         if s.isdigit():             # <<<<<<<<<<<<<<
+- *             return int(s)
+- *         else:
+- */
+-  __pyx_t_1 = __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyBytes_Type_isdigit, __pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 833, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 833, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":834
+- *         cdef bytes s = lo_address_get_port(self._address)
+- *         if s.isdigit():
+- *             return int(s)             # <<<<<<<<<<<<<<
+- *         else:
+- *             return _decode(s)
+- */
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 834, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_r = __pyx_t_1;
+-    __pyx_t_1 = 0;
+-    goto __pyx_L0;
+-
+-    /* "pyliblo3/_liblo.pyx":833
+- *         """The port number of this Address"""
+- *         cdef bytes s = lo_address_get_port(self._address)
+- *         if s.isdigit():             # <<<<<<<<<<<<<<
+- *             return int(s)
+- *         else:
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":836
+- *             return int(s)
+- *         else:
+- *             return _decode(s)             # <<<<<<<<<<<<<<
+- * 
+- *     def get_protocol(self):
+- */
+-  /*else*/ {
+-    __Pyx_XDECREF(__pyx_r);
+-    __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 836, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_r = __pyx_t_1;
+-    __pyx_t_1 = 0;
+-    goto __pyx_L0;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":830
+- *         return _decode(lo_address_get_hostname(self._address))
+- * 
+- *     def get_port(self):             # <<<<<<<<<<<<<<
+- *         """The port number of this Address"""
+- *         cdef bytes s = lo_address_get_port(self._address)
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.get_port", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_s);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":838
+- *             return _decode(s)
+- * 
+- *     def get_protocol(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         The protocol used as an int
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_11get_protocol(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Address_10get_protocol, "Address.get_protocol(self)\n\n        The protocol used as an int\n\n        Example\n        -------\n\n        ```python\n        from pyliblo3 import *\n        address = Address('127.0.0.0', 9876)\n        assert address.get_protocol() == LO_UDP\n        ```\n\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Address_11get_protocol = {"get_protocol", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_11get_protocol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_10get_protocol};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_11get_protocol(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("get_protocol (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("get_protocol", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "get_protocol", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_10get_protocol(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_10get_protocol(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("get_protocol", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":852
+- * 
+- *         """
+- *         return lo_address_get_protocol(self._address)             # <<<<<<<<<<<<<<
+- * 
+- *     property url:
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_1 = __Pyx_PyInt_From_int(lo_address_get_protocol(__pyx_v_self->_address)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 852, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":838
+- *             return _decode(s)
+- * 
+- *     def get_protocol(self):             # <<<<<<<<<<<<<<
+- *         """
+- *         The protocol used as an int
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.get_protocol", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":858
+- *         The address's URL.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_url()
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_3url_1__get__(PyObject *__pyx_v_self); /*proto*/
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_3url_1__get__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_3url___get__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_3url___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__get__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":859
+- *         """
+- *         def __get__(self):
+- *             return self.get_url()             # <<<<<<<<<<<<<<
+- * 
+- *     property hostname:
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_url); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 859, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 859, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":858
+- *         The address's URL.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_url()
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.url.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":865
+- *         The address's hostname.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_hostname()
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_8hostname_1__get__(PyObject *__pyx_v_self); /*proto*/
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_8hostname_1__get__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_8hostname___get__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_8hostname___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__get__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":866
+- *         """
+- *         def __get__(self):
+- *             return self.get_hostname()             # <<<<<<<<<<<<<<
+- * 
+- *     property port:
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_hostname); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 866, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":865
+- *         The address's hostname.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_hostname()
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.hostname.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":872
+- *         The address's port number.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_port()
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_4port_1__get__(PyObject *__pyx_v_self); /*proto*/
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_4port_1__get__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_4port___get__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_4port___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__get__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":873
+- *         """
+- *         def __get__(self):
+- *             return self.get_port()             # <<<<<<<<<<<<<<
+- * 
+- *     property protocol:
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_port); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 873, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 873, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":872
+- *         The address's port number.
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_port()
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.port.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":880
+- *         :const:`TCP`, or :const:`UNIX`).
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_protocol()
+- * 
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_8protocol_1__get__(PyObject *__pyx_v_self); /*proto*/
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_8protocol_1__get__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_8protocol___get__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_8protocol___get__(struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__get__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":881
+- *         """
+- *         def __get__(self):
+- *             return self.get_protocol()             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_protocol); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 881, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __pyx_t_3 = NULL;
+-  __pyx_t_4 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_2))) {
+-    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+-    if (likely(__pyx_t_3)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+-      __Pyx_INCREF(__pyx_t_3);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_2, function);
+-      __pyx_t_4 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4);
+-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 881, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  }
+-  __pyx_r = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  goto __pyx_L0;
+-
+-  /* "pyliblo3/_liblo.pyx":880
+- *         :const:`TCP`, or :const:`UNIX`).
+- *         """
+- *         def __get__(self):             # <<<<<<<<<<<<<<
+- *             return self.get_protocol()
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.protocol.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_13__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Address_12__reduce_cython__, "Address.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Address_13__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_13__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_12__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_13__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_12__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_12__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":2
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__address_cannot_be_converte, 0, 0);
+-  __PYX_ERR(2, 2, __pyx_L1_error)
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_15__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Address_14__setstate_cython__, "Address.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Address_15__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_15__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_14__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Address_15__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 3, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Address_14__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Address *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Address_14__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Address *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":4
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__address_cannot_be_converte, 0, 0);
+-  __PYX_ERR(2, 4, __pyx_L1_error)
+-
+-  /* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._address cannot be converted to a Python object for pickling"
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Address.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":891
+- *     cdef lo_blob _blob
+- * 
+- *     def __init__(self, arr):             # <<<<<<<<<<<<<<
+- *         # arr can by any sequence type
+- *         cdef unsigned char *p
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_5_Blob_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_5_Blob_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_arr = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_arr,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_arr)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 891, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 891, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-    }
+-    __pyx_v_arr = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 891, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._Blob.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return -1;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_5_Blob___init__(((struct __pyx_obj_8pyliblo3_6_liblo__Blob *)__pyx_v_self), __pyx_v_arr);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_5_Blob___init__(struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self, PyObject *__pyx_v_arr) {
+-  unsigned char *__pyx_v_p;
+-  uint32_t __pyx_v_size;
+-  uint32_t __pyx_v_i;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  Py_ssize_t __pyx_t_1;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  uint32_t __pyx_t_5;
+-  long __pyx_t_6;
+-  unsigned char __pyx_t_7;
+-  int __pyx_t_8;
+-  int __pyx_t_9;
+-  char const *__pyx_t_10;
+-  PyObject *__pyx_t_11 = NULL;
+-  PyObject *__pyx_t_12 = NULL;
+-  PyObject *__pyx_t_13 = NULL;
+-  PyObject *__pyx_t_14 = NULL;
+-  PyObject *__pyx_t_15 = NULL;
+-  PyObject *__pyx_t_16 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":895
+- *         cdef unsigned char *p
+- *         cdef uint32_t size, i
+- *         size = len(arr)             # <<<<<<<<<<<<<<
+- *         if size < 1:
+- *             raise ValueError("blob is empty")
+- */
+-  __pyx_t_1 = PyObject_Length(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 895, __pyx_L1_error)
+-  __pyx_v_size = __pyx_t_1;
+-
+-  /* "pyliblo3/_liblo.pyx":896
+- *         cdef uint32_t size, i
+- *         size = len(arr)
+- *         if size < 1:             # <<<<<<<<<<<<<<
+- *             raise ValueError("blob is empty")
+- *         # copy each element of arr to a C array
+- */
+-  __pyx_t_2 = (__pyx_v_size < 1);
+-  if (unlikely(__pyx_t_2)) {
+-
+-    /* "pyliblo3/_liblo.pyx":897
+- *         size = len(arr)
+- *         if size < 1:
+- *             raise ValueError("blob is empty")             # <<<<<<<<<<<<<<
+- *         # copy each element of arr to a C array
+- *         p = <unsigned char*>malloc(size)
+- */
+-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 897, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __PYX_ERR(0, 897, __pyx_L1_error)
+-
+-    /* "pyliblo3/_liblo.pyx":896
+- *         cdef uint32_t size, i
+- *         size = len(arr)
+- *         if size < 1:             # <<<<<<<<<<<<<<
+- *             raise ValueError("blob is empty")
+- *         # copy each element of arr to a C array
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":899
+- *             raise ValueError("blob is empty")
+- *         # copy each element of arr to a C array
+- *         p = <unsigned char*>malloc(size)             # <<<<<<<<<<<<<<
+- *         try:
+- *             if isinstance(arr[0], (str, unicode)):
+- */
+-  __pyx_v_p = ((unsigned char *)malloc(__pyx_v_size));
+-
+-  /* "pyliblo3/_liblo.pyx":900
+- *         # copy each element of arr to a C array
+- *         p = <unsigned char*>malloc(size)
+- *         try:             # <<<<<<<<<<<<<<
+- *             if isinstance(arr[0], (str, unicode)):
+- *                 # use ord() if arr is a string (but not bytes)
+- */
+-  /*try:*/ {
+-
+-    /* "pyliblo3/_liblo.pyx":901
+- *         p = <unsigned char*>malloc(size)
+- *         try:
+- *             if isinstance(arr[0], (str, unicode)):             # <<<<<<<<<<<<<<
+- *                 # use ord() if arr is a string (but not bytes)
+- *                 for i from 0 <= i < size:
+- */
+-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_arr, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 901, __pyx_L5_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_4 = PyString_Check(__pyx_t_3); 
+-    if (!__pyx_t_4) {
+-    } else {
+-      __pyx_t_2 = __pyx_t_4;
+-      goto __pyx_L8_bool_binop_done;
+-    }
+-    __pyx_t_4 = PyUnicode_Check(__pyx_t_3); 
+-    __pyx_t_2 = __pyx_t_4;
+-    __pyx_L8_bool_binop_done:;
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (__pyx_t_2) {
+-
+-      /* "pyliblo3/_liblo.pyx":903
+- *             if isinstance(arr[0], (str, unicode)):
+- *                 # use ord() if arr is a string (but not bytes)
+- *                 for i from 0 <= i < size:             # <<<<<<<<<<<<<<
+- *                     p[i] = ord(arr[i])
+- *             else:
+- */
+-      __pyx_t_5 = __pyx_v_size;
+-      for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
+-
+-        /* "pyliblo3/_liblo.pyx":904
+- *                 # use ord() if arr is a string (but not bytes)
+- *                 for i from 0 <= i < size:
+- *                     p[i] = ord(arr[i])             # <<<<<<<<<<<<<<
+- *             else:
+- *                 for i from 0 <= i < size:
+- */
+-        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_arr, __pyx_v_i, uint32_t, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 904, __pyx_L5_error)
+-        __Pyx_GOTREF(__pyx_t_3);
+-        __pyx_t_6 = __Pyx_PyObject_Ord(__pyx_t_3); if (unlikely(__pyx_t_6 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 904, __pyx_L5_error)
+-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-        (__pyx_v_p[__pyx_v_i]) = __pyx_t_6;
+-      }
+-
+-      /* "pyliblo3/_liblo.pyx":901
+- *         p = <unsigned char*>malloc(size)
+- *         try:
+- *             if isinstance(arr[0], (str, unicode)):             # <<<<<<<<<<<<<<
+- *                 # use ord() if arr is a string (but not bytes)
+- *                 for i from 0 <= i < size:
+- */
+-      goto __pyx_L7;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":906
+- *                     p[i] = ord(arr[i])
+- *             else:
+- *                 for i from 0 <= i < size:             # <<<<<<<<<<<<<<
+- *                     p[i] = arr[i]
+- *             # build blob
+- */
+-    /*else*/ {
+-      __pyx_t_5 = __pyx_v_size;
+-      for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
+-
+-        /* "pyliblo3/_liblo.pyx":907
+- *             else:
+- *                 for i from 0 <= i < size:
+- *                     p[i] = arr[i]             # <<<<<<<<<<<<<<
+- *             # build blob
+- *             self._blob = lo_blob_new(size, p)
+- */
+-        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_arr, __pyx_v_i, uint32_t, 0, __Pyx_PyInt_From_uint32_t, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 907, __pyx_L5_error)
+-        __Pyx_GOTREF(__pyx_t_3);
+-        __pyx_t_7 = __Pyx_PyInt_As_unsigned_char(__pyx_t_3); if (unlikely((__pyx_t_7 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 907, __pyx_L5_error)
+-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-        (__pyx_v_p[__pyx_v_i]) = __pyx_t_7;
+-      }
+-    }
+-    __pyx_L7:;
+-
+-    /* "pyliblo3/_liblo.pyx":909
+- *                     p[i] = arr[i]
+- *             # build blob
+- *             self._blob = lo_blob_new(size, p)             # <<<<<<<<<<<<<<
+- *         finally:
+- *             free(p)
+- */
+-    __pyx_v_self->_blob = lo_blob_new(__pyx_v_size, __pyx_v_p);
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":911
+- *             self._blob = lo_blob_new(size, p)
+- *         finally:
+- *             free(p)             # <<<<<<<<<<<<<<
+- * 
+- *     def __dealloc__(self):
+- */
+-  /*finally:*/ {
+-    /*normal exit:*/{
+-      free(__pyx_v_p);
+-      goto __pyx_L6;
+-    }
+-    __pyx_L5_error:;
+-    /*exception exit:*/{
+-      __Pyx_PyThreadState_declare
+-      __Pyx_PyThreadState_assign
+-      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
+-      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
+-      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
+-      __Pyx_XGOTREF(__pyx_t_11);
+-      __Pyx_XGOTREF(__pyx_t_12);
+-      __Pyx_XGOTREF(__pyx_t_13);
+-      __Pyx_XGOTREF(__pyx_t_14);
+-      __Pyx_XGOTREF(__pyx_t_15);
+-      __Pyx_XGOTREF(__pyx_t_16);
+-      __pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
+-      {
+-        free(__pyx_v_p);
+-      }
+-      if (PY_MAJOR_VERSION >= 3) {
+-        __Pyx_XGIVEREF(__pyx_t_14);
+-        __Pyx_XGIVEREF(__pyx_t_15);
+-        __Pyx_XGIVEREF(__pyx_t_16);
+-        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
+-      }
+-      __Pyx_XGIVEREF(__pyx_t_11);
+-      __Pyx_XGIVEREF(__pyx_t_12);
+-      __Pyx_XGIVEREF(__pyx_t_13);
+-      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
+-      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
+-      __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
+-      goto __pyx_L1_error;
+-    }
+-    __pyx_L6:;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":891
+- *     cdef lo_blob _blob
+- * 
+- *     def __init__(self, arr):             # <<<<<<<<<<<<<<
+- *         # arr can by any sequence type
+- *         cdef unsigned char *p
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo._Blob.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":913
+- *             free(p)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_blob_free(self._blob)
+- * 
+- */
+-
+-/* Python wrapper */
+-static void __pyx_pw_8pyliblo3_6_liblo_5_Blob_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+-static void __pyx_pw_8pyliblo3_6_liblo_5_Blob_3__dealloc__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_pf_8pyliblo3_6_liblo_5_Blob_2__dealloc__(((struct __pyx_obj_8pyliblo3_6_liblo__Blob *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-static void __pyx_pf_8pyliblo3_6_liblo_5_Blob_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self) {
+-
+-  /* "pyliblo3/_liblo.pyx":914
+- * 
+- *     def __dealloc__(self):
+- *         lo_blob_free(self._blob)             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-  lo_blob_free(__pyx_v_self->_blob);
+-
+-  /* "pyliblo3/_liblo.pyx":913
+- *             free(p)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_blob_free(self._blob)
+- * 
+- */
+-
+-  /* function exit code */
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_5_Blob_5__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_5_Blob_4__reduce_cython__, "_Blob.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_5_Blob_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_5_Blob_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_5_Blob_4__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_5_Blob_5__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_5_Blob_4__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo__Blob *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_5_Blob_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":2
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__blob_cannot_be_converted_t, 0, 0);
+-  __PYX_ERR(2, 2, __pyx_L1_error)
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo._Blob.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_5_Blob_7__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_5_Blob_6__setstate_cython__, "_Blob.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_5_Blob_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_5_Blob_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_5_Blob_6__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_5_Blob_7__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 3, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo._Blob.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_5_Blob_6__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo__Blob *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_5_Blob_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":4
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__blob_cannot_be_converted_t, 0, 0);
+-  __PYX_ERR(2, 4, __pyx_L1_error)
+-
+-  /* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._blob cannot be converted to a Python object for pickling"
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo._Blob.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":929
+- *     cdef list _keep_refs
+- * 
+- *     def __init__(self, path, *args):             # <<<<<<<<<<<<<<
+- *         self._keep_refs = []
+- *         # encode path to bytestring if necessary
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_7Message_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_7Message_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_path = 0;
+-  PyObject *__pyx_v_args = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_v_args = __Pyx_ArgsSlice_VARARGS(__pyx_args, 1, __pyx_nargs);
+-  if (unlikely(!__pyx_v_args)) {
+-    __Pyx_RefNannyFinishContext();
+-    return -1;
+-  }
+-  __Pyx_GOTREF(__pyx_v_args);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_path,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        default:
+-        case  1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-      }
+-      kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_path)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 929, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        const Py_ssize_t used_pos_args = (kwd_pos_args < 1) ? kwd_pos_args : 1;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, used_pos_args, "__init__") < 0)) __PYX_ERR(0, 929, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs < 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+-    }
+-    __pyx_v_path = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 1, __pyx_nargs); __PYX_ERR(0, 929, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return -1;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Message___init__(((struct __pyx_obj_8pyliblo3_6_liblo_Message *)__pyx_v_self), __pyx_v_path, __pyx_v_args);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_args);
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_7Message___init__(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_path, PyObject *__pyx_v_args) {
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":930
+- * 
+- *     def __init__(self, path, *args):
+- *         self._keep_refs = []             # <<<<<<<<<<<<<<
+- *         # encode path to bytestring if necessary
+- *         self._path = _encode(path)
+- */
+-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 930, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  __Pyx_GOTREF(__pyx_v_self->_keep_refs);
+-  __Pyx_DECREF(__pyx_v_self->_keep_refs);
+-  __pyx_v_self->_keep_refs = ((PyObject*)__pyx_t_1);
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":932
+- *         self._keep_refs = []
+- *         # encode path to bytestring if necessary
+- *         self._path = _encode(path)             # <<<<<<<<<<<<<<
+- *         self._message = lo_message_new()
+- * 
+- */
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_path); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 932, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  __Pyx_GOTREF(__pyx_v_self->_path);
+-  __Pyx_DECREF(__pyx_v_self->_path);
+-  __pyx_v_self->_path = ((PyObject*)__pyx_t_1);
+-  __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":933
+- *         # encode path to bytestring if necessary
+- *         self._path = _encode(path)
+- *         self._message = lo_message_new()             # <<<<<<<<<<<<<<
+- * 
+- *         self.add(*args)
+- */
+-  __pyx_v_self->_message = lo_message_new();
+-
+-  /* "pyliblo3/_liblo.pyx":935
+- *         self._message = lo_message_new()
+- * 
+- *         self.add(*args)             # <<<<<<<<<<<<<<
+- * 
+- *     def __dealloc__(self):
+- */
+-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_add); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 935, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_v_args, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":929
+- *     cdef list _keep_refs
+- * 
+- *     def __init__(self, path, *args):             # <<<<<<<<<<<<<<
+- *         self._keep_refs = []
+- *         # encode path to bytestring if necessary
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":937
+- *         self.add(*args)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_message_free(self._message)
+- * 
+- */
+-
+-/* Python wrapper */
+-static void __pyx_pw_8pyliblo3_6_liblo_7Message_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+-static void __pyx_pw_8pyliblo3_6_liblo_7Message_3__dealloc__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_pf_8pyliblo3_6_liblo_7Message_2__dealloc__(((struct __pyx_obj_8pyliblo3_6_liblo_Message *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-static void __pyx_pf_8pyliblo3_6_liblo_7Message_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self) {
+-
+-  /* "pyliblo3/_liblo.pyx":938
+- * 
+- *     def __dealloc__(self):
+- *         lo_message_free(self._message)             # <<<<<<<<<<<<<<
+- * 
+- *     def add(self, *args):
+- */
+-  lo_message_free(__pyx_v_self->_message);
+-
+-  /* "pyliblo3/_liblo.pyx":937
+- *         self.add(*args)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_message_free(self._message)
+- * 
+- */
+-
+-  /* function exit code */
+-}
+-
+-/* "pyliblo3/_liblo.pyx":940
+- *         lo_message_free(self._message)
+- * 
+- *     def add(self, *args):             # <<<<<<<<<<<<<<
+- *         """
+- *         Append the given arguments to this message
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Message_5add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Message_4add, "Message.add(self, *args)\n\n        Append the given arguments to this message\n\n        Arguments can be single values or `(typetag, data)` tuples to specify\n        the actual type. This might be needed for numbers, to specify if a float\n        needs to be encoded as a 32-bit (typetag = 'f') or 64-bit float (typetag = 'd').\n        By default, float numbers are interpreted as 32-bit floats.\n\n        Args:\n            args: each argument can be a single value or a tuple `(typetag: str, data: Any)`\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Message_5add = {"add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Message_5add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Message_4add};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Message_5add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_args = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("add (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "add", 0))) return NULL;
+-  __Pyx_INCREF(__pyx_args);
+-  __pyx_v_args = __pyx_args;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Message_4add(((struct __pyx_obj_8pyliblo3_6_liblo_Message *)__pyx_v_self), __pyx_v_args);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_args);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Message_4add(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_args) {
+-  PyObject *__pyx_v_arg = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  Py_ssize_t __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  int __pyx_t_5;
+-  Py_ssize_t __pyx_t_6;
+-  int __pyx_t_7;
+-  PyObject *__pyx_t_8 = NULL;
+-  PyObject *__pyx_t_9 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("add", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":952
+- *             args: each argument can be a single value or a tuple `(typetag: str, data: Any)`
+- *         """
+- *         for arg in args:             # <<<<<<<<<<<<<<
+- *             if (isinstance(arg, tuple) and len(arg) <= 2 and
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):
+- */
+-  __pyx_t_1 = __pyx_v_args; __Pyx_INCREF(__pyx_t_1);
+-  __pyx_t_2 = 0;
+-  for (;;) {
+-    {
+-      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
+-      #if !CYTHON_ASSUME_SAFE_MACROS
+-      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 952, __pyx_L1_error)
+-      #endif
+-      if (__pyx_t_2 >= __pyx_temp) break;
+-    }
+-    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely((0 < 0))) __PYX_ERR(0, 952, __pyx_L1_error)
+-    #else
+-    __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 952, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    #endif
+-    __Pyx_XDECREF_SET(__pyx_v_arg, __pyx_t_3);
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":953
+- *         """
+- *         for arg in args:
+- *             if (isinstance(arg, tuple) and len(arg) <= 2 and             # <<<<<<<<<<<<<<
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):
+- *                 # type explicitly specified
+- */
+-    __pyx_t_5 = PyTuple_Check(__pyx_v_arg); 
+-    if (__pyx_t_5) {
+-    } else {
+-      __pyx_t_4 = __pyx_t_5;
+-      goto __pyx_L6_bool_binop_done;
+-    }
+-    __pyx_t_6 = PyObject_Length(__pyx_v_arg); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 953, __pyx_L1_error)
+-    __pyx_t_5 = (__pyx_t_6 <= 2);
+-    if (__pyx_t_5) {
+-    } else {
+-      __pyx_t_4 = __pyx_t_5;
+-      goto __pyx_L6_bool_binop_done;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":954
+- *         for arg in args:
+- *             if (isinstance(arg, tuple) and len(arg) <= 2 and
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):             # <<<<<<<<<<<<<<
+- *                 # type explicitly specified
+- *                 if len(arg) == 2:
+- */
+-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_arg, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 954, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_7 = PyBytes_Check(__pyx_t_3); 
+-    if (!__pyx_t_7) {
+-    } else {
+-      __pyx_t_5 = __pyx_t_7;
+-      goto __pyx_L10_bool_binop_done;
+-    }
+-    __pyx_t_7 = PyUnicode_Check(__pyx_t_3); 
+-    __pyx_t_5 = __pyx_t_7;
+-    __pyx_L10_bool_binop_done:;
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    if (__pyx_t_5) {
+-    } else {
+-      __pyx_t_4 = __pyx_t_5;
+-      goto __pyx_L6_bool_binop_done;
+-    }
+-    __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_arg, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 954, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_6 = PyObject_Length(__pyx_t_3); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 954, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __pyx_t_5 = (__pyx_t_6 == 1);
+-    __pyx_t_4 = __pyx_t_5;
+-    __pyx_L6_bool_binop_done:;
+-
+-    /* "pyliblo3/_liblo.pyx":953
+- *         """
+- *         for arg in args:
+- *             if (isinstance(arg, tuple) and len(arg) <= 2 and             # <<<<<<<<<<<<<<
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):
+- *                 # type explicitly specified
+- */
+-    if (__pyx_t_4) {
+-
+-      /* "pyliblo3/_liblo.pyx":956
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):
+- *                 # type explicitly specified
+- *                 if len(arg) == 2:             # <<<<<<<<<<<<<<
+- *                     self._add(arg[0], arg[1])
+- *                 else:
+- */
+-      __pyx_t_6 = PyObject_Length(__pyx_v_arg); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 956, __pyx_L1_error)
+-      __pyx_t_4 = (__pyx_t_6 == 2);
+-      if (__pyx_t_4) {
+-
+-        /* "pyliblo3/_liblo.pyx":957
+- *                 # type explicitly specified
+- *                 if len(arg) == 2:
+- *                     self._add(arg[0], arg[1])             # <<<<<<<<<<<<<<
+- *                 else:
+- *                     self._add(arg[0], None)
+- */
+-        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_arg, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 957, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_3);
+-        __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_arg, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_8);
+-        __pyx_t_9 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message *)__pyx_v_self->__pyx_vtab)->_add(__pyx_v_self, __pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 957, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_9);
+-        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+-
+-        /* "pyliblo3/_liblo.pyx":956
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):
+- *                 # type explicitly specified
+- *                 if len(arg) == 2:             # <<<<<<<<<<<<<<
+- *                     self._add(arg[0], arg[1])
+- *                 else:
+- */
+-        goto __pyx_L12;
+-      }
+-
+-      /* "pyliblo3/_liblo.pyx":959
+- *                     self._add(arg[0], arg[1])
+- *                 else:
+- *                     self._add(arg[0], None)             # <<<<<<<<<<<<<<
+- *             else:
+- *                 # detect type automatically
+- */
+-      /*else*/ {
+-        __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_arg, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 959, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_9);
+-        __pyx_t_8 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message *)__pyx_v_self->__pyx_vtab)->_add(__pyx_v_self, __pyx_t_9, Py_None); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 959, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_8);
+-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+-      }
+-      __pyx_L12:;
+-
+-      /* "pyliblo3/_liblo.pyx":953
+- *         """
+- *         for arg in args:
+- *             if (isinstance(arg, tuple) and len(arg) <= 2 and             # <<<<<<<<<<<<<<
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):
+- *                 # type explicitly specified
+- */
+-      goto __pyx_L5;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":962
+- *             else:
+- *                 # detect type automatically
+- *                 self._add_auto(arg)             # <<<<<<<<<<<<<<
+- * 
+- *     cdef _add(self, type, value):
+- */
+-    /*else*/ {
+-      __pyx_t_8 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message *)__pyx_v_self->__pyx_vtab)->_add_auto(__pyx_v_self, __pyx_v_arg); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 962, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_8);
+-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+-    }
+-    __pyx_L5:;
+-
+-    /* "pyliblo3/_liblo.pyx":952
+- *             args: each argument can be a single value or a tuple `(typetag: str, data: Any)`
+- *         """
+- *         for arg in args:             # <<<<<<<<<<<<<<
+- *             if (isinstance(arg, tuple) and len(arg) <= 2 and
+- *                     isinstance(arg[0], (bytes, unicode)) and len(arg[0]) == 1):
+- */
+-  }
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":940
+- *         lo_message_free(self._message)
+- * 
+- *     def add(self, *args):             # <<<<<<<<<<<<<<
+- *         """
+- *         Append the given arguments to this message
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_8);
+-  __Pyx_XDECREF(__pyx_t_9);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_arg);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":964
+- *                 self._add_auto(arg)
+- * 
+- *     cdef _add(self, type, value):             # <<<<<<<<<<<<<<
+- *         cdef uint8_t midi[4]
+- * 
+- */
+-
+-static PyObject *__pyx_f_8pyliblo3_6_liblo_7Message__add(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_type, PyObject *__pyx_v_value) {
+-  uint8_t __pyx_v_midi[4];
+-  char __pyx_v_t;
+-  PyObject *__pyx_v_s = NULL;
+-  long __pyx_v_n;
+-  struct __pyx_obj_8pyliblo3_6_liblo__Blob *__pyx_v_b = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  PyObject *__pyx_t_2 = NULL;
+-  long __pyx_t_3;
+-  int32_t __pyx_t_4;
+-  int64_t __pyx_t_5;
+-  double __pyx_t_6;
+-  char *__pyx_t_7;
+-  uint8_t __pyx_t_8;
+-  lo_timetag __pyx_t_9;
+-  int __pyx_t_10;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("_add", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":968
+- * 
+- *         # accept both bytes and unicode as type specifier
+- *         cdef char t = ord(_decode(type)[0])             # <<<<<<<<<<<<<<
+- * 
+- *         if t == 'i':
+- */
+-  __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo__decode(__pyx_v_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 968, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 968, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_2);
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_t_3 = __Pyx_PyObject_Ord(__pyx_t_2); if (unlikely(__pyx_t_3 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 968, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-  __pyx_v_t = __pyx_t_3;
+-
+-  /* "pyliblo3/_liblo.pyx":970
+- *         cdef char t = ord(_decode(type)[0])
+- * 
+- *         if t == 'i':             # <<<<<<<<<<<<<<
+- *             lo_message_add_int32(self._message, int(value))
+- *         elif t == 'h':
+- */
+-  switch (__pyx_v_t) {
+-    case 'i':
+-
+-    /* "pyliblo3/_liblo.pyx":971
+- * 
+- *         if t == 'i':
+- *             lo_message_add_int32(self._message, int(value))             # <<<<<<<<<<<<<<
+- *         elif t == 'h':
+- *             lo_message_add_int64(self._message, long(value))
+- */
+-    __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 971, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_4 = __Pyx_PyInt_As_int32_t(__pyx_t_2); if (unlikely((__pyx_t_4 == ((int32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 971, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    lo_message_add_int32(__pyx_v_self->_message, __pyx_t_4);
+-
+-    /* "pyliblo3/_liblo.pyx":970
+- *         cdef char t = ord(_decode(type)[0])
+- * 
+- *         if t == 'i':             # <<<<<<<<<<<<<<
+- *             lo_message_add_int32(self._message, int(value))
+- *         elif t == 'h':
+- */
+-    break;
+-    case 'h':
+-
+-    /* "pyliblo3/_liblo.pyx":973
+- *             lo_message_add_int32(self._message, int(value))
+- *         elif t == 'h':
+- *             lo_message_add_int64(self._message, long(value))             # <<<<<<<<<<<<<<
+- *         elif t == 'f':
+- *             lo_message_add_float(self._message, float(value))
+- */
+-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyLong_Type)), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 973, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_5 = __Pyx_PyInt_As_int64_t(__pyx_t_2); if (unlikely((__pyx_t_5 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 973, __pyx_L1_error)
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    lo_message_add_int64(__pyx_v_self->_message, __pyx_t_5);
+-
+-    /* "pyliblo3/_liblo.pyx":972
+- *         if t == 'i':
+- *             lo_message_add_int32(self._message, int(value))
+- *         elif t == 'h':             # <<<<<<<<<<<<<<
+- *             lo_message_add_int64(self._message, long(value))
+- *         elif t == 'f':
+- */
+-    break;
+-    case 'f':
+-
+-    /* "pyliblo3/_liblo.pyx":975
+- *             lo_message_add_int64(self._message, long(value))
+- *         elif t == 'f':
+- *             lo_message_add_float(self._message, float(value))             # <<<<<<<<<<<<<<
+- *         elif t == 'd':
+- *             lo_message_add_double(self._message, float(value))
+- */
+-    __pyx_t_6 = __Pyx_PyObject_AsDouble(__pyx_v_value); if (unlikely(__pyx_t_6 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 975, __pyx_L1_error)
+-    lo_message_add_float(__pyx_v_self->_message, __pyx_t_6);
+-
+-    /* "pyliblo3/_liblo.pyx":974
+- *         elif t == 'h':
+- *             lo_message_add_int64(self._message, long(value))
+- *         elif t == 'f':             # <<<<<<<<<<<<<<
+- *             lo_message_add_float(self._message, float(value))
+- *         elif t == 'd':
+- */
+-    break;
+-    case 'd':
+-
+-    /* "pyliblo3/_liblo.pyx":977
+- *             lo_message_add_float(self._message, float(value))
+- *         elif t == 'd':
+- *             lo_message_add_double(self._message, float(value))             # <<<<<<<<<<<<<<
+- *         elif t == 'c':
+- *             lo_message_add_char(self._message, ord(value))
+- */
+-    __pyx_t_6 = __Pyx_PyObject_AsDouble(__pyx_v_value); if (unlikely(__pyx_t_6 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 977, __pyx_L1_error)
+-    lo_message_add_double(__pyx_v_self->_message, __pyx_t_6);
+-
+-    /* "pyliblo3/_liblo.pyx":976
+- *         elif t == 'f':
+- *             lo_message_add_float(self._message, float(value))
+- *         elif t == 'd':             # <<<<<<<<<<<<<<
+- *             lo_message_add_double(self._message, float(value))
+- *         elif t == 'c':
+- */
+-    break;
+-    case 'c':
+-
+-    /* "pyliblo3/_liblo.pyx":979
+- *             lo_message_add_double(self._message, float(value))
+- *         elif t == 'c':
+- *             lo_message_add_char(self._message, ord(value))             # <<<<<<<<<<<<<<
+- *         elif t == 's':
+- *             s = _encode(value)
+- */
+-    __pyx_t_3 = __Pyx_PyObject_Ord(__pyx_v_value); if (unlikely(__pyx_t_3 == ((long)(long)(Py_UCS4)-1))) __PYX_ERR(0, 979, __pyx_L1_error)
+-    lo_message_add_char(__pyx_v_self->_message, __pyx_t_3);
+-
+-    /* "pyliblo3/_liblo.pyx":978
+- *         elif t == 'd':
+- *             lo_message_add_double(self._message, float(value))
+- *         elif t == 'c':             # <<<<<<<<<<<<<<
+- *             lo_message_add_char(self._message, ord(value))
+- *         elif t == 's':
+- */
+-    break;
+-    case 's':
+-
+-    /* "pyliblo3/_liblo.pyx":981
+- *             lo_message_add_char(self._message, ord(value))
+- *         elif t == 's':
+- *             s = _encode(value)             # <<<<<<<<<<<<<<
+- *             lo_message_add_string(self._message, s)
+- *         elif t == 'S':
+- */
+-    __pyx_t_2 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 981, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_v_s = ((PyObject*)__pyx_t_2);
+-    __pyx_t_2 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":982
+- *         elif t == 's':
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)             # <<<<<<<<<<<<<<
+- *         elif t == 'S':
+- *             s = _encode(value)
+- */
+-    if (unlikely(__pyx_v_s == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 982, __pyx_L1_error)
+-    }
+-    __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 982, __pyx_L1_error)
+-    lo_message_add_string(__pyx_v_self->_message, __pyx_t_7);
+-
+-    /* "pyliblo3/_liblo.pyx":980
+- *         elif t == 'c':
+- *             lo_message_add_char(self._message, ord(value))
+- *         elif t == 's':             # <<<<<<<<<<<<<<
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)
+- */
+-    break;
+-    case 'S':
+-
+-    /* "pyliblo3/_liblo.pyx":984
+- *             lo_message_add_string(self._message, s)
+- *         elif t == 'S':
+- *             s = _encode(value)             # <<<<<<<<<<<<<<
+- *             lo_message_add_symbol(self._message, s)
+- *         elif t == 'T':
+- */
+-    __pyx_t_2 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 984, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_v_s = ((PyObject*)__pyx_t_2);
+-    __pyx_t_2 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":985
+- *         elif t == 'S':
+- *             s = _encode(value)
+- *             lo_message_add_symbol(self._message, s)             # <<<<<<<<<<<<<<
+- *         elif t == 'T':
+- *             lo_message_add_true(self._message)
+- */
+-    if (unlikely(__pyx_v_s == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 985, __pyx_L1_error)
+-    }
+-    __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 985, __pyx_L1_error)
+-    lo_message_add_symbol(__pyx_v_self->_message, __pyx_t_7);
+-
+-    /* "pyliblo3/_liblo.pyx":983
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)
+- *         elif t == 'S':             # <<<<<<<<<<<<<<
+- *             s = _encode(value)
+- *             lo_message_add_symbol(self._message, s)
+- */
+-    break;
+-    case 'T':
+-
+-    /* "pyliblo3/_liblo.pyx":987
+- *             lo_message_add_symbol(self._message, s)
+- *         elif t == 'T':
+- *             lo_message_add_true(self._message)             # <<<<<<<<<<<<<<
+- *         elif t == 'F':
+- *             lo_message_add_false(self._message)
+- */
+-    lo_message_add_true(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":986
+- *             s = _encode(value)
+- *             lo_message_add_symbol(self._message, s)
+- *         elif t == 'T':             # <<<<<<<<<<<<<<
+- *             lo_message_add_true(self._message)
+- *         elif t == 'F':
+- */
+-    break;
+-    case 'F':
+-
+-    /* "pyliblo3/_liblo.pyx":989
+- *             lo_message_add_true(self._message)
+- *         elif t == 'F':
+- *             lo_message_add_false(self._message)             # <<<<<<<<<<<<<<
+- *         elif t == 'N':
+- *             lo_message_add_nil(self._message)
+- */
+-    lo_message_add_false(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":988
+- *         elif t == 'T':
+- *             lo_message_add_true(self._message)
+- *         elif t == 'F':             # <<<<<<<<<<<<<<
+- *             lo_message_add_false(self._message)
+- *         elif t == 'N':
+- */
+-    break;
+-    case 'N':
+-
+-    /* "pyliblo3/_liblo.pyx":991
+- *             lo_message_add_false(self._message)
+- *         elif t == 'N':
+- *             lo_message_add_nil(self._message)             # <<<<<<<<<<<<<<
+- *         elif t == 'I':
+- *             lo_message_add_infinitum(self._message)
+- */
+-    lo_message_add_nil(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":990
+- *         elif t == 'F':
+- *             lo_message_add_false(self._message)
+- *         elif t == 'N':             # <<<<<<<<<<<<<<
+- *             lo_message_add_nil(self._message)
+- *         elif t == 'I':
+- */
+-    break;
+-    case 'I':
+-
+-    /* "pyliblo3/_liblo.pyx":993
+- *             lo_message_add_nil(self._message)
+- *         elif t == 'I':
+- *             lo_message_add_infinitum(self._message)             # <<<<<<<<<<<<<<
+- *         elif t == 'm':
+- *             for n from 0 <= n < 4:
+- */
+-    lo_message_add_infinitum(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":992
+- *         elif t == 'N':
+- *             lo_message_add_nil(self._message)
+- *         elif t == 'I':             # <<<<<<<<<<<<<<
+- *             lo_message_add_infinitum(self._message)
+- *         elif t == 'm':
+- */
+-    break;
+-    case 'm':
+-
+-    /* "pyliblo3/_liblo.pyx":995
+- *             lo_message_add_infinitum(self._message)
+- *         elif t == 'm':
+- *             for n from 0 <= n < 4:             # <<<<<<<<<<<<<<
+- *                 midi[n] = value[n]
+- *             lo_message_add_midi(self._message, midi)
+- */
+-    for (__pyx_v_n = 0; __pyx_v_n < 4; __pyx_v_n++) {
+-
+-      /* "pyliblo3/_liblo.pyx":996
+- *         elif t == 'm':
+- *             for n from 0 <= n < 4:
+- *                 midi[n] = value[n]             # <<<<<<<<<<<<<<
+- *             lo_message_add_midi(self._message, midi)
+- *         elif t == 't':
+- */
+-      __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_value, __pyx_v_n, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 996, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_2);
+-      __pyx_t_8 = __Pyx_PyInt_As_uint8_t(__pyx_t_2); if (unlikely((__pyx_t_8 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 996, __pyx_L1_error)
+-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-      (__pyx_v_midi[__pyx_v_n]) = __pyx_t_8;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":997
+- *             for n from 0 <= n < 4:
+- *                 midi[n] = value[n]
+- *             lo_message_add_midi(self._message, midi)             # <<<<<<<<<<<<<<
+- *         elif t == 't':
+- *             lo_message_add_timetag(self._message, _double_to_timetag(value))
+- */
+-    lo_message_add_midi(__pyx_v_self->_message, __pyx_v_midi);
+-
+-    /* "pyliblo3/_liblo.pyx":994
+- *         elif t == 'I':
+- *             lo_message_add_infinitum(self._message)
+- *         elif t == 'm':             # <<<<<<<<<<<<<<
+- *             for n from 0 <= n < 4:
+- *                 midi[n] = value[n]
+- */
+-    break;
+-    case 't':
+-
+-    /* "pyliblo3/_liblo.pyx":999
+- *             lo_message_add_midi(self._message, midi)
+- *         elif t == 't':
+- *             lo_message_add_timetag(self._message, _double_to_timetag(value))             # <<<<<<<<<<<<<<
+- *         elif t == 'b':
+- *             b = _Blob(value)
+- */
+-    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 999, __pyx_L1_error)
+-    __pyx_t_9 = __pyx_f_8pyliblo3_6_liblo__double_to_timetag(__pyx_t_6); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 999, __pyx_L1_error)
+-    lo_message_add_timetag(__pyx_v_self->_message, __pyx_t_9);
+-
+-    /* "pyliblo3/_liblo.pyx":998
+- *                 midi[n] = value[n]
+- *             lo_message_add_midi(self._message, midi)
+- *         elif t == 't':             # <<<<<<<<<<<<<<
+- *             lo_message_add_timetag(self._message, _double_to_timetag(value))
+- *         elif t == 'b':
+- */
+-    break;
+-    case 'b':
+-
+-    /* "pyliblo3/_liblo.pyx":1001
+- *             lo_message_add_timetag(self._message, _double_to_timetag(value))
+- *         elif t == 'b':
+- *             b = _Blob(value)             # <<<<<<<<<<<<<<
+- *             # make sure the blob is not deleted as long as this message exists
+- *             self._keep_refs.append(b)
+- */
+-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo__Blob), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1001, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_v_b = ((struct __pyx_obj_8pyliblo3_6_liblo__Blob *)__pyx_t_2);
+-    __pyx_t_2 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":1003
+- *             b = _Blob(value)
+- *             # make sure the blob is not deleted as long as this message exists
+- *             self._keep_refs.append(b)             # <<<<<<<<<<<<<<
+- *             lo_message_add_blob(self._message, (<_Blob>b)._blob)
+- *         else:
+- */
+-    if (unlikely(__pyx_v_self->_keep_refs == Py_None)) {
+-      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
+-      __PYX_ERR(0, 1003, __pyx_L1_error)
+-    }
+-    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_self->_keep_refs, ((PyObject *)__pyx_v_b)); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1003, __pyx_L1_error)
+-
+-    /* "pyliblo3/_liblo.pyx":1004
+- *             # make sure the blob is not deleted as long as this message exists
+- *             self._keep_refs.append(b)
+- *             lo_message_add_blob(self._message, (<_Blob>b)._blob)             # <<<<<<<<<<<<<<
+- *         else:
+- *             raise TypeError("unknown OSC data type '%c'" % t)
+- */
+-    lo_message_add_blob(__pyx_v_self->_message, __pyx_v_b->_blob);
+-
+-    /* "pyliblo3/_liblo.pyx":1000
+- *         elif t == 't':
+- *             lo_message_add_timetag(self._message, _double_to_timetag(value))
+- *         elif t == 'b':             # <<<<<<<<<<<<<<
+- *             b = _Blob(value)
+- *             # make sure the blob is not deleted as long as this message exists
+- */
+-    break;
+-    default:
+-
+-    /* "pyliblo3/_liblo.pyx":1006
+- *             lo_message_add_blob(self._message, (<_Blob>b)._blob)
+- *         else:
+- *             raise TypeError("unknown OSC data type '%c'" % t)             # <<<<<<<<<<<<<<
+- * 
+- *     cdef _add_auto(self, value):
+- */
+-    __pyx_t_2 = __Pyx_PyInt_From_char(__pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1006, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_unknown_OSC_data_type_c, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1006, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1006, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_2);
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+-    __PYX_ERR(0, 1006, __pyx_L1_error)
+-    break;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":964
+- *                 self._add_auto(arg)
+- * 
+- *     cdef _add(self, type, value):             # <<<<<<<<<<<<<<
+- *         cdef uint8_t midi[4]
+- * 
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_2);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message._add", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_s);
+-  __Pyx_XDECREF((PyObject *)__pyx_v_b);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":1008
+- *             raise TypeError("unknown OSC data type '%c'" % t)
+- * 
+- *     cdef _add_auto(self, value):             # <<<<<<<<<<<<<<
+- *         # bool is a subclass of int, so check those first
+- *         if value is True:
+- */
+-
+-static PyObject *__pyx_f_8pyliblo3_6_liblo_7Message__add_auto(struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, PyObject *__pyx_v_value) {
+-  PyObject *__pyx_v_s = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_t_1;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  PyObject *__pyx_t_5 = NULL;
+-  int32_t __pyx_t_6;
+-  int __pyx_t_7;
+-  PyObject *__pyx_t_8 = NULL;
+-  PyObject *__pyx_t_9 = NULL;
+-  PyObject *__pyx_t_10 = NULL;
+-  int64_t __pyx_t_11;
+-  double __pyx_t_12;
+-  char *__pyx_t_13;
+-  PyObject *__pyx_t_14 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("_add_auto", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":1010
+- *     cdef _add_auto(self, value):
+- *         # bool is a subclass of int, so check those first
+- *         if value is True:             # <<<<<<<<<<<<<<
+- *             lo_message_add_true(self._message)
+- *         elif value is False:
+- */
+-  __pyx_t_1 = (__pyx_v_value == Py_True);
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":1011
+- *         # bool is a subclass of int, so check those first
+- *         if value is True:
+- *             lo_message_add_true(self._message)             # <<<<<<<<<<<<<<
+- *         elif value is False:
+- *             lo_message_add_false(self._message)
+- */
+-    lo_message_add_true(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":1010
+- *     cdef _add_auto(self, value):
+- *         # bool is a subclass of int, so check those first
+- *         if value is True:             # <<<<<<<<<<<<<<
+- *             lo_message_add_true(self._message)
+- *         elif value is False:
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1012
+- *         if value is True:
+- *             lo_message_add_true(self._message)
+- *         elif value is False:             # <<<<<<<<<<<<<<
+- *             lo_message_add_false(self._message)
+- *         elif isinstance(value, (int, long)):
+- */
+-  __pyx_t_1 = (__pyx_v_value == Py_False);
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":1013
+- *             lo_message_add_true(self._message)
+- *         elif value is False:
+- *             lo_message_add_false(self._message)             # <<<<<<<<<<<<<<
+- *         elif isinstance(value, (int, long)):
+- *             try:
+- */
+-    lo_message_add_false(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":1012
+- *         if value is True:
+- *             lo_message_add_true(self._message)
+- *         elif value is False:             # <<<<<<<<<<<<<<
+- *             lo_message_add_false(self._message)
+- *         elif isinstance(value, (int, long)):
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1014
+- *         elif value is False:
+- *             lo_message_add_false(self._message)
+- *         elif isinstance(value, (int, long)):             # <<<<<<<<<<<<<<
+- *             try:
+- *                 lo_message_add_int32(self._message, <int32_t>value)
+- */
+-  __pyx_t_2 = PyInt_Check(__pyx_v_value); 
+-  if (!__pyx_t_2) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_2;
+-    goto __pyx_L4_bool_binop_done;
+-  }
+-  __pyx_t_2 = PyLong_Check(__pyx_v_value); 
+-  __pyx_t_1 = __pyx_t_2;
+-  __pyx_L4_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":1015
+- *             lo_message_add_false(self._message)
+- *         elif isinstance(value, (int, long)):
+- *             try:             # <<<<<<<<<<<<<<
+- *                 lo_message_add_int32(self._message, <int32_t>value)
+- *             except OverflowError:
+- */
+-    {
+-      __Pyx_PyThreadState_declare
+-      __Pyx_PyThreadState_assign
+-      __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
+-      __Pyx_XGOTREF(__pyx_t_3);
+-      __Pyx_XGOTREF(__pyx_t_4);
+-      __Pyx_XGOTREF(__pyx_t_5);
+-      /*try:*/ {
+-
+-        /* "pyliblo3/_liblo.pyx":1016
+- *         elif isinstance(value, (int, long)):
+- *             try:
+- *                 lo_message_add_int32(self._message, <int32_t>value)             # <<<<<<<<<<<<<<
+- *             except OverflowError:
+- *                 lo_message_add_int64(self._message, <int64_t>value)
+- */
+-        __pyx_t_6 = __Pyx_PyInt_As_int32_t(__pyx_v_value); if (unlikely((__pyx_t_6 == ((int32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1016, __pyx_L6_error)
+-        lo_message_add_int32(__pyx_v_self->_message, ((int32_t)__pyx_t_6));
+-
+-        /* "pyliblo3/_liblo.pyx":1015
+- *             lo_message_add_false(self._message)
+- *         elif isinstance(value, (int, long)):
+- *             try:             # <<<<<<<<<<<<<<
+- *                 lo_message_add_int32(self._message, <int32_t>value)
+- *             except OverflowError:
+- */
+-      }
+-      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-      goto __pyx_L11_try_end;
+-      __pyx_L6_error:;
+-
+-      /* "pyliblo3/_liblo.pyx":1017
+- *             try:
+- *                 lo_message_add_int32(self._message, <int32_t>value)
+- *             except OverflowError:             # <<<<<<<<<<<<<<
+- *                 lo_message_add_int64(self._message, <int64_t>value)
+- *         elif isinstance(value, float):
+- */
+-      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_OverflowError);
+-      if (__pyx_t_7) {
+-        __Pyx_AddTraceback("pyliblo3._liblo.Message._add_auto", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-        if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(0, 1017, __pyx_L8_except_error)
+-        __Pyx_XGOTREF(__pyx_t_8);
+-        __Pyx_XGOTREF(__pyx_t_9);
+-        __Pyx_XGOTREF(__pyx_t_10);
+-
+-        /* "pyliblo3/_liblo.pyx":1018
+- *                 lo_message_add_int32(self._message, <int32_t>value)
+- *             except OverflowError:
+- *                 lo_message_add_int64(self._message, <int64_t>value)             # <<<<<<<<<<<<<<
+- *         elif isinstance(value, float):
+- *             lo_message_add_float(self._message, float(value))
+- */
+-        __pyx_t_11 = __Pyx_PyInt_As_int64_t(__pyx_v_value); if (unlikely((__pyx_t_11 == ((int64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1018, __pyx_L8_except_error)
+-        lo_message_add_int64(__pyx_v_self->_message, ((int64_t)__pyx_t_11));
+-        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+-        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+-        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+-        goto __pyx_L7_exception_handled;
+-      }
+-      goto __pyx_L8_except_error;
+-
+-      /* "pyliblo3/_liblo.pyx":1015
+- *             lo_message_add_false(self._message)
+- *         elif isinstance(value, (int, long)):
+- *             try:             # <<<<<<<<<<<<<<
+- *                 lo_message_add_int32(self._message, <int32_t>value)
+- *             except OverflowError:
+- */
+-      __pyx_L8_except_error:;
+-      __Pyx_XGIVEREF(__pyx_t_3);
+-      __Pyx_XGIVEREF(__pyx_t_4);
+-      __Pyx_XGIVEREF(__pyx_t_5);
+-      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+-      goto __pyx_L1_error;
+-      __pyx_L7_exception_handled:;
+-      __Pyx_XGIVEREF(__pyx_t_3);
+-      __Pyx_XGIVEREF(__pyx_t_4);
+-      __Pyx_XGIVEREF(__pyx_t_5);
+-      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+-      __pyx_L11_try_end:;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":1014
+- *         elif value is False:
+- *             lo_message_add_false(self._message)
+- *         elif isinstance(value, (int, long)):             # <<<<<<<<<<<<<<
+- *             try:
+- *                 lo_message_add_int32(self._message, <int32_t>value)
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1019
+- *             except OverflowError:
+- *                 lo_message_add_int64(self._message, <int64_t>value)
+- *         elif isinstance(value, float):             # <<<<<<<<<<<<<<
+- *             lo_message_add_float(self._message, float(value))
+- *         elif isinstance(value, (bytes, unicode)):
+- */
+-  __pyx_t_1 = PyFloat_Check(__pyx_v_value); 
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":1020
+- *                 lo_message_add_int64(self._message, <int64_t>value)
+- *         elif isinstance(value, float):
+- *             lo_message_add_float(self._message, float(value))             # <<<<<<<<<<<<<<
+- *         elif isinstance(value, (bytes, unicode)):
+- *             s = _encode(value)
+- */
+-    __pyx_t_12 = __Pyx_PyObject_AsDouble(__pyx_v_value); if (unlikely(__pyx_t_12 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1020, __pyx_L1_error)
+-    lo_message_add_float(__pyx_v_self->_message, __pyx_t_12);
+-
+-    /* "pyliblo3/_liblo.pyx":1019
+- *             except OverflowError:
+- *                 lo_message_add_int64(self._message, <int64_t>value)
+- *         elif isinstance(value, float):             # <<<<<<<<<<<<<<
+- *             lo_message_add_float(self._message, float(value))
+- *         elif isinstance(value, (bytes, unicode)):
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1021
+- *         elif isinstance(value, float):
+- *             lo_message_add_float(self._message, float(value))
+- *         elif isinstance(value, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)
+- */
+-  __pyx_t_2 = PyBytes_Check(__pyx_v_value); 
+-  if (!__pyx_t_2) {
+-  } else {
+-    __pyx_t_1 = __pyx_t_2;
+-    goto __pyx_L14_bool_binop_done;
+-  }
+-  __pyx_t_2 = PyUnicode_Check(__pyx_v_value); 
+-  __pyx_t_1 = __pyx_t_2;
+-  __pyx_L14_bool_binop_done:;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":1022
+- *             lo_message_add_float(self._message, float(value))
+- *         elif isinstance(value, (bytes, unicode)):
+- *             s = _encode(value)             # <<<<<<<<<<<<<<
+- *             lo_message_add_string(self._message, s)
+- *         elif value == None:
+- */
+-    __pyx_t_10 = __pyx_f_8pyliblo3_6_liblo__encode(__pyx_v_value); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1022, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_10);
+-    __pyx_v_s = ((PyObject*)__pyx_t_10);
+-    __pyx_t_10 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":1023
+- *         elif isinstance(value, (bytes, unicode)):
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)             # <<<<<<<<<<<<<<
+- *         elif value == None:
+- *             lo_message_add_nil(self._message)
+- */
+-    if (unlikely(__pyx_v_s == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 1023, __pyx_L1_error)
+-    }
+-    __pyx_t_13 = __Pyx_PyBytes_AsWritableString(__pyx_v_s); if (unlikely((!__pyx_t_13) && PyErr_Occurred())) __PYX_ERR(0, 1023, __pyx_L1_error)
+-    lo_message_add_string(__pyx_v_self->_message, __pyx_t_13);
+-
+-    /* "pyliblo3/_liblo.pyx":1021
+- *         elif isinstance(value, float):
+- *             lo_message_add_float(self._message, float(value))
+- *         elif isinstance(value, (bytes, unicode)):             # <<<<<<<<<<<<<<
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1024
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)
+- *         elif value == None:             # <<<<<<<<<<<<<<
+- *             lo_message_add_nil(self._message)
+- *         elif value == float('inf'):
+- */
+-  __pyx_t_10 = PyObject_RichCompare(__pyx_v_value, Py_None, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1024, __pyx_L1_error)
+-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1024, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":1025
+- *             lo_message_add_string(self._message, s)
+- *         elif value == None:
+- *             lo_message_add_nil(self._message)             # <<<<<<<<<<<<<<
+- *         elif value == float('inf'):
+- *             lo_message_add_infinitum(self._message)
+- */
+-    lo_message_add_nil(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":1024
+- *             s = _encode(value)
+- *             lo_message_add_string(self._message, s)
+- *         elif value == None:             # <<<<<<<<<<<<<<
+- *             lo_message_add_nil(self._message)
+- *         elif value == float('inf'):
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1026
+- *         elif value == None:
+- *             lo_message_add_nil(self._message)
+- *         elif value == float('inf'):             # <<<<<<<<<<<<<<
+- *             lo_message_add_infinitum(self._message)
+- *         else:
+- */
+-  __pyx_t_12 = __Pyx_PyString_AsDouble(__pyx_n_s_inf); if (unlikely(__pyx_t_12 == ((double)((double)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1026, __pyx_L1_error)
+-  __pyx_t_10 = PyFloat_FromDouble(__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1026, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_10);
+-  __pyx_t_9 = PyObject_RichCompare(__pyx_v_value, __pyx_t_10, Py_EQ); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1026, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1026, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+-  if (__pyx_t_1) {
+-
+-    /* "pyliblo3/_liblo.pyx":1027
+- *             lo_message_add_nil(self._message)
+- *         elif value == float('inf'):
+- *             lo_message_add_infinitum(self._message)             # <<<<<<<<<<<<<<
+- *         else:
+- *             # last chance: could be a blob
+- */
+-    lo_message_add_infinitum(__pyx_v_self->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":1026
+- *         elif value == None:
+- *             lo_message_add_nil(self._message)
+- *         elif value == float('inf'):             # <<<<<<<<<<<<<<
+- *             lo_message_add_infinitum(self._message)
+- *         else:
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1030
+- *         else:
+- *             # last chance: could be a blob
+- *             try:             # <<<<<<<<<<<<<<
+- *                 iter(value)
+- *             except TypeError:
+- */
+-  /*else*/ {
+-    {
+-      __Pyx_PyThreadState_declare
+-      __Pyx_PyThreadState_assign
+-      __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_4, &__pyx_t_3);
+-      __Pyx_XGOTREF(__pyx_t_5);
+-      __Pyx_XGOTREF(__pyx_t_4);
+-      __Pyx_XGOTREF(__pyx_t_3);
+-      /*try:*/ {
+-
+-        /* "pyliblo3/_liblo.pyx":1031
+- *             # last chance: could be a blob
+- *             try:
+- *                 iter(value)             # <<<<<<<<<<<<<<
+- *             except TypeError:
+- *                 raise TypeError("unsupported message argument type")
+- */
+-        __pyx_t_9 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1031, __pyx_L16_error)
+-        __Pyx_GOTREF(__pyx_t_9);
+-        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+-
+-        /* "pyliblo3/_liblo.pyx":1030
+- *         else:
+- *             # last chance: could be a blob
+- *             try:             # <<<<<<<<<<<<<<
+- *                 iter(value)
+- *             except TypeError:
+- */
+-      }
+-      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+-      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      goto __pyx_L21_try_end;
+-      __pyx_L16_error:;
+-      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+-      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+-      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+-
+-      /* "pyliblo3/_liblo.pyx":1032
+- *             try:
+- *                 iter(value)
+- *             except TypeError:             # <<<<<<<<<<<<<<
+- *                 raise TypeError("unsupported message argument type")
+- *             self._add('b', value)
+- */
+-      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+-      if (__pyx_t_7) {
+-        __Pyx_AddTraceback("pyliblo3._liblo.Message._add_auto", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-        if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_8) < 0) __PYX_ERR(0, 1032, __pyx_L18_except_error)
+-        __Pyx_XGOTREF(__pyx_t_9);
+-        __Pyx_XGOTREF(__pyx_t_10);
+-        __Pyx_XGOTREF(__pyx_t_8);
+-
+-        /* "pyliblo3/_liblo.pyx":1033
+- *                 iter(value)
+- *             except TypeError:
+- *                 raise TypeError("unsupported message argument type")             # <<<<<<<<<<<<<<
+- *             self._add('b', value)
+- * 
+- */
+-        __pyx_t_14 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1033, __pyx_L18_except_error)
+-        __Pyx_GOTREF(__pyx_t_14);
+-        __Pyx_Raise(__pyx_t_14, 0, 0, 0);
+-        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
+-        __PYX_ERR(0, 1033, __pyx_L18_except_error)
+-      }
+-      goto __pyx_L18_except_error;
+-
+-      /* "pyliblo3/_liblo.pyx":1030
+- *         else:
+- *             # last chance: could be a blob
+- *             try:             # <<<<<<<<<<<<<<
+- *                 iter(value)
+- *             except TypeError:
+- */
+-      __pyx_L18_except_error:;
+-      __Pyx_XGIVEREF(__pyx_t_5);
+-      __Pyx_XGIVEREF(__pyx_t_4);
+-      __Pyx_XGIVEREF(__pyx_t_3);
+-      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_4, __pyx_t_3);
+-      goto __pyx_L1_error;
+-      __pyx_L21_try_end:;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":1034
+- *             except TypeError:
+- *                 raise TypeError("unsupported message argument type")
+- *             self._add('b', value)             # <<<<<<<<<<<<<<
+- * 
+- * 
+- */
+-    __pyx_t_8 = ((struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message *)__pyx_v_self->__pyx_vtab)->_add(__pyx_v_self, __pyx_n_s_b, __pyx_v_value); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1034, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_8);
+-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":1008
+- *             raise TypeError("unknown OSC data type '%c'" % t)
+- * 
+- *     cdef _add_auto(self, value):             # <<<<<<<<<<<<<<
+- *         # bool is a subclass of int, so check those first
+- *         if value is True:
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_8);
+-  __Pyx_XDECREF(__pyx_t_9);
+-  __Pyx_XDECREF(__pyx_t_10);
+-  __Pyx_XDECREF(__pyx_t_14);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message._add_auto", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_s);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Message_7__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Message_6__reduce_cython__, "Message.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Message_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Message_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Message_6__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Message_7__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Message_6__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Message *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Message_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":2
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__message_cannot_be_converte, 0, 0);
+-  __PYX_ERR(2, 2, __pyx_L1_error)
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Message_9__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_7Message_8__setstate_cython__, "Message.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7Message_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Message_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Message_8__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7Message_9__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 3, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_7Message_8__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Message *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_7Message_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":4
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__message_cannot_be_converte, 0, 0);
+-  __PYX_ERR(2, 4, __pyx_L1_error)
+-
+-  /* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._message cannot be converted to a Python object for pickling"
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Message.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":1062
+- *     cdef list _keep_refs
+- * 
+- *     def __init__(self, *messages):             # <<<<<<<<<<<<<<
+- *         cdef lo_timetag tt
+- *         tt.sec, tt.frac = 0, 0
+- */
+-
+-/* Python wrapper */
+-static int __pyx_pw_8pyliblo3_6_liblo_6Bundle_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-static int __pyx_pw_8pyliblo3_6_liblo_6Bundle_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_messages = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__init__", 0))) return -1;
+-  __Pyx_INCREF(__pyx_args);
+-  __pyx_v_messages = __pyx_args;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Bundle___init__(((struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)__pyx_v_self), __pyx_v_messages);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_messages);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static int __pyx_pf_8pyliblo3_6_liblo_6Bundle___init__(struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self, PyObject *__pyx_v_messages) {
+-  lo_timetag __pyx_v_tt;
+-  PyObject *__pyx_v_t = NULL;
+-  int __pyx_r;
+-  __Pyx_RefNannyDeclarations
+-  uint32_t __pyx_t_1;
+-  uint32_t __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  int __pyx_t_4;
+-  Py_ssize_t __pyx_t_5;
+-  int __pyx_t_6;
+-  int __pyx_t_7;
+-  double __pyx_t_8;
+-  lo_timetag __pyx_t_9;
+-  PyObject *__pyx_t_10 = NULL;
+-  PyObject *__pyx_t_11 = NULL;
+-  PyObject *(*__pyx_t_12)(PyObject *);
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__init__", 0);
+-  __Pyx_INCREF(__pyx_v_messages);
+-
+-  /* "pyliblo3/_liblo.pyx":1064
+- *     def __init__(self, *messages):
+- *         cdef lo_timetag tt
+- *         tt.sec, tt.frac = 0, 0             # <<<<<<<<<<<<<<
+- *         self._keep_refs = []
+- * 
+- */
+-  __pyx_t_1 = 0;
+-  __pyx_t_2 = 0;
+-  __pyx_v_tt.sec = __pyx_t_1;
+-  __pyx_v_tt.frac = __pyx_t_2;
+-
+-  /* "pyliblo3/_liblo.pyx":1065
+- *         cdef lo_timetag tt
+- *         tt.sec, tt.frac = 0, 0
+- *         self._keep_refs = []             # <<<<<<<<<<<<<<
+- * 
+- *         if len(messages) and not isinstance(messages[0], Message):
+- */
+-  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1065, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __Pyx_GIVEREF(__pyx_t_3);
+-  __Pyx_GOTREF(__pyx_v_self->_keep_refs);
+-  __Pyx_DECREF(__pyx_v_self->_keep_refs);
+-  __pyx_v_self->_keep_refs = ((PyObject*)__pyx_t_3);
+-  __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":1067
+- *         self._keep_refs = []
+- * 
+- *         if len(messages) and not isinstance(messages[0], Message):             # <<<<<<<<<<<<<<
+- *             t = messages[0]
+- *             if isinstance(t, (float, int, long)):
+- */
+-  __pyx_t_5 = __Pyx_PyTuple_GET_SIZE(__pyx_v_messages); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1067, __pyx_L1_error)
+-  __pyx_t_6 = (__pyx_t_5 != 0);
+-  if (__pyx_t_6) {
+-  } else {
+-    __pyx_t_4 = __pyx_t_6;
+-    goto __pyx_L4_bool_binop_done;
+-  }
+-  __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_messages, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1067, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_6 = __Pyx_TypeCheck(__pyx_t_3, __pyx_ptype_8pyliblo3_6_liblo_Message); 
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  __pyx_t_7 = (!__pyx_t_6);
+-  __pyx_t_4 = __pyx_t_7;
+-  __pyx_L4_bool_binop_done:;
+-  if (__pyx_t_4) {
+-
+-    /* "pyliblo3/_liblo.pyx":1068
+- * 
+- *         if len(messages) and not isinstance(messages[0], Message):
+- *             t = messages[0]             # <<<<<<<<<<<<<<
+- *             if isinstance(t, (float, int, long)):
+- *                 tt = _double_to_timetag(t)
+- */
+-    __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_messages, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1068, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_v_t = __pyx_t_3;
+-    __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":1069
+- *         if len(messages) and not isinstance(messages[0], Message):
+- *             t = messages[0]
+- *             if isinstance(t, (float, int, long)):             # <<<<<<<<<<<<<<
+- *                 tt = _double_to_timetag(t)
+- *             elif isinstance(t, tuple) and len(t) == 2:
+- */
+-    __pyx_t_7 = PyFloat_Check(__pyx_v_t); 
+-    if (!__pyx_t_7) {
+-    } else {
+-      __pyx_t_4 = __pyx_t_7;
+-      goto __pyx_L7_bool_binop_done;
+-    }
+-    __pyx_t_7 = PyInt_Check(__pyx_v_t); 
+-    if (!__pyx_t_7) {
+-    } else {
+-      __pyx_t_4 = __pyx_t_7;
+-      goto __pyx_L7_bool_binop_done;
+-    }
+-    __pyx_t_7 = PyLong_Check(__pyx_v_t); 
+-    __pyx_t_4 = __pyx_t_7;
+-    __pyx_L7_bool_binop_done:;
+-    if (__pyx_t_4) {
+-
+-      /* "pyliblo3/_liblo.pyx":1070
+- *             t = messages[0]
+- *             if isinstance(t, (float, int, long)):
+- *                 tt = _double_to_timetag(t)             # <<<<<<<<<<<<<<
+- *             elif isinstance(t, tuple) and len(t) == 2:
+- *                 tt.sec, tt.frac = t
+- */
+-      __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_t); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 1070, __pyx_L1_error)
+-      __pyx_t_9 = __pyx_f_8pyliblo3_6_liblo__double_to_timetag(__pyx_t_8); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1070, __pyx_L1_error)
+-      __pyx_v_tt = __pyx_t_9;
+-
+-      /* "pyliblo3/_liblo.pyx":1069
+- *         if len(messages) and not isinstance(messages[0], Message):
+- *             t = messages[0]
+- *             if isinstance(t, (float, int, long)):             # <<<<<<<<<<<<<<
+- *                 tt = _double_to_timetag(t)
+- *             elif isinstance(t, tuple) and len(t) == 2:
+- */
+-      goto __pyx_L6;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":1071
+- *             if isinstance(t, (float, int, long)):
+- *                 tt = _double_to_timetag(t)
+- *             elif isinstance(t, tuple) and len(t) == 2:             # <<<<<<<<<<<<<<
+- *                 tt.sec, tt.frac = t
+- *             else:
+- */
+-    __pyx_t_7 = PyTuple_Check(__pyx_v_t); 
+-    if (__pyx_t_7) {
+-    } else {
+-      __pyx_t_4 = __pyx_t_7;
+-      goto __pyx_L10_bool_binop_done;
+-    }
+-    __pyx_t_5 = PyObject_Length(__pyx_v_t); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1071, __pyx_L1_error)
+-    __pyx_t_7 = (__pyx_t_5 == 2);
+-    __pyx_t_4 = __pyx_t_7;
+-    __pyx_L10_bool_binop_done:;
+-    if (likely(__pyx_t_4)) {
+-
+-      /* "pyliblo3/_liblo.pyx":1072
+- *                 tt = _double_to_timetag(t)
+- *             elif isinstance(t, tuple) and len(t) == 2:
+- *                 tt.sec, tt.frac = t             # <<<<<<<<<<<<<<
+- *             else:
+- *                 raise TypeError("invalid timetag")
+- */
+-      if ((likely(PyTuple_CheckExact(__pyx_v_t))) || (PyList_CheckExact(__pyx_v_t))) {
+-        PyObject* sequence = __pyx_v_t;
+-        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+-        if (unlikely(size != 2)) {
+-          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+-          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+-          __PYX_ERR(0, 1072, __pyx_L1_error)
+-        }
+-        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-        if (likely(PyTuple_CheckExact(sequence))) {
+-          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+-          __pyx_t_10 = PyTuple_GET_ITEM(sequence, 1); 
+-        } else {
+-          __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
+-          __pyx_t_10 = PyList_GET_ITEM(sequence, 1); 
+-        }
+-        __Pyx_INCREF(__pyx_t_3);
+-        __Pyx_INCREF(__pyx_t_10);
+-        #else
+-        __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1072, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_3);
+-        __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1072, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_10);
+-        #endif
+-      } else {
+-        Py_ssize_t index = -1;
+-        __pyx_t_11 = PyObject_GetIter(__pyx_v_t); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1072, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_11);
+-        __pyx_t_12 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_11);
+-        index = 0; __pyx_t_3 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_3)) goto __pyx_L12_unpacking_failed;
+-        __Pyx_GOTREF(__pyx_t_3);
+-        index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L12_unpacking_failed;
+-        __Pyx_GOTREF(__pyx_t_10);
+-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) __PYX_ERR(0, 1072, __pyx_L1_error)
+-        __pyx_t_12 = NULL;
+-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+-        goto __pyx_L13_unpacking_done;
+-        __pyx_L12_unpacking_failed:;
+-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+-        __pyx_t_12 = NULL;
+-        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+-        __PYX_ERR(0, 1072, __pyx_L1_error)
+-        __pyx_L13_unpacking_done:;
+-      }
+-      __pyx_t_2 = __Pyx_PyInt_As_uint32_t(__pyx_t_3); if (unlikely((__pyx_t_2 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1072, __pyx_L1_error)
+-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-      __pyx_t_1 = __Pyx_PyInt_As_uint32_t(__pyx_t_10); if (unlikely((__pyx_t_1 == ((uint32_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1072, __pyx_L1_error)
+-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-      __pyx_v_tt.sec = __pyx_t_2;
+-      __pyx_v_tt.frac = __pyx_t_1;
+-
+-      /* "pyliblo3/_liblo.pyx":1071
+- *             if isinstance(t, (float, int, long)):
+- *                 tt = _double_to_timetag(t)
+- *             elif isinstance(t, tuple) and len(t) == 2:             # <<<<<<<<<<<<<<
+- *                 tt.sec, tt.frac = t
+- *             else:
+- */
+-      goto __pyx_L6;
+-    }
+-
+-    /* "pyliblo3/_liblo.pyx":1074
+- *                 tt.sec, tt.frac = t
+- *             else:
+- *                 raise TypeError("invalid timetag")             # <<<<<<<<<<<<<<
+- *             # first argument was timetag, so continue with second
+- *             messages = messages[1:]
+- */
+-    /*else*/ {
+-      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1074, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_10);
+-      __Pyx_Raise(__pyx_t_10, 0, 0, 0);
+-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-      __PYX_ERR(0, 1074, __pyx_L1_error)
+-    }
+-    __pyx_L6:;
+-
+-    /* "pyliblo3/_liblo.pyx":1076
+- *                 raise TypeError("invalid timetag")
+- *             # first argument was timetag, so continue with second
+- *             messages = messages[1:]             # <<<<<<<<<<<<<<
+- * 
+- *         self._bundle = lo_bundle_new(tt)
+- */
+-    __pyx_t_10 = __Pyx_PyTuple_GetSlice(__pyx_v_messages, 1, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1076, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_10);
+-    __Pyx_DECREF_SET(__pyx_v_messages, ((PyObject*)__pyx_t_10));
+-    __pyx_t_10 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":1067
+- *         self._keep_refs = []
+- * 
+- *         if len(messages) and not isinstance(messages[0], Message):             # <<<<<<<<<<<<<<
+- *             t = messages[0]
+- *             if isinstance(t, (float, int, long)):
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1078
+- *             messages = messages[1:]
+- * 
+- *         self._bundle = lo_bundle_new(tt)             # <<<<<<<<<<<<<<
+- *         if len(messages):
+- *             self.add(*messages)
+- */
+-  __pyx_v_self->_bundle = lo_bundle_new(__pyx_v_tt);
+-
+-  /* "pyliblo3/_liblo.pyx":1079
+- * 
+- *         self._bundle = lo_bundle_new(tt)
+- *         if len(messages):             # <<<<<<<<<<<<<<
+- *             self.add(*messages)
+- * 
+- */
+-  __pyx_t_5 = __Pyx_PyTuple_GET_SIZE(__pyx_v_messages); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1079, __pyx_L1_error)
+-  __pyx_t_4 = (__pyx_t_5 != 0);
+-  if (__pyx_t_4) {
+-
+-    /* "pyliblo3/_liblo.pyx":1080
+- *         self._bundle = lo_bundle_new(tt)
+- *         if len(messages):
+- *             self.add(*messages)             # <<<<<<<<<<<<<<
+- * 
+- *     def __dealloc__(self):
+- */
+-    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_add); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1080, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_10);
+-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_v_messages, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1080, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":1079
+- * 
+- *         self._bundle = lo_bundle_new(tt)
+- *         if len(messages):             # <<<<<<<<<<<<<<
+- *             self.add(*messages)
+- * 
+- */
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1062
+- *     cdef list _keep_refs
+- * 
+- *     def __init__(self, *messages):             # <<<<<<<<<<<<<<
+- *         cdef lo_timetag tt
+- *         tt.sec, tt.frac = 0, 0
+- */
+-
+-  /* function exit code */
+-  __pyx_r = 0;
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_10);
+-  __Pyx_XDECREF(__pyx_t_11);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Bundle.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = -1;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_messages);
+-  __Pyx_XDECREF(__pyx_v_t);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "pyliblo3/_liblo.pyx":1082
+- *             self.add(*messages)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_bundle_free(self._bundle)
+- * 
+- */
+-
+-/* Python wrapper */
+-static void __pyx_pw_8pyliblo3_6_liblo_6Bundle_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
+-static void __pyx_pw_8pyliblo3_6_liblo_6Bundle_3__dealloc__(PyObject *__pyx_v_self) {
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  __pyx_pf_8pyliblo3_6_liblo_6Bundle_2__dealloc__(((struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-}
+-
+-static void __pyx_pf_8pyliblo3_6_liblo_6Bundle_2__dealloc__(struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self) {
+-
+-  /* "pyliblo3/_liblo.pyx":1083
+- * 
+- *     def __dealloc__(self):
+- *         lo_bundle_free(self._bundle)             # <<<<<<<<<<<<<<
+- * 
+- *     def add(self, *args):
+- */
+-  lo_bundle_free(__pyx_v_self->_bundle);
+-
+-  /* "pyliblo3/_liblo.pyx":1082
+- *             self.add(*messages)
+- * 
+- *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+- *         lo_bundle_free(self._bundle)
+- * 
+- */
+-
+-  /* function exit code */
+-}
+-
+-/* "pyliblo3/_liblo.pyx":1085
+- *         lo_bundle_free(self._bundle)
+- * 
+- *     def add(self, *args):             # <<<<<<<<<<<<<<
+- *         """
+- *         Add one or more messages to this bundle
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Bundle_5add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6Bundle_4add, "Bundle.add(self, *args)\n\n        Add one or more messages to this bundle\n\n        Possible forms:\n\n        * `add(*messages: Message)`\n        * `add(path: str, *args)`, where path is the osc path (for example, '/path1' or '/root/subpath')\n            and `args` are passed directly to `Message` to create a Message to be added to this Bundle\n\n        Add one or more messages to the bundle.\n        ");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6Bundle_5add = {"add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Bundle_5add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Bundle_4add};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Bundle_5add(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+-  PyObject *__pyx_v_args = 0;
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("add (wrapper)", 0);
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_VARARGS(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "add", 0))) return NULL;
+-  __Pyx_INCREF(__pyx_args);
+-  __pyx_v_args = __pyx_args;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Bundle_4add(((struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)__pyx_v_self), __pyx_v_args);
+-
+-  /* function exit code */
+-  __Pyx_DECREF(__pyx_v_args);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Bundle_4add(struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self, PyObject *__pyx_v_args) {
+-  PyObject *__pyx_v_messages = NULL;
+-  PyObject *__pyx_v_m = NULL;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Message *__pyx_v_message = NULL;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  Py_ssize_t __pyx_t_4;
+-  PyObject *(*__pyx_t_5)(PyObject *);
+-  int __pyx_t_6;
+-  char *__pyx_t_7;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("add", 1);
+-
+-  /* "pyliblo3/_liblo.pyx":1097
+- *         Add one or more messages to the bundle.
+- *         """
+- *         if isinstance(args[0], Message):             # <<<<<<<<<<<<<<
+- *             # args is already a list of Messages
+- *             messages = args
+- */
+-  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_args, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1097, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_TypeCheck(__pyx_t_1, __pyx_ptype_8pyliblo3_6_liblo_Message); 
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "pyliblo3/_liblo.pyx":1099
+- *         if isinstance(args[0], Message):
+- *             # args is already a list of Messages
+- *             messages = args             # <<<<<<<<<<<<<<
+- *         else:
+- *             # make a single Message from all arguments
+- */
+-    __Pyx_INCREF(__pyx_v_args);
+-    __pyx_v_messages = __pyx_v_args;
+-
+-    /* "pyliblo3/_liblo.pyx":1097
+- *         Add one or more messages to the bundle.
+- *         """
+- *         if isinstance(args[0], Message):             # <<<<<<<<<<<<<<
+- *             # args is already a list of Messages
+- *             messages = args
+- */
+-    goto __pyx_L3;
+-  }
+-
+-  /* "pyliblo3/_liblo.pyx":1102
+- *         else:
+- *             # make a single Message from all arguments
+- *             messages = [Message(*args)]             # <<<<<<<<<<<<<<
+- * 
+- *         # add all messages
+- */
+-  /*else*/ {
+-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo_Message), __pyx_v_args, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1102, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1102, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_GIVEREF(__pyx_t_1);
+-    if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1102, __pyx_L1_error);
+-    __pyx_t_1 = 0;
+-    __pyx_v_messages = __pyx_t_3;
+-    __pyx_t_3 = 0;
+-  }
+-  __pyx_L3:;
+-
+-  /* "pyliblo3/_liblo.pyx":1105
+- * 
+- *         # add all messages
+- *         for m in messages:             # <<<<<<<<<<<<<<
+- *             self._keep_refs.append(m)
+- *             message = <Message> m
+- */
+-  if (likely(PyList_CheckExact(__pyx_v_messages)) || PyTuple_CheckExact(__pyx_v_messages)) {
+-    __pyx_t_3 = __pyx_v_messages; __Pyx_INCREF(__pyx_t_3);
+-    __pyx_t_4 = 0;
+-    __pyx_t_5 = NULL;
+-  } else {
+-    __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_messages); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1105, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_5 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1105, __pyx_L1_error)
+-  }
+-  for (;;) {
+-    if (likely(!__pyx_t_5)) {
+-      if (likely(PyList_CheckExact(__pyx_t_3))) {
+-        {
+-          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_3);
+-          #if !CYTHON_ASSUME_SAFE_MACROS
+-          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1105, __pyx_L1_error)
+-          #endif
+-          if (__pyx_t_4 >= __pyx_temp) break;
+-        }
+-        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 1105, __pyx_L1_error)
+-        #else
+-        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1105, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_1);
+-        #endif
+-      } else {
+-        {
+-          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_3);
+-          #if !CYTHON_ASSUME_SAFE_MACROS
+-          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1105, __pyx_L1_error)
+-          #endif
+-          if (__pyx_t_4 >= __pyx_temp) break;
+-        }
+-        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(0, 1105, __pyx_L1_error)
+-        #else
+-        __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1105, __pyx_L1_error)
+-        __Pyx_GOTREF(__pyx_t_1);
+-        #endif
+-      }
+-    } else {
+-      __pyx_t_1 = __pyx_t_5(__pyx_t_3);
+-      if (unlikely(!__pyx_t_1)) {
+-        PyObject* exc_type = PyErr_Occurred();
+-        if (exc_type) {
+-          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+-          else __PYX_ERR(0, 1105, __pyx_L1_error)
+-        }
+-        break;
+-      }
+-      __Pyx_GOTREF(__pyx_t_1);
+-    }
+-    __Pyx_XDECREF_SET(__pyx_v_m, __pyx_t_1);
+-    __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":1106
+- *         # add all messages
+- *         for m in messages:
+- *             self._keep_refs.append(m)             # <<<<<<<<<<<<<<
+- *             message = <Message> m
+- *             lo_bundle_add_message(self._bundle, message._path, message._message)
+- */
+-    if (unlikely(__pyx_v_self->_keep_refs == Py_None)) {
+-      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
+-      __PYX_ERR(0, 1106, __pyx_L1_error)
+-    }
+-    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_self->_keep_refs, __pyx_v_m); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1106, __pyx_L1_error)
+-
+-    /* "pyliblo3/_liblo.pyx":1107
+- *         for m in messages:
+- *             self._keep_refs.append(m)
+- *             message = <Message> m             # <<<<<<<<<<<<<<
+- *             lo_bundle_add_message(self._bundle, message._path, message._message)
+- */
+-    __pyx_t_1 = __pyx_v_m;
+-    __Pyx_INCREF(__pyx_t_1);
+-    __Pyx_XDECREF_SET(__pyx_v_message, ((struct __pyx_obj_8pyliblo3_6_liblo_Message *)__pyx_t_1));
+-    __pyx_t_1 = 0;
+-
+-    /* "pyliblo3/_liblo.pyx":1108
+- *             self._keep_refs.append(m)
+- *             message = <Message> m
+- *             lo_bundle_add_message(self._bundle, message._path, message._message)             # <<<<<<<<<<<<<<
+- */
+-    if (unlikely(__pyx_v_message->_path == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+-      __PYX_ERR(0, 1108, __pyx_L1_error)
+-    }
+-    __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_message->_path); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(0, 1108, __pyx_L1_error)
+-    lo_bundle_add_message(__pyx_v_self->_bundle, __pyx_t_7, __pyx_v_message->_message);
+-
+-    /* "pyliblo3/_liblo.pyx":1105
+- * 
+- *         # add all messages
+- *         for m in messages:             # <<<<<<<<<<<<<<
+- *             self._keep_refs.append(m)
+- *             message = <Message> m
+- */
+-  }
+-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-  /* "pyliblo3/_liblo.pyx":1085
+- *         lo_bundle_free(self._bundle)
+- * 
+- *     def add(self, *args):             # <<<<<<<<<<<<<<
+- *         """
+- *         Add one or more messages to this bundle
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_AddTraceback("pyliblo3._liblo.Bundle.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v_messages);
+-  __Pyx_XDECREF(__pyx_v_m);
+-  __Pyx_XDECREF((PyObject *)__pyx_v_message);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Bundle_7__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6Bundle_6__reduce_cython__, "Bundle.__reduce_cython__(self)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6Bundle_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Bundle_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Bundle_6__reduce_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Bundle_7__reduce_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  if (unlikely(__pyx_nargs > 0)) {
+-    __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+-  if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Bundle_6__reduce_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)__pyx_v_self));
+-
+-  /* function exit code */
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Bundle_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__reduce_cython__", 1);
+-
+-  /* "(tree fragment)":2
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__bundle_cannot_be_converted, 0, 0);
+-  __PYX_ERR(2, 2, __pyx_L1_error)
+-
+-  /* "(tree fragment)":1
+- * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Bundle.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Bundle_9__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6Bundle_8__setstate_cython__, "Bundle.__setstate_cython__(self, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_6Bundle_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Bundle_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Bundle_8__setstate_cython__};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_6Bundle_9__setstate_cython__(PyObject *__pyx_v_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[1] = {0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 3, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(2, 3, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 1)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-    }
+-    __pyx_v___pyx_state = values[0];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 3, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.Bundle.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6Bundle_8__setstate_cython__(((struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)__pyx_v_self), __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6Bundle_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_8pyliblo3_6_liblo_Bundle *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__setstate_cython__", 1);
+-
+-  /* "(tree fragment)":4
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"             # <<<<<<<<<<<<<<
+- */
+-  __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_self__bundle_cannot_be_converted, 0, 0);
+-  __PYX_ERR(2, 4, __pyx_L1_error)
+-
+-  /* "(tree fragment)":3
+- * def __reduce_cython__(self):
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
+- *     raise TypeError, "self._bundle cannot be converted to a Python object for pickling"
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_AddTraceback("pyliblo3._liblo.Bundle.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":1
+- * def __pyx_unpickle_Callback(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
+- *     cdef object __pyx_PickleError
+- *     cdef object __pyx_result
+- */
+-
+-/* Python wrapper */
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7__pyx_unpickle_Callback(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-); /*proto*/
+-PyDoc_STRVAR(__pyx_doc_8pyliblo3_6_liblo_6__pyx_unpickle_Callback, "__pyx_unpickle_Callback(__pyx_type, long __pyx_checksum, __pyx_state)");
+-static PyMethodDef __pyx_mdef_8pyliblo3_6_liblo_7__pyx_unpickle_Callback = {"__pyx_unpickle_Callback", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7__pyx_unpickle_Callback, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6__pyx_unpickle_Callback};
+-static PyObject *__pyx_pw_8pyliblo3_6_liblo_7__pyx_unpickle_Callback(PyObject *__pyx_self, 
+-#if CYTHON_METH_FASTCALL
+-PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+-#else
+-PyObject *__pyx_args, PyObject *__pyx_kwds
+-#endif
+-) {
+-  PyObject *__pyx_v___pyx_type = 0;
+-  long __pyx_v___pyx_checksum;
+-  PyObject *__pyx_v___pyx_state = 0;
+-  #if !CYTHON_METH_FASTCALL
+-  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+-  #endif
+-  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+-  PyObject* values[3] = {0,0,0};
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  PyObject *__pyx_r = 0;
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__pyx_unpickle_Callback (wrapper)", 0);
+-  #if !CYTHON_METH_FASTCALL
+-  #if CYTHON_ASSUME_SAFE_MACROS
+-  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+-  #else
+-  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
+-  #endif
+-  #endif
+-  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+-  {
+-    PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
+-    if (__pyx_kwds) {
+-      Py_ssize_t kw_args;
+-      switch (__pyx_nargs) {
+-        case  3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-        CYTHON_FALLTHROUGH;
+-        case  2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-        CYTHON_FALLTHROUGH;
+-        case  1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-        CYTHON_FALLTHROUGH;
+-        case  0: break;
+-        default: goto __pyx_L5_argtuple_error;
+-      }
+-      kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+-      switch (__pyx_nargs) {
+-        case  0:
+-        if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
+-        else goto __pyx_L5_argtuple_error;
+-        CYTHON_FALLTHROUGH;
+-        case  1:
+-        if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Callback", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
+-        }
+-        CYTHON_FALLTHROUGH;
+-        case  2:
+-        if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+-          (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
+-          kw_args--;
+-        }
+-        else if (unlikely(PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
+-        else {
+-          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Callback", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
+-        }
+-      }
+-      if (unlikely(kw_args > 0)) {
+-        const Py_ssize_t kwd_pos_args = __pyx_nargs;
+-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_Callback") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
+-      }
+-    } else if (unlikely(__pyx_nargs != 3)) {
+-      goto __pyx_L5_argtuple_error;
+-    } else {
+-      values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+-      values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+-      values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+-    }
+-    __pyx_v___pyx_type = values[0];
+-    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
+-    __pyx_v___pyx_state = values[2];
+-  }
+-  goto __pyx_L6_skip;
+-  __pyx_L5_argtuple_error:;
+-  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Callback", 1, 3, 3, __pyx_nargs); __PYX_ERR(2, 1, __pyx_L3_error)
+-  __pyx_L6_skip:;
+-  goto __pyx_L4_argument_unpacking_done;
+-  __pyx_L3_error:;
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_AddTraceback("pyliblo3._liblo.__pyx_unpickle_Callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __Pyx_RefNannyFinishContext();
+-  return NULL;
+-  __pyx_L4_argument_unpacking_done:;
+-  __pyx_r = __pyx_pf_8pyliblo3_6_liblo_6__pyx_unpickle_Callback(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);
+-
+-  /* function exit code */
+-  {
+-    Py_ssize_t __pyx_temp;
+-    for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+-      __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+-    }
+-  }
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_pf_8pyliblo3_6_liblo_6__pyx_unpickle_Callback(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_v___pyx_PickleError = 0;
+-  PyObject *__pyx_v___pyx_result = 0;
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  PyObject *__pyx_t_3 = NULL;
+-  PyObject *__pyx_t_4 = NULL;
+-  int __pyx_t_5;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__pyx_unpickle_Callback", 1);
+-
+-  /* "(tree fragment)":4
+- *     cdef object __pyx_PickleError
+- *     cdef object __pyx_result
+- *     if __pyx_checksum not in (0xb933e34, 0x7cc8780, 0x302b03a):             # <<<<<<<<<<<<<<
+- *         from pickle import PickleError as __pyx_PickleError
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum
+- */
+-  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__10, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 4, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  if (__pyx_t_2) {
+-
+-    /* "(tree fragment)":5
+- *     cdef object __pyx_result
+- *     if __pyx_checksum not in (0xb933e34, 0x7cc8780, 0x302b03a):
+- *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum
+- *     __pyx_result = Callback.__new__(__pyx_type)
+- */
+-    __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_INCREF(__pyx_n_s_PickleError);
+-    __Pyx_GIVEREF(__pyx_n_s_PickleError);
+-    if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(2, 5, __pyx_L1_error);
+-    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_INCREF(__pyx_t_1);
+-    __pyx_v___pyx_PickleError = __pyx_t_1;
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-
+-    /* "(tree fragment)":6
+- *     if __pyx_checksum not in (0xb933e34, 0x7cc8780, 0x302b03a):
+- *         from pickle import PickleError as __pyx_PickleError
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum             # <<<<<<<<<<<<<<
+- *     __pyx_result = Callback.__new__(__pyx_type)
+- *     if __pyx_state is not None:
+- */
+-    __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_3);
+-    __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 6, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-    __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0);
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-    __PYX_ERR(2, 6, __pyx_L1_error)
+-
+-    /* "(tree fragment)":4
+- *     cdef object __pyx_PickleError
+- *     cdef object __pyx_result
+- *     if __pyx_checksum not in (0xb933e34, 0x7cc8780, 0x302b03a):             # <<<<<<<<<<<<<<
+- *         from pickle import PickleError as __pyx_PickleError
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum
+- */
+-  }
+-
+-  /* "(tree fragment)":7
+- *         from pickle import PickleError as __pyx_PickleError
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum
+- *     __pyx_result = Callback.__new__(__pyx_type)             # <<<<<<<<<<<<<<
+- *     if __pyx_state is not None:
+- *         __pyx_unpickle_Callback__set_state(<Callback> __pyx_result, __pyx_state)
+- */
+-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_8pyliblo3_6_liblo_Callback), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_3);
+-  __pyx_t_4 = NULL;
+-  __pyx_t_5 = 0;
+-  #if CYTHON_UNPACK_METHODS
+-  if (likely(PyMethod_Check(__pyx_t_3))) {
+-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+-    if (likely(__pyx_t_4)) {
+-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+-      __Pyx_INCREF(__pyx_t_4);
+-      __Pyx_INCREF(function);
+-      __Pyx_DECREF_SET(__pyx_t_3, function);
+-      __pyx_t_5 = 1;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type};
+-    __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
+-    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+-    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 7, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+-  }
+-  __pyx_v___pyx_result = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "(tree fragment)":8
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum
+- *     __pyx_result = Callback.__new__(__pyx_type)
+- *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
+- *         __pyx_unpickle_Callback__set_state(<Callback> __pyx_result, __pyx_state)
+- *     return __pyx_result
+- */
+-  __pyx_t_2 = (__pyx_v___pyx_state != Py_None);
+-  if (__pyx_t_2) {
+-
+-    /* "(tree fragment)":9
+- *     __pyx_result = Callback.__new__(__pyx_type)
+- *     if __pyx_state is not None:
+- *         __pyx_unpickle_Callback__set_state(<Callback> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
+- *     return __pyx_result
+- * cdef __pyx_unpickle_Callback__set_state(Callback __pyx_result, tuple __pyx_state):
+- */
+-    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(2, 9, __pyx_L1_error)
+-    __pyx_t_1 = __pyx_f_8pyliblo3_6_liblo___pyx_unpickle_Callback__set_state(((struct __pyx_obj_8pyliblo3_6_liblo_Callback *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_1);
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-    /* "(tree fragment)":8
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum
+- *     __pyx_result = Callback.__new__(__pyx_type)
+- *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
+- *         __pyx_unpickle_Callback__set_state(<Callback> __pyx_result, __pyx_state)
+- *     return __pyx_result
+- */
+-  }
+-
+-  /* "(tree fragment)":10
+- *     if __pyx_state is not None:
+- *         __pyx_unpickle_Callback__set_state(<Callback> __pyx_result, __pyx_state)
+- *     return __pyx_result             # <<<<<<<<<<<<<<
+- * cdef __pyx_unpickle_Callback__set_state(Callback __pyx_result, tuple __pyx_state):
+- *     __pyx_result.func = __pyx_state[0]; __pyx_result.has_varargs = __pyx_state[1]; __pyx_result.numargs = __pyx_state[2]; __pyx_result.user_data = __pyx_state[3]
+- */
+-  __Pyx_XDECREF(__pyx_r);
+-  __Pyx_INCREF(__pyx_v___pyx_result);
+-  __pyx_r = __pyx_v___pyx_result;
+-  goto __pyx_L0;
+-
+-  /* "(tree fragment)":1
+- * def __pyx_unpickle_Callback(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
+- *     cdef object __pyx_PickleError
+- *     cdef object __pyx_result
+- */
+-
+-  /* function exit code */
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_3);
+-  __Pyx_XDECREF(__pyx_t_4);
+-  __Pyx_AddTraceback("pyliblo3._liblo.__pyx_unpickle_Callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = NULL;
+-  __pyx_L0:;
+-  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
+-  __Pyx_XDECREF(__pyx_v___pyx_result);
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-/* "(tree fragment)":11
+- *         __pyx_unpickle_Callback__set_state(<Callback> __pyx_result, __pyx_state)
+- *     return __pyx_result
+- * cdef __pyx_unpickle_Callback__set_state(Callback __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
+- *     __pyx_result.func = __pyx_state[0]; __pyx_result.has_varargs = __pyx_state[1]; __pyx_result.numargs = __pyx_state[2]; __pyx_result.user_data = __pyx_state[3]
+- *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
+- */
+-
+-static PyObject *__pyx_f_8pyliblo3_6_liblo___pyx_unpickle_Callback__set_state(struct __pyx_obj_8pyliblo3_6_liblo_Callback *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
+-  PyObject *__pyx_r = NULL;
+-  __Pyx_RefNannyDeclarations
+-  PyObject *__pyx_t_1 = NULL;
+-  int __pyx_t_2;
+-  int __pyx_t_3;
+-  Py_ssize_t __pyx_t_4;
+-  int __pyx_t_5;
+-  PyObject *__pyx_t_6 = NULL;
+-  PyObject *__pyx_t_7 = NULL;
+-  PyObject *__pyx_t_8 = NULL;
+-  int __pyx_lineno = 0;
+-  const char *__pyx_filename = NULL;
+-  int __pyx_clineno = 0;
+-  __Pyx_RefNannySetupContext("__pyx_unpickle_Callback__set_state", 1);
+-
+-  /* "(tree fragment)":12
+- *     return __pyx_result
+- * cdef __pyx_unpickle_Callback__set_state(Callback __pyx_result, tuple __pyx_state):
+- *     __pyx_result.func = __pyx_state[0]; __pyx_result.has_varargs = __pyx_state[1]; __pyx_result.numargs = __pyx_state[2]; __pyx_result.user_data = __pyx_state[3]             # <<<<<<<<<<<<<<
+- *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
+- *         __pyx_result.__dict__.update(__pyx_state[4])
+- */
+-  if (unlikely(__pyx_v___pyx_state == Py_None)) {
+-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+-    __PYX_ERR(2, 12, __pyx_L1_error)
+-  }
+-  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  __Pyx_GOTREF(__pyx_v___pyx_result->func);
+-  __Pyx_DECREF(__pyx_v___pyx_result->func);
+-  __pyx_v___pyx_result->func = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-  if (unlikely(__pyx_v___pyx_state == Py_None)) {
+-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+-    __PYX_ERR(2, 12, __pyx_L1_error)
+-  }
+-  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_v___pyx_result->has_varargs = __pyx_t_2;
+-  if (unlikely(__pyx_v___pyx_state == Py_None)) {
+-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+-    __PYX_ERR(2, 12, __pyx_L1_error)
+-  }
+-  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
+-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-  __pyx_v___pyx_result->numargs = __pyx_t_2;
+-  if (unlikely(__pyx_v___pyx_state == Py_None)) {
+-    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+-    __PYX_ERR(2, 12, __pyx_L1_error)
+-  }
+-  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_t_1);
+-  __Pyx_GIVEREF(__pyx_t_1);
+-  __Pyx_GOTREF(__pyx_v___pyx_result->user_data);
+-  __Pyx_DECREF(__pyx_v___pyx_result->user_data);
+-  __pyx_v___pyx_result->user_data = __pyx_t_1;
+-  __pyx_t_1 = 0;
+-
+-  /* "(tree fragment)":13
+- * cdef __pyx_unpickle_Callback__set_state(Callback __pyx_result, tuple __pyx_state):
+- *     __pyx_result.func = __pyx_state[0]; __pyx_result.has_varargs = __pyx_state[1]; __pyx_result.numargs = __pyx_state[2]; __pyx_result.user_data = __pyx_state[3]
+- *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
+- *         __pyx_result.__dict__.update(__pyx_state[4])
+- */
+-  if (unlikely(__pyx_v___pyx_state == Py_None)) {
+-    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+-    __PYX_ERR(2, 13, __pyx_L1_error)
+-  }
+-  __pyx_t_4 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
+-  __pyx_t_5 = (__pyx_t_4 > 4);
+-  if (__pyx_t_5) {
+-  } else {
+-    __pyx_t_3 = __pyx_t_5;
+-    goto __pyx_L4_bool_binop_done;
+-  }
+-  __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
+-  __pyx_t_3 = __pyx_t_5;
+-  __pyx_L4_bool_binop_done:;
+-  if (__pyx_t_3) {
+-
+-    /* "(tree fragment)":14
+- *     __pyx_result.func = __pyx_state[0]; __pyx_result.has_varargs = __pyx_state[1]; __pyx_result.numargs = __pyx_state[2]; __pyx_result.user_data = __pyx_state[3]
+- *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
+- *         __pyx_result.__dict__.update(__pyx_state[4])             # <<<<<<<<<<<<<<
+- */
+-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_6);
+-    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_7);
+-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+-    if (unlikely(__pyx_v___pyx_state == Py_None)) {
+-      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+-      __PYX_ERR(2, 14, __pyx_L1_error)
+-    }
+-    __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 14, __pyx_L1_error)
+-    __Pyx_GOTREF(__pyx_t_6);
+-    __pyx_t_8 = NULL;
+-    __pyx_t_2 = 0;
+-    #if CYTHON_UNPACK_METHODS
+-    if (likely(PyMethod_Check(__pyx_t_7))) {
+-      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
+-      if (likely(__pyx_t_8)) {
+-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
+-        __Pyx_INCREF(__pyx_t_8);
+-        __Pyx_INCREF(function);
+-        __Pyx_DECREF_SET(__pyx_t_7, function);
+-        __pyx_t_2 = 1;
+-      }
+-    }
+-    #endif
+-    {
+-      PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_t_6};
+-      __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_2, 1+__pyx_t_2);
+-      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+-      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
+-      __Pyx_GOTREF(__pyx_t_1);
+-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+-    }
+-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+-
+-    /* "(tree fragment)":13
+- * cdef __pyx_unpickle_Callback__set_state(Callback __pyx_result, tuple __pyx_state):
+- *     __pyx_result.func = __pyx_state[0]; __pyx_result.has_varargs = __pyx_state[1]; __pyx_result.numargs = __pyx_state[2]; __pyx_result.user_data = __pyx_state[3]
+- *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
+- *         __pyx_result.__dict__.update(__pyx_state[4])
+- */
+-  }
+-
+-  /* "(tree fragment)":11
+- *         __pyx_unpickle_Callback__set_state(<Callback> __pyx_result, __pyx_state)
+- *     return __pyx_result
+- * cdef __pyx_unpickle_Callback__set_state(Callback __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
+- *     __pyx_result.func = __pyx_state[0]; __pyx_result.has_varargs = __pyx_state[1]; __pyx_result.numargs = __pyx_state[2]; __pyx_result.user_data = __pyx_state[3]
+- *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
+- */
+-
+-  /* function exit code */
+-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+-  goto __pyx_L0;
+-  __pyx_L1_error:;
+-  __Pyx_XDECREF(__pyx_t_1);
+-  __Pyx_XDECREF(__pyx_t_6);
+-  __Pyx_XDECREF(__pyx_t_7);
+-  __Pyx_XDECREF(__pyx_t_8);
+-  __Pyx_AddTraceback("pyliblo3._liblo.__pyx_unpickle_Callback__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
+-  __pyx_r = 0;
+-  __pyx_L0:;
+-  __Pyx_XGIVEREF(__pyx_r);
+-  __Pyx_RefNannyFinishContext();
+-  return __pyx_r;
+-}
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Callback(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_Callback *p;
+-  PyObject *o;
+-  #if CYTHON_COMPILING_IN_LIMITED_API
+-  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
+-  o = alloc_func(t, 0);
+-  #else
+-  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
+-    o = (*t->tp_alloc)(t, 0);
+-  } else {
+-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+-  }
+-  if (unlikely(!o)) return 0;
+-  #endif
+-  p = ((struct __pyx_obj_8pyliblo3_6_liblo_Callback *)o);
+-  p->func = Py_None; Py_INCREF(Py_None);
+-  p->user_data = Py_None; Py_INCREF(Py_None);
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo_Callback(PyObject *o) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_Callback *p = (struct __pyx_obj_8pyliblo3_6_liblo_Callback *)o;
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo_Callback) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  PyObject_GC_UnTrack(o);
+-  Py_CLEAR(p->func);
+-  Py_CLEAR(p->user_data);
+-  #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
+-  (*Py_TYPE(o)->tp_free)(o);
+-  #else
+-  {
+-    freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);
+-    if (tp_free) tp_free(o);
+-  }
+-  #endif
+-}
+-
+-static int __pyx_tp_traverse_8pyliblo3_6_liblo_Callback(PyObject *o, visitproc v, void *a) {
+-  int e;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Callback *p = (struct __pyx_obj_8pyliblo3_6_liblo_Callback *)o;
+-  if (p->func) {
+-    e = (*v)(p->func, a); if (e) return e;
+-  }
+-  if (p->user_data) {
+-    e = (*v)(p->user_data, a); if (e) return e;
+-  }
+-  return 0;
+-}
+-
+-static int __pyx_tp_clear_8pyliblo3_6_liblo_Callback(PyObject *o) {
+-  PyObject* tmp;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Callback *p = (struct __pyx_obj_8pyliblo3_6_liblo_Callback *)o;
+-  tmp = ((PyObject*)p->func);
+-  p->func = Py_None; Py_INCREF(Py_None);
+-  Py_XDECREF(tmp);
+-  tmp = ((PyObject*)p->user_data);
+-  p->user_data = Py_None; Py_INCREF(Py_None);
+-  Py_XDECREF(tmp);
+-  return 0;
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo_Callback[] = {
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_8Callback_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_8Callback_2__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_8Callback_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_8Callback_4__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo_Callback_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo_Callback},
+-  {Py_tp_doc, (void *)PyDoc_STR("Callback(func, user_data)\n\n    Used internally to wrap a python function as a callback\n\n    Args:\n        func: the function to call\n        user_data: any python object, will be passed to the callback as the last argument\n    ")},
+-  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pyliblo3_6_liblo_Callback},
+-  {Py_tp_clear, (void *)__pyx_tp_clear_8pyliblo3_6_liblo_Callback},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo_Callback},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_8Callback_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo_Callback},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo_Callback_spec = {
+-  "pyliblo3._liblo.Callback",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Callback),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
+-  __pyx_type_8pyliblo3_6_liblo_Callback_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo_Callback = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""Callback", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Callback), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo_Callback, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+-  PyDoc_STR("Callback(func, user_data)\n\n    Used internally to wrap a python function as a callback\n\n    Args:\n        func: the function to call\n        user_data: any python object, will be passed to the callback as the last argument\n    "), /*tp_doc*/
+-  __pyx_tp_traverse_8pyliblo3_6_liblo_Callback, /*tp_traverse*/
+-  __pyx_tp_clear_8pyliblo3_6_liblo_Callback, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo_Callback, /*tp_methods*/
+-  0, /*tp_members*/
+-  0, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_8Callback_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo_Callback, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase __pyx_vtable_8pyliblo3_6_liblo__ServerBase;
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo__ServerBase(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+-  struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *p;
+-  PyObject *o;
+-  #if CYTHON_COMPILING_IN_LIMITED_API
+-  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
+-  o = alloc_func(t, 0);
+-  #else
+-  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
+-    o = (*t->tp_alloc)(t, 0);
+-  } else {
+-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+-  }
+-  if (unlikely(!o)) return 0;
+-  #endif
+-  p = ((struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)o);
+-  p->__pyx_vtab = __pyx_vtabptr_8pyliblo3_6_liblo__ServerBase;
+-  p->_keep_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo__ServerBase(PyObject *o) {
+-  struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *p = (struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)o;
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo__ServerBase) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  PyObject_GC_UnTrack(o);
+-  Py_CLEAR(p->_keep_refs);
+-  #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
+-  (*Py_TYPE(o)->tp_free)(o);
+-  #else
+-  {
+-    freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);
+-    if (tp_free) tp_free(o);
+-  }
+-  #endif
+-}
+-
+-static int __pyx_tp_traverse_8pyliblo3_6_liblo__ServerBase(PyObject *o, visitproc v, void *a) {
+-  int e;
+-  struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *p = (struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)o;
+-  if (p->_keep_refs) {
+-    e = (*v)(p->_keep_refs, a); if (e) return e;
+-  }
+-  return 0;
+-}
+-
+-static int __pyx_tp_clear_8pyliblo3_6_liblo__ServerBase(PyObject *o) {
+-  PyObject* tmp;
+-  struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *p = (struct __pyx_obj_8pyliblo3_6_liblo__ServerBase *)o;
+-  tmp = ((PyObject*)p->_keep_refs);
+-  p->_keep_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
+-  Py_XDECREF(tmp);
+-  return 0;
+-}
+-
+-static PyObject *__pyx_getprop_8pyliblo3_6_liblo_11_ServerBase_url(PyObject *o, CYTHON_UNUSED void *x) {
+-  return __pyx_pw_8pyliblo3_6_liblo_11_ServerBase_3url_1__get__(o);
+-}
+-
+-static PyObject *__pyx_getprop_8pyliblo3_6_liblo_11_ServerBase_port(PyObject *o, CYTHON_UNUSED void *x) {
+-  return __pyx_pw_8pyliblo3_6_liblo_11_ServerBase_4port_1__get__(o);
+-}
+-
+-static PyObject *__pyx_getprop_8pyliblo3_6_liblo_11_ServerBase_protocol(PyObject *o, CYTHON_UNUSED void *x) {
+-  return __pyx_pw_8pyliblo3_6_liblo_11_ServerBase_8protocol_1__get__(o);
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo__ServerBase[] = {
+-  {"register_methods", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_3register_methods, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_2register_methods},
+-  {"get_url", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_5get_url, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_4get_url},
+-  {"get_port", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_7get_port, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_6get_port},
+-  {"get_protocol", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_9get_protocol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_8get_protocol},
+-  {"fileno", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_11fileno, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_10fileno},
+-  {"add_method", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_13add_method, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_12add_method},
+-  {"del_method", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_15del_method, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_14del_method},
+-  {"add_bundle_handlers", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_17add_bundle_handlers, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_16add_bundle_handlers},
+-  {"send", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_19send, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_18send},
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_21__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_20__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_23__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_11_ServerBase_22__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-
+-static struct PyGetSetDef __pyx_getsets_8pyliblo3_6_liblo__ServerBase[] = {
+-  {(char *)"url", __pyx_getprop_8pyliblo3_6_liblo_11_ServerBase_url, 0, (char *)PyDoc_STR("\n        The server's URL.\n        "), 0},
+-  {(char *)"port", __pyx_getprop_8pyliblo3_6_liblo_11_ServerBase_port, 0, (char *)PyDoc_STR("\n        The server's port number (int)\n        "), 0},
+-  {(char *)"protocol", __pyx_getprop_8pyliblo3_6_liblo_11_ServerBase_protocol, 0, (char *)PyDoc_STR("\n        The server's protocol (one of the constants `LO_UDP`, `LO_TCP` or `LO_UNIX`).\n        "), 0},
+-  {0, 0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo__ServerBase_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_doc, (void *)PyDoc_STR("_ServerBase(reg_methods=True)")},
+-  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_clear, (void *)__pyx_tp_clear_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_getset, (void *)__pyx_getsets_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_11_ServerBase_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo__ServerBase},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo__ServerBase_spec = {
+-  "pyliblo3._liblo._ServerBase",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
+-  __pyx_type_8pyliblo3_6_liblo__ServerBase_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo__ServerBase = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""_ServerBase", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo__ServerBase), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo__ServerBase, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+-  PyDoc_STR("_ServerBase(reg_methods=True)"), /*tp_doc*/
+-  __pyx_tp_traverse_8pyliblo3_6_liblo__ServerBase, /*tp_traverse*/
+-  __pyx_tp_clear_8pyliblo3_6_liblo__ServerBase, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo__ServerBase, /*tp_methods*/
+-  0, /*tp_members*/
+-  __pyx_getsets_8pyliblo3_6_liblo__ServerBase, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_11_ServerBase_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo__ServerBase, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Address(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+-  PyObject *o;
+-  #if CYTHON_COMPILING_IN_LIMITED_API
+-  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
+-  o = alloc_func(t, 0);
+-  #else
+-  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
+-    o = (*t->tp_alloc)(t, 0);
+-  } else {
+-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+-  }
+-  if (unlikely(!o)) return 0;
+-  #endif
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo_Address(PyObject *o) {
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo_Address) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *etype, *eval, *etb;
+-    PyErr_Fetch(&etype, &eval, &etb);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+-    __pyx_pw_8pyliblo3_6_liblo_7Address_3__dealloc__(o);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+-    PyErr_Restore(etype, eval, etb);
+-  }
+-  #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
+-  (*Py_TYPE(o)->tp_free)(o);
+-  #else
+-  {
+-    freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);
+-    if (tp_free) tp_free(o);
+-  }
+-  #endif
+-}
+-
+-static PyObject *__pyx_getprop_8pyliblo3_6_liblo_7Address_url(PyObject *o, CYTHON_UNUSED void *x) {
+-  return __pyx_pw_8pyliblo3_6_liblo_7Address_3url_1__get__(o);
+-}
+-
+-static PyObject *__pyx_getprop_8pyliblo3_6_liblo_7Address_hostname(PyObject *o, CYTHON_UNUSED void *x) {
+-  return __pyx_pw_8pyliblo3_6_liblo_7Address_8hostname_1__get__(o);
+-}
+-
+-static PyObject *__pyx_getprop_8pyliblo3_6_liblo_7Address_port(PyObject *o, CYTHON_UNUSED void *x) {
+-  return __pyx_pw_8pyliblo3_6_liblo_7Address_4port_1__get__(o);
+-}
+-
+-static PyObject *__pyx_getprop_8pyliblo3_6_liblo_7Address_protocol(PyObject *o, CYTHON_UNUSED void *x) {
+-  return __pyx_pw_8pyliblo3_6_liblo_7Address_8protocol_1__get__(o);
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo_Address[] = {
+-  {"get_url", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_5get_url, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_4get_url},
+-  {"get_hostname", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_7get_hostname, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_6get_hostname},
+-  {"get_port", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_9get_port, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_8get_port},
+-  {"get_protocol", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_11get_protocol, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_10get_protocol},
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_13__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_12__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Address_15__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Address_14__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-
+-static struct PyGetSetDef __pyx_getsets_8pyliblo3_6_liblo_Address[] = {
+-  {(char *)"url", __pyx_getprop_8pyliblo3_6_liblo_7Address_url, 0, (char *)PyDoc_STR("\n        The address's URL.\n        "), 0},
+-  {(char *)"hostname", __pyx_getprop_8pyliblo3_6_liblo_7Address_hostname, 0, (char *)PyDoc_STR("\n        The address's hostname.\n        "), 0},
+-  {(char *)"port", __pyx_getprop_8pyliblo3_6_liblo_7Address_port, 0, (char *)PyDoc_STR("\n        The address's port number.\n        "), 0},
+-  {(char *)"protocol", __pyx_getprop_8pyliblo3_6_liblo_7Address_protocol, 0, (char *)PyDoc_STR("\n        The address's protocol (one of the constants :const:`UDP`,\n        :const:`TCP`, or :const:`UNIX`).\n        "), 0},
+-  {0, 0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo_Address_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo_Address},
+-  {Py_tp_doc, (void *)PyDoc_STR("Address(addr, addr2=None, proto=LO_UDP)\n\n    An Address represents a destination for a message\n\n    Possible forms:\n\n    * `Address(hostname: str, port: int, proto: [int | str] = LO_UDP`)\n    * `Address(port: int)`   # Assumes localhost\n    * `Address(url: str)`    # A URL of the form 'osc.udp://hostname:1234/'\n\n    Create a new `Address` object from the given hostname/port\n    or URL.\n\n    Args:\n        hostname: the target's hostname - the name or an IP of the form '127.0.0.0'.\n        port: the port number of the target\n        proto: one of the constants `LO_UDP`, `LO_TCP`, `LO_UNIX` or a string like 'UDP', 'TCP' or 'UNIX'\n        url: a URL in liblo notation, e.g. `'osc.udp://hostname:1234/'`.\n\n    Raises:\n        AddressError: if the given parameters do not represent a valid address.\n\n    ")},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo_Address},
+-  {Py_tp_getset, (void *)__pyx_getsets_8pyliblo3_6_liblo_Address},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_7Address_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo_Address},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo_Address_spec = {
+-  "pyliblo3._liblo.Address",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Address),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
+-  __pyx_type_8pyliblo3_6_liblo_Address_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo_Address = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""Address", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Address), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo_Address, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+-  PyDoc_STR("Address(addr, addr2=None, proto=LO_UDP)\n\n    An Address represents a destination for a message\n\n    Possible forms:\n\n    * `Address(hostname: str, port: int, proto: [int | str] = LO_UDP`)\n    * `Address(port: int)`   # Assumes localhost\n    * `Address(url: str)`    # A URL of the form 'osc.udp://hostname:1234/'\n\n    Create a new `Address` object from the given hostname/port\n    or URL.\n\n    Args:\n        hostname: the target's hostname - the name or an IP of the form '127.0.0.0'.\n        port: the port number of the target\n        proto: one of the constants `LO_UDP`, `LO_TCP`, `LO_UNIX` or a string like 'UDP', 'TCP' or 'UNIX'\n        url: a URL in liblo notation, e.g. `'osc.udp://hostname:1234/'`.\n\n    Raises:\n        AddressError: if the given parameters do not represent a valid address.\n\n    "), /*tp_doc*/
+-  0, /*tp_traverse*/
+-  0, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo_Address, /*tp_methods*/
+-  0, /*tp_members*/
+-  __pyx_getsets_8pyliblo3_6_liblo_Address, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_7Address_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo_Address, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo_Message __pyx_vtable_8pyliblo3_6_liblo_Message;
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Message(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_Message *p;
+-  PyObject *o;
+-  #if CYTHON_COMPILING_IN_LIMITED_API
+-  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
+-  o = alloc_func(t, 0);
+-  #else
+-  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
+-    o = (*t->tp_alloc)(t, 0);
+-  } else {
+-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+-  }
+-  if (unlikely(!o)) return 0;
+-  #endif
+-  p = ((struct __pyx_obj_8pyliblo3_6_liblo_Message *)o);
+-  p->__pyx_vtab = __pyx_vtabptr_8pyliblo3_6_liblo_Message;
+-  p->_path = ((PyObject*)Py_None); Py_INCREF(Py_None);
+-  p->_keep_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo_Message(PyObject *o) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_Message *p = (struct __pyx_obj_8pyliblo3_6_liblo_Message *)o;
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo_Message) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  PyObject_GC_UnTrack(o);
+-  {
+-    PyObject *etype, *eval, *etb;
+-    PyErr_Fetch(&etype, &eval, &etb);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+-    __pyx_pw_8pyliblo3_6_liblo_7Message_3__dealloc__(o);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+-    PyErr_Restore(etype, eval, etb);
+-  }
+-  Py_CLEAR(p->_path);
+-  Py_CLEAR(p->_keep_refs);
+-  #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
+-  (*Py_TYPE(o)->tp_free)(o);
+-  #else
+-  {
+-    freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);
+-    if (tp_free) tp_free(o);
+-  }
+-  #endif
+-}
+-
+-static int __pyx_tp_traverse_8pyliblo3_6_liblo_Message(PyObject *o, visitproc v, void *a) {
+-  int e;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Message *p = (struct __pyx_obj_8pyliblo3_6_liblo_Message *)o;
+-  if (p->_keep_refs) {
+-    e = (*v)(p->_keep_refs, a); if (e) return e;
+-  }
+-  return 0;
+-}
+-
+-static int __pyx_tp_clear_8pyliblo3_6_liblo_Message(PyObject *o) {
+-  PyObject* tmp;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Message *p = (struct __pyx_obj_8pyliblo3_6_liblo_Message *)o;
+-  tmp = ((PyObject*)p->_keep_refs);
+-  p->_keep_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
+-  Py_XDECREF(tmp);
+-  return 0;
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo_Message[] = {
+-  {"add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Message_5add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Message_4add},
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Message_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Message_6__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_7Message_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_7Message_8__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo_Message_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo_Message},
+-  {Py_tp_doc, (void *)PyDoc_STR("Message(path, *args)\n\n    An OSC message, consisting of a path and arbitrary arguments.\n\n    Args:\n        path (str): the path of the message\n        args: any arguments passed will be added to this messag\n    ")},
+-  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pyliblo3_6_liblo_Message},
+-  {Py_tp_clear, (void *)__pyx_tp_clear_8pyliblo3_6_liblo_Message},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo_Message},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_7Message_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo_Message},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo_Message_spec = {
+-  "pyliblo3._liblo.Message",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Message),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
+-  __pyx_type_8pyliblo3_6_liblo_Message_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo_Message = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""Message", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Message), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo_Message, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+-  PyDoc_STR("Message(path, *args)\n\n    An OSC message, consisting of a path and arbitrary arguments.\n\n    Args:\n        path (str): the path of the message\n        args: any arguments passed will be added to this messag\n    "), /*tp_doc*/
+-  __pyx_tp_traverse_8pyliblo3_6_liblo_Message, /*tp_traverse*/
+-  __pyx_tp_clear_8pyliblo3_6_liblo_Message, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo_Message, /*tp_methods*/
+-  0, /*tp_members*/
+-  0, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_7Message_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo_Message, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Bundle(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_Bundle *p;
+-  PyObject *o;
+-  #if CYTHON_COMPILING_IN_LIMITED_API
+-  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
+-  o = alloc_func(t, 0);
+-  #else
+-  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
+-    o = (*t->tp_alloc)(t, 0);
+-  } else {
+-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+-  }
+-  if (unlikely(!o)) return 0;
+-  #endif
+-  p = ((struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)o);
+-  p->_keep_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo_Bundle(PyObject *o) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_Bundle *p = (struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)o;
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo_Bundle) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  PyObject_GC_UnTrack(o);
+-  {
+-    PyObject *etype, *eval, *etb;
+-    PyErr_Fetch(&etype, &eval, &etb);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+-    __pyx_pw_8pyliblo3_6_liblo_6Bundle_3__dealloc__(o);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+-    PyErr_Restore(etype, eval, etb);
+-  }
+-  Py_CLEAR(p->_keep_refs);
+-  #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
+-  (*Py_TYPE(o)->tp_free)(o);
+-  #else
+-  {
+-    freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);
+-    if (tp_free) tp_free(o);
+-  }
+-  #endif
+-}
+-
+-static int __pyx_tp_traverse_8pyliblo3_6_liblo_Bundle(PyObject *o, visitproc v, void *a) {
+-  int e;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Bundle *p = (struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)o;
+-  if (p->_keep_refs) {
+-    e = (*v)(p->_keep_refs, a); if (e) return e;
+-  }
+-  return 0;
+-}
+-
+-static int __pyx_tp_clear_8pyliblo3_6_liblo_Bundle(PyObject *o) {
+-  PyObject* tmp;
+-  struct __pyx_obj_8pyliblo3_6_liblo_Bundle *p = (struct __pyx_obj_8pyliblo3_6_liblo_Bundle *)o;
+-  tmp = ((PyObject*)p->_keep_refs);
+-  p->_keep_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
+-  Py_XDECREF(tmp);
+-  return 0;
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo_Bundle[] = {
+-  {"add", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Bundle_5add, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Bundle_4add},
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Bundle_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Bundle_6__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Bundle_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Bundle_8__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo_Bundle_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo_Bundle},
+-  {Py_tp_doc, (void *)PyDoc_STR("Bundle(*messages)\n\n    A bundle of one or more messages to be sent and dispatched together.\n\n    Possible forms:\n\n    * `Bundle(*messages)`\n    * `Bundle(timetag: float, *messages)`\n\n    Create a new `Bundle` object. You can optionally specify a\n    time at which the messages should be dispatched (as an OSC timetag\n    float), and any number of messages to be included in the bundle.\n\n    Args:\n        timetag (float): optional, speficies the time at which the message\n            should be dispatched\n        messages: any number of `Message`s to include in this `Bundle`\n    ")},
+-  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pyliblo3_6_liblo_Bundle},
+-  {Py_tp_clear, (void *)__pyx_tp_clear_8pyliblo3_6_liblo_Bundle},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo_Bundle},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_6Bundle_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo_Bundle},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo_Bundle_spec = {
+-  "pyliblo3._liblo.Bundle",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Bundle),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
+-  __pyx_type_8pyliblo3_6_liblo_Bundle_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo_Bundle = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""Bundle", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Bundle), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo_Bundle, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+-  PyDoc_STR("Bundle(*messages)\n\n    A bundle of one or more messages to be sent and dispatched together.\n\n    Possible forms:\n\n    * `Bundle(*messages)`\n    * `Bundle(timetag: float, *messages)`\n\n    Create a new `Bundle` object. You can optionally specify a\n    time at which the messages should be dispatched (as an OSC timetag\n    float), and any number of messages to be included in the bundle.\n\n    Args:\n        timetag (float): optional, speficies the time at which the message\n            should be dispatched\n        messages: any number of `Message`s to include in this `Bundle`\n    "), /*tp_doc*/
+-  __pyx_tp_traverse_8pyliblo3_6_liblo_Bundle, /*tp_traverse*/
+-  __pyx_tp_clear_8pyliblo3_6_liblo_Bundle, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo_Bundle, /*tp_methods*/
+-  0, /*tp_members*/
+-  0, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_6Bundle_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo_Bundle, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo_Server __pyx_vtable_8pyliblo3_6_liblo_Server;
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_Server(PyTypeObject *t, PyObject *a, PyObject *k) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_Server *p;
+-  PyObject *o = __pyx_tp_new_8pyliblo3_6_liblo__ServerBase(t, a, k);
+-  if (unlikely(!o)) return 0;
+-  p = ((struct __pyx_obj_8pyliblo3_6_liblo_Server *)o);
+-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase*)__pyx_vtabptr_8pyliblo3_6_liblo_Server;
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo_Server(PyObject *o) {
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo_Server) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  PyObject_GC_UnTrack(o);
+-  {
+-    PyObject *etype, *eval, *etb;
+-    PyErr_Fetch(&etype, &eval, &etb);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+-    __pyx_pw_8pyliblo3_6_liblo_6Server_3__dealloc__(o);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+-    PyErr_Restore(etype, eval, etb);
+-  }
+-  PyObject_GC_Track(o);
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo__ServerBase(o);
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo_Server[] = {
+-  {"free", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_5free, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_4free},
+-  {"recv", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_7recv, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_6recv},
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_9__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_8__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_6Server_11__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_6Server_10__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo_Server_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo_Server},
+-  {Py_tp_doc, (void *)PyDoc_STR("Server(port=None, proto=LO_DEFAULT, reg_methods=True)\n\n    A server that can receive OSC messages, blocking\n\n    Use [ServerThread](#ServerThread) for an OSC server that runs in its own thread\n    and never blocks.\n\n    Args:\n        port (int | None): a decimal port number or a UNIX socket path.  If omitted, an\n            arbitrary free UDP port will be used.\n        proto (int | str): one of LO_UDP, LO_TCP, LO_UNIX or LO_DEFAULT, or one of the\n            strings 'UDP', 'TCP', 'UNIX'\n        reg_methods (bool): if True, register any methods decorated with the [make_method](#make_method)\n            decorator\n\n        Raises:\n            ServerError: if an error occurs created the underlying liblo server\n\n    ")},
+-  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_clear, (void *)__pyx_tp_clear_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo_Server},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_6Server_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo_Server},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo_Server_spec = {
+-  "pyliblo3._liblo.Server",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Server),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
+-  __pyx_type_8pyliblo3_6_liblo_Server_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo_Server = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""Server", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_Server), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo_Server, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+-  PyDoc_STR("Server(port=None, proto=LO_DEFAULT, reg_methods=True)\n\n    A server that can receive OSC messages, blocking\n\n    Use [ServerThread](#ServerThread) for an OSC server that runs in its own thread\n    and never blocks.\n\n    Args:\n        port (int | None): a decimal port number or a UNIX socket path.  If omitted, an\n            arbitrary free UDP port will be used.\n        proto (int | str): one of LO_UDP, LO_TCP, LO_UNIX or LO_DEFAULT, or one of the\n            strings 'UDP', 'TCP', 'UNIX'\n        reg_methods (bool): if True, register any methods decorated with the [make_method](#make_method)\n            decorator\n\n        Raises:\n            ServerError: if an error occurs created the underlying liblo server\n\n    "), /*tp_doc*/
+-  __pyx_tp_traverse_8pyliblo3_6_liblo__ServerBase, /*tp_traverse*/
+-  __pyx_tp_clear_8pyliblo3_6_liblo__ServerBase, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo_Server, /*tp_methods*/
+-  0, /*tp_members*/
+-  0, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_6Server_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo_Server, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-static struct __pyx_vtabstruct_8pyliblo3_6_liblo_ServerThread __pyx_vtable_8pyliblo3_6_liblo_ServerThread;
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo_ServerThread(PyTypeObject *t, PyObject *a, PyObject *k) {
+-  struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *p;
+-  PyObject *o = __pyx_tp_new_8pyliblo3_6_liblo__ServerBase(t, a, k);
+-  if (unlikely(!o)) return 0;
+-  p = ((struct __pyx_obj_8pyliblo3_6_liblo_ServerThread *)o);
+-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8pyliblo3_6_liblo__ServerBase*)__pyx_vtabptr_8pyliblo3_6_liblo_ServerThread;
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo_ServerThread(PyObject *o) {
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo_ServerThread) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  PyObject_GC_UnTrack(o);
+-  {
+-    PyObject *etype, *eval, *etb;
+-    PyErr_Fetch(&etype, &eval, &etb);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+-    __pyx_pw_8pyliblo3_6_liblo_12ServerThread_3__dealloc__(o);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+-    PyErr_Restore(etype, eval, etb);
+-  }
+-  PyObject_GC_Track(o);
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo__ServerBase(o);
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo_ServerThread[] = {
+-  {"free", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_5free, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_4free},
+-  {"start", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_7start, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_6start},
+-  {"stop", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_9stop, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_8stop},
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_10__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_12ServerThread_12__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo_ServerThread_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo_ServerThread},
+-  {Py_tp_doc, (void *)PyDoc_STR("ServerThread(port=None, proto=LO_DEFAULT, reg_methods=True)\n\n    Server running in a thread\n\n    Unlike `Server`, `ServerThread` uses its own thread which\n    runs in the background to dispatch messages. `ServerThread`\n    has the same methods as `Server`, with the\n    exception of `.recv`. Instead, it defines two additional\n    methods `.start` and `.stop`.\n\n    Args:\n        port (int | str): a decimal port number or a UNIX socket path. If omitted, an\n            arbitrary free UDP port will be used.\n        proto (int | str): one of the constants `LO_UDP`, `LO_TCP` or `LO_UNIX` or\n            a corresponding string 'UDP', 'TCP', 'UNIX'\n        reg_methods: if True, register any method decorated with the [make_method](#make_method)\n            decorator\n\n    Raises:\n        ServerError: if creating the server fails, e.g. because the given port could not\n            be opened.\n\n    !!! note\n\n        Because liblo creates its own thread to receive and dispatch\n        messages, callback functions will not be run in the main Python\n        thread!\n\n    ")},
+-  {Py_tp_traverse, (void *)__pyx_tp_traverse_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_clear, (void *)__pyx_tp_clear_8pyliblo3_6_liblo__ServerBase},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo_ServerThread},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_12ServerThread_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo_ServerThread},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo_ServerThread_spec = {
+-  "pyliblo3._liblo.ServerThread",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
+-  __pyx_type_8pyliblo3_6_liblo_ServerThread_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo_ServerThread = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""ServerThread", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo_ServerThread), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo_ServerThread, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+-  PyDoc_STR("ServerThread(port=None, proto=LO_DEFAULT, reg_methods=True)\n\n    Server running in a thread\n\n    Unlike `Server`, `ServerThread` uses its own thread which\n    runs in the background to dispatch messages. `ServerThread`\n    has the same methods as `Server`, with the\n    exception of `.recv`. Instead, it defines two additional\n    methods `.start` and `.stop`.\n\n    Args:\n        port (int | str): a decimal port number or a UNIX socket path. If omitted, an\n            arbitrary free UDP port will be used.\n        proto (int | str): one of the constants `LO_UDP`, `LO_TCP` or `LO_UNIX` or\n            a corresponding string 'UDP', 'TCP', 'UNIX'\n        reg_methods: if True, register any method decorated with the [make_method](#make_method)\n            decorator\n\n    Raises:\n        ServerError: if creating the server fails, e.g. because the given port could not\n            be opened.\n\n    !!! note\n\n        Because liblo creates its own thread to receive and dispatch\n        messages, callback functions will not be run in the main Python\n        thread!\n\n    "), /*tp_doc*/
+-  __pyx_tp_traverse_8pyliblo3_6_liblo__ServerBase, /*tp_traverse*/
+-  __pyx_tp_clear_8pyliblo3_6_liblo__ServerBase, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo_ServerThread, /*tp_methods*/
+-  0, /*tp_members*/
+-  0, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_12ServerThread_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo_ServerThread, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-
+-static PyObject *__pyx_tp_new_8pyliblo3_6_liblo__Blob(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+-  PyObject *o;
+-  #if CYTHON_COMPILING_IN_LIMITED_API
+-  allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc);
+-  o = alloc_func(t, 0);
+-  #else
+-  if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
+-    o = (*t->tp_alloc)(t, 0);
+-  } else {
+-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+-  }
+-  if (unlikely(!o)) return 0;
+-  #endif
+-  return o;
+-}
+-
+-static void __pyx_tp_dealloc_8pyliblo3_6_liblo__Blob(PyObject *o) {
+-  #if CYTHON_USE_TP_FINALIZE
+-  if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
+-    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8pyliblo3_6_liblo__Blob) {
+-      if (PyObject_CallFinalizerFromDealloc(o)) return;
+-    }
+-  }
+-  #endif
+-  {
+-    PyObject *etype, *eval, *etb;
+-    PyErr_Fetch(&etype, &eval, &etb);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+-    __pyx_pw_8pyliblo3_6_liblo_5_Blob_3__dealloc__(o);
+-    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+-    PyErr_Restore(etype, eval, etb);
+-  }
+-  #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY
+-  (*Py_TYPE(o)->tp_free)(o);
+-  #else
+-  {
+-    freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free);
+-    if (tp_free) tp_free(o);
+-  }
+-  #endif
+-}
+-
+-static PyMethodDef __pyx_methods_8pyliblo3_6_liblo__Blob[] = {
+-  {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_5_Blob_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_5_Blob_4__reduce_cython__},
+-  {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8pyliblo3_6_liblo_5_Blob_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8pyliblo3_6_liblo_5_Blob_6__setstate_cython__},
+-  {0, 0, 0, 0}
+-};
+-#if CYTHON_USE_TYPE_SPECS
+-static PyType_Slot __pyx_type_8pyliblo3_6_liblo__Blob_slots[] = {
+-  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8pyliblo3_6_liblo__Blob},
+-  {Py_tp_doc, (void *)PyDoc_STR("_Blob(arr)")},
+-  {Py_tp_methods, (void *)__pyx_methods_8pyliblo3_6_liblo__Blob},
+-  {Py_tp_init, (void *)__pyx_pw_8pyliblo3_6_liblo_5_Blob_1__init__},
+-  {Py_tp_new, (void *)__pyx_tp_new_8pyliblo3_6_liblo__Blob},
+-  {0, 0},
+-};
+-static PyType_Spec __pyx_type_8pyliblo3_6_liblo__Blob_spec = {
+-  "pyliblo3._liblo._Blob",
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo__Blob),
+-  0,
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
+-  __pyx_type_8pyliblo3_6_liblo__Blob_slots,
+-};
+-#else
+-
+-static PyTypeObject __pyx_type_8pyliblo3_6_liblo__Blob = {
+-  PyVarObject_HEAD_INIT(0, 0)
+-  "pyliblo3._liblo.""_Blob", /*tp_name*/
+-  sizeof(struct __pyx_obj_8pyliblo3_6_liblo__Blob), /*tp_basicsize*/
+-  0, /*tp_itemsize*/
+-  __pyx_tp_dealloc_8pyliblo3_6_liblo__Blob, /*tp_dealloc*/
+-  #if PY_VERSION_HEX < 0x030800b4
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b4
+-  0, /*tp_vectorcall_offset*/
+-  #endif
+-  0, /*tp_getattr*/
+-  0, /*tp_setattr*/
+-  #if PY_MAJOR_VERSION < 3
+-  0, /*tp_compare*/
+-  #endif
+-  #if PY_MAJOR_VERSION >= 3
+-  0, /*tp_as_async*/
+-  #endif
+-  0, /*tp_repr*/
+-  0, /*tp_as_number*/
+-  0, /*tp_as_sequence*/
+-  0, /*tp_as_mapping*/
+-  0, /*tp_hash*/
+-  0, /*tp_call*/
+-  0, /*tp_str*/
+-  0, /*tp_getattro*/
+-  0, /*tp_setattro*/
+-  0, /*tp_as_buffer*/
+-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+-  PyDoc_STR("_Blob(arr)"), /*tp_doc*/
+-  0, /*tp_traverse*/
+-  0, /*tp_clear*/
+-  0, /*tp_richcompare*/
+-  0, /*tp_weaklistoffset*/
+-  0, /*tp_iter*/
+-  0, /*tp_iternext*/
+-  __pyx_methods_8pyliblo3_6_liblo__Blob, /*tp_methods*/
+-  0, /*tp_members*/
+-  0, /*tp_getset*/
+-  0, /*tp_base*/
+-  0, /*tp_dict*/
+-  0, /*tp_descr_get*/
+-  0, /*tp_descr_set*/
+-  #if !CYTHON_USE_TYPE_SPECS
+-  0, /*tp_dictoffset*/
+-  #endif
+-  __pyx_pw_8pyliblo3_6_liblo_5_Blob_1__init__, /*tp_init*/
+-  0, /*tp_alloc*/
+-  __pyx_tp_new_8pyliblo3_6_liblo__Blob, /*tp_new*/
+-  0, /*tp_free*/
+-  0, /*tp_is_gc*/
+-  0, /*tp_bases*/
+-  0, /*tp_mro*/
+-  0, /*tp_cache*/
+-  0, /*tp_subclasses*/
+-  0, /*tp_weaklist*/
+-  0, /*tp_del*/
+-  0, /*tp_version_tag*/
+-  #if PY_VERSION_HEX >= 0x030400a1
+-  #if CYTHON_USE_TP_FINALIZE
+-  0, /*tp_finalize*/
+-  #else
+-  NULL, /*tp_finalize*/
+-  #endif
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+-  0, /*tp_vectorcall*/
+-  #endif
+-  #if __PYX_NEED_TP_PRINT_SLOT == 1
+-  0, /*tp_print*/
+-  #endif
+-  #if PY_VERSION_HEX >= 0x030C0000
+-  0, /*tp_watched*/
+-  #endif
+-  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
+-  0, /*tp_pypy_flags*/
+-  #endif
+-};
+-#endif
+-
+-static PyMethodDef __pyx_methods[] = {
+-  {0, 0, 0, 0}
+-};
+-#ifndef CYTHON_SMALL_CODE
+-#if defined(__clang__)
+-    #define CYTHON_SMALL_CODE
+-#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+-    #define CYTHON_SMALL_CODE __attribute__((cold))
+-#else
+-    #define CYTHON_SMALL_CODE
+-#endif
+-#endif
+-/* #### Code section: pystring_table ### */
+-
+-static int __Pyx_CreateStringTabAndInitStrings(void) {
+-  __Pyx_StringTabEntry __pyx_string_tab[] = {
+-    {&__pyx_kp_s_0_16_1, __pyx_k_0_16_1, sizeof(__pyx_k_0_16_1), 0, 0, 1, 0},
+-    {&__pyx_kp_s_A_decorator_that_serves_as_a_mo, __pyx_k_A_decorator_that_serves_as_a_mo, sizeof(__pyx_k_A_decorator_that_serves_as_a_mo), 0, 0, 1, 0},
+-    {&__pyx_n_s_Address, __pyx_k_Address, sizeof(__pyx_k_Address), 0, 0, 1, 1},
+-    {&__pyx_n_s_AddressError, __pyx_k_AddressError, sizeof(__pyx_k_AddressError), 0, 0, 1, 1},
+-    {&__pyx_n_s_AddressError___init, __pyx_k_AddressError___init, sizeof(__pyx_k_AddressError___init), 0, 0, 1, 1},
+-    {&__pyx_n_s_AddressError___str, __pyx_k_AddressError___str, sizeof(__pyx_k_AddressError___str), 0, 0, 1, 1},
+-    {&__pyx_n_s_Address___reduce_cython, __pyx_k_Address___reduce_cython, sizeof(__pyx_k_Address___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Address___setstate_cython, __pyx_k_Address___setstate_cython, sizeof(__pyx_k_Address___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Address_get_hostname, __pyx_k_Address_get_hostname, sizeof(__pyx_k_Address_get_hostname), 0, 0, 1, 1},
+-    {&__pyx_n_s_Address_get_port, __pyx_k_Address_get_port, sizeof(__pyx_k_Address_get_port), 0, 0, 1, 1},
+-    {&__pyx_n_s_Address_get_protocol, __pyx_k_Address_get_protocol, sizeof(__pyx_k_Address_get_protocol), 0, 0, 1, 1},
+-    {&__pyx_n_s_Address_get_url, __pyx_k_Address_get_url, sizeof(__pyx_k_Address_get_url), 0, 0, 1, 1},
+-    {&__pyx_n_s_Blob, __pyx_k_Blob, sizeof(__pyx_k_Blob), 0, 0, 1, 1},
+-    {&__pyx_n_s_Blob___reduce_cython, __pyx_k_Blob___reduce_cython, sizeof(__pyx_k_Blob___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Blob___setstate_cython, __pyx_k_Blob___setstate_cython, sizeof(__pyx_k_Blob___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Bundle, __pyx_k_Bundle, sizeof(__pyx_k_Bundle), 0, 0, 1, 1},
+-    {&__pyx_n_s_Bundle___reduce_cython, __pyx_k_Bundle___reduce_cython, sizeof(__pyx_k_Bundle___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Bundle___setstate_cython, __pyx_k_Bundle___setstate_cython, sizeof(__pyx_k_Bundle___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Bundle_add, __pyx_k_Bundle_add, sizeof(__pyx_k_Bundle_add), 0, 0, 1, 1},
+-    {&__pyx_n_s_Callback, __pyx_k_Callback, sizeof(__pyx_k_Callback), 0, 0, 1, 1},
+-    {&__pyx_n_s_Callback___reduce_cython, __pyx_k_Callback___reduce_cython, sizeof(__pyx_k_Callback___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Callback___setstate_cython, __pyx_k_Callback___setstate_cython, sizeof(__pyx_k_Callback___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_IOError, __pyx_k_IOError, sizeof(__pyx_k_IOError), 0, 0, 1, 1},
+-    {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0},
+-    {&__pyx_n_s_Message, __pyx_k_Message, sizeof(__pyx_k_Message), 0, 0, 1, 1},
+-    {&__pyx_n_s_Message___reduce_cython, __pyx_k_Message___reduce_cython, sizeof(__pyx_k_Message___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Message___setstate_cython, __pyx_k_Message___setstate_cython, sizeof(__pyx_k_Message___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Message_add, __pyx_k_Message_add, sizeof(__pyx_k_Message_add), 0, 0, 1, 1},
+-    {&__pyx_n_s_OverflowError, __pyx_k_OverflowError, sizeof(__pyx_k_OverflowError), 0, 0, 1, 1},
+-    {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1},
+-    {&__pyx_kp_u_Proto, __pyx_k_Proto, sizeof(__pyx_k_Proto), 0, 1, 0, 0},
+-    {&__pyx_kp_s_Raised_when_creating_a_liblo_OS, __pyx_k_Raised_when_creating_a_liblo_OS, sizeof(__pyx_k_Raised_when_creating_a_liblo_OS), 0, 0, 1, 0},
+-    {&__pyx_kp_s_Raised_when_trying_to_create_an, __pyx_k_Raised_when_trying_to_create_an, sizeof(__pyx_k_Raised_when_trying_to_create_an), 0, 0, 1, 0},
+-    {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1},
+-    {&__pyx_n_s_Server, __pyx_k_Server, sizeof(__pyx_k_Server), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase, __pyx_k_ServerBase, sizeof(__pyx_k_ServerBase), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase___reduce_cython, __pyx_k_ServerBase___reduce_cython, sizeof(__pyx_k_ServerBase___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase___setstate_cython, __pyx_k_ServerBase___setstate_cython, sizeof(__pyx_k_ServerBase___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_add_bundle_handlers, __pyx_k_ServerBase_add_bundle_handlers, sizeof(__pyx_k_ServerBase_add_bundle_handlers), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_add_method, __pyx_k_ServerBase_add_method, sizeof(__pyx_k_ServerBase_add_method), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_del_method, __pyx_k_ServerBase_del_method, sizeof(__pyx_k_ServerBase_del_method), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_fileno, __pyx_k_ServerBase_fileno, sizeof(__pyx_k_ServerBase_fileno), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_get_port, __pyx_k_ServerBase_get_port, sizeof(__pyx_k_ServerBase_get_port), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_get_protocol, __pyx_k_ServerBase_get_protocol, sizeof(__pyx_k_ServerBase_get_protocol), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_get_url, __pyx_k_ServerBase_get_url, sizeof(__pyx_k_ServerBase_get_url), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_register_methods, __pyx_k_ServerBase_register_methods, sizeof(__pyx_k_ServerBase_register_methods), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerBase_send, __pyx_k_ServerBase_send, sizeof(__pyx_k_ServerBase_send), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerError, __pyx_k_ServerError, sizeof(__pyx_k_ServerError), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerError___init, __pyx_k_ServerError___init, sizeof(__pyx_k_ServerError___init), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerError___str, __pyx_k_ServerError___str, sizeof(__pyx_k_ServerError___str), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerThread, __pyx_k_ServerThread, sizeof(__pyx_k_ServerThread), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerThread___reduce_cython, __pyx_k_ServerThread___reduce_cython, sizeof(__pyx_k_ServerThread___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerThread___setstate_cython, __pyx_k_ServerThread___setstate_cython, sizeof(__pyx_k_ServerThread___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerThread_free, __pyx_k_ServerThread_free, sizeof(__pyx_k_ServerThread_free), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerThread_start, __pyx_k_ServerThread_start, sizeof(__pyx_k_ServerThread_start), 0, 0, 1, 1},
+-    {&__pyx_n_s_ServerThread_stop, __pyx_k_ServerThread_stop, sizeof(__pyx_k_ServerThread_stop), 0, 0, 1, 1},
+-    {&__pyx_n_s_Server___reduce_cython, __pyx_k_Server___reduce_cython, sizeof(__pyx_k_Server___reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Server___setstate_cython, __pyx_k_Server___setstate_cython, sizeof(__pyx_k_Server___setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_Server_free, __pyx_k_Server_free, sizeof(__pyx_k_Server_free), 0, 0, 1, 1},
+-    {&__pyx_kp_s_Server_method_called_after_free, __pyx_k_Server_method_called_after_free, sizeof(__pyx_k_Server_method_called_after_free), 0, 0, 1, 0},
+-    {&__pyx_n_s_Server_recv, __pyx_k_Server_recv, sizeof(__pyx_k_Server_recv), 0, 0, 1, 1},
+-    {&__pyx_n_s_TCP, __pyx_k_TCP, sizeof(__pyx_k_TCP), 0, 0, 1, 1},
+-    {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
+-    {&__pyx_n_s_UDP, __pyx_k_UDP, sizeof(__pyx_k_UDP), 0, 0, 1, 1},
+-    {&__pyx_n_s_UNIX, __pyx_k_UNIX, sizeof(__pyx_k_UNIX), 0, 0, 1, 1},
+-    {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
+-    {&__pyx_kp_s_Weak_reference_to_a_function_in, __pyx_k_Weak_reference_to_a_function_in, sizeof(__pyx_k_Weak_reference_to_a_function_in), 0, 0, 1, 0},
+-    {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0},
+-    {&__pyx_n_s__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 0, 1, 1},
+-    {&__pyx_n_s__88, __pyx_k__88, sizeof(__pyx_k__88), 0, 0, 1, 1},
+-    {&__pyx_n_s_add, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1},
+-    {&__pyx_n_s_add_bundle_handlers, __pyx_k_add_bundle_handlers, sizeof(__pyx_k_add_bundle_handlers), 0, 0, 1, 1},
+-    {&__pyx_n_s_add_method, __pyx_k_add_method, sizeof(__pyx_k_add_method), 0, 0, 1, 1},
+-    {&__pyx_n_s_addr, __pyx_k_addr, sizeof(__pyx_k_addr), 0, 0, 1, 1},
+-    {&__pyx_n_s_addr2, __pyx_k_addr2, sizeof(__pyx_k_addr2), 0, 0, 1, 1},
+-    {&__pyx_kp_s_address_error_s, __pyx_k_address_error_s, sizeof(__pyx_k_address_error_s), 0, 0, 1, 0},
+-    {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1},
+-    {&__pyx_n_s_arg, __pyx_k_arg, sizeof(__pyx_k_arg), 0, 0, 1, 1},
+-    {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
+-    {&__pyx_n_s_arr, __pyx_k_arr, sizeof(__pyx_k_arr), 0, 0, 1, 1},
+-    {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1},
+-    {&__pyx_n_s_b, __pyx_k_b, sizeof(__pyx_k_b), 0, 0, 1, 1},
+-    {&__pyx_kp_s_blob_is_empty, __pyx_k_blob_is_empty, sizeof(__pyx_k_blob_is_empty), 0, 0, 1, 0},
+-    {&__pyx_n_s_call, __pyx_k_call, sizeof(__pyx_k_call), 0, 0, 1, 1},
+-    {&__pyx_n_s_cb, __pyx_k_cb, sizeof(__pyx_k_cb), 0, 0, 1, 1},
+-    {&__pyx_n_s_cb_data, __pyx_k_cb_data, sizeof(__pyx_k_cb_data), 0, 0, 1, 1},
+-    {&__pyx_n_s_chr, __pyx_k_chr, sizeof(__pyx_k_chr), 0, 0, 1, 1},
+-    {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1},
+-    {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
+-    {&__pyx_n_s_counter, __pyx_k_counter, sizeof(__pyx_k_counter), 0, 0, 1, 1},
+-    {&__pyx_n_s_counter_2, __pyx_k_counter_2, sizeof(__pyx_k_counter_2), 0, 0, 1, 1},
+-    {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1},
+-    {&__pyx_n_s_del_method, __pyx_k_del_method, sizeof(__pyx_k_del_method), 0, 0, 1, 1},
+-    {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
+-    {&__pyx_n_s_dict_2, __pyx_k_dict_2, sizeof(__pyx_k_dict_2), 0, 0, 1, 1},
+-    {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0},
+-    {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
+-    {&__pyx_n_s_e, __pyx_k_e, sizeof(__pyx_k_e), 0, 0, 1, 1},
+-    {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0},
+-    {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1},
+-    {&__pyx_n_s_end_func, __pyx_k_end_func, sizeof(__pyx_k_end_func), 0, 0, 1, 1},
+-    {&__pyx_n_s_end_handler, __pyx_k_end_handler, sizeof(__pyx_k_end_handler), 0, 0, 1, 1},
+-    {&__pyx_n_s_exception, __pyx_k_exception, sizeof(__pyx_k_exception), 0, 0, 1, 1},
+-    {&__pyx_n_s_f, __pyx_k_f, sizeof(__pyx_k_f), 0, 0, 1, 1},
+-    {&__pyx_n_s_fileno, __pyx_k_fileno, sizeof(__pyx_k_fileno), 0, 0, 1, 1},
+-    {&__pyx_n_s_free, __pyx_k_free, sizeof(__pyx_k_free), 0, 0, 1, 1},
+-    {&__pyx_n_s_func, __pyx_k_func, sizeof(__pyx_k_func), 0, 0, 1, 1},
+-    {&__pyx_n_s_func_2, __pyx_k_func_2, sizeof(__pyx_k_func_2), 0, 0, 1, 1},
+-    {&__pyx_n_s_func_3, __pyx_k_func_3, sizeof(__pyx_k_func_3), 0, 0, 1, 1},
+-    {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0},
+-    {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
+-    {&__pyx_n_s_get_hostname, __pyx_k_get_hostname, sizeof(__pyx_k_get_hostname), 0, 0, 1, 1},
+-    {&__pyx_n_s_get_port, __pyx_k_get_port, sizeof(__pyx_k_get_port), 0, 0, 1, 1},
+-    {&__pyx_n_s_get_protocol, __pyx_k_get_protocol, sizeof(__pyx_k_get_protocol), 0, 0, 1, 1},
+-    {&__pyx_n_s_get_url, __pyx_k_get_url, sizeof(__pyx_k_get_url), 0, 0, 1, 1},
+-    {&__pyx_n_s_getfullargspec, __pyx_k_getfullargspec, sizeof(__pyx_k_getfullargspec), 0, 0, 1, 1},
+-    {&__pyx_n_s_getmembers, __pyx_k_getmembers, sizeof(__pyx_k_getmembers), 0, 0, 1, 1},
+-    {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
+-    {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
+-    {&__pyx_kp_s_in_s, __pyx_k_in_s, sizeof(__pyx_k_in_s), 0, 0, 1, 0},
+-    {&__pyx_n_s_inf, __pyx_k_inf, sizeof(__pyx_k_inf), 0, 0, 1, 1},
+-    {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
+-    {&__pyx_n_s_init_subclass, __pyx_k_init_subclass, sizeof(__pyx_k_init_subclass), 0, 0, 1, 1},
+-    {&__pyx_n_s_initializing, __pyx_k_initializing, sizeof(__pyx_k_initializing), 0, 0, 1, 1},
+-    {&__pyx_n_s_inspect, __pyx_k_inspect, sizeof(__pyx_k_inspect), 0, 0, 1, 1},
+-    {&__pyx_n_s_inspect_2, __pyx_k_inspect_2, sizeof(__pyx_k_inspect_2), 0, 0, 1, 1},
+-    {&__pyx_kp_s_invalid_URL_s, __pyx_k_invalid_URL_s, sizeof(__pyx_k_invalid_URL_s), 0, 0, 1, 0},
+-    {&__pyx_kp_s_invalid_protocol, __pyx_k_invalid_protocol, sizeof(__pyx_k_invalid_protocol), 0, 0, 1, 0},
+-    {&__pyx_kp_s_invalid_timetag, __pyx_k_invalid_timetag, sizeof(__pyx_k_invalid_timetag), 0, 0, 1, 0},
+-    {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1},
+-    {&__pyx_n_s_isdigit, __pyx_k_isdigit, sizeof(__pyx_k_isdigit), 0, 0, 1, 1},
+-    {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0},
+-    {&__pyx_n_s_ismethod, __pyx_k_ismethod, sizeof(__pyx_k_ismethod), 0, 0, 1, 1},
+-    {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1},
+-    {&__pyx_n_s_k, __pyx_k_k, sizeof(__pyx_k_k), 0, 0, 1, 1},
+-    {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1},
+-    {&__pyx_n_s_kwargs, __pyx_k_kwargs, sizeof(__pyx_k_kwargs), 0, 0, 1, 1},
+-    {&__pyx_n_s_m, __pyx_k_m, sizeof(__pyx_k_m), 0, 0, 1, 1},
+-    {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
+-    {&__pyx_n_s_make_method, __pyx_k_make_method, sizeof(__pyx_k_make_method), 0, 0, 1, 1},
+-    {&__pyx_n_s_make_method___call, __pyx_k_make_method___call, sizeof(__pyx_k_make_method___call), 0, 0, 1, 1},
+-    {&__pyx_n_s_make_method___init, __pyx_k_make_method___init, sizeof(__pyx_k_make_method___init), 0, 0, 1, 1},
+-    {&__pyx_n_s_message, __pyx_k_message, sizeof(__pyx_k_message), 0, 0, 1, 1},
+-    {&__pyx_n_s_messages, __pyx_k_messages, sizeof(__pyx_k_messages), 0, 0, 1, 1},
+-    {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
+-    {&__pyx_n_s_method_spec, __pyx_k_method_spec, sizeof(__pyx_k_method_spec), 0, 0, 1, 1},
+-    {&__pyx_n_s_methods, __pyx_k_methods, sizeof(__pyx_k_methods), 0, 0, 1, 1},
+-    {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
+-    {&__pyx_n_s_mro_entries, __pyx_k_mro_entries, sizeof(__pyx_k_mro_entries), 0, 0, 1, 1},
+-    {&__pyx_n_s_msg, __pyx_k_msg, sizeof(__pyx_k_msg), 0, 0, 1, 1},
+-    {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
+-    {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
+-    {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
+-    {&__pyx_kp_u_not_understood_expected_one_of, __pyx_k_not_understood_expected_one_of, sizeof(__pyx_k_not_understood_expected_one_of), 0, 1, 0, 0},
+-    {&__pyx_n_s_num, __pyx_k_num, sizeof(__pyx_k_num), 0, 0, 1, 1},
+-    {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1},
+-    {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1},
+-    {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1},
+-    {&__pyx_kp_s_path_must_be_a_string_or_None, __pyx_k_path_must_be_a_string_or_None, sizeof(__pyx_k_path_must_be_a_string_or_None), 0, 0, 1, 0},
+-    {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
+-    {&__pyx_n_s_port, __pyx_k_port, sizeof(__pyx_k_port), 0, 0, 1, 1},
+-    {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
+-    {&__pyx_n_s_property, __pyx_k_property, sizeof(__pyx_k_property), 0, 0, 1, 1},
+-    {&__pyx_n_s_proto, __pyx_k_proto, sizeof(__pyx_k_proto), 0, 0, 1, 1},
+-    {&__pyx_n_s_protostr_to_int, __pyx_k_protostr_to_int, sizeof(__pyx_k_protostr_to_int), 0, 0, 1, 1},
+-    {&__pyx_n_s_pyliblo3__liblo, __pyx_k_pyliblo3__liblo, sizeof(__pyx_k_pyliblo3__liblo), 0, 0, 1, 1},
+-    {&__pyx_kp_s_pyliblo3__liblo_pyx, __pyx_k_pyliblo3__liblo_pyx, sizeof(__pyx_k_pyliblo3__liblo_pyx), 0, 0, 1, 0},
+-    {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1},
+-    {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1},
+-    {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1},
+-    {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
+-    {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1},
+-    {&__pyx_n_s_pyx_unpickle_Callback, __pyx_k_pyx_unpickle_Callback, sizeof(__pyx_k_pyx_unpickle_Callback), 0, 0, 1, 1},
+-    {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+-    {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
+-    {&__pyx_n_s_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 1},
+-    {&__pyx_n_s_recv, __pyx_k_recv, sizeof(__pyx_k_recv), 0, 0, 1, 1},
+-    {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
+-    {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
+-    {&__pyx_n_s_ref, __pyx_k_ref, sizeof(__pyx_k_ref), 0, 0, 1, 1},
+-    {&__pyx_n_s_reg_methods, __pyx_k_reg_methods, sizeof(__pyx_k_reg_methods), 0, 0, 1, 1},
+-    {&__pyx_n_s_register_methods, __pyx_k_register_methods, sizeof(__pyx_k_register_methods), 0, 0, 1, 1},
+-    {&__pyx_n_s_register_methods_locals_lambda, __pyx_k_register_methods_locals_lambda, sizeof(__pyx_k_register_methods_locals_lambda), 0, 0, 1, 1},
+-    {&__pyx_kp_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 0},
+-    {&__pyx_n_s_s2, __pyx_k_s2, sizeof(__pyx_k_s2), 0, 0, 1, 1},
+-    {&__pyx_n_s_s_2, __pyx_k_s_2, sizeof(__pyx_k_s_2), 0, 0, 1, 1},
+-    {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
+-    {&__pyx_n_s_self_2, __pyx_k_self_2, sizeof(__pyx_k_self_2), 0, 0, 1, 1},
+-    {&__pyx_kp_s_self__address_cannot_be_converte, __pyx_k_self__address_cannot_be_converte, sizeof(__pyx_k_self__address_cannot_be_converte), 0, 0, 1, 0},
+-    {&__pyx_kp_s_self__blob_cannot_be_converted_t, __pyx_k_self__blob_cannot_be_converted_t, sizeof(__pyx_k_self__blob_cannot_be_converted_t), 0, 0, 1, 0},
+-    {&__pyx_kp_s_self__bundle_cannot_be_converted, __pyx_k_self__bundle_cannot_be_converted, sizeof(__pyx_k_self__bundle_cannot_be_converted), 0, 0, 1, 0},
+-    {&__pyx_kp_s_self__message_cannot_be_converte, __pyx_k_self__message_cannot_be_converte, sizeof(__pyx_k_self__message_cannot_be_converte), 0, 0, 1, 0},
+-    {&__pyx_kp_s_self__server_cannot_be_converted, __pyx_k_self__server_cannot_be_converted, sizeof(__pyx_k_self__server_cannot_be_converted), 0, 0, 1, 0},
+-    {&__pyx_kp_s_self__server_self__server_thread, __pyx_k_self__server_self__server_thread, sizeof(__pyx_k_self__server_self__server_thread), 0, 0, 1, 0},
+-    {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1},
+-    {&__pyx_kp_s_sending_failed_s, __pyx_k_sending_failed_s, sizeof(__pyx_k_sending_failed_s), 0, 0, 1, 0},
+-    {&__pyx_kp_s_server_error_d, __pyx_k_server_error_d, sizeof(__pyx_k_server_error_d), 0, 0, 1, 0},
+-    {&__pyx_n_s_set_name, __pyx_k_set_name, sizeof(__pyx_k_set_name), 0, 0, 1, 1},
+-    {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
+-    {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
+-    {&__pyx_n_s_slots, __pyx_k_slots, sizeof(__pyx_k_slots), 0, 0, 1, 1},
+-    {&__pyx_n_s_sort, __pyx_k_sort, sizeof(__pyx_k_sort), 0, 0, 1, 1},
+-    {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1},
+-    {&__pyx_n_s_spec_2, __pyx_k_spec_2, sizeof(__pyx_k_spec_2), 0, 0, 1, 1},
+-    {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
+-    {&__pyx_n_s_start_func, __pyx_k_start_func, sizeof(__pyx_k_start_func), 0, 0, 1, 1},
+-    {&__pyx_n_s_start_handler, __pyx_k_start_handler, sizeof(__pyx_k_start_handler), 0, 0, 1, 1},
+-    {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1},
+-    {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1},
+-    {&__pyx_n_s_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
+-    {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
+-    {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
+-    {&__pyx_n_s_struct___init, __pyx_k_struct___init, sizeof(__pyx_k_struct___init), 0, 0, 1, 1},
+-    {&__pyx_n_s_super, __pyx_k_super, sizeof(__pyx_k_super), 0, 0, 1, 1},
+-    {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1},
+-    {&__pyx_n_s_target, __pyx_k_target, sizeof(__pyx_k_target), 0, 0, 1, 1},
+-    {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
+-    {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1},
+-    {&__pyx_n_s_timeout, __pyx_k_timeout, sizeof(__pyx_k_timeout), 0, 0, 1, 1},
+-    {&__pyx_n_s_tmp, __pyx_k_tmp, sizeof(__pyx_k_tmp), 0, 0, 1, 1},
+-    {&__pyx_n_s_tt, __pyx_k_tt, sizeof(__pyx_k_tt), 0, 0, 1, 1},
+-    {&__pyx_n_s_types, __pyx_k_types, sizeof(__pyx_k_types), 0, 0, 1, 1},
+-    {&__pyx_n_s_typespec, __pyx_k_typespec, sizeof(__pyx_k_typespec), 0, 0, 1, 1},
+-    {&__pyx_kp_s_typespec_must_be_a_string_or_Non, __pyx_k_typespec_must_be_a_string_or_Non, sizeof(__pyx_k_typespec_must_be_a_string_or_Non), 0, 0, 1, 0},
+-    {&__pyx_kp_s_unknown_OSC_data_type_c, __pyx_k_unknown_OSC_data_type_c, sizeof(__pyx_k_unknown_OSC_data_type_c), 0, 0, 1, 0},
+-    {&__pyx_kp_s_unsupported_message_argument_typ, __pyx_k_unsupported_message_argument_typ, sizeof(__pyx_k_unsupported_message_argument_typ), 0, 0, 1, 0},
+-    {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
+-    {&__pyx_n_s_use_setstate, __pyx_k_use_setstate, sizeof(__pyx_k_use_setstate), 0, 0, 1, 1},
+-    {&__pyx_n_s_user_data, __pyx_k_user_data, sizeof(__pyx_k_user_data), 0, 0, 1, 1},
+-    {&__pyx_n_s_v, __pyx_k_v, sizeof(__pyx_k_v), 0, 0, 1, 1},
+-    {&__pyx_n_s_varargs, __pyx_k_varargs, sizeof(__pyx_k_varargs), 0, 0, 1, 1},
+-    {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1},
+-    {&__pyx_n_s_weakref, __pyx_k_weakref, sizeof(__pyx_k_weakref), 0, 0, 1, 1},
+-    {&__pyx_n_s_weakref_2, __pyx_k_weakref_2, sizeof(__pyx_k_weakref_2), 0, 0, 1, 1},
+-    {&__pyx_n_s_weakref_method, __pyx_k_weakref_method, sizeof(__pyx_k_weakref_method), 0, 0, 1, 1},
+-    {&__pyx_n_s_weakref_method___call, __pyx_k_weakref_method___call, sizeof(__pyx_k_weakref_method___call), 0, 0, 1, 1},
+-    {&__pyx_n_s_weakref_method___init, __pyx_k_weakref_method___init, sizeof(__pyx_k_weakref_method___init), 0, 0, 1, 1},
+-    {&__pyx_n_s_weakref_method_func, __pyx_k_weakref_method_func, sizeof(__pyx_k_weakref_method_func), 0, 0, 1, 1},
+-    {&__pyx_n_s_where, __pyx_k_where, sizeof(__pyx_k_where), 0, 0, 1, 1},
+-    {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
+-    {0, 0, 0, 0, 0, 0, 0}
+-  };
+-  return __Pyx_InitStrings(__pyx_string_tab);
+-}
+-/* #### Code section: cached_builtins ### */
+-static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
+-  __pyx_builtin_property = __Pyx_GetBuiltinName(__pyx_n_s_property); if (!__pyx_builtin_property) __PYX_ERR(0, 59, __pyx_L1_error)
+-  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 42, __pyx_L1_error)
+-  __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) __PYX_ERR(0, 198, __pyx_L1_error)
+-  __pyx_builtin_chr = __Pyx_GetBuiltinName(__pyx_n_s_chr); if (!__pyx_builtin_chr) __PYX_ERR(0, 263, __pyx_L1_error)
+-  __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 371, __pyx_L1_error)
+-  __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 466, __pyx_L1_error)
+-  __pyx_builtin_OverflowError = __Pyx_GetBuiltinName(__pyx_n_s_OverflowError); if (!__pyx_builtin_OverflowError) __PYX_ERR(0, 1017, __pyx_L1_error)
+-  return 0;
+-  __pyx_L1_error:;
+-  return -1;
+-}
+-/* #### Code section: cached_constants ### */
+-
+-static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
+-  __Pyx_RefNannyDeclarations
+-  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+-
+-  /* "pyliblo3/_liblo.pyx":371
+- *     cdef _check(self):
+- *         if self._server == NULL:
+- *             raise RuntimeError("Server method called after free()")             # <<<<<<<<<<<<<<
+- * 
+- *     def register_methods(self, obj=None):
+- */
+-  __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_Server_method_called_after_free); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 371, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple_);
+-  __Pyx_GIVEREF(__pyx_tuple_);
+-
+-  /* "pyliblo3/_liblo.pyx":466
+- *             p = NULL
+- *         else:
+- *             raise TypeError("path must be a string or None")             # <<<<<<<<<<<<<<
+- * 
+- *         if isinstance(typespec, (bytes, unicode)):
+- */
+-  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_path_must_be_a_string_or_None); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 466, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__2);
+-  __Pyx_GIVEREF(__pyx_tuple__2);
+-
+-  /* "pyliblo3/_liblo.pyx":474
+- *             t = NULL
+- *         else:
+- *             raise TypeError("typespec must be a string or None")             # <<<<<<<<<<<<<<
+- * 
+- *         self._check()
+- */
+-  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_typespec_must_be_a_string_or_Non); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 474, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__3);
+-  __Pyx_GIVEREF(__pyx_tuple__3);
+-
+-  /* "pyliblo3/_liblo.pyx":897
+- *         size = len(arr)
+- *         if size < 1:
+- *             raise ValueError("blob is empty")             # <<<<<<<<<<<<<<
+- *         # copy each element of arr to a C array
+- *         p = <unsigned char*>malloc(size)
+- */
+-  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_blob_is_empty); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 897, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__7);
+-  __Pyx_GIVEREF(__pyx_tuple__7);
+-
+-  /* "pyliblo3/_liblo.pyx":1033
+- *                 iter(value)
+- *             except TypeError:
+- *                 raise TypeError("unsupported message argument type")             # <<<<<<<<<<<<<<
+- *             self._add('b', value)
+- * 
+- */
+-  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_unsupported_message_argument_typ); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 1033, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__8);
+-  __Pyx_GIVEREF(__pyx_tuple__8);
+-
+-  /* "pyliblo3/_liblo.pyx":1074
+- *                 tt.sec, tt.frac = t
+- *             else:
+- *                 raise TypeError("invalid timetag")             # <<<<<<<<<<<<<<
+- *             # first argument was timetag, so continue with second
+- *             messages = messages[1:]
+- */
+-  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_invalid_timetag); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 1074, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__9);
+-  __Pyx_GIVEREF(__pyx_tuple__9);
+-
+-  /* "(tree fragment)":4
+- *     cdef object __pyx_PickleError
+- *     cdef object __pyx_result
+- *     if __pyx_checksum not in (0xb933e34, 0x7cc8780, 0x302b03a):             # <<<<<<<<<<<<<<
+- *         from pickle import PickleError as __pyx_PickleError
+- *         raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0xb933e34, 0x7cc8780, 0x302b03a) = (func, has_varargs, numargs, user_data))" % __pyx_checksum
+- */
+-  __pyx_tuple__10 = PyTuple_Pack(3, __pyx_int_194199092, __pyx_int_130844544, __pyx_int_50507834); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(2, 4, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__10);
+-  __Pyx_GIVEREF(__pyx_tuple__10);
+-
+-  /* "pyliblo3/_liblo.pyx":34
+- * 
+- * 
+- * def _protostr_to_int(str proto):             # <<<<<<<<<<<<<<
+- *     if proto == 'UDP':
+- *         return LO_UDP
+- */
+-  __pyx_tuple__13 = PyTuple_Pack(1, __pyx_n_s_proto); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 34, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__13);
+-  __Pyx_GIVEREF(__pyx_tuple__13);
+-  __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyliblo3__liblo_pyx, __pyx_n_s_protostr_to_int, 34, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 34, __pyx_L1_error)
+-
+-  /* "pyliblo3/_liblo.pyx":49
+- *     Weak reference to a function, including support for bound methods.
+- *     """
+- *     __slots__ = ('_func', 'obj')             # <<<<<<<<<<<<<<
+- * 
+- *     def __init__(self, f):
+- */
+-  __pyx_tuple__15 = PyTuple_Pack(2, __pyx_n_s_func_2, __pyx_n_s_obj); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 49, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__15);
+-  __Pyx_GIVEREF(__pyx_tuple__15);
+-
+-  /* "pyliblo3/_liblo.pyx":51
+- *     __slots__ = ('_func', 'obj')
+- * 
+- *     def __init__(self, f):             # <<<<<<<<<<<<<<
+- *         if _inspect.ismethod(f):
+- *             self._func = f.__func__
+- */
+-  __pyx_tuple__16 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_f); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 51, __pyx_L1_error)
+-  __Pyx_GOTREF(__pyx_tuple__16);
+-  __Pyx_GIVEREF(__pyx_tuple__16);
+-  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_pyliblo3__liblo_pyx, __pyx_n_s_init,