[SCM] libmapper/master: Giving up from autoreconf.

tiago at users.alioth.debian.org tiago at users.alioth.debian.org
Tue Oct 28 05:30:52 UTC 2014


The following commit has been merged in the master branch:
commit 8d28e8c7197ac22a075a2d309d49eb357fd07eb1
Author: Tiago Bortoletto Vaz <tiago at debian.org>
Date:   Tue Oct 28 00:54:09 2014 -0400

    Giving up from autoreconf.

diff --git a/ChangeLog b/ChangeLog
index 4a0298c..becd37a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,80 +1,10983 @@
-commit 115e1f0bcc300d3108f181553794dd598342f6e2
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Oct 28 00:29:22 2014 -0400
+commit d986501f03ebcc9b8884d6222ebc06c77e0dbe4e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 22 16:16:09 2014 +0200
 
-    Updating rules
+    Fixed some doxygen warnings.
 
-commit 533100131998adfa411448305960a5c0c2036a8a
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Mon Oct 27 21:54:26 2014 -0400
+commit 2ffe49a2931cc917db83441fceb58f6d22032c69
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 10 15:13:58 2014 +0200
 
-    Adding java binding
+    Added functions for adding multi-instance signals.
 
-commit fe27ce93c0fbe32c122991c675ee74be45b8e4fd
-Merge: 3618d19 5a9bb46
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Jun 17 20:20:37 2014 -0400
+commit 364971e6271d060af6e2f97a554c727f725179fe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 23 19:40:45 2014 +0200
 
-    Merge tag 'upstream/0.3_git+20140610'
+    Fix removal of signals in testsignals program.
+
+commit 9825ec60040c780e377bf9d5ede656bae5c23d2b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 23 19:18:18 2014 +0200
+
+    Simplify signal handler somewhat, since instance release messages cannot be embedded in multi-count messages.
+
+commit 8f29488d8b741f333894d349b0d1b20c9a158cac
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 23 19:17:10 2014 +0200
+
+    Fix expected values in testdb.
+
+commit 0b136e47454b7d06b504bcfdac068750dacb91f8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 23 19:16:35 2014 +0200
+
+    Monitor: prevent addition of duplicate subscriptions.
+
+commit 14a695f56f7d8c24537df82f205f385b44ec89e6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 23 19:15:57 2014 +0200
+
+    Free lib_version string when removing devices.
+
+commit 5d5a033531728f101c350afa3bb41bc43adaf32e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 2 14:51:31 2014 +0200
+
+    Add header to jni makefile.
+
+commit 5299db7a7602016d4986959136fee646e9509849
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 2 14:38:51 2014 +0200
+
+    Java: updated monitor flag values.
+
+commit 1f2fb18cf537face645089bf6f095338c1ea69aa
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 2 14:30:55 2014 +0200
+
+    Updated README.
+
+commit 9cc1f01bcf16995ea2495f92efefb29ee8ea8418
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 30 17:38:29 2014 +0200
+
+    Update expression syntax in testinstance program.
+
+commit c5ee99fc380d0eaf4bfddd446c31a30cf07410a2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 30 17:37:42 2014 +0200
+
+    C++ bindings: overload device.remove_input/output functions.
+
+commit 6ac443707722d86c030df2cc15ec439e87b87516
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 30 17:36:17 2014 +0200
+
+    C++ bindings: handle property queries with null results.
+
+commit 9f60ed91c210eaca073bfcca752a7005d4567aad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 29 15:14:28 2014 +0200
+
+    Always use internal count of scopes.
+
+commit ef99c97702beee2da087c6f8fea470421e3f52d0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 29 15:08:13 2014 +0200
+
+    Add .DS_Store files to gitignore.
+
+commit 151353988dc59e161244b5e5390ba1b4df1d0ed5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 29 15:14:08 2014 +0200
+
+    Add unknown devices to db when link or connection received - required for later free().
+
+commit 23b0ffdba4778389539d4332ada6931167c936c6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 29 15:13:02 2014 +0200
+
+    Clean up output of mapper_db_dump()
+
+commit 6e0d5085fe97f8a786230aed4f21a5772e9bb7b6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 23 17:59:16 2014 +0200
+
+    Removed unused function.
+    
+    Conflicts:
+    	src/connection.c
+
+commit 375587e0d96f4170c985b860018478c114e46763
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 23 15:07:30 2014 +0200
+
+    Allow setting num_iterations in testparser.
+
+commit cfdd31b4b751c8b93d2474f0ef6d42b146d55ca8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 23 15:07:02 2014 +0200
+
+    Fixed memory errors found during Valgrind profiling.
+
+commit a890903f18d68f4c240b8dc5b3cff63743222b90
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 30 19:20:21 2014 +0200
+
+    Fixed implementation of FORCE_ADMIN_TO_BUS flag.
+
+commit 0f617011e02e3bb36c4cb946f8a4d30af9a030a0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:41:33 2014 +0200
+
+    Monitor: Ensure only one device callback is registered when changing autosubscription flags.
+
+commit 5d33efeea8efa714dea65685ee8dfa0b7b1c091a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:40:31 2014 +0200
+
+    Monitor: Request devices to kick things off if autosubscribe is enabled.
+
+commit aed16444bccebbaa918bca98fd37213d45646de8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:39:47 2014 +0200
+
+    Fixed potential crash in several message handlers where mdev_name() was assumed to return valid value.
+
+commit 25692ac34859bbe290d6d961562c5cb9cc0203c3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:38:47 2014 +0200
+
+    Don't edit name string in logout handler before checking if routers/receivers match.
+
+commit aedc46ea21f13b385317b15d8d6b614510793243
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:37:40 2014 +0200
+
+    Don't send subscribe message in response to hash-only /sync message.
+
+commit 4368bed90e8f56f80615c45cc335462b18e12010
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:36:18 2014 +0200
+
+    Disable device link timeouts for now until session recovery daemon is ready.
+
+commit 1c5a33717d31946dd2698384912aeaee53bd2b01
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:31:40 2014 +0200
+
+    Added option for forcing admin traffic to use the multicast bus for easier debugging.
+
+commit 2d780d000fe93ae4ce2a23309550ab3683461df2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 25 15:29:32 2014 +0200
+
+    Add lib_version to retrievable device properties.
+
+commit a86762c8f23232e1ddbfac12c90c68104c3a537b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 24 15:03:41 2014 +0200
+
+    Swig/Python: wait for links to be established before connecting in tests.
+
+commit a79c83038b1d4b688818591f4b6f7e1096c06037
+Merge: 619c0cb 8db662c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 24 11:35:39 2014 +0200
+
+    Merge branch 'output-vector-indexing'
+    
+    Conflicts:
+    	src/device.c
+    	src/router.c
+
+commit 619c0cb60432bfb86316556971a72e5dc324d1fc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 23 18:43:44 2014 +0200
+
+    Fixed alphabetization bug in db device props, switched to using 'num' instead of 'n' throughout for clarity.
+
+commit 8db662c5f7372574a94a648e568205adc9f1d77b
+Merge: 6c2010a 48abbe4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 23 11:49:56 2014 +0200
+
+    Merge branch 'master' into output-vector-indexing
+
+commit 48abbe4c64a9269e16d7dc372ee0002a52249043
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 23 11:18:29 2014 +0200
+
+    Copy device name to signal props structure when signals are added after device registration.
+
+commit ebd30322016cf17a59daef1ac073ad153a9f3786
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 13 17:55:00 2014 +0200
+
+    Switched properties named 'n_<something>' to 'num_<something>' for consistency.
+
+commit 6c2010ac422e5dfce99cc90264eeebda60bf77e2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 13 17:41:15 2014 +0200
+
+    Overload min() and max() functions: add unary vector version.
+
+commit 63abc2e6af4b1a8d4736312fe1a1fe919304c257
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 13 17:39:45 2014 +0200
+
+    Fixed possible null pointer bug when expression parser fails.
+
+commit 3440c5140dd6208055b4b713187ac485bd3ff91a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 13 16:15:05 2014 +0200
+
+    Switch to using semicolons for separating sub-expressions.
+
+commit 59755c6f43ae842e9baff6ec11e1217b11baf9ae
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 13 13:29:02 2014 +0200
+
+    C++: Fixed problems handling property values that are arrays/vectors of strings.
+
+commit 7a1e48cd013c84bee9df1194101b61ded589f3ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 11 17:54:44 2014 +0200
+
+    Improvements to link sync.
+
+commit 09e6bf8ad18a3b480fa2aec87f3983c3913a1979
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 11 15:24:33 2014 +0200
+
+    Use link pinging for estimating clock offsets, network latency and jitter between peers instead of admin-bus /sync messages. Simplify outgoing /sync messages but still accept old version.
+
+commit 6e400f6b14249f99d16f59aadaf74203a9671dea
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 8 15:48:33 2014 +0200
+
+    Do not check for expired devices on every call to monitor_poll().
+
+commit 095f7ae15dd146a45ea8caa75deb023efbfe0f73
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 8 15:23:24 2014 +0200
+
+    Swig/Python: return timetag from start_queue() function.
+
+commit f5f53ec1ff3bb8573fc89a01c687e77153450a71
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 8 14:22:35 2014 +0200
+
+    Test for forbidden keys in msig_set_property() and mdev_set_property().
+
+commit ad2a182f4a1a1dcbcd44cc8c1580d7403bfa0f64
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 8 14:21:32 2014 +0200
+
+    C++: use set() function instead of wonky assignment operator overloading; rearranged class structure to match C API.
+
+commit 1c01c4ab070dd5bed94efe2514db6cf8437d4393
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Aug 7 15:18:35 2014 +0200
+
+    C++: Fixed ptr bug
+
+commit 92e66d08d035e29696102b77f179b4e678b6a521
+Merge: 5dd5623 28388db
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Aug 7 14:50:27 2014 +0200
+
+    Merge remote-tracking branch 'steve/master'
+
+commit 5dd5623fdc139d4fab270271053b107ef036c9ca
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Aug 7 14:48:02 2014 +0200
+
+    C++: pass device or signal parent to property object and overload assignment operator.
+
+commit 28388dbadd375e0fba311892db6fa1f74a844060
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 7 14:37:20 2014 +0200
+
+    Add 'const' qualifier to get() methods, allowing use of C++11 for-iterators.
+
+commit 1c6fe6e40e0c16d3a8ce6e8484eb1c7ac8b03ead
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 7 14:21:31 2014 +0200
+
+    Add some missing C++ headers in mapper_cpp.h.
+
+commit 66a734fca9c875b2dc61a0ca6535da11aacee0ed
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 7 14:21:09 2014 +0200
+
+    Make variable liblo_CXXFLAGS doesn't exist, pkg-config only supports CFLAGS.
+
+commit 616d08dbd80e2358cd152d5f0a12c2d25fb728d7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 7 14:20:32 2014 +0200
+
+    Add a check for C++11 compiler flags.
+    
+    Necessary since C++ headers use some C++11 features.
+    (Copied from liblo's configure.ac)
+
+commit b01b428879653eedcd552d8b6827013df806e20f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 7 14:19:26 2014 +0200
+
+    Remove 'ccache' from CXX variable before calling python build system.
+    
+    Otherwise if CXX="ccache g++", then Python tries to build with just
+    "ccache" for some reason, and breaks.
+
+commit 6f7444775ba9506b1c160d373f47d1c7d065bf17
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 6 17:21:36 2014 +0200
+
+    C++; added alternate property retrieval for signals and devices.
+
+commit ccf9d46261da5bc4d07e7c20b24ab193da12e899
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 6 15:37:53 2014 +0200
+
+    Expression parser: use -1*x instead of 0-x on stack for negation to preserve order-of-operations.
+
+commit 0f6ecfe34550fc78fa0c6e14c2b1752a57233c61
+Merge: 7c40b9d a6748fb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 6 15:36:43 2014 +0200
+
+    Merge branch 'master' into output-vector-indexing
+    
+    Conflicts:
+    	src/connection.c
+    	src/router.c
+    	test/testquery.c
+
+commit a6748fb59b8c8c8bb256bb00c52e65efe86b7024
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 6 13:32:47 2014 +0200
+
+    C++: more consistent function naming.
+
+commit 72fae74892b3b36b944a9cc10cf77c773f7c664e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 6 12:15:48 2014 +0200
+
+    Java: simplified some monitor/db bindings.
+
+commit fddb515e5359e562505076df3ccc9953e691582e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 5 17:46:00 2014 +0200
+
+    Java: finished adding db object iterators.
+
+commit c250c3223006831947f514e37cbb130a8682e922
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 4 18:06:08 2014 +0200
+
+    Added rough C++ tutorial
+
+commit 452d1cf839c327ce7d5aee79810664470b2a33c9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 4 17:54:02 2014 +0200
+
+    Java: Adding iterators for returning db queries.
+
+commit 99b14347695e20636f2e4051892374757fbae312
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 4 17:51:12 2014 +0200
+
+    Added libversion() function to python and C++ bindings; use properties interface for C++ device props.
+
+commit 52fe6e6b7831172db70e7685be32526c05a99010
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 4 12:28:06 2014 +0200
+
+    C++: Added handling of std::vector property values.
+
+commit 6de86285c0b4d05d8ff9f9c6d1f9b62230f05769
+Merge: cd72fd8 3705a23
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 3 17:17:12 2014 +0200
+
+    Merge branch 'java-monitors'
+
+commit cd72fd8722829db32910aa1cc95776b4ddfe7abe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 3 15:46:07 2014 +0200
+
+    Add testcpp to make tests routine
+
+commit 5f7d43dc57a07240471c2c0b7c43ab52b9830bb4
+Merge: 3b6493b b6114cd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 3 15:18:30 2014 +0200
+
+    Merge branch 'admin2' into cpp
+
+commit b6114cd271b7873ab484c7239ac93715944fef01
+Merge: 6e0a012 4baa30d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 3 15:10:47 2014 +0200
+
+    Merge branch 'master' into admin2
+
+commit 3b6493bbe7a642f954d82b0d139b47697ef5e84a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 3 15:09:45 2014 +0200
+
+    C++: more properties, links and connection props.
+
+commit 801363bfb4a5343b85be1e81c3005d4d2085ee51
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 3 08:25:19 2014 +0200
+
+    C++: Added db_connection iterators.
+
+commit ba181cc1392dfa2160b4c57ed17cfebc758f9c9e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 2 12:33:15 2014 +0200
+
+    C++: More timetag constructors.
+
+commit 8f13bb6b68523df0b8b8d362091d165daf099555
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Aug 2 12:32:37 2014 +0200
+
+    Adding iterators for signals and db structures.
+
+commit d0fdd9b813e5a177c1518ace590513ac0166c8f8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 31 17:26:00 2014 +0200
+
+    Swig/Python/Monitors: Re-add request_devices() function.
+
+commit 34e58f695c80896b8e0392b54a19d66adb1b0788
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 31 17:24:45 2014 +0200
+
+    C++ bindings... in progress.
+
+commit 6e0a01208b8c7dccbba90a6e675ee7ee8681b043
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 31 17:22:49 2014 +0200
+
+    Allow configuration of monitor timeout duration.
+
+commit 0aa71efbf336ed85b6c240576e6f14f4798bf872
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 29 20:47:58 2014 +0200
+
+    Working on handling crashed or unresponsive devices in monitor.
+
+commit 4261a4be3482de4db8ceebac3a3107affc3a4a6f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 24 16:19:03 2014 +0200
+
+    Monitor: Recover from subscription errors.
+
+commit e33f21644ed3c6b795e8c72e1e87a12aa2ceb6ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 24 13:25:52 2014 +0200
+
+    Monitors: ensure device metadata is included with other subscriptions.
+
+commit 4f6b0e777b504f495debc09e81fb1af532707fe7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 24 12:27:11 2014 +0200
+
+    Admin: do not create new device records when receiving /sync messages since only the device name is known; instead call the monitor autosubscribe handler if it exists.
+
+commit a1e61ced9eb9c349d58ef52da394a332349a9b7f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 23 19:04:58 2014 +0200
+
+    Update protocol for setting subscription lease durations.
+
+commit ef47a724e59f3a99bac6884013414fec4f82e435
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 23 18:41:09 2014 +0200
+
+    Fixed typos in function names.
+
+commit 04a49a3f0c1536744d7450334911e99f5f373493
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 23 18:40:47 2014 +0200
+
+    Explicitly state that link timeout occurred.
+
+commit 3049c49105510b941847d2b9a74d5e01fcf86b8c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 23 17:03:43 2014 +0200
+
+    Add active ping to links; remove expired links if e.g. a device crashes. Any automatic restoration of links and connection on restart should be handled by a session-manager such as MASH.
+
+commit 54412b652bd3da1371d3894061f67b19d61b8220
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 23 17:01:21 2014 +0200
+
+    Fixed bug when removing monitors that share admins with a device: some OSC handlers are required by both monitors and devices.
+
+commit 5924a62b13e3ab57fdf94f9aca35188965b9aa62
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 23 16:58:16 2014 +0200
+
+    Allow monitors to receive device /sync messages even if they share an admin.
+
+commit 3db20fedc2f437c59cc35fabd71d5f4b08271fe5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 22 14:50:30 2014 +0200
+
+    Remove links to/from peers when they log-out.
+
+commit 48eb386fa1f251bb037fb4f1668b8ce6ec83c2ee
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 22 14:49:57 2014 +0200
+
+    Fixed reference to freed object.
+
+commit 3705a23b1935d819a212e992f0b8e09704add692
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 27 11:14:12 2014 +0200
+
+    Java tutorial updates.
+
+commit 7c40b9d484ede6941f53021c26ae1c898e533dc1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jun 23 15:16:51 2014 +0200
+
+    Reduce memory size of op_table
+
+commit c2491621dd6576dcf3f72c0d03220d2bd143083c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jun 23 14:27:23 2014 +0200
+
+    Optimize expressions containing operations with 0 or 1 as operands.
+
+commit 4baa30dd25e3b2116719b7f788cc6c386b0985ff
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 10 13:39:29 2014 +0200
+
+    Do not allow user-code to set signal property named value - redirect to msig_update() instead. Allow un-setting signal min and max properties through calls to msig_set_property() with 0 length argument.
+
+commit 73dcb2ab37d9a448255c136a51d5fa609b5fd4cc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 10 13:32:58 2014 +0200
+
+    Expression parser: add operation-by-zero results to op_table.
+
+commit eefaf653f2ec92f362073a6b4c664063da5a4220
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 10 13:28:48 2014 +0200
+
+    Small optimization of expression parser.
+
+commit 5d31a9728a6f243bff229c19db6f92a1ce66a2f7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 10 13:07:07 2014 +0200
+
+    Added token count and elapsed time to testparser output; added optimization test.
+
+commit 4d4d34c49acd635b5ed04ea4e70970ccea57c800
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 10 13:05:28 2014 +0200
+
+    Moved expression precomputation to separate function.
+
+commit 9066a0a1317312bc8552433f001ce672aebfb1c6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 6 13:25:29 2014 +0200
+
+    Moved history_size variable from signal structure to link_signal where it belongs.
+
+commit 007fcd4254a8b2dbcdb829441d27d86ac16be897
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 4 15:13:38 2014 +0200
+
+    Add Java tutorial.
+
+commit e886e3091c36ba19147fbbc2c89cff9450261fcd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 4 15:13:17 2014 +0200
+
+    Adapt Processing example for API changes.
+
+commit f5b8ea60b6f5545efde8959e1fa8b7fa1ab6bebd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 4 15:12:51 2014 +0200
+
+    Overload reserveInstances() function to reduce native code complexity.
+
+commit fef89ed5e5558ac4e842cd711e52431ea5c415bd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 4 10:28:19 2014 +0200
+
+    Removing unnecessary signal props argument from handlers.
+
+commit d65ec8aaf0af110eb1813822499a0f773b88bffc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 4 10:27:25 2014 +0200
+
+    Overloading device poll() function.
+
+commit 3f991471acbd125f1ede0ddacd615cdad9acb57c
+Merge: fdb39f3 1a20137
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 3 16:37:24 2014 +0200
+
+    Merge branch 'master' into output-vector-indexing
+    
+    Conflicts:
+    	src/expression.c
+
+commit fdb39f3018c5be45d84bbbb850e0acc3e33e94aa
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 3 15:09:27 2014 +0200
+
+    Correct a few bugs in test programs.
+
+commit 158b1f73b7e42c062e8ee791a9246fe0b93c7566
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jun 1 22:56:35 2014 +0200
+
+    Removing OSC-blob approach to multi-sample messages.
+
+commit 4cc89649581f442ba58ee0f967dba9761f494b99
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 26 14:15:15 2014 +0200
+
+    Use src and dest names from arguments.
+
+commit ab3a66675bf4adb9105466a4e71b8509bef5725b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 26 14:11:02 2014 +0200
+
+    Corrected some labels.
+
+commit cf987a12a5ba73f803090dd0af6ccdf75d5f9c3d
+Merge: b0f2049 1a20137
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 26 14:06:12 2014 +0200
+
+    Merge branch 'master' into java-monitors
+
+commit b0f2049761425fcd5b4531bc67522f1cc4de5fe7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 24 18:41:30 2014 +0200
+
+    Added testspeed.java for benchmarking speed improvements.
+
+commit 8fe66cf9772cc08a029053785d7ae6a591b57909
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 24 18:40:23 2014 +0200
+
+    Added timetag and Device.now() functions.
+
+commit 65fbc9ad3ac2923caa4a50053ea2ad3382fcee68
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 24 16:13:05 2014 +0200
+
+    Handle connection_modify functionality.
+
+commit e3ccaa1438e6184071b4a05a4b227b8a9f8ceb86
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 24 15:59:57 2014 +0200
+
+    Use more overloading for signal update functions to reduce code replication; removed unnecessary db objects from signal handler arguments; added device properties function; moving remaining public function names to camelCase.
+
+commit 1a20137096643a8845387e281bac08ad760efb8a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 19 14:57:23 2014 +0200
+
+    Updates to roadmap
+
+commit 09cd5e9e5382cccc95971f66e2055abfb6f88a20
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 19 14:56:57 2014 +0200
+
+    Improve readability of testmonitor output.
+
+commit a51850e541651042182536bb1513d1bb1af5ec81
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 19 14:56:18 2014 +0200
+
+    Remove check for range_known prop when adding connection extrema to OSC message.
+
+commit e77bc3ef05f136ba0f70c02e81906a6313304bcf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 19 14:48:06 2014 +0200
+
+    jni monitor bindings: src and dest extrema props for connections.
+
+commit fb32f064cf19395c3ae289a130f39731a3a49f41
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 16 18:41:03 2014 +0200
+
+    jni monitor bindings: connection mode, bound and expression props working.
+
+commit 0101bc2606fe477ebe30009a13bbeed379a58f6f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 16 14:29:26 2014 +0200
+
+    Java monitor bindings: link(), connect() and callbacks working and added to test; still missing writable properties for link and connect.
+
+commit 7603f18c55fae2e699e6928a2736d2088e2e7bec
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 14 17:19:09 2014 +0200
+
+    Adding monitor functionality to Java bindings.
+
+commit 3bb6836cadc20deb1327bdf4d96844ff2a69f917
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue May 13 14:18:43 2014 +0200
+
+    Re-added mapper_monitor_request_devices() function for monitors that wish to quickly scan the network. Under normal usage it is not necessary to call this function since basic device information is included in regular /sync messages.
+
+commit 00e917a334fb853a6ece6102bff8eaca19b90c39
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue May 13 13:55:56 2014 +0200
+
+    Bugfix
+
+commit 8058f287e374b5c4ed6ebe57b23564a681534630
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 12 17:21:08 2014 +0200
+
+    Fix bug in mdev_get_fds()
+
+commit 90a61fa433fcb3d0d3611c325cd898c8178f3605
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 12 17:20:41 2014 +0200
+
+    Update testvector to wait on link
+
+commit 75d65f66ac353de74a72248da727418600261083
+Merge: 2193f6e 218fa1a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 12 17:20:13 2014 +0200
+
+    Merge branch 'master' into admin2
+    
+    Conflicts:
+    	src/admin.c
+    	src/mapper_internal.h
+    	src/monitor.c
+    	src/types_internal.h
+    	test/test.c
+    	test/testlinear.c
+    	test/testquery.c
+    	test/testrate.c
+    	test/testreverse.c
+    	test/testsend.c
+    	test/testsignals.c
+
+commit 218fa1af2c015d4256bdbc264ee56f554e0fcfea
+Merge: 2ba01d2 cbfc853
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 12 16:13:43 2014 +0200
+
+    Merge branch 'more-vector-functions'
+    
+    Conflicts:
+    	src/expression.c
+    	test/testparser.c
+
+commit 7bb0e756f2e1f4391550b7f334871c699d9bb70a
+Merge: fc84152 2ba01d2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 9 18:05:24 2014 +0200
+
+    Merge branch 'master' into output-vector-indexing
+    
+    Conflicts:
+    	include/mapper/mapper_db.h
+    	src/device.c
+    	src/expression.c
+    	src/router.c
+    	test/testparser.c
+    	test/testquery.c
+    	test/testreverse.c
+
+commit 2ba01d2f814d31f764014285c4ec2b528bdbc9b2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 7 15:57:17 2014 +0200
+
+    Added make tests option for running all tests in sequence; modified tests for simpler text output but with verbose option flag.
+
+commit 42f21c63db7a400cb72a653b3a95b0d63e728d2e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 7 15:48:15 2014 +0200
+
+    testcustomtransport: close socket on disconnect.
+
+commit 37b631d550ac423b37fbf7d5fa112535fd3af0d4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 7 15:43:49 2014 +0200
+
+    Fixed bugs in implementation of testselect program
+
+commit d9340f52a92dd835eb13c51b09ed478cd3f05fad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 7 15:29:05 2014 +0200
+
+    Remove some extra print statements from expression parser.
+
+commit fc841527d004a1fbd1a5e2e0aa5c142985fb9266
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 3 16:50:13 2014 +0200
+
+    Separate datatype and vector length when printing tokens for readability
+
+commit 9ae8fc8f74eb9698532917869b3eace408cebffe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 28 17:01:30 2014 +0200
+
+    Removed TODO.
+
+commit 51c3b62133ac84e8d95ba557b7e99123533d9d78
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 28 16:32:58 2014 +0200
+
+    Corrected range property usage in testlinear.c
+
+commit 017bff16f0b013a955285d7e64ee5b6a18efe7d6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 28 16:32:30 2014 +0200
+
+    Removed declaration of mapper_signal_value_t/mval from public API.
+
+commit a97f8242e91c5526949d6f0cd2653078323dfcfe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 28 16:07:04 2014 +0200
+
+    Removed erroneous cast to mapper_signal_value_t
+
+commit 5e70d8b01cab4b6c3d09cdd2168431807232faa6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 28 14:39:26 2014 +0200
+
+    Fixed a couple of documentation errors.
+
+commit c10bd56ade9a93c77ed3fb203d4e4304128088b8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 21 20:22:13 2014 +0200
+
+    Fixed memory access and management bugs revealed during profiling with Valgrind.
+
+commit 7113bc6fd682c650b614828e912c777ba09678eb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Apr 19 16:41:27 2014 +0200
+
+    Evaluate constant expressions in receiver immediately instead of waiting for signal update.
+
+commit 66d1e2ff6299109c1f4897a2e3e4f0c827af86e9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 18 14:04:42 2014 +0200
+
+    Add TODO regarding out-of-order OSC messages.
+
+commit 989912aead32f9b7da8f9cb2bf06992d40b4f917
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 18 12:29:43 2014 +0200
+
+    Ensure that admin networking is functional before allowing device ordinal to be locked - prevents faulty device registration in cases where messages are temporarily blocked on startup.
+
+commit 00f2c7d257072cb1af102949b5266939cb3bdce8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 18 12:17:21 2014 +0200
+
+    Do not send /who message unless monitor autorequest is enabled.
+
+commit 989b0268468a46e9b49ad12b769edfdd3bafdf28
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 18 12:14:43 2014 +0200
+
+    Cleaned up testmany program.
+
+commit 4d17d88009b1890cb2340c8e3e66c780d9484371
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 16 18:45:59 2014 +0200
+
+    Reset signal and connection histories when an active instance is released.
+
+commit aad0440b137159903d2c366dba9bae8212d754d1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 15 17:07:23 2014 +0200
+
+    Added function for retrieving libmapper version from admin.
+
+commit 3cade8bf941f5fb36dd66452591492f8efa0a1b0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 14 14:58:59 2014 +0200
+
+    Fixed query implementation to work with null-padding, type and length coercion.
+
+commit 34f220294d6c2dea15ecc5040e19ecc16e8ce75a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 11 17:18:18 2014 +0200
+
+    Fix bug in vector range specification for linear scaling expressions.
+
+commit 4c7dfa1b1acd18b9bfdef0aeceafffeb3a86cc20
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 11 16:08:05 2014 +0200
+
+    Store user-variable histories per-instance instead of globally in connection expression structure.
+
+commit da07df783111d18686338f5685c41a34d0e2a94d
+Merge: 5934928 dc17931
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 24 16:56:25 2014 +0100
+
+    Merge branch 'master' into output-vector-indexing
+    
+    Conflicts:
+    	src/connection.c
+    	test/testreverse.c
+
+commit dc17931399c6240581053ebe6b43cf2b39cd15ea
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 24 16:19:56 2014 +0100
+
+    Print elapsed time since last sync in testmonitor, don't print keys for missing props.
+
+commit 2193f6ee67730ed87a315e477889e5b101fa4779
+Merge: 3550c5d a5e7964
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 24 15:54:37 2014 +0100
+
+    Merge branch 'master' into admin2
+    
+    Conflicts:
+    	src/monitor.c
+    	test/testmonitor.c
+
+commit a5e79643b73d9179047801dc3390084b8472ca84
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 16 18:38:16 2014 -0500
+
+    Fixed bug in starting expression when entering calibrate mode with scalar source.
+
+commit 0f3a204fb701c84f1fe1f71faaeb9fe94091add9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 13 22:42:52 2014 -0500
+
+    Check if range arguments are numbers before trying to evaluate them - prevents e.g. erroneously stringified range arguments from removing previous values.
+
+commit 17d7c2b13bfb6759d598a6793489cf84939a6054
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 13 13:31:14 2014 -0500
+
+    Updated test.py for testing device properties and link/connect/modify.
+
+commit e3103d7aa5b4dcff6d36522a47c49ffba49b1baa
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 13 13:30:27 2014 -0500
+
+    Changed arguments to mapper_monitor_connection_modify() for consistency with mapper_monitor_connect() and _disconnect(). Altered coresponding function name in Swig/Python bindings from .modify() to .modify_connection() since other objects e.g. links can be modified also.
+
+commit 2ff516cbf6d62aac1eec8841108ff820f8684783
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 13 13:27:00 2014 -0500
+
+    Added function mdev_properties(), also call it from Swig/Python bindings.
+
+commit 32bc52d5dfb88d954e57d9dded5a4c8d9b1cfa8e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 13 13:24:24 2014 -0500
+
+    Swig/Python: Fixed string pointer bugs in py_to_prop()
+
+commit ad7507ab7c27ce8b5c3faeb08ec3eee680bbd225
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 13 13:20:25 2014 -0500
+
+    Fixed lo_arg pointer bug in mapper_msg_prepare_params()
+
+commit 6c8bfbd6c33fdf40b5c80fcf8e74f4dc9c8c8f38
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 9 17:06:41 2014 -0500
+
+    Enable AUTOREQ_ALL in testmonitor.c
+
+commit 578336748547a9e701a2539cc9fba1346a69de8a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 9 17:06:20 2014 -0500
+
+    Update Python bindings for connection db range changes.
+
+commit 694de5019bcc852f71cca4444339901173b775a3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 9 17:00:11 2014 -0500
+
+    Change treatment of src and dest extrema in connection db, allowing proper retrieval of metadata with types.
+
+commit a065ede021c500109a7eb0f530ea6647cfd1cb74
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 4 17:44:00 2014 -0500
+
+    Fixed segfault storing/retrieving single strings as static props e.g. units.
+
+commit 6c3573765bbf53a24dab0c60cae319ff2c5a55e0
+Merge: 00aead7 14b488d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 4 17:14:16 2014 -0500
+
+    Merge remote-tracking branch 'steve/master'
+
+commit 00aead71c758836aa817864c69d52a39d896297d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 4 16:46:01 2014 -0500
+
+    Fixed 2 bugs in handling properties with vector values e.g. link scopes
+
+commit 14b488d28ce7509c18dfcc0dfa9977f9e82f28a9
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Feb 4 22:24:49 2014 +0100
+
+    swig: Use alloca() to reserve stack variables used in typemaps.
+    
+    Otherwise, swig sometimes places variables inside scopes, and
+    retaining pointers to these variables causes problems.
+
+commit ddd4908574030efaee6e4de8752097a7ab0a509c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Feb 4 21:01:16 2014 +0100
+
+    Add swig/copywhich.sh to the dist.
+
+commit 0ba1b25227f46491cd0f3599b82486a94af3b7e2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 24 14:15:22 2013 +0100
+
+    Remove unsigned changes for >= 0 (clang warning)
+
+commit d7f12b2df02c2250c5d5132bbe20527f44d2f4ce
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 4 15:43:54 2014 -0500
+
+    Fixed bug passing lo_arg arrays for storing vector property values.
+
+commit a3e0c663eb7ae3e9f2facd6bf822fd4a8c77eaf1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 3 13:24:32 2014 -0500
+
+    Swig/Python: Corrected min and max property lengths in testvector.py
+
+commit c31909de5b73d7e4fd113cdaa7c8f8c6b3aedc68
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 3 08:20:17 2014 -0500
+
+    Swig/Python: Fixed pointer bug when setting signal min and max.
+
+commit cbfc853806bac73dfabd21db09966c64cc42b14a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jan 29 16:32:30 2014 -0500
+
+    Expanded vector function handling, added functions mean(), sum(), vmax() and vmin().
+
+commit 3550c5dabcfcac56e92b873469ac3ad383c5dc00
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 21 13:58:42 2014 -0500
+
+    Fixed behaviour of unsubscribe functionality.
+
+commit 36f4cc633337ba437f999cf6bece84300fee0ede
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 21 13:54:08 2014 -0500
+
+    Fixed possible use of uninitialized memory.
+
+commit dabf06d4caa03ddc3c036c623a3d676ee27f36ff
+Merge: e174f0f 75c3c36
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 21 12:54:56 2014 -0500
+
+    Merge branch 'master' into admin2
+    
+    Conflicts:
+    	src/admin.c
+    	src/mapper_internal.h
+    	src/monitor.c
+    	src/receiver.c
+    	src/router.c
+    	test/test.c
+    	test/testlinear.c
+    	test/testsend.c
+    	test/testvector.c
+
+commit 75c3c3643a7e3d595aee8bbcbd0cd87fbe2738f5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 20 16:36:22 2014 -0500
+
+    Adapt testparams.c for accepting malformed property strings.
+
+commit 15c1aa08f88c65866cb6bc0f3754a5acce1af1b2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 20 16:35:31 2014 -0500
+
+    Fixed bug in message parser.
+
+commit 73d8c183ec6afef8eb052285bd4c029bf4066645
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 20 15:57:22 2014 -0500
+
+    Fixed db storage of signal min and max properties.
+
+commit 49ae80803ff67dd90e2352dfa1bbf684ddf817cb
+Merge: de3a5c1 8a57427
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 20 11:02:27 2014 -0500
+
+    Merge branch 'master' into vector-indexing
+
+commit 8a574279e3031c45a6e68fa7bd5174f85bb84b3e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 20 10:58:50 2014 -0500
+
+    Improve parsing of connection range properties.
+
+commit aeebb4a2e195f3f984a3f6da5ac47b4ee2d5c5cf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 20 10:07:06 2014 -0500
+
+    Reject vector property values with heterogeneous types without crashing.
+
+commit de3a5c1d4de1a4b00bf914c33a96c72e39528788
+Merge: 99f6895 8427b95
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 19 21:02:27 2014 -0500
+
+    Merge branch 'master' into vector-indexing
+    
+    Conflicts:
+    	src/connection.c
+    	test/test.c
+
+commit 8427b9525845d732cb37a1caa5ea5c90c962f21d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 19 19:24:35 2014 -0500
+
+    Fixed memory errors and leaks exposed by Valgrind.
+
+commit d787dc4d78b14037fe9f344ce4e6a6a1110e2fac
+Merge: 8a86457 2886655
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 19 14:47:09 2014 -0500
+
+    Merge branch 'master' into vector-props2
+
+commit 28866550a1c6a8dc5e4867ef2f0df5c5535f44de
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 19 14:00:28 2014 -0500
+
+    Fixed memory errors and leaks exposed by Valgrind.
+
+commit 8a86457fa92c8f7aaebf7ddd4018f7224fc59285
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 18 19:23:15 2014 -0500
+
+    Added /link/modify methods and handlers, improved handling of link scope property.
+
+commit c23b7815ccbba6464db24edee26a58d730582143
+Merge: 6a89eab 1d1778d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 18 16:28:24 2014 -0500
+
+    Merge branch 'master' into vector-props2
+    
+    Conflicts:
+    	src/connection.c
+    	test/test.c
+
+commit 5934928e46a1a35c0788ad8e022053b7d208747b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 17 20:23:43 2014 -0500
+
+    Repacked expression token and variable structs to reduce memory usage.
+
+commit 8c34f4a53021cfb755b409b26b37a211a4dd07d2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Dec 18 14:34:59 2013 -0500
+
+    Expression parser: removed superfluous function.
+
+commit e174f0f34ed008937dc5fe330449e3425299eed7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Dec 10 11:53:44 2013 -0500
+
+    Added unsubscribe API and protocol handlers.
+
+commit b3a34aeba97d38139bec4fc7766d30cdf6fe99ce
+Merge: 4e0be67 e5f10e0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Dec 9 11:22:24 2013 -0500
+
+    Merge branch 'admin2' into admin2-simplify
+
+commit e5f10e01720c3d629caa00dea892e2b59fdf433f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 8 22:19:34 2013 -0500
+
+    Removed magic numbers in monitor.c; allow admin to resume subscription without resending data if reported device version number matches.
+
+commit 221470c5920b8bbffc75f16e65320f843c45155b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 8 13:59:17 2013 -0500
+
+    Test programs: wait for link before sending /connect messages.
+
+commit 8b00bf3e2952497a052a90971e053a8d236e9922
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 8 13:40:14 2013 -0500
+
+    Python: Add defaults to subscription arguments.
+
+commit 41948d5a5ed28cf39d09a0cbcbe5550b0d0025d6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 8 13:39:33 2013 -0500
+
+    Add device info handler to mesh handler list.
+
+commit 459541240f6d955cc5e2016ad0e931abccb37aa5
+Merge: 8e5229d 1d1778d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 8 12:16:02 2013 -0500
+
+    Merge branch 'master' into admin2
+
+commit 91384ce319cb0244293591ceec3bf9648df264d1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 8 11:28:40 2013 -0500
+
+    Update expression syntax documentation to explain sub-expression evaluation order.
+
+commit 4ec638b94425c166a30b94a1a19249e30b783009
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Dec 7 21:20:00 2013 -0500
+
+    Added brief documentation of vector, filter initialization, and user-defined variable syntaxes.
+
+commit 5ee6005858d12b1fddafafee8bb4c68b15a9e1e1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Dec 7 21:19:11 2013 -0500
+
+    Expression parser: disable multiple subexpressions assigned to the same variable to avoid problems with non-outputting conditionals; fixed conditional outputs; initialize output arrays before evaluating in testparser.
+
+commit 9ff97e03dc5465cab82957cf8c1216adabb5dc8f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 6 19:26:47 2013 -0500
+
+    Expression parser: enabled user-defined variables in expression.
+
+commit ce2967a7c185ad4c06b556cee2e2cbb932b19888
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Dec 5 18:22:45 2013 -0500
+
+    Expression parser: re-order sub-expressions as necessary so that history initialization expressions are evaluated first (these expressions will be skipped in subsequent evaluations).
+
+commit 5ae969a5402efd29f6687945a08258f984240686
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Dec 5 17:09:44 2013 -0500
+
+    testparser: added scientific notation test.
+
+commit f3b6e768512a0c30c8b6db8700bf9d32baede5ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Dec 3 15:37:11 2013 -0500
+
+    Expression parser: added more expression syntax tests to testparser.
+
+commit 801ceb78e31d4720900ab70ef1eb67539fb677a6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Dec 3 15:36:20 2013 -0500
+
+    Expression parser: enabled filter history initialization for output (y) - for now initialization expressions must appear first.
+
+commit bf96442731cb8cb6bb24e7d788961d44142a87b9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Dec 2 12:05:58 2013 -0500
+
+    Expression parser: additional checks for bad syntax.
+
+commit d3a54f4ce0181dae96d8bdc1a65cc89979d23050
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 21:03:38 2013 -0500
+
+    Expression parser: enable vector builder left of assignment operator for e.g. output swizzling.
+
+commit b65213be35e577872648873f3aa12f83b9883a1e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 14:39:27 2013 -0500
+
+    Do not check link scope with NULL map.
+
+commit c2cc7ed88aada8d4c325c9c0b53b710811ec32f4
+Merge: c3c34e9 99f6895
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 14:23:10 2013 -0500
+
+    Merge branch 'vector-indexing' into output-vector-indexing
+    
+    Conflicts:
+    	src/connection.c
+
+commit 1d1778d614931b734c7b150133781faa05aea2a0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 14:16:13 2013 -0500
+
+    Fixed min/max datatypes in testreverse program.
+
+commit 99f6895033f9fa9f58e4fd4a711076265d667b74
+Merge: a040f22 3c4740d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 14:12:20 2013 -0500
+
+    Merge branch 'master' into vector-indexing
+    
+    Conflicts:
+    	src/connection.c
+    	test/test.c
+
+commit a040f22dd1f9057482e88ec6e26f9cabde9fa59d
+Merge: 14e715c 6a89eab
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 13:50:40 2013 -0500
+
+    Merge branch 'vector-props2' into vector-indexing
+    
+    Conflicts:
+    	src/expression.c
+
+commit c3c34e9c8a5894f50fb05363ad584d96d66acb9e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 13:47:32 2013 -0500
+
+    Added some vector signals to testquery and testreverse.
+
+commit 5f42262b0d21bc0b6f4c3de3f37a39faa17f68cf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 1 13:47:04 2013 -0500
+
+    Cleaning up signal handlers & obsolete typestrings; Fixed soem more instance message formatting.
+
+commit 96dca70e236f8ec6fdac72106da545781a9506ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 30 22:19:55 2013 -0500
+
+    Fixed some more instance-sending syntax.
+
+commit 821e0d9f6b1db14e18140482ab11c95df893db29
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 30 21:46:52 2013 -0500
+
+    Re-enabled instance updates, but switched to explicit tagging of instance property in message using @instance label as discussed long ago on the mailing list. Instance release messages now require OSC NIL types for each vector element.
+
+commit 00f9becee43b8677a5c9018da9c643b1e21bb6f1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 30 20:18:45 2013 -0500
+
+    Expression parser: eliminate TOK_QUESTION since it was really handled by TOK_OP, use bitflags more efficiently in token type enum.
+
+commit 2221e25b409cf611d7b965e5aa9b3a7973fa3414
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 30 17:08:00 2013 -0500
+
+    Expression parser/evaluator: allow multiple sub-expressions for e.g. setting different vector elements/ranges.
+
+commit 00489654f078d1e4fa95c94af41fd4b3a93f98ba
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 30 15:01:17 2013 -0500
+
+    Fixed bug initializing has_complete_value flags for new signals.
+
+commit af15a602a49d624b548c8bf373e82658eda14168
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 30 14:44:38 2013 -0500
+
+    Use null-padding for default linear/calibration expressions in cases when dest_len > src_len.
+
+commit e1073502485fe90ecc33f5394a417b76d0d946f3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 30 12:34:37 2013 -0500
+
+    Handle null-padded signal updates at receiving device. Switched to using generic OSC typestring handler since details of null-padding cannot be known auntil runtime.
+
+commit 80457e1781f2f60e93b61ca26ccec5028787cf3e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 28 19:45:50 2013 -0500
+
+    Expression parser: build typestring for evaluated expressions will nulls for missing vector elements.
+
+commit c6d2e8eb7ff99c8b352dba88bb7be8731a419d04
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 28 19:43:35 2013 -0500
+
+    Expression parser: add TOK_ASSIGNMENT, enable vector indexing on output variable (y). This will allow null-padding of mapped signals when mapped to partial vectors, as well as assignment to possible additional variables in the future.
+
+commit 14e715ce7e28ee5d5298a3d67593b9413d618224
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 28 10:56:13 2013 -0500
+
+    Remove unnessary vectorizer token from expr if vector length is 1.
+
+commit ae65c6386c5f9915713c29b701d16217cce3f301
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 28 10:54:48 2013 -0500
+
+    Re-enable maximum history index checks.
+
+commit 4e0be67071717449d959f781e668a86f5767b833
+Merge: 4b83018 8e5229d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 27 19:13:57 2013 -0500
+
+    Merge branch 'admin2' into admin2-simplify
+    
+    Conflicts:
+    	src/monitor.c
+
+commit 8e5229d2f9da9cddee5e6a95d4be8c4b0df831d5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 26 22:47:57 2013 -0500
+
+    Monitor: remove auto-renewing subscription when device logs out.
+
+commit 243133a6dd58524beb35f4a1e21f9d41967b4aeb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 26 19:25:38 2013 -0500
+
+    Fixed bugs in signal removal from db.
+
+commit f6a5038a34f985f2fe8e42b7bbb4cdd860a18bdd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 26 15:45:32 2013 -0500
+
+    Copy update timetags to connection output buffer.
+
+commit 90096d8918f9d234fc9ef79ee8eff48213a6edc2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 26 15:28:06 2013 -0500
+
+    Expression parser: enable shortened conditional syntex a?:b, added corresponding test.
+
+commit 9eb5a75bf9c647ade0f58ebb756cae8145c2e9c2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 26 13:24:20 2013 -0500
+
+    Fixed bug generating default linear scaling expression when src_len is less than dest_len.
+
+commit b80562711cfe31a821a470fe2e4377be54761628
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 25 16:11:57 2013 -0500
+
+    Expression parser: detect illegal token sequences.
+
+commit 76bf6d93963be160b95db62417012108afc9f908
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 24 18:18:27 2013 -0500
+
+    Set expression vector length property before attempting precomputation.
+
+commit 6a89eab97610af84e1f2e96235efcc2e3138c282
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 24 14:50:05 2013 -0500
+
+    Fix variable name bug.
+
+commit 3c4740dd1cdccc383e42329ee0ec2524a36d0d17
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 23 19:31:44 2013 -0500
+
+    Fixed bugs dealing with double signals and linear scaling; added checks for scenarios where min==max; fixed passing of min and max arguments in test program.
+
+commit e85e3e2d1bc73c3d7d9cefb107361f03546da9ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 23 18:59:46 2013 -0500
+
+    Added vfunc enum to token union.
+
+commit 4b83018944fe2911c0ccf2e2df7ac4e7e0695538
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 23 18:35:11 2013 -0500
+
+    Remove admin functions related to monitor queries.
+
+commit a37d1054b293189b3ad5c88225bb873b97b2f588
+Merge: 4fe3ce8 42af497
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 23 18:28:12 2013 -0500
+
+    Merge branch 'admin2' into admin2-simplify
+
+commit 42af497eb70c63c751a42b1902fa07c1a6ef690b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 23 18:17:48 2013 -0500
+
+    Return correct number of file descriptors.
+
+commit 8fc6e6d16a4f1fca8fc6e7225013310546cf2d8e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 23 18:06:56 2013 -0500
+
+    Send /connectTo message p2p since link src is known. Test programs using monitors need to wait for link to be established before connecting.
+
+commit 0ff63134c8dfe6ba8a8f941b7b7cda42786c6ee2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 23 16:16:33 2013 -0500
+
+    Properly handle changing flags for existing subscriptions.
+
+commit 5513a620fb1760de7d94cfa822f986d6754d9fde
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Nov 22 16:30:51 2013 -0500
+
+    Python: switch to monitor subscription model.
+
+commit dcdadc624bdea082996f12c2a449e47d8ad256b8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Nov 22 16:30:18 2013 -0500
+
+    Store mesh admin port of remote devices in router/receiver datastructure, use for p2p admin responses.
+
+commit 4fe3ce8bdbf2882ef48912c8a6226bfaa01bb1c6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 21 17:03:47 2013 -0500
+
+    Remove monitor request functions.
+
+commit b438fef8821d4325fcf3d1b4e9d502fa4048738e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 21 16:47:21 2013 -0500
+
+    Added subscription-autorenew functionality to monitor.
+
+commit dcdb53b9fe108ec4ada2968e3b6f85c2f5974fdc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 20 10:36:23 2013 -0500
+
+    Switched monitors to subscription model.
+
+commit 343afcd19b3fd99a600e7961d9b9526339a000a2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 19 18:44:26 2013 -0500
+
+    More work on monitor subscriptions: added /subscribe message handler with granular control over items of interest (device, inputs, outputs, links, connections). Changed device sync ping to include name, also use for response to /who message. Detailed device metadata available through subscription.
+
+commit 2825aa4ba58a27af61b619d6780cf718f44d7c1c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 17 18:28:40 2013 -0500
+
+    First attempt at implementing configurable monitor subscriptions using p2p communications instead of shared bus.
+
+commit 811de5093b690c7f201a75181b40fd4e0309f86c
+Merge: 6bd210c 6a8e558
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 13 10:58:35 2013 -0500
+
+    Merge branch 'vector-props2' into vector-indexing
+
+commit 6a8e558a4a358f493a0411b987af99866c2d16c4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 13 10:52:32 2013 -0500
+
+    Java bindings: enable vector values for signal minima and maxima - using PropertyValue class.
+
+commit 7e0a75aa289b71754a625742714ca0dad9db7049
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 12 17:17:40 2013 -0500
+
+    Java bindings: enable vector property values.
+
+commit 7c2660ab6cc482e8da9d1195977fd1ba13057853
+Merge: 9174b46 37243ed
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 11 11:56:30 2013 -0500
+
+    Merge branch 'master' into vector-props2
+
+commit 37243ed573dcdd4859fc78c7bc0a2604e73d9453
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 11 11:53:16 2013 -0500
+
+    Java bindings: fixes for testreverse class
+
+commit 409388047e77feddecf8070fd105de25670ff0cf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 11 11:35:37 2013 -0500
+
+    Java bindings: fixed bugs in remote value queries, testquery.
+
+commit 2bf64cbaa406010261404bcb79aad637061b44e7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 11 10:52:51 2013 -0500
+
+    Java bindings: more overloading of reserve_instances() function to allow passing special instance callbacks.
+
+commit 2d8d658005fa9c7136263aa2b8843a282d59182f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 10 21:31:45 2013 -0500
+
+    Java bindings: adapting test programs and makefile.
+
+commit 6059e91159b3853c871942f714db0d12232dbedb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 10 20:53:38 2013 -0500
+
+    Java bindings: fixed bug in timetag processing.
+
+commit 86bb8f6b6a7258300c10defe1c6bc49a268c3288
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 10 20:39:34 2013 -0500
+
+    Java bindings: add methods for handling doubles.
+
+commit 12c706a0142d09fe3e7032908dd139dd301444cb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 10 20:29:21 2013 -0500
+
+    Java bindings: update instance reservation functions for compatibility with recent libmapper changes.
+
+commit 3a93000d24b4bb7a8f966a756fe80f08b430f513
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 10 20:19:41 2013 -0500
+
+    Java bindings: add device constructor without specifying starting port.
+
+commit 73d8dedeaa6ff4d9d14aae38d222596e913ddbab
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 10 12:50:28 2013 -0500
+
+    Fixed compilation errors due to enum/int comparisons and uninitialized variable.
+
+commit 442c0c3e079159cb16f96a2bbdd82b407ff3ac85
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 10 11:29:25 2013 -0500
+
+    Added rough portfile for MacPorts package manager.
+
+commit 9a740652ea683896c140caca51c89cfcd0f43e4c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 9 15:22:33 2013 -0500
+
+    Updates for consistency with previous changes made for Swig 2.0 compatibility.
+
+commit 819afff17b59a4fbfcf943b67208b46c97da09a1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 31 14:45:45 2013 -0400
+
+    Fixed memory leak in expression parser.
+
+commit 6bd210ce34eb1e7d85dc69629915ab8fa41809ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 22 14:01:42 2013 -0400
+
+    Adapted test to utilize linear scaling between vector signals.
+
+commit 7f7aae54888f657e319078d89803fb47baf05edb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 22 14:00:04 2013 -0400
+
+    Expression parser: Restored final typecast check.
+
+commit d5f9731be2639cf136ba8c067d601cbcbb6bf8c8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 22 13:21:33 2013 -0400
+
+    Added vector functions all() and any(), expanded and cleaned-up testparser.
+
+commit 7f6204a002947a4bc7e9335935338749544bb76d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 20 16:27:11 2013 -0400
+
+    Expression evaluator: moved for() loops inside switch() for efficiency processing vector signals, also use preprocessor to enable/disable debug output. Speedup of approx 100% on testparser.
+
+commit 96580483df4fbe8234c19068a0af59713fb75ebb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 19 21:07:07 2013 -0400
+
+    Adapted connection code to correctly generate default expressions for linear and calibrate modes.
+
+commit 08ddeeba04279bbd19145d84eedea4ca0d262164
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 19 20:38:07 2013 -0400
+
+    Cleaned up testparser and added more test expressions.
+
+commit 81a6f84939a61c2500ef608a5960e0ab5781e264
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 19 20:36:02 2013 -0400
+
+    Expression parser: simplified vector-length and type checking/promotion.
+
+commit 9d0833447c864cb5927784c301bd83bd5ea1ee5f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 17 18:36:47 2013 -0400
+
+    Expression parser: fixed typecasting bug.
+
+commit c21cc86489e485385f6618e8491ce55620ce9446
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 17 15:56:50 2013 -0400
+
+    Adapted testparser for testing multiple expression strings.
+
+commit 6ebc0156869cd760f399d27fee867c13d10821cd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 17 15:55:41 2013 -0400
+
+    Expression parser: fix bug in vectorizer when type is int or double.
+
+commit 70f317c76c23599ef3761fdab177141d80709f5e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 17 15:55:06 2013 -0400
+
+    Expression parser: fix typecasting.
+
+commit b8814fc3fe08087992ed84c273e91f571dce4f2a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 17 15:54:08 2013 -0400
+
+    Expression parser: Fix references to old variable identifiers.
+
+commit d53c622a4d643221fa1876c7f5cbe71018f14b3e
+Merge: 4c7c0e9 9174b46
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 16 21:06:14 2013 -0400
+
+    Merge branch 'vector-props2' into vector-indexing
+    
+    Conflicts:
+    	src/connection.c
+    	src/expression.c
+
+commit 4c7c0e90ec199ce1e5bb4c12c1fe53b341593ec4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 16 17:47:10 2013 -0400
+
+    Expression parsing: fixed problem distinguishing between variable vector-indices and standalone vector syntax; fixed vector-length promotion.
+
+commit 77bbb58f812d96ed253fa4636dcd2cc1a0a94548
+Merge: 612cbfe 6d54605
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 15 14:30:46 2013 -0400
+
+    Merge branch 'master' into vector-indexing
+
+commit 9174b46d93e4e2e0ee786dc047f91ffe05937990
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 15 13:32:26 2013 -0400
+
+    Use maybePropVal structure for handling signal update typemapping.
+
+commit 4f90b6cd87856c5b6e7869e3a4a42769fa90b9b8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 12 19:49:18 2013 -0400
+
+    Python bindings: fixed another free() bug
+
+commit b6145bcf7d7716a722918ed9d19b47bda9b9f04a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 12 18:55:08 2013 -0400
+
+    Swig/Python bindings: Fixed pointer bug
+
+commit a7bb3694ce2a7e814a657de4df505ff8582165c7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 12 18:16:02 2013 -0400
+
+    Provide vector ranges in test.c
+
+commit 1683bc0286e71a4c9ad0cfd539239e15739eb8f4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 12 18:15:35 2013 -0400
+
+    Fixed bugs freeing and reallocating memory for table values.
+
+commit ca996e6ba9657415bf6eef2e48c6650cff1af113
+Merge: 856dbd2 6d54605
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 11 13:23:19 2013 -0400
+
+    Merge branch 'master' into vector-props2
+
+commit 6d546058cb6f34f2a7269a0bbf76156c9848a614
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 10 15:06:59 2013 -0400
+
+    Fix tutorial paths needed by make dist
+
+commit 856dbd25fd5e6b053c6bf3bf50da814fc17847c0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 10 14:50:19 2013 -0400
+
+    Added datatype coercion function for maybePropVal struct, fixed bus in set_minimum()/set_maximum() functions.
+
+commit f910a57da1e3b68c589908221a8db1b5d4abfa60
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 21:03:40 2013 -0400
+
+    Removed remaining usage of mval union in favour of signal-native datatypes for range properties.
+
+commit 4a97965707ea322a0d0e01e9c060a0affdc8b3d3
+Merge: bc6405b 54d36ec
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 20:31:31 2013 -0400
+
+    Merge branch 'master' into vector-props2
+    
+    Conflicts:
+    	src/db.c
+    	swig/mapper.i
+
+commit 54d36ec8120a42df8e5fab77e57dbb6dd2254bda
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 20:24:24 2013 -0400
+
+    Swig/Python bindings: do not supply default starting ports for devices in test programs.
+
+commit 957695b45e59acb6cf9367cb61de0438bc1bee68
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 20:20:25 2013 -0400
+
+    Swig/Python bindings: do not supply default starting port to libmapper in device constructor.
+
+commit ad12989ab2b9ce98167da53568c393908b6d1a35
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 20:10:38 2013 -0400
+
+    Swig/Python bindings: range data should be handled internally as doubles.
+
+commit ff1422569eb0e7557ea513a92d5b94ea682bbf37
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 20:09:46 2013 -0400
+
+    Handle range data sent as doubles
+
+commit 70407bba894296f1a40eeb738b8f275113c1008f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 20:08:58 2013 -0400
+
+    Swig/Python bindings: Restored range property to tuple.
+
+commit bc6405b69c66d20a956f30a76f7dbc968021b723
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 8 15:15:06 2013 -0400
+
+    Swig/Python bindings: Debugging and simplifying property get/setters.
+
+commit da164823b86fdf4035814645f4f4fcdb7d7c0331
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 3 17:25:05 2013 -0400
+
+    Swig/Python bindings: working on changes for vector props.
+
+commit 151ecb2c11d5d0f43327330352d6ff1dfffc0815
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 3 17:24:05 2013 -0400
+
+    Switch connection ranges from mval union to arrays with same type as signal.
+
+commit a983085b1ba5b4a5edddb82c4fba2fff9790f865
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 2 08:21:11 2013 -0400
+
+    Simplified pointer referencing when storing valuesin string table.
+
+commit 875934f7943a5a6e1a85bd04a74d3f846cc7d28e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 1 21:52:45 2013 -0400
+
+    Fixed name of scope_names property in string table.
+
+commit 40d5dd4a6885806abcc2cea335fe40d98bcb7852
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 1 21:39:33 2013 -0400
+
+    Update test programs.
+
+commit a5b16cc15076b9a9cee5a28b6dc08b01b5130cf3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 1 21:39:07 2013 -0400
+
+    Added function mapper_prop_pp() for help printing typed values.
+
+commit a2c05518d739334892dd1b43279eff4bf8dc9248
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 1 21:38:14 2013 -0400
+
+    Removed more mvals, fixed string pointer bugs.
+
+commit 2248de587b0456f0287d5430b4d2d1996174cf10
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 1 21:36:12 2013 -0400
+
+    Initialize lengths of added properties.
+
+commit 0e975c8ea8af632307e22738555a8586093e9e87
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 30 20:02:53 2013 -0400
+
+    Trial: moving away from lo_arg union for handling libmapper properties in favour of typed arrays.
+
+commit d9e0de731358e2dfc81bc7e8e2f97c0c5a8fa695
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 27 11:35:48 2013 -0400
+
+    Adapt testdb.c for vector extrema properties, remove test for separate range property.
+
+commit 93e78ef6016196467f3c389d17cd42cad819601e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 27 11:34:59 2013 -0400
+
+    Parameter parsing: if a property key has no values, set type and value entries to 0.
+
+commit a587c8ebf9e5d4275f5d5632c8e2b572af8b927d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 27 11:33:52 2013 -0400
+
+    Allow creation of connection db entries with unknown signal length properties; include signal lengths in mapper_db_dump().
+
+commit 796cbe286a9080d0bda4cab73a064be6bd3efc47
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 27 11:32:41 2013 -0400
+
+    Connection db: Need to parse src and dest length properties before extrema properties in order to known if vector lengths match.
+
+commit 48d26031db1c5c7c5f9393d88fe78128caa751ad
+Merge: b7c491a 1708248
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 18:24:51 2013 -0400
+
+    Merge branch 'master' into vector-extrema2
+    
+    Conflicts:
+    	src/monitor.c
+
+commit 1708248ac54d4282220a658bb2c6be169c9919d9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 18:23:23 2013 -0400
+
+    Only need to dispatch modify message if it contained properties.
+
+commit b7c491a753178190e274f309ca931e0df40516eb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 18:21:58 2013 -0400
+
+    test.py: removed range prop, added test for vector extrema.
+
+commit 723ded40b2e36e53ebe3062dc27c7874fb5bb9b2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 18:19:48 2013 -0400
+
+    Testparams.c: removed special tests for range property, added test for vector src_min.
+
+commit 140524e3db56ad900e30470895719c26b79c5f86
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 18:01:58 2013 -0400
+
+    Python bindings: adapted typemaps for vector minima and maxima in db_connection struct.
+
+commit 98b19b5fbd3fac8a793c9e031a6d70fe47fe0edd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 18:00:29 2013 -0400
+
+    Removing references to obsolete range property.
+
+commit cc0edcedf8407ec5cbd8c91f56883b0b9da89dda
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:58:49 2013 -0400
+
+    Pass mapper_db_connection_t to mapper_msg_prepare_params()
+
+commit e56f56d04a3a37a6055aa71469899321a2a286ca
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:57:03 2013 -0400
+
+    Fixed error-checking for setting linear expression.
+
+commit 660945beb67fcea6d269af544a0be277cae94bb2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:56:12 2013 -0400
+
+    Fixed error-checking for boundary processing.
+
+commit 903f15eb83aa9ccee24409cd45ad78fed61d57c2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:54:47 2013 -0400
+
+    Can't use memcpy for signal value -> mval union.
+
+commit da5721e8ed87b0215543561d649c721ef9928b7c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:53:39 2013 -0400
+
+    Corrected arguments for mapper_expr_evaluate()
+
+commit 3c17cf9577e455fcfc5722dac853cbe2964226ee
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:52:53 2013 -0400
+
+    Allocate memory for connection ranges when needed.
+
+commit 510b8e03cd2f7818553cd33fb6452a4cc4bd65f9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:47:57 2013 -0400
+
+    Added remaining connection props to flags; only attempt to set connection ranges if appropriate types and vector lengths are known.
+
+commit 6aba7c23f36467b04c2ececf9c32c6624094a64d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 17:40:59 2013 -0400
+
+    Restored arguments for mapper_expr_evaluate().
+    
+    And one more...
+
+commit f1e69499f8868c5aeac4dc5bc01c518d06587d76
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 26 14:30:50 2013 -0400
+
+    Bugfix: calling _link(), _connect(), or _connection_modify() from monitor with string arguments could have resulted in segfault due to admin message bundling.
+
+commit 9129f5bcc5064df8607af96055fc658f04e407d5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 25 14:57:47 2013 -0400
+
+    Revert addition of linear() function and range variables to expression engine.
+
+commit 912b462b451b1b768ac5903c91158d18e5b461c5
+Merge: cf7adca 1b47cf6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 24 11:05:36 2013 -0400
+
+    Merge branch 'master' into vector-extrema2
+
+commit 612cbfef51139f553550681f0378973f7ff69693
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 23 16:20:24 2013 -0400
+
+    Define default expressions for unmatched vector lengths - truncation or zero-padding.
+
+commit 5ebbccd14b357f6139cf0586f4a22e4fec0b2526
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 23 16:00:53 2013 -0400
+
+    Fixed problems with operators or functions inside vector-builder - necessitated tracking dimensionality of stack in evaluator. Modified printtoken() function to mark tokens with locked vector-lengths, and added debug printing to vectorization in evaluator.
+
+commit 70ae831157434e662cb0596cc9296e599191a3ca
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 23 12:58:23 2013 -0400
+
+    Allow use of vectors in vector-builder e.g. [x[1:3],0,0]. This requires tracking arity and vector-length of TOK_VECTORIZE separately.
+
+commit 871034732d9724455d267ad8d644629a51367593
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 22 18:44:58 2013 -0400
+
+    Run last typecasting check at end of expression parsing.
+
+commit 76df2ec50572d44bcedec460d3d2a6b0cdc2ef62
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 22 18:44:03 2013 -0400
+
+    Truncate or zero-pad vector signals as appropriate in bypass mode; default to bypass mode for connections between signals with unmatched vector lengths.
+
+commit ee058ad9015244f906eecfe34d5870409da80436
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 22 18:33:26 2013 -0400
+
+    Enable vector index ranges in the form var[a:b]
+
+commit 9b10aa3ec5c91a97a66f75adc6270d478793690b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 22 16:12:07 2013 -0400
+
+    Implemented vector element indexing and vector building in expression parser and evaluator.
+
+commit 1b47cf61143d96efc72303c640cda002d60d5cf8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 21 18:49:43 2013 -0400
+
+    Check vector indexes against signal vector lengths.
+
+commit cf7adca0a1ab9bdb860b4dbe449c3f33a2b2b3fe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 21 18:10:01 2013 -0400
+
+    Remove superfluous casting
+
+commit 7edd987637fa8d7ca31ff9c0feeb3e13bf5a182f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 21 18:06:54 2013 -0400
+
+    pass both input and output vector lengths to mapper_expr_new_from_string()
+
+commit 9de057abcd5758f53d6604a0e0cf311bbe32e8d2
+Merge: 9af3bdd 0428a21
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 21 17:00:34 2013 -0400
+
+    Merge branch 'master' into expressions
+
+commit e357952b0649ed7382ab95fe1ba03f503674f9c2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 20 16:56:37 2013 -0400
+
+    Use mval union for storing connection ranges.
+
+commit 0428a218512fc218cac4cf1a46d76a50180fde47
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 20 14:10:32 2013 -0400
+
+    Cleaning up some test programs: wait until connections have been established before entering loop.
+
+commit a4d48233d8365dfac69df79b87a6b9d5621adb60
+Merge: 7291445 9af3bdd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 19 17:35:56 2013 -0400
+
+    Merge branch 'expressions' into vector-extrema2
+
+commit 9af3bdd03e79d94869dd42a6257bd568a142b42d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 19 17:35:22 2013 -0400
+
+    Allow double type for range data.
+
+commit 72914453b4d9d9a88adf04af5ba54986ac2f9f92
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 19 17:34:14 2013 -0400
+
+    Adapted testlinear program for new range datastructure.
+
+commit 79b9ab16ff1c80a7710f177044e1ae450d2344e5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 19 17:33:41 2013 -0400
+
+    Removing range property from connections.
+
+commit ef0d994141f1161ca25a395c638d4f1095720342
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 19 17:33:04 2013 -0400
+
+    Free destination ranges in connection.
+
+commit 224b82083bbe1eb9ba548f369fafe8715aff8090
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 18 16:57:49 2013 -0400
+
+    Added missing function to enum.
+
+commit 9f34201af9038ce6e93f2c335a702f442e61e5f3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 18 16:12:57 2013 -0400
+
+    Parse src and dest extrema references as variables in expression engine; allocate memory for vector extrema.
+
+commit 969b5fc1f4a8ae3af8cb50faaa369f543ff7d2e4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 11 19:10:58 2013 -0400
+
+    Implemented vector connection extrema properties, linear scaling as explicit function in expression engine.
+
+commit aa4b2972205b14f1aff5532b890bfd4311a3107c
+Merge: d940c21 60ff039
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 10 09:55:25 2013 -0400
+
+    Merge branch 'master' into expressions
+
+commit 60ff03970f139297d0883b4bea5ac23c94840d22
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 3 17:18:55 2013 -0400
+
+    Revise Python reserve_instances() API
+
+commit b802b033304382c2c40f8edd1e2ce7eea3d9d1db
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 3 17:18:08 2013 -0400
+
+    Call monitor.poll() in Python example programs to trigger admin message bundle.
+
+commit fd1f08cbab0b5ec965e63d60e9e2792ff18f6be4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 3 17:17:19 2013 -0400
+
+    Fix python db function naming
+
+commit 9f2c77abbce0cdf2284a503291bdb5dc06a36290
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 3 17:16:21 2013 -0400
+
+    Fix array allocation in swig typemap.
+
+commit 66ede884e446338796cec8cbe9bc0d3b36dbdaf4
+Merge: b68d01f b05f287
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 3 14:56:51 2013 -0400
+
+    Merge branch 'instances5'
+
+commit b05f287132cff98f6c7517c51b6cb7af737a30fa
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 3 14:56:36 2013 -0400
+
+    Updated testinstance
+
+commit b68d01f6993ce383c947f6ef77ef8bc3f5d70747
+Merge: d028df9 2ffa6c4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 3 11:45:22 2013 -0400
+
+    Merge branch 'instances5'
+
+commit d028df955144623170b85bad1ffc55c64c4f63c5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 26 16:41:24 2013 +0200
+
+    Consider the arch in the copy step during swig build.
+    
+    Otherwise, if multiple arches are built, the cp command fails since it
+    tries to copy from multiple destinations to one place, i.e.:
+    
+        cp: will not overwrite just-created ‘./_mapper.so’
+
+commit 2ffa6c42293b0de40a71b12745862a9512b7b882
+Merge: 2ea8f31 415949b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 19 15:46:26 2013 -0400
+
+    Merge branch 'master' into instances5
+
+commit 415949b59bda4a815cf50301491312eb49ee5f58
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 30 18:50:30 2013 -0400
+
+    Free device server last so that /logout message bundle sends properly.
+
+commit b2927b5f5423e69e12a66b0742b8124db055d10b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 30 00:11:11 2013 -0400
+
+    Only add addr argument if admin has device.
+
+commit 05955a325709ed151421291755799b65323fb76e
+Merge: 2265ebf 6755914
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 29 07:43:56 2013 -0400
+
+    Merge branch 'master' into admin-bundles
+
+commit 6755914222df23561c81c2d4ed2690a52ff72d58
+Merge: 74a2b34 b2dc211
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jul 29 12:00:45 2013 +0200
+
+    Merge remote-tracking branch 'malloch/master'
+
+commit b2dc211d7f999d5f92232cbab8a698f8e9e2f8e9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 26 23:18:40 2013 -0400
+
+    Fixed a couple documentation errors.
+
+commit 74a2b34c8d02069bd0db06204ea389420490c33c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jul 22 11:17:51 2013 +0200
+
+    Check the result of lo_message_get_source() in handler_device().
+
+commit f4ba45adf086c662e05a2889894093a66cb41ce9
+Merge: 978eda9 13fb243
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jul 22 11:03:45 2013 +0200
+
+    Merge remote-tracking branch 'malloch/master'
+
+commit 13fb2437bdbd2dbfb1be7e0e8ea155e52113f344
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 21 18:01:07 2013 -0400
+
+    Added tutorial for Pure Data bindings.
+
+commit 09683f12b3feea88648eca1f3c4c6d9fb293cc6a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 21 17:59:59 2013 -0400
+
+    Added tutorial for new multi-object maxmsp bindings.
+
+commit 2265ebf9e0211fcc22fe310641c8cf0e089ef874
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 18 21:24:11 2013 -0400
+
+    Use lo_send_bundle_from()
+
+commit ac6f6778a1ce396afafbc07d116c656aa52bcd33
+Merge: c07084d 4ab138d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 18 20:03:17 2013 -0400
+
+    Merge branch 'master' into admin-bundles
+    
+    Conflicts:
+    	src/monitor.c
+
+commit 4ab138df974ab9db1dd07463abd671147cb36af7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 18 18:38:29 2013 -0400
+
+    Don't assume host returned correctly from message.
+
+commit 978eda9d7ba6eb97a10f86273ff2f79ba4a7e008
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Jul 18 16:12:09 2013 +0200
+
+    Add openjdk amd64 to search path.
+
+commit 00393de639e2a28168f4f3c1ec4c119820493dd2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 18 00:40:27 2013 -0400
+
+    Add more metadata for python setup.
+
+commit 0f655e1c7bc69d5615a2a08aa881b2e15df64dbd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 16 12:02:12 2013 -0400
+
+    Update liblo configure check for version 0.27
+
+commit 2ea8f311e5bde717e02713b0a421603634aa51fb
+Merge: 4929f7c e6183d1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 11 17:15:51 2013 -0400
+
+    Merge branch 'master' into instances5
+
+commit e6183d1ace593117dfd28ac578e3639a40589b8d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 11 17:15:26 2013 -0400
+
+    Added ability to set links to use any scope.
+
+commit 498650cbd2fdc4030d92c79c32afa4f8fc531073
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 11 17:14:42 2013 -0400
+
+    Added connection property @send_as_instance to remaining functions.
+
+commit 9a14df3439dd88cf549a97fd9b586bd4d87058d7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 9 19:28:44 2013 -0400
+
+    Python bindings: Use one typemap for both int and float list array updates.
+
+commit c07084d388e5391713ea06d526b6385c05eaf598
+Merge: f685c37 0cbb10a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 9 10:22:50 2013 -0400
+
+    Merge branch 'master' into admin-bundles
+
+commit 0cbb10a32824f9b48559b3705a36ccc41529ea4e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 9 10:22:01 2013 -0400
+
+    Revert "Python db: Added missing iterator for link_by_src_dest_names."
+    
+    This reverts commit cda2d7b73cd890985ce872fffe4fb0ba68a205b9.
+
+commit f685c371b3e862be96322e6abf695122cd900755
+Merge: c444b55 cda2d7b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 8 20:22:18 2013 -0400
+
+    Merge branch 'master' into admin-bundles
+
+commit cda2d7b73cd890985ce872fffe4fb0ba68a205b9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 8 20:21:35 2013 -0400
+
+    Python db: Added missing iterator for link_by_src_dest_names.
+
+commit d940c21f40a82c2aeb06ab58ebb8b1c8ec8d42b7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 7 21:03:47 2013 -0400
+
+    Fixed bug handling spaces in lexer.
+
+commit 8239e873224ea7f83b126f75f5bc654238700f95
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 7 21:02:59 2013 -0400
+
+    Added constant e to lexer/parser.
+
+commit c41efe25eae64117e3335da2bf8f87c60513ae1f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 7 20:09:42 2013 -0400
+
+    Properly handle functions with arity==0
+
+commit b6b14626807d68c75f93ebfbe50ab5354f15ddad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 7 17:06:52 2013 -0400
+
+    Expression lexer: Do not precompute uniform() even if argument is constant
+
+commit c444b55788bd2bfca4b0a14d298eac8b9195a4c1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 7 12:39:37 2013 -0400
+
+    Alphabetized admin message enum and string array.
+
+commit 36ccaeca1ecdf484105b020eb091a4c9ce5ada25
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 6 18:02:59 2013 -0400
+
+    Corrected implementation of admin message bundling: since liblo doesn't copy the path strings in lo_bundle_add_message() we bundle messages with arbitrary paths, but we can bundle messages that conform to standard libmapper admin messages.
+
+commit 89b9cd8fe7ae81a8c0c8cfd1a90207d074794d85
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 5 20:53:04 2013 -0400
+
+    Call mdev_poll() more often in testsignals to speed up batch requests. This will no longer be necessary once select branch is merged.
+
+commit 160c26c40293b654cda1d3e8c85ce4aefcc06b3d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 5 20:42:53 2013 -0400
+
+    Bundle essentially all admin messages. Send bundles at the beginning of new call to mapper_admin_poll(), or when the bundle count >= 20 (perhaps we should use lo_bundle_length() instead, but count is cheaper).
+
+commit 4929f7cb5891e4705078f47e0862f2bd0214cc60
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 5 10:58:37 2013 -0400
+
+    Refactoring instance id_map variable naming.
+
+commit d015ab6d6056d9d5844ce2c2af5fe9f870e8af51
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 4 21:25:44 2013 -0400
+
+    Revised msig_get_instance_with_local_id() for persistent ids.
+
+commit 18a8a778632e57cbbcdbb3455678a0d09ca87786
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 4 16:39:58 2013 -0400
+
+    Fix return type for instance bsearch.
+
+commit 8d21bb6dbbcd2facb375dfb8863eac89918c1af8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 3 16:19:48 2013 -0400
+
+    Use bsearch in msig_get/set_instance_data() functions.
+
+commit 1b380a926c8cf07afb6ef8817016cbff76c2f40a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 3 16:19:17 2013 -0400
+
+    Rewriting msig_get_instance_with_remote_ids() to support persistent local ids.
+
+commit f4c4cf05a8e8c44095d8175dc6820fa92d7adc4d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 2 19:36:06 2013 -0400
+
+    Add msig_remove_instance() to java bindings.
+
+commit a745177c67d529e14ec391770880a2cddc1c66c7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 2 19:33:48 2013 -0400
+
+    Add msig_remove_instance() to python bindings, use it in testinstance.py
+
+commit 7e21694f6dd6d29c1daa2c9dc52f036a6981d614
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 2 19:22:59 2013 -0400
+
+    Revise msig_remove_instance() and add to header file.
+
+commit 63ba2d59fe9bbac87bb968e5635779073c8331bc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 2 19:22:25 2013 -0400
+
+    Add id and user_data arrays to arguments for msig_reserve_instances(); function now returns number of instances added. Remove default instance of recvsig and add specific ids in testinstance program.
+
+commit 831b63e10c372bd905a8bb4704ea8d27f84f3809
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 16:45:15 2013 -0400
+
+    Removed todo.
+
+commit d4db3060ad4121f51d288e5a8f169d41073ae84c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 15:30:35 2013 -0400
+
+    Properly free instance memory; removed unused variable.
+
+commit 791eb9d2518b6a1f89b27898e2fc90e1402731b2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 13:09:24 2013 -0400
+
+    Remove old todo.
+
+commit 852ca7bda07c8759ebaecf783b9b4b15bde0d424
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 13:08:46 2013 -0400
+
+    Fix bugs in new msig_remove_instance() array realloc.
+
+commit e06d3940a5af857b3b4cff1d9f2b99a7ef997747
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 13:07:23 2013 -0400
+
+    Call instance event handler (if defined) when scope or connection is removed.
+
+commit 4eced8b12785d62e3bc0a692c3269d0b28828779
+Merge: 3d0d537 b302e31
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 09:26:36 2013 -0400
+
+    Merge branch 'master' into instances5
+
+commit b302e315857b235164e221471ca565a35655dfdd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 09:17:17 2013 -0400
+
+    Check for null string in mdev_get_*_by_name()
+
+commit df11c0649bc231d5251d0f819b6d79e346607718
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 1 09:16:19 2013 -0400
+
+    Restored ability to set ranges in linear mode by message with expression regeneration.
+
+commit 3d0d537f7aa17dcc8fa02834bf25c4c40e25cd4c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jun 30 16:06:11 2013 -0400
+
+    Fixed another pointer bug calling bsearch.
+
+commit 781786b9ccf4633f84b16dd1721c8d7c3488a0a7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jun 30 13:42:38 2013 -0400
+
+    Added function prototype for msig_reserve_instance(); fixed arguments for instance id bsearch.
+
+commit 6f90d4c1b7c9811fb6af982187d82cc2d14ede85
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 29 23:21:12 2013 -0400
+
+    Use pointer array to store signal_instance structs instead of linked list so that we can create persistent associations between user-specified instance ids and user_data context pointers. Keep array sorted and use bsearch to look up instances efficiently by id.
+
+commit b8154cc2375833ee7ac2b33fc2233903d4f1e391
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 28 15:53:06 2013 -0400
+
+    Do not use result of unsuccessful router search or lo_message creation.
+
+commit 200556cfb889d6832bbedcd0e53444828902c519
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jun 16 23:05:25 2013 -0400
+
+    Check for required signal prop names in msig_set_property(), and allow some flexibility for name min/minimum max/maximum, unit/units.
+
+commit fef7a83c842f80aed3a6ed1946e422e2586b211d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 14 22:02:49 2013 -0400
+
+    Added support for signals with vector (list) values to swig/python bindings.
+
+commit 0d31a6d76516e6cd9652217994504b90c0266975
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jun 10 21:57:59 2013 -0400
+
+    Allow querying the value of an instance that has been released remotely. Also allow instance id-matching.
+
+commit 06546a51300eb167817018852c5e6abdf63b3741
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jun 10 15:03:06 2013 -0400
+
+    Rename two python db functions to match C and Python APIs.
+
+commit b34f644ec3c3526987a2bfd688e8c40632fcf2a5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 8 16:14:45 2013 -0400
+
+    Python tutorial: added instances and timetags, fixed pyo example.
+
+commit 27bdd6f1c2b3869ebfaa594908b1bd9565fa1281
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 1 19:36:13 2013 -0400
+
+    Ensure properties of type double are included in mapper_messages.
+
+commit 069dcb28811741210c39d28345359112ee28ac0d
+Merge: ec9aabf 7014b89
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 1 19:09:45 2013 -0400
+
+    Merge branch 'master' into expressions
+
+commit 7014b892a2fa5bc3ffa5febc91d9013dcdd6a4bf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 1 16:04:04 2013 -0400
+
+    Added example python program showing demonstrating the use of device connection callbacks to label control widgets with the name sof connected signals.
+
+commit b306d80add29a0c102816b41028a0f9077b5ba65
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 1 16:02:58 2013 -0400
+
+    Added python test for device callbacks.
+
+commit eac009cbfd55c7b5a13b120e5941cd9fdca1a494
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 1 15:59:44 2013 -0400
+
+    Finish adding device link and connection callbacks to python bindings.
+
+commit b4a1420be6324be147ac1213123a0acb004d797b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 1 15:59:16 2013 -0400
+
+    Rename mdev_add_*_callback() functions to mdev_set_*_callback() for API consistency.
+
+commit 0ee2ebe4eb36773626bb85170d7306f29fd8e010
+Merge: ab3dd63 5f58b8c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 31 08:39:29 2013 -0400
+
+    Merge branch 'master' into python-device-callbacks
+    
+    Conflicts:
+    	swig/mapper.i
+
+commit 5f58b8c57fd7db636b2a9211416faa289a4b46b8
+Merge: 24c2254 5c69573
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 23:05:54 2013 -0400
+
+    Merge branch 'device-props'
+
+commit 24c22548df44d4335f57cbd192a906de09a50c73
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 23:05:36 2013 -0400
+
+    Fixed another memory leak and a bug updating signal minimum/maximum properties in db.
+
+commit 5c695730a96fe8ab83f266709d5ae5cdd3a8a5cb
+Merge: 60e6d9f b77469f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 21:23:56 2013 -0400
+
+    Merge branch 'master' into device-props
+
+commit b77469fa04e97f04ae5902bd75959a78f104c54b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 21:19:44 2013 -0400
+
+    Fix Valgrind invalid read warning from strncpy.
+
+commit 6de1d7054c32de12b22964640a8f30cd9f1287f0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 19:33:54 2013 -0400
+
+    Free allocated lo_blobs
+
+commit 116a59ff2592a6d6d3fab3d86d23ec587bf80199
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 17:18:01 2013 -0400
+
+    Memory leak fix.
+
+commit fa40ea54fb592e7239213b7ff540f1b7a42d3e06
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 17:09:55 2013 -0400
+
+    Fix query-related memory leaks.
+
+commit 245407bfa0f089ded66f8633a36ce7099da44ee6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 30 16:56:31 2013 -0400
+
+    Do not use lo_arg_pp() to print device name.
+
+commit 60e6d9f36cf3e2d9b0940cfebeff8749523f646d
+Merge: cd44e8e c969854
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 29 19:57:42 2013 -0400
+
+    Merge branch 'master' into device-props
+    
+    Conflicts:
+    	include/mapper/mapper_db.h
+    	src/device.c
+
+commit c9698542bdb16ab3fb4f2f5cb9b6cf46399c4325
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 29 19:54:54 2013 -0400
+
+    Fixed memory leaks in db, free db structures at end of testdb program to support valgrind memory profiling.
+
+commit cd44e8e45b093c1ed08dca5806bba3576bbfe247
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 29 14:25:52 2013 -0400
+
+    Remove debug printf
+
+commit 7b3e2b20d4c72892a8a64a2956a4f842d0f477f0
+Merge: 530b093 b0942ce
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 29 11:59:04 2013 -0400
+
+    Merge branch 'master' into device-props
+
+commit b0942ce196dfd5c321ae16245e2744d02af906df
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 29 11:58:41 2013 -0400
+
+    Added signal update queueing to python bindings.
+
+commit ab3dd63c1bc5699018077d1b76e998a81cafbb6c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 29 11:44:35 2013 -0400
+
+    Added device-local callbacks for links and connections to python bindings.
+
+commit 2719c51d9e0ed1b44c28d2c54ebc6e4304678052
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun May 26 15:22:15 2013 -0400
+
+    Enabled separate control of monitor autorequest functionality for signals, links, and connections.
+
+commit a8d09481b63f5f12a34be171e7a7c74929b20efd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 16 12:51:12 2013 -0400
+
+    Python db bindings: Added missing properties for connections and links (including link scopes).
+
+commit 25a28f0a9310e4d44bc997ec3d4611f4430557b3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 16 09:35:43 2013 -0400
+
+    Parse and store link scopes in db.
+
+commit 0b147376affe98ea84ec359df9c5cbe6d1a18dc6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 16 09:09:08 2013 -0400
+
+    Added support for multiple values per key in mapper_message_t
+
+commit 600b69f556d5d994a1b7200d18aeceaefdcf1996
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 16 08:49:22 2013 -0400
+
+    Added test program that creates a device and adds 200 signals - useful for testing monitor batch-requests.
+
+commit d05091ccf09eba1c2ac7c976b6c54901591118d9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 16 08:47:38 2013 -0400
+
+    Removed use of data type lo_address in public API, since it is usually more straightforward to access host name and port directly.
+
+commit 57c7620be2bb83f9156bbdf5a85e0d9c25d0ede3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 16 08:37:40 2013 -0400
+
+    Refactored mdev_timetag_now() -> mdev_now() and added equivalent monitor function mapper_monitor_now(). Also added Python bindings for these functions.
+
+commit 4c892f47b17ca45f296ac76d997463d29f9d80b9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 15 23:04:51 2013 -0400
+
+    Add missing connection properties to db.
+
+commit fd42cd8f2e22c9288a452c8c2c13946aaa06befb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 15 23:00:52 2013 -0400
+
+    Fixed reference counting bug in Python bindings when adding and removing signal callbacks.
+
+commit 307e3da8995ac5b557e9b61920d3a99625a3534c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 15 22:56:56 2013 -0400
+
+    Print all connection metadata, reorganized.
+
+commit 6ceba75e3229c4a34c6ca467a16049a48929ce19
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 15 22:55:57 2013 -0400
+
+    Add missing include for stdlib
+
+commit c49fc3c791b8a21945d3694f11b8c180cdec431c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 13 18:46:17 2013 -0400
+
+    Print link metadata in testmonitor.
+
+commit 9d0e7b6bc29de37ce3eebe8c2f78ce7323e56c23
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 13 18:45:47 2013 -0400
+
+    Make automatic connecting a runtime argument.
+
+commit 2bd15450ccc75ab2b20bb88426f9f7a8d016e839
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 13 18:43:42 2013 -0400
+
+    Fix serious bug in monitor batch requests of signal metadata.
+
+commit 8b33caf0600f971110ff99325fcc7bb2012c76af
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 11 14:57:39 2013 -0400
+
+    Cleaned up expression syntax documentation.
+
+commit ec9aabfd155812ccb8cb2a8f06f057920c4da749
+Merge: df6cb67 a0be6b4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun May 5 14:18:49 2013 -0400
+
+    Merge branch 'master' into expressions
+    
+    Conflicts:
+    	src/connection.c
+
+commit 530b0935480071d765f1889000519eb372a13aa3
+Merge: be7cddf a0be6b4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun May 5 12:53:05 2013 -0400
+
+    Merge branch 'master' into device-props
+    
+    Conflicts:
+    	include/mapper/mapper.h
+    	include/mapper/mapper_db.h
+    	src/admin.c
+    	src/db.c
+    	src/device.c
+    	src/signal.c
+    	src/types_internal.h
+    	test/testexpression.c
+    	test/testqueue.c
+
+commit a0be6b4c8ec1c2d5eec6ea12bdb0225c104c52b2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 4 16:32:50 2013 -0400
+
+    Handle case where provided count value is negative.
+
+commit 15f4baf244a053f11c6a75b2dca9bb45fe084d6c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 3 04:49:39 2013 -0400
+
+    Fixed some documentation comments.
+
+commit 8e834a68759307883035fe6e54871be1c78f9fda
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 28 19:26:40 2013 -0400
+
+    Added documentation of results from test/testspeed.c
+
+commit 42a81ef14e302055509f5f37486e5e69bc186619
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 12:53:37 2013 +0200
+
+    Add libmapper.org to the README.
+
+commit 3e677c29ff8ddf7ec71cf329b3bc682eb7f533aa
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 12:41:08 2013 +0200
+
+    Add the RtAudio readmes to the release tarball.
+
+commit 236896dfc6482afa6886d90e9396b3fe52a27db7
+Merge: cb35a26 708b894
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 12:33:47 2013 +0200
+
+    Merge remote-tracking branch 'malloch/master'
+
+commit cb35a26a8fea2d5c8f88ca04b29fffadde4912fb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 12:32:06 2013 +0200
+
+    Keep NEWS in a markdown format.
+
+commit 9e5515ef8f281cccf6bdc9c4620bfada8618b1a3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 11:52:48 2013 +0200
+
+    Add some release notes for upcoming 0.3 release.
+
+commit bc90cbcc9ed8f69e8254f751d183d1db0cee506f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 12:27:31 2013 +0200
+
+    Update AUTHORS.
+
+commit 9368db55bafe72dfed5c77971ec251554b4e2e8f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 12:19:42 2013 +0200
+
+    Update to RtAudio 4.0.12.
+
+commit 5cd67e197e076a8c53d3931297bba60a23c5e485
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 12:05:46 2013 +0200
+
+    Globally refer to "instance management events" as just "instance events".
+
+commit 708b8949098ef6920cafa4f9b42c071a9cf76f74
+Merge: deb3021 842430e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 25 22:40:43 2013 -0400
+
+    Merge branch 'doc'
+
+commit deb30219b545c4d493a06b44994a4fd3d741fbf2
+Merge: 58be09b 0092004
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 25 22:40:25 2013 -0400
+
+    Merge branch 'jni'
+
+commit 58be09b3c7d302e31278f8525135df7ef3c00513
+Merge: af20e50 c5b5fd9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 25 22:40:17 2013 -0400
+
+    Merge remote-tracking branch 'steve/master'
+
+commit af20e50f8ff766ec3f92bcce949b5520e47a5ab6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 25 22:39:19 2013 -0400
+
+    Do not send instance updates over network until parent device has a registered name (since the name hash is used as group id). Once the device is registered, replace NULL group id in id maps of instances that have already been locally activated.
+
+commit 761c5473efd7de5dc0c225ef13ffb4529b463cca
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 26 00:10:15 2013 +0200
+
+    Update EXTRA_DIST for tutorials and other documentation.
+
+commit c5b5fd9bbd790c5364e6df731c1da77f1e51705d
+Merge: ca7b2dd 32b680b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Apr 25 23:38:57 2013 +0200
+
+    Merge branch 'jni'
+
+commit 32b680ba1a4ea8e8c9dfc3baed9852bb9b777977
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Apr 25 23:33:19 2013 +0200
+
+    JNI: If an instance listener is registered, call instead of signal listener.
+
+commit 485288e8e9dc8e0366b7339026717f17ff39177e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Apr 25 23:31:40 2013 +0200
+
+    JNI: Processing app, register instance listeners in instance event callback.
+
+commit 958221164691cde35645df7235071381a07a3136
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Apr 25 23:30:36 2013 +0200
+
+    JNI: Processing app, wait for ready & set the window title to device name.
+
+commit baf42a2867e63811b5982e2b2217a257d9f7fb90
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Apr 25 23:30:02 2013 +0200
+
+    JNI: Process app, decrease framerate.
+
+commit 00920043dc571745f32ea09c418ebb1f39802585
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 25 16:10:40 2013 -0400
+
+    Use jint for return type.
+
+commit da9e2cfb34769bd88f512be54d4d623960666240
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Apr 25 18:31:39 2013 +0200
+
+    JNI: Set `genv' before msig_set_instance_data() since it triggers a callback.
+
+commit 38e45e5128029be09e8d227b52d9ddfbdb11b186
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Apr 25 18:31:22 2013 +0200
+
+    JNI: Fix some wrong uses of the `genv' global variable.
+
+commit ca7b2dd8059cf30d58100d1a9d56058702bac223
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 24 10:43:00 2013 -0400
+
+    Parse timetag properties as doubles in device_to_py()
+
+commit 842430e8c8dd5c51358175c01a3218e32117b947
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 24 10:31:28 2013 -0400
+
+    Added missing underscore.
+
+commit 1866e974d1d24210dd0ea5fbdee3181c96a146b7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 24 10:29:34 2013 -0400
+
+    Redraw testmonitor display periodically to view device sync timestamps.
+
+commit a62f69349f16435acfe3646fa77193ea58ece0a8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 24 14:09:45 2013 +0200
+
+    JNI: Create symlinks to the jar and .so from Processing's "code" directory.
+
+commit df5ac192e4d1a27972fef6d8b11fa0a7f1ccbbf9
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 24 12:48:04 2013 +0200
+
+    JNI: A basic Processing project to test the JNI instances bindings.
+
+commit c74dcdcabff23c9272d6a27335f854b56e59f1d1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 24 13:29:24 2013 +0200
+
+    JNI: Target Java 1.5, for compatibility with Processing.
+
+commit 578fc369a5284bc5ad6452deb1bf3423bd1a7e72
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 24 00:28:12 2013 +0200
+
+    JNI: Switch to Device.Signal.set/get_instance_callback() instead.
+    
+    user_data is always treated as an InputListener.  User code will have
+    to instantiate an InputListener per instance.
+
+commit cdcf04af7281cf4b7f013b0627d3c23199a4b6a3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 24 00:16:55 2013 +0200
+
+    JNI: Add Device.Signal.instance_data() and set_instance_data().
+
+commit 06baad219e42eb3f6631fa3b8ac8843e61490c99
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:51:01 2013 +0200
+
+    JNI: Add Device.Signal.oldest/newest_active_instance().
+
+commit ea4f97a2dd7e4858670bb450f1da987d500fb706
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:38:58 2013 +0200
+
+    JNI: Add Device.Signal.num_connections().
+
+commit 4905b8fec12492d21d95ec14370a77fdd8c8cc30
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:58:49 2013 +0200
+
+    JNI: Make stealing mode constants static.
+
+commit da64e4ffabf56fb1b92605d18ca42d6c94a8f1c5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:55:13 2013 +0200
+
+    JNI: Add Device.Signal.instance_allocation_mode().
+
+commit 8e14894f93c1e462c3a2ddc5049bae2141b36252
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:32:03 2013 +0200
+
+    JNI: Add Device.Signal.reserve_instances().
+
+commit bd4e69c8cc4c627848a0854d49650803f515124d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:27:27 2013 +0200
+
+    JNI: in test.java, change input signal back to 'f' so onInput gets called.
+
+commit f255a1352b4cdc46106242a8432dad5dd8ab862f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:23:19 2013 +0200
+
+    JNI: Free objects associated with output signals too.
+
+commit 9a6de3e56f1a319711bcdcd522a252bf68a77e81
+Merge: 7fb3c00 3580968
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 23:18:58 2013 +0200
+
+    Merge branch 'master' into jni
+    
+    - Add timetag parameter to instance management callback.
+    - Remove Device.Signal.start_new_instance()
+
+commit 7fb3c00e39f439cb1b2e57c6ebf6ec61293c13ba
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 22:50:28 2013 +0200
+
+    JNI: Fix "unknown signal type" when value=null in input handler.
+
+commit 716987d7d4445064c1ff38b735649fe472eecffb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 22:42:29 2013 +0200
+
+    JNI: remove old set_callback() implementation.
+
+commit ae75b7b6e5801b1d129bc8c93cf78601698de568
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 19:11:52 2013 +0200
+
+    JNI: Create & pass in a TimeTag object during input handler.
+
+commit 5bba883e3a3a1505fe01aa84a74c2cf758e09c30
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 19:10:44 2013 +0200
+
+    JNI: Don't assume value!=0 in input handler.
+
+commit 2fba08aeca3f04b7d38aa89cf60e0aefb638799e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 18:42:29 2013 +0200
+
+    JNI: Add a check any time Device.Signal gets its mapper_signal pointer.
+
+commit 6c36c7bd090dabf6e86aaf58c98c844ef4168a12
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 18:36:21 2013 +0200
+
+    JNI: Add a test for the instance callback.
+
+commit 8622a61e3b531cdf9d6a9bdde3e5c25d7cd9a258
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 18:35:50 2013 +0200
+
+    JNI: rename Device.Signal.set_instance_event_callback() to set_instance_callback().
+
+commit 799db4f106e2d34eea9d4bd2df4c658ecc314217
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 18:35:16 2013 +0200
+
+    JNI: Fix InstanceEventListener.onEvent method signature lookup.
+
+commit 7bf590e723da68d0b04fd28f3809e36bde03c5cd
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 18:24:07 2013 +0200
+
+    JNI: Ensure memory for output signal object refs are initialized to zero.
+
+commit 65c0a3967235bd31ce41724b56bd9b006e55dcb0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 18:11:53 2013 +0200
+
+    JNI: Declare instance event type flags static.
+
+commit 70be4b100e4ec63e984e88a4635769d4f46b46df
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 18:06:12 2013 +0200
+
+    JNI: Add Device.Signal.instance_value().
+
+commit 2507e020c937b4a13eca84628fb527cea50dc63b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 17:47:31 2013 +0200
+
+    JNI: Make TimeTag argument to Device.Signal.value() optional.
+
+commit 0d9911f3f70c328d44653e668d65e5c2d1a4a085
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 17:25:24 2013 +0200
+
+    JNI: Add Device.Signal.update_instance() for all data types.
+    
+    Note, as for Device.Signal.update(), we don't include `count'
+    parameter since it can be calculated from the array length and the
+    signal vector length.
+
+commit 2b0187e0f0edc14a950d49cb9df71fb88c0c4be5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 14:43:59 2013 +0200
+
+    JNI: Allow Device.Signal.release_instance() to be called with a default NOW timetag.
+
+commit b41a5a0c1b3c86d39f2d7ec4c8dbe2c78ea7b380
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 23 14:43:16 2013 +0200
+
+    JNI: Fix TimeTag object reference in Device.Signal.release_instance().
+
+commit 1d47d447a72aa8a4f2d2f8a3dc36a4da7bc52c0c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 22:55:43 2013 +0200
+
+    JNI: Add Device.Signal.match_instances().
+
+commit 88ad2d0b0387c8969d48a097750cbd61c67afe53
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 22:41:08 2013 +0200
+
+    JNI: Add several instances-related functions.
+    
+      - Device.Signal.start_new_instance
+      - Device.Signal.release_instance
+      - Device.Signal.num_active_instances
+      - Device.Signal.num_reserved_instances
+      - Device.Signal.active_instance_id
+      - Device.Signal.set_instance_allocation_mode
+
+commit bd60d879b0f50adaebcfebca3dfd224e2f2e16c6
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 22:30:36 2013 +0200
+
+    JNI: Add Signal.set_callback().
+
+commit d469e3d96197af0b1bebedd79f8a59daa62a8c52
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 22:13:45 2013 +0200
+
+    JNI: Add Device.Signal.set_instance_event_callback().
+
+commit 33791e9780eabd971569843112115cbec7345904
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 22:01:22 2013 +0200
+
+    JNI: Remove obsolete msig_set_query_callback() stub.
+
+commit 1153b6d16fbccbecd2a571b37a323b0845977077
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 18:13:28 2013 +0200
+
+    JNI: Provide a complete set of arguments to the input handler.
+    
+    Still need to construct a valid TimeTag object however.
+
+commit f06bb8d6d91e8ffeb0259ccc6042040233c0a661
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 17:19:59 2013 +0200
+
+    JNI: Keep a reference to a Signal object for each signal.
+    
+    This is so that the Signal object can be passed to the InputListener
+    as an argument without creating a new one every time it is called.
+    Device.add_input() and add_output() are now completely native.
+
+commit 44e7ab39e2c82d36510e9dfb5d6b03b751ef0c10
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 15:41:43 2013 +0200
+
+    JNI: Rename TimeTag.IMMEDIATE to TimeTag.NOW.
+
+commit 358096853ad12b913e4c9e7c83ae8ca92216f210
+Merge: 5a782eb 5e25080
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 22 13:08:20 2013 +0200
+
+    Merge remote-tracking branch 'malloch/master'
+
+commit 5e25080e76e21a5781109104492c3361de08c63c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 21 15:03:11 2013 -0400
+
+    Use uint32 for device name hashes throughout; added property and functions for storing/retrieving timestamp of last device sync from db_device, can be used to watch for unresponsive/crashed devices.
+
+commit 1b800b33418680f52377bdc118f25d907a07aefe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 21 08:17:05 2013 -0400
+
+    In testsend program, wait for device to be ready before proceeding.
+
+commit b6275df58b2683055eaaab3e92ac0caba13f99ff
+Merge: 7033bed e392af0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 21 08:07:38 2013 -0400
+
+    Merge remote-tracking branch 'steve/customtransport'
+
+commit 7033beda051ebf95ced18f1d8d290449821acf88
+Merge: 5849511 3afa5e0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 21 08:07:12 2013 -0400
+
+    Merge remote-tracking branch 'steve/customtransport'
+    
+    Conflicts:
+    	src/receiver.c
+    	src/router.c
+    	src/signal.c
+    	src/types_internal.h
+    	test/Makefile.am
+
+commit e392af01668d3084f182b0fa5a1f9671abe20102
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Apr 21 00:52:19 2013 +0200
+
+    Use ioctl to set non-blocking mode.
+    
+    For better cross-platform compatibility.
+
+commit 584951126b881c95352d69aeafcaad6ef60953da
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Apr 20 17:32:06 2013 -0400
+
+    Update testexpression and testqueue to use monitors for creating connections, use blocking mdev_poll() instead of usleep().
+
+commit 1f2fdfaeb231159222c4645e16a1d25b0665541e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Apr 20 17:30:22 2013 -0400
+
+    Start a device server immediately whether or not the device owns inputs signals. This greatly simplifies later use of queries or reversed connections. Also added @srcPort and @destPort properties to links, fixed receiver initialization.
+
+commit 5bb7ab1feaf4cf1913f9ff5f261060d6ce4b721c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Apr 20 17:17:44 2013 -0400
+
+    Do not send empty bundles on input signal update.
+
+commit 3234c6ee0aff31d767493c5685664e19614c4c9d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Apr 20 17:16:42 2013 -0400
+
+    Get file descriptors for destination device.
+
+commit 43b3dfb60d5bec9c950a4f387ee4281d4dbfde19
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 18 11:36:53 2013 -0400
+
+    Call instance management handler on new instance if registered.
+
+commit 8399e1000f738dda79f58959cff41b48cc769dd1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 18 10:32:26 2013 -0400
+
+    Add option timetag argument to swig bindings for instance release and queries.
+
+commit 94d482bf073abfdc4505c4e3243f8abe8481e63d
+Merge: 13cebab 5a782eb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 18:54:40 2013 +0200
+
+    Merge branch 'master' into jni
+    
+    - Removes Signal.msig_get_rate() and replaces it with the signal
+      properties interface.
+
+commit 5a782ebed10ce91296a02e962df0ac03b71bcf39
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 18:39:32 2013 +0200
+
+    Remove pointless msig_get_rate() and use signal props interface instead.
+
+commit 13cebabb9ec3a6959d8d91285d5269323a6dd321
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 17:51:58 2013 +0200
+
+    JNI: Add Signal.set_rate() and Signal.rate().
+
+commit 49f760cebb7caa892ab7201fdfef713f5c86f4b0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 17:41:45 2013 +0200
+
+    JNI: Add optional timetag argument to Signal.query_remotes().
+
+commit 57c6dd56d065d1fdcc61cba428896d2ca584fe6c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 15:29:52 2013 +0200
+
+    JNI: Add support for msig_value().
+    
+    User must call Signal.value() with a valid array of the correct size,
+    and optionally a valid TimeTag object.  The function returns a boolean
+    indicating whether the signal has a value.
+
+commit 7f45588a867881cb9d723fcd65502f46b905fb2c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 15:28:34 2013 +0200
+
+    JNI: Add optional timetag support to Signal.update().
+
+commit d820f071d6943922dee5f57d1541b941827efbcc
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 15:23:30 2013 +0200
+
+    JNI: Add an initializer for TimeTag supporting sec/frac pair.
+
+commit 147fc09c701aea51f35a26b2244c335123ab2f07
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 15:20:15 2013 +0200
+
+    Update documentation for msig_update() with regards to timetag value.
+
+commit e640a6f9fb574af11a3442d46fbf0483853ee615
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 17 14:46:27 2013 +0200
+
+    Include the other JNI-generated headers, and fix some detected function prototype problems.
+
+commit ad9147dafeca483b6863de17ef77a62465a6c478
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 16 13:47:19 2013 -0400
+
+    Working on MaxMSP tutorial, replaced ascii art with screenshot links.
+
+commit ec8c19d2183d32227633cbd73566a3086a11ea67
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 16 10:49:27 2013 -0400
+
+    Fixed typo.
+
+commit 69d6d3467af482fd0744522491589e638ebe6210
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 16 10:48:56 2013 -0400
+
+    Added sections on timetags and instances to C tutorial.
+
+commit 232ba96190b6594d4185533e2365e710dd8e37e2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 15 16:59:50 2013 -0400
+
+    Small change to avoid problem in device-less testprops scenario.
+
+commit db92baa28d4c83a25fca948bf73b95ff1c697f94
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 15 16:59:14 2013 -0400
+
+    When freeing device: first release instances, then routers/receivers, to avoid illegal memory access problems and segfaults in swig bindings.
+
+commit 3a39645bb492f52594debed95ab47caa1a682147
+Merge: a597d46 6d75225
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 15 12:45:55 2013 -0400
+
+    Merge branch 'instances4'
+    
+    Conflicts:
+    	src/router.c
+
+commit a597d460b5e32b303b103b5eb2a452be0ae553d2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 14 19:27:18 2013 -0400
+
+    Clean up signal update functions, add optional timetag to signal instance update.
+
+commit be7cddfcb646303b07a168e1476ecefa5af61880
+Merge: 1ca21d7 0df8ede
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 14 18:12:24 2013 -0400
+
+    Merge branch 'master' into device-props
+    
+    Conflicts:
+    	src/admin.c
+    	src/db.c
+    	src/device.c
+    	src/mapper_internal.h
+    	src/signal.c
+    	src/time.c
+    	src/types_internal.h
+
+commit 0df8ede7d04dc337d75bfa3079317de1d4134631
+Merge: e04af5e 88eaef6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 14 12:20:42 2013 -0400
+
+    Merge remote-tracking branch 'steve/master'
+
+commit e04af5ee8ae5866ccdaadc7de9cf3f17ffb58d5c
+Merge: a1cd894 2f6e2fd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 14 12:12:15 2013 -0400
+
+    Merge branch 'master' into refactor-clipping
+
+commit cfe1ceb24bcee041c5caeb8704eae70fe0742cd4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Apr 14 14:26:42 2013 +0200
+
+    Add some missing mdev calls to JNI bindings.
+    
+    The following functions were added:
+    
+    - mdev_num_links_in
+    - mdev_num_links_out
+    - mdev_num_connections_in
+    - mdev_num_connections_out
+    - mdev_id
+    - mdev_start_queue
+    - mdev_send_queue
+    
+    A rudimentary, non-functional TimeTag.java class has been added for
+    the last two functions, but needs work.
+
+commit 88eaef613eb3b278d32a72ef525ffa9555614cb9
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Apr 14 14:01:18 2013 +0200
+
+    Add support for use of select() or poll() for waiting on multiple devices.
+
+commit 2f6e2fd7f113478e39962b56d0b36e99f30e0557
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Apr 13 14:25:23 2013 -0400
+
+    Remove db callbacks when freeing monitor -- also fixes segfault on monitor destructor in Python bindings.
+
+commit 9a51813765259e1544046201176da77fd17e07e3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Apr 13 13:20:06 2013 +0200
+
+    Change bug report email address to the mailing list, add http:// to URL.
+
+commit 6d752257950177c01c3ff4290f2e32494a0d5af4
+Merge: 28ba2ac 6c427ba
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 12 20:27:23 2013 -0400
+
+    Merge branch 'master' into instances4
+    
+    Conflicts:
+    	src/device.c
+    	src/receiver.c
+
+commit df6cb6734c5df4be5a22b94eb622fb3b97ae032e
+Merge: 28c9d26 6c427ba
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 12 19:54:15 2013 -0400
+
+    Merge branch 'master' into expressions
+
+commit a1cd894a1ed08296493d057f711bd40f5fc4bea6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 12 19:51:06 2013 -0400
+
+    Refactor test programs.
+
+commit 4ec2317339c834dcf92e0f4b7f1ca72d25e4f43e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 12 19:17:40 2013 -0400
+
+    Refactor clipping -> boundary for swig bindings
+
+commit 87da2117ff0f75d9e6a64e481d68f4e132593c1b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 12 19:06:04 2013 -0400
+
+    Refactoring clip/clipping -> boundary
+
+commit 6c427ba48c8e5badf6748d52cc947124e719afea
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 12 12:14:23 2013 -0400
+
+    Added @libVersion to device properties, value is generated by autoconf and git.
+
+commit ec3f34a1ee6d68d256537677a2f81b1253723a4c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 11 20:44:05 2013 -0400
+
+    Fixed erroneous length for devdb_table and condb_table.
+
+commit 82ec0ff22b1ce1eb811f67e57a8d71f2d3d49464
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 11 20:38:29 2013 -0400
+
+    Remove processing of obsolete n_connections property.
+
+commit 4500412019f40bf7e58e50e21449a742c1c5d4d2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 11 10:33:38 2013 -0400
+
+    Fix monitor batch request bug resulting from protocol change in commit c7cf756.
+
+commit c9cd40ff69b8cd06220af23939f2404036d5a02c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 10 12:38:58 2013 -0400
+
+    Use real timetags for all messages; disable libmapper clock offset updates for now.
+
+commit f2d04ee537f174a8978dcd765d2e2ccd7c498352
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 10 11:01:19 2013 -0400
+
+    More memory leak fixes - Valgrind now reports 0 bytes lost when running test.c
+
+commit 9346496ce1242dea1d175a9ad6aa9405cb923863
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 9 22:03:22 2013 -0400
+
+    Reduced memory leaks by approx 1KB according to Valgrind.
+
+commit e7c48bcfcedaf02f112562d1b074156885eef1cf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 9 22:01:43 2013 -0400
+
+    Rename mapper_db_remove_device() to mapper_db_remove_device_by_name() to match API.
+
+commit 9d754006e181ca95f3d52e0a6e313c945a36c80c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 9 18:22:06 2013 -0400
+
+    Fixed illegal memory access bug.
+
+commit ddeb221d993b6c208e7958e0f88f8aeeb4decda7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 9 18:21:33 2013 -0400
+
+    Fixed bug freeing routers and receivers.
+
+commit c0da70ff98e36d83bade69ea8e5aabaedd326519
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 9 17:38:09 2013 -0400
+
+    Free unused connection and link_signal memory.
+
+commit 3afa5e01eb1801fa865935218009e4cc0d9e35cd
+Merge: 539740d 58a3684
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 9 13:18:49 2013 +0200
+
+    Merge branch 'connectcb' into customtransport
+
+commit 58a3684c769189d9f10b424c3f3734dd9d7c246d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 8 12:38:20 2013 -0400
+
+    Refactoring callback names.
+
+commit df1487362db7f693ccc64911c649d5e144b797a3
+Merge: e5e8faf 873504c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 8 12:30:08 2013 -0400
+
+    Merge branch 'master' into connectcb
+
+commit 873504ca68d493ef8c347875bd6878ca7d39a837
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Apr 8 12:29:47 2013 -0400
+
+    Refactoring callback names.
+
+commit 539740db62d44ed9e45c9af7ce667475562d582b
+Merge: c192e71 e5e8faf
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 8 16:15:37 2013 +0200
+
+    Merge branch 'connectcb' into customtransport
+
+commit c192e717b0490fe37be99eddaca477c99dc63718
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Mar 28 13:08:14 2013 -0400
+
+    Implement a custom transport mediated by signal/connection properties.
+    
+    On connection, this program establishes a TCP connection during the
+    connection callback and uses it instead of msig_update().
+    
+    Therefore, in this case libmapper is used only to determine the
+    destination IP and to establish the connection, but it performs no
+    data transformation or transmission.  Rather, the program specifies
+    this itself, determined by specifying a custom transport in the signal
+    properties which are copied to the /connectTo message.
+
+commit e5e8faffdd8680d9f9f04b220bd146a995e64451
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 7 18:46:10 2013 -0400
+
+    Add local device name to device-stored link properties since we are now using link props in callbacks.
+
+commit eaccdac2ccf1c80cb9806e34f6198f2d979c7656
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 7 17:35:44 2013 -0400
+
+    Always add destination type and length to /connectTo message.
+
+commit 6d5145069a59fc68a603ddb538dc45bbedfbe4dc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 7 15:01:48 2013 -0400
+
+    Added function for getting the number of connections attached to a specific signal.
+
+commit 058b999c331a6ccc27c0e5c36a9b10b358ffd86f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 7 15:01:06 2013 -0400
+
+    Call link/connection callbacks for inputs (receivers) also.
+
+commit c11155bb49145dc2cd8acc39201ec48665bbbc4a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 7 14:59:14 2013 -0400
+
+    Added user_data argument to device-side link/connection callbacks; added signal pointer to connection callback.
+
+commit b04cc8303e0102c5c374b37c3afc41a65e16f195
+Merge: 6097733 1c66a5b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Apr 7 09:04:28 2013 -0400
+
+    Merge branch 'master' into connectcb
+
+commit 1c66a5bfadc2804d99ae4f17f11ba156beb7af4c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Apr 6 20:03:38 2013 -0400
+
+    Added monitor function for getting properties for a specific device.
+
+commit a9753c5cd4eef62ff7a3ba0d67d876ba48ded0ec
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 5 21:51:13 2013 -0400
+
+    Update python bindings with monitor API changes.
+
+commit 578c50195a67b637c7ef665f714ca77fadc5c224
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 5 21:50:36 2013 -0400
+
+    Clarify monitor request function names, add functions for requesting only input or only output signals, or only incoming or only outgaing links or connections.
+
+commit 28ba2aceb708851be6e3e7d51bb3959ceb9093f4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 4 12:41:19 2013 -0400
+
+    Don't check id map until needed.
+
+commit 6097733db056f4feff66c13ce1a90f48b9a2ca49
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Mar 28 13:06:46 2013 -0400
+
+    Add callbacks to the local device when links or connections are made or destroyed.
+    
+    Had to move the definition of struct _mapper_device to
+    mapper_internal.h in order to make reference to function typedefs from
+    mapper.h.
+
+commit abd96cc320c3461a035d375e99d863c4261435ff
+Merge: 499165e 1957f00
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Mar 28 11:54:52 2013 -0400
+
+    Merge branch 'swig2'
+    
+    Conflicts:
+    	src/table.c
+
+commit 25f917a939ed2d533ee78b31b2951228cde8c96a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Mar 16 18:33:20 2013 -0400
+
+    Debugging instance id_map synchronization with multiple mapped signals and remote releases.
+
+commit 34dc6c17eb4118677b4e2b3a56d86365a28fae70
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Mar 9 08:15:17 2013 -0500
+
+    Fixed bugs in instance id_map reference counting.
+
+commit 005cbf794dad1c6f7e3bd5610d6be0f0802cc76e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 5 20:07:48 2013 -0500
+
+    Fixed bug where new  instance could be activated by downstream release request.
+
+commit a334f7763ecf266beec904073506c23baa63d5ef
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 5 20:06:36 2013 -0500
+
+    Corrected remote instance release request message format.
+
+commit 4490ef0db055d7132f58e928f4e59c986db305c9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 5 20:05:46 2013 -0500
+
+    Use incrementing public instance ids.
+
+commit 3a2c16b0cb6bd9b51f25dfe8eee0e467a64a696d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Mar 2 20:41:07 2013 -0500
+
+    Release active instances when signal is freed.
+
+commit 1d44c0799be325ca4e5e6c01c62625c70cb7df6f
+Merge: e39f304 499165e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 1 18:43:06 2013 -0500
+
+    Merge branch 'master' into instances4
+
+commit 499165e472402d2eecd972c35951ca3c47cbb5d0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 1 14:29:57 2013 -0500
+
+    Moved tutorials to own folder in /doc, added versions for python and maxmsp.
+
+commit fe1463bd2c80a9b2c08b63b71058eba0cfeee572
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 1 14:28:19 2013 -0500
+
+    Fixed function documentation for msig_update(); fixed some formatting, etc.
+
+commit 32abaabe0bf169ed5646ebd01b262d9bb5850f7c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 1 13:46:45 2013 -0500
+
+    Use doubles for timetags in Python bindings.
+
+commit 1b788d1915ca575e723585a2527e34574ab6dc27
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 1 12:38:18 2013 -0500
+
+    Fixed error in function documentation.
+
+commit e39f304e2faf8ad22031d7e6a41c87a6b981851a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 28 22:30:49 2013 -0500
+
+    Fix send_as_instance property on new connections.
+
+commit 63fbf67bb2e8bb068c4c84b2e25ff1cc7af97ca2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 25 10:07:43 2013 -0500
+
+    Added function for getting signal allocation mode.
+
+commit 82c6bea25de50ec48ea2e93c41ba098248e650e3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Feb 20 18:02:26 2013 -0500
+
+    Remove bitflags for obsolete instance properties.
+
+commit 1a6bb3fc845079d20ce025fbb96a980a431e938c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 19 22:05:09 2013 -0500
+
+    Fixed segfault when removing connections.
+
+commit 8f99d3e400d7263ff5d70cb621555357e781a685
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 19 22:04:36 2013 -0500
+
+    Use maps with zero remote refcount (might be new map)).
+
+commit 6e37ef456f871804069aaa60a87d11ee3c111681
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 19 22:03:18 2013 -0500
+
+    Connections should default to using instances if either endpoint signal has multiple instances.
+
+commit d205632469d7959b57f3237fa220b5a63b33cd05
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 19 22:02:10 2013 -0500
+
+    Use real timetags throughout; added timetag argument to instance_get functions in case instance stealing results.
+
+commit 8ca7d8689cfea01c306e118db9f326a89b5880f3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 15 14:56:34 2013 -0500
+
+    Adding signal.update() functions with timetag arguments.
+
+commit 385b67ea7aff8314e29640acd0c1efb3493b151f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 15 14:55:37 2013 -0500
+
+    Cleaning up timetag and clock functions.
+
+commit 581f264186fcc8e227a610a80a5501d7525c4909
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 14 14:36:20 2013 -0500
+
+    Added timetag to instance management handler parameters (Python bindings).
+
+commit 8beffe4dfeadd8b27e8f0b2b092e057801ec56f5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 14 14:35:48 2013 -0500
+
+    Added timetag to instance management handler parameters.
+
+commit 258e7532e4ce679f00e47afc36946db328374368
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 14 14:19:33 2013 -0500
+
+    Call instance management handler (if defined) when upstream release messages are processed by the instance handler.
+
+commit 3abed09772766335cbbc1086fbac0dab62d4e804
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Feb 13 17:59:57 2013 -0500
+
+    Fixed email address in AUTHORS.
+
+commit dcd8855c55c00d521d6195839e61a37d241d54e2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Feb 13 16:46:54 2013 -0500
+
+    Add instance management callback to python bindings.
+
+commit af727081f88ca4537485c69d5151825d72a6ce67
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 11 16:57:00 2013 -0500
+
+    Use automatic instance stealing, but keep explicit user-code release of receiver-side instances. Instance management handler registered with the IN_OVERFLOW flag will take precedence over instance allocation mode.
+
+commit 991deb03baf98dbff9acab22cccc3351bd005953
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Feb 9 11:23:24 2013 -0500
+
+    Free link_signals if corresponding input/output signal has been removed from device.
+
+commit 5d81b681a6e7b5bd7ba29a8b55048f9904a5ad79
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 8 21:10:54 2013 -0500
+
+    Revert to freeing signals first in mdev_free, but make sure not to reference freed signal when freeing connections.
+
+commit 1d84a940cf28cb9395f3b9bea8b3c4486a06b34b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 8 20:32:51 2013 -0500
+
+    Fixed flag arguments calling msig_get_instance_with_local_id(), leaning up TODOs.
+
+commit 4b6951096ec69005163882d3d00f129f63881208
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 8 19:42:08 2013 -0500
+
+    Renamed instance id record to index to better reflect its usage; fixed potential overflow bug in msig_reserve_instances().
+
+commit 683267366fbdbc1d9e01447debe458fbd71007fd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 3 18:28:29 2013 -0500
+
+    Fixed bugs setting id_map release flags, memory freeing when freeing device, pointer bug.
+
+commit 50d6dd1165b2c396f09a9278dbee89d3bd68d648
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 1 10:15:15 2013 -0500
+
+    Fixed typos and signal handler arguments in tutorial.
+
+commit ef75d69b7b4421f24c93a5d9f2359e8da741fd33
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jan 31 22:39:13 2013 -0500
+
+    Update testinstance for new instance management approach.
+
+commit 9719ecf4553384d9563ed6ce7be6d37584be3909
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jan 30 22:50:14 2013 -0500
+
+    Removed functions for declaring new instances and for setting instance stealing logic, added functions for user-code to discover oldest or newest active instance. Fixed various bugs in new signal-side id_map scheme, though tracking map status is still buggy.
+
+commit 047f23b457c4b898fbeba1283736b1e279ae39d1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 26 21:12:08 2013 -0500
+
+    Reworking handling of active instances to enable unsynchronized instance lifetimes.
+
+commit c5e9982b4d3e2788a7063f9caf08e33bdcd45739
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 22 14:28:14 2013 -0500
+
+    Added new db functions to DLL export list, realphabetized.
+
+commit 28c9d26b1c09d4a640a3eee52c31ba799f28729f
+Merge: edbf20b a49f654
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 22 14:02:37 2013 -0500
+
+    Merge branch 'master' into expressions
+
+commit edbf20b4b667e36b5545a184016b463da1e20f3f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 22 14:00:01 2013 -0500
+
+    Restore test expression.
+
+commit 57b954b8a358af9106f1a88ce474a1b8739cadc8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 22 13:55:16 2013 -0500
+
+    Copy expression output when type is double.
+
+commit 372e079766857f32cce9e809fd79c812da0646b9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 22 13:33:35 2013 -0500
+
+    Use run-time type casting where appropriate.
+
+commit e0e633c8a626eee7dc3db73008c82e209936b2c3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 22 10:07:08 2013 -0500
+
+    Add remaining cast operations, cast output as necessary.
+
+commit 15ab44fd3e191764f7f70a1a28cd0ffe6533bc06
+Merge: 5bec784 292acc1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 22 10:05:40 2013 -0500
+
+    Merge branch 'doubles' into merge-doubles
+    
+    Conflicts:
+    	src/expression.c
+    	test/testparser.c
+
+commit a49f65401ce181a3ce9ec7ffde642d3a62067cbd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 21 14:40:51 2013 -0500
+
+    Free memory used by mapper_connection
+
+commit 324d6d1e041af32ecf479cc675db5478fe2f4016
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 21 13:44:25 2013 -0500
+
+    Added missing db functions to python bindings.
+
+commit 5bec784332540aa5cdecbac6e9ab6730612f762a
+Merge: a1013c8 6ced241
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 20 16:41:00 2013 -0500
+
+    Merge branch 'master' into shunting-yard
+    
+    Conflicts:
+    	test/testparser.c
+
+commit 6ced24176ea72f7b5e0fbe02151b3ecc57d517cb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 20 16:29:11 2013 -0500
+
+    Restore testmonitor screen clearing.
+
+commit 797f1584d480bffcadb30f1b7dc784ff032ba8b0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 20 16:28:26 2013 -0500
+
+    Modified db update functions to return the number of parameters added or modified. Use this information to only call handlers with MDB_MODIFY if params have actually changed.
+
+commit dbc32d51b54fdd8272dedc2089c9063892432769
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 20 14:23:38 2013 -0500
+
+    Added db functions for retrieving exact signals from database; restored substring-matching to cmp_match_signal_device_name().
+
+commit c53f3b4f3639e0626764f9f024d05f72d30ecf96
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 20 13:34:03 2013 -0500
+
+    Fixed bug in signal history reallocation; initialize to zero.
+
+commit a1013c891d5276fb3b497394f43273e052590102
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 19 19:13:35 2013 -0500
+
+    Increment output history position pointer after expression evaluation to handle conditional output.
+
+commit d58fad5f1a60b0e04abd1cb51a23a65801a8b90c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 19 19:06:22 2013 -0500
+
+    Fixed negate/subtract lexing; fixed history indexing.
+
+commit 04528f75df678f8d7ca2d67a9c35734429001f67
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 19 18:24:41 2013 -0500
+
+    Reworked lexer to allow distinguishing between subtract and negate tokens without tracking state.
+
+commit 0973a14339ac1e379927abd750039da36ab2939a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 19 10:40:05 2013 -0500
+
+    Increase support for doubles; added int and double version s of functions as appropriate; preliminary support for conditionals.
+
+commit 3ed404979484285be74c0c2948431f0ed961c0c2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 18 19:57:32 2013 -0500
+
+    reduce stack size.
+
+commit 0a31c8ff7ed949f49b362702f0be81e03899bc0c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 18 16:53:23 2013 -0500
+
+    Use some macros to simplify code.
+
+commit 16be7a4aef14f6eee5ebdfc2929343dbb0cec5d5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 18 16:06:32 2013 -0500
+
+    Added benchmark for expression engine.
+
+commit f819fe12ca7de9f2a9aa947ac6b20961cbbd13ac
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 18 16:03:37 2013 -0500
+
+    Working implementation.
+
+commit 57eab4814be6b2362ec9acbf9326cc1c4ef6d735
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jan 17 09:28:22 2013 -0500
+
+    Use strcmp() instead of strstr() when trying to match signal names in monitor - this was preventing monitors from registerings new signals if their name was a substring of an existing signal.
+
+commit b97adee86203528081fc922b6b818a2cd1c0a808
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jan 16 17:40:23 2013 -0500
+
+    Working on another expression parser.
+
+commit b2ef45290a051d00a2516f0521ee8bb377a9dfbd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 14 17:38:05 2013 -0500
+
+    Added logical NOT to expression parser and evaluator.
+
+commit 292acc1d9e4b02f3c478ad7dfce23b6705fd201e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 14 17:20:21 2013 -0500
+
+    Fix reference to MAPPER_NOW.
+
+commit 0df19d84d4aec4d7c55871159d14fddc1c389ce6
+Merge: 9e24ef1 467f24a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 14 16:11:55 2013 -0500
+
+    Merge branch 'master' into doubles
+
+commit 9e24ef17735324428f58efeadf3d107311c90994
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 14 16:10:15 2013 -0500
+
+    Enabled support for double-precision floating point signals.
+
+commit b3c19c671dc7f90abbdfe3d86e99895fa4a9af70
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 14 15:09:21 2013 -0500
+
+    Bugfixes: expression parsing and evaluation now supports doubles.
+
+commit 9a9617ce005a148e8c9aec08c1ec650484f49120
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 14 13:57:34 2013 -0500
+
+    Switch to doubles for internal function calculation.
+
+commit 2024a798d84c8602d4c79d4b5c6de40979ada7d4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 13 21:26:38 2013 -0500
+
+    Added reference to logical negation in TODO.
+
+commit 61c5378c701c01c8a9c27605e93a245e2671e166
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 13 21:10:51 2013 -0500
+
+    Fail if bitwise operators called on floats.
+
+commit 2a7c7f56ac1bf998e8901918ac73026651409473
+Merge: acb3eb2 467f24a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 13 13:03:41 2013 -0500
+
+    Merge branch 'master' into expressions
+
+commit 467f24a920f543b15db598b9e23445be3cd5703a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 1 13:18:46 2013 -0500
+
+    If input signal is released locally, send release request upstream but do not release instance.
+
+commit 6e0ccd3edca78b4604af784eca0e5bd3371f8203
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Dec 26 13:11:19 2012 -0500
+
+    Revision of instance release/release_request logic: devices must pass release messages downstream regardless of whether they are the originating device/instance owner. Release request messages will only be used when sending to instance originator.
+
+commit d0ff32eb0cbd60f15bebaf0c87541fcdd36f18fb
+Merge: 91cb68f 9390417
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Dec 22 17:21:33 2012 -0500
+
+    Merge remote-tracking branch 'steve/master'
+
+commit 91cb68f7c8f6c0b9f7a1be988e4efa156b8cc561
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Dec 19 17:59:25 2012 -0500
+
+    Renamed MAPPER_TIMETAG_NOW to MAPPER_NOW; also redefined it internally as {0L,1L} to avoid accidental usage - this does not imply anything about immediate dispatch however, since there is no concept of TT_IMMEDIATE in libmapper and all bundles will have real timetags.
+
+commit 9390417bffcf327406ea07574073286b49de395d
+Author: Stephen Sinclair <stephen at momentfactory.com>
+Date:   Tue Dec 18 14:12:39 2012 -0500
+
+    Add msig_set_instance_management_callback() to DLL export list.
+
+commit 30d202c1d46390e91c73943e0e312cd7809b137c
+Author: Stephen Sinclair <stephen at momentfactory.com>
+Date:   Mon Nov 19 10:19:33 2012 -0500
+
+    Add instance-related functions to Windows DLL exports.
+
+commit 408515d76ede4739be229a4e300dab39d3466a84
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Dec 17 21:49:28 2012 -0500
+
+    Split bundles of reported signals or connections into multiples of 20 messages to prevent bundle from growing too large.
+
+commit 353eb97d4f5a883e0876903d2438ebe6d0127d32
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Dec 11 21:40:50 2012 -0500
+
+    Use bulleted lists.
+
+commit 91164b2074b1ea9914ca1171fd8493a08c2c6a3e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Dec 11 21:31:58 2012 -0500
+
+    Added expression syntax description to documentation.
+
+commit ddb0de90564ae3e1d6b44690e346341e99a5939e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 9 19:17:25 2012 -0500
+
+    Initial rough commit adding doubles to expression parser/evaluator.
+
+commit 1ca21d7bc49276601c58d8269c69a48727fa9e1d
+Merge: 4879ed8 f9dcccb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 7 14:43:59 2012 -0500
+
+    Merge branch 'master' into device-props
+    
+    Conflicts:
+    	include/mapper/mapper_db.h
+    	src/admin.c
+    	src/params.c
+
+commit f9dcccb09fc19c2b21be800545ec7b377d9b4e44
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 7 13:02:47 2012 -0500
+
+    Print incoming message as vector in testrate.
+
+commit c7cf756274414f2f4bfbc7c230bddfb5d2d6e944
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 7 12:56:33 2012 -0500
+
+    Track incoming and outgoing links and connections separately.
+
+commit 914399e490e981f1935a3fd0d301a0150634aaff
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 7 12:12:37 2012 -0500
+
+    Fix bug setting default connection @sendAsInstance property.
+
+commit 4879ed8dcd16921ecbdd24ea8a22d6d7b137e5d4
+Merge: 49f29f4 de7b13a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 7 11:59:50 2012 -0500
+
+    Merge branch 'master' into device-props
+    
+    Conflicts:
+    	src/admin.c
+    	src/connection.c
+    	src/device.c
+    	src/types_internal.h
+
+commit de7b13aee762e64ba13f336bde0ae0212ac75693
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Dec 6 13:41:19 2012 -0500
+
+    Protocol change: adding handlers for /<device>/links/in/get, /<device>/links/out/get, /<device>/connections/in/get, /<device>/connections/out/get.
+
+commit 9e4cab6b84983776d58d4a8649ea4cc14d7843b8
+Merge: ecaf88b 7c013bc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Dec 6 11:58:02 2012 -0500
+
+    Merge branch 'master' into receivers
+    
+    Conflicts:
+    	src/router.c
+    	src/signal.c
+
+commit 7c013bc37748deff561c6302c71038491caf2f8f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Dec 5 18:28:48 2012 -0500
+
+    Use uint32_t for incrementing network instance IDs since that is how they are sent.
+
+commit df57b1fd4c6e269bbb2cf446138c6c110caaaf87
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Dec 5 17:44:41 2012 -0500
+
+    Check for functions exp() and exp2() in expression parser - these were being treated as malformed exponential notation since they start with an e.
+
+commit 2e370fb67bc7e76dbb2095deaddfdeeda933806a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Dec 5 17:36:55 2012 -0500
+
+    Allow positive exponential notation.
+
+commit c5b8479773fb9024bf40faa4b61611b1b1aa830e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Dec 4 12:27:04 2012 -0500
+
+    Added property @sendAsInstance to connections. This allows over-riding default instance behaviour, e.g. choosing whether a single-instance signal should update all active instances at the destination or should be treated as a unique instance.
+
+commit ecaf88b970bd21beaf27ab7c36332d47fdca093d
+Merge: 1cacb56 db70a09
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Dec 1 12:03:31 2012 -0500
+
+    Merge branch 'master' into receivers
+
+commit 1cacb563d7e753293fce8fbf5ef3f56dc329ebd8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Nov 30 18:33:00 2012 -0500
+
+    Restored query functionality in java bindings.
+
+commit 2d58d2007cdda17188cdf46710fd20198eeec8b3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Nov 30 18:26:56 2012 -0500
+
+    Restored query functionality in swig/python bindings.
+
+commit 6838219c9bfa4a0d5999fe545991e8a33b7b005a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Nov 30 16:13:55 2012 -0500
+
+    Re-added query functionality while keeping reverse connections; re-added testquery.c; alphabetized test program names in makefile.
+
+commit 49f29f4d1fa467637d8a704c2258e0172e080c15
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 28 19:42:09 2012 -0500
+
+    Added props struct to devices, moving device properties such as identifier, ordinal, name, port from admin to device. Also make cleaner division between clock functions and admins, devices, etc.
+
+commit 1957f00b88d9a1196137563160783ec239c1e127
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 21 17:23:49 2012 -0500
+
+    swig: Change naming of extended struct to comply with how SWIG 2.x handles structs.
+
+commit 7a825602b9687a65d90e4c37d68360567ff46cc4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 21 17:13:13 2012 -0500
+
+    swig bindings: Remove extra scope around temporary sigval.
+    
+    In SWIG 2.x, (and maybe 1.3?) this extra level of scope causes the
+    sigval to be destroyed even though a pointer to it is retained and
+    used shortly after, causing a crash.
+
+commit b2853039aca8ba663ee4a203d9037642a836406c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 21 16:47:15 2012 -0500
+
+    Replace a use of strcpy with memcpy, fixing a crash due to inlining.
+    
+    On Linux, a use of strcpy caused a crash for unknown reasons when
+    inlined by -O2, but memcpy does not crash in the same place.
+
+commit db70a09b2353296b9810b86b190c2fc93a8da6a4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 15 20:02:16 2012 -0500
+
+    Add a function to get access to a device's underlying lo_server.
+
+commit 7420e1a0218ecf3e597e63f12f6901c08c92bc56
+Author: Stephen Sinclair <stephen at momentfactory.com>
+Date:   Tue Nov 13 14:32:43 2012 -0500
+
+    Update list of DLL-exported functions for Windows build.
+
+commit 6a89e440c6cbc60a4e581dd93fbf0821ce020214
+Merge: e9d3558 396e8e5
+Author: Stephen Sinclair <stephen at momentfactory.com>
+Date:   Tue Nov 13 14:43:11 2012 -0500
+
+    Merge remote-tracking branch 'malloch/master'
+
+commit 396e8e55896faf3f0607b126c847d9a04db7faa8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 13 11:06:59 2012 -0500
+
+    Fixed typo in function name.
+
+commit f3159b1eab85f9da1a3ae5d4b26bc6447e49823d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 10 20:29:04 2012 -0500
+
+    jni bindings for reverse-connections (untested).
+
+commit afdf36fd945624620148761e1bea4a04386b8af8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 10 20:09:31 2012 -0500
+
+    Swig/Python bindings for reverse-connections.
+
+commit 57bd87a073e571472be69b0b1e3aa227e3beb323
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 10 19:45:47 2012 -0500
+
+    Implementation of reverse-connections for transporting remote updates of connected input signals. This technique is meant to replace the previous query-response method for acquiring state of remote inputs used for supervised implicit mapping approaches. To make it clear that reverse connections are transporting destination (input signal) _state_ rather than inverting the mapping connection, reverse connections are accessed as a connection mode and thus cannot be used at the same time as e.g. linear scaling or expressions. Replaced testquery program with testreverse.
+
+commit e9d35580b84d8ee58777ec4ad498cbe16ed7f7f8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 8 11:50:27 2012 -0500
+
+    Revert "Changes for compatibility with swig 2.x"
+    
+    This reverts commit e6929d24f73dfdf810dee45a308b70ba2d706209.
+    
+    Although the fix for SWIG 2.x made the project compile successfully,
+    it did not function, complaining about problems with constructors and
+    destructors.  More work is needed to support SWIG 2.x.
+
+commit 45400e6089050319ddef73d9fd4cc1eeecc19d90
+Merge: af80a53 5dc1aea
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 8 09:21:35 2012 -0500
+
+    Merge remote-tracking branch 'malloch/master'
+
+commit ef179ed04e680b5e3a57b9f92390d8430843aab1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 7 19:02:37 2012 -0500
+
+    Re-allow instance management callbacks for input signals, update testinstance.
+
+commit 964c69b23ab81e061689784934f3cd76c385152b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 30 22:36:45 2012 -0400
+
+    Properly register release request handlers; use lo_send_message_from() for sending /linked message since the receiver needs to know sender's IP and port.
+
+commit 5dc1aeaef6278c650787d58fcf857561065ebf3d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 30 13:45:57 2012 -0400
+
+    Add new metadata from repeated linkTo messages; use monitor to create links and connections in test.c
+
+commit c35430d3576bf881ec3a1965bf7a6a5fa589ba4f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 30 13:36:03 2012 -0400
+
+    Remove obsolete function mdev_send_signal().
+
+commit 3649eae279e80660f73853903e98fea69648544d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 30 13:34:06 2012 -0400
+
+    Added remote instance release request functionality: when an instance of an input signal is released locally (with a call to msig_release_instance), a release request message is sent to all upstream connected signal belonging to a link scoped for the instance. Output signals can optionally register an instance_management_handler (as before) but now a third argument specifies the type of events to call the handler for.
+
+commit 76a9ec705fac6568d6561ec3f591a71d103fcd23
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 28 20:12:55 2012 -0400
+
+    Properly release orphaned instances on unlink or disconnect; added scopes to receiver structure.
+
+commit 66b95d9234fff332c594e01952e0130616d1c54b
+Merge: d9909a8 265bcb5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 28 17:22:52 2012 -0400
+
+    Merge branch 'master' into receivers
+    
+    Conflicts:
+    	src/types_internal.h
+
+commit 265bcb57c871418c87a11ea3f9bab37be3a0cf2f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 28 16:51:39 2012 -0400
+
+    Fix for problem with out-of-order packets and instance releases: id maps are not removed until reference count is 0 AND a timeout from last relevant remote release message has been received. During this timeout period remote messages matching the id map will not be processed.
+
+commit d9909a8afde911b352a5edf3b85be56e770bcdb0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 26 20:01:46 2012 -0400
+
+    Finished basic integration of mapper_receiver data structure and functionality, including release of remotely-owned instances on scope removal or unlink. Also streamlined freeing of router structures.
+
+commit 267f5cb132ea3e82bf57b2bbc84a9afaf4f85925
+Merge: 01b4231 219b82e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 25 15:15:47 2012 -0400
+
+    Merge branch 'master' into merge
+    
+    Conflicts:
+    	src/admin.c
+
+commit 01b42319aeea3a48ef3a6944338e8f14101f786d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 25 15:12:03 2012 -0400
+
+    Added receiver functions.
+
+commit 219b82e0ef0035ad26502aac064c2f359c8307ff
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 25 15:01:37 2012 -0400
+
+    Update ID map reference count when calling msig_match_instances().
+
+commit 0fe5e9cd00c91651ee75a5dbac93b96bbba32b99
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 25 10:51:14 2012 -0400
+
+    Do not remove unscoped links.
+
+commit af80a53afaf221cc5027f4496aaaa5fc9ad1ed2b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 24 22:23:54 2012 -0400
+
+    Add a check for lo_bundle_count() to build against older versions of liblo.
+
+commit 58bdec7adc9807718c3b1186fa263ffdf0ca780b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 24 20:07:18 2012 -0400
+
+    Added receiver data structure, which sits at the destination of a link and mirrors the router at the sending side. For now this object is intended for holding metadata on the link source and connections, information which is needed for sending remote instance release requests. In the future the receiver object could also help recover mapping state after a source crash, and may have an active role in processing datastreams and combining many-to-one connections.
+
+commit b95ce883627c98837278824298d11ac60c091069
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 23 17:03:50 2012 -0400
+
+    Do not send empty bundles.
+
+commit f1081b3ab4f7cc54d3683f0f2034e1b3eb7d2390
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 22 22:38:57 2012 -0400
+
+    Bundle query responses and return with timestamp from query message.
+
+commit 12aa9dded1027ffa60fcd0c5a52808dc26d2bbf0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 22 17:54:59 2012 -0400
+
+    Send batch-requested signals and connections in OSC bundles.
+
+commit dd7033301f74f957d15c72257c16514765c919a9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 22 17:39:22 2012 -0400
+
+    Fixed monitor bug for autorequesting large numbers of signals or connections - since e62872b @ID has not been an extra parameter, so the functions on_signal_continue_batch_request() and on_connection_continue_batch_request() could not retrieve IDs.
+
+commit bc2491cce756d582e18d6b7a04ae3c604ec4f29b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 18 14:18:48 2012 -0400
+
+    Disable liblo message queueing on admin and signal update servers; use timetagged bundle to transport /sync messages instead of including timetag in message; use double instead of float to represent elapsed time in /sync message.
+
+commit 86ab6764012d37a1103591028275eba53b548655
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 18 11:36:47 2012 -0400
+
+    Renamed flags for filtering admin output (avoiding multiple responses per polling-step).
+
+commit 1ee500b1036984b85fe2a6e8e78e3b820ebdf847
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 18 09:18:17 2012 -0400
+
+    Cleaning up documentation in header files.
+
+commit ce0bd4e15d44d8546c6f8b1ff4c3e9f29cba935d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 17 16:08:04 2012 -0400
+
+    Moved #include <assert.h> from signal.c to params.c - it is used by a function moved in an earlier commit.
+
+commit 1d911b5123db14f972ab76b1e875b80085a9dc32
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 16 18:54:56 2012 -0400
+
+    Send bundles with timetag LO_TT_IMMEDIATE for now while debugging.
+
+commit b9de307b429b42b13220b44da46c510ac08c99f7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 16 17:16:24 2012 -0400
+
+    remove check for instance; don't calculate tt if adding 0.
+
+commit f1d87d3b895772ea98e04017ec3cb2f30ffe8de6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 16 10:39:52 2012 -0400
+
+    pwm_example: Check if signal has value in signal callback.
+
+commit 7ccc12af9918faafbc4367c98baa4149d3276bce
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 14 09:20:12 2012 -0400
+
+    Pass local index ids to signal callback in non-instance handler; check for device in timetag/queue funcitons.
+
+commit c75d48012df1f9126f5e5daf72507ee1160d919b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 13 19:35:42 2012 -0400
+
+    Fixed bug in signal handler.
+
+commit 81a7cee76bae291f3e8e7e2f1b03b0f607c5a55f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 13 18:24:13 2012 -0400
+
+    Modified examples to match new API changes.
+
+commit d61b7c7b761d8c926c6f2567f76f8667c0c0497a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 13 18:23:50 2012 -0400
+
+    Modified java bindings to match new API changes.
+
+commit 41d610aef4844b9edb63446b3d91a52aa70e126f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 13 16:33:09 2012 -0400
+
+    Modified python bindings to match new API changes.
+
+commit 242afe9146ae8bf470b310d445779ede074c26d5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 13 16:05:02 2012 -0400
+
+    Fixed typo in function name.
+
+commit 6665999dd8f6141130ba9b714353f22efe04ab29
+Merge: 6ca1f3c 0c4bafe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 13 14:41:48 2012 -0400
+
+    Merge branch 'master' into refactor-instances
+    
+    Conflicts:
+    	include/mapper/mapper.h
+
+commit 6ca1f3c38cc15b35121738f0fed7a471e20f08b7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 12 13:29:31 2012 -0400
+
+    Update all active instances on receipt of non-instance update.
+
+commit fe52be244bfb86f729ef4675a555eaf5e7fc3349
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 11 17:02:48 2012 -0400
+
+    Use OSC blobs to send vector updates - this avoids type-string confusion between instance and non-instance messages, as well as avoiding inclusion of ridiculously long type-strings with large vector updates (libmapper vectors are homogenous anyway...). This required adding a count variable to the signal callback, while I was changing API anyway I also adapted msig_update and handlers to be more alike.
+
+commit 5ef6d86fdeeecd102f958e663dea55cd8d8432f1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 11 10:46:28 2012 -0400
+
+    Iterate over vector value updates as necessary - testrate now behaves correctly.
+
+commit a7ac3784c7453d32e56d45cbc7693a666f023007
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 10 21:06:01 2012 -0400
+
+    Fixed allocation and freeing of instance signal histories in router data structures; moved n_connections records to ratour also.
+
+commit b154465e10dcd9cfd3ce0d82eac2b1b8af523b7b
+Merge: 0bc33e2 3022a42
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 10 17:04:54 2012 -0400
+
+    Merge branch 'global-sync' into refactor-instances
+    
+    Conflicts:
+    	src/device.c
+
+commit 0bc33e23c744fc6c54d41a5b6c0d7241d99af7be
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 10 16:49:47 2012 -0400
+
+    Working on a major reorganization of the router structure, in order to restore modularity of devices and routers with the new instances functionality. Since I am already rewriting large parts of the router I decided to try to reconcile the timetag/queue functionality with the rate/count changes, and to finish adding timetags to the API as needed. In future commits I will finish working out the rate stuff, this commit focuses on moving signal processing memory from the signal data structure to the router. The routers' conception of a mapped signal has been renamed from mapper_signal_connection to mapper_router_signal; as before this structure contains the connections for a given signal, but now it also contains the signal instance input histories if required by the defined expression.
+    
+    In order to handle passing vectors of signals to the msig_update() functions and still allow queueing, it will be necessary to build the message bundles in the routers as we go rather than queueing a list of updated signal instances, since we need to pass a pointer to the vector to the device/routers. For this reason, I have modified the timetagging/queueing API such that the user simply passes a timetag with each update/release/query message; this timetag will be passed with the message when sent and the message will be sent immediately unless the use first calls mdev_start_queue() with the same timetag. Queues are now indexed only by timetag, and an arbitrary number of queues can be built simultaneously.
+
+commit 0c4bafe01b3547fe999f89fa24d9fcbb190b6260
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 6 20:56:49 2012 -0400
+
+    Removed placeholders for old queue/timetag API proposal.
+
+commit 593fcae5cbe3609fe9f8513fdc9659ebc184c5a4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Oct 6 20:56:22 2012 -0400
+
+    Add queue argument to release_instance function in python bindings.
+
+commit a2348327ae654f2b6740d42702e71ff6cab0e6d4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 5 17:38:20 2012 -0400
+
+    Removed whitespace.
+
+commit 6302f45542df02ef9fdf50309539ae932e006666
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 5 17:33:57 2012 -0400
+
+    Reorganization and refactoring of the signal functions in header files and signal.c; removed some old unused functions.
+
+commit bb175e9d40d1b3bf3b4834d93257e55f11f95cb4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 5 14:22:57 2012 -0400
+
+    Allow instance releases to be queued also.
+
+commit e9f988bb3883d96f27f3f1cfdb77181e6c03d3d7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 5 14:12:33 2012 -0400
+
+    Cleaned up instance managment handler stuff.
+
+commit 67512fe3f80e0190e6851c05050a2b3514c9db12
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 5 13:25:52 2012 -0400
+
+    Alphabetized mapper_msg_params
+
+commit c7aee5358adf11454fac91c0b992a50d7ea7b1b7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 5 12:34:50 2012 -0400
+
+    API simplification: added optional mapper_queue argument to msig_update() and msig_update_instance() functions instead of using separate functions for queued output.
+
+commit 430bdc2b5c313e298af02f6dcc2b1ed03c66502c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 5 12:33:26 2012 -0400
+
+    Reserve instances for devices in testinstance.py
+
+commit d4d6d4f15a504b5b18acedbbec153ac3825cf950
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 4 15:46:44 2012 -0400
+
+    Removed extraneous variable
+
+commit 8322e0bd938eafc02a6bf7dfa4a566990d574261
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 4 13:57:23 2012 -0400
+
+    Removed obsolete num_instances argument in python signal declaration functions.
+
+commit c80992c235336a98904f468a79c72edeafce2338
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 4 13:56:27 2012 -0400
+
+    Removed infinite loop in query handler.
+
+commit e6929d24f73dfdf810dee45a308b70ba2d706209
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 4 13:22:41 2012 -0400
+
+    Changes for compatibility with swig 2.x
+
+commit fa7f43a4d001b08e44e7cce8b647ee51f9e3c7b6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 4 13:21:49 2012 -0400
+
+    Fixed crash when requesting signal info - rate property was being read as double instead of float; also fixed placement of AT_RATE in mapper_msg_param_t enum.
+
+commit 3022a42e1c57381c8a9e535db7dc63b2f5af018f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Oct 3 16:48:09 2012 -0400
+
+    Added standard deviation of clock offsets to testsync display output; added function mapper_timetag_get_double()
+
+commit d64e7161590c11d2c9e0371fa9c9c09e5be1a6c2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 26 16:47:54 2012 -0400
+
+    Fixed weighting of future timetags when adjusting clock.
+
+commit 7058743eccbb2bc98326043671712507d5d1b4f9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 26 14:15:24 2012 -0400
+
+    Fixed CPU usage in testsync program.
+
+commit 5ceb95e739b9f5a4237eb3a94e7396ba90156e41
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 26 13:40:11 2012 -0400
+
+    Added testsync program to tests.
+
+commit 3cd6d52d2bd7b0fe4894563846d3d8072b06c4b0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 26 13:39:35 2012 -0400
+
+    Fixed some pointer bugs
+
+commit a1e783f2c4f27c56f7b61948cc4c6b8e9acd812f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 25 13:38:53 2012 -0400
+
+    Bug fixes.
+
+commit 4e1c5be88721428f57335c31837442f26361dd97
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 24 17:38:32 2012 -0400
+
+    Distributed network time synchronization based loosely on concepts from PTP. Devices occasionally send /sync messages; some of these messages are stamped with arrival time by other peers and cached for inclusion in future /sync messages.
+
+commit 03b3f10471386ba7019dbca6740042150e7aecfd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 20 18:37:55 2012 -0400
+
+    Rearranged location of some processing, since the earlier instances-master merge broke sending of NULL values (used for releasing instances), which need to bypass the expression and clipping stages. While I was moving things around, I tried to clarify the semantics of what was going on: mdev_route_instance() now simply iterates through the connection_instances belonging to a given signal_instance; the router function it calls is now renamed from mapper_router_receive_instance() to mapper_router_process_instance(); lastly, the functions mapper_router_send_signal() and mapper_router_send_new_instance() no longer actually send anything, since their output may be queued for bundled output and the new function mapper_router_send() actually does the sending. They have been renamed mapper_router_add_message() and mapper_router_add_new_instance_message().
+
+commit 619b60b5b2658458c8b712b34dd5e56e2791d9ea
+Merge: d5d9ea6 f50cbcb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 20 16:41:08 2012 -0400
+
+    Merge branch 'reserve-stack' into merge-temp
+    
+    Conflicts:
+    	src/signal.c
+
+commit d5d9ea6844c40f9e11f31c567e48ee90374442e5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 20 16:32:17 2012 -0400
+
+    Updates for compatibility with instances and timetags merges.
+
+commit def29eec4a7ae724fe0e9516f8dfbc1614c53388
+Merge: f03328c 48316f3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 20 15:34:13 2012 -0400
+
+    Merge branch 'instances3' into merge-temp
+
+commit f50cbcb377d7b73334a80be55bb61a4392b9f95f
+Merge: 0aa2365 48316f3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 20 15:25:39 2012 -0400
+
+    Merge branch 'instances3' into reserve-stack
+
+commit f03328c3148f813502cb7b920fb0d130980e90de
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Sep 17 18:28:01 2012 -0400
+
+    Update queue functionality to handle instances.
+
+commit 272ffc0a333bdff7967ecc2d6ceb1534265a1cb8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Sep 17 14:09:38 2012 -0400
+
+    Add jni.h search paths for OpenJDK 7.
+
+commit 42001e6da69e1dc788e1740e7799331cb0b0c31c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Sep 17 13:44:05 2012 -0400
+
+    Set count parameter to 0 in SWIG and JNI bindings.
+
+commit 35dc7c711c9a55f18167aecf3bbf8423244380c6
+Merge: c1a200d 0ab9ec8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Sep 17 12:52:15 2012 -0400
+
+    Merge branch 'ttags'
+    
+    Leaves queues broken, since the enqueue/send queue operations need to
+    be updated to support instances.
+    
+    Conflicts:
+    	include/mapper/mapper.h
+    	src/device.c
+    	src/mapper_internal.h
+    	src/router.c
+    	src/signal.c
+    	test/Makefile.am
+
+commit c1a200de8be522203cbde5830c4b257a94d67af1
+Merge: baa82ed 1b141ee
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Sep 17 12:37:56 2012 -0400
+
+    Merge branch 'rate'
+    
+    Conflicts:
+    	src/admin.c
+    	src/params.c
+    	src/signal.c
+    	test/Makefile.am
+
+commit baa82ed53692728f08f05f157c03434a42d9ccb1
+Merge: 1432679 eb2bb77
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Sep 17 12:26:42 2012 -0400
+
+    Merge branch 'instances3'
+
+commit eb2bb7789fb333030b6e4110b06f2ee04baa4e85
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Sep 16 11:30:14 2012 -0400
+
+    Reestablish roles between signal/device/router for updating instance values.
+    
+    This patch may seem a bit arbitrary, so some explanation is warranted.
+    For example, it moves `msig_send_instance` into device.c, naming it
+    `mdev_route_instance`, in which the passed-in device pointer is not
+    even used.
+    
+    Previously, we had a structure where signals, when updated, requested
+    that the device send out their new values to the routers:
+    
+               Device
+              /      \
+           Signal   Router
+           (Input)    |
+                    Sig Conn
+                      |
+                    Connection
+                    (Output)
+    
+    In the instances branch, some data per-instance, per-signal,
+    per-connection is required because the output history of expressions
+    may differ between connections for the same signal, on a per-instance
+    basis.  We now have something more like,
+    
+               Device
+              /      \
+           Signal   Router
+              |         \
+           Sig Inst   Sig Conn
+           (Input)        \
+              |            \
+           Conn Inst --> Connection
+           (Output)
+    
+    Ideally, the signal shouldn't know anything about links or
+    connections, but since history information is per-signal and
+    per-connection, it was most convenient and efficient to point directly
+    to the connection-specific data from the signal.
+    
+    Unfortunately, I believe that this odd loop in the data structures,
+    besides breaking some principles of opaqueness and separation of
+    concerns, will almost certainly lead to problems in the future if we
+    want to support the idea of remote routers.
+    
+    So this patch splits up handling of per-connection data processing
+    into a service provided by the device, which hands off processing to
+    the concerned routers.  However, no look-up in the device or router
+    structures is needed, because the signal already has this information.
+    
+    Therefore it may seem arbitrary since the device and router are not
+    really needed except for the final transport layer, however I think
+    `mapper_connection_instance` should eventually be made opaque to code
+    in `signal.c`, where signal transformation and handling of
+    `mapper_connection_instance` should be performed entirely in
+    `router.c`.
+    
+    Mainly this change is to help in performing the merge with more recent
+    code in other branches, since it is difficult to understand the merge
+    conflicts when core functions, also modified by other branches, have
+    been eliminated and concentrated in `signal.c`.
+
+commit 0ab9ec879c6a00faf3f72a2b147022de08748e26
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Sep 16 12:32:00 2012 -0400
+
+    Handle bundle mechanics implicitly in the router.
+    
+    Makes sense for device to just tell router to simply receive new
+    signal values, and when to dispatch received messages together.
+    Therefore instead of passing it a bundle explicitly, router builds up
+    the bundle as necessary if it hasn't yet received a "send"
+    instruction. This is of course more stateful and less friendly to
+    concurrency, but, I think, cleaner, as the device doesn't need to
+    worry about allocating resources at the transport layer.
+
+commit dae7dead036adde1bc8bdbb8d52bca755b6814c3
+Author: Gautam Bhattacharya <gautam.bhattacharya at mail.mcgill.ca>
+Date:   Thu Sep 13 17:40:23 2012 -0400
+
+    Add a queue struct for accumulating signal updates, so they can be bundled before sending.
+
+commit 48316f35fe5230c5b91eb056ff6629efc864d0b3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 16 19:23:10 2012 -0400
+
+    Send instance release messages as appropriate when removing connections.
+
+commit c6076657ec3acd13022cb5a6d3379d93679f6098
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 16 17:41:42 2012 -0400
+
+    Report results separately for different instance allocation schemes.
+
+commit f0be3b902b46063542feded7ea54ef901c6f0c2d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 16 17:41:10 2012 -0400
+
+    Call instance management handler even if instance is not new.
+
+commit d345ecd528125cf40297be0651bf46f0f4775925
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 16 15:53:13 2012 -0400
+
+    Rename a couple of functions to match standard naming scheme.
+
+commit 99fe6fa4aa71f58b5c981d36a488cbe8661ff42a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 16 15:52:35 2012 -0400
+
+    Merged instance overflow and management callbacks.
+
+commit 440a4c43bd237c978a44d1b65848ce6c36632df0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Sep 16 11:29:08 2012 -0400
+
+    Fix unused variable warning.
+
+commit 7183a5107c5a609376bea53ef5c4cb8f7732c961
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Sep 13 17:36:29 2012 -0400
+
+    Move mapper_timetag_t definition so it can eventually be used in db structures.
+
+commit 1b141eeb5bb7e8cde7f3a5b03f1a5d6b7e9aac59
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Sep 11 20:19:27 2012 -0400
+
+    Add a test for rate feature.
+
+commit dc56233be207c05e612f8e9646fa67eb40acc060
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Sep 11 20:19:04 2012 -0400
+
+    Announce the "rate" parameter for signals on admin bus.
+
+commit c9a3a01d55180a76afdb1912dabe786b283897a1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Sep 11 19:21:28 2012 -0400
+
+    Add basic API for specifying the rate of a signal.
+    
+    After rate is set, assumes that user will provide every sample as a
+    stream, possibly provided in blocks.  Therefore, the signal becomes
+    "logically timed" according to the specified rate.
+
+commit 14326792350334427a27d898e65aa6ab38b2e59c
+Merge: 524bb8b 1824072
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 11 14:09:26 2012 -0400
+
+    Merge remote-tracking branch 'steve/master'
+
+commit 0aa236551a6145bb59676d8fa6e0df0df8b15f12
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 11 12:52:10 2012 -0400
+
+    Moved signal instances back into separate active and reserve linked-lists. This should allow faster insance look-up in scenarios with many inactive instances.
+
+commit a7b792b4782f8d25662194409f658caeeaf06a1f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 8 14:43:27 2012 -0400
+
+    Move instance id maps to active and reserved lists, avoid runtime memory allocation.
+
+commit 228bc65f46a50af9a9f3d10d88d6ab299731f9e8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 6 13:54:41 2012 -0400
+
+    Was erroneously setting instance->is_active before checking if new_instance message should be sent to remotes.
+
+commit c5d70bf3edc66e51447b505d0ff88f7b0dac99d0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 5 19:01:33 2012 -0400
+
+    Fixed bugs in id_map management.
+
+commit fce381ad74fbada122936f92c002d1d196c906ae
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 4 23:03:38 2012 -0400
+
+    Store reference to device id_map in signal instance data structure.
+
+commit 1824072dfb6db44efbad23626b66dbf65a133a7b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Sep 4 11:57:02 2012 -0400
+
+    Update RtAudio to version 4.0.11.
+
+commit 1cc834412ba1fbc920efd9b2e027bf2bbeda0acb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Sep 4 11:55:40 2012 -0400
+
+    Fix Python native module file extension.  It's apparently .so even on OS X.
+
+commit 3fe0e823c8833667c1f0e1852a2d314dc8474fd4
+Merge: 4c658d6 524bb8b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 3 16:36:33 2012 -0400
+
+    Merge branch 'master' into instances3
+    
+    Conflicts:
+    	test/Makefile.am
+    	test/testspeed.c
+
+commit 4c658d665905a8502c8056fc4f35dfe30ba2977f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 1 09:37:15 2012 -0400
+
+    Fixed bug in reporting best times.
+
+commit 5b316116910808d3e8760ae24d8f31d1f2da19e2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 31 17:26:13 2012 -0400
+
+    Tweaking testspeed program.
+
+commit 524bb8b28cc305e3e8c1be0412b53537200b8952
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 31 16:51:54 2012 -0400
+
+    Added testspeed to tests.
+
+commit 037f1f65ba6ad576f35ee519c54a5f4f997f7d06
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 31 15:24:37 2012 -0400
+
+    Alphabetized function enum and table.
+
+commit cfee69f21a205265254ec0a170d546394109052f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 31 14:04:22 2012 -0400
+
+    Fixed bug in expression parser - was not always checking stack properly for variable or random function references. This meant that e.g. y=round(uniform(100)) would be evaluated immediately instead of on signal updates.
+
+commit b312595c8794a5ab65bb1c89ed077d91a1e6cc90
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 28 18:34:36 2012 -0400
+
+    Send bundles instead of bare signal value messages.
+    
+    This is to prepare for handing timestamps and larger message bundles.
+
+commit 07a45ece6797429d49dda5e13bf546aefc991bb6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 28 14:34:47 2012 -0400
+
+    Added uniform() function to expression parser.
+
+commit 2fedd86c5a7efa5335e86cb893cb034e0ec4547b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 24 14:37:41 2012 -0400
+
+    Rename token_t to mapper_token_t to avoid errors when using XCode 4.
+
+commit 373ce79fee50dc73c9b69ce79af474eefb07535d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 28 14:15:44 2012 -0400
+
+    Go back to referring to router destination as dest instead of remote.
+
+commit 9678199a45aaa429de45dbcb4abc0fed219f652d
+Merge: b7186f2 789d197
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 28 13:06:54 2012 -0400
+
+    Merge branch 'instances3' of github.com:malloch/libmapper into instances3
+
+commit 789d19796359b610e233b7bdd21f7f5ee1f6dc33
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 26 21:16:18 2012 -0400
+
+    Fixed trace messages.
+
+commit 097db41d27643495863a24fae0e0586b29e390c0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 24 22:00:58 2012 -0400
+
+    Fixed pointer bug in mapper_router_remove_scope()
+
+commit b7186f28f3f47940bba693549b62c36c8176beb8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 23 20:11:23 2012 -0400
+
+    Go back to referring to router destination as dest instead of remote.
+
+commit 5844e03f8c594d07146f3ca8251c35c644649907
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 23 18:19:57 2012 -0400
+
+    Release instances when removing them or removing signal.
+
+commit f7d02784c08fe5b78a9f0fd4579d435eb75384ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 23 17:49:09 2012 -0400
+
+    Added function for synchronizing instance id maps between signals.
+
+commit 0454b8f66104fb69e08bd7e1451c7158efa1e6d1
+Merge: bbbb1ef 98e96ff
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 21 09:31:00 2012 -0400
+
+    Merge branch 'master' into instances3
+    
+    Conflicts:
+    	include/mapper/mapper.h
+    	src/mapper_internal.h
+
+commit bbbb1ef79918db8c467f396829a769322d85b86f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 19 20:37:24 2012 -0400
+
+    Moved release of orphaned instances to /disconnected and /unlinked handlers in a effort to avoid releasing before the source device has stopped sending updates. This is not entirely successful - probably we will need to use a receiver data structure and unlink from both ends to ensure proper release of orphaned instances.
+
+commit 26154cb134d179bb26683f4d93fc8582e51bb0ad
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 19 19:27:24 2012 -0400
+
+    Removed admin handlers for link_add_scope and link_remove_scope - for now we will just do this with the link & unlink handlers. Removed >2-device linking. Moved release of orphaned instances from admin to device.c
+
+commit 72f1233e41be7b8cec51f42232a0218fb944c272
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 19 12:14:26 2012 -0400
+
+    Fixed bug when adding scope to link.
+
+commit 3335fe0d1ac7ddda03dd2c738bdb93212babb5dd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 18 16:59:05 2012 -0400
+
+    Release orphaned instances on /disconnect or /unlink.
+
+commit c28f11b755095cade7ecabccab697b1db11cabfc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 18 16:56:39 2012 -0400
+
+    Check hash instead of port.
+
+commit 8eee09b612646bb398a2cff791d8a2a5f2aa6dcd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 18 15:25:20 2012 -0400
+
+    Added link properties to swig/python bindings.
+
+commit 0b05c03fc2c6d47e4e7cbccdc265b2fbd85efb7a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 18 15:22:58 2012 -0400
+
+    Add scope hashes to link property types.
+
+commit b4c8d14fb16a4dcefd8b02c90c53e21cfe8c0bfc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 18 15:20:26 2012 -0400
+
+    Ensure query response callbacks are property registered.
+
+commit d9059c18e923226a792d93d03791ade40144345e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 18 09:51:33 2012 -0400
+
+    Tweak hash-collision based allocation scheme to make it compatible with previous library versions.
+
+commit 3507a787ba4d3e508b804c519bdd690af3e3aa49
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 22:51:44 2012 -0400
+
+    Specify link scopes as strings (device names) instead of IDs. Since we are now using CRC-32 hashes of these names for the instance group ID we can recalculate them as needed.
+
+commit 1b37b1e8fb61db4da151e00610f4a971333894ff
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 21:53:56 2012 -0400
+
+    Handle port suggestion, only report port in device metadata if has been bound.
+
+commit 254286c5dfa6ecf8f1a42b0bc6c51cae83ea562f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 21:53:05 2012 -0400
+
+    Check for zlib in configure.
+
+commit 6d26dc6c3b8c5edbd9afa2dc95450fbd75fa6d4c
+Merge: 2f76ccc 83b3316
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 20:41:01 2012 -0400
+
+    Merge branch 'instances3' into crc-32
+    
+    Conflicts:
+    	src/admin.c
+    	src/device.c
+
+commit 83b3316feead6944713917f855899373b4e1665e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 20:21:04 2012 -0400
+
+    Restore port argument to mdev_new()
+
+commit 98e96ff58c37e01631708e896b663b1a55e82f5b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 19:20:36 2012 -0400
+
+    Documentation update: fixed some mistakes, added param references.
+
+commit 28e8df90a6ccffdfa9eb87ae63d156a2ef77467a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 18:37:06 2012 -0400
+
+    Refactoring: changed some mapper_db functions to refer to connection sources and destinations instead of (misused) inputs and outputs.
+
+commit 2f76cccdc5a43d00d8ea4be71b868b487eb96470
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 17:03:14 2012 -0400
+
+    Switching to allocation scheme which checks CRC-32 hashes of device name + ordinal instead of allocating ordinal alone. This will ensure that device name hashes are unique in the mapping network and can safely be used for identifying signal instance ownership.
+
+commit cc68c6d2354d0a7fce04ac45017db6412731c3d4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 12:28:41 2012 -0400
+
+    Release associated receiver instances on /disconnect message.
+
+commit bdcd9519f97bd1aa1eb67babefc2d41d7db5d2f2
+Merge: 0bae6e6 8881fb8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 17 11:27:07 2012 -0400
+
+    Merge branch 'instances3' into instance-management
+    
+    Conflicts:
+    	src/signal.c
+
+commit 8881fb840a813ca2f00f80d6c1ec31412bad51c6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 14 18:32:37 2012 -0400
+
+    Use ID instead of port in msig functions.
+
+commit e91439613dcb11192e687e82244138eabdb44471
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 14 18:32:02 2012 -0400
+
+    Add properties to mapper_monitor_link().
+
+commit fffadf7649a01c3ec84f843b3137c5e3f6aff59f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 14 00:46:03 2012 -0400
+
+    Update test files with API changes.
+
+commit fdbd87155313c260ad7df9e66308a23400799f5b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 14 00:45:06 2012 -0400
+
+    Allocate ports internally, device IDs using allocation scheme.
+
+commit c41e9cb4d0dbfefc25d0e68f5d3bbde109cb4ad9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 23:16:12 2012 -0400
+
+    Fixed crash when replacing expression with malformed string at runtime.
+
+commit f072d433e5a65f56779bb18b81d32e806a4942ac
+Merge: 3b93b61 26fa707
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 18:08:03 2012 -0400
+
+    Merge branch 'master' into instances3
+    
+    Conflicts:
+    	src/admin.c
+    	src/connection.c
+    	src/db.c
+    	src/mapper_internal.h
+    	src/router.c
+    	src/types_internal.h
+
+commit 3b93b6171c9c0d03ab4b0fdf88d1a54e8bdf8189
+Merge: a5df281 7704091
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 17:15:32 2012 -0400
+
+    Merge branch 'link-scope' into instances3
+
+commit 26fa707ed18de27a63d9f489aea5b1670c6c072d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 16:14:58 2012 -0400
+
+    Store and report extra link properties.
+
+commit 54119adf397726bcb2478a984619f954239e9261
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 15:48:34 2012 -0400
+
+    Store and output extra connection properties.
+
+commit 92240667a43e7df0ab75a106543c8bc46d65dc86
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 14:36:35 2012 -0400
+
+    Use mapper_db_link struct to store props in router.
+
+commit b18e3103216fbffe142b4feb103a0825b1c9103f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 13:51:40 2012 -0400
+
+    Forgot closing brace.
+
+commit 60f1a22aadbeb02e63bceb071a927fb726f03fe3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 13:49:02 2012 -0400
+
+    Fixed bug in mapper_monitor_connection_modify - can't use props in NULL.
+
+commit 7704091219d101c4bb0c39b31734760d0024414f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 13 12:01:51 2012 -0400
+
+    User local ID for link scope if scope property not included in /linkTo message.
+
+commit a5df281ca6637bde7a91045b31e6063a6f038a3a
+Merge: 59b26a0 e556c15
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 12 00:28:33 2012 -0400
+
+    Merge branch 'group-id' into instances3
+    
+    Conflicts:
+    	src/router.c
+
+commit f53648804eb773af8709e4235972f520343ad10a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 10 17:40:10 2012 -0400
+
+    Removed whitespace.
+
+commit 09ab347aa638645590d1f75c45a0b2fc0424fc6b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 10 17:39:42 2012 -0400
+
+    Added handlers for multi-device unlink, link/addScope, link/removeScope.
+
+commit 594c8d6500cb171b754807a64dafc02a21d63752
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 9 18:15:48 2012 -0400
+
+    Add link scopes to /linked messages and routers, use for instance routing.
+
+commit 6290187c9ddf745251be7efb330a4665b970230d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 9 13:10:57 2012 -0400
+
+    Fixed bug in /link handler.
+
+commit bbd8b6467d0e08b3cf6baaf488c1f51e62ed15cc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 8 17:47:30 2012 -0400
+
+    Adding link scopes, ability to process /link messages with >2 devices.
+
+commit 0bae6e628a7945298806a10374609d0978b2a7dc
+Merge: 9dd80de e556c15
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 16:39:22 2012 -0400
+
+    Merge branch 'group-id' into instance-management
+
+commit e556c15348b206d22776179b219b3a583931c14b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 16:38:30 2012 -0400
+
+    Finished merge.
+
+commit 59b26a000116d49f800648b182d9a12b83fbf605
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 16:37:21 2012 -0400
+
+    Finished merge.
+
+commit 7d26f049bb9f9df87ee925f7c05e49dc280dd6a5
+Merge: 860788f 3ebe72a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 16:34:26 2012 -0400
+
+    Merge branch 'sync-instances' into group-id
+    
+    Conflicts:
+    	src/device.c
+    	src/router.c
+
+commit 3ebe72a5338b0a29ec7b3cef999fc99c671f1aac
+Merge: 731a4f1 bd4853c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 16:30:39 2012 -0400
+
+    Merge branch 'instances3' into sync-instances
+    
+    Conflicts:
+    	src/router.c
+
+commit bd4853c131fc976a6e52598133213c88c2af0633
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 16:25:24 2012 -0400
+
+    Finish merging master into instances3.
+
+commit ce70748b0521ea2f5e285dddf458fbf94a786870
+Merge: 320296d 3b6385c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 16:15:37 2012 -0400
+
+    Merge branch 'master' into instances3
+    
+    Conflicts:
+    	include/mapper/mapper.h
+    	src/admin.c
+    	src/device.c
+    	src/mapper_internal.h
+    	swig/mapper.i
+    	test/Makefile.am
+
+commit 3b6385c2a63c5faf51c0799e75fdd89f1cc687a4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 4 08:26:15 2012 -0400
+
+    Set handler and user_data after adding/removing query response callback in device.
+
+commit 2d28aeab2490c5ac36c9a951ca0b921cf9b150c0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 19:46:01 2012 -0400
+
+    Coerce query response values at query originator instead.
+
+commit ff269e7df15e28655425dd9059ecb164e0f84295
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 18:04:01 2012 -0400
+
+    Add java testquery program.
+
+commit 7a64e3b9d310fe88ee20bfd80233f19f0217b3f3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 18:03:21 2012 -0400
+
+    Update java bindings for new query API.
+
+commit bb4bf76ad2f53ec55253fa958b42c22078a59929
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 18:02:33 2012 -0400
+
+    Use different signal types in testquery program.
+
+commit cdae39f47b018fb68dc2100b9b8cff75263451cb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 18:02:00 2012 -0400
+
+    Pass signal type in query message, coerce types in response.
+
+commit c5b0c8f6fdd51491a81f2721829592188fe0c980
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 16:56:29 2012 -0400
+
+    Fixed pointer and memory allocation bugs in mapper_router_send_query().
+
+commit 662db13ef257bf0261faf225ef249eec7ff97e49
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 14:27:59 2012 -0400
+
+    Update swig/python bindings.
+
+commit 709befdfd1e4f0cd32724cf5c127c34f968784ee
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 2 10:52:30 2012 -0400
+
+    Use existing handler field for pointer to query response callback; set user_data for query response callbacks.
+
+commit 860ffefb5a623f5b165902d84bb8bb2103ca18da
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 1 14:50:27 2012 -0400
+
+    Send query response string pre-formed for reverse compatibility.
+
+commit 1d6e4f39cf08b81e128e62d99f5ab0b20b56185c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 1 01:05:09 2012 -0400
+
+    Need to poll server if device has query callback even if it has no input signals.
+
+commit e2208ca05c2c178522fdb51d5e3cc01a9149b7d6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 30 13:45:21 2012 -0400
+
+    Fixed problems with query response callbacks, response still not working.
+
+commit 17fa86eb326e8df6d16773ceaf916686e0d6c90b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 18:28:18 2012 -0400
+
+    Burying signal query functionality in library internals, should make more user-friendly.
+
+commit 7e34553ed9f5c83c371d3a61a3b75af53893f646
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 15:44:07 2012 -0400
+
+    Fixed bug in expression parser for handling floating-point constants > 0 without preceeding 0.
+
+commit c8e04ea758d30599f35099663e0daf5c4f035422
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 14:26:50 2012 -0400
+
+    Fix for java hidden signals, switch to boolean for hidden property
+
+commit 0368282416dc3a88216ce38c308e592b65af0ff4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 14:07:35 2012 -0400
+
+    Update testquery.c with new hidden signal API.
+
+commit 7b41d514a4fac210bd59c19e0b37471479aa70da
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 14:06:59 2012 -0400
+
+    Update swig/python bindings with new hidden signal API.
+
+commit a902958652b8b51105468e1aff6021348b654d50
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 14:06:17 2012 -0400
+
+    Update java bindings with new hidden signal API.
+
+commit 267f6f55c9ef07b0dc4880f2efe7c75005b17c01
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 14:04:23 2012 -0400
+
+    Cleaning up hidden signal code: use settable property instead of separate creation function.
+
+commit 5987c14291d23b2676c4dc82722f717358b4b52e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 29 14:01:40 2012 -0400
+
+    Removed references to dummy test program testdynamic.
+
+commit 9dd80de7d1bf316b65345937a9e2e987d9197670
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 28 17:40:58 2012 -0400
+
+    Added callbacks for remote instance kill requests, instance management.
+
+commit 860788f080ac57ca02960ec40cb41b39140e68a1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 28 15:00:44 2012 -0400
+
+    Added explicit msig_start_new_instance() function; ensure local instance stealing at sender only occurs if instance is new.
+
+commit e713419daa4354489592ee1365ddc2e0598f7de4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 26 17:40:41 2012 -0400
+
+    Corrected unlink handler response.
+
+commit ffab26527cf6a514dd6b1b7df8d85a4f48e56d5c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 22 17:58:40 2012 -0400
+
+    Set active=0 when releasing slave instance.
+
+commit 847683bac0fca532e0029527f0aff5965aaff675
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 20 12:44:42 2012 -0400
+
+    Parse ordinal from end of device name string instead of beginning.
+
+commit b6b875117203a5907c15eb80fb454aaa94ce9b02
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 16 22:11:29 2012 -0400
+
+    Use existing instance id map if possible.
+
+commit fa6da7a82394c2b8216ccd15d36da3e47734a24f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 16 20:32:08 2012 -0400
+
+    Added test program for benchmarking speed or message processing.
+
+commit 70cf0c0d7ba8690db464d6654a9a5a46605900fd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jun 16 19:01:20 2012 -0400
+
+    Use first instance on stack instead of seaching in non-instance handler.
+
+commit 5978b3771349bbd581c481a574b3fc5e5de3d302
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 15 17:42:21 2012 -0400
+
+    Use existing instance id map when activating or stealing instances.
+
+commit 9a5f8b4a1261304ccf61c9c42f8b84ef4c2034c2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 14 17:33:42 2012 -0400
+
+    Fixed memory allocation and pointer bugs, to not mark instances as active on local init.
+
+commit 20366734f45aeb8bab621c5f0fe26f2bbcec2723
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 14 17:04:31 2012 -0400
+
+    Store instance id maps within signal_instance struct also - we need this information to update or release an instance in case the global map is rewritten by another signal.
+
+commit e252d0cee4021c1a5678aa7a1d4d1903b4d7b62f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 13 12:37:19 2012 -0400
+
+    Removed default bidirectional linking - this is no longer necessary since we are using instance group ids to indicate ownership of instances.
+
+commit 19d4e4aee4bc48cee82f85144364d23799ca361a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 12 20:22:01 2012 -0400
+
+    Changed TRUE to 1
+
+commit d5d1227d97a77f7a3cf0986f1f46f2a997bff5e3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 12 20:18:23 2012 -0400
+
+    Complex commit: switched to signle linked-list for storing instances; refinement of instance id synchronization approach; use instance id mapping at sender side also.
+
+commit 6963f194724a9aaafb27e1ea9f63f8978ed3435b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 12 20:15:44 2012 -0400
+
+    Adapt instance handler and add liblo methods for new instance message.
+
+commit b06df1ce7f32f6a5f6b99f5609fe14003a931fb3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 12 20:10:29 2012 -0400
+
+    Clean up handler.
+
+commit 9e58f6fafcfa0a68ef8f42362828c9158d031f61
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 12 19:54:52 2012 -0400
+
+    Added function mapper_router_send_new_instance(). We need to explicitly send a message indicating that a new instance has been created in order to properly handle voice-stealing when srcInstances > destInstances.
+
+commit c0555af35763be196477756cee571edbc64e6054
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jun 12 19:49:20 2012 -0400
+
+    Added placeholder function for looking up router-groups.
+
+commit 9f3f93fd44a9b88a8b35e313ca6d46a050701c11
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jun 11 14:15:18 2012 -0400
+
+    Only store local map if remote map does not exist.
+
+commit 5f5046de4c39f8814fc4010f5cee0915d209c3fe
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 8 18:11:23 2012 -0400
+
+    Added locally-activated instances to id map.
+
+commit 8edec6e0237d979bf247952c8519c94b33027aef
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 8 17:14:32 2012 -0400
+
+    Add locally-activated instances to id map to prevent remote hijacking (not complete).
+
+commit fd6e7063357086e0a4d16f3c32c800e17d8d7c90
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 8 16:00:02 2012 -0400
+
+    Renamed devices in testinstance program.
+
+commit fb552579d56b82313508b28a15fb4c99aad30643
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 8 15:59:19 2012 -0400
+
+    Fix pointer bug when freeing instance map.
+
+commit da3945fd1b3e3be83b45f5ce684d50961d9e6a7b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 8 15:56:03 2012 -0400
+
+    Fix value index in handler_signal_instance; Don't activate new instance if value is NULL.
+
+commit e4c0b42786df7b1318ea940756bb213b72584417
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jun 8 15:54:11 2012 -0400
+
+    Set group ID on outgoing message.
+
+commit 82d9afa390ab223362f154d5519931aebedffd8d
+Merge: e62872b 731a4f1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 7 18:30:47 2012 -0400
+
+    Merge branch 'sync-instances' into group-id
+
+commit 731a4f16804caea487af1369630fff190b0b1740
+Merge: 8181f3a 320296d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 7 18:29:29 2012 -0400
+
+    Merge branch 'instances3' into sync-instances
+
+commit 320296d06d22e560da032aa1150da8ed142de118
+Merge: 8ff9de4 8f36349
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 7 18:26:55 2012 -0400
+
+    Merge branch 'master' into instances3
+    
+    Conflicts:
+    	src/expression.c
+
+commit e62872b9b12ebc6f08f4e2f1132394853c25296b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jun 7 18:13:36 2012 -0400
+
+    Use combination of group id and remote instance id in instance id map; Generate unique id for every device to be used as group id by masters. Using port allocation for unique id for now.
+
+commit 8181f3a41152d9ee1ef682c62efa680eea31bc19
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 6 17:37:12 2012 -0400
+
+    Check if sig exists in msig_release_instance()
+
+commit 3f2ec4e5abbbc2ce9cffc681d6a1a2563ca112d6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 28 16:38:14 2012 -0400
+
+    Unmap instance ids associated with freed routers.
+
+commit 5bf1c9ee516bf30af2a309692b299f8f38626e6a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon May 28 16:30:25 2012 -0400
+
+    Unlink from destination-side.
+
+commit 3fd03f1b7adf7eb0ecb053b18aa9c946f84567be
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun May 27 18:56:58 2012 -0400
+
+    Pass pointer to router object in mdev_get_local_instance_map().
+
+commit eed498c26ea76f18981ff6b2faa90672a1e383f0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun May 27 13:20:08 2012 -0400
+
+    Specify if message is to be sent with instance id (internal functions); ensure non-instance messages bypass instance id map.
+
+commit 846a9274b3a617e2e459f09e6944ef02099ed060
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun May 27 00:42:37 2012 -0400
+
+    Moved instance id map to device, compiles and tests ok.
+
+commit 22b501dc7992969f196f3d5b271930f93b208ca3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun May 27 00:41:23 2012 -0400
+
+    Corrected linkFrom/linkTo logic.
+
+commit f57ed7f36de51c32073fb164245feea516e0192b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat May 26 09:28:30 2012 -0400
+
+    Bugfix; added more print statements.
+
+commit 936556e43f9f3b360eb40aeac15c2eeaa931f296
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 25 11:57:12 2012 -0400
+
+    Implementing instance id mapping.
+
+commit 8e44e56ae53c4a4c1c253e6a309af50a88851bd5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 25 00:50:41 2012 -0400
+
+    Adding functions for mapping and remapping instance ids; use lo_address to store remote device context for now.
+
+commit b1f64513f751ccdd34d00119cceee06a70b33665
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 17:33:25 2012 -0400
+
+    Added hostname and port to get/find instance functions, instance overflow handler.
+
+commit 53bee7b15fb92b0f74b2e24867e10e85f719c382
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 16:15:11 2012 -0400
+
+    Delay between link and connect.
+
+commit 33abbaf5db95e13cef45e28a0d9a2e6db592ab14
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 16:14:38 2012 -0400
+
+    Added linkFrom message and handler; create router object at receiver side on link.
+
+commit 6e49bdb6522ea46c56e14936e9e71fa937f2e744
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 16:11:58 2012 -0400
+
+    Refactoring for bidirectional links.
+
+commit fc79ad5cdc4aa2d8a1d4dbeadb7f0d561a6f0d8d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 11:38:38 2012 -0400
+
+    Added instance map struct.
+
+commit 6cec7ade34c305d0ba9fb56315d304b1ada8ec0f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 11:36:19 2012 -0400
+
+    Refactoring in preparation for bidirectional links.
+
+commit 8d070ec7b8b80958af67be0546b2c56747d96468
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 11:20:00 2012 -0400
+
+    Refactoring in preparation for bidirectional links.
+
+commit f0767e0a692c5d6868757e9ab9dabf9820f83a38
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 24 11:12:26 2012 -0400
+
+    Added @syncInstances property.
+
+commit 8ff9de4a1045e44dca8e4095a4e55718cc23c0e0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu May 17 18:48:48 2012 -0400
+
+    Handle instance id-mapping on receiver side: can now properly map and steal instances when multiple sources are mapped to the same destination.
+
+commit ed942c83a4df19aa0d3ca2a744f6ae9def418fb9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 27 19:02:12 2012 -0400
+
+    Removed instances from signal creation function arguments for similarity with C functions.
+
+commit 80ccde99ced421303bbf393c2475523cda99b471
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 27 18:56:40 2012 -0400
+
+    Fixed argument order.
+
+commit c083f9b8371bd7e66afc80b07ce1bad21c483766
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 26 11:37:36 2012 -0400
+
+    Removed references to IN_ADD_INSTANCE stealing mode.
+
+commit 66fa282a1cd0510a64bbeddbbaa1ecbdf03b6ede
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 26 11:32:40 2012 -0400
+
+    Fixed signal reference; expect failure on first sub-test.
+
+commit 78b8a16a13c2c80531229524c35642f25483ee3d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 26 10:50:13 2012 -0400
+
+    Call instance_overflow_handler on sender side also.
+
+commit 8f36349103e36222b4fec31ae9842aa7da0e9fee
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 23 16:15:53 2012 -0400
+
+    Expression vector size should be 1, since it is applied element-wise.
+
+commit a291f11e1442df951b0698a62b94b4ea97147c48
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 16 22:11:25 2012 -0400
+
+    Missing include <time.h> in testmany.c.
+
+commit 41dcd323e51a772a67fb2649ad3eceef842c274e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 16 22:07:59 2012 -0400
+
+    Add missing include for pthread.h.
+
+commit d16238af788c1166acf9f8111688f87baf69af8d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 5 11:29:33 2012 -0400
+
+    Updated lambda expressions to include instance id and timetag.
+
+commit fb3969bed0243e53c5d810ff73e2676fd8576260
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 5 11:16:24 2012 -0400
+
+    Updated signal handlers for pwm_example
+
+commit 6672c04be3623c1f3bbc9559796c9884d8c82039
+Merge: 7579965 22f8788
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 5 11:11:30 2012 -0400
+
+    Merge branch 'master' into instances3
+    
+    Conflicts:
+    	swig/mapper.i
+
+commit 22f87888a583fdd72910788db19ea2e9e6ab457d
+Merge: 0cc37d9 9a4607d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 5 11:05:36 2012 -0400
+
+    Merge remote-tracking branch 'steve/master'
+
+commit 75799656f53b47ff8b8f9fd5b0725b2ef031f7e6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Apr 5 11:04:23 2012 -0400
+
+    Added timetag argument to signal handlers in examples.
+
+commit 0cc37d9ad7c10a4e3aa6d598d7d1c601ba1d10be
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 3 13:52:42 2012 -0400
+
+    Added example pwm synth using pyo.
+
+commit 9a4607d659471fe61c8590298ac9d2f4b601c2dc
+Merge: 1c7718f 451b944
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 20 10:14:24 2012 -0700
+
+    Merge pull request #3 from fundamental/master
+    
+    Clang 3.0 Compile Fix
+
+commit 1c7718f19363fad88ceeb7e19c0e518ab987049c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 20 12:11:02 2012 -0400
+
+    Update input handler function signatures in pwm_example.
+
+commit 451b944ecab81854249796737e7ec55ea8434bca
+Author: fundamental <mark.d.mccurry at gmail.com>
+Date:   Tue Mar 20 11:02:57 2012 -0400
+
+    Adding missing #include for snprintf
+
+commit 5d5909bb0f9cb9435bebdf400827c20f842eadea
+Author: fundamental <mark.d.mccurry at gmail.com>
+Date:   Tue Mar 20 10:53:32 2012 -0400
+
+    Changed struct offset code to offsetof()
+    
+    - Previous to this commit clang 3.0 falied to compile with:
+      error: initializer element is not a compile-time constant
+
+commit 2bb7d06ce8d8eb198ce917a18b29d7a9fc7c3597
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 15 16:08:52 2012 -0400
+
+    Removed whitespace.
+
+commit b590a140287c7b37db71651ec6bf69a12dfa666e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 15 16:08:33 2012 -0400
+
+    Added signal instance overflow callback.
+
+commit a70ab078bf4393cdb85973060c504b316e8257c9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 15 16:05:38 2012 -0400
+
+    Added timetags to python signal handler.
+
+commit f36317180c15b8b49e32b0ac97ee0e86a59b5984
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 13 16:45:45 2012 -0400
+
+    Update test programs with instances API change.
+
+commit 1d43c4b7062469b1b7feb3b4670ad16c57926c99
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 13 16:45:11 2012 -0400
+
+    Update python bindings for experimental API change.
+
+commit 3d81001e48d6d287a7a026a60831de19c64cd67d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 13 16:44:37 2012 -0400
+
+    Update java bindings.
+
+commit 9fa08cbe4b4263266805c9f2eb627d843dbc27fb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 13 16:43:59 2012 -0400
+
+    Switch to unified callback handler for instances and non-instances; initialize signals with reserved instance.
+
+commit 415b05af78722035835900849a2c4e0bc8be1de9
+Merge: ca11a28 1c500d8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 13 10:25:02 2012 -0400
+
+    Merge remote-tracking branch 'steve/master'
+
+commit 1e8b455b35b1c46bfeeed77013b09f956d50446f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 12 17:21:58 2012 -0400
+
+    Reverted to msig_reserve_instances() without user_data argument, adapted python bindings and testinstance.py
+
+commit c5df7a1139c343e9945f94e2ce975948101f5bcf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 5 18:00:50 2012 -0500
+
+    Cast to appropriate types to reduce warnings when building swig bindings.
+    
+    Conflicts:
+    
+    	swig/mapper.i
+
+commit 1f8fb1e701ebc890bb50b38cbd33f9682a58919c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 12 13:46:29 2012 -0400
+
+    Remove special treatment for first instance 0.
+
+commit 389e27b53f022328344b95d5fe633ed7228ed04f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 12 13:45:40 2012 -0400
+
+    Fixed bug in error-checking.
+
+commit 08e4c612db7a5e171790df8ccdb6eeaa4f564082
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 12 13:28:33 2012 -0400
+
+    Switched to mdev_add_signal_with_instances().
+
+commit 45259fc847afa7f35d5bca02ae75306a26d5507b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 8 17:11:19 2012 -0500
+
+    Add functions for adding signals with instances.
+
+commit a59dcb76a7774c91c218f95369e1baab78393135
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 8 14:02:48 2012 -0500
+
+    Include user_data in msig_reserve_instances(), and do not reset it in msig_instance_init().
+
+commit 728f31a92212dd4ae38e9281343d85311d5917b5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 8 14:00:57 2012 -0500
+
+    All signals have at least one instance; enforce maximum instances.
+
+commit 08200b8357f0b6dd63adab01d2daf3cd43154810
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 8 13:55:15 2012 -0500
+
+    Added allocation mode selection to swig bindings.
+
+commit bcef11bfed7e133eb32dae0f40b5fd130d0c8948
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 8 13:54:29 2012 -0500
+
+    Added id to python instance callback.
+
+commit 7b96aaaa315a8a45f1652ab7298ee7d1b7cb8610
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 8 13:53:04 2012 -0500
+
+    Was updating wrong signal in testinstance.py
+
+commit 889087581366242b7476d9f36368ade5c81a8a38
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 6 19:08:07 2012 -0500
+
+    Added rough version of testinstance.py
+
+commit ca11a28b9513c467fe11f34f766d2165e81ff7cd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 6 18:28:55 2012 -0500
+
+    Shorten run loop in testquery script.
+
+commit 76e8e2173eee4687a7386453e03681543f0ca3d2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 5 18:05:39 2012 -0500
+
+    Added handler and functions for instances to swig bindings.
+
+commit 2bcbd3a93b0a827eb67b0dc0fb007239b53ccd7a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 5 18:00:50 2012 -0500
+
+    Cast to appropriate types to reduce warnings when building swig bindings.
+
+commit 6d20a8f5b5c57d80b6dc4b0a38b1ff9fbf535749
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Mar 4 08:09:25 2012 -0500
+
+    Add extensible properties to /link handler.
+
+commit 66d0da9356fee8bc04b53217c5f2d340f7487843
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Mar 4 08:08:31 2012 -0500
+
+    Include extra params in mapper_msg_prepare_params().
+
+commit acb3eb2eedbd54cccdd5ac686812397eba34b408
+Merge: 62484d4 4778ffa
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 28 10:36:31 2012 -0500
+
+    Merge branch 'expressions' of github.com:malloch/libmapper into expressions
+
+commit 62484d46f2c40b1295a56517d600b2c6d8bd3976
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 6 21:07:30 2011 -0400
+
+    Added comparison, logical and bitwise operators to expression parser and evaluator.
+
+commit 58a73286613b969577a31caf0b160a5d85e64021
+Merge: 51d09d6 33daef9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 27 01:23:28 2012 -0500
+
+    Merge branch 'master' into instances2
+
+commit 51d09d6b68d370b45e87d5383040f4106a3b460a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 27 01:23:16 2012 -0500
+
+    Use int instead of mapper_instance_id.
+
+commit 1c500d82d030bd86501b92aa05f6859804e78b14
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Feb 23 16:26:12 2012 -0500
+
+    Mention 'autogen.sh' in the build instructions.
+
+commit e914e3367574e3887bbd1200882c26157cd3efc9
+Merge: 68c5ae7 33daef9
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Feb 23 15:43:50 2012 -0500
+
+    Merge remote branch 'malloch/master'
+
+commit 68c5ae764256f1f87830690dec9ee774bde7489a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Feb 23 12:56:02 2012 -0500
+
+    Add a .gitignore file.
+
+commit 33daef933c9694aaa24df2670cc31930a36d466b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 20 13:08:56 2012 -0500
+
+    Fixed a few typos in documentation.
+
+commit f503f932aee7c6553eb6430386021929b5aacfc1
+Merge: 00f5d0a fab748a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 20 12:51:09 2012 -0500
+
+    Merge remote-tracking branch 'steve/master'
+
+commit fab748a2b9798e3ad7ced206908d9c570b25835b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 18 14:30:48 2012 -0500
+
+    Move the tutorial to "doc" and rename it so github recognizes it as markdown.
+
+commit eb6c7e87dcd60877a75d186f09cc7533e08a26a5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 18 14:29:12 2012 -0500
+
+    Documentation on building and testing libmapper.
+
+commit 92e17eb620072908857666656dabdea05a0db070
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Feb 17 18:23:24 2012 -0500
+
+    Return error code from osc_prefix_cmp() if input string doesn't start with '/'.
+
+commit 00f5d0abb8ab0a0e292f12522750f120ebaf1d2a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 17 13:00:40 2012 -0500
+
+    Removed unnecessary mapper_signal reference.
+
+commit 6377922d9388a7638c489c3d0cc00051d05b665f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Feb 15 13:14:41 2012 -0500
+
+    jni: Add internal class files to jar.
+
+commit f1a8394aa27775bb39964dc8230d3b921f042ce4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 13 17:15:53 2012 -0500
+
+    Moved n_links/n_connections tracking into add/remove functions.
+
+commit 31ac770b5a5f1e1b3917440d245f7984a9fee795
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 13 17:14:22 2012 -0500
+
+    Remove associated connections before freeing router.
+
+commit 01f2b95bc0882b5ddce7da1dc8dd59c330a768a0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 12 23:23:44 2012 -0500
+
+    Free router in mdev_remove_router().
+
+commit 16eb804513603bbeb5cf2bcb194d647ef1f87ce3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 24 16:25:30 2012 -0500
+
+    Moved mapper_msg_add_osc_value_table() from table.c to params.c; switched to calling msg_add_lo_arg() instead of lo_message_add() - fix for bug when sending extra params in /connectTo messages.
+
+commit 39da44880b57c657647e915dc3a862834fc2f773
+Merge: 6f6ab47 84e9343
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 23 16:17:30 2012 -0500
+
+    Merge branch 'throttle-metadata'
+
+commit 84e9343757ea837023711cef51601f8237f62e4e
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Mon Jan 23 16:07:07 2012 -0500
+
+    Added members to mapper_db_device struct and devdb for n_links and n_connections; fixed order of keys in devdb_table, allocate extra tables for connections and links.
+
+commit 6f6ab47cb4468ae3da90aea49c2459f3a3bc7a2c
+Merge: 9bf5ffc 01c01af
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Jan 22 22:29:13 2012 -0500
+
+    Merge remote branch 'malloch/throttle-metadata'
+
+commit 9bf5ffce433dd651b8e48561ae3c4a96109df303
+Merge: 5e93f10 563eb79
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Jan 22 22:26:01 2012 -0500
+
+    Merge remote branch 'malloch/monitor_update'
+
+commit 5e93f108bd8d2b58dd8fc623cec1c43fe099051c
+Merge: 79f67e8 aab8f31
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Jan 22 17:18:52 2012 -0500
+
+    Merge remote branch 'malloch/python-update'
+
+commit 79f67e8164d5c3ec768474694fba3414fb9b3808
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Nov 25 18:27:17 2011 -0500
+
+    Initial work on "How to build on Windows" documentation.
+
+commit 6b89352cfa7039905abf8d922a56669c7e9fbb5f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 26 12:10:25 2011 -0500
+
+    Fix clean files to satisfy distcheck.
+
+commit 01c01af2cee8a2a9d7ef9487f6675bf0c37f9b5f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jan 19 17:33:01 2012 -0500
+
+    Added functions for querying properties of links and connections; finished adding throttling to connection requests.
+
+commit 563eb797d2b47a170862e8e2fe5a44e07678b739
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jan 18 12:10:32 2012 -0500
+
+    Added arguments for setting admin and enable_autorequest to mapper_monitor_new(). Added own_admin member to monitor data structure to track admin ownership and free admin if appropriate in mapper_monitor_free. Updated swig bindings and testmonitor program.
+
+commit 50005adbe66e2c9799fc6561962240793b719d21
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jan 14 12:50:56 2012 -0500
+
+    Include types for ID property in call to mapper_admin_send_osc().
+
+commit 7f1adcf819533615e6cca9140db3b110c966f297
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 13 20:57:53 2012 -0500
+
+    Fix for freeing callback after batch signal request.
+
+commit b3a0f91ddcc1d342c06ceb9a6b6872a109f6042e
+Merge: b0693c9 d8690d8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 13 17:11:26 2012 -0500
+
+    Merge branch 'master' into throttle-metadata
+
+commit b0693c9361c530899a9518f55637275a9961907a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 13 16:13:29 2012 -0500
+
+    Added batch request capabilities to monitor.
+
+commit d8690d87b34e7c0fee455e0f2cac779a037dfbaa
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 13 12:11:42 2012 -0500
+
+    Added n_inputs, n_outputs, version to mapper_db_device data structure; now stores these properties in devie db record. Fixed bug in mapper_db_property_lookup() - was searching sigdb_table instead of table passed as argument.
+
+commit aab8f3130c42699946ed34d14028b03196c478cb
+Merge: 38fe1ff 7f25c3a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 10 15:42:42 2012 -0500
+
+    Merge branch 'master' into python-update
+
+commit eabc10ffa2b7c2834a89700ed7ded631631ba78c
+Merge: a762d0e 7f25c3a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jan 10 15:41:47 2012 -0500
+
+    Merged remote branch master.
+
+commit 38fe1ff572eabb4806b8df96d7a9cc75e36d5982
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Dec 14 12:44:02 2011 -0500
+
+    Added python binding for mapper_monitor_autorequest().
+
+commit a762d0e73f7b2e4250f4f89ea26a3ce5e93d2283
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Dec 11 16:54:08 2011 -0500
+
+    Add user-data to instance; fail if received instance id not understood.
+
+commit 7472172a7014e60c0776be7a4727bce28ffe7841
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 26 21:09:56 2011 -0500
+
+    Print the active ID instances during testinstances.
+
+commit 395a7672b90510dfd578a2534e773269f9aeb06a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 26 23:58:04 2011 -0500
+
+    First instance gets the original id=0 instance, and restore it on last release.
+
+commit 62924c1eb4a21be70ebb8a09f384457ca2dfe7b8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 26 18:05:21 2011 -0500
+
+    Proposal for alternative instances API.
+    
+    Uses same implementation internally, but instead of exposing a
+    user-facing mapper_signal_instance data type, it allows user to
+    specify an external ID, and attach an optional data pointer.
+    
+    Allows for consistency in instance IDs across several signals, so that
+    user software can interpret this as representative of an "object"
+    formed of a collection of signal instances.
+
+commit 6357f91717bf80769406d6778146f0ea3e7d7bd2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 26 12:09:45 2011 -0500
+
+    Fix paths for javac and Python distutils to make VPATH build successful.
+
+commit e37c5d061a03b1ac6aef63bc1cc012917cb7e550
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Nov 25 14:18:08 2011 -0800
+
+    Make Python SWIG module compile correctly on Windows.
+    
+    For this to work, distutils.cfg must be configured for mingw32, and
+    the path to swig.exe must be specified to configure in the variable
+    SWIG.
+
+commit 7f25c3acff7f5b28b0ac5e62f04f05271ba46435
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 24 15:51:17 2011 -0500
+
+    If @IP is not provided in /device, take it from the UDP source IP.
+
+commit 5f81715b021c1ceb054379f4826990b0518ca5bb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 23 12:22:50 2011 -0500
+
+    Problematic type names and header files for building SWIG extension on Windows.
+
+commit e1ded6e2bdd7e45d75888b7621c2774d96d6bf03
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 22 21:45:03 2011 -0500
+
+    Add support for exponent (scientific notation) to float lexer.
+
+commit da109b78eb762205fce87c57f19aa1c11f3af23c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 22 21:44:41 2011 -0500
+
+    Remove extraneous call to snprintf.
+
+commit a0fd1a908d46ca33a7c7750a167adc2e32f896c9
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 22 21:05:58 2011 -0500
+
+    Don't switch to linear mode if the expression did not successfully compile.
+    
+    Certain float values can generate expressions incompatible with the
+    parser.  Will fix scientific notation support, but this might remain
+    true for NaN or Inf, for example.
+
+commit 5961032d2a527329f84d4c4c765b09cd99d43c83
+Merge: 63f8d5c 27e6323
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 22 16:55:38 2011 -0500
+
+    Merge remote branch 'malloch/master'
+
+commit 45784b43cf5017dc9b3d7883a42ff1d5c76bab57
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 22 14:09:28 2011 -0500
+
+    Don't reallocate signal memory for signals with no expression (ie. direct).
+
+commit 4c25ca3ea3d55655bd62fedc2908447db7fca07f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 14 18:49:30 2011 -0500
+
+    Fixed freeing of connection_instances when connections are removed.
+
+commit a1d542064cb92d0ffa9e18f29632dae9d2fbaeb0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 7 14:08:13 2011 -0500
+
+    Removed some whitespace.
+
+commit 73446d3dfec217252a4a61491206eae0566b0ff2
+Merge: 1be25a1 27e6323
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 7 10:09:32 2011 -0500
+
+    Merge branch 'master' into instances
+
+commit 27e632323d8357ad7337f758826003017c21b368
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Nov 4 14:02:58 2011 -0400
+
+    Added capability to process requests for subsets of connection data.
+
+commit 1be25a199af43a790be5a052ff31dd9c6e9d3844
+Merge: f55bb75 f940ad3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 1 14:39:26 2011 -0400
+
+    Merge branch 'master' into instances
+
+commit f55bb75ced88a9e0731fc63e57974559b1ae537c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 25 11:10:18 2011 -0400
+
+    Fixed indexing bug and removed reference to input_vector in mapper_expr_evaluate().
+
+commit 6a059d10936dfb016c3f5ebc8fcf0f992bbf62df
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Oct 25 11:09:17 2011 -0400
+
+    Moved expression data structures back into expression.c. Added functions for retrieving history sizes from an expr object.
+
+commit 0cbea450bdad094817b62326a6a187bb0906e93f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 24 18:42:36 2011 -0400
+
+    Pass input and output vector sizes back from expression generator for use in reallocating instance memory. Pull out signal_history reallocation into function mhist_realloc, and switch to using realloc() when possible.
+
+commit 1a5ca136eeac3e8d1fe8bc82b0fc78aa1d3ed1db
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 31 12:09:30 2011 -0400
+
+    Adapted /<device>/signals/get messages to permit requests for subsets of namespace by index. This is a work-around to address lost UDP packets when reporting very large namespaces.
+
+commit a1cefa45ca5947eed841b8ba4d4a898d87e9f823
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 28 18:05:31 2011 -0400
+
+    Added query support.
+
+commit 56814a951391469798244fcfa5fc4f4d4d751208
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 28 16:37:54 2011 -0400
+
+    Updated signal addition methods in python bindings to match arguments in C API.
+
+commit f940ad374515a80d6045247bdc2ed214e55996d4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 1 13:38:11 2011 -0400
+
+    Fixed bug in db storage of range data.
+
+commit 1894bbd73d5239a02a81bf6709bac9d7f62c46a0
+Merge: 29d6d45 d7b1831
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 1 13:32:54 2011 -0400
+
+    Merge remote-tracking branch 'steve/master' into fix_merge
+
+commit 29d6d4558d851cfc3fc996c33a48b66d8c2e853f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 1 13:28:14 2011 -0400
+
+    Removed reference to network topology limitation, since client-server is actually a subset of possible libmapper topologies.
+
+commit 63f8d5c6fea595cbf958bdfa7259dd5fc3434900
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Oct 14 16:36:59 2011 -0400
+
+    Remove hostname information from /device and /linkTo messages.
+    
+    The handler still parses out the @ip property in case it is provided.
+    Not only for backward compatibility -- perhaps there could be devices
+    which really do need to provide it.  However, if not provided, it is
+    extracted from the UDP sender info via liblo.
+
+commit 3d13660f1d8c4b53d1ac6ad77f09736478beaede
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Oct 14 16:16:17 2011 -0400
+
+    In /linkTo handler, ignore provided hostname and use UDP sender info instead.
+
+commit d7b1831fa84450be8e88488143f8e1c04e9c9e15
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Oct 14 15:02:11 2011 -0400
+
+    Seed the random number generator.
+
+commit 4778ffa1ee2f1e82414668e21ed7d553ff93613d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Oct 6 21:07:30 2011 -0400
+
+    Added comparison, logical and bitwise operators to expression parser and evaluator.
+
+commit 1e47f4c3102337ce9c3eaca4e46e4aa9017c61dc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 2 15:16:49 2011 -0400
+
+    Updated query handler to handle instances, signal_history data structure.
+
+commit c48cb7bf8e49e7a872ee56a42fcb924a0b2e7c17
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 2 13:43:35 2011 -0400
+
+    Added functions for retrieving a list of active or reserved instances owned by a signal, and iterating through the list.
+
+commit 4bca6d29930f5b5c3d4e8e8201566757781c3d80
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Oct 2 13:24:37 2011 -0400
+
+    Renamed sig->input to sig->active; renamed msig_set_stealing_mode to msig_set_instance_allocation_mode; added msig_num_active_instances.
+
+commit 768261ca09835be74c68867e52a9b2ea960d78c0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 30 17:44:27 2011 -0400
+
+    Renamed stealing_type to mapper_instance_allocation_type.
+
+commit 3017c9cce127cb59da3c8ad26ab9356f008703c3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 30 14:07:00 2011 -0400
+
+    Added functions for getting number of reserved instances and for setting a signal's voice-stealing mode.
+
+commit b8a590a73ab2d4c14fcf70d1bd6577dcb672666e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 30 13:47:06 2011 -0400
+
+    Added number of instances to stored/reported signal properties.
+
+commit 5a88a1ad96f06a80e7b0fb7fd21f4ac8e699c55f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 30 11:36:47 2011 -0400
+
+    Simplifying instances API according to discussion on email list.
+
+commit 985af780b9f7f8a0dcca6d975eddc5c7e55755c9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 28 16:08:21 2011 -0400
+
+    Fixed index in instance handler.
+
+commit 6bd80b52b20fb36fd72e46f3764990c364877c3e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 28 13:16:41 2011 -0400
+
+    Now using mapper_signal_value_t only in expression evaluator. All tests run successfully.
+
+commit 93a89e8aa9b61bd8f6f3635a83be855492d12036
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 27 23:11:11 2011 -0400
+
+    Fixed vector indexing in handler functions.
+
+commit f4a40eeaab7663b2b57e2baf726725b7c161585c
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 27 22:26:12 2011 -0400
+
+    Fixed instance memory allocation bug.
+
+commit 7b602f0714d591857ea3faa00a1020b28935375a
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 27 21:43:11 2011 -0400
+
+    Initialize length property; don't free unallocated memory.
+
+commit 0093047e855b4d84702a75198fcf962f5b7d2723
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 27 16:45:53 2011 -0400
+
+    Finished converting internal values to mapper_signal_value_t. Moved vector processing iteration to connection and expression evaluators.
+
+commit 42dfec1f779a6f1686f5da4d0f64f88ae1e1d597
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 27 07:35:59 2011 -0400
+
+    Switching internal representation of signal values to mapper_signal_value_t union (not finished).
+
+commit 40063a3ca0e5d5c0880e84c0f648814cbf1f6fe3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 25 11:17:59 2011 -0400
+
+    Added function for finding the current value of an instance; fixed some value indexing bugs.
+
+commit 6135f92320e28c64362994dfb6be91a050e8ef22
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 25 09:57:22 2011 -0400
+
+    Added function for returning containing signal of a signal_instance; added comment on copying output history on expression change.
+
+commit 70fe08609864c092ac939efdd124e670aad36837
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 23 00:19:07 2011 -0400
+
+    Copy old history values into new arrays when reallocating instance histories.
+
+commit 1708fc1ef47c05d09678b41b4344a41a0a7e203a
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 22 21:41:55 2011 -0400
+
+    Simple integration of optional voice-stealing when fetching reserved instances.
+
+commit 5853c8d35bfc12a9a8c712fa306149bca806e469
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 20 17:58:45 2011 -0400
+
+    Updated roadmap
+
+commit b3f04b0060c445a2084a3cb567f52294ca7e407a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 19 18:16:49 2011 -0400
+
+    Fixed and added some documentation.
+
+commit d1bbe8524d67d67d9ab6c19d64815958779c696c
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 15 22:46:20 2011 -0400
+
+    Fixed bugs when freeing memory.
+
+commit 271e4eece44ff211d568702d1402b937a423ad22
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 15 17:09:34 2011 -0400
+
+    Rearranged some of API: added msig_fetch_reserved_instance, msig_get_instance_by_id, msig_get_instance_id; rewrote msig_resume_instance. Added is_active flag to signal instances.
+
+commit 3dfa0eb9ee0ab2d6665523ead5b9541c0d8dbadd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 15 09:36:00 2011 -0400
+
+    Added function msig_update_instance_by_id.
+
+commit d475986ecc09369f8f5c1222a026694ebf0c90bb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 14 17:27:07 2011 -0400
+
+    Set history_size for signal when reallocating history arrays.
+
+commit e4f57ee483c7721e30906f4789a5443d7bb786d5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 14 14:57:57 2011 -0400
+
+    Call msig_reallocate_instances when expression is modified after mode change.
+
+commit 01ce3650b14f82a9c074390d1a2917e9fc3fd092
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 14 14:32:52 2011 -0400
+
+    Removed stray debug printf
+
+commit ab7981711002e89d9e88ea1d9414832c84348dcf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 14 14:23:40 2011 -0400
+
+    Call signal handler if signal instance handler doesn't exist; delete instance and query methods from lo_server when a signal is removed.
+
+commit 1b15a2907eb33072699faa5dc160b79a15bc9b2a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 14 14:22:03 2011 -0400
+
+    Was copying timetags into incorrect memory location; try iniating all instances with proper id.
+
+commit 2372211299193c3de6a35eb09acd5e3452edfcbd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 13 23:31:16 2011 -0400
+
+    Track input and output history vector lengths separately in expression parser and allocate instance history arrays correspondingly.
+
+commit 45d645957994b84a92e97dcd8ddfca04740137d0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 13 23:25:12 2011 -0400
+
+    Reallocate instance history vectors AFTER changing connection type to MO_EXPRESSION.
+
+commit 6c8f044ab830d5c1d343464b1088d8ed6e444260
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 12 18:27:34 2011 -0400
+
+    Added message counting and success/failure message.
+
+commit 81392e26e32c0842bd08c8142e7a8742d1c919b1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 12 18:12:23 2011 -0400
+
+    Rewrote most of msig_reallocate_instances.
+
+commit 9d44c3fb38e05b3b87e06428bc3862da93faf8f9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 12 12:09:43 2011 -0400
+
+    Fixed segfault on removal of connections.
+
+commit f8644eccefd0a3f0e5f0ebb1042fb84d5a17f5c4
+Merge: b55dfa8 2a0e4f8
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 10 00:52:24 2011 -0400
+
+    Merge branch 'master' into instances
+
+commit b55dfa8d6a96a974cf8fa76c34c15e927a6c2ea1
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 9 23:18:30 2011 -0400
+
+    Removed some commented code; fixed notes.
+
+commit 9d89e76962ff11cb89e8094c3f39c4f3b568986c
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 9 23:03:20 2011 -0400
+
+    Renamed mapper_connection_free_instance to msig_free_connection_instance
+
+commit f1e3e0db0cf4bae81850f75536a8b8306e653bfd
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 9 23:01:17 2011 -0400
+
+    updated calls to mval_add_to_message to use new arguments.
+
+commit 2b1fe0c375f016f24514af8ad7b38a5516d94518
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 9 22:40:15 2011 -0400
+
+    Fixed pointer bug in msig_suspend_instance; removed debug statements.
+
+commit 801087358b1515363ead5278cd92b670e0ada267
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 9 17:27:36 2011 -0400
+
+    Corrected passing of pointer to signal instances to expression evaluator; debugging signal instance linked-lists.
+
+commit e60b0b08f8a5326c32afa3cbb5c770e3eb7fe9bf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 8 22:20:26 2011 -0400
+
+    Fixed sending of NULL signals (for terminating instances). Store handler pointer on creation of instances.
+
+commit 4bf1d69782c3f1395cc3154181e42277fb9fb596
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 8 17:02:31 2011 -0400
+
+    Debugging instance handlers.
+
+commit 9d6a1644e198a72ab5b8f4be67483d085b0f3dc1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 8 09:42:34 2011 -0400
+
+    Adjusting instance handlers.
+
+commit 04490746bf9a648074da66427bca5e7d57d54930
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 7 23:08:06 2011 -0400
+
+    Added function msig_reserve_instances; update creation time when instance is created or resumed; handle void instance updates.
+
+commit 1903932a34147a991b3e2367879b937bf2b8ae2a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Sep 7 16:07:47 2011 -0400
+
+    Work on main loop in testinstance.
+
+commit cd4d21bbb928e0e4b5ebceff46f9a130904ec0fd
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 6 18:19:02 2011 -0400
+
+    Working out usage of instance handlers, added data type for voice-stealing strategies.
+
+commit 73b6c7cfc0222421e3b824056f14dbc525e883eb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 6 12:09:37 2011 -0400
+
+    Adding instance handlers; cleaning instance ids; simplified mval_add_to_message function; adapted mapper_router_send_signal for sending connection instances.
+
+commit 071cfadbee70cac20b56a2351fdc9316feec8378
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 6 12:06:59 2011 -0400
+
+    Adapting testinstance.
+
+commit 635ef600fc79201f89b0c2462e276ddf44e736ed
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 17:58:56 2011 -0400
+
+    Renamed unused file testdynamic.c to testinstance.c - will adapt for testing signal instances/polyphony.
+
+commit 47a81aaf0fa455993e64c953d4c7bbcec7068270
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 17:19:57 2011 -0400
+
+    When reallocating instance history, make sure size is at least 1.
+
+commit 8f5188ace4ad90ec2ba41b3a7afd4d4412db1dfe
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 13:31:00 2011 -0400
+
+    Made history vector size minimum 1 instead of 0; fix for indexing history vector.
+
+commit ee47f8e2b825ee6d017fd7a0e769894d61a44748
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 10:41:11 2011 -0400
+
+    Renamed msig_send_signal to msig_send_instance. Simplified signal update functions.
+
+commit 9bd0aa19596297207661790bb267bfef1f80c7a5
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 10:39:39 2011 -0400
+
+    Update instance input vector before calling mapper_expr_evaluate - test now computes correct output.
+
+commit f3dc2ca2bc9740df783fe1c4cee21fd2e9f697f8
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 10:35:53 2011 -0400
+
+    Added notes on changes to be made after full vector support.
+
+commit d344796cb9e09d1b0b5dbaa1f5f4e2d6355898f7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 09:29:30 2011 -0400
+
+    Adapted testparser for instances.
+
+commit bd5b2409e5ee2f866119576537abadc7009c40b0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 2 09:29:00 2011 -0400
+
+    Fixing connection and expression bugs.
+
+commit a7ffae2b0b98e36e5c59ef226acc8e13e3147b84
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 1 12:07:13 2011 -0400
+
+    Moved some expression data structure declarations to header file; added reallocation of instance histories to msig_reallocate_instances. Compiles except for testparser.
+
+commit 5ce948a1aaa9561f41f193e183afd4031eac710e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 31 08:55:03 2011 -0400
+
+    Revised some function calls for handling instances instead of signals; removed unused routing function mdev_route_signal; added contents of msig_update_instance function.
+
+commit 1c83d36b1e3e5a22cc36834cf96bfc03c4923ee8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 29 09:16:47 2011 -0400
+
+    Rearranging structure of signal flow.
+
+commit eede68f465b2db5a43a10b45378240bcc1ffc57a
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 26 18:44:43 2011 -0400
+
+    Working on expressions.
+
+commit f31b5e569355e06e7c53881e26a2772c24537996
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Thu Aug 25 17:35:06 2011 -0400
+
+    Split instance data structure into signal instances and connection instances, moved value history valiables and data into struct. Not yet working.
+
+commit 2dbf394c8ed78e6d2f96be6e7657a451d5cf4176
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 17 15:40:39 2011 -0400
+
+    Fix for msig_kill_instance()
+
+commit ae0a16ba1a29eb5cd60036124523e4f1cb92212d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 12 18:06:39 2011 -0400
+
+    Preliminary work on adding support for instances/polyphonic mappings.
+
+commit 2a0e4f8a5db3d53549bde21e2269c750bccc05e3
+Author: Joseph Malloch <joseph.malloch at mcgill.ca>
+Date:   Sat Jun 25 22:53:57 2011 -0400
+
+    Fixed bug in clipping function producing wrong output when range minimum > maximum.
+
+commit cdf9b3cf0840e282f33c39b5f589580bc95b3771
+Merge: 3094964 bc6e4aa
+Author: Joseph Malloch <joseph.malloch at mcgill.ca>
+Date:   Fri Jun 17 15:22:56 2011 -0400
+
+    Merge remote-tracking branch 'steve/master'
+
+commit bc6e4aa197af65cf11d5253897673350f36c14d4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 18:32:50 2011 -0400
+
+    Bump version to 0.2.
+
+commit ba56e6a5b02d8c8266ee47b77e3bf8e9e50ba745
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri May 27 16:05:54 2011 -0400
+
+    Specify pkg-config path when building binaries.
+
+commit 70e0aa51ac704294a198198f4f9957da8b73852d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri May 27 15:07:30 2011 -0400
+
+    Fix some warnings about undeclared functions and uninitialized variables.
+
+commit 8bbd5096d7a19cc460f14079b51d17efb9e69048
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri May 27 12:16:45 2011 -0400
+
+    Don't use 'find' to look for Python extensions during binary build.
+
+commit 30949645f54e25bd3aa088c932dd85dfeb8900ce
+Merge: b5c7747 97baf94
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 27 09:59:56 2011 -0400
+
+    Merge branch 'master' of github.com:malloch/libmapper
+
+commit b5c7747942ed7e1f9300d1760d61585100997d65
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri May 27 09:59:35 2011 -0400
+
+    Fixed messy arrowhead in icon omnigraffle file.
+
+commit 8febcb8dbdd282a58612cd3df9a08cc3460c0941
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 22:35:28 2011 -0400
+
+    Change all instances of the noun "mapping" to "connection."
+    
+    After much deliberation, the decision was made that the word
+    "connection" is less confusing and more consistent for representing
+    the relationship between a single output and a single input.  The noun
+    "mapping" is now reserved for refering to a _set_ of particular
+    connections and their associated properties.
+
+commit ad27b5697e17717dbe50f96c3180562fcfa02096
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 18:57:19 2011 -0400
+
+    Ensure install_name_tool succeeds.
+
+commit b19460e93b34f0ea4f46005cb677b8a5076ea248
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 18:37:31 2011 -0400
+
+    JNI bindings: fix a bad return type.
+
+commit 6c186215f07b4cb879eb37eb717eac46f823ea13
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 18 08:01:11 2011 -0400
+
+    Changed unit conversion macro names: midi2hz -> midiToHz, hz2midi -> hzToMidi.
+
+commit 6c9b19ae86f8a0e04201a2bf89e61fda0e344ce6
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 17:15:53 2011 -0400
+
+    JNI bindings: add .java and .h files to dist.
+    
+    Ensure .class dependencies don't get messed up by '$' in the filename,
+    by keeping these in a separate list.
+
+commit d530f32433e362115247c28bd4fade23002b26c7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 16:20:57 2011 -0400
+
+    JNI bindings: detect JDK paths correctly on Linux and OS X.
+
+commit fe7eabf5c8ba3a4bc83f911a25baafeb1e99e0ab
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 16:09:19 2011 -0400
+
+    SWIG bindings: Use configured version in setup.py.
+
+commit c1eb6cffdcd37ab5a792a9df5663162d89e495fb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu May 26 15:12:23 2011 -0400
+
+    JNI bindings: Pass value array to input handler.
+
+commit 97baf94f1381a6eacbf2b2944035b8d7218ca486
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed May 18 08:01:11 2011 -0400
+
+    Changed unit conversion macro names: midi2hz -> midiToHz, hz2midi -> hzToMidi.
+
+commit dfecb0a551ea3bc2f059c50e9be3d1c81c2b7057
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri May 6 16:41:13 2011 -0400
+
+    SWIG bindings: input handler's 'tt' parameter should be a pointer.
+
+commit e1e6de271e0192bc4616eccf2f723e91dc2e4e97
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri May 6 16:17:27 2011 -0400
+
+    SWIG bindings: return None in input handler if value is null.
+
+commit 722516ef7602553e6df6f183e6f77d805527232c
+Merge: 7882a5b 04918f5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue May 3 17:06:53 2011 -0400
+
+    Merge branch 'mingw'
+
+commit 04918f5fedc39a143c4d7da65f3d3be106ce9996
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue May 3 11:35:29 2011 -0700
+
+    If library compiled as Windows DLL, link tests to object files directly.
+    
+    The tests refer to the internal API which is not exported by the DLL,
+    so this is the only way to compile the tests in this case.
+
+commit 7882a5b70db113115d5a67690c394ab32e4a61a2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue May 3 11:39:28 2011 -0400
+
+    Added functions midi2hz() and hz2midi() to expression parser.
+
+commit 1b661f38129b174df38c9508baac4c91be2313a9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue May 3 10:21:27 2011 -0400
+
+    Added modulus operator to expression parser/evaluator.
+
+commit 2ac73235c02e6d506c723174b970134f9c73a737
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon May 2 17:25:35 2011 -0400
+
+    Add a Windows DLL .def file to list library exports.
+
+commit 613ca67b4a9ed95a41a58ecdc098c7189be9ad4c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon May 2 15:51:49 2011 -0700
+
+    On Windows, look only at valid adapters.
+
+commit b5be5d1ab03c3cca78cf6a77d5903f3171ae383b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon May 2 15:51:31 2011 -0700
+
+    On Windows, use Sleep() instead of usleep().
+
+commit 93a59083c5e0d51b33b8ce93321fa71609e8d415
+Author: Stephen Sinclair <sinclair at music.mcgill.ca>
+Date:   Fri Apr 29 11:00:50 2011 -0400
+
+    Remove the hack for pkg-config, we'll use it actually.
+
+commit 072be04efd234e2be3b10d64bd73a61dd792490c
+Author: Stephen Sinclair <sinclair at music.mcgill.ca>
+Date:   Thu Apr 28 23:07:38 2011 -0400
+
+    Detect Windows libraries and compile successfully using autotools cross-compilation.
+    
+    Notable changes:
+      - pkg-config is not used when cross-compiling
+      - audio example is disabled properly when audio system not found
+      - could not use a field called "interface" due to something in
+        Windows headers, so admin struct field was changed to
+        "interface_name"
+      - reimplementation of get_interface_addr() in admin.c using
+        GetAdaptersAddresses
+      - windows compilation currently only works if JNI and SWIG are
+        explictly disabled
+    
+    TODO: test doesn't run, "cannot find free port"
+          replace gettimeofday()
+
+commit af4bf044e7e96d7210f267eec2d8d9ea07f85d73
+Merge: bcb9151 ab09baf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 27 14:28:59 2011 -0400
+
+    Merge remote branch 'steve/master'
+
+commit bcb91514c44eddbb1f9b62bc93fec238c2303ee6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Apr 19 17:14:25 2011 -0400
+
+    Check if msig_new fails before proceeding.
+
+commit a5d6005a3b78a3e6440f2a69c160c89bb904f264
+Author: Joseph Malloch <joseph.malloch at mcgill.ca>
+Date:   Tue Apr 19 16:29:07 2011 -0400
+
+    Added some vector signals to test.c
+
+commit a1894c48bb05170de0cbb08af5cbc7745fa57a37
+Author: Joseph Malloch <joseph.malloch at mcgill.ca>
+Date:   Mon Apr 18 15:14:01 2011 -0400
+
+    update signal length property in db record
+
+commit ab09baf8642fa6ac9f5824595a08539fad493145
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Apr 15 20:44:21 2011 -0400
+
+    Check for non-existent router or mapping in handler_signal_disconnect().
+
+commit 3cf727cb1f31c15ac031d86d78db49558f1619b7
+Merge: 1aa6f65 6ddd534
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Apr 13 12:50:22 2011 -0400
+
+    Merge remote branch 'steve/master'
+
+commit 6ddd534ff9a9efe835fd612f8a640cc7dcad2b4e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 13 11:09:46 2011 -0400
+
+    SWIG bindings: Default properties are null for mapper.connect.
+
+commit 065e12b7794fed3303869e3226c0dbbd7662c82a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 12 15:45:10 2011 -0400
+
+    Include src_type, dest_type, src_length and dest_length in /connected messages.
+
+commit 8ae46c5674fc3467394dcfc1b1996a7c050e99c5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 12 15:48:03 2011 -0400
+
+    SWIG bindings: Apparently need to add mapper_wrap.c as dependency for install hook.
+
+commit 1aa6f652618f20721dbca340c6b70fcdf921ccf4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 8 13:22:00 2011 -0400
+
+    Added units to signal properties sent over admin bus; added example units to test.c
+
+commit b21aa37f146e161df09644e512c9de5d65c6778e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 5 17:49:12 2011 -0400
+
+    Add API function stubs to deal with timetag sending and receiving.
+
+commit 78589b653c5828157a2d1056b82e0163dfc6ade4
+Merge: a4968a3 2d657fa
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Apr 6 16:25:45 2011 -0400
+
+    Merge remote branch 'malloch/master' into timetags
+
+commit a4968a3062f1d0e951b6ff2716fc97ca373a0dc7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 5 11:04:59 2011 -0400
+
+    Explicitly link to the math library.
+
+commit c276da2901b0a639f3dbaccf8545f32831cc6d39
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 5 10:54:39 2011 -0400
+
+    Add a libtool macro to check for the math library.
+
+commit 5e1994e54b1e4a3499502a15c993ff41e4c92e82
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Apr 5 10:52:02 2011 -0400
+
+    SWIG bindings: Perform Python's install step on "make install".
+
+commit 9cf0c1e3b298df31e393bd4255affb6cb84f8325
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Apr 4 16:12:49 2011 -0400
+
+    SWIG bindings: use longs instead of ints to store opaque pointers.
+    
+    Was crashing on 64-bit systems.
+
+commit c1721bae14c0d1d7f0e8710427a209f2ddc9e507
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Mar 30 15:04:29 2011 -0400
+
+    SWIG bindings: Add a required header for OS X.
+    
+    Apparently not including arpa/inet.h leads to a segfault if
+    inet_ntoa() is called.  (Probably was passing bad data into it too,
+    since wrong data type was being passed as argument.)
+
+commit 2d657fa00f625832c5b1ebfece2deeb447fbd0d8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 30 15:27:44 2011 -0400
+
+    Fixed bug when trying to calibrate with integer-typed source signal.
+
+commit 90cf88c76cd7619723ed63cab61c3a49bab7fbe1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 29 22:02:29 2011 -0400
+
+    Integrated device's update flag into bit flags.
+
+commit 90bffe389ec5641a7438c48f6650677f5f617462
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 25 16:00:59 2011 -0400
+
+    Moved paragraph on state queries and implicit mapping from known-limitations section to advantages-of-libmapper section.
+
+commit db077aa00533f81a2c6059ca733bf656de0f52bf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 25 12:06:43 2011 -0400
+
+    Only respond once to identical information requests in a given polling step (e.g. from multiple monitors on the network).
+
+commit e94b0c02dcdbac654047264f56169b098a169575
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 23 15:50:50 2011 -0400
+
+    Added check for null router return in handler_device_linkTo.
+
+commit f4bb3bf3eef00456106c68617858f0ab7fca3990
+Merge: 4b76192 4c718ea
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 23 15:45:23 2011 -0400
+
+    Merge branch 'null-signals'
+
+commit 4b76192d26fc1754beee180094920ed185114296
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 21 17:35:10 2011 -0400
+
+    Changed second argument of msig_query_remote from void* to mapper_signal; added documentation for return value.
+
+commit b0faa9b9f3313ba38770b73839f5780a9556d064
+Merge: ac6dfd7 5b366f7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 16:16:19 2011 -0400
+
+    Merge branch 'jni'
+
+commit 5b366f723b908e2d6fc598c792246a4f03d8936d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 16:15:29 2011 -0400
+
+    JNI bindings: put the major version number into the name of the .jar file.
+
+commit bd683b906f924facb72c4531e0c0b31561b54127
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 16:06:30 2011 -0400
+
+    JNI bindings: allow specifying the path to the JDK during configure.
+
+commit cf6d60aa6b39f86ea70ffdd94dad78ecb7a80c99
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 15:02:44 2011 -0400
+
+    JNI bindings: move class list to a single place in makefile, touch headers.
+    
+    Using touch avoids re-running javah on every build, since it seems to
+    not update the file timestamps if they already exist.
+
+commit f316562383fe7878e7f42c5b1bae9ca8206a0681
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 14:42:30 2011 -0400
+
+    JNI bindings: build a jar file.
+
+commit daf8775554d9dbda3439af99a8297d33ad3ddada
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 12:17:16 2011 -0400
+
+    JNI bindings: generate the native library name using autoconf.
+
+commit e234ac2ce7b9e5fa88d0376db37c1773c97178b7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 02:30:07 2011 -0400
+
+    JNI bindings: look for javah properly, check two locations for jni.h.
+
+commit cc93342075b820f1014e44ce003af106bd23f6fc
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 02:11:13 2011 -0400
+
+    JNI bindings: signal properties.
+
+commit 878591bee277bd850bfb645a25851522e7a4f953
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 00:47:29 2011 -0400
+
+    JNI bindings: delete global references created during add_input.
+
+commit 9e0955a53c8190468a7ff6c1acd95fd3c1ac6893
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 00:35:51 2011 -0400
+
+    JNI bindings: add_hidden_input and query_remote functions.
+
+commit 7f3ec71e99f89e3672d66287474ffc5ab7ebb9ca
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 20 00:08:59 2011 -0400
+
+    JNI bindings: remove some printfs used during development.
+
+commit d1b2b4842bbef247c506b463cdda0dd6f28cd323
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Mar 19 23:20:46 2011 -0400
+
+    JNI bindings: set and remove signal properties.
+
+commit 589e4ed0cac2e6fb2ab9bc5678a9b3c287a50838
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Mar 18 23:39:11 2011 -0400
+
+    JNI bindings: set and remove device properties.
+
+commit 74f4fb953a54c520a9e9c6b247dae9f159f11a71
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Mar 18 22:35:02 2011 -0400
+
+    JNI bindings: declare generated headers correctly for automake.
+
+commit 889b52dd36010b8ddf8936500e4928b5bf52723a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Mar 17 23:23:14 2011 -0400
+
+    JNI bindings: functions for Signal.
+
+commit 2bf5204308b5a1d26c713d47cddb94f94d9aefe1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Mar 17 22:41:56 2011 -0400
+
+    JNI bindings: convert mapper_signal pointers from jlongs.
+
+commit 8c76e54b8996f3635f1a3d5d8f01f8541a8edd37
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Mar 17 15:36:41 2011 -0400
+
+    JNI bindings: all device functions except properties.
+
+commit b8cc9d862e18fe8b0d470e5e72f294b96bb4d14b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Mar 17 15:01:07 2011 -0400
+
+    JNI bindings: put device checking code for Device.Signal in a function.
+
+commit afbe8eb3e2e0d71ee44e6f3c8c81c9b9eccc5f3e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Mar 16 23:50:06 2011 -0400
+
+    JNI bindings: bail out of the callback chain if an exception occurs.
+
+commit 2a7e39599e751491429d42148b04813052c7ffcf
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 15 18:16:23 2011 -0400
+
+    JNI bindings: Retain ref to Device in Signal and potentially throw NullPointerExceptions.
+
+commit ac6dfd764212bc834576305f61803fec568b4c56
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Mar 16 15:46:42 2011 -0400
+
+    Fix unfinished sentence in tutorial.
+
+commit 4c718ea75a1bc9ffd7ac409f5c06f02c5c9c8f40
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 16 11:41:20 2011 -0400
+
+    Reverted to passing signal value pointer in signal callback functions, and also added pointer to signal props since type and length are needed to parse value anyway. If the signal has no value, pass NULL. Receipt of empty signal message now sets has_value property to 0.
+
+commit aa7388ba6c013d62eeb193effeb95128136539d9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 16 11:18:51 2011 -0400
+
+    Moved signal has_value property to mapper_db_signal data structure.
+
+commit 3e7a81d99ceda8cdf7634935934419407627fd63
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 15 18:14:40 2011 -0400
+
+    JNI bindings: get signal name.
+
+commit cf6a1bf39a78f8e2f6a2165541e592157bf639af
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 15 17:57:53 2011 -0400
+
+    JNI bindings: add output signal to device.
+
+commit 8bbc919a3d8eb953972822c6408146206b92d644
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Mar 7 14:05:31 2011 -0500
+
+    JNI bindings: macros to convert between void* and jlong.
+
+commit 036a5b6d5f576a520838bf3c91267c21e2301998
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Mar 7 13:22:25 2011 -0500
+
+    JNI bindings: call input signal listener.
+    
+    Works, but needs improvement: JVM environment is passed through a
+    global (not thread-safe), and a global reference to the listener is
+    created which is never deleted.
+
+commit 093b95180191a395118ab5b829afb63bc79a1f5a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Mar 7 11:16:41 2011 -0500
+
+    JNI bindings: Add an input signal.  Everything but handler works.
+    
+    Note: Only passes min/max information by reference as Double.  If I
+    override the function to also pass min/max as Float, Integer, etc,
+    then passing 'null' results in javac complaining about type ambiguity.
+
+commit 61c95bb96efd37a270b8a52ad1e3e38ba8b06bf0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Mar 7 10:39:58 2011 -0500
+
+    JNI bindings: Ensure device is freed on program exit in test.java.
+
+commit 61478f432704c315cea9792443f94451ba54e913
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Mar 11 13:09:24 2011 -0500
+
+    added functions for retrieving number of hidden inputs and device signals
+
+commit b86a9a5788713208afd80a9dcb1bdb67edb53bce
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 8 17:16:47 2011 -0500
+
+    Changed declaration of signal handler to match current (experimental) usage
+
+commit c62b310e2fb6f7db9ac11b315461a890b548d21b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Mar 7 11:13:56 2011 -0500
+
+    Altered testquery program to test empty query responses.
+
+commit 8b23f554bd02e6f1909bacd170cb112ea31c2b46
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Mar 6 19:46:18 2011 -0500
+
+    Added methods for sending and receiving empty messages (OSC string + NIL). Altered arguments sent to signal callback functions, and updated test programs accordingly.
+
+commit 50a51dffbc3c23365e044723153d6263f7a763af
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 6 18:53:32 2011 -0500
+
+    JNI bindings: Can create and poll a device.
+
+commit cf6b1a1387ed4e223b39629ff6927a7ff7dc1581
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 6 18:05:07 2011 -0500
+
+    JNI bindings: Move code from a "Mapper" class into a "Device" class inside a "Mapper" package.
+
+commit a814e011ced8cf3a31c7fae6d436b06e2bbcd8a3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Mar 6 17:37:02 2011 -0500
+
+    JNI bindings: Add a skeleton for configuring and compiling the JNI bindings.
+
+commit 8b8f571230d576ed85f55f8fe1ad96d30ce4e65f
+Merge: 415518f 037403e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 3 17:59:21 2011 -0500
+
+    Merge branch 'queries'
+
+commit 037403ed92d8ca2aa4e3d6643d1ca9fa452193a0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 1 14:16:19 2011 -0500
+
+    Moved msig_query_remote from mapper_internal.h to mapper.h
+
+commit 32aac9522116363ba177cf3786460b1e72ba46ac
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Mar 1 12:06:50 2011 -0500
+
+    Fixed memory allocation bug causing crashes when registering queriable inputs after server start.
+
+commit fb3b02f4d8236360554856d47e1aa19812481a85
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 28 22:00:11 2011 -0500
+
+    Fixed error message.
+
+commit ec2c48ac62accfad444bd5be0621629830e3fec8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 28 21:59:22 2011 -0500
+
+    Added testdynamic.c
+
+commit b48f4835931a961f8892168eca59787b37cad98e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 28 20:42:03 2011 -0500
+
+    Decrement tally when removing hidden inputs.
+
+commit 1b5e86a32df488150d4018a09da319a600fa8fd6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 28 17:39:02 2011 -0500
+
+    Removed some old comments.
+
+commit 27e8885b66e1bd898b4b454e768f035fd3490f18
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 28 17:38:13 2011 -0500
+
+    Set hidden property to 0 in msig_new().
+
+commit 599bc33e3afa4eb536b771ee28017666b02063bb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 28 11:08:14 2011 -0500
+
+    Set sig->has_value to 1 when updating signal.
+
+commit 3567e418cb7143ca48eeae269024de8322ebcf77
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Feb 28 11:04:12 2011 -0500
+
+    Check if signal has a value before trying to send it in response to query.
+
+commit 7bb14adc7d1b47f843408287ad7d33595aec1ea4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Feb 26 16:08:28 2011 -0500
+
+    Cleaned up testquery: fixed mistake passing pointer to mdev_add_hidden_input(), cleaned up program output.
+
+commit 687193e034aba33867063a68e6b63b9495557bb5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Feb 26 15:34:51 2011 -0500
+
+    Added function for adding hidden inputs, altered reporting of numInputs to report only public inputs. Now using hidden inputs for testquery.
+
+commit 5bf7b782a85929472c9290360ade24517b582bc8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Feb 26 14:54:39 2011 -0500
+
+    Switched to lo_send_from() for sending queries for remote signals, re-enabled vector query responses, added check for local server before sending query.
+
+commit 2a577ebda1c8973559da6e5d1e8950739cad687a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Feb 25 19:27:14 2011 -0500
+
+    Added functions for querying values of connected signals.
+
+commit 79beb9a4a29c7484ff3b41f857fbcf2a04b0dc5e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 24 17:34:18 2011 -0500
+
+    Added testquery.c for testing experimental query development (in progress).
+
+commit adbe3c4887c289b69db5a66efa3ac6a28e8825f3
+Author: malloch <joseph.malloch at gmail.com>
+Date:   Thu Feb 24 11:24:23 2011 -0500
+
+    Changed expected query message syntax: if query is sent without arguments, handler will respond using the signal name; if query contains an OSC string as an argument the response will use the string as an alias.
+
+commit 95def27d0ddeb6af0fbe0e7cf889a9f29b2d0174
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Feb 23 20:35:56 2011 -0500
+
+    Delete lo_server method for queries when signal is destroyed.
+
+commit c296aa13fd2289802352c1e6beb48c4f213eaa98
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 22 21:21:50 2011 -0500
+
+    Fixed terrible string concatenation mistake in previous commit.
+
+commit 47764f50e07fe6a2d848f348e8c3edc7a870d671
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Feb 22 19:14:26 2011 -0500
+
+    Added hidden property to signals, added OSC methods for handling value queries.
+
+commit 415518f52458a5e665ddfc2a2fe622128400e077
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 1 14:48:09 2011 -0500
+
+    Python bindings: setting device props, don't call non-existent device.get_properties().
+
+commit f6c5245c804bb0641c82583439695073994630c8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 1 14:28:22 2011 -0500
+
+    Python bindings: Release GIL before blocking in poll(), re-aquire during callbacks.
+
+commit ee18a400cdc2675e557038d033a8754e961fe912
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Mar 1 12:08:57 2011 -0500
+
+    Fix calculation of blocking time in mapper_monitor_poll().
+
+commit 271fe3de013708301b0931779e03570781fe252a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Feb 28 20:43:39 2011 -0500
+
+    Python bindings: override dict for setting properties as l-value.
+
+commit 1e3ae1474d99a9f935f8072e5ecd5ac7423e83c9
+Merge: 34a518a 1aec23f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Feb 28 12:03:29 2011 -0500
+
+    Merge branch 'pymon'
+
+commit 1aec23f8c024042f04ab37f64225b1c9562a3875
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Feb 28 12:00:10 2011 -0500
+
+    Python bindings: Allow to set signal and device properties with a dict.
+    
+    Use it with signal's "properties" property.  Not like this for device,
+    since device doesn't yet have a "get" function for its properties.
+
+commit 34a518ac1e5f9eb66dd10e56d19e3555ded4e729
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Feb 28 11:32:23 2011 -0500
+
+    Perform null checking when adding lo_args to tables.
+    
+    This helps to support OSC arguments that are contained in the type
+    string, like Nil, Infinitum, True, False, etc.
+
+commit 62c34ff19a19279e508cc59a84689f92c184bcf4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Feb 28 11:30:45 2011 -0500
+
+    When sending extra params, handle types specifically.
+    
+    Calling lo_message_add with a generic lo_arg was causing problems with
+    certain types. (e.g. float)
+
+commit 9da8e4990e26166e92f3f1c714efc57048ee8799
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Feb 28 11:30:04 2011 -0500
+
+    In db, parse device extra params.
+
+commit 7cac8a6ac215d6957c8257561c8c757e647b80aa
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 18:22:17 2011 -0500
+
+    Python bindings: add signal/device set_property and remove_property.
+
+commit 77c29cca13e34717c358e3ee9f8a77ae492e638b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Feb 28 11:28:51 2011 -0500
+
+    Python bindings: When converting to dict, handle doubles and long ints.
+
+commit d24376f44682f6e9bbab0203f03454b35f0975e1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 18:09:33 2011 -0500
+
+    Python bindings: database callbacks.
+
+commit dd8d94ea4878747c4531b7a8fde25c7701ea92cb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 17:34:03 2011 -0500
+
+    Python bindings: use abstract sequence instead of list for mapping range.
+
+commit 9cd2ca27a97ce2233c1cfa63c762708d7b451688
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 17:31:04 2011 -0500
+
+    Python bindings: fix int->float coercion for mapping range.
+
+commit 86d92176d222258c5b7a61462f08bf59d861791b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 17:20:28 2011 -0500
+
+    Python bindings: make helper functions static.
+
+commit 181c80cdd1fb187f7d448599d20aa8a376b4833a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 17:17:52 2011 -0500
+
+    Python bindings: Wrap admin object to allow special interface/port selection.
+
+commit cca53fcbca0c61fd16fae8ce3e2409dafa71db2e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 15:28:50 2011 -0500
+
+    Python bindings: move struct to PyObject conversion to static helpers.
+    
+    Makes returning singular objects (get_link_by_src_dest_name, etc.)
+    work as expected.
+
+commit 3b051b96977fc4f131dff139ee6dada0f62f11c0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 14:29:34 2011 -0500
+
+    Python bindings: Make iterators immediately during class construction.
+
+commit f14389f571be0f52130e75925711744d5b83a876
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Feb 27 14:04:48 2011 -0500
+
+    Python bindings: Add iterators for mappings and links queries.
+
+commit 2f5dd06fa854a9048d0b0f00f8bc439aa6a0a06b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 18:53:38 2011 -0500
+
+    Python bindings: add iterators for device and signal search functions.
+
+commit 2bc4d2fc8ba0cc374b8f4c1a303c9732ceb85722
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 17:42:19 2011 -0500
+
+    Python bindings: Add iterators for mappings and links.
+
+commit 4cce51e1df76111c9804cb7a444816cdc2e350aa
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 16:25:02 2011 -0500
+
+    Python bindings: Add iterators for all inputs and all outputs.
+
+commit 38d4f0487f3a2c3e426777a247e73188a2db3432
+Merge: 232f990 8fef88a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 18:58:25 2011 -0500
+
+    Merge branch 'master' into pymon
+
+commit 8fef88a3808b20dd500ad383c911b4e9a82a4e55
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 18:17:20 2011 -0500
+
+    Rename cmp_query_match_device_by_name -> cmp_query_match_devices_by_name, fix const string.
+
+commit a972b04dd32cdd139f4525d8b66e9d4c6421067b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 16:40:58 2011 -0500
+
+    In monitor, automatically request signals, links, mappings on seeing new device.
+
+commit f869602990f162d9c92a30b9a2d1c9c3e5904c30
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 16:24:36 2011 -0500
+
+    Add function mapper_monitor_request_devices(), which sends /who.
+
+commit 232f9904c2065a7c5fec955029f5d981db758cc5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 26 15:47:59 2011 -0500
+
+    Python bindings: Expose the iterable list of devices through a generator.
+
+commit 0e2724a22a8ada4c9e8fe75571cf5025f6714e84
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Feb 25 23:34:33 2011 -0500
+
+    Python bindings: expose signal.properties as a dict, add basic monitor actions.
+    
+    For monitor.connect, monitor.modify, converts an input dict to a
+    temporary mapper_db_mapping_t + flags structure which is passed on to
+    the function.
+
+commit 20a8c3d8000c7b9c12b9167e18ddf238984a66c2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Feb 19 14:50:16 2011 -0500
+
+    Don't try to trace a device name for monitor messages.
+
+commit ac51b5ac92b129910b5a6afdd6af47fb9d218188
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 20 13:35:58 2011 -0500
+
+    Check to see if updated signal is output before calling mdev_route_signal()
+
+commit 459d7b269315d23167be19f55f3b4ea2093020c9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Feb 20 13:27:55 2011 -0500
+
+    Moved setting of stored signal value from mdev_route_signal() to the msig_update() functions, since this is conceptually clearer. This is especially important when updating input signal values which may never be routed.
+
+commit 1ad76b7935c91e32a18a6aee334ac13625522afb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Feb 18 13:48:27 2011 -0500
+
+    Add a little OS X App that launches the Slider example, allowing to launch it multiple times.
+
+commit 9371931c9a3472bba93c30279df62c1661be960a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Feb 3 12:12:44 2011 +0100
+
+    Make use of liblo's lo_server_new_multicast_iface() if available.
+    
+    This fixes the problem on Linux of not working when not connected to a
+    network.  In general it seems Linux does not default to using the
+    loopback NIC when not connected, therefore it must be specified
+    explicitly.
+
+commit 6e19bdc12c07c40080d43e862b71d146bb4fb36b
+Merge: ac5cda1 92129f1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 31 15:23:43 2011 +0100
+
+    Merge branch 'keep_signal_value'
+    
+    Conflicts:
+    	src/device.c
+
+commit 92129f1434395e843cfe02c734a8ae0a32d0332a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 31 15:18:42 2011 +0100
+
+    Rename msig_size to msig_vector_bytes to keep things clear.
+
+commit e4db1cc7f958734663484a9dcb4ddfa2cb7372f1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 31 15:12:26 2011 +0100
+
+    Use msig_size and memcpy, memset in a few more places.
+
+commit 07ee5a5345d12868cd271657b330ce2e5ea82a90
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 31 15:14:20 2011 +0100
+
+    Signal value is a vector so make it a void pointer instead of mapper_signal_value_t*.
+
+commit 9e98cd91b76002f8a163982d16c8dca4d271bcf2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 31 12:33:32 2011 +0100
+
+    Add a function to get a signal's vector size in bytes and use this for memcpy.
+
+commit ac5cda18a0cb1d9e2c14ee81a0080703064d60af
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 29 03:39:13 2011 +0100
+
+    Allow element-wise vector mappings.
+    
+    This doesn't implement full vector support, i.e., N-to-M expressions,
+    but in the meantime it applies the expression to each element in a
+    vector to allow N-to-N mappings.  Vector indexing is disallowed.
+
+commit fd88e0d3b9e7d0b7af90d350dcb8cf8fc00bc665
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 28 11:13:38 2011 -0500
+
+    update to roadmap
+
+commit 223368b5effbb7e4ef36b58aedaddd0438950b3e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 28 11:08:05 2011 -0500
+
+    Delete corresponding liblo server method when input signal is removed.
+
+commit 007942d4f37a59bc5057edebc2377e3843f5e875
+Merge: 3ee63f1 219ef6d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jan 26 22:48:50 2011 -0500
+
+    Merge branch 'master' of github.com:malloch/libmapper
+
+commit 3ee63f1fb1891d4d667539b3a1652a31bad1e006
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jan 26 09:52:40 2011 -0500
+
+    Added local storage of signal value to be used for state queries.
+
+commit 219ef6dfb5574b933fa6a8fa10bcbb53794bd0d6
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Jan 23 03:30:57 2011 +0800
+
+    Make sure to free the type string allocated in mdev_add_input.
+
+commit a7abc6502cb38cbcec464f9050ef40dbe22b9e63
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 22 14:30:57 2011 -0500
+
+    Make sure to free the type string allocated in mdev_add_input.
+
+commit fc88cfee12fd485f77a4c6f29b5fa8809ddb0cfe
+Author: Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 21 17:22:45 2011 -0500
+
+    Input signals added after device registration were not being added to OSC server.
+
+commit fdbc11238951299a3685408dbadd624d83f586a2
+Author: Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jan 21 16:54:58 2011 -0500
+
+    Once admin ordinal is known, set device_name property of exisiting signals.
+
+commit 1c0f7c69f9c263317895dad4b9d38be4b2c8d6f2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Dec 13 17:15:56 2010 -0500
+
+    If a /connect message is sent and the mapping already exists, forward the message to the handler for /connection/modify
+
+commit 3d4a1741e0ed3307a4de9de6088604988c46d1fd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Dec 13 16:37:35 2010 -0500
+
+    Slight simplification of last commit, and do not enable expression mode if setting expression fails
+
+commit 8ec6fdf9a68e08f1b63d5778145ef9e9a5641bf9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Dec 13 13:44:07 2010 -0500
+
+    Check if expression has been initialized successfully before entering expression mode; default to y=x if expression string is not set
+
+commit f0174a8463518cd8ebc582de93a0822257205770
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 10 20:38:06 2010 -0500
+
+    In readme, make idmil.org reference into a hyperlink.
+
+commit fc3537276d3700181e292fae40bbe3311d777e9d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 10 23:25:01 2010 +0000
+
+    Remove my name from the tutorial so that anyone can feel free to edit it.
+
+commit 733c9e0d89cd11d14007a7abecbe8e3db5d06853
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 10 23:16:48 2010 +0000
+
+    Reformat some longer lines of code in the tutorial.
+
+commit 8f4347db7ec70db2b69665cab56bb3953c4bc3c0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 10 23:16:21 2010 +0000
+
+    switched "input" and "output" to "source" and "destination" in README for clarity (they were also backwards)
+
+commit bc1b66b309e900af94b9440a07359958da941d8e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 10 22:59:18 2010 +0000
+
+    Add the IDMIL website to the readme.
+
+commit bb6c7a27c296e99ba484c60d264df0d12e0bb238
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 10 21:39:18 2010 +0000
+
+    Fix mistake in last commit, assignment to the mapper_mapping variable after search.
+
+commit f30e9ea58a0431a5ce0ddad2cf98044bbfeb8034
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 10 21:05:54 2010 +0000
+
+    Search for an existing mapping before adding a new one.
+
+commit ff8f672fae2c0da7da5a64c827e4438d9e09fc3c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 10 20:53:28 2010 +0000
+
+    Grab the 'mute' state from incoming messages.
+
+commit 4de7c1f8293dcba2e1a2c5be16bdacb5bf36a1df
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 10 20:49:53 2010 +0000
+
+    fix calibration bug when source type is int
+
+commit 12fef2f24eaeb5794603746735a35e83f5b7b623
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Fri Dec 10 20:43:48 2010 +0000
+
+    added mapper_monitor_mapping_modify
+
+commit 92f0e5a7d366174728897406c38dda7ade192cc8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 9 21:10:09 2010 +0000
+
+    Add the libmapper_doc icon to the Slider and PWM examples.
+
+commit 3024d381851e78b70e4e743ef2386fd9371b255b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Dec 9 20:54:23 2010 +0000
+
+    added icon omnigraffle file
+
+commit b43d889c5b721638dffe24f0a3b73786e5ee516b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 9 20:45:26 2010 +0000
+
+    Binary build, fix recompilation of _pwm.so.
+
+commit 164680045868341e7caf40fea8ffae8eda202da5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Dec 9 20:37:55 2010 +0000
+
+    added some icons
+
+commit 79be3b6629470898088d3d9ef75907c78d2363d5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 9 20:00:32 2010 +0000
+
+    In mapper.framework, put the libmapper headers in the right place.
+
+commit 11e59cb97a1ae82c2d01c3f765632ec6770251a5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 9 19:59:06 2010 +0000
+
+    In sending /connected, append @range if any part of it is known.
+    
+    Previously it would only be appended if the full range is known.
+
+commit 572e3d01fc234b89805a3fd4e8e017a2259b1eab
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 9 19:31:49 2010 +0000
+
+    Set range from message in mapper_db_mapping struct correctly.
+
+commit 30fbeaf70326ea7efd3a94a8f66a62ab37bcfb3d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 9 18:46:10 2010 +0000
+
+    Forgot to remove this throw-away file in last commit.
+
+commit 77a8ce68f36f2e6233b81e1d380040a1a8aef19c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 9 18:45:03 2010 +0000
+
+    Update binary builder to use 10.5 SDK and correctly use @rpath in the framework.
+
+commit 9b60ef0cd711c339d866a7eeec034cde9367dc97
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 8 16:17:33 2010 +0000
+
+    Include the tutorial in dist.
+
+commit fd9e1ac73ccf5ccf9d3ab0638640a86a62a4520f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 8 16:17:24 2010 +0000
+
+    Make out-of-tree build work (VPATH build) by using srcdir, builddir, etc.
+    
+    This makes "make distcheck" finish successfully.
+
+commit b81fb469b89f9ce1f774f0dcc8b68ec711f12adc
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 8 06:38:46 2010 +0000
+
+    Script to build binary versions for all architectures, merge them, and make bundles.
+
+commit d393b538a50251fa5b593eb3002ee13e3615a7b0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 7 20:41:55 2010 +0000
+
+    Add a check to disable vector mapping.
+    
+    Unfortunately the expression compiler and evaluator both need some
+    work before vector mappings are handled properly.
+    
+    Better to disable it for now, since it won't be ready for first
+    release--considered interesting future work:
+    
+    Basically, currently an `x' in an expression is considered the same as
+    `x[0]'.  This is wrong, since we don't support a way to build vectors,
+    and therefore it implies that only vector-to-scalar mappings are
+    possible.
+    
+    Two things need to happen: we need a `comma' (e.g. Python) or `space'
+    (e.g. Matlab) operator to allow building vectors in an expression:
+    
+    y = [ x[0]*x[1], x[1]*x[2], x[0]*x[2] ]
+    
+    We also need to treat a long `x' as a reference to the entire vector,
+    treated as a first-class value.  The evaluator currently assumes the
+    stack contains only scalars.  We need to be able to push an entire
+    vector on the stack and perform operations across its contents.  That
+    is, the expression,
+    
+    y = x*10
+    
+    should multiple each item in `x' by 10, whatever its size.
+
+commit ae1930c43537a787a171974a44a4e8b640a9f54f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 7 20:41:47 2010 +0000
+
+    Fail to create mapping in /connectTo handler if lengths don't match.
+    
+    As noted, in the future the expression should be examined to see if it
+    makes the types work out.  For now, we assume the expression is a
+    scalar expression to be applied to each item in the vector.
+
+commit 9b6784f328668f7e92e561db5adfccc06da72de8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 7 20:41:40 2010 +0000
+
+    Add some debug checks for msig_update_*.
+    
+    Actually it might be nice to include the type/length checks in
+    non-debug build, but let's save a few operations and assume the caller
+    knows what he's doing unless explicitly running debug version.
+
+commit 1b5dfb287d0ecb78eca69866d018b2bb48232ffd
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 7 20:41:32 2010 +0000
+
+    Add a test for vector mapping.
+
+commit 70f29b6bc54d6f160354fb46a4dde57ee2401ad3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 7 18:57:59 2010 +0000
+
+    If server cannot be started because port is unavailable, try allocation again.
+    
+    In order to access liblo error message, it was necessary to add a
+    mutex for thread safety because it can only be passed by global memory
+    due to liblo's error handler design.
+
+commit 23e488276383cb1f93330241e2888b921455ce7e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Dec 6 17:54:42 2010 +0000
+
+    Make testmonitor use the API functions for info requests.
+
+commit a6562b0c90c151793b241c4dc27a5ef9b8c82e79
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Dec 6 17:49:34 2010 +0000
+
+    Provide length information in mapper_db_mapping structure.
+    
+    The length must be required anywhere the type is also required.  Could
+    even perhaps create a structure to enforce this, but this should do
+    for now.
+
+commit ea138099b903af42b9a33e1021ce1ab110d18af1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Dec 6 17:49:29 2010 +0000
+
+    Fix 'enumerate mode and clipping' types TODOs.
+
+commit 560ee672cd578966d4c4c0274dafc36e59a343df
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Dec 6 17:30:50 2010 +0000
+
+    Remove TODO about automatic /linkTo.
+
+commit 676e79c0682afd41e374b09421993e118acd7cd5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Dec 6 17:28:55 2010 +0000
+
+    Explicitly ignore '-' characters in @range arguments.
+    
+    Also, we agreed to take the 'invert' idea out of the protocol and
+    leave it up to the client code.
+
+commit efb09be464917373caa6e70829424964656c9b2b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Dec 6 17:28:51 2010 +0000
+
+    Segfault in /connection/modify handler, don't assume a mapping was found.
+
+commit f96097bf2647ca01312cb1d4c8ef866132a9b3ce
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 21:58:42 2010 +0000
+
+    Fix memory leak in mapper_router_receive_signal(), strdup introduced in r2073.
+    
+    Router maps the signal by temporarily creating a new signal with the
+    destination name and type.  However, no need to actually allocate and
+    copy the destination name, it is not written to and doesn't last long
+    so we can just point to it.
+
+commit f4f20d700e0a98d098a379c84338786eb8ce0d98
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 20:41:00 2010 +0000
+
+    Readme, word 'based' used twice in a row.
+
+commit 40eced6f844e1434766fdd5cdf1f40c28fb81278
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 20:40:54 2010 +0000
+
+    Readme, rewrite paragraph mentioning Max/Pd object.
+
+commit fac262dcfdb368f55ec8d1e3c4977d53ff6ec01e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 20:40:46 2010 +0000
+
+    Readme, reflow some paragraphs.
+
+commit 2c2e859aec1dabf3aea4cf30f0a99c5a8db780aa
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 20:40:40 2010 +0000
+
+    Make the readme introduction more informative, shorter, make 'history' section.
+
+commit 6bbbbb526aec9da0de6cca5be7f6eff410fb7a8c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 04:20:37 2010 +0000
+
+    Fix msig_update, was wrongly taking address of pointer.
+
+commit 94f47ae7595fe50953e4eeacd3b7286b9b0bbd14
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 04:20:23 2010 +0000
+
+    Require destination type and length information in mapper_router_add_mapping().
+    
+    Fixes broken messaging in testlinear, testexpression.
+    
+    Basically this is required information--a mapping should fail to be
+    created if type and length are not provided.
+
+commit f306ce4f6435eef9d27e312f0227791b190899b7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 5 00:14:53 2010 +0000
+
+    Include Python example main files in dist.
+
+commit e245dd0719a74dfde0fb96c4a062ae3b4cafa3ed
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 4 22:41:56 2010 +0000
+
+    Display name and port in both Python examples.
+
+commit 1155ed98df9001d067c38781982ddbedfb071cc7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 4 22:14:39 2010 +0000
+
+    Check types during clipping.
+
+commit b587d3f2bac1d46f864137ac1148d8ef7f22cd8a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 4 22:14:32 2010 +0000
+
+    For /connectTo, fill in known input properties for missing /connect arguments.
+    
+    Previously it used input properties when /connect args were
+    unspecified, or only /connect args if any were specified.  Therefore
+    underspecified /connect messages caused problems.  This way, all
+    properties of the input signal are available in /connectTo, unless
+    overridden by what was requested in /connect.
+
+commit 096d21a43403589d73dcb1672e59072cbe993843
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 4 22:14:22 2010 +0000
+
+    Check types during bypass mode perform.
+
+commit 6fc6cf48667c726643e80985b53bf9c89be8c02a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 4 22:14:12 2010 +0000
+
+    Add mapper_admin_send_connected(), use where /connected was constructed manually.
+
+commit 9481753ff510bed666d27d3de68ad2953d7855ab
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 4 22:14:05 2010 +0000
+
+    Avoid a liblo error by calling lo_message_add_varargs_internal correctly.
+
+commit ee7006f49e4913ab06d5ad02548a12ac8d929d1c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 4 22:13:56 2010 +0000
+
+    Type coersion for final expression output.
+
+commit ffd909c5edf87c6dea5db89a7f656f23ca4ef065
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Dec 4 21:47:38 2010 +0000
+
+    don't seed random number generator
+
+commit d1367bec5045df5a93d8544b7dc990dc5fa10440
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 3 21:21:42 2010 +0000
+
+    Remove "send /modify" TODO statements.
+    
+    This cannot be accomplished in mapping.c, because there is no pointer
+    to admin.  Rather, it is already being done after these "set"
+    functions are called in response to /connection/modify messages.
+
+commit 16ebe3b30a405104f7f702ab3a716c97c76900eb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 3 20:09:10 2010 +0000
+
+    sped up polling in testmany
+
+commit bd4da831691ac618ab72e5433da27308a28b3975
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Dec 3 15:44:49 2010 +0000
+
+    made testmany actually use name allocation
+
+commit 8d2661037d4573e19451ed62ecd35861d8f6c663
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 3 01:56:54 2010 +0000
+
+    Allow parameters to be specified on command line for testmany.
+
+commit 33cf63d9ad0b300dadcf0c82ce40eac03e57f72c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 3 01:56:43 2010 +0000
+
+    Remove the 'qt' prefix from test devices, rename 'test_2' to 'testmany'.
+
+commit 19ecf55305afb785f564400be122a5a355d99dda
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Dec 2 21:17:58 2010 +0000
+
+    A few small edits on the README
+
+commit a50f4fa9f70e3d2f884f2349c245c9acd6379ab8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 2 04:40:04 2010 +0000
+
+    Add a tutorial section about adding extra metadata.
+
+commit 39c3c1b5a0eb494cbca453e7aef86c8b372e3e81
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 2 04:39:56 2010 +0000
+
+    Add signal's user_data field to the list of queriable properties.
+
+commit 7e9c0e88ce5782cadb4507b22dcfc2ed4b0c895c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 2 04:39:46 2010 +0000
+
+    When dealing with extra properties which can be any lo_arg type, use lo_type.
+
+commit efc9f74ac21dfbe51e252b7aa2d2c821f95950f2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 2 03:19:30 2010 +0000
+
+    Forgot to shorten 'maximum' and 'minimum' to 'max' and 'min' in testprops.
+
+commit 596ea98e225c474075d7a08da0f736e8800d6043
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 19:08:18 2010 +0000
+
+    Replace obsolete call to update_scalar in tkgui.py.
+
+commit 1c66d4d3732a00de041ac2ff8ed3ea3549494a72
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 19:08:10 2010 +0000
+
+    Fix type coersion for max/min values in SWIG binding device.add_input/add_output.
+
+commit a2a3a5f9f719332f06ae50304f643f84476ba818
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 17:21:27 2010 +0000
+
+    No point keeping barely-used MSIGVAL and MSIGVALP macros around.
+
+commit 3d3e4a579b24a3fbab4dc8fa8365e8293dc92f1f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 17:19:54 2010 +0000
+
+    May as well also remove the use of mapper_signal_value_t in msig_set_max/min.
+
+commit a4ff71fc07c076c852f9cd88c077f7a5382322cd
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 17:01:25 2010 +0000
+
+    Avoid the warning "function declaration isn't a prototype" when a function has no arguments.
+
+commit ca9037e64970181ae5cc93a722b30a8cb8f0acee
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 16:57:15 2010 +0000
+
+    In signal handler, provide the value as a void* instead of mapper_signal_value_t*.
+    
+    In fact, the max external made the exact error that this change is
+    intended to prevent!  (i.e., indexing into an array of
+    mapper_signal_value_t instead of an array of float/int/etc.)  So,
+    shows that it's probably better this way.
+    
+    We need more testing code for vector signals.
+
+commit 8ddd4d7b093b0df4cbccf3c67c61f06a899bba42
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 16:57:00 2010 +0000
+
+    mdev_ip4 should return a const pointer.
+
+commit 1653430a57207621e37564f040ca95e91dbc5254
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Dec 1 16:56:47 2010 +0000
+
+    Add some comments for doxygen documentation and normalize some function argument names.
+
+commit df7be93d25077c2da6875c5be86b3de05d99eaf2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 30 22:27:50 2010 +0000
+
+    Rename mapper_db_create/destroy_mapping and sort out the API for network control.
+    
+    These functions are not db functions, but they do need the monitor
+    pointer in order to get an admin for sending admin messages.
+    
+    Technically a device could do this too, but we assume the use case is
+    for monitors.  Add functions to link/unlink, connect/disconnect.
+    
+    Connection properties can be specified by passing a
+    mapper_db_mapping_t structure, along with a bitflag indicating which
+    properties are valid.
+
+commit bb971d58c743ab7dde36baee7d072eef372cdaee
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 30 22:27:39 2010 +0000
+
+    Replace clip_lower, clip_upper with clip_min, clip_max in mapper_db_mapping.
+    
+    For consistency.
+
+commit bbf7c9131d6e2ede2c7363e70d6a211ffb5d2751
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 29 23:01:17 2010 +0000
+
+    mapper external: fixed bug reading signal max property, added signal removal method
+
+commit aa7a488e70bea8176be02a18c9cd0909d1d0ecbc
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 29 16:09:24 2010 +0000
+
+    changed SC_ props to MO_ since they are now "modes" not "scaling types"
+
+commit fd08a8c760d04e77bd0dbb7a8a276674f18f327c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Nov 29 03:12:42 2010 +0000
+
+    Fix SWIG bindings for recent API changes--add ip4, interface, ordinal.
+
+commit 5a25293d9c5c98e3c37cfba263def03277eec4c4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 29 00:54:04 2010 +0000
+
+    Pass all destination signal properties with flavourless /connectTo message - allows signal metadata to include clipping behaviour.
+
+commit 9298f73346ec6d10a2337c5d3fc5686047942f53
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 28 20:43:14 2010 +0000
+
+    Make some more device information publically available. Ordinal, IP, interface.
+
+commit 8a95c09f275af2af952ecff5326e0693bc091b87
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 28 20:42:54 2010 +0000
+
+    Rename msig_get_properties() to msig_properties().
+
+commit 16c6e1cb179cd5281a03f71e4ebb7559c88495eb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 28 20:42:31 2010 +0000
+
+    Move signal's user_data to mapper_db_signal, to make it publically available.
+
+commit 8888be93938b8e916418cf122117060ff4f161ec
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 28 00:18:37 2010 +0000
+
+    Add functions to remove signals from a device.
+
+commit ed70f67756f40baf00db286878ce17d210b5dde8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 28 00:18:25 2010 +0000
+
+    Document the device parameter of mdev_add_*.
+
+commit ed487575da88ab51bd79709f1eb0fe6b6e4b925a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 23:50:29 2010 +0000
+
+    Update tutorial to reflect recent changes.
+
+commit 22f84a9b8a8b7ab5a1396113b8588b7d8ae6d3d5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 23:50:20 2010 +0000
+
+    Also don't use mapper_signal_value_t in the msig_update() prototype.
+    
+    Replace msig_update_scalar() with msig_update_float() and
+    msig_update_int() to eliminate need to cast to mapper_signal_value_t.
+
+commit 37c7038bd019e6c4d5679e040e3634ffcc170dbe
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 23:18:59 2010 +0000
+
+    Rename mdev_find_*_by_name to mdev_get_*_by_name, add _by_index().
+    
+    Changes the prototype for these functions too.  Returns mapper_signal,
+    index is by pointer, instead of the other way around.
+
+commit e1d969cbaae5d684b8dc238c14898477da658f45
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 23:18:48 2010 +0000
+
+    Fix calls to mdev_add_input and mdev_add_output in SWIG binding.
+
+commit f19d41610d6ec50ad417d431cc07ad2a0337b3c9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Nov 27 22:43:36 2010 +0000
+
+    added check to see if device owns a signal of the same name before adding a new one
+
+commit bcb223d2c26d3e2adf82773c747ba867ec9e4b47
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 20:43:15 2010 +0000
+
+    Remove the 'value' argument for signals.
+    
+    I now think that this would have been somewhat of a misfeature,
+    encouraging a bad programming style to use implicit updates based on
+    non-owned memory.  Would have been fragile, prone to mistakes:
+    explicit update and _not_ pointing to user memory is better.
+
+commit cd420a28159dec0f6019ae4e9364fa2cab3d63fd
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 20:42:54 2010 +0000
+
+    Use a more sensible order for the arguments to mdev_add_input/output.
+    
+    Strictly required arguments first, then optional arguments.  This
+    particularly makes the default values more useful for the SWIG
+    bindings.
+    
+    Also, length and type should be next to each other.
+
+commit eb9a371480a15f9a66540f947c17d9b843a28e41
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 20:42:32 2010 +0000
+
+    In SWIG bindings, allow handler to be None, give default args to several functions.
+
+commit ffd0df23a919728aacdd98622bc4b0d4c0fc6b39
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 20:42:25 2010 +0000
+
+    Remove typed signal constructors from SWIG bindings.
+
+commit 9b0811d18aadafe748d49092b1a15600f8af61d4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 19:44:58 2010 +0000
+
+    Remove type-specific "shortcuts" for adding signals, use void* instead.
+    
+    Realized it would be a mistake to suggest that you can pass an array
+    of mapper_signal_value_t to this function, since the memory layout
+    might not remain the same when we add new types, and we can't count on
+    it lining up with float or int arrays.  Instead, just use void*.  This
+    makes C perform pointer coercion without a warning, so the need for a
+    macro to convert the pointer to mapper_signal_value_t* goes away.
+    
+    With the observation that calling the full mdev_add_input/output is
+    actually now less characters that using mdev_add_float_input et al.,
+    may as well remove these as they aren't really needed or helpful.
+
+commit 04390f714da4edda532cd89a60e006a04f9088a1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 19:44:41 2010 +0000
+
+    Handle the case where signal name is specified without a prefixed slash.
+
+commit eaafde5e7a7367e975e3e1038c91ac73c7fadc72
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 19:44:34 2010 +0000
+
+    Remove msig_int and msig_float functions, move msig_new and msig_free to internal header.
+
+commit f66a3c2c6d70e2faee1455ec2e6f0562973f0b5f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Nov 27 19:44:23 2010 +0000
+
+    Restore the 'examples' subdirectory in build.
+
+commit fca639243ec78c8ae0677c297fbd0cb00fdbbd13
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Sat Nov 27 00:09:14 2010 +0000
+
+    adding support for expressions, ranges, limits, etc...not finished
+
+commit a5d50a821dfa713a4e2c32f7a389e8387203a6e0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Nov 26 02:13:47 2010 +0000
+
+    added low-priority task
+
+commit f2ccd34d91aa0dc1b0e68bc1519f7fed533a7964
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 25 20:53:01 2010 +0000
+
+    A few more files that should go into dist.
+
+commit 1373a7257893b1bd67114a48c814c0886b40debc
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 25 18:54:51 2010 +0000
+
+    Remove obsolete reference to operation.h, expression.h in EXTRA_DIST.
+
+commit c02aa58d637a3396e0cc9f91158da67a6b6db290
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 25 18:53:34 2010 +0000
+
+    Missed referencing URL for Arduino in README.
+
+commit 4bd1b3ef86c6b8711129324a149122bb0746f32d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 25 18:52:27 2010 +0000
+
+    Rename README to README.markdown to make github happy.
+    
+    Then copy to README during autogen to make automake happy.
+
+commit f3967c7e8d572e5f3e8a6f1e1462e0e6f6854374
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 25 18:39:18 2010 +0000
+
+    A few more details in README and add URLs for all mentioned external projects.
+
+commit 368e1527bdd5633e5a87fb8b7f3a179b2e8fa67b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 25 16:58:38 2010 +0000
+
+    Add a few more details to README.
+
+commit 92a9b2d632695c3b1a7a1c7a98a6abfb59405324
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 25 13:47:06 2010 +0000
+
+    just a couple of typos
+
+commit 3c98ee2715d64790b047a84c61bff11a2e455411
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Nov 25 13:45:21 2010 +0000
+
+    changed reported range in test.c to match generated output
+
+commit 59cb4d293cde46c628b8beb5ef7a834ae2409df7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 24 23:14:56 2010 +0000
+
+    Add license information for the library's dependencies.
+
+commit 98deb4906f363acbbf965e42fc7eb3277828c869
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 24 22:02:11 2010 +0000
+
+    In README, mention many-to-one mappings in the limitations section.
+
+commit dbf81bc82238c34f58d4b0ff5f0c6a7acb4b9465
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 24 21:06:47 2010 +0000
+
+    Update AUTHORS and README.
+    
+    A verbose rant on the purpose of this library, and its advantages and limitations.
+
+commit c1dd77130e6d3146983c90db440d0ad6634e2a81
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 24 16:22:29 2010 +0000
+
+    Fix device polling, returns the number of messages handled, sleeps correctly.
+    
+    Expands on this a little in the tutorial, discussing the effect of
+    blocking/non-blocking polling modes on message handling.
+
+commit 7551177bd525f5b5cb5a0a39e6085939c7dfa4ad
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 24 03:24:27 2010 +0000
+
+    Add a simple PWM synthesizer to use as a sound example.
+    
+    This patch pulls in RtAudio 4.0.7 into the project as a minimal way to
+    access platform sound APIs.  configure.ac was modified to detect ALSA
+    or CoreAudio and provide the RtAudio compiler flags accordingly.
+    
+    The file `pwm_example` runs this synth with mappable parameters as a
+    command-line tool.
+    
+    In order to provide a GUI, it also includes a second Python project
+    `py_tk_gui` which wraps the synth in a Python module and uses Tkinter
+    to provide mappable knobs.  This will of course only work if SWIG is
+    found and enabled.
+    
+    Note that because of RtAudio's C++iness, the examples provided are
+    .cpp files to make autoconf figure out that it needs to use g++ for
+    linking. It might be nice in the future to come up with a C++less
+    alternative, but this'll have to do for now.
+
+commit 28bbc6c8e7e641c2078086ad4598ed0ab7becb67
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Nov 24 03:23:53 2010 +0000
+
+    Fix the SWIG interface to use the mdev_add_* functions instead of mdev_register*.
+
+commit 9d5eb76e8e78c789ba1e900b1cab78813a9dac64
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 23 21:42:19 2010 +0000
+
+    Remove "maximum" and "minimum" and consistenly use "max" and "min" everywhere.
+
+commit 45afca5a6bdc2b1c99699b33030a2982531a14ce
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Nov 23 20:23:43 2010 +0000
+
+    Fix: forgot to set is_output in db from @direction param.
+
+commit 4a4f6b057fd7cb713a97039f4d1e2e1aa527bfe9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 23 00:10:49 2010 +0000
+
+    swapped "@rev" attribute for  "@hash". This attribute should be incremented whenever the device signal-space changes (adding/removing signals, perhaps  changing their attributes in the future).
+
+commit 62e486e98c06f9001db25a92103e2497f775a408
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 22 23:06:04 2010 +0000
+
+    Added logout handler to devices for freeing resource suggestions; removed IP and port attributes from logout message since ports will soon be allocated internally
+
+commit 1a71a0de89f05c8a0acac9d57ff31d49b1c59371
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 22 22:39:24 2010 +0000
+
+    updated libmapper roadmap
+
+commit 6778e830b7cb6700c37a58ebfd157b3611747e1a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 22 20:45:23 2010 +0000
+
+    merged signal creation API as discussed
+
+commit fd812decd88b03389a29c922287165bcdfecdb9f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 22 20:44:30 2010 +0000
+
+    removed old reference to can_alias attribute
+
+commit 8e9a4ad2a8aa9681e6cbe809c6c949b255cf7fe8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 21 21:21:12 2010 +0000
+
+    Most of a tutorial on how to use libmapper to create devices and signals.
+
+commit d76f32bcc8ec7710bee64ba43bf58a0176f6905a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 21 04:07:06 2010 +0000
+
+    Add doxygen group commands to the public header files.
+    
+    This adds a "modules" section to the generated documentation, making
+    it easier to navigate.
+
+commit b2a1ca619b5562b6991b0708f6f6e91e593fbd50
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Nov 21 04:06:58 2010 +0000
+
+    Move mapper_osc_value_t to an internal type.
+
+commit d2968839829a095e10ab4aca72e6120fccf13d4e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 16 17:07:28 2010 +0000
+
+    mapper protocol change:
+    /link_to -> /linkTo
+    /connect_to -> /connectTo
+
+commit 7fc0a65b0286644f6c1ba8e98a3f1677545b38e8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 14 22:51:11 2010 +0000
+
+    protocol change: /registered -> /device
+
+commit 147178451ee87d7c6ff7d78f499d00d27875f399
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 14 22:22:14 2010 +0000
+
+    removed canAlias attribute; removed debug message from r2456
+
+commit c1602d0977ab0f9f57a3b1e3c97c4fa5ec0a94ac
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 14 22:01:16 2010 +0000
+
+    fixed bug where updating expression string would cause switch to linear mode
+
+commit bc994d3f0ea85e8626dad2c8dfc5f6f77a49ee14
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 14 21:33:08 2010 +0000
+
+    mdev_poll() now operates much like mapper_admin_poll, using the number of input signals as the max count for reading lo_server_recv_noblock() in a loop. Made both mapper_admin_poll() and mdev_poll return the number of received messages, which could be used to adjust the poll rate and blocking time from the application.
+    
+    It is conceivable that there might be more than n_inputs messages to receive in a given poll period - perhaps we should pass the max count as an argument to mdev_poll as well?
+
+commit 8f7c23c7e6432a85fe0f13433e226409f03fd384
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 14 18:36:27 2010 +0000
+
+    testlinear/testexpression: use allocated port
+
+commit ce224cb605d9d482ea0f65bde83f3d0dabe90549
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Nov 14 18:16:28 2010 +0000
+
+    Devices now re-send the /register message if signals are added.  I added an "update" flag to the device struct; mapper_admin_poll() sends the /registered message if the flag is high and resets the flag.
+
+commit 9da2e9b9601e2f05b2d3a21842e33d3734b0def2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Nov 12 04:15:29 2010 +0000
+
+    Some mounted filesystems don't do hard links, so use copy instead.
+    
+    This copy was needed to 'rename' the pkg-config file according to the
+    major version number.
+
+commit eb38de413b304b77f9d664e27e7c0ee945e43b49
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Nov 12 04:04:20 2010 +0000
+
+    Avoid interfering with Python distutils CFLAGS.
+    
+    Also fixes assumed system-named directory structure under swig/build,
+    uses wildcard instead.
+
+commit 15ca93578b7a26ca51ab561aca5ce83d85b9d6d0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Nov 12 04:04:12 2010 +0000
+
+    Fix issue with list_header_t on Darwin 64-bit.
+    
+    Seems the zero-length array used as a stub in list_header_t caused
+    problematic behaviour on Snow Leopard 64-bit, so use a one-value array
+    and calculate the size explicitly which should be system independant.
+    Had to rearrage the structure a little too, since the packing of the
+    enum between void pointers caused extra space to be padded in the case
+    of 64-bit architecture.
+
+commit a1933d3292824281918a0ab4710585aa813eb416
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 11 02:48:05 2010 +0000
+
+    Add the ability to look up signal and device properties by name.
+    
+    Also adds arbitrary 'extra' properties for signals and devices to be
+    used for representing user-defined metadata.
+    
+    Adds API functions for adding properties to owned signals:
+    
+      msig_set_property()
+      msig_remove_property()
+    
+      mdev_set_property()
+      mdev_remove_property()
+    
+    And for looking up properties by name or by index:
+    
+      mapper_db_signal_property_index()
+      mapper_db_signal_property_lookup()
+    
+      mapper_db_device_property_index()
+      mapper_db_device_property_lookup()
+    
+    This patch also moves the non-db half of the signal structure into the
+    internal API.
+    
+    A device handling program may get the signal's property structure
+    through the new function, msig_get_properties().
+
+commit 7418009249552187464abfb4dae97f12baa8978f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Nov 11 02:47:45 2010 +0000
+
+    Use some autoconf variables in Python setuptools build for SWIG.
+
+commit 1192903609e25b3f87f3d253bcd6e93e14e95150
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 10 20:10:42 2010 +0000
+
+    changing @scaling to @mode in mapping protocol - libmapper
+
+commit 6d5523ede9241b0b68df78d7c2082df2c256af08
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Nov 3 22:54:59 2010 +0000
+
+    update to libmapper roadmap after meeting
+
+commit 3e816f9d6826926c6b5a4bc5a39e88705024995b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Nov 2 21:48:13 2010 +0000
+
+    added elapsed-time-for-allocation printout
+
+commit b4bd4706410a27697b8cc123111fc34d20d37d30
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Nov 1 18:51:04 2010 +0000
+
+    libmapper allocation speedup: registered devices suggest alternatives when allocation collisions occur.
+    
+    Also changed behaviour of newly registered devices: instead of sending "/who" they now just send their registration info. Justification: a) only monitors are interested in the entire network, b) the current /link_to syntax includes networking info so that devices do not need to keep records of their peers, and c) reduction of redundant network traffic
+
+commit 9dace47a61e4d1c11a0a4e22f3aa57ef5382f19e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Oct 29 21:28:17 2010 +0000
+
+    new signal declaration syntax:
+    /signal /foo.1/out2 @direction output @type f @length 1 @min 6.1 @max 7.1
+    
+    replaced handler_generic() with handler_signal_info()
+
+commit f83d360efcfb94b078c48138cc901ec87cef847b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Oct 28 22:50:41 2010 +0000
+
+    Add a little string-based lookup table implementation using qsort and bsearch.
+    
+    This uses a sorted array of key-value pairs to store pointers.
+    Insertion should be considered as "slow" (around O(n log n)), look-up
+    as "fast" (around O(log n)).  We could always replace it with a hash
+    table in the future if we want O(1), but this should be good enough
+    for now and is a quick and easy solution.
+
+commit f65b01bcb8ece01122177aa1ce471db6f2ac3572
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 22:41:41 2010 +0000
+
+    swig: Fix signal types in tkgui example.
+
+commit a2516d28c86fd23efcb893e59de42b33526bfe6f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 22:26:19 2010 +0000
+
+    swig: Add a Python Tkinter example showing how to map a scale widget.
+
+commit 3a14f0d559738839dfd90674ce437ad5c4b6b5c5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 22:26:10 2010 +0000
+
+    swig: Perform type coercion before calling msig_update_scalar.
+
+commit c3daa2e387586a099c3180f4ce45ce5774902c85
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 16:05:53 2010 +0000
+
+    Fix test.py use of function 'name()' instead of property 'name'.
+
+commit 414c761ce096783c03c9c1f2d86bd87aa04df90a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 16:00:29 2010 +0000
+
+    A basic Python interface to device and signal objects using SWIG.
+    
+    While SWIG takes care of most of the work, callbacks and some
+    property-related hackery is Python-specific, so other languages will
+    unfortunately have to be supported explicitly.
+
+commit fd7c7e78c223890c88b11507d2f6901455c2ebe2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 15:55:13 2010 +0000
+
+    Use the specified group/port.
+
+commit a78c613dec11d0012fc74a7df6efeed7243eb1b5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 15:55:03 2010 +0000
+
+    Fix return NULL if admin was not created successfully in mdev_new().
+
+commit 657c19dacfcda4eb86d2cc1ff4d43066acb93212
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 15:54:57 2010 +0000
+
+    Fix freeing previous iface pointer.
+
+commit dea3b182dfca435a39fd0ea9d8886113de9e9d96
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 27 15:54:51 2010 +0000
+
+    Don't assume device exists during signal update.
+
+commit ea44e359245f9cb05be62b0bf28e4fbf094c6fcf
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 25 22:15:16 2010 +0000
+
+    added length attribute to protocol, updated roadmap
+
+commit 175adc88c4fbe321022a50353da6b115056e5285
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 25 21:02:07 2010 +0000
+
+    enabled mute attribute in mapping protocol
+
+commit 8144879fc590587c31dda697c38e766083c021bb
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Oct 25 17:20:53 2010 +0000
+
+    fixed argument order when calling msig_new
+
+commit e02a13debbfc9ec1b7ab68ebc85cdbc2341e642b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 20 20:59:15 2010 +0000
+
+    Make it possible to allocate an admin and pass it to a device or monitor.
+    
+    This changes the mdev_new() interface, though if 'iface' parameter is
+    zero there is no problem.  Now in rare cases where iface, group, or
+    port should be customized, the user can create a custom admin and pass
+    it to device or monitor.  Otherwise if it is 0, device or monitor
+    creates and admin with standard values.
+
+commit fad3da000b6b63ea522b7675a652cce98b532cdd
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Oct 20 19:33:04 2010 +0000
+
+    libmapper: Update to the roadmap after Oct 20 meeting.
+
+commit d8053ae0ef96a3248320c40b87c87b7948bacbd4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Oct 19 20:02:56 2010 +0000
+
+    Fix mapper_admin_send_osc for device-named paths.
+
+commit d792b756b0b4910120df72ada70a870f35838696
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Oct 17 19:18:57 2010 +0000
+
+    It's legal to not have a unit for a signal.
+
+commit f03f41ca625b5f72bf5022948080e84d16fdd733
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Oct 17 19:18:50 2010 +0000
+
+    Don't ask for admin name in send_osc when admin has no device.
+
+commit eec209ff742b087a5a181fbd6c4ab70b41abd756
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Oct 17 18:57:04 2010 +0000
+
+    Signal creation specifies min and max by pointer.
+    
+    No longer uses INFINITY as a constant to indicate no min/max.  Instead
+    takes a pointer to a value.  Also provide setters for min and max, and
+    a general msig_new function, called by msig_float and msig_int.  Also
+    provide missing msig_free(), and it's called by mdev_free().
+    
+    Provide a couple of shorter macros to make casting to
+    mapper_signal_value_t (and a pointer to it) a bit easier.
+
+commit 6fede51df93b69d6c1e1bd05f1dd0fe4de6c8d1e
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Thu Oct 14 22:21:10 2010 +0000
+
+    added a test for larger numbers of devices
+
+commit 6f5d853d62ea3e4b3e15166a320857c1c44ef786
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Oct 14 21:22:32 2010 +0000
+
+    Separate "monitoring" functions from "device" functions.
+    
+    Provides a 'mapper_monitor' object which can be instantiated.  The
+    mapper_admin is changed to work with a device, a monitor, or both,
+    performing whatever functions are needed for these cases.  The
+    database is now contained inside the monitor, so db functions are
+    given a context pointer, and the user application must get a db
+    pointer from a monitor before passing it in to a database query.
+    
+    Patch also modifies qtmapper to match these changes.
+
+commit a43b31135c35b8b04aaa29c9d7c3c9ab24814fa0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Oct 14 02:29:50 2010 +0000
+
+    Fix brain-fart getting string length in replace_expression_string().
+
+commit 2181ab7a236b9fa3cf88d8a92eb3d702f60d7f88
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Oct 14 00:37:53 2010 +0000
+
+    Fix mistake in new interface discovery code: memcpy -> memcmp
+
+commit ad9c58296f4959d28de4386eddfb47181446864a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Oct 8 02:48:48 2010 +0000
+
+    Use a heap-allocated string for interface name.
+
+commit 18bce8bdd31f2a13e2528e8b7f1ab4377bfdee0d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Oct 7 21:31:54 2010 +0000
+
+    Use a better method to select network interface, or allow it to be user-specified.
+    
+    Adds a check for new liblo function lo_address_set_iface().  If it's
+    not available, it is simply not called, and the interface is selected
+    automatically.
+
+commit f0b4b12c621c84f93a400266adb86c90e22ec5ff
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Tue Oct 5 21:41:51 2010 +0000
+
+    added interface for gui to delete mapping
+
+commit 96ffecc4601f340cafb6ba0fda2d86c696ef0c67
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Mon Oct 4 22:58:32 2010 +0000
+
+    adding flag indicating whether output or input to mapper_db_signal
+
+commit f148e5c2cefdc7f5d75db93adc43b5d163f9f189
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Sep 29 00:26:38 2010 +0000
+
+    Replace the parser/interpreter for efficiency and to support new syntax.
+    
+    Supports vector and history indexing.  Compiles expressions to a
+    reverse Polish notation implemented as a linked list and interprets
+    this in an iterative loop with explicit stack.  Performs some folding
+    of constant operations.  Detects required allocation for signal
+    history based on oldest access.  Supports type coersion from int to
+    float.
+    
+    Signal input/output history is moved from struct mapping to
+    expression.  Compilation requires knowledge of signal type and vector
+    size, but mapping doesn't have a pointer to signal, so functions that
+    set mapping expression are given a signal parameter.
+    
+    This patch also minimizes externally visible functions related to
+    expression---the API for constructing, freeing, and evaluating
+    expressions is small enough to put in mapper_internal.h, so
+    operations.c/h and expression.h are removed.
+
+commit e48c7e8b2403def4f64685216d947a43b8b5491a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Sep 28 22:59:25 2010 +0000
+
+    Return 0 from non-void functions to eliminate warnings.
+
+commit 236f60dd3cffddbc9473b06e93a0821daeae8b16
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Mon Sep 27 23:48:56 2010 +0000
+
+    hacked together interface for allowing a gui to add a mapping between signals
+
+commit 12ee05f8cc2f12d96a564b31361b55d888a8aaf4
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 20 01:53:43 2010 +0000
+
+    Fixed behaviour of linear mode: changes to range now cause re-evaluation of expression
+
+commit 0a9f9bd926e936f101c697b233e61b21ad921144
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Sep 20 01:42:15 2010 +0000
+
+    Fixed behaviour of calibrate mode
+
+commit b32f9fdebef8bc0dc7b9606610a77ecd279178f8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Sep 19 22:45:25 2010 +0000
+
+    libmapper: Fixed property reporting bugs, also updating range info was erroneously altering the scaling property.
+    
+    Testing also revealed that calibrate mode is not working properly, and that updating the ranges while in "linear" mode does not update the expression string or tree (not fixed in this commit)
+
+commit d9ff6444150326ababfcbc03ba9058022d553a4e
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Fri Sep 17 22:23:11 2010 +0000
+
+    fixed bug in handler_device_connections_get (sources were not being iterated through)
+
+commit da372454d52a506b5badb895f00696271fc48759
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 17 21:54:59 2010 +0000
+
+    added some default values for new mappings
+
+commit eda5d4ccd7d4c9c84e6c26d493eddd19e1b46176
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 17 21:54:42 2010 +0000
+
+    marked a couple of roadmap items as done
+
+commit b0608e393b19477bdfe1c980b1604c10ab5294af
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Thu Sep 16 02:48:20 2010 +0000
+
+    added interface to request signals, links, and mappings
+
+commit c6df1452ee0ee16d8eb22535f0898419f79c6633
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 10 21:58:19 2010 +0000
+
+    simplification of mapping creation functions: now only mapper_router_add_mapping() remains
+
+commit f90c6029939a592b73b974c84a9b3a8aff712258
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Sep 10 20:29:06 2010 +0000
+
+    libmapper: use a built-in strndup, since it is not available on all platforms.
+
+commit 9e95bdb45989889aa062855fe5080b0388ae8250
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Sep 8 18:56:47 2010 +0000
+
+    libmapper: rename expression functions and struct to mapper_* naming prefix.
+    
+    Move code from interpreter.c to expression.c, removing need for this
+    file.  Make expression.c helper functions declared static.
+
+commit f9a44421a3933dba622edcadbfa26d788dadc86f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Sep 8 18:56:39 2010 +0000
+
+    libmapper: replace uses of sub_string() with strndup().
+
+commit 99a482f2ffa660b59eb2d3dbb8a72a3b9ca7fc75
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Sep 8 18:56:31 2010 +0000
+
+    libmapper: set expression scaling when adding an expression mapping.
+
+commit 8b784fabd9ae47ee3d31ef8469f6f5a6c658cd1a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Sep 7 20:33:12 2010 +0000
+
+    added some tasks to roadmap
+
+commit 4964b39803410ab8321940ce1fcde7e0d812d41b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Sep 4 00:24:42 2010 +0000
+
+    fix for updating expressions
+
+commit 7a277870396214029853df906d4f69a2d278605a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 3 22:21:47 2010 +0000
+
+    slight protocol tweak for clarity: "namespace" -> "signal" or "signals"
+
+commit 3db35d7dcd5d88b5263f98f41f0516f5c9056b2f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 3 19:01:52 2010 +0000
+
+    updated roadmap
+
+commit 17c6a19dee2d53c53476bc1fef09007021a4cc3e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Sep 3 17:51:34 2010 +0000
+
+    fixing terminology inconsistencies:
+    
+    sender -> source
+    target, receiver -> destination
+
+commit 13142867f24525620296c9b4fb5f67b3665f5cfd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Sep 2 20:03:46 2010 +0000
+
+    adjusted priority list according to discussion
+
+commit 8fda160df1079f08b589976326b38817a09643b5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Sep 1 19:19:50 2010 +0000
+
+    libmapper: add sqlite and stk to the "to do" list in the roadmap.
+
+commit 4370e926e20d7d8e3b8ada8a315b89e29ced6f3e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Sep 1 02:30:05 2010 +0000
+
+    libmapper: add a development roadmap.
+
+commit e7f15ce23ba764e5591e70f59370a921c286a558
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 31 18:24:15 2010 +0000
+
+    libmapper: remove mappings for devices that are unlinked.
+
+commit 9fdc2c7ef3f470dead7c4e59ca50eaefcc985af8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 31 18:06:14 2010 +0000
+
+    libmapper: also request connections and links in testmonitor.
+
+commit 65642ab37dc514dcc07b44f58b870d5e6ff5489b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 31 18:00:15 2010 +0000
+
+    libmapper: remove links and mappings on /unlinked and /disconnected.
+
+commit 1509e7355e0810e3df24d5ee6863915b94e17f16
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 31 17:09:35 2010 +0000
+
+    libmapper: change order of removal: mappings, links, signals, then devices.
+
+commit 5ef58687721b0d580f869e6bcc8d10ff0cda660b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 31 15:01:18 2010 +0000
+
+    libmapper: remove a device from signals, mappings, and links dbs when removed.
+
+commit ac9ba64658ad369d69e0742ed47707cea30d40cf
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 31 15:01:08 2010 +0000
+
+    libmapper: add queries for all inputs and outputs, use in testmonitor.
+    
+    Previously it only showed signals for which there was an associated
+    device entry; this way we can see everything in the database.
+
+commit 4e2d7fc023ad2ac9c1f823a75b77bbe0ea0a5ea6
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 31 15:00:55 2010 +0000
+
+    libmapper: only update testmonitor's display after a database callback.
+
+commit f735b20b8985bc89222e64af33cd503b5300609c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 21:05:11 2010 +0000
+
+    libmapper: remove a device entry from the database on /logout.
+    
+    Still need to remove mappings and signals associated with the device.
+
+commit 1d51f1a3ba497bfa7e6fc5e79f6236e0642841a8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 21:05:04 2010 +0000
+
+    libmapper: send /logout as a result of freeing the admin object.
+
+commit 9d342ad69112b5f42cc515f8311418b34a78b474
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 20:36:16 2010 +0000
+
+    libmapper: correctly iterate over the mappings in connections/get handler.
+    
+    Previous version would only hit the first mapping for each signal.
+
+commit c2a468a5132ae4713ccd3864eeb543f02d5d27db
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 30 19:49:09 2010 +0000
+
+    fixed segfault in handler_device_connections_get() if no connections exist
+
+commit 429f6025a0475b84ccb5368f82d4db24bfd1dc12
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 30 18:49:11 2010 +0000
+
+    fix to mapper_router_remove_mapping() - now correctly iterates through all mappings, frees memory
+
+commit d8102acd0f079b7a89a5070c0658966f2263f8e3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 18:10:17 2010 +0000
+
+    libmapper: add a ctrl-c handler in test.c, ensure devices are cleaned up.
+
+commit d83c7e7261037bcc52dbc6d16efc260de90da041
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 18:07:07 2010 +0000
+
+    libmapper: add mappings and links to the database, request namespace in testmonitor.
+
+commit 9c97e54af4cebc5ed7a94d137086329bb2cc7329
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 18:07:00 2010 +0000
+
+    libmapper: speed up testmonitor, remove pauses by default.
+
+commit 2a8d87cedca0d47ecde91eef2cf64a58fb3551d2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 17:53:39 2010 +0000
+
+    libmapper: remove commented out code in test.c.
+
+commit c08bbc84a19c2f14ae68c449f8582be58c71f357
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 17:49:04 2010 +0000
+
+    libmapper: remove mapper_router.num_routers and .num_mappings_out.
+
+commit 4d32c4482843f3974e540e5a676e8d0d376bfd02
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 17:48:57 2010 +0000
+
+    libmapper: make sure copied device name gets delimiter in handler_generic().
+
+commit ccf49b470a8980db5d8bd4884badaed366e98adc
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 17:48:51 2010 +0000
+
+    libmapper: display list of all mappings, links, in testmonitor.
+    
+    Does not display everything however because functionality is not
+    completely implemented yet.
+
+commit 245008c6577c171a4a3de8bc05894b3d76938029
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 17:48:43 2010 +0000
+
+    libmapper: fix comments for get_mappings* routines.
+
+commit 0506944c09154130d623af67c6bbffdcba3b0d12
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 16:20:30 2010 +0000
+
+    libmapper: fix the return value of osc_prefix_cmp() when different lengths.
+
+commit 46576d4adce698ed04a6211ca062d9ee9c2868ae
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 30 15:41:39 2010 +0000
+
+    libmapper: Fix up the string handling in handler_generic().
+
+commit c5e8fef4509d842ef9b4ef0e1061133b112b3fad
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Aug 27 22:36:07 2010 +0000
+
+    libmapper: add function mapper_db_get_mappings_by_signal_queries().
+    
+    Replaces previous prototype of
+    mapper_db_get_mappings_by_device_and_signal_queries(), which didn't
+    make sense: the device-name search is embedded within the signal
+    search, since mappings are between signals.
+
+commit 3540fadf33ba7abbc80238adefdb93d9c44a64ab
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Fri Aug 27 21:30:44 2010 +0000
+
+    added handler_generic as a hack to get signals added to the database
+
+commit 215b6fe11b9498e843392ad2c17e0e9820e4b2fd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 27 19:01:17 2010 +0000
+
+    changed handler_signal_modify() to handler_signal_connection_modify()
+
+commit 15677ffa79052e90cb98b48283a86cb89ca65b17
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 27 19:00:41 2010 +0000
+
+    removed admin bus communication from router.c
+
+commit b6e7962ca7e92c1638c9ddd54d343c1ba8faa0ac
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 27 14:59:24 2010 +0000
+
+    when removing mappings, set mapping list to NULL if removing last mapping. Fixes segfault on /connections/get when all mappings have been removed
+
+commit 615af8fb077710cc56ccf15fa099fcadf25fbdfd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 27 14:40:24 2010 +0000
+
+    simplified disconnect handler
+
+commit cf359b623536c47fdbc1ea244de9657909813f7a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 27 14:09:58 2010 +0000
+
+    substituted "signal" for "param" in function and variable names where appropriate
+
+commit 81c501475df656d53bc1fc980c5cfe579644b478
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 27 13:57:21 2010 +0000
+
+    added correct return values
+
+commit a4221a7f47ffdc7dad75a55b26d18640fcf8ca20
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 27 12:05:59 2010 +0000
+
+    apparently forgot to commit changes to router.c
+
+commit d8b360e1302fdc16d4277d1d7df52a1e7f5b2400
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Aug 26 22:51:39 2010 +0000
+
+    enabled "/disconnected" message
+
+commit ebaadcfa95e002ecd24d1117f99ee68f44b5bdbe
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Thu Aug 26 17:02:01 2010 +0000
+
+    added mapper_db.h to install
+
+commit 7cb5ef2474abf0dc04c3325d5831092e90a7aa9e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 25 02:29:16 2010 +0000
+
+    libmapper: add function to find mappings with specific device and signals.
+
+commit 05b36cae8f09c4a7e1e8deb43537441d1260ee4c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 25 02:29:02 2010 +0000
+
+    libmapper: prototypes for searching mappings by specific names or by queries.
+
+commit 064f33cb32e2ba8d0dde47829824b87f09c61648
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 25 02:28:52 2010 +0000
+
+    libmapper: add some functions to query mappings for particular signals.
+
+commit c0067fb182e8f1e97d7ab6ccad9f4b3aa7bb89dc
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 25 02:28:42 2010 +0000
+
+    libmapper: correct the comments for mapper_db_mapping* functions.
+
+commit 0f04d004c6b819ac661cb93ab3fc00300042735f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 25 02:28:32 2010 +0000
+
+    libmapper: move mapper_db_add_mapping_callback() to the right section of db.c.
+
+commit 2f519b68dc291967522d4a4c658771e24b755b05
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 24 03:14:05 2010 +0000
+
+    libmapper: add the basic update function for the database of mappings.
+    
+    Left a couple of fields to fill in later.
+
+commit 0de5973a5344bd6fecdd2a573d43446fc52440d0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 24 03:13:51 2010 +0000
+
+    libmapper: factor out more of the code to update db struct fields from params.
+
+commit 24596085841c4c066d4564b4f344e62e01b49ae5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 23 20:34:53 2010 +0000
+
+    changed enum "error" to "mapper_error" for avoid conflict when building max external
+
+commit 51198259f51a6db7da22d710723a1bfbaba60cce
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 23 16:16:14 2010 +0000
+
+    libmapper: redefine the signal handler prototype to reflect recent changes.
+
+commit c32847185cb1c5f323105895eeed846b15e1798f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 23 14:26:01 2010 +0000
+
+    folder reorganization
+
+commit 47d3b045045f66a9eb05ddef87b5e74396e0f3a5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Aug 22 20:41:28 2010 +0000
+
+    changed insig handler to pass signal rather than device. Also tweaked testrecv.c and testexpression.c (both now work)
+
+commit fd4353a1c0e37085b16efcc8ef2f071cd37b77d9
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 21 21:33:49 2010 +0000
+
+    libmapper: add a test for matching links against all devices.
+
+commit 85ef3c89ef657433c2a5d479de4c9560e6ca84fb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 21 21:31:21 2010 +0000
+
+    libmapper: query links that match lists of source and destination devices.
+    
+    Demonstrated in testdb, the function
+    mapper_db_get_links_by_source_dest_devices() takes two queries that
+    search the device list, and performs them over the link records to
+    return any links that match the source and destination lists.
+
+commit 16a88a44ce61cfd1ca64d5c77c34c64de6251591
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 21 21:31:10 2010 +0000
+
+    libmapper: implement similar database for links.
+
+commit 243f18aff5e710d4253ac5d23e307a143bd3bc5b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 21 21:30:59 2010 +0000
+
+    libmapper: signal callback add/remove functions.
+
+commit 3fb6cf5aa81c9bb15af5cbdeeb1a324faf3e34bd
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 21 21:30:51 2010 +0000
+
+    libmapper: generalize callback list add/remove functions.
+
+commit df199c39d3e6415260d25b5e4f2e64741224430a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 21 21:30:42 2010 +0000
+
+    libmapper: generalize the list iterator function.
+
+commit dfd646dca5599863ac9e7db70aa3ee990fddf7ab
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Aug 19 23:29:41 2010 +0000
+
+    max libmapper object compiles, instantiates, registers on network :)
+
+commit e4ab3e3f6e1f538b11bc6b7cd924e56f391949f7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 19 18:06:29 2010 +0000
+
+    libmapper: generalize the query code by passing in a compare function.
+    
+    Provides general functions for creating and freeing query context from
+    a variable number of strings.
+
+commit 0eefdc6ee6aebd384c034a1961aa3ee90bebdf2e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 19 18:06:23 2010 +0000
+
+    libmapper: use a function to prepend an item to a list.
+
+commit 14d81a80b33b2e951ed28012911920f3ccae0a65
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 19 01:25:01 2010 +0000
+
+    libmapper: add internal input and output signal databases with queries by device name.
+    
+    Currently choosing to put a pointer to the device name in the signal
+    struct, but we have to be sure to manage this properly and avoid
+    double-freeing it, since signals in the database will have their own
+    string, but signals belonging to local devices will point back to the
+    device's string. (Or we could leave them as null.)
+    
+    This patch doesn't yet add any handling for the
+    /namespace/<input,output> messages.
+
+commit 9ef8e59646e46b2b0dde33b419964f1b03ff8e9b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 19 01:24:47 2010 +0000
+
+    libmapper: Rename mapper_db_add_or_update_params -> ..update_device_params.
+
+commit b677fa8764a4f6a94ca151d51592e223b2b296e6
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 18 21:54:01 2010 +0000
+
+    initial (non-working) commit of libmapper max external
+
+commit e68b5a9d380b3d0541a8ad83b17fd137793474ab
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 15 19:03:44 2010 +0000
+
+    libmapper: use mapper_mapping_set_linear_range() during calibrate.
+    
+    Changes it to take a pointer to the range structure and handle
+    partially-known range parameters correctly.
+
+commit 7128248cfc82d067187fc91d697631fb70a9e545
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 15 18:08:05 2010 +0000
+
+    libmapper: fix a return value from mapper_mapping_perform().
+
+commit aacc07ebc259f1e54c2a79ce602bd97fe3b2e612
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 13 22:19:33 2010 +0000
+
+    fixed routing of signal from mapping to clipping to output
+
+commit 4c33f334f06b427c0818de2bab8a7aaf424788e8
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 13 21:53:35 2010 +0000
+
+    better solution to "@scaling expression" property without supplied expression. Also filtering mapping output by muted property.
+
+commit b03d4972854b727a1defafd192cfbe46e7d441b0
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 13 21:35:41 2010 +0000
+
+    changing scaling type to bypass should not change stored expression. Bypass mode indicates that properties are ignored but remain unchanged
+
+commit 74c0d031c43294d0537ce791f7d1cd92dbd359cd
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 13 21:31:07 2010 +0000
+
+    allow changing scaling type to expression without changing expression
+
+commit 0261db9d9f4045de37802ef828a5ea7ce516a103
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 13 19:05:27 2010 +0000
+
+    fixed overwrite of ranges in mapper_mapping_set_from_message()
+
+commit 63974b78a56a80a6f3b5f4d5c219b2adfcb7659c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Aug 13 19:00:38 2010 +0000
+
+    updated /connection/modify handler
+
+commit 8f731629946d0f9169676a3b0bb861a35d2daf87
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Aug 13 02:41:55 2010 +0000
+
+    libmapper: proposed API for matching items in the database.
+    
+    Devices, signals, mappings, links.
+
+commit b40f3e30f6f0ef9d2ab4c87c01afab5b044e9912
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 20:49:33 2010 +0000
+
+    libmapper: split off the signal struct "properties" into a db struct.
+    
+    Similar to the previous commit, we need to be able to describe
+    properties of a signal independent from the signals actually used by a
+    device.  These "properties" are different from the signal "state" like
+    its current value.
+
+commit e16bd683017a13ef74b1b2f9722efd76fb40d774
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 20:09:23 2010 +0000
+
+    libmapper: move parts of the mapping struct into a public header.
+    
+    We can reuse the "properties" portion of the mapping structure as a
+    public struct returned by db queries.  The "state" portion remains an
+    internal type.  This unfortunately means that access to properties of
+    a mapping require "props." prepended everywhere..
+
+commit bc9810d8003b04b00315228dba5b39b8328afd7c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Aug 12 19:29:34 2010 +0000
+
+    added /connected message responses with properties. Also tested clipmodes
+
+commit abcf92f6e57d140992b53f69e330c6e09f22084d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 05:05:59 2010 +0000
+
+    libmapper: overhaul of the /connect_to handler, set mapping properties in mapping.c.
+    
+    Keeps basic handler in admin.c, but moves construction of mapping
+    properties from the message parameters into mapping.c.  Lays out
+    parameter handling sequentially (with a specific sequence for dealing
+    with range information from the various possible sources) and uses
+    functions on the mapping struct to set the properties; these are split
+    off from the router_add functions in router.c.
+
+commit 3abb8bace23ef1cc8b22934bc069e7a8ceed72c5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 05:05:50 2010 +0000
+
+    libmapper: handle target _signal_ name in mapper_router_find_by_target_name().
+
+commit 6012400c80f562ffdcf7747cd4ebed210e65f2a0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 05:05:43 2010 +0000
+
+    libmapper: fix device and signals names in testlinear.
+
+commit 4072d2e3422b4543ae17d0c22cb629c5167636f5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 05:05:36 2010 +0000
+
+    libmapper: change mapping 'type' to mapping 'scaling', prepend SC_ prefix to enum.
+
+commit 39c3ebac9cc3d64b235b7ee38837efe88fb7f2fe
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 05:05:26 2010 +0000
+
+    libmapper: make get_expr_Tree() take a const string.
+
+commit ac61813fa51a23968fb1aafa4e59638bdaf060c7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 05:05:18 2010 +0000
+
+    libmapper: add admin name to a couple more traces.
+
+commit b652239212f70f637be2f555e6b9eaf2f66259f2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 12 05:05:11 2010 +0000
+
+    libmapper: fix, endless loop in mapper_router_find_by_target_name().
+
+commit 6075d7c0d8191ce71a879f581688453d28310b95
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 11 16:56:34 2010 +0000
+
+    libmapper: move find-stuff-by-name loops in several handlers into functions.
+
+commit f5fd980bf4b7b0de708d5e66ef43bf7244769969
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 11 16:56:22 2010 +0000
+
+    libmapper: avoid unnecessary strcpy in /link, /linked, /unlink, /unlinked handlers.
+
+commit dfac9cbf49c99769b979e33613d47d6cb7b89189
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 11 04:11:26 2010 +0000
+
+    libmapper: use double-pointers as iterators to walk through a database query.
+    
+    The user must dereference the pointer twice to access the record, and
+    he passes it back in to get the next result.
+    
+    Some nice properties of this approach: In the case of walking all
+    records, no memory allocation is necessary.  In the case of searching,
+    a continuation context is passed to allow lazy computation, and
+    reduced memory allocation compared to the eager approach since the
+    iterator is reused.  Both cases are transparent to the user.
+    
+    A test program 'testdb' is included.
+
+commit f87189cc91a87014c6efcc65de05c6d5eb05dc1c
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Tue Aug 10 22:18:29 2010 +0000
+
+    corrected second(sigh) _cplusplus to __cplusplus
+
+commit e9a1d3933ff6884125abc97f3014e76a02646f07
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Tue Aug 10 22:15:11 2010 +0000
+
+    corrected _cplusplus to __cplusplus
+
+commit 5001c8be65cb49aa11431da0d49e3420c6d96aed
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 10 21:43:45 2010 +0000
+
+    quick rewrite of /connect_to and /connection/modify handlers, adding modification of clipping properties. Runs, but some weirdness to be debugged in the signal output
+
+commit 5445049a2db9b9a4d7945d899a36c1149f325348
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Tue Aug 10 21:30:49 2010 +0000
+
+    oops, my bad, broke build
+
+commit 741e98d6ed59b5cef5d176c330ffa25e24c8dd36
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Tue Aug 10 21:29:34 2010 +0000
+
+    Added extern C enclosures to allow c++ to link into library
+
+commit 16e624b95b9f871253e68ed97c988145b4fcff5b
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 10 21:23:31 2010 +0000
+
+    initial commit of clipping functionality
+
+commit 2bea47b26dd58b056f551e08372d935c8103269a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 19:34:57 2010 +0000
+
+    libmapper: add a callback system for modified db records.
+
+commit 129690efdbd490279be5a9aeafcd036e2096e0c5
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 19:01:31 2010 +0000
+
+    libmapper: remove bad "#define DEBUG" from header.
+
+commit 598f37ff40a9795040d909b40df10c5968d7fba6
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Tue Aug 10 18:22:01 2010 +0000
+
+    Added mapper_db_update_new_device_cache function to db.c for use with gui
+
+commit 43df3175c4cf48f8d9b5156d3b351eb0c25213d3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 10 17:47:31 2010 +0000
+
+    substituted calls to mapper_admin_name(admin) for some unnecessary string-fu
+
+commit dfeee31c91a2c6ac88257a56180b5bea414698bf
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 17:15:21 2010 +0000
+
+    libmapper: forgot to add the testmonitor program!
+
+commit b195323ca58aa470530f3bf42248283f3eb0ab91
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 14:53:44 2010 +0000
+
+    libmapper: put compiler/linker flags into variables in test/Makefile.am.
+
+commit 61e9fbf1d73ac9d5da2e33a4e7ddebce6656665f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 14:50:54 2010 +0000
+
+    libmapper: add a small test program to clearly monitor the device database.
+
+commit 68170a61cb652386c4c9c42ad825bd2124209ae2
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 10 14:06:02 2010 +0000
+
+    updated psuedocode documentation of max allocation algorithms
+
+commit b8543a1318371a33332e5ceb6260fcbcd4c5f6ca
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 13:31:30 2010 +0000
+
+    libmapper: tabs to spaces
+
+commit 103b74608f633b5652219a3367dc85a8548698ba
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 05:13:24 2010 +0000
+
+    libmapper: handle /port/registered and /name/registered.
+    
+    Resource allocation should work again.
+
+commit 1e926007bd08bd30520e7da2ef07b75333ceeec4
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 05:13:17 2010 +0000
+
+    libmapper: collision_count should be signed, since we use -1.
+
+commit 3821cf1d41fbc84173fb77b6b8cd1d5ae0dca5ad
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 05:13:10 2010 +0000
+
+    libmapper: fix out-of-bounds string copy in update_device_record_params().
+
+commit 297ad17b5cc0e4fea91d75ac55456623ce19e8b7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 05:13:03 2010 +0000
+
+    libmapper: seed the random number generator (and use modulo).
+
+commit 75503fc4b46c21aef84f93592b851968766c5331
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 05:12:55 2010 +0000
+
+    libmapper: don't continue with test code unless devices are ready.
+
+commit 930171de85721d56a56c59391d0b263a826c87ca
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 05:12:46 2010 +0000
+
+    libmapper: Add device names to debug tracing.
+
+commit a4fff7b445389c68f545b6be3004156fb0940e3b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 10 05:12:39 2010 +0000
+
+    libmapper: fix, if device server does not start, don't try to add methods.
+
+commit 254b9d8f5c5099100a8e94182c20f536dd633601
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 9 21:56:31 2010 +0000
+
+    libmapper: use parameter parser in /link_to handler, adds some param helpers.
+
+commit 5870e5b4e2c5d7045e4d5b1ddff0c066ce7da950
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 9 21:05:36 2010 +0000
+
+    added device /logout message
+
+commit aacffe7fb79d3088d2629abc8d26bea98ebe4355
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 9 20:35:43 2010 +0000
+
+    libmapper: change printf to trace, remove extra printfs.
+
+commit e5248e0a98c29f936a35ec3f4492fa83f3378603
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 9 19:52:51 2010 +0000
+
+    fixed memory allocation bug causing strange expression parsing
+
+commit b7c38f6619bfbc096a0223ef22e5277b3613c487
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 9 19:03:18 2010 +0000
+
+    libmapper: move db find function to external API, and use friendlier names.
+
+commit 26e9ee140f6c54bf0b92bf67f83d4b0806c1494d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 9 18:14:10 2010 +0000
+
+    added handlers for:
+    /logout
+    /linked
+    /unlinked
+    /connected
+    /diconnected
+
+commit e216c5f7151cc80c7117f90dc8a2712c8c69bcde
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Mon Aug 9 16:52:19 2010 +0000
+
+    added casts to various mallocs in order to comply with stricter c++ rules
+
+commit 68cfe9b5225e241f3f3ab642867fb3f9b70a903e
+Author: Vijay Rudraraju <vijay326 at gmail.ca>
+Date:   Mon Aug 9 16:38:57 2010 +0000
+
+    added casts to various mallocs in order to comply with stricter c++ rules
+
+commit fcd917550674899ac3664cf4447fae31fd9e5067
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 9 02:12:01 2010 +0000
+
+    libmapper: enable device database and fix it up to use parsed parameters.
+
+commit 46ce12f51a77ac84b1dbe19cea707df240badfd2
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 9 02:11:51 2010 +0000
+
+    libmapper: roll back changes to the admin.registered field.
+
+commit 394ea8fc30e52b5c8db8bd5d48280e1fcb83c3cc
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Aug 9 02:11:43 2010 +0000
+
+    libmapper: replace more lo_send() calls and note why we don't do it sometimes.
+
+commit 88d11913b9265863eeb80c91929515ad0c93a6c6
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 8 21:50:24 2010 +0000
+
+    libmapper: move admin's OSC handler connections into a struct.
+
+commit 05f021573bb687c3d99a54a8f72b72103dbd668e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 8 21:23:56 2010 +0000
+
+    libmapper: replace lo_send() calls with a function that knows the @-parameter format.
+
+commit 6d0aef4e0b46e753bd3c09c9f1d5c0fd4df6c8db
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 8 21:23:48 2010 +0000
+
+    libmapper: add type information to parsed parameter struct.
+
+commit c3ccd0150ffb3da0faf4f72be9b1b417c72b9bd8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 8 21:21:21 2010 +0000
+
+    libmapper: fix extra slashes at the beginning of admin messages.
+
+commit c27693ac7c0ad7ac53159f69d2a41ad80108e807
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 8 21:21:14 2010 +0000
+
+    libmapper: use direct array access for message parameters.
+
+commit 1bdfa29f2c7df5d90ba1f88ed17b3baf8d4a5499
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Aug 8 21:21:06 2010 +0000
+
+    libmapper: add an assertion macro for debugging, "die_unless()".
+
+commit b880fa60e8cd157d2aa7d8355837bab095723a85
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 7 21:59:23 2010 +0000
+
+    libmapper: Add an internal API for parsing message parameters.
+
+commit 5f1193ee7c638c7df0d1e351eb97f6fa1af38e3c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 7 20:13:29 2010 +0000
+
+    libmapper: Move code that keeps network device info into its own file.
+
+commit 984b3fe76a3d3e293685c83bce6d255ea4524f79
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Aug 7 20:13:14 2010 +0000
+
+    libmapper: fix, msig_full_name() didn't properly null-terminate the string.
+
+commit c131bc231f2caec4671ef719f065a28a56190322
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Aug 6 17:38:30 2010 +0000
+
+    libmapper: fix segfault, initialize admin.name member.
+
+commit 204a8dae583543551a5923d7586e0ee02ac002df
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Aug 5 20:22:35 2010 +0000
+
+    libmapper: ran everything through 'indent -kr -nut', with manual clean-up.
+    
+    Everything now fits in 80 columns, no tabs, 4-space indentation.
+
+commit c0b08d23e78cf08b2f4d61be0a1007087541d76a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Aug 4 18:53:12 2010 +0000
+
+    handler_device_alloc_name() now only calls on_collision() if the device names match
+
+commit 2f65eb856e4c3866f20a31b8078bf50e7d60f599
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 17:39:23 2010 +0000
+
+    Move the STK synth out of the libmapper directory.
+    
+    It uses libmapper, but it is not part of the library.
+
+commit 85618290ac30a2a6f1def60671b51ca78944ac57
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 17:38:04 2010 +0000
+
+    libmapper: remove executable of the STK synth.
+
+commit 95e9e62cd8dc6a7573d0c34719c8e9d5e8004906
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 16:45:38 2010 +0000
+
+    libmapper: fix, missed one reference to device type enum which was removed.
+
+commit 9f34073f0073b566f24379168aee3d14f841d789
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 16:44:43 2010 +0000
+
+    libmapper: fix, forgot to add ..linear_range.. and ..linear_scale.. to header.
+
+commit d0dc6a2ed4283586ea3be0f2f785daf22ea7420a
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 16:28:30 2010 +0000
+
+    libmapper: Move mapping range info into a substruct and use a "known" bitfield.
+
+commit e251cfbd260ae43816e077e68c5036573876f0fb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 16:28:20 2010 +0000
+
+    libmapper: for linear mapping, calculate a scale and offset.
+
+commit b5281f28ed3e771c69519a62321886538f67bdb6
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 16:28:12 2010 +0000
+
+    libmapper: get rid of the device_type enum, which is not used.
+
+commit 4e02d19371af45fd6b395c958654b06257430ce1
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Aug 4 01:24:52 2010 +0000
+
+    libmapper: Fix all warnings, mostly unused variables.
+    
+    Now possible to use ./configure --enable-debug again, which turns on -Werror.
+
+commit 8320ae3e47e488327d1739f6528771c29251aa09
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 3 22:30:04 2010 +0000
+
+    overhaul of /connect_to handler
+
+commit ce22faff851c520b76566b550dcfd567c99db067
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 3 22:02:55 2010 +0000
+
+    added mapper_router_add_blank_mapping function
+
+commit e863a27f5a318edbea94dd9e90d869ba7a04ab0c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 3 22:01:30 2010 +0000
+
+    moved /connected message to mapping creation functions
+
+commit 52837b7c385893e8548f6eaa7e07c22f240b5c89
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 3 21:10:06 2010 +0000
+
+    libmapper: function to build device name from prefix and ordinal, use everywhere.
+    
+    Previously this was done with sprintf everywhere.  Now this string is
+    built once and cached for later uses.  The function is internally
+    called from a macro to help catch instances where it would return
+    null, i.e., if the ordinal is not yet registered.
+
+commit af4a93957d424301b8ad2cc6f4b6d9bc311b6f98
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 3 21:07:36 2010 +0000
+
+    libmapper: rename 'announce' functions to 'probe' and don't specialize in on_collision().
+    
+    Since proposed resources are announced using the '/probe' message, as
+    differentiated from registered resources that are announced using the
+    '/registered' message, it is better if the source reflects this
+    terminology.  Now instead of a specialized switch in on_collision(),
+    we can use a callback to handle formatting the '/registered' message,
+    so that the resource-allocation logic remains independent of message
+    formatting.  (e.g., the name.ordinal needs special processing to
+    format the '/registered' message.)
+
+commit ea00bb51b9530b84d1b75c557da13bc32692eb5e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 3 15:53:54 2010 +0000
+
+    libmapper: re-enable older test programs.
+    
+    Some of these currently segfault, revealing some erroneous pointer
+    operations in the library.
+
+commit e26591d36795e75e638eaffde80c185500a7b91b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Aug 3 14:36:21 2010 +0000
+
+    libmapper: Fix crashing on connect, bad arguments to lo_send().
+
+commit 3459c8e14ba4a3b24808b18cf6120181da4f936e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Aug 3 13:07:28 2010 +0000
+
+    progress: compiles and runs, but segfaults on /connect
+
+commit f83e51fba5d3537e5d66adb195fcef9588e068a9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Aug 2 21:14:14 2010 +0000
+
+    simplifying creation of mapping connections - do not compile :)
+
+commit a05300b0d724c28e959f82bf6e92a49b1a83378c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sat Jul 31 23:04:26 2010 +0000
+
+    libmapper: added /<device>/connections/get handler
+
+commit 3a5ba8690fad4e29c5962863abc3d09c6b3ce669
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 29 18:26:24 2010 +0000
+
+    admin.c: added /links/get message handlers
+
+commit ed6354d53ee5c676b874622ba4fcdee2f03f7e4c
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Jul 29 18:13:56 2010 +0000
+
+    added /link and /connect automation to test.c
+
+commit a528e7f2d5b6306ca73bc8e34c45efd72a1dc868
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Jul 28 21:50:24 2010 +0000
+
+    Add the pkg-config m4 script for autoconf to the repository.
+
+commit 89d50cf432009e735a0dbf4a1c3eba3d2a3971d9
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 28 21:17:07 2010 +0000
+
+    can now correctly create a mapping with non-default properties, but segfaults unless you create and delete default mapping first
+
+commit 2e44c4d23b4c4889239a58accd72472b85036254
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 28 20:38:54 2010 +0000
+
+    added GUI OSC messages
+
+commit 5f041876f5021c9b628af4cb5e576b8cc412b686
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 28 20:38:26 2010 +0000
+
+    added GUI OSC messages
+
+commit bd8d203356a37e163e3d5a9fe612b8993822f535
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 28 20:14:24 2010 +0000
+
+    libmapper: fixed bugs in /connect_to function when called with additional properties
+
+commit d2624a5d91a55834f32f45267a29b84a90381c3a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 28 17:56:01 2010 +0000
+
+    libmapper: added range invert
+
+commit 4a6e843e497f13c4f37416b6475701bf878d5645
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Tue Jul 27 22:51:41 2010 +0000
+
+    libmapper: added support for "calibrate" scaling type, autocalibration. Also switched expressions generated in "linear" mode to %g to truncate trailing zeros in expression string
+
+commit 8d27bab9ec69f3ec5222dec26077de4ecba27a9d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 25 02:11:52 2010 +0000
+
+    reverted some unnecessary changes (from 2068)
+
+commit 2547a9220065f3b6684e0590b3c0f2c7c89f5795
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jul 25 01:50:19 2010 +0000
+
+    - test.c now runs successfully with /link, /unlink, /connect, /disconnect, and /connection/modify.
+    - router struct now stores parameter name without device prepended
+    - /link, /unlink, /connect, /disconnect, /connection/modify handler functions now check for OSC address matches before searching their parameter-space
+
+commit 1c88f504bac9953bf3da5d3cc518534d9510f9a3
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 23 20:03:12 2010 +0000
+
+    /connect_to now working properly
+
+commit 19ff999454b4ed9f305e124d9f2751ef2804442f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 23 18:28:17 2010 +0000
+
+    /connect now working properly - still some problems with /connect_to
+
+commit aecf619aa20e822e464bcdfdd1937916b2f68e0d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 23 13:42:12 2010 +0000
+
+    small changes
+
+commit 27311db5482bd49d87481fe1e30c39aca340ee0f
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 21 02:57:27 2010 +0000
+
+    only destination device responds to /connect message. Signal type still not reported correctly
+
+commit c12e91276d64984af83fb45d84e886fb3ab666f5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jul 21 02:56:31 2010 +0000
+
+    added signal type to data structure
+
+commit 17015f174d1ffd57dd9c3a8877b9dfcfd292fefb
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Jul 20 18:06:43 2010 +0000
+
+    Remove executable permission from C files.
+
+commit 60e018e4e8e2e346e55d80f24b7c01a4b0f2d3d1
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 19 22:35:41 2010 +0000
+
+    cleanup
+
+commit fb14211e48da703d0ed1de0499c12af42c809a85
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 19 22:02:21 2010 +0000
+
+    modified /link protocol to work without storing all device metadata
+
+commit 05d15e2fb9025309ac3bd3636c73f0f04e7a9821
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Mon Jul 19 19:53:59 2010 +0000
+
+    updated definition of mapper_clipping_type
+
+commit ee393e7559a5a1ab05db8d8f6f56c94e3387fa0e
+Author: Jérôme Nika <jerome.nika at gmail.com>
+Date:   Sat Jul 17 00:27:00 2010 +0000
+
+    B3 synth
+
+commit ccf1afc46702bc5dcd92f6cc9efa141da42416e7
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 16 20:16:13 2010 +0000
+
+    added Jerome Nika to libmapper AUTHORS
+
+commit b52b3858a9b64e5602fdcf91223d5beb20482bdf
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Jul 14 21:05:09 2010 +0000
+
+    Add a clean command for pkg-config file.
+
+commit 5df58fdfb8ad9c154114ebf3dcbec3a7e4abc67b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Wed Jul 14 21:05:03 2010 +0000
+
+    autogen: Use git to check for git.
+
+commit 9e4b1e31ef7ed326c51bf61e658ff4a8412220be
+Author: Jérôme Nika <jerome.nika at gmail.com>
+Date:   Tue Jul 13 15:32:21 2010 +0000
+
+    Problems in /disconnect fixed.
+
+commit 5a519fb01be6911e012062c091897718066e976c
+Author: Jérôme Nika <jerome.nika at gmail.com>
+Date:   Wed Jul 7 20:51:04 2010 +0000
+
+    (Almost) final version. Last methods implemented, commented, still little problem with /disconnect...
+
+commit cb8b259198ca33e49061f7a2fdafae93c64992a3
+Author: Jérôme Nika <jerome.nika at gmail.com>
+Date:   Tue Jul 6 22:31:47 2010 +0000
+
+    unlink, unconnected. With /unlink, /disconnect, properties for /connect_to, /connexion/modify
+
+commit 0b403004093345ae831fcbfd87c2d19d892406bc
+Author: Jérôme Nika <jerome.nika at gmail.com>
+Date:   Mon Jul 5 16:24:57 2010 +0000
+
+    Unlinked and unconnected.
+    Properties added for /connect_to, /unlink and /disconnect implemented but still problems with /disconnect.
+    Missing /connection/modify, and still "unreadable"...
+
+commit f150ee79100b23dd60a5504780a6cbaef08c5d7a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Jul 2 17:02:41 2010 +0000
+
+    update to DOT protocol documentation
+
+commit 274ef7fc45935da5c0230fbaa3034fc00348f558
+Author: Jérôme Nika <jerome.nika at gmail.com>
+Date:   Fri Jun 25 16:14:38 2010 +0000
+
+    Unlinked and unconnected version (not yet commented and organized)
+
+commit d7e808a56472602243818458b40b0451ac0d8144
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Jun 17 21:10:32 2010 +0000
+
+    configure: Check for swig and python-config instead of using SWIG_PYTHON macro.
+    
+    It seems AC_PYTHON_DEVEL (used by SWIG_PYTHON) is broken on OS X and
+    Debian/Ubuntu, because it provides compiler flags that don't
+    successfully compile, and it hasn't been maintained since 2006.
+    Instead, use the python-config program to extract required Python
+    flags.  Check for python-config only if SWIG bindings are specified,
+    and use AC_CHECK_PROG to find the swig executable.
+
+commit d3a951ec5039c6d0379e04bcf66108d5b319f517
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Jun 17 21:10:27 2010 +0000
+
+    Depend on an older version of libtool (for OS X)
+
+commit 6af4ac29c8178b507e104b2c1a38bd80dd475e64
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Jun 15 16:25:57 2010 +0000
+
+    configure: Check for programs according to enable options and describe status when done.
+
+commit da9c18f7a05882dbca4aad25ad20b299621020ca
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Jun 15 15:46:49 2010 +0000
+
+    Warn about problems with libssl and libcrypto packaging if Python needs them.
+    
+    Found an annoying problem with compiling against Python.  The
+    configure check would fail because it couldn't link against libssl and
+    libcrypto, neither which is used here.  However, Python wanted them,
+    but the symbolic links for these libraries were not present on
+    Debian-based systems even though the packages are installed.  It turns
+    out the dev packages for these libraries must be installed for
+    AC_PYTHON_DEVEL (which uses Python's distutils to determine library
+    dependencies) to be satisfied.
+    
+    Solution is to either not use AC_PYTHON_DEVEL or to just warn the user
+    that these dev packages need to be installed, so I chose the latter.
+    Unfortunately AC_PYTHON_DEVEL (called by SWIG_PYTHON) doesn't give us
+    an opportunity to provide a message on failure, so we have to add the
+    warning just before calling it.  This doesn't seem to be a problem on
+    OS X, but more testing is needed.
+
+commit 779c1cf4c3ef8f2bd301cd9a34b9ccc14c95e354
+Author: Jérôme Nika <jerome.nika at gmail.com>
+Date:   Mon Jun 14 17:18:14 2010 +0000
+
+    version with expression interpreter with the string received from the terminal
+
+commit a756ebcdbcdf4dd11ff3877de358e2952cedea76
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Jun 9 21:17:41 2010 +0000
+
+    updated mapping message documentation
+
+commit aeef83f402598d6d8dd3a88233bd0d46d058dc90
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue May 4 03:58:22 2010 +0000
+
+    Move signal mapping into its own function, and account for higher-order polynomials.
+    
+    Note that this assumes coefficients are floats.
+
+commit 4f59ff5acf7d896259e3b9723cc81946b1352f95
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue May 4 03:58:17 2010 +0000
+
+    Typo in README.
+
+commit d6471c2c7b9bfbbbf3f9aa515f302d09a4c87cca
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Fri Apr 9 04:09:27 2010 +0000
+
+    changed logout message from "/device/logout" to "/logout"
+
+commit 1eb353cbab86d3b1089599460baf1199fa147b0e
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Thu Mar 18 22:02:40 2010 +0000
+
+    update to DOT message documentation
+
+commit 6b88d68a57483fd3eb71124bd8faf062fe48803a
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 17 19:10:05 2010 +0000
+
+    removed /connection/properties message - replaced with /connected
+
+commit 646cf7e019e827b286fd2dc2188b4740bf02d147
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 17 18:30:59 2010 +0000
+
+    updated documentation of mapping messages to include 2-stage connection, @canAlias and @hash properties
+
+commit 91ba3c09509d13f9a6726d909fd3aaa778814b3d
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Wed Mar 17 17:52:09 2010 +0000
+
+    corrected documentation of mapping messages
+
+commit 9e766c8f76ec8b8149b66d09249ba99592b515b5
+Author: Joseph Malloch <joseph.malloch at gmail.com>
+Date:   Sun Jan 10 21:53:28 2010 +0000
+
+    added message documentation to libmapper/notes/
+
+commit 9c45f1ba44e1a48e0aa68707edea3fa38d859b44
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 4 05:22:19 2010 +0000
+
+    Add data structures for mapping behaviour and do a linear scaling.
+
+commit 486da6c09d9fdd03617f075508168800027e1712
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 4 05:22:14 2010 +0000
+
+    Add a test for sending and receiving through a linear mapping.
+
+commit 83c23ef3f3e096bc165b5acd66666c91c3f0173b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 4 05:22:09 2010 +0000
+
+    Fix erroneous doxygen comments in types_internal.h.
+
+commit f911e4017c106573f4a9e8ce817caa5b53b9b847
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 4 05:22:06 2010 +0000
+
+    Add necessary files to compile a Doxygen internal reference.
+
+commit b29f3509fcb22fe174afe3331ae40589d899cd41
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Mon Jan 4 05:22:01 2010 +0000
+
+    Add a debug trace if no interface was found.
+
+commit 6136d415b17c9276fac29bcee34421dede89e43c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 2 20:55:39 2010 +0000
+
+    Make testrecv wait for and use the signal name.
+
+commit 81d2b5d7a6e1fdf040840f7b7f1753b2aa55d7f6
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 2 20:55:34 2010 +0000
+
+    Wait for both ordinal and port to be allocated before starting server.
+    
+    Otherwise msig_full_name() may return error after port allocation but
+    before ordinal allocation, and handlers can't be registered.
+
+commit 2defc5a12ce0f0579427a0250d5fa6183f2cf9d9
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 2 20:55:25 2010 +0000
+
+    When polling admin, process more than one message at once if available.
+    
+    Processes maximum 10 messages, probably adequate for now.
+
+commit 90b420f992f02196a7984a12dc172c8742960f4b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 2 20:55:19 2010 +0000
+
+    Add a function to get the name of a signal.
+
+commit 57c086eb6e27046e48a1ef7b64caa7d0eb2c6e36
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 2 20:55:14 2010 +0000
+
+    Handle error condition when admin cannot be created.
+    
+    This occurred when an old version of oscdump was used, and the port
+    was reserved non-multicast and thereforenot available.  Instead of
+    segfault, mdev_new() should return NULL.
+
+commit f3e262934197e4cea79f977633cda9bf328d6db7
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 2 20:55:02 2010 +0000
+
+    Add a debug option to configure.
+
+commit 1c69f86ef3874f0742e4c812b20a9b8f5280024f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Jan 2 20:54:41 2010 +0000
+
+    In get_interface_addr, encountered a case where sa=0, so check for it.
+    
+    It doesn't seem to be documented what to do in this case, but it would
+    seem natural to at least report the condition in debug mode and then
+    skip the case.  (Instead of segfaulting.)
+
+commit d7013eaa57ae42c2d309ca594c948207ce923e21
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 06:46:48 2009 +0000
+
+    Work around an apparent bug in gcc's optimizer, which breaks grow_ptr_array on O2 or O3.
+
+commit 44c7ba1656743949b1e932fc6367457f58eea225
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 06:22:58 2009 +0000
+
+    Fix using wrong value (dumb mistake) in mval_add_to_message().
+
+commit f02c0683168d360da3b064ddb18ab023dda67bec
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 06:22:55 2009 +0000
+
+    Do not install test programs.
+
+commit 3f96a48fb485ca604d7c4807b78a6aa4b7d0ea9c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 06:22:52 2009 +0000
+
+    Put header files into mapper-0/mapper directory and include extra headers in dist.
+
+commit ece1c8e8d2886c2fc617042c8cc87dc88b6e304b
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 06:22:47 2009 +0000
+
+    Fix trace macro in non-debug mode.
+
+commit df74164dee7a6d618fb41d189e0365999d621182
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 05:17:24 2009 +0000
+
+    Rewrite enumeration of device namespace.
+    
+    The code to do this is in admin, accessing device data structures.  If
+    more cases are found where namespace enumeration would be useful, it
+    might be better to provide an enumerator interface for the input and
+    output lists.
+
+commit 46900773846c619ebbf544105a29f42aac52085f
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 03:55:39 2009 +0000
+
+    In testrecv, send messages in test and actually check whether they were received.
+
+commit d6bbce06228d855cc040465aefdbd31f19f08a97
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 03:22:50 2009 +0000
+
+    Add functionality for specifying receive handlers and opening a server.
+    
+    This commit also refactors the 'trace' debug function into an
+    internally global macro.
+
+commit c867b3c50d8ca3480307d3aa4022dd327c06ed09
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 03:22:15 2009 +0000
+
+    Add a callback field to the signal struct to be used for handling input.
+
+commit 40f2f3b73472f52c9fd314be5e1696990cf331fd
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Tue Dec 29 03:21:19 2009 +0000
+
+    Move controller and admin tests into their own test programs.
+
+commit 6657c004c0c2ad3510a8b3d605889b195012d252
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 25 21:54:36 2009 +0000
+
+    Add functionality to maintain a list of signal mappings.
+
+commit e0d25bf37b8cbfa6fcf592cd82f945c348236f95
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 25 21:54:33 2009 +0000
+
+    Change some string pointers to const.
+
+commit 67c1cbfd074e4e86b116adde8176c9c8030351a0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 25 21:54:30 2009 +0000
+
+    Add some internal structs to handle mappings.
+
+commit ad0cf488dd72f0cf1868469614a80ca7a47bd719
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 24 01:18:22 2009 +0000
+
+    Fix some warnings.
+
+commit 614243f279cca2eb1d2b2a512b03362a1d94cf45
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 24 01:18:21 2009 +0000
+
+    Mistaken double-pointer type for router list in device struct.
+
+commit 342027fecf0d6e2dd6da3a4a3df72f2a4b78ab3e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 24 01:18:19 2009 +0000
+
+    Put 'mapper_' prefix on router routines.
+
+commit 98e71c692f3203be23f4ef4cf071c8aa4f296ff3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 24 01:18:17 2009 +0000
+
+    Add a define to configure.ac to avoid conflicts with pyconfig.h.
     
-    Upstream version 0.3~git+20140610
+    This is a work-around for an apparent annoyance in Python's header
+    files.  "configure" would fail because Python also defines
+    HAVE_GETTIMEOFDAY.
+
+commit a1e5a40a4db296e95f933b2c28185db869dc4d6d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 24 01:18:15 2009 +0000
+
+    Remove test2.
+
+commit 5317644346966fd9e8198d4a68ede62514156a1c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Thu Dec 24 01:18:13 2009 +0000
+
+    Forgot to add router.c in previous commit.
+
+commit 9ebaa11f364532e4dd7202115cfedf508252ee5e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 18 05:14:59 2009 +0000
+
+    Add a skeleton router interface.
+
+commit 955e9105a7ed081b16a455ed9d04c1496078c58c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 18 05:14:58 2009 +0000
+
+    Add a liblo error handler for admin server.
 
-commit 5a9bb46a69ddd0ee6ec9f49ba77d5c7e953dcccb
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Jun 17 20:20:36 2014 -0400
+commit 0b89fa7051c77ced4c94b1dd396c2e08408dc8ef
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 18 05:14:56 2009 +0000
 
-    Imported Upstream version 0.3~git+20140610
+    Call msig_update_scalar() during controller test.
 
-commit 9cbae78f67a53f15da25ad7b630dcc3ff630e6e8
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Jun 17 20:20:21 2014 -0400
+commit 6d5d22857a052caaac7a9071e3a1bfe7fa81f4e0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 18 05:14:54 2009 +0000
 
-    Imported Upstream version 0.3~git+20140610
+    Actually block in mdev_poll() if requested.
+    
+    (This will change to a lo_server_recv_noblock() call in the future.)
+
+commit 82320ee6770ff80973c9ebe3cc4c337fd1da8c64
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Fri Dec 18 05:14:52 2009 +0000
 
-commit 3618d19329c4c6419325000e3a7d0e2d4e272d31
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Jun 17 20:20:18 2014 -0400
+    Add function prototypes for updating signal values.
 
-    changelog fixes
+commit ab25b2a34346a7e5748d96a7fe228a478efc566e
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 6 05:12:52 2009 +0000
 
-commit e0ac9b8d9947fe58be160d9aedc376576851d2c9
-Merge: aca7e43 c203d3b
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Jun 17 19:28:53 2014 -0400
+    libmapper: Forgot to remove a line in testmapper testing the name assertion.
 
-    Merge tag 'upstream/0.3_git+20140610'
+commit 250b996d2c2ee3d4b44ce37df4355c66c6a8338d
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 6 03:37:33 2009 +0000
+
+    libmapper: Add an interface to fill in signal definitions easily.
     
-    Upstream version 0.3~git+20140610
+    Perhaps this could be used to just directly register signals?
+
+commit bbf2c499eb0f747e8e4145b3ab43e39aebabf58c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 6 03:37:31 2009 +0000
 
-commit c203d3b2427fd7257a897a0debc548e2902310a9
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Jun 17 19:28:52 2014 -0400
+    libmapper: Go ahead and require C99.
 
-    Imported Upstream version 0.3~git+20140610
+commit 4c3d5febdd9c1a675c9df629e964a872be5e13b8
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 6 03:37:29 2009 +0000
 
-commit aca7e436dbe3c7b6df38b45f792a8871ec1f916e
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Tue Jun 17 19:28:47 2014 -0400
+    libmapper: Hide mapper_device structure properly by putting it in an internal header.
 
-    Adding basic debian/files...
+commit 3571b42f1196a30deaaa9ef394b50017a9a33ff0
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 6 03:37:27 2009 +0000
 
-commit 9fdcf6e1ee04d2e76145fe1e383b08ca7f42004d
-Merge: 93c282e 2dcf1fd
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Fri Jan 31 12:49:53 2014 -0500
+    libmapper: Check for POSIX functions, give errors when gettimeofday not found.
 
-    Merge tag 'upstream/0.3'
+commit f1c272462458f89269be048e90ed6530ccbbaafa
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 6 03:37:25 2009 +0000
+
+    libmapper: Re-organization of the data structures into 'admin' and 'device'.
+    
+    A 'device' handles its signals and namespace, the admin deals with
+    talking on the admin bus.  There is some overlap here that needs to be
+    worked out.
     
-    Upstream version 0.3
+    In any case, abort the 'mapper_method_*' interface in favour of the
+    signal definitions.
+
+commit 18d8f4a6cb4e6b314bee0990f37010b09d5beef3
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sun Dec 6 03:37:21 2009 +0000
+
+    libmapper: Compile the 'test' directory on make.
+
+commit 288feff1c0dab033dd21b1ede830b008294a67de
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 5 22:58:26 2009 +0000
+
+    libmapper: Add pkg-config file.
+
+commit c9b98eea4edd79359d6c8a1ebd4a96e239af5c80
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 5 22:58:24 2009 +0000
+
+    libmapper: Begin designing a new interface.
+
+commit a11f3841735c0e0f40ca075748adf2b9c4a77bfa
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 5 22:58:22 2009 +0000
+
+    libmapper: Fix warnings and get test program to compile.
+
+commit decf4131d780318e4df98e078f85c0bd1f0b9136
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 5 22:07:38 2009 +0000
+
+    libmapper: Add autoconf files.
 
-commit 2dcf1fdb0910143d5b8bf3b9590a7e333cda7aef
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Fri Jan 31 12:49:52 2014 -0500
+commit ac31bfd9c74cf29a3e14a3e42036baa79e221f25
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 5 22:07:35 2009 +0000
 
-    Imported Upstream version 0.3
+    libmapper: Add GNU-standard information files. LGPL license 2.1 or later.
 
-commit 93c282ed3ad0c32692235547cc4a6dcaba416d74
-Author: Tiago Bortoletto Vaz <tiago at debian.org>
-Date:   Fri Jan 31 12:43:54 2014 -0500
+commit 67fd060886e14a2356cb3c8288fa03f0f5f7586c
+Author: Stephen Sinclair <radarsat1 at gmail.com>
+Date:   Sat Dec 5 22:07:32 2009 +0000
 
-    First commit
+    libmapper: Add previous work on C implementation (libmapper) and some new protocol notes.
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..4ba09cc
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,911 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/configure $(am__configure_deps) \
+	$(top_srcdir)/jni/Mapper/NativeLib.java.in \
+	$(srcdir)/libmapper.pc.in $(dist_doc_DATA) AUTHORS COPYING \
+	ChangeLog NEWS README compile config.guess config.sub depcomp \
+	install-sh missing ltmain.sh
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES = jni/Mapper/NativeLib.java libmapper.pc
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)"
+DATA = $(dist_doc_DATA) $(pkgconfig_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	cscope distdir dist dist-all distcheck
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+CSCOPE = cscope
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = src include test examples @SWIGDIR@ @JNI@ @DOXYGEN@ extra
+EXTRA_DIST = libtool ltmain.sh autogen.sh libmapper.pc.in
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = libmapper- at MAJOR_VERSION@.pc
+dist_doc_DATA = README COPYING ChangeLog NEWS
+ACLOCAL_AMFLAGS = -I m4
+all: all-recursive
+
+.SUFFIXES:
+am--refresh: Makefile
+	@:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
+	      $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	$(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+jni/Mapper/NativeLib.java: $(top_builddir)/config.status $(top_srcdir)/jni/Mapper/NativeLib.java.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+libmapper.pc: $(top_builddir)/config.status $(srcdir)/libmapper.pc.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+distclean-libtool:
+	-rm -f libtool config.lt
+install-dist_docDATA: $(dist_doc_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
+	done
+
+uninstall-dist_docDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir)
+install-pkgconfigDATA: $(pkgconfig_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
+	done
+
+uninstall-pkgconfigDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir)
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+	test ! -s cscope.files \
+	  || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+	-rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+	-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d "$(distdir)" || mkdir "$(distdir)"
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-test -n "$(am__skip_mode_fix)" \
+	|| find "$(distdir)" -type d ! -perm -755 \
+		-exec chmod u+rwx,go+rx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__post_remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+	$(am__post_remove_distdir)
+
+dist-lzip: distdir
+	tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+	$(am__post_remove_distdir)
+
+dist-xz: distdir
+	tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+	$(am__post_remove_distdir)
+
+dist-tarZ: distdir
+	@echo WARNING: "Support for shar distribution archives is" \
+	               "deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__post_remove_distdir)
+
+dist-shar: distdir
+	@echo WARNING: "Support for distribution archives compressed with" \
+		       "legacy program 'compress' is deprecated." >&2
+	@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__post_remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__post_remove_distdir)
+
+dist dist-all:
+	$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+	$(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lz*) \
+	  lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+	*.tar.xz*) \
+	  xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir)
+	chmod u+w $(distdir)
+	mkdir $(distdir)/_build $(distdir)/_inst
+	chmod a-w $(distdir)
+	test -d $(distdir)/_build || exit 0; \
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && am__cwd=`pwd` \
+	  && $(am__cd) $(distdir)/_build \
+	  && ../configure \
+	    $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	    --srcdir=.. --prefix="$$dc_install_base" \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+	  && cd "$$am__cwd" \
+	  || exit 1
+	$(am__post_remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@test -n '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: trying to run $@ with an empty' \
+	       '$$(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	$(am__cd) '$(distuninstallcheck_dir)' || { \
+	  echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+	  exit 1; \
+	}; \
+	test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(docdir)" "$(DESTDIR)$(pkgconfigdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-dist_docDATA install-pkgconfigDATA
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-dist_docDATA uninstall-pkgconfigDATA
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
+	am--refresh check check-am clean clean-cscope clean-generic \
+	clean-libtool clean-local cscope cscopelist-am ctags ctags-am \
+	dist dist-all dist-bzip2 dist-gzip dist-lzip dist-shar \
+	dist-tarZ dist-xz dist-zip distcheck distclean \
+	distclean-generic distclean-libtool distclean-tags \
+	distcleancheck distdir distuninstallcheck dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dist_docDATA install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-pkgconfigDATA install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-dist_docDATA uninstall-pkgconfigDATA
+
+
+libmapper- at MAJOR_VERSION@.pc: libmapper.pc
+	@if ! [ -e $@ ]; then cp -v $< $@; fi
+
+clean-local:
+	-rm -rf libmapper- at MAJOR_VERSION@.pc
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/configure b/configure
index 1995e76..4c1fe71 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for libmapper 115e1f0.
+# Generated by GNU Autoconf 2.69 for libmapper 0.3-482-gd986501.
 #
 # Report bugs to <dot_mapper at googlegroups.com>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='libmapper'
 PACKAGE_TARNAME='libmapper'
-PACKAGE_VERSION='115e1f0'
-PACKAGE_STRING='libmapper 115e1f0'
+PACKAGE_VERSION='0.3-482-gd986501'
+PACKAGE_STRING='libmapper 0.3-482-gd986501'
 PACKAGE_BUGREPORT='dot_mapper at googlegroups.com'
 PACKAGE_URL='http://libmapper.org'
 
@@ -1385,7 +1385,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures libmapper 115e1f0 to adapt to many kinds of systems.
+\`configure' configures libmapper 0.3-482-gd986501 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1455,7 +1455,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of libmapper 115e1f0:";;
+     short | recursive ) echo "Configuration of libmapper 0.3-482-gd986501:";;
    esac
   cat <<\_ACEOF
 
@@ -1580,7 +1580,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-libmapper configure 115e1f0
+libmapper configure 0.3-482-gd986501
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2124,7 +2124,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by libmapper $as_me 115e1f0, which was
+It was created by libmapper $as_me 0.3-482-gd986501, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3008,7 +3008,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='libmapper'
- VERSION='115e1f0'
+ VERSION='0.3-482-gd986501'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -19101,7 +19101,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by libmapper $as_me 115e1f0, which was
+This file was extended by libmapper $as_me 0.3-482-gd986501, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -19168,7 +19168,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-libmapper config.status 115e1f0
+libmapper config.status 0.3-482-gd986501
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 0000000..8ea3701
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,497 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# doc/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/libmapper
+pkgincludedir = $(includedir)/libmapper
+pkglibdir = $(libdir)/libmapper
+pkglibexecdir = $(libexecdir)/libmapper
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = x86_64-unknown-linux-gnu
+host_triplet = x86_64-unknown-linux-gnu
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(srcdir)/libmapper.doxyfile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES = libmapper.doxyfile
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/tiago/git/libmapper/missing aclocal-1.14
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 1
+AR = ar
+AS = as
+AUTOCONF = ${SHELL} /home/tiago/git/libmapper/missing autoconf
+AUTOHEADER = ${SHELL} /home/tiago/git/libmapper/missing autoheader
+AUTOMAKE = ${SHELL} /home/tiago/git/libmapper/missing automake-1.14
+AWK = gawk
+CC = gcc -std=gnu99
+CCDEPMODE = depmode=gcc3
+CFLAGS = -I. -g -O2 -DNDEBUG
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -g -O2 -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = dlltool
+DOXYGEN = 
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+JAR = 
+JAVAC = 
+JAVAH = 
+JNI = 
+JNIPATH = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LIBLO = liblo
+LIBM = -lm
+LIBOBJS = 
+LIBS = -lz  -lm
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+MAINT = 
+MAJOR_VERSION = 0
+MAKEINFO = ${SHELL} /home/tiago/git/libmapper/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = libmapper
+PACKAGE_BUGREPORT = dot_mapper at googlegroups.com
+PACKAGE_NAME = libmapper
+PACKAGE_STRING = libmapper 0.3-482-gd986501
+PACKAGE_TARNAME = libmapper
+PACKAGE_URL = http://libmapper.org
+PACKAGE_VERSION = 0.3-482-gd986501
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+PTHREAD_CC = gcc
+PTHREAD_CFLAGS = -pthread
+PTHREAD_LIBS = 
+PYEXT = so
+PYTHON = /usr/bin/python
+PYTHON_EXEC_PREFIX = ${exec_prefix}
+PYTHON_PLATFORM = linux2
+PYTHON_PREFIX = ${prefix}
+PYTHON_VERSION = 2.7
+RANLIB = ranlib
+RTAUDIO_CFLAGS = -D__LINUX_ALSA__ -D__LITTLE_ENDIAN__
+RTAUDIO_LIBS = -lasound
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SO_VERSION = 2:0:0
+STRIP = strip
+SWIG = swig
+SWIGDIR = swig
+VERSION = 0.3-482-gd986501
+abs_builddir = /home/tiago/git/libmapper/doc
+abs_srcdir = /home/tiago/git/libmapper/doc
+abs_top_builddir = /home/tiago/git/libmapper
+abs_top_srcdir = /home/tiago/git/libmapper
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+ax_pthread_config = 
+bindir = ${exec_prefix}/bin
+build = x86_64-unknown-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = unknown
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-unknown-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = unknown
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/tiago/git/libmapper/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+liblo_CFLAGS = 
+liblo_LIBS = -llo -lpthread 
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+pkgpyexecdir = ${pyexecdir}/libmapper
+pkgpythondir = ${pythondir}/libmapper
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages
+pythondir = ${prefix}/lib/python2.7/dist-packages
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+MAINTAINERCLEANFILES = Makefile.in 
+CLEANFILES = doxygen-build.stamp
+DOX = libmapper.doxyfile
+EXTRA_DIST = expression_syntax.md how_to_compile_and_run.md windows.md	\
+           tutorials/tutorial_c.md tutorials/tutorial_introduction.md	\
+           tutorials/tutorial_maxmsp_central.md                         \
+           tutorials/tutorial_maxmsp_multiobj.md                        \
+           tutorials/tutorial_pure_data.md tutorials/tutorial_python.md \
+           tutorials/tutorial_java.md
+
+INSTIMAGES = html/doxygen.png
+DOC_STAMPS = html-build.stamp
+DOC_DIR = $(HTML_DIR)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+libmapper.doxyfile: $(top_builddir)/config.status $(srcdir)/libmapper.doxyfile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local cscopelist-am ctags-am distclean \
+	distclean-generic distclean-libtool distclean-local distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am
+
+
+all-local: doxygen-build.stamp
+
+doxygen-build.stamp: $(DOX) $(top_srcdir)/src/*.c $(top_srcdir)/src/*.h \
+	$(top_srcdir)/include/mapper/*.h
+	@echo '*** Running doxygen ***'
+	doxygen $(DOX)
+	touch doxygen-build.stamp
+
+clean-local:
+	rm -f *~ *.bak $(DOC_STAMPS) || true
+	if test -d html; then rm -fr html; fi
+	if test -d latex; then rm -fr latex; fi
+	if test -d man; then rm -fr man; fi
+
+distclean-local: clean
+	rm -f *.stamp || true
+	if test -d html; then rm -rf html; fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/Makefile.in b/doc/Makefile.in
new file mode 100644
index 0000000..3552a12
--- /dev/null
+++ b/doc/Makefile.in
@@ -0,0 +1,497 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(srcdir)/libmapper.doxyfile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES = libmapper.doxyfile
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+MAINTAINERCLEANFILES = Makefile.in 
+CLEANFILES = doxygen-build.stamp
+DOX = libmapper.doxyfile
+EXTRA_DIST = expression_syntax.md how_to_compile_and_run.md windows.md	\
+           tutorials/tutorial_c.md tutorials/tutorial_introduction.md	\
+           tutorials/tutorial_maxmsp_central.md                         \
+           tutorials/tutorial_maxmsp_multiobj.md                        \
+           tutorials/tutorial_pure_data.md tutorials/tutorial_python.md \
+           tutorials/tutorial_java.md
+
+INSTIMAGES = html/doxygen.png
+DOC_STAMPS = html-build.stamp
+DOC_DIR = $(HTML_DIR)
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign doc/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+libmapper.doxyfile: $(top_builddir)/config.status $(srcdir)/libmapper.doxyfile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-local
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local cscopelist-am ctags-am distclean \
+	distclean-generic distclean-libtool distclean-local distdir \
+	dvi dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am
+
+
+all-local: doxygen-build.stamp
+
+doxygen-build.stamp: $(DOX) $(top_srcdir)/src/*.c $(top_srcdir)/src/*.h \
+	$(top_srcdir)/include/mapper/*.h
+	@echo '*** Running doxygen ***'
+	doxygen $(DOX)
+	touch doxygen-build.stamp
+
+clean-local:
+	rm -f *~ *.bak $(DOC_STAMPS) || true
+	if test -d html; then rm -fr html; fi
+	if test -d latex; then rm -fr latex; fi
+	if test -d man; then rm -fr man; fi
+
+distclean-local: clean
+	rm -f *.stamp || true
+	if test -d html; then rm -rf html; fi
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/doc/libmapper.doxyfile.in b/doc/libmapper.doxyfile
similarity index 99%
copy from doc/libmapper.doxyfile.in
copy to doc/libmapper.doxyfile
index fb3fcd4..359134e 100644
--- a/doc/libmapper.doxyfile.in
+++ b/doc/libmapper.doxyfile
@@ -25,13 +25,13 @@ DOXYFILE_ENCODING      = UTF-8
 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
 # by quotes) that should identify the project.
 
-PROJECT_NAME           = @PACKAGE@
+PROJECT_NAME           = libmapper
 
 # The PROJECT_NUMBER tag can be used to enter a project or revision number. 
 # This could be handy for archiving the generated documentation or 
 # if some version control system is used.
 
-PROJECT_NUMBER         = @PACKAGE_VERSION@
+PROJECT_NUMBER         = 0.3-482-gd986501
 
 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
 # base path where the generated documentation will be put. 
diff --git a/examples/Makefile.in b/examples/Makefile.in
new file mode 100644
index 0000000..16dd74d
--- /dev/null
+++ b/examples/Makefile.in
@@ -0,0 +1,796 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+ at HAVE_AUDIO_TRUE@@HAVE_SWIG_TRUE at am__append_1 = py_tk_gui
+ at HAVE_AUDIO_TRUE@bin_PROGRAMS = pwm_example$(EXEEXT)
+subdir = examples
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+PROGRAMS = $(bin_PROGRAMS)
+am__pwm_example_SOURCES_DIST = pwm_example.cpp
+ at HAVE_AUDIO_TRUE@am_pwm_example_OBJECTS =  \
+ at HAVE_AUDIO_TRUE@	pwm_example-pwm_example.$(OBJEXT)
+pwm_example_OBJECTS = $(am_pwm_example_OBJECTS)
+am__DEPENDENCIES_1 =
+ at HAVE_AUDIO_TRUE@pwm_example_DEPENDENCIES = pwm_synth/libpwm.la \
+ at HAVE_AUDIO_TRUE@	$(top_builddir)/src/libmapper- at MAJOR_VERSION@.la \
+ at HAVE_AUDIO_TRUE@	$(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+pwm_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(pwm_example_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(pwm_example_SOURCES)
+DIST_SOURCES = $(am__pwm_example_SOURCES_DIST)
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = pwm_synth py_tk_gui
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = pwm_synth $(am__append_1)
+ at HAVE_AUDIO_TRUE@pwm_example_CXXFLAGS = -Wall -I$(top_srcdir)/include $(liblo_CFLAGS)
+ at HAVE_AUDIO_TRUE@pwm_example_SOURCES = pwm_example.cpp
+ at HAVE_AUDIO_TRUE@pwm_example_LDADD = pwm_synth/libpwm.la \
+ at HAVE_AUDIO_TRUE@	$(top_builddir)/src/libmapper- at MAJOR_VERSION@.la \
+ at HAVE_AUDIO_TRUE@	@RTAUDIO_LIBS@ $(liblo_LIBS)
+
+all: all-recursive
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign examples/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+	fi; \
+	for p in $$list; do echo "$$p $$p"; done | \
+	sed 's/$(EXEEXT)$$//' | \
+	while read p p1; do if test -f $$p \
+	 || test -f $$p1 \
+	  ; then echo "$$p"; echo "$$p"; else :; fi; \
+	done | \
+	sed -e 'p;s,.*/,,;n;h' \
+	    -e 's|.*|.|' \
+	    -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+	sed 'N;N;N;s,\n, ,g' | \
+	$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+	  { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+	    if ($$2 == $$4) files[d] = files[d] " " $$1; \
+	    else { print "f", $$3 "/" $$4, $$1; } } \
+	  END { for (d in files) print "f", d, files[d] }' | \
+	while read type dir files; do \
+	    if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+	    test -z "$$files" || { \
+	    echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+	    $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+	    } \
+	; done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+	files=`for p in $$list; do echo "$$p"; done | \
+	  sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+	      -e 's/$$/$(EXEEXT)/' \
+	`; \
+	test -n "$$list" || exit 0; \
+	echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+	cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+	@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+pwm_example$(EXEEXT): $(pwm_example_OBJECTS) $(pwm_example_DEPENDENCIES) $(EXTRA_pwm_example_DEPENDENCIES) 
+	@rm -f pwm_example$(EXEEXT)
+	$(AM_V_CXXLD)$(pwm_example_LINK) $(pwm_example_OBJECTS) $(pwm_example_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/pwm_example-pwm_example.Po at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+pwm_example-pwm_example.o: pwm_example.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_example_CXXFLAGS) $(CXXFLAGS) -MT pwm_example-pwm_example.o -MD -MP -MF $(DEPDIR)/pwm_example-pwm_example.Tpo -c -o pwm_example-pwm_example.o `test -f 'pwm_example.cpp' || echo '$(srcdir)/'`pwm_example.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pwm_example-pwm_example.Tpo $(DEPDIR)/pwm_example-pwm_example.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='pwm_example.cpp' object='pwm_example-pwm_example.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_example_CXXFLAGS) $(CXXFLAGS) -c -o pwm_example-pwm_example.o `test -f 'pwm_example.cpp' || echo '$(srcdir)/'`pwm_example.cpp
+
+pwm_example-pwm_example.obj: pwm_example.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_example_CXXFLAGS) $(CXXFLAGS) -MT pwm_example-pwm_example.obj -MD -MP -MF $(DEPDIR)/pwm_example-pwm_example.Tpo -c -o pwm_example-pwm_example.obj `if test -f 'pwm_example.cpp'; then $(CYGPATH_W) 'pwm_example.cpp'; else $(CYGPATH_W) '$(srcdir)/pwm_example.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/pwm_example-pwm_example.Tpo $(DEPDIR)/pwm_example-pwm_example.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='pwm_example.cpp' object='pwm_example-pwm_example.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pwm_example_CXXFLAGS) $(CXXFLAGS) -c -o pwm_example-pwm_example.obj `if test -f 'pwm_example.cpp'; then $(CYGPATH_W) 'pwm_example.cpp'; else $(CYGPATH_W) '$(srcdir)/pwm_example.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(PROGRAMS)
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-binPROGRAMS clean-generic clean-libtool \
+	cscopelist-am ctags ctags-am distclean distclean-compile \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-binPROGRAMS install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-binPROGRAMS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/pwm_synth/Makefile.in b/examples/pwm_synth/Makefile.in
new file mode 100644
index 0000000..a77cf6f
--- /dev/null
+++ b/examples/pwm_synth/Makefile.in
@@ -0,0 +1,633 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples/pwm_synth
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+LTLIBRARIES = $(noinst_LTLIBRARIES)
+libpwm_la_LIBADD =
+am__libpwm_la_SOURCES_DIST = pwm.cpp RtAudio.cpp
+ at HAVE_AUDIO_TRUE@am_libpwm_la_OBJECTS = libpwm_la-pwm.lo \
+ at HAVE_AUDIO_TRUE@	libpwm_la-RtAudio.lo
+libpwm_la_OBJECTS = $(am_libpwm_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libpwm_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(libpwm_la_CXXFLAGS) \
+	$(CXXFLAGS) $(libpwm_la_LDFLAGS) $(LDFLAGS) -o $@
+ at HAVE_AUDIO_TRUE@am_libpwm_la_rpath =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(libpwm_la_SOURCES)
+DIST_SOURCES = $(am__libpwm_la_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+ at HAVE_AUDIO_TRUE@noinst_LTLIBRARIES = libpwm.la
+ at HAVE_AUDIO_TRUE@libpwm_la_CXXFLAGS = -Wall @RTAUDIO_CFLAGS@
+ at HAVE_AUDIO_TRUE@libpwm_la_SOURCES = pwm.cpp RtAudio.cpp
+ at HAVE_AUDIO_TRUE@libpwm_la_LDFLAGS = -export-dynamic -version-info @SO_VERSION@
+ at HAVE_AUDIO_TRUE@EXTRA_DIST = pwm.h RtAudio.h RtError.h RtAudio-readme.txt README.md
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cpp .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/pwm_synth/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign examples/pwm_synth/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstLTLIBRARIES:
+	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
+	@list='$(noinst_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libpwm.la: $(libpwm_la_OBJECTS) $(libpwm_la_DEPENDENCIES) $(EXTRA_libpwm_la_DEPENDENCIES) 
+	$(AM_V_CXXLD)$(libpwm_la_LINK) $(am_libpwm_la_rpath) $(libpwm_la_OBJECTS) $(libpwm_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libpwm_la-RtAudio.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libpwm_la-pwm.Plo at am__quote@
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+libpwm_la-pwm.lo: pwm.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpwm_la_CXXFLAGS) $(CXXFLAGS) -MT libpwm_la-pwm.lo -MD -MP -MF $(DEPDIR)/libpwm_la-pwm.Tpo -c -o libpwm_la-pwm.lo `test -f 'pwm.cpp' || echo '$(srcdir)/'`pwm.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libpwm_la-pwm.Tpo $(DEPDIR)/libpwm_la-pwm.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='pwm.cpp' object='libpwm_la-pwm.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpwm_la_CXXFLAGS) $(CXXFLAGS) -c -o libpwm_la-pwm.lo `test -f 'pwm.cpp' || echo '$(srcdir)/'`pwm.cpp
+
+libpwm_la-RtAudio.lo: RtAudio.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpwm_la_CXXFLAGS) $(CXXFLAGS) -MT libpwm_la-RtAudio.lo -MD -MP -MF $(DEPDIR)/libpwm_la-RtAudio.Tpo -c -o libpwm_la-RtAudio.lo `test -f 'RtAudio.cpp' || echo '$(srcdir)/'`RtAudio.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libpwm_la-RtAudio.Tpo $(DEPDIR)/libpwm_la-RtAudio.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='RtAudio.cpp' object='libpwm_la-RtAudio.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libpwm_la_CXXFLAGS) $(CXXFLAGS) -c -o libpwm_la-RtAudio.lo `test -f 'RtAudio.cpp' || echo '$(srcdir)/'`RtAudio.cpp
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/py_tk_gui/Makefile.in b/examples/py_tk_gui/Makefile.in
new file mode 100644
index 0000000..fb4a5e0
--- /dev/null
+++ b/examples/py_tk_gui/Makefile.in
@@ -0,0 +1,482 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = examples/py_tk_gui
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(srcdir)/setup.py.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES = setup.py
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+_CXX = $(filter-out ccache,$(CXX))
+EXTRA_DIST = pwm.i tk_pwm.py
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign examples/py_tk_gui/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign examples/py_tk_gui/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+setup.py: $(top_builddir)/config.status $(srcdir)/setup.py.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local cscopelist-am ctags-am distclean \
+	distclean-generic distclean-libtool distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am
+
+
+all-local: _pwm.$(PYEXT) $(top_builddir)/examples/pwm_synth/libpwm.la
+
+$(builddir)/%_wrap.cxx $(buildir)/%.py: %.i
+	$(SWIG) -I$(top_srcdir)/examples/pwm_synth -I$(top_srcdir)/include -c++ \
+		-python -o $(builddir)/pwm_wrap.cxx $(srcdir)/pwm.i
+
+# Don't interfere with distutils CFLAGS
+_%.$(PYEXT): $(builddir)/%_wrap.cxx
+	pwd
+	cd $(builddir) && env CFLAGS="" CXX="$(_CXX)" python setup.py build_ext
+	- at mv -v build/lib.*/$@ .
+	- at rm -rf build
+
+clean-local:
+	- at rm -vf _pwm.$(PYEXT) pwm.py pwm_wrap.c
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/extra/Makefile.in b/extra/Makefile.in
new file mode 100644
index 0000000..2237aaf
--- /dev/null
+++ b/extra/Makefile.in
@@ -0,0 +1,641 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = extra
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
+	ctags-recursive dvi-recursive html-recursive info-recursive \
+	install-data-recursive install-dvi-recursive \
+	install-exec-recursive install-html-recursive \
+	install-info-recursive install-pdf-recursive \
+	install-ps-recursive install-recursive installcheck-recursive \
+	installdirs-recursive pdf-recursive ps-recursive \
+	tags-recursive uninstall-recursive
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+am__recursive_targets = \
+  $(RECURSIVE_TARGETS) \
+  $(RECURSIVE_CLEAN_TARGETS) \
+  $(am__extra_recursive_targets)
+AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
+	distdir
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+am__relativize = \
+  dir0=`pwd`; \
+  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
+  sed_rest='s,^[^/]*/*,,'; \
+  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
+  sed_butlast='s,/*[^/]*$$,,'; \
+  while test -n "$$dir1"; do \
+    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
+    if test "$$first" != "."; then \
+      if test "$$first" = ".."; then \
+        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
+        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
+      else \
+        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
+        if test "$$first2" = "$$first"; then \
+          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
+        else \
+          dir2="../$$dir2"; \
+        fi; \
+        dir0="$$dir0"/"$$first"; \
+      fi; \
+    fi; \
+    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
+  done; \
+  reldir="$$dir2"
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+SUBDIRS = osx
+all: all-recursive
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extra/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign extra/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run 'make' without going through this Makefile.
+# To change the values of 'make' variables: instead of editing Makefiles,
+# (1) if the variable is set in 'config.status', edit 'config.status'
+#     (which will cause the Makefiles to be regenerated when you run 'make');
+# (2) otherwise, pass the desired values on the 'make' command line.
+$(am__recursive_targets):
+	@fail=; \
+	if $(am__make_keepgoing); then \
+	  failcom='fail=yes'; \
+	else \
+	  failcom='exit 1'; \
+	fi; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-recursive
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-recursive
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-recursive
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+	@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    $(am__make_dryrun) \
+	      || test -d "$(distdir)/$$subdir" \
+	      || $(MKDIR_P) "$(distdir)/$$subdir" \
+	      || exit 1; \
+	    dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
+	    $(am__relativize); \
+	    new_distdir=$$reldir; \
+	    dir1=$$subdir; dir2="$(top_distdir)"; \
+	    $(am__relativize); \
+	    new_top_distdir=$$reldir; \
+	    echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
+	    echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
+	    ($(am__cd) $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$new_top_distdir" \
+	        distdir="$$new_distdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+		am__skip_mode_fix=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+html-am:
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-recursive
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-html-am:
+
+install-info: install-info-recursive
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-pdf-am:
+
+install-ps: install-ps-recursive
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: $(am__recursive_targets) install-am install-strip
+
+.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
+	check-am clean clean-generic clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-generic distclean-libtool \
+	distclean-tags distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	installdirs-am maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/extra/osx/Makefile.in b/extra/osx/Makefile.in
new file mode 100644
index 0000000..3c55cfa
--- /dev/null
+++ b/extra/osx/Makefile.in
@@ -0,0 +1,461 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = extra/osx
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+EXTRA_DIST = libmapper_slider_launcher.py
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign extra/osx/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign extra/osx/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+	cscopelist-am ctags-am distclean distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/include/Makefile.in b/include/Makefile.in
new file mode 100644
index 0000000..b6e5b99
--- /dev/null
+++ b/include/Makefile.in
@@ -0,0 +1,585 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = include
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(libmapper_HEADERS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libmapperdir)"
+HEADERS = $(libmapper_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+libmapperdir = $(includedir)/mapper- at MAJOR_VERSION@/mapper
+libmapper_HEADERS = mapper/mapper.h mapper/mapper_types.h mapper/mapper_db.h \
+                    mapper/mapper_cpp.h
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign include/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+install-libmapperHEADERS: $(libmapper_HEADERS)
+	@$(NORMAL_INSTALL)
+	@list='$(libmapper_HEADERS)'; test -n "$(libmapperdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libmapperdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libmapperdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(libmapperdir)'"; \
+	  $(INSTALL_HEADER) $$files "$(DESTDIR)$(libmapperdir)" || exit $$?; \
+	done
+
+uninstall-libmapperHEADERS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(libmapper_HEADERS)'; test -n "$(libmapperdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(libmapperdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+	for dir in "$(DESTDIR)$(libmapperdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-libmapperHEADERS
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libmapperHEADERS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool cscopelist-am ctags ctags-am distclean \
+	distclean-generic distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-libmapperHEADERS \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
+	ps ps-am tags tags-am uninstall uninstall-am \
+	uninstall-libmapperHEADERS
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/jni/.deps/libmapperjni_0_la-mapperjni.Plo b/jni/.deps/libmapperjni_0_la-mapperjni.Plo
new file mode 100644
index 0000000..9ce06a8
--- /dev/null
+++ b/jni/.deps/libmapperjni_0_la-mapperjni.Plo
@@ -0,0 +1 @@
+# dummy
diff --git a/jni/Makefile b/jni/Makefile
new file mode 100644
index 0000000..8152872
--- /dev/null
+++ b/jni/Makefile
@@ -0,0 +1,692 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# jni/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/libmapper
+pkgincludedir = $(includedir)/libmapper
+pkglibdir = $(libdir)/libmapper
+pkglibexecdir = $(libexecdir)/libmapper
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = x86_64-unknown-linux-gnu
+host_triplet = x86_64-unknown-linux-gnu
+subdir = jni
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libmapperjni_0_la_DEPENDENCIES =  \
+	$(top_builddir)/src/libmapper-0.la \
+	$(am__DEPENDENCIES_1)
+am_libmapperjni_0_la_OBJECTS =  \
+	libmapperjni_0_la-mapperjni.lo
+libmapperjni_0_la_OBJECTS =  \
+	$(am_libmapperjni_0_la_OBJECTS)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libmapperjni_0_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libmapperjni_0_la_CFLAGS) $(CFLAGS) \
+	$(libmapperjni_0_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libmapperjni_0_la_SOURCES)
+DIST_SOURCES = $(libmapperjni_0_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/tiago/git/libmapper/missing aclocal-1.14
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 1
+AR = ar
+AS = as
+AUTOCONF = ${SHELL} /home/tiago/git/libmapper/missing autoconf
+AUTOHEADER = ${SHELL} /home/tiago/git/libmapper/missing autoheader
+AUTOMAKE = ${SHELL} /home/tiago/git/libmapper/missing automake-1.14
+AWK = gawk
+CC = gcc -std=gnu99
+CCDEPMODE = depmode=gcc3
+CFLAGS = -I. -g -O2 -DNDEBUG
+CPP = gcc -E
+CPPFLAGS = 
+CXX = g++
+CXXCPP = g++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -g -O2 -std=c++11
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DLLTOOL = dlltool
+DOXYGEN = 
+DSYMUTIL = 
+DUMPBIN = 
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EGREP = /bin/grep -E
+EXEEXT = 
+FGREP = /bin/grep -F
+GREP = /bin/grep
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+JAR = 
+JAVAC = 
+JAVAH = 
+JNI = 
+JNIPATH = 
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = 
+LIBLO = liblo
+LIBM = -lm
+LIBOBJS = 
+LIBS = -lz  -lm
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIPO = 
+LN_S = ln -s
+LTLIBOBJS = 
+MAINT = 
+MAJOR_VERSION = 0
+MAKEINFO = ${SHELL} /home/tiago/git/libmapper/missing makeinfo
+MANIFEST_TOOL = :
+MKDIR_P = /bin/mkdir -p
+NM = /usr/bin/nm -B
+NMEDIT = 
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL = 
+OTOOL64 = 
+PACKAGE = libmapper
+PACKAGE_BUGREPORT = dot_mapper at googlegroups.com
+PACKAGE_NAME = libmapper
+PACKAGE_STRING = libmapper 0.3-482-gd986501
+PACKAGE_TARNAME = libmapper
+PACKAGE_URL = http://libmapper.org
+PACKAGE_VERSION = 0.3-482-gd986501
+PATH_SEPARATOR = :
+PKG_CONFIG = /usr/bin/pkg-config
+PTHREAD_CC = gcc
+PTHREAD_CFLAGS = -pthread
+PTHREAD_LIBS = 
+PYEXT = so
+PYTHON = /usr/bin/python
+PYTHON_EXEC_PREFIX = ${exec_prefix}
+PYTHON_PLATFORM = linux2
+PYTHON_PREFIX = ${prefix}
+PYTHON_VERSION = 2.7
+RANLIB = ranlib
+RTAUDIO_CFLAGS = -D__LINUX_ALSA__ -D__LITTLE_ENDIAN__
+RTAUDIO_LIBS = -lasound
+SED = /bin/sed
+SET_MAKE = 
+SHELL = /bin/bash
+SO_VERSION = 2:0:0
+STRIP = strip
+SWIG = swig
+SWIGDIR = swig
+VERSION = 0.3-482-gd986501
+abs_builddir = /home/tiago/git/libmapper/jni
+abs_srcdir = /home/tiago/git/libmapper/jni
+abs_top_builddir = /home/tiago/git/libmapper
+abs_top_srcdir = /home/tiago/git/libmapper
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CXX = g++
+ac_ct_DUMPBIN = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = $${TAR-tar} chof - "$$tardir"
+am__untar = $${TAR-tar} xf -
+ax_pthread_config = 
+bindir = ${exec_prefix}/bin
+build = x86_64-unknown-linux-gnu
+build_alias = 
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = unknown
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+host = x86_64-unknown-linux-gnu
+host_alias = 
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = unknown
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/tiago/git/libmapper/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+liblo_CFLAGS = 
+liblo_LIBS = -llo -lpthread 
+localedir = ${datarootdir}/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+pkgpyexecdir = ${pyexecdir}/libmapper
+pkgpythondir = ${pythondir}/libmapper
+prefix = /usr/local
+program_transform_name = s,x,x,
+psdir = ${docdir}
+pyexecdir = ${exec_prefix}/lib/python2.7/dist-packages
+pythondir = ${prefix}/lib/python2.7/dist-packages
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias = 
+top_build_prefix = ../
+top_builddir = ..
+top_srcdir = ..
+lib_LTLIBRARIES = libmapperjni-0.la
+libmapperjni_0_la_CFLAGS = -Wall -I$(top_srcdir)/include $(liblo_CFLAGS) -I
+libmapperjni_0_la_SOURCES = mapperjni.c
+libmapperjni_0_la_LDFLAGS = -export-dynamic -version-info 2:0:0
+libmapperjni_0_la_LIBADD = \
+	$(top_builddir)/src/libmapper-0.la $(liblo_LIBS)
+
+JHEADERS = Mapper_Device.h Mapper_Device_Signal.h Mapper_Db_Signal.h        \
+           Mapper_Db_Device.h Mapper_Db_Link.h Mapper_Db_Connection.h       \
+           Mapper_Monitor.h Mapper_Monitor_Db.h Mapper_Db_DeviceIterator.h  \
+           Mapper_Db_SignalIterator.h Mapper_Db_LinkIterator.h              \
+           Mapper_Db_ConnectionIterator.h
+
+JFLAGS = -source 1.5 -target 1.5
+JCLASSES = Mapper/NativeLib.class Mapper/Device.class                       \
+           Mapper/PropertyValue.class Mapper/TimeTag.class                  \
+           Mapper/InputListener.class Mapper/InstanceEventListener.class    \
+           Mapper/Monitor.class Mapper/Db/Device.class                      \
+           Mapper/Db/Signal.class Mapper/Db/Link.class                      \
+           Mapper/Db/Connection.class Mapper/Db/DeviceListener.class        \
+           Mapper/Db/SignalListener.class Mapper/Db/LinkListener.class      \
+           Mapper/Db/ConnectionListener.class                               \
+           Mapper/Db/DeviceCollection.class Mapper/Db/DeviceIterator.class  \
+           Mapper/Db/SignalCollection.class Mapper/Db/SignalIterator.class  \
+           Mapper/Db/LinkCollection.class Mapper/Db/LinkIterator.class      \
+           Mapper/Db/ConnectionCollection.class                             \
+           Mapper/Db/ConnectionIterator.class
+
+JCLASSESINTERNAL = Mapper/Device$$Signal.class Mapper/Device$$1.class	\
+                   Mapper/PropertyValue$$PropertyException.class
+
+JJAVA = $(JCLASSES:%.class=%.java)
+BUILT_SOURCES = $(JHEADERS) test.class testquery.class testreverse.class \
+    testspeed.class libmapper-0.jar
+
+MOSTLYCLEANFILES = $(BUILT_SOURCES) $(JCLASSES) $(subst $$,\$$,$(JCLASSESINTERNAL)) \
+	$(subst $$,\$$,test$$1.class test$$2.class test$$3.class testquery$$1.class \
+    testquery$$2.class testquery$$3.class testreverse$$1.class testreverse$$2.class \
+    testreverse$$3.class testspeed$$1.class testspeed$$2.class testspeed$$3.class)
+
+EXTRA_DIST = $(JJAVA) test.java testquery.java testreverse.java testspeed.java \
+             $(JHEADERS)
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jni/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign jni/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libmapperjni-0.la: $(libmapperjni_0_la_OBJECTS) $(libmapperjni_0_la_DEPENDENCIES) $(EXTRA_libmapperjni_0_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libmapperjni_0_la_LINK) -rpath $(libdir) $(libmapperjni_0_la_OBJECTS) $(libmapperjni_0_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+include ./$(DEPDIR)/libmapperjni_0_la-mapperjni.Plo
+
+.c.o:
+	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#	$(AM_V_CC)source='$<' object='$@' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+#	$(AM_V_CC)source='$<' object='$@' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+#	$(AM_V_CC)source='$<' object='$@' libtool=yes \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+libmapperjni_0_la-mapperjni.lo: mapperjni.c
+	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapperjni_0_la_CFLAGS) $(CFLAGS) -MT libmapperjni_0_la-mapperjni.lo -MD -MP -MF $(DEPDIR)/libmapperjni_0_la-mapperjni.Tpo -c -o libmapperjni_0_la-mapperjni.lo `test -f 'mapperjni.c' || echo '$(srcdir)/'`mapperjni.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapperjni_0_la-mapperjni.Tpo $(DEPDIR)/libmapperjni_0_la-mapperjni.Plo
+#	$(AM_V_CC)source='mapperjni.c' object='libmapperjni_0_la-mapperjni.lo' libtool=yes \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapperjni_0_la_CFLAGS) $(CFLAGS) -c -o libmapperjni_0_la-mapperjni.lo `test -f 'mapperjni.c' || echo '$(srcdir)/'`mapperjni.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
+
+
+Mapper_%.h: Mapper/%.class
+	$(JAVAH) $(subst /,.,$(<:%.class=%))
+	if [ -f $@ ]; then touch $@; fi
+
+Mapper_Db_%.h: Mapper/Db/%.class
+	$(JAVAH) $(subst /,.,$(<:%.class=%))
+	if [ -f $@ ]; then touch $@; fi
+
+Mapper/%.class: Mapper/%.java
+	$(JAVAC) $(JFLAGS) -sourcepath ../jni -d . $<
+
+test.class: test.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath ../jni -d . $<
+
+testquery.class: testquery.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath ../jni -d . $<
+
+testreverse.class: testreverse.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath ../jni -d . $<
+
+testspeed.class: testspeed.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath ../jni -d . $<
+
+libmapper-0.jar: $(JCLASSES) $(JCLASSESINTERNAL)
+	$(JAR) cvf $@ $(subst $$,\$$,$^)
+	if mkdir -v TestInstances/code; then \
+	  cd TestInstances/code/; \
+	  ln -v -s ../../.libs/*.so .; \
+	  ln -v -s ../../$@; \
+	fi # For processing test sketch
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/jni/Makefile.am b/jni/Makefile.am
new file mode 100644
index 0000000..18ed188
--- /dev/null
+++ b/jni/Makefile.am
@@ -0,0 +1,74 @@
+
+lib_LTLIBRARIES = libmapperjni- at MAJOR_VERSION@.la
+libmapperjni_ at MAJOR_VERSION@_la_CFLAGS = -Wall -I$(top_srcdir)/include $(liblo_CFLAGS) -I at JNIPATH@
+libmapperjni_ at MAJOR_VERSION@_la_SOURCES = mapperjni.c
+libmapperjni_ at MAJOR_VERSION@_la_LDFLAGS = -export-dynamic -version-info @SO_VERSION@
+libmapperjni_ at MAJOR_VERSION@_la_LIBADD = \
+	$(top_builddir)/src/libmapper- at MAJOR_VERSION@.la $(liblo_LIBS)
+
+JHEADERS = Mapper_Device.h Mapper_Device_Signal.h Mapper_Db_Signal.h        \
+           Mapper_Db_Device.h Mapper_Db_Link.h Mapper_Db_Connection.h       \
+           Mapper_Monitor.h Mapper_Monitor_Db.h Mapper_Db_DeviceIterator.h  \
+           Mapper_Db_SignalIterator.h Mapper_Db_LinkIterator.h              \
+           Mapper_Db_ConnectionIterator.h
+
+JFLAGS = -source 1.5 -target 1.5
+JCLASSES = Mapper/NativeLib.class Mapper/Device.class                       \
+           Mapper/PropertyValue.class Mapper/TimeTag.class                  \
+           Mapper/InputListener.class Mapper/InstanceEventListener.class    \
+           Mapper/Monitor.class Mapper/Db/Device.class                      \
+           Mapper/Db/Signal.class Mapper/Db/Link.class                      \
+           Mapper/Db/Connection.class Mapper/Db/DeviceListener.class        \
+           Mapper/Db/SignalListener.class Mapper/Db/LinkListener.class      \
+           Mapper/Db/ConnectionListener.class                               \
+           Mapper/Db/DeviceCollection.class Mapper/Db/DeviceIterator.class  \
+           Mapper/Db/SignalCollection.class Mapper/Db/SignalIterator.class  \
+           Mapper/Db/LinkCollection.class Mapper/Db/LinkIterator.class      \
+           Mapper/Db/ConnectionCollection.class                             \
+           Mapper/Db/ConnectionIterator.class
+
+JCLASSESINTERNAL = Mapper/Device$$Signal.class Mapper/Device$$1.class	\
+                   Mapper/PropertyValue$$PropertyException.class
+
+JJAVA = $(JCLASSES:%.class=%.java)
+
+BUILT_SOURCES = $(JHEADERS) test.class testquery.class testreverse.class \
+    testspeed.class libmapper- at MAJOR_VERSION@.jar
+MOSTLYCLEANFILES = $(BUILT_SOURCES) $(JCLASSES) $(subst $$,\$$,$(JCLASSESINTERNAL)) \
+	$(subst $$,\$$,test$$1.class test$$2.class test$$3.class testquery$$1.class \
+    testquery$$2.class testquery$$3.class testreverse$$1.class testreverse$$2.class \
+    testreverse$$3.class testspeed$$1.class testspeed$$2.class testspeed$$3.class)
+
+Mapper_%.h: Mapper/%.class
+	$(JAVAH) $(subst /,.,$(<:%.class=%))
+	if [ -f $@ ]; then touch $@; fi
+
+Mapper_Db_%.h: Mapper/Db/%.class
+	$(JAVAH) $(subst /,.,$(<:%.class=%))
+	if [ -f $@ ]; then touch $@; fi
+
+Mapper/%.class: Mapper/%.java
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+test.class: test.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+testquery.class: testquery.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+testreverse.class: testreverse.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+testspeed.class: testspeed.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+libmapper- at MAJOR_VERSION@.jar: $(JCLASSES) $(JCLASSESINTERNAL)
+	$(JAR) cvf $@ $(subst $$,\$$,$^)
+	if mkdir -v TestInstances/code; then \
+	  cd TestInstances/code/; \
+	  ln -v -s ../../.libs/*.so .; \
+	  ln -v -s ../../$@; \
+	fi # For processing test sketch
+
+EXTRA_DIST = $(JJAVA) test.java testquery.java testreverse.java testspeed.java \
+             $(JHEADERS)
diff --git a/jni/Makefile.in b/jni/Makefile.in
new file mode 100644
index 0000000..993a66e
--- /dev/null
+++ b/jni/Makefile.in
@@ -0,0 +1,692 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = jni
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libmapperjni_ at MAJOR_VERSION@_la_DEPENDENCIES =  \
+	$(top_builddir)/src/libmapper- at MAJOR_VERSION@.la \
+	$(am__DEPENDENCIES_1)
+am_libmapperjni_ at MAJOR_VERSION@_la_OBJECTS =  \
+	libmapperjni_ at MAJOR_VERSION@_la-mapperjni.lo
+libmapperjni_ at MAJOR_VERSION@_la_OBJECTS =  \
+	$(am_libmapperjni_ at MAJOR_VERSION@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libmapperjni_ at MAJOR_VERSION@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libmapperjni_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) \
+	$(libmapperjni_ at MAJOR_VERSION@_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libmapperjni_ at MAJOR_VERSION@_la_SOURCES)
+DIST_SOURCES = $(libmapperjni_ at MAJOR_VERSION@_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+lib_LTLIBRARIES = libmapperjni- at MAJOR_VERSION@.la
+libmapperjni_ at MAJOR_VERSION@_la_CFLAGS = -Wall -I$(top_srcdir)/include $(liblo_CFLAGS) -I at JNIPATH@
+libmapperjni_ at MAJOR_VERSION@_la_SOURCES = mapperjni.c
+libmapperjni_ at MAJOR_VERSION@_la_LDFLAGS = -export-dynamic -version-info @SO_VERSION@
+libmapperjni_ at MAJOR_VERSION@_la_LIBADD = \
+	$(top_builddir)/src/libmapper- at MAJOR_VERSION@.la $(liblo_LIBS)
+
+JHEADERS = Mapper_Device.h Mapper_Device_Signal.h Mapper_Db_Signal.h        \
+           Mapper_Db_Device.h Mapper_Db_Link.h Mapper_Db_Connection.h       \
+           Mapper_Monitor.h Mapper_Monitor_Db.h Mapper_Db_DeviceIterator.h  \
+           Mapper_Db_SignalIterator.h Mapper_Db_LinkIterator.h              \
+           Mapper_Db_ConnectionIterator.h
+
+JFLAGS = -source 1.5 -target 1.5
+JCLASSES = Mapper/NativeLib.class Mapper/Device.class                       \
+           Mapper/PropertyValue.class Mapper/TimeTag.class                  \
+           Mapper/InputListener.class Mapper/InstanceEventListener.class    \
+           Mapper/Monitor.class Mapper/Db/Device.class                      \
+           Mapper/Db/Signal.class Mapper/Db/Link.class                      \
+           Mapper/Db/Connection.class Mapper/Db/DeviceListener.class        \
+           Mapper/Db/SignalListener.class Mapper/Db/LinkListener.class      \
+           Mapper/Db/ConnectionListener.class                               \
+           Mapper/Db/DeviceCollection.class Mapper/Db/DeviceIterator.class  \
+           Mapper/Db/SignalCollection.class Mapper/Db/SignalIterator.class  \
+           Mapper/Db/LinkCollection.class Mapper/Db/LinkIterator.class      \
+           Mapper/Db/ConnectionCollection.class                             \
+           Mapper/Db/ConnectionIterator.class
+
+JCLASSESINTERNAL = Mapper/Device$$Signal.class Mapper/Device$$1.class	\
+                   Mapper/PropertyValue$$PropertyException.class
+
+JJAVA = $(JCLASSES:%.class=%.java)
+BUILT_SOURCES = $(JHEADERS) test.class testquery.class testreverse.class \
+    testspeed.class libmapper- at MAJOR_VERSION@.jar
+
+MOSTLYCLEANFILES = $(BUILT_SOURCES) $(JCLASSES) $(subst $$,\$$,$(JCLASSESINTERNAL)) \
+	$(subst $$,\$$,test$$1.class test$$2.class test$$3.class testquery$$1.class \
+    testquery$$2.class testquery$$3.class testreverse$$1.class testreverse$$2.class \
+    testreverse$$3.class testspeed$$1.class testspeed$$2.class testspeed$$3.class)
+
+EXTRA_DIST = $(JJAVA) test.java testquery.java testreverse.java testspeed.java \
+             $(JHEADERS)
+
+all: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign jni/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign jni/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libmapperjni- at MAJOR_VERSION@.la: $(libmapperjni_ at MAJOR_VERSION@_la_OBJECTS) $(libmapperjni_ at MAJOR_VERSION@_la_DEPENDENCIES) $(EXTRA_libmapperjni_ at MAJOR_VERSION@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libmapperjni_ at MAJOR_VERSION@_la_LINK) -rpath $(libdir) $(libmapperjni_ at MAJOR_VERSION@_la_OBJECTS) $(libmapperjni_ at MAJOR_VERSION@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapperjni_ at MAJOR_VERSION@_la-mapperjni.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libmapperjni_ at MAJOR_VERSION@_la-mapperjni.lo: mapperjni.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapperjni_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapperjni_ at MAJOR_VERSION@_la-mapperjni.lo -MD -MP -MF $(DEPDIR)/libmapperjni_ at MAJOR_VERSION@_la-mapperjni.Tpo -c -o libmapperjni_ at MAJOR_VERSION@_la-mapperjni.lo `test -f 'mapperjni.c' || echo '$(srcdir)/'`mapperjni.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapperjni_ at MAJOR_VERSION@_la-mapperjni.Tpo $(DEPDIR)/libmapperjni_ at MAJOR_VERSION@_la-mapperjni.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='mapperjni.c' object='libmapperjni_ at MAJOR_VERSION@_la-mapperjni.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapperjni_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapperjni_ at MAJOR_VERSION@_la-mapperjni.lo `test -f 'mapperjni.c' || echo '$(srcdir)/'`mapperjni.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(LTLIBRARIES)
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: $(BUILT_SOURCES)
+	$(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: all check install install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags-am \
+	distclean distclean-compile distclean-generic \
+	distclean-libtool distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am \
+	install-libLTLIBRARIES install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
+
+
+Mapper_%.h: Mapper/%.class
+	$(JAVAH) $(subst /,.,$(<:%.class=%))
+	if [ -f $@ ]; then touch $@; fi
+
+Mapper_Db_%.h: Mapper/Db/%.class
+	$(JAVAH) $(subst /,.,$(<:%.class=%))
+	if [ -f $@ ]; then touch $@; fi
+
+Mapper/%.class: Mapper/%.java
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+test.class: test.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+testquery.class: testquery.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+testreverse.class: testreverse.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+testspeed.class: testspeed.java $(JCLASSES)
+	$(JAVAC) $(JFLAGS) -sourcepath @top_srcdir@/jni -d . $<
+
+libmapper- at MAJOR_VERSION@.jar: $(JCLASSES) $(JCLASSESINTERNAL)
+	$(JAR) cvf $@ $(subst $$,\$$,$^)
+	if mkdir -v TestInstances/code; then \
+	  cd TestInstances/code/; \
+	  ln -v -s ../../.libs/*.so .; \
+	  ln -v -s ../../$@; \
+	fi # For processing test sketch
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/jni/Mapper/Db/Connection.java b/jni/Mapper/Db/Connection.java
new file mode 100644
index 0000000..887da70
--- /dev/null
+++ b/jni/Mapper/Db/Connection.java
@@ -0,0 +1,122 @@
+
+package Mapper.Db;
+
+import Mapper.PropertyValue;
+
+public class Connection
+{
+    /*! Describes what happens when the range boundaries are exceeded. */
+    public static final int BA_NONE  = 0;
+    public static final int BA_MUTE  = 1;
+    public static final int BA_CLAMP = 2;
+    public static final int BA_FOLD  = 3;
+    public static final int BA_WRAP  = 4;
+
+    /*! Describes the connection mode. */
+    public static final int MO_UNDEFINED  = 0;
+    public static final int MO_BYPASS     = 1;
+    public static final int MO_LINEAR     = 2;
+    public static final int MO_EXPRESSION = 3;
+    public static final int MO_CALIBRATE  = 4;
+    public static final int MO_REVERSE    = 5;
+
+    /*! Describes the voice-stealing mode for instances. */
+    public static final int IN_UNDEFINED    = 0;
+    public static final int IN_STEAL_OLDEST = 1;
+    public static final int IN_STEAL_NEWEST = 2;
+
+    public Connection(long conprops) {
+        _conprops = conprops;
+
+        srcName = mdb_connection_get_src_name(_conprops);
+        destName = mdb_connection_get_dest_name(_conprops);
+
+        srcType = mdb_connection_get_src_type(_conprops);
+        destType = mdb_connection_get_dest_type(_conprops);
+
+        srcLength = mdb_connection_get_src_length(_conprops);
+        destLength = mdb_connection_get_dest_length(_conprops);
+
+        boundMin = mdb_connection_get_bound_min(_conprops);
+        boundMax = mdb_connection_get_bound_max(_conprops);
+
+        srcMin = mdb_connection_get_src_min(_conprops);
+        srcMax = mdb_connection_get_src_max(_conprops);
+        destMin = mdb_connection_get_dest_min(_conprops);
+        destMax = mdb_connection_get_dest_max(_conprops);
+
+        mode = mdb_connection_get_mode(_conprops);
+        expression = mdb_connection_get_expression(_conprops);
+    }
+
+    public Connection(String _srcName, String _destName) {
+        srcName = _srcName;
+        destName = _destName;
+        srcType = 0;
+        destType = 0;
+        srcLength = -1;
+        destLength = -1;
+        boundMin = -1;
+        boundMax = -1;
+        srcMin = null;
+        srcMax = null;
+        destMin = null;
+        destMax = null;
+        mode = -1;
+        expression = null;
+    }
+
+    public Connection() {
+        this(null, null);
+    }
+
+    public String srcName;
+    private native String mdb_connection_get_src_name(long p);
+
+    public String destName;
+    private native String mdb_connection_get_dest_name(long p);
+
+    public char srcType;
+    private native char mdb_connection_get_src_type(long p);
+
+    public char destType;
+    private native char mdb_connection_get_dest_type(long p);
+
+    public int srcLength;
+    private native int mdb_connection_get_src_length(long p);
+
+    public int destLength;
+    private native int mdb_connection_get_dest_length(long p);
+
+    public int boundMin;
+    private native int mdb_connection_get_bound_min(long p);
+
+    public int boundMax;
+    private native int mdb_connection_get_bound_max(long p);
+
+    public PropertyValue srcMin;
+    private native PropertyValue mdb_connection_get_src_min(long p);
+
+    public PropertyValue srcMax;
+    private native PropertyValue mdb_connection_get_src_max(long p);
+
+    public PropertyValue destMin;
+    private native PropertyValue mdb_connection_get_dest_min(long p);
+
+    public PropertyValue destMax;
+    private native PropertyValue mdb_connection_get_dest_max(long p);
+
+    public int mode;
+    private native int mdb_connection_get_mode(long p);
+
+    public String expression;
+    private native String mdb_connection_get_expression(long p);
+
+    public PropertyValue property(String property) {
+        return mapper_db_connection_property_lookup(_conprops, property);
+    }
+    private native PropertyValue mapper_db_connection_property_lookup(
+        long p, String property);
+
+    private long _conprops;
+}
diff --git a/jni/Mapper/Db/ConnectionCollection.java b/jni/Mapper/Db/ConnectionCollection.java
new file mode 100644
index 0000000..b2f6c9e
--- /dev/null
+++ b/jni/Mapper/Db/ConnectionCollection.java
@@ -0,0 +1,17 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class ConnectionCollection implements Iterable<Mapper.Db.Connection>
+{
+    public ConnectionCollection(long conprops_p) {
+        _conprops_p = conprops_p;
+    }
+
+    @Override
+    public Iterator<Mapper.Db.Connection> iterator() {
+        return new ConnectionIterator(_conprops_p);
+    }
+    private long _conprops_p;
+}
diff --git a/jni/Mapper/Db/ConnectionIterator.java b/jni/Mapper/Db/ConnectionIterator.java
new file mode 100644
index 0000000..779cf66
--- /dev/null
+++ b/jni/Mapper/Db/ConnectionIterator.java
@@ -0,0 +1,37 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class ConnectionIterator implements Iterator<Mapper.Db.Connection> {
+    public ConnectionIterator(long conprops_p) {
+        _conprops_p = conprops_p;
+    }
+
+    protected void finalize() {
+        mdb_connection_done(_conprops_p);
+    }
+    private native void mdb_connection_done(long ptr);
+
+    @Override
+    public Mapper.Db.Connection next()
+    {
+        if (_conprops_p != 0) {
+            long temp = mdb_deref(_conprops_p);
+            _conprops_p = mdb_connection_next(_conprops_p);
+            return new Mapper.Db.Connection(temp);
+        }
+        else
+            return null;
+    }
+    private native long mdb_deref(long ptr);
+    private native long mdb_connection_next(long ptr);
+
+    @Override
+    public boolean hasNext() { return _conprops_p != 0; }
+
+    @Override
+    public void remove() {}
+
+    private long _conprops_p;
+}
diff --git a/jni/Mapper/Db/ConnectionListener.java b/jni/Mapper/Db/ConnectionListener.java
new file mode 100644
index 0000000..d44209c
--- /dev/null
+++ b/jni/Mapper/Db/ConnectionListener.java
@@ -0,0 +1,7 @@
+
+package Mapper.Db;
+
+public class ConnectionListener {
+    public void onEvent(Mapper.Db.Connection record,
+                        int action) {};
+}
diff --git a/jni/Mapper/Db/Device.java b/jni/Mapper/Db/Device.java
new file mode 100644
index 0000000..8a25ad4
--- /dev/null
+++ b/jni/Mapper/Db/Device.java
@@ -0,0 +1,82 @@
+
+package Mapper.Db;
+
+import Mapper.PropertyValue;
+import Mapper.TimeTag;
+
+public class Device
+{
+    public Device(long devprops) {
+        _devprops = devprops;
+
+        _name = mdb_device_get_name(_devprops);
+        _ordinal = mdb_device_get_ordinal(_devprops);
+        _host = mdb_device_get_host(_devprops);
+        _port = mdb_device_get_port(_devprops);
+
+        _n_inputs = mdb_device_get_num_inputs(_devprops);
+        _n_outputs = mdb_device_get_num_outputs(_devprops);
+        _n_links_in = mdb_device_get_num_links_in(_devprops);
+        _n_links_out = mdb_device_get_num_links_out(_devprops);
+        _n_connections_in = mdb_device_get_num_connections_in(_devprops);
+        _n_connections_out = mdb_device_get_num_connections_out(_devprops);
+        _version = mdb_device_get_version(_devprops);
+    }
+
+    private String _name;
+    public String name() { return _name; }
+    private native String mdb_device_get_name(long p);
+
+    int _ordinal;
+    public int ordinal() { return _ordinal; }
+    private native int mdb_device_get_ordinal(long p);
+
+    private String _host;
+    public String host() { return _host; }
+    private native String mdb_device_get_host(long p);
+
+    int _port;
+    public int port() { return _port; }
+    private native int mdb_device_get_port(long p);
+
+    int _n_inputs;
+    public int numInputs() { return _n_inputs; }
+    private native int mdb_device_get_num_inputs(long p);
+
+    int _n_outputs;
+    public int munOutputs() { return _n_outputs; }
+    private native int mdb_device_get_num_outputs(long p);
+
+    int _n_links_in;
+    public int numLinksIn() { return _n_links_in; }
+    private native int mdb_device_get_num_links_in(long p);
+
+    int _n_links_out;
+    public int numLinksOut() { return _n_links_out; }
+    private native int mdb_device_get_num_links_out(long p);
+
+    int _n_connections_in;
+    public int numConnectionsIn() { return _n_connections_in; }
+    private native int mdb_device_get_num_connections_in(long p);
+
+    int _n_connections_out;
+    public int numConnectionsOut() { return _n_connections_out; }
+    private native int mdb_device_get_num_connections_out(long p);
+
+    int _version;
+    public int version() { return _version; }
+    private native int mdb_device_get_version(long p);
+
+    public TimeTag synced() {
+        return mdb_device_get_synced(_devprops);
+    }
+    private native TimeTag mdb_device_get_synced(long p);
+
+    public PropertyValue property(String property) {
+        return mdb_device_property_lookup(_devprops, property);
+    }
+    private native PropertyValue mdb_device_property_lookup(
+        long p, String property);
+
+    private long _devprops;
+}
diff --git a/jni/Mapper/Db/DeviceCollection.java b/jni/Mapper/Db/DeviceCollection.java
new file mode 100644
index 0000000..c4099be
--- /dev/null
+++ b/jni/Mapper/Db/DeviceCollection.java
@@ -0,0 +1,17 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class DeviceCollection implements Iterable<Mapper.Db.Device>
+{
+    public DeviceCollection(long devprops_p) {
+        _devprops_p = devprops_p;
+    }
+
+    @Override
+    public Iterator<Mapper.Db.Device> iterator() {
+        return new DeviceIterator(_devprops_p);
+    }
+    private long _devprops_p;
+}
diff --git a/jni/Mapper/Db/DeviceIterator.java b/jni/Mapper/Db/DeviceIterator.java
new file mode 100644
index 0000000..b942f31
--- /dev/null
+++ b/jni/Mapper/Db/DeviceIterator.java
@@ -0,0 +1,37 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class DeviceIterator implements Iterator<Mapper.Db.Device> {
+    public DeviceIterator(long devprops_p) {
+        _devprops_p = devprops_p;
+    }
+
+    protected void finalize() {
+        mdb_device_done(_devprops_p);
+    }
+    private native void mdb_device_done(long ptr);
+
+    @Override
+    public Mapper.Db.Device next()
+    {
+        if (_devprops_p != 0) {
+            long temp = mdb_deref(_devprops_p);
+            _devprops_p = mdb_device_next(_devprops_p);
+            return new Mapper.Db.Device(temp);
+        }
+        else
+            return null;
+    }
+    private native long mdb_deref(long ptr);
+    private native long mdb_device_next(long ptr);
+
+    @Override
+    public boolean hasNext() { return _devprops_p != 0; }
+
+    @Override
+    public void remove() {}
+
+    private long _devprops_p;
+}
diff --git a/jni/Mapper/Db/DeviceListener.java b/jni/Mapper/Db/DeviceListener.java
new file mode 100644
index 0000000..7f63419
--- /dev/null
+++ b/jni/Mapper/Db/DeviceListener.java
@@ -0,0 +1,7 @@
+
+package Mapper.Db;
+
+public class DeviceListener {
+    public void onEvent(Mapper.Db.Device record,
+                        int action) {};
+}
diff --git a/jni/Mapper/Db/Link.java b/jni/Mapper/Db/Link.java
new file mode 100644
index 0000000..b1b2b09
--- /dev/null
+++ b/jni/Mapper/Db/Link.java
@@ -0,0 +1,65 @@
+
+package Mapper.Db;
+
+import Mapper.PropertyValue;
+
+public class Link
+{
+    public Link(long linkprops) {
+        _linkprops = linkprops;
+
+        _src_name = mdb_link_get_src_name(_linkprops);
+        _dest_name = mdb_link_get_dest_name(_linkprops);
+
+        _src_host = mdb_link_get_src_host(_linkprops);
+        _src_port = mdb_link_get_src_port(_linkprops);
+        _dest_host = mdb_link_get_dest_host(_linkprops);
+        _dest_port = mdb_link_get_dest_port(_linkprops);
+
+        _num_scopes = mdb_link_get_num_scopes(_linkprops);
+        _scope_names = mdb_link_get_scope_names(_linkprops);
+    }
+
+    private String _src_name;
+    public String srcName() { return _src_name; }
+    private native String mdb_link_get_src_name(long p);
+
+    private String _dest_name;
+    public String destName() { return _dest_name; }
+    private native String mdb_link_get_dest_name(long p);
+
+    private String _src_host;
+    public String srcHost() { return _src_host; }
+    private native String mdb_link_get_src_host(long p);
+
+    int _src_port;
+    public int srcPort() { return _src_port; }
+    private native int mdb_link_get_src_port(long p);
+
+    private String _dest_host;
+    public String destHost() { return _dest_host; }
+    private native String mdb_link_get_dest_host(long p);
+
+    int _dest_port;
+    public int destPort() { return _dest_port; }
+    private native int mdb_link_get_dest_port(long p);
+
+    int _num_scopes;
+    public int numScopes() { return _num_scopes; }
+    private native int mdb_link_get_num_scopes(long p);
+
+    PropertyValue _scope_names;
+    public PropertyValue scopeNames() {
+        _scope_names = mdb_link_get_scope_names(_linkprops);
+        return _scope_names;
+    }
+    private native PropertyValue mdb_link_get_scope_names(long p);
+
+    public PropertyValue property(String property) {
+        return mapper_db_link_property_lookup(_linkprops, property);
+    }
+    private native PropertyValue mapper_db_link_property_lookup(
+        long p, String property);
+
+    private long _linkprops;
+}
diff --git a/jni/Mapper/Db/LinkCollection.java b/jni/Mapper/Db/LinkCollection.java
new file mode 100644
index 0000000..502c41f
--- /dev/null
+++ b/jni/Mapper/Db/LinkCollection.java
@@ -0,0 +1,17 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class LinkCollection implements Iterable<Mapper.Db.Link>
+{
+    public LinkCollection(long linkprops_p) {
+        _linkprops_p = linkprops_p;
+    }
+
+    @Override
+    public Iterator<Mapper.Db.Link> iterator() {
+        return new LinkIterator(_linkprops_p);
+    }
+    private long _linkprops_p;
+}
diff --git a/jni/Mapper/Db/LinkIterator.java b/jni/Mapper/Db/LinkIterator.java
new file mode 100644
index 0000000..b4aa046
--- /dev/null
+++ b/jni/Mapper/Db/LinkIterator.java
@@ -0,0 +1,37 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class LinkIterator implements Iterator<Mapper.Db.Link> {
+    public LinkIterator(long linkprops_p) {
+        _linkprops_p = linkprops_p;
+    }
+
+    protected void finalize() {
+        mdb_link_done(_linkprops_p);
+    }
+    private native void mdb_link_done(long ptr);
+
+    @Override
+    public Mapper.Db.Link next()
+    {
+        if (_linkprops_p != 0) {
+            long temp = mdb_deref(_linkprops_p);
+            _linkprops_p = mdb_link_next(_linkprops_p);
+            return new Mapper.Db.Link(temp);
+        }
+        else
+            return null;
+    }
+    private native long mdb_deref(long ptr);
+    private native long mdb_link_next(long ptr);
+
+    @Override
+    public boolean hasNext() { return _linkprops_p != 0; }
+
+    @Override
+    public void remove() {}
+
+    private long _linkprops_p;
+}
diff --git a/jni/Mapper/Db/LinkListener.java b/jni/Mapper/Db/LinkListener.java
new file mode 100644
index 0000000..eb61445
--- /dev/null
+++ b/jni/Mapper/Db/LinkListener.java
@@ -0,0 +1,7 @@
+
+package Mapper.Db;
+
+public class LinkListener {
+    public void onEvent(Mapper.Db.Link record,
+                        int action) {};
+}
diff --git a/jni/Mapper/Db/Signal.java b/jni/Mapper/Db/Signal.java
new file mode 100644
index 0000000..3b0db00
--- /dev/null
+++ b/jni/Mapper/Db/Signal.java
@@ -0,0 +1,72 @@
+
+package Mapper.Db;
+
+import Mapper.PropertyValue;
+
+public class Signal
+{
+    public Signal(long sigprops) {
+        _sigprops = sigprops;
+
+        _name = mdb_signal_get_name(_sigprops);
+        _device_name = mdb_signal_get_device_name(_sigprops);
+
+        _is_output = mdb_signal_get_is_output(_sigprops);
+        _type = mdb_signal_get_type(_sigprops);
+        _length = mdb_signal_get_length(_sigprops);
+        _unit = mdb_signal_get_unit(_sigprops);
+        _minimum = mdb_signal_get_minimum(_sigprops);
+        _maximum = mdb_signal_get_maximum(_sigprops);
+        _rate = mdb_signal_get_rate(_sigprops);
+    }
+
+    private String _name;
+    public String name() { return _name; }
+    private native String mdb_signal_get_name(long p);
+
+    private String _device_name;
+    public String deviceName() { return _device_name; }
+    private native String mdb_signal_get_device_name(long p);
+
+	boolean _is_output;
+    public boolean isOutput() { return _is_output; }
+    private native boolean mdb_signal_get_is_output(long p);
+
+    char _type;
+    public char type() { return _type; }
+    private native char mdb_signal_get_type(long p);
+
+    int _length;
+    public int length() { return _length; }
+    private native int mdb_signal_get_length(long p);
+
+    private String _unit;
+    public String unit() { return _unit; }
+    private native String mdb_signal_get_unit(long p);
+
+    PropertyValue _minimum;
+    public PropertyValue minimum() {
+        _minimum = mdb_signal_get_minimum(_sigprops);
+        return _minimum;
+    }
+    private native PropertyValue mdb_signal_get_minimum(long p);
+
+    PropertyValue _maximum;
+    public PropertyValue maximum() {
+        _maximum = mdb_signal_get_maximum(_sigprops);
+        return _maximum;
+    }
+    private native PropertyValue mdb_signal_get_maximum(long p);
+
+    double _rate;
+    public double rate() { return _rate; }
+    private native double mdb_signal_get_rate(long p);
+
+    public PropertyValue property(String property) {
+        return mdb_signal_property_lookup(_sigprops, property);
+    }
+    private native PropertyValue mdb_signal_property_lookup(
+        long p, String property);
+
+    private long _sigprops;
+}
diff --git a/jni/Mapper/Db/SignalCollection.java b/jni/Mapper/Db/SignalCollection.java
new file mode 100644
index 0000000..6af9922
--- /dev/null
+++ b/jni/Mapper/Db/SignalCollection.java
@@ -0,0 +1,17 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class SignalCollection implements Iterable<Mapper.Db.Signal>
+{
+    public SignalCollection(long sigprops_p) {
+        _sigprops_p = sigprops_p;
+    }
+
+    @Override
+    public Iterator<Mapper.Db.Signal> iterator() {
+        return new SignalIterator(_sigprops_p);
+    }
+    private long _sigprops_p;
+}
diff --git a/jni/Mapper/Db/SignalIterator.java b/jni/Mapper/Db/SignalIterator.java
new file mode 100644
index 0000000..2a44402
--- /dev/null
+++ b/jni/Mapper/Db/SignalIterator.java
@@ -0,0 +1,37 @@
+
+package Mapper.Db;
+
+import java.util.Iterator;
+
+public class SignalIterator implements Iterator<Mapper.Db.Signal> {
+    public SignalIterator(long sigprops_p) {
+        _sigprops_p = sigprops_p;
+    }
+
+    protected void finalize() {
+        mdb_signal_done(_sigprops_p);
+    }
+    private native void mdb_signal_done(long ptr);
+
+    @Override
+    public Mapper.Db.Signal next()
+    {
+        if (_sigprops_p != 0) {
+            long temp = mdb_deref(_sigprops_p);
+            _sigprops_p = mdb_signal_next(_sigprops_p);
+            return new Mapper.Db.Signal(temp);
+        }
+        else
+            return null;
+    }
+    private native long mdb_deref(long ptr);
+    private native long mdb_signal_next(long ptr);
+
+    @Override
+    public boolean hasNext() { return _sigprops_p != 0; }
+
+    @Override
+    public void remove() {}
+
+    private long _sigprops_p;
+}
diff --git a/jni/Mapper/Db/SignalListener.java b/jni/Mapper/Db/SignalListener.java
new file mode 100644
index 0000000..38d5809
--- /dev/null
+++ b/jni/Mapper/Db/SignalListener.java
@@ -0,0 +1,7 @@
+
+package Mapper.Db;
+
+public class SignalListener {
+    public void onEvent(Mapper.Db.Signal record,
+                        int action) {};
+}
diff --git a/jni/Mapper/Device.java b/jni/Mapper/Device.java
new file mode 100644
index 0000000..43feee3
--- /dev/null
+++ b/jni/Mapper/Device.java
@@ -0,0 +1,431 @@
+
+package Mapper;
+
+import Mapper.NativeLib;
+import Mapper.PropertyValue;
+import Mapper.Db.*;
+
+public class Device
+{
+    /*! The set of possible actions on a local device link or
+     *  connection. */
+    public static final int MDEV_LOCAL_ESTABLISHED  = 0;
+    public static final int MDEV_LOCAL_MODIFIED     = 1;
+    public static final int MDEV_LOCAL_DESTROYED    = 2;
+
+    public Device(String name) {
+        _device = mdev_new(name, 0);
+    }
+    public Device(String name, int port) {
+        _device = mdev_new(name, port);
+    }
+
+    public void free() {
+        if (_device!=0)
+            mdev_free(_device);
+        _device = 0;
+    }
+
+    public int poll(int timeout) {
+        return mdev_poll(_device, timeout);
+    }
+
+    public int poll() {
+        return mdev_poll(_device, 0);
+    }
+
+    public class Signal {
+
+        /*! Describes the voice-stealing mode for instances.
+         *  Arguments to set_instance_allocation_mode(). */
+        public static final int IN_UNDEFINED                        = 0;
+        public static final int IN_STEAL_OLDEST                     = 1;
+        public static final int IN_STEAL_NEWEST                     = 2;
+
+        private Signal(long s, Device d) { _signal = s; _device = d; }
+
+        public String name()
+        {
+            checkDevice();
+            return msig_name(_signal);
+        }
+        public String fullName()
+        {
+            checkDevice();
+            return msig_full_name(_signal);
+        }
+        public boolean isOutput()
+        {
+            checkDevice();
+            return msig_is_output(_signal);
+        }
+        public void setMinimum(PropertyValue p) {
+            checkDevice();
+            msig_set_property(_signal, new String("min"), p);
+        }
+        public void setMaximum(PropertyValue p) {
+            checkDevice();
+            msig_set_property(_signal, new String("max"), p);
+        }
+        public void setRate(double rate) {
+            checkDevice();
+            msig_set_rate(_signal, rate);
+        }
+        public void setProperty(String property, PropertyValue p)
+        {
+            checkDevice();
+            msig_set_property(_signal, property, p);
+        }
+        public void removeProperty(String property)
+        {
+            checkDevice();
+            msig_remove_property(_signal, property);
+        }
+
+        private native String msig_full_name(long sig);
+        private native String msig_name(long sig);
+        private native boolean msig_is_output(long sig);
+        private native void msig_set_rate(long sig, double rate);
+        public native Mapper.Db.Signal properties();
+        private native void msig_set_property(long sig, String property,
+                                              PropertyValue p);
+        private native void msig_remove_property(long sig, String property);
+
+        public native void setInstanceEventCallback(
+            InstanceEventListener handler, int flags);
+        public native void setCallback(InputListener handler);
+
+        public native void setInstanceCallback(int instanceId,
+                                               InputListener cb);
+        public native InputListener getInstanceCallback(int instanceId);
+
+        public native int reserveInstances(int[] ids, int num, InputListener cb);
+        public int reserveInstances(int num)
+            { return reserveInstances(null, num, null); }
+        public int reserveInstances(int[] ids)
+            { return reserveInstances(ids, 0, null); }
+        public int reserveInstances(int num, InputListener cb)
+            { return reserveInstances(null, num, cb); }
+        public int reserveInstances(int[] ids, InputListener cb)
+            { return reserveInstances(ids, 0, cb); }
+
+
+        public native void releaseInstance(int instanceId, TimeTag tt);
+        public void releaseInstance(int instanceId)
+            { releaseInstance(instanceId, null); }
+        public native void removeInstance(int num);
+
+        public native Integer oldestActiveInstance();
+        public native Integer newestActiveInstance();
+
+        public native void matchInstances(Signal from, Signal to,
+                                          int instanceId);
+        public native int numActiveInstances();
+        public native int numReservedInstances();
+        public native int activeInstanceId(int index);
+        public native void setInstanceAllocationMode(int mode);
+        public native int instanceAllocationMode();
+
+        public native int numConnections();
+
+        public native void updateInstance(int instanceId,
+                                          int value, TimeTag tt);
+        public native void updateInstance(int instanceId,
+                                          float value, TimeTag tt);
+        public native void updateInstance(int instanceId,
+                                          double value, TimeTag tt);
+        public native void updateInstance(int instanceId,
+                                          int[] value, TimeTag tt);
+        public native void updateInstance(int instanceId,
+                                          float[] value, TimeTag tt);
+        public native void updateInstance(int instanceId,
+                                          double[] value, TimeTag tt);
+
+        public void updateInstance(int instanceId, int value)
+            { updateInstance(instanceId, value, null); }
+        public void updateInstance(int instanceId, float value)
+            { updateInstance(instanceId, value, null); }
+        public void updateInstance(int instanceId, double value)
+            { updateInstance(instanceId, value, null); }
+        public void updateInstance(int instanceId, int[] value)
+            { updateInstance(instanceId, value, null); }
+        public void updateInstance(int instanceId, float[] value)
+            { updateInstance(instanceId, value, null); }
+        public void updateInstance(int instanceId, double[] value)
+            { updateInstance(instanceId, value, null); }
+
+        public void update(int value)
+            { updateInstance(0, value, null); }
+        public void update(float value)
+            { updateInstance(0, value, null); }
+        public void update(double value)
+            { updateInstance(0, value, null); }
+        public void update(int[] value)
+            { updateInstance(0, value, null); }
+        public void update(float[] value)
+            { updateInstance(0, value, null); }
+        public void update(double[] value)
+            { updateInstance(0, value, null); }
+
+        public void update(int value, TimeTag tt)
+            { updateInstance(0, value, tt); }
+        public void update(float value, TimeTag tt)
+            { updateInstance(0, value, tt); }
+        public void update(double value, TimeTag tt)
+            { updateInstance(0, value, tt); }
+        public void update(int[] value, TimeTag tt)
+            { updateInstance(0, value, tt); }
+        public void update(float[] value, TimeTag tt)
+            { updateInstance(0, value, tt); }
+        public void update(double[] value, TimeTag tt)
+            { updateInstance(0, value, tt); }
+
+        public native boolean instanceValue(int instanceId,
+                                            int[] value, TimeTag tt);
+        public native boolean instanceValue(int instanceId,
+                                            float[] value, TimeTag tt);
+        public native boolean instanceValue(int instanceId,
+                                            double[] value, TimeTag tt);
+
+        public boolean instanceValue(int instanceId, int[] value)
+            { return instanceValue(instanceId, value, null); }
+        public boolean instanceValue(int instanceId, float[] value)
+            { return instanceValue(instanceId, value, null); }
+        public boolean instanceValue(int instanceId, double[] value)
+            { return instanceValue(instanceId, value, null); }
+
+        public boolean value(int[] value, TimeTag tt)
+            { return instanceValue(0, value, tt); }
+        public boolean value(float[] value, TimeTag tt)
+            { return instanceValue(0, value, tt); }
+        public boolean value(double[] value, TimeTag tt)
+            { return instanceValue(0, value, tt); }
+
+        public boolean value(int[] value)
+            { return instanceValue(0, value, null); }
+        public boolean value(float[] value)
+            { return instanceValue(0, value, null); }
+        public boolean value(double[] value)
+            { return instanceValue(0, value, null); }
+
+        public native int queryRemotes(TimeTag tt);
+        public int queryRemotes()
+            { return queryRemotes(null); };
+
+        public int index()
+        {
+            checkDevice();
+            if (_index==null) {
+                _index = new Integer(-1);
+                long msig = 0;
+                if (isOutput())
+                    msig = mdev_get_output_by_name(_device._device,
+                                                   msig_name(_signal),
+                                                   _index);
+                else
+                    msig = mdev_get_input_by_name(_device._device,
+                                                  msig_name(_signal),
+                                                  _index);
+                if (msig==0)
+                    _index = null;
+            }
+            return _index;
+        }
+
+        private void checkDevice() {
+            if (_device._device == 0)
+                throw new NullPointerException(
+                    "Signal object associated with invalid Device");
+        }
+
+        public boolean valid() {
+            return _device._device != 0;
+        }
+
+        private long _signal;
+        private Device _device;
+        private Integer _index;
+    };
+
+    public void removeInput(Signal sig)
+    {
+        mdev_remove_input(_device, sig._signal);
+    }
+
+    public void removeOutput(Signal sig)
+    {
+        mdev_remove_output(_device, sig._signal);
+    }
+
+    public int numInputs()
+    {
+        return mdev_num_inputs(_device);
+    }
+
+    public int numOutputs()
+    {
+        return mdev_num_outputs(_device);
+    }
+
+    public int numLinksIn()
+    {
+        return mdev_num_links_in(_device);
+    }
+
+    public int numLinksOut()
+    {
+        return mdev_num_links_out(_device);
+    }
+
+    public int numConnectionsIn()
+    {
+        return mdev_num_connections_in(_device);
+    }
+
+    public int numConnectionsOut()
+    {
+        return mdev_num_connections_out(_device);
+    }
+
+    public Signal getInput(String name)
+    {
+        long msig = mdev_get_input_by_name(_device, name, null);
+        return msig==0 ? null : new Signal(msig, this);
+    }
+
+    public Signal getOutput(String name)
+    {
+        long msig = mdev_get_output_by_name(_device, name, null);
+        return msig==0 ? null : new Signal(msig, this);
+    }
+
+    public Signal getInput(int index)
+    {
+        long msig = mdev_get_input_by_index(_device, index);
+        return msig==0 ? null : new Signal(msig, this);
+    }
+
+    public Signal getOutput(int index)
+    {
+        long msig = mdev_get_output_by_index(_device, index);
+        return msig==0 ? null : new Signal(msig, this);
+    }
+
+    public void setProperty(String property, PropertyValue p)
+    {
+        mdev_set_property(_device, property, p);
+    }
+
+    public void removeProperty(String property)
+    {
+        mdev_remove_property(_device, property);
+    }
+
+    public boolean ready()
+    {
+        return mdev_ready(_device);
+    }
+
+    public String name()
+    {
+        return mdev_name(_device);
+    }
+
+    public int port()
+    {
+        return mdev_port(_device);
+    }
+
+    public String ip4()
+    {
+        return mdev_ip4(_device);
+    }
+
+    public String iface()
+    {
+        return mdev_interface(_device);
+    }
+
+    public int ordinal()
+    {
+        return mdev_ordinal(_device);
+    }
+
+    public int id()
+    {
+        return mdev_id(_device);
+    }
+
+    public void startQueue(TimeTag tt)
+    {
+        mdev_start_queue(_device, tt);
+    }
+
+    public void sendQueue(TimeTag tt)
+    {
+        mdev_send_queue(_device, tt);
+    }
+
+    public TimeTag now()
+    {
+        return mdev_now(_device);
+    }
+
+    // Note: this is _not_ guaranteed to run, the user should still
+    // call free() explicitly when the device is no longer needed.
+    protected void finalize() throws Throwable {
+        try {
+            free();
+        } finally {
+            super.finalize();
+        }
+    }
+
+    private native long mdev_new(String name, int port);
+    private native void mdev_free(long _d);
+    private native int mdev_poll(long _d, int timeout);
+    private native void mdev_remove_input(long _d, long _sig);
+    private native void mdev_remove_output(long _d, long _sig);
+    private native int mdev_num_inputs(long _d);
+    private native int mdev_num_outputs(long _d);
+    private native int mdev_num_links_in(long _d);
+    private native int mdev_num_links_out(long _d);
+    private native int mdev_num_connections_in(long _d);
+    private native int mdev_num_connections_out(long _d);
+    private native long mdev_get_input_by_name(long _d, String name,
+                                               Integer index);
+    private native long mdev_get_output_by_name(long _d, String name,
+                                                Integer index);
+    private native long mdev_get_input_by_index(long _d, int index);
+    private native long mdev_get_output_by_index(long _d, int index);
+    public native Mapper.Db.Device properties();
+    private native void mdev_set_property(long _d, String property,
+                                          PropertyValue p);
+    private native void mdev_remove_property(long _d, String property);
+    private native boolean mdev_ready(long _d);
+    private native String mdev_name(long _d);
+    private native int mdev_port(long _d);
+    private native String mdev_ip4(long _d);
+    private native String mdev_interface(long _d);
+    private native int mdev_ordinal(long _d);
+    private native int mdev_id(long _d);
+    private native void mdev_start_queue(long _d, TimeTag tt);
+    private native void mdev_send_queue(long _d, TimeTag tt);
+    private native TimeTag mdev_now(long _d);
+
+    public native Signal addInput(String name, int length, char type, String unit,
+                                  PropertyValue minimum, PropertyValue maximum,
+                                  InputListener handler);
+
+    public native Signal addOutput(String name, int length, char type, String unit,
+                                   PropertyValue minimum, PropertyValue maximum);
+
+    private long _device;
+    public boolean valid() {
+        return _device != 0;
+    }
+
+    static {
+        System.loadLibrary(NativeLib.name);
+    }
+}
diff --git a/jni/Mapper/InputListener.java b/jni/Mapper/InputListener.java
new file mode 100644
index 0000000..ca17f66
--- /dev/null
+++ b/jni/Mapper/InputListener.java
@@ -0,0 +1,17 @@
+
+package Mapper;
+
+public class InputListener {
+    public void onInput(Mapper.Device.Signal sig,
+                        int instanceId,
+                        float[] v,
+                        TimeTag tt) {};
+    public void onInput(Mapper.Device.Signal sig,
+                        int instanceId,
+                        int[] v,
+                        TimeTag tt) {};
+    public void onInput(Mapper.Device.Signal sig,
+                        int instanceId,
+                        double[] v,
+                        TimeTag tt) {};
+}
diff --git a/jni/Mapper/InstanceEventListener.java b/jni/Mapper/InstanceEventListener.java
new file mode 100644
index 0000000..34892d6
--- /dev/null
+++ b/jni/Mapper/InstanceEventListener.java
@@ -0,0 +1,17 @@
+
+package Mapper;
+
+public class InstanceEventListener {
+    /*! The set of possible actions on an instance, used to
+     *  register callbacks to inform them of what is happening. */
+    public static final int IN_NEW                = 0x01;
+    public static final int IN_UPSTREAM_RELEASE   = 0x02;
+    public static final int IN_DOWNSTREAM_RELEASE = 0x04;
+    public static final int IN_OVERFLOW           = 0x08;
+    public static final int IN_ALL                = 0xFF;
+
+    public void onEvent(Mapper.Device.Signal sig,
+                        int instanceId,
+                        int event,
+                        TimeTag tt) {};
+}
diff --git a/jni/Mapper/LinkListener.java b/jni/Mapper/LinkListener.java
new file mode 100644
index 0000000..f66984d
--- /dev/null
+++ b/jni/Mapper/LinkListener.java
@@ -0,0 +1,13 @@
+
+package Mapper;
+
+public class LinkListener {
+    /*! The set of possible actions on a local device link or connection. */
+    public static final int MDEV_LOCAL_ESTABLISHED = 0;
+    public static final int MDEV_LOCAL_MODIFIED    = 1;
+    public static final int MDEV_LOCAL_DESTROYED   = 2;
+
+    public void onLink(Mapper.Device dev,
+                       Mapper.Db.Link link,
+                       int action) {};
+}
diff --git a/jni/Mapper/Monitor.java b/jni/Mapper/Monitor.java
new file mode 100644
index 0000000..e65fe78
--- /dev/null
+++ b/jni/Mapper/Monitor.java
@@ -0,0 +1,300 @@
+
+package Mapper;
+
+import Mapper.NativeLib;
+import Mapper.PropertyValue;
+import Mapper.TimeTag;
+import Mapper.Db.*;
+
+public class Monitor
+{
+    /*! Bit flags for coordinating monitor metadata subscriptions. */
+    public static final int SUB_NONE                    = 0x00;
+    public static final int SUB_DEVICE                  = 0x01;
+    public static final int SUB_DEVICE_INPUTS           = 0x03;
+    public static final int SUB_DEVICE_OUTPUTS          = 0x05;
+    public static final int SUB_DEVICE_SIGNALS          = 0x07;
+    public static final int SUB_DEVICE_LINKS            = 0x09;
+    public static final int SUB_DEVICE_CONNECTIONS_IN   = 0x21;
+    public static final int SUB_DEVICE_CONNECTIONS_OUT  = 0x41;
+    public static final int SUB_DEVICE_CONNECTIONS      = 0x61;
+    public static final int SUB_DEVICE_ALL              = 0xFF;
+
+    public Monitor(int autosubscribeFlags) {
+        _monitor = mmon_new(autosubscribeFlags);
+        Db = this.new Db(mmon_get_db(_monitor));
+    }
+    public Monitor() {
+        _monitor = mmon_new(0);
+        Db = this.new Db(mmon_get_db(_monitor));
+    }
+
+    public void free() {
+        if (_monitor!=0)
+            mmon_free(_monitor);
+        _monitor = 0;
+    }
+
+    public int poll(int timeout) {
+        return mmon_poll(_monitor, timeout);
+    }
+
+    public class Db {
+
+        /*! The set of possible actions on a db entity. */
+        public static final int MODIFIED = 0;
+        public static final int NEW      = 1;
+        public static final int REMOVED  = 2;
+
+        private Db(long d) {
+            _db = d;
+            _device_cb = null;
+            _signal_cb = null;
+            _link_cb = null;
+            _connection_cb = null;
+        }
+
+        private void checkMonitor() {
+            if (_monitor._monitor == 0)
+                throw new NullPointerException(
+                    "Db object associated with invalid Monitor");
+        }
+
+        public boolean valid() {
+            return _monitor._monitor != 0;
+        }
+
+        // Callbacks
+        public void addDeviceCallback(Mapper.Db.DeviceListener handler)
+        {
+            if (handler != _device_cb)
+                mdb_remove_device_callback(_db, _device_cb);
+            mdb_add_device_callback(_db, handler);
+            _device_cb = handler;
+        }
+        private native void mdb_add_device_callback(long db, Mapper.Db.DeviceListener handler);
+
+        public void removeDeviceCallback(Mapper.Db.DeviceListener handler)
+        {
+            mdb_remove_device_callback(_db, handler);
+        }
+        private native void mdb_remove_device_callback(long db, Mapper.Db.DeviceListener handler);
+
+        public void addSignalCallback(Mapper.Db.SignalListener handler)
+        {
+            if (handler != _signal_cb)
+                mdb_remove_signal_callback(_db, _signal_cb);
+            mdb_add_signal_callback(_db, handler);
+            _signal_cb = handler;
+        }
+        private native void mdb_add_signal_callback(long db, Mapper.Db.SignalListener handler);
+
+        public void removeSignalCallback(Mapper.Db.SignalListener handler)
+        {
+            mdb_remove_signal_callback(_db, handler);
+        }
+        private native void mdb_remove_signal_callback(long db, Mapper.Db.SignalListener handler);
+
+        public void addLinkCallback(Mapper.Db.LinkListener handler)
+        {
+            if (handler != _link_cb)
+                mdb_remove_link_callback(_db, _link_cb);
+            mdb_add_link_callback(_db, handler);
+            _link_cb = handler;
+        }
+        private native void mdb_add_link_callback(long _p, Mapper.Db.LinkListener handler);
+
+        public void removeLinkCallback(Mapper.Db.LinkListener handler)
+        {
+            mdb_remove_link_callback(_db, handler);
+        }
+        private native void mdb_remove_link_callback(long db, Mapper.Db.LinkListener handler);
+
+        public void addConnectionCallback(Mapper.Db.ConnectionListener handler)
+        {
+            if (handler != _connection_cb)
+                mdb_remove_connection_callback(_db, _connection_cb);
+            mdb_add_connection_callback(_db, handler);
+            _connection_cb = handler;
+        }
+        private native void mdb_add_connection_callback(long db, Mapper.Db.ConnectionListener handler);
+
+        public void removeConnectionCallback(Mapper.Db.ConnectionListener handler)
+        {
+            mdb_remove_connection_callback(_db, handler);
+        }
+        private native void mdb_remove_connection_callback(long db, Mapper.Db.ConnectionListener handler);
+
+        // Db.Device
+        public native Mapper.Db.DeviceCollection devices();
+        public native Mapper.Db.Device get_device(String deviceName);
+        public native Mapper.Db.DeviceCollection match_devices(String pattern);
+
+        // Db.Input
+        public native Mapper.Db.Signal getInput(String deviceName,
+                                                String signalName);
+        private native long mdb_inputs(long db, String deviceName);
+        public Mapper.Db.SignalCollection inputs() {
+            long _s = mdb_inputs(_db, null);
+            return (_s == 0) ? null : new Mapper.Db.SignalCollection(_s);
+        }
+        public Mapper.Db.SignalCollection inputs(String deviceName) {
+            long _s = mdb_inputs(_db, deviceName);
+            return (_s == 0) ? null : new Mapper.Db.SignalCollection(_s);
+        }
+        public native Mapper.Db.SignalCollection matchInputs(String deviceName,
+                                                             String signalPattern);
+
+        // Db.Output
+        public native Mapper.Db.Signal getOutput(String deviceName,
+                                                 String signalName);
+        private native long mdb_outputs(long db, String deviceName);
+        public Mapper.Db.SignalCollection outputs() {
+            long _s = mdb_outputs(_db, null);
+            return (_s == 0) ? null : new Mapper.Db.SignalCollection(_s);
+        }
+        public Mapper.Db.SignalCollection outputs(String deviceName) {
+            long _s = mdb_outputs(_db, deviceName);
+            return (_s == 0) ? null : new Mapper.Db.SignalCollection(_s);
+        }
+        public native Mapper.Db.SignalCollection matchOutputs(String deviceName,
+                                                              String signalPattern);
+
+        // Db.Link
+        public native Mapper.Db.Link getLink(String srcName, String destName);
+        private native Mapper.Db.LinkCollection mdb_links(long db, String deviceName);
+        public Mapper.Db.LinkCollection links(String deviceName)
+            { return mdb_links(_db, deviceName); }
+        public Mapper.Db.LinkCollection links()
+            { return mdb_links(_db, null); }
+        public native Mapper.Db.LinkCollection links(Mapper.Db.DeviceCollection src,
+                                                     Mapper.Db.DeviceCollection dest);
+        public native Mapper.Db.LinkCollection linksBySrc(String deviceName);
+        public native Mapper.Db.LinkCollection linksByDest(String deviceName);
+
+        // Db.Connection
+        private native Mapper.Db.ConnectionCollection mdb_connections(
+            long db, String deviceName);
+        public Mapper.Db.ConnectionCollection connections(String deviceName)
+            { return mdb_connections(_db, deviceName); }
+        public Mapper.Db.ConnectionCollection connections()
+            { return mdb_connections(_db, null); }
+        public native Mapper.Db.ConnectionCollection connections(
+            Mapper.Db.SignalCollection src, Mapper.Db.SignalCollection dest);
+        private native Mapper.Db.ConnectionCollection mdb_connections_by_src(
+            long db, String deviceName, String signalName);
+        public Mapper.Db.ConnectionCollection connectionsBySrc(String signalName)
+            { return mdb_connections_by_src(_db, null, signalName); }
+        public Mapper.Db.ConnectionCollection connectionsBySrc(String deviceName,
+                                                               String signalName)
+            { return mdb_connections_by_src(_db, deviceName, signalName); }
+        private native Mapper.Db.ConnectionCollection mdb_connections_by_dest(
+            long db, String deviceName, String signalName);
+        public Mapper.Db.ConnectionCollection connectionsByDest(String signalName)
+            { return mdb_connections_by_dest(_db, null, signalName); }
+        public Mapper.Db.ConnectionCollection connectionsByDest(String deviceName,
+                                                                String signalName)
+            { return mdb_connections_by_dest(_db, deviceName, signalName); }
+        public native Mapper.Db.Connection connectionBySignals(String srcName,
+                                                               String destName);
+        public native Mapper.Db.ConnectionCollection connectionsByDevices(
+            String srcDevice, String destDevice);
+
+        private long _db;
+        private Monitor _monitor;
+
+        // TODO: enable multiple listeners
+        private Mapper.Db.DeviceListener _device_cb;
+        private Mapper.Db.SignalListener _signal_cb;
+        private Mapper.Db.LinkListener _link_cb;
+        private Mapper.Db.ConnectionListener _connection_cb;
+    };
+
+    public void subscribe(String deviceName, int subscribeFlags, int timeout)
+    {
+        mmon_subscribe(_monitor, deviceName, subscribeFlags, timeout);
+    }
+
+    public void unsubscribe(String deviceName)
+    {
+        mmon_unsubscribe(_monitor, deviceName);
+    }
+
+    public void link(String sourceDevice, String destDevice,
+                     Mapper.Db.Link props)
+    {
+        mmon_link(_monitor, sourceDevice, destDevice, props);
+    }
+
+    public void unlink(String sourceDevice, String destDevice)
+    {
+        mmon_unlink(_monitor, sourceDevice, destDevice);
+    }
+
+    public void connect(String sourceSignal, String destSignal,
+                        Mapper.Db.Connection props)
+    {
+        mmon_connect_or_mod(_monitor, sourceSignal, destSignal, props, 0);
+    }
+
+    public void disconnect(String sourceSignal, String destSignal)
+    {
+        mmon_disconnect(_monitor, sourceSignal, destSignal);
+    }
+
+    public void modifyConnection(String sourceSignal, String destSignal,
+                                 Mapper.Db.Connection props)
+    {
+        mmon_connect_or_mod(_monitor, sourceSignal, destSignal, props, 1);
+    }
+
+    public void autosubscribe(int autosubscribeFlags)
+    {
+        mmon_autosubscribe(_monitor, autosubscribeFlags);
+    }
+
+    public TimeTag now()
+    {
+        return mmon_now(_monitor);
+    }
+
+    // Note: this is _not_ guaranteed to run, the user should still
+    // call free() explicitly when the monitor is no longer needed.
+    protected void finalize() throws Throwable {
+        try {
+            free();
+        } finally {
+            super.finalize();
+        }
+    }
+
+    private native long mmon_new(int autosubscribe_flags);
+    private native long mmon_get_db(long db);
+    private native void mmon_free(long db);
+    private native int mmon_poll(long db, int timeout);
+    private native void mmon_subscribe(long db, String device_name,
+                                       int subscribe_flags, int timeout);
+    private native void mmon_unsubscribe(long db, String device_name);
+    private native void mmon_link(long db, String source_device,
+                                  String dest_device, Mapper.Db.Link props);
+    private native void mmon_unlink(long db, String source_device,
+                                    String dest_device);
+    private native void mmon_connect_or_mod(long db, String source_signal,
+                                            String dest_signal,
+                                            Mapper.Db.Connection props,
+                                            int modify);
+    private native void mmon_disconnect(long db, String source_signal,
+                                        String dest_signal);
+    private native void mmon_autosubscribe(long db, int autosubscribe_flags);
+    private native TimeTag mmon_now(long db);
+
+    private long _monitor;
+    public Mapper.Monitor.Db Db;
+    public boolean valid() {
+        return _monitor != 0;
+    }
+
+    static {
+        System.loadLibrary(NativeLib.name);
+    }
+}
diff --git a/jni/Mapper/NativeLib.java.in b/jni/Mapper/NativeLib.java.in
new file mode 100644
index 0000000..bcf5c37
--- /dev/null
+++ b/jni/Mapper/NativeLib.java.in
@@ -0,0 +1,6 @@
+
+package Mapper;
+
+public class NativeLib {
+    public static final String name = "mapperjni- at MAJOR_VERSION@";
+}
diff --git a/jni/Mapper/PropertyValue.java b/jni/Mapper/PropertyValue.java
new file mode 100644
index 0000000..98d759d
--- /dev/null
+++ b/jni/Mapper/PropertyValue.java
@@ -0,0 +1,374 @@
+
+package Mapper;
+import java.util.Arrays;
+
+/* Contains a value representable by supported types, which correspond
+ * with OSC types. */
+public class PropertyValue
+{
+    public PropertyValue()                       { length=0; type = 0; }
+    public PropertyValue(int i)                  { setValue('i', i);   }
+    public PropertyValue(float f)                { setValue('f', f);   }
+    public PropertyValue(double d)               { setValue('d', d);   }
+    public PropertyValue(String s)               { setValue('s', s);   }
+    public PropertyValue(int[] i)                { setValue('i', i);   }
+    public PropertyValue(float[] f)              { setValue('f', f);   }
+    public PropertyValue(double[] d)             { setValue('d', d);   }
+    public PropertyValue(String[] s)             { setValue('s', s);   }
+    public PropertyValue(char _type, int i)      { setValue(_type, i); }
+    public PropertyValue(char _type, float f)    { setValue(_type, f); }
+    public PropertyValue(char _type, double d)   { setValue(_type, d); }
+    public PropertyValue(char _type, String s)   { setValue(_type, s); }
+    public PropertyValue(char _type, int[] i)    { setValue(_type, i); }
+    public PropertyValue(char _type, float[] f)  { setValue(_type, f); }
+    public PropertyValue(char _type, double[] d) { setValue(_type, d); }
+    public PropertyValue(char _type, String[] s) { setValue(_type, s); }
+
+    // TODO handle entire set of OSC types
+    public class PropertyException extends RuntimeException {
+        public PropertyException() {
+            super("Property does not contain requested type.");
+        }
+        public PropertyException(String msg) {
+            super(msg);
+        }
+    }
+
+    public Object value() {
+        switch (type) {
+            case 'i': {
+                if (length == 1)
+                    return new Integer(_i[0]);
+                else if (length > 1) {
+                    int[] v = _i.clone();
+                    return v;
+                }
+            }
+            case 'f': {
+                if (length == 1)
+                    return new Float(_f[0]);
+                else if (length > 1) {
+                    float[] v = _f.clone();
+                    return v;
+                }
+            }
+            case 'd': {
+                if (length == 1)
+                    return new Double(_d[0]);
+                else if (length > 1) {
+                    double[] v = _d.clone();
+                    return v;
+                }
+            }
+            case 's': {
+                if (length == 1)
+                    return _s[0];
+                else if (length > 1) {
+                    String[] v = _s.clone();
+                    return v;
+                }
+            }
+            case 'S': {
+                if (length == 1)
+                    return _s[0];
+                else if (length > 1) {
+                    String[] v = _s.clone();
+                    return v;
+                }
+            }
+        }
+        return null;
+    }
+
+    public int intValue() {
+        if (type == 'i')
+            return _i[0];
+        throw new PropertyException();
+    }
+
+    public float floatValue() {
+        if (type == 'f')
+            return _f[0];
+        else if (type == 'i')
+            return _i[0];
+        throw new PropertyException();
+    }
+
+    public double doubleValue() {
+        if (type == 'd')
+            return _d[0];
+        else if (type == 'f')
+            return _f[0];
+        else if (type == 'i')
+            return _i[0];
+        throw new PropertyException();
+    }
+
+    public String stringValue() {
+        if (type == 's' || type == 'S')
+            return _s[0];
+        throw new PropertyException();
+    }
+
+    public void setValue(char _type, int i) {
+        switch (_type) {
+            case 'i':
+                _i = new int[1];
+                _i[0] = i;
+                break;
+            case 'f':
+                _f = new float[1];
+                _f[0] = i;
+                break;
+            case 'd':
+                _d = new double[1];
+                _d[0] = i;
+                break;
+            case 's':
+                _s = new String[1];
+                _s[0] = String.valueOf(i);
+                break;
+            case 'S':
+                _s = new String[1];
+                _s[0] = String.valueOf(i);
+                break;
+            default:
+                throw new PropertyException("Cannot cast int to requested type.");
+        }
+        type = _type;
+        length = 1;
+    }
+
+    public void setValue(char _type, float f) {
+        switch (_type) {
+            case 'i':
+                _i = new int[1];
+                _i[1] = (int)f;
+                break;
+            case 'f':
+                _f = new float[1];
+                _f[0] = f;
+                break;
+            case 'd':
+                _d = new double[1];
+                _d[0] = f;
+                break;
+            case 's':
+                _s = new String[1];
+                _s[0] = String.valueOf(f);
+                break;
+            case 'S':
+                _s = new String[1];
+                _s[0] = String.valueOf(f);
+                break;
+            default:
+                throw new PropertyException("Cannot cast float to requested type.");
+        }
+        type = _type;
+        length = 1;
+    }
+
+    public void setValue(char _type, double d) {
+        switch (_type) {
+            case 'i':
+                _i = new int[1];
+                _i[0] = (int)d;
+                break;
+            case 'f':
+                _f = new float[1];
+                _f[0] = (float)d;
+                break;
+            case 'd':
+                _d = new double[1];
+                _d[0] = d;
+                break;
+            case 's':
+                _s = new String[1];
+                _s[0] = String.valueOf(d);
+                break;
+            case 'S':
+                _s = new String[1];
+                _s[0] = String.valueOf(d);
+                break;
+            default:
+                throw new PropertyException("Cannot cast double to requested type.");
+        }
+        type = _type;
+        length = 1;
+    }
+
+    public void setValue(char _type, String s) {
+        switch (_type) {
+            case 'i':
+                _i = new int[1];
+                _i[0] = Integer.parseInt(s);
+                break;
+            case 'f':
+                _f = new float[1];
+                _f[0] = Float.parseFloat(s);
+                break;
+            case 'd':
+                _d = new double[1];
+                _d[0] = Double.parseDouble(s);
+                break;
+            case 's':
+                _s = new String[1];
+                _s[0] = s;
+                break;
+            case 'S':
+                _s = new String[1];
+                _s[0] = s;
+                break;
+            default:
+                throw new PropertyException("Cannot cast String to requested type.");
+        }
+        type = _type;
+        length = 1;
+    }
+
+    public void setValue(char _type, int[] i) {
+        switch (_type) {
+            case 'i':
+                _i = i.clone();
+                break;
+            case 'f':
+                _f = new float[i.length];
+                for (int n = 0; n < i.length; n++)
+                    _f[n] = i[n];
+                break;
+            case 'd':
+                _d = new double[i.length];
+                for (int n = 0; n < i.length; n++)
+                    _d[n] = i[n];
+                break;
+            case 's':
+                _s = new String[i.length];
+                for (int n = 0; n < i.length; n++)
+                    _s[n] = String.valueOf(i[n]);
+                break;
+            case 'S':
+                _s = new String[i.length];
+                for (int n = 0; n < i.length; n++)
+                    _s[n] = String.valueOf(i[n]);
+                break;
+            default:
+                throw new PropertyException("Cannot cast int to requested type.");
+        }
+        type = _type;
+        length = i.length;
+    }
+    
+    public void setValue(char _type, float[] f) {
+        switch (_type) {
+            case 'i':
+                _i = new int[f.length];
+                for (int n = 0; n < f.length; n++)
+                    _i[n] = (int)f[n];
+                break;
+            case 'f':
+                _f = f.clone();
+                break;
+            case 'd':
+                _d = new double[f.length];
+                for (int n = 0; n < f.length; n++)
+                    _d[n] = f[n];
+                break;
+            case 's':
+                _s = new String[f.length];
+                for (int n = 0; n < f.length; n++)
+                    _s[n] = String.valueOf(f[n]);
+                break;
+            case 'S':
+                _s = new String[f.length];
+                for (int n = 0; n < f.length; n++)
+                    _s[n] = String.valueOf(f[n]);
+                break;
+            default:
+                throw new PropertyException("Cannot cast float to requested type.");
+        }
+        type = _type;
+        length = f.length;
+    }
+    
+    public void setValue(char _type, double[] d) {
+        switch (_type) {
+            case 'i':
+                _i = new int[d.length];
+                for (int n = 0; n < d.length; n++)
+                    _i[n] = (int)d[n];
+                break;
+            case 'f':
+                _f = new float[d.length];
+                for (int n = 0; n < d.length; n++)
+                    _f[n] = (float)d[n];
+                break;
+            case 'd':
+                _d = d.clone();
+                break;
+            case 's':
+                _s = new String[d.length];
+                for (int n = 0; n < d.length; n++)
+                    _s[n] = String.valueOf(d[n]);
+                break;
+            case 'S':
+                _s = new String[d.length];
+                for (int n = 0; n < d.length; n++)
+                    _s[n] = String.valueOf(d[n]);
+                break;
+            default:
+                throw new PropertyException("Cannot cast double to requested type.");
+        }
+        type = _type;
+        length = d.length;
+    }
+    
+    public void setValue(char _type, String[] s) {
+        switch (_type) {
+            case 'i':
+                _i = new int[s.length];
+                for (int n = 0; n < s.length; n++)
+                    _i[n] = Integer.parseInt(s[n]);
+                break;
+            case 'f':
+                _f = new float[s.length];
+                for (int n = 0; n < s.length; n++)
+                    _f[n] = Float.parseFloat(s[n]);
+                break;
+            case 'd':
+                _d = new double[s.length];
+                for (int n = 0; n < s.length; n++)
+                    _d[n] = Double.parseDouble(s[n]);
+                break;
+            case 's':
+                _s = s.clone();
+            case 'S':
+                _s = s.clone();
+                break;
+            default:
+                throw new PropertyException("Cannot cast String to requested type.");
+        }
+        type = _type;
+        length = s.length;
+    }
+
+    public String toString() {
+        String s;
+        switch (type) {
+            case 'i': s = Arrays.toString(_i); break;
+            case 'f': s = Arrays.toString(_f); break;
+            case 'd': s = Arrays.toString(_d); break;
+            case 's': s = Arrays.toString(_s); break;
+            case 'S': s = Arrays.toString(_s); break;
+            default: s = null;
+        }
+        return "<type="+type+", length="+length+", value="+s+">";
+    }
+
+    public char type;
+    public int length;
+
+    private int[] _i;
+    private float[] _f;
+    private double[] _d;
+    private String[] _s;
+}
diff --git a/jni/Mapper/TimeTag.java b/jni/Mapper/TimeTag.java
new file mode 100644
index 0000000..4e839ff
--- /dev/null
+++ b/jni/Mapper/TimeTag.java
@@ -0,0 +1,29 @@
+
+package Mapper;
+
+public class TimeTag
+{
+    public long sec;
+    public long frac;
+
+    public static final TimeTag NOW = new TimeTag(0, 1);
+    private static double multiplier = (double)1.0/((double)((long)1<<32));
+
+    public TimeTag(long _sec, long _frac)
+    {
+        sec = _sec;
+        frac = _frac;
+    }
+
+    public TimeTag(Double secondsSinceEpoch)
+    {
+        sec = (long)Math.floor(secondsSinceEpoch);
+        secondsSinceEpoch -= sec;
+        frac = (long)(secondsSinceEpoch*(double)((long)1<<32));
+    }
+
+    public double getDouble()
+    {
+        return (double)sec + (double)frac * multiplier;
+    }
+}
diff --git a/jni/TestInstances/TestInstances.pde b/jni/TestInstances/TestInstances.pde
new file mode 100644
index 0000000..dd309cb
--- /dev/null
+++ b/jni/TestInstances/TestInstances.pde
@@ -0,0 +1,187 @@
+
+/**
+ * libmapper instances example
+ * Adapted from Processing.org Mouse Functions example.
+ */
+
+import Mapper.*;
+
+Circle bover = null;
+boolean locked = false;
+
+Circle circles[] = new Circle[5];
+int bs = 15;
+int count = 0;
+
+Mapper.Device dev = new Mapper.Device("TestInstances");
+
+Mapper.Device.Signal sig_x_in = null;
+Mapper.Device.Signal sig_y_in = null;
+Mapper.Device.Signal sig_x_out = null;
+Mapper.Device.Signal sig_y_out = null;
+
+void setup() 
+{
+  size(300, 300);
+  colorMode(HSB, 256, 256, 256);
+  ellipseMode(CENTER);
+  textAlign(CENTER, CENTER);
+  frameRate(10);
+
+  /* Note: null for the InputListener, since we are specifying
+   * this later per-instance. */
+  sig_x_in = dev.addInput("x", 1, 'i', "pixels",
+                          new PropertyValue(0), new PropertyValue(width), null);
+  sig_y_in = dev.addInput("y", 1, 'i', "pixels",
+                          new PropertyValue(0), new PropertyValue(height), null);
+
+  sig_x_out = dev.addOutput("x", 1, 'i', "pixels",
+                            new PropertyValue(0), new PropertyValue(width));
+  sig_y_out = dev.addOutput("y", 1, 'i', "pixels",
+                            new PropertyValue(0), new PropertyValue(height));
+
+  Mapper.InstanceEventListener evin = new Mapper.InstanceEventListener() {
+    public void onEvent(Mapper.Device.Signal sig,
+                        int instanceId,
+                        int event,
+                        TimeTag tt) {
+      sig_x_in.setInstanceCallback(instanceId, circles[instanceId-1].lx);
+      sig_y_in.setInstanceCallback(instanceId, circles[instanceId-1].ly);
+    };
+  };
+
+  sig_x_in.setInstanceEventCallback(evin,
+    Mapper.InstanceEventListener.IN_ALL);
+
+  sig_x_in.reserveInstances(circles.length);
+  sig_y_in.reserveInstances(circles.length);
+  sig_x_out.reserveInstances(circles.length);
+  sig_y_out.reserveInstances(circles.length);
+
+  for (int i=0; i < circles.length; i++) {
+    circles[i] = new Circle(Math.random()*(width-bs*2)+bs,
+                            Math.random()*(height-bs*2)+bs,
+                            Math.random()*256);
+  }
+
+  while (!dev.ready())
+    dev.poll(100);
+
+  frame.setTitle(dev.name());
+}
+
+void stop()
+{
+  dev.free();
+}
+
+void draw() 
+{
+  dev.poll(0);
+
+  background(0);
+
+  Circle sel = null;
+  for (Circle c : circles) {
+    if (c.testMouse() && sel == null)
+      sel = c;
+    c.display();
+  }
+
+  bover = sel;
+}
+
+void mousePressed() {
+  if(bover!=null) {
+    locked = true;
+    bover.pressed();
+  } else {
+    locked = false;
+  }
+}
+
+void mouseDragged() {
+  if(locked) {
+    bover.dragged();
+  }
+}
+
+void mouseReleased() {
+  locked = false;
+}
+
+class Circle
+{
+  float bx;
+  float by;
+  float bdifx = 0.0;
+  float bdify = 0.0;
+  float hue;
+  int id = 0;
+  Mapper.InputListener lx, ly;
+
+  Circle(double _bx, double _by, double _hue) {
+    bx = (float)_bx;
+    by = (float)_by;
+    hue = (float)_hue;
+    id = ++count;
+
+    /* Add listeners for our instance */
+    lx = new Mapper.InputListener() {
+          void onInput(Mapper.Device.Signal sig,
+                       int instanceId, int[] v, TimeTag tt) {
+            if (v!=null)
+              bx = v[0];
+          }};
+
+    ly = new Mapper.InputListener() {
+          void onInput(Mapper.Device.Signal sig,
+                       int instanceId, int[] v, TimeTag tt) {
+            if (v!=null)
+              by = v[0];
+          }};
+}
+
+  boolean testMouse() {
+    // Test if the cursor is over the circle
+    float dx = mouseX - bx;
+    float dy = mouseY - by;
+    if (Math.sqrt(dx*dx+dy*dy) < bs) {
+      bover = this;
+      if(locked) {
+        stroke(hue, 256, 153);
+        fill(hue, 256, 256);
+      }
+      else {
+        stroke(hue, 0, 256);
+        fill(hue, 256, 153);
+      }
+      return true;
+    }
+
+    stroke(hue, 256, 153);
+    fill(hue, 256, 256);
+    return false;
+  }
+
+  void pressed() {
+    fill(hue, 256, 153);
+    bdifx = mouseX-bx;
+    bdify = mouseY-by;
+  }
+
+  void dragged() {
+    bx = mouseX-bdifx;
+    by = mouseY-bdify;
+  }
+
+  void display() {
+    ellipse(bx, by, bs*2, bs*2);
+    fill(0, 0, 256);
+    text(""+id, bx, by);
+
+    sig_x_out.updateInstance(id, (int)bx);
+    sig_y_out.updateInstance(id, (int)by);
+  }
+}
+
diff --git a/jni/mapperjni.c b/jni/mapperjni.c
new file mode 100644
index 0000000..f704337
--- /dev/null
+++ b/jni/mapperjni.c
@@ -0,0 +1,3141 @@
+
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <mapper/mapper.h>
+
+#include "Mapper_Device.h"
+#include "Mapper_Device_Signal.h"
+#include "Mapper_Db_Signal.h"
+
+#define jlong_ptr(a) ((jlong)(uintptr_t)(a))
+#define ptr_jlong(a) ((void *)(uintptr_t)(a))
+
+JNIEnv *genv=0;
+int bailing=0;
+
+typedef struct {
+    jobject listener;
+    jobject signal;
+    jobject db_signal;
+    jobject instanceHandler;
+} msig_jni_context_t, *msig_jni_context;
+
+/**** Helpers ****/
+
+static void throwIllegalArgumentTruncate(JNIEnv *env, mapper_signal sig)
+{
+    jclass newExcCls =
+        (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+    if (newExcCls) {
+        char msg[1024];
+        snprintf(msg, 1024,
+                 "Signal %s has integer type, floating-"
+                 "point value would truncate.",
+                 msig_properties(sig)->name);
+        (*env)->ThrowNew(env, newExcCls, msg);
+    }
+}
+
+static void throwIllegalArgumentLength(JNIEnv *env, mapper_signal sig, int al)
+{
+    jclass newExcCls =
+        (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+    if (newExcCls) {
+        char msg[1024];
+        mapper_db_signal p = msig_properties(sig);
+        snprintf(msg, 1024,
+                 "Signal %s length is %d, but array argument has length %d.",
+                 p->name, p->length, al);
+        (*env)->ThrowNew(env, newExcCls, msg);
+    }
+}
+
+static void throwIllegalArgumentSignal(JNIEnv *env)
+{
+    jclass newExcCls =
+        (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+    if (newExcCls) {
+        (*env)->ThrowNew(env, newExcCls,
+                         "Signal object is not associated with "
+                         "a mapper_signal.");
+    }
+}
+
+static void throwIllegalArgument(JNIEnv *env, const char *message)
+{
+    jclass newExcCls =
+    (*env)->FindClass(env, "java/lang/IllegalArgumentException");
+    if (newExcCls) {
+        (*env)->ThrowNew(env, newExcCls, message);
+    }
+}
+
+static void throwOutOfMemory(JNIEnv *env)
+{
+    jclass newExcCls =
+        (*env)->FindClass(env, "java/lang/OutOfMemoryException");
+    if (newExcCls) {
+        char msg[] = "Out of memory";
+        (*env)->ThrowNew(env, newExcCls, msg);
+    }
+}
+
+static mapper_device get_device_from_jobject(JNIEnv *env, jobject obj)
+{
+    // TODO check device here
+    jclass cls = (*env)->GetObjectClass(env, obj);
+    if (cls) {
+        jfieldID val = (*env)->GetFieldID(env, cls, "_device", "J");
+        if (val) {
+            jlong s = (*env)->GetLongField(env, obj, val);
+            return (mapper_device)ptr_jlong(s);
+        }
+    }
+    return 0;
+}
+
+static mapper_signal get_signal_from_jobject(JNIEnv *env, jobject obj)
+{
+    // TODO check device here
+    jclass cls = (*env)->GetObjectClass(env, obj);
+    if (cls) {
+        jfieldID val = (*env)->GetFieldID(env, cls, "_signal", "J");
+        if (val) {
+            jlong s = (*env)->GetLongField(env, obj, val);
+            return (mapper_signal)ptr_jlong(s);
+        }
+    }
+    throwIllegalArgumentSignal(env);
+    return 0;
+}
+
+static mapper_db get_db_from_jobject(JNIEnv *env, jobject obj)
+{
+    // TODO check device here
+    jclass cls = (*env)->GetObjectClass(env, obj);
+    if (cls) {
+        jfieldID val = (*env)->GetFieldID(env, cls, "_db", "J");
+        if (val) {
+            jlong s = (*env)->GetLongField(env, obj, val);
+            return (mapper_db)ptr_jlong(s);
+        }
+    }
+    throwIllegalArgument(env, "Couldn't retrieve db pointer.");
+    return 0;
+}
+
+static mapper_timetag_t *get_timetag_from_jobject(JNIEnv *env, jobject obj,
+                                                  mapper_timetag_t *tt)
+{
+    if (!obj) return 0;
+    jclass cls = (*env)->GetObjectClass(env, obj);
+    if (cls) {
+        jfieldID sec = (*env)->GetFieldID(env, cls, "sec", "J");
+        jfieldID frac = (*env)->GetFieldID(env, cls, "frac", "J");
+        if (sec && frac) {
+            tt->sec = (*env)->GetLongField(env, obj, sec);
+            tt->frac = (*env)->GetLongField(env, obj, frac);
+            return tt;
+        }
+    }
+    return 0;
+}
+
+static jobject get_jobject_from_timetag(JNIEnv *env, mapper_timetag_t *tt)
+{
+    jobject objtt = 0;
+    if (tt) {
+        jclass cls = (*env)->FindClass(env, "Mapper/TimeTag");
+        if (cls) {
+            jmethodID cons = (*env)->GetMethodID(env, cls,
+                                                 "<init>", "(JJ)V");
+            if (cons) {
+                objtt = (*env)->NewObject(env, cls, cons,
+                                          tt->sec, tt->frac);
+            }
+            else {
+                printf("Error looking up TimeTag constructor.\n");
+                exit(1);
+            }
+        }
+    }
+    return objtt;
+}
+
+static mapper_db_device* get_db_device_ptr_from_jobject(JNIEnv *env, jobject obj)
+{
+    jclass cls = (*env)->GetObjectClass(env, obj);
+    if (cls) {
+        jfieldID val = (*env)->GetFieldID(env, cls, "_devprops_p", "J");
+        if (val) {
+            jlong s = (*env)->GetLongField(env, obj, val);
+            return (mapper_db_device*)ptr_jlong(s);
+        }
+    }
+    throwIllegalArgument(env, "Couldn't retrieve mapper_db_device* ptr.");
+    return 0;
+}
+
+static mapper_db_signal* get_db_signal_ptr_from_jobject(JNIEnv *env, jobject obj)
+{
+    jclass cls = (*env)->GetObjectClass(env, obj);
+    if (cls) {
+        jfieldID val = (*env)->GetFieldID(env, cls, "_sigprops_p", "J");
+        if (val) {
+            jlong s = (*env)->GetLongField(env, obj, val);
+            return (mapper_db_signal*)ptr_jlong(s);
+        }
+    }
+    throwIllegalArgument(env, "Couldn't retrieve mapper_db_signal* ptr.");
+    return 0;
+}
+
+static jobject build_PropertyValue(JNIEnv *env, const char type,
+                                   const void *value, const int length)
+{
+    if (length <= 0)
+        return 0;
+
+    jmethodID methodID;
+    jclass cls = (*env)->FindClass(env, "Mapper/PropertyValue");
+
+    switch (type) {
+        case 'i': {
+            if (length == 1) {
+                methodID = (*env)->GetMethodID(env, cls, "<init>", "(CI)V");
+                if (methodID)
+                    return (*env)->NewObject(env, cls, methodID, type,
+                                             *((int *)value));
+            }
+            else {
+                methodID = (*env)->GetMethodID(env, cls, "<init>", "(C[I)V");
+                if (methodID) {
+                    jintArray arr = (*env)->NewIntArray(env, length);
+                    (*env)->SetIntArrayRegion(env, arr, 0, length, value);
+                    return (*env)->NewObject(env, cls, methodID, type, arr);
+                }
+            }
+            break;
+        }
+        case 'f': {
+            if (length == 1) {
+                methodID = (*env)->GetMethodID(env, cls, "<init>", "(CF)V");
+                if (methodID)
+                    return (*env)->NewObject(env, cls, methodID, type,
+                                             *((float *)value));
+            }
+            else {
+                methodID = (*env)->GetMethodID(env, cls, "<init>", "(C[F)V");
+                if (methodID) {
+                    jfloatArray arr = (*env)->NewFloatArray(env, length);
+                    (*env)->SetFloatArrayRegion(env, arr, 0, length, value);
+                    return (*env)->NewObject(env, cls, methodID, type, arr);
+                }
+            }
+            break;
+        }
+        case 'd': {
+            if (length == 1) {
+                methodID = (*env)->GetMethodID(env, cls, "<init>", "(CD)V");
+                if (methodID)
+                    return (*env)->NewObject(env, cls, methodID, type,
+                                             *((double *)value));
+            }
+            else {
+                methodID = (*env)->GetMethodID(env, cls, "<init>", "(C[D)V");
+                if (methodID) {
+                    jdoubleArray arr = (*env)->NewDoubleArray(env, length);
+                    (*env)->SetDoubleArrayRegion(env, arr, 0, length, value);
+                    return (*env)->NewObject(env, cls, methodID, type, arr);
+                }
+            }
+            break;
+        }
+        case 's': {
+            if (length == 1) {
+                methodID = (*env)->GetMethodID(env, cls, "<init>",
+                                               "(CLjava/lang/String;)V");
+                if (methodID) {
+                    jobject s = (*env)->NewStringUTF(env, (char *)value);
+                    if (s)
+                        return (*env)->NewObject(env, cls, methodID, type, s);
+                }
+            }
+            else {
+                methodID = (*env)->GetMethodID(env, cls, "<init>",
+                                               "(C[Ljava/lang/String;)V");
+                if (methodID) {
+                    jobjectArray arr = (*env)->NewObjectArray(env, length,
+                        (*env)->FindClass(env, "java/lang/String"),
+                        (*env)->NewStringUTF(env, ""));
+                    int i;
+                    char **strings = (char**)value;
+                    for (i = 0; i < length; i++) {
+                        (*env)->SetObjectArrayElement(env, arr, i,
+                            (*env)->NewStringUTF(env, strings[i]));
+                    }
+                    return (*env)->NewObject(env, cls, methodID, type, arr);
+                }
+            }
+            break;
+        }
+        default:
+            break;
+    }
+    return 0;
+}
+
+static int get_PropertyValue_elements(JNIEnv *env, jobject jprop, void **value,
+                                      char *type)
+{
+    jclass cls = (*env)->GetObjectClass(env, jprop);
+    if (!cls)
+        return 0;
+
+    jfieldID typeid = (*env)->GetFieldID(env, cls, "type", "C");
+    jfieldID lengthid = (*env)->GetFieldID(env, cls, "length", "I");
+    if (!typeid || !lengthid)
+        return 0;
+
+    *type = (*env)->GetCharField(env, jprop, typeid);
+    int length = (*env)->GetIntField(env, jprop, lengthid);
+    if (!length)
+        return 0;
+
+    jfieldID valf = 0;
+    jobject o = 0;
+
+    switch (*type)
+    {
+        case 'i':
+            valf = (*env)->GetFieldID(env, cls, "_i", "[I");
+            o = (*env)->GetObjectField(env, jprop, valf);
+            *value = (*env)->GetIntArrayElements(env, o, NULL);
+            break;
+        case 'f':
+            valf = (*env)->GetFieldID(env, cls, "_f", "[F");
+            o = (*env)->GetObjectField(env, jprop, valf);
+            *value = (*env)->GetFloatArrayElements(env, o, NULL);
+            break;
+        case 'd':
+            valf = (*env)->GetFieldID(env, cls, "_d", "[D");
+            o = (*env)->GetObjectField(env, jprop, valf);
+            *value = (*env)->GetDoubleArrayElements(env, o, NULL);
+            break;
+        case 's':
+        case 'S':
+        {
+            valf = (*env)->GetFieldID(env, cls, "_s", "[Ljava/lang/String;");
+            o = (*env)->GetObjectField(env, jprop, valf);
+            // need to unpack string array and rebuild
+            jstring jstrings[length];
+            const char **cstrings = malloc(sizeof(char*) * length);
+            int i;
+            for (i = 0; i < length; i++) {
+                jstrings[i] = (jstring) (*env)->GetObjectArrayElement(env, o, i);
+                cstrings[i] = (*env)->GetStringUTFChars(env, jstrings[i], 0);
+            }
+            *value = cstrings;
+            break;
+        }
+        default:
+            return 0;
+    }
+    return length;
+}
+
+static void release_PropertyValue_elements(JNIEnv *env, jobject jprop,
+                                           void *value)
+{
+    jclass cls = (*env)->GetObjectClass(env, jprop);
+    if (!cls)
+        return;
+
+    jfieldID typeid = (*env)->GetFieldID(env, cls, "type", "C");
+    jfieldID lengthid = (*env)->GetFieldID(env, cls, "length", "I");
+    if (!typeid || !lengthid)
+        return;
+
+    char type = (*env)->GetCharField(env, jprop, typeid);
+    int length = (*env)->GetIntField(env, jprop, lengthid);
+    if (!length)
+        return;
+
+    jfieldID valf = 0;
+    jobject o = 0;
+
+    switch (type)
+    {
+        case 'i':
+            valf = (*env)->GetFieldID(env, cls, "_i", "[I");
+            o = (*env)->GetObjectField(env, jprop, valf);
+            (*env)->ReleaseIntArrayElements(env, o, value, JNI_ABORT);
+            break;
+        case 'f':
+            valf = (*env)->GetFieldID(env, cls, "_f", "[F");
+            o = (*env)->GetObjectField(env, jprop, valf);
+            (*env)->ReleaseFloatArrayElements(env, o, value, JNI_ABORT);
+            break;
+        case 'd':
+            valf = (*env)->GetFieldID(env, cls, "_d", "[D");
+            o = (*env)->GetObjectField(env, jprop, valf);
+            (*env)->ReleaseDoubleArrayElements(env, o, value, JNI_ABORT);
+            break;
+        case 's':
+        case 'S':
+        {
+            valf = (*env)->GetFieldID(env, cls, "_s", "[Ljava/lang/String;");
+            o = (*env)->GetObjectField(env, jprop, valf);
+
+            jstring jstr;
+            const char **cstrings = (const char**)value;
+            int i;
+            for (i = 0; i < length; i++) {
+                jstr = (jstring) (*env)->GetObjectArrayElement(env, o, i);
+                (*env)->ReleaseStringUTFChars(env, jstr, cstrings[i]);
+            }
+            free(cstrings);
+            break;
+        }
+    }
+}
+
+/**** Mapper.Device ****/
+
+JNIEXPORT jlong JNICALL Java_Mapper_Device_mdev_1new
+  (JNIEnv *env, jobject obj, jstring name, jint port)
+{
+    const char *cname = (*env)->GetStringUTFChars(env, name, 0);
+    mapper_device dev = mdev_new(cname, port, 0);
+    (*env)->ReleaseStringUTFChars(env, name, cname);
+    return jlong_ptr(dev);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_mdev_1free
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+
+    /* Free all references to Java objects. */
+    int i, n = mdev_num_inputs(dev), m = mdev_num_outputs(dev);
+    for (i=0; i<n+m; i++) {
+        mapper_signal sig;
+        if (i<n)
+            sig = mdev_get_input_by_index(dev, i);
+        else
+            sig = mdev_get_output_by_index(dev, i-n);
+        mapper_db_signal props = msig_properties(sig);
+        msig_jni_context ctx = (msig_jni_context)props->user_data;
+        if (ctx->listener)
+            (*env)->DeleteGlobalRef(env, ctx->listener);
+        if (ctx->signal)
+            (*env)->DeleteGlobalRef(env, ctx->signal);
+        if (ctx->db_signal)
+            (*env)->DeleteGlobalRef(env, ctx->db_signal);
+        if (ctx->instanceHandler)
+            (*env)->DeleteGlobalRef(env, ctx->instanceHandler);
+        free(ctx);
+        props->user_data = 0;
+    }
+
+    mdev_free(dev);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1poll
+  (JNIEnv *env, jobject obj, jlong d, jint timeout)
+{
+    genv = env;
+    bailing = 0;
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_poll(dev, timeout);
+}
+
+static void java_msig_input_cb(mapper_signal sig, mapper_db_signal props,
+                               int instance_id, void *v, int count,
+                               mapper_timetag_t *tt)
+{
+    if (bailing)
+        return;
+
+    jobject vobj = 0;
+    if (props->type == 'f' && v) {
+        jfloatArray varr = (*genv)->NewFloatArray(genv, props->length);
+        if (varr)
+            (*genv)->SetFloatArrayRegion(genv, varr, 0, props->length, v);
+        vobj = (jobject) varr;
+    }
+    else if (props->type == 'i' && v) {
+        jintArray varr = (*genv)->NewIntArray(genv, props->length);
+        if (varr)
+            (*genv)->SetIntArrayRegion(genv, varr, 0, props->length, v);
+        vobj = (jobject) varr;
+    }
+    else if (props->type == 'd' && v) {
+        jdoubleArray varr = (*genv)->NewDoubleArray(genv, props->length);
+        if (varr)
+            (*genv)->SetDoubleArrayRegion(genv, varr, 0, props->length, v);
+        vobj = (jobject) varr;
+    }
+
+    if (!vobj && v) {
+        char msg[1024];
+        snprintf(msg, 1024,
+                 "Unknown signal type for %s in callback handler (%c,%d).",
+                 props->name, props->type, props->length);
+        jclass newExcCls =
+            (*genv)->FindClass(genv, "java/lang/IllegalArgumentException");
+        if (newExcCls)
+            (*genv)->ThrowNew(genv, newExcCls, msg);
+        bailing = 1;
+        return;
+    }
+
+    jobject objtt = get_jobject_from_timetag(genv, tt);
+
+    msig_jni_context ctx = (msig_jni_context)props->user_data;
+    jobject input_cb = ctx->listener;
+
+    if (instance_id != 0)
+        input_cb = (jobject)msig_get_instance_data(sig, instance_id);
+
+    if (input_cb && ctx->signal) {
+        jclass cls = (*genv)->GetObjectClass(genv, input_cb);
+        if (cls) {
+            jmethodID mid=0;
+            if (props->type=='i')
+                mid = (*genv)->GetMethodID(genv, cls, "onInput",
+                                           "(LMapper/Device$Signal;"
+                                           "I[I"
+                                           "LMapper/TimeTag;)V");
+            else if (props->type=='f')
+                mid = (*genv)->GetMethodID(genv, cls, "onInput",
+                                           "(LMapper/Device$Signal;"
+                                           "I[F"
+                                           "LMapper/TimeTag;)V");
+            else if (props->type=='d')
+                mid = (*genv)->GetMethodID(genv, cls, "onInput",
+                                           "(LMapper/Device$Signal;"
+                                           "I[D"
+                                           "LMapper/TimeTag;)V");
+
+            if (mid) {
+                (*genv)->CallVoidMethod(genv, input_cb, mid, ctx->signal,
+                                        instance_id, vobj, objtt);
+                if ((*genv)->ExceptionOccurred(genv))
+                    bailing = 1;
+            }
+            else {
+                printf("Did not successfully look up onInput method.\n");
+                exit(1);
+            }
+        }
+    }
+
+    if (vobj)
+        (*genv)->DeleteLocalRef(genv, vobj);
+    if (objtt)
+        (*genv)->DeleteLocalRef(genv, objtt);
+}
+
+static void java_msig_instance_event_cb(mapper_signal sig,
+                                        mapper_db_signal props,
+                                        int instance_id,
+                                        msig_instance_event_t event,
+                                        mapper_timetag_t *tt)
+{
+    if (bailing)
+        return;
+
+    jobject objtt = get_jobject_from_timetag(genv, tt);
+
+    msig_jni_context ctx = (msig_jni_context)props->user_data;
+    if (ctx->instanceHandler && ctx->signal) {
+        jclass cls = (*genv)->GetObjectClass(genv, ctx->instanceHandler);
+        if (cls) {
+            jmethodID mid=0;
+            mid = (*genv)->GetMethodID(genv, cls, "onEvent",
+                                       "(LMapper/Device$Signal;II"
+                                       "LMapper/TimeTag;)V");
+
+            if (mid) {
+                (*genv)->CallVoidMethod(genv, ctx->instanceHandler, mid,
+                                        ctx->signal, instance_id, event, objtt);
+                if ((*genv)->ExceptionOccurred(genv))
+                    bailing = 1;
+            }
+            else {
+                printf("Did not successfully look up onEvent method.\n");
+                exit(1);
+            }
+        }
+    }
+
+    if (objtt)
+        (*genv)->DeleteLocalRef(genv, objtt);
+}
+
+static jobject create_signal_object(JNIEnv *env, jobject devobj,
+                                    msig_jni_context ctx,
+                                    jobject listener,
+                                    mapper_signal s)
+{
+    jobject sigobj = 0, sigdbobj = 0;
+    // Create a wrapper class for this signal
+    jclass cls = (*env)->FindClass(env, "Mapper/Device$Signal");
+    if (cls) {
+        jmethodID mid = (*env)->GetMethodID(env, cls, "<init>",
+                            "(LMapper/Device;JLMapper/Device;)V");
+        sigobj = (*env)->NewObject(env, cls, mid,
+                                   devobj, jlong_ptr(s), devobj);
+    }
+
+    if (sigobj) {
+        mapper_db_signal props = msig_properties(s);
+        props->user_data = ctx;
+        ctx->listener = listener ? (*env)->NewGlobalRef(env, listener) : 0;
+        ctx->signal = (*env)->NewGlobalRef(env, sigobj);
+        ctx->db_signal = (*env)->NewGlobalRef(env, sigdbobj);
+
+        // Create a wrapper class for this signal's properties
+        cls = (*env)->FindClass(env, "Mapper/Db/Signal");
+        if (cls) {
+            jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+            sigdbobj = (*env)->NewObject(env, cls, mid,
+                                         jlong_ptr(msig_properties(s)));
+        }
+    }
+
+    if (sigdbobj) {
+        mapper_db_signal props = msig_properties(s);
+        props->user_data = ctx;
+        ctx->listener = (*env)->NewGlobalRef(env, listener);
+        ctx->signal = (*env)->NewGlobalRef(env, sigobj);
+        ctx->db_signal = (*env)->NewGlobalRef(env, sigdbobj);
+    }
+    else {
+        printf("Error creating signal wrapper class.\n");
+        exit(1);
+    }
+
+    return sigobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_addInput
+  (JNIEnv *env, jobject obj, jstring name, jint length, jchar type,
+   jstring unit, jobject minimum, jobject maximum, jobject listener)
+{
+    if (!name || (length<=0) || (type!='f' && type!='i' && type!='d'))
+        return 0;
+
+    mapper_device dev = get_device_from_jobject(env, obj);
+
+    const char *cname = (*env)->GetStringUTFChars(env, name, 0);
+    const char *cunit = 0;
+    if (unit) cunit = (*env)->GetStringUTFChars(env, unit, 0);
+
+    msig_jni_context ctx =
+        (msig_jni_context)calloc(1, sizeof(msig_jni_context_t));
+    if (!ctx) {
+        throwOutOfMemory(env);
+        return 0;
+    }
+
+    mapper_signal s = mdev_add_input(dev, cname, length, type, cunit,
+                                     0, 0, java_msig_input_cb, ctx);
+
+    (*env)->ReleaseStringUTFChars(env, name, cname);
+    if (unit) (*env)->ReleaseStringUTFChars(env, unit, cunit);
+
+    if (minimum) {
+        jstring minstring = (*env)->NewStringUTF(env, "min");
+        Java_Mapper_Device_00024Signal_msig_1set_1property(env, obj, (jlong)s,
+                                                           minstring, minimum);
+    }
+    if (maximum) {
+        jstring maxstring = (*env)->NewStringUTF(env, "max");
+        Java_Mapper_Device_00024Signal_msig_1set_1property(env, obj, (jlong)s,
+                                                           maxstring, maximum);
+    }
+
+    return create_signal_object(env, obj, ctx, listener, s);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_addOutput
+  (JNIEnv *env, jobject obj, jstring name, jint length, jchar type,
+   jstring unit, jobject minimum, jobject maximum)
+{
+    if (!name || (length<=0) || (type!='f' && type!='i' && type!='d'))
+        return 0;
+
+    mapper_device dev = get_device_from_jobject(env, obj);
+
+    const char *cname = (*env)->GetStringUTFChars(env, name, 0);
+    const char *cunit = 0;
+    if (unit) cunit = (*env)->GetStringUTFChars(env, unit, 0);
+
+    msig_jni_context ctx =
+        (msig_jni_context)calloc(1, sizeof(msig_jni_context_t));
+    if (!ctx) {
+        throwOutOfMemory(env);
+        return 0;
+    }
+
+    mapper_signal s = mdev_add_output(dev, cname, length, type, cunit, 0, 0);
+
+    (*env)->ReleaseStringUTFChars(env, name, cname);
+    if (unit) (*env)->ReleaseStringUTFChars(env, unit, cunit);
+
+    if (minimum) {
+        jstring minstring = (*env)->NewStringUTF(env, "min");
+        Java_Mapper_Device_00024Signal_msig_1set_1property(env, obj, (jlong)s,
+                                                           minstring, minimum);
+    }
+    if (maximum) {
+        jstring maxstring = (*env)->NewStringUTF(env, "max");
+        Java_Mapper_Device_00024Signal_msig_1set_1property(env, obj, (jlong)s,
+                                                           maxstring, maximum);
+    }
+
+    return create_signal_object(env, obj, ctx, 0, s);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_mdev_1remove_1input
+  (JNIEnv *env, jobject obj, jlong d, jlong s)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    mapper_signal sig = (mapper_signal)ptr_jlong(s);
+    mdev_remove_input(dev, sig);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_mdev_1remove_1output
+  (JNIEnv *env, jobject obj, jlong d, jlong s)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    mapper_signal sig = (mapper_signal)ptr_jlong(s);
+    mdev_remove_output(dev, sig);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1num_1inputs
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_num_inputs(dev);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1num_1outputs
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_num_outputs(dev);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1num_1links_1in
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_num_links_in(dev);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1num_1links_1out
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_num_links_out(dev);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1num_1connections_1in
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_num_connections_in(dev);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1num_1connections_1out
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_num_connections_out(dev);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Device_mdev_1get_1input_1by_1name
+  (JNIEnv *env, jobject obj, jlong d, jstring name, jobject index)
+{
+    int i;
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    const char *cname = (*env)->GetStringUTFChars(env, name, 0);
+    mapper_signal sig = mdev_get_input_by_name(dev, cname, &i);
+    (*env)->ReleaseStringUTFChars(env, name, cname);
+
+    if (sig && index) {
+        jclass cls = (*env)->GetObjectClass(env, index);
+        if (cls) {
+            jfieldID val = (*env)->GetFieldID(env, cls, "value", "I");
+            if (val)
+                (*env)->SetIntField(env, index, val, i);
+        }
+    }
+
+    return jlong_ptr(sig);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Device_mdev_1get_1output_1by_1name
+  (JNIEnv *env, jobject obj, jlong d, jstring name, jobject index)
+{
+    int i;
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    const char *cname = (*env)->GetStringUTFChars(env, name, 0);
+    mapper_signal sig = mdev_get_output_by_name(dev, cname, &i);
+    (*env)->ReleaseStringUTFChars(env, name, cname);
+
+    if (sig && index) {
+        jclass cls = (*env)->GetObjectClass(env, index);
+        if (cls) {
+            jfieldID val = (*env)->GetFieldID(env, cls, "value", "I");
+            if (val)
+                (*env)->SetIntField(env, index, val, i);
+        }
+    }
+
+    return jlong_ptr(sig);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Device_mdev_1get_1input_1by_1index
+  (JNIEnv *env, jobject obj, jlong d, jint index)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    mapper_signal sig = mdev_get_input_by_index(dev, index);
+    return jlong_ptr(sig);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Device_mdev_1get_1output_1by_1index
+  (JNIEnv *env, jobject obj, jlong d, jint index)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    mapper_signal sig = mdev_get_output_by_index(dev, index);
+    return jlong_ptr(sig);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_properties
+  (JNIEnv *env, jobject obj)
+{
+    mapper_device dev = get_device_from_jobject(env, obj);
+    if (!dev) return 0;
+
+    // Create a wrapper class for this device's properties
+    mapper_db_device props = mdev_properties(dev);
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/Device");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject devdbobj = (*env)->NewObject(env, cls, mid,
+                                         jlong_ptr(props));
+    return devdbobj;
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_mdev_1set_1property
+  (JNIEnv *env, jobject obj, jlong d, jstring key, jobject value)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    const char *ckey = (*env)->GetStringUTFChars(env, key, 0);
+    jclass cls = (*env)->GetObjectClass(env, value);
+    if (cls) {
+        jfieldID typeid = (*env)->GetFieldID(env, cls, "type", "C");
+        jfieldID lengthid = (*env)->GetFieldID(env, cls, "length", "I");
+        if (typeid && lengthid) {
+            char type;
+            int length = 1;
+            void *propval = 0;
+            jfieldID valf = 0;
+            jobject o;
+            type = (*env)->GetCharField(env, value, typeid);
+            length = (*env)->GetIntField(env, value, lengthid);
+            switch (type)
+            {
+                case 'i':
+                    valf = (*env)->GetFieldID(env, cls, "_i", "[I");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    propval = (*env)->GetIntArrayElements(env, o, NULL);
+                    mdev_set_property(dev, ckey, type, propval, length);
+                    (*env)->ReleaseIntArrayElements(env, o, propval, JNI_ABORT);
+                    break;
+                case 'f':
+                    valf = (*env)->GetFieldID(env, cls, "_f", "[F");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    propval = (*env)->GetFloatArrayElements(env, o, NULL);
+                    mdev_set_property(dev, ckey, type, propval, length);
+                    (*env)->ReleaseFloatArrayElements(env, o, propval, JNI_ABORT);
+                    break;
+                case 'd':
+                    valf = (*env)->GetFieldID(env, cls, "_d", "[D");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    propval = (*env)->GetDoubleArrayElements(env, o, NULL);
+                    mdev_set_property(dev, ckey, type, propval, length);
+                    (*env)->ReleaseDoubleArrayElements(env, o, propval, JNI_ABORT);
+                    break;
+                case 's':
+                case 'S':
+                    valf = (*env)->GetFieldID(env, cls, "_s", "[Ljava/lang/String;");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    // need to unpack string array and rebuild
+                    jstring jstrings[length];
+                    const char *cstrings[length];
+                    int i;
+                    for (i = 0; i < length; i++) {
+                        jstrings[i] = (jstring) (*env)->GetObjectArrayElement(env, o, i);
+                        cstrings[i] = (*env)->GetStringUTFChars(env, jstrings[i], 0);
+                    }
+                    if (length == 1)
+                        mdev_set_property(dev, ckey, type, (void*)&cstrings[0], 1);
+                    else
+                        mdev_set_property(dev, ckey, type, (void*)&cstrings, length);
+                    for (i = 0; i < length; i++)
+                        (*env)->ReleaseStringUTFChars(env, jstrings[i], cstrings[i]);
+                    break;
+            }
+        }
+    }
+    (*env)->ReleaseStringUTFChars(env, key, ckey);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_mdev_1remove_1property
+  (JNIEnv *env, jobject obj, jlong d, jstring key)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    const char *ckey = (*env)->GetStringUTFChars(env, key, 0);
+    mdev_remove_property(dev, ckey);
+    (*env)->ReleaseStringUTFChars(env, key, ckey);
+}
+
+JNIEXPORT jboolean JNICALL Java_Mapper_Device_mdev_1ready
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_ready(dev);
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Device_mdev_1name
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    const char *n = mdev_name(dev);
+    if (n)
+        return (*env)->NewStringUTF(env, n);
+    return 0;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1port
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_port(dev);
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Device_mdev_1ip4
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    const struct in_addr* a = mdev_ip4(dev);
+    if (a)
+        return (*env)->NewStringUTF(env, inet_ntoa(*a));
+    return 0;
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Device_mdev_1interface
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    const char *iface = mdev_interface(dev);
+    if (iface)
+        return (*env)->NewStringUTF(env, iface);
+    return 0;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1ordinal
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_ordinal(dev);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_mdev_1id
+  (JNIEnv *env, jobject obj, jlong d)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+    return mdev_id(dev);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_mdev_1start_1queue
+  (JNIEnv *env, jobject obj, jlong d, jobject objtt)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+
+    mapper_timetag_t tt, *ptt=0;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+    if (ptt)
+        mdev_start_queue(dev, *ptt);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_mdev_1send_1queue
+  (JNIEnv *env, jobject obj, jlong d, jobject objtt)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(d);
+
+    mapper_timetag_t tt, *ptt=0;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+    if (ptt)
+        mdev_send_queue(dev, *ptt);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_mdev_1now
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_device dev = (mapper_device)ptr_jlong(p);
+    mapper_timetag_t tt;
+    mdev_now(dev, &tt);
+    jobject o = get_jobject_from_timetag(genv, &tt);
+    return o;
+}
+
+/**** Mapper.Device.Signal ****/
+
+JNIEXPORT jstring JNICALL Java_Mapper_Device_00024Signal_msig_1full_1name
+  (JNIEnv *env, jobject obj, jlong s)
+{
+    mapper_signal sig=(mapper_signal)ptr_jlong(s);
+    char str[1024];
+
+    if (sig) {
+        msig_full_name(sig, str, 1024);
+        return (*env)->NewStringUTF(env, str);
+    }
+    else
+        return 0;
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Device_00024Signal_msig_1name
+  (JNIEnv *env, jobject obj, jlong s)
+{
+    mapper_signal sig=(mapper_signal)ptr_jlong(s);
+
+    if (sig) {
+        mapper_db_signal p = msig_properties(sig);
+        return (*env)->NewStringUTF(env, p->name);
+    }
+    else
+        return 0;
+}
+
+JNIEXPORT jboolean JNICALL Java_Mapper_Device_00024Signal_msig_1is_1output
+  (JNIEnv *env, jobject obj, jlong s)
+{
+    mapper_signal sig=(mapper_signal)ptr_jlong(s);
+    if (sig) {
+        mapper_db_signal p = msig_properties(sig);
+        return p->is_output;
+    }
+    return 0;
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_msig_1set_1rate
+  (JNIEnv *env, jobject obj, jlong s, jdouble rate)
+{
+    mapper_signal sig=(mapper_signal)ptr_jlong(s);
+    if (sig)
+        msig_set_rate(sig, (float)rate);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_00024Signal_queryRemotes
+  (JNIEnv *env, jobject obj, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig)
+        return 0;
+    if (objtt)
+    {
+        mapper_timetag_t tt, *ptt;
+        ptt = get_timetag_from_jobject(env, objtt, &tt);
+        return msig_query_remotes(sig, ptt ? *ptt : MAPPER_NOW);
+    }
+    else
+        return msig_query_remotes(sig, MAPPER_NOW);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_00024Signal_properties
+  (JNIEnv *env, jobject obj)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    mapper_db_signal props = msig_properties(sig);
+    msig_jni_context ctx = (msig_jni_context)props->user_data;
+    return ctx->db_signal;
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_msig_1set_1property
+  (JNIEnv *env, jobject obj, jlong s, jstring key, jobject value)
+{
+    mapper_signal sig = (mapper_signal)ptr_jlong(s);
+    const char *ckey = (*env)->GetStringUTFChars(env, key, 0);
+    jclass cls = (*env)->GetObjectClass(env, value);
+    if (cls) {
+        jfieldID typeid = (*env)->GetFieldID(env, cls, "type", "C");
+        jfieldID lengthid = (*env)->GetFieldID(env, cls, "length", "I");
+        if (typeid && lengthid) {
+            char type;
+            int length;
+            void *propval = 0;
+            jfieldID valf = 0;
+            jobject o;
+            type = (*env)->GetCharField(env, value, typeid);
+            length = (*env)->GetIntField(env, value, lengthid);
+            switch (type)
+            {
+                case 'i':
+                    valf = (*env)->GetFieldID(env, cls, "_i", "[I");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    propval = (*env)->GetIntArrayElements(env, o, NULL);
+                    msig_set_property(sig, ckey, type, propval, length);
+                    (*env)->ReleaseIntArrayElements(env, o, propval, JNI_ABORT);
+                    break;
+                case 'f':
+                    valf = (*env)->GetFieldID(env, cls, "_f", "[F");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    propval = (*env)->GetFloatArrayElements(env, o, NULL);
+                    msig_set_property(sig, ckey, type, propval, length);
+                    (*env)->ReleaseFloatArrayElements(env, o, propval, JNI_ABORT);
+                    break;
+                case 'd':
+                    valf = (*env)->GetFieldID(env, cls, "_d", "[D");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    propval = (*env)->GetDoubleArrayElements(env, o, NULL);
+                    msig_set_property(sig, ckey, type, propval, length);
+                    (*env)->ReleaseDoubleArrayElements(env, o, propval, JNI_ABORT);
+                    break;
+                case 's':
+                case 'S':
+                    valf = (*env)->GetFieldID(env, cls, "_s", "[Ljava/lang/String;");
+                    o = (*env)->GetObjectField(env, value, valf);
+                    jstring jstrings[length];
+                    const char *cstrings[length];
+                    int i;
+                    for (i = 0; i < length; i++) {
+                        jstrings[i] = (jstring) (*env)->GetObjectArrayElement(env, o, i);
+                        cstrings[i] = (*env)->GetStringUTFChars(env, jstrings[i], 0);
+                    }
+                    if (length == 1)
+                        msig_set_property(sig, ckey, type, (void*)&cstrings[0], 1);
+                    else
+                        msig_set_property(sig, ckey, type, (void*)&cstrings, length);
+                    for (i = 0; i < length; i++)
+                        (*env)->ReleaseStringUTFChars(env, jstrings[i], cstrings[i]);
+                    break;
+            }
+        }
+    }
+    (*env)->ReleaseStringUTFChars(env, key, ckey);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_msig_1remove_1property
+  (JNIEnv *env, jobject obj, jlong s, jstring key)
+{
+    mapper_signal sig = (mapper_signal)ptr_jlong(s);
+    const char *ckey = (*env)->GetStringUTFChars(env, key, 0);
+    msig_remove_property(sig, ckey);
+    (*env)->ReleaseStringUTFChars(env, key, ckey);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_updateInstance__IILMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jint value, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    if (props->length != 1) {
+        throwIllegalArgumentLength(env, sig, 1);
+        return;
+    }
+
+    mapper_timetag_t tt, *ptt;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+
+    if (props->type == 'i')
+        msig_update_instance(sig, id, &value, 1, ptt ? *ptt : MAPPER_NOW);
+    else if (props->type == 'f') {
+        float v = (float)value;
+        msig_update_instance(sig, id, &v, 1, ptt ? *ptt : MAPPER_NOW);
+    }
+    else if (props->type == 'd') {
+        double v = (double)value;
+        msig_update_instance(sig, id, &v, 1, ptt ? *ptt : MAPPER_NOW);
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_updateInstance__IFLMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jfloat value, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    if (props->length != 1) {
+        throwIllegalArgumentLength(env, sig, 1);
+        return;
+    }
+
+    mapper_timetag_t tt, *ptt;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+
+    if (props->type == 'i')
+        throwIllegalArgumentTruncate(env, sig);
+    else if (props->type == 'f') {
+        msig_update_instance(sig, id, &value, 1, ptt ? *ptt : MAPPER_NOW);
+    }
+    else if (props->type == 'd') {
+        double v = (double)value;
+        msig_update_instance(sig, id, &v, 1, ptt ? *ptt : MAPPER_NOW);
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_updateInstance__IDLMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jdouble value, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    if (props->length != 1) {
+        throwIllegalArgumentLength(env, sig, 1);
+        return;
+    }
+
+    mapper_timetag_t tt, *ptt;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+
+    if (props->type == 'i')
+        throwIllegalArgumentTruncate(env, sig);
+    else if (props->type == 'f') {
+        float v = (float)value;
+        msig_update_instance(sig, id, &v, 1, ptt ? *ptt : MAPPER_NOW);
+    }
+    else if (props->type == 'd') {
+        msig_update_instance(sig, id, &value, 1, ptt ? *ptt : MAPPER_NOW);
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_updateInstance__I_3ILMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jintArray value, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    int length = (*env)->GetArrayLength(env, value);
+    if (length != props->length) {
+        throwIllegalArgumentLength(env, sig, length);
+        return;
+    }
+
+    mapper_timetag_t tt, *ptt;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+
+    jint *array = (*env)->GetIntArrayElements(env, value, 0);
+    if (array) {
+        if (props->type == 'i') {
+            msig_update(sig, array, 0, MAPPER_NOW);
+        }
+        else if (props->type == 'f') {
+            float *arraycopy = malloc(sizeof(float)*length);
+            int i;
+            for (i=0; i<length; i++)
+                arraycopy[i] = (float)array[i];
+            msig_update_instance(sig, id, arraycopy, 0,
+                                 ptt ? *ptt : MAPPER_NOW);
+            free(arraycopy);
+        }
+        else if (props->type == 'd') {
+            double *arraycopy = malloc(sizeof(double)*length);
+            int i;
+            for (i=0; i<length; i++)
+                arraycopy[i] = (double)array[i];
+            msig_update_instance(sig, id, arraycopy, 0,
+                                 ptt ? *ptt : MAPPER_NOW);
+            free(arraycopy);
+        }
+        (*env)->ReleaseIntArrayElements(env, value, array, JNI_ABORT);
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_updateInstance__I_3FLMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jfloatArray value, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    int length = (*env)->GetArrayLength(env, value);
+    if (length != props->length) {
+        throwIllegalArgumentLength(env, sig, length);
+        return;
+    }
+    if (props->type == 'i') {
+        throwIllegalArgumentTruncate(env, sig);
+        return;
+    }
+
+    mapper_timetag_t tt, *ptt;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+
+    jfloat *array = (*env)->GetFloatArrayElements(env, value, 0);
+    if (array) {
+        if (props->type == 'f') {
+            msig_update_instance(sig, id, array, 0, ptt ? *ptt : MAPPER_NOW);
+        }
+        else {
+            double *arraycopy = malloc(sizeof(double)*length);
+            int i;
+            for (i=0; i<length; i++)
+                arraycopy[i] = (double)array[i];
+            msig_update_instance(sig, id, arraycopy, 0,
+                                 ptt ? *ptt : MAPPER_NOW);
+            free(arraycopy);
+        }
+        (*env)->ReleaseFloatArrayElements(env, value, array, JNI_ABORT);
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_updateInstance__I_3DLMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jdoubleArray value, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    int length = (*env)->GetArrayLength(env, value);
+    if (length != props->length) {
+        throwIllegalArgumentLength(env, sig, length);
+        return;
+    }
+    if (props->type == 'i') {
+        throwIllegalArgumentTruncate(env, sig);
+        return;
+    }
+
+    mapper_timetag_t tt, *ptt;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+
+    jdouble *array = (*env)->GetDoubleArrayElements(env, value, 0);
+    if (array) {
+        if (props->type == 'd') {
+            msig_update_instance(sig, id, array, 0, ptt ? *ptt : MAPPER_NOW);
+        }
+        else if (props->type == 'f') {
+            float *arraycopy = malloc(sizeof(float)*length);
+            int i;
+            for (i=0; i<length; i++)
+                arraycopy[i] = (float)array[i];
+            msig_update_instance(sig, id, arraycopy, 0,
+                                 ptt ? *ptt : MAPPER_NOW);
+            free(arraycopy);
+        }
+        (*env)->ReleaseDoubleArrayElements(env, value, array, JNI_ABORT);
+    }
+}
+
+JNIEXPORT jboolean JNICALL Java_Mapper_Device_00024Signal_instanceValue__I_3ILMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jintArray ar, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return JNI_FALSE;
+    mapper_db_signal props = msig_properties(sig);
+    mapper_timetag_t tt;
+
+    int length = (*env)->GetArrayLength(env, ar);
+    if (length < props->length) {
+        throwIllegalArgumentLength(env, sig, length);
+        return JNI_FALSE;
+    }
+    if (props->type != 'i') {
+        throwIllegalArgumentTruncate(env, sig);
+        return JNI_FALSE;
+    }
+
+    int *value = msig_instance_value(sig, id, &tt);
+    if (!value)
+        return JNI_FALSE;
+
+    jint *array = (*env)->GetIntArrayElements(env, ar, 0);
+    if (array) {
+        int i;
+        for (i=0; i < props->length; i++)
+            array[i] = (jint)value[i];
+        (*env)->ReleaseIntArrayElements(env, ar, array, 0);
+    }
+
+    if (objtt) {
+        jclass cls = (*env)->GetObjectClass(env, objtt);
+        if (cls) {
+            jfieldID sec = (*env)->GetFieldID(env, cls, "sec", "J");
+            jfieldID frac = (*env)->GetFieldID(env, cls, "frac", "J");
+            if (sec && frac) {
+                (*env)->SetLongField(env, objtt, sec, tt.sec);
+                (*env)->SetLongField(env, objtt, frac, tt.frac);
+            }
+        }
+    }
+
+    return JNI_TRUE;
+}
+
+JNIEXPORT jboolean JNICALL Java_Mapper_Device_00024Signal_instanceValue__I_3FLMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jfloatArray ar, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return JNI_FALSE;
+    mapper_db_signal props = msig_properties(sig);
+    mapper_timetag_t tt;
+
+    int length = (*env)->GetArrayLength(env, ar);
+    if (length < props->length) {
+        throwIllegalArgumentLength(env, sig, length);
+        return JNI_FALSE;
+    }
+
+    jfloat *array = (*env)->GetFloatArrayElements(env, ar, 0);
+    if (array)
+    {
+        int i;
+        switch (props->type)
+        {
+            case 'i': {
+                int *value = msig_instance_value(sig, id, &tt);
+                if (!value) {
+                    (*env)->ReleaseFloatArrayElements(env, ar, array, JNI_ABORT);
+                    return JNI_FALSE;
+                }
+                for (i=0; i < props->length; i++)
+                    array[i] = (jfloat)value[i];
+            } break;
+
+            case 'f': {
+                float *value = msig_instance_value(sig, id, &tt);
+                if (!value) {
+                    (*env)->ReleaseFloatArrayElements(env, ar, array, JNI_ABORT);
+                    return JNI_FALSE;
+                }
+                for (i=0; i < props->length; i++)
+                    array[i] = (jfloat)value[i];
+            } break;
+
+            case 'd': {
+                double *value = msig_instance_value(sig, id, &tt);
+                if (!value) {
+                    (*env)->ReleaseFloatArrayElements(env, ar, array, JNI_ABORT);
+                    return JNI_FALSE;
+                }
+                for (i=0; i < props->length; i++)
+                    array[i] = (jfloat)value[i];
+            } break;
+        }
+
+        (*env)->ReleaseFloatArrayElements(env, ar, array, 0);
+    }
+
+    if (objtt) {
+        jclass cls = (*env)->GetObjectClass(env, objtt);
+        if (cls) {
+            jfieldID sec = (*env)->GetFieldID(env, cls, "sec", "J");
+            jfieldID frac = (*env)->GetFieldID(env, cls, "frac", "J");
+            if (sec && frac) {
+                (*env)->SetLongField(env, objtt, sec, tt.sec);
+                (*env)->SetLongField(env, objtt, frac, tt.frac);
+            }
+        }
+    }
+
+    return JNI_TRUE;
+}
+
+JNIEXPORT jboolean JNICALL Java_Mapper_Device_00024Signal_instanceValue__I_3DLMapper_TimeTag_2
+  (JNIEnv *env, jobject obj, jint id, jdoubleArray ar, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return JNI_FALSE;
+    mapper_db_signal props = msig_properties(sig);
+    mapper_timetag_t tt;
+
+    int length = (*env)->GetArrayLength(env, ar);
+    if (length < props->length) {
+        throwIllegalArgumentLength(env, sig, length);
+        return JNI_FALSE;
+    }
+
+    jdouble *array = (*env)->GetDoubleArrayElements(env, ar, 0);
+    if (array)
+    {
+        int i;
+        switch (props->type)
+        {
+            case 'i': {
+                int *value = msig_instance_value(sig, id, &tt);
+                if (!value) {
+                    (*env)->ReleaseDoubleArrayElements(env, ar, array, JNI_ABORT);
+                    return JNI_FALSE;
+                }
+                for (i=0; i < props->length; i++)
+                    array[i] = (jdouble)value[i];
+            } break;
+
+            case 'f': {
+                float *value = msig_instance_value(sig, id, &tt);
+                if (!value) {
+                    (*env)->ReleaseDoubleArrayElements(env, ar, array, JNI_ABORT);
+                    return JNI_FALSE;
+                }
+                for (i=0; i < props->length; i++)
+                    array[i] = (jdouble)value[i];
+            } break;
+
+            case 'd': {
+                double *value = msig_instance_value(sig, id, &tt);
+                if (!value) {
+                    (*env)->ReleaseDoubleArrayElements(env, ar, array, JNI_ABORT);
+                    return JNI_FALSE;
+                }
+                for (i=0; i < props->length; i++)
+                    array[i] = (jdouble)value[i];
+            } break;
+        }
+
+        (*env)->ReleaseDoubleArrayElements(env, ar, array, 0);
+    }
+
+    if (objtt) {
+        jclass cls = (*env)->GetObjectClass(env, objtt);
+        if (cls) {
+            jfieldID sec = (*env)->GetFieldID(env, cls, "sec", "J");
+            jfieldID frac = (*env)->GetFieldID(env, cls, "frac", "J");
+            if (sec && frac) {
+                (*env)->SetLongField(env, objtt, sec, tt.sec);
+                (*env)->SetLongField(env, objtt, frac, tt.frac);
+            }
+        }
+    }
+
+    return JNI_TRUE;
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_setInstanceEventCallback
+  (JNIEnv *env, jobject obj, jobject handler, jint flags)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    msig_jni_context ctx = (msig_jni_context)props->user_data;
+
+    if (ctx->instanceHandler)
+        (*env)->DeleteGlobalRef(env, ctx->instanceHandler);
+    if (handler) {
+        ctx->instanceHandler = (*env)->NewGlobalRef(env, handler);
+        msig_set_instance_event_callback(sig,
+                                         java_msig_instance_event_cb,
+                                         flags, ctx);
+    }
+    else {
+        ctx->instanceHandler = 0;
+        msig_set_instance_event_callback(sig, 0, flags, 0);
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_setCallback
+  (JNIEnv *env, jobject obj, jobject handler)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+
+    mapper_db_signal props = msig_properties(sig);
+    msig_jni_context ctx = (msig_jni_context)props->user_data;
+    if (ctx->listener)
+        (*env)->DeleteGlobalRef(env, ctx->listener);
+    if (handler) {
+        ctx->listener = (*env)->NewGlobalRef(env, handler);
+        msig_set_callback(sig, java_msig_input_cb, ctx);
+    }
+    else {
+        ctx->listener = 0;
+        msig_set_callback(sig, 0, 0);
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_setInstanceCallback
+  (JNIEnv *env, jobject obj, jint instance_id, jobject data)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig)
+        return;
+    jobject prev = (jobject)msig_get_instance_data(sig, instance_id);
+    if (prev)
+        (*env)->DeleteGlobalRef(env, prev);
+
+    // Note that msig_set_instance_data() can trigger the instance
+    // event callback, so we need to use the global to pass the
+    // environment to the handler.
+    genv = env;
+    bailing = 0;
+
+    msig_set_instance_data(sig, instance_id,
+                           data ? (*env)->NewGlobalRef(env, data) : 0);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_00024Signal_getInstanceCallback
+  (JNIEnv *env, jobject obj, jint instance_id)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig)
+        return 0;
+    return (jobject)msig_get_instance_data(sig, instance_id);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_00024Signal_reserveInstances
+  (JNIEnv *env, jobject obj, jintArray ids, jint num, jobject cb)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig)
+        return 0;
+    int i, reserved = 0;
+    jobject ref = cb ? (*env)->NewGlobalRef(env, cb) : 0;
+    if (ids) {
+        int length = (*env)->GetArrayLength(env, ids);
+        jint *array = (*env)->GetIntArrayElements(env, ids, 0);
+        for (i = 0; i < length; i++) {
+            int id = (int)array[i];
+            reserved += msig_reserve_instances(sig, 1, &id, ref ? (void **)&ref : 0);
+        }
+        (*env)->ReleaseIntArrayElements(env, ids, array, JNI_ABORT);
+        return reserved;
+    }
+    else {
+        for (i = 0; i < num; i++) {
+            reserved += msig_reserve_instances(sig, 1, 0, (void **)&ref);
+        }
+        return reserved;
+    }
+    return 0;
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_releaseInstance
+  (JNIEnv *env, jobject obj, jint instance_id, jobject objtt)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+    mapper_timetag_t tt, *ptt=0;
+    ptt = get_timetag_from_jobject(env, objtt, &tt);
+    msig_release_instance(sig, instance_id, ptt ? *ptt : MAPPER_NOW);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_removeInstance
+  (JNIEnv *env, jobject obj, jint instance_id)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+    msig_remove_instance(sig, instance_id);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_00024Signal_oldestActiveInstance
+  (JNIEnv *env, jobject obj)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    int i, r = msig_get_oldest_active_instance(sig, &i);
+    jobject iobj = 0;
+    if (r == 0) {
+        jclass cls = (*env)->FindClass(env, "java/lang/Integer");
+        if (cls) {
+            jmethodID cons = (*env)->GetMethodID(env, cls,
+                                                 "<init>", "(I)V");
+            if (cons) {
+                iobj = (*env)->NewObject(env, cls, cons, i);
+                return iobj;
+            }
+        }
+    }
+    return 0;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Device_00024Signal_newestActiveInstance
+  (JNIEnv *env, jobject obj)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    int i, r = msig_get_newest_active_instance(sig, &i);
+    jobject iobj = 0;
+    if (r == 0) {
+        jclass cls = (*env)->FindClass(env, "java/lang/Integer");
+        if (cls) {
+            jmethodID cons = (*env)->GetMethodID(env, cls,
+                                                 "<init>", "(I)V");
+            if (cons) {
+                iobj = (*env)->NewObject(env, cls, cons, i);
+                return iobj;
+            }
+        }
+    }
+    return 0;
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_match_1instances
+  (JNIEnv *env, jobject obj, jobject from, jobject to, jint instance_id)
+{
+    mapper_signal sigfrom = get_signal_from_jobject(env, from);
+    mapper_signal sigto = get_signal_from_jobject(env, to);
+    if (!sigto || !sigfrom) return;
+
+    msig_match_instances(sigfrom, sigto, instance_id);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_00024Signal_numActiveInstances
+  (JNIEnv *env, jobject obj)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    return msig_num_active_instances(sig);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_00024Signal_numReservedInstances
+  (JNIEnv *env, jobject obj)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    return msig_num_reserved_instances(sig);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_00024Signal_activeInstanceId
+  (JNIEnv *env, jobject obj, jint index)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    return msig_active_instance_id(sig, index);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Device_00024Signal_setInstanceAllocationMode
+  (JNIEnv *env, jobject obj, jint mode)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return;
+    msig_set_instance_allocation_mode(sig, mode);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_00024Signal_instanceAllocationMode
+  (JNIEnv *env, jobject obj)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    return msig_get_instance_allocation_mode(sig);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Device_00024Signal_numConnections
+  (JNIEnv *env, jobject obj)
+{
+    mapper_signal sig = get_signal_from_jobject(env, obj);
+    if (!sig) return 0;
+    return msig_num_connections(sig);
+}
+
+/**** Mapper.Monitor ****/
+
+JNIEXPORT jlong JNICALL Java_Mapper_Monitor_mmon_1new
+  (JNIEnv *env, jobject obj, jint autosubscribe_flags)
+{
+    mapper_monitor mon = mapper_monitor_new(0, autosubscribe_flags);
+    return jlong_ptr(mon);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Monitor_mmon_1get_1db
+(JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    mapper_db db = mapper_monitor_get_db(mon);
+    return jlong_ptr(db);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1free
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    mapper_monitor_free(mon);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Monitor_mmon_1poll
+  (JNIEnv *env, jobject obj, jlong d, jint timeout)
+{
+    genv = env;
+    bailing = 0;
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(d);
+    return mapper_monitor_poll(mon, timeout);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1subscribe
+  (JNIEnv *env, jobject obj, jlong p, jstring name, jint flags, jint timeout)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    const char *cname = (*env)->GetStringUTFChars(env, name, 0);
+    mapper_monitor_subscribe(mon, cname, flags, timeout);
+    (*env)->ReleaseStringUTFChars(env, name, cname);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1unsubscribe
+  (JNIEnv *env, jobject obj, jlong p, jstring name)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    const char *cname = (*env)->GetStringUTFChars(env, name, 0);
+    mapper_monitor_unsubscribe(mon, cname);
+    (*env)->ReleaseStringUTFChars(env, name, cname);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1link
+  (JNIEnv *env, jobject obj, jlong p, jstring src_name, jstring dest_name,
+   jobject link_props)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    const char *csrc_name = (*env)->GetStringUTFChars(env, src_name, 0);
+    const char *cdest_name = (*env)->GetStringUTFChars(env, dest_name, 0);
+// TODO: process props!
+    mapper_monitor_link(mon, csrc_name, cdest_name, 0, 0);
+    (*env)->ReleaseStringUTFChars(env, src_name, csrc_name);
+    (*env)->ReleaseStringUTFChars(env, dest_name, cdest_name);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1unlink
+  (JNIEnv *env, jobject obj, jlong p, jstring src_name, jstring dest_name)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    const char *csrc_name = (*env)->GetStringUTFChars(env, src_name, 0);
+    const char *cdest_name = (*env)->GetStringUTFChars(env, dest_name, 0);
+    mapper_monitor_unlink(mon, csrc_name, cdest_name);
+    (*env)->ReleaseStringUTFChars(env, src_name, csrc_name);
+    (*env)->ReleaseStringUTFChars(env, dest_name, cdest_name);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1connect_1or_1mod
+  (JNIEnv *env, jobject obj, jlong p, jstring src_name, jstring dest_name,
+   jobject jprops, jint modify)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    const char *csrc_name = (*env)->GetStringUTFChars(env, src_name, 0);
+    const char *cdest_name = (*env)->GetStringUTFChars(env, dest_name, 0);
+
+    // process props
+    // don't bother letting user define signal types or lengths (will be overwritten)
+    mapper_db_connection_t cprops;
+    jstring expr_jstr = 0;
+    int src_length = 0, dest_length = 0;
+    char src_type = 0, dest_type = 0;
+    jobject src_min_field = NULL, src_max_field = NULL;
+    jobject dest_min_field = NULL, dest_max_field = NULL;
+    // TODO: "extra" props
+    int props_flags = 0;
+    if (jprops) {
+        jclass cls = (*env)->GetObjectClass(env, jprops);
+        if (cls) {
+            // mode
+            jfieldID fid = (*env)->GetFieldID(env, cls, "mode", "I");
+            if (fid) {
+                cprops.mode = (*env)->GetIntField(env, jprops, fid);
+                if ((int)cprops.mode >= 0)
+                    props_flags |= CONNECTION_MODE;
+            }
+            // expression
+            fid = (*env)->GetFieldID(env, cls, "expression", "Ljava/lang/String;");
+            if (fid) {
+                expr_jstr = (*env)->GetObjectField(env, jprops, fid);
+                if (expr_jstr) {
+                    cprops.expression = (char*)(*env)->GetStringUTFChars(env, expr_jstr, 0);
+                    props_flags |= CONNECTION_EXPRESSION;
+                }
+            }
+            // bound_min
+            fid = (*env)->GetFieldID(env, cls, "boundMin", "I");
+            if (fid) {
+                cprops.bound_min = (*env)->GetIntField(env, jprops, fid);
+                if ((int)cprops.bound_min >= 0)
+                    props_flags |= CONNECTION_BOUND_MIN;
+            }
+            // bound_max
+            fid = (*env)->GetFieldID(env, cls, "boundMax", "I");
+            if (fid) {
+                cprops.bound_max = (*env)->GetIntField(env, jprops, fid);
+                if ((int)cprops.bound_max >= 0)
+                    props_flags |= CONNECTION_BOUND_MAX;
+            }
+            // src_min
+            fid = (*env)->GetFieldID(env, cls, "srcMin", "LMapper/PropertyValue;");
+            if (fid) {
+                src_min_field = (*env)->GetObjectField(env, jprops, fid);
+                if (src_min_field) {
+                    src_length = get_PropertyValue_elements(env, src_min_field,
+                                                            &cprops.src_min,
+                                                            &src_type);
+                    if (src_length) {
+                        cprops.src_length = src_length;
+                        cprops.src_type = src_type;
+                        props_flags |= (CONNECTION_RANGE_SRC_MIN
+                                        | CONNECTION_SRC_LENGTH
+                                        | CONNECTION_SRC_TYPE);
+                    }
+                }
+            }
+            // src_max
+            fid = (*env)->GetFieldID(env, cls, "srcMax", "LMapper/PropertyValue;");
+            if (fid) {
+                src_max_field = (*env)->GetObjectField(env, jprops, fid);
+                if (src_max_field) {
+                    char type;
+                    int length = get_PropertyValue_elements(env, src_max_field,
+                                                            &cprops.src_max,
+                                                            &type);
+                    if (length) {
+                        // check if length and type match, abort or cast otherwise
+                        if (src_length && length != src_length)
+                            printf("differing lengths for src!\n");
+                        else if (src_type && type != src_type)
+                            printf("differing types for src!\n");
+                        else {
+                            cprops.src_length = length;
+                            cprops.src_type = type;
+                            props_flags |= (CONNECTION_RANGE_SRC_MAX
+                                            | CONNECTION_SRC_LENGTH
+                                            | CONNECTION_SRC_TYPE);
+                        }
+                    }
+                }
+            }
+            // dest_min
+            fid = (*env)->GetFieldID(env, cls, "destMin", "LMapper/PropertyValue;");
+            if (fid) {
+                dest_min_field = (*env)->GetObjectField(env, jprops, fid);
+                if (dest_min_field) {
+                    dest_length = get_PropertyValue_elements(env, dest_min_field,
+                                                             &cprops.dest_min,
+                                                             &dest_type);
+                    if (dest_length) {
+                        cprops.dest_length = dest_length;
+                        cprops.dest_type = dest_type;
+                        props_flags |= (CONNECTION_RANGE_DEST_MIN
+                                        | CONNECTION_DEST_LENGTH
+                                        | CONNECTION_DEST_TYPE);
+                    }
+                }
+            }
+            // dest_max
+            fid = (*env)->GetFieldID(env, cls, "destMax", "LMapper/PropertyValue;");
+            if (fid) {
+                dest_max_field = (*env)->GetObjectField(env, jprops, fid);
+                if (dest_max_field) {
+                    char type;
+                    int length = get_PropertyValue_elements(env, dest_max_field,
+                                                            &cprops.dest_max,
+                                                            &type);
+                    if (length) {
+                        if (dest_length && length != dest_length)
+                            printf("differing lengths for dest!\n");
+                        else if (dest_type && type != dest_type)
+                            printf("differing types for dest!\n");
+                        else {
+                            // check if length and type match, abort or cast otherwise
+                            cprops.dest_length = length;
+                            cprops.dest_type = type;
+                            props_flags |= (CONNECTION_RANGE_DEST_MAX
+                                            | CONNECTION_DEST_LENGTH
+                                            | CONNECTION_DEST_TYPE);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    if (modify)
+        mapper_monitor_connection_modify(mon, csrc_name, cdest_name,
+                                         &cprops, props_flags);
+    else
+        mapper_monitor_connect(mon, csrc_name, cdest_name, &cprops, props_flags);
+    (*env)->ReleaseStringUTFChars(env, src_name, csrc_name);
+    (*env)->ReleaseStringUTFChars(env, dest_name, cdest_name);
+    if (expr_jstr)
+        (*env)->ReleaseStringUTFChars(env, expr_jstr, cprops.expression);
+    if (src_min_field)
+        release_PropertyValue_elements(env, src_min_field, cprops.src_min);
+    if (src_max_field)
+        release_PropertyValue_elements(env, src_max_field, cprops.src_max);
+    if (dest_min_field)
+        release_PropertyValue_elements(env, dest_min_field, cprops.dest_min);
+    if (dest_max_field)
+        release_PropertyValue_elements(env, dest_max_field, cprops.dest_max);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1disconnect
+  (JNIEnv *env, jobject obj, jlong p, jstring src_name, jstring dest_name)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    const char *csrc_name = (*env)->GetStringUTFChars(env, src_name, 0);
+    const char *cdest_name = (*env)->GetStringUTFChars(env, dest_name, 0);
+    mapper_monitor_disconnect(mon, csrc_name, cdest_name);
+    (*env)->ReleaseStringUTFChars(env, src_name, csrc_name);
+    (*env)->ReleaseStringUTFChars(env, dest_name, cdest_name);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_mmon_1autosubscribe
+  (JNIEnv *env, jobject obj, jlong p, jint flags)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    mapper_monitor_autosubscribe(mon, flags);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_mmon_1now
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_monitor mon = (mapper_monitor)ptr_jlong(p);
+    mapper_timetag_t tt;
+    mapper_monitor_now(mon, &tt);
+    jobject o = get_jobject_from_timetag(genv, &tt);
+    return o;
+}
+
+/**** Mapper.Monitor.Db ****/
+
+static void java_db_device_cb(mapper_db_device record,
+                              mapper_db_action_t action,
+                              void *user_data)
+{
+    if (bailing || !user_data)
+        return;
+
+    // Create a wrapper class for the device properties
+    jclass cls = (*genv)->FindClass(genv, "Mapper/Db/Device");
+    if (!cls)
+    return;
+    jmethodID mid = (*genv)->GetMethodID(genv, cls, "<init>", "(J)V");
+    jobject devdbobj = (*genv)->NewObject(genv, cls, mid, jlong_ptr(record));
+
+    jobject obj = (jobject)user_data;
+    cls = (*genv)->GetObjectClass(genv, user_data);
+    if (cls) {
+        mid = (*genv)->GetMethodID(genv, cls, "onEvent",
+                                   "(LMapper/Db/Device;I)V");
+        if (mid) {
+            (*genv)->CallVoidMethod(genv, obj, mid, devdbobj, action);
+            if ((*genv)->ExceptionOccurred(genv))
+                bailing = 1;
+        }
+        else {
+            printf("Did not successfully look up onEvent method.\n");
+        }
+    }
+}
+
+static void java_db_signal_cb(mapper_db_signal record,
+                              mapper_db_action_t action,
+                              void *user_data)
+{
+    if (bailing || !user_data)
+        return;
+
+    // Create a wrapper class for the signal properties
+    jclass cls = (*genv)->FindClass(genv, "Mapper/Db/Signal");
+    if (!cls)
+        return;
+
+    jmethodID mid = (*genv)->GetMethodID(genv, cls, "<init>", "(J)V");
+    jobject sigdbobj = (*genv)->NewObject(genv, cls, mid, jlong_ptr(record));
+
+    jobject obj = (jobject)user_data;
+    cls = (*genv)->GetObjectClass(genv, user_data);
+    if (cls) {
+        mid = (*genv)->GetMethodID(genv, cls, "onEvent",
+                                   "(LMapper/Db/Signal;I)V");
+        if (mid) {
+            (*genv)->CallVoidMethod(genv, obj, mid, sigdbobj, action);
+            if ((*genv)->ExceptionOccurred(genv))
+                bailing = 1;
+        }
+        else {
+            printf("Did not successfully look up onEvent method.\n");
+        }
+    }
+}
+
+static void java_db_link_cb(mapper_db_link record,
+                            mapper_db_action_t action,
+                            void *user_data)
+{
+    if (bailing || !user_data)
+    return;
+
+    // Create a wrapper class for the link properties
+    jclass cls = (*genv)->FindClass(genv, "Mapper/Db/Link");
+    if (!cls)
+        return;
+
+    jmethodID mid = (*genv)->GetMethodID(genv, cls, "<init>", "(J)V");
+    jobject linkdbobj = (*genv)->NewObject(genv, cls, mid, jlong_ptr(record));
+
+    jobject obj = (jobject)user_data;
+    cls = (*genv)->GetObjectClass(genv, user_data);
+    if (cls) {
+        mid = (*genv)->GetMethodID(genv, cls, "onEvent",
+                                   "(LMapper/Db/Link;I)V");
+        if (mid) {
+            (*genv)->CallVoidMethod(genv, obj, mid, linkdbobj, action);
+            if ((*genv)->ExceptionOccurred(genv))
+            bailing = 1;
+        }
+        else {
+            printf("Did not successfully look up onEvent method.\n");
+        }
+    }
+}
+
+static void java_db_connection_cb(mapper_db_connection record,
+                                  mapper_db_action_t action,
+                                  void *user_data)
+{
+    if (bailing || !user_data)
+        return;
+
+    // Create a wrapper class for the connection properties
+    jclass cls = (*genv)->FindClass(genv, "Mapper/Db/Connection");
+    if (!cls)
+        return;
+
+    jmethodID mid = (*genv)->GetMethodID(genv, cls, "<init>", "(J)V");
+    jobject condbobj = (*genv)->NewObject(genv, cls, mid, jlong_ptr(record));
+
+    jobject obj = (jobject)user_data;
+    cls = (*genv)->GetObjectClass(genv, user_data);
+    if (cls) {
+        mid = (*genv)->GetMethodID(genv, cls, "onEvent",
+                                   "(LMapper/Db/Connection;I)V");
+        if (mid) {
+            (*genv)->CallVoidMethod(genv, obj, mid, condbobj, action);
+            if ((*genv)->ExceptionOccurred(genv))
+                bailing = 1;
+        }
+        else {
+            printf("Did not successfully look up onEvent method.\n");
+        }
+    }
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1add_1device_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    // TODO: check listener hasn't already been added
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+    jobject o = (*env)->NewGlobalRef(env, listener);
+    mapper_db_add_device_callback(db, java_db_device_cb, o);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1remove_1device_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+    mapper_db_remove_device_callback(db, java_db_device_cb, listener);
+    (*env)->DeleteGlobalRef(env, listener);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1add_1signal_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    // TODO: check listener hasn't already been added
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+    jobject o = (*env)->NewGlobalRef(env, listener);
+    mapper_db_add_signal_callback(db, java_db_signal_cb, o);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1remove_1signal_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+    mapper_db_remove_signal_callback(db, java_db_signal_cb, ptr_jlong(listener));
+    (*env)->DeleteGlobalRef(env, listener);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1add_1link_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    // TODO: check listener hasn't already been added
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+
+    jobject o = (*env)->NewGlobalRef(env, listener);
+    mapper_db_add_link_callback(db, java_db_link_cb, o);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1remove_1link_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+    mapper_db_remove_link_callback(db, java_db_link_cb, ptr_jlong(listener));
+    (*env)->DeleteGlobalRef(env, listener);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1add_1connection_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    // TODO: check listener hasn't already been added
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+
+    jobject o = (*env)->NewGlobalRef(env, listener);
+    mapper_db_add_connection_callback(db, java_db_connection_cb, o);
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Monitor_00024Db_mdb_1remove_1connection_1callback
+  (JNIEnv *env, jobject obj, jlong p, jobject listener)
+{
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db || !listener)
+        return;
+    mapper_db_remove_connection_callback(db, java_db_connection_cb,
+                                         ptr_jlong(listener));
+    (*env)->DeleteGlobalRef(env, listener);
+}
+
+/**** Mapper.Db.Device ****/
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1name
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->name);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1ordinal
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->ordinal;
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1host
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->host);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1port
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->port;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1num_1inputs
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->num_inputs;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1num_1outputs
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->num_outputs;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1num_1links_1in
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->num_links_in;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1num_1links_1out
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->num_links_out;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1num_1connections_1in
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->num_connections_in;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1num_1connections_1out
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->num_connections_out;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1version
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    return props->version;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Device_mdb_1device_1get_1synced
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    jobject o = get_jobject_from_timetag(genv, &props->synced);
+    return o;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Device_mdb_1device_1property_1lookup
+  (JNIEnv *env, jobject obj, jlong p, jstring property)
+{
+    mapper_db_device props = (mapper_db_device)ptr_jlong(p);
+    const char *cprop = (*env)->GetStringUTFChars(env, property, 0);
+    char type;
+    int length;
+    const void *value;
+    jobject o = 0;
+
+    if (!mapper_db_device_property_lookup(props, cprop, &type, &value, &length))
+        o = build_PropertyValue(env, type, value, length);
+
+    (*env)->ReleaseStringUTFChars(env, property, cprop);
+    return o;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_devices
+  (JNIEnv *env, jobject obj)
+{
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    mapper_db_device *devs = mapper_db_get_all_devices(db);
+    if (!devs) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/DeviceCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    return (*env)->NewObject(env, cls, mid, jlong_ptr(devs));
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_get_1device
+  (JNIEnv *env, jobject obj, jstring s)
+{
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *name = (*env)->GetStringUTFChars(env, s, 0);
+    mapper_db_device dev = mapper_db_get_device_by_name(db, name);
+    (*env)->ReleaseStringUTFChars(env, s, name);
+    if (!dev) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/Device");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    return (*env)->NewObject(env, cls, mid, jlong_ptr(dev));
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_match_1devices
+  (JNIEnv *env, jobject obj, jstring s)
+{
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *pattern = (*env)->GetStringUTFChars(env, s, 0);
+    mapper_db_device *devs = mapper_db_match_devices_by_name(db, pattern);
+    (*env)->ReleaseStringUTFChars(env, s, pattern);
+    if (!devs) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/DeviceCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    return (*env)->NewObject(env, cls, mid, jlong_ptr(devs));
+}
+
+/**** Mapper.Db.Device.Iterator ****/
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_DeviceIterator_mdb_1deref
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    void **ptr = (void**)ptr_jlong(p);
+    return jlong_ptr(*ptr);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_DeviceIterator_mdb_1device_1next
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device_t **devs = (mapper_db_device_t**)ptr_jlong(p);
+    return jlong_ptr(mapper_db_device_next(devs));
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Db_DeviceIterator_mdb_1device_1done
+(JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_device_t **devs = (mapper_db_device_t**)ptr_jlong(p);
+    if (devs)
+        mapper_db_device_done(devs);
+}
+
+/**** Mapper.Db.Signal ****/
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1name
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->name);
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1device_1name
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->device_name);
+}
+
+JNIEXPORT jboolean JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1is_1output
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    return props->is_output!=0;
+}
+
+JNIEXPORT jchar JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1type
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    return props->type;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1length
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    return props->length;
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1unit
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->unit);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1minimum
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+
+    if (!props->minimum)
+        return 0;
+    return build_PropertyValue(env, props->type, props->minimum, props->length);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1maximum
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+
+    if (!props->maximum)
+        return 0;
+    return build_PropertyValue(env, props->type, props->maximum, props->length);
+}
+
+JNIEXPORT jdouble JNICALL Java_Mapper_Db_Signal_mdb_1signal_1get_1rate
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    return (jdouble)props->rate;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Signal_mdb_1signal_1property_1lookup
+  (JNIEnv *env, jobject obj, jlong p, jstring property)
+{
+    mapper_db_signal props = (mapper_db_signal)ptr_jlong(p);
+    const char *cprop = (*env)->GetStringUTFChars(env, property, 0);
+    char type;
+    int length;
+    const void *value;
+    jobject o = 0;
+
+    if (!mapper_db_signal_property_lookup(props, cprop, &type, &value, &length))
+        o = build_PropertyValue(env, type, value, length);
+
+    (*env)->ReleaseStringUTFChars(env, property, cprop);
+    return o;
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Monitor_00024Db_mdb_1inputs
+  (JNIEnv *env, jobject obj, jlong p, jstring s)
+{
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    mapper_db_signal *sigs;
+    if (s) {
+        const char *name = (*env)->GetStringUTFChars(env, s, 0);
+        sigs = mapper_db_get_inputs_by_device_name(db, name);
+        (*env)->ReleaseStringUTFChars(env, s, name);
+    }
+    else {
+        sigs = mapper_db_get_all_inputs(db);
+    }
+    return jlong_ptr(sigs);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_getInput
+  (JNIEnv *env, jobject obj, jstring s1, jstring s2)
+{
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *dev_name = (*env)->GetStringUTFChars(env, s1, 0);
+    const char *sig_name = (*env)->GetStringUTFChars(env, s2, 0);
+    mapper_db_signal sig =
+        mapper_db_get_input_by_device_and_signal_names(db, dev_name, sig_name);
+    (*env)->ReleaseStringUTFChars(env, s1, dev_name);
+    (*env)->ReleaseStringUTFChars(env, s2, sig_name);
+    if (!sig) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/Signal");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    return (*env)->NewObject(env, cls, mid, jlong_ptr(sig));
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_matchInputs
+  (JNIEnv *env, jobject obj, jstring s1, jstring s2)
+{
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *dev_name = (*env)->GetStringUTFChars(env, s1, 0);
+    const char *sig_pattern = (*env)->GetStringUTFChars(env, s2, 0);
+    mapper_db_signal *sigs = mapper_db_match_inputs_by_device_name(db, dev_name,
+                                                                   sig_pattern);
+    (*env)->ReleaseStringUTFChars(env, s1, dev_name);
+    (*env)->ReleaseStringUTFChars(env, s2, sig_pattern);
+    if (!sigs) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/SignalCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    return (*env)->NewObject(env, cls, mid, jlong_ptr(sigs));
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Monitor_00024Db_mdb_1outputs
+(JNIEnv *env, jobject obj, jlong p, jstring s)
+{
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    mapper_db_signal *sigs;
+    if (s) {
+        const char *name = (*env)->GetStringUTFChars(env, s, 0);
+        sigs = mapper_db_get_outputs_by_device_name(db, name);
+        (*env)->ReleaseStringUTFChars(env, s, name);
+    }
+    else {
+        sigs = mapper_db_get_all_outputs(db);
+    }
+    return jlong_ptr(sigs);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_getOutput
+(JNIEnv *env, jobject obj, jstring s1, jstring s2)
+{
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *dev_name = (*env)->GetStringUTFChars(env, s1, 0);
+    const char *sig_name = (*env)->GetStringUTFChars(env, s2, 0);
+    mapper_db_signal sig =
+    mapper_db_get_output_by_device_and_signal_names(db, dev_name, sig_name);
+    (*env)->ReleaseStringUTFChars(env, s1, dev_name);
+    (*env)->ReleaseStringUTFChars(env, s2, sig_name);
+    if (!sig) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/Signal");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    return (*env)->NewObject(env, cls, mid, jlong_ptr(sig));
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_matchOutputs
+(JNIEnv *env, jobject obj, jstring s1, jstring s2)
+{
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *dev_name = (*env)->GetStringUTFChars(env, s1, 0);
+    const char *sig_pattern = (*env)->GetStringUTFChars(env, s2, 0);
+    mapper_db_signal *sigs = mapper_db_match_outputs_by_device_name(db, dev_name,
+                                                                    sig_pattern);
+    (*env)->ReleaseStringUTFChars(env, s1, dev_name);
+    (*env)->ReleaseStringUTFChars(env, s2, sig_pattern);
+    if (!sigs) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/SignalCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    return (*env)->NewObject(env, cls, mid, jlong_ptr(sigs));
+}
+
+/**** Mapper.Db.Signal.Iterator ****/
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_SignalIterator_mdb_1deref
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    void **ptr = (void**)ptr_jlong(p);
+    return jlong_ptr(*ptr);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_SignalIterator_mdb_1signal_1next
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal_t **sigs = (mapper_db_signal_t**)ptr_jlong(p);
+    return jlong_ptr(mapper_db_signal_next(sigs));
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Db_SignalIterator_mdb_1signal_1done
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_signal_t **sigs = (mapper_db_signal_t**)ptr_jlong(p);
+    if (sigs)
+        mapper_db_signal_done(sigs);
+}
+
+/**** Mapper.Db.Link ****/
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1src_1name
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->src_name);
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1dest_1name
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->dest_name);
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1src_1host
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->src_host);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1src_1port
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    return props->src_port;
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1dest_1host
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->dest_host);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1dest_1port
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    return props->dest_port;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1num_1scopes
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    return props->num_scopes;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Link_mdb_1link_1get_1scope_1names
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+
+    if (!props->num_scopes)
+        return 0;
+    return build_PropertyValue(env, 's', props->scope_names, props->num_scopes);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Link_mapper_1db_1link_1property_1lookup
+  (JNIEnv *env, jobject obj, jlong p, jstring property)
+{
+    mapper_db_link props = (mapper_db_link)ptr_jlong(p);
+    const char *cprop = (*env)->GetStringUTFChars(env, property, 0);
+    char type;
+    int length;
+    const void *value;
+    jobject o = 0;
+
+    if (!mapper_db_link_property_lookup(props, cprop, &type, &value, &length))
+        o = build_PropertyValue(env, type, value, length);
+
+    (*env)->ReleaseStringUTFChars(env, property, cprop);
+    return o;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_getLink
+  (JNIEnv *env, jobject obj, jstring s1, jstring s2)
+{
+    jobject linkobj = 0;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *src_name = (*env)->GetStringUTFChars(env, s1, 0);
+    const char *dest_name = (*env)->GetStringUTFChars(env, s2, 0);
+    mapper_db_link link = mapper_db_get_link_by_src_dest_names(db, src_name, dest_name);
+    if (link) {;
+        jclass cls = (*env)->FindClass(env, "Mapper/Db/Link");
+        if (cls) {
+            jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+            linkobj = (*env)->NewObject(env, cls, mid, jlong_ptr(link));
+        }
+    }
+    (*env)->ReleaseStringUTFChars(env, s1, src_name);
+    (*env)->ReleaseStringUTFChars(env, s2, dest_name);
+    return linkobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_mdb_1links
+  (JNIEnv *env, jobject obj, jlong p, jstring s)
+{
+    mapper_db_link *links;
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db) return 0;
+
+    if (s) {
+        const char *name = (*env)->GetStringUTFChars(env, s, 0);
+        links = mapper_db_get_links_by_device_name(db, name);
+        (*env)->ReleaseStringUTFChars(env, s, name);
+    }
+    else {
+        links = mapper_db_get_all_links(db);
+    }
+
+    if (!links) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/LinkCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject linksobj = (*env)->NewObject(env, cls, mid, jlong_ptr(links));
+    return linksobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_links
+  (JNIEnv *env, jobject obj, jobject srcobj, jobject destobj)
+{
+    mapper_db_link *links;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    // retrieve mapper_db_device* ptrs from DeviceCollection objects
+    mapper_db_device *src = get_db_device_ptr_from_jobject(env, srcobj);
+    mapper_db_device *dest = get_db_device_ptr_from_jobject(env, destobj);
+    if (!src || !dest) return 0;
+
+    links = mapper_db_get_links_by_src_dest_devices(db, src, dest);
+    if (!links) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/LinkCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject linksobj = (*env)->NewObject(env, cls, mid, jlong_ptr(links));
+    return linksobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_linksBySrc
+  (JNIEnv *env, jobject obj, jstring s)
+{
+    mapper_db_link *links;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *name = (*env)->GetStringUTFChars(env, s, 0);
+    links = mapper_db_get_links_by_src_device_name(db, name);
+    (*env)->ReleaseStringUTFChars(env, s, name);
+
+    if (!links) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/LinkCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject linksobj = (*env)->NewObject(env, cls, mid, jlong_ptr(links));
+    return linksobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_linksByDest
+  (JNIEnv *env, jobject obj, jstring s)
+{
+    mapper_db_link *links;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    const char *name = (*env)->GetStringUTFChars(env, s, 0);
+    links = mapper_db_get_links_by_dest_device_name(db, name);
+    (*env)->ReleaseStringUTFChars(env, s, name);
+
+    if (!links) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/LinkCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject linksobj = (*env)->NewObject(env, cls, mid, jlong_ptr(links));
+    return linksobj;
+}
+
+/**** Mapper.Db.Link.Iterator ****/
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_LinkIterator_mdb_1deref
+(JNIEnv *env, jobject obj, jlong p)
+{
+    void **ptr = (void**)ptr_jlong(p);
+    return jlong_ptr(*ptr);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_LinkIterator_mdb_1link_1next
+(JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link_t **links = (mapper_db_link_t**)ptr_jlong(p);
+    return jlong_ptr(mapper_db_link_next(links));
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Db_LinkIterator_mdb_1link_1done
+(JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_link_t **links = (mapper_db_link_t**)ptr_jlong(p);
+    if (links)
+        mapper_db_link_done(links);
+}
+
+/**** Mapper.Db.Connection ****/
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1src_1name
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->src_name);
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1dest_1name
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return (*env)->NewStringUTF(env, props->dest_name);
+}
+
+JNIEXPORT jchar JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1src_1type
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return props->src_type;
+}
+
+JNIEXPORT jchar JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1dest_1type
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return props->dest_type;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1src_1length
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return props->src_length;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1dest_1length
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return props->dest_length;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1bound_1min
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return props->bound_min;
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1bound_1max
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return props->bound_max;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1src_1min
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+
+    if (!props->src_min)
+        return 0;
+    return build_PropertyValue(env, props->src_type, props->src_min, props->src_length);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1src_1max
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+
+    if (!props->src_max)
+        return 0;
+    return build_PropertyValue(env, props->src_type, props->src_max, props->src_length);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1dest_1min
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+
+    if (!props->dest_min)
+        return 0;
+    return build_PropertyValue(env, props->dest_type, props->dest_min, props->dest_length);
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1dest_1max
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+
+    if (!props->dest_max)
+        return 0;
+    return build_PropertyValue(env, props->dest_type, props->dest_max, props->dest_length);
+}
+
+JNIEXPORT jint JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1mode
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    return props->mode;
+}
+
+JNIEXPORT jstring JNICALL Java_Mapper_Db_Connection_mdb_1connection_1get_1expression
+  (JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    if (props->expression)
+        return (*env)->NewStringUTF(env, props->expression);
+    return 0;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Db_Connection_mapper_1db_1connection_1property_1lookup
+  (JNIEnv *env, jobject obj, jlong p, jstring property)
+{
+    mapper_db_connection props = (mapper_db_connection)ptr_jlong(p);
+    const char *cprop = (*env)->GetStringUTFChars(env, property, 0);
+    char type;
+    int length;
+    const void *value;
+    jobject o = 0;
+
+    if (!mapper_db_connection_property_lookup(props, cprop, &type, &value, &length))
+        o = build_PropertyValue(env, type, value, length);
+
+    (*env)->ReleaseStringUTFChars(env, property, cprop);
+    return o;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_mdb_1connections
+  (JNIEnv *env, jobject obj, jlong p, jstring s)
+{
+    mapper_db_connection *cons;
+    mapper_db db = (mapper_db)ptr_jlong(p);
+    if (!db) return 0;
+
+    if (s) {
+        const char *name = (*env)->GetStringUTFChars(env, s, 0);
+        cons = mapper_db_get_connections_by_device_name(db, name);
+        (*env)->ReleaseStringUTFChars(env, s, name);
+    }
+    else {
+        cons = mapper_db_get_all_connections(db);
+    }
+
+    if (!cons) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/ConnectionCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject consobj = (*env)->NewObject(env, cls, mid, jlong_ptr(cons));
+    return consobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_connections
+  (JNIEnv *env, jobject obj, jobject srcobj, jobject destobj)
+{
+    mapper_db_connection *cons;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db) return 0;
+
+    // retrieve mapper_db_signal* ptrs from SignalCollection objects
+    mapper_db_signal *src = get_db_signal_ptr_from_jobject(env, srcobj);
+    mapper_db_signal *dest = get_db_signal_ptr_from_jobject(env, destobj);
+    if (!src || !dest) return 0;
+
+    cons = mapper_db_get_connections_by_signal_queries(db, src, dest);
+    if (!cons) return 0;
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/ConnectionCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject consobj = (*env)->NewObject(env, cls, mid, jlong_ptr(cons));
+    return consobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_mdb_1connections_1by_1src
+  (JNIEnv *env, jobject obj, jlong p, jstring s1, jstring s2)
+{
+    mapper_db_connection *cons;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db || !s2) return 0;
+
+    const char *sig_name = (*env)->GetStringUTFChars(env, s2, 0);
+    if (s1) {
+        const char *dev_name = (*env)->GetStringUTFChars(env, s1, 0);
+        cons = mapper_db_get_connections_by_src_device_and_signal_names(db, dev_name,
+                                                                        sig_name);
+        (*env)->ReleaseStringUTFChars(env, s1, dev_name);
+    }
+    else {
+        cons = mapper_db_get_connections_by_src_signal_name(db, sig_name);
+    }
+    (*env)->ReleaseStringUTFChars(env, s2, sig_name);
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/ConnectionCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject consobj = (*env)->NewObject(env, cls, mid, jlong_ptr(cons));
+    return consobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_mdb_1connections_1by_1dest
+  (JNIEnv *env, jobject obj, jlong p, jstring s1, jstring s2)
+{
+    mapper_db_connection *cons;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db || !s2) return 0;
+
+    const char *sig_name = (*env)->GetStringUTFChars(env, s2, 0);
+    if (s1) {
+        const char *dev_name = (*env)->GetStringUTFChars(env, s1, 0);
+        cons = mapper_db_get_connections_by_dest_device_and_signal_names(db, dev_name,
+                                                                         sig_name);
+        (*env)->ReleaseStringUTFChars(env, s1, dev_name);
+    }
+    else {
+        cons = mapper_db_get_connections_by_dest_signal_name(db, sig_name);
+    }
+    (*env)->ReleaseStringUTFChars(env, s2, sig_name);
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/ConnectionCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject consobj = (*env)->NewObject(env, cls, mid, jlong_ptr(cons));
+    return consobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_connectionBySignals
+  (JNIEnv *env, jobject obj, jstring s1, jstring s2)
+{
+    mapper_db_connection con;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db || !s1 || !s2) return 0;
+
+    const char *src_name = (*env)->GetStringUTFChars(env, s1, 0);
+    const char *dest_name = (*env)->GetStringUTFChars(env, s2, 0);
+    con = mapper_db_get_connection_by_signal_full_names(db, src_name, dest_name);
+
+    (*env)->ReleaseStringUTFChars(env, s1, src_name);
+    (*env)->ReleaseStringUTFChars(env, s2, dest_name);
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/Connection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject conobj = (*env)->NewObject(env, cls, mid, jlong_ptr(con));
+    return conobj;
+}
+
+JNIEXPORT jobject JNICALL Java_Mapper_Monitor_00024Db_connectionsByDevices
+  (JNIEnv *env, jobject obj, jstring s1, jstring s2)
+{
+    mapper_db_connection *cons;
+    mapper_db db = get_db_from_jobject(env, obj);
+    if (!db || !s1 || !s2) return 0;
+
+    const char *src_name = (*env)->GetStringUTFChars(env, s1, 0);
+    const char *dest_name = (*env)->GetStringUTFChars(env, s2, 0);
+    cons = mapper_db_get_connections_by_src_dest_device_names(db, src_name, dest_name);
+
+    (*env)->ReleaseStringUTFChars(env, s1, src_name);
+    (*env)->ReleaseStringUTFChars(env, s2, dest_name);
+
+    jclass cls = (*env)->FindClass(env, "Mapper/Db/ConnectionCollection");
+    if (!cls) return 0;
+
+    jmethodID mid = (*env)->GetMethodID(env, cls, "<init>", "(J)V");
+    jobject consobj = (*env)->NewObject(env, cls, mid, jlong_ptr(cons));
+    return consobj;
+}
+
+/**** Mapper.Db.Connection.Iterator ****/
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_ConnectionIterator_mdb_1deref
+(JNIEnv *env, jobject obj, jlong p)
+{
+    void **ptr = (void**)ptr_jlong(p);
+    return jlong_ptr(*ptr);
+}
+
+JNIEXPORT jlong JNICALL Java_Mapper_Db_ConnectionIterator_mdb_1connection_1next
+(JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection_t **connections = (mapper_db_connection_t**)ptr_jlong(p);
+    return jlong_ptr(mapper_db_connection_next(connections));
+}
+
+JNIEXPORT void JNICALL Java_Mapper_Db_ConnectionIterator_mdb_1connection_1done
+(JNIEnv *env, jobject obj, jlong p)
+{
+    mapper_db_connection_t **connections = (mapper_db_connection_t**)ptr_jlong(p);
+    if (connections)
+        mapper_db_connection_done(connections);
+}
diff --git a/jni/test.java b/jni/test.java
new file mode 100644
index 0000000..42ca7ad
--- /dev/null
+++ b/jni/test.java
@@ -0,0 +1,257 @@
+
+import Mapper.*;
+import Mapper.Device.*;
+import java.util.Arrays;
+import java.util.Iterator;
+
+class test {
+    public static void main(String [] args) {
+        final Device dev = new Device("javatest");
+        final Monitor mon = new Monitor(Mapper.Monitor.SUB_DEVICE_ALL);
+
+        // This is how to ensure the device is freed when the program
+        // exits, even on SIGINT.  The Device must be declared "final".
+        Runtime.getRuntime().addShutdownHook(new Thread()
+            {
+                @Override
+                public void run()
+                    {
+                        dev.free();
+                        mon.free();
+                    }
+            });
+
+        mon.Db.addDeviceCallback(new Mapper.Db.DeviceListener() {
+            public void onEvent(Mapper.Db.Device d, int event) {
+                System.out.println("db onEvent() for device "+d.name());
+            }});
+
+        mon.Db.addSignalCallback(new Mapper.Db.SignalListener() {
+            public void onEvent(Mapper.Db.Signal s, int event) {
+                System.out.println("db onEvent() for signal "+s.name());
+            }});
+
+        mon.Db.addLinkCallback(new Mapper.Db.LinkListener() {
+            public void onEvent(Mapper.Db.Link l, int event) {
+                System.out.println("db onEvent() for link "
+                                   +l.srcName()+" -> "+l.destName());
+            }});
+
+        mon.Db.addConnectionCallback(new Mapper.Db.ConnectionListener() {
+            public void onEvent(Mapper.Db.Connection c, int event) {
+                System.out.println("db onEvent() for connection "
+                                   +c.srcName+" -> "+c.destName+" @expr "
+                                   +c.expression);
+            }});
+
+        Mapper.Device.Signal inp1 = dev.addInput("insig1", 1, 'f', "Hz",
+                                                 new PropertyValue('f', 2.0),
+                                                 null, new InputListener() {
+            public void onInput(Mapper.Device.Signal sig,
+                                int instanceId,
+                                float[] v,
+                                TimeTag tt) {
+                System.out.println(" >> in onInput() for "+sig.name()+": "
+                                   +Arrays.toString(v));
+            }});
+
+        System.out.println("Input signal name: "+inp1.name());
+
+        Signal out1 = dev.addOutput("outsig1", 1, 'i', "Hz",
+                                    new PropertyValue('i', 0.0),
+                                    new PropertyValue('i', 1.0));
+        Signal out2 = dev.addOutput("outsig2", 1, 'f', "Hz",
+                                    new PropertyValue(0.0f),
+                                    new PropertyValue(1.0f));
+
+        System.out.println("Output signal index: "+out1.index());
+        System.out.println("Zeroeth output signal name: "+dev.getOutput(0).name());
+
+        dev.setProperty("width", new PropertyValue(256));
+        dev.setProperty("height", new PropertyValue(12.5));
+        dev.setProperty("depth", new PropertyValue("67"));
+        dev.setProperty("deletethis", new PropertyValue("should not see me"));
+        dev.removeProperty("deletethis");
+
+        out1.setProperty("width", new PropertyValue(new int[] {10, 11, 12}));
+        out1.setProperty("height", new PropertyValue(6.25));
+        out1.setProperty("depth", new PropertyValue(new String[]{"one","two"}));
+        out1.setProperty("deletethis", new PropertyValue("or me"));
+        out1.removeProperty("deletethis");
+        out1.setMinimum(new PropertyValue(12));
+
+        System.out.println("Signal properties:");
+        System.out.println("  Name of out1: " + out1.properties().name());
+
+        System.out.println("  Looking up `height': "
+                           + out1.properties().property("height"));
+        System.out.println("  Looking up `width': "
+                           + out1.properties().property("width"));
+        System.out.println("  Looking up `depth': "
+                           + out1.properties().property("depth"));
+        System.out.println("  Looking up `deletethis': "
+                           + out1.properties().property("deletethis")
+                           + " (should be null)");
+        System.out.println("  Looking up minimum: "
+                           + out1.properties().minimum());
+        System.out.println("  Looking up maximum: "
+                           + out1.properties().maximum());
+
+        System.out.println("Waiting for ready...");
+        while (!dev.ready()) {
+            dev.poll(100);
+        }
+        System.out.println("Device is ready.");
+
+        System.out.println("Device name: "+dev.name());
+        System.out.println("Device port: "+dev.port());
+        System.out.println("Device ordinal: "+dev.ordinal());
+        System.out.println("Device interface: "+dev.iface());
+        System.out.println("Device ip4: "+dev.ip4());
+
+        mon.link(dev.name(), dev.name(), null);
+        while (dev.numLinksIn() <= 0) { dev.poll(100); }
+
+        Mapper.Db.Connection c = new Mapper.Db.Connection();
+        c.mode = Mapper.Db.Connection.MO_EXPRESSION;
+        c.expression = "y=x*100";
+        c.srcMin = new PropertyValue(15);
+        c.srcMax = new PropertyValue(-15);
+        c.destMax = new PropertyValue(1000);
+        c.destMin = new PropertyValue(-2000);
+        mon.connect(dev.name()+out1.name(), dev.name()+inp1.name(), c);
+        while ((dev.numConnectionsIn()) <= 0) { dev.poll(100); }
+
+        int i = 0;
+        double [] ar = new double [] {0};
+        TimeTag tt = new TimeTag(0,0);
+
+        // Signal should report no value before the first update.
+        if (out1.value(ar, tt))
+            System.out.println("Signal has value: " + ar[0]);
+        else
+            System.out.println("Signal has no value.");
+
+        // Just to test vector-valued signal and timetag support,
+        out1.update(new int []{i}, TimeTag.NOW);
+
+        // Test instances
+        out1.setInstanceEventCallback(new InstanceEventListener() {
+                public void onEvent(Mapper.Device.Signal sig,
+                                    int instanceId,
+                                    int event,
+                                    TimeTag tt)
+                    {
+                        System.out.println("Instance "
+                                           + instanceId
+                                           + " event " + event);
+                    }
+            }, InstanceEventListener.IN_ALL);
+
+        System.out.println(inp1.name() + " allocation mode: "
+                           + inp1.instanceAllocationMode());
+        inp1.setInstanceAllocationMode(Device.Signal.IN_STEAL_NEWEST);
+        System.out.println(inp1.name() + " allocation mode: "
+                           + inp1.instanceAllocationMode());
+
+        out1.reserveInstances(new int[]{10, 11, 12});
+        out1.updateInstance(10, new int[]{-8});
+        out1.instanceValue(10, new int[]{0});
+        out1.releaseInstance(10);
+
+        out2.reserveInstances(3);
+        out2.updateInstance(1, new float[]{21.9f});
+        out2.instanceValue(1, new float[]{0});
+        out2.updateInstance(1, new double[]{48.12});
+        out2.instanceValue(1, new double[]{0});
+        out2.releaseInstance(1);
+
+        inp1.reserveInstances(3, new InputListener() {
+                public void onInput(Mapper.Device.Signal sig,
+                                    int instanceId,
+                                    float[] v,
+                                    TimeTag tt) {
+                    System.out.println("in onInput() for "
+                                       +sig.name()+" instance "
+                                       +instanceId+": "
+                                       +Arrays.toString(v));
+                }});
+        System.out.println(inp1.name() + " instance 1 cb is "
+                           + inp1.getInstanceCallback(1));
+        inp1.setInstanceCallback(1, new InputListener() {
+                public void onInput(Mapper.Device.Signal sig,
+                                    int instanceId,
+                                    float[] v,
+                                    TimeTag tt) {
+                    System.out.println("in onInput() for "
+                                       +sig.name()+" instance 1: "
+                                       +Arrays.toString(v));
+                }});
+        System.out.println(inp1.name() + " instance 1 cb is "
+                           + inp1.getInstanceCallback(1));
+        inp1.setInstanceCallback(1, null);
+        System.out.println(inp1.name() + " instance 1 cb is "
+                           + inp1.getInstanceCallback(1));
+
+        while (i <= 100) {
+            System.out.print("Updated value to: " + i);
+            out1.update(i);
+
+            // Note, we are testing an implicit cast from int to float
+            // here because we are passing a double[] into
+            // out1.value().
+            if (out1.value(ar, tt))
+                System.out.print("  Signal has value: " + ar[0]);
+            else
+                System.out.print("  Signal has no value.");
+
+            if (i == 50) {
+                Mapper.Db.Connection mod = new Mapper.Db.Connection();
+                mod.expression = "y=x*-100";
+                System.out.println("Should be connecting "+dev.name()+out1.name()+" -> "+dev.name()+inp1.name());
+                mon.modifyConnection(dev.name()+out1.name(),
+                                     dev.name()+inp1.name(),
+                                     mod);
+            }
+
+            dev.poll(50);
+            mon.poll(50);
+            i++;
+        }
+
+        // check monitor.db records
+        System.out.println("Db records:");
+
+        Iterator<Mapper.Db.Device> devs = mon.Db.devices().iterator();
+        while (devs.hasNext()) {
+            System.out.println("  device: " + devs.next().name());
+        }
+
+        // another iterator style
+        Mapper.Db.SignalCollection ins = mon.Db.inputs();
+        for (Mapper.Db.Signal s : ins) {
+            System.out.println("  signal: " + s.name());
+        }
+
+        Mapper.Db.LinkCollection links = mon.Db.links();
+        for (Mapper.Db.Link l : links) {
+            System.out.println("  link: "+ l.srcName() + " -> " + l.destName());
+        }
+
+        Mapper.Db.ConnectionCollection cons = mon.Db.connections();
+        for (Mapper.Db.Connection cc : cons) {
+            System.out.println("  connection: "+ cc.srcName + " -> " + cc.destName);
+        }
+
+        System.out.println();
+        System.out.println("Number of connections from "
+                           + out1.name() + ": " + out1.numConnections());
+
+        System.out.println(inp1.name() + " oldest instance is "
+                           + inp1.oldestActiveInstance());
+        System.out.println(inp1.name() + " newest instance is "
+                           + inp1.newestActiveInstance());
+
+        dev.free();
+    }
+}
diff --git a/jni/testquery.java b/jni/testquery.java
new file mode 100644
index 0000000..798b966
--- /dev/null
+++ b/jni/testquery.java
@@ -0,0 +1,71 @@
+
+import Mapper.*;
+import Mapper.Device.*;
+import java.util.Arrays;
+
+class testquery {
+    public static void main(String [] args) {
+        final Device dev = new Device("javatestquery");
+        final Monitor mon = new Monitor();
+
+        // This is how to ensure the device is freed when the program
+        // exits, even on SIGINT.  The Device must be declared "final".
+        Runtime.getRuntime().addShutdownHook(new Thread()
+            {
+                @Override
+                public void run()
+                    {
+                        dev.free();
+                        mon.free();
+                    }
+            });
+
+        Mapper.Device.Signal inp1 = dev.addInput("insig1", 1, 'f', "Hz", null,
+                                                 null, new InputListener() {
+            public void onInput(Mapper.Device.Signal sig,
+                                int instanceId,
+                                float[] v,
+                                TimeTag tt) {
+                    System.out.println("in onInput(): "+Arrays.toString(v));
+                }});
+
+        Signal out1 = dev.addOutput("outsig1", 1, 'i', "Hz", null, null);
+        out1.setCallback(
+            new InputListener() {
+            public void onInput(Mapper.Device.Signal sig,
+                                int instanceId,
+                                int[] v,
+                                TimeTag tt) {
+                    System.out.println("  >> in onQueryResponse(): "+Arrays.toString(v));
+                }});
+
+        System.out.println("Waiting for ready...");
+        while (!dev.ready()) {
+            dev.poll(100);
+        }
+        System.out.println("Device is ready.");
+
+        System.out.println("Device name: "+dev.name());
+        System.out.println("Device port: "+dev.port());
+        System.out.println("Device ordinal: "+dev.ordinal());
+        System.out.println("Device interface: "+dev.iface());
+        System.out.println("Device ip4: "+dev.ip4());
+
+        mon.link(dev.name(), dev.name(), null);
+        while (dev.numLinksIn() <= 0) { dev.poll(100); }
+
+        mon.connect(dev.name()+out1.name(), dev.name()+inp1.name(), null);
+        while ((dev.numConnectionsIn()) <= 0) { dev.poll(100); }
+
+        int i = 100;
+        while (i >= 0) {
+            inp1.update(new float[] {i});
+            System.out.println("\nUpdating input value to [" + i + "]");
+            System.out.println("  Querying...");
+            out1.queryRemotes();
+            dev.poll(100);
+            --i;
+        }
+        dev.free();
+    }
+}
diff --git a/jni/testreverse.java b/jni/testreverse.java
new file mode 100644
index 0000000..3878869
--- /dev/null
+++ b/jni/testreverse.java
@@ -0,0 +1,71 @@
+
+import Mapper.*;
+import Mapper.Device.*;
+import java.util.Arrays;
+
+class testreverse {
+    public static void main(String [] args) {
+        final Device dev = new Device("javatestreverse");
+        final Monitor mon = new Monitor();
+
+        // This is how to ensure the device is freed when the program
+        // exits, even on SIGINT.  The Device must be declared "final".
+        Runtime.getRuntime().addShutdownHook(new Thread()
+            {
+                @Override
+                public void run()
+                    {
+                        dev.free();
+                        mon.free();
+                    }
+            });
+
+        Mapper.Device.Signal inp1 = dev.addInput("insig1", 1, 'f', "Hz", null,
+                                                 null, new InputListener() {
+                public void onInput(Mapper.Device.Signal sig,
+                                    int instanceId,
+                                    float[] v,
+                                    TimeTag tt) {
+                    System.out.println("in onInput(): "+Arrays.toString(v));
+                }});
+
+        Signal out1 = dev.addOutput("outsig1", 1, 'i', "Hz", null, null);
+        out1.setCallback(
+            new InputListener() {
+                public void onInput(Mapper.Device.Signal sig,
+                                    int instanceId,
+                                    int[] v,
+                                    TimeTag tt) {
+                    System.out.println("  >> in onInput(): "+Arrays.toString(v));
+                }});
+
+        System.out.println("Waiting for ready...");
+        while (!dev.ready()) {
+            dev.poll(100);
+        }
+        System.out.println("Device is ready.");
+
+        System.out.println("Device name: "+dev.name());
+        System.out.println("Device port: "+dev.port());
+        System.out.println("Device ordinal: "+dev.ordinal());
+        System.out.println("Device interface: "+dev.iface());
+        System.out.println("Device ip4: "+dev.ip4());
+
+        mon.link(dev.name(), dev.name(), null);
+        while (dev.numLinksIn() <= 0) { dev.poll(100); }
+
+        Mapper.Db.Connection c = new Mapper.Db.Connection();
+        c.mode = Mapper.Db.Connection.MO_REVERSE;
+        mon.connect(dev.name()+out1.name(), dev.name()+inp1.name(), c);
+        while ((dev.numConnectionsIn()) <= 0) { dev.poll(100); }
+
+        int i = 100;
+        while (i >= 0) {
+            System.out.println("\nUpdating input to ["+i+"]");
+            inp1.update(new int[] {i});
+            dev.poll(100);
+            --i;
+        }
+        dev.free();
+    }
+}
diff --git a/jni/testspeed.java b/jni/testspeed.java
new file mode 100644
index 0000000..67c9ac1
--- /dev/null
+++ b/jni/testspeed.java
@@ -0,0 +1,68 @@
+
+import Mapper.*;
+import Mapper.Device.*;
+import java.util.Arrays;
+
+class testspeed {
+    public static boolean updated = true;
+
+    public static void main(String [] args) {
+        final Device dev = new Device("javatest");
+        final Monitor mon = new Monitor(Mapper.Monitor.SUB_DEVICE_ALL);
+
+        // This is how to ensure the device is freed when the program
+        // exits, even on SIGINT.  The Device must be declared "final".
+        Runtime.getRuntime().addShutdownHook(new Thread()
+            {
+                @Override
+                public void run()
+                    {
+                        dev.free();
+                        mon.free();
+                    }
+            });
+
+        InputListener h = new InputListener() {
+            public void onInput(Mapper.Device.Signal sig,
+                                int instanceId,
+                                float[] v,
+                                TimeTag tt) {
+                testspeed.updated = true;
+            }
+        };
+
+        Mapper.Device.Signal in = dev.addInput("insig", 1, 'f', "Hz", null,
+                                               null, h);
+
+        Signal out = dev.addOutput("outsig", 1, 'i', "Hz", null, null);
+
+        System.out.println("Waiting for ready...");
+        while (!dev.ready()) {
+            dev.poll(100);
+        }
+        System.out.println("Device is ready.");
+
+        mon.link(dev.name(), dev.name(), null);
+        while (dev.numLinksIn() <= 0) { dev.poll(100); }
+
+        Mapper.Db.Connection c = new Mapper.Db.Connection();
+        mon.connect(dev.name()+out.name(), dev.name()+in.name(), null);
+        while ((dev.numConnectionsIn()) <= 0) { dev.poll(100); }
+
+        mon.free();
+
+        double then = dev.now().getDouble();
+        int i = 0;
+        while (i < 10000) {
+            if (testspeed.updated) {
+                out.update(i);
+                i++;
+                testspeed.updated = false;
+            }
+            dev.poll(1);
+        }
+        double elapsed = dev.now().getDouble() - then;
+        System.out.println("Sent "+i+" messages in "+elapsed+" seconds.");
+        dev.free();
+    }
+}
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..7a545bb
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,805 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(srcdir)/config.h.in $(top_srcdir)/depcomp $(noinst_HEADERS)
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(libdir)"
+LTLIBRARIES = $(lib_LTLIBRARIES)
+am__DEPENDENCIES_1 =
+libmapper_ at MAJOR_VERSION@_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
+am_libmapper_ at MAJOR_VERSION@_la_OBJECTS =  \
+	libmapper_ at MAJOR_VERSION@_la-expression.lo \
+	libmapper_ at MAJOR_VERSION@_la-device.lo \
+	libmapper_ at MAJOR_VERSION@_la-admin.lo \
+	libmapper_ at MAJOR_VERSION@_la-signal.lo \
+	libmapper_ at MAJOR_VERSION@_la-receiver.lo \
+	libmapper_ at MAJOR_VERSION@_la-router.lo \
+	libmapper_ at MAJOR_VERSION@_la-connection.lo \
+	libmapper_ at MAJOR_VERSION@_la-db.lo \
+	libmapper_ at MAJOR_VERSION@_la-params.lo \
+	libmapper_ at MAJOR_VERSION@_la-monitor.lo \
+	libmapper_ at MAJOR_VERSION@_la-table.lo \
+	libmapper_ at MAJOR_VERSION@_la-time.lo
+libmapper_ at MAJOR_VERSION@_la_OBJECTS =  \
+	$(am_libmapper_ at MAJOR_VERSION@_la_OBJECTS)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+libmapper_ at MAJOR_VERSION@_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) \
+	$(libmapper_ at MAJOR_VERSION@_la_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+SOURCES = $(libmapper_ at MAJOR_VERSION@_la_SOURCES)
+DIST_SOURCES = $(libmapper_ at MAJOR_VERSION@_la_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+HEADERS = $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
+	$(LISP)config.h.in
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+noinst_HEADERS = mapper_internal.h types_internal.h
+EXTRA_DIST = libmapper.def
+ at WINDOWS_DLL_TRUE@lt_windows = -no-undefined -export-symbols libmapper.def
+lib_LTLIBRARIES = libmapper- at MAJOR_VERSION@.la
+libmapper_ at MAJOR_VERSION@_la_CFLAGS = -Wall -I$(top_srcdir)/include $(liblo_CFLAGS)
+libmapper_ at MAJOR_VERSION@_la_SOURCES = expression.c device.c admin.c signal.c \
+    receiver.c router.c connection.c db.c params.c monitor.c table.c time.c
+
+libmapper_ at MAJOR_VERSION@_la_LIBADD = $(liblo_LIBS)
+libmapper_ at MAJOR_VERSION@_la_LDFLAGS = $(lt_windows) -export-dynamic -version-info @SO_VERSION@
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+config.h: stamp-h1
+	@test -f $@ || rm -f stamp-h1
+	@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status src/config.h
+$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
+	($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+
+install-libLTLIBRARIES: $(lib_LTLIBRARIES)
+	@$(NORMAL_INSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	list2=; for p in $$list; do \
+	  if test -f $$p; then \
+	    list2="$$list2 $$p"; \
+	  else :; fi; \
+	done; \
+	test -z "$$list2" || { \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
+	}
+
+uninstall-libLTLIBRARIES:
+	@$(NORMAL_UNINSTALL)
+	@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
+	for p in $$list; do \
+	  $(am__strip_dir) \
+	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
+	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
+	done
+
+clean-libLTLIBRARIES:
+	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
+	@list='$(lib_LTLIBRARIES)'; \
+	locs=`for p in $$list; do echo $$p; done | \
+	      sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
+	      sort -u`; \
+	test -z "$$locs" || { \
+	  echo rm -f $${locs}; \
+	  rm -f $${locs}; \
+	}
+
+libmapper- at MAJOR_VERSION@.la: $(libmapper_ at MAJOR_VERSION@_la_OBJECTS) $(libmapper_ at MAJOR_VERSION@_la_DEPENDENCIES) $(EXTRA_libmapper_ at MAJOR_VERSION@_la_DEPENDENCIES) 
+	$(AM_V_CCLD)$(libmapper_ at MAJOR_VERSION@_la_LINK) -rpath $(libdir) $(libmapper_ at MAJOR_VERSION@_la_OBJECTS) $(libmapper_ at MAJOR_VERSION@_la_LIBADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-admin.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-connection.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-db.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-device.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-expression.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-monitor.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-params.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-receiver.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-router.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-signal.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-table.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-time.Plo at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+libmapper_ at MAJOR_VERSION@_la-expression.lo: expression.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-expression.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-expression.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-expression.lo `test -f 'expression.c' || echo '$(srcdir)/'`expression.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-expression.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-expression.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='expression.c' object='libmapper_ at MAJOR_VERSION@_la-expression.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-expression.lo `test -f 'expression.c' || echo '$(srcdir)/'`expression.c
+
+libmapper_ at MAJOR_VERSION@_la-device.lo: device.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-device.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-device.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-device.lo `test -f 'device.c' || echo '$(srcdir)/'`device.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-device.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-device.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='device.c' object='libmapper_ at MAJOR_VERSION@_la-device.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-device.lo `test -f 'device.c' || echo '$(srcdir)/'`device.c
+
+libmapper_ at MAJOR_VERSION@_la-admin.lo: admin.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-admin.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-admin.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-admin.lo `test -f 'admin.c' || echo '$(srcdir)/'`admin.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-admin.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-admin.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='admin.c' object='libmapper_ at MAJOR_VERSION@_la-admin.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-admin.lo `test -f 'admin.c' || echo '$(srcdir)/'`admin.c
+
+libmapper_ at MAJOR_VERSION@_la-signal.lo: signal.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-signal.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-signal.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-signal.lo `test -f 'signal.c' || echo '$(srcdir)/'`signal.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-signal.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-signal.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='signal.c' object='libmapper_ at MAJOR_VERSION@_la-signal.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-signal.lo `test -f 'signal.c' || echo '$(srcdir)/'`signal.c
+
+libmapper_ at MAJOR_VERSION@_la-receiver.lo: receiver.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-receiver.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-receiver.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-receiver.lo `test -f 'receiver.c' || echo '$(srcdir)/'`receiver.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-receiver.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-receiver.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='receiver.c' object='libmapper_ at MAJOR_VERSION@_la-receiver.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-receiver.lo `test -f 'receiver.c' || echo '$(srcdir)/'`receiver.c
+
+libmapper_ at MAJOR_VERSION@_la-router.lo: router.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-router.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-router.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-router.lo `test -f 'router.c' || echo '$(srcdir)/'`router.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-router.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-router.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='router.c' object='libmapper_ at MAJOR_VERSION@_la-router.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-router.lo `test -f 'router.c' || echo '$(srcdir)/'`router.c
+
+libmapper_ at MAJOR_VERSION@_la-connection.lo: connection.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-connection.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-connection.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-connection.lo `test -f 'connection.c' || echo '$(srcdir)/'`connection.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-connection.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-connection.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='connection.c' object='libmapper_ at MAJOR_VERSION@_la-connection.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-connection.lo `test -f 'connection.c' || echo '$(srcdir)/'`connection.c
+
+libmapper_ at MAJOR_VERSION@_la-db.lo: db.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-db.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-db.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-db.lo `test -f 'db.c' || echo '$(srcdir)/'`db.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-db.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-db.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='db.c' object='libmapper_ at MAJOR_VERSION@_la-db.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-db.lo `test -f 'db.c' || echo '$(srcdir)/'`db.c
+
+libmapper_ at MAJOR_VERSION@_la-params.lo: params.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-params.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-params.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-params.lo `test -f 'params.c' || echo '$(srcdir)/'`params.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-params.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-params.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='params.c' object='libmapper_ at MAJOR_VERSION@_la-params.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-params.lo `test -f 'params.c' || echo '$(srcdir)/'`params.c
+
+libmapper_ at MAJOR_VERSION@_la-monitor.lo: monitor.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-monitor.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-monitor.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-monitor.lo `test -f 'monitor.c' || echo '$(srcdir)/'`monitor.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-monitor.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-monitor.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='monitor.c' object='libmapper_ at MAJOR_VERSION@_la-monitor.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-monitor.lo `test -f 'monitor.c' || echo '$(srcdir)/'`monitor.c
+
+libmapper_ at MAJOR_VERSION@_la-table.lo: table.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-table.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-table.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-table.lo `test -f 'table.c' || echo '$(srcdir)/'`table.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-table.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-table.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='table.c' object='libmapper_ at MAJOR_VERSION@_la-table.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-table.lo `test -f 'table.c' || echo '$(srcdir)/'`table.c
+
+libmapper_ at MAJOR_VERSION@_la-time.lo: time.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -MT libmapper_ at MAJOR_VERSION@_la-time.lo -MD -MP -MF $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-time.Tpo -c -o libmapper_ at MAJOR_VERSION@_la-time.lo `test -f 'time.c' || echo '$(srcdir)/'`time.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-time.Tpo $(DEPDIR)/libmapper_ at MAJOR_VERSION@_la-time.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='time.c' object='libmapper_ at MAJOR_VERSION@_la-time.lo' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libmapper_ at MAJOR_VERSION@_la_CFLAGS) $(CFLAGS) -c -o libmapper_ at MAJOR_VERSION@_la-time.lo `test -f 'time.c' || echo '$(srcdir)/'`time.c
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h
+installdirs:
+	for dir in "$(DESTDIR)$(libdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-hdr distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-libLTLIBRARIES
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-libLTLIBRARIES
+
+.MAKE: all install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-hdr distclean-libtool distclean-tags distdir dvi \
+	dvi-am html html-am info info-am install install-am \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-libLTLIBRARIES \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-libLTLIBRARIES
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/swig/Makefile.in b/swig/Makefile.in
new file mode 100644
index 0000000..d36ef7a
--- /dev/null
+++ b/swig/Makefile.in
@@ -0,0 +1,496 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = swig
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(srcdir)/setup.py.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES = setup.py
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+_CXX = $(filter-out ccache,$(CXX))
+MOSTLYCLEANFILES = _mapper.$(PYEXT) mapper.py mapper_wrap.c installed_files.log
+EXTRA_DIST = mapper.i tkgui.py copywhich.sh
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign swig/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign swig/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+setup.py: $(top_builddir)/config.status $(srcdir)/setup.py.in
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile all-local
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-local mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+	@$(NORMAL_INSTALL)
+	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+.MAKE: install-am install-exec-am install-strip uninstall-am
+
+.PHONY: all all-am all-local check check-am clean clean-generic \
+	clean-libtool clean-local cscopelist-am ctags-am distclean \
+	distclean-generic distclean-libtool distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-exec-hook install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am uninstall-hook
+
+
+all-local: _mapper.$(PYEXT)
+
+$(builddir)/%_wrap.c %.py: %.i
+	$(SWIG) -I$(top_srcdir)/include -python -o $(builddir)/mapper_wrap.c \
+		$(srcdir)/mapper.i
+
+# Don't interfere with distutils CFLAGS
+_%.$(PYEXT): $(builddir)/%_wrap.c
+	env CFLAGS="" CXX="$(_CXX)" python setup.py build_ext
+	cp -v `./copywhich.sh $@` .
+
+clean-local:
+	- at rm -vf mapper.py mapper_wrap.c
+	python setup.py clean --all
+
+install-exec-hook: $(builddir)/mapper_wrap.c
+	if test -n "$(DESTDIR)"; then\
+		python setup.py install --root=$(DESTDIR) --prefix=$(prefix) --record=@top_builddir@/swig/installed_files.log; \
+	else \
+		python setup.py install --prefix=$(prefix) --record=@top_builddir@/swig/installed_files.log; \
+	fi
+
+uninstall-hook:
+	cat @top_builddir@/swig/installed_files.log \
+	  | awk '{print "$(DESTDIR)"$$1}' | xargs rm -vf
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/test/Makefile.in b/test/Makefile.in
new file mode 100644
index 0000000..d8efdc8
--- /dev/null
+++ b/test/Makefile.in
@@ -0,0 +1,1362 @@
+# Makefile.in generated by automake 1.14.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+noinst_PROGRAMS = test$(EXEEXT) testadmin$(EXEEXT) testcpp$(EXEEXT) \
+	testcustomtransport$(EXEEXT) testdb$(EXEEXT) \
+	testexpression$(EXEEXT) testinstance$(EXEEXT) \
+	testlinear$(EXEEXT) testmany$(EXEEXT) testmonitor$(EXEEXT) \
+	testparams$(EXEEXT) testparser$(EXEEXT) testprops$(EXEEXT) \
+	testqueue$(EXEEXT) testquery$(EXEEXT) testrate$(EXEEXT) \
+	testrecv$(EXEEXT) testreverse$(EXEEXT) testselect$(EXEEXT) \
+	testsend$(EXEEXT) testsignals$(EXEEXT) testspeed$(EXEEXT) \
+	testsync$(EXEEXT) testvector$(EXEEXT)
+subdir = test
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+	$(top_srcdir)/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \
+	$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltoptions.m4 \
+	$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
+	$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/pkg.m4 \
+	$(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_test_OBJECTS = test-test.$(OBJEXT)
+test_OBJECTS = $(am_test_OBJECTS)
+am__DEPENDENCIES_1 =
+ at WINDOWS_DLL_FALSE@am__DEPENDENCIES_2 = $(top_builddir)/src/libmapper- at MAJOR_VERSION@.la \
+ at WINDOWS_DLL_FALSE@	$(am__DEPENDENCIES_1)
+ at WINDOWS_DLL_TRUE@am__DEPENDENCIES_2 = $(top_builddir)/src/*.lo \
+ at WINDOWS_DLL_TRUE@	$(am__DEPENDENCIES_1)
+test_DEPENDENCIES = $(am__DEPENDENCIES_2)
+AM_V_lt = $(am__v_lt_ at AM_V@)
+am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testadmin_OBJECTS = testadmin-testadmin.$(OBJEXT)
+testadmin_OBJECTS = $(am_testadmin_OBJECTS)
+testadmin_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testadmin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testadmin_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testcpp_OBJECTS = testcpp-testcpp.$(OBJEXT)
+testcpp_OBJECTS = $(am_testcpp_OBJECTS)
+testcpp_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testcpp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(testcpp_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testcustomtransport_OBJECTS =  \
+	testcustomtransport-testcustomtransport.$(OBJEXT)
+testcustomtransport_OBJECTS = $(am_testcustomtransport_OBJECTS)
+testcustomtransport_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testcustomtransport_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(testcustomtransport_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_testdb_OBJECTS = testdb-testdb.$(OBJEXT)
+testdb_OBJECTS = $(am_testdb_OBJECTS)
+testdb_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testdb_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testdb_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testexpression_OBJECTS = testexpression-testexpression.$(OBJEXT)
+testexpression_OBJECTS = $(am_testexpression_OBJECTS)
+testexpression_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testexpression_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+	$(testexpression_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
+	$@
+am_testinstance_OBJECTS = testinstance-testinstance.$(OBJEXT)
+testinstance_OBJECTS = $(am_testinstance_OBJECTS)
+testinstance_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testinstance_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testinstance_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testlinear_OBJECTS = testlinear-testlinear.$(OBJEXT)
+testlinear_OBJECTS = $(am_testlinear_OBJECTS)
+testlinear_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testlinear_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testlinear_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testmany_OBJECTS = testmany-testmany.$(OBJEXT)
+testmany_OBJECTS = $(am_testmany_OBJECTS)
+testmany_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testmany_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testmany_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testmonitor_OBJECTS = testmonitor-testmonitor.$(OBJEXT)
+testmonitor_OBJECTS = $(am_testmonitor_OBJECTS)
+testmonitor_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testmonitor_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testmonitor_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testparams_OBJECTS = testparams-testparams.$(OBJEXT)
+testparams_OBJECTS = $(am_testparams_OBJECTS)
+testparams_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testparams_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testparams_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testparser_OBJECTS = testparser-testparser.$(OBJEXT)
+testparser_OBJECTS = $(am_testparser_OBJECTS)
+testparser_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testparser_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testparser_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testprops_OBJECTS = testprops-testprops.$(OBJEXT)
+testprops_OBJECTS = $(am_testprops_OBJECTS)
+testprops_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testprops_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testprops_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testquery_OBJECTS = testquery-testquery.$(OBJEXT)
+testquery_OBJECTS = $(am_testquery_OBJECTS)
+testquery_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testquery_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testquery_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testqueue_OBJECTS = testqueue-testqueue.$(OBJEXT)
+testqueue_OBJECTS = $(am_testqueue_OBJECTS)
+testqueue_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testqueue_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testqueue_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testrate_OBJECTS = testrate-testrate.$(OBJEXT)
+testrate_OBJECTS = $(am_testrate_OBJECTS)
+testrate_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testrate_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testrate_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testrecv_OBJECTS = testrecv-testrecv.$(OBJEXT)
+testrecv_OBJECTS = $(am_testrecv_OBJECTS)
+testrecv_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testrecv_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testrecv_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testreverse_OBJECTS = testreverse-testreverse.$(OBJEXT)
+testreverse_OBJECTS = $(am_testreverse_OBJECTS)
+testreverse_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testreverse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testreverse_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testselect_OBJECTS = testselect-testselect.$(OBJEXT)
+testselect_OBJECTS = $(am_testselect_OBJECTS)
+testselect_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testselect_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testselect_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testsend_OBJECTS = testsend-testsend.$(OBJEXT)
+testsend_OBJECTS = $(am_testsend_OBJECTS)
+testsend_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testsend_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testsend_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testsignals_OBJECTS = testsignals-testsignals.$(OBJEXT)
+testsignals_OBJECTS = $(am_testsignals_OBJECTS)
+testsignals_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testsignals_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testsignals_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testspeed_OBJECTS = testspeed-testspeed.$(OBJEXT)
+testspeed_OBJECTS = $(am_testspeed_OBJECTS)
+testspeed_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testspeed_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testspeed_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testsync_OBJECTS = testsync-testsync.$(OBJEXT)
+testsync_OBJECTS = $(am_testsync_OBJECTS)
+testsync_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testsync_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testsync_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_testvector_OBJECTS = testvector-testvector.$(OBJEXT)
+testvector_OBJECTS = $(am_testvector_OBJECTS)
+testvector_DEPENDENCIES = $(am__DEPENDENCIES_2)
+testvector_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(testvector_CFLAGS) \
+	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_P = $(am__v_P_ at AM_V@)
+am__v_P_ = $(am__v_P_ at AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_ at AM_V@)
+am__v_GEN_ = $(am__v_GEN_ at AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_ at AM_V@)
+am__v_at_ = $(am__v_at_ at AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_ at AM_V@)
+am__v_CC_ = $(am__v_CC_ at AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+	$(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_ at AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_ at AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
+	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+	$(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_ at AM_V@)
+am__v_CXX_ = $(am__v_CXX_ at AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
+	$(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
+	$(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CXXLD = $(am__v_CXXLD_ at AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_ at AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+SOURCES = $(test_SOURCES) $(testadmin_SOURCES) $(testcpp_SOURCES) \
+	$(testcustomtransport_SOURCES) $(testdb_SOURCES) \
+	$(testexpression_SOURCES) $(testinstance_SOURCES) \
+	$(testlinear_SOURCES) $(testmany_SOURCES) \
+	$(testmonitor_SOURCES) $(testparams_SOURCES) \
+	$(testparser_SOURCES) $(testprops_SOURCES) \
+	$(testquery_SOURCES) $(testqueue_SOURCES) $(testrate_SOURCES) \
+	$(testrecv_SOURCES) $(testreverse_SOURCES) \
+	$(testselect_SOURCES) $(testsend_SOURCES) \
+	$(testsignals_SOURCES) $(testspeed_SOURCES) \
+	$(testsync_SOURCES) $(testvector_SOURCES)
+DIST_SOURCES = $(test_SOURCES) $(testadmin_SOURCES) $(testcpp_SOURCES) \
+	$(testcustomtransport_SOURCES) $(testdb_SOURCES) \
+	$(testexpression_SOURCES) $(testinstance_SOURCES) \
+	$(testlinear_SOURCES) $(testmany_SOURCES) \
+	$(testmonitor_SOURCES) $(testparams_SOURCES) \
+	$(testparser_SOURCES) $(testprops_SOURCES) \
+	$(testquery_SOURCES) $(testqueue_SOURCES) $(testrate_SOURCES) \
+	$(testrecv_SOURCES) $(testreverse_SOURCES) \
+	$(testselect_SOURCES) $(testsend_SOURCES) \
+	$(testsignals_SOURCES) $(testspeed_SOURCES) \
+	$(testsync_SOURCES) $(testvector_SOURCES)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AS = @AS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DOXYGEN = @DOXYGEN@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+JAR = @JAR@
+JAVAC = @JAVAC@
+JAVAH = @JAVAH@
+JNI = @JNI@
+JNIPATH = @JNIPATH@
+LD = @LD@
+LDFLAGS = @LDFLAGS@
+LIBLO = @LIBLO@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAJOR_VERSION = @MAJOR_VERSION@
+MAKEINFO = @MAKEINFO@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+PTHREAD_CC = @PTHREAD_CC@
+PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+PYEXT = @PYEXT@
+PYTHON = @PYTHON@
+PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
+PYTHON_PLATFORM = @PYTHON_PLATFORM@
+PYTHON_PREFIX = @PYTHON_PREFIX@
+PYTHON_VERSION = @PYTHON_VERSION@
+RANLIB = @RANLIB@
+RTAUDIO_CFLAGS = @RTAUDIO_CFLAGS@
+RTAUDIO_LIBS = @RTAUDIO_LIBS@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SO_VERSION = @SO_VERSION@
+STRIP = @STRIP@
+SWIG = @SWIG@
+SWIGDIR = @SWIGDIR@
+VERSION = @VERSION@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+ax_pthread_config = @ax_pthread_config@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+liblo_CFLAGS = @liblo_CFLAGS@
+liblo_LIBS = @liblo_LIBS@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pkgpyexecdir = @pkgpyexecdir@
+pkgpythondir = @pkgpythondir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+pyexecdir = @pyexecdir@
+pythondir = @pythondir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+TEST_CFLAGS = -Wall -I$(top_srcdir)/include @liblo_CFLAGS@
+TEST_CXXFLAGS = -Wall -I$(top_srcdir)/include @liblo_CFLAGS@
+ at WINDOWS_DLL_FALSE@TEST_LDADD = $(top_builddir)/src/libmapper- at MAJOR_VERSION@.la $(liblo_LIBS)
+ at WINDOWS_DLL_TRUE@TEST_LDADD = $(top_builddir)/src/*.lo $(liblo_LIBS)
+test_all_ordered = testparams testprops testdb testparser testadmin testmany \
+                   testsend testrecv test testlinear testexpression testqueue \
+                   testquery testrate testinstance testreverse testselect \
+                   testvector testcustomtransport testspeed testsync testcpp
+
+test_CFLAGS = $(TEST_CFLAGS)
+test_SOURCES = test.c
+test_LDADD = $(TEST_LDADD)
+testadmin_CFLAGS = $(TEST_CFLAGS)
+testadmin_SOURCES = testadmin.c
+testadmin_LDADD = $(TEST_LDADD)
+testcpp_CXXFLAGS = $(TEST_CXXFLAGS)
+testcpp_SOURCES = testcpp.cpp
+testcpp_LDADD = $(TEST_LDADD)
+testcustomtransport_CFLAGS = $(TEST_CFLAGS)
+testcustomtransport_SOURCES = testcustomtransport.c
+testcustomtransport_LDADD = $(TEST_LDADD)
+testdb_CFLAGS = $(TEST_CFLAGS)
+testdb_SOURCES = testdb.c
+testdb_LDADD = $(TEST_LDADD)
+testexpression_CFLAGS = $(TEST_CFLAGS)
+testexpression_SOURCES = testexpression.c
+testexpression_LDADD = $(TEST_LDADD)
+testinstance_CFLAGS = $(TEST_CFLAGS)
+testinstance_SOURCES = testinstance.c
+testinstance_LDADD = $(TEST_LDADD)
+testlinear_CFLAGS = $(TEST_CFLAGS)
+testlinear_SOURCES = testlinear.c
+testlinear_LDADD = $(TEST_LDADD)
+testmany_CFLAGS = $(TEST_CFLAGS)
+testmany_SOURCES = testmany.c
+testmany_LDADD = $(TEST_LDADD)
+testmonitor_CFLAGS = $(TEST_CFLAGS)
+testmonitor_SOURCES = testmonitor.c
+testmonitor_LDADD = $(TEST_LDADD)
+testparams_CFLAGS = $(TEST_CFLAGS)
+testparams_SOURCES = testparams.c
+testparams_LDADD = $(TEST_LDADD)
+testparser_CFLAGS = $(TEST_CFLAGS)
+testparser_SOURCES = testparser.c
+testparser_LDADD = $(TEST_LDADD)
+testprops_CFLAGS = $(TEST_CFLAGS)
+testprops_SOURCES = testprops.c
+testprops_LDADD = $(TEST_LDADD)
+testqueue_CFLAGS = $(TEST_CFLAGS)
+testqueue_SOURCES = testqueue.c
+testqueue_LDADD = $(TEST_LDADD)
+testquery_CFLAGS = $(TEST_CFLAGS)
+testquery_SOURCES = testquery.c
+testquery_LDADD = $(TEST_LDADD)
+testrate_CFLAGS = $(TEST_CFLAGS)
+testrate_SOURCES = testrate.c
+testrate_LDADD = $(TEST_LDADD)
+testrecv_CFLAGS = $(TEST_CFLAGS)
+testrecv_SOURCES = testrecv.c
+testrecv_LDADD = $(TEST_LDADD)
+testreverse_CFLAGS = $(TEST_CFLAGS)
+testreverse_SOURCES = testreverse.c
+testreverse_LDADD = $(TEST_LDADD)
+testselect_CFLAGS = $(TEST_CFLAGS)
+testselect_SOURCES = testselect.c
+testselect_LDADD = $(TEST_LDADD)
+testsend_CFLAGS = $(TEST_CFLAGS)
+testsend_SOURCES = testsend.c
+testsend_LDADD = $(TEST_LDADD)
+testsignals_CFLAGS = $(TEST_CFLAGS)
+testsignals_SOURCES = testsignals.c
+testsignals_LDADD = $(TEST_LDADD)
+testspeed_CFLAGS = $(TEST_CFLAGS)
+testspeed_SOURCES = testspeed.c
+testspeed_LDADD = $(TEST_LDADD)
+testsync_CFLAGS = $(TEST_CFLAGS)
+testsync_SOURCES = testsync.c
+testsync_LDADD = $(TEST_LDADD)
+testvector_CFLAGS = $(TEST_CFLAGS)
+testvector_SOURCES = testvector.c
+testvector_LDADD = $(TEST_LDADD)
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .cpp .lo .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign test/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign test/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
+test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) $(EXTRA_test_DEPENDENCIES) 
+	@rm -f test$(EXEEXT)
+	$(AM_V_CCLD)$(test_LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS)
+
+testadmin$(EXEEXT): $(testadmin_OBJECTS) $(testadmin_DEPENDENCIES) $(EXTRA_testadmin_DEPENDENCIES) 
+	@rm -f testadmin$(EXEEXT)
+	$(AM_V_CCLD)$(testadmin_LINK) $(testadmin_OBJECTS) $(testadmin_LDADD) $(LIBS)
+
+testcpp$(EXEEXT): $(testcpp_OBJECTS) $(testcpp_DEPENDENCIES) $(EXTRA_testcpp_DEPENDENCIES) 
+	@rm -f testcpp$(EXEEXT)
+	$(AM_V_CXXLD)$(testcpp_LINK) $(testcpp_OBJECTS) $(testcpp_LDADD) $(LIBS)
+
+testcustomtransport$(EXEEXT): $(testcustomtransport_OBJECTS) $(testcustomtransport_DEPENDENCIES) $(EXTRA_testcustomtransport_DEPENDENCIES) 
+	@rm -f testcustomtransport$(EXEEXT)
+	$(AM_V_CCLD)$(testcustomtransport_LINK) $(testcustomtransport_OBJECTS) $(testcustomtransport_LDADD) $(LIBS)
+
+testdb$(EXEEXT): $(testdb_OBJECTS) $(testdb_DEPENDENCIES) $(EXTRA_testdb_DEPENDENCIES) 
+	@rm -f testdb$(EXEEXT)
+	$(AM_V_CCLD)$(testdb_LINK) $(testdb_OBJECTS) $(testdb_LDADD) $(LIBS)
+
+testexpression$(EXEEXT): $(testexpression_OBJECTS) $(testexpression_DEPENDENCIES) $(EXTRA_testexpression_DEPENDENCIES) 
+	@rm -f testexpression$(EXEEXT)
+	$(AM_V_CCLD)$(testexpression_LINK) $(testexpression_OBJECTS) $(testexpression_LDADD) $(LIBS)
+
+testinstance$(EXEEXT): $(testinstance_OBJECTS) $(testinstance_DEPENDENCIES) $(EXTRA_testinstance_DEPENDENCIES) 
+	@rm -f testinstance$(EXEEXT)
+	$(AM_V_CCLD)$(testinstance_LINK) $(testinstance_OBJECTS) $(testinstance_LDADD) $(LIBS)
+
+testlinear$(EXEEXT): $(testlinear_OBJECTS) $(testlinear_DEPENDENCIES) $(EXTRA_testlinear_DEPENDENCIES) 
+	@rm -f testlinear$(EXEEXT)
+	$(AM_V_CCLD)$(testlinear_LINK) $(testlinear_OBJECTS) $(testlinear_LDADD) $(LIBS)
+
+testmany$(EXEEXT): $(testmany_OBJECTS) $(testmany_DEPENDENCIES) $(EXTRA_testmany_DEPENDENCIES) 
+	@rm -f testmany$(EXEEXT)
+	$(AM_V_CCLD)$(testmany_LINK) $(testmany_OBJECTS) $(testmany_LDADD) $(LIBS)
+
+testmonitor$(EXEEXT): $(testmonitor_OBJECTS) $(testmonitor_DEPENDENCIES) $(EXTRA_testmonitor_DEPENDENCIES) 
+	@rm -f testmonitor$(EXEEXT)
+	$(AM_V_CCLD)$(testmonitor_LINK) $(testmonitor_OBJECTS) $(testmonitor_LDADD) $(LIBS)
+
+testparams$(EXEEXT): $(testparams_OBJECTS) $(testparams_DEPENDENCIES) $(EXTRA_testparams_DEPENDENCIES) 
+	@rm -f testparams$(EXEEXT)
+	$(AM_V_CCLD)$(testparams_LINK) $(testparams_OBJECTS) $(testparams_LDADD) $(LIBS)
+
+testparser$(EXEEXT): $(testparser_OBJECTS) $(testparser_DEPENDENCIES) $(EXTRA_testparser_DEPENDENCIES) 
+	@rm -f testparser$(EXEEXT)
+	$(AM_V_CCLD)$(testparser_LINK) $(testparser_OBJECTS) $(testparser_LDADD) $(LIBS)
+
+testprops$(EXEEXT): $(testprops_OBJECTS) $(testprops_DEPENDENCIES) $(EXTRA_testprops_DEPENDENCIES) 
+	@rm -f testprops$(EXEEXT)
+	$(AM_V_CCLD)$(testprops_LINK) $(testprops_OBJECTS) $(testprops_LDADD) $(LIBS)
+
+testquery$(EXEEXT): $(testquery_OBJECTS) $(testquery_DEPENDENCIES) $(EXTRA_testquery_DEPENDENCIES) 
+	@rm -f testquery$(EXEEXT)
+	$(AM_V_CCLD)$(testquery_LINK) $(testquery_OBJECTS) $(testquery_LDADD) $(LIBS)
+
+testqueue$(EXEEXT): $(testqueue_OBJECTS) $(testqueue_DEPENDENCIES) $(EXTRA_testqueue_DEPENDENCIES) 
+	@rm -f testqueue$(EXEEXT)
+	$(AM_V_CCLD)$(testqueue_LINK) $(testqueue_OBJECTS) $(testqueue_LDADD) $(LIBS)
+
+testrate$(EXEEXT): $(testrate_OBJECTS) $(testrate_DEPENDENCIES) $(EXTRA_testrate_DEPENDENCIES) 
+	@rm -f testrate$(EXEEXT)
+	$(AM_V_CCLD)$(testrate_LINK) $(testrate_OBJECTS) $(testrate_LDADD) $(LIBS)
+
+testrecv$(EXEEXT): $(testrecv_OBJECTS) $(testrecv_DEPENDENCIES) $(EXTRA_testrecv_DEPENDENCIES) 
+	@rm -f testrecv$(EXEEXT)
+	$(AM_V_CCLD)$(testrecv_LINK) $(testrecv_OBJECTS) $(testrecv_LDADD) $(LIBS)
+
+testreverse$(EXEEXT): $(testreverse_OBJECTS) $(testreverse_DEPENDENCIES) $(EXTRA_testreverse_DEPENDENCIES) 
+	@rm -f testreverse$(EXEEXT)
+	$(AM_V_CCLD)$(testreverse_LINK) $(testreverse_OBJECTS) $(testreverse_LDADD) $(LIBS)
+
+testselect$(EXEEXT): $(testselect_OBJECTS) $(testselect_DEPENDENCIES) $(EXTRA_testselect_DEPENDENCIES) 
+	@rm -f testselect$(EXEEXT)
+	$(AM_V_CCLD)$(testselect_LINK) $(testselect_OBJECTS) $(testselect_LDADD) $(LIBS)
+
+testsend$(EXEEXT): $(testsend_OBJECTS) $(testsend_DEPENDENCIES) $(EXTRA_testsend_DEPENDENCIES) 
+	@rm -f testsend$(EXEEXT)
+	$(AM_V_CCLD)$(testsend_LINK) $(testsend_OBJECTS) $(testsend_LDADD) $(LIBS)
+
+testsignals$(EXEEXT): $(testsignals_OBJECTS) $(testsignals_DEPENDENCIES) $(EXTRA_testsignals_DEPENDENCIES) 
+	@rm -f testsignals$(EXEEXT)
+	$(AM_V_CCLD)$(testsignals_LINK) $(testsignals_OBJECTS) $(testsignals_LDADD) $(LIBS)
+
+testspeed$(EXEEXT): $(testspeed_OBJECTS) $(testspeed_DEPENDENCIES) $(EXTRA_testspeed_DEPENDENCIES) 
+	@rm -f testspeed$(EXEEXT)
+	$(AM_V_CCLD)$(testspeed_LINK) $(testspeed_OBJECTS) $(testspeed_LDADD) $(LIBS)
+
+testsync$(EXEEXT): $(testsync_OBJECTS) $(testsync_DEPENDENCIES) $(EXTRA_testsync_DEPENDENCIES) 
+	@rm -f testsync$(EXEEXT)
+	$(AM_V_CCLD)$(testsync_LINK) $(testsync_OBJECTS) $(testsync_LDADD) $(LIBS)
+
+testvector$(EXEEXT): $(testvector_OBJECTS) $(testvector_DEPENDENCIES) $(EXTRA_testvector_DEPENDENCIES) 
+	@rm -f testvector$(EXEEXT)
+	$(AM_V_CCLD)$(testvector_LINK) $(testvector_OBJECTS) $(testvector_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/test-test.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testadmin-testadmin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testcpp-testcpp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testcustomtransport-testcustomtransport.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testdb-testdb.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testexpression-testexpression.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testinstance-testinstance.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testlinear-testlinear.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testmany-testmany.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testmonitor-testmonitor.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testparams-testparams.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testparser-testparser.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testprops-testprops.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testquery-testquery.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testqueue-testqueue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testrate-testrate.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testrecv-testrecv.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testreverse-testreverse.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testselect-testselect.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testsend-testsend.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testsignals-testsignals.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testspeed-testspeed.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testsync-testsync.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/testvector-testvector.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+test-test.o: test.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -MT test-test.o -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test.c' object='test-test.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -c -o test-test.o `test -f 'test.c' || echo '$(srcdir)/'`test.c
+
+test-test.obj: test.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -MT test-test.obj -MD -MP -MF $(DEPDIR)/test-test.Tpo -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/test-test.Tpo $(DEPDIR)/test-test.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='test.c' object='test-test.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_CFLAGS) $(CFLAGS) -c -o test-test.obj `if test -f 'test.c'; then $(CYGPATH_W) 'test.c'; else $(CYGPATH_W) '$(srcdir)/test.c'; fi`
+
+testadmin-testadmin.o: testadmin.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testadmin_CFLAGS) $(CFLAGS) -MT testadmin-testadmin.o -MD -MP -MF $(DEPDIR)/testadmin-testadmin.Tpo -c -o testadmin-testadmin.o `test -f 'testadmin.c' || echo '$(srcdir)/'`testadmin.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testadmin-testadmin.Tpo $(DEPDIR)/testadmin-testadmin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testadmin.c' object='testadmin-testadmin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testadmin_CFLAGS) $(CFLAGS) -c -o testadmin-testadmin.o `test -f 'testadmin.c' || echo '$(srcdir)/'`testadmin.c
+
+testadmin-testadmin.obj: testadmin.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testadmin_CFLAGS) $(CFLAGS) -MT testadmin-testadmin.obj -MD -MP -MF $(DEPDIR)/testadmin-testadmin.Tpo -c -o testadmin-testadmin.obj `if test -f 'testadmin.c'; then $(CYGPATH_W) 'testadmin.c'; else $(CYGPATH_W) '$(srcdir)/testadmin.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testadmin-testadmin.Tpo $(DEPDIR)/testadmin-testadmin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testadmin.c' object='testadmin-testadmin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testadmin_CFLAGS) $(CFLAGS) -c -o testadmin-testadmin.obj `if test -f 'testadmin.c'; then $(CYGPATH_W) 'testadmin.c'; else $(CYGPATH_W) '$(srcdir)/testadmin.c'; fi`
+
+testcustomtransport-testcustomtransport.o: testcustomtransport.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcustomtransport_CFLAGS) $(CFLAGS) -MT testcustomtransport-testcustomtransport.o -MD -MP -MF $(DEPDIR)/testcustomtransport-testcustomtransport.Tpo -c -o testcustomtransport-testcustomtransport.o `test -f 'testcustomtransport.c' || echo '$(srcdir)/'`testcustomtransport.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testcustomtransport-testcustomtransport.Tpo $(DEPDIR)/testcustomtransport-testcustomtransport.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testcustomtransport.c' object='testcustomtransport-testcustomtransport.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcustomtransport_CFLAGS) $(CFLAGS) -c -o testcustomtransport-testcustomtransport.o `test -f 'testcustomtransport.c' || echo '$(srcdir)/'`testcustomtransport.c
+
+testcustomtransport-testcustomtransport.obj: testcustomtransport.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcustomtransport_CFLAGS) $(CFLAGS) -MT testcustomtransport-testcustomtransport.obj -MD -MP -MF $(DEPDIR)/testcustomtransport-testcustomtransport.Tpo -c -o testcustomtransport-testcustomtransport.obj `if test -f 'testcustomtransport.c'; then $(CYGPATH_W) 'testcustomtransport.c'; else $(CYGPATH_W) '$(srcdir)/testcustomtransport.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testcustomtransport-testcustomtransport.Tpo $(DEPDIR)/testcustomtransport-testcustomtransport.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testcustomtransport.c' object='testcustomtransport-testcustomtransport.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcustomtransport_CFLAGS) $(CFLAGS) -c -o testcustomtransport-testcustomtransport.obj `if test -f 'testcustomtransport.c'; then $(CYGPATH_W) 'testcustomtransport.c'; else $(CYGPATH_W) '$(srcdir)/testcustomtransport.c'; fi`
+
+testdb-testdb.o: testdb.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testdb_CFLAGS) $(CFLAGS) -MT testdb-testdb.o -MD -MP -MF $(DEPDIR)/testdb-testdb.Tpo -c -o testdb-testdb.o `test -f 'testdb.c' || echo '$(srcdir)/'`testdb.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testdb-testdb.Tpo $(DEPDIR)/testdb-testdb.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testdb.c' object='testdb-testdb.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testdb_CFLAGS) $(CFLAGS) -c -o testdb-testdb.o `test -f 'testdb.c' || echo '$(srcdir)/'`testdb.c
+
+testdb-testdb.obj: testdb.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testdb_CFLAGS) $(CFLAGS) -MT testdb-testdb.obj -MD -MP -MF $(DEPDIR)/testdb-testdb.Tpo -c -o testdb-testdb.obj `if test -f 'testdb.c'; then $(CYGPATH_W) 'testdb.c'; else $(CYGPATH_W) '$(srcdir)/testdb.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testdb-testdb.Tpo $(DEPDIR)/testdb-testdb.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testdb.c' object='testdb-testdb.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testdb_CFLAGS) $(CFLAGS) -c -o testdb-testdb.obj `if test -f 'testdb.c'; then $(CYGPATH_W) 'testdb.c'; else $(CYGPATH_W) '$(srcdir)/testdb.c'; fi`
+
+testexpression-testexpression.o: testexpression.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testexpression_CFLAGS) $(CFLAGS) -MT testexpression-testexpression.o -MD -MP -MF $(DEPDIR)/testexpression-testexpression.Tpo -c -o testexpression-testexpression.o `test -f 'testexpression.c' || echo '$(srcdir)/'`testexpression.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testexpression-testexpression.Tpo $(DEPDIR)/testexpression-testexpression.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testexpression.c' object='testexpression-testexpression.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testexpression_CFLAGS) $(CFLAGS) -c -o testexpression-testexpression.o `test -f 'testexpression.c' || echo '$(srcdir)/'`testexpression.c
+
+testexpression-testexpression.obj: testexpression.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testexpression_CFLAGS) $(CFLAGS) -MT testexpression-testexpression.obj -MD -MP -MF $(DEPDIR)/testexpression-testexpression.Tpo -c -o testexpression-testexpression.obj `if test -f 'testexpression.c'; then $(CYGPATH_W) 'testexpression.c'; else $(CYGPATH_W) '$(srcdir)/testexpression.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testexpression-testexpression.Tpo $(DEPDIR)/testexpression-testexpression.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testexpression.c' object='testexpression-testexpression.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testexpression_CFLAGS) $(CFLAGS) -c -o testexpression-testexpression.obj `if test -f 'testexpression.c'; then $(CYGPATH_W) 'testexpression.c'; else $(CYGPATH_W) '$(srcdir)/testexpression.c'; fi`
+
+testinstance-testinstance.o: testinstance.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testinstance_CFLAGS) $(CFLAGS) -MT testinstance-testinstance.o -MD -MP -MF $(DEPDIR)/testinstance-testinstance.Tpo -c -o testinstance-testinstance.o `test -f 'testinstance.c' || echo '$(srcdir)/'`testinstance.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testinstance-testinstance.Tpo $(DEPDIR)/testinstance-testinstance.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testinstance.c' object='testinstance-testinstance.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testinstance_CFLAGS) $(CFLAGS) -c -o testinstance-testinstance.o `test -f 'testinstance.c' || echo '$(srcdir)/'`testinstance.c
+
+testinstance-testinstance.obj: testinstance.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testinstance_CFLAGS) $(CFLAGS) -MT testinstance-testinstance.obj -MD -MP -MF $(DEPDIR)/testinstance-testinstance.Tpo -c -o testinstance-testinstance.obj `if test -f 'testinstance.c'; then $(CYGPATH_W) 'testinstance.c'; else $(CYGPATH_W) '$(srcdir)/testinstance.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testinstance-testinstance.Tpo $(DEPDIR)/testinstance-testinstance.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testinstance.c' object='testinstance-testinstance.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testinstance_CFLAGS) $(CFLAGS) -c -o testinstance-testinstance.obj `if test -f 'testinstance.c'; then $(CYGPATH_W) 'testinstance.c'; else $(CYGPATH_W) '$(srcdir)/testinstance.c'; fi`
+
+testlinear-testlinear.o: testlinear.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testlinear_CFLAGS) $(CFLAGS) -MT testlinear-testlinear.o -MD -MP -MF $(DEPDIR)/testlinear-testlinear.Tpo -c -o testlinear-testlinear.o `test -f 'testlinear.c' || echo '$(srcdir)/'`testlinear.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testlinear-testlinear.Tpo $(DEPDIR)/testlinear-testlinear.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testlinear.c' object='testlinear-testlinear.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testlinear_CFLAGS) $(CFLAGS) -c -o testlinear-testlinear.o `test -f 'testlinear.c' || echo '$(srcdir)/'`testlinear.c
+
+testlinear-testlinear.obj: testlinear.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testlinear_CFLAGS) $(CFLAGS) -MT testlinear-testlinear.obj -MD -MP -MF $(DEPDIR)/testlinear-testlinear.Tpo -c -o testlinear-testlinear.obj `if test -f 'testlinear.c'; then $(CYGPATH_W) 'testlinear.c'; else $(CYGPATH_W) '$(srcdir)/testlinear.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testlinear-testlinear.Tpo $(DEPDIR)/testlinear-testlinear.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testlinear.c' object='testlinear-testlinear.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testlinear_CFLAGS) $(CFLAGS) -c -o testlinear-testlinear.obj `if test -f 'testlinear.c'; then $(CYGPATH_W) 'testlinear.c'; else $(CYGPATH_W) '$(srcdir)/testlinear.c'; fi`
+
+testmany-testmany.o: testmany.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmany_CFLAGS) $(CFLAGS) -MT testmany-testmany.o -MD -MP -MF $(DEPDIR)/testmany-testmany.Tpo -c -o testmany-testmany.o `test -f 'testmany.c' || echo '$(srcdir)/'`testmany.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testmany-testmany.Tpo $(DEPDIR)/testmany-testmany.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testmany.c' object='testmany-testmany.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmany_CFLAGS) $(CFLAGS) -c -o testmany-testmany.o `test -f 'testmany.c' || echo '$(srcdir)/'`testmany.c
+
+testmany-testmany.obj: testmany.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmany_CFLAGS) $(CFLAGS) -MT testmany-testmany.obj -MD -MP -MF $(DEPDIR)/testmany-testmany.Tpo -c -o testmany-testmany.obj `if test -f 'testmany.c'; then $(CYGPATH_W) 'testmany.c'; else $(CYGPATH_W) '$(srcdir)/testmany.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testmany-testmany.Tpo $(DEPDIR)/testmany-testmany.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testmany.c' object='testmany-testmany.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmany_CFLAGS) $(CFLAGS) -c -o testmany-testmany.obj `if test -f 'testmany.c'; then $(CYGPATH_W) 'testmany.c'; else $(CYGPATH_W) '$(srcdir)/testmany.c'; fi`
+
+testmonitor-testmonitor.o: testmonitor.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmonitor_CFLAGS) $(CFLAGS) -MT testmonitor-testmonitor.o -MD -MP -MF $(DEPDIR)/testmonitor-testmonitor.Tpo -c -o testmonitor-testmonitor.o `test -f 'testmonitor.c' || echo '$(srcdir)/'`testmonitor.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testmonitor-testmonitor.Tpo $(DEPDIR)/testmonitor-testmonitor.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testmonitor.c' object='testmonitor-testmonitor.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmonitor_CFLAGS) $(CFLAGS) -c -o testmonitor-testmonitor.o `test -f 'testmonitor.c' || echo '$(srcdir)/'`testmonitor.c
+
+testmonitor-testmonitor.obj: testmonitor.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmonitor_CFLAGS) $(CFLAGS) -MT testmonitor-testmonitor.obj -MD -MP -MF $(DEPDIR)/testmonitor-testmonitor.Tpo -c -o testmonitor-testmonitor.obj `if test -f 'testmonitor.c'; then $(CYGPATH_W) 'testmonitor.c'; else $(CYGPATH_W) '$(srcdir)/testmonitor.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testmonitor-testmonitor.Tpo $(DEPDIR)/testmonitor-testmonitor.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testmonitor.c' object='testmonitor-testmonitor.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testmonitor_CFLAGS) $(CFLAGS) -c -o testmonitor-testmonitor.obj `if test -f 'testmonitor.c'; then $(CYGPATH_W) 'testmonitor.c'; else $(CYGPATH_W) '$(srcdir)/testmonitor.c'; fi`
+
+testparams-testparams.o: testparams.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparams_CFLAGS) $(CFLAGS) -MT testparams-testparams.o -MD -MP -MF $(DEPDIR)/testparams-testparams.Tpo -c -o testparams-testparams.o `test -f 'testparams.c' || echo '$(srcdir)/'`testparams.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testparams-testparams.Tpo $(DEPDIR)/testparams-testparams.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testparams.c' object='testparams-testparams.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparams_CFLAGS) $(CFLAGS) -c -o testparams-testparams.o `test -f 'testparams.c' || echo '$(srcdir)/'`testparams.c
+
+testparams-testparams.obj: testparams.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparams_CFLAGS) $(CFLAGS) -MT testparams-testparams.obj -MD -MP -MF $(DEPDIR)/testparams-testparams.Tpo -c -o testparams-testparams.obj `if test -f 'testparams.c'; then $(CYGPATH_W) 'testparams.c'; else $(CYGPATH_W) '$(srcdir)/testparams.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testparams-testparams.Tpo $(DEPDIR)/testparams-testparams.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testparams.c' object='testparams-testparams.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparams_CFLAGS) $(CFLAGS) -c -o testparams-testparams.obj `if test -f 'testparams.c'; then $(CYGPATH_W) 'testparams.c'; else $(CYGPATH_W) '$(srcdir)/testparams.c'; fi`
+
+testparser-testparser.o: testparser.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparser_CFLAGS) $(CFLAGS) -MT testparser-testparser.o -MD -MP -MF $(DEPDIR)/testparser-testparser.Tpo -c -o testparser-testparser.o `test -f 'testparser.c' || echo '$(srcdir)/'`testparser.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testparser-testparser.Tpo $(DEPDIR)/testparser-testparser.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testparser.c' object='testparser-testparser.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparser_CFLAGS) $(CFLAGS) -c -o testparser-testparser.o `test -f 'testparser.c' || echo '$(srcdir)/'`testparser.c
+
+testparser-testparser.obj: testparser.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparser_CFLAGS) $(CFLAGS) -MT testparser-testparser.obj -MD -MP -MF $(DEPDIR)/testparser-testparser.Tpo -c -o testparser-testparser.obj `if test -f 'testparser.c'; then $(CYGPATH_W) 'testparser.c'; else $(CYGPATH_W) '$(srcdir)/testparser.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testparser-testparser.Tpo $(DEPDIR)/testparser-testparser.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testparser.c' object='testparser-testparser.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testparser_CFLAGS) $(CFLAGS) -c -o testparser-testparser.obj `if test -f 'testparser.c'; then $(CYGPATH_W) 'testparser.c'; else $(CYGPATH_W) '$(srcdir)/testparser.c'; fi`
+
+testprops-testprops.o: testprops.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testprops_CFLAGS) $(CFLAGS) -MT testprops-testprops.o -MD -MP -MF $(DEPDIR)/testprops-testprops.Tpo -c -o testprops-testprops.o `test -f 'testprops.c' || echo '$(srcdir)/'`testprops.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testprops-testprops.Tpo $(DEPDIR)/testprops-testprops.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testprops.c' object='testprops-testprops.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testprops_CFLAGS) $(CFLAGS) -c -o testprops-testprops.o `test -f 'testprops.c' || echo '$(srcdir)/'`testprops.c
+
+testprops-testprops.obj: testprops.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testprops_CFLAGS) $(CFLAGS) -MT testprops-testprops.obj -MD -MP -MF $(DEPDIR)/testprops-testprops.Tpo -c -o testprops-testprops.obj `if test -f 'testprops.c'; then $(CYGPATH_W) 'testprops.c'; else $(CYGPATH_W) '$(srcdir)/testprops.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testprops-testprops.Tpo $(DEPDIR)/testprops-testprops.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testprops.c' object='testprops-testprops.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testprops_CFLAGS) $(CFLAGS) -c -o testprops-testprops.obj `if test -f 'testprops.c'; then $(CYGPATH_W) 'testprops.c'; else $(CYGPATH_W) '$(srcdir)/testprops.c'; fi`
+
+testquery-testquery.o: testquery.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testquery_CFLAGS) $(CFLAGS) -MT testquery-testquery.o -MD -MP -MF $(DEPDIR)/testquery-testquery.Tpo -c -o testquery-testquery.o `test -f 'testquery.c' || echo '$(srcdir)/'`testquery.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testquery-testquery.Tpo $(DEPDIR)/testquery-testquery.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testquery.c' object='testquery-testquery.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testquery_CFLAGS) $(CFLAGS) -c -o testquery-testquery.o `test -f 'testquery.c' || echo '$(srcdir)/'`testquery.c
+
+testquery-testquery.obj: testquery.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testquery_CFLAGS) $(CFLAGS) -MT testquery-testquery.obj -MD -MP -MF $(DEPDIR)/testquery-testquery.Tpo -c -o testquery-testquery.obj `if test -f 'testquery.c'; then $(CYGPATH_W) 'testquery.c'; else $(CYGPATH_W) '$(srcdir)/testquery.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testquery-testquery.Tpo $(DEPDIR)/testquery-testquery.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testquery.c' object='testquery-testquery.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testquery_CFLAGS) $(CFLAGS) -c -o testquery-testquery.obj `if test -f 'testquery.c'; then $(CYGPATH_W) 'testquery.c'; else $(CYGPATH_W) '$(srcdir)/testquery.c'; fi`
+
+testqueue-testqueue.o: testqueue.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testqueue_CFLAGS) $(CFLAGS) -MT testqueue-testqueue.o -MD -MP -MF $(DEPDIR)/testqueue-testqueue.Tpo -c -o testqueue-testqueue.o `test -f 'testqueue.c' || echo '$(srcdir)/'`testqueue.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testqueue-testqueue.Tpo $(DEPDIR)/testqueue-testqueue.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testqueue.c' object='testqueue-testqueue.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testqueue_CFLAGS) $(CFLAGS) -c -o testqueue-testqueue.o `test -f 'testqueue.c' || echo '$(srcdir)/'`testqueue.c
+
+testqueue-testqueue.obj: testqueue.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testqueue_CFLAGS) $(CFLAGS) -MT testqueue-testqueue.obj -MD -MP -MF $(DEPDIR)/testqueue-testqueue.Tpo -c -o testqueue-testqueue.obj `if test -f 'testqueue.c'; then $(CYGPATH_W) 'testqueue.c'; else $(CYGPATH_W) '$(srcdir)/testqueue.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testqueue-testqueue.Tpo $(DEPDIR)/testqueue-testqueue.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testqueue.c' object='testqueue-testqueue.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testqueue_CFLAGS) $(CFLAGS) -c -o testqueue-testqueue.obj `if test -f 'testqueue.c'; then $(CYGPATH_W) 'testqueue.c'; else $(CYGPATH_W) '$(srcdir)/testqueue.c'; fi`
+
+testrate-testrate.o: testrate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrate_CFLAGS) $(CFLAGS) -MT testrate-testrate.o -MD -MP -MF $(DEPDIR)/testrate-testrate.Tpo -c -o testrate-testrate.o `test -f 'testrate.c' || echo '$(srcdir)/'`testrate.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testrate-testrate.Tpo $(DEPDIR)/testrate-testrate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testrate.c' object='testrate-testrate.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrate_CFLAGS) $(CFLAGS) -c -o testrate-testrate.o `test -f 'testrate.c' || echo '$(srcdir)/'`testrate.c
+
+testrate-testrate.obj: testrate.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrate_CFLAGS) $(CFLAGS) -MT testrate-testrate.obj -MD -MP -MF $(DEPDIR)/testrate-testrate.Tpo -c -o testrate-testrate.obj `if test -f 'testrate.c'; then $(CYGPATH_W) 'testrate.c'; else $(CYGPATH_W) '$(srcdir)/testrate.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testrate-testrate.Tpo $(DEPDIR)/testrate-testrate.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testrate.c' object='testrate-testrate.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrate_CFLAGS) $(CFLAGS) -c -o testrate-testrate.obj `if test -f 'testrate.c'; then $(CYGPATH_W) 'testrate.c'; else $(CYGPATH_W) '$(srcdir)/testrate.c'; fi`
+
+testrecv-testrecv.o: testrecv.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrecv_CFLAGS) $(CFLAGS) -MT testrecv-testrecv.o -MD -MP -MF $(DEPDIR)/testrecv-testrecv.Tpo -c -o testrecv-testrecv.o `test -f 'testrecv.c' || echo '$(srcdir)/'`testrecv.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testrecv-testrecv.Tpo $(DEPDIR)/testrecv-testrecv.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testrecv.c' object='testrecv-testrecv.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrecv_CFLAGS) $(CFLAGS) -c -o testrecv-testrecv.o `test -f 'testrecv.c' || echo '$(srcdir)/'`testrecv.c
+
+testrecv-testrecv.obj: testrecv.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrecv_CFLAGS) $(CFLAGS) -MT testrecv-testrecv.obj -MD -MP -MF $(DEPDIR)/testrecv-testrecv.Tpo -c -o testrecv-testrecv.obj `if test -f 'testrecv.c'; then $(CYGPATH_W) 'testrecv.c'; else $(CYGPATH_W) '$(srcdir)/testrecv.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testrecv-testrecv.Tpo $(DEPDIR)/testrecv-testrecv.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testrecv.c' object='testrecv-testrecv.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testrecv_CFLAGS) $(CFLAGS) -c -o testrecv-testrecv.obj `if test -f 'testrecv.c'; then $(CYGPATH_W) 'testrecv.c'; else $(CYGPATH_W) '$(srcdir)/testrecv.c'; fi`
+
+testreverse-testreverse.o: testreverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testreverse_CFLAGS) $(CFLAGS) -MT testreverse-testreverse.o -MD -MP -MF $(DEPDIR)/testreverse-testreverse.Tpo -c -o testreverse-testreverse.o `test -f 'testreverse.c' || echo '$(srcdir)/'`testreverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testreverse-testreverse.Tpo $(DEPDIR)/testreverse-testreverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testreverse.c' object='testreverse-testreverse.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testreverse_CFLAGS) $(CFLAGS) -c -o testreverse-testreverse.o `test -f 'testreverse.c' || echo '$(srcdir)/'`testreverse.c
+
+testreverse-testreverse.obj: testreverse.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testreverse_CFLAGS) $(CFLAGS) -MT testreverse-testreverse.obj -MD -MP -MF $(DEPDIR)/testreverse-testreverse.Tpo -c -o testreverse-testreverse.obj `if test -f 'testreverse.c'; then $(CYGPATH_W) 'testreverse.c'; else $(CYGPATH_W) '$(srcdir)/testreverse.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testreverse-testreverse.Tpo $(DEPDIR)/testreverse-testreverse.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testreverse.c' object='testreverse-testreverse.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testreverse_CFLAGS) $(CFLAGS) -c -o testreverse-testreverse.obj `if test -f 'testreverse.c'; then $(CYGPATH_W) 'testreverse.c'; else $(CYGPATH_W) '$(srcdir)/testreverse.c'; fi`
+
+testselect-testselect.o: testselect.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testselect_CFLAGS) $(CFLAGS) -MT testselect-testselect.o -MD -MP -MF $(DEPDIR)/testselect-testselect.Tpo -c -o testselect-testselect.o `test -f 'testselect.c' || echo '$(srcdir)/'`testselect.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testselect-testselect.Tpo $(DEPDIR)/testselect-testselect.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testselect.c' object='testselect-testselect.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testselect_CFLAGS) $(CFLAGS) -c -o testselect-testselect.o `test -f 'testselect.c' || echo '$(srcdir)/'`testselect.c
+
+testselect-testselect.obj: testselect.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testselect_CFLAGS) $(CFLAGS) -MT testselect-testselect.obj -MD -MP -MF $(DEPDIR)/testselect-testselect.Tpo -c -o testselect-testselect.obj `if test -f 'testselect.c'; then $(CYGPATH_W) 'testselect.c'; else $(CYGPATH_W) '$(srcdir)/testselect.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testselect-testselect.Tpo $(DEPDIR)/testselect-testselect.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testselect.c' object='testselect-testselect.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testselect_CFLAGS) $(CFLAGS) -c -o testselect-testselect.obj `if test -f 'testselect.c'; then $(CYGPATH_W) 'testselect.c'; else $(CYGPATH_W) '$(srcdir)/testselect.c'; fi`
+
+testsend-testsend.o: testsend.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsend_CFLAGS) $(CFLAGS) -MT testsend-testsend.o -MD -MP -MF $(DEPDIR)/testsend-testsend.Tpo -c -o testsend-testsend.o `test -f 'testsend.c' || echo '$(srcdir)/'`testsend.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testsend-testsend.Tpo $(DEPDIR)/testsend-testsend.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testsend.c' object='testsend-testsend.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsend_CFLAGS) $(CFLAGS) -c -o testsend-testsend.o `test -f 'testsend.c' || echo '$(srcdir)/'`testsend.c
+
+testsend-testsend.obj: testsend.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsend_CFLAGS) $(CFLAGS) -MT testsend-testsend.obj -MD -MP -MF $(DEPDIR)/testsend-testsend.Tpo -c -o testsend-testsend.obj `if test -f 'testsend.c'; then $(CYGPATH_W) 'testsend.c'; else $(CYGPATH_W) '$(srcdir)/testsend.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testsend-testsend.Tpo $(DEPDIR)/testsend-testsend.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testsend.c' object='testsend-testsend.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsend_CFLAGS) $(CFLAGS) -c -o testsend-testsend.obj `if test -f 'testsend.c'; then $(CYGPATH_W) 'testsend.c'; else $(CYGPATH_W) '$(srcdir)/testsend.c'; fi`
+
+testsignals-testsignals.o: testsignals.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsignals_CFLAGS) $(CFLAGS) -MT testsignals-testsignals.o -MD -MP -MF $(DEPDIR)/testsignals-testsignals.Tpo -c -o testsignals-testsignals.o `test -f 'testsignals.c' || echo '$(srcdir)/'`testsignals.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testsignals-testsignals.Tpo $(DEPDIR)/testsignals-testsignals.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testsignals.c' object='testsignals-testsignals.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsignals_CFLAGS) $(CFLAGS) -c -o testsignals-testsignals.o `test -f 'testsignals.c' || echo '$(srcdir)/'`testsignals.c
+
+testsignals-testsignals.obj: testsignals.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsignals_CFLAGS) $(CFLAGS) -MT testsignals-testsignals.obj -MD -MP -MF $(DEPDIR)/testsignals-testsignals.Tpo -c -o testsignals-testsignals.obj `if test -f 'testsignals.c'; then $(CYGPATH_W) 'testsignals.c'; else $(CYGPATH_W) '$(srcdir)/testsignals.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testsignals-testsignals.Tpo $(DEPDIR)/testsignals-testsignals.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testsignals.c' object='testsignals-testsignals.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsignals_CFLAGS) $(CFLAGS) -c -o testsignals-testsignals.obj `if test -f 'testsignals.c'; then $(CYGPATH_W) 'testsignals.c'; else $(CYGPATH_W) '$(srcdir)/testsignals.c'; fi`
+
+testspeed-testspeed.o: testspeed.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testspeed_CFLAGS) $(CFLAGS) -MT testspeed-testspeed.o -MD -MP -MF $(DEPDIR)/testspeed-testspeed.Tpo -c -o testspeed-testspeed.o `test -f 'testspeed.c' || echo '$(srcdir)/'`testspeed.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testspeed-testspeed.Tpo $(DEPDIR)/testspeed-testspeed.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testspeed.c' object='testspeed-testspeed.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testspeed_CFLAGS) $(CFLAGS) -c -o testspeed-testspeed.o `test -f 'testspeed.c' || echo '$(srcdir)/'`testspeed.c
+
+testspeed-testspeed.obj: testspeed.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testspeed_CFLAGS) $(CFLAGS) -MT testspeed-testspeed.obj -MD -MP -MF $(DEPDIR)/testspeed-testspeed.Tpo -c -o testspeed-testspeed.obj `if test -f 'testspeed.c'; then $(CYGPATH_W) 'testspeed.c'; else $(CYGPATH_W) '$(srcdir)/testspeed.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testspeed-testspeed.Tpo $(DEPDIR)/testspeed-testspeed.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testspeed.c' object='testspeed-testspeed.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testspeed_CFLAGS) $(CFLAGS) -c -o testspeed-testspeed.obj `if test -f 'testspeed.c'; then $(CYGPATH_W) 'testspeed.c'; else $(CYGPATH_W) '$(srcdir)/testspeed.c'; fi`
+
+testsync-testsync.o: testsync.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsync_CFLAGS) $(CFLAGS) -MT testsync-testsync.o -MD -MP -MF $(DEPDIR)/testsync-testsync.Tpo -c -o testsync-testsync.o `test -f 'testsync.c' || echo '$(srcdir)/'`testsync.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testsync-testsync.Tpo $(DEPDIR)/testsync-testsync.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testsync.c' object='testsync-testsync.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsync_CFLAGS) $(CFLAGS) -c -o testsync-testsync.o `test -f 'testsync.c' || echo '$(srcdir)/'`testsync.c
+
+testsync-testsync.obj: testsync.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsync_CFLAGS) $(CFLAGS) -MT testsync-testsync.obj -MD -MP -MF $(DEPDIR)/testsync-testsync.Tpo -c -o testsync-testsync.obj `if test -f 'testsync.c'; then $(CYGPATH_W) 'testsync.c'; else $(CYGPATH_W) '$(srcdir)/testsync.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testsync-testsync.Tpo $(DEPDIR)/testsync-testsync.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testsync.c' object='testsync-testsync.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testsync_CFLAGS) $(CFLAGS) -c -o testsync-testsync.obj `if test -f 'testsync.c'; then $(CYGPATH_W) 'testsync.c'; else $(CYGPATH_W) '$(srcdir)/testsync.c'; fi`
+
+testvector-testvector.o: testvector.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testvector_CFLAGS) $(CFLAGS) -MT testvector-testvector.o -MD -MP -MF $(DEPDIR)/testvector-testvector.Tpo -c -o testvector-testvector.o `test -f 'testvector.c' || echo '$(srcdir)/'`testvector.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testvector-testvector.Tpo $(DEPDIR)/testvector-testvector.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testvector.c' object='testvector-testvector.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testvector_CFLAGS) $(CFLAGS) -c -o testvector-testvector.o `test -f 'testvector.c' || echo '$(srcdir)/'`testvector.c
+
+testvector-testvector.obj: testvector.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testvector_CFLAGS) $(CFLAGS) -MT testvector-testvector.obj -MD -MP -MF $(DEPDIR)/testvector-testvector.Tpo -c -o testvector-testvector.obj `if test -f 'testvector.c'; then $(CYGPATH_W) 'testvector.c'; else $(CYGPATH_W) '$(srcdir)/testvector.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testvector-testvector.Tpo $(DEPDIR)/testvector-testvector.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testvector.c' object='testvector-testvector.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testvector_CFLAGS) $(CFLAGS) -c -o testvector-testvector.obj `if test -f 'testvector.c'; then $(CYGPATH_W) 'testvector.c'; else $(CYGPATH_W) '$(srcdir)/testvector.c'; fi`
+
+.cpp.o:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.cpp.lo:
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
+
+testcpp-testcpp.o: testcpp.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcpp_CXXFLAGS) $(CXXFLAGS) -MT testcpp-testcpp.o -MD -MP -MF $(DEPDIR)/testcpp-testcpp.Tpo -c -o testcpp-testcpp.o `test -f 'testcpp.cpp' || echo '$(srcdir)/'`testcpp.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testcpp-testcpp.Tpo $(DEPDIR)/testcpp-testcpp.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='testcpp.cpp' object='testcpp-testcpp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcpp_CXXFLAGS) $(CXXFLAGS) -c -o testcpp-testcpp.o `test -f 'testcpp.cpp' || echo '$(srcdir)/'`testcpp.cpp
+
+testcpp-testcpp.obj: testcpp.cpp
+ at am__fastdepCXX_TRUE@	$(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcpp_CXXFLAGS) $(CXXFLAGS) -MT testcpp-testcpp.obj -MD -MP -MF $(DEPDIR)/testcpp-testcpp.Tpo -c -o testcpp-testcpp.obj `if test -f 'testcpp.cpp'; then $(CYGPATH_W) 'testcpp.cpp'; else $(CYGPATH_W) '$(srcdir)/testcpp.cpp'; fi`
+ at am__fastdepCXX_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/testcpp-testcpp.Tpo $(DEPDIR)/testcpp-testcpp.Po
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(AM_V_CXX)source='testcpp.cpp' object='testcpp-testcpp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCXX_FALSE@	$(AM_V_CXX at am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(testcpp_CXXFLAGS) $(CXXFLAGS) -c -o testcpp-testcpp.obj `if test -f 'testcpp.cpp'; then $(CYGPATH_W) 'testcpp.cpp'; else $(CYGPATH_W) '$(srcdir)/testcpp.cpp'; fi`
+
+mostlyclean-libtool:
+	-rm -f *.lo
+
+clean-libtool:
+	-rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+	$(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	set x; \
+	here=`pwd`; \
+	$(am__define_uniq_tagged_files); \
+	shift; \
+	if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  if test $$# -gt 0; then \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      "$$@" $$unique; \
+	  else \
+	    $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	      $$unique; \
+	  fi; \
+	fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+	$(am__define_uniq_tagged_files); \
+	test -z "$(CTAGS_ARGS)$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && $(am__cd) $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+	list='$(am__tagged_files)'; \
+	case "$(srcdir)" in \
+	  [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+	  *) sdir=$(subdir)/$(srcdir) ;; \
+	esac; \
+	for i in $$list; do \
+	  if test -f "$$i"; then \
+	    echo "$(subdir)/$$i"; \
+	  else \
+	    echo "$$sdir/$$i"; \
+	  fi; \
+	done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+	mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+	clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
+	ctags-am distclean distclean-compile distclean-generic \
+	distclean-libtool distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+	tags tags-am uninstall uninstall-am
+
+
+tests: all
+	for i in $(test_all_ordered); do echo Running $$i; if ! ./$$i -qt; then exit 1; fi; done
+	echo Running testmonitor and testsignals; ./testmonitor -t & ./testsignals
+
+memtest: all
+	for i in $(noinst_PROGRAMS); do echo Running $$i; if ! LD_PRELOAD=/usr/local/lib/libmapper-0.2.dylib valgrind --leakcheck=full ./.libs/$$i -qt; then exit 1; fi; done
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:

-- 
libmapper packaging



More information about the pkg-multimedia-commits mailing list