From 64f448979dd80fe7052584ed9ec78be49e0e0a1d Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jon.w.wilkes@gmail.com>
Date: Thu, 5 Nov 2015 22:01:29 -0500
Subject: [PATCH] bump portmidi to rev 217 from 2010

---
 pd/portmidi/ALL_BUILD.vcproj                  |  128 +
 pd/portmidi/CHANGELOG.txt                     |   34 +
 pd/portmidi/CMakeLists.txt                    |   77 +
 pd/portmidi/Doxyfile                          | 1472 +++++
 pd/portmidi/README.txt                        |   19 +-
 pd/portmidi/ZERO_CHECK.vcproj                 |  128 +
 pd/portmidi/license.txt                       |    4 +-
 pd/portmidi/pm_cl/README_CL.txt               |  104 +
 pd/portmidi/pm_cl/cffi-portmidi.lisp          |  384 ++
 pd/portmidi/pm_cl/test-no-cm.lisp             |  112 +
 pd/portmidi/pm_common/CMakeLists.txt          |  128 +
 pd/portmidi/pm_common/pminternal.h            |   30 +-
 pd/portmidi/pm_common/pmjni.vcproj            |  161 +
 pd/portmidi/pm_common/pmutil.c                |  595 +-
 pd/portmidi/pm_common/pmutil.h                |   19 +-
 pd/portmidi/pm_common/portmidi-dynamic.vcproj |  179 +
 pd/portmidi/pm_common/portmidi-static.vcproj  |  141 +
 pd/portmidi/pm_common/portmidi.c              | 2321 ++++---
 pd/portmidi/pm_common/portmidi.h              | 1260 ++--
 pd/portmidi/pm_csharp/README.txt              |   20 +
 .../pm_csharp/pm_managed/AssemblyInfo.cpp     |   40 +
 pd/portmidi/pm_csharp/pm_managed/ReadMe.txt   |   31 +
 pd/portmidi/pm_csharp/pm_managed/Stdafx.cpp   |    5 +
 pd/portmidi/pm_csharp/pm_managed/Stdafx.h     |    7 +
 pd/portmidi/pm_csharp/pm_managed/app.ico      |  Bin 0 -> 1078 bytes
 pd/portmidi/pm_csharp/pm_managed/app.rc       |   63 +
 .../pm_csharp/pm_managed/pm_managed.cpp       |    6 +
 pd/portmidi/pm_csharp/pm_managed/pm_managed.h |   53 +
 .../pm_csharp/pm_managed/pm_managed.vcproj    |  260 +
 pd/portmidi/pm_csharp/pm_managed/resource.h   |    3 +
 pd/portmidi/pm_dylib/CMakeLists.txt           |  127 +
 pd/portmidi/pm_dylib/README.txt               |   11 +
 pd/portmidi/pm_dylib/portmidi-dynamic.vcproj  |  158 +
 pd/portmidi/pm_java/CMakeLists.txt            |   47 +
 pd/portmidi/pm_java/JavaExe.exe               |  Bin 0 -> 131072 bytes
 pd/portmidi/pm_java/README.txt                |   48 +
 pd/portmidi/pm_java/UpdateRsrcJavaExe.exe     |  Bin 0 -> 102400 bytes
 pd/portmidi/pm_java/jportmidi/JPortMidi.java  |  539 ++
 .../pm_java/jportmidi/JPortMidiApi.java       |  117 +
 .../pm_java/jportmidi/JPortMidiException.java |   12 +
 pd/portmidi/pm_java/mac-make.sh               |   26 +
 pd/portmidi/pm_java/make.bat                  |   47 +
 .../pm_java/pmdefaults-setup-script.iss       |   44 +
 .../pm_java/pmdefaults/PmDefaults.java        |   11 +
 .../pm_java/pmdefaults/PmDefaultsFrame.java   |  428 ++
 pd/portmidi/pm_java/pmdefaults/README.txt     |   21 +
 pd/portmidi/pm_java/pmdefaults/manifest.txt   |    1 +
 pd/portmidi/pm_java/pmdefaults/pmdefaults     |    1 +
 .../pm_java/pmdefaults/pmdefaults-icon.bmp    |  Bin 0 -> 17464 bytes
 .../pm_java/pmdefaults/pmdefaults-icon.gif    |  Bin 0 -> 6976 bytes
 .../pm_java/pmdefaults/pmdefaults-icon.png    |  Bin 0 -> 6986 bytes
 .../pm_java/pmdefaults/pmdefaults-icon.xcf    |  Bin 0 -> 19957 bytes
 .../pm_java/pmdefaults/pmdefaults-license.txt |   37 +
 .../pm_java/pmdefaults/pmdefaults.icns        |  Bin 0 -> 36751 bytes
 pd/portmidi/pm_java/pmdefaults/pmdefaults.ico |  Bin 0 -> 99678 bytes
 .../pm_java/pmdefaults/portmusic_logo.png     |  Bin 0 -> 753 bytes
 .../pm_java/pmdefaults/readme-win32.txt       |   11 +
 .../pm_java/pmjni/jportmidi_JportMidiApi.h    |  293 +
 pd/portmidi/pm_java/pmjni/pmjni-VC8.vcproj    |  225 +
 pd/portmidi/pm_java/pmjni/pmjni.c             |  354 ++
 pd/portmidi/pm_java/pmjni/pmjni.rc            |   63 +
 .../pm_java/setup/pmdefaults-setup.exe        |  Bin 0 -> 485013 bytes
 pd/portmidi/pm_linux/README_LINUX.txt         |   98 +-
 pd/portmidi/pm_linux/finddefault.c            |   92 +
 pd/portmidi/pm_linux/pmlinux.c                |   23 +-
 pd/portmidi/pm_linux/pmlinux.h                |    0
 pd/portmidi/pm_linux/pmlinuxalsa.c            |   11 +-
 pd/portmidi/pm_linux/pmlinuxalsa.h            |    0
 pd/portmidi/pm_mac/Makefile.osx               |  129 +
 pd/portmidi/pm_mac/README_MAC.txt             |  163 +
 pd/portmidi/pm_mac/finddefault.c              |   57 +
 .../pm_mac/pm_mac.xcodeproj/project.pbxproj   |  594 ++
 pd/portmidi/pm_mac/pmdefaults/make/build.xml  |   87 +
 .../pm_mac/pmdefaults/make/find-classrefs.sh  |   31 +
 .../resources/English.lproj/Credits.rtf       |   14 +
 .../resources/English.lproj/InfoPlist.strings |  Bin 0 -> 220 bytes
 .../pm_mac/pmdefaults/resources/Info.plist    |   40 +
 .../pm_mac/pmdefaults/resources/Manifest      |    1 +
 pd/portmidi/pm_mac/pmmac.c                    |   25 +-
 pd/portmidi/pm_mac/pmmac.h                    |    0
 pd/portmidi/pm_mac/pmmacosxcm.c               |  206 +-
 pd/portmidi/pm_mac/pmmacosxcm.h               |    4 +-
 pd/portmidi/pm_mac/readbinaryplist.c          | 1115 ++++
 pd/portmidi/pm_mac/readbinaryplist.h          |   88 +
 pd/portmidi/pm_mingw/README-MINGW.txt         |   11 +
 pd/portmidi/pm_mingw/eclipse/README.txt       |   23 +
 pd/portmidi/pm_mingw/eclipse/dot-cproject     |  710 +++
 pd/portmidi/pm_mingw/eclipse/dot-project      |   69 +
 pd/portmidi/pm_mingw/msys/README-MSYS.txt     |    8 +
 pd/portmidi/pm_python/README_PYTHON.txt       |   34 +
 pd/portmidi/pm_python/pyportmidi/__init__.py  |    3 +
 .../pm_python/pyportmidi/_pyportmidi.c        | 5663 +++++++++++++++++
 .../pm_python/pyportmidi/_pyportmidi.pyx      |  537 ++
 pd/portmidi/pm_python/pyportmidi/midi.py      |  566 ++
 pd/portmidi/pm_python/setup.py                |  185 +
 pd/portmidi/pm_qt/README_QT.txt               |   15 +
 pd/portmidi/pm_qt/portmidi.pro                |   47 +
 pd/portmidi/pm_test/CMakeLists.txt            |   26 +
 pd/portmidi/pm_test/latency.c                 |  290 +
 pd/portmidi/pm_test/latency.vcproj            |  148 +
 pd/portmidi/pm_test/midiclock.c               |  287 +
 pd/portmidi/pm_test/midiclock.vcproj          |  148 +
 pd/portmidi/pm_test/midithread.c              |  329 +
 pd/portmidi/pm_test/midithread.vcproj         |  148 +
 pd/portmidi/pm_test/midithru.c                |  366 ++
 pd/portmidi/pm_test/midithru.vcproj           |  148 +
 pd/portmidi/pm_test/mm.c                      |  572 ++
 pd/portmidi/pm_test/mm.vcproj                 |  148 +
 pd/portmidi/pm_test/qtest.c                   |  174 +
 pd/portmidi/pm_test/qtest.vcproj              |  148 +
 pd/portmidi/pm_test/sysex.c                   |  528 ++
 pd/portmidi/pm_test/sysex.vcproj              |  148 +
 pd/portmidi/pm_test/test.c                    |  489 ++
 pd/portmidi/pm_test/test.vcproj               |  148 +
 pd/portmidi/pm_test/txdata.syx                |  257 +
 pd/portmidi/pm_win/README_WIN.txt             |  218 +-
 pd/portmidi/pm_win/clean_cmake.bat            |    6 +
 pd/portmidi/pm_win/clean_up_vcproj.awk        |   70 +
 pd/portmidi/pm_win/clean_up_vcproj.bat        |   76 +
 pd/portmidi/pm_win/copy-dll.bat               |   17 -
 pd/portmidi/pm_win/debugging_dlls.txt         |    0
 pd/portmidi/pm_win/pm_dll.dsp                 |  107 -
 pd/portmidi/pm_win/pmdll.c                    |   49 -
 pd/portmidi/pm_win/pmdll.h                    |    5 -
 pd/portmidi/pm_win/pmwin.c                    |  101 +-
 pd/portmidi/pm_win/pmwinmm.c                  |  149 +-
 pd/portmidi/pm_win/pmwinmm.h                  |    0
 pd/portmidi/pm_win/static.cmake               |   16 +
 pd/portmidi/portmidi.sln                      |  147 +
 pd/portmidi/portmidi_cdt.zip                  |  Bin 0 -> 210271 bytes
 pd/portmidi/portmusic_logo.png                |  Bin 0 -> 753 bytes
 pd/portmidi/porttime/porttime-VC8.vcproj      |  225 +
 pd/portmidi/porttime/porttime.c               |    0
 pd/portmidi/porttime/porttime.dsp             |    0
 pd/portmidi/porttime/porttime.h               |  128 +-
 pd/portmidi/porttime/porttime.vcproj          |  184 +
 pd/portmidi/porttime/ptlinux.c                |   15 +-
 pd/portmidi/porttime/ptmacosx_cf.c            |    5 +
 pd/portmidi/porttime/ptmacosx_mach.c          |    9 +-
 pd/portmidi/porttime/ptwinmm.c                |   19 +-
 140 files changed, 24451 insertions(+), 2651 deletions(-)
 create mode 100644 pd/portmidi/ALL_BUILD.vcproj
 create mode 100644 pd/portmidi/CMakeLists.txt
 create mode 100644 pd/portmidi/Doxyfile
 mode change 100644 => 100755 pd/portmidi/README.txt
 create mode 100644 pd/portmidi/ZERO_CHECK.vcproj
 create mode 100644 pd/portmidi/pm_cl/README_CL.txt
 create mode 100644 pd/portmidi/pm_cl/cffi-portmidi.lisp
 create mode 100644 pd/portmidi/pm_cl/test-no-cm.lisp
 create mode 100644 pd/portmidi/pm_common/CMakeLists.txt
 mode change 100644 => 100755 pd/portmidi/pm_common/pminternal.h
 create mode 100644 pd/portmidi/pm_common/pmjni.vcproj
 mode change 100644 => 100755 pd/portmidi/pm_common/pmutil.c
 mode change 100644 => 100755 pd/portmidi/pm_common/pmutil.h
 create mode 100644 pd/portmidi/pm_common/portmidi-dynamic.vcproj
 create mode 100644 pd/portmidi/pm_common/portmidi-static.vcproj
 mode change 100644 => 100755 pd/portmidi/pm_common/portmidi.c
 mode change 100644 => 100755 pd/portmidi/pm_common/portmidi.h
 create mode 100644 pd/portmidi/pm_csharp/README.txt
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/AssemblyInfo.cpp
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/ReadMe.txt
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/Stdafx.cpp
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/Stdafx.h
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/app.ico
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/app.rc
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/pm_managed.cpp
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/pm_managed.h
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/pm_managed.vcproj
 create mode 100755 pd/portmidi/pm_csharp/pm_managed/resource.h
 create mode 100644 pd/portmidi/pm_dylib/CMakeLists.txt
 create mode 100644 pd/portmidi/pm_dylib/README.txt
 create mode 100644 pd/portmidi/pm_dylib/portmidi-dynamic.vcproj
 create mode 100644 pd/portmidi/pm_java/CMakeLists.txt
 create mode 100644 pd/portmidi/pm_java/JavaExe.exe
 create mode 100644 pd/portmidi/pm_java/README.txt
 create mode 100644 pd/portmidi/pm_java/UpdateRsrcJavaExe.exe
 create mode 100644 pd/portmidi/pm_java/jportmidi/JPortMidi.java
 create mode 100644 pd/portmidi/pm_java/jportmidi/JPortMidiApi.java
 create mode 100644 pd/portmidi/pm_java/jportmidi/JPortMidiException.java
 create mode 100644 pd/portmidi/pm_java/mac-make.sh
 create mode 100644 pd/portmidi/pm_java/make.bat
 create mode 100644 pd/portmidi/pm_java/pmdefaults-setup-script.iss
 create mode 100644 pd/portmidi/pm_java/pmdefaults/PmDefaults.java
 create mode 100644 pd/portmidi/pm_java/pmdefaults/PmDefaultsFrame.java
 create mode 100644 pd/portmidi/pm_java/pmdefaults/README.txt
 create mode 100644 pd/portmidi/pm_java/pmdefaults/manifest.txt
 create mode 100755 pd/portmidi/pm_java/pmdefaults/pmdefaults
 create mode 100644 pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.bmp
 create mode 100644 pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.gif
 create mode 100644 pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.png
 create mode 100644 pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.xcf
 create mode 100644 pd/portmidi/pm_java/pmdefaults/pmdefaults-license.txt
 create mode 100644 pd/portmidi/pm_java/pmdefaults/pmdefaults.icns
 create mode 100644 pd/portmidi/pm_java/pmdefaults/pmdefaults.ico
 create mode 100644 pd/portmidi/pm_java/pmdefaults/portmusic_logo.png
 create mode 100644 pd/portmidi/pm_java/pmdefaults/readme-win32.txt
 create mode 100644 pd/portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h
 create mode 100644 pd/portmidi/pm_java/pmjni/pmjni-VC8.vcproj
 create mode 100644 pd/portmidi/pm_java/pmjni/pmjni.c
 create mode 100644 pd/portmidi/pm_java/pmjni/pmjni.rc
 create mode 100644 pd/portmidi/pm_java/setup/pmdefaults-setup.exe
 mode change 100644 => 100755 pd/portmidi/pm_linux/README_LINUX.txt
 create mode 100644 pd/portmidi/pm_linux/finddefault.c
 mode change 100644 => 100755 pd/portmidi/pm_linux/pmlinux.c
 mode change 100644 => 100755 pd/portmidi/pm_linux/pmlinux.h
 mode change 100644 => 100755 pd/portmidi/pm_linux/pmlinuxalsa.c
 mode change 100644 => 100755 pd/portmidi/pm_linux/pmlinuxalsa.h
 create mode 100755 pd/portmidi/pm_mac/Makefile.osx
 create mode 100644 pd/portmidi/pm_mac/README_MAC.txt
 create mode 100644 pd/portmidi/pm_mac/finddefault.c
 create mode 100755 pd/portmidi/pm_mac/pm_mac.xcodeproj/project.pbxproj
 create mode 100644 pd/portmidi/pm_mac/pmdefaults/make/build.xml
 create mode 100755 pd/portmidi/pm_mac/pmdefaults/make/find-classrefs.sh
 create mode 100644 pd/portmidi/pm_mac/pmdefaults/resources/English.lproj/Credits.rtf
 create mode 100644 pd/portmidi/pm_mac/pmdefaults/resources/English.lproj/InfoPlist.strings
 create mode 100644 pd/portmidi/pm_mac/pmdefaults/resources/Info.plist
 create mode 100644 pd/portmidi/pm_mac/pmdefaults/resources/Manifest
 mode change 100644 => 100755 pd/portmidi/pm_mac/pmmac.c
 mode change 100644 => 100755 pd/portmidi/pm_mac/pmmac.h
 mode change 100644 => 100755 pd/portmidi/pm_mac/pmmacosxcm.c
 mode change 100644 => 100755 pd/portmidi/pm_mac/pmmacosxcm.h
 create mode 100644 pd/portmidi/pm_mac/readbinaryplist.c
 create mode 100644 pd/portmidi/pm_mac/readbinaryplist.h
 create mode 100644 pd/portmidi/pm_mingw/README-MINGW.txt
 create mode 100644 pd/portmidi/pm_mingw/eclipse/README.txt
 create mode 100644 pd/portmidi/pm_mingw/eclipse/dot-cproject
 create mode 100644 pd/portmidi/pm_mingw/eclipse/dot-project
 create mode 100644 pd/portmidi/pm_mingw/msys/README-MSYS.txt
 create mode 100644 pd/portmidi/pm_python/README_PYTHON.txt
 create mode 100644 pd/portmidi/pm_python/pyportmidi/__init__.py
 create mode 100644 pd/portmidi/pm_python/pyportmidi/_pyportmidi.c
 create mode 100644 pd/portmidi/pm_python/pyportmidi/_pyportmidi.pyx
 create mode 100644 pd/portmidi/pm_python/pyportmidi/midi.py
 create mode 100644 pd/portmidi/pm_python/setup.py
 create mode 100644 pd/portmidi/pm_qt/README_QT.txt
 create mode 100644 pd/portmidi/pm_qt/portmidi.pro
 create mode 100644 pd/portmidi/pm_test/CMakeLists.txt
 create mode 100755 pd/portmidi/pm_test/latency.c
 create mode 100755 pd/portmidi/pm_test/latency.vcproj
 create mode 100644 pd/portmidi/pm_test/midiclock.c
 create mode 100644 pd/portmidi/pm_test/midiclock.vcproj
 create mode 100755 pd/portmidi/pm_test/midithread.c
 create mode 100755 pd/portmidi/pm_test/midithread.vcproj
 create mode 100755 pd/portmidi/pm_test/midithru.c
 create mode 100755 pd/portmidi/pm_test/midithru.vcproj
 create mode 100755 pd/portmidi/pm_test/mm.c
 create mode 100755 pd/portmidi/pm_test/mm.vcproj
 create mode 100644 pd/portmidi/pm_test/qtest.c
 create mode 100755 pd/portmidi/pm_test/qtest.vcproj
 create mode 100755 pd/portmidi/pm_test/sysex.c
 create mode 100755 pd/portmidi/pm_test/sysex.vcproj
 create mode 100755 pd/portmidi/pm_test/test.c
 create mode 100755 pd/portmidi/pm_test/test.vcproj
 create mode 100755 pd/portmidi/pm_test/txdata.syx
 mode change 100644 => 100755 pd/portmidi/pm_win/README_WIN.txt
 create mode 100644 pd/portmidi/pm_win/clean_cmake.bat
 create mode 100644 pd/portmidi/pm_win/clean_up_vcproj.awk
 create mode 100644 pd/portmidi/pm_win/clean_up_vcproj.bat
 delete mode 100644 pd/portmidi/pm_win/copy-dll.bat
 mode change 100644 => 100755 pd/portmidi/pm_win/debugging_dlls.txt
 delete mode 100644 pd/portmidi/pm_win/pm_dll.dsp
 delete mode 100644 pd/portmidi/pm_win/pmdll.c
 delete mode 100644 pd/portmidi/pm_win/pmdll.h
 mode change 100644 => 100755 pd/portmidi/pm_win/pmwin.c
 mode change 100644 => 100755 pd/portmidi/pm_win/pmwinmm.c
 mode change 100644 => 100755 pd/portmidi/pm_win/pmwinmm.h
 create mode 100644 pd/portmidi/pm_win/static.cmake
 create mode 100755 pd/portmidi/portmidi.sln
 create mode 100644 pd/portmidi/portmidi_cdt.zip
 create mode 100644 pd/portmidi/portmusic_logo.png
 create mode 100644 pd/portmidi/porttime/porttime-VC8.vcproj
 mode change 100644 => 100755 pd/portmidi/porttime/porttime.c
 mode change 100644 => 100755 pd/portmidi/porttime/porttime.dsp
 mode change 100644 => 100755 pd/portmidi/porttime/porttime.h
 create mode 100755 pd/portmidi/porttime/porttime.vcproj
 mode change 100644 => 100755 pd/portmidi/porttime/ptlinux.c
 mode change 100644 => 100755 pd/portmidi/porttime/ptmacosx_cf.c
 mode change 100644 => 100755 pd/portmidi/porttime/ptmacosx_mach.c
 mode change 100644 => 100755 pd/portmidi/porttime/ptwinmm.c

diff --git a/pd/portmidi/ALL_BUILD.vcproj b/pd/portmidi/ALL_BUILD.vcproj
new file mode 100644
index 000000000..a04c3d528
--- /dev/null
+++ b/pd/portmidi/ALL_BUILD.vcproj
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="ALL_BUILD"
+	ProjectGUID="{E1C2664B-91BB-4D4F-868C-433164F81101}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="ALL_BUILD.dir\Debug"
+			ConfigurationType="10"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				ExceptionHandling="0"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="ALL_BUILD.dir\Release"
+			ConfigurationType="10"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				ExceptionHandling="0"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+			<File
+				RelativePath=".\CMakeFiles\ALL_BUILD">
+			</File>
+		<Filter
+			Name="CMake Rules"
+			Filter="">
+			<File
+				RelativePath=".\CMakeFiles\ALL_BUILD.rule">
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+					Name="VCCustomBuildTool"
+					Description="Build all projects"
+					CommandLine=""
+					AdditionalDependencies=".\CMakeFiles\ALL_BUILD.rule"
+					Outputs=".\CMakeFiles\ALL_BUILD"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+					Name="VCCustomBuildTool"
+					Description="Build all projects"
+					CommandLine=""
+					AdditionalDependencies=".\CMakeFiles\ALL_BUILD.rule"
+					Outputs=".\CMakeFiles\ALL_BUILD"/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/CHANGELOG.txt b/pd/portmidi/CHANGELOG.txt
index fd118e814..c2a083a56 100644
--- a/pd/portmidi/CHANGELOG.txt
+++ b/pd/portmidi/CHANGELOG.txt
@@ -1,4 +1,38 @@
 /* CHANGELOG FOR PORTMIDI
+ *
+ * 19Oct09 Roger Dannenberg
+ * - Changes dynamic library names from portmidi_d to portmidi to
+ *   be backward-compatible with programs expecting a library by
+ *   the old name.
+ *
+ * 04Oct09 Roger Dannenberg
+ * - Converted to using Cmake.
+ * - Renamed static and dynamic library files to portmidi_s and portmidi_d
+ * - Eliminated VC9 and VC8 files (went back to simply test.vcproj, etc.,
+ *   use Cmake to switch from the provided VC9 files to VC8 or other)
+ * - Many small changes to prepare for 64-bit architectures (but only 
+ *   tested on 32-bit machines)
+ *
+ * 16Jun09 Roger Dannenberg
+ * - Started using Microsoft Visual C++ Version 9 (Express). Converted
+ * all *-VC9.vcproj file to *.vcproj and renamed old project files to 
+ * *-VC8.proj. Previously, output from VC9 went to special VC9 files,
+ * that breaks any program or script looking for output in release or
+ * debug files, so now both compiler version output to the same folders.
+ * Now, debug version uses static linking with debug DLL runtime, and 
+ * release version uses static linking with statically linked runtime.
+ * Converted to Inno Setup and worked on scripts to make things build
+ * properly, especially pmdefaults.
+ *
+ * 02Jan09 Roger Dannenberg
+ * - Created Java interface and wrote PmDefaults application to set
+ *   values for Pm_GetDefaultInputDeviceID() and 
+ *   Pm_GetDefaultOutputDeviceID(). Other fixes.
+ *
+ * 19Jun08 Roger Dannenberg and Austin Sung
+ * - Removed USE_DLL_FOR_CLEANUP -- Windows 2000 through Vista seem to be
+ *   fixed now, and can recover if MIDI ports are left open
+ * - Various other minor patches
  *
  * 17Jan07 Roger Dannenberg
  * - Lots more help for Common Lisp user in pm_cl
diff --git a/pd/portmidi/CMakeLists.txt b/pd/portmidi/CMakeLists.txt
new file mode 100644
index 000000000..4919b78df
--- /dev/null
+++ b/pd/portmidi/CMakeLists.txt
@@ -0,0 +1,77 @@
+# portmidi
+# Roger B. Dannenberg
+# 20 Sep 2009
+
+cmake_minimum_required(VERSION 2.6)
+
+if(UNIX)
+  # allow user to set Release or Debug
+  set(CMAKE_BUILD_TYPE Release CACHE STRING 
+      "Semicolon-separate list of supported configuration types")
+  # set default directories but don't override cached values...
+  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CACHEFILE_DIR}/${CMAKE_BUILD_TYPE}
+      CACHE STRING "libraries go here")
+  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CACHEFILE_DIR}/${CMAKE_BUILD_TYPE}
+      CACHE STRING "libraries go here")
+  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY 
+      ${CMAKE_CACHEFILE_DIR}/${CMAKE_BUILD_TYPE}
+      CACHE STRING "executables go here")
+
+else(UNIX)
+  # this does not seem to work for xcode:
+  set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING 
+      "Semicolon-separate list of supported configuration types")
+endif(UNIX)
+
+#set(CMAKE_RELATIVE_PATHS ON CACHE STRING "avoid absolute paths" FORCE)
+
+# Clear out the built-in C++ compiler and link flags for each of the 
+# unused configurations.
+set(CMAKE_CXX_FLAGS_MINSIZEREL "" CACHE INTERNAL "Unused")
+set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "Unused")
+set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "Unused")
+set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "" CACHE INTERNAL "Unused")
+set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "Unused")
+set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "Unused")
+set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "Unused")
+set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "" CACHE INTERNAL "Unused")
+
+set(CMAKE_OSX_ARCHITECTURES i386 ppc x86_64 CACHE STRING "change to needed architecture for a smaller library" FORCE)
+
+PROJECT(portmidi)
+
+if(UNIX)
+  # Problem: if there was an old Debug build and you change
+  #  CMAKE_BUILD_TYPE to Release, then the OUTPUT_DIRECTORY's will
+  #  still be Debug. Try to fix this by checking if the DIRECTORY's
+  #  look wrong, and if so, force them to the defaults:
+  if(CMAKE_BUILD_TYPE MATCHES "Debug")
+    set(BAD_DIR "Release")
+  else(CMAKE_BUILD_TYPE MATCHES "Debug")
+    set(BAD_DIR "Debug")
+  endif(CMAKE_BUILD_TYPE MATCHES "Debug")
+  # use library as reference -- if you give it a non-BAD_DIR location
+  # then every other path is left alone
+  if(CMAKE_LIBRARY_OUTPUT_DIRECTORY MATCHES ${BAD_DIR})
+    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY 
+        ${CMAKE_CACHEFILE_DIR}/${CMAKE_BUILD_TYPE}
+        CACHE STRING "executables go here" FORCE)
+    set(CMAKE_LIBRARY_OUTPUT_DIRECTORY 
+        ${CMAKE_CACHEFILE_DIR}/${CMAKE_BUILD_TYPE}
+        CACHE STRING "libraries go here" FORCE)
+    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY 
+        ${CMAKE_CACHEFILE_DIR}/${CMAKE_BUILD_TYPE}
+        CACHE STRING "libraries go here" FORCE)
+  endif(CMAKE_LIBRARY_OUTPUT_DIRECTORY MATCHES ${BAD_DIR})
+endif(UNIX)
+
+include_directories(pm_common porttime)
+add_subdirectory(pm_common)
+
+add_subdirectory(pm_test)
+
+add_subdirectory(pm_dylib)
+
+# Cannot figure out how to make an xcode Java application with CMake
+add_subdirectory(pm_java)
+
diff --git a/pd/portmidi/Doxyfile b/pd/portmidi/Doxyfile
new file mode 100644
index 000000000..0adb68293
--- /dev/null
+++ b/pd/portmidi/Doxyfile
@@ -0,0 +1,1472 @@
+# Doxyfile 1.5.5
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+#       TAG = value [value, ...]
+# For lists items can also be appended using:
+#       TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file 
+# that follow. The default is UTF-8 which is also the encoding used for all 
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
+# iconv built into libc) for the transcoding. See 
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+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           = PortMidi
+
+# 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         = 2.2.x
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
+# base path where the generated documentation will be put. 
+# If a relative path is entered, it will be relative to the location 
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = .
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
+# 4096 sub-directories (in 2 levels) under the output directory of each output 
+# format and will distribute the generated files over these directories. 
+# Enabling this option can be useful when feeding doxygen a huge amount of 
+# source files, where putting all generated files in the same directory would 
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS         = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
+# documentation generated by doxygen is written. Doxygen will use this 
+# information to generate all constant output in the proper language. 
+# The default language is English, other supported languages are: 
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
+# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
+# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
+# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
+# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
+# Spanish, Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
+# include brief member descriptions after the members that are listed in 
+# the file and class documentation (similar to JavaDoc). 
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
+# the brief description of a member or function before the detailed description. 
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator 
+# that is used to form the text in various listings. Each string 
+# in this list, if found as the leading text of the brief description, will be 
+# stripped from the text and the result after processing the whole list, is 
+# used as the annotated text. Otherwise, the brief description is used as-is. 
+# If left blank, the following values are used ("$name" is automatically 
+# replaced with the name of the entity): "The $name class" "The $name widget" 
+# "The $name file" "is" "provides" "specifies" "contains" 
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF       = 
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
+# Doxygen will generate a detailed section even if there is only a brief 
+# description.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
+# inherited members of a class in the documentation of that class as if those 
+# members were ordinary class members. Constructors, destructors and assignment 
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
+# path before files name in the file list and in the header files. If set 
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES        = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
+# can be used to strip a user-defined part of the path. Stripping is 
+# only done if one of the specified strings matches the left-hand part of 
+# the path. The tag can be used to show relative paths in the file list. 
+# If left blank the directory from which doxygen is run is used as the 
+# path to strip.
+
+STRIP_FROM_PATH        = 
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
+# the path mentioned in the documentation of a class, which tells 
+# the reader which header file to include in order to use a class. 
+# If left blank only the name of the header file containing the class 
+# definition is used. Otherwise one should specify the include paths that 
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH    = 
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
+# (but less readable) file names. This can be useful is your file systems 
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
+# will interpret the first line (until the first dot) of a JavaDoc-style 
+# comment as the brief description. If set to NO, the JavaDoc 
+# comments will behave just like regular Qt-style comments 
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF      = YES
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
+# interpret the first line (until the first dot) of a Qt-style 
+# comment as the brief description. If set to NO, the comments 
+# will behave just like regular Qt-style comments (thus requiring 
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
+# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
+# comments) as a brief description. This used to be the default behaviour. 
+# The new default is to treat a multi-line C++ comment block as a detailed 
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
+# member inherits the documentation from any documented member that it 
+# re-implements.
+
+INHERIT_DOCS           = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
+# a new page for each member. If set to NO, the documentation of a member will 
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE               = 8
+
+# This tag can be used to specify a number of aliases that acts 
+# as commands in the documentation. An alias has the form "name=value". 
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
+# put the command \sideeffect (or @sideeffect) in the documentation, which 
+# will result in a user-defined paragraph with heading "Side Effects:". 
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES                = 
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
+# sources only. Doxygen will then generate output that is more tailored for C. 
+# For instance, some of the names that are used will be different. The list 
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Java. For instance, namespaces will be presented as packages, qualified 
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
+# sources only. Doxygen will then generate output that is more tailored for 
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
+# sources. Doxygen will then generate output that is tailored for 
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
+# to include (a tag file for) the STL sources as input, then you should 
+# set this tag to YES in order to let doxygen match functions declarations and 
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
+# func(std::string) {}). This also make the inheritance and collaboration 
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
+# Doxygen will parse them like normal C++ but will assume all classes use public 
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter 
+# and setter methods for a property. Setting this option to YES (the default) 
+# will make doxygen to replace the get and set methods by a property in the 
+# documentation. This will only work if the methods are indeed getting or 
+# setting a simple type. If this is not the case, or you want to show the 
+# methods anyway, you should set this option to NO.
+# 1.5.7
+#IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
+# tag is set to YES, then doxygen will reuse the documentation of the first 
+# member in the group (if any) for the other members of the group. By default 
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
+# the same type (for instance a group of public functions) to be put as a 
+# subgroup of that type (e.g. under the Public Functions section). Set it to 
+# NO to prevent subgrouping. Alternatively, this can be done per class using 
+# the \nosubgrouping command.
+
+SUBGROUPING            = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
+# is documented as struct, union, or enum with the name of the typedef. So 
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
+# with name TypeT. When disabled the typedef will appear as a member of a file, 
+# namespace, or class. And the struct will be named TypeS. This can typically 
+# be useful for C code in case the coding convention dictates that all compound 
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is 
+# probably good enough. For larger projects a too small cache size can cause 
+# doxygen to be busy swapping symbols to and from disk most of the time 
+# causing a significant performance penality. 
+# If the system has enough physical memory increasing the cache will improve the 
+# performance by keeping more symbols in memory. Note that the value works on 
+# a logarithmic scale so increasing the size by one will rougly double the 
+# memory usage. The cache size is given by this formula: 
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
+# corresponding to a cache size of 2^16 = 65536 symbols
+# 1.5.7
+# SYMBOL_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
+# documentation are documented, even if no documentation was available. 
+# Private class members and static file members will be hidden unless 
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL            = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
+# will be included in the documentation.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file 
+# will be included in the documentation.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
+# defined locally in source files will be included in the documentation. 
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES  = NO
+
+# This flag is only useful for Objective-C code. When set to YES local 
+# methods, which are defined in the implementation section but not in 
+# the interface are included in the documentation. 
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be 
+# extracted and appear in the documentation as a namespace called 
+# 'anonymous_namespace{file}', where file will be replaced with the base 
+# name of the file that contains the anonymous namespace. By default 
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
+# undocumented members of documented classes, files or namespaces. 
+# If set to NO (the default) these members will be included in the 
+# various overviews, but no documentation section is generated. 
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
+# undocumented classes that are normally visible in the class hierarchy. 
+# If set to NO (the default) these classes will be included in the various 
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
+# friend (class|struct|union) declarations. 
+# If set to NO (the default) these declarations will be included in the 
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
+# documentation blocks found inside the body of a function. 
+# If set to NO (the default) these blocks will be appended to the 
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation 
+# that is typed after a \internal command is included. If the tag is set 
+# to NO (the default) then the documentation will be excluded. 
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS          = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
+# file names in lower-case letters. If set to YES upper-case letters are also 
+# allowed. This is useful if you have classes or files whose names only differ 
+# in case and if your file system supports case sensitive file names. Windows 
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
+# will show members with their full class and namespace scopes in the 
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
+# will put a list of the files that are included by a file in the documentation 
+# of that file.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
+# is inserted in the documentation for inline members.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
+# will sort the (detailed) documentation of file and class members 
+# alphabetically by member name. If set to NO the members will appear in 
+# declaration order.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
+# brief documentation of file, namespace and class members alphabetically 
+# by member name. If set to NO (the default) the members will appear in 
+# declaration order.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
+# hierarchy of group names into alphabetical order. If set to NO (the default) 
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
+# sorted by fully-qualified names, including namespaces. If set to 
+# NO (the default), the class list will be sorted only by class name, 
+# not including the namespace part. 
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the 
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or 
+# disable (NO) the todo list. This list is created by putting \todo 
+# commands in the documentation.
+
+GENERATE_TODOLIST      = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or 
+# disable (NO) the test list. This list is created by putting \test 
+# commands in the documentation.
+
+GENERATE_TESTLIST      = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or 
+# disable (NO) the bug list. This list is created by putting \bug 
+# commands in the documentation.
+
+GENERATE_BUGLIST       = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
+# disable (NO) the deprecated list. This list is created by putting 
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional 
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS       = 
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
+# the initial value of a variable or define consists of for it to appear in 
+# the documentation. If the initializer consists of more lines than specified 
+# here it will be hidden. Use a value of 0 to hide initializers completely. 
+# The appearance of the initializer of individual variables and defines in the 
+# documentation can be controlled using \showinitializer or \hideinitializer 
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES  = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
+# at the bottom of the documentation of classes and structs. If set to YES the 
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES        = YES
+
+# If the sources in your project are distributed over multiple directories 
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES       = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the 
+# Folder Tree View (if specified). The default is YES.
+# 1.5.7
+# SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
+# Namespaces page.  This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+# 1.5.7
+# SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
+# doxygen should invoke to get the current version for each file (typically from 
+# the version control system). Doxygen will invoke the program by executing (via 
+# popen()) the command <command> <input-file>, where <command> is the value of 
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
+# provided by doxygen. Whatever the program writes to standard output 
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER    = 
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
+# doxygen. The layout file controls the global structure of the generated output files 
+# in an output format independent way. The create the layout file that represents 
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
+# of the layout file.
+# 1.5.7
+# LAYOUT_FILE            = 
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated 
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET                  = YES
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are 
+# generated by doxygen. Possible values are YES and NO. If left blank 
+# NO is used.
+
+WARNINGS               = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED   = NO
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
+# potential errors in the documentation, such as not documenting some 
+# parameters in a documented function, or documenting parameters that 
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR      = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for 
+# functions that are documented, but have no documentation for their parameters 
+# or return value. If set to NO (the default) doxygen will only warn about 
+# wrong or incomplete parameter documentation, but not about the absence of 
+# documentation.
+
+WARN_NO_PARAMDOC       = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that 
+# doxygen can produce. The string should contain the $file, $line, and $text 
+# tags, which will be replaced by the file and line number from which the 
+# warning originated and the warning text. Optionally the format may contain 
+# $version, which will be replaced by the version of the file (if it could 
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning 
+# and error messages should be written. If left blank the output is written 
+# to stderr.
+
+WARN_LOGFILE           = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain 
+# documented source files. You may enter file names like "myfile.cpp" or 
+# directories like "/usr/src/myproject". Separate the files or directories 
+# with spaces.
+
+INPUT                  = \
+		         pm_common/portmidi.h \
+		         pm_common/portmidi.c \
+
+# This tag can be used to specify the character encoding of the source files 
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
+# also the default input encoding. Doxygen uses libiconv (or the iconv built 
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
+# the list of possible encodings.
+
+INPUT_ENCODING         = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the 
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank the following patterns are tested: 
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS          = *.h \
+                         *.c 
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
+# should be searched for input files as well. Possible values are YES and NO. 
+# If left blank NO is used.
+
+RECURSIVE              = NO
+
+# The EXCLUDE tag can be used to specify files and/or directories that should 
+# excluded from the INPUT source files. This way you can easily exclude a 
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
+# directories that are symbolic links (a Unix filesystem feature) are excluded 
+# from the input.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the 
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
+# certain files from those directories. Note that the wildcards are matched 
+# against the file with absolute path, so to exclude all test directories 
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       = 
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
+# (namespaces, classes, functions, etc.) that should be excluded from the 
+# output. The symbol name can be a fully qualified name, a word, or if the 
+# wildcard * is used, a substring. Examples: ANamespace, AClass, 
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        = 
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or 
+# directories that contain example code fragments that are included (see 
+# the \include command).
+
+EXAMPLE_PATH           = ./pm_test
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
+# and *.h) to filter out the source-files in the directories. If left 
+# blank all files are included.
+
+EXAMPLE_PATTERNS       = *.cxx \
+                         *.h \
+                         *.H \
+                         *.fl
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
+# searched for input files to be used with the \include or \dontinclude 
+# commands irrespective of the value of the RECURSIVE tag. 
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or 
+# directories that contain image that are included in the documentation (see 
+# the \image command).
+
+IMAGE_PATH             = 
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should 
+# invoke to filter for each input file. Doxygen will invoke the filter program 
+# by executing (via popen()) the command <filter> <input-file>, where <filter> 
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
+# input file. Doxygen will then use the output that the filter program writes 
+# to standard output.  If FILTER_PATTERNS is specified, this tag will be 
+# ignored.
+
+INPUT_FILTER           = 
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
+# basis.  Doxygen will compare the file name with each pattern and apply the 
+# filter if there is a match.  The filters are a list of the form: 
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
+# is applied to all files.
+
+FILTER_PATTERNS        = 
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
+# INPUT_FILTER) will be used to filter the input files when producing source 
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES    = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
+# be generated. Documented entities will be cross-referenced with these sources. 
+# Note: To get rid of all source code in the generated output, make sure also 
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER         = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body 
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
+# doxygen to hide any special comment blocks from generated source code 
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS    = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES 
+# then for each documented function all documented 
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES 
+# then for each documented function all documented entities 
+# called/used by that function will be listed.
+
+REFERENCES_RELATION    = YES
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.  Otherwise they will link to the documentstion.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code 
+# will point to the HTML generated by the htags(1) tool instead of doxygen 
+# built-in source browser. The htags tool is part of GNU's global source 
+# tagging system (see http://www.gnu.org/software/global/global.html). You 
+# will need version 4.8.6 or higher.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
+# will generate a verbatim copy of the header file for each class for 
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX    = 5
+
+# In case all classes in a project start with a common prefix, all 
+# classes will be put under the same header in the alphabetical index. 
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX          = Pm_
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
+# generate HTML output.
+
+GENERATE_HTML          = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard header.
+
+HTML_HEADER            = 
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
+# each generated HTML page. If it is left blank doxygen will generate a 
+# standard footer.
+
+HTML_FOOTER            = 
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
+# style sheet that is used by each HTML page. It can be used to 
+# fine-tune the look of the HTML output. If the tag is left blank doxygen 
+# will generate a default style sheet. Note that doxygen will try to copy 
+# the style sheet file to the HTML output directory, so don't put your own 
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET        = 
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
+# files or namespaces will be aligned in HTML using tables. If set to 
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
+# documentation will contain sections that can be hidden and shown after the 
+# page has loaded. For this to work a browser that supports 
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files 
+# will be generated that can be used as input for Apple's Xcode 3 
+# integrated development environment, introduced with OSX 10.5 (Leopard). 
+# To create a documentation set, doxygen will generate a Makefile in the 
+# HTML output directory. Running make will produce the docset in that 
+# directory and running "make install" will install the docset in 
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
+# it at startup. 
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET        = YES
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
+# feed. A documentation feed provides an umbrella under which multiple 
+# documentation sets from a single provider (such as a company or product suite) 
+# can be grouped.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
+# should uniquely identify the documentation set bundle. This should be a 
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
+# will be generated that can be used as input for tools like the 
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP      = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
+# be used to specify the file name of the resulting .chm file. You 
+# can add a path in front of the file if the result should not be 
+# written to the html output directory.
+
+CHM_FILE               = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
+# be used to specify the location (absolute path including file name) of 
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION           = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
+# controls if a separate .chi index file is generated (YES) or that 
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI           = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+# 1.5.7
+# CHM_INDEX_ENCODING     = 
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
+# controls whether a binary table of contents is generated (YES) or a 
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members 
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND             = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
+# are set, an additional index file will be generated that can be used as input for 
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
+# HTML documentation.
+# 1.5.7
+# GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
+# be used to specify the file name of the resulting .qch file. 
+# The path specified is relative to the HTML output folder.
+# 1.5.7
+# QCH_FILE               = 
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.
+# 1.5.7
+# QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
+# Qt Help Project output. For more information please see 
+# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.
+# 1.5.7
+# QHP_VIRTUAL_FOLDER     = doc
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
+# be used to specify the location of Qt's qhelpgenerator. 
+# If non-empty doxygen will try to run qhelpgenerator on the generated 
+# .qhp file .
+# 1.5.7
+# QHG_LOCATION           = 
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
+# top of each HTML page. The value NO (the default) enables the index and 
+# the value YES disables it.
+
+DISABLE_INDEX          = NO
+
+# This tag can be used to set the number of enum values (range [1..20]) 
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to FRAME, a side panel will be generated
+# containing a tree-like index structure (just like the one that 
+# is generated for HTML Help). For this to work a browser that supports 
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
+# probably better off using the HTML help feature. Other possible values 
+# for this tag are: HIERARCHIES, which will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list;
+# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which
+# disables this behavior completely. For backwards compatibility with previous
+# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE
+# respectively.
+
+GENERATE_TREEVIEW      = YES
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
+# used to set the initial width (in pixels) of the frame in which the tree 
+# is shown.
+
+TREEVIEW_WIDTH         = 200
+
+# Use this tag to change the font size of Latex formulas included 
+# as images in the HTML documentation. The default is 10. Note that 
+# when you change the font size after a successful doxygen run you need 
+# to manually remove any form_*.png images from the HTML output directory 
+# to force them to be regenerated.
+# 1.5.7
+# FORMULA_FONTSIZE       = 10
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
+# generate Latex output.
+
+GENERATE_LATEX         = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
+# generate index for LaTeX. If left blank `makeindex' will be used as the 
+# default command name.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
+# LaTeX documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used 
+# by the printer. Possible values are: a4, a4wide, letter, legal and 
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE             = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES         = 
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
+# the generated latex document. The header should contain everything until 
+# the first chapter. If it is left blank doxygen will generate a 
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER           = 
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
+# contain links (just like the HTML output) instead of page references 
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
+# plain latex in the generated Makefile. Set this option to YES to get a 
+# higher quality PDF documentation.
+
+USE_PDFLATEX           = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
+# command to the generated LaTeX files. This will instruct LaTeX to keep 
+# running if errors occur, instead of asking the user for help. 
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE        = YES
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
+# include the index chapters (such as File Index, Compound Index, etc.) 
+# in the output.
+
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
+# The RTF output is optimized for Word 97 and may not look very pretty with 
+# other RTF readers or editors.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
+# RTF documents. This may be useful for small projects and may help to 
+# save some trees in general.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
+# will contain hyperlink fields. The RTF file will 
+# contain links (just like the HTML output) instead of page references. 
+# This makes the output suitable for online browsing using WORD or other 
+# programs which support those fields. 
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's 
+# config file, i.e. a series of assignments. You only have to provide 
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE    = 
+
+# Set optional variables used in the generation of an rtf document. 
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE    = 
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
+# generate man pages
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to 
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION          = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
+# then it will generate one additional man file for each entity 
+# documented in the real man page(s). These additional files 
+# only source the real man page, but without them the man command 
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will 
+# generate an XML file that captures the structure of 
+# the code including all documentation.
+
+GENERATE_XML           = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT             = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_SCHEMA             = 
+
+# The XML_DTD tag can be used to specify an XML DTD, 
+# which can be used by a validating XML parser to check the 
+# syntax of the XML files.
+
+XML_DTD                = 
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
+# dump the program listings (including syntax highlighting 
+# and cross-referencing information) to the XML output. Note that 
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
+# generate an AutoGen Definitions (see autogen.sf.net) file 
+# that captures the structure of the code including all 
+# documentation. Note that this feature is still experimental 
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
+# generate a Perl module file that captures the structure of 
+# the code including all documentation. Note that this 
+# feature is still experimental and incomplete at the 
+# moment.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
+# nicely formatted so it can be parsed by a human reader.  This is useful 
+# if you want to understand what is going on.  On the other hand, if this 
+# tag is set to NO the size of the Perl module output will be much smaller 
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file 
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
+# This is useful so different doxyrules.make files included by the same 
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX = 
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
+# evaluate all C-preprocessor directives found in the sources and include 
+# files.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
+# names in the source code. If set to NO (the default) only conditional 
+# compilation will be performed. Macro expansion can be done in a controlled 
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION        = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
+# then the macro expansion is limited to the macros specified with the 
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that 
+# contain include files that are not input files but should be processed by 
+# the preprocessor.
+
+INCLUDE_PATH           = 
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
+# patterns (like *.h and *.hpp) to filter out the header-files in the 
+# directories. If left blank, the patterns specified with FILE_PATTERNS will 
+# be used.
+
+INCLUDE_FILE_PATTERNS  = 
+
+# The PREDEFINED tag can be used to specify one or more macro names that 
+# are defined before the preprocessor is started (similar to the -D option of 
+# gcc). The argument of the tag is a list of macros of the form: name 
+# or name=definition (no spaces). If the definition and the = are 
+# omitted =1 is assumed. To prevent a macro definition from being 
+# undefined via #undef or recursively expanded use the := operator 
+# instead of the = operator.
+
+PREDEFINED             = FL_DOXYGEN \
+                         HAVE_CAIRO \
+                         HAVE_GL \
+                         HAVE_GL_OVERLAY \
+                         FL_EXPORT:=
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
+# this tag can be used to specify a list of macro names that should be expanded. 
+# The macro definition that is found in the sources will be used. 
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED      = 
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
+# doxygen's preprocessor will remove all function-like macros that are alone 
+# on a line, have an all uppercase name, and do not end with a semicolon. Such 
+# function macros are typically used for boiler-plate code, and will confuse 
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. 
+# Optionally an initial location of the external documentation 
+# can be added for each tagfile. The format of a tag file without 
+# this location is as follows: 
+#   TAGFILES = file1 file2 ... 
+# Adding location for the tag files is done as follows: 
+#   TAGFILES = file1=loc1 "file2 = loc2" ... 
+# where "loc1" and "loc2" can be relative or absolute paths or 
+# URLs. If a location is present for each tag, the installdox tool 
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen 
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES               = 
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE       = 
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
+# in the class index. If set to NO only the inherited external classes 
+# will be listed.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
+# in the modules index. If set to NO, only the current project's groups will 
+# be listed.
+
+EXTERNAL_GROUPS        = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script 
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
+# or super classes. Setting the tag to NO turns the diagrams off. Note that 
+# this option is superseded by the HAVE_DOT option below. This is only a 
+# fallback. It is recommended to install and use dot, since it yields more 
+# powerful graphs.
+
+CLASS_DIAGRAMS         = YES
+
+# You can define message sequence charts within doxygen comments using the \msc 
+# command. Doxygen will then run the mscgen tool (see 
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
+# the mscgen tool resides. If left empty the tool is assumed to be found in the 
+# default search path.
+
+MSCGEN_PATH            = 
+
+# If set to YES, the inheritance and collaboration graphs will hide 
+# inheritance and usage relations if the target is undocumented 
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
+# available from the path. This tool is part of Graphviz, a graph visualization 
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT               = NO
+
+# By default doxygen will write a font called FreeSans.ttf to the output 
+# directory and reference it in all dot files that doxygen generates. This 
+# font does not include all possible unicode characters however, so when you need 
+# these (or just want a differently looking font) you can specify the font name 
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
+# which can be done by putting it in a standard location or by setting the 
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
+# containing the font.
+# 1.5.7
+# DOT_FONTNAME           = FreeSans
+
+# By default doxygen will tell dot to use the output directory to look for the 
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
+# different font using DOT_FONTNAME you can set the path where dot 
+# can find it using this tag.
+# 1.5.7
+# DOT_FONTPATH           = 
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect inheritance relations. Setting this tag to YES will force the 
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH            = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for each documented class showing the direct and 
+# indirect implementation dependencies (inheritance, containment, and 
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
+# collaboration diagrams in a style similar to the OMG's Unified Modeling 
+# Language.
+
+UML_LOOK               = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the 
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
+# tags are set to YES then doxygen will generate a graph for each documented 
+# file showing the direct and indirect include dependencies of the file with 
+# other documented files.
+
+INCLUDE_GRAPH          = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
+# documented header file showing the documented files that directly or 
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
+# doxygen will generate a call dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable call graphs 
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
+# doxygen will generate a caller dependency graph for every global function 
+# or class method. Note that enabling this option will significantly increase 
+# the time of a run. So in most cases it will be better to enable caller 
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
+# then doxygen will show the dependencies a directory has on other directories 
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH        = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT       = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be 
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH               = 
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that 
+# contain dot files that are included in the documentation (see the 
+# \dotfile command).
+
+DOTFILE_DIRS           = 
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
+# nodes that will be shown in the graph. If the number of nodes in a graph 
+# becomes larger than this value, doxygen will truncate the graph, which is 
+# visualized by representing a node as a red box. Note that doxygen if the 
+# number of direct children of the root node in a graph is already larger than 
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
+# graphs generated by dot. A depth value of 3 means that only nodes reachable 
+# from the root by following a path via at most 3 edges will be shown. Nodes 
+# that lay further from the root node will be omitted. Note that setting this 
+# option to 1 or 2 may greatly reduce the computation time needed for large 
+# code bases. Also note that the size of a graph can be further restricted by 
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
+# background. This is disabled by default, because dot on Windows does not 
+# seem to support this out of the box. Warning: Depending on the platform used, 
+# enabling this option may lead to badly anti-aliased labels on the edges of 
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT        = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
+# files in one run (i.e. multiple -o and -T options on the command line). This 
+# makes dot run faster, but since only newer versions of dot (>1.8.10) 
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
+# generate a legend page explaining the meaning of the various boxes and 
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
+# remove the intermediate dot files that are used to generate 
+# the various graphs.
+
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be 
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE           = NO
diff --git a/pd/portmidi/README.txt b/pd/portmidi/README.txt
old mode 100644
new mode 100755
index 0ab950d03..32608231b
--- a/pd/portmidi/README.txt
+++ b/pd/portmidi/README.txt
@@ -1,7 +1,8 @@
 README for PortMidi
-Roger Dannenberg
 
-VERSION: this is the 17-Jan-07 version of PortMidi.
+Roger B. Dannenberg
+
+VERSION: please use "svn info" to get info.
 
 Documentation for PortMidi is found in pm_common/portmidi.h.
 
@@ -10,6 +11,10 @@ Additional documentation:
   - Linux: see pm_linux/README_LINUX.txt
   - Mac OSX: see pm_mac/README_MAC.txt
   - Common Lisp: see pm_cl/README_CL.txt
+  - Eclipse: see portmidi_cdt.zip (this was contributed as is; the dlls here
+        are now -- Sep 09 -- out of date. What is really needed is a script
+        to generate this release automatically so we can maintain it.)
+  - C-Sharp: see pm_csharp.zip (also contributed as is)
 
 ---------- some notes on the design of PortMidi ----------
 
@@ -27,7 +32,7 @@ ERROR HANDLING
 
 Error handling turned out to be much more complicated than expected.
 PortMidi functions return error codes that the caller can check.
-In addition, errors may occur asynchronously due to MIDI input. 
+In addition, errors may occur asynchronously due to MIDI input.
 However, for Windows, there are virtually no errors that can
 occur if the code is correct and not passing bogus values. One
 exception is an error that the system is out of memory, but my
@@ -39,8 +44,8 @@ Ordinarily, the caller checks for an error code. If the error is
 system-dependent, pmHostError is returned and the caller can
 call Pm_GetHostErrorText to get a text description of the error.
 
-Host error codes are system-specific and are recorded in the 
-system-specific data allocated for each open MIDI port. 
+Host error codes are system-specific and are recorded in the
+system-specific data allocated for each open MIDI port.
 However, if an error occurs on open or close,
 we cannot store the error with the device because there will be
 no device data (assuming PortMidi cleans up after devices that
@@ -56,7 +61,7 @@ overhead even if the user does not want to look at the error data.
 
 The system-specific Read, Write, Poll, etc. implementations should
 check for asynchronous errors and return immediately if one is
-found so that these get reported. This happens in the Mac OS X 
+found so that these get reported. This happens in the Mac OS X
 code, where lots of things are happening in callbacks, but again,
 in Windows, there are no error codes recorded in callbacks.
 
@@ -64,7 +69,7 @@ DEBUGGING
 
 If you are building a console application for research, we suggest
 compiling with the option PM_CHECK_ERRORS. This will insert a
-check for error return values at the end of each PortMidi 
+check for error return values at the end of each PortMidi
 function. If an error is encountered, a text message is printed
 using printf(), the user is asked to type ENTER, and then exit(-1)
 is called to clean up and terminate the program.
diff --git a/pd/portmidi/ZERO_CHECK.vcproj b/pd/portmidi/ZERO_CHECK.vcproj
new file mode 100644
index 000000000..23d96278d
--- /dev/null
+++ b/pd/portmidi/ZERO_CHECK.vcproj
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="ZERO_CHECK"
+	ProjectGUID="{28779535-7541-4FF5-AC12-FAFD66E894EC}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="ZERO_CHECK.dir\Debug"
+			ConfigurationType="10"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				ExceptionHandling="0"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="ZERO_CHECK.dir\Release"
+			ConfigurationType="10"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				ExceptionHandling="0"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories=".\pm_common;.\porttime;"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+			<File
+				RelativePath=".\CMakeFiles\ZERO_CHECK">
+			</File>
+		<Filter
+			Name="CMake Rules"
+			Filter="">
+			<File
+				RelativePath=".\CMakeFiles\ZERO_CHECK.rule">
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+					Name="VCCustomBuildTool"
+					Description=""
+					CommandLine=""
+					AdditionalDependencies=".\CMakeFiles\ZERO_CHECK.rule"
+					Outputs=".\CMakeFiles\ZERO_CHECK"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+					Name="VCCustomBuildTool"
+					Description=""
+					CommandLine=""
+					AdditionalDependencies=".\CMakeFiles\ZERO_CHECK.rule"
+					Outputs=".\CMakeFiles\ZERO_CHECK"/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/license.txt b/pd/portmidi/license.txt
index b04523be4..c757b3713 100644
--- a/pd/portmidi/license.txt
+++ b/pd/portmidi/license.txt
@@ -3,10 +3,10 @@
  *
  * license.txt -- a copy of the PortMidi copyright notice and license information
  *
- * Latest version available at: http://www.cs.cmu.edu/~music/portmidi/
+ * Latest version available at: http://sourceforge.net/projects/portmedia
  *
  * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
- * Copyright (c) 2001-2006 Roger B. Dannenberg
+ * Copyright (c) 2001-2009 Roger B. Dannenberg
  *
  * Permission is hereby granted, free of charge, to any person obtaining
  * a copy of this software and associated documentation files
diff --git a/pd/portmidi/pm_cl/README_CL.txt b/pd/portmidi/pm_cl/README_CL.txt
new file mode 100644
index 000000000..be4c63591
--- /dev/null
+++ b/pd/portmidi/pm_cl/README_CL.txt
@@ -0,0 +1,104 @@
+README_CL.txt for PortMidi
+Roger B. Dannenberg
+17 Jan 2007
+
+This is a Common Lisp interface to PortMidi.
+
+On Mac OSX, you need to build PortMidi as a dynamic link library
+before you can use PortMidi from Common Lisp.
+
+You can build PortMidi as a dynamic link library by running this:
+
+cd portmidi
+make -F pm_mac/Makefile.osx install-with-xcode
+
+This is just a shortcut for:
+
+cd portmidi/pm_mac
+sudo xcodebuild -project pm_mac.xcodeproj -configuration Deployment install DSTROOT=/
+
+You can check the file and the architecture for which it is built using:
+    file /usr/local/lib/libportmidi.dylib
+
+If you've done this install of portmidi, then you should also have 
+   /usr/local/include/portmidi.h
+This will be necessary to successfully build the cffi interface below.
+
+To test PortMidi with Common Lisp, I (RBD) am using SBCL, which I 
+downloaded from http://prdownloads.sourceforge.net/sbcl. Currently, I use 
+    sbcl-0.9.17-x86-darwin-binary.tar.bz2
+To install this, I unpacked it by just double-clicking in the finder. Then, 
+from a command window, I became root using "sudo sh", and then typed:
+# INSTALL_ROOT=/usr/local
+# sh install.sh
+# exit
+
+I also downloaded cffi-061012.tar.gz from 
+    http://common-lisp.net/project/cffi/tarballs/?M=D
+
+To compile cffi, use the following, where "/Lisp/cffi/" is replaced by 
+the actual directory of cffi, e.g. 
+    "/Users/rbd/sbcl-0.9.17-x86-darwin/cffi-061012":
+
+% sbcl
+* (require 'asdf)
+* (push "/Lisp/cffi/" asdf:*central-registry*)
+* (asdf:oos 'asdf:load-op :cffi)
+* (quit)
+
+Download Common Music's portmidi module from cvs and build the c side:
+(Replace "/Lisp" with your lisp directory, e.g. 
+"/Users/rbd/sbcl-0.9.17-x86-darwin". These cvs commands will create
+a new directory, portmidi.)
+
+% cd /Lisp
+% export CVSROOT=:pserver:anonymous@commonmusic.cvs.sourceforge.net:/cvsroot/commonmusic
+% cvs login   # press Return at password prompt
+% cvs checkout portmidi
+% cd portmidi
+% ./configure
+% make
+% cd ..
+
+Now compile/load the portmidi module just like cffi. Again, change
+"/Lisp/cffi/" and "/Lisp/portmidi" to correspond to your local file system.
+(Note that /Lisp becomes your lisp directory, and "cffi" becomes your
+cffi folder name, e.g. "cffi-061012".
+
+% sbcl
+* (require 'asdf)
+* (push "/Lisp/cffi/" asdf:*central-registry*)
+* (asdf:oos 'asdf:load-op :cffi)
+* (push "/Lisp/portmidi/" asdf:*central-registry*)
+* (asdf:oos 'asdf:load-op :portmidi)
+
+Look in the file /Lisp/portmidi/test.lisp for a test of the lisp interface to
+portmidi. For example, while still running sbcl:
+
+* (pm:portmidi)  ; initialize portmidi
+* (pt:start) ; start time
+* (pt:time) ; get time
+* (pprint (pm:GetDeviceInfo)) ; get list of devices
+((:ID 0 :NAME "IAC Driver Bus 1" :TYPE :INPUT :OPEN NIL)
+ (:ID 1 :NAME "IAC Driver Bus 1" :TYPE :OUTPUT :OPEN NIL))
+
+Notice that test.lisp assumes MIDI input devices are connected
+and uses some hard-wired device numbers, so it may not run
+as is without error.
+
+Since test.lisp uses some Common Music calls, I (RBD) wrote a
+simpler test, test-no-cm.lisp, which is in the same folder as
+this (README_CL.txt) file. To use it, first check that the 
+values for outid (4) and inid (1) actually match PortMidi device
+id's for output and input devices, and make sure the input
+device is a keyboard that can generate a middle-C -- otherwise
+the program will hang waiting for input. Run sbcl from this
+pm_cl folder, and type:
+
+(load "test-no-cm.lisp")
+
+The program pauses frequently by calling (READ), so you
+should type t or something, then <RETURN> to continue.
+
+
+(Thanks to Leigh Smith and Rick Taube)
diff --git a/pd/portmidi/pm_cl/cffi-portmidi.lisp b/pd/portmidi/pm_cl/cffi-portmidi.lisp
new file mode 100644
index 000000000..4b3ad9c3e
--- /dev/null
+++ b/pd/portmidi/pm_cl/cffi-portmidi.lisp
@@ -0,0 +1,384 @@
+;;; **********************************************************************
+;;; Copyright (C) 2005 Heinrich Taube, <taube (at) uiuc (dot) edu>
+;;;
+;;; This program is free software; you can redistribute it and/or
+;;; modify it under the terms of the Lisp Lesser Gnu Public License.
+;;; See http://www.cliki.net/LLGPL for the text of this agreement.
+;;; **********************************************************************
+
+
+;;; A CFFI interface to Portmidi. Should run in most Common Lisp
+;;; implementations on Linux, OS X and Windows. For information about
+;;; CFFI see http://common-lisp.net/project/cffi/
+
+(in-package :cl-user)
+
+(defvar *libportmidi*
+  (let ((type #+(or darwin macos macosx) "dylib"
+              #+(or linux linux-target (and unix pc386) freebsd) "so"
+              #+(or win32 microsoft-32 cygwin) "dll")
+        (paths (list "/usr/lib/" "/usr/local/lib/" *load-pathname*)))
+    (loop for d in paths
+       for p = (make-pathname :name "libportmidi" :type type 
+                              :defaults d)
+       when (probe-file p) do (return p)
+       finally  
+         (error "Library \"portmidi.~A\" not found. Fix *libportmidi*."
+                type))))
+
+;;; linux: guess i need to load porttime.so first (?) osx doesnt seem
+;;; to need this lib at all...
+
+#+(or linux (and clisp unix (not macos)))
+(let ((lpt (merge-pathnames "libporttime" *libportmidi*)))
+  (if (probe-file lpt)
+      (cffi:load-foreign-library lpt)
+      (error "Porttime: ~a not found. Fix *libportmidi* path." lpt)))
+
+;;; load portmidi lib
+
+(cffi:load-foreign-library *libportmidi*)
+
+(defpackage :portmidi
+  (:use :common-lisp) 
+  (:nicknames :pm :pt)
+  (:shadow :initialize :terminate :time :start :stop :abort 
+           :close :read :write :poll)
+  (:export :Initialize :Terminate 
+           :HasHostError :GetErrorText :GetHostErrorText 
+           :CountDevices :GetDefaultInputDeviceID
+           :GetDefaultOutputDeviceID :GetDeviceInfo
+           :Message :Message.status :Message.data1 :Message.data2
+           :Event.message :Event.timestamp 
+           ;; event buffers added to api
+           :EventBufferNew :EventBufferFree :EventBufferElt
+           :EventBufferMap
+           :OpenInput :OpenOutput :SetFilter :SetChannelMask
+           :Abort :Close :Read :Write :Poll :WriteShort :WriteSysex
+           ;; filtering constants
+           :filt-active :filt-sysex :filt-clock :filt-play :filt-f9 
+           :filt-fd :filt-reset :filt-note :filt-channel-aftertouch
+           :filt-poly-aftertouch :filt-program :filt-control
+           :filt-pitchbend :filt-mtc :filt-song-position 
+           :filt-song-select :filt-tune :filt-tick :filt-undefined
+           :filt-realtime  :filt-aftertouch :filt-systemcommon
+           ;; porttime.
+           :Start :Stop :Started :Time
+           ;; initialization insurers added to api
+           :portmidi :*portmidi* ))
+
+(in-package :portmidi)
+
+(cffi:defcstruct pm-device-info 
+		 (struct-version :int) 
+		 (interf :pointer) 
+		 (name :pointer) 
+		 (input :int) 
+		 (output :int) 
+		 (opened :int))
+
+(cffi:define-foreign-type pm-message () ':long)
+(cffi:define-foreign-type pm-timestamp () ':long)
+(cffi:defcstruct pm-event 
+		 (message pm-message) 
+		 (timestamp pm-timestamp))
+(cffi:define-foreign-type pm-error () ':int)
+
+(cffi:define-foreign-type port-midi-stream () ':void)
+(cffi:define-foreign-type pm-device-id () ':int)
+(cffi:define-foreign-type pm-time-proc-ptr () ':pointer)
+(cffi:defcfun ("Pm_WriteSysEx" pm-write-sys-ex) pm-error (stream :pointer) (when pm-timestamp) (msg :pointer)) 
+(cffi:defcfun ("Pm_WriteShort" pm-write-short) pm-error (stream :pointer) (when pm-timestamp) (msg :long)) 
+(cffi:defcfun ("Pm_Write" pm-write) pm-error (stream :pointer) (buffer :pointer) (length :long)) 
+(cffi:defcfun ("Pm_Poll" pm-poll) pm-error (stream :pointer)) 
+(cffi:defcfun ("Pm_Read" pm-read) pm-error (stream :pointer) (buffer :pointer) (length :long)) 
+(cffi:defcfun ("Pm_Close" pm-close) pm-error (stream :pointer)) 
+(cffi:defcfun ("Pm_Abort" pm-abort) pm-error (stream :pointer)) 
+;(cffi:defcfun ("Pm_SetChannelMask" pm-set-channel-mask) pm-error (stream :pointer) (mask :int)) 
+(cffi:defcfun ("Pm_SetFilter" pm-set-filter) pm-error (stream :pointer) (filters :long)) 
+(cffi:defcfun ("Pm_OpenOutput" pm-open-output) pm-error (stream :pointer) (output-device pm-device-id) (output-driver-info :pointer) (buffer-size :long) (time-proc pm-time-proc-ptr) (time-info :pointer) (latency :long)) 
+(cffi:defcfun ("Pm_OpenInput" pm-open-input) pm-error (stream :pointer) (input-device pm-device-id) (input-driver-info :pointer) (buffer-size :long) (time-proc pm-time-proc-ptr) (time-info :pointer)) 
+(cffi:defcfun ("Pm_GetDeviceInfo" pm-get-device-info) :pointer (id pm-device-id)) 
+(cffi:defcfun ("Pm_GetDefaultOutputDeviceID" pm-get-default-output-device-id) pm-device-id) 
+(cffi:defcfun ("Pm_GetDefaultInputDeviceID" pm-get-default-input-device-id) pm-device-id) 
+(cffi:defcfun ("Pm_CountDevices" pm-count-devices) :int) 
+(cffi:defcfun ("Pm_GetHostErrorText" pm-get-host-error-text) :void (msg :pointer) (len :unsigned-int)) 
+(cffi:defcfun ("Pm_GetErrorText" pm-get-error-text) :pointer (errnum pm-error)) 
+(cffi:defcfun ("Pm_HasHostError" pm-has-host-error) :int (stream :pointer)) 
+(cffi:defcfun ("Pm_Terminate" pm-terminate) pm-error) 
+(cffi:defcfun ("Pm_Initialize" pm-initialize) pm-error)
+
+;;; porttime.h
+
+(cffi:define-foreign-type pt-error () ':int)
+(cffi:define-foreign-type pt-timestamp () ':long)
+(cffi:defcfun ("Pt_Start" pt-start) pt-error (a :int) (b :pointer) (c :pointer))
+(cffi:defcfun ("Pt_Stop" pt-stop) pt-error )
+(cffi:defcfun ("Pt_Started" pt-started) :int)
+(cffi:defcfun ("Pt_Time" pt-time) pt-timestamp)
+ 
+(defconstant true 1) 
+(defconstant false 0)
+(defconstant pmNoError 0)
+(defconstant pmHostError -10000)
+(defconstant pm-no-device -1)
+(defconstant pm-default-sysex-buffer-size 1024) 
+(defconstant filt-active 1) 
+(defconstant filt-sysex 2) 
+(defconstant filt-clock 4) 
+(defconstant filt-play 8) 
+(defconstant filt-f9 16) 
+(defconstant filt-fd 32) 
+(defconstant filt-reset 64) 
+(defconstant filt-note 128) 
+(defconstant filt-channel-aftertouch 256) 
+(defconstant filt-poly-aftertouch 512) 
+(defconstant filt-program 1024) 
+(defconstant filt-control 2048) 
+(defconstant filt-pitchbend 4096) 
+(defconstant filt-mtc 8192) 
+(defconstant filt-song-position 16384) 
+(defconstant filt-song-select 32768) 
+(defconstant filt-tune 65536) 
+(defconstant filt-tick filt-f9)
+(defconstant filt-undefined (logior filt-f9 filt-fd))
+(defconstant filt-realtime (logior filt-active filt-sysex
+                                      filt-clock filt-play
+                                      filt-undefined filt-reset))
+(defconstant filt-aftertouch (logior filt-channel-aftertouch
+                                        filt-poly-aftertouch ))
+(defconstant filt-systemcommon (logior filt-mtc filt-song-position
+                                          filt-song-select filt-tune))
+(defvar *portmidi* nil) ; t if loaded
+
+;;;
+;;; utils
+;;;
+
+(defvar host-error-text (make-string 256 :initial-element #\*))
+
+(defmacro with-pm-error (form)
+  (let ((v (gensym)))
+    `(let ((,v ,form))
+       (if (not (= ,v pmNoError))
+	   (if (= ,v pmHostError)
+	       (cffi:with-foreign-string (host-error host-error-text)
+		 (pm-get-host-error-text host-error
+					 (length host-error-text))
+		 (error "Host error is: ~a"
+			(cffi:foreign-string-to-lisp host-error)))
+	       (error (cffi:foreign-string-to-lisp
+		       (pm-get-error-text ,v))))
+           ,v))))
+
+(defun portmidi ()
+  ;; initializer, call before using lib
+  (or *portmidi*
+      (progn (pm-initialize)
+             (setq *portmidi* t))))
+
+(defun Message (status data1 data2)
+  ;; portmidi messages are just unsigneds
+  (logior (logand (ash data2 16) #xFF0000)
+          (logand (ash data1 08) #xFF00)
+          (logand status #xFF)))
+
+(defun Message.status (m)
+  (logand m #xFF))
+
+(defun Message.data1 (m)
+  (logand (ash m -08) #xFF))
+
+(defun Message.data2 (m)
+  (logand (ash m -16) #xFF))
+
+;;; accessors 
+
+(defun DeviceInfo.interf (ptr)
+  (cffi:foreign-string-to-lisp 
+   (cffi:foreign-slot-value ptr 'pm-device-info 'interf)))
+
+(defun DeviceInfo.name (ptr)
+  (cffi:foreign-string-to-lisp
+   (cffi:foreign-slot-value ptr 'pm-device-info 'name)))
+
+(defun DeviceInfo.input (ptr)
+  (if (= (cffi:foreign-slot-value ptr 'pm-device-info 'input) 0)
+      nil
+    t))
+
+(defun DeviceInfo.output (ptr)
+  (if (= (cffi:foreign-slot-value ptr 'pm-device-info 'output) 0)
+      nil
+    t))
+
+(defun DeviceInfo.opened (ptr)
+  (if (= (cffi:foreign-slot-value ptr 'pm-device-info 'opened) 0)
+      nil
+    t))
+
+(defun Event.message (e &optional (v nil vp))
+  (if vp
+      (progn 
+	(setf (cffi:foreign-slot-value e 'pm-event 'message) v)
+	v)
+    (cffi:foreign-slot-value e 'pm-event 'message)))
+    
+(defun Event.timestamp (e &optional (v nil vp))
+  (if vp
+      (progn 
+	(setf (cffi:foreign-slot-value e 'pm-event 'timestamp) v)
+	v)
+    (cffi:foreign-slot-value e 'pm-event 'timestamp)))
+
+;;; functions
+
+(defun Initialize ()
+  (with-pm-error (pm-initialize)))
+
+(defun terminate ()
+  (with-pm-error (pm-terminate)))
+
+
+(defun HasHostError (pms) 
+  (pm-has-host-error pms))
+
+(defun GetErrorText (err) 
+  (pm-get-error-text err))
+
+; how do i do this?
+;(progn
+;  (defalien "pm-GetHostErrorText" void (a c-string) (b unsigned-int))
+;  (defun GetHostErrorText () 
+;    (pm-GetHostErrorText 256)))
+
+(defun CountDevices ()
+  (portmidi)
+  (pm-count-devices ))
+
+(defun GetDefaultInputDeviceID ()
+  (let ((id (pm-get-default-input-device-id )))
+    (if (= id pm-no-device) nil id)))
+
+(defun GetDefaultOutputDeviceID ()
+  (let ((id (pm-get-default-output-device-id )))
+    (if (= id pm-no-device) nil id)))
+
+;replaced by lispy version end of file.
+;(defun GetDeviceInfo (id) (pm-get-device-info id))
+
+(defun OpenInput (device bufsiz)
+  ;; portmidi: timer must be running before opening
+  (unless (Started) (Start))
+  (cffi:with-foreign-object (p1 :pointer)
+    (let ((err (pm-open-input p1 device (cffi:null-pointer)
+                              bufsiz (cffi:null-pointer) (cffi:null-pointer))))
+        (if (= err pmNoError)
+            (cffi:mem-ref p1 :pointer)
+            (error (pm-get-error-text err))))))
+
+(defun OpenOutput (device bufsiz latency)
+  (unless (Started) (Start))
+  (cffi:with-foreign-object (p1 :pointer) ;(p (* PortMidi))
+    (let ((err (pm-open-output p1 device (cffi:null-pointer)
+                               bufsiz (cffi:null-pointer) (cffi:null-pointer)
+                               latency)))
+      (if (= err pmNoError)
+          (cffi:mem-ref p1 :pointer)
+          (error (pm-get-error-text err))))))
+
+(defun SetFilter (a filts) 
+  (with-pm-error
+    (pm-set-filter a filts)))
+
+;(defun SetChannelMask (pms mask)
+;  (with-pm-error (pm-set-channel-mask pms mask)))
+
+(defun Abort (pms)
+  (with-pm-error (pm-abort pms)))
+
+(defun Close (pms)
+  (with-pm-error (pm-close pms)))
+
+(defun EventBufferFree (buf)
+  (cffi:foreign-free buf))
+
+(defun EventBufferNew (len)
+  (cffi:foreign-alloc 'pm-event :count len))
+
+(defun EventBufferElt (buf i)
+  ;; buf is POINTER to buf
+  (cffi:mem-aref buf 'pm-event i))
+
+(defun EventBufferSet (buffer index timestamp message)
+  (setf (cffi:foreign-slot-value
+         (cffi:mem-aref buffer 'pm-event index) 'pm-event 'timestamp)
+        timestamp)
+  (setf (cffi:foreign-slot-value
+         (cffi:mem-aref buffer 'pm-event index) 'pm-event 'message)
+        message)
+  (values))
+
+(defun EventBufferMap (fn buf end)
+  (loop for i below end
+     for e = (EventBufferElt buf i)
+     do (funcall fn (Event.message e) (Event.timestamp e)))
+ (values))
+
+(defun Read (pms *evbuf len) 
+  (let ((res (pm-read pms *evbuf len)))
+    (if (< res 0)
+        (error (pm-get-error-text res))
+        res)))
+
+(defun Poll (pms)
+  (let ((res (pm-poll pms)))
+    (cond ((= res 0) nil)
+          ((= res 1) t)
+          (t (error (pm-get-error-text res))))))
+
+(defun Write (pms *evbuf len)
+  (with-pm-error (pm-write pms *evbuf len)))
+
+(defun WriteShort (pms when msg)
+  (with-pm-error (pm-write-short pms when msg)))
+
+(defun WriteSysex (pms when string)
+  (cffi:with-foreign-string (ptr string)
+    (with-pm-error (pm-write-sys-ex pms when ptr))))
+
+;;; porttime.h
+
+(defun Started ()
+  (let ((res (pt-started)))
+    (if (= res false) nil t)))
+
+(defun Start ()
+  ;; NB: This has to be called before opening output or input.
+  ;; it seems that if its called 2x we get an error.
+  (unless (Started)
+    (with-pm-error (pt-start 1 (cffi:null-pointer) (cffi:null-pointer))))
+  (values))
+
+(defun Stop ()
+  (when (Started)
+    (with-pm-error (pt-stop)))
+  (values))
+
+(defun Time ()
+  (pt-time))
+
+(defun GetDeviceInfo (&optional id)
+  (flet ((getone (id)
+           (let ((d (pm-get-device-info id)))
+             (list :id id
+                   :name  (DeviceInfo.name d)
+                   :type (if (DeviceInfo.input d) ':input ':output)
+                   :open (DeviceInfo.opened d)))))
+    ;; make sure lib is initialized before checking devices
+    (portmidi)
+    (if id (getone id)
+        (loop for i below (CountDevices)
+           collect (getone i)))))
+
+(pushnew ':portmidi *features*)
diff --git a/pd/portmidi/pm_cl/test-no-cm.lisp b/pd/portmidi/pm_cl/test-no-cm.lisp
new file mode 100644
index 000000000..fd8527e62
--- /dev/null
+++ b/pd/portmidi/pm_cl/test-no-cm.lisp
@@ -0,0 +1,112 @@
+;; this is a half-baked sequence of PortMidi calls to test the interface
+;; No calls to Common Music are made, hence test-no-cm.lisp
+
+; setup cffi if it has not been done already
+(if (not (boundp '*clpath*))
+    (load "setup-pm.lisp"))
+
+(defun println (s) (print s) (terpri))
+
+;; initialize portmidi lib
+(pm:portmidi)
+;; timer testing
+(pt:Start )
+(pt:Started)
+(format t "time is ~A, type something~%" (pt:Time))
+(read)
+(format t "time is ~A, type something~%" (pt:Time))
+(read)
+(pt:Time)
+(format t "time is ~A, type something~%" (pt:Time))
+
+;; device testing
+(pm:CountDevices)
+(pprint (pm:GetDeviceInfo ))
+(defparameter inid (pm:GetDefaultInputDeviceID ))
+(pm:GetDeviceInfo inid)
+(defparameter outid (pm:GetDefaultOutputDeviceID ))
+(pm:GetDeviceInfo outid)
+;; output testing
+(defparameter outid 4) ; 4 = my SimpleSynth
+(defparameter outdev (pm:OpenOutput outid 100 1000))
+(pm:getDeviceInfo outid) ; :OPEN should be T
+;; message tests
+(defun pm (m &optional (s t))
+  (format s "#<message :op ~2,'0x :ch ~2,'0d :data1 ~3,'0d :data2 ~3,'0d>"
+          (ash (logand (pm:Message.status m) #xf0) -4)
+          (logand (pm:Message.status m) #x0f)
+          (pm:Message.data1 m)
+          (pm:Message.data2 m)))
+(defparameter on (pm:message #b10010000 60 64))
+(terpri)
+(pm on)
+(pm:Message.status on)
+(logand (ash (pm:Message.status on) -4) #x0f)
+(pm:Message.data1 on)
+(pm:Message.data2 on)
+(pm:WriteShort outdev (+ (pm:time) 100) on)
+(defparameter off (pm:message #b10000000 60 64))
+(terpri)
+(pm off)
+(terpri)
+(println "type something for note off")
+(read)
+(pm:WriteShort outdev (+ (pm:time) 100) off)
+(println "type something to close output device")
+(read)
+(pm:Close outdev)
+;; event buffer testing
+(defparameter buff (pm:EventBufferNew 8))
+(loop for i below 8 for x = (pm:EventBufferElt buff i) 
+   ;; set buffer events
+   do
+     (pm:Event.message x (pm:message #b1001000 (+ 60 i) (+ 100 i)))
+     (pm:Event.timestamp x (* 1000 i)))
+(loop for i below 8 for x = (pm:EventBufferElt buff i) 
+   ;; check buffer contents
+   collect (list (pm:Event.timestamp x)
+                 (pm:Message.data1 (pm:Event.message x))
+                 (pm:Message.data2 (pm:Event.message x))))
+(pm:EventBufferFree buff)
+;; input testing -- requires external midi keyboard
+(println (pm:GetDeviceInfo ))
+(defparameter inid 1) ; 1 = my external keyboard
+(defparameter indev (pm:OpenInput inid 256)) 
+(pm:GetDeviceInfo inid) ; :OPEN should be T
+(pm:SetFilter indev pm:filt-realtime) ; ignore active sensing etc.
+(println "poll says:")
+(println (pm:Poll indev))
+(println "play midi keyboard and type something")
+(read)
+;;
+;; ...play midi keyboard, then ...
+;;
+(println "poll says")
+(println (pm:Poll indev))
+(defparameter buff (pm:EventBufferNew 32))
+(defparameter num (pm:Read indev buff 32))
+(println "pm:Read gets")
+(println num)
+(println "input messages:")
+(pm:EventBufferMap (lambda (a b) b (terpri) (pm a))
+                   buff num)
+(pm:Poll indev)
+
+(println "play keyboard, to stop, play middle-C")
+
+;;; recv testing
+
+(defparameter pitch 0)
+(loop while (/= pitch 60) do
+  (let ((n (pm:Read indev buff 1)))
+    (cond ((= n 1)
+           (pm:EventBufferMap
+                (lambda (a b) 
+                   b (pm a) (terpri)
+                   (setf pitch (pm:Message.data1 a)))
+                buff n)))))
+
+(pm:EventBufferFree buff)
+(pm:Close indev)
+
+
diff --git a/pd/portmidi/pm_common/CMakeLists.txt b/pd/portmidi/pm_common/CMakeLists.txt
new file mode 100644
index 000000000..e1710474a
--- /dev/null
+++ b/pd/portmidi/pm_common/CMakeLists.txt
@@ -0,0 +1,128 @@
+# pm_common
+
+# set the build directory for libportmidi.a to be in portmidi, not in 
+#    portmidi/pm_common
+if(APPLE OR WIN32)
+  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+  # set the build directory for .dylib libraries
+  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+
+  # the first time CMake configures, save off CMake's built-in flags
+  if(NOT DEFAULT_DEBUG_FLAGS)
+    set(DEFAULT_DEBUG_FLAGS ${CMAKE_C_FLAGS_DEBUG} CACHE 
+        STRING "CMake's default debug flags" FORCE)
+    set(DEFAULT_RELEASE_FLAGS ${CMAKE_C_FLAGS_RELEASE} CACHE 
+        STRING "CMake's default release flags" FORCE)
+  else(NOT DEFAULT_DEBUG_FLAGS)
+    message(STATUS "DEFAULT_DEBUG_FLAGS not nil: " ${DEFAULT_DEBUG_FLAGS})
+  endif(NOT DEFAULT_DEBUG_FLAGS)
+else(APPLE OR WIN32)
+  set(LINUX_FLAGS "-DPMALSA")
+endif(APPLE OR WIN32)
+
+if(APPLE)
+  set(CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk CACHE 
+      PATH "-isysroot parameter for compiler" FORCE)
+  set(CMAKE_C_FLAGS "-mmacosx-version-min=10.5" CACHE 
+      STRING "needed in conjunction with CMAKE_OSX_SYSROOT" FORCE)
+endif(APPLE)
+
+macro(prepend_path RESULT PATH)
+  set(${RESULT})
+  foreach(FILE ${ARGN})
+    list(APPEND ${RESULT} "${PATH}${FILE}")
+  endforeach(FILE)
+endmacro(prepend_path)
+
+set(CMAKE_C_FLAGS_DEBUG 
+    "${DEFAULT_DEBUG_FLAGS} -DPM_CHECK_ERRORS=1 -DDEBUG ${LINUX_FLAGS}"
+    CACHE STRING "enable extra checks for debugging" FORCE)
+
+set(CMAKE_C_FLAGS_RELEASE "${DEFAULT_RELEASE_FLAGS} ${LINUX_FLAGS}"
+    CACHE STRING "flags for release version" FORCE)
+
+# first include the appropriate system-dependent file:
+if(UNIX)
+  # add the -g switch for Linux and Mac OS X (not used in Win32)
+  set (CMAKE_C_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}" 
+       CACHE STRING "enable extra checks for debugging" FORCE)
+  if(APPLE)
+    set(MACSRC pmmacosxcm pmmac readbinaryplist finddefault)
+    prepend_path(LIBSRC ../pm_mac/ ${MACSRC})
+    list(APPEND LIBSRC ../porttime/ptmacosx_mach)
+
+    include_directories(${CMAKE_OSX_SYSROOT}/Developer/Headers/FlatCarbon)
+    set(FRAMEWORK_PATH ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks)
+    set(COREAUDIO_LIB "${FRAMEWORK_PATH}/CoreAudio.framework")
+    set(COREFOUNDATION_LIB "${FRAMEWORK_PATH}/CoreFoundation.framework")
+    set(COREMIDI_LIB "${FRAMEWORK_PATH}/CoreMIDI.framework")
+    set(CORESERVICES_LIB "${FRAMEWORK_PATH}/CoreServices.framework")
+    set(PM_NEEDED_LIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB}
+                             ${COREMIDI_LIB} ${CORESERVICES_LIB}
+        CACHE INTERNAL "")
+
+    set(JAVAVM_LIB "${FRAMEWORK_PATH}/JavaVM.framework")
+    set(JAVA_INCLUDE_PATHS ${JAVAVM_LIB}/Headers)
+    message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT})
+  else(APPLE)
+    # LINUX settings...
+    include(FindJNI)
+    message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
+    message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
+    message(STATUS "JAVA_INCLUDE_PATH2 is " ${JAVA_INCLUDE_PATH2})
+    message(STATUS "JAVA_JVM_LIBRARY is " ${JAVA_JVM_LIBRARY})
+    set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+    # libjvm.so is found relative to JAVA_INCLUDE_PATH:
+    set(JAVAVM_LIB ${JAVA_JVM_LIBRARY}/libjvm.so)
+
+    set(LINUXSRC pmlinuxalsa pmlinux finddefault)
+    prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC})
+    list(APPEND LIBSRC ../porttime/ptlinux)
+
+    set(PM_NEEDED_LIBS pthread asound)
+  endif(APPLE)
+else(UNIX)
+  if(WIN32)
+    # /MDd is multithread debug DLL, /MTd is multithread debug
+    # /MD is multithread DLL, /MT is multithread. Change to static:
+    include(../pm_win/static.cmake)
+    
+    include(FindJNI)
+
+    set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+    # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
+
+    set(WINSRC pmwin pmwinmm)
+    prepend_path(LIBSRC ../pm_win/ ${WINSRC})
+    list(APPEND LIBSRC ../porttime/ptwinmm)
+    set(PM_NEEDED_LIBS winmm.lib)
+  endif(WIN32)
+endif(UNIX)
+set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVA_JVM_LIBRARY})
+
+# this completes the list of library sources by adding shared code
+list(APPEND LIBSRC pmutil portmidi)
+
+# now add the shared files to make the complete list of library sources
+add_library(portmidi-static ${LIBSRC})
+set_target_properties(portmidi-static PROPERTIES OUTPUT_NAME "portmidi_s")
+target_link_libraries(portmidi-static ${PM_NEEDED_LIBS})
+
+# define the jni library
+include_directories(${JAVA_INCLUDE_PATHS})
+
+set(JNISRC ${LIBSRC} ../pm_java/pmjni/pmjni.c)
+add_library(pmjni SHARED ${JNISRC})
+target_link_libraries(pmjni ${JNI_EXTRA_LIBS})
+set_target_properties(pmjni PROPERTIES EXECUTABLE_EXTENSION "jnilib")
+
+# install the libraries (Linux and Mac OS X command line)
+if(UNIX)
+  INSTALL(TARGETS portmidi-static pmjni
+    LIBRARY DESTINATION /usr/local/lib
+    ARCHIVE DESTINATION /usr/local/lib)
+# .h files installed by pm_dylib/CMakeLists.txt, so don't need them here
+#  INSTALL(FILES portmidi.h ../porttime/porttime.h
+#    DESTINATION /usr/local/include)
+endif(UNIX)
diff --git a/pd/portmidi/pm_common/pminternal.h b/pd/portmidi/pm_common/pminternal.h
old mode 100644
new mode 100755
index b8c032325..f7c62705b
--- a/pd/portmidi/pm_common/pminternal.h
+++ b/pd/portmidi/pm_common/pminternal.h
@@ -21,6 +21,8 @@
 extern "C" {
 #endif
 
+extern int pm_initialized; /* see note in portmidi.c */
+
 /* these are defined in system-specific file */
 void *pm_alloc(size_t s);
 void pm_free(void *ptr);
@@ -93,7 +95,7 @@ extern int pm_descriptor_max;
 extern descriptor_type descriptors;
 extern int pm_descriptor_index;
 
-typedef unsigned long (*time_get_proc_type)(void *time_info);
+typedef uint32_t (*time_get_proc_type)(void *time_info);
 
 typedef struct pm_internal_struct {
     int device_id; /* which device is open (index to descriptors) */
@@ -101,18 +103,10 @@ typedef struct pm_internal_struct {
     
     PmTimeProcPtr time_proc; /* where to get the time */
     void *time_info; /* pass this to get_time() */
-    long buffer_len; /* how big is the buffer or queue? */
-#ifdef NEWBUFFER
+    int32_t buffer_len; /* how big is the buffer or queue? */
     PmQueue *queue;
-#else
-    PmEvent *buffer; /* storage for: 
-                        - midi input 
-                        - midi output w/latency != 0 */
-    long head;
-    long tail;
-    int overflow; /* set to non-zero if input is dropped */
-#endif
-    long latency; /* time delay in ms between timestamps and actual output */
+
+    int32_t latency; /* time delay in ms between timestamps and actual output */
                   /* set to zero to get immediate, simple blocking output */
                   /* if latency is zero, timestamps will be ignored; */
                   /* if midi input device, this field ignored */
@@ -128,8 +122,8 @@ typedef struct pm_internal_struct {
     PmMessage sysex_message; /* buffer for 4 bytes of sysex data */
     int sysex_message_count; /* how many bytes in sysex_message so far */
 
-    long filters; /* flags that filter incoming message classes */
-    int channel_mask; /* flter incoming messages based on channel */
+    int32_t filters; /* flags that filter incoming message classes */
+    int32_t channel_mask; /* filter incoming messages based on channel */
     PmTimestamp last_msg_time; /* timestamp of last message */
     PmTimestamp sync_time; /* time of last synchronization */
     PmTimestamp now; /* set by PmWrite to current time */
@@ -143,8 +137,8 @@ typedef struct pm_internal_struct {
      * important
      */
     unsigned char *fill_base; /* addr of ptr to sysex data */
-    int *fill_offset_ptr; /* offset of next sysex byte */
-    int fill_length; /* how many sysex bytes to write */
+    uint32_t *fill_offset_ptr; /* offset of next sysex byte */
+    int32_t fill_length; /* how many sysex bytes to write */
 } PmInternal;
 
 
@@ -163,7 +157,7 @@ PmError pm_fail_timestamp_fn(PmInternal *midi, PmTimestamp timestamp);
 PmError pm_success_fn(PmInternal *midi);
 PmError pm_add_device(char *interf, char *name, int input, void *descriptor,
                       pm_fns_type dictionary);
-unsigned int pm_read_bytes(PmInternal *midi, unsigned char *data, int len,
+uint32_t pm_read_bytes(PmInternal *midi, const unsigned char *data, int len,
                            PmTimestamp timestamp);
 void pm_read_short(PmInternal *midi, PmEvent *event);
 
@@ -176,6 +170,8 @@ void pm_read_short(PmInternal *midi, PmEvent *event);
 #define is_real_time(msg) \
     ((Pm_MessageStatus(msg) & MIDI_REALTIME_MASK) == MIDI_REALTIME_MASK)
 
+int pm_find_default_device(char *pattern, int is_input);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/pd/portmidi/pm_common/pmjni.vcproj b/pd/portmidi/pm_common/pmjni.vcproj
new file mode 100644
index 000000000..5f3c663a7
--- /dev/null
+++ b/pd/portmidi/pm_common/pmjni.vcproj
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="pmjni"
+	ProjectGUID="{87B548BD-F5CE-4D1F-9181-390966AC5855}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="pmjni.dir\Debug"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,pmjni_EXPORTS"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../Debug/pmjni.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,pmjni_EXPORTS"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,pmjni_EXPORTS"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  winmm.lib &quot;C:\Program Files\Java\jdk1.6.0_16\include\..\lib\jvm.lib&quot; "
+				OutputFile="..\Debug\pmjni.dll"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="..\Debug\pmjni.pdb"
+				GenerateDebugInformation="TRUE"
+				ImportLibrary="..\Debug\pmjni.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="pmjni.dir\Release"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,pmjni_EXPORTS"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../Release/pmjni.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,pmjni_EXPORTS"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,pmjni_EXPORTS"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  winmm.lib &quot;C:\Program Files\Java\jdk1.6.0_16\include\..\lib\jvm.lib&quot; "
+				OutputFile="..\Release\pmjni.dll"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="..\Release\pmjni.pdb"
+				ImportLibrary="..\Release\pmjni.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_win\pmwin.c">
+			</File>
+			<File
+				RelativePath="..\pm_win\pmwinmm.c">
+			</File>
+			<File
+				RelativePath="..\porttime\ptwinmm.c">
+			</File>
+			<File
+				RelativePath="..\pm_common\pmutil.c">
+			</File>
+			<File
+				RelativePath="..\pm_common\portmidi.c">
+			</File>
+			<File
+				RelativePath="..\pm_java\pmjni\pmjni.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_common/pmutil.c b/pd/portmidi/pm_common/pmutil.c
old mode 100644
new mode 100755
index 42f386c1d..a70fe2fa1
--- a/pd/portmidi/pm_common/pmutil.c
+++ b/pd/portmidi/pm_common/pmutil.c
@@ -1,311 +1,284 @@
-/* pmutil.c -- some helpful utilities for building midi
-               applications that use PortMidi
- */
-#include "stdlib.h"
-#include "assert.h"
-#include "memory.h"
-#include "portmidi.h"
-#include "pmutil.h"
-#include "pminternal.h"
-
-#ifdef WIN32
-#define bzero(addr, siz) memset(addr, 0, siz)
-#endif
-
-// #define QUEUE_DEBUG 1
-#ifdef QUEUE_DEBUG
-#include "stdio.h"
-#endif
-
-/* code is based on 4-byte words -- it should work on a 64-bit machine
-   as long as a "long" has 4 bytes. This code could be generalized to
-   be independent of the size of "long" */
-
-typedef long int32;
-
-typedef struct {
-    long head;
-    long tail;
-    long len;
-    long msg_size; /* number of int32 in a message including extra word */
-    long overflow;
-    long peek_overflow;
-    int32 *buffer;
-    int32 *peek;
-    int peek_flag;
-} PmQueueRep;
-
-
-PmQueue *Pm_QueueCreate(long num_msgs, long bytes_per_msg)
-{
-    PmQueueRep *queue = (PmQueueRep *) pm_alloc(sizeof(PmQueueRep));
-    int int32s_per_msg = ((bytes_per_msg + sizeof(int32) - 1) &
-                          ~(sizeof(int32) - 1)) / sizeof(int32);
-    /* arg checking */
-    if (!queue) 
-        return NULL;
-
-    /* need extra word per message for non-zero encoding */
-    queue->len = num_msgs * (int32s_per_msg + 1);
-    queue->buffer = (int32 *) pm_alloc(queue->len * sizeof(int32));
-    bzero(queue->buffer, queue->len * sizeof(int32));
-    if (!queue->buffer) {
-        pm_free(queue);
-        return NULL;
-    } else { /* allocate the "peek" buffer */
-        queue->peek = (int32 *) pm_alloc(int32s_per_msg * sizeof(int32));
-        if (!queue->peek) {
-            /* free everything allocated so far and return */
-            pm_free(queue->buffer);
-            pm_free(queue);
-            return NULL;
-        }
-    }
-    bzero(queue->buffer, queue->len * sizeof(int32));
-    queue->head = 0;
-    queue->tail = 0;
-    /* msg_size is in words */
-    queue->msg_size = int32s_per_msg + 1; /* note extra word is counted */
-    queue->overflow = FALSE;
-    queue->peek_overflow = FALSE;
-    queue->peek_flag = FALSE;
-    return queue;
-}
-
-
-PmError Pm_QueueDestroy(PmQueue *q)
-{
-    PmQueueRep *queue = (PmQueueRep *) q;
-        
-        /* arg checking */
-    if (!queue || !queue->buffer || !queue->peek) 
-                return pmBadPtr;
-    
-    pm_free(queue->peek);
-    pm_free(queue->buffer);
-    pm_free(queue);
-    return pmNoError;
-}
-
-
-PmError Pm_Dequeue(PmQueue *q, void *msg)
-{
-    long head;
-    PmQueueRep *queue = (PmQueueRep *) q;
-    int i;
-    int32 *msg_as_int32 = (int32 *) msg;
-
-    /* arg checking */
-    if (!queue)
-        return pmBadPtr;
-    /* a previous peek operation encountered an overflow, but the overflow
-     * has not yet been reported to client, so do it now. No message is
-     * returned, but on the next call, we will return the peek buffer.
-     */
-    if (queue->peek_overflow) {
-        queue->peek_overflow = FALSE;
-        return pmBufferOverflow;
-    }
-    if (queue->peek_flag) {
-#ifdef QUEUE_DEBUG
-        printf("Pm_Dequeue returns peek msg:");
-        for (i = 0; i < queue->msg_size - 1; i++) {
-            printf(" %d", queue->peek[i]);
-        }
-        printf("\n");
-#endif
-        memcpy(msg, queue->peek, (queue->msg_size - 1) * sizeof(int32));
-        queue->peek_flag = FALSE;
-        return 1;
-    }
-
-    head = queue->head;
-    /* if writer overflows, it writes queue->overflow = tail+1 so that
-     * when the reader gets to that position in the buffer, it can 
-     * return the overflow condition to the reader. The problem is that
-     * at overflow, things have wrapped around, so tail == head, and the
-     * reader will detect overflow immediately instead of waiting until
-     * it reads everything in the buffer, wrapping around again to the
-     * point where tail == head. So the condition also checks that
-     * queue->buffer[head] is zero -- if so, then the buffer is now
-     * empty, and we're at the point in the msg stream where overflow
-     * occurred. It's time to signal overflow to the reader. If 
-     * queue->buffer[head] is non-zero, there's a message there and we
-     * should read all the way around the buffer before signalling overflow.
-     * There is a write-order dependency here, but to fail, the overflow
-     * field would have to be written while an entire buffer full of 
-     * writes are still pending. I'm assuming out-of-order writes are
-     * possible, but not that many.
-     */
-    if (queue->overflow == head + 1 && !queue->buffer[head]) {
-        queue->overflow = 0; /* non-overflow condition */
-        return pmBufferOverflow;
-    }
-
-    /* test to see if there is data in the queue -- test from back
-     * to front so if writer is simultaneously writing, we don't
-     * waste time discovering the write is not finished 
-     */
-    for (i = queue->msg_size - 1; i >= 0; i--) {
-        if (!queue->buffer[head + i]) {
-            return 0;
-        }
-    }
-#ifdef QUEUE_DEBUG
-    printf("Pm_Dequeue:");
-    for (i = 0; i < queue->msg_size; i++) {
-        printf(" %d", queue->buffer[head + i]);
-    }
-    printf("\n");
-#endif
-    memcpy(msg, (char *) &queue->buffer[head + 1], 
-           sizeof(int32) * (queue->msg_size - 1));
-    /* fix up zeros */
-    i = queue->buffer[head];
-    while (i < queue->msg_size) {
-        int32 j;
-        i--; /* msg does not have extra word so shift down */
-        j = msg_as_int32[i];
-        msg_as_int32[i] = 0;
-        i = j;
-    }
-    /* signal that data has been removed by zeroing: */
-    bzero((char *) &queue->buffer[head], sizeof(int32) * queue->msg_size);
-
-    /* update head */
-    head += queue->msg_size;
-    if (head == queue->len) head = 0;
-    queue->head = head;
-    return 1; /* success */
-}
-
-
-
-PmError Pm_SetOverflow(PmQueue *q)
-{
-    PmQueueRep *queue = (PmQueueRep *) q;
-    long tail;
-    /* no more enqueue until receiver acknowledges overflow */
-    if (queue->overflow) return pmBufferOverflow;
-    if (!queue)
-        return pmBadPtr;
-    tail = queue->tail;
-    queue->overflow = tail + 1;
-    return pmBufferOverflow;
-}
-
-
-PmError Pm_Enqueue(PmQueue *q, void *msg)
-{
-    PmQueueRep *queue = (PmQueueRep *) q;
-    long tail;
-    int i;
-    int32 *src = (int32 *) msg;
-    int32 *ptr;
-
-    int32 *dest;
-
-    int rslt;
-    /* no more enqueue until receiver acknowledges overflow */
-    if (!queue) return pmBadPtr;
-    if (queue->overflow) return pmBufferOverflow;
-    rslt = Pm_QueueFull(q);
-    /* already checked above: if (rslt == pmBadPtr) return rslt; */
-    tail = queue->tail;
-    if (rslt) {
-        queue->overflow = tail + 1;
-        return pmBufferOverflow;
-    }
-
-    /* queue is has room for message, and overflow flag is cleared */
-    ptr = &queue->buffer[tail];
-    dest = ptr + 1;
-    for (i = 1; i < queue->msg_size; i++) {
-        int32 j = src[i - 1];
-        if (!j) {
-            *ptr = i;
-            ptr = dest;
-        } else {
-            *dest = j;
-        }
-        dest++;
-    }
-    *ptr = i;
-#ifdef QUEUE_DEBUG
-    printf("Pm_Enqueue:");
-    for (i = 0; i < queue->msg_size; i++) {
-        printf(" %d", queue->buffer[tail + i]);
-    }
-    printf("\n");
-#endif
-    tail += queue->msg_size;
-    if (tail == queue->len) tail = 0;
-    queue->tail = tail;
-    return pmNoError;
-}
-
-
-int Pm_QueueEmpty(PmQueue *q)
-{ 
-    PmQueueRep *queue = (PmQueueRep *) q;
-    if (!queue) return TRUE;
-    return (queue->buffer[queue->head] == 0);
-}
-
-
-int Pm_QueueFull(PmQueue *q)
-{
-    PmQueueRep *queue = (PmQueueRep *) q;
-    int tail;
-    int i; 
-    /* arg checking */
-    if (!queue)
-        return pmBadPtr;
-    tail = queue->tail;
-    /* test to see if there is space in the queue */
-    for (i = 0; i < queue->msg_size; i++) {
-        if (queue->buffer[tail + i]) {
-            return TRUE;
-        }
-    }
-    return FALSE;
-}
-
-void *Pm_QueuePeek(PmQueue *q)
-{
-    PmQueueRep *queue = (PmQueueRep *) q;
-    PmError rslt;
-    long temp;
-
-    /* arg checking */
-    if (!queue)
-        return NULL;
-
-    if (queue->peek_flag) {
-        return queue->peek;
-    }
-    /* this is ugly: if peek_overflow is set, then Pm_Dequeue() 
-     * returns immediately with pmBufferOverflow, but here, we
-     * want Pm_Dequeue() to really check for data. If data is
-     * there, we can return it
-     */
-    temp = queue->peek_overflow;
-    queue->peek_overflow = FALSE;
-    rslt = Pm_Dequeue(q, queue->peek);
-    queue->peek_overflow = temp;
-
-    if (rslt == 1) {
-        queue->peek_flag = TRUE;
-        return queue->peek;
-    } else if (rslt == pmBufferOverflow) {
-        /* when overflow is indicated, the queue is empty and the 
-         * first message that was dropped by Enqueue (signalling
-         * pmBufferOverflow to its caller) would have been the next
-         * message in the queue. Pm_QueuePeek will return NULL, but
-         * remember that an overflow occurred. (see Pm_Dequeue)
-         */
-        queue->peek_overflow = TRUE;
-    }
-    return NULL;
-}
-
+/* pmutil.c -- some helpful utilities for building midi
+               applications that use PortMidi
+ */
+#include <stdlib.h>
+#include <assert.h>
+#include <string.h>
+#include "portmidi.h"
+#include "pmutil.h"
+#include "pminternal.h"
+
+#ifdef WIN32
+#define bzero(addr, siz) memset(addr, 0, siz)
+#endif
+
+// #define QUEUE_DEBUG 1
+#ifdef QUEUE_DEBUG
+#include "stdio.h"
+#endif
+
+typedef struct {
+    long head;
+    long tail;
+    long len;
+    long overflow;
+    int32_t msg_size; /* number of int32_t in a message including extra word */
+    int32_t peek_overflow;
+    int32_t *buffer;
+    int32_t *peek;
+    int32_t peek_flag;
+} PmQueueRep;
+
+
+PMEXPORT PmQueue *Pm_QueueCreate(long num_msgs, int32_t bytes_per_msg)
+{
+    int32_t int32s_per_msg = 
+            (int32_t) (((bytes_per_msg + sizeof(int32_t) - 1) &
+                       ~(sizeof(int32_t) - 1)) / sizeof(int32_t));
+    PmQueueRep *queue = (PmQueueRep *) pm_alloc(sizeof(PmQueueRep));
+    if (!queue) /* memory allocation failed */
+        return NULL;
+
+    /* need extra word per message for non-zero encoding */
+    queue->len = num_msgs * (int32s_per_msg + 1);
+    queue->buffer = (int32_t *) pm_alloc(queue->len * sizeof(int32_t));
+    bzero(queue->buffer, queue->len * sizeof(int32_t));
+    if (!queue->buffer) {
+        pm_free(queue);
+        return NULL;
+    } else { /* allocate the "peek" buffer */
+        queue->peek = (int32_t *) pm_alloc(int32s_per_msg * sizeof(int32_t));
+        if (!queue->peek) {
+            /* free everything allocated so far and return */
+            pm_free(queue->buffer);
+            pm_free(queue);
+            return NULL;
+        }
+    }
+    bzero(queue->buffer, queue->len * sizeof(int32_t));
+    queue->head = 0;
+    queue->tail = 0;
+    /* msg_size is in words */
+    queue->msg_size = int32s_per_msg + 1; /* note extra word is counted */
+    queue->overflow = FALSE;
+    queue->peek_overflow = FALSE;
+    queue->peek_flag = FALSE;
+    return queue;
+}
+
+
+PMEXPORT PmError Pm_QueueDestroy(PmQueue *q)
+{
+    PmQueueRep *queue = (PmQueueRep *) q;
+        
+    /* arg checking */
+    if (!queue || !queue->buffer || !queue->peek) 
+                return pmBadPtr;
+    
+    pm_free(queue->peek);
+    pm_free(queue->buffer);
+    pm_free(queue);
+    return pmNoError;
+}
+
+
+PMEXPORT PmError Pm_Dequeue(PmQueue *q, void *msg)
+{
+    long head;
+    PmQueueRep *queue = (PmQueueRep *) q;
+    int i;
+    int32_t *msg_as_int32 = (int32_t *) msg;
+
+    /* arg checking */
+    if (!queue)
+        return pmBadPtr;
+    /* a previous peek operation encountered an overflow, but the overflow
+     * has not yet been reported to client, so do it now. No message is
+     * returned, but on the next call, we will return the peek buffer.
+     */
+    if (queue->peek_overflow) {
+        queue->peek_overflow = FALSE;
+        return pmBufferOverflow;
+    }
+    if (queue->peek_flag) {
+        memcpy(msg, queue->peek, (queue->msg_size - 1) * sizeof(int32_t));
+        queue->peek_flag = FALSE;
+        return pmGotData;
+    }
+
+    head = queue->head;
+    /* if writer overflows, it writes queue->overflow = tail+1 so that
+     * when the reader gets to that position in the buffer, it can 
+     * return the overflow condition to the reader. The problem is that
+     * at overflow, things have wrapped around, so tail == head, and the
+     * reader will detect overflow immediately instead of waiting until
+     * it reads everything in the buffer, wrapping around again to the
+     * point where tail == head. So the condition also checks that
+     * queue->buffer[head] is zero -- if so, then the buffer is now
+     * empty, and we're at the point in the msg stream where overflow
+     * occurred. It's time to signal overflow to the reader. If 
+     * queue->buffer[head] is non-zero, there's a message there and we
+     * should read all the way around the buffer before signalling overflow.
+     * There is a write-order dependency here, but to fail, the overflow
+     * field would have to be written while an entire buffer full of 
+     * writes are still pending. I'm assuming out-of-order writes are
+     * possible, but not that many.
+     */
+    if (queue->overflow == head + 1 && !queue->buffer[head]) {
+        queue->overflow = 0; /* non-overflow condition */
+        return pmBufferOverflow;
+    }
+
+    /* test to see if there is data in the queue -- test from back
+     * to front so if writer is simultaneously writing, we don't
+     * waste time discovering the write is not finished 
+     */
+    for (i = queue->msg_size - 1; i >= 0; i--) {
+        if (!queue->buffer[head + i]) {
+            return pmNoData;
+        }
+    }
+    memcpy(msg, (char *) &queue->buffer[head + 1], 
+           sizeof(int32_t) * (queue->msg_size - 1));
+    /* fix up zeros */
+    i = queue->buffer[head];
+    while (i < queue->msg_size) {
+        int32_t j;
+        i--; /* msg does not have extra word so shift down */
+        j = msg_as_int32[i];
+        msg_as_int32[i] = 0;
+        i = j;
+    }
+    /* signal that data has been removed by zeroing: */
+    bzero((char *) &queue->buffer[head], sizeof(int32_t) * queue->msg_size);
+
+    /* update head */
+    head += queue->msg_size;
+    if (head == queue->len) head = 0;
+    queue->head = head;
+    return pmGotData; /* success */
+}
+
+
+
+PMEXPORT PmError Pm_SetOverflow(PmQueue *q)
+{
+    PmQueueRep *queue = (PmQueueRep *) q;
+    long tail;
+    /* arg checking */
+    if (!queue)
+        return pmBadPtr;
+    /* no more enqueue until receiver acknowledges overflow */
+    if (queue->overflow) return pmBufferOverflow;
+    tail = queue->tail;
+    queue->overflow = tail + 1;
+    return pmBufferOverflow;
+}
+
+
+PMEXPORT PmError Pm_Enqueue(PmQueue *q, void *msg)
+{
+    PmQueueRep *queue = (PmQueueRep *) q;
+    long tail;
+    int i;
+    int32_t *src = (int32_t *) msg;
+    int32_t *ptr;
+    int32_t *dest;
+    int rslt;
+    if (!queue) 
+        return pmBadPtr;
+    /* no more enqueue until receiver acknowledges overflow */
+    if (queue->overflow) return pmBufferOverflow;
+    rslt = Pm_QueueFull(q);
+    /* already checked above: if (rslt == pmBadPtr) return rslt; */
+    tail = queue->tail;
+    if (rslt) {
+        queue->overflow = tail + 1;
+        return pmBufferOverflow;
+    }
+
+    /* queue is has room for message, and overflow flag is cleared */
+    ptr = &queue->buffer[tail];
+    dest = ptr + 1;
+    for (i = 1; i < queue->msg_size; i++) {
+        int32_t j = src[i - 1];
+        if (!j) {
+            *ptr = i;
+            ptr = dest;
+        } else {
+            *dest = j;
+        }
+        dest++;
+    }
+    *ptr = i;
+    tail += queue->msg_size;
+    if (tail == queue->len) tail = 0;
+    queue->tail = tail;
+    return pmNoError;
+}
+
+
+PMEXPORT int Pm_QueueEmpty(PmQueue *q)
+{
+    PmQueueRep *queue = (PmQueueRep *) q;
+    return (!queue) ||  /* null pointer -> return "empty" */
+           (queue->buffer[queue->head] == 0 && !queue->peek_flag);
+}
+
+
+PMEXPORT int Pm_QueueFull(PmQueue *q)
+{
+    long tail;
+    int i; 
+    PmQueueRep *queue = (PmQueueRep *) q;
+    /* arg checking */
+    if (!queue)
+        return pmBadPtr;
+    tail = queue->tail;
+    /* test to see if there is space in the queue */
+    for (i = 0; i < queue->msg_size; i++) {
+        if (queue->buffer[tail + i]) {
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+
+PMEXPORT void *Pm_QueuePeek(PmQueue *q)
+{
+    PmError rslt;
+    int32_t temp;
+    PmQueueRep *queue = (PmQueueRep *) q;
+    /* arg checking */
+    if (!queue)
+        return NULL;
+
+    if (queue->peek_flag) {
+        return queue->peek;
+    }
+    /* this is ugly: if peek_overflow is set, then Pm_Dequeue() 
+     * returns immediately with pmBufferOverflow, but here, we
+     * want Pm_Dequeue() to really check for data. If data is
+     * there, we can return it
+     */
+    temp = queue->peek_overflow;
+    queue->peek_overflow = FALSE;
+    rslt = Pm_Dequeue(q, queue->peek);
+    queue->peek_overflow = temp;
+
+    if (rslt == 1) {
+        queue->peek_flag = TRUE;
+        return queue->peek;
+    } else if (rslt == pmBufferOverflow) {
+        /* when overflow is indicated, the queue is empty and the 
+         * first message that was dropped by Enqueue (signalling
+         * pmBufferOverflow to its caller) would have been the next
+         * message in the queue. Pm_QueuePeek will return NULL, but
+         * remember that an overflow occurred. (see Pm_Dequeue)
+         */
+        queue->peek_overflow = TRUE;
+    }
+    return NULL;
+}
+
diff --git a/pd/portmidi/pm_common/pmutil.h b/pd/portmidi/pm_common/pmutil.h
old mode 100644
new mode 100755
index 8e4294670..40dabbff0
--- a/pd/portmidi/pm_common/pmutil.h
+++ b/pd/portmidi/pm_common/pmutil.h
@@ -44,8 +44,8 @@ typedef void PmQueue;
     Pm_QueueDestroy() destroys the queue and frees its storage.
  */
 
-PmQueue *Pm_QueueCreate(long num_msgs, long bytes_per_msg);
-PmError Pm_QueueDestroy(PmQueue *queue);
+PMEXPORT PmQueue *Pm_QueueCreate(long num_msgs, int32_t bytes_per_msg);
+PMEXPORT PmError Pm_QueueDestroy(PmQueue *queue);
 
 /* 
     Pm_Dequeue() removes one item from the queue, copying it into msg.
@@ -56,7 +56,7 @@ PmError Pm_QueueDestroy(PmQueue *queue);
     overflow report. This protocol ensures that the reader will be 
     notified when data is lost due to overflow.
  */
-PmError Pm_Dequeue(PmQueue *queue, void *msg);
+PMEXPORT PmError Pm_Dequeue(PmQueue *queue, void *msg);
 
 
 /*
@@ -64,7 +64,7 @@ PmError Pm_Dequeue(PmQueue *queue, void *msg);
     Returns pmNoError if successful and pmBufferOverflow if the queue was 
     already full. If pmBufferOverflow is returned, the overflow flag is set.
  */
-PmError Pm_Enqueue(PmQueue *queue, void *msg);
+PMEXPORT PmError Pm_Enqueue(PmQueue *queue, void *msg);
 
 
 /*
@@ -78,9 +78,12 @@ PmError Pm_Enqueue(PmQueue *queue, void *msg);
     Pm_Dequeue() could still return 0 after Pm_QueueEmpty() returns
     false. On the other hand, Pm_QueueFull() is pessimistic: if it
     returns false, then Pm_Enqueue() is guaranteed to succeed. 
+
+    Error conditions: Pm_QueueFull() returns pmBadPtr if queue is NULL.
+    Pm_QueueEmpty() returns FALSE if queue is NULL.
  */
-int Pm_QueueFull(PmQueue *queue);
-int Pm_QueueEmpty(PmQueue *queue);
+PMEXPORT int Pm_QueueFull(PmQueue *queue);
+PMEXPORT int Pm_QueueEmpty(PmQueue *queue);
 
 
 /*
@@ -106,7 +109,7 @@ int Pm_QueueEmpty(PmQueue *queue);
     Note that Pm_QueuePeek() is not a fast check, so if possible, you 
     might as well just call Pm_Dequeue() and accept the data if it is there.
  */
-void *Pm_QueuePeek(PmQueue *queue);
+PMEXPORT void *Pm_QueuePeek(PmQueue *queue);
 
 /*
     Pm_SetOverflow() allows the writer (enqueuer) to signal an overflow
@@ -117,7 +120,7 @@ void *Pm_QueuePeek(PmQueue *queue);
     is NULL, returns pmBufferOverflow if buffer is already in an overflow
     state, returns pmNoError if successfully set overflow state.
  */
-PmError Pm_SetOverflow(PmQueue *queue);
+PMEXPORT PmError Pm_SetOverflow(PmQueue *queue);
 
 #ifdef __cplusplus
 }
diff --git a/pd/portmidi/pm_common/portmidi-dynamic.vcproj b/pd/portmidi/pm_common/portmidi-dynamic.vcproj
new file mode 100644
index 000000000..788c36963
--- /dev/null
+++ b/pd/portmidi/pm_common/portmidi-dynamic.vcproj
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="portmidi-dynamic"
+	ProjectGUID="{7283FAD1-7415-4061-A19A-FF5C7BCE9306}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="portmidi-dynamic.dir\Debug"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="C:\Users\rbd\portmedia\portmidi\pm_common;C:\Users\rbd\portmedia\portmidi\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="3"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,portmidi_dynamic_EXPORTS"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="C:/Users/rbd/portmedia/portmidi/Debug/portmidi.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="C:\Users\rbd\portmedia\portmidi\pm_common;C:\Users\rbd\portmedia\portmidi\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,portmidi_dynamic_EXPORTS"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,portmidi_dynamic_EXPORTS"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  winmm.lib "
+				OutputFile="C:\Users\rbd\portmedia\portmidi\Debug\portmidi.dll"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="C:\Users\rbd\portmedia\portmidi\Debug\portmidi.pdb"
+				GenerateDebugInformation="TRUE"
+				ImportLibrary="C:\Users\rbd\portmedia\portmidi\Debug\portmidi.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="portmidi-dynamic.dir\Release"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="C:\Users\rbd\portmedia\portmidi\pm_common;C:\Users\rbd\portmedia\portmidi\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="2"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,portmidi_dynamic_EXPORTS"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="C:/Users/rbd/portmedia/portmidi/Release/portmidi.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="C:\Users\rbd\portmedia\portmidi\pm_common;C:\Users\rbd\portmedia\portmidi\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,portmidi_dynamic_EXPORTS"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,portmidi_dynamic_EXPORTS"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  winmm.lib "
+				OutputFile="C:\Users\rbd\portmedia\portmidi\Release\portmidi.dll"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="C:\Users\rbd\portmedia\portmidi\Release\portmidi.pdb"
+				ImportLibrary="C:\Users\rbd\portmedia\portmidi\Release\portmidi.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+			<File
+				RelativePath="C:\Users\rbd\portmedia\portmidi\pm_common\CMakeLists.txt">
+				<FileConfiguration
+					Name="Debug|Win32">
+					<Tool
+					Name="VCCustomBuildTool"
+					Description="Building Custom Rule C:/Users/rbd/portmedia/portmidi/pm_common/CMakeLists.txt"
+					CommandLine="&quot;C:\Program Files\CMake 2.6\bin\cmake.exe&quot; -HC:/Users/rbd/portmedia/portmidi -BC:/Users/rbd/portmedia/portmidi --check-stamp-file CMakeFiles/generate.stamp"
+					AdditionalDependencies="C:\Users\rbd\portmedia\portmidi\pm_common\CMakeLists.txt;&quot;C:\Program Files\CMake 2.6\share\cmake-2.6\Modules\FindJNI.cmake&quot;;C:\Users\rbd\portmedia\portmidi\pm_common\CMakeLists.txt;"
+					Outputs="CMakeFiles\generate.stamp"/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32">
+					<Tool
+					Name="VCCustomBuildTool"
+					Description="Building Custom Rule C:/Users/rbd/portmedia/portmidi/pm_common/CMakeLists.txt"
+					CommandLine="&quot;C:\Program Files\CMake 2.6\bin\cmake.exe&quot; -HC:/Users/rbd/portmedia/portmidi -BC:/Users/rbd/portmedia/portmidi --check-stamp-file CMakeFiles/generate.stamp"
+					AdditionalDependencies="C:\Users\rbd\portmedia\portmidi\pm_common\CMakeLists.txt;&quot;C:\Program Files\CMake 2.6\share\cmake-2.6\Modules\FindJNI.cmake&quot;;C:\Users\rbd\portmedia\portmidi\pm_common\CMakeLists.txt;"
+					Outputs="CMakeFiles\generate.stamp"/>
+				</FileConfiguration>
+			</File>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="C:\Users\rbd\portmedia\portmidi\pm_win\pmwin.c">
+			</File>
+			<File
+				RelativePath="C:\Users\rbd\portmedia\portmidi\pm_win\pmwinmm.c">
+			</File>
+			<File
+				RelativePath="C:\Users\rbd\portmedia\portmidi\porttime\ptwinmm.c">
+			</File>
+			<File
+				RelativePath="C:\Users\rbd\portmedia\portmidi\pm_common\pmutil.c">
+			</File>
+			<File
+				RelativePath="C:\Users\rbd\portmedia\portmidi\pm_common\portmidi.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_common/portmidi-static.vcproj b/pd/portmidi/pm_common/portmidi-static.vcproj
new file mode 100644
index 000000000..91918d56f
--- /dev/null
+++ b/pd/portmidi/pm_common/portmidi-static.vcproj
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="portmidi-static"
+	ProjectGUID="{2985D5DA-D91E-44E0-924B-E612B6AA33F6}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="portmidi-static.dir\Debug"
+			ConfigurationType="4"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../Debug/portmidi_s.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\Debug\portmidi_s.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="portmidi-static.dir\Release"
+			ConfigurationType="4"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../Release/portmidi_s.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;&quot;C:\Program Files\Java\jdk1.6.0_16\include&quot;;&quot;C:\Program Files\Java\jdk1.6.0_16\include\win32&quot;;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\Release\portmidi_s.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_win\pmwin.c">
+			</File>
+			<File
+				RelativePath="..\pm_win\pmwinmm.c">
+			</File>
+			<File
+				RelativePath="..\porttime\ptwinmm.c">
+			</File>
+			<File
+				RelativePath="..\pm_common\pmutil.c">
+			</File>
+			<File
+				RelativePath="..\pm_common\portmidi.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_common/portmidi.c b/pd/portmidi/pm_common/portmidi.c
old mode 100644
new mode 100755
index 71988e471..b7161700d
--- a/pd/portmidi/pm_common/portmidi.c
+++ b/pd/portmidi/pm_common/portmidi.c
@@ -1,1184 +1,1137 @@
-#include "stdlib.h"
-#include "string.h"
-#include "portmidi.h"
-#include "porttime.h"
-#ifdef NEWBUFFER
-#include "pmutil.h"
-#endif
-#include "pminternal.h"
-#include <assert.h>
-
-#define MIDI_CLOCK      0xf8
-#define MIDI_ACTIVE     0xfe
-#define MIDI_STATUS_MASK 0x80
-#define MIDI_SYSEX      0xf0
-#define MIDI_EOX        0xf7
-#define MIDI_START      0xFA
-#define MIDI_STOP       0xFC
-#define MIDI_CONTINUE   0xFB
-#define MIDI_F9         0xF9
-#define MIDI_FD         0xFD
-#define MIDI_RESET      0xFF
-#define MIDI_NOTE_ON    0x90
-#define MIDI_NOTE_OFF   0x80
-#define MIDI_CHANNEL_AT 0xD0
-#define MIDI_POLY_AT    0xA0
-#define MIDI_PROGRAM    0xC0
-#define MIDI_CONTROL    0xB0
-#define MIDI_PITCHBEND  0xE0
-#define MIDI_MTC        0xF1
-#define MIDI_SONGPOS    0xF2
-#define MIDI_SONGSEL    0xF3
-#define MIDI_TUNE       0xF6
-
-#define is_empty(midi) ((midi)->tail == (midi)->head)
-
-static int pm_initialized = FALSE;
-int pm_hosterror;
-char pm_hosterror_text[PM_HOST_ERROR_MSG_LEN];
-
-#ifdef PM_CHECK_ERRORS
-
-#include <stdio.h>
-
-#define STRING_MAX 80
-
-static void prompt_and_exit(void)
-{
-    char line[STRING_MAX];
-    printf("type ENTER...");
-    fgets(line, STRING_MAX, stdin);
-    /* this will clean up open ports: */
-    exit(-1);
-}
-
-
-static PmError pm_errmsg(PmError err)
-{
-    if (err == pmHostError) {
-        /* it seems pointless to allocate memory and copy the string,
-         * so I will do the work of Pm_GetHostErrorText directly
-         */
-        printf("PortMidi found host error...\n  %s\n", pm_hosterror_text);
-        pm_hosterror = FALSE;
-        pm_hosterror_text[0] = 0; /* clear the message */
-        prompt_and_exit();
-    } else if (err < 0) {
-        printf("PortMidi call failed...\n  %s\n", Pm_GetErrorText(err));
-        prompt_and_exit();
-    }
-    return err;
-}
-#else
-#define pm_errmsg(err) err
-#endif
-
-/*
-====================================================================
-system implementation of portmidi interface
-====================================================================
-*/
-
-int pm_descriptor_max = 0;
-int pm_descriptor_index = 0;
-descriptor_type descriptors = NULL;
-
-/* pm_add_device -- describe interface/device pair to library 
- *
- * This is called at intialization time, once for each 
- * interface (e.g. DirectSound) and device (e.g. SoundBlaster 1)
- * The strings are retained but NOT COPIED, so do not destroy them!
- *
- * returns pmInvalidDeviceId if device memory is exceeded
- * otherwise returns pmNoError
- */
-PmError pm_add_device(char *interf, char *name, int input, 
-                      void *descriptor, pm_fns_type dictionary) {
-    if (pm_descriptor_index >= pm_descriptor_max) {
-        // expand descriptors
-        descriptor_type new_descriptors = 
-                pm_alloc(sizeof(descriptor_node) * (pm_descriptor_max + 32));
-        if (!new_descriptors) return pmInsufficientMemory;
-        if (descriptors) {
-            memcpy(new_descriptors, descriptors, 
-                   sizeof(descriptor_node) * pm_descriptor_max);
-            free(descriptors);
-        }
-        pm_descriptor_max += 32;
-        descriptors = new_descriptors;
-    }
-    descriptors[pm_descriptor_index].pub.interf = interf;
-    descriptors[pm_descriptor_index].pub.name = name;
-    descriptors[pm_descriptor_index].pub.input = input;
-    descriptors[pm_descriptor_index].pub.output = !input;
-
-    /* default state: nothing to close (for automatic device closing) */
-    descriptors[pm_descriptor_index].pub.opened = FALSE;
-
-    /* ID number passed to win32 multimedia API open */
-    descriptors[pm_descriptor_index].descriptor = descriptor;
-    
-    /* points to PmInternal, allows automatic device closing */
-    descriptors[pm_descriptor_index].internalDescriptor = NULL;
-
-    descriptors[pm_descriptor_index].dictionary = dictionary;
-    
-    pm_descriptor_index++;
-    
-    return pmNoError;
-}
-
-
-/*
-====================================================================
-portmidi implementation
-====================================================================
-*/
-
-int Pm_CountDevices( void ) {
-    Pm_Initialize();
-    /* no error checking -- Pm_Initialize() does not fail */
-    return pm_descriptor_index;
-}
-
-
-const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id ) {
-    Pm_Initialize(); /* no error check needed */
-    if (id >= 0 && id < pm_descriptor_index) {
-        return &descriptors[id].pub;
-    }
-    return NULL;
-}
-
-/* pm_success_fn -- "noop" function pointer */
-PmError pm_success_fn(PmInternal *midi) {
-    return pmNoError;
-}
-
-/* none_write -- returns an error if called */
-PmError none_write_short(PmInternal *midi, PmEvent *buffer) {
-    return pmBadPtr;
-}
-
-/* pm_fail_timestamp_fn -- placeholder for begin_sysex and flush */
-PmError pm_fail_timestamp_fn(PmInternal *midi, PmTimestamp timestamp) {
-    return pmBadPtr;
-}
-
-PmError none_write_byte(PmInternal *midi, unsigned char byte, 
-                        PmTimestamp timestamp) {
-    return pmBadPtr;
-}
-
-/* pm_fail_fn -- generic function, returns error if called */
-PmError pm_fail_fn(PmInternal *midi) {
-    return pmBadPtr;
-}
-
-static PmError none_open(PmInternal *midi, void *driverInfo) {
-    return pmBadPtr;
-}
-static void none_get_host_error(PmInternal * midi, char * msg, unsigned int len) {
-    strcpy(msg, "");
-}
-static unsigned int none_has_host_error(PmInternal * midi) {
-    return FALSE;
-}
-PmTimestamp none_synchronize(PmInternal *midi) {
-    return 0;
-}
-
-#define none_abort pm_fail_fn
-#define none_close pm_fail_fn
-
-pm_fns_node pm_none_dictionary = {
-    none_write_short,
-    none_sysex,
-    none_sysex,
-    none_write_byte,
-    none_write_short,
-    none_write_flush,
-    none_synchronize,
-    none_open,
-    none_abort, 
-    none_close,
-    none_poll,
-    none_has_host_error,
-    none_get_host_error 
-};
-
-
-const char *Pm_GetErrorText( PmError errnum ) {
-    const char *msg;
-
-    switch(errnum)
-    {
-    case pmNoError:                  
-        msg = ""; 
-        break;
-    case pmHostError:                
-        msg = "PortMidi: `Host error'"; 
-        break;
-    case pmInvalidDeviceId:          
-        msg = "PortMidi: `Invalid device ID'"; 
-        break;
-    case pmInsufficientMemory:       
-        msg = "PortMidi: `Insufficient memory'"; 
-        break;
-    case pmBufferTooSmall:           
-        msg = "PortMidi: `Buffer too small'"; 
-        break;
-    case pmBadPtr:                   
-        msg = "PortMidi: `Bad pointer'"; 
-        break;
-    case pmInternalError:            
-        msg = "PortMidi: `Internal PortMidi Error'"; 
-        break;
-    case pmBufferOverflow:
-        msg = "PortMidi: `Buffer overflow'";
-        break;
-    case pmBadData:
-        msg = "PortMidi: `Invalid MIDI message Data'";
-        break;
-    case pmBufferMaxSize:
-        msg = "PortMidi: `Buffer cannot be made larger'";
-        break;
-    default:                         
-        msg = "PortMidi: `Illegal error number'"; 
-        break;
-    }
-    return msg;
-}
-
-
-/* This can be called whenever you get a pmHostError return value.
- * The error will always be in the global pm_hosterror_text.
- */
-void Pm_GetHostErrorText(char * msg, unsigned int len) {
-    assert(msg);
-    assert(len > 0);
-    if (pm_hosterror) {
-        strncpy(msg, (char *) pm_hosterror_text, len);
-        pm_hosterror = FALSE;
-        pm_hosterror_text[0] = 0; /* clear the message; not necessary, but it
-                                     might help with debugging */
-        msg[len - 1] = 0; /* make sure string is terminated */
-    } else {
-        msg[0] = 0; /* no string to return */
-    }
-}
-
-
-int Pm_HasHostError(PortMidiStream * stream) {
-    if (pm_hosterror) return TRUE;
-    if (stream) {
-        PmInternal * midi = (PmInternal *) stream;
-        pm_hosterror = (*midi->dictionary->has_host_error)(midi);
-        if (pm_hosterror) {
-            midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                         PM_HOST_ERROR_MSG_LEN);
-            /* now error message is global */
-            return TRUE;
-        }
-    }
-    return FALSE;
-}
-
-
-PmError Pm_Initialize( void ) {
-    if (!pm_initialized) {
-        pm_hosterror = FALSE;
-        pm_hosterror_text[0] = 0; /* the null string */
-        pm_init();
-        pm_initialized = TRUE;
-    }
-    return pmNoError;
-}
-
-
-PmError Pm_Terminate( void ) {
-    if (pm_initialized) {
-        pm_term();
-        // if there are no devices, descriptors might still be NULL
-        if (descriptors != NULL) {
-            free(descriptors);
-            descriptors = NULL;
-        }
-        pm_descriptor_index = 0;
-        pm_descriptor_max = 0;
-        pm_initialized = FALSE;
-    }
-    return pmNoError;
-}
-
-
-/* Pm_Read -- read up to length longs from source into buffer */
-/*
- * returns number of longs actually read, or error code
- */
-PmError Pm_Read(PortMidiStream *stream, PmEvent *buffer, long length) {
-    PmInternal *midi = (PmInternal *) stream;
-    int n = 0;
-#ifndef NEWBUFFER
-    long head;
-#endif
-    PmError err = pmNoError;
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if(midi == NULL)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.input)
-        err = pmBadPtr;    
-    /* First poll for data in the buffer...
-     * This either simply checks for data, or attempts first to fill the buffer
-     * with data from the MIDI hardware; this depends on the implementation.
-     * We could call Pm_Poll here, but that would redo a lot of redundant
-     * parameter checking, so I copied some code from Pm_Poll to here: */
-    else err = (*(midi->dictionary->poll))(midi);
-
-    if (err != pmNoError) {
-        if (err == pmHostError) {
-            midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                         PM_HOST_ERROR_MSG_LEN);
-          pm_hosterror = TRUE;
-        }
-        return pm_errmsg(err);
-    }
-
-#ifdef NEWBUFFER
-    while (n < length) {
-        PmError err = Pm_Dequeue(midi->queue, buffer++);
-        if (err == pmBufferOverflow) {
-            /* ignore the data we have retreived so far */
-            return pm_errmsg(pmBufferOverflow);
-        } else if (err == 0) { /* empty queue */
-            break;
-        }
-        n++;
-    }
-#else
-    head = midi->head;
-    while (head != midi->tail && n < length) {
-        PmEvent event = midi->buffer[head++];
-        *buffer++ = event;
-        if (head == midi->buffer_len) head = 0;
-        n++;
-    }
-    midi->head = head;
-    if (midi->overflow) {
-        midi->head = midi->tail;
-        midi->overflow = FALSE;
-        return pm_errmsg(pmBufferOverflow);
-    }
-#endif
-    return n;
-}
-
-PmError Pm_Poll( PortMidiStream *stream )
-{
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err;
-#ifdef NEWBUFFER
-    PmEvent *event;
-#endif
-
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if(midi == NULL)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.input)
-        err = pmBadPtr;
-    else
-        err = (*(midi->dictionary->poll))(midi);
-
-    if (err != pmNoError) {
-        if (err == pmHostError) {
-            midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                         PM_HOST_ERROR_MSG_LEN);
-           pm_hosterror = TRUE;
-        }
-        return pm_errmsg(err);
-    }
-
-#ifdef NEWBUFFER
-    event = (PmEvent *) Pm_QueuePeek(midi->queue);
-    return event != NULL;
-#else
-    return midi->head != midi->tail;
-#endif
-}
-
-
-/* this is called from Pm_Write and Pm_WriteSysEx to issue a
- * call to the system-dependent end_sysex function and handle 
- * the error return
- */
-static PmError pm_end_sysex(PmInternal *midi)
-{
-    PmError err = (*midi->dictionary->end_sysex)(midi, 0);
-    midi->sysex_in_progress = FALSE;
-    if (err == pmHostError) {
-        midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                     PM_HOST_ERROR_MSG_LEN);
-        pm_hosterror = TRUE;
-    }
-    return err;
-}
-
-
-/* to facilitate correct error-handling, Pm_Write, Pm_WriteShort, and
-   Pm_WriteSysEx all operate a state machine that "outputs" calls to
-   write_short, begin_sysex, write_byte, end_sysex, and write_realtime */
-
-PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, long length)
-{
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err;
-    int i;
-    int bits;
-    
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if(midi == NULL)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else if(!descriptors[midi->device_id].pub.output)
-        err = pmBadPtr;
-    else
-        err = pmNoError;
-    
-    if (err != pmNoError) goto pm_write_error;
-    
-    if (midi->latency == 0) {
-        midi->now = 0;
-    } else {
-        midi->now = (*(midi->time_proc))(midi->time_info);
-        if (midi->first_message || midi->sync_time + 100 /*ms*/ < midi->now) {
-            /* time to resync */
-            midi->now = (*midi->dictionary->synchronize)(midi);
-            midi->first_message = FALSE;
-        }
-    }
-    /* error recovery: when a sysex is detected, we call
-     *   dictionary->begin_sysex() followed by calls to
-     *   dictionary->write_byte() and dictionary->write_realtime()
-     *   until an end-of-sysex is detected, when we call
-     *   dictionary->end_sysex(). After an error occurs, 
-     *   Pm_Write() continues to call functions. For example,
-     *   it will continue to call write_byte() even after
-     *   an error sending a sysex message, and end_sysex() will be
-     *   called when an EOX or non-real-time status is found.
-     * When errors are detected, Pm_Write() returns immediately, 
-     *   so it is possible that this will drop data and leave
-     *   sysex messages in a partially transmitted state.
-     */
-    for (i = 0; i < length; i++) {
-        unsigned long msg = buffer[i].message;
-        bits = 0;
-        /* is this a sysex message? */
-        if (Pm_MessageStatus(msg) == MIDI_SYSEX) {
-            if (midi->sysex_in_progress) {
-                /* error: previous sysex was not terminated by EOX */
-                midi->sysex_in_progress = FALSE;
-                err = pmBadData;
-                goto pm_write_error;
-            }
-            midi->sysex_in_progress = TRUE;
-            if ((err = (*midi->dictionary->begin_sysex)(midi, 
-                               buffer[i].timestamp)) != pmNoError)
-                goto pm_write_error;
-            if ((err = (*midi->dictionary->write_byte)(midi, MIDI_SYSEX,
-                               buffer[i].timestamp)) != pmNoError) 
-                goto pm_write_error;
-            bits = 8;
-            /* fall through to continue sysex processing */
-        } else if ((msg & MIDI_STATUS_MASK) && 
-                   (Pm_MessageStatus(msg) != MIDI_EOX)) {
-            /* a non-sysex message */
-            if (midi->sysex_in_progress) {
-                /* this should be a realtime message */
-                if (is_real_time(msg)) {
-                    if ((err = (*midi->dictionary->write_realtime)(midi, 
-                                       &(buffer[i]))) != pmNoError)
-                        goto pm_write_error;
-                } else {
-                    midi->sysex_in_progress = FALSE;
-                    err = pmBadData;
-                    /* ignore any error from this, because we already have one */
-                    /* pass 0 as timestamp -- it's ignored */
-                    (*midi->dictionary->end_sysex)(midi, 0);
-                    goto pm_write_error;
-                }
-            } else { /* regular short midi message */
-                if ((err = (*midi->dictionary->write_short)(midi, 
-                                   &(buffer[i]))) != pmNoError)
-                    goto pm_write_error;
-                continue;
-            }
-        }
-        if (midi->sysex_in_progress) { /* send sysex bytes until EOX */
-            /* see if we can accelerate data transfer */
-            if (bits == 0 && midi->fill_base && /* 4 bytes to copy */
-                (*midi->fill_offset_ptr) + 4 <= midi->fill_length &&
-                (msg & 0x80808080) == 0) { /* all data */
-                    /* copy 4 bytes from msg to fill_base + fill_offset */
-                    unsigned char *ptr = midi->fill_base + 
-                                         *(midi->fill_offset_ptr);
-                    ptr[0] = msg; ptr[1] = msg >> 8; 
-                    ptr[2] = msg >> 18; ptr[3] = msg >> 24;
-                    (*midi->fill_offset_ptr) += 4;
-                     continue;
-            }
-            /* no acceleration, so do byte-by-byte copying */
-            while (bits < 32) {
-                unsigned char midi_byte = (unsigned char) (msg >> bits);
-                if ((err = (*midi->dictionary->write_byte)(midi, midi_byte, 
-                                   buffer[i].timestamp)) != pmNoError)
-                    goto pm_write_error;
-                if (midi_byte == MIDI_EOX) {
-                    err = pm_end_sysex(midi);
-                    if (err != pmNoError) goto error_exit;
-                    break; /* from while loop */
-                }
-                bits += 8;
-            }
-        } else {
-            /* not in sysex mode, but message did not start with status */
-            err = pmBadData;
-            goto pm_write_error;
-        }
-    }
-    /* after all messages are processed, send the data */
-    if (!midi->sysex_in_progress)
-        err = (*midi->dictionary->write_flush)(midi, 0);
-pm_write_error:
-    if (err == pmHostError) {
-        midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                     PM_HOST_ERROR_MSG_LEN);
-        pm_hosterror = TRUE;
-    }
-error_exit:
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_WriteShort( PortMidiStream *stream, long when, long msg)
-{
-    PmEvent event;
-    
-    event.timestamp = when;
-    event.message = msg;
-    return Pm_Write(stream, &event, 1);
-}
-
-
-PmError Pm_WriteSysEx(PortMidiStream *stream, PmTimestamp when, 
-                      unsigned char *msg)
-{
-    /* allocate buffer space for PM_DEFAULT_SYSEX_BUFFER_SIZE bytes */
-    /* each PmEvent holds sizeof(PmMessage) bytes of sysex data */
-#define BUFLEN (PM_DEFAULT_SYSEX_BUFFER_SIZE / sizeof(PmMessage))
-    PmEvent buffer[BUFLEN];
-    int buffer_size = 1; /* first time, send 1. After that, it's BUFLEN */
-    PmInternal *midi = (PmInternal *) stream;
-    /* the next byte in the buffer is represented by an index, bufx, and
-       a shift in bits */
-    int shift = 0;
-    int bufx = 0;
-    buffer[0].message = 0;
-    buffer[0].timestamp = when;
-
-    while (1) {
-        /* insert next byte into buffer */
-        buffer[bufx].message |= ((*msg) << shift);
-        shift += 8;
-        if (*msg++ == MIDI_EOX) break;
-        if (shift == 32) {
-            shift = 0;
-            bufx++;
-            if (bufx == buffer_size) {
-                PmError err = Pm_Write(stream, buffer, buffer_size);
-                /* note: Pm_Write has already called errmsg() */
-                if (err) return err;
-                /* prepare to fill another buffer */
-                bufx = 0;
-                buffer_size = BUFLEN;
-                /* optimization: maybe we can just copy bytes */
-                if (midi->fill_base) {
-                    PmError err;
-                    while (*(midi->fill_offset_ptr) < midi->fill_length) {
-                        midi->fill_base[(*midi->fill_offset_ptr)++] = *msg;
-                        if (*msg++ == MIDI_EOX) {
-                            err = pm_end_sysex(midi);
-                            if (err != pmNoError) return pm_errmsg(err);
-                            goto end_of_sysex;
-                        }
-                    }
-                    /* I thought that I could do a pm_Write here and
-                     * change this if to a loop, avoiding calls in Pm_Write
-                     * to the slower write_byte, but since 
-                     * sysex_in_progress is true, this will not flush
-                     * the buffer, and we'll infinite loop: */
-                    /* err = Pm_Write(stream, buffer, 0);
-                       if (err) return err; */
-                    /* instead, the way this works is that Pm_Write calls
-                     * write_byte on 4 bytes. The first, since the buffer
-                     * is full, will flush the buffer and allocate a new
-                     * one. This primes the buffer so
-                     * that we can return to the loop above and fill it
-                     * efficiently without a lot of function calls.
-                     */
-                    buffer_size = 1; /* get another message started */
-                }
-            }
-            buffer[bufx].message = 0;
-            buffer[bufx].timestamp = when;
-        } 
-        /* keep inserting bytes until you find MIDI_EOX */
-    }
-end_of_sysex:
-    /* we're finished sending full buffers, but there may
-     * be a partial one left.
-     */
-    if (shift != 0) bufx++; /* add partial message to buffer len */
-    if (bufx) { /* bufx is number of PmEvents to send from buffer */
-        PmError err = Pm_Write(stream, buffer, bufx);
-        if (err) return err;
-    }
-    return pmNoError;
-}
-
-
-
-PmError Pm_OpenInput(PortMidiStream** stream,
-                     PmDeviceID inputDevice,
-                     void *inputDriverInfo,
-                     long bufferSize,
-                     PmTimeProcPtr time_proc,
-                     void *time_info) {
-    PmInternal *midi;
-    PmError err = pmNoError;
-    pm_hosterror = FALSE;
-    *stream = NULL;
-    
-    /* arg checking */
-    if (inputDevice < 0 || inputDevice >= pm_descriptor_index) 
-        err = pmInvalidDeviceId;
-    else if (!descriptors[inputDevice].pub.input) 
-        err =  pmBadPtr;
-    else if(descriptors[inputDevice].pub.opened)
-        err =  pmBadPtr;
-    
-    if (err != pmNoError) 
-        goto error_return;
-
-    /* create portMidi internal data */
-    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
-    *stream = midi;
-    if (!midi) {
-        err = pmInsufficientMemory;
-        goto error_return;
-    }
-    midi->device_id = inputDevice;
-    midi->write_flag = FALSE;
-    midi->time_proc = time_proc;
-    midi->time_info = time_info;
-    /* windows adds timestamps in the driver and these are more accurate than
-       using a time_proc, so do not automatically provide a time proc. Non-win
-       implementations may want to provide a default time_proc in their
-       system-specific midi_out_open() method.
-     */
-    if (bufferSize <= 0) bufferSize = 256; /* default buffer size */
-#ifdef NEWBUFFER
-    midi->queue = Pm_QueueCreate(bufferSize, sizeof(PmEvent));
-    if (!midi->queue) {
-#else
-    else bufferSize++; /* buffer holds N-1 msgs, so increase request by 1 */
-    midi->buffer = (PmEvent *) pm_alloc(sizeof(PmEvent) * midi->buffer_len); 
-    midi->head = 0;
-    midi->tail = 0;
-    midi->overflow = FALSE;
-    if (!midi->buffer) { 
-#endif
-        /* free portMidi data */
-        *stream = NULL;
-        pm_free(midi); 
-        err = pmInsufficientMemory;
-        goto error_return;
-    }
-    midi->buffer_len = bufferSize; /* portMidi input storage */
-    midi->latency = 0; /* not used */
-    midi->sysex_in_progress = FALSE;
-    midi->sysex_message = 0; 
-    midi->sysex_message_count = 0; 
-    midi->filters = PM_FILT_ACTIVE;
-    midi->channel_mask = 0xFFFF;
-    midi->sync_time = 0;
-    midi->first_message = TRUE;
-    midi->dictionary = descriptors[inputDevice].dictionary;
-    midi->fill_base = NULL;
-    midi->fill_offset_ptr = NULL;
-    midi->fill_length = 0;
-    descriptors[inputDevice].internalDescriptor = midi;
-    /* open system dependent input device */
-    err = (*midi->dictionary->open)(midi, inputDriverInfo);
-    if (err) {
-        *stream = NULL;
-        descriptors[inputDevice].internalDescriptor = NULL;
-        /* free portMidi data */
-#ifdef NEWBUFFER
-        Pm_QueueDestroy(midi->queue);
-#else
-        pm_free(midi->buffer);  
-#endif
-        pm_free(midi);
-    } else {
-        /* portMidi input open successful */
-        descriptors[inputDevice].pub.opened = TRUE;
-    }
-error_return:
-    /* note: if there is a pmHostError, it is the responsibility
-     * of the system-dependent code (*midi->dictionary->open)()
-     * to set pm_hosterror and pm_hosterror_text
-     */
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_OpenOutput(PortMidiStream** stream,
-                      PmDeviceID outputDevice,
-                      void *outputDriverInfo,
-                      long bufferSize,
-                      PmTimeProcPtr time_proc,
-                      void *time_info,
-                      long latency ) {
-    PmInternal *midi;
-    PmError err = pmNoError;
-    pm_hosterror = FALSE;
-    *stream =  NULL;
-    
-    /* arg checking */
-    if (outputDevice < 0 || outputDevice >= pm_descriptor_index)
-        err = pmInvalidDeviceId;
-    else if (!descriptors[outputDevice].pub.output) 
-        err = pmInvalidDeviceId;
-    else if (descriptors[outputDevice].pub.opened)
-        err = pmInvalidDeviceId;
-    if (err != pmNoError) 
-        goto error_return;
-
-    /* create portMidi internal data */
-    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
-    *stream = midi;                 
-    if (!midi) {
-        err = pmInsufficientMemory;
-        goto error_return;
-    }
-    midi->device_id = outputDevice;
-    midi->write_flag = TRUE;
-    midi->time_proc = time_proc;
-    /* if latency > 0, we need a time reference. If none is provided,
-       use PortTime library */
-    if (time_proc == NULL && latency != 0) {
-        if (!Pt_Started()) 
-            Pt_Start(1, 0, 0);
-        /* time_get does not take a parameter, so coerce */
-        midi->time_proc = (PmTimeProcPtr) Pt_Time;
-    }
-    midi->time_info = time_info;
-    midi->buffer_len = bufferSize;
-#ifdef NEWBUFFER
-    midi->queue = NULL; /* unused by output */
-#else
-    midi->buffer = NULL;
-    midi->head = 0; /* unused by output */
-    midi->tail = 0; /* unused by output */
-    midi->overflow = FALSE; /* not used */
-#endif
-    /* if latency zero, output immediate (timestamps ignored) */
-    /* if latency < 0, use 0 but don't return an error */
-    if (latency < 0) latency = 0;
-    midi->latency = latency;
-    midi->sysex_in_progress = FALSE;
-    midi->sysex_message = 0; /* unused by output */
-    midi->sysex_message_count = 0; /* unused by output */
-    midi->filters = 0; /* not used for output */
-    midi->channel_mask = 0xFFFF;
-    midi->sync_time = 0;
-    midi->first_message = TRUE;
-    midi->dictionary = descriptors[outputDevice].dictionary;
-    midi->fill_base = NULL;
-    midi->fill_offset_ptr = NULL;
-    midi->fill_length = 0;
-    descriptors[outputDevice].internalDescriptor = midi;
-    /* open system dependent output device */
-    err = (*midi->dictionary->open)(midi, outputDriverInfo);
-    if (err) {
-        *stream = NULL;
-        descriptors[outputDevice].internalDescriptor = NULL;
-        /* free portMidi data */
-        pm_free(midi); 
-    } else {
-        /* portMidi input open successful */
-        descriptors[outputDevice].pub.opened = TRUE;
-    }
-error_return:
-    /* note: system-dependent code must set pm_hosterror and
-     * pm_hosterror_text if a pmHostError occurs
-     */
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_SetChannelMask(PortMidiStream *stream, int mask)
-{
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err = pmNoError;
-
-    if (midi == NULL)
-        err = pmBadPtr;
-    else
-        midi->channel_mask = mask;
-
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_SetFilter(PortMidiStream *stream, long filters) {
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err = pmNoError;
-
-    /* arg checking */
-    if (midi == NULL)
-        err = pmBadPtr;
-    else if (!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else
-        midi->filters = filters;
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_Close( PortMidiStream *stream ) {
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err = pmNoError;
-
-    pm_hosterror = FALSE;
-    /* arg checking */
-    if (midi == NULL) /* midi must point to something */
-        err = pmBadPtr;
-    /* if it is an open device, the device_id will be valid */
-    else if (midi->device_id < 0 || midi->device_id >= pm_descriptor_index)
-        err = pmBadPtr;
-    /* and the device should be in the opened state */
-    else if (!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    
-    if (err != pmNoError) 
-        goto error_return;
-
-    /* close the device */
-    err = (*midi->dictionary->close)(midi);
-    /* even if an error occurred, continue with cleanup */
-    descriptors[midi->device_id].internalDescriptor = NULL;
-    descriptors[midi->device_id].pub.opened = FALSE;
-#ifdef NEWBUFFER
-    if (midi->queue) Pm_QueueDestroy(midi->queue);
-#else
-    if (midi->buffer) pm_free(midi->buffer);       
-#endif
-    pm_free(midi); 
-error_return:
-    /* system dependent code must set pm_hosterror and
-     * pm_hosterror_text if a pmHostError occurs.
-     */
-    return pm_errmsg(err);
-}
-
-
-PmError Pm_Abort( PortMidiStream* stream ) {
-    PmInternal *midi = (PmInternal *) stream;
-    PmError err;
-    /* arg checking */
-    if (midi == NULL)
-        err = pmBadPtr;
-    if (!descriptors[midi->device_id].pub.output)
-        err = pmBadPtr;
-    if (!descriptors[midi->device_id].pub.opened)
-        err = pmBadPtr;
-    else
-        err = (*midi->dictionary->abort)(midi);
-
-    if (err == pmHostError) {
-        midi->dictionary->host_error(midi, pm_hosterror_text, 
-                                     PM_HOST_ERROR_MSG_LEN);
-        pm_hosterror = TRUE;
-    }
-    return pm_errmsg(err);
-}
-
-#ifndef NEWBUFFER
-/* this is apparently an orphan routine -- I can find no reference to it now -RBD */
-
-/* in win32 multimedia API (via callbacks) some of these functions used; assume never fail */
-long pm_next_time(PmInternal *midi) {
-
-    /* arg checking */
-    assert(midi != NULL);
-    
-    return midi->buffer[midi->head].timestamp;
-}
-#endif
-
-
-/* pm_channel_filtered returns non-zero if the channel mask is blocking the current channel */
-#define pm_channel_filtered(status, mask) \
-    ((((status) & 0xF0) != 0xF0) && (!(Pm_Channel((status) & 0x0F) & (mask))))
-
-
-/* The following two functions will checks to see if a MIDI message matches
-   the filtering criteria.  Since the sysex routines only want to filter realtime messages,
-   we need to have separate routines.
- */
-
-
-/* pm_realtime_filtered returns non-zero if the filter will kill the current message.
-   Note that only realtime messages are checked here.
- */
-#define pm_realtime_filtered(status, filters) \
-    ((((status) & 0xF0) == 0xF0) && ((1 << ((status) & 0xF)) & (filters)))
-
-/*
-    return ((status == MIDI_ACTIVE) && (filters & PM_FILT_ACTIVE))
-            ||  ((status == MIDI_CLOCK) && (filters & PM_FILT_CLOCK))
-            ||  ((status == MIDI_START) && (filters & PM_FILT_PLAY))
-            ||  ((status == MIDI_STOP) && (filters & PM_FILT_PLAY))
-            ||  ((status == MIDI_CONTINUE) && (filters & PM_FILT_PLAY))
-            ||  ((status == MIDI_F9) && (filters & PM_FILT_F9))
-            ||  ((status == MIDI_FD) && (filters & PM_FILT_FD))
-            ||  ((status == MIDI_RESET) && (filters & PM_FILT_RESET))
-            ||  ((status == MIDI_MTC) && (filters & PM_FILT_MTC))
-            ||  ((status == MIDI_SONGPOS) && (filters & PM_FILT_SONG_POSITION))
-            ||  ((status == MIDI_SONGSEL) && (filters & PM_FILT_SONG_SELECT))
-            ||  ((status == MIDI_TUNE) && (filters & PM_FILT_TUNE));
-}*/
-
-
-/* pm_status_filtered returns non-zero if a filter will kill the current message, based on status.
-   Note that sysex and real time are not checked.  It is up to the subsystem (winmm, core midi, alsa)
-   to filter sysex, as it is handled more easily and efficiently at that level.
-   Realtime message are filtered in pm_realtime_filtered.
- */
-#define pm_status_filtered(status, filters) ((1 << (16 + ((status) >> 4))) & (filters))
-
-
-/*
-    return  ((status == MIDI_NOTE_ON) && (filters & PM_FILT_NOTE))
-            ||  ((status == MIDI_NOTE_OFF) && (filters & PM_FILT_NOTE))
-            ||  ((status == MIDI_CHANNEL_AT) && (filters & PM_FILT_CHANNEL_AFTERTOUCH))
-            ||  ((status == MIDI_POLY_AT) && (filters & PM_FILT_POLY_AFTERTOUCH))
-            ||  ((status == MIDI_PROGRAM) && (filters & PM_FILT_PROGRAM))
-            ||  ((status == MIDI_CONTROL) && (filters & PM_FILT_CONTROL))
-            ||  ((status == MIDI_PITCHBEND) && (filters & PM_FILT_PITCHBEND));
-
-}
-*/
-
-void pm_flush_sysex(PmInternal *midi, PmTimestamp timestamp)
-{
-    PmEvent event;
-    
-    /* there may be nothing in the buffer */
-    if (midi->sysex_message_count == 0) return; /* nothing to flush */
-    
-    event.message = midi->sysex_message;
-    event.timestamp = timestamp;
-    /* copied from pm_read_short, avoids filtering */
-    if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
-        midi->sysex_in_progress = FALSE;
-    }
-    midi->sysex_message_count = 0;
-    midi->sysex_message = 0;
-}
-
-
-/* pm_read_short and pm_read_bytes
-   are the interface between system-dependent MIDI input handlers
-   and the system-independent PortMIDI code.
-   The input handler MUST obey these rules:
-   1) all short input messages must be sent to pm_read_short, which
-      enqueues them to a FIFO for the application.
-   2) eash buffer of sysex bytes should be reported by calling pm_read_bytes
-      (which sets midi->sysex_in_progress). After the eox byte, 
-      pm_read_bytes will clear sysex_in_progress
- */
-
-/* pm_read_short is the place where all input messages arrive from 
-   system-dependent code such as pmwinmm.c. Here, the messages
-   are entered into the PortMidi input buffer. 
- */
-void pm_read_short(PmInternal *midi, PmEvent *event)
-{ 
-#ifndef NEWBUFFER
-    long tail;
-#endif
-    int status;
-    /* arg checking */
-    assert(midi != NULL);
-    /* midi filtering is applied here */
-    status = Pm_MessageStatus(event->message);
-    if (!pm_status_filtered(status, midi->filters)
-        && (!is_real_time(status) || 
-            !pm_realtime_filtered(status, midi->filters))
-        && !pm_channel_filtered(status, midi->channel_mask)) {
-        /* if sysex is in progress and we get a status byte, it had
-           better be a realtime message or the starting SYSEX byte;
-           otherwise, we exit the sysex_in_progress state
-         */
-        if (midi->sysex_in_progress && (status & MIDI_STATUS_MASK)) {
-            /* two choices: real-time or not. If it's real-time, then
-             * this should be delivered as a sysex byte because it is
-             * embedded in a sysex message
-             */
-            if (is_real_time(status)) {
-                midi->sysex_message |= 
-                        (status << (8 * midi->sysex_message_count++));
-                if (midi->sysex_message_count == 4) {
-                    pm_flush_sysex(midi, event->timestamp);
-                }
-            } else { /* otherwise, it's not real-time. This interrupts
-                      * a sysex message in progress */
-                midi->sysex_in_progress = FALSE;
-            }
-#ifdef NEWBUFFER
-        } else if (Pm_Enqueue(midi->queue, event) == pmBufferOverflow) {
-            midi->sysex_in_progress = FALSE;
-        }
-#else
-        } else {
-            /* don't try to do anything more in an overflow state */
-            if (midi->overflow) return;
-
-            /* insert the message */
-            tail = midi->tail;
-            midi->buffer[tail++] = *event;
-            if (tail == midi->buffer_len) tail = 0;
-            if (tail == midi->head || midi->overflow) {
-                midi->overflow = TRUE;
-                midi->sysex_in_progress = FALSE; 
-                /* drop the rest of the message, this must be cleared 
-                   by caller when EOX is received */
-                   return;
-            }
-            midi->tail = tail; /* complete the write */
-        }
-#endif
-    }
-}
-
-/* pm_read_bytes -- read one (partial) sysex msg from MIDI data */
-/*
- * returns how many bytes processed
- */
-unsigned int pm_read_bytes(PmInternal *midi, unsigned char *data, 
-                    int len, PmTimestamp timestamp)
-{
-    unsigned int i = 0; /* index into data */
-    PmEvent event;
-    event.timestamp = timestamp;
-    assert(midi);
-    /* note that since buffers may not have multiples of 4 bytes,
-     * pm_read_bytes may be called in the middle of an outgoing
-     * 4-byte PortMidi message. sysex_in_progress indicates that
-     * a sysex has been sent but no eox.
-     */
-    if (len == 0) return 0; /* sanity check */
-    if (!midi->sysex_in_progress) {
-        while (i < len) { /* process all data */
-            unsigned char byte = data[i++];
-            if (byte == MIDI_SYSEX &&
-                !pm_realtime_filtered(byte, midi->filters)) {
-                midi->sysex_in_progress = TRUE;
-                i--; /* back up so code below will get SYSEX byte */
-                break; /* continue looping below to process msg */
-            } else if (byte == MIDI_EOX) {
-                midi->sysex_in_progress = FALSE;
-                return i; /* done with one message */
-            } else if (byte & MIDI_STATUS_MASK) {
-                /* We're getting MIDI but no sysex in progress.
-                 * Either the SYSEX status byte was dropped or
-                 * the message was filtered. Drop the data, but
-                 * send any embedded realtime bytes.
-                 */
-                /* assume that this is a real-time message:
-                 * it is an error to pass non-real-time messages
-                 * to pm_read_bytes
-                 */
-                event.message = byte;
-                pm_read_short(midi, &event);
-            }
-        } /* all bytes in the buffer are processed */
-    }
-    /* Now, i<len implies sysex_in_progress. If sysex_in_progress
-     * becomes false in the loop, there must have been an overflow
-     * and we can just drop all remaining bytes 
-     */
-    while (i < len && midi->sysex_in_progress) {
-        if (midi->sysex_message_count == 0 && i <= len - 4 &&
-            ((event.message = (((long) data[i]) | 
-                             (((long) data[i+1]) << 8) |
-                             (((long) data[i+2]) << 16) |
-                             (((long) data[i+3]) << 24))) &
-             0x80808080) == 0) { /* all data, no status */ 
-            if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
-                midi->sysex_in_progress = FALSE;
-            }
-            i += 4;
-        } else {
-            while (i < len) {
-                /* send one byte at a time */
-                unsigned char byte = data[i++];
-                if (is_real_time(byte) && 
-                    pm_realtime_filtered(byte, midi->filters)) {
-                    continue; /* real-time data is filtered, so omit */
-                }
-                midi->sysex_message |= 
-                    (byte << (8 * midi->sysex_message_count++));
-                if (byte == MIDI_EOX) {
-                    midi->sysex_in_progress = FALSE;
-                    pm_flush_sysex(midi, event.timestamp);
-                    return i;
-                } else if (midi->sysex_message_count == 4) {
-                    pm_flush_sysex(midi, event.timestamp);
-                    /* after handling at least one non-data byte
-                     * and reaching a 4-byte message boundary,
-                     * resume trying to send 4 at a time in outer loop
-                     */
-                    break;
-                }
-            }
-        }
-    }
-    return i;
-}
-
-
-#ifndef NEWBUFFER
-/* this code is apparently never called */
-int pm_queue_full(PmInternal *midi)
-{
-    long tail;
-
-    /* arg checking */
-    assert(midi != NULL);
-    
-    tail = midi->tail + 1;
-    if (tail == midi->buffer_len) tail = 0;
-    return tail == midi->head;
-}
-#endif
+#ifdef _MSC_VER
+ #pragma warning(disable: 4244) // stop warnings about downsize typecasts
+ #pragma warning(disable: 4018) // stop warnings about signed/unsigned
+#endif
+
+#include "stdlib.h"
+#include "string.h"
+#include "portmidi.h"
+#include "porttime.h"
+#include "pmutil.h"
+#include "pminternal.h"
+#include <assert.h>
+
+#define MIDI_CLOCK      0xf8
+#define MIDI_ACTIVE     0xfe
+#define MIDI_STATUS_MASK 0x80
+#define MIDI_SYSEX      0xf0
+#define MIDI_EOX        0xf7
+#define MIDI_START      0xFA
+#define MIDI_STOP       0xFC
+#define MIDI_CONTINUE   0xFB
+#define MIDI_F9         0xF9
+#define MIDI_FD         0xFD
+#define MIDI_RESET      0xFF
+#define MIDI_NOTE_ON    0x90
+#define MIDI_NOTE_OFF   0x80
+#define MIDI_CHANNEL_AT 0xD0
+#define MIDI_POLY_AT    0xA0
+#define MIDI_PROGRAM    0xC0
+#define MIDI_CONTROL    0xB0
+#define MIDI_PITCHBEND  0xE0
+#define MIDI_MTC        0xF1
+#define MIDI_SONGPOS    0xF2
+#define MIDI_SONGSEL    0xF3
+#define MIDI_TUNE       0xF6
+
+#define is_empty(midi) ((midi)->tail == (midi)->head)
+
+/* this is not static so that pm_init can set it directly if
+ *   (see pmmac.c:pm_init())
+ */
+int pm_initialized = FALSE;
+
+int pm_hosterror;
+char pm_hosterror_text[PM_HOST_ERROR_MSG_LEN];
+
+#ifdef PM_CHECK_ERRORS
+
+#include <stdio.h>
+
+#define STRING_MAX 80
+
+static void prompt_and_exit(void)
+{
+    char line[STRING_MAX];
+    printf("type ENTER...");
+    fgets(line, STRING_MAX, stdin);
+    /* this will clean up open ports: */
+    exit(-1);
+}
+
+
+static PmError pm_errmsg(PmError err)
+{
+    if (err == pmHostError) {
+        /* it seems pointless to allocate memory and copy the string,
+         * so I will do the work of Pm_GetHostErrorText directly
+         */
+        printf("PortMidi found host error...\n  %s\n", pm_hosterror_text);
+        pm_hosterror = FALSE;
+        pm_hosterror_text[0] = 0; /* clear the message */
+        prompt_and_exit();
+    } else if (err < 0) {
+        printf("PortMidi call failed...\n  %s\n", Pm_GetErrorText(err));
+        prompt_and_exit();
+    }
+    return err;
+}
+#else
+#define pm_errmsg(err) err
+#endif
+
+/*
+====================================================================
+system implementation of portmidi interface
+====================================================================
+*/
+
+int pm_descriptor_max = 0;
+int pm_descriptor_index = 0;
+descriptor_type descriptors = NULL;
+
+/* pm_add_device -- describe interface/device pair to library 
+ *
+ * This is called at intialization time, once for each 
+ * interface (e.g. DirectSound) and device (e.g. SoundBlaster 1)
+ * The strings are retained but NOT COPIED, so do not destroy them!
+ *
+ * returns pmInvalidDeviceId if device memory is exceeded
+ * otherwise returns pmNoError
+ */
+PmError pm_add_device(char *interf, char *name, int input, 
+                      void *descriptor, pm_fns_type dictionary) {
+    if (pm_descriptor_index >= pm_descriptor_max) {
+        // expand descriptors
+        descriptor_type new_descriptors = (descriptor_type) 
+            pm_alloc(sizeof(descriptor_node) * (pm_descriptor_max + 32));
+        if (!new_descriptors) return pmInsufficientMemory;
+        if (descriptors) {
+            memcpy(new_descriptors, descriptors, 
+                   sizeof(descriptor_node) * pm_descriptor_max);
+            free(descriptors);
+        }
+        pm_descriptor_max += 32;
+        descriptors = new_descriptors;
+    }
+    descriptors[pm_descriptor_index].pub.interf = interf;
+    descriptors[pm_descriptor_index].pub.name = name;
+    descriptors[pm_descriptor_index].pub.input = input;
+    descriptors[pm_descriptor_index].pub.output = !input;
+
+    /* default state: nothing to close (for automatic device closing) */
+    descriptors[pm_descriptor_index].pub.opened = FALSE;
+
+    /* ID number passed to win32 multimedia API open */
+    descriptors[pm_descriptor_index].descriptor = descriptor;
+    
+    /* points to PmInternal, allows automatic device closing */
+    descriptors[pm_descriptor_index].internalDescriptor = NULL;
+
+    descriptors[pm_descriptor_index].dictionary = dictionary;
+    
+    pm_descriptor_index++;
+    
+    return pmNoError;
+}
+
+
+/* utility to look up device, given a pattern, 
+   note: pattern is modified
+ */
+int pm_find_default_device(char *pattern, int is_input)
+{
+    int id = pmNoDevice;
+    int i;
+    /* first parse pattern into name, interf parts */
+    char *interf_pref = ""; /* initially assume it is not there */
+    char *name_pref = strstr(pattern, ", ");
+
+    if (name_pref) { /* found separator, adjust the pointer */
+        interf_pref = pattern;
+        name_pref[0] = 0;
+        name_pref += 2;
+    } else {
+        name_pref = pattern; /* whole string is the name pattern */
+    }
+    for (i = 0; i < pm_descriptor_index; i++) {
+        const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+        if (info->input == is_input &&
+            strstr(info->name, name_pref) &&
+            strstr(info->interf, interf_pref)) {
+            id = i;
+            break;
+        }
+    }    
+    return id;
+}
+
+
+/*
+====================================================================
+portmidi implementation
+====================================================================
+*/
+
+PMEXPORT int Pm_CountDevices( void ) {
+    Pm_Initialize();
+    /* no error checking -- Pm_Initialize() does not fail */
+    return pm_descriptor_index;
+}
+
+
+PMEXPORT const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id ) {
+    Pm_Initialize(); /* no error check needed */
+    if (id >= 0 && id < pm_descriptor_index) {
+        return &descriptors[id].pub;
+    }
+    return NULL;
+}
+
+/* pm_success_fn -- "noop" function pointer */
+PmError pm_success_fn(PmInternal *midi) {
+    return pmNoError;
+}
+
+/* none_write -- returns an error if called */
+PmError none_write_short(PmInternal *midi, PmEvent *buffer) {
+    return pmBadPtr;
+}
+
+/* pm_fail_timestamp_fn -- placeholder for begin_sysex and flush */
+PmError pm_fail_timestamp_fn(PmInternal *midi, PmTimestamp timestamp) {
+    return pmBadPtr;
+}
+
+PmError none_write_byte(PmInternal *midi, unsigned char byte, 
+                        PmTimestamp timestamp) {
+    return pmBadPtr;
+}
+
+/* pm_fail_fn -- generic function, returns error if called */
+PmError pm_fail_fn(PmInternal *midi) {
+    return pmBadPtr;
+}
+
+static PmError none_open(PmInternal *midi, void *driverInfo) {
+    return pmBadPtr;
+}
+static void none_get_host_error(PmInternal * midi, char * msg, unsigned int len) {
+    *msg = 0; // empty string
+}
+static unsigned int none_has_host_error(PmInternal * midi) {
+    return FALSE;
+}
+PmTimestamp none_synchronize(PmInternal *midi) {
+    return 0;
+}
+
+#define none_abort pm_fail_fn
+#define none_close pm_fail_fn
+
+pm_fns_node pm_none_dictionary = {
+    none_write_short,
+    none_sysex,
+    none_sysex,
+    none_write_byte,
+    none_write_short,
+    none_write_flush,
+    none_synchronize,
+    none_open,
+    none_abort, 
+    none_close,
+    none_poll,
+    none_has_host_error,
+    none_get_host_error 
+};
+
+
+PMEXPORT const char *Pm_GetErrorText( PmError errnum ) {
+    const char *msg;
+
+    switch(errnum)
+    {
+    case pmNoError:                  
+        msg = ""; 
+        break;
+    case pmHostError:                
+        msg = "PortMidi: `Host error'"; 
+        break;
+    case pmInvalidDeviceId:          
+        msg = "PortMidi: `Invalid device ID'"; 
+        break;
+    case pmInsufficientMemory:       
+        msg = "PortMidi: `Insufficient memory'"; 
+        break;
+    case pmBufferTooSmall:           
+        msg = "PortMidi: `Buffer too small'"; 
+        break;
+    case pmBadPtr:                   
+        msg = "PortMidi: `Bad pointer'"; 
+        break;
+    case pmInternalError:            
+        msg = "PortMidi: `Internal PortMidi Error'"; 
+        break;
+    case pmBufferOverflow:
+        msg = "PortMidi: `Buffer overflow'";
+        break;
+    case pmBadData:
+        msg = "PortMidi: `Invalid MIDI message Data'";
+        break;
+    case pmBufferMaxSize:
+        msg = "PortMidi: `Buffer cannot be made larger'";
+        break;
+    default:                         
+        msg = "PortMidi: `Illegal error number'"; 
+        break;
+    }
+    return msg;
+}
+
+
+/* This can be called whenever you get a pmHostError return value.
+ * The error will always be in the global pm_hosterror_text.
+ */
+PMEXPORT void Pm_GetHostErrorText(char * msg, unsigned int len) {
+    assert(msg);
+    assert(len > 0);
+    if (pm_hosterror) {
+        strncpy(msg, (char *) pm_hosterror_text, len);
+        pm_hosterror = FALSE;
+        pm_hosterror_text[0] = 0; /* clear the message; not necessary, but it
+                                     might help with debugging */
+        msg[len - 1] = 0; /* make sure string is terminated */
+    } else {
+        msg[0] = 0; /* no string to return */
+    }
+}
+
+
+PMEXPORT int Pm_HasHostError(PortMidiStream * stream) {
+    if (pm_hosterror) return TRUE;
+    if (stream) {
+        PmInternal * midi = (PmInternal *) stream;
+        pm_hosterror = (*midi->dictionary->has_host_error)(midi);
+        if (pm_hosterror) {
+            midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                         PM_HOST_ERROR_MSG_LEN);
+            /* now error message is global */
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+
+PMEXPORT PmError Pm_Initialize( void ) {
+    if (!pm_initialized) {
+        pm_hosterror = FALSE;
+        pm_hosterror_text[0] = 0; /* the null string */
+        pm_init();
+        pm_initialized = TRUE;
+    }
+    return pmNoError;
+}
+
+
+PMEXPORT PmError Pm_Terminate( void ) {
+    if (pm_initialized) {
+        pm_term();
+        // if there are no devices, descriptors might still be NULL
+        if (descriptors != NULL) {
+            free(descriptors);
+            descriptors = NULL;
+        }
+        pm_descriptor_index = 0;
+        pm_descriptor_max = 0;
+        pm_initialized = FALSE;
+    }
+    return pmNoError;
+}
+
+
+/* Pm_Read -- read up to length messages from source into buffer */
+/*
+ * returns number of messages actually read, or error code
+ */
+PMEXPORT int Pm_Read(PortMidiStream *stream, PmEvent *buffer, int32_t length) {
+    PmInternal *midi = (PmInternal *) stream;
+    int n = 0;
+    PmError err = pmNoError;
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if(midi == NULL)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.input)
+        err = pmBadPtr;    
+    /* First poll for data in the buffer...
+     * This either simply checks for data, or attempts first to fill the buffer
+     * with data from the MIDI hardware; this depends on the implementation.
+     * We could call Pm_Poll here, but that would redo a lot of redundant
+     * parameter checking, so I copied some code from Pm_Poll to here: */
+    else err = (*(midi->dictionary->poll))(midi);
+
+    if (err != pmNoError) {
+        if (err == pmHostError) {
+            midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                         PM_HOST_ERROR_MSG_LEN);
+          pm_hosterror = TRUE;
+        }
+        return pm_errmsg(err);
+    }
+
+    while (n < length) {
+        PmError err = Pm_Dequeue(midi->queue, buffer++);
+        if (err == pmBufferOverflow) {
+            /* ignore the data we have retreived so far */
+            return pm_errmsg(pmBufferOverflow);
+        } else if (err == 0) { /* empty queue */
+            break;
+        }
+        n++;
+    }
+    return n;
+}
+
+PMEXPORT PmError Pm_Poll( PortMidiStream *stream )
+{
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err;
+
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if(midi == NULL)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.input)
+        err = pmBadPtr;
+    else
+        err = (*(midi->dictionary->poll))(midi);
+
+    if (err != pmNoError) {
+        if (err == pmHostError) {
+            midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                         PM_HOST_ERROR_MSG_LEN);
+           pm_hosterror = TRUE;
+        }
+        return pm_errmsg(err);
+    }
+
+    return !Pm_QueueEmpty(midi->queue);
+}
+
+
+/* this is called from Pm_Write and Pm_WriteSysEx to issue a
+ * call to the system-dependent end_sysex function and handle 
+ * the error return
+ */
+static PmError pm_end_sysex(PmInternal *midi)
+{
+    PmError err = (*midi->dictionary->end_sysex)(midi, 0);
+    midi->sysex_in_progress = FALSE;
+    if (err == pmHostError) {
+        midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                     PM_HOST_ERROR_MSG_LEN);
+        pm_hosterror = TRUE;
+    }
+    return err;
+}
+
+
+/* to facilitate correct error-handling, Pm_Write, Pm_WriteShort, and
+   Pm_WriteSysEx all operate a state machine that "outputs" calls to
+   write_short, begin_sysex, write_byte, end_sysex, and write_realtime */
+
+PMEXPORT PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, int32_t length)
+{
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+    int i;
+    int bits;
+    
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if(midi == NULL)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else if(!descriptors[midi->device_id].pub.output)
+        err = pmBadPtr;
+    else
+        err = pmNoError;
+    
+    if (err != pmNoError) goto pm_write_error;
+    
+    if (midi->latency == 0) {
+        midi->now = 0;
+    } else {
+        midi->now = (*(midi->time_proc))(midi->time_info);
+        if (midi->first_message || midi->sync_time + 100 /*ms*/ < midi->now) {
+            /* time to resync */
+            midi->now = (*midi->dictionary->synchronize)(midi);
+            midi->first_message = FALSE;
+        }
+    }
+    /* error recovery: when a sysex is detected, we call
+     *   dictionary->begin_sysex() followed by calls to
+     *   dictionary->write_byte() and dictionary->write_realtime()
+     *   until an end-of-sysex is detected, when we call
+     *   dictionary->end_sysex(). After an error occurs, 
+     *   Pm_Write() continues to call functions. For example,
+     *   it will continue to call write_byte() even after
+     *   an error sending a sysex message, and end_sysex() will be
+     *   called when an EOX or non-real-time status is found.
+     * When errors are detected, Pm_Write() returns immediately, 
+     *   so it is possible that this will drop data and leave
+     *   sysex messages in a partially transmitted state.
+     */
+    for (i = 0; i < length; i++) {
+        uint32_t msg = buffer[i].message;
+        bits = 0;
+        /* is this a sysex message? */
+        if (Pm_MessageStatus(msg) == MIDI_SYSEX) {
+            if (midi->sysex_in_progress) {
+                /* error: previous sysex was not terminated by EOX */
+                midi->sysex_in_progress = FALSE;
+                err = pmBadData;
+                goto pm_write_error;
+            }
+            midi->sysex_in_progress = TRUE;
+            if ((err = (*midi->dictionary->begin_sysex)(midi, 
+                               buffer[i].timestamp)) != pmNoError)
+                goto pm_write_error;
+            if ((err = (*midi->dictionary->write_byte)(midi, MIDI_SYSEX,
+                               buffer[i].timestamp)) != pmNoError) 
+                goto pm_write_error;
+            bits = 8;
+            /* fall through to continue sysex processing */
+        } else if ((msg & MIDI_STATUS_MASK) && 
+                   (Pm_MessageStatus(msg) != MIDI_EOX)) {
+            /* a non-sysex message */
+            if (midi->sysex_in_progress) {
+                /* this should be a realtime message */
+                if (is_real_time(msg)) {
+                    if ((err = (*midi->dictionary->write_realtime)(midi, 
+                                       &(buffer[i]))) != pmNoError)
+                        goto pm_write_error;
+                } else {
+                    midi->sysex_in_progress = FALSE;
+                    err = pmBadData;
+                    /* ignore any error from this, because we already have one */
+                    /* pass 0 as timestamp -- it's ignored */
+                    (*midi->dictionary->end_sysex)(midi, 0);
+                    goto pm_write_error;
+                }
+            } else { /* regular short midi message */
+                if ((err = (*midi->dictionary->write_short)(midi, 
+                                   &(buffer[i]))) != pmNoError)
+                    goto pm_write_error;
+                continue;
+            }
+        }
+        if (midi->sysex_in_progress) { /* send sysex bytes until EOX */
+            /* see if we can accelerate data transfer */
+            if (bits == 0 && midi->fill_base && /* 4 bytes to copy */
+                (*midi->fill_offset_ptr) + 4 <= midi->fill_length &&
+                (msg & 0x80808080) == 0) { /* all data */
+                    /* copy 4 bytes from msg to fill_base + fill_offset */
+                    unsigned char *ptr = midi->fill_base + 
+                                         *(midi->fill_offset_ptr);
+                    ptr[0] = msg; ptr[1] = msg >> 8; 
+                    ptr[2] = msg >> 16; ptr[3] = msg >> 24;
+                    (*midi->fill_offset_ptr) += 4;
+                     continue;
+            }
+            /* no acceleration, so do byte-by-byte copying */
+            while (bits < 32) {
+                unsigned char midi_byte = (unsigned char) (msg >> bits);
+                if ((err = (*midi->dictionary->write_byte)(midi, midi_byte, 
+                                   buffer[i].timestamp)) != pmNoError)
+                    goto pm_write_error;
+                if (midi_byte == MIDI_EOX) {
+                    err = pm_end_sysex(midi);
+                    if (err != pmNoError) goto error_exit;
+                    break; /* from while loop */
+                }
+                bits += 8;
+            }
+        } else {
+            /* not in sysex mode, but message did not start with status */
+            err = pmBadData;
+            goto pm_write_error;
+        }
+    }
+    /* after all messages are processed, send the data */
+    if (!midi->sysex_in_progress)
+        err = (*midi->dictionary->write_flush)(midi, 0);
+pm_write_error:
+    if (err == pmHostError) {
+        midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                     PM_HOST_ERROR_MSG_LEN);
+        pm_hosterror = TRUE;
+    }
+error_exit:
+    return pm_errmsg(err);
+}
+
+
+PMEXPORT PmError Pm_WriteShort(PortMidiStream *stream, PmTimestamp when, PmMessage msg)
+{
+    PmEvent event;
+    
+    event.timestamp = when;
+    event.message = msg;
+    return Pm_Write(stream, &event, 1);
+}
+
+
+PMEXPORT PmError Pm_WriteSysEx(PortMidiStream *stream, PmTimestamp when, 
+                      unsigned char *msg)
+{
+    /* allocate buffer space for PM_DEFAULT_SYSEX_BUFFER_SIZE bytes */
+    /* each PmEvent holds sizeof(PmMessage) bytes of sysex data */
+    #define BUFLEN ((int) (PM_DEFAULT_SYSEX_BUFFER_SIZE / sizeof(PmMessage)))
+    PmEvent buffer[BUFLEN];
+    int buffer_size = 1; /* first time, send 1. After that, it's BUFLEN */
+    PmInternal *midi = (PmInternal *) stream;
+    /* the next byte in the buffer is represented by an index, bufx, and
+       a shift in bits */
+    int shift = 0;
+    int bufx = 0;
+    buffer[0].message = 0;
+    buffer[0].timestamp = when;
+
+    while (1) {
+        /* insert next byte into buffer */
+        buffer[bufx].message |= ((*msg) << shift);
+        shift += 8;
+        if (*msg++ == MIDI_EOX) break;
+        if (shift == 32) {
+            shift = 0;
+            bufx++;
+            if (bufx == buffer_size) {
+                PmError err = Pm_Write(stream, buffer, buffer_size);
+                /* note: Pm_Write has already called errmsg() */
+                if (err) return err;
+                /* prepare to fill another buffer */
+                bufx = 0;
+                buffer_size = BUFLEN;
+                /* optimization: maybe we can just copy bytes */
+                if (midi->fill_base) {
+                    PmError err;
+                    while (*(midi->fill_offset_ptr) < midi->fill_length) {
+                        midi->fill_base[(*midi->fill_offset_ptr)++] = *msg;
+                        if (*msg++ == MIDI_EOX) {
+                            err = pm_end_sysex(midi);
+                            if (err != pmNoError) return pm_errmsg(err);
+                            goto end_of_sysex;
+                        }
+                    }
+                    /* I thought that I could do a pm_Write here and
+                     * change this if to a loop, avoiding calls in Pm_Write
+                     * to the slower write_byte, but since 
+                     * sysex_in_progress is true, this will not flush
+                     * the buffer, and we'll infinite loop: */
+                    /* err = Pm_Write(stream, buffer, 0);
+                       if (err) return err; */
+                    /* instead, the way this works is that Pm_Write calls
+                     * write_byte on 4 bytes. The first, since the buffer
+                     * is full, will flush the buffer and allocate a new
+                     * one. This primes the buffer so
+                     * that we can return to the loop above and fill it
+                     * efficiently without a lot of function calls.
+                     */
+                    buffer_size = 1; /* get another message started */
+                }
+            }
+            buffer[bufx].message = 0;
+            buffer[bufx].timestamp = when;
+        } 
+        /* keep inserting bytes until you find MIDI_EOX */
+    }
+end_of_sysex:
+    /* we're finished sending full buffers, but there may
+     * be a partial one left.
+     */
+    if (shift != 0) bufx++; /* add partial message to buffer len */
+    if (bufx) { /* bufx is number of PmEvents to send from buffer */
+        PmError err = Pm_Write(stream, buffer, bufx);
+        if (err) return err;
+    }
+    return pmNoError;
+}
+
+
+
+PMEXPORT PmError Pm_OpenInput(PortMidiStream** stream,
+                     PmDeviceID inputDevice,
+                     void *inputDriverInfo,
+                     int32_t bufferSize,
+                     PmTimeProcPtr time_proc,
+                     void *time_info)
+{
+    PmInternal *midi;
+    PmError err = pmNoError;
+    pm_hosterror = FALSE;
+    *stream = NULL;
+    
+    /* arg checking */
+    if (inputDevice < 0 || inputDevice >= pm_descriptor_index) 
+        err = pmInvalidDeviceId;
+    else if (!descriptors[inputDevice].pub.input) 
+        err =  pmInvalidDeviceId;
+    else if(descriptors[inputDevice].pub.opened)
+        err =  pmInvalidDeviceId;
+    
+    if (err != pmNoError) 
+        goto error_return;
+
+    /* create portMidi internal data */
+    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
+    *stream = midi;
+    if (!midi) {
+        err = pmInsufficientMemory;
+        goto error_return;
+    }
+    midi->device_id = inputDevice;
+    midi->write_flag = FALSE;
+    midi->time_proc = time_proc;
+    midi->time_info = time_info;
+    /* windows adds timestamps in the driver and these are more accurate than
+       using a time_proc, so do not automatically provide a time proc. Non-win
+       implementations may want to provide a default time_proc in their
+       system-specific midi_out_open() method.
+     */
+    if (bufferSize <= 0) bufferSize = 256; /* default buffer size */
+    midi->queue = Pm_QueueCreate(bufferSize, (int32_t) sizeof(PmEvent));
+    if (!midi->queue) {
+        /* free portMidi data */
+        *stream = NULL;
+        pm_free(midi); 
+        err = pmInsufficientMemory;
+        goto error_return;
+    }
+    midi->buffer_len = bufferSize; /* portMidi input storage */
+    midi->latency = 0; /* not used */
+    midi->sysex_in_progress = FALSE;
+    midi->sysex_message = 0; 
+    midi->sysex_message_count = 0; 
+    midi->filters = PM_FILT_ACTIVE;
+    midi->channel_mask = 0xFFFF;
+    midi->sync_time = 0;
+    midi->first_message = TRUE;
+    midi->dictionary = descriptors[inputDevice].dictionary;
+    midi->fill_base = NULL;
+    midi->fill_offset_ptr = NULL;
+    midi->fill_length = 0;
+    descriptors[inputDevice].internalDescriptor = midi;
+    /* open system dependent input device */
+    err = (*midi->dictionary->open)(midi, inputDriverInfo);
+    if (err) {
+        *stream = NULL;
+        descriptors[inputDevice].internalDescriptor = NULL;
+        /* free portMidi data */
+        Pm_QueueDestroy(midi->queue);
+        pm_free(midi);
+    } else {
+        /* portMidi input open successful */
+        descriptors[inputDevice].pub.opened = TRUE;
+    }
+error_return:
+    /* note: if there is a pmHostError, it is the responsibility
+     * of the system-dependent code (*midi->dictionary->open)()
+     * to set pm_hosterror and pm_hosterror_text
+     */
+    return pm_errmsg(err);
+}
+
+
+PMEXPORT PmError Pm_OpenOutput(PortMidiStream** stream,
+                      PmDeviceID outputDevice,
+                      void *outputDriverInfo,
+                      int32_t bufferSize,
+                      PmTimeProcPtr time_proc,
+                      void *time_info,
+                      int32_t latency ) 
+{
+    PmInternal *midi;
+    PmError err = pmNoError;
+    pm_hosterror = FALSE;
+    *stream =  NULL;
+    
+    /* arg checking */
+    if (outputDevice < 0 || outputDevice >= pm_descriptor_index)
+        err = pmInvalidDeviceId;
+    else if (!descriptors[outputDevice].pub.output) 
+        err = pmInvalidDeviceId;
+    else if (descriptors[outputDevice].pub.opened)
+        err = pmInvalidDeviceId;
+    if (err != pmNoError) 
+        goto error_return;
+
+    /* create portMidi internal data */
+    midi = (PmInternal *) pm_alloc(sizeof(PmInternal)); 
+    *stream = midi;                 
+    if (!midi) {
+        err = pmInsufficientMemory;
+        goto error_return;
+    }
+    midi->device_id = outputDevice;
+    midi->write_flag = TRUE;
+    midi->time_proc = time_proc;
+    /* if latency > 0, we need a time reference. If none is provided,
+       use PortTime library */
+    if (time_proc == NULL && latency != 0) {
+        if (!Pt_Started()) 
+            Pt_Start(1, 0, 0);
+        /* time_get does not take a parameter, so coerce */
+        midi->time_proc = (PmTimeProcPtr) Pt_Time;
+    }
+    midi->time_info = time_info;
+    midi->buffer_len = bufferSize;
+    midi->queue = NULL; /* unused by output */
+    /* if latency zero, output immediate (timestamps ignored) */
+    /* if latency < 0, use 0 but don't return an error */
+    if (latency < 0) latency = 0;
+    midi->latency = latency;
+    midi->sysex_in_progress = FALSE;
+    midi->sysex_message = 0; /* unused by output */
+    midi->sysex_message_count = 0; /* unused by output */
+    midi->filters = 0; /* not used for output */
+    midi->channel_mask = 0xFFFF;
+    midi->sync_time = 0;
+    midi->first_message = TRUE;
+    midi->dictionary = descriptors[outputDevice].dictionary;
+    midi->fill_base = NULL;
+    midi->fill_offset_ptr = NULL;
+    midi->fill_length = 0;
+    descriptors[outputDevice].internalDescriptor = midi;
+    /* open system dependent output device */
+    err = (*midi->dictionary->open)(midi, outputDriverInfo);
+    if (err) {
+        *stream = NULL;
+        descriptors[outputDevice].internalDescriptor = NULL;
+        /* free portMidi data */
+        pm_free(midi); 
+    } else {
+        /* portMidi input open successful */
+        descriptors[outputDevice].pub.opened = TRUE;
+    }
+error_return:
+    /* note: system-dependent code must set pm_hosterror and
+     * pm_hosterror_text if a pmHostError occurs
+     */
+    return pm_errmsg(err);
+}
+
+
+PMEXPORT PmError Pm_SetChannelMask(PortMidiStream *stream, int mask)
+{
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+
+    if (midi == NULL)
+        err = pmBadPtr;
+    else
+        midi->channel_mask = mask;
+
+    return pm_errmsg(err);
+}
+
+
+PMEXPORT PmError Pm_SetFilter(PortMidiStream *stream, int32_t filters) {
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+
+    /* arg checking */
+    if (midi == NULL)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else
+        midi->filters = filters;
+    return pm_errmsg(err);
+}
+
+
+PMEXPORT PmError Pm_Close( PortMidiStream *stream ) {
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+
+    pm_hosterror = FALSE;
+    /* arg checking */
+    if (midi == NULL) /* midi must point to something */
+        err = pmBadPtr;
+    /* if it is an open device, the device_id will be valid */
+    else if (midi->device_id < 0 || midi->device_id >= pm_descriptor_index)
+        err = pmBadPtr;
+    /* and the device should be in the opened state */
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    
+    if (err != pmNoError) 
+        goto error_return;
+
+    /* close the device */
+    err = (*midi->dictionary->close)(midi);
+    /* even if an error occurred, continue with cleanup */
+    descriptors[midi->device_id].internalDescriptor = NULL;
+    descriptors[midi->device_id].pub.opened = FALSE;
+    if (midi->queue) Pm_QueueDestroy(midi->queue);
+    pm_free(midi); 
+error_return:
+    /* system dependent code must set pm_hosterror and
+     * pm_hosterror_text if a pmHostError occurs.
+     */
+    return pm_errmsg(err);
+}
+
+PmError Pm_Synchronize( PortMidiStream* stream ) {
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err = pmNoError;
+    if (midi == NULL)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.output)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else
+        midi->first_message = TRUE;
+    return err;
+}
+
+PMEXPORT PmError Pm_Abort( PortMidiStream* stream ) {
+    PmInternal *midi = (PmInternal *) stream;
+    PmError err;
+    /* arg checking */
+    if (midi == NULL)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.output)
+        err = pmBadPtr;
+    else if (!descriptors[midi->device_id].pub.opened)
+        err = pmBadPtr;
+    else
+        err = (*midi->dictionary->abort)(midi);
+
+    if (err == pmHostError) {
+        midi->dictionary->host_error(midi, pm_hosterror_text, 
+                                     PM_HOST_ERROR_MSG_LEN);
+        pm_hosterror = TRUE;
+    }
+    return pm_errmsg(err);
+}
+
+
+
+/* pm_channel_filtered returns non-zero if the channel mask is blocking the current channel */
+#define pm_channel_filtered(status, mask) \
+    ((((status) & 0xF0) != 0xF0) && (!(Pm_Channel((status) & 0x0F) & (mask))))
+
+
+/* The following two functions will checks to see if a MIDI message matches
+   the filtering criteria.  Since the sysex routines only want to filter realtime messages,
+   we need to have separate routines.
+ */
+
+
+/* pm_realtime_filtered returns non-zero if the filter will kill the current message.
+   Note that only realtime messages are checked here.
+ */
+#define pm_realtime_filtered(status, filters) \
+    ((((status) & 0xF0) == 0xF0) && ((1 << ((status) & 0xF)) & (filters)))
+
+/*
+    return ((status == MIDI_ACTIVE) && (filters & PM_FILT_ACTIVE))
+            ||  ((status == MIDI_CLOCK) && (filters & PM_FILT_CLOCK))
+            ||  ((status == MIDI_START) && (filters & PM_FILT_PLAY))
+            ||  ((status == MIDI_STOP) && (filters & PM_FILT_PLAY))
+            ||  ((status == MIDI_CONTINUE) && (filters & PM_FILT_PLAY))
+            ||  ((status == MIDI_F9) && (filters & PM_FILT_F9))
+            ||  ((status == MIDI_FD) && (filters & PM_FILT_FD))
+            ||  ((status == MIDI_RESET) && (filters & PM_FILT_RESET))
+            ||  ((status == MIDI_MTC) && (filters & PM_FILT_MTC))
+            ||  ((status == MIDI_SONGPOS) && (filters & PM_FILT_SONG_POSITION))
+            ||  ((status == MIDI_SONGSEL) && (filters & PM_FILT_SONG_SELECT))
+            ||  ((status == MIDI_TUNE) && (filters & PM_FILT_TUNE));
+}*/
+
+
+/* pm_status_filtered returns non-zero if a filter will kill the current message, based on status.
+   Note that sysex and real time are not checked.  It is up to the subsystem (winmm, core midi, alsa)
+   to filter sysex, as it is handled more easily and efficiently at that level.
+   Realtime message are filtered in pm_realtime_filtered.
+ */
+#define pm_status_filtered(status, filters) ((1 << (16 + ((status) >> 4))) & (filters))
+
+
+/*
+    return  ((status == MIDI_NOTE_ON) && (filters & PM_FILT_NOTE))
+            ||  ((status == MIDI_NOTE_OFF) && (filters & PM_FILT_NOTE))
+            ||  ((status == MIDI_CHANNEL_AT) && (filters & PM_FILT_CHANNEL_AFTERTOUCH))
+            ||  ((status == MIDI_POLY_AT) && (filters & PM_FILT_POLY_AFTERTOUCH))
+            ||  ((status == MIDI_PROGRAM) && (filters & PM_FILT_PROGRAM))
+            ||  ((status == MIDI_CONTROL) && (filters & PM_FILT_CONTROL))
+            ||  ((status == MIDI_PITCHBEND) && (filters & PM_FILT_PITCHBEND));
+
+}
+*/
+
+static void pm_flush_sysex(PmInternal *midi, PmTimestamp timestamp)
+{
+    PmEvent event;
+    
+    /* there may be nothing in the buffer */
+    if (midi->sysex_message_count == 0) return; /* nothing to flush */
+    
+    event.message = midi->sysex_message;
+    event.timestamp = timestamp;
+    /* copied from pm_read_short, avoids filtering */
+    if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
+        midi->sysex_in_progress = FALSE;
+    }
+    midi->sysex_message_count = 0;
+    midi->sysex_message = 0;
+}
+
+
+/* pm_read_short and pm_read_bytes
+   are the interface between system-dependent MIDI input handlers
+   and the system-independent PortMIDI code.
+   The input handler MUST obey these rules:
+   1) all short input messages must be sent to pm_read_short, which
+      enqueues them to a FIFO for the application.
+   2) each buffer of sysex bytes should be reported by calling pm_read_bytes
+      (which sets midi->sysex_in_progress). After the eox byte, 
+      pm_read_bytes will clear sysex_in_progress
+ */
+
+/* pm_read_short is the place where all input messages arrive from 
+   system-dependent code such as pmwinmm.c. Here, the messages
+   are entered into the PortMidi input buffer. 
+ */
+void pm_read_short(PmInternal *midi, PmEvent *event)
+{ 
+    int status;
+    /* arg checking */
+    assert(midi != NULL);
+    /* midi filtering is applied here */
+    status = Pm_MessageStatus(event->message);
+    if (!pm_status_filtered(status, midi->filters)
+        && (!is_real_time(status) || 
+            !pm_realtime_filtered(status, midi->filters))
+        && !pm_channel_filtered(status, midi->channel_mask)) {
+        /* if sysex is in progress and we get a status byte, it had
+           better be a realtime message or the starting SYSEX byte;
+           otherwise, we exit the sysex_in_progress state
+         */
+        if (midi->sysex_in_progress && (status & MIDI_STATUS_MASK)) {
+            /* two choices: real-time or not. If it's real-time, then
+             * this should be delivered as a sysex byte because it is
+             * embedded in a sysex message
+             */
+            if (is_real_time(status)) {
+                midi->sysex_message |= 
+                        (status << (8 * midi->sysex_message_count++));
+                if (midi->sysex_message_count == 4) {
+                    pm_flush_sysex(midi, event->timestamp);
+                }
+            } else { /* otherwise, it's not real-time. This interrupts
+                      * a sysex message in progress */
+                midi->sysex_in_progress = FALSE;
+            }
+        } else if (Pm_Enqueue(midi->queue, event) == pmBufferOverflow) {
+            midi->sysex_in_progress = FALSE;
+        }
+    }
+}
+
+/* pm_read_bytes -- read one (partial) sysex msg from MIDI data */
+/*
+ * returns how many bytes processed
+ */
+unsigned int pm_read_bytes(PmInternal *midi, const unsigned char *data, 
+                    int len, PmTimestamp timestamp)
+{
+    int i = 0; /* index into data, must not be unsigned (!) */
+    PmEvent event;
+    event.timestamp = timestamp;
+    assert(midi);
+    /* note that since buffers may not have multiples of 4 bytes,
+     * pm_read_bytes may be called in the middle of an outgoing
+     * 4-byte PortMidi message. sysex_in_progress indicates that
+     * a sysex has been sent but no eox.
+     */
+    if (len == 0) return 0; /* sanity check */
+    if (!midi->sysex_in_progress) {
+        while (i < len) { /* process all data */
+            unsigned char byte = data[i++];
+            if (byte == MIDI_SYSEX &&
+                !pm_realtime_filtered(byte, midi->filters)) {
+                midi->sysex_in_progress = TRUE;
+                i--; /* back up so code below will get SYSEX byte */
+                break; /* continue looping below to process msg */
+            } else if (byte == MIDI_EOX) {
+                midi->sysex_in_progress = FALSE;
+                return i; /* done with one message */
+            } else if (byte & MIDI_STATUS_MASK) {
+                /* We're getting MIDI but no sysex in progress.
+                 * Either the SYSEX status byte was dropped or
+                 * the message was filtered. Drop the data, but
+                 * send any embedded realtime bytes.
+                 */
+                /* assume that this is a real-time message:
+                 * it is an error to pass non-real-time messages
+                 * to pm_read_bytes
+                 */
+                event.message = byte;
+                pm_read_short(midi, &event);
+            }
+        } /* all bytes in the buffer are processed */
+    }
+    /* Now, i<len implies sysex_in_progress. If sysex_in_progress
+     * becomes false in the loop, there must have been an overflow
+     * and we can just drop all remaining bytes 
+     */
+    while (i < len && midi->sysex_in_progress) {
+        if (midi->sysex_message_count == 0 && i <= len - 4 &&
+            ((event.message = (((PmMessage) data[i]) | 
+                             (((PmMessage) data[i+1]) << 8) |
+                             (((PmMessage) data[i+2]) << 16) |
+                             (((PmMessage) data[i+3]) << 24))) &
+             0x80808080) == 0) { /* all data, no status */ 
+            if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
+                midi->sysex_in_progress = FALSE;
+            }
+            i += 4;
+        } else {
+            while (i < len) {
+                /* send one byte at a time */
+                unsigned char byte = data[i++];
+                if (is_real_time(byte) && 
+                    pm_realtime_filtered(byte, midi->filters)) {
+                    continue; /* real-time data is filtered, so omit */
+                }
+                midi->sysex_message |= 
+                    (byte << (8 * midi->sysex_message_count++));
+                if (byte == MIDI_EOX) {
+                    midi->sysex_in_progress = FALSE;
+                    pm_flush_sysex(midi, event.timestamp);
+                    return i;
+                } else if (midi->sysex_message_count == 4) {
+                    pm_flush_sysex(midi, event.timestamp);
+                    /* after handling at least one non-data byte
+                     * and reaching a 4-byte message boundary,
+                     * resume trying to send 4 at a time in outer loop
+                     */
+                    break;
+                }
+            }
+        }
+    }
+    return i;
+}
+
+
diff --git a/pd/portmidi/pm_common/portmidi.h b/pd/portmidi/pm_common/portmidi.h
old mode 100644
new mode 100755
index 8f4879f38..e07991e0d
--- a/pd/portmidi/pm_common/portmidi.h
+++ b/pd/portmidi/pm_common/portmidi.h
@@ -1,606 +1,654 @@
-#ifndef PORT_MIDI_H
-#define PORT_MIDI_H
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*
- * PortMidi Portable Real-Time MIDI Library
- * PortMidi API Header File
- * Latest version available at: http://www.cs.cmu.edu/~music/portmidi/
- *
- * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
- * Copyright (c) 2001-2006 Roger B. Dannenberg
- *
- * Latest version available at: http://www.cs.cmu.edu/~music/portmidi/
- *
- * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
- * Copyright (c) 2001-2006 Roger B. Dannenberg
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files
- * (the "Software"), to deal in the Software without restriction,
- * including without limitation the rights to use, copy, modify, merge,
- * publish, distribute, sublicense, and/or sell copies of the Software,
- * and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * The text above constitutes the entire PortMidi license; however, 
- * the PortMusic community also makes the following non-binding requests:
- *
- * Any person wishing to distribute modifications to the Software is
- * requested to send the modifications to the original developer so that
- * they can be incorporated into the canonical version. It is also
- * requested that these non-binding requests be included along with the 
- * license above.
- */
-
-/* CHANGELOG FOR PORTMIDI
- *     (see ../CHANGELOG.txt)
- *
- * IMPORTANT INFORMATION ABOUT A WIN32 BUG:
- *
- *    Windows apparently has a serious midi bug -- if you do not close ports, Windows
- *    may crash. PortMidi tries to protect against this by using a DLL to clean up.
- *
- *    If client exits for example with:
- *      i)  assert 
- *      ii) Ctrl^c, 
- *    then DLL clean-up routine called. However, when client does something 
- *    really bad (e.g. assigns value to NULL pointer) then DLL CLEANUP ROUTINE
- *    NEVER RUNS! In this state, if you wait around long enough, you will
- *    probably get the blue screen of death. Can also go into Pview and there will
- *    exist zombie process that you can't kill.
- *
- *    You can enable the DLL cleanup routine by defining USE_DLL_FOR_CLEANUP.
- *    Do not define this preprocessor symbol if you do not want to use this
- *    feature.
- *
- * NOTES ON HOST ERROR REPORTING: 
- *
- *    PortMidi errors (of type PmError) are generic, system-independent errors.
- *    When an error does not map to one of the more specific PmErrors, the
- *    catch-all code pmHostError is returned. This means that PortMidi has
- *    retained a more specific system-dependent error code. The caller can
- *    get more information by calling Pm_HasHostError() to test if there is
- *    a pending host error, and Pm_GetHostErrorText() to get a text string
- *    describing the error. Host errors are reported on a per-device basis 
- *    because only after you open a device does PortMidi have a place to 
- *    record the host error code. I.e. only 
- *    those routines that receive a (PortMidiStream *) argument check and 
- *    report errors. One exception to this is that Pm_OpenInput() and 
- *    Pm_OpenOutput() can report errors even though when an error occurs,
- *    there is no PortMidiStream* to hold the error. Fortunately, both
- *    of these functions return any error immediately, so we do not really
- *    need per-device error memory. Instead, any host error code is stored
- *    in a global, pmHostError is returned, and the user can call 
- *    Pm_GetHostErrorText() to get the error message (and the invalid stream
- *    parameter will be ignored.) The functions 
- *    pm_init and pm_term do not fail or raise
- *    errors. The job of pm_init is to locate all available devices so that
- *    the caller can get information via PmDeviceInfo(). If an error occurs,
- *    the device is simply not listed as available.
- *
- *    Host errors come in two flavors:
- *      a) host error 
- *      b) host error during callback
- *    These can occur w/midi input or output devices. (b) can only happen 
- *    asynchronously (during callback routines), whereas (a) only occurs while
- *    synchronously running PortMidi and any resulting system dependent calls.
- *    Both (a) and (b) are reported by the next read or write call. You can
- *    also query for asynchronous errors (b) at any time by calling
- *    Pm_HasHostError().
- *
- * NOTES ON COMPILE-TIME SWITCHES
- *
- *    DEBUG assumes stdio and a console. Use this if you want automatic, simple
- *        error reporting, e.g. for prototyping. If you are using MFC or some 
- *        other graphical interface with no console, DEBUG probably should be
- *        undefined.
- *    PM_CHECK_ERRORS more-or-less takes over error checking for return values,
- *        stopping your program and printing error messages when an error
- *        occurs. This also uses stdio for console text I/O.
- *    USE_DLL_FOR_CLEANUP is described above. (Windows only.)
- *    
- */ 
-
-#ifndef FALSE
-    #define FALSE 0
-#endif
-#ifndef TRUE
-    #define TRUE 1
-#endif
-
-/* default size of buffers for sysex transmission: */
-#define PM_DEFAULT_SYSEX_BUFFER_SIZE 1024
-
-
-typedef enum {
-    pmNoError = 0,
-    pmHostError = -10000,
-    pmInvalidDeviceId, /* out of range or 
-                        * output device when input is requested or 
-                        * input device when output is requested or
-                        * device is already opened 
-                        */
-    pmInsufficientMemory,
-    pmBufferTooSmall,
-    pmBufferOverflow,
-    pmBadPtr,
-    pmBadData, /* illegal midi data, e.g. missing EOX */
-    pmInternalError,
-    pmBufferMaxSize /* buffer is already as large as it can be */
-    /* NOTE: If you add a new error type, be sure to update Pm_GetErrorText() */
-} PmError;
-
-/*
-    Pm_Initialize() is the library initialisation function - call this before
-    using the library.
-*/
-
-PmError Pm_Initialize( void );
-
-/*
-    Pm_Terminate() is the library termination function - call this after
-    using the library.
-*/
-
-PmError Pm_Terminate( void );
-
-/*  A single PortMidiStream is a descriptor for an open MIDI device.
-*/
-typedef void PortMidiStream;
-#define PmStream PortMidiStream
-
-/*
-    Test whether stream has a pending host error. Normally, the client finds
-    out about errors through returned error codes, but some errors can occur
-    asynchronously where the client does not
-    explicitly call a function, and therefore cannot receive an error code.
-    The client can test for a pending error using Pm_HasHostError(). If true,
-    the error can be accessed and cleared by calling Pm_GetErrorText(). 
-    Errors are also cleared by calling other functions that can return
-    errors, e.g. Pm_OpenInput(), Pm_OpenOutput(), Pm_Read(), Pm_Write(). The
-    client does not need to call Pm_HasHostError(). Any pending error will be
-    reported the next time the client performs an explicit function call on 
-    the stream, e.g. an input or output operation. Until the error is cleared,
-    no new error codes will be obtained, even for a different stream.
-*/
-int Pm_HasHostError( PortMidiStream * stream );
-
-
-/*  Translate portmidi error number into human readable message.
-    These strings are constants (set at compile time) so client has 
-    no need to allocate storage
-*/
-const char *Pm_GetErrorText( PmError errnum );
-
-/*  Translate portmidi host error into human readable message.
-    These strings are computed at run time, so client has to allocate storage.
-    After this routine executes, the host error is cleared. 
-*/
-void Pm_GetHostErrorText(char * msg, unsigned int len);
-
-#define HDRLENGTH 50
-#define PM_HOST_ERROR_MSG_LEN 256u /* any host error msg will occupy less 
-                                      than this number of characters */
-
-/*
-    Device enumeration mechanism.
-
-    Device ids range from 0 to Pm_CountDevices()-1.
-
-*/
-typedef int PmDeviceID;
-#define pmNoDevice -1
-typedef struct {
-    int structVersion; 
-    const char *interf; /* underlying MIDI API, e.g. MMSystem or DirectX */
-    const char *name;   /* device name, e.g. USB MidiSport 1x1 */
-    int input; /* true iff input is available */
-    int output; /* true iff output is available */
-    int opened; /* used by generic PortMidi code to do error checking on arguments */
-
-} PmDeviceInfo;
-
-
-int Pm_CountDevices( void );
-/*
-    Pm_GetDefaultInputDeviceID(), Pm_GetDefaultOutputDeviceID()
-
-    Return the default device ID or pmNoDevice if there are no devices.
-    The result can be passed to Pm_OpenMidi().
-    
-    On the PC, the user can specify a default device by
-    setting an environment variable. For example, to use device #1.
-
-        set PM_RECOMMENDED_OUTPUT_DEVICE=1
-    
-    The user should first determine the available device ID by using
-    the supplied application "testin" or "testout".
-
-    In general, the registry is a better place for this kind of info,
-    and with USB devices that can come and go, using integers is not
-    very reliable for device identification. Under Windows, if
-    PM_RECOMMENDED_OUTPUT_DEVICE (or PM_RECOMMENDED_INPUT_DEVICE) is
-    *NOT* found in the environment, then the default device is obtained
-    by looking for a string in the registry under:
-        HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Input_Device
-    and HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Output_Device
-    for a string. The number of the first device with a substring that
-    matches the string exactly is returned. For example, if the string
-    in the registry is "USB", and device 1 is named 
-    "In USB MidiSport 1x1", then that will be the default
-    input because it contains the string "USB".
-
-    In addition to the name, PmDeviceInfo has the member "interf", which
-    is the interface name. (The "interface" is the underlying software
-    system or API used by PortMidi to access devices. Examples are 
-    MMSystem, DirectX (not implemented), ALSA, OSS (not implemented), etc.)
-    At present, the only Win32 interface is "MMSystem", the only Linux
-    interface is "ALSA", and the only Max OS X interface is "CoreMIDI".
-    To specify both the interface and the device name in the registry,
-    separate the two with a comma and a space, e.g.:
-        MMSystem, In USB MidiSport 1x1
-    In this case, the string before the comma must be a substring of
-    the "interf" string, and the string after the space must be a 
-    substring of the "name" name string in order to match the device.
-
-    Note: in the current release, the default is simply the first device
-    (the input or output device with the lowest PmDeviceID).
-*/
-PmDeviceID Pm_GetDefaultInputDeviceID( void );
-PmDeviceID Pm_GetDefaultOutputDeviceID( void );
-
-/*
-    PmTimestamp is used to represent a millisecond clock with arbitrary
-    start time. The type is used for all MIDI timestampes and clocks.
-*/
-typedef long PmTimestamp;
-typedef PmTimestamp (*PmTimeProcPtr)(void *time_info);
-
-/* TRUE if t1 before t2 */
-#define PmBefore(t1,t2) ((t1-t2) < 0)
-
-/*
-    Pm_GetDeviceInfo() returns a pointer to a PmDeviceInfo structure
-    referring to the device specified by id.
-    If id is out of range the function returns NULL.
-
-    The returned structure is owned by the PortMidi implementation and must
-    not be manipulated or freed. The pointer is guaranteed to be valid
-    between calls to Pm_Initialize() and Pm_Terminate().
-*/
-const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id );
-
-/*
-    Pm_OpenInput() and Pm_OpenOutput() open devices.
-
-    stream is the address of a PortMidiStream pointer which will receive
-    a pointer to the newly opened stream.
-
-    inputDevice is the id of the device used for input (see PmDeviceID above).
-
-    inputDriverInfo is a pointer to an optional driver specific data structure
-    containing additional information for device setup or handle processing.
-    inputDriverInfo is never required for correct operation. If not used
-    inputDriverInfo should be NULL.
-
-    outputDevice is the id of the device used for output (see PmDeviceID above.)
-
-    outputDriverInfo is a pointer to an optional driver specific data structure
-    containing additional information for device setup or handle processing.
-    outputDriverInfo is never required for correct operation. If not used
-    outputDriverInfo should be NULL.
-
-    For input, the buffersize specifies the number of input events to be 
-    buffered waiting to be read using Pm_Read(). For output, buffersize 
-    specifies the number of output events to be buffered waiting for output. 
-    (In some cases -- see below -- PortMidi does not buffer output at all
-    and merely passes data to a lower-level API, in which case buffersize
-    is ignored.)
-    
-    latency is the delay in milliseconds applied to timestamps to determine 
-    when the output should actually occur. (If latency is < 0, 0 is assumed.) 
-    If latency is zero, timestamps are ignored and all output is delivered
-    immediately. If latency is greater than zero, output is delayed until
-    the message timestamp plus the latency. (NOTE: time is measured relative
-    to the time source indicated by time_proc. Timestamps are absolute, not
-    relative delays or offsets.) In some cases, PortMidi can obtain
-    better timing than your application by passing timestamps along to the
-    device driver or hardware. Latency may also help you to synchronize midi
-    data to audio data by matching midi latency to the audio buffer latency.
-
-    time_proc is a pointer to a procedure that returns time in milliseconds. It
-    may be NULL, in which case a default millisecond timebase (PortTime) is 
-    used. If the application wants to use PortTime, it should start the timer
-    (call Pt_Start) before calling Pm_OpenInput or Pm_OpenOutput. If the
-    application tries to start the timer *after* Pm_OpenInput or Pm_OpenOutput,
-    it may get a ptAlreadyStarted error from Pt_Start, and the application's
-    preferred time resolution and callback function will be ignored.
-    time_proc result values are appended to incoming MIDI data, and time_proc
-    times are used to schedule outgoing MIDI data (when latency is non-zero).
-
-    time_info is a pointer passed to time_proc. 
-
-    return value:
-    Upon success Pm_Open() returns PmNoError and places a pointer to a
-    valid PortMidiStream in the stream argument.
-    If a call to Pm_Open() fails a nonzero error code is returned (see
-    PMError above) and the value of port is invalid.
-
-    Any stream that is successfully opened should eventually be closed
-    by calling Pm_Close().
-
-*/
-PmError Pm_OpenInput( PortMidiStream** stream,
-                PmDeviceID inputDevice,
-                void *inputDriverInfo,
-                long bufferSize,
-                PmTimeProcPtr time_proc,
-                void *time_info );
-
-PmError Pm_OpenOutput( PortMidiStream** stream,
-                PmDeviceID outputDevice,
-                void *outputDriverInfo,
-                long bufferSize,
-                PmTimeProcPtr time_proc,
-                void *time_info,
-                long latency );
-
-/* 
-    Pm_SetFilter() sets filters on an open input stream to drop selected
-    input types. By default, only active sensing messages are filtered.
-    To prohibit, say, active sensing and sysex messages, call
-    Pm_SetFilter(stream, PM_FILT_ACTIVE | PM_FILT_SYSEX);
-
-    Filtering is useful when midi routing or midi thru functionality is being
-    provided by the user application.
-    For example, you may want to exclude timing messages (clock, MTC, start/stop/continue),
-    while allowing note-related messages to pass.
-    Or you may be using a sequencer or drum-machine for MIDI clock information but want to
-    exclude any notes it may play.
- */
-
-/* filter active sensing messages (0xFE): */
-#define PM_FILT_ACTIVE (1 << 0x0E)
-/* filter system exclusive messages (0xF0): */
-#define PM_FILT_SYSEX (1 << 0x00)
-/* filter clock messages (CLOCK 0xF8, START 0xFA, STOP 0xFC, and CONTINUE 0xFB) */
-#define PM_FILT_CLOCK ((1 << 0x08) | (1 << 0x0A) | (1 << 0x0C) | (1 << 0x0B))
-/* filter play messages (start 0xFA, stop 0xFC, continue 0xFB) */
-#define PM_FILT_PLAY (1 << 0x0A)
-/* filter tick messages (0xF9) */
-#define PM_FILT_TICK (1 << 0x09)
-/* filter undefined FD messages */
-#define PM_FILT_FD (1 << 0x0D)
-/* filter undefined real-time messages */
-#define PM_FILT_UNDEFINED PM_FILT_FD
-/* filter reset messages (0xFF) */
-#define PM_FILT_RESET (1 << 0x0F)
-/* filter all real-time messages */
-#define PM_FILT_REALTIME (PM_FILT_ACTIVE | PM_FILT_SYSEX | PM_FILT_CLOCK | \
-    PM_FILT_PLAY | PM_FILT_UNDEFINED | PM_FILT_RESET | PM_FILT_TICK)
-/* filter note-on and note-off (0x90-0x9F and 0x80-0x8F */
-#define PM_FILT_NOTE ((1 << 0x19) | (1 << 0x18))
-/* filter channel aftertouch (most midi controllers use this) (0xD0-0xDF)*/
-#define PM_FILT_CHANNEL_AFTERTOUCH (1 << 0x1D)
-/* per-note aftertouch (0xA0-0xAF) */
-#define PM_FILT_POLY_AFTERTOUCH (1 << 0x1A)
-/* filter both channel and poly aftertouch */
-#define PM_FILT_AFTERTOUCH (PM_FILT_CHANNEL_AFTERTOUCH | PM_FILT_POLY_AFTERTOUCH)
-/* Program changes (0xC0-0xCF) */
-#define PM_FILT_PROGRAM (1 << 0x1C)
-/* Control Changes (CC's) (0xB0-0xBF)*/
-#define PM_FILT_CONTROL (1 << 0x1B)
-/* Pitch Bender (0xE0-0xEF*/
-#define PM_FILT_PITCHBEND (1 << 0x1E)
-/* MIDI Time Code (0xF1)*/
-#define PM_FILT_MTC (1 << 0x01)
-/* Song Position (0xF2) */
-#define PM_FILT_SONG_POSITION (1 << 0x02)
-/* Song Select (0xF3)*/
-#define PM_FILT_SONG_SELECT (1 << 0x03)
-/* Tuning request (0xF6)*/
-#define PM_FILT_TUNE (1 << 0x06)
-/* All System Common messages (mtc, song position, song select, tune request) */
-#define PM_FILT_SYSTEMCOMMON (PM_FILT_MTC | PM_FILT_SONG_POSITION | PM_FILT_SONG_SELECT | PM_FILT_TUNE)
-
-
-PmError Pm_SetFilter( PortMidiStream* stream, long filters );
-
-/*
-    Pm_SetChannelMask() filters incoming messages based on channel.
-    The mask is a 16-bit bitfield corresponding to appropriate channels
-    The Pm_Channel macro can assist in calling this function.
-    i.e. to set receive only input on channel 1, call with
-    Pm_SetChannelMask(Pm_Channel(1));
-    Multiple channels should be OR'd together, like
-    Pm_SetChannelMask(Pm_Channel(10) | Pm_Channel(11))
-
-    All channels are allowed by default
-*/
-#define Pm_Channel(channel) (1<<(channel))
-
-PmError Pm_SetChannelMask(PortMidiStream *stream, int mask);
-
-/*
-    Pm_Abort() terminates outgoing messages immediately
-    The caller should immediately close the output port;
-    this call may result in transmission of a partial midi message.
-    There is no abort for Midi input because the user can simply
-    ignore messages in the buffer and close an input device at
-    any time.
- */
-PmError Pm_Abort( PortMidiStream* stream );
-     
-/*
-    Pm_Close() closes a midi stream, flushing any pending buffers.
-    (PortMidi attempts to close open streams when the application 
-    exits -- this is particularly difficult under Windows.)
-*/
-PmError Pm_Close( PortMidiStream* stream );
-
-/*
-    Pm_Message() encodes a short Midi message into a long word. If data1
-    and/or data2 are not present, use zero.
-
-    Pm_MessageStatus(), Pm_MessageData1(), and 
-    Pm_MessageData2() extract fields from a long-encoded midi message.
-*/
-#define Pm_Message(status, data1, data2) \
-         ((((data2) << 16) & 0xFF0000) | \
-          (((data1) << 8) & 0xFF00) | \
-          ((status) & 0xFF))
-#define Pm_MessageStatus(msg) ((msg) & 0xFF)
-#define Pm_MessageData1(msg) (((msg) >> 8) & 0xFF)
-#define Pm_MessageData2(msg) (((msg) >> 16) & 0xFF)
-
-/* All midi data comes in the form of PmEvent structures. A sysex
-   message is encoded as a sequence of PmEvent structures, with each
-   structure carrying 4 bytes of the message, i.e. only the first
-   PmEvent carries the status byte.
-
-   Note that MIDI allows nested messages: the so-called "real-time" MIDI 
-   messages can be inserted into the MIDI byte stream at any location, 
-   including within a sysex message. MIDI real-time messages are one-byte
-   messages used mainly for timing (see the MIDI spec). PortMidi retains 
-   the order of non-real-time MIDI messages on both input and output, but 
-   it does not specify exactly how real-time messages are processed. This
-   is particulary problematic for MIDI input, because the input parser 
-   must either prepare to buffer an unlimited number of sysex message 
-   bytes or to buffer an unlimited number of real-time messages that 
-   arrive embedded in a long sysex message. To simplify things, the input
-   parser is allowed to pass real-time MIDI messages embedded within a 
-   sysex message, and it is up to the client to detect, process, and 
-   remove these messages as they arrive.
-
-   When receiving sysex messages, the sysex message is terminated
-   by either an EOX status byte (anywhere in the 4 byte messages) or
-   by a non-real-time status byte in the low order byte of the message.
-   If you get a non-real-time status byte but there was no EOX byte, it 
-   means the sysex message was somehow truncated. This is not
-   considered an error; e.g., a missing EOX can result from the user
-   disconnecting a MIDI cable during sysex transmission.
-
-   A real-time message can occur within a sysex message. A real-time 
-   message will always occupy a full PmEvent with the status byte in 
-   the low-order byte of the PmEvent message field. (This implies that
-   the byte-order of sysex bytes and real-time message bytes may not
-   be preserved -- for example, if a real-time message arrives after
-   3 bytes of a sysex message, the real-time message will be delivered
-   first. The first word of the sysex message will be delivered only
-   after the 4th byte arrives, filling the 4-byte PmEvent message field.
-   
-   The timestamp field is observed when the output port is opened with
-   a non-zero latency. A timestamp of zero means "use the current time",
-   which in turn means to deliver the message with a delay of
-   latency (the latency parameter used when opening the output port.)
-   Do not expect PortMidi to sort data according to timestamps -- 
-   messages should be sent in the correct order, and timestamps MUST 
-   be non-decreasing.
-
-   A sysex message will generally fill many PmEvent structures. On 
-   output to a PortMidiStream with non-zero latency, the first timestamp
-   on sysex message data will determine the time to begin sending the 
-   message. PortMidi implementations may ignore timestamps for the 
-   remainder of the sysex message. 
-   
-   On input, the timestamp ideally denotes the arrival time of the 
-   status byte of the message. The first timestamp on sysex message 
-   data will be valid. Subsequent timestamps may denote 
-   when message bytes were actually received, or they may be simply 
-   copies of the first timestamp.
-
-   Timestamps for nested messages: If a real-time message arrives in 
-   the middle of some other message, it is enqueued immediately with 
-   the timestamp corresponding to its arrival time. The interrupted 
-   non-real-time message or 4-byte packet of sysex data will be enqueued 
-   later. The timestamp of interrupted data will be equal to that of
-   the interrupting real-time message to insure that timestamps are
-   non-decreasing.
- */
-typedef long PmMessage;
-typedef struct {
-    PmMessage      message;
-    PmTimestamp    timestamp;
-} PmEvent;
-
-/*
-    Pm_Read() retrieves midi data into a buffer, and returns the number
-    of events read. Result is a non-negative number unless an error occurs, 
-    in which case a PmError value will be returned.
-
-    Buffer Overflow
-
-    The problem: if an input overflow occurs, data will be lost, ultimately 
-    because there is no flow control all the way back to the data source. 
-    When data is lost, the receiver should be notified and some sort of 
-    graceful recovery should take place, e.g. you shouldn't resume receiving 
-    in the middle of a long sysex message.
-
-    With a lock-free fifo, which is pretty much what we're stuck with to 
-    enable portability to the Mac, it's tricky for the producer and consumer 
-    to synchronously reset the buffer and resume normal operation.
-
-    Solution: the buffer managed by PortMidi will be flushed when an overflow
-    occurs. The consumer (Pm_Read()) gets an error message (pmBufferOverflow)
-    and ordinary processing resumes as soon as a new message arrives. The
-    remainder of a partial sysex message is not considered to be a "new
-    message" and will be flushed as well.
-
-*/
-PmError Pm_Read( PortMidiStream *stream, PmEvent *buffer, long length );
-
-/*
-    Pm_Poll() tests whether input is available, 
-    returning TRUE, FALSE, or an error value.
-*/
-PmError Pm_Poll( PortMidiStream *stream);
-
-/* 
-    Pm_Write() writes midi data from a buffer. This may contain:
-        - short messages 
-    or 
-        - sysex messages that are converted into a sequence of PmEvent
-          structures, e.g. sending data from a file or forwarding them
-          from midi input.
-
-    Use Pm_WriteSysEx() to write a sysex message stored as a contiguous 
-    array of bytes.
-
-    Sysex data may contain embedded real-time messages.
-*/
-PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, long length );
-
-/*
-    Pm_WriteShort() writes a timestamped non-system-exclusive midi message.
-    Messages are delivered in order as received, and timestamps must be 
-    non-decreasing. (But timestamps are ignored if the stream was opened
-    with latency = 0.)
-*/
-PmError Pm_WriteShort( PortMidiStream *stream, PmTimestamp when, long msg);
-
-/*
-    Pm_WriteSysEx() writes a timestamped system-exclusive midi message.
-*/
-PmError Pm_WriteSysEx( PortMidiStream *stream, PmTimestamp when, unsigned char *msg);
-
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* PORT_MIDI_H */
+#ifndef PORT_MIDI_H
+#define PORT_MIDI_H
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * PortMidi Portable Real-Time MIDI Library
+ * PortMidi API Header File
+ * Latest version available at: http://sourceforge.net/projects/portmedia
+ *
+ * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
+ * Copyright (c) 2001-2006 Roger B. Dannenberg
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * The text above constitutes the entire PortMidi license; however, 
+ * the PortMusic community also makes the following non-binding requests:
+ *
+ * Any person wishing to distribute modifications to the Software is
+ * requested to send the modifications to the original developer so that
+ * they can be incorporated into the canonical version. It is also
+ * requested that these non-binding requests be included along with the 
+ * license above.
+ */
+
+/* CHANGELOG FOR PORTMIDI
+ *     (see ../CHANGELOG.txt)
+ *
+ * NOTES ON HOST ERROR REPORTING: 
+ *
+ *    PortMidi errors (of type PmError) are generic, system-independent errors.
+ *    When an error does not map to one of the more specific PmErrors, the
+ *    catch-all code pmHostError is returned. This means that PortMidi has
+ *    retained a more specific system-dependent error code. The caller can
+ *    get more information by calling Pm_HasHostError() to test if there is
+ *    a pending host error, and Pm_GetHostErrorText() to get a text string
+ *    describing the error. Host errors are reported on a per-device basis 
+ *    because only after you open a device does PortMidi have a place to 
+ *    record the host error code. I.e. only 
+ *    those routines that receive a (PortMidiStream *) argument check and 
+ *    report errors. One exception to this is that Pm_OpenInput() and 
+ *    Pm_OpenOutput() can report errors even though when an error occurs,
+ *    there is no PortMidiStream* to hold the error. Fortunately, both
+ *    of these functions return any error immediately, so we do not really
+ *    need per-device error memory. Instead, any host error code is stored
+ *    in a global, pmHostError is returned, and the user can call 
+ *    Pm_GetHostErrorText() to get the error message (and the invalid stream
+ *    parameter will be ignored.) The functions 
+ *    pm_init and pm_term do not fail or raise
+ *    errors. The job of pm_init is to locate all available devices so that
+ *    the caller can get information via PmDeviceInfo(). If an error occurs,
+ *    the device is simply not listed as available.
+ *
+ *    Host errors come in two flavors:
+ *      a) host error 
+ *      b) host error during callback
+ *    These can occur w/midi input or output devices. (b) can only happen 
+ *    asynchronously (during callback routines), whereas (a) only occurs while
+ *    synchronously running PortMidi and any resulting system dependent calls.
+ *    Both (a) and (b) are reported by the next read or write call. You can
+ *    also query for asynchronous errors (b) at any time by calling
+ *    Pm_HasHostError().
+ *
+ * NOTES ON COMPILE-TIME SWITCHES
+ *
+ *    DEBUG assumes stdio and a console. Use this if you want automatic, simple
+ *        error reporting, e.g. for prototyping. If you are using MFC or some 
+ *        other graphical interface with no console, DEBUG probably should be
+ *        undefined.
+ *    PM_CHECK_ERRORS more-or-less takes over error checking for return values,
+ *        stopping your program and printing error messages when an error
+ *        occurs. This also uses stdio for console text I/O.
+ */
+
+#ifndef WIN32
+// Linux and OS X have stdint.h
+#include <stdint.h>
+#else
+#ifndef INT32_DEFINED
+// rather than having users install a special .h file for windows, 
+// just put the required definitions inline here. porttime.h uses
+// these too, so the definitions are (unfortunately) duplicated there
+typedef int int32_t;
+typedef unsigned int uint32_t;
+#define INT32_DEFINED
+#endif
+#endif
+
+#ifdef _WINDLL
+#define PMEXPORT __declspec(dllexport)
+#else
+#define PMEXPORT 
+#endif
+
+#ifndef FALSE
+    #define FALSE 0
+#endif
+#ifndef TRUE
+    #define TRUE 1
+#endif
+
+/* default size of buffers for sysex transmission: */
+#define PM_DEFAULT_SYSEX_BUFFER_SIZE 1024
+
+/** List of portmidi errors.*/
+typedef enum {
+    pmNoError = 0,
+    pmNoData = 0, /**< A "no error" return that also indicates no data avail. */
+    pmGotData = 1, /**< A "no error" return that also indicates data available */
+    pmHostError = -10000,
+    pmInvalidDeviceId, /** out of range or 
+                        * output device when input is requested or 
+                        * input device when output is requested or
+                        * device is already opened 
+                        */
+    pmInsufficientMemory,
+    pmBufferTooSmall,
+    pmBufferOverflow,
+    pmBadPtr, /* PortMidiStream parameter is NULL or
+               * stream is not opened or
+               * stream is output when input is required or
+               * stream is input when output is required */
+    pmBadData, /** illegal midi data, e.g. missing EOX */
+    pmInternalError,
+    pmBufferMaxSize /** buffer is already as large as it can be */
+    /* NOTE: If you add a new error type, be sure to update Pm_GetErrorText() */
+} PmError;
+
+/**
+    Pm_Initialize() is the library initialisation function - call this before
+    using the library.
+*/
+PMEXPORT PmError Pm_Initialize( void );
+
+/**
+    Pm_Terminate() is the library termination function - call this after
+    using the library.
+*/
+PMEXPORT PmError Pm_Terminate( void );
+
+/**  A single PortMidiStream is a descriptor for an open MIDI device.
+*/
+typedef void PortMidiStream;
+#define PmStream PortMidiStream
+
+/**
+    Test whether stream has a pending host error. Normally, the client finds
+    out about errors through returned error codes, but some errors can occur
+    asynchronously where the client does not
+    explicitly call a function, and therefore cannot receive an error code.
+    The client can test for a pending error using Pm_HasHostError(). If true,
+    the error can be accessed and cleared by calling Pm_GetErrorText(). 
+    Errors are also cleared by calling other functions that can return
+    errors, e.g. Pm_OpenInput(), Pm_OpenOutput(), Pm_Read(), Pm_Write(). The
+    client does not need to call Pm_HasHostError(). Any pending error will be
+    reported the next time the client performs an explicit function call on 
+    the stream, e.g. an input or output operation. Until the error is cleared,
+    no new error codes will be obtained, even for a different stream.
+*/
+PMEXPORT int Pm_HasHostError( PortMidiStream * stream );
+
+
+/**  Translate portmidi error number into human readable message.
+    These strings are constants (set at compile time) so client has 
+    no need to allocate storage
+*/
+PMEXPORT const char *Pm_GetErrorText( PmError errnum );
+
+/**  Translate portmidi host error into human readable message.
+    These strings are computed at run time, so client has to allocate storage.
+    After this routine executes, the host error is cleared. 
+*/
+PMEXPORT void Pm_GetHostErrorText(char * msg, unsigned int len);
+
+#define HDRLENGTH 50
+#define PM_HOST_ERROR_MSG_LEN 256u /* any host error msg will occupy less 
+                                      than this number of characters */
+
+/**
+    Device enumeration mechanism.
+
+    Device ids range from 0 to Pm_CountDevices()-1.
+
+*/
+typedef int PmDeviceID;
+#define pmNoDevice -1
+typedef struct {
+    int structVersion; /**< this internal structure version */ 
+    const char *interf; /**< underlying MIDI API, e.g. MMSystem or DirectX */
+    const char *name;   /**< device name, e.g. USB MidiSport 1x1 */
+    int input; /**< true iff input is available */
+    int output; /**< true iff output is available */
+    int opened; /**< used by generic PortMidi code to do error checking on arguments */
+
+} PmDeviceInfo;
+
+/**  Get devices count, ids range from 0 to Pm_CountDevices()-1. */
+PMEXPORT int Pm_CountDevices( void );
+/**
+    Pm_GetDefaultInputDeviceID(), Pm_GetDefaultOutputDeviceID()
+
+    Return the default device ID or pmNoDevice if there are no devices.
+    The result (but not pmNoDevice) can be passed to Pm_OpenMidi().
+    
+    The default device can be specified using a small application
+    named pmdefaults that is part of the PortMidi distribution. This
+    program in turn uses the Java Preferences object created by
+    java.util.prefs.Preferences.userRoot().node("/PortMidi"); the
+    preference is set by calling 
+        prefs.put("PM_RECOMMENDED_OUTPUT_DEVICE", prefName);
+    or  prefs.put("PM_RECOMMENDED_INPUT_DEVICE", prefName);
+    
+    In the statements above, prefName is a string describing the
+    MIDI device in the form "interf, name" where interf identifies
+    the underlying software system or API used by PortMdi to access
+    devices and name is the name of the device. These correspond to 
+    the interf and name fields of a PmDeviceInfo. (Currently supported
+    interfaces are "MMSystem" for Win32, "ALSA" for Linux, and 
+    "CoreMIDI" for OS X, so in fact, there is no choice of interface.)
+    In "interf, name", the strings are actually substrings of 
+    the full interface and name strings. For example, the preference 
+    "Core, Sport" will match a device with interface "CoreMIDI"
+    and name "In USB MidiSport 1x1". It will also match "CoreMIDI"
+    and "In USB MidiSport 2x2". The devices are enumerated in device
+    ID order, so the lowest device ID that matches the pattern becomes
+    the default device. Finally, if the comma-space (", ") separator
+    between interface and name parts of the preference is not found,
+    the entire preference string is interpreted as a name, and the
+    interface part is the empty string, which matches anything.
+
+    On the MAC, preferences are stored in 
+      /Users/$NAME/Library/Preferences/com.apple.java.util.prefs.plist
+    which is a binary file. In addition to the pmdefaults program,
+    there are utilities that can read and edit this preference file.
+
+    On the PC, 
+
+    On Linux, 
+
+*/
+PMEXPORT PmDeviceID Pm_GetDefaultInputDeviceID( void );
+/** see PmDeviceID Pm_GetDefaultInputDeviceID() */
+PMEXPORT PmDeviceID Pm_GetDefaultOutputDeviceID( void );
+
+/**
+    PmTimestamp is used to represent a millisecond clock with arbitrary
+    start time. The type is used for all MIDI timestampes and clocks.
+*/
+typedef int32_t PmTimestamp;
+typedef PmTimestamp (*PmTimeProcPtr)(void *time_info);
+
+/** TRUE if t1 before t2 */
+#define PmBefore(t1,t2) ((t1-t2) < 0)
+/** 
+    \defgroup grp_device Input/Output Devices Handling
+    @{
+*/
+/**
+    Pm_GetDeviceInfo() returns a pointer to a PmDeviceInfo structure
+    referring to the device specified by id.
+    If id is out of range the function returns NULL.
+
+    The returned structure is owned by the PortMidi implementation and must
+    not be manipulated or freed. The pointer is guaranteed to be valid
+    between calls to Pm_Initialize() and Pm_Terminate().
+*/
+PMEXPORT const PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id );
+
+/**
+    Pm_OpenInput() and Pm_OpenOutput() open devices.
+
+    stream is the address of a PortMidiStream pointer which will receive
+    a pointer to the newly opened stream.
+
+    inputDevice is the id of the device used for input (see PmDeviceID above).
+
+    inputDriverInfo is a pointer to an optional driver specific data structure
+    containing additional information for device setup or handle processing.
+    inputDriverInfo is never required for correct operation. If not used
+    inputDriverInfo should be NULL.
+
+    outputDevice is the id of the device used for output (see PmDeviceID above.)
+
+    outputDriverInfo is a pointer to an optional driver specific data structure
+    containing additional information for device setup or handle processing.
+    outputDriverInfo is never required for correct operation. If not used
+    outputDriverInfo should be NULL.
+
+    For input, the buffersize specifies the number of input events to be 
+    buffered waiting to be read using Pm_Read(). For output, buffersize 
+    specifies the number of output events to be buffered waiting for output. 
+    (In some cases -- see below -- PortMidi does not buffer output at all
+    and merely passes data to a lower-level API, in which case buffersize
+    is ignored.)
+    
+    latency is the delay in milliseconds applied to timestamps to determine 
+    when the output should actually occur. (If latency is < 0, 0 is assumed.) 
+    If latency is zero, timestamps are ignored and all output is delivered
+    immediately. If latency is greater than zero, output is delayed until the
+    message timestamp plus the latency. (NOTE: the time is measured relative 
+    to the time source indicated by time_proc. Timestamps are absolute,
+    not relative delays or offsets.) In some cases, PortMidi can obtain
+    better timing than your application by passing timestamps along to the
+    device driver or hardware. Latency may also help you to synchronize midi
+    data to audio data by matching midi latency to the audio buffer latency.
+
+    time_proc is a pointer to a procedure that returns time in milliseconds. It
+    may be NULL, in which case a default millisecond timebase (PortTime) is 
+    used. If the application wants to use PortTime, it should start the timer
+    (call Pt_Start) before calling Pm_OpenInput or Pm_OpenOutput. If the
+    application tries to start the timer *after* Pm_OpenInput or Pm_OpenOutput,
+    it may get a ptAlreadyStarted error from Pt_Start, and the application's
+    preferred time resolution and callback function will be ignored.
+    time_proc result values are appended to incoming MIDI data, and time_proc
+    times are used to schedule outgoing MIDI data (when latency is non-zero).
+
+    time_info is a pointer passed to time_proc.
+
+    Example: If I provide a timestamp of 5000, latency is 1, and time_proc
+    returns 4990, then the desired output time will be when time_proc returns
+    timestamp+latency = 5001. This will be 5001-4990 = 11ms from now.
+
+    return value:
+    Upon success Pm_Open() returns PmNoError and places a pointer to a
+    valid PortMidiStream in the stream argument.
+    If a call to Pm_Open() fails a nonzero error code is returned (see
+    PMError above) and the value of port is invalid.
+
+    Any stream that is successfully opened should eventually be closed
+    by calling Pm_Close().
+
+*/
+PMEXPORT PmError Pm_OpenInput( PortMidiStream** stream,
+                PmDeviceID inputDevice,
+                void *inputDriverInfo,
+                int32_t bufferSize,
+                PmTimeProcPtr time_proc,
+                void *time_info );
+
+PMEXPORT PmError Pm_OpenOutput( PortMidiStream** stream,
+                PmDeviceID outputDevice,
+                void *outputDriverInfo,
+                int32_t bufferSize,
+                PmTimeProcPtr time_proc,
+                void *time_info,
+                int32_t latency );
+  /** @} */
+
+/**
+   \defgroup grp_events_filters Events and Filters Handling
+   @{
+*/
+
+/*  \function PmError Pm_SetFilter( PortMidiStream* stream, int32_t filters )
+    Pm_SetFilter() sets filters on an open input stream to drop selected
+    input types. By default, only active sensing messages are filtered.
+    To prohibit, say, active sensing and sysex messages, call
+    Pm_SetFilter(stream, PM_FILT_ACTIVE | PM_FILT_SYSEX);
+
+    Filtering is useful when midi routing or midi thru functionality is being
+    provided by the user application.
+    For example, you may want to exclude timing messages (clock, MTC, start/stop/continue),
+    while allowing note-related messages to pass.
+    Or you may be using a sequencer or drum-machine for MIDI clock information but want to
+    exclude any notes it may play.
+ */
+    
+/* Filter bit-mask definitions */
+/** filter active sensing messages (0xFE): */
+#define PM_FILT_ACTIVE (1 << 0x0E)
+/** filter system exclusive messages (0xF0): */
+#define PM_FILT_SYSEX (1 << 0x00)
+/** filter MIDI clock message (0xF8) */
+#define PM_FILT_CLOCK (1 << 0x08)
+/** filter play messages (start 0xFA, stop 0xFC, continue 0xFB) */
+#define PM_FILT_PLAY ((1 << 0x0A) | (1 << 0x0C) | (1 << 0x0B))
+/** filter tick messages (0xF9) */
+#define PM_FILT_TICK (1 << 0x09)
+/** filter undefined FD messages */
+#define PM_FILT_FD (1 << 0x0D)
+/** filter undefined real-time messages */
+#define PM_FILT_UNDEFINED PM_FILT_FD
+/** filter reset messages (0xFF) */
+#define PM_FILT_RESET (1 << 0x0F)
+/** filter all real-time messages */
+#define PM_FILT_REALTIME (PM_FILT_ACTIVE | PM_FILT_SYSEX | PM_FILT_CLOCK | \
+    PM_FILT_PLAY | PM_FILT_UNDEFINED | PM_FILT_RESET | PM_FILT_TICK)
+/** filter note-on and note-off (0x90-0x9F and 0x80-0x8F */
+#define PM_FILT_NOTE ((1 << 0x19) | (1 << 0x18))
+/** filter channel aftertouch (most midi controllers use this) (0xD0-0xDF)*/
+#define PM_FILT_CHANNEL_AFTERTOUCH (1 << 0x1D)
+/** per-note aftertouch (0xA0-0xAF) */
+#define PM_FILT_POLY_AFTERTOUCH (1 << 0x1A)
+/** filter both channel and poly aftertouch */
+#define PM_FILT_AFTERTOUCH (PM_FILT_CHANNEL_AFTERTOUCH | PM_FILT_POLY_AFTERTOUCH)
+/** Program changes (0xC0-0xCF) */
+#define PM_FILT_PROGRAM (1 << 0x1C)
+/** Control Changes (CC's) (0xB0-0xBF)*/
+#define PM_FILT_CONTROL (1 << 0x1B)
+/** Pitch Bender (0xE0-0xEF*/
+#define PM_FILT_PITCHBEND (1 << 0x1E)
+/** MIDI Time Code (0xF1)*/
+#define PM_FILT_MTC (1 << 0x01)
+/** Song Position (0xF2) */
+#define PM_FILT_SONG_POSITION (1 << 0x02)
+/** Song Select (0xF3)*/
+#define PM_FILT_SONG_SELECT (1 << 0x03)
+/** Tuning request (0xF6)*/
+#define PM_FILT_TUNE (1 << 0x06)
+/** All System Common messages (mtc, song position, song select, tune request) */
+#define PM_FILT_SYSTEMCOMMON (PM_FILT_MTC | PM_FILT_SONG_POSITION | PM_FILT_SONG_SELECT | PM_FILT_TUNE)
+
+
+PMEXPORT PmError Pm_SetFilter( PortMidiStream* stream, int32_t filters );
+
+#define Pm_Channel(channel) (1<<(channel))
+/**
+    Pm_SetChannelMask() filters incoming messages based on channel.
+    The mask is a 16-bit bitfield corresponding to appropriate channels.
+    The Pm_Channel macro can assist in calling this function.
+    i.e. to set receive only input on channel 1, call with
+    Pm_SetChannelMask(Pm_Channel(1));
+    Multiple channels should be OR'd together, like
+    Pm_SetChannelMask(Pm_Channel(10) | Pm_Channel(11))
+
+    Note that channels are numbered 0 to 15 (not 1 to 16). Most 
+    synthesizer and interfaces number channels starting at 1, but
+    PortMidi numbers channels starting at 0.
+
+    All channels are allowed by default
+*/
+PMEXPORT PmError Pm_SetChannelMask(PortMidiStream *stream, int mask);
+
+/**
+    Pm_Abort() terminates outgoing messages immediately
+    The caller should immediately close the output port;
+    this call may result in transmission of a partial midi message.
+    There is no abort for Midi input because the user can simply
+    ignore messages in the buffer and close an input device at
+    any time.
+ */
+PMEXPORT PmError Pm_Abort( PortMidiStream* stream );
+     
+/**
+    Pm_Close() closes a midi stream, flushing any pending buffers.
+    (PortMidi attempts to close open streams when the application 
+    exits -- this is particularly difficult under Windows.)
+*/
+PMEXPORT PmError Pm_Close( PortMidiStream* stream );
+
+/**
+    Pm_Synchronize() instructs PortMidi to (re)synchronize to the
+    time_proc passed when the stream was opened. Typically, this
+    is used when the stream must be opened before the time_proc
+    reference is actually advancing. In this case, message timing
+    may be erratic, but since timestamps of zero mean 
+    "send immediately," initialization messages with zero timestamps
+    can be written without a functioning time reference and without
+    problems. Before the first MIDI message with a non-zero
+    timestamp is written to the stream, the time reference must
+    begin to advance (for example, if the time_proc computes time
+    based on audio samples, time might begin to advance when an 
+    audio stream becomes active). After time_proc return values
+    become valid, and BEFORE writing the first non-zero timestamped 
+    MIDI message, call Pm_Synchronize() so that PortMidi can observe
+    the difference between the current time_proc value and its
+    MIDI stream time. 
+    
+    In the more normal case where time_proc 
+    values advance continuously, there is no need to call 
+    Pm_Synchronize. PortMidi will always synchronize at the 
+    first output message and periodically thereafter.
+*/
+PmError Pm_Synchronize( PortMidiStream* stream );
+
+
+/**
+    Pm_Message() encodes a short Midi message into a 32-bit word. If data1
+    and/or data2 are not present, use zero.
+
+    Pm_MessageStatus(), Pm_MessageData1(), and 
+    Pm_MessageData2() extract fields from a 32-bit midi message.
+*/
+#define Pm_Message(status, data1, data2) \
+         ((((data2) << 16) & 0xFF0000) | \
+          (((data1) << 8) & 0xFF00) | \
+          ((status) & 0xFF))
+#define Pm_MessageStatus(msg) ((msg) & 0xFF)
+#define Pm_MessageData1(msg) (((msg) >> 8) & 0xFF)
+#define Pm_MessageData2(msg) (((msg) >> 16) & 0xFF)
+
+typedef int32_t PmMessage; /**< see PmEvent */
+/**
+   All midi data comes in the form of PmEvent structures. A sysex
+   message is encoded as a sequence of PmEvent structures, with each
+   structure carrying 4 bytes of the message, i.e. only the first
+   PmEvent carries the status byte.
+
+   Note that MIDI allows nested messages: the so-called "real-time" MIDI 
+   messages can be inserted into the MIDI byte stream at any location, 
+   including within a sysex message. MIDI real-time messages are one-byte
+   messages used mainly for timing (see the MIDI spec). PortMidi retains 
+   the order of non-real-time MIDI messages on both input and output, but 
+   it does not specify exactly how real-time messages are processed. This
+   is particulary problematic for MIDI input, because the input parser 
+   must either prepare to buffer an unlimited number of sysex message 
+   bytes or to buffer an unlimited number of real-time messages that 
+   arrive embedded in a long sysex message. To simplify things, the input
+   parser is allowed to pass real-time MIDI messages embedded within a 
+   sysex message, and it is up to the client to detect, process, and 
+   remove these messages as they arrive.
+
+   When receiving sysex messages, the sysex message is terminated
+   by either an EOX status byte (anywhere in the 4 byte messages) or
+   by a non-real-time status byte in the low order byte of the message.
+   If you get a non-real-time status byte but there was no EOX byte, it 
+   means the sysex message was somehow truncated. This is not
+   considered an error; e.g., a missing EOX can result from the user
+   disconnecting a MIDI cable during sysex transmission.
+
+   A real-time message can occur within a sysex message. A real-time 
+   message will always occupy a full PmEvent with the status byte in 
+   the low-order byte of the PmEvent message field. (This implies that
+   the byte-order of sysex bytes and real-time message bytes may not
+   be preserved -- for example, if a real-time message arrives after
+   3 bytes of a sysex message, the real-time message will be delivered
+   first. The first word of the sysex message will be delivered only
+   after the 4th byte arrives, filling the 4-byte PmEvent message field.
+   
+   The timestamp field is observed when the output port is opened with
+   a non-zero latency. A timestamp of zero means "use the current time",
+   which in turn means to deliver the message with a delay of
+   latency (the latency parameter used when opening the output port.)
+   Do not expect PortMidi to sort data according to timestamps -- 
+   messages should be sent in the correct order, and timestamps MUST 
+   be non-decreasing. See also "Example" for Pm_OpenOutput() above.
+
+   A sysex message will generally fill many PmEvent structures. On 
+   output to a PortMidiStream with non-zero latency, the first timestamp
+   on sysex message data will determine the time to begin sending the 
+   message. PortMidi implementations may ignore timestamps for the 
+   remainder of the sysex message. 
+   
+   On input, the timestamp ideally denotes the arrival time of the 
+   status byte of the message. The first timestamp on sysex message 
+   data will be valid. Subsequent timestamps may denote 
+   when message bytes were actually received, or they may be simply 
+   copies of the first timestamp.
+
+   Timestamps for nested messages: If a real-time message arrives in 
+   the middle of some other message, it is enqueued immediately with 
+   the timestamp corresponding to its arrival time. The interrupted 
+   non-real-time message or 4-byte packet of sysex data will be enqueued 
+   later. The timestamp of interrupted data will be equal to that of
+   the interrupting real-time message to insure that timestamps are
+   non-decreasing.
+ */
+typedef struct {
+    PmMessage      message;
+    PmTimestamp    timestamp;
+} PmEvent;
+
+/** 
+    @}
+*/
+/** \defgroup grp_io Reading and Writing Midi Messages
+    @{
+*/
+/**
+    Pm_Read() retrieves midi data into a buffer, and returns the number
+    of events read. Result is a non-negative number unless an error occurs, 
+    in which case a PmError value will be returned.
+
+    Buffer Overflow
+
+    The problem: if an input overflow occurs, data will be lost, ultimately 
+    because there is no flow control all the way back to the data source. 
+    When data is lost, the receiver should be notified and some sort of 
+    graceful recovery should take place, e.g. you shouldn't resume receiving 
+    in the middle of a long sysex message.
+
+    With a lock-free fifo, which is pretty much what we're stuck with to 
+    enable portability to the Mac, it's tricky for the producer and consumer 
+    to synchronously reset the buffer and resume normal operation.
+
+    Solution: the buffer managed by PortMidi will be flushed when an overflow
+    occurs. The consumer (Pm_Read()) gets an error message (pmBufferOverflow)
+    and ordinary processing resumes as soon as a new message arrives. The
+    remainder of a partial sysex message is not considered to be a "new
+    message" and will be flushed as well.
+
+*/
+PMEXPORT int Pm_Read( PortMidiStream *stream, PmEvent *buffer, int32_t length );
+
+/**
+    Pm_Poll() tests whether input is available, 
+    returning TRUE, FALSE, or an error value.
+*/
+PMEXPORT PmError Pm_Poll( PortMidiStream *stream);
+
+/** 
+    Pm_Write() writes midi data from a buffer. This may contain:
+        - short messages 
+    or 
+        - sysex messages that are converted into a sequence of PmEvent
+          structures, e.g. sending data from a file or forwarding them
+          from midi input.
+
+    Use Pm_WriteSysEx() to write a sysex message stored as a contiguous 
+    array of bytes.
+
+    Sysex data may contain embedded real-time messages.
+*/
+PMEXPORT PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, int32_t length );
+
+/**
+    Pm_WriteShort() writes a timestamped non-system-exclusive midi message.
+    Messages are delivered in order as received, and timestamps must be 
+    non-decreasing. (But timestamps are ignored if the stream was opened
+    with latency = 0.)
+*/
+PMEXPORT PmError Pm_WriteShort( PortMidiStream *stream, PmTimestamp when, int32_t msg);
+
+/**
+    Pm_WriteSysEx() writes a timestamped system-exclusive midi message.
+*/
+PMEXPORT PmError Pm_WriteSysEx( PortMidiStream *stream, PmTimestamp when, unsigned char *msg);
+
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+#endif /* PORT_MIDI_H */
diff --git a/pd/portmidi/pm_csharp/README.txt b/pd/portmidi/pm_csharp/README.txt
new file mode 100644
index 000000000..06a1ad4e3
--- /dev/null
+++ b/pd/portmidi/pm_csharp/README.txt
@@ -0,0 +1,20 @@
+This code was offered by Aaron Oxford as is. The pm_managed directory contains the code. If you develop a more complete C# wrapper for PortMidi, please consider contributing your code to the project. -RBD
+
+---- from Aaron Oxford ----
+
+I've attached the managed C++ project which I've inserted into my 2005 version of PortMIDI's VS solution.  I wouldn't think the functions I've implemented would have changed so it all should still work with the latest version of PM. Obviously you won't want to permanently embed this since it means the whole solution can only be built under VS2005, but it's easy for a VS2005 user to insert the project after the solution is converted or even just build it separately.
+
+Making the managed wrapper turned out to be dead easy in the end (it was more of a battle finding the correct build settings & SDK's and learning to configure VS than anything else). Anyone wanting to use something I've not implemented yet simply needs to add more stubs like this
+
+                int Pm_Initialize()
+                {
+                        ::Pm_Initialize();
+                        return 0;
+                }
+
+to the code. To call from C# it's just a matter of
+
+                ManagedPortMIDI mpm = new ManagedPortMIDI();
+                int err = mpm.Pm_Initialize();
+
+Anyway as the little code example above indicates, the support really is basic and more likely than not to break at the first hint of something unexpected. As I said, I'd be happy to contribute but I don't think there's much to contribute yet. :-)
diff --git a/pd/portmidi/pm_csharp/pm_managed/AssemblyInfo.cpp b/pd/portmidi/pm_csharp/pm_managed/AssemblyInfo.cpp
new file mode 100755
index 000000000..57874f89b
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/AssemblyInfo.cpp
@@ -0,0 +1,40 @@
+#include "stdafx.h"
+
+using namespace System;
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+using namespace System::Runtime::InteropServices;
+using namespace System::Security::Permissions;
+
+//
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly:AssemblyTitleAttribute("pm_managed")];
+[assembly:AssemblyDescriptionAttribute("")];
+[assembly:AssemblyConfigurationAttribute("")];
+[assembly:AssemblyCompanyAttribute("Innovative Computer Solutions")];
+[assembly:AssemblyProductAttribute("pm_managed")];
+[assembly:AssemblyCopyrightAttribute("Copyright (c) Innovative Computer Solutions 2006")];
+[assembly:AssemblyTrademarkAttribute("")];
+[assembly:AssemblyCultureAttribute("")];
+
+//
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.0.*")];
+
+[assembly:ComVisible(false)];
+
+[assembly:CLSCompliantAttribute(true)];
+
+[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
diff --git a/pd/portmidi/pm_csharp/pm_managed/ReadMe.txt b/pd/portmidi/pm_csharp/pm_managed/ReadMe.txt
new file mode 100755
index 000000000..90317613a
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/ReadMe.txt
@@ -0,0 +1,31 @@
+========================================================================
+    DYNAMIC LINK LIBRARY : pm_managed Project Overview
+========================================================================
+
+AppWizard has created this pm_managed DLL for you.  
+
+This file contains a summary of what you will find in each of the files that
+make up your pm_managed application.
+
+pm_managed.vcproj
+    This is the main project file for VC++ projects generated using an Application Wizard. 
+    It contains information about the version of Visual C++ that generated the file, and 
+    information about the platforms, configurations, and project features selected with the
+    Application Wizard.
+
+pm_managed.cpp
+    This is the main DLL source file.
+
+pm_managed.h
+    This file contains a class declaration.
+
+AssemblyInfo.cpp
+	Contains custom attributes for modifying assembly metadata.
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/pd/portmidi/pm_csharp/pm_managed/Stdafx.cpp b/pd/portmidi/pm_csharp/pm_managed/Stdafx.cpp
new file mode 100755
index 000000000..6355f12e4
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/Stdafx.cpp
@@ -0,0 +1,5 @@
+// stdafx.cpp : source file that includes just the standard includes
+// pm_managed.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
diff --git a/pd/portmidi/pm_csharp/pm_managed/Stdafx.h b/pd/portmidi/pm_csharp/pm_managed/Stdafx.h
new file mode 100755
index 000000000..2e525d43f
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/Stdafx.h
@@ -0,0 +1,7 @@
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently,
+// but are changed infrequently
+
+#pragma once
+
+
diff --git a/pd/portmidi/pm_csharp/pm_managed/app.ico b/pd/portmidi/pm_csharp/pm_managed/app.ico
new file mode 100755
index 0000000000000000000000000000000000000000..3a5525fd794f7a7c5c8e6187f470ea3af38cd2b6
GIT binary patch
literal 1078
zcmeHHJr05}7=1t!Hp3A*8IHkVf+j?-!eHY14Gtcw1Eb*_9>Bq^zETJ@GKj{_2j4$w
zo9}xCh!8{T3=X##Skq>ikMjsvB|y%crWBM2iW(4pI}c%z6%lW!=~4v77#3{z!dmB1
z__&l)-{KUYR+|8|;wB^R|9ET$J@(@=#rd^=)qs85?vAy(PSF5CyNkus435LVkZ$rj
zNw|JG-P7^hF<(;#o*Vk}5R#e|^13tBbQkeF?djULtvqyxd3<cQetc!+$5J+aVZ&1f
Qa92%&%o_p!1^%7_Ps0Y#2><{9

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_csharp/pm_managed/app.rc b/pd/portmidi/pm_csharp/pm_managed/app.rc
new file mode 100755
index 000000000..bc5b261d9
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/app.rc
@@ -0,0 +1,63 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon placed first or with lowest ID value becomes application icon
+
+LANGUAGE 9, 3
+#pragma code_page(1252)
+1           ICON         "app.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE  
+BEGIN
+    "resource.h\0"
+    "\0"
+END
+
+2 TEXTINCLUDE  
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE  
+BEGIN
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/pd/portmidi/pm_csharp/pm_managed/pm_managed.cpp b/pd/portmidi/pm_csharp/pm_managed/pm_managed.cpp
new file mode 100755
index 000000000..d2a1440e3
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/pm_managed.cpp
@@ -0,0 +1,6 @@
+// This is the main DLL file.
+
+#include "stdafx.h"
+
+#include "pm_managed.h"
+
diff --git a/pd/portmidi/pm_csharp/pm_managed/pm_managed.h b/pd/portmidi/pm_csharp/pm_managed/pm_managed.h
new file mode 100755
index 000000000..580670385
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/pm_managed.h
@@ -0,0 +1,53 @@
+// pm_managed.h
+
+#pragma once
+
+#include "portmidi.h"
+
+using namespace System;
+
+namespace pm_managed {
+
+
+	public ref class MpmDeviceInfo
+	{
+	public:
+		int structVersion; 
+		System::String^ interf; /* underlying MIDI API, e.g. MMSystem or DirectX */
+		System::String^ name;   /* device name, e.g. USB MidiSport 1x1 */
+		bool input; /* true iff input is available */
+		bool output; /* true iff output is available */
+		int opened; /* used by generic PortMidi code to do error checking on arguments */
+
+		MpmDeviceInfo(const PmDeviceInfo* info)
+		{
+			structVersion = info->structVersion;
+			input = (info->input != 0);
+			output = (info->output != 0);
+			opened = info->opened;
+
+			interf = gcnew System::String(info->interf);
+			name = gcnew System::String(info->name);
+		}
+	};
+
+	public ref class ManagedPortMIDI
+	{
+	public:
+		int Pm_Initialize()
+		{
+			::Pm_Initialize();
+			return 0;
+		}
+
+		int Pm_CountDevices()
+		{
+			return ::Pm_CountDevices();
+		}
+
+		MpmDeviceInfo^ Pm_GetDeviceInfo(int id)
+		{
+			return gcnew MpmDeviceInfo(::Pm_GetDeviceInfo(id));
+		}
+	};
+}
diff --git a/pd/portmidi/pm_csharp/pm_managed/pm_managed.vcproj b/pd/portmidi/pm_csharp/pm_managed/pm_managed.vcproj
new file mode 100755
index 000000000..e60d58f4a
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/pm_managed.vcproj
@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pm_managed"
+	ProjectGUID="{65AABD9A-F5E3-4A30-8BC3-9C732B5447CF}"
+	RootNamespace="pm_managed"
+	Keyword="ManagedCProj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)pm_managed\$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="1"
+			ManagedExtensions="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="../pm_common"
+				PreprocessorDefinitions="WIN32;_DEBUG"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(NoInherit) winmm.lib ..\pm_win\Debug\portmidi.lib ..\porttime\Debug\porttime.lib ..\pm_win\Debug\pm_dll.lib"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				AssemblyDebug="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)pm_managed\$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="1"
+			ManagedExtensions="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				FavorSizeOrSpeed="1"
+				AdditionalIncludeDirectories="../pm_common"
+				PreprocessorDefinitions="WIN32;NDEBUG"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="2"
+				WarningLevel="3"
+				DebugInformationFormat="0"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="$(NoInherit) winmm.lib ..\pm_win\Release\portmidi.lib ..\porttime\Release\porttime.lib ..\pm_win\Release\pm_dll.lib"
+				LinkIncremental="1"
+				ManifestFile="$(OutDir)\pm_managed.dll.manifest"
+				GenerateDebugInformation="false"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+				OutputManifestFile="$(OutDir)\pm_managed.dll.manifest"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+				CommandLine="rem mt.exe –manifest Release\pm_managed.dll.manifest -outputresource:Release\pm_managed.dll;2"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+		<AssemblyReference
+			RelativePath="System.dll"
+			AssemblyName="System, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+		/>
+		<AssemblyReference
+			RelativePath="System.Data.dll"
+			AssemblyName="System.Data, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=x86"
+		/>
+		<AssemblyReference
+			RelativePath="System.XML.dll"
+			AssemblyName="System.Xml, Version=2.0.0.0, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"
+		/>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\AssemblyInfo.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\pm_managed.cpp"
+				>
+			</File>
+			<File
+				RelativePath=".\Stdafx.cpp"
+				>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						UsePrecompiledHeader="1"
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<File
+				RelativePath=".\pm_managed.h"
+				>
+			</File>
+			<File
+				RelativePath=".\resource.h"
+				>
+			</File>
+			<File
+				RelativePath=".\Stdafx.h"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath=".\app.ico"
+				>
+			</File>
+			<File
+				RelativePath=".\app.rc"
+				>
+			</File>
+		</Filter>
+		<File
+			RelativePath=".\ReadMe.txt"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_csharp/pm_managed/resource.h b/pd/portmidi/pm_csharp/pm_managed/resource.h
new file mode 100755
index 000000000..1f2251c2b
--- /dev/null
+++ b/pd/portmidi/pm_csharp/pm_managed/resource.h
@@ -0,0 +1,3 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by app.rc
diff --git a/pd/portmidi/pm_dylib/CMakeLists.txt b/pd/portmidi/pm_dylib/CMakeLists.txt
new file mode 100644
index 000000000..f693dd651
--- /dev/null
+++ b/pd/portmidi/pm_dylib/CMakeLists.txt
@@ -0,0 +1,127 @@
+# pm_dylib
+
+# set the build directory for libraries to be in portmidi, not in 
+#    portmidi/pm_dylib
+if(APPLE OR WIN32)
+  # set the build directory for .dylib libraries
+  set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+  set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+  # the "archive" output directory says where to put portmidi.lib, the
+  # static part of the lib/dll pair:
+  set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+
+  # the first time CMake configures, save off CMake's built-in flags
+  if(NOT DEFAULT_DEBUG_FLAGS)
+    set(DEFAULT_DEBUG_FLAGS ${CMAKE_C_FLAGS_DEBUG} CACHE 
+        STRING "CMake's default debug flags" FORCE)
+    set(DEFAULT_RELEASE_FLAGS ${CMAKE_C_FLAGS_RELEASE} CACHE 
+        STRING "CMake's default release flags" FORCE)
+  else(NOT DEFAULT_DEBUG_FLAGS)
+    message(STATUS "DEFAULT_DEBUG_FLAGS not nil: " ${DEFAULT_DEBUG_FLAGS})
+  endif(NOT DEFAULT_DEBUG_FLAGS)
+else(APPLE OR WIN32)
+  set(LINUX_FLAGS "-DPMALSA")
+endif(APPLE OR WIN32)
+
+macro(prepend_path RESULT PATH)
+  set(${RESULT})
+  foreach(FILE ${ARGN})
+    list(APPEND ${RESULT} "${PATH}${FILE}")
+  endforeach(FILE)
+endmacro(prepend_path)
+
+set(CMAKE_C_FLAGS_DEBUG 
+    "${DEFAULT_DEBUG_FLAGS} -DPM_CHECK_ERRORS=1 -DDEBUG ${LINUX_FLAGS}"
+    CACHE STRING "enable extra checks for debugging" FORCE)
+
+set(CMAKE_C_FLAGS_RELEASE "${DEFAULT_RELEASE_FLAGS} ${LINUX_FLAGS}"
+    CACHE STRING "flags for release version" FORCE)
+
+# first include the appropriate system-dependent file:
+if(UNIX)
+  # add the -g switch for Linux and Mac OS X (not used in Win32)
+  set (CMAKE_C_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}" 
+       CACHE STRING "enable extra checks for debugging" FORCE)
+  if(APPLE)
+    set(MACSRC pmmacosxcm pmmac readbinaryplist finddefault)
+    prepend_path(LIBSRC ../pm_mac/ ${MACSRC})
+    list(APPEND LIBSRC ../porttime/ptmacosx_mach)
+
+    include_directories(${CMAKE_OSX_SYSROOT}/Developer/Headers/FlatCarbon)
+    set(FRAMEWORK_PATH ${CMAKE_OSX_SYSROOT}/System/Library/Frameworks)
+    set(COREAUDIO_LIB "${FRAMEWORK_PATH}/CoreAudio.framework")
+    set(COREFOUNDATION_LIB "${FRAMEWORK_PATH}/CoreFoundation.framework")
+    set(COREMIDI_LIB "${FRAMEWORK_PATH}/CoreMIDI.framework")
+    set(CORESERVICES_LIB "${FRAMEWORK_PATH}/CoreServices.framework")
+    set(PM_NEEDED_LIBS ${COREAUDIO_LIB} ${COREFOUNDATION_LIB}
+                             ${COREMIDI_LIB} ${CORESERVICES_LIB}
+        CACHE INTERNAL "")
+
+    set(JAVAVM_LIB "${FRAMEWORK_PATH}/JavaVM.framework")
+    set(JAVA_INCLUDE_PATHS ${JAVAVM_LIB}/Headers)
+    set(INSTALL_NAME_DIR "/usr/local/lib")
+    message(STATUS "SYSROOT: " ${CMAKE_OSX_SYSROOT})
+  else(APPLE)
+    # LINUX settings...
+    include(FindJNI)
+    # message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
+    # message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
+    # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
+    # note: user might need to set JAVA_INCLUDE_PATH manually
+    #
+    # this will probably break on BSD and other Unix systems; the fix
+    # depends on whether FindJNI can find Java or not. If yes, then
+    # we should try to rely on automatically set JAVA_INCLUDE_PATH and
+    # JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH
+    # and JAVA_INCLUDE_PATH2 set by user (will need clear documentation
+    # because JAVA_INCLUDE_PATH2 is pretty obscure)
+    set(JAVA_INCLUDE_PATH  ${JAVA_INCLUDE_PATH-UNKNOWN}
+        CACHE STRING "where to find Java SDK include directory")
+    set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux)
+    # libjvm.so is found relative to JAVA_INCLUDE_PATH:
+    set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so)
+
+    set(LINUXSRC pmlinuxalsa pmlinux finddefault)
+    prepend_path(LIBSRC ../pm_linux/ ${LINUXSRC})
+    list(APPEND LIBSRC ../porttime/ptlinux)
+
+    set(PM_NEEDED_LIBS pthread asound)
+  endif(APPLE)
+else(UNIX)
+  if(WIN32)
+    # /MDd is multithread debug DLL, /MTd is multithread debug
+    # /MD is multithread DLL, /MT is multithread 
+    
+    include(FindJNI)
+    # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
+    set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../lib/jvm.lib)
+
+    set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+    # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
+
+    set(WINSRC pmwin pmwinmm)
+    prepend_path(LIBSRC ../pm_win/ ${WINSRC})
+    list(APPEND LIBSRC ../porttime/ptwinmm)
+    set(PM_NEEDED_LIBS winmm.lib)
+    # message(STATUS "JAVAVM_LIB: " ${JAVAVM_LIB})
+  endif(WIN32)
+endif(UNIX)
+set(JNI_EXTRA_LIBS ${PM_NEEDED_LIBS} ${JAVAVM_LIB})
+
+# this completes the list of library sources by adding shared code
+set(SHARED_FILES pmutil portmidi)
+prepend_path(SHARED_PATHS ../pm_common/ ${SHARED_FILES})
+list(APPEND LIBSRC ${SHARED_PATHS})
+
+add_library(portmidi-dynamic SHARED ${LIBSRC})
+set_target_properties(portmidi-dynamic PROPERTIES OUTPUT_NAME "portmidi")
+target_link_libraries(portmidi-dynamic ${PM_NEEDED_LIBS})
+
+# install the libraries (Linux and Mac OS X command line)
+if(UNIX)
+  INSTALL(TARGETS portmidi-dynamic
+    LIBRARY DESTINATION /usr/local/lib
+    ARCHIVE DESTINATION /usr/local/lib)
+  INSTALL(FILES ../pm_common/portmidi.h ../porttime/porttime.h
+    DESTINATION /usr/local/include)
+endif(UNIX)
diff --git a/pd/portmidi/pm_dylib/README.txt b/pd/portmidi/pm_dylib/README.txt
new file mode 100644
index 000000000..b7769700b
--- /dev/null
+++ b/pd/portmidi/pm_dylib/README.txt
@@ -0,0 +1,11 @@
+pm_dylib
+
+The purpose of this directory is to provide a separate CMakeLists.txt 
+file for building a dynamic link library version of portmidi. This
+version (in Windows) is linked using the Multithreaded C Runtime DLL
+whereas the static library version in ../pm_common uses the (static)
+Multithreaded C Runtime. There's no good reason not to build both
+versions of portmidi in ../pm_common, but (the current) Cmake
+has the restriction that you must either share compiler flags across
+configurations (debug and release) or across targets (static and 
+dynamic). Here, we need individual settings for all combinations.
diff --git a/pd/portmidi/pm_dylib/portmidi-dynamic.vcproj b/pd/portmidi/pm_dylib/portmidi-dynamic.vcproj
new file mode 100644
index 000000000..161b7d1f0
--- /dev/null
+++ b/pd/portmidi/pm_dylib/portmidi-dynamic.vcproj
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="portmidi-dynamic"
+	ProjectGUID="{7283FAD1-7415-4061-A19A-FF5C7BCE9306}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="portmidi-dynamic.dir\Debug"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="3"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,portmidi_dynamic_EXPORTS"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../Debug/portmidi.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,portmidi_dynamic_EXPORTS"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;,portmidi_dynamic_EXPORTS"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  winmm.lib "
+				OutputFile="..\Debug\portmidi.dll"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="..\Debug\portmidi.pdb"
+				GenerateDebugInformation="TRUE"
+				ImportLibrary="..\Debug\portmidi.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="portmidi-dynamic.dir\Release"
+			ConfigurationType="2"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="2"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,portmidi_dynamic_EXPORTS"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../Release/portmidi.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,portmidi_dynamic_EXPORTS"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;,portmidi_dynamic_EXPORTS"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  winmm.lib "
+				OutputFile="..\Release\portmidi.dll"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="..\Release\portmidi.pdb"
+				ImportLibrary="..\Release\portmidi.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_win\pmwin.c">
+			</File>
+			<File
+				RelativePath="..\pm_win\pmwinmm.c">
+			</File>
+			<File
+				RelativePath="..\porttime\ptwinmm.c">
+			</File>
+			<File
+				RelativePath="..\pm_common\pmutil.c">
+			</File>
+			<File
+				RelativePath="..\pm_common\portmidi.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_java/CMakeLists.txt b/pd/portmidi/pm_java/CMakeLists.txt
new file mode 100644
index 000000000..a35062027
--- /dev/null
+++ b/pd/portmidi/pm_java/CMakeLists.txt
@@ -0,0 +1,47 @@
+# pm_java
+
+if(UNIX)
+  if(APPLE)
+    # java not dealt with in CMake -- see pm_mac/pm_mac.xcodeproj
+  else(APPLE)
+    # linux
+    set(JPORTMIDICLASS JPortMidi.class JPortMidiException.class
+    		       JPortMidiApi.class)
+    set(PMDEFAULTSCLASS PmDefaultsFrame.class PmDefaults.class)
+    prepend_path(JPORTMIDICLASS2 jportmidi/ ${JPORTMIDICLASS})
+    prepend_path(PMDEFAULTSCLASS2 pmdefaults/ ${PMDEFAULTSCLASS})
+    set(PMDEFAULTS_ALL_CLASSES ${JPORTMIDICLASS2} ${PMDEFAULTSCLASS2})
+    # message(STATUS "PMDEFAULTS_ALL_CLASSES is " ${PMDEFAULTS_ALL_CLASSES})
+    add_custom_command(OUTPUT pmdefaults/PmDefaultsFrame.class
+        COMMAND javac -classpath . pmdefaults/PmDefaultsFrame.java
+	MAIN_DEPENDENCY pmdefaults/PmDefaultsFrame.java
+	DEPENDS pmdefaults/PmDefaults.java
+	WORKING_DIRECTORY pm_java)
+    add_custom_command(OUTPUT pmdefaults/PmDefaults.class
+        COMMAND javac -classpath . pmdefaults/PmDefaults.java
+	MAIN_DEPENDENCY pmdefaults/PmDefaults.java
+	DEPENDS pmdefaults/PmDefaultsFrame.java
+	WORKING_DIRECTORY pm_java)
+    add_custom_command(OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar
+        COMMAND	cp pmdefaults/portmusic_logo.png .
+        COMMAND	jar cmf pmdefaults/manifest.txt pmdefaults.jar
+		pmdefaults/*.class portmusic_logo.png jportmidi/*.class
+  	COMMAND chmod +x pmdefaults/pmdefaults
+	COMMAND cp pmdefaults/pmdefaults ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
+	COMMAND mv pmdefaults.jar ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
+	COMMAND rm portmusic_logo.png
+	MAIN_DEPENDENCY pmdefaults/PmDefaults.class
+	DEPENDS ${PMDEFAULTS_ALL_CLASSES}
+	WORKING_DIRECTORY pm_java)
+    add_custom_target(pmdefaults_target ALL 
+        DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar)
+    # message(STATUS "add_custom_target: pmdefaults.jar")
+
+    # install the libraries (Linux only)
+    INSTALL(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar
+      DESTINATION /usr/share/java)
+    INSTALL(PROGRAMS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults
+      DESTINATION /usr/local/bin)
+  endif(APPLE)
+endif(UNIX)
+# In windows, use pm_java/make.bat
diff --git a/pd/portmidi/pm_java/JavaExe.exe b/pd/portmidi/pm_java/JavaExe.exe
new file mode 100644
index 0000000000000000000000000000000000000000..8886d2e8672f2b443657675e51c9be7a7248045d
GIT binary patch
literal 131072
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
P_%-0yfL{Z5Qv?4Gaxh!n

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/README.txt b/pd/portmidi/pm_java/README.txt
new file mode 100644
index 000000000..3f616b776
--- /dev/null
+++ b/pd/portmidi/pm_java/README.txt
@@ -0,0 +1,48 @@
+README.txt
+Roger B. Dannenberg
+16 Jun 2009
+
+This directory was created to implement PmDefaults, a program to
+set default input and output devices for PortMidi applications.
+
+There are three main sub-projects here:
+  1) pmjni -- a JNI (Java Native Interface) to access PortMidi
+  2) jportmidi -- a Java class to access PortMidi (uses pmjni)
+  3) pmdefaults -- the PmDefaults application (uses jportmidi)
+
+For Mac OS X, you should build the PmDefaults application in Xcode.
+
+For Win32, an installer for PmDefaults is included in setup/.
+To build from sources, you should first build everything including 
+the portmidi dll (that will be used by the Java application) using 
+Visual C++ and a provided .sln file in the portmidi home directory. 
+Then, run make.bat in this directory. The subdirectory win32 will be 
+created with the application pmdefaults.exe. You can run this application 
+in the normal way. To move the application, you need to copy *everything* 
+in win32. To build setup/pmdefaults-setup.exe, I have used both
+Setup Generator from Gentee software and Inno Setup from jrsoftware.org.
+A script for Inno Setup is included in this directory, but since paths
+seem to be absolute, you will have to adjust the paths in the script
+before you use it. 
+
+---- implementation notes ----
+
+For windows, we use the free software JavaExe.exe. The copy here was
+downloaded from 
+
+http://software.techrepublic.com.com/abstract.aspx?kw=javaexe&docid=767485
+
+I found this page by visiting http://software.techrepublic.com.com and
+searching in the "Software" category for "JavaExe"
+
+JavaExe works by placing the JavaExe.exe file in the directory with the
+Java application jar file and then *renaming* JavaExe.exe to the name
+of the jar file, but keeping the .exe extension. (See make.bat for this 
+step.) Documentation for JavaExe can be obtained by downloading the
+whole program from the URL(s) above.
+
+
+
+
+
+
diff --git a/pd/portmidi/pm_java/UpdateRsrcJavaExe.exe b/pd/portmidi/pm_java/UpdateRsrcJavaExe.exe
new file mode 100644
index 0000000000000000000000000000000000000000..492ec1679ea1f51e36b41fef7a89f666cdc06c9a
GIT binary patch
literal 102400
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
R1)5TzDFvER;Q!AQ_&-}w(1rj2

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/jportmidi/JPortMidi.java b/pd/portmidi/pm_java/jportmidi/JPortMidi.java
new file mode 100644
index 000000000..dd3cc2a1c
--- /dev/null
+++ b/pd/portmidi/pm_java/jportmidi/JPortMidi.java
@@ -0,0 +1,539 @@
+package jportmidi;
+
+/* PortMidi is a general class intended for any Java program using
+   the PortMidi library. It encapsulates JPortMidiApi with a more
+   object-oriented interface. A single PortMidi object can manage
+   up to one input stream and one output stream.
+
+   This class is not safely callable from multiple threads. It
+   is the client's responsibility to periodically call the Poll
+   method which checks for midi input and handles it.
+*/
+
+import jportmidi.*;
+import jportmidi.JPortMidiApi.*;
+
+public class JPortMidi {
+
+    // timecode to send message immediately
+    public final int NOW = 0;
+
+    // midi codes
+    public final int MIDI_NOTE_OFF = 0x80;
+    public final int MIDI_NOTE_ON = 0x90;
+    public final int CTRL_ALL_OFF = 123;
+    public final int MIDI_PITCH_BEND = 0xE0;
+    public final int MIDI_CLOCK = 0xF8;
+    public final int MIDI_CONTROL = 0xB0;
+    public final int MIDI_PROGRAM = 0xC0;
+    public final int MIDI_START = 0xFA;
+    public final int MIDI_STOP = 0xFC;
+    public final int MIDI_POLY_TOUCH = 0xA0;
+    public final int MIDI_TOUCH = 0xD0;
+
+    // error code -- cannot refresh device list while stream is open:
+    public final int pmStreamOpen = -5000;
+    public final int pmOutputNotOpen = -4999;
+
+    // access to JPortMidiApi is through a single, global instance
+    private static JPortMidiApi pm;
+    // a reference count tracks how many objects have it open
+    private static int pmRefCount = 0;
+    private static int openCount = 0;
+
+    public int error; // user can check here for error codes
+    private PortMidiStream input;
+    private PortMidiStream output;
+    private PmEvent buffer;
+    protected int timestamp; // remember timestamp from incoming messages
+    protected boolean trace = false; // used to print midi msgs for debugging
+    
+
+    public JPortMidi() throws JPortMidiException {
+        if (pmRefCount == 0) {
+            pm = new JPortMidiApi();
+            pmRefCount++;
+            System.out.println("Calling Pm_Initialize");
+            checkError(pm.Pm_Initialize());
+            System.out.println("Called Pm_Initialize");
+        }
+        buffer = new PmEvent();
+    }
+    
+    public boolean getTrace() { return trace; }
+
+    // set the trace flag and return previous value
+    public boolean setTrace(boolean flag) {
+        boolean previous = trace;
+        trace = flag;
+        return previous;
+    }
+
+    // WARNING: you must not call this if any devices are open
+    public void refreshDeviceLists()
+            throws JPortMidiException 
+    {
+        if (openCount > 0) {
+            throw new JPortMidiException(pmStreamOpen,
+                    "RefreshDeviceLists called while stream is open");
+        }
+        checkError(pm.Pm_Terminate());
+        checkError(pm.Pm_Initialize());
+    }
+
+    // there is no control over when/whether this is called, but it seems
+    // to be a good idea to close things when this object is collected
+    public void finalize() {
+        if (input != null) {
+            error = pm.Pm_Close(input);
+        }
+        if (input != null) {
+            int rslt = pm.Pm_Close(output);
+            // we may lose an error code from closing output, but don't
+            // lose any real error from closing input...
+            if (error == pm.pmNoError) error = rslt;
+        }
+        pmRefCount--;
+        if (pmRefCount == 0) {
+            error = pm.Pm_Terminate();
+        }
+    }
+
+    int checkError(int err) throws JPortMidiException
+    {
+        // note that Pm_Read and Pm_Write return positive result values 
+        // which are not errors, so compare with >=
+        if (err >= pm.pmNoError) return err;
+        if (err == pm.pmHostError) {
+            throw new JPortMidiException(err, pm.Pm_GetHostErrorText());
+        } else {
+            throw new JPortMidiException(err, pm.Pm_GetErrorText(err));
+        }
+    }
+
+    // ******** ACCESS TO TIME ***********
+    
+    public void timeStart(int resolution) throws JPortMidiException {
+        checkError(pm.Pt_TimeStart(resolution));
+    }
+        
+    public void timeStop() throws JPortMidiException {
+        checkError(pm.Pt_TimeStop());
+    }
+        
+    public int timeGet() {
+        return pm.Pt_Time();
+    }
+        
+    public boolean timeStarted() {
+        return pm.Pt_TimeStarted();
+    }
+
+    // ******* QUERY DEVICE INFORMATION *********
+        
+    public int countDevices() throws JPortMidiException {
+        return checkError(pm.Pm_CountDevices());
+    }
+
+    public int getDefaultInputDeviceID()  throws JPortMidiException {
+        return checkError(pm.Pm_GetDefaultInputDeviceID());
+    }
+
+    public int getDefaultOutputDeviceID() throws JPortMidiException {
+        return checkError(pm.Pm_GetDefaultOutputDeviceID());
+    }
+
+    public String getDeviceInterf(int i) {
+        return pm.Pm_GetDeviceInterf(i);
+    }
+
+    public String getDeviceName(int i) {
+        return pm.Pm_GetDeviceName(i);
+    }
+
+    public boolean getDeviceInput(int i) {
+        return pm.Pm_GetDeviceInput(i);
+    }
+
+    public boolean getDeviceOutput(int i) {
+        return pm.Pm_GetDeviceOutput(i);
+    }
+
+    // ********** MIDI INTERFACE ************
+
+    public boolean isOpenInput() {
+        return input != null;
+    }
+
+    public void openInput(int inputDevice, int bufferSize) 
+            throws JPortMidiException 
+    {
+        openInput(inputDevice, "", bufferSize);
+    }
+
+    public void openInput(int inputDevice, String inputDriverInfo, int bufferSize) 
+            throws JPortMidiException
+    {
+        if (isOpenInput()) pm.Pm_Close(input);
+        else input = new PortMidiStream();
+        if (trace) {
+            System.out.println("openInput " + getDeviceName(inputDevice));
+        }
+        checkError(pm.Pm_OpenInput(input, inputDevice, 
+                                   inputDriverInfo, bufferSize));
+        // if no exception, then increase count of open streams
+        openCount++;
+    }
+
+    public boolean isOpenOutput() {
+        return output != null;
+    }
+
+    public void openOutput(int outputDevice, int bufferSize, int latency)
+            throws JPortMidiException 
+    {
+        openOutput(outputDevice, "", bufferSize, latency);
+    }
+
+    public void openOutput(int outputDevice, String outputDriverInfo,
+            int bufferSize, int latency) throws JPortMidiException {
+        if (isOpenOutput()) pm.Pm_Close(output);
+        else output = new PortMidiStream();
+        if (trace) {
+            System.out.println("openOutput " + getDeviceName(outputDevice));
+        }
+        checkError(pm.Pm_OpenOutput(output, outputDevice, outputDriverInfo, 
+                                    bufferSize, latency));
+        // if no exception, then increase count of open streams
+        openCount++;
+    }
+
+    public void setFilter(int filters) throws JPortMidiException {
+        if (input == null) return; // no effect if input not open
+        checkError(pm.Pm_SetFilter(input, filters));
+    }
+
+    public void setChannelMask(int mask) throws JPortMidiException {
+        if (input == null) return; // no effect if input not open
+        checkError(pm.Pm_SetChannelMask(input, mask));
+    }
+
+    public void abort() throws JPortMidiException {
+        if (output == null) return; // no effect if output not open
+        checkError(pm.Pm_Abort(output));
+    }
+
+    // In keeping with the idea that this class represents an input and output,
+    // there are separate Close methods for input and output streams, avoiding
+    // the need for clients to ever deal directly with a stream object
+    public void closeInput() throws JPortMidiException {
+        if (input == null) return; // no effect if input not open
+        checkError(pm.Pm_Close(input));
+        input = null;
+        openCount--;
+    }
+
+    public void closeOutput() throws JPortMidiException {
+        if (output == null) return; // no effect if output not open
+        checkError(pm.Pm_Close(output));
+        output = null;
+        openCount--;
+    }
+
+    // Poll should be called by client to process input messages (if any)
+    public void poll() throws JPortMidiException {
+        if (input == null) return; // does nothing until input is opened
+        while (true) {
+            int rslt = pm.Pm_Read(input, buffer);
+            checkError(rslt);
+            if (rslt == 0) return; // no more messages
+            handleMidiIn(buffer);
+        }
+    }    
+
+    public void writeShort(int when, int msg) throws JPortMidiException {
+        if (output == null) 
+            throw new JPortMidiException(pmOutputNotOpen, 
+                                         "Output stream not open");
+        if (trace) {
+            System.out.println("writeShort: " + Integer.toHexString(msg));
+        }
+        checkError(pm.Pm_WriteShort(output, when, msg));
+    }
+
+    public void writeSysEx(int when, byte msg[]) throws JPortMidiException {
+        if (output == null) 
+            throw new JPortMidiException(pmOutputNotOpen, 
+                                         "Output stream not open");
+        if (trace) {
+            System.out.print("writeSysEx: ");
+            for (int i = 0; i < msg.length; i++) {
+                System.out.print(Integer.toHexString(msg[i]));
+            }
+            System.out.print("\n");
+        }
+        checkError(pm.Pm_WriteSysEx(output, when, msg));
+    }
+    
+    public int midiChanMessage(int chan, int status, int data1, int data2) {
+        return (((data2 << 16) & 0xFF0000) |
+                ((data1 << 8) & 0xFF00) |
+                (status & 0xF0) |
+                (chan & 0xF));
+    }
+
+    public int midiMessage(int status, int data1, int data2) {
+        return ((((data2) << 16) & 0xFF0000) |
+                (((data1) << 8) & 0xFF00) |
+                ((status) & 0xFF));
+    }
+
+    public void midiAllOff(int channel) throws JPortMidiException {
+        midiAllOff(channel, NOW); 
+    }
+
+    public void midiAllOff(int chan, int when) throws JPortMidiException {
+        writeShort(when, midiChanMessage(chan, MIDI_CONTROL, CTRL_ALL_OFF, 0));
+    }
+        
+    public void midiPitchBend(int chan, int value) throws JPortMidiException {
+        midiPitchBend(chan, value, NOW);
+    }
+
+    public void midiPitchBend(int chan, int value, int when)
+            throws JPortMidiException {
+        writeShort(when, 
+                   midiChanMessage(chan, MIDI_PITCH_BEND, value, value >> 7));
+    }
+
+    public void midiClock() throws JPortMidiException {
+        midiClock(NOW);
+    }
+
+    public void midiClock(int when) throws JPortMidiException {
+        writeShort(when, midiMessage(MIDI_CLOCK, 0, 0));
+    }
+
+    public void midiControl(int chan, int control, int value)
+            throws JPortMidiException {
+        midiControl(chan, control, value, NOW);
+    }
+
+    public void midiControl(int chan, int control, int value, int when)
+            throws JPortMidiException {
+        writeShort(when, midiChanMessage(chan, MIDI_CONTROL, control, value));
+    }
+
+    public void midiNote(int chan, int pitch, int vel)
+            throws JPortMidiException {
+        midiNote(chan, pitch, vel, NOW);
+    }
+
+    public void midiNote(int chan, int pitch, int vel, int when)
+            throws JPortMidiException {
+        writeShort(when, midiChanMessage(chan, MIDI_NOTE_ON, pitch, vel));
+    }
+
+    public void midiProgram(int chan, int program)
+            throws JPortMidiException {
+        midiProgram(chan, program, NOW);
+    }
+
+    public void midiProgram(int chan, int program, int when)
+            throws JPortMidiException {
+        writeShort(when, midiChanMessage(chan, MIDI_PROGRAM, program, 0));
+    }
+
+    public void midiStart()
+            throws JPortMidiException {
+        midiStart(NOW);
+    }
+
+    public void midiStart(int when)
+            throws JPortMidiException {
+        writeShort(when, midiMessage(MIDI_START, 0, 0));
+    }
+
+    public void midiStop()
+            throws JPortMidiException {
+        midiStop(NOW);
+    }
+
+    public void midiStop(int when)
+            throws JPortMidiException {
+        writeShort(when, midiMessage(MIDI_STOP, 0, 0));
+    }
+
+    public void midiPolyTouch(int chan, int key, int value)
+            throws JPortMidiException {
+        midiPolyTouch(chan, key, value, NOW);
+    }
+
+    public void midiPolyTouch(int chan, int key, int value, int when)
+            throws JPortMidiException {
+        writeShort(when, midiChanMessage(chan, MIDI_POLY_TOUCH, key, value));
+    }
+
+    public void midiTouch(int chan, int value)
+            throws JPortMidiException {
+        midiTouch(chan, value, NOW);
+    }
+
+    public void midiTouch(int chan, int value, int when)
+            throws JPortMidiException {
+        writeShort(when, midiChanMessage(chan, MIDI_TOUCH, value, 0));
+    }
+
+    // ****** now we implement the message handlers ******
+
+    // an array for incoming sysex messages that can grow. 
+    // The downside is that after getting a message, we 
+
+    private byte sysexBuffer[] = null;
+    private int sysexBufferIndex = 0;
+
+    void sysexBufferReset() {
+        sysexBufferIndex = 0;
+        if (sysexBuffer == null) sysexBuffer = new byte[256];
+    }
+
+    void sysexBufferCheck() {
+        if (sysexBuffer.length < sysexBufferIndex + 4) {
+            byte bigger[] = new byte[sysexBuffer.length * 2];
+            for (int i = 0; i < sysexBufferIndex; i++) {
+                bigger[i] = sysexBuffer[i];
+            }
+            sysexBuffer = bigger;
+        }
+        // now we have space to write some bytes
+    }
+
+    // call this to insert Sysex and EOX status bytes
+    // call sysexBufferAppendBytes to insert anything else
+    void sysexBufferAppendStatus(byte status) {
+        sysexBuffer[sysexBufferIndex++] = status;
+    }
+
+    void sysexBufferAppendBytes(int msg, int len) {
+        for (int i = 0; i < len; i++) {
+            byte b = (byte) msg;
+            if ((msg & 0x80) != 0) {
+                if (b == 0xF7) { // end of sysex
+                    sysexBufferAppendStatus(b);
+                    sysex(sysexBuffer, sysexBufferIndex);
+                    return;
+                }
+                // recursively handle embedded real-time messages
+                PmEvent buffer = new PmEvent();
+                buffer.timestamp = timestamp;
+                buffer.message = b;
+                handleMidiIn(buffer);
+            } else {
+                sysexBuffer[sysexBufferIndex++] = b;
+            }
+            msg = msg >> 8;
+        }
+    }
+
+    void sysexBegin(int msg) {
+        sysexBufferReset(); // start from 0, we have at least 256 bytes now
+        sysexBufferAppendStatus((byte) (msg & 0xFF)); // first byte is special
+        sysexBufferAppendBytes(msg >> 8, 3); // process remaining bytes
+    }
+
+    public void handleMidiIn(PmEvent buffer)
+    {
+        if (trace) {
+            System.out.println("handleMidiIn: " + 
+                               Integer.toHexString(buffer.message));
+        }
+        // rather than pass timestamps to every handler, where typically 
+        // timestamps are ignored, just save the timestamp as a member
+        // variable where methods can access it if they want it
+        timestamp = buffer.timestamp;
+        int status = buffer.message & 0xFF;
+        if (status < 0x80) {
+            sysexBufferCheck(); // make enough space
+            sysexBufferAppendBytes(buffer.message, 4); // process 4 bytes
+            return;
+        }
+        int command = status & 0xF0;
+        int channel = status & 0x0F;
+        int data1 = (buffer.message >> 8) & 0xFF;
+        int data2 = (buffer.message >> 16) & 0xFF;
+        switch (command) {
+        case MIDI_NOTE_OFF:
+            noteOff(channel, data1, data2); break;
+        case MIDI_NOTE_ON:
+            if (data2 > 0) {
+                noteOn(channel, data1, data2); break;
+            } else {
+                noteOff(channel, data1);
+            }
+            break;
+        case MIDI_CONTROL:
+            control(channel, data1, data2); break;
+        case MIDI_POLY_TOUCH:
+            polyTouch(channel, data1, data2); break;
+        case MIDI_TOUCH:
+            touch(channel, data1); break;
+        case MIDI_PITCH_BEND:
+            pitchBend(channel, (data1 + (data2 << 7)) - 8192); break;
+        case MIDI_PROGRAM:
+            program(channel, data1); break;
+        case 0xF0:
+            switch (channel) {
+            case 0: sysexBegin(buffer.message); break;
+            case 1: mtcQuarterFrame(data1);
+            case 2: songPosition(data1 + (data2 << 7)); break;
+            case 3: songSelect(data1); break;
+            case 4: /* unused */ break;
+            case 5: /* unused */ break;
+            case 6: tuneRequest(); break;
+            case 7: sysexBufferAppendBytes(buffer.message, buffer.message); break;
+            case 8: clock(); break;
+            case 9: tick(); break;
+            case 0xA: clockStart(); break;
+            case 0xB: clockContinue(); break;
+            case 0xC: clockStop(); break;
+            case 0xD: /* unused */ break;
+            case 0xE: activeSense(); break;
+            case 0xF: reset(); break;
+            }
+        }
+    }
+          
+    // the value ranges from +8181 to -8192. The interpretation is 
+    // synthesizer dependent. Often the range is +/- one whole step
+    // (two semitones), but the range is usually adjustable within
+    // the synthesizer.
+    void pitchBend(int channel, int value) { return; }
+    void control(int channel, int control, int value) { return; }
+    void noteOn(int channel, int pitch, int velocity) { return; }
+    // you can handle velocity in note-off if you want, but the default
+    // is to drop the velocity and call the simpler NoteOff handler
+    void noteOff(int channel, int pitch, int velocity) { 
+        noteOff(channel, pitch);
+    }
+    // if the subclass wants to implement NoteOff with velocity, it
+    // should override the following to make sure all NoteOffs are handled
+    void noteOff(int channel, int pitch) { return; }
+    void program(int channel, int program) { return; }
+    // the byte array may be bigger than the message, length tells how
+    // many bytes in the array are part of the message
+    void sysex(byte[] msg, int length) { return; }
+    void polyTouch(int channel, int key, int value) { return; }
+    void touch(int channel, int value) { return; }
+    void mtcQuarterFrame(int value) { return; }
+    // the value is a 14-bit integer representing 16th notes
+    void songPosition(int value) { return; }
+    void songSelect(int value) { return; }
+    void tuneRequest() { return; }
+    void clock() { return; } // represents 1/24th of a quarter note
+    void tick() { return; } // represents 10ms
+    void clockStart() { return; }
+    void clockStop() { return; }
+    void clockContinue() { return; }
+    void activeSense() { return; }
+    void reset() { return; }
+}
diff --git a/pd/portmidi/pm_java/jportmidi/JPortMidiApi.java b/pd/portmidi/pm_java/jportmidi/JPortMidiApi.java
new file mode 100644
index 000000000..45dd9d98b
--- /dev/null
+++ b/pd/portmidi/pm_java/jportmidi/JPortMidiApi.java
@@ -0,0 +1,117 @@
+package jportmidi;
+
+public class JPortMidiApi {
+    public static class PortMidiStream {
+        private long address;
+    }
+    public static class PmEvent {
+        public int message;
+        public int timestamp;
+    }
+
+    // PmError bindings
+    public final int pmNoError = 0;
+    public final int pmNoData = 0;
+    public final int pmGotData = -1;
+    public final int pmHostError = -10000;
+    public final int pmInvalidDeviceId = -9999;
+    public final int pmInsufficientMemory = -9998;
+    public final int pmBufferTooSmall = -9997;
+    public final int pmBufferOverflow = -9996;
+    public final int pmBadPtr = -9995;
+    public final int pmBadData = -9994;
+    public final int pmInternalError = -9993;
+    public final int pmBufferMaxSize = -9992;
+    
+    static public native int Pm_Initialize();
+    static public native int Pm_Terminate();
+    static public native int Pm_HasHostError(PortMidiStream stream);
+    static public native String Pm_GetErrorText(int errnum);
+    static public native String Pm_GetHostErrorText();
+    final int pmNoDevice = -1;
+    static public native int Pm_CountDevices();
+    static public native int Pm_GetDefaultInputDeviceID();
+    static public native int Pm_GetDefaultOutputDeviceID();
+    static public native String Pm_GetDeviceInterf(int i);
+    static public native String Pm_GetDeviceName(int i);
+    static public native boolean Pm_GetDeviceInput(int i);
+    static public native boolean Pm_GetDeviceOutput(int i);
+    static public native int Pm_OpenInput(PortMidiStream stream,
+                                          int inputDevice, 
+                                          String inputDriverInfo, 
+                                          int bufferSize);
+    static public native int Pm_OpenOutput(PortMidiStream stream,
+                                           int outputDevice, 
+                                           String outnputDriverInfo, 
+                                           int bufferSize,
+                                           int latency);
+    final static public int PM_FILT_ACTIVE = (1 << 0x0E);
+    final static public int PM_FILT_SYSEX = (1 << 0x00);
+    final static public int PM_FILT_CLOCK = (1 << 0x08);
+    final static public int PM_FILT_PLAY = 
+            (1 << 0x0A) | (1 << 0x0C) | (1 << 0x0B);
+    final static public int PM_FILT_TICK = (1 << 0x09);
+    final static public int PM_FILT_FD = (1 << 0x0D);
+    final static public int PM_FILT_UNDEFINED = PM_FILT_FD;
+    final static public int PM_FILT_RESET = (1 << 0x0F);
+    final static public int PM_FILT_REALTIME =
+            PM_FILT_ACTIVE | PM_FILT_SYSEX | PM_FILT_CLOCK;
+    final static public int PM_FILT_NOTE = (1 << 0x19) | (1 << 0x18);
+    final static public int PM_FILT_CHANNEL_AFTERTOUCH = (1 << 0x1D);
+    final static public int PM_FILT_POLY_AFTERTOUCH = (1 << 0x1A);
+    final static public int PM_FILT_AFTERTOUCH = 
+            (PM_FILT_CHANNEL_AFTERTOUCH | PM_FILT_POLY_AFTERTOUCH);
+    final static public int PM_FILT_PROGRAM = (1 << 0x1C);
+    final static public int PM_FILT_CONTROL = (1 << 0x1B);
+    final static public int PM_FILT_PITCHBEND = (1 << 0x1E);
+    final static public int PM_FILT_MTC = (1 << 0x01);
+    final static public int PM_FILT_SONG_POSITION = (1 << 0x02);
+    final static public int PM_FILT_SONG_SELECT = (1 << 0x03);
+    final static public int PM_FILT_TUNE = (1 << 0x06);
+    final static public int PM_FILT_SYSTEMCOMMON =
+        (PM_FILT_MTC | PM_FILT_SONG_POSITION | 
+         PM_FILT_SONG_SELECT | PM_FILT_TUNE);
+    static public native int Pm_SetFilter(PortMidiStream stream, int filters);
+    static public int Pm_Channel(int channel) { return 1 << channel; }
+    final static public native int Pm_SetChannelMask(PortMidiStream stream, 
+                                                     int mask);
+    final static public native int Pm_Abort(PortMidiStream stream);
+    final static public native int Pm_Close(PortMidiStream stream);
+    static public int Pm_Message(int status, int data1, int data2) {
+        return (((data2 << 16) & 0xFF0000) |
+                ((data1 << 8) & 0xFF00) |
+                (status & 0xFF));
+    }
+    static public int Pm_MessageStatus(int msg) {
+        return msg & 0xFF;
+    }
+    static public int Pm_MessageData1(int msg) {
+        return (msg >> 8) & 0xFF;
+    }
+    static public int Pm_MessageData2(int msg) {
+        return (msg >> 16) & 0xFF;
+    }
+    // only supports reading one buffer at a time
+    static public native int Pm_Read(PortMidiStream stream, PmEvent buffer);
+    static public native int Pm_Poll(PortMidiStream stream);
+    // only supports writing one buffer at a time
+    static public native int Pm_Write(PortMidiStream stream, PmEvent buffer);
+    static public native int Pm_WriteShort(PortMidiStream stream, 
+                                           int when, int msg);
+    static public native int Pm_WriteSysEx(PortMidiStream stream, 
+                                           int when, byte msg[]);
+    
+    public final int ptNoError = 0;
+    public final int ptAlreadyStarted = -10000;
+    public final int ptAlreadyStopped = -9999;
+    public final int PtInsufficientMemory = -9998;
+    static public native int Pt_TimeStart(int resolution);
+    static public native int Pt_TimeStop();
+    static public native int Pt_Time();
+    static public native boolean Pt_TimeStarted();
+    static {
+        System.out.println("Loading pmjni");
+        System.loadLibrary("pmjni");
+        System.out.println("done loading pmjni");
+    }
+}
diff --git a/pd/portmidi/pm_java/jportmidi/JPortMidiException.java b/pd/portmidi/pm_java/jportmidi/JPortMidiException.java
new file mode 100644
index 000000000..9be8aaf6a
--- /dev/null
+++ b/pd/portmidi/pm_java/jportmidi/JPortMidiException.java
@@ -0,0 +1,12 @@
+// JPortMidiException -- thrown by JPortMidi methods
+
+package jportmidi;
+
+public class JPortMidiException extends Exception {
+    public int error = 0;
+    public JPortMidiException(int err, String msg) {
+        super(msg);
+        error = err;
+    }
+}
+
diff --git a/pd/portmidi/pm_java/mac-make.sh b/pd/portmidi/pm_java/mac-make.sh
new file mode 100644
index 000000000..e5e9592b0
--- /dev/null
+++ b/pd/portmidi/pm_java/mac-make.sh
@@ -0,0 +1,26 @@
+# script to build a jar file to run PmDefaults from the command line on OS X
+# (This is for debugging. Normally, you would use XCode to build PmDefaults.app.)
+
+# Compile the java Portidi interface classes.
+javac jportmidi/*.java
+
+# Compile the pmdefaults application.
+javac -classpath . pmdefaults/*.java
+
+# Temporarily copy the portmusic_logo.png file here to add to the jar file.
+cp pmdefaults/portmusic_logo.png . 
+
+# Create a directory to hold the distribution.
+mkdir mac-osx
+
+# Copy the interface DLL to the distribution directory.
+cp ../Release/libpmjni.dylib mac-osx
+
+# Create a java archive (jar) file of the distribution.
+jar cmf pmdefaults/manifest.txt mac-osx/pmdefaults.jar pmdefaults/*.class portmusic_logo.png jportmidi/*.class
+
+# Clean up the temporary image file now that it is in the jar file.
+rm portmusic_logo.png
+
+echo "You now have a jar file in mac-osx"
+
diff --git a/pd/portmidi/pm_java/make.bat b/pd/portmidi/pm_java/make.bat
new file mode 100644
index 000000000..b614e3f21
--- /dev/null
+++ b/pd/portmidi/pm_java/make.bat
@@ -0,0 +1,47 @@
+@echo off
+
+rem Compile the java PortMidi interface classes.
+javac jportmidi/*.java
+
+rem Compile the pmdefaults application.
+javac -classpath . pmdefaults/*.java
+
+rem Temporarily copy the portmusic_logo.png file here to add to the jar file.
+copy pmdefaults\portmusic_logo.png . > nul
+
+rem Create a directory to hold the distribution.
+mkdir win32
+
+rem Attempt to copy the interface DLL to the distribution directory.
+
+if exist "..\release\pmjni.dll"  goto have-dll
+
+echo "ERROR: pmjni.dll not found!"
+exit /b 1
+
+:have-dll
+copy "..\release\pmjni.dll" win32\pmjni.dll > nul
+
+rem Create a java archive (jar) file of the distribution.
+jar cmf pmdefaults\manifest.txt win32\pmdefaults.jar pmdefaults\*.class portmusic_logo.png jportmidi\*.class
+
+rem Clean up the temporary image file now that it is in the jar file.
+del portmusic_logo.png
+
+rem Copy the java execution code obtained from
+rem http://devwizard.free.fr/html/en/JavaExe.html to the distribution
+rem directory.  The copy also renames the file to our desired executable
+rem name.
+copy JavaExe.exe win32\pmdefaults.exe > nul
+
+rem Integrate the icon into the executable using UpdateRsrcJavaExe from
+rem http://devwizard.free.fr
+UpdateRsrcJavaExe -run -exe=win32\pmdefaults.exe -ico=pmdefaults\pmdefaults.ico
+
+rem Copy the 32-bit windows read me file to the distribution directory.
+copy pmdefaults\readme-win32.txt win32\README.txt > nul
+
+rem Copy the license file to the distribution directory.
+copy pmdefaults\pmdefaults-license.txt win32\license.txt > nul
+
+echo "You can run pmdefaults.exe in win32"
diff --git a/pd/portmidi/pm_java/pmdefaults-setup-script.iss b/pd/portmidi/pm_java/pmdefaults-setup-script.iss
new file mode 100644
index 000000000..44622ba6a
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults-setup-script.iss
@@ -0,0 +1,44 @@
+; Script generated by the Inno Setup Script Wizard.
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+
+[Setup]
+; NOTE: The value of AppId uniquely identifies this application.
+; Do not use the same AppId value in installers for other applications.
+; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+AppId={{5094958B-3CD7-4780-A883-69C9E5B95AEF}
+AppName=PmDefaults
+AppVerName=PmDefaults
+AppPublisher=Roger Dannenberg - Carnegie Mellon University
+AppPublisherURL=http://portmedia.sourceforge.net/
+AppSupportURL=http://portmedia.sourceforge.net/
+AppUpdatesURL=http://portmedia.sourceforge.net/
+DefaultDirName={pf}\PmDefaults
+DefaultGroupName=PmDefaults
+LicenseFile=C:\Users\rbd\portmedia\portmidi\pm_java\win32\license.txt
+OutputBaseFilename=setup
+SetupIconFile=C:\Users\rbd\portmedia\portmidi\pm_java\pmdefaults\pmdefaults.ico
+Compression=lzma
+SolidCompression=yes
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+
+[Tasks]
+Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
+Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
+
+[Files]
+Source: "C:\Users\rbd\portmedia\portmidi\pm_java\win32\pmdefaults.exe"; DestDir: "{app}"; Flags: ignoreversion
+Source: "C:\Users\rbd\portmedia\portmidi\pm_java\win32\pmdefaults.jar"; DestDir: "{app}"; Flags: ignoreversion
+Source: "C:\Users\rbd\portmedia\portmidi\pm_java\win32\pmjni.dll"; DestDir: "{app}"; Flags: ignoreversion
+Source: "C:\Users\rbd\portmedia\portmidi\pm_java\win32\license.txt"; DestDir: "{app}"; Flags: ignoreversion
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+
+[Icons]
+Name: "{group}\PmDefaults"; Filename: "{app}\pmdefaults.exe"
+Name: "{commondesktop}\PmDefaults"; Filename: "{app}\pmdefaults.exe"; Tasks: desktopicon
+Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\PmDefaults"; Filename: "{app}\pmdefaults.exe"; Tasks: quicklaunchicon
+
+[Run]
+Filename: "{app}\pmdefaults.exe"; Description: "{cm:LaunchProgram,PmDefaults}"; Flags: nowait postinstall skipifsilent
+
diff --git a/pd/portmidi/pm_java/pmdefaults/PmDefaults.java b/pd/portmidi/pm_java/pmdefaults/PmDefaults.java
new file mode 100644
index 000000000..20708fc9b
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults/PmDefaults.java
@@ -0,0 +1,11 @@
+// PmDefaults -- a small application to set PortMIDI default input/output
+
+package pmdefaults;
+
+public class PmDefaults {
+    public static void main(String[] args) {
+        System.out.println("starting main");
+        new PmDefaultsFrame("PortMIDI Setup");
+    }
+}
+
diff --git a/pd/portmidi/pm_java/pmdefaults/PmDefaultsFrame.java b/pd/portmidi/pm_java/pmdefaults/PmDefaultsFrame.java
new file mode 100644
index 000000000..b38af1b0f
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults/PmDefaultsFrame.java
@@ -0,0 +1,428 @@
+// PmDefaults -- a small application to set PortMIDI default input/output
+
+/* Implementation notes:
+
+This program uses PortMidi to enumerate input and output devices and also
+to send output messages to test output devices and 
+to receive input messages to test input devices.
+
+*/
+
+package pmdefaults;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.lang.Math.*;
+import jportmidi.*;
+import jportmidi.JPortMidiApi.*;
+import java.util.ArrayList;
+import java.util.prefs.*;
+import java.net.*;
+
+public class PmDefaultsFrame extends JFrame 
+        implements ActionListener, ComponentListener {
+
+    // This class extends JPortMidi in order to override midi input handling
+    // In this case, midi input simply blinks the activity light
+    public class JPM extends JPortMidi {
+        ActivityLight light;
+        PmDefaultsFrame frame;
+        int lightTime;
+        boolean lightState;
+        int now; // current time in ms
+        final int HALF_BLINK_PERIOD = 250; // ms
+
+        public JPM(ActivityLight al, PmDefaultsFrame df) 
+                throws JPortMidiException {
+            light = al;
+            frame = df;
+            lightTime = 0;
+            lightState = false; // meaning "off"
+            now = 0;
+        }
+        
+        public void poll(int ms) throws JPortMidiException {
+            // blink the light. lightState is initially false (off).
+            // to blink the light, set lightState to true and lightTime
+            // to now + 0.25s; turn on light
+            // now > ligntTime && lightState => set lightTime = now + 0.25s;
+            //                                  set lightState = false
+            //                                  turn off light
+            // light can be blinked again when now > lightTime && !lightState
+            now = ms;
+            if (now > lightTime && lightState) {
+                lightTime = now + HALF_BLINK_PERIOD;
+                lightState = false;
+                light.setState(false);
+            }
+            super.poll();
+        }
+
+        public void handleMidiIn(PmEvent buffer) {
+            System.out.println("midi in: now " + now + 
+                               " lightTime " + lightTime +
+                               " lightState " + lightState);
+            if (now > lightTime && !lightState) {
+                lightState = true;
+                lightTime = now + HALF_BLINK_PERIOD;
+                light.setState(true);
+            }
+        }
+    }
+
+    public class ActivityLight extends JPanel {
+        Color color;
+        final Color OFF_COLOR = Color.BLACK;
+        final Color ON_COLOR = Color.GREEN;
+
+        ActivityLight() {
+            super();
+            Dimension size = new Dimension(50, 25);
+            setMaximumSize(size);
+            setPreferredSize(size);
+            setMinimumSize(size);
+            color = OFF_COLOR;
+            System.out.println("ActivityLight " + getSize());
+        }
+
+        public void setState(boolean on) {
+            color = (on ? ON_COLOR : OFF_COLOR);
+            repaint();
+        }
+
+        public void paintComponent(Graphics g) {
+            super.paintComponent(g); // paint background
+            g.setColor(color);
+            int x = (getWidth() / 2) - 5;
+            int y = (getHeight() / 2) - 5;
+            g.fillOval(x, y, 10, 10);
+            g.setColor(OFF_COLOR);
+            g.drawOval(x, y, 10, 10);
+        }
+    }
+
+    private JLabel inputLabel;
+    private JComboBox inputSelection;
+    // inputIds maps from the index of an item in inputSelection to the
+    // device ID. Used to open the selected device.
+    private ArrayList<Integer> inputIds;
+    private ActivityLight inputActivity;
+    private JLabel outputLabel;
+    private JComboBox outputSelection;
+    // analogous to inputIds, outputIds maps selection index to device ID
+    private ArrayList<Integer> outputIds;
+    private JButton testButton;
+    private JButton refreshButton;
+    private JButton updateButton;
+    private JButton closeButton;
+    private JLabel logo;
+
+    private JPM jpm;
+    private Timer timer;
+
+    public void componentResized(ComponentEvent e) {
+        System.out.println(e);
+        if (e.getComponent() == this) {
+            Insets insets = getInsets();
+            Dimension dim = getSize();
+            layoutComponents(dim.width - insets.left - insets.right,
+                             dim.height - insets.top - insets.bottom);
+        }
+    }
+    public void componentMoved(ComponentEvent e) {
+        System.out.println(e);
+    }
+    public void componentHidden(ComponentEvent e) {
+        System.out.println(e);
+    }
+    public void componentShown(ComponentEvent e) {
+        System.out.println(e);
+    }
+
+    
+    PmDefaultsFrame(String title) {
+        super(title);
+        initComponents();
+        System.out.println("initComponents returned\n");
+        pack(); // necessary before calling getInsets();
+        // initially, only width matters to layout:
+        layoutComponents(550, 300);
+        System.out.println("after layout, pref " + getPreferredSize());
+        // now, based on layout-computed preferredSize, set the Frame size
+        Insets insets = getInsets();
+        Dimension dim = getPreferredSize();
+        dim.width += (insets.left + insets.right);
+        dim.height += (insets.top + insets.bottom);
+        setSize(dim);
+        System.out.println("size" + getPreferredSize());
+        addComponentListener(this);
+
+        timer = new Timer(50 /* ms */, this);
+        timer.addActionListener(this);
+        try {
+            jpm = new JPM(inputActivity, this);
+            jpm.setTrace(true);
+            loadDeviceChoices();
+            timer.start(); // don't start timer if there's an error
+        } catch(JPortMidiException e) {
+            System.out.println(e);
+        }
+    }
+
+    void openInputSelection() {
+        int id = inputSelection.getSelectedIndex();
+        if (id < 0) return; // nothing selected
+        id = (Integer) (inputIds.get(id)); // map to device ID
+        // openInput will close any previously open input stream
+        try {
+            jpm.openInput(id, 100); // buffer size hopes to avoid overflow
+        } catch(JPortMidiException e) {
+            System.out.println(e);
+        }
+    }
+
+    // make a string to put into preferences describing this device
+    String makePrefName(int id) {
+        String name = jpm.getDeviceName(id);
+        String interf = jpm.getDeviceInterf(id);
+        // the syntax requires comma-space separator (see portmidi.h)
+        return interf + ", " + name;
+    }
+
+
+    public void savePreferences() {
+        Preferences prefs = Preferences.userRoot().node("/PortMidi");
+        int id = outputSelection.getSelectedIndex();
+        if (id >= 0) {
+            String prefName = makePrefName(outputIds.get(id));
+            System.out.println("output pref: " + prefName);
+            prefs.put("PM_RECOMMENDED_OUTPUT_DEVICE", prefName);
+        }
+        id = inputSelection.getSelectedIndex();
+        if (id >= 0) {
+            String prefName = makePrefName(inputIds.get(id));
+            System.out.println("input pref: " + prefName);
+            prefs.put("PM_RECOMMENDED_INPUT_DEVICE", prefName);
+        }
+        try {
+            prefs.flush();
+        } catch(BackingStoreException e) {
+            System.out.println(e);
+        }
+    }
+
+    public void actionPerformed(ActionEvent e) {
+        Object source = e.getSource();
+        try {
+            if (source == timer) {
+                jpm.poll(jpm.timeGet());
+            } else if (source == refreshButton) {
+                if (jpm.isOpenInput()) jpm.closeInput();
+                if (jpm.isOpenOutput()) jpm.closeOutput();
+                jpm.refreshDeviceLists();
+                loadDeviceChoices();
+            } else if (source == updateButton) {
+                savePreferences();
+            } else if (source == closeButton) {
+                if (jpm.isOpenInput()) jpm.closeInput();
+                if (jpm.isOpenOutput()) jpm.closeOutput();
+            } else if (source == testButton) {
+                sendTestMessages();
+            } else if (source == inputSelection) {
+                // close previous selection and open new one
+                openInputSelection();
+            } else if (source == outputSelection) {
+                jpm.closeOutput(); // remains closed until Test button reopens
+            }
+        } catch(JPortMidiException ex) {
+            System.out.println(ex);
+        }
+    };
+
+    private void layoutComponents(int width, int height) {
+        // I tried to do this with various layout managers, but failed
+        // It seems pretty straightforward to just compute locations and
+        // sizes.
+
+        int gap = 2; // pixel separation between components
+        int indent = 20;
+        int y = gap;
+
+        // inputLabel goes in upper left
+        inputLabel.setLocation(0, y);
+        inputLabel.setSize(inputLabel.getPreferredSize());
+
+        // inputSelection goes below and indented, width based on panel
+        y += inputLabel.getHeight() + gap;
+        inputSelection.setLocation(indent, y);
+        // size of inputSelection must leave room at right for inputButton
+        // (in fact, inputActivity goes there, but we'll make inputSelection
+        // and outputSelection the same size, based on leaving room for
+        // testButton, which is larger than inputActivity.)
+        Dimension dim = inputSelection.getPreferredSize();
+        Dimension dimButton = testButton.getPreferredSize();
+        // make button and selection the same height so they align
+        dim.height = dimButton.height = Math.max(dim.height, dimButton.height);
+        // make selection width as wide as possible
+        dim.width = width - indent - dimButton.width - gap;
+        inputSelection.setSize(dim);
+
+        // inputActivity goes to the right of inputSelection
+        inputActivity.setLocation(indent + dim.width + gap, y);
+        // square size to match the height of inputSelection
+        inputActivity.setSize(dim.height, dim.height);
+
+        // outputLabel goes below
+        y += dim.height + gap;
+        outputLabel.setLocation(0, y);
+        outputLabel.setSize(outputLabel.getPreferredSize());
+       
+        // outputSelection is like inputSelection
+        y += outputLabel.getHeight() + gap;
+        outputSelection.setLocation(indent, y);
+        outputSelection.setSize(dim);
+
+        // testButton is like inputActivity
+        testButton.setLocation(indent + dim.width + gap, y);
+        testButton.setSize(dimButton);
+        System.out.println("button " + dimButton + " selection " + dim);
+
+        // refreshButton is below
+        y += dim.height + gap;
+        dim = refreshButton.getPreferredSize();
+        refreshButton.setLocation(indent, y);
+        refreshButton.setSize(dim);
+
+        // updateButton to right of refreshButton
+        int x = indent + dim.width + gap;
+        updateButton.setLocation(x, y);
+        dim = updateButton.getPreferredSize();
+        updateButton.setSize(dim);
+
+        // closeButton to right of updateButton
+        x += dim.width + gap;
+        closeButton.setLocation(x, y);
+        dim = closeButton.getPreferredSize();
+        closeButton.setSize(dim);
+
+        // place logo centered at bottom
+        y += dim.height + gap;
+        logo.setLocation((width - logo.getWidth()) / 2, 
+                         height - gap - logo.getHeight());
+
+        // set overall size
+        y += logo.getHeight() + gap;
+        System.out.println("computed best size " + width + ", " + y);
+        setPreferredSize(new Dimension(width, y));
+    }
+
+    private void initComponents() {
+        Container wholePanel = getContentPane();
+        wholePanel.setLayout(null);
+        setLayout(null);
+
+        inputLabel = new JLabel();
+        inputLabel.setText("Default Input");
+        wholePanel.add(inputLabel);
+
+        inputSelection = new JComboBox();
+        inputSelection.addActionListener(this);
+        inputSelection.setLocation(20, 30);
+        inputSelection.setSize(inputSelection.getPreferredSize());
+        System.out.println("Adding inputSelection to panel");
+        wholePanel.add(inputSelection);
+        inputIds = new ArrayList<Integer>();
+
+        inputActivity = new ActivityLight();
+        wholePanel.add(inputActivity);
+
+        outputLabel = new JLabel();
+        outputLabel.setText("Default Output");
+        wholePanel.add(outputLabel);
+
+        outputSelection = new JComboBox();
+        outputSelection.addActionListener(this);
+        wholePanel.add(outputSelection);
+        testButton = new JButton();
+        testButton.setText("Test");
+        testButton.addActionListener(this);
+        wholePanel.add(testButton);
+        outputIds = new ArrayList<Integer>();
+
+        refreshButton = new JButton();
+        refreshButton.setText("Refresh Device Lists");
+        System.out.println("refresh " + refreshButton.getPreferredSize());
+        System.out.println(getLayout());
+        refreshButton.addActionListener(this);
+        wholePanel.add(refreshButton);
+
+        updateButton = new JButton();
+        updateButton.setText("Update Preferences");
+        updateButton.setSize(refreshButton.getPreferredSize());
+        updateButton.addActionListener(this);
+        wholePanel.add(updateButton);
+
+        closeButton = new JButton();
+        closeButton.setText("Close/Release Ports");
+        closeButton.setSize(refreshButton.getPreferredSize());
+        closeButton.addActionListener(this);
+        wholePanel.add(closeButton);
+
+	// load the logo from the jar file (on Linux and Windows)
+	ClassLoader cldr = this.getClass().getClassLoader();
+        ImageIcon icon;
+        URL logoURL = cldr.getResource("portmusic_logo.png");
+        if (logoURL == null) {
+            // on Mac, load from bundle
+            icon = new ImageIcon("portmusic_logo.png");
+        } else {
+            icon = new ImageIcon(logoURL);
+        }
+        logo = new JLabel(icon);
+        logo.setSize(logo.getPreferredSize());
+        wholePanel.add(logo);
+
+        setVisible(true);
+        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+    }
+
+    void loadDeviceChoices() throws JPortMidiException {
+        // initialize and load combo boxes with device descriptions
+        int n = jpm.countDevices();
+        inputSelection.removeAllItems();
+        inputIds.clear();
+        outputSelection.removeAllItems();
+        outputIds.clear();
+        for (int i = 0; i < n; i++) {
+            String interf = jpm.getDeviceInterf(i);
+            String name = jpm.getDeviceName(i);
+	    System.out.println("name " + name);
+            String selection = name + " [" + interf + "]";
+            if (jpm.getDeviceInput(i)) {
+                inputIds.add(i);
+                inputSelection.addItem(selection);
+            } else {
+                outputIds.add(i);
+                outputSelection.addItem(selection);
+            }
+        }
+    }
+
+    void sendTestMessages() {
+        try {
+            if (!jpm.isOpenOutput()) {
+                int id = outputSelection.getSelectedIndex();
+                if (id < 0) return; // nothing selected
+                id = (Integer) (outputIds.get(id));
+                System.out.println("calling openOutput");
+                jpm.openOutput(id, 10, 10);
+            }
+            jpm.midiNote(0, 67, 100); // send an A (440)
+            jpm.midiNote(0, 67, 0, jpm.timeGet() + 500);
+        } catch(JPortMidiException e) {
+            System.out.println(e);
+        }
+    }
+}
+
diff --git a/pd/portmidi/pm_java/pmdefaults/README.txt b/pd/portmidi/pm_java/pmdefaults/README.txt
new file mode 100644
index 000000000..eb24f5f1d
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults/README.txt
@@ -0,0 +1,21 @@
+README.txt
+Roger B. Dannenberg
+2 Jan 2009
+
+PmDefaults is a program to set default input and output devices for PortMidi
+applications. After running the PmDefaults program and choosing devices,
+identifiers for these devices will be returned by 
+Pm_GetDefaultInputDeviceID() and Pm_GetDefaultOutputDeviceID().
+
+Included in this directory are:
+
+manifest.txt -- used in pmdefaults.jar
+pmdefaults-icon.* -- various icons for applications
+pmdefaults-license.txt -- a version of portmidi/license.txt formatted for
+		       the windows installer
+portmusic_logo.png -- a logo displayed by the pmdefaults application
+readme-win32.txt -- this becomes the readme file for the pmdefaults
+		 application. It is copied to win32/README.txt by make.bat
+
+TO BUILD THE APPLICATION: see ../README.txt
+
diff --git a/pd/portmidi/pm_java/pmdefaults/manifest.txt b/pd/portmidi/pm_java/pmdefaults/manifest.txt
new file mode 100644
index 000000000..f2e301636
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults/manifest.txt
@@ -0,0 +1 @@
+Main-Class: pmdefaults/PmDefaults
diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults b/pd/portmidi/pm_java/pmdefaults/pmdefaults
new file mode 100755
index 000000000..80162469a
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults/pmdefaults
@@ -0,0 +1 @@
+java -jar /usr/share/java/pmdefaults.jar > /dev/null
diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.bmp b/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..b34ccd295ab850b37975edbae2fbda46dd6a443f
GIT binary patch
literal 17464
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
aGxi5A*?+zQeCYF!ADJKO@nO%ubN>%>=M*~t

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.gif b/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..4d8866cb1dff062c0b749c9fb834106bcfa4dfac
GIT binary patch
literal 6976
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

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.png b/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..36db120027dce0d9b3919c7b68605e8a3ae4c91d
GIT binary patch
literal 6986
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%0DF;G%|){;Net#JDv7C+8D
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
W&)LgP+G6ZK7@(@CsZb?v74bjLre1>p

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.xcf b/pd/portmidi/pm_java/pmdefaults/pmdefaults-icon.xcf
new file mode 100644
index 0000000000000000000000000000000000000000..7b2acec319eb1c4012bef6c4c0c370960ae92585
GIT binary patch
literal 19957
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
Fe*ix}lyLw6

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults-license.txt b/pd/portmidi/pm_java/pmdefaults/pmdefaults-license.txt
new file mode 100644
index 000000000..aa7173419
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults/pmdefaults-license.txt
@@ -0,0 +1,37 @@
+LICENSE INFORMATION
+
+PmDefaults is a small program to set default MIDI input and output
+devices for other programs using the PortMidi library.
+
+Latest version available at: http://sourceforge.net/projects/portmedia
+
+Copyright (c) 1999-2000 Ross Bencina and Phil Burk
+Copyright (c) 2001-2009 Roger B. Dannenberg
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files
+(the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of the Software,
+and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+The text above constitutes the entire PortMidi license; however, 
+the PortMusic community also makes the following non-binding requests:
+
+Any person wishing to distribute modifications to the Software is
+requested to send the modifications to the original developer so that
+they can be incorporated into the canonical version. It is also
+requested that these non-binding requests be included along with the 
+license above.
diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults.icns b/pd/portmidi/pm_java/pmdefaults/pmdefaults.icns
new file mode 100644
index 0000000000000000000000000000000000000000..75840850bbe8e8b69f9628f1b09cf219aeaeee1b
GIT binary patch
literal 36751
zcmeHvcX*pc_U?S@vgO{p+`BFJZp*Spl6&tS$q6+Jp)Wt$f@C{R0)#Zm?y|c90xX+_
zguYo|fza6n5>g;Nlq94=NHUV`IOM*cY=^*o?!Eus=UHK5O+9Dkoik_NGv6mKxa_){
z30b~;!OaEvgh*`h)MPeMlly=1gPN-H^@ie7V_B8aP+DW8=6rinOma$MQbKZSVq&h@
zq_3;0Dy=9lFD);vDy>9E>M+TSQ3*K~yJ-=X858T0>XuNcDN&!cl*$@Xiwex+RBobK
z{uQRhRIbk?{&gml7*h&L(om%~nd{7!^a``dG(x>hRi#E_b!n+yUyYnOJ3ci%H8MOo
zAziGit}U*pEGjN7Dj!8RiXLV&hHs}W%xbeTn~mYOm}1tBy59c!rorZpq5j6MK{i~M
zr_<#Z<m$5Xi*j>oY}Vd^&W@(Gmgc6`#*U_T^kP=4%{G{jRXq;^7BSgic7JaF5+=3g
z^b{>+vdaq0#^G@$x3cn(HtS+0?<pn0gI1Ib<r^)9s8U;PgTwQRTWnVA2=lUbGz<-O
zHa7M2bRjofl~q_$l&CGpDHZEF`z)>P=K3ac%P5mUFM8PQtc6dUb2+D`oRbqy=hTFg
zPwaZ(;PFi#p8C(u)5kvC|D$vId58U;(ZzS({Xb*(-Fes3=UfNB-@Wsrt)G7S@#YV9
ze)NTlyPOjfQ&T@KShC@#iK&T2Tz+co_yZ@Mi@DTw@4+=oxZHW+kq_UQ8t3u}=i}yG
z6N|b0yT_E(Ke|wI=Fzu4{`2%WS5Hj+c<!esc22n_M!46+u6KVpv-_iuzWI9J2=_k!
z*l+J$asOb~qT5%Ub#QOjp6}lJe8(G`K79SNvm@x}nwp$AH#K!`(#~%#U3d*4g6hJ5
z`F{(p6}Oq<_m5EtOw~apuviBb%rJGkX^cvZg?R>tSzVo50$Vnflw%Jm%oVjYZmVXd
z%Fv{^()@zTWNl1dReohaPF_WYzEYbVQI%IM?$yeGxU`7q*x1D4;+V+T<cKV7l(sld
zn;o4IrZc0yBGRajOV8FO#zkjGCg#N_#ziJ1L}?46vSSj=b{bt*VKP=$*Hl*Lm71yw
zu(6BEs|(624MnAe)$Y+!I${bG9fY~C+G4IZnX%o)E%yLbn*22Zns|fhA*wV72j!=#
zVl59*g(WtrvA)RXVWhO-W>dNU!&GTW3pAT^!p&k!omZVDDjhAA<|3uR;9rCO3R8`@
zzARo$nd|c8C1x>YO!Oi`k=UmpgGh+9!nB&IOa@&j%qrEqnyL*UL7}m_OpP8DQgc*Z
zz1<=S%(tu-{RG?+wWP$<8CO%m1pgp6m#MUR({lGJj9~1v7Lzbx4VKa%gHBgxF`F#L
z>gtlZ!s=>^zOrHo4K|g8CnV+<Rp(?!B>QHo3yKQkGjiSKf$`C432|`+F&Tj&VHwf!
zNvW}7d2y^IKOsIrR~wlW7Zjhajf+c*6UAetiYsdMw4}VIs=7vBR-&)E7ygk_v)v?6
z^J3Fl`WTZ84_h5fVjZ?Qm|(MwFuQe(Ne4}aKF4rSr@p~z8@4sJ&V#EMZtLr^4O{JS
za&57?jK(@+TYgrGp`)%nw8qfd*4vg@8Q)>(6rEsOct%ltN_v{EzCJZEEkB_mGbyV+
zJ+msMR9kC9eQV-SPkKpZrY<9;Dp6<1%FRf~&PmFo$(5<u!*&)u&}JQM@9b{xs%x}$
z(1DH)OG}rrrM=(WWa<(}3mGHUz+oG+4jVh?4bQg?!;ji9xCfZh8srlekkxN}h$(I1
zAyoy+wBd)CYB(w9^2^Nr1J(zba$aWau&p&{5H02vhuMZJW6?r6T;n%5FR^Hzm^7*T
z`+_?lLSgIBbT?;;y{yB1dPSqnogB>35K?b@5V&1lVkZ)58`8>NLj-Ij-?j>#wm&*F
zI<=-m(`{YN)VBDV`Sa%4LhI(O79BLaKAV@9+&8$I30B}Kw>5gF_E?v@*FtpDLp|1E
ztNUPB%7Xg!`hLJaJk;6Q*l+6UoZr*lx`YMW8sc+u>&%_imGSvORT`t&oK;%0goW4|
z!m^W#v(qzZYFR`~Y-viit}uOQG4r$4r_VR$WM%9767$j{vP$h4lH!b^B~XARYiRB5
zWeqLe9bMhM%?&-B_u^DxKop~ZO<1L3YAsvCrOxSTmxD_t&QCeGaBgyhOD0_tqj2y)
zZrpI>ynQ-o&)?p0O-@g}zvaT@q-%QXcL%1<PuThICbzZTv+(`rU)eT#^A*qSd|^k$
z)9XLqc4*s8Yx;I>*fYWT<o4<tmi1nK&2R4B^ww2F3&sW>y>a-KO$%>){E7!VpFM~A
z&)Mm3u3fq2rn_&r{PCf?*WYs2bp!u%$MB7>4*%uK+s<?DJh^S+)b_n!?bx^BgQ=ab
zoZPkZU!U!NdGn6ruYdH9{VqHAb53%cZ>~v<oKH^w^K1JB)zq|W(s^!bdSV$@IbEhg
zTl=yTu7|jC(pvfK?{jXSeu%54ufO}kg?BBdoDXu<PxoDUZenN84@fJ||EXzedfh@a
zQBJ>DbM~jZ){4og_iK)ywC$UCh%3&0QL<;>LoPIRPM>@=XX~UpdFtL=U;iyrtAV5I
z!e3xGQM)ErL-}_vbrOZw@26IAFXyT2Y*&uF{JdVQQBVHQs~66nKWBSqdNucQeS5&g
z`T0lgIDUFH7bY+(`P7!0`;WOE;4<g=^Zc}(dplickMi>_7oV7zT*8B$$Jebp>^e8`
z)9EjFzk6ci-rX0z-SPPn9y0Y#&;Q)@!s~mVT+=sJ@Oa!SZ@hlXgHNAbjEeWFZ=JvF
zwuRTfa^*vYrq%~9yY=pSuRSAHY`XTsi?`i!+qxsnvCwey>g%t+ZrOFHfQmg6&P|^m
zKInY!)30~!`}*J~?|r*_DGzdDRi`E~5**F|-Zh1TeJ#J%eLl<n>(A%^a(d#K{(m_F
z3$7OVsmAMTP@!=*B?Vs^2Ti45MlyYAnZY!Qn69F<3ZFuGDFQr0HLW!+q4E&_pa8wa
zZjLrt@|3}vM3GQg%DvM;5J3{DMHfbcD?xF_Xu6+{sxuSfVpGB^a{NtYs>+h6n2H#=
zE-5m;E~TO(H8-SKnphGWT?!@X0e-<jg$kWlVnm$IpHhv^FFiIq$FDd+rz#34EDFdC
z)_WJlhNKjj(bzw+%vj-F7f_fStMfNkC=1nz$(e;gWnt->g21A}z}#S?Z&g`hP>Nf!
z&SEOp7y=8E;|k>AK5?e#7;Sn{u+BT(D>pVEELay}@{5j*i;RKfwDMX?>&j@kp}MNB
zq_B*djQRO>hH_d|R8eEdE3c?6H&x{63kvGSC;?SQIEo+4T?|K+W-|yS(sq-V*<=uF
zK$^|J2Z2qGtOYT*n4Y9+OE?J&@$yZmG_R#z_0a<H)kul5-1G$XvLukahPs*r5@klt
zoKH%CsU^tUohu?Dx3|Qo#Fpj)qO~9wr9qv{R8FETb}I3SwxG^bs|YnybA^y;SxePM
zwc0=}nUZSgR%+x1lQ}rt@+5{7CO4R?NRAn4i&m&I7f07Zvf5;+Pa^r?#iqy6$Xt;Y
zpddM-Ad@j#f~$j>j3tIhrGk{?xrf#eDCUTd!SomEW3pIiR;q>wg!ojt3u<CQd<8+1
z7^_tz*RMefy-JZ;QCnxRm{cLA$EdtMIkZ9K>r#tWWqh1U3<<R(An(PbwBGy}CFU`h
zpDH{*?-?pHhZ4VRe3~lDOy)mQyIF#fj!~7F)>{BK6{U#lv4YBrv$Ctih%3NUsW;|T
zn9K5wg|*aFQ*0<)PGjqQ!Xh<#1O(JrXO2y(BCrBkby~HlE;qa;6_HL%oo_+4GBYeB
zxh5ny$=^R;?OWvST@_QV4GD^<h*^#XKE8q4u;f~wTvf3#Cb8TvBrMdw(m!2Os|_#l
zbvMYVs}D^#`DXhV>SK~C{E|qD9~$`5q%d~_V{ozATo@P<TNz}qq-#>bio8mKt3yj8
zgMwqrLRQddy%FJ@zLHWsrN+wIT6|*6NE!^r+7)gSl)0~O?9|(BilWh>iyc*m>DRc&
z0C!vj%5FnkfdFF>N<eLw;6|gnsd>PPi-^J2#!lNP6IvR_PzpNQ2fmtajR}bi>lp^C
zx6P|lNBQe;U11w;@huiFTR=zW>*K6Z?ZXg1#?nJ-nWj7^Beg)=S{*vv<ki-YoZ6P6
ztkorE4-~Yv71hL8WH}9KDNWFm9u^W6VN%ul<|bt7LmBh04Jk>}Rt4AR=)Fy0)Er(D
z-Q#CTk1nKQ<4|4mV5{Fim?=L^A3EIXWzyspl$#=(<4XMN5NC$hL=6UYH04GVxFzf7
z+gbw#!cF-ZRH+R}x22?JmYAbz{Yrdm(!%1R^wHLkl(fvm)ZtN<*3!$^Koe`}@9G$+
zH#ITqpwT$k-@?q6wyu6dOIvTNt<}(DG!BTkAxuEjW3yWcv*XGpbQrMM82%wHvkqEO
z1tf;8k1&<BIHA`zgsLZ*dN`IuMfnA0x7*g@E+_%}!CywaTWn7tmq9892ilTJB68lt
z6~rV$8R^|`eH__3QZdZf{48akJ8LHC$j(dj8AR60)+R}s$Jn5M!Y~9`dzH~p-$IIq
z*E02hx8HzuUa6!58dZaSsy?eNA_hZIS!3kgwhl@8Jfw%ygx2APgf8n7h>hmWODD!*
z%;Ir0vNh_$ltd3nQfq&b)Io$AQK~Hkffe??VHkr$(_le@Y|w!9FHC_^_gCwD>_jT~
zHQWBee5^gGk-mb&FEc$!nmd0D(^z}Fl_kwx1H<$Cl-kFc&%B&SF`h+ylk7cUU4xsj
z-kg4fmGWT&F<&;k22mLnQ*Q0^*4EZOgG3YwD6{?*?V20e@E@7XHaslaw4asDp9kQ@
z%Rk)yG205JsIRE%Kv-&LfmUlr_mH7=xY;;l>b2Us8~RKSusG{rpf<_BhxOXn(10y1
zuY*KegJoUCUABQ5ZFiA%8H=?J1kz5g^0?^y?wBZDNJyO~$l~kQk=l|O6OquC`hdGd
zP*_%6es5rn#xj_yYYmQxiw$WHDGlh&($)vLTLe@O&W|m%22}?3&ri*73(=8+koM4$
zAeN_X2o_rmM%E7xo5P~h+avntmHHRPT6`L!J7XJ@BBRrrV^*-}-XS2=)5aL=bf~?z
zk73mK8EPNsAL?Df2oS>^B4%#Koq<xk$ixql0<#`wUvudM*#8(Joyn<*F)mC^Ekb&N
zyTseTuRr?t3Ec82oTs*YxO>v+K>YH_``kH#s$;udhtG`j45zcHlvaN8)6}`?sS7Ve
zSTgUPJU21*(`Tv65wp1vS6o=v?zC+GX<`yVXr}XQ>EC(WAMUt*!FcDEC(F)#9JT$O
z;VZXZ5%jFxdh7S&TejWzRO4ITcf9+XD?Xfbh|McYEVcg(eKzTLgEy=z<7YG1m8@LQ
z^+e&@xBo5rpH;8CR`pc<Hz{viTfg)b#JOl*{<}|p+>-iz%|FK$JX3ytYxG9#os0gk
z(fIGqmFX|mzP3^Sl=;WJT_4|7yXc(QoL8>9aBg$fas59>uX`n+Bm3H^%dfm~)$5kO
zr>{<a>YC~{^D_;T#h3r)hQX`Pk6@;s9CkUs|CoPrY~PnZZ2HH?&WRshdg+H_pYhlK
zwe7&M4WDg2ym@l-bKku5@=50?Pn$vr=$ztHxN&u!J2&Ozh{z`=r<~L0fXVdaY1bse
zTi5io^AWC^c;u!N)6U81i6^;wYDhM?pws&B{>io6Ys#)r*Ve~-S8Shrf_qIa^<94A
z=+`6i-=2Gdd!Jhq_`-SD<YZsX_pZm0eIslw;_shU7aS3@Q=7xak)6K7@}u){T+{9i
zziyhlzPH>u4MDEMiG7H!zf6Bd%sEe0(6i3zzn6S9A?D7sSN-6cymo=hxt6P3m+5v-
z9jtue+*+=7PArW5WO~oiZ(UDdnA7LSBHzbVG^DFs6Pq6yP6~WSY~?zBXS7U4{NKbF
zy`0WF;Q(Yp@EhkaCf9jqCsD}-(ssi27w!XtJNDdIJ^?u}?wUe@>-e$-meib%@n!dA
z{dRf{_jR41xi4<}=JfQ1bM^DNa}D=7_s{~Esgv`G+uBZ}K;}I1<O$fNeCo~g4=+rv
z;ez{?!*yJL*=z4V!{x5);)gf7{>%lZa|}l7`f}TkQ-4I%fByW$$)l$o-0Lhq!_WW3
zr>30<)1|H{=egxD_f3zk`SR=!b_C7Ni7)p4xPHsIk6$|T>S5R9{!K?VI+yV{*AKZ}
z){Jk@9-eZZJ~_3(@ug5dS*SViz`m)IPj`NGze{X#GWX>@k-zU~82zfzd{1fVi`s%W
zQc`zbz4?YFWB=AGAw}!@J~zMmmiDnjy1&N0_2U)4`@9%W97?yBtjaogbNAbMXPx(>
z&B^R1f4I=HdZJ)W&an$ujczZwhm03*D_fE0baZSgaJO;(NZ&qx?zQTMYrd>Ic41ZK
z()Kr#-m&a${?JM-*ZilELszWx&}qc^2e&!-A<j>4KYaM?w`ULW!)H(LIC1pMVdrun
z=d|-M7r+%QSG*8_6TpuXcLLmXm|yL_5m0+>1pdn-LeKO)2zU_iAmBm3gTQ|y0t;>t
zZ$z`MB>3+F{pHUDu0VD6T#2r*=E2!yUUBV8D$9+JORIg5O7w{Zc)G8z{1YWbi--`a
zUr9;v7?B7eRS!@S=^#XlR`EoJ%PE6GD0q}AQVEf()iOIF{wt{@jS#zla9dt}KUL@n
zQD>x7K1kJ(h`A{(BP97zDn*ZEJCzkH2q|1az0oC+(%Qm6Tr1p9rKN<#KQh+?nZ(&1
z4jQN>B!!m6mDBwA_(Doc60|x8m5TixR95FrNWO#0Ycu0wQmgFLw<wX2@Lb%27AHkV
zCl=z}g{nCG4i^Pb_ke1W2?@(V3-pOiDO))+GzV416Ou}UNl+MOlBmV3Lor`b&j^*K
z6B28uLXONqq>^-6HA*BghM-Y*8%ZQlIjEOE37XXqK0>5%v_vsNgb3sExv6W)F!ciJ
zM~E~gMz9m_V67a3r*uX|N(mu>7&b0cb9DiP<k7TnpsOv@5<y##2b|C}m`EHnQcZkk
zHI?9*v0p+Z^(Ou$<<W#>FLy7E%HPk+PQv}Ds4a_92nweZE08j$EwYk`LV}45H*<AL
zf-7t2Po^}2B-yD7YlhWvYYYBa8x<D@%?XLaZEdVq>2gX^7m<k28n+@y0)#n~>Ig}i
zQzVM=qeck{anwab5MfSFZGn+i=R`r&tRCNA>A~v{cuek}RJ@9+F!GSJwDjC6ET<n4
z?9>mpQ3aI3<T0KZ{N#CPM61V%LOG+uPJOaNRk-^3zv&PveH}!iN}F3IJVfv#k{Jas
zwo4VLVnl7QZXZWtL{b_qHD?e*v0p-d)vOl5L4B1M*T;?62$dAYY3$fVv$pVmRDuin
zGF()_QWeC1glh7OXO&dLWbIT7EVYz|5CW)cVJNd!FuN|sxKtQynUctVr6&w%T{@ZY
z+}xZ5*j^->$HCI<G(U;>%&ICUBnp?cFf5o1Oe%>Q!rZnpvzt*JLn&sfg9!u?6;uKL
z6imsVNbOXE?N>x;f!mfc#)%MEXQ#2Xcqt|<)`yS`DvmXo8r4JykJCt`L`7+yox~`m
z68HMUAnIUY5+ZoZbXe+$1k5%ON=gKw1WL3d5bK)nHrpDhIIAje2ayT#fD9vW)<;O}
zMDWVS!;D(FSX<_8C$hlOY(b4~$-q`!h{qF@rV|Zzd<twsTIlX1ktZ5gP@%GNF_jog
z4Dg5LHTYFsv5HFTN{cG-9I2)P8p?`m;0G#d9aL#3tpHFZn4nOK3x8=%QHeqHkflWx
zq67Yh3PmLs=w2$bG}NW&U6d3$utV`#0S6O_n|)$9MM;C`EXwjDV1^2L>Io{hU`$H+
zQe0W)9;M1=DN!h-5&`*u#_y=A1@C1kWO$IV2>&ow-^RmuT@h~@;kwgDR~eg3P^pq(
zVhM-w#+DkT!5#fgjm8Rdy;()1GCM)JN%V2;EqE|d4gV~MZ5ACu>vRmTa|tDS)P|W4
zQlY*asrp(Jg+Q0A4Miq18X1>T(u~ixLzFb)({L}v@8;QD?Y)%vL1qK;4G^HKLvtw#
z+7F|d5LUZXY~3Mdh*FdU*~%8oLn&@n6qwL9<~t}Ag+jRw`BLOlk+&?y7=lp%G)OTD
z40vr5_Ck(OQi^QV5(;seI@DGno3oh0b7Ov}HX<LnSk&5pTs=O$#wlq-t?ZasDj-*g
zT){C)WDbHHtcNrq=Yv{2#vx{ijxnJiSQLVS3N+9kr$j_f%nM=%<nu94bKNLKHsk~)
z)yNuPpril=`NyeX6j3Z2r9_2-dKA<(p-HB345{{$l(eEc(nW<<2o!wGPNc+^($iGg
z(w2wi7B&4qr46P`?@_F(K*;wP%{Y-sWU%rRRN0F8z*gjTB9{mXlwnjgBSa#R;-r>I
z#S+ZJFhYD}QmG90Uqqq8FC&n_%E}cowOj@r3W-!H5TyaddOJ}{1er`K2v|%R?$b!b
z5h^rhiZTdxFuKdci}q@inyW{M2Fm2HUsw(y(Z{H&9u1^2g-kIHI1f?(Dr&AV*UM3_
zR?0B|fG&i>iX^6N=?KOxkxQi#><@t?H-3e8^BO7bsL+f82MB=m6Vm}IH^A8_<V%Q3
zl9Cq=L#oiuRE(hsCW4#3n7Srx-yt=itTpYYBz_cgjmocWXljBnH3L|oKr9z+Rb|GZ
zCYFR54$LgC0ne$j9k4Uxn;^Oqc`Vjf*mgKw>)<pjqQ?5KsI(1^5_z)``Pi?iv<Sw5
ze7g*J^VgyWSp_>28tUK#a!{5&;TEZomsnb8dCeJ00x>beX(|aPn71H=pN6q#juIie
z^(<Ai3PhGln_w1Y`WcG%1(mn8wzn9K%c!)Nwl_K;ZyANDU7&CO%=#V{$sHV2sV=Vu
zA7#3{YB=w@%u>ugEpsNhVUGLZwM3EQ;R##@P*53>C>9sKT0Grl#zj<JOb8A?F|+;`
zL=Zi3K!N0uSin_;&p6-@Ck$shPE}w9CGPZwIYu-?2H{{uUV-yImcV2a+y_5QsStj(
zx^A3GbJ5YAp6%$M-dZ=6(PzZPrNc`n)@TdsQsZ*z9JPZWACc13U_IPNUyT+d(WfXO
zF2f*7Lyb27qBKRkNc=KI<CBOdsFrw#Vd`4YxQI9kS#hu%nk{~cM~aq6jW{12#7mXn
zmL(RfpPN&Fo8^IvsFU#!StMT(c9Q1nD<scxH3$S0IvPb(I5{EEeXu6OYbPfvu;DN|
zv1A6@873F$M>RwamSs>Ar4by>eMGy@Qs9;XiB&QZOI0ND5{U`|=T0lIA1_K2*_u4G
zrW(5ur(cp-16hTlX}DJ)T$B_-G!=wo{wxVpF$&Bi{1QRF7a18CE7k(iazyF}X?Owt
zQfVnTh#>T5X=t7dX^EFebH@gFtr&bN36iozbRfy_OG&7e61B+oW-%+nm>~(aaB+fj
zk_-YoG*yAVREm=7E=m$@tjZ{}6TiqyB%ygAB>DeZ(jw}IS?5w(C?NqNH+D-BDbS3y
zR#6;_L0Okb63JOQDCwo^=q5-IRjtH3E4~7egWo|Ejswjs(Sc!A(^Sx)D(n?;dTtsd
zQbDDXc)3R<mcYnnXppix3>!oUuE5?+BfeuaVus0N6P1zHD8PdeM~KWGI}b5Yp&G6*
zzFd$Y=t0TzBF$M!rL`r+dicfC+C@|;au={AJp}5DvFC+~YOo)X)+ow~(XDbO`^&&m
z%#G3u?3X_icotu4*Gp<m-4D(t4VJ!@Os3DyDC)youf4exZwvRd|A`SZ!p+#8m5f-#
za5JXk0fr@o@u5`~k=vQHUnS5-nF5Yf>7$X`5pS(z5}1%X+*G#Q&lEiXwXC51K_;41
zKV!`xw2v}rp~!2QtX_pfVg>U?7ae1LCM;**{Y=^jBKF8!4`g(+Jsd0$)>p`yGg_H3
zE6c=KLr#|7!K7k;Jh2=QJwBfG_Liro7Ixa1uLWCKThqswMVFG2Yr@;b9T{c^3vbG3
zVaz?CZp09A)p!cpSDukp(6n-9XbvWtc_E7;k#LeiZYE|OgZYYjMwqx0((FvAmLuGh
zmatBQn`!-#qhb)sB#Fe^!Ms99<g5lQPRMlDpu&NXFtmJb>Y8S(I%UB)a#K?Ugqu;B
z3K$(@Gb&OVaC$RVFOVR8Z5TEiE5b$!&1%j94WS0$gr-qM>R^#RBxqJs1GaKVPCN4>
zAq_3?SXIlJ0zi9*hWH@d3}&LX3dSHv%NW+Ia86rf8xe&>5xMx<f|}sP3Fyyb3~vnC
znF?!`JF6}DXKhSe7&J%NfLW*cHZEtR5aDJ_w_8yUV}P)lv08VtnQ4ilg4v)H4sIYK
zo=E2O^wA;KRSl1qKC8#~S9<UwHMW0fUi~Vj!jz(mi%V-dv7EsmTFej5jWSkui6XfH
z3&y$-ZmMT=*qKjNEcPlk?L{4$i^#d>f)#BG0?+p<np>uEQGs+u0gUZZ1!B;f%X(n1
zBf9Y7_PL3mG&rZO1DJ>tkvJIQ=DFo@D;Z%DbA~^5O6II7{2z5Vn7T<y2n<z4LPnUz
zSU;<z3l?i<T0oh}7<?#@?t`7o8Ubr^!!VRl1bc15f%GdqVF2sWxy0j3Q8_TZL^OwY
zGuT;v9toUP)dH7~7X;#Q{lge6O2_))3@@r`#mUSVW?Ksjh$P-ng>^2#ltPKj&NSG4
zX2y(eQz}EW89rcVvAw=T5|<tbe$7Ng^4SpH=8Dhom&k}0V+OccwM^<>8rZ`C3=Cx2
zPp-#pM|=)un+qikg3tgZnIs&`T1VtSpj#%+s?!hTSx|<R4FTt#1SxoePnDf1`;=mB
zlP`F2cvF?2LAQKh>to6h=T}1fvEd5@>_t;gJUU5~xkD?M(B8h7NroEw;SO86@vEzC
z6_XA$n%nU{Q+F#gG}m{-Xj*$6OxfSq3ZNPWk#FjQi|8^p^otI%(b6jV-*1@E(0+mK
zWwM^$=KM|<6Q~SEQ0-!hMsRhK2yvw26btB=h+IFhwk%pER|pb?uH!f(otTFNlv@x4
z{L)k%WkR3QLHrOb5b$srA^4O;4SdIhL1C02B7mLaBtzq<p~Gk_A0zUtij-W5uNYzo
zI+XR`W+fn|&(_)7-#OIVI3vTW^AM&M3k0OY{bNjJVg)$WWu)>DQ*?ux3FPu6Oi@GR
zG7>p(5Z{W>qf9o?hBv-q#fEJMnPLcrDIx7knS20|59v6><ggG4X}p)oyd@IS0u{aD
z<S7bb1c5Z7pbrH?LHANd0#MU_m=QS&qB`*<IV?ZvL4g+vyn2=}GKhq#3nf8lDnXYH
zd}_aA@&vRb_|^j{LqQb^3V|5uS&Ws7MoA}1>Hs8ZLrI6qPL43SS?p53n2}Zp^=m;3
zn4~}|P?CZ!Wk&$M0}Kjz*ahi8egOH<aeN}LJ~mVCjeHgImB>RdQH(PgEL_r$mFmTA
z7o<aDjI<+>(u<;Qk-!RlD57X=!3ygjv}cUTG*Us)iM)6R(b+r7q==BBPcShW7Fzp9
za7qKo^5a;(E|i#HX|hn<C%{OQy#wNGi@HW}$h8ffWb%Fy^(0tWr)UhJy-v(p3B{Vh
zADO(Xw_GDtL95~i=F{1n<t1KBNFacyzGo7nT!O8Fj3Cb1>jd-e#s?ZJB!XOqUdrQ4
zVMeHlU=ul5B@vDRJKP&daF~f<D54^1-x229k20BDlmz)Qv=)MTk1$yyQAp*ZL@k9y
zh-;8G^c@TC%*Pf~qO}wTD82=TR3{n_)}q`l^+rpHXx$iU&M`Mlkb<Fz8j1WcQ}nUH
z=GJC8a!?~t%26&vz@lXxmBCV(o%kYL6^K->l1n9WlF|AVi)wFY4Q(a9;I7z3AS0;9
zXk;>k#H|OIyxX84KB`f-K&c|5G|sLR3b1&j=Kz!XK<gM$2r`vdVm)A2;1rdS&i?&O
znnMH(L*b<@ZS3yvTg>Dp0Szq&L_Q>dGqx;ea?DMh-gSV<3_yV5ovU07*Q*^`yOf0V
zbuY)b6&TA`OxA_-zIg?cx2IwWFl^}{PB%EH&Uy?b0q<c}6J-zbJqqMIzJ}*&UB!qD
z^126HOjZHBbQ8=A=PvO!T6>$#ZD$yKC*pDiE&xc^X(o#%QUPl&NMcVzu5M=avzyOi
z#0uhF+}R74Rco4|l3y_SW!8C@4Gu12(pEMM|48s|n=m+dfxZ1RyL=eqX@@6l)Em0-
z(Ohfj!YMIO-h|y(Tt1WBFvl@h&u~e*d+!R~Lr7q5N@=IaBIHAhn7STrVJ5Tw7lac%
z;c!4x+?PCNd}bi5g|{yu0pm=i$Hk93y<v`d&5%xba_n>+cm*OB0pY$#FtGS0IPk8)
zaV8Zzy3?~A9n2ei29&9%EF+_&%fS-6Gfe|U88vK<LPAg=3Bge$ev0Q!cP7ZFk2xo!
ztbb-0D7Yw1;g(h|$A*xKM|CFgiv#{ypo<ad46@RR(8nslB;2wxiEM}sB_OQz!U2vc
zi3RKD<`m#&lLm0@{6g>~kh}zhwLw8b{v0QSz*_vzlCYR=fr%m=$A0t9%Z0~MK%!Uz
zYzyZYV`MP%CyFk{`ZYv7#NyptV9<SN1Gf}N>`;(2=1meWk*FqetXV6p>Y_xE70P3}
zJH<ehiT4Z*qAZhW8txSchosJE;*af9{<EZZr~?JkULwdBLz`iKAoSoFkcL>fT9k(G
zLtiSb01g7f`&k;SCm+&qgk2n#I|jkmAu)(NNU9Lgfh0KDOC_OJMl>QT$AXFoHGzUa
z5?1ejlhiLkB+gVRqNPI803@OHtc`UJVRQN=ULvVqAmNY{`fEve`4qFRVazNgVQfy4
z$hBsywUgmA3#zz8lE?x}K;|!9M>i9Ls4lqefFQUZ5Xl5W2Eim}7*#C{tBVzZZ*^j?
zh(s+(<XgDWCTd*v;|6!81V%Q)x0Ic60`^K&8}@Dy2^?b)GnA>4cn`5|6^Rz(6_JZ!
z=OOko!9Pl~TLm$uK*{qWpIXYKeGT<J;7^Txi<nX*NeBshAh4$%dtPY6zH;*?MRPr(
zwsuf_WPcgJin&pCf&cPnf(x71*`Ja8edB=#x$v2oT>s{GE4cjZGq+xM|B(l|<j|e}
zz}FhT{o+qtcpW53BD8$7k_&H&NomuU4{$Q*AmpY8x%w93dzSNK!ID=W<%;{TnG>|W
zc5s1}T)rG9gj6D)VVm#gif;uH|M24N=rV-cTF(DX$jGByx)dLFE_*wekbkb=nq`FC
z&H0gyFxA|%_i^cmgxvZFSHp!L<s6y2XS+Cf(9MJ_;h$W;g}-#mEgLz1=k}Zbb{20K
ziW2Y|?f2LxFXFYu!@pm6<<i}D?)$I1v4VevlsE6W{EE9a;;WlqUjLedhktzir<}Xx
ze?10UeBv<Y-~I9W-;95}a%ON2uDS&m`P@wEKyHM)ZgLQ1Go~!+8R62Eg#5<Ng|#4v
zQsoN18vrdhMn~~D!OkT^BnEFlmJ&Lvp&QZdLjFz&sOG@w<#UtQd=f^;tGoyf>FTRx
zcH(Wm5pL<FITb1IV6$=lwu}@!^DG`#Z8&>>4*<UTKQ|NUO|NXIaW}OPrGrNz0-e?L
z9wN<>+qUyGQu^*^^9gxuIZpu8v1KJmFw3H|qP9PC-bF|^=UBESbJ`-eVTW^WB0hMF
z@kBT&=loqP5$FBHVdpBW+FhKxwFUpI&Al>cPRMnb^)<;KEaznD7>N{`zviN*Z#f5s
zPjLP$A@|H_QvHXJVtz`AtLl>xy+l5z=;%Mr@V!r330XL+$oE%@>|BA}SmxMtb|qI~
zQjN=&t^Vt7ENBst;rp$3h+y*P-G(%?Nb=|KAcOBid>cNa#Lj&lYl#9QxkO3)MeN+O
z!J2NvgAYm6{byzuYFt#HoKXOKyHtVdY7v%i;YS^JN8Gb)``lEn!VK?tekUQ<i&K$1
zxNpQSwcuOBuV0sm{c_{~ONoQ4KL$C3t%j1)5w3aZ?O7%J1W<ae#lqacIUF#sK7ua;
z&DsI~$c@99>+i+Z_&9<D{z^|6(7JRoJ<mL|_BL4Gke!z;B*J>m&pJr%tg6olv2uQ<
z7mSW`7}Y)eD9)*is<sev73W_PvJOT-Neom0|HZ(q3=f~U1{?5o&R=$0(<2CQ^(X8+
z_HZ(hcU+6}=ONBNAY>6gjhl|1>oXM^62<ujINS(tWjrb192Ri`HiqYZDL#KI#_h{(
zIH!IGCGW{(??TB9c&NjDUle=~a(+M~U{<?RKx$=@fT~AM1L$uCl%Nbrj{&TsfnxQ?
z$#Bs6j~<uAVLOkhK@K<GE>3VIND)_!OK`Mr{H7P3BtgGBvw{m>e6g5I&b)UVj&bt=
z{Mz^VDlR?o!5ce9xo}{MgG<kT^40;^&6dLst~~nT7QFfV9$s-4J~{$FvH$gVj=|3z
z|L|X1&Wg_XYc71b>jK})W$(VS{)v4qF8{bSCy&1D;)?e&y@Rsu-#Nm`zEeElvt)sU
z7{;GoyZolh=U;u}9e>+#oCj?#)JRlO(Gk&EsZn83@u{WF*Q`6rLw2^sU>Xvl2#E;s
z_EF0HlS>-z*!3L`-9MNYBA3cE@dcH&`PmV25)=`Xe&_zfJao_H#bIhqNEW?s?a~K&
zI#Z)#{Yik~4~Kc!js?0v@94hQc73^T*XMh8e|~dWlu91m^4TG-+<sebfF}EeFUPp*
zN4};cLhh5f{t#E}Tvin5pZCTRu6Q}i-#c;9se@d(_py?|z>-(@;mZyS6V%a{e{qm2
zPCZxXAE<k7DVKk0_786T^bnW7Q63ned*)s)`%Q>%-FqnbygMSG;As>ri4N4i1>yUw
z_~z59eM`CQuGpZuj}LSC<x!f<TXvz~im0&G?I^f5TAet!8=7`@MMPe)_b`{;9;JwG
zM2oj+h<53BTz+4)G`JdLkv&`#mi{6Np48$=^EUhymR(mR$CPYE$*W0-H2%Gq%eES$
zQY}Zg{LM_6B<U?Q`6x3)ckLcD`5;eCw9lc*LkS`DuV}KhJWvw73I$iiMRk0Rg1x3l
zS@d1wT(+Y#KJCV1T-KGKj#-HO)277y7m%NqsfoP;`D;ruOuLR^b_;d>F}729g?>jv
zj_$X6P_+Nn{E*n59b;U!sWP?Zx#JkUE?R4T2L-n!Yp>pUoGTvAi-@gyW%nqTUY4A^
z;sjSbl@}ONx?$G{tZJyR;??6^x&Os{U%#TK#iBpoG{9gy%H6LQd25Ou**D51`?u^p
ziHX(u`V@@A@^%eHhveV9-^mpp0)E|9r+(yK`~S0MVV6Eirp})K1NYhb&SN)NDs;)g
zh_zGaf6slNYb(o%_4f(F*Qtm!q5lN;-`rD~>95A~SEaWU5m-X^aUSquYj%(VZ?nkc
zY9FPH_@s9q<I=aglJUNSw@jt+R;s;Zn#}%vM|kk&!BmY@s?>;KF}mYnZ0Z$X9O06e
zt3l-C-Wu4q90`G_3l{DDj!Sp{u`0+;eAG%*V9P>fP|F8Lxb)Ps)d<=&O5CC-Q6cjU
z%z5w_4}7C84qL=KFvQneE=V=ewO5}y#6$P-ogcmNWGyxZQTX_4G)kfjD;?Q$2nXID
z`b%;XqWo2hi8LVn?j2w8sJ*-RC!anwuP7nZ-#;)qBqS;_EFvl*GDsF&@azE|v-1_3
z#oC%46&4W|lag6fQ$O#4wJYzs=bm*pMEhs|{QwVG+Fy{CnVA@$m|0lcZoPK(`+G*Y
zV(RWB-^{0W@8>@2d!p14g_k*g|Kf++_UvEG6=xS|)#;C(+7FZHjnYJSZCTFcOA<AC
z_v}8vWv>>;mOKgOwk|Ka<m&wgxO`h%vE|ME%em|mb5_CNS6sI9W@>&GEw<jKORnGZ
z6_;)vXu1peJsT>ca{r94Cw+L;4f~Ma&Z46Fx56)d{_j;>{+oo*>NoehxNLn<RN=i7
z+-tWfA<_KosomSR?LWi4ZpaPx&#I|!Z@YT`X|A@Hhp8h{3k^dLAhYjbeQH869e!%>
zS+4l^<qbot-`wGX7u-6-LBGK6_<ZYUn?7B}rTh4f?G8@%F5|-9Js0@fKhx5OMe+%^
z`QhKze}#{KuX}DU4waLC{Ae*3mi=KSx#4GSioYWvQcyc555dRB;_p9@w-6Dl_Hh1N
z;&WyZSHDHb7c-glzu>9pDKb%XxE74|4SZgQh#05CN|H6sRevMoU3YrJ99x^As_^_G
z8^s@<xJGoiw<D2>PqGpIe%}w{T>1<;y3?~A9o*YZSoy(6uDfp4eg{uHaO1}B@4fEn
zvvaf)f^tbI=U)lpGgXY>>zhDeeO|x)`bUn6(%c0Xr77H`^bZ<PQnh%t-#}72G4-24
zF(Vdo$XZBbNBJ5sGPkT7h~^AGjoUb{sN3AK#Dev6a|&=X(Ded|8(j)&^(g0kh=}v^
zrHkfxBm}M_<XIfTu{hH)I5%SkVU8KOGX#+oMkki6=SfR1VVU?tWBWNj8c!llbFc=S
zt*2&Kyq%{&;!Zzu4UZ**KTA9tMtrblTU72b&PWuQqykKG4<VQ1T)u~pcSK<uMeA@c
zK{!P1ZXoHO6Y|HOMQta<2GWH4g^OeJ#n@)ZBBB5=6G&T2$djV9y}y*Un2_5E`SNFJ
zZxb>GX?I>C%^kYnYklt%Vuz$Z5%PCY($QZ^Lal~q#b{v`w2uk76Ov#I7soXx>8PAo
zAn9_^R3YgkB#HEG#>jS`@k2<=E|GLxMrt6b{MV8ealdXN{FU?9l%$H!NfO!FtR&um
zkoZrRNa78ItmJ(8r3>liZV<IM5>Ni~CB%O-=L3YC0{5KZVC!I6`}loeXuJ6eLSCC?
zX#Y{;VO#`BCglB@5?I*`LsRZ)hewx~KgagHpXkPT#0<w;Lt@YH1Hq($^Gy=XH}35Q
zCil+-T(91`MW#VShRyiANWhkI>38pJItaq`!O=xH+(4=jNgjm2gPXAFg{}L*%RV{+
z{sk_ESZ~K3cm9{rub3O<x46G;rT2W>>c8<7bI+VT2zU_iAmBm3gMbGC4+0(pJP3FY
z@F3tpz=MDX0S^Km1Uv|M5bz-2LBNB62LTTP9t1oHco6U);6cEHfCm8&0v-fB2zU_i
zAmBm3gMbGC4+0(pJP3FY@F3tpz=MDX0S^Km1Uv|M5bz-2LBNB62LTTP9t1oHco6U)
L;6dR3I|Tk0Jh)GT

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/pmdefaults/pmdefaults.ico b/pd/portmidi/pm_java/pmdefaults/pmdefaults.ico
new file mode 100644
index 0000000000000000000000000000000000000000..801a7062aa76c5ee8a3bc8090191a8f74c76f835
GIT binary patch
literal 99678
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

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/pmdefaults/portmusic_logo.png b/pd/portmidi/pm_java/pmdefaults/portmusic_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..17a063a6ab93ce6976acf0de8fad8c30f23e7394
GIT binary patch
literal 753
zcmV<N0uKF&P)<h;3K|Lk000e1NJLTq003A30018d0{{R3R2KTu00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyFi=cXMa<01
ziHV7^v9XMd(PwMS*x2bA8Z|~pv?nT=b%gO%RaLvY<bja+005Z)00960{{hm`J^%m$
zM@d9MRCwCVmWz_4APhx$CA<Xw|8MsusI89OU9;0uyHtrt<KgBeGGqELHPe^dHh$QC
z4mKn`nNNeQb=uok;LK^s`2lv$y7G>zs>>TI)OFA&*bc|zi<H@Dy|Y?S+#4|Wm?Js`
z8#inj#aPQ^T(QK%V6Rfhmg0=<*t+zIx7``g`%^HhA)EyasRiBv1|JQ}F2g#RDHs)m
zZ_VmdCu<2Cm!}@H-nuGwb}(s}R)lI#MRJ8{$rhE>DEU#Qhkd3v=|kwN$IzhQLP!rW
z1R_{tWV$$lc$u3S6s@}HD{$lqCJA}i`Es|0MHTju_%SONuZkzXJWZZzU9>D_@juEQ
zQ1hmwi+KvpU8-2S?|;PS!n}e5Wb@yg70m9{CoLtse;}Vcgan-O=fP_sPcTKaK<D+|
z*D*p2L;84u`4(@%A#raHaBbSo<k-A)tq#I(7jX6d2Ao+>pc8md0;obEKzPgh)S@SV
z!w3SFNx6oX;Oag)f|c9T89V^ST_oa$2Z^CZj0jiLHFEiu5Q|t5WVJtlr{JDXV2@=g
z8ZXLY-K_9)lN}seBsc-ExHRexM%KiK2Y2__>r#w0fDK%e?sQO$cm!NG;}wjYaSBTg
zS8&DF_h7FU?cgD?MS$r9PMi;4^vPo>D`-hAY~WatJlRl_i!>quBX}4uU?e4K4i%iY
zlySNNOLgIm`B-Q2HZVAnSzVGyz|hc6$y@dV^Xp$}s&p9FbM4Y~$sAq}p}pQdd{)H#
j|NJNP55T|F{s=Gt?@5G_w9tJQ00000NkvXXu0mjfb!S&6

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_java/pmdefaults/readme-win32.txt b/pd/portmidi/pm_java/pmdefaults/readme-win32.txt
new file mode 100644
index 000000000..4aa1c60d9
--- /dev/null
+++ b/pd/portmidi/pm_java/pmdefaults/readme-win32.txt
@@ -0,0 +1,11 @@
+README.txt
+Roger B. Dannenberg
+1 Jan 2009
+
+This directory contains files that implement:
+
+pmdefaults -- a program to set PortMidi default input/output devices
+
+You can copy and rename this *whole directory* to move the application
+to a convenient place. The application to run is pmdefaults.exe.
+
diff --git a/pd/portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h b/pd/portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h
new file mode 100644
index 000000000..2208be601
--- /dev/null
+++ b/pd/portmidi/pm_java/pmjni/jportmidi_JportMidiApi.h
@@ -0,0 +1,293 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class jportmidi_JPortMidiApi */
+
+#ifndef _Included_jportmidi_JPortMidiApi
+#define _Included_jportmidi_JPortMidiApi
+#ifdef __cplusplus
+extern "C" {
+#endif
+#undef jportmidi_JPortMidiApi_PM_FILT_ACTIVE
+#define jportmidi_JPortMidiApi_PM_FILT_ACTIVE 16384L
+#undef jportmidi_JPortMidiApi_PM_FILT_SYSEX
+#define jportmidi_JPortMidiApi_PM_FILT_SYSEX 1L
+#undef jportmidi_JPortMidiApi_PM_FILT_CLOCK
+#define jportmidi_JPortMidiApi_PM_FILT_CLOCK 256L
+#undef jportmidi_JPortMidiApi_PM_FILT_PLAY
+#define jportmidi_JPortMidiApi_PM_FILT_PLAY 7168L
+#undef jportmidi_JPortMidiApi_PM_FILT_TICK
+#define jportmidi_JPortMidiApi_PM_FILT_TICK 512L
+#undef jportmidi_JPortMidiApi_PM_FILT_FD
+#define jportmidi_JPortMidiApi_PM_FILT_FD 8192L
+#undef jportmidi_JPortMidiApi_PM_FILT_UNDEFINED
+#define jportmidi_JPortMidiApi_PM_FILT_UNDEFINED 8192L
+#undef jportmidi_JPortMidiApi_PM_FILT_RESET
+#define jportmidi_JPortMidiApi_PM_FILT_RESET 32768L
+#undef jportmidi_JPortMidiApi_PM_FILT_REALTIME
+#define jportmidi_JPortMidiApi_PM_FILT_REALTIME 16641L
+#undef jportmidi_JPortMidiApi_PM_FILT_NOTE
+#define jportmidi_JPortMidiApi_PM_FILT_NOTE 50331648L
+#undef jportmidi_JPortMidiApi_PM_FILT_CHANNEL_AFTERTOUCH
+#define jportmidi_JPortMidiApi_PM_FILT_CHANNEL_AFTERTOUCH 536870912L
+#undef jportmidi_JPortMidiApi_PM_FILT_POLY_AFTERTOUCH
+#define jportmidi_JPortMidiApi_PM_FILT_POLY_AFTERTOUCH 67108864L
+#undef jportmidi_JPortMidiApi_PM_FILT_AFTERTOUCH
+#define jportmidi_JPortMidiApi_PM_FILT_AFTERTOUCH 603979776L
+#undef jportmidi_JPortMidiApi_PM_FILT_PROGRAM
+#define jportmidi_JPortMidiApi_PM_FILT_PROGRAM 268435456L
+#undef jportmidi_JPortMidiApi_PM_FILT_CONTROL
+#define jportmidi_JPortMidiApi_PM_FILT_CONTROL 134217728L
+#undef jportmidi_JPortMidiApi_PM_FILT_PITCHBEND
+#define jportmidi_JPortMidiApi_PM_FILT_PITCHBEND 1073741824L
+#undef jportmidi_JPortMidiApi_PM_FILT_MTC
+#define jportmidi_JPortMidiApi_PM_FILT_MTC 2L
+#undef jportmidi_JPortMidiApi_PM_FILT_SONG_POSITION
+#define jportmidi_JPortMidiApi_PM_FILT_SONG_POSITION 4L
+#undef jportmidi_JPortMidiApi_PM_FILT_SONG_SELECT
+#define jportmidi_JPortMidiApi_PM_FILT_SONG_SELECT 8L
+#undef jportmidi_JPortMidiApi_PM_FILT_TUNE
+#define jportmidi_JPortMidiApi_PM_FILT_TUNE 64L
+#undef jportmidi_JPortMidiApi_PM_FILT_SYSTEMCOMMON
+#define jportmidi_JPortMidiApi_PM_FILT_SYSTEMCOMMON 78L
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_Initialize
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Initialize
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_Terminate
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Terminate
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_HasHostError
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1HasHostError
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetErrorText
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetErrorText
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetHostErrorText
+ * Signature: ()Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetHostErrorText
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_CountDevices
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1CountDevices
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetDefaultInputDeviceID
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultInputDeviceID
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetDefaultOutputDeviceID
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultOutputDeviceID
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetDeviceInterf
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInterf
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetDeviceName
+ * Signature: (I)Ljava/lang/String;
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceName
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetDeviceInput
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInput
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_GetDeviceOutput
+ * Signature: (I)Z
+ */
+JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceOutput
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_OpenInput
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;ILjava/lang/String;I)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenInput
+  (JNIEnv *, jclass, jobject, jint, jstring, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_OpenOutput
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;ILjava/lang/String;II)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenOutput
+  (JNIEnv *, jclass, jobject, jint, jstring, jint, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_SetFilter
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;I)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetFilter
+  (JNIEnv *, jclass, jobject, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_SetChannelMask
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;I)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetChannelMask
+  (JNIEnv *, jclass, jobject, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_Abort
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Abort
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_Close
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Close
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_Read
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;Ljportmidi/JPortMidiApi/PmEvent;)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Read
+  (JNIEnv *, jclass, jobject, jobject);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_Poll
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Poll
+  (JNIEnv *, jclass, jobject);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_Write
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;Ljportmidi/JPortMidiApi/PmEvent;)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Write
+  (JNIEnv *, jclass, jobject, jobject);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_WriteShort
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;II)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteShort
+  (JNIEnv *, jclass, jobject, jint, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pm_WriteSysEx
+ * Signature: (Ljportmidi/JPortMidiApi/PortMidiStream;I[B)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteSysEx
+  (JNIEnv *, jclass, jobject, jint, jbyteArray);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pt_TimeStart
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStart
+  (JNIEnv *, jclass, jint);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pt_TimeStop
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStop
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pt_Time
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1Time
+  (JNIEnv *, jclass);
+
+/*
+ * Class:     jportmidi_JPortMidiApi
+ * Method:    Pt_TimeStarted
+ * Signature: ()Z
+ */
+JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStarted
+  (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+/* Header for class jportmidi_JPortMidiApi_PmEvent */
+
+#ifndef _Included_jportmidi_JPortMidiApi_PmEvent
+#define _Included_jportmidi_JPortMidiApi_PmEvent
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
+/* Header for class jportmidi_JPortMidiApi_PortMidiStream */
+
+#ifndef _Included_jportmidi_JPortMidiApi_PortMidiStream
+#define _Included_jportmidi_JPortMidiApi_PortMidiStream
+#ifdef __cplusplus
+extern "C" {
+#endif
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/pd/portmidi/pm_java/pmjni/pmjni-VC8.vcproj b/pd/portmidi/pm_java/pmjni/pmjni-VC8.vcproj
new file mode 100644
index 000000000..b7b2e2db3
--- /dev/null
+++ b/pd/portmidi/pm_java/pmjni/pmjni-VC8.vcproj
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="pmjni"
+	ProjectGUID="{7AA255C8-48BF-40AC-97BA-F7E7BA4DDAA8}"
+	RootNamespace="pmjni"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(SolutionDir)\pm_common&quot;;&quot;$(SolutionDir)\porttime&quot;;&quot;$(ProjectDir)&quot;;&quot;E:\Program Files\Java\jdk1.5.0_14\include&quot;;&quot;E:\Program Files\Java\jdk1.5.0_14\include\win32&quot;"
+				PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;PMJNI_EXPORTS"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="2"
+			CharacterSet="2"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalIncludeDirectories="&quot;$(SolutionDir)\pm_common&quot;;&quot;$(SolutionDir)\porttime&quot;;&quot;$(ProjectDir)&quot;;&quot;E:\Program Files\Java\jdk1.5.0_14\include&quot;;&quot;E:\Program Files\Java\jdk1.5.0_14\include\win32&quot;"
+				PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;PMJNI_EXPORTS"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalDependencies="winmm.lib"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="2"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\pmjni.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pm_common\pmutil.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pm_win\pmwin.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pm_win\pmwinmm.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\pm_common\portmidi.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\porttime\porttime.c"
+				>
+			</File>
+			<File
+				RelativePath="..\..\porttime\ptwinmm.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_java/pmjni/pmjni.c b/pd/portmidi/pm_java/pmjni/pmjni.c
new file mode 100644
index 000000000..95e51dda4
--- /dev/null
+++ b/pd/portmidi/pm_java/pmjni/pmjni.c
@@ -0,0 +1,354 @@
+#include "portmidi.h"
+#include "porttime.h"
+#include "jportmidi_JportMidiApi.h"
+#include <stdio.h>
+
+// these macros assume JNIEnv *env is declared and valid:
+//
+#define CLASS(c, obj) jclass c = (*env)->GetObjectClass(env, obj)
+#define ADDRESS_FID(fid, c) \
+    jfieldID fid = (*env)->GetFieldID(env, c, "address", "J")
+// Uses Java Long (64-bit) to make sure there is room to store a 
+// pointer. Cast this to a C long (either 32 or 64 bit) to match
+// the size of a pointer. Finally cast int to pointer. All this
+// is supposed to avoid C compiler warnings and (worse) losing
+// address bits.
+#define PMSTREAM(obj, fid) ((PmStream *) (long) (*env)->GetLongField(env, obj, fid))
+// Cast stream to long to convert integer to pointer, then expand
+// integer to 64-bit jlong. This avoids compiler warnings.
+#define SET_PMSTREAM(obj, fid, stream) \
+    (*env)->SetLongField(env, obj, fid, (jlong) (long) stream)
+
+
+/*
+ * Method:    Pm_Initialize
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Initialize
+  (JNIEnv *env, jclass cl)
+{
+    return Pm_Initialize();
+}
+
+
+/*
+ * Method:    Pm_Terminate
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Terminate
+  (JNIEnv *env, jclass cl)
+{
+    return Pm_Terminate();
+}
+
+
+/*
+ * Method:    Pm_HasHostError
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1HasHostError
+  (JNIEnv *env, jclass cl, jobject jstream)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    return Pm_HasHostError(PMSTREAM(jstream, fid));
+}
+
+
+/*
+ * Method:    Pm_GetErrorText
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetErrorText
+  (JNIEnv *env, jclass cl, jint i)
+{
+    return (*env)->NewStringUTF(env, Pm_GetErrorText(i));
+}
+
+
+/*
+ * Method:    Pm_GetHostErrorText
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetHostErrorText
+  (JNIEnv *env, jclass cl)
+{
+    char msg[PM_HOST_ERROR_MSG_LEN];
+    Pm_GetHostErrorText(msg, PM_HOST_ERROR_MSG_LEN);
+    return (*env)->NewStringUTF(env, msg);
+}
+
+
+/*
+ * Method:    Pm_CountDevices
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1CountDevices
+  (JNIEnv *env, jclass cl)
+{
+    return Pm_CountDevices();
+}
+
+
+/*
+ * Method:    Pm_GetDefaultInputDeviceID
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultInputDeviceID
+  (JNIEnv *env, jclass cl)
+{
+    return Pm_GetDefaultInputDeviceID();
+}
+
+
+/*
+ * Method:    Pm_GetDefaultOutputDeviceID
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDefaultOutputDeviceID
+  (JNIEnv *env, jclass cl)
+{
+    return Pm_GetDefaultOutputDeviceID();
+}
+
+
+/*
+ * Method:    Pm_GetDeviceInterf
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInterf
+  (JNIEnv *env, jclass cl, jint i)
+{
+    const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+    if (!info) return NULL;
+    return (*env)->NewStringUTF(env, info->interf);
+}
+
+
+/*
+ * Method:    Pm_GetDeviceName
+ */
+JNIEXPORT jstring JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceName
+  (JNIEnv *env, jclass cl, jint i)
+{
+    const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+    if (!info) return NULL;
+    return (*env)->NewStringUTF(env, info->name);
+}
+
+
+/*
+ * Method:    Pm_GetDeviceInput
+ */
+JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceInput
+  (JNIEnv *env, jclass cl, jint i)
+{
+    const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+    if (!info) return (jboolean) 0;
+    return (jboolean) info->input;
+}
+
+
+/*
+ * Method:    Pm_GetDeviceOutput
+ */
+JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pm_1GetDeviceOutput
+  (JNIEnv *env, jclass cl, jint i)
+{
+    const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+    if (!info) return (jboolean) 0;
+    return (jboolean) info->output;
+}
+
+
+/*
+ * Method:    Pm_OpenInput
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenInput
+  (JNIEnv *env, jclass cl, 
+   jobject jstream, jint index, jstring extras, jint bufsiz)
+{
+    PmError rslt;
+    PortMidiStream *stream;
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    rslt = Pm_OpenInput(&stream, index, NULL, bufsiz, NULL, NULL);
+    SET_PMSTREAM(jstream, fid, stream);
+    return rslt;
+}
+
+
+/*
+ * Method:    Pm_OpenOutput
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1OpenOutput
+  (JNIEnv *env, jclass cl, jobject jstream, jint index, jstring extras,
+   jint bufsiz, jint latency)
+{
+    PmError rslt;
+    PortMidiStream *stream;
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    rslt = Pm_OpenOutput(&stream, index, NULL, bufsiz, NULL, NULL, latency);
+    SET_PMSTREAM(jstream, fid, stream);
+    return rslt;
+}
+
+
+/*
+ * Method:    Pm_SetFilter
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetFilter
+  (JNIEnv *env, jclass cl, jobject jstream, jint filters)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    return Pm_SetFilter(PMSTREAM(jstream, fid), filters);
+}
+
+
+/*
+ * Method:    Pm_SetChannelMask
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1SetChannelMask
+  (JNIEnv *env, jclass cl, jobject jstream, jint mask)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    return Pm_SetChannelMask(PMSTREAM(jstream, fid), mask);
+}
+
+
+/*
+ * Method:    Pm_Abort
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Abort
+  (JNIEnv *env, jclass cl, jobject jstream)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    return Pm_Abort(PMSTREAM(jstream, fid));
+}
+
+
+/*
+ * Method:    Pm_Close
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Close
+  (JNIEnv *env, jclass cl, jobject jstream)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    return Pm_Close(PMSTREAM(jstream, fid));
+}
+
+
+/*
+ * Method:    Pm_Read
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Read
+  (JNIEnv *env, jclass cl, jobject jstream, jobject jpmevent)
+{
+    CLASS(jstream_class, jstream);
+    ADDRESS_FID(address_fid, jstream_class);
+    jclass jpmevent_class = (*env)->GetObjectClass(env, jpmevent);
+    jfieldID message_fid = 
+            (*env)->GetFieldID(env, jpmevent_class, "message", "I");
+    jfieldID timestamp_fid = 
+            (*env)->GetFieldID(env, jpmevent_class, "timestamp", "I");
+    PmEvent buffer;
+    PmError rslt = Pm_Read(PMSTREAM(jstream, address_fid), &buffer, 1);
+    (*env)->SetIntField(env, jpmevent, message_fid, buffer.message);
+    (*env)->SetIntField(env, jpmevent, timestamp_fid, buffer.timestamp);
+    return rslt;
+}
+
+
+/*
+ * Method:    Pm_Poll
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Poll
+        (JNIEnv *env, jclass cl, jobject jstream)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    return Pm_Poll(PMSTREAM(jstream, fid));
+}
+
+
+/*
+ * Method:    Pm_Write
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1Write
+        (JNIEnv *env, jclass cl, jobject jstream, jobject jpmevent)
+{
+    CLASS(jstream_class, jstream);
+    ADDRESS_FID(address_fid, jstream_class);
+    jclass jpmevent_class = (*env)->GetObjectClass(env, jpmevent);
+    jfieldID message_fid = 
+            (*env)->GetFieldID(env, jpmevent_class, "message", "I");
+    jfieldID timestamp_fid = 
+            (*env)->GetFieldID(env, jpmevent_class, "timestamp", "I");
+    // note that we call WriteShort because it's simpler than constructing
+    // a buffer and passing it to Pm_Write
+    return Pm_WriteShort(PMSTREAM(jstream, address_fid),
+            (*env)->GetIntField(env, jpmevent, timestamp_fid),
+            (*env)->GetIntField(env, jpmevent, message_fid));
+}
+
+
+/*
+ * Method:    Pm_WriteShort
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteShort
+  (JNIEnv *env, jclass cl, jobject jstream, jint when, jint msg)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    return Pm_WriteShort(PMSTREAM(jstream, fid), when, msg);
+}
+
+
+/*
+ * Method:    Pm_WriteSysEx
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pm_1WriteSysEx
+  (JNIEnv *env, jclass cl, jobject jstream, jint when, jbyteArray jmsg)
+{
+    CLASS(c, jstream);
+    ADDRESS_FID(fid, c);
+    jbyte *bytes = (*env)->GetByteArrayElements(env, jmsg, 0);
+    PmError rslt = Pm_WriteSysEx(PMSTREAM(jstream, fid), when, 
+                                 (unsigned char *) bytes);
+    (*env)->ReleaseByteArrayElements(env, jmsg, bytes, 0);
+    return rslt;
+}
+
+/*
+ * Method:    Pt_TimeStart
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStart
+        (JNIEnv *env, jclass c, jint resolution)
+{
+    return Pt_Start(resolution, NULL, NULL);
+}
+
+/*
+ * Method:    Pt_TimeStop
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStop
+        (JNIEnv *env, jclass c)
+ {
+     return Pt_Stop();
+ }
+
+/*
+ * Method:    Pt_Time
+ */
+JNIEXPORT jint JNICALL Java_jportmidi_JPortMidiApi_Pt_1Time
+        (JNIEnv *env, jclass c)
+ {
+     return Pt_Time();
+ }
+
+/*
+ * Method:    Pt_TimeStarted
+ */
+JNIEXPORT jboolean JNICALL Java_jportmidi_JPortMidiApi_Pt_1TimeStarted
+        (JNIEnv *env, jclass c)
+{
+    return Pt_Started();
+}
+
+
diff --git a/pd/portmidi/pm_java/pmjni/pmjni.rc b/pd/portmidi/pm_java/pmjni/pmjni.rc
new file mode 100644
index 000000000..1b7522b7a
--- /dev/null
+++ b/pd/portmidi/pm_java/pmjni/pmjni.rc
@@ -0,0 +1,63 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
diff --git a/pd/portmidi/pm_java/setup/pmdefaults-setup.exe b/pd/portmidi/pm_java/setup/pmdefaults-setup.exe
new file mode 100644
index 0000000000000000000000000000000000000000..78ef52c3e440708affcc7e8908cb51f8a9ad5faf
GIT binary patch
literal 485013
zcmd3PeSB2K)&Je>CfOtlSs);<5_M4^fPsht3w0rE3`k%hgjYeSBnITI$-RIzfsIR^
zax-pCTWx)+?W6Uj7HN$y)qqqtSx7(;LqG{HN<_4?T+|2=HW1n0_sqQ;0tJ81U%$_f
z580VJbLPyMGiT16IWu=|&H|4VBT14)N|quKNvcMi{<);SdgP~mO_H?TE_EIFR>DU&
zRhy=LbW>&J?80TmscVW>KUB12W$H?$SWf+Uerl1jDpgsvG`}cy?y^-Gqq-zI?)oXT
z|1a}AZb_PEvPyjxPZ}Dnw^@3kEXfqpNBS*N{((l~-@HHK$Bw@$dUEM;FphHL@MpoF
z_*aEQ;{h?R0CZ6f3R8JKrbp<vL6STPlxUKgp4IERoJp~3rFDX6k)+<89{;z|%o&r>
za!HbZgCC-c+S<_w#PKgxk{*~marQ)tPeWrw+X?3Plydo>OOgVUa&tvOc2@)e5tSt3
z*_HnSBbF^)A}=x8jJ8XO_`3?u1q>tP6~$E4N<Yo?gMTmTL8srqh$0=I-~o6cg!w8s
z7pfakl)qy2gOc=?Kxpvv<xZFo)!~YZ0H*f^`b7FO{;mOcMM;-|@5mLY0^gM>|NlKD
z#udv&%T_&fHD%-NE|Ijdo2x@Cb`Eh#TL-(OgZS%>csD6Yav-#173JsmkkS#gO<A=}
zp0cV~Ub5=J{9e*DBqe9A$X~KbSrbjQONA((khx+>aq;X&*5uoz6&=shm#ob1E_v~s
zB=YHbN^y7Tm5vn8lA`=ovRw)QvyNlRs)E%$q%a^*xn6PZvR{IpDxIFf{Gw%YaaPgl
zmC4d>Bv~gfD_*liey}h_YQbZdoP4=(_0ow;mlow07k87!4|Pe2dK%T<Lt2jnTh_At
z6;YU;5;3Cd<otpq$_hDq$*QF*@{76)&LmCGUl%2!hv1WqcoR*EpFQK}%kv+U{Vpkp
zzsR7}{Vs_GB7^!HVQ(W$F+#f$+KkX@goBOHVuX?rwm0bb!baF?ge^vR+6cK3o;1Q{
zBRpn=O-6Xo2wevL@kTht2=6e$bR%pq;P)EgZX?`jgaISmVT9F2_?8HB=e##&r%Uqv
zOj5=bPL7kL<r04-5{a<g<$ILajKJcB!RPM)fND~^P?*ukYRv)v<QfaRQSGh9P4Zn>
zs+?wV%&ztVY^5rxE=!OFa_6u!tcm{#sLBHdBGyawSlJwl>anpNs$HFDQ72hcbCn4N
zna9GcYN9&R!g>-xs{I8Dg1K|%=FMc^t0@k~*&>Nq98?pa)j1aCWSLghV9vEUdnqX_
z$loEtGp%YI%e0xYELtzt%RI;8tW~-o^N%8v(%EsRrqr@e*)E=k#7zOkk`Ykj7A(3S
zgg{29PT$TjYhoAKDByFp6s=(U%u_9ln;*70KU%lg*`oAglPo4wKglvA)8>2BCMlCq
z$!OryoGg(QS<L%b*!-x?`LPl^q}Zn2$`XM=wK>w-)Dnk<bx&(hb8YM(3N>7c5~10u
zOq!MTb6!-+GXnE<iYh@5JHlGZF43$}8vh;znysvkY=^S1CD;&Zv1PfbP)e1gIq1Le
zk6=Ssb(TluTiAi>@!%t0q1Vx)Q1VhAGqZ;u1{m6HrdCrOdF(LyjMryky0J^kEdpO5
z#q;<}9VnH7S68e9&dK9m0I6o5Q@UL34@d%kJ6HR2qgugjQLk_3X?2>zf<CUF?687^
zk&H%lw!?-Vw>ZqZ)X5Gz8$hklW}?fBt<G=PWwAPQrp<|*bxx=3uohcX{6-UPYb_{b
zGuk?bf7dRgFtI+iH?Yve0j^h2la7~NB*e;J*<^<Wwc33p4x1$Rp+`2`VO8yj+0sB3
zo=9AMJ5vPVx{S0Mbh8F_s_ZMNB@!{GILc}x$>^99^oV9y370w;zt*%}1{OA2G-o_p
zY-Jm4=8H~kZ4CR&S>mv+wJ`iTFRs0jIsisO+QqrK{8pm@go>!t64{+)mjvZId^>G|
zA{uivR+`vZ^bk?-wV>b*2h+?3b>OFJV!P51Otct8jOievzoXd9`a7K8700k2K|=pR
znob1)f4|t7gJhR<5D@r}adU=+|1}L<Evt{*4Kn^M1;FV=l9u6o)V6UL+s6)JQ1R`M
zNT?mz!?MIc%IX+MKSS@FMupmFjD*jWJs7F={5)7d;5V_oV&r}a0N;3rq`ZU#=z=)@
zx-M98#<0=(L9%6YunVl^nk2<g4RWlr*sA<MKXXB1@~_F(@<Srop)?H9Oe;i<AEo*+
za3whdSvEh!0s3PRQ9&Z3yiTbkGSo+W5DAyXL46gf?7+tA_>&!I?&yT3R}@Whc>%=#
z3RFi>!a${EvxlwDACz&#$k7b#Is_Viq1WXbBgumS$XtS*A`(?ic5w8M7r@bY15;Ft
zY5ajjtW8aE_@5Tt^`+>pI~?W~2oQSC`FZg|_A&c3?EsMcH|hd);7m33Fkb|u>^_I3
z{HQ#zgX*A=SMb56(lEjxMQGKTmqLuw%RWT}k>-sDHKc^{*y)VMyuy8bT+-6WsHN)7
zh5f0Hv2BrvcfzOuWKmAklSUv(*K3bcOpx*z#nw}S^@tUQF#@0qkA)+V7i6URCeW`W
z-(GD-f3TkPl(9#h_E@WHf(aT=IbD4pk}!Lz(hG%%)y4M2uPGz2VE+82s=e?NkaZOq
zuK{^5G$cimw6C5c=tb0qT<-*mOUaw|p(bk4TYaM~x(Y!75a{(t&l5o&eg{%A0)k>g
z=XH;&>`beN4?;HUXDF?&brz^d(^;^QVuA$<Vq)Gd56CxQ#_V~A!2ap^j$|dY^odx|
zC;4_-3*QBSSCMuApgObnBNhy0_CPC-E?h)&yEB#;q$JQZ+>@d-duLnA+DKt-9Eu6o
zUK5HDEh0_6xm6p0XEuPEsLp1sOj2W1j|H=SG*ZcW65X1eO|?2}isH>vZ3ud??qwG!
zUE#XwrmiCk1oIX9z!$Rk`<r|h>?O(d=6Ff+vi<ydDEEay-vvvFjeStI2a3w8TGgb5
z!ANX-5Og;9PGRaTJApB^5m6KDN(f9n7=d>AF4#)C`aX!kED*5p4=@k~ro_vb%(cGM
zORz}{JjnQhswiutU)h*nAWRZFQuZa)krrgTGrFCxg|3T4^NH){OeQ&%u-I6UHLcFM
z#v09yLoWX#;LV@2V23@znld8H{5Rxz<)lG`*&H@EG4m@iN)L7xdZiF0SeBJieYad<
z^)#OJIVw!b4-kYClf%PSwhQ`<HTZ3JrR_(PH(FRY?Gmd?+vN+}O1qPKP0O{KNwXX$
zC7g_uL*SJ^%fj~|femw%e?u0Nmd-v&`xKbh5awNG8tW(sYpk|7(VucxS_9ugIb`De
z?OY^MWim7~=z^gUX2;cHD+`+IeB7q4vBJC|=}Bjw)|}F1hfS_*h4E+?f~4M8*{UwI
zsQt8YkmpQ`+5_h20*f{b<;F`=Nf$9oB!JJbH*R>Iq*5IqWU~`AaRvQ6VFhxf4K6)m
zE4As;1sRgGwC5?)w>yUQTthfwo~M8WVw;#>UZ6*eP=XS6F7#&$Yw?eFyz~-l=g;Zt
z+X@9K2IBZ1z=8W5*7Bo*WwThkv#B^y;2IKdy2rxe&G<QMmK`={U9pwh!LevEtjumc
zZrM%(#gkCGZ?y#l1O@CKiy)!O<lAYdW|7^h8?6WZnHIhV3V^0ZIf?D$b9JszpT$rw
z2z!r!VWP9We$1Xh{&D95w_a61$Dh$y!(%2$AZJ}KU4gRMkF}OJDpo^<p2El^I>?r6
zd7qg7FJcoL@Bn@>y(a&96Pm&X3Y&VvqtyKiElA%OW;dvltj>Y5MIER;Xh=dAh?WXM
zSQD5x9S{9=s^T*Oq0PYKRHThB4pAgusbnj)nicel>Xt-znMPADu}`CeSs(qrZ!M<L
zG~l&qXz-mR%ehuon^p(GhrT#q{`9x}0kB!?&dxXoDzOYw7B2)e^%4tS7n`uYp!dO0
zlI$i!{VP3q8YUu0V<HjO9-0l^lyNSvF#9H&4eng3-g=eFop%O(7L50O+3ve&D~)~E
zhDMfMq*0Ol#P5i4!ScW(W?#Tu6NYq>GS&GnKf*p>HRd366P6>+2Bq&6kfRAQBchi4
zS1VQ_XUoq4N1eImQVbJQqB{AVRyImi!b}OPSRCOuoz<{e)+qBpyTL!rVj3V6=C9##
z3Q=D=2T%uZoH|5=(ec#9EFO(fqW8!E(IW?b0_j*F)kdLbcAyVXX~)bv0}Q*0RinSB
zIq5ZUNc)Pp+c5y<&tF8chklqTdI6R925HgG7|8#OX$+mwOCRf25MS?Zry#V1I%ZE^
z;kP$a$BbO6-gH%M@57R3XCXf9#&f|KC0R#79>mZO_=$88b4yU@WenIMvBacvL6hue
zq}-UtN>hvVd@bfLuWS@gq~dSm2dcN$>9Jms{%53{vF78I7?%1}g2hdcg`E?KkIJwi
zf}bYA=duaZ38V!##PWd<Yawqu1nz{&sRH}C+8DXNG3#BhMD<+~^0d2rR+Bb_)%(_4
zpe)FUjPtFxcIZR_(*rFqAK@0z!VX{{I$^mzPu%U?OF!KFAHDR%chpM>z|ql5!hSH;
z*Jpfn@xHIyeU~8Y?~$-G?)%2VO0i_184goQJ!^7aN`A~od56+Ig^}tM?N-LXjvW#!
zM9ShY#ZvnX;Y;>ULw6$E6wMwYvf24i24yszGsloW08KKbICwgw0(#O`(vN+H8Q0=~
z=2y)uND6;9@<Ld2ODKDug1WSNSh5y_hKIyVfi<Y5B$teSqaMWcs-vT!w}8{r%%h1^
zV_*<IlaLkWmIje*B(<oDRAmbN1-0=!Xb%u|oCwYV-)muF(OSmlaKZvF?uw-*+ydYO
zYSf1D0!*=j477n7)D`@zV`!ou-KLE*V;zVV!Z^@IL@kM%bW0+LS%8)^LH@N+SaJeY
z8|ngeiy5QOb;*qSC!%8xvq^Ng_29R+cGi8rMT5u^er(WnEaCgU0rj7PgyR_en*wsI
zx~N^d3$peCtuVsq5N=^obc8uuN@G|Z{2SfbZmfZVd^mM&kY9rEtEHDUhl=X18p{_?
zlT0cY_*cjz?Bv8qPfHa%oB`PsL?0{%$-zoJ-73-*q{oD2iF9Ty-y@GIZ<Kp`)ZLMu
zHUP{=$v&!p837nLxR7C#)CeQ_%TdDaQ5*ECsKmcf0(#5WypeUW1Y8o(nioX&XIFS9
z-0G4ZN#ZwS_%JUfT`6P%h7b4d-gD^V-5>2c+VsKUBga1b{CM*hutPkvX7Vspim#d=
zrTGiyf!dLQ(2M9q!tdcnko$zdL(g;Os&(oib@$lw8+*vN*R;i~AA0sBwZ`{_`Rt4L
zFAn<UuI>Jk<aWyF_M?%5S;JS4e5hMm=lFJVzngpbo>P%X@;mO9hXdma%<eM?Mm83(
zyjD}gvH*uvBYw`*pvDeE>)2O|f|b>c)R?<&ApYjgnW^rp`8Gzrm04Nev4<7+bh#(X
zwy*^jJdE)LtiD?7bmfE=hY{(kwJi31ZI<t>u#QVq(x=NkDzZ)Erka#N(`9Q#cFee`
zF-qT&<g;8n=CEQP^P^&`3E68jJDy_3{D}0*xoZ99kJQ~Y&GrIyx4NI&mvHt~bw4$H
z%l*O1Wj%?^*iBaJBvnMupHLfgJ5R0iKpJL_42(Sb{@%TNZ520Wc`v5Q;eSfri^FBN
z_hOnn$$QZuPug@;9_7{2y%!VK4ILX^cdOsxH3dvffZudf`TEjFvb{V|VxK?qoH~ju
zw=B(azG*|t!Xck)-(K1UDDA!X(QC;9UjD*+aY>QctEK7~*Cu(jZr+Qr>l(blL?GW&
z(`<>N{zQ8<c=XF>4iC3O8bLDyf6>o}*qW0g_f&M9sP`=Fvyn#=8s+}XMafp@)ON)_
zwPL(=)c8d2zmF@HDax75%}wAHbDa*(^)MIbpF<z3^=j?BS6Mb68JLOH+?2Dg&KFEm
z8}1kUQG+a<&1qn3PeaDz`NL4?YE$_+MdQ^dO}q!D;HE~|3WJ#kFklf+>{x`_f|YoV
z<zFHL_`vCSW_`mHnb{sh6aM%0p2cv{>qV6UkDW<l8)Pe5gT=%T7>FeQbAQJkZH5Br
zlKf8cOkaIW!I{_O#QALDY1o=y-5;E13JlrJ?z^X*+ICfGwBulqaO4)Sz6A+K<r@lM
zr3H%Z9wu=bZ}XtN4lj&+v5;9KOIn0)b>yCrk&3=-&9U-xa?b+xGhbay#q_u_hv}iK
zY2OUxd!4+`wB8kcHSM2L#eH4lM)gnhetBH^b_#N{Vn|ekPfPuH<k69PbX+}99Jriw
zVq`>bG<`lrIjdtjzByh?^wq_6^t@OP>U4lmwg!D8rwCHwbW(a_(8teE&gkVoU!e7?
z=!+bUccSGRq9tyDse!1OH8VHjX&u=J$B%s}>#O!rms#s4TD}<y!(gIqshYTO{(@kr
z7pdmSj$zDY<F{gU!#{#f2r_$QRv7K^PLLq1rnUCv@YXDs3O~N^O;`Shuc5S}d6L}A
z<C!&kc?@z7Qtl(jh0|hQaQ1Q&(i$i&U!+;)1*7;9Jdt8c=m=@Q%4k}=CpWa4QqXr$
zvwhe^lXq-Lwt2^DiY@uQz{H7~*;f;5s_CfPw6;Gf){jwWre52As_pz&k;r_g*iLZW
zKp|1nNco45zu<DcJ)-0vpv>)*Ige<d+4{W85(jOVT)q{*Wn=aMf_Zwg>=gNSo{n+D
zdfI4GXiVP301#;`4<v6YLktr(e3D?NT1#kHw#}DqiNVN*ZMBs3%LUm08N6Kb6h1P{
zCC%cws1~l}!MqU@M5GERB=tG^Wvi|1eoOs5mX`qM3&!$~fHm@EXcqd7zXV{mS%7s@
zD@8cb8oD2ZRU;ev<%%}kfHb`g@{PQR)>l2P2KDWLChC>M(D#TkS8vE5yrp8Th@F-B
zvHo8qsJmDk2L1%~yRl*UE~pyk46fV&J;mk<RRyJ=;F`pD!%C5RvyIqxDvu}!eRbA*
zl{#95g~)LWic+p%WN%E*H1*7O^yh!0r3G;;1sofBv=gU@eb_wl6uvT?*yT7Gi7XWS
z`U}MMDt>`k2LS~%R?dJi@}MPj3##U80sEiqN(U!&c0ngoXQACjzsm#JR7?FN%dio~
zvU#}`6390Y(*4w=Xt}(R-xMwd(9(z^EmiX+4BoEm6Q{Fb?@Z5oq)m%CdVA!+$i|U-
zw0rat{480IS5~H+q()L39|xvc-1VgaVui?+wUO*$(d$al%owX9zgf!irKL}};nakz
zE|{G+cMha#_VRe_G!f{mP|FE@ETNk8dY7f&?JkMSG2nnMD2b{rIFoF?2P{7ta?yoN
zvhsnj>39r;Xk-Ac-=)kxpLJKeU2ZPw<7wAGWaVF>RSVcs$FPwBIAyK#7V$@cCUPP;
zvXM>GeedAkQZ**Bzt%?ch??REeT0Q2wE;E@%d@hW3BSc*hmFJJ`zHLFB0c4~!{L()
z$oCEZ6*^I#kS$Nw9*F%#ByzWp#}wTur)#q&K(YcGyU7!VV<8@pM`X)AvSo)hZupP%
zc)O2JkZ;w7RqfV>R_)Plt@=p2x$0x>Mm+beI;8cg+NX7|YSOw^9nli24r_5$AHWZD
zco4SlBsR;&=b;6QYAv1hf$}gPMXN1H3ia3cbn36lFOULfdzn+HiQE*H*;^iPSwr*(
z9<@o=5q88`u8ps!QP@SIQMgA2SHLAp^<k=bW(x7<^)8Y$G7zkU7I(KUWr<*&YDH)E
zMvZErRgK+@^$Pe1{)#9-#_m?E3_=(aWC^~uh-@8eQhtCZSIn#YO;ilOdkSb(V^dHs
zZ)>J#e?+lv#xE^=tM7mWQlI4dCNu<Hl2n>leFEwHCeTx8MQpi?r&4>#`D4@bVv(oW
za-XLH9{vHL9q>5Fqj|BSOFB@qSjyY9M;W}7^&AE)%<@=}KTW(4IUfEvN<qb#f-IJb
z20i?jddgwwGCM4nKJ_Suf>Xm&O1h|1!-~~EDa?O33sKLVqXyMaSq}k)k^Uc09|Ou4
zv`kly>b6HCHbSR{CvNQPnZ+ix^LZ!%8)_EIZs#Rf9xa%snNh>9sM;P^Rk(>N1b>i~
zKsYvB7jgkXVx6*~zsDCy;2A_iz`8*7wAZ`BP{>l9#V%nfAnXuofcmi-=6gw2+SGdJ
zkp#6?ZQ&ZqsZBggQ;Ji!HD;+Nwh;mz1Tf|^m=cMT_}h4(I4HYm*0@CZ1{mOSH<;dX
z(zvN+ITl8`#wSghr0!oZWPfNgK~p;dGPFv25T)*>wNvt@&ruV!zhLPj?QBlF>B883
z@(p|+s#IIp^mf+6bb-$XSwszg2g%H=wrQMjEFlcf0)x{o-{-W-T|G0oACC*>h5m>d
z3GV@QpND0(o3q;aacUIISG9@V+s;kY(hH&rb8b671FzdW^#W``b7V%C-vd~xQ2ih@
zo{D`CnnF#;oiod$9vB&5)1I``63slZeX4SXmjlG3*0IUYrl@Do#zge3X&?VHaNetg
z7R&>w=E&4A{~ii`!QzGU{EjCh%?3ZPeG;C8e)W(Ygt9R~sk+Y{G}=fY(nuiWLAfxi
zAvyzylv=dE2g`<Fn$_$uNzt9ChxJ&96-q7;3}^G&u@QIc)RKN<kCYA^a-e)qNuRNY
zH+D18jA!NTAVTXlvQhg=J*;UWDFI0fp?ct1l;_Y~tP2S1K8q-4v)X5r#*B=NJ+vVP
z%ZP{D)fUq!J{%%3Z)}qi!)|18{*>E6$dLV}T2q++6<#^;xR)A2&;1b(!Zk{JjD&V%
z1UR#q8CBilTOT$l1AH8-y9AHg%>ND#+dPP^YF5{@*ICjfZLr$FZv%B|y(nQ<FQA^W
z-<QOw-}AdgJ$xEee^gdS?#Zo~YNCq#a$+JYNsPm`GV5h(;!ySyOoSO5zol+9Xn_sg
zSP@q-$K(ws%6+_Ho1EqicacYX!(HWRRb*?2mV+c;n@Mfj7|%~Yi)z{G2fU3UcdJdl
zpq=-GZ8T%!SuH(J{X}gt-!~$LO&bx%W{*hZzlX@o*m!D@meP@@o)LO}#>N)G6fv+u
zt4OrO8Hlo-66yQz;n4|0<0ZiJv6AXqf~5uODZN!#$8<E$k9}27?p%82`;MZ_ZtSqs
z@qu85mZ4kG%OxZKAC%8o9s4Mwk^cyMl%L1qqUC>$eAEoAf+*6*;@nOy-$W%FuvZ`C
zi$J8%XCxm6olQs|f*P^26y&Lhh;4z=v_c{l6k0rUkU{<D5rlRDI*&-_HxuTt2Gex8
zG$&W&eg`|9@jNsrR%DW?Au>LtjQUO#R#qj4_J0eeRoO#(C?r>d{d}$D!VYd<-vw(?
z&$0`2!b9m%K#Ck96&eI<Lp(s){}Tv<SkJ8}@Qtw+_4CXsC>tZ0WbCXygB;BYc>V*~
z81o8z<E+KqSfXmhmZX}EUz?h33l@}(lT1n<xW}=CzO0!EzX_+Cf})~X9zGlB5(3HP
zv#E!{SK%*d0S8$d?Yb0{If2GmQ15P$B=n`=+Z?~U#lvq#Neq!#-VH^;#J&``Ti}#*
zhgBRna<{9QHm!F@p<Lc_*eF4I4x&p=7U7e_t|9F_z~u7hwey>h3w$3SD5y6}CV|Pi
zQ1_do-<!xZ>rFt^sW0eYRtdW_=zT%|>0H%)x`4&7!v)SJI8oiFc@@AyyTR##324y#
z0^dcep7AQk4!uShqK#;pn1?e0d4<Erk{z4AR895gwEzkGkbed=9sd45A)nw=kr)hp
zfSFQjp(VCSL9c|ZN+MO<5BRlN9mor|Stb4lfhDi-@vAD}-(CxS4Wu&|dRU;>shA5e
z!95nx``L<q4vogZgc|mpwinb}9GIM%w~>VL5TG$**1=0mx>Pk|Cr<3cg&rczEbx3K
zEDYLw7a{GHJIF?HStIZ$i9{SP5^2~Be}RDNV+n$Te3BXLoqOy!EH}&VvCoREu}0RU
zMAG?VheU6iGXg>WGU7o*W-^bhym3Qc9B9b4&7=bwGf{w`WgQw@fAfQU9Uipv5i-`R
z4xt6#eHw{m!%xT;6P`J&1>%xrQ?u;Qox@)Tgq)Nur)J9|LQ~M-YILS|dklWJk?~WX
z)qn6fm!#cB>8|YnkhW2#mP`o&J;4B+1;F|&$3_vP&OqSZkc|Tp{{SR}--}@8a%q;w
zpOx+5OF)$`97*1!Az6(p+hBPUq$HQWfXB#m%W^4lCtm~@SMsJkNE%*-pW>K|0BH;l
z@*dIi{*GiEbUO&Vq5}W#X=7j(09*iAkeyskE9#5@cB`j(cf?U<U)k)^z9UaVS}kF^
zoiND{AvOT9Y-N#lGg?99gQz!%KbGa^w3y{T@J~JwG|NswuVCE`DE2avF_!JVaEuaP
zpOs2{z?sS*vWk&apC$UCdKn1OLdFx{j~wl&e=|{}W~ZP}$snf=t9Mzw07W0G+4g!@
z?>_*Yn%!T`PF1rVepfc;*M9$e3`W{!t83F9xm!mp{?bPZ&)z(kj#-vnAj%bM#M2+k
z@vgzL3xeG9)eix6=wJxa+!-kK8bGfBh~^5Y41k^z<-7VW#H{P1BTZt#NUj3~V_>*F
z24L;{gfS3oxkXe0+avHoDxSR)$Y_`38@v-zApNG~#{!^1wkE;JQG?j?G#ZiuvJE3a
zjFU)%ruile7KMKCJfV2kQRR}h(UKyg@%;DR+Vssm?nT9C-c3jP^8`73eK!oc2H%O~
zir@DCnM(pd4Yw%Ycqfb`JW5Xp;3xnWrr-xtQ1^qNH>KKA>yoxp5+50Zq4F9!qng^l
z<Dhs%E^mhd;7P~mbP|y-DR%w|46?{*B8>m#0CIQXxh_`Z3Ubdk^$WPz1Uo5)(Kh-W
zV5Q&T7X0qPk~MwgsEj*C-+9-Vu@fg{PIhNu1BUcKPijf1UZ^omdLmXlR^t(Ry9GAG
z9CQOoh@9xVU|!dUFF_WoQx{tzb9#%(r2XGw60a@*r}%ex(7xYJ{ieOQoy0+VXFClt
zt%{Cjl&u%St&CvnQ_SmW`!daAbMD{R%jB`8ec+kNJ~;cL-q9KJ=V?bw**4)>o?rpX
zl$4p6{pbYoyan?OMDjaA!ufit_EY`~1St0r`(XPR@YmPo+HjLE<nqki1|CZMmnh4J
zgKx%GhSCMVpTORK;sN9Y=g$jf&^jbE3s1QjM=ScKeYhbB3#|Q|rkn-y*oO-zg+?Q~
zeLb)XmBeqwV~Eb=MVodb+&|82YiWWxJ7sgXh|3oA%+i~58&+i}^rm!2OK6ocZ$Y#n
zdqhJ*uff~Mx8MhUyjlL45k3<5*+G4=MCTe8fJO~_EUaZFyWrac_tBYuoZml%U09H|
zpViIeCcw{!S$63D#i0u7D%k%e*|K|rgtKJH{*B-RN$fy>%5RSj%d2*|q|f)%@L1U)
z<XE=p>EBM&(=AA_c#jTqZ<<62!ShW5PwAwqakLSR=KsWjbc?*Z6OOjv(c%9<t--_J
z20;t`^G1j&`sbx%g5uwEF)k5G((c%3?1I&Zxt_HdF;6hrh&fuj>oM=|pYEl{Qg^)9
zM~@AD_}l(^tS#oLR1tH%lezsC5wpK^kl!j|L;t<$H$y4rZB709pTjBk+{nM(|7AMG
zEbs5>_iL=7Bx%=(9e;WKF2r1G$32|%IW(ojRm&~)6;J`v&$sT<*8d&s^ZxRNcWyn@
zG}$FpZe2BM{eS%`+a<j<H}URXg@3yj`s16u`})-$nC^ORQ;KWJ%=w#Uxpu$Qr*hj%
zt6$1<jZ02#z3qt)_sw%{N_aB7e(c?4_qo1G+IHum_$Qvf-*tTYLza*BoZ0hp*Y9sG
zbGu4bx97Y5{LeLMul#-2pO(2kdHLhWl!5DO54c`Pd1hCySKs_@!o=psL*702Z2#RW
z6Sv&(^~SX4d%fL#(!+VTjrE^j(_Atseb4wWBfp<j@$X5${=Dr^7qtyrW@bKq`||tx
zwBOqJZsyuA_nsMY`=+v6CpRWm9+hr;@qa2O->@b85Brz9c3zk~|JkZg{IeBjmbwp~
zJ+FN+^_Ne5?Ed**o{B%#^t0-*S@pl^`tm=X>+|IcSvS~}vj0-n?#a$M`Pbi#b&jrn
z<D1;C7ERc-$jScv+XXMTK!eSG>G8Xkum!AX&?2?%=tJSNx4r+D-HSf+u6pJVsTDD^
z9@sfZX_^1Ys-Jfo{f`eGh0O?qmn^=D%&5gDoHsSiF)thp(o`s>0R*Jz5s+HrBVpG=
z<yB%OL20xfSBEzdTvAM3>>YYA8iBc>KK2-pkcAn08WEGkFTraowDk6;Q6sO0<)$lg
z@%T49b{Ltz0YEUc5_^|g7&h}FL(U_E=Iw_*#`__&jnHF+(~L0N2(67eoW%$wBWySF
z!$#O@ge^vR+6cK3o;1Q{BRpn=O-6Xo2pf!WuMzGx!ktDKFv1;1SZ#!F8DW(XZZ*PJ
zjPOMxe9j1;HNvNj@JS=AG{VP?aI+C^GD5ErmKfoBBb1GBjS;Re!a^flYJ?9M;TVID
z<BjkRBTP5KVMaLE2pvY4YJ~lbu(uJW7@=K+5ErS+O;U5^zgnc(kVNlbUH#4#+{gH5
zq95dvSSGmFKbXHpUbcD_C0_GimX43=x*A`cd*aVm7s-{^EQiGL*C_k+e3$e%{%r0U
ziaetrCx7MYqDNqZUGJY4IPA#0R{crtDXW0RT~xHX=z8S?*P!9xVErAm1eDiHv%vMr
zOZVvQCp=fTKhZsT+1g2uEXXffeO(^7exiJmd)AUw59R+P{obD_ZzK9=tj#YfSh0HD
zPw;T3f#X^{OmycgkqZS0*KLCZlL^Tb;rUM<Oj)&d$%<u5XRNty`N=;~KFLk&10R<y
z&A(nBZ2F1v3GOHZuHT0{f1-S%JC9y2CJtVge#?~WkAY<LfoQ*H^|DoR{&nRr`zLTv
zKMEX~ON#0JzU%#a{3md9ac8bx1yT6F$#cU`;IO+VKKLMBWSp~X^@=5=6n=u1-czs7
zlSH?t2pzg2|DpWr@^s!$l<(@!m6tsDaI|Bui{sg!z>z@wkc(EY$h^K>9Q%p#UEFh)
z6fIlwf7K7EFt6<BuxpL2?r!&bh{UQTD>~FH&igm958p6VQ(y9XyTF)Rj@?V)&(%F@
zFt$7LpP~Gz$j8JEKaB8g1$iGh*05Nr%h<yX@K$m()*%~xHD_)v9frbTEZU-gUymH$
zYR%aFYh%>?WA~hWSsq%kI6~)etlo>iTt|m-DmF&E5qgf$^LMFZF3L^GZwHg#J~X6Z
zA&y5?;xO=Xi4F_a!8N46OjNtwJ`Kd5v(WJ@GB>aYh{PZqv{aIEXJQq1kUs^o#Ifxd
z7Q``aq8;8(a<sx}c-gs{`#kNedH5yr85{mzEJpwe<f6^k;Hck56{H8w{DT&Xks-U)
zL*hKpr`QVl0O!8C$!R#pgR@=Y@RM=sD}qyB5uEG!@$8GfZ_U2%%s3-OKy>B{URiNy
z?8Ec`wm@Rf{6jHK9P*)h9$QKm)WbTi!{P+l7PVpF;`@oWb3L8tIKTh?%?%)j2C8CK
z!`b)aY|mvf&+q?n#ufQ49KQh$-6xIZ(g9wMQw&C*`gS(qg~b-%#eo}Q-yH~yY$qIv
z{n64oOMg6o`Ke&OBMxsIrTYKtxd^PuJ$x?~fxexCqjEt9;Bm5>cfqMZJ&h9h86jK3
z=UGiV2KDMbbB-M+3rE7A8dlw{5R$IgtxDYL4G)sLZoyWN8cxF*?_KCmq@NM#+`sse
zx~OHd`#W!VxDt!>BU`x_lzPMCltgt=7%98AYRA<@{9WoQZ+L`~h_tu1@&$lW7oAj<
z=9#lNooZOX7V#k;7RQV{>Mi|lxRN;JgJO$m|H#I(FaGMoXuK-*?3T+<=)lreI0R;4
zW0wyC`UUfu(j1zE7?6aA$~Sw%=|$tc;j!!PdiZFfm!~Jc9WVt^zj>>6a$YD6fN(iG
z-PU#8BknL;Wb>8;u}R%OD1!=s9orgo9N%0c&Ks~rVdo<2Iu8LVHvb);v$*89;eBxY
z>HFy}Y0M0lGz5Ro;BS-%u0Vt-2wRPG%8ULrAwB|mFC)Zu8yv(r%|rHc8${UKHd*fG
zZOfBy^tR1YPHZFnq1})Wc%<w3CLWK6s^Jr-Z;lHJcaUG%JyQ1wc`uABGJ9*|r*H0+
z5KvC}b9N8;p5>jyi$g`G;E)g2CYttFrK8+b<wDTgmaC{@9Z%8Za&ksstH882S*;~L
z?t%C)rBxd^a*qx$9{_6I*5tQ$Yu!bOY>|*~PW}vAn9iJ&>#)_Fb5aK$Ch{Oo=>epD
zDMru?wQb1v_aonvTy8^tz5ApUO%aU?-GzjAOj^u4l3Mqs<ZZi0zWYs+x6Lh&c{9e_
zmL+$8)9h`VE+={0a+1sUfkkgxs=K2!nm4v~?I7W-MV`_x`R$(1!o!3&8{8+in*req
zcV8P@os1X`b@<)Y>Y3!XKjtk-5W5<`QXPcm#5MvPQW$^wI!;%!*lBwHBKC6TGPl)3
z+e6zy;zqt7Dyq(6#u;1`q_YetGn3_5fAg#TJQkHuQYF&Lc3QBl=JD-p*SA7&#2v%!
zI5zqXj34^TFX7bqb`v^Rob6yuWf$o|Nv!@WhOju-;(v-@pb$RfgHhC=)nd>JEeM*R
zG`?qxtc7H^`~8$cj;W8}SHe~~jtx)oKShbC{i|lI0TYB8_%)(>!y)L<y>n-ZccR0~
zWAr_(x%_b*L2QM^p^=V8-TK}L?d{NRORMUJ8$GWuE;qX5<?B%fYU5p6LA<vE-SGZt
z{6L&M*#GeR-lt}zTmUUOE&kleQ!(hod*nDm3vR!29KO~l=*I*a!v2&19V0*!sTBaN
z=Z^z4(^qft)meNOyC{FwE9}1u6^_A=KQne4jgtR9-=^lZci=ouIG@sSvb=U*?MNcv
zEeMlNz@425_?mzVI{^<R;9nWQ^*o_730CFtj^%b2umgKKLL&K_pTm(C`X2MKrs<tW
zJS6`;b}n^~!F_oh>>G>SUe-kPX6)Gx{}>(g?y1*U{UjL4p9DI}-X^2a_I^6VSsJPC
zR_uE|k4f?`Pa7Q9VfyPZA9ui%63l-C=JjFQX;7ewOUV4oA1P_Xc3J@<Nu#7^uE5ks
z&nfS~ltGwiti68w_5ph4TU6{%(PCaAa-g0wor>kPRzHVK{?TVfGb#xpRfia6K)gs0
zuL9!raocayvlb!iFRw(=zCwit>pAqUG@;!}h1N#VzC{p2bcjz3h$@1Z9fc758>B<L
zNf3g6OU~1nQIh@c_U!@S;DvzKy3pfZdYpen@muuba!2u-JBo+5Hxc|0DsJ^dZrCx%
zuF_t}ksMLN)o+0sp`ExNT}nBvMox7{PBC&ir0PLrqv!Q9i-0W{dZww9ROvPrjk|RG
z0c9i(;mX^W-u}oV`ZKN1R^ngk(qXBO;2$0Z9NA?{R$h*;G2(=)uoFxn9tbZfxzvd{
zo*W~ObnLj5D?92$d|Yv{B=KCb@Pq{<$;sS}C*}n#Z41&)9y#m9j)k!OXuo~lj{rHv
zT69ge$*~E*9>e~NgR9KH$>BxP8~5?5bAW7^#CC4G8worIkMF)X7o(qkSlxEAwYk<P
z-mka`TYUUi=m}x(?E69NQ(=ZTM@Go8@4tcq%U#fUlRbrh#*jCvdji!hxA>oQYy}(e
z#{K{77uC~~3c?W7ZE|czU?Fvhq{sE7N(6CupL8G?h14hY)Ta@|s?R#;1}2nyj)2r1
zju-XESLo6IxWEbvZZeulE$6GDe4?cN&t=kD@&1UhqazOhg<inwyEH`{&iWSYIq;@^
z5RE>C_Ed?EC`|SM<z|54gaZE;ikIzt1-&i~LLe3YM&J)SyB4xRISvg)Jlp<+8nFtI
zvXHV1*`brz7^M8?XG6pCPw9!yb3~819|pJeLmhs+=J_cP9R~N0c0Ts5zp6`fqtJcP
zg3omnq{(E}yr?$BsPnKq8>Uvw4S#^HfyxGIUJ1k<!$JW#0C^e`gCUjn6I-rP>-<Hv
zSel6W{ffFBSJeIG<+}6QQR#AU!l<-g=Soi*mA;Ju7!0LcztX6#@5H7zAV@l!sI@EL
z=Q7R*ptb(IFluc*0|*$GqUqvYK7)oopt_ER7o#K;i$2Tb2tpWb=V{k!y=cC8=U_Fe
z$9NNK4J_O;j%ub%-^I9%Dg32FsMd=`mE^R1=B>j1*4LDA1G9a$2~Q9OFNp%}`LHH!
z2v<7bRf_|w4~sN=xwLJwE;Rx)B0%}H%Ye9C;%9h@y1ZGCUeL|Oa<E~lY@O;m)uSju
z>o4R>>+84ddIk031(`QYc-vqSkZG~}9>`{HXg*ph*0W5Co^YKXJ>i<GpK#67Pq>cH
zmb10IjuWmK@?F|J(G#wt^%Jgx#R=D5+U@!Y*Fki`b%1tLl{r{t30B1htKx!H@xdx<
zuqq)~l@zS91*^IQtGWiOdIl@`qo7AW-Kvud-a@{8JCD)i-l*oCq=PAWg@+bK`x$d9
zwLve_;H&-7cgk91l?R~p3B@ZeH=2RtJckrwi}p+3qbZUS|K3Yrt`_^=%Lv$`y>au8
z>gILs)3JV3Q^$9}+=R^wqpZ%|nxvM7>)h?J^xD$$m~H>9cMG|8c%hDT5RTZnkJY)G
zAx6ib7`AQIVaQ#<Ckq&Lv8_YiK1U1u?vuP0(jE+@V%%tOFc>CHrFc(LERXnDIx4;G
zS2{BC@A6+^f_#CLMt!U$;F25*C`RXWIdE2!s(!(ar}|hcew#%uonmiAjO4Uz=L#?k
z=TV-7Y|iGxq2w@iBtTu+Unqful<lO9U}YkHm*S6J#IoOpNXLHI-94sE&ze4QI`z!y
z{<OAtw^#Q7fVWM;p?kLthZag>t7DLY#lnVIv9M6xHcxdj@OVq@F-16%Wc5({XJh(f
zrR{hN?BsCTCq&U=yZ<fM=KHV%OH<+57qwgb%D<D}US#)PG|Bj}tV>9K-+j{Qwrz-c
zQ;MYgY49S*bv+i*@Eqt%j~PgL9e<9+`d<aYt%(7}jOAL;Tl%#mo2!Oz33Awnk>vMt
zPG&SZb8H(2`r3Xh>6^4?WB;o3EneIh<9d!vwk_umSEZlbqV*T6yGg(!_t|nHOkvN8
zW&u+0Dm}$-(ZU3o)F{Vg1h9{r7UWN$2404ria~^{;8m7mo5I&10Vv)|gEscHS&CvZ
z_Efnm7X3T<{k)S?w<OXV|BYH=Qe$ac)$sF2w7A5RvbkdCmfw2VF&tJHy#mY;2Np7?
zBn6ajKym2a3iB4{F(o`NC>$9$t?s+fy(o5jcd(FJ2$)#3N*kO3H-J3`$4zUp-!z{)
zTX8ItpMWmdGDYrkuhRM)nXOyiG;62Oh`xIBzf3^Esj_XN(#GE*(5cG#Ahyp3kYz0T
zNN_Z%VgQ-J+mfO4#vNW8Q*k)vGyk*CoCWK*k&RPf9`BNGoS8e`A;*s&DkpByY`hE7
zp@pV{9Si4Yo;Ze+M5D<t$JydoEP~IzxH#w->T<b;I`HF2MRaH?qJtenhq#7Qj$=6e
z3>}WNp$?=G;Lzdp<3QSQf*wxg5E)Jg=m$lH4oAjdJP#R+oFPJxUAiFS&Wpoh>)(43
zW)_Q2y2m2-Wiu=_p@CZW<ah3|CW)l@<acIRYeLEVaWp}m#sdg&6l}XL;jLJ7rnxz5
z5TZ}Z<N#ha{g4-6OcXG807u@uc=>BWWFy=X7bPXNU_y6kLtii4E=mg4GRZi8gwuCa
z<PR9_+D+clprrKDk0kV^8jm=Y7M%2(f;j&UKZfXI@u^t99I$o#ZL(wh&2lQF(mvj)
ze0SoTia5kAh$jI;Jj9H51}mDkj@v0WU}&7z{++8TE$`AG%-ECBSnq~nh(tE$g*WH5
zZXJJ%eCzmhdC>R~^04v4<P6{+4g4d=yXA4?^W{6oJLN1OIi$HJX^qYUc*pk0B=&(;
z?<?gIrAE!;+KxJR*rdI!SNNK!FlFob;UFnZc^(?pv=#U-YQI<WPK!cj6k=|kR<i*I
zv{ZL9#e=0HesUqkFdS6zNW(bk0c{X)y7@*Z6^;=UNXz3;#cEy?Q(B-~{EGlyi^D-q
z#R?5Dd<(VaHq>?tT5}ey`3|kQ5v}Qq);Q3bRJ0}++?ugPJIKi_*FMt8u0!IuEm~{E
zt={%DIo{hoTsb!C<Tm2d#4PX6(&aW9%(2@r0;JrEML~lYJ`{bpP}?kYRM1!2B+30s
zY@8OPk(?&woYp1cZes3ZPWQ<T-L;7o=1j0B>0Xi2ykTTjy07$@q$G9d8tuj{-qJ7*
zKLNrQHf>0L!+h?Hx80<~>BBdYb4+*^PWOdK!%9B`y^QxNV__F#uq9lU7Au4?3-{m+
zqE46X5Jz}RQVPm8#6djGu8hXIOtTcKMS-IuhSS-NWdS?*Q4_Yi;FS=vo#qZ7{(`T^
za^P_L(cvXfOihQM`K+}4nS%4~c4?xVa71V;c=wJgU;7_5Z>Q>?shHgJtBU3Tw|Gw`
z7sRHg7rZ)E(MAQfu+p%()cOcrH}aUX)P`xI)aHwHFTTxN;xvyg8dNvgX_jWJ?{Wzt
zC5>J8jW)2LKGQr>LJeBV`=ss+pm+jEm%oSYSHR|23u;a!7pUgVxp?^`j;{UMo%BKS
zrndl})c8pJ`6K6>d`BSotkjwmftW>n5lhLy_o*i*4#!0J*RmsTzTMoV_{<dOGCVcX
z6Kn%Dul4xK7TnoFkZHAY{E<7#3&91wwa+B&QTlD8CRa@EqPJMNv0|qqSs6G*IjxPY
zsIjDPxiTLK1b|?Qa*Eaar}Z$W)zrmHGrV`F%jZFO&8dMJE;7kz+?;7P8YJ{r9CdaJ
zsjp`amtJ`0=!wI_{|kg1{+82HrQ&DaNSYk$jSN>zS!^FiPvdl0MclYpnwAu67GH^!
z^GBTf<f#>Lj^pFqN@CV5E+cWCxq-V8Vn)Qlu3F5(3a%2da35BngfHfBGwDjp@w@Rd
z+1<|^Z!Y*-f~3UZK0?c9u-1r@l^34T6;zPsNz3?D`TTUOSu+~94jX4lEKWYsg{Cx^
z5l7tZleANMUPV`L8<E^bBv-@<$gWurHzt}J$}Y4*n2SzPUd;I;B<+UxXL^3rGUWAG
z#qvMGJ<ktgjm9nKJDK}=01Jlxwi~)tKf^)iHYPX1jtGeL8thJ3%Fd~lb+)3e%<4>B
zXDN!)tT^`<^zFvkal8{_vim%E{Q+w>+F`-l6F0*a{SFGgLK=3v+;iA)xf`q7b`TX|
z_rdp(zDqzm5fAPaanc%SgmfSNbQ~3vGa??o^>bm6^#C>#O5wr+t1zYDE)*6aLR$0b
zcgAEK#b$t-(@r-vkzrg?5N$pz*mFQH-h%2%lL;<j<L#(gOT{|J!#<oM&e;O&B5Gk+
zDiI7n0*DSH)dy_kZ5i+(8L5xflaUG&l`c#XKF++En{kr_T@f`G#aP%Ei7A<np1NJO
z3>&V@sK_!I(aG<UDVOn$^J2*z6_am_7|DIyz8_;sZ_Y$=A0zoJ`1YNaBrXg28pejX
z$$7DKFAHXCi+vGONxu&4-Mn;1QM_P@HVF#jXXTL%W1?+(6-8MSAs*x{xiK<Mxlw?p
zI4^FnS6FT|>W}qjnzT3;)G)1FeHWo<8J0?Qyazf8mtxY@n{|8@Si!jeev?xx$>`J+
zog53hsL?fymQ47|>AsU&L=!+hZRk0*(vMhu^zI7?>}8)e_1|o`7OWm|bt6g+0!Kak
z9(bnIVENGvH|W>-lqQSo1M6WJ6ylmOIG^j$t=$j>F8I31sSFz*xN(nC#y7z8FXXYX
zXvodf5W$pw#FP<uWmC&Ec>PPPPz0~PV!Jxty#ZBCC>i9O*x54IKgUFq-A1I;fe%y}
z<UoiRR5l)hd^)Q0Tg;wZE`xM^9}={{3nfUXr-cx$%5NpInl#hB=-w2+<wnmOo{0it
z>}ZgIe*-24FnC)aiS0rghwnjilk?bz(Jr103Zn0xU_1yvguXg_U|Dn!;N=C-L|ZYC
zZr%ud9)1$eV}dg-=X(gi<nb5_T@VcYVJFGB*o%OWSMnE76er4M%PV$;&duWr0Gd&8
z2PiUJ$xort;5EH^L;D$!aXy6v#LTlmt_R^_suLdeIil`)RCf!mHo&F<ucz@u_sM+9
zr(t;D>JoAH8rmZ6A^IM!b}V^&VI9%md*Nm!*89Cl>*gzMm#|p75q6FF;^rG7ajptG
zJQ0cB3#rL}2qqp@4$=Un@p)NC>``;Xg<Yf|URvJ4n;f7A8IPkS803r|c@J=bM*N!~
z9~Zqru>|?U#J(o%ndF7}gG93_v%;J`EVU@y!Nje=O2u01h>5d;mzk))BXVW`w0F?J
z?}8tQ-Y}U#bu^%|&rv}KTJytt-~36Sy;w_V_2zZ*JyEOX0#Nt+@UP&zA&fslWZ{lU
z$fSoBJb1@Q%9#$-iw)G11nTDm>S(tM-j(g77aD0+0sGoX#ZyJ+Ix51eR*pgoG_1dz
z0Lc~j2C8Pe{ZG*|#J3)(wc&g=QmO7llClH4kd{m&EdmfG4fDO)31V$Kp9b&_@_sbP
zdjaslkSW@7dOs((Y$qKb$ELoh9eTyX*HFy|a9>*zHnpG$K$g%0g72M1244~76K?mF
zR>EcQGYm+&cQ*;L+7)r!bCr!e8|B^HDenwSSmX`!O&}jZjM5)K{R!wtWJD2sqyypR
zGd_o;3X_VNr(6VW?l84^e;83QB=1MNIvV>OsDkw9zPJ4tfx%F64fsSmJT%wnesY>Y
zX6JZ>U!07s*={`GA1aDq^HIvnb<gt5nvpeSnw#_=dMwQ1`Fp6yS(p4jL7^zOLb^mR
zN5_ZQd&3;s(rFG|xhl$}jH6;-j&_Ka6NUJlJBMe$Rg23M%Ii=m8U{avY!jh1x%>^J
z(dN05ObX{K41_mLp+6xJJ6J4-_LN>n`v@Vurj&y&N5sH;6t18NrvNLf*fe?AK#g~$
zXeV7+sF@=<tzu&yNiEo<@s`*ll6=Zn8je>IM20!yZl#LyT6rx{i=18}$4=FK4qhOy
zZZgWzY@gS{e<vvH=m{B3C&*z)4u&e;rvWGUMQ#<VREdi!Vt5eJr}J+PcI?N;C~;-`
zXs?u9I&+xY?!m!>c(i3PZ34rNveSDgtd>8xJzCDUvlUu&7H<O-_C0A}-MKo-^uwi>
zD4};p0;H)oDEII`3h>KXXCOexxV#h$9e)p`p6zJI1ms`~%ESMFBEe7%<$ec7idVFB
z-GQrQXmDd`*@CqU)tIv;N<!fSh!&RMhkp&%sE2d>3L7sWa)333UZh?&2ErID*G=SG
z-}X4*X+O!E5fJYUqZ4QPbHdx-LOMyq`!s3+$WP$?4(-m4ayzIT_($db3K*2@L*-5y
z<-{H-mD_@H+gp%IT{HkXLG*Q)pFk8M;YYVW@eUCxx;%!Y*O=sH8--?LSdpHdhA<e~
z@-NWAqy39vCf$=S=N0D{8JFefO__$%lFE{Y@{uJyjB{1_D>6onSh`{bJ&(XUCKL0f
z&A!h#_Lb^cg8ch%K#~q%(P6eF0&d#s2bZh>hAY7)=NCULuU>QCto-8DO3{P)Q7FQ!
zk7;m3a^MfPvDoX!G&uxhldkCvwNegq-aBT*S{o+bVZT669YZDz5}^;MEbYOFGf>bE
zxDM}MIN)s<!*$!Aqyk3+X#NNk7rR?ss>SY>4OfZb63kzr5KOp(sHpXA6r}fL??MGQ
zApqP|ji{$P>R6~BHPgQpFk#iQ6^l@>arEkl@qQ+ZHtQ_BV@8joB#93uf3GPU=Lx!2
z%(g_lr*0}b<2}_y{st9&_#5sAW%`LM*!rmAn*YWZ=_iV>b?!JDc^>@D!`}n=E5u*Y
z>`Z*%W%bG|91{$^`4$8L?*+YTgfAH3Ge-D3J-lYcNZbK@HiUx_c0Ql_fb5cv;V(sT
zNt5xn34hJ_t3+DtY^s?Bu7@)WTy|tqZ*;~<->yh>Q(67YtgvfZJ0|8MG;|*+jt*T+
zGtd_$7)E3%DSc^Vs*76Te3CFeGWJwg0+c`f8TvG*9h)#zD=&v^sPk-m=DVF{B`*MJ
z%1(vy2!=L5c?si#reM+c-9Rf*l{)428L9bnB080h<I%fq{OJbZCv%4E8uTH}N8gh*
z4VNBHzOXTox%f7KY}<Y-3P8pN0}PX0khYL;v$VL;9-?54%(UUapRh+@6GnIV-Xn?p
zesdn=Sy*r<&{-95uU9|;SLE2~GCY<ZnUjLMZXwHX?wegoJZkwlYN^Y#n!Kf$H#*&)
zMYjcGOUowFS{7r?yTM8}W)=*K86SfqjS&7nq7H0@#UuJCRZj;X1zjkD%m0m6F*5=c
zL1rnJUx)ZD$15112#-tYksfS#m`4x5;(nhLYXlpsbnFLni(WSrawfh=fQx8>K#*_@
zB;XBMX9O?Fxe!Nt;<1DL6uMZ@pqHZp0=!En@NSpE3v_VEJo;j$ej*8TI$2M1=YUIi
z?^*yWH+Ubl!dT;<fHGfrCF(NsAt=l&js?_3)R*Wcc1FLqw@DzufhJnJ2|UAq#|2uS
z1Oh>;nTKFV%@?Jqen<h;*DCTw$I#iZ=(-J`tRO)#XoK7kY;T=5qUBG3b>88C?1(cW
zW_}t*R}?p->6-s$uf6`+;jTEhyK)VEPUWZ1q(5!oAY50E&+Z*KCgXcSKaHpPC-C&@
zz++4!D}EZ+n00!)uB8Kau6Ie(kUtxLJq+D9IsZYUt*eVduf3-0z`yF@H5rG*N|f&p
z#dLKYV}9w9dd-gVE`RAHe6i@^S@}zFw!Lyr#<^|x?ZUKQx7`X9ubAY7{d{z)ulgG;
zW<Q^*e5;zWd^HwaSB%+2IgDEqg<R@g@0&0WMJ1&h|0f14?o6Ub{v)j`>C%-!>_9=;
zi3og^71n}`{mJh%vXrN&vKq~raey6}?!x-=sBYzAY|uH?18g6>R^mG*z7`ra(Y4{`
zoQqgxLQ}?;Eb^^vw~!Ob>25FeRHVdtFK{^DE`*c`u8P@lX4>xdUWh0|v9)BzMythJ
zij506-!k^#F7@QM``>6jfXL>Q8*5HkC;HmV3Wt+WGr54Tq)Hg_ILU{0qVCJ8?Ck4k
z6;zJUF@3A>;I`6L!fw1vZoO*j9V&+ug`m9|qcExtUn3ly)Zqd2C$1jA>O(l<vAQC4
z>kC_y6r7q9dr=)}v2w3%z0r}F2}r*Aqo2c5I2C+{X|)}mUWsqR*mt_aSHa~H+|2}s
zU5Yv=>TcK>CWHEGjnbM$+Dr>#NawF35p(^ORoMx}ai~?XmtoH>9P=pA0R}|q-f_CP
zA=6fuX}^ZLh8`k=+#=>7QUjNzF!kpohN<|h+k>l%ij*~SzL=Bdkjf%63TJnY{sVPx
zuuHfA>L9uQK|BsX&$02LATydY6K_sKOTPeEL+x*(-l?09yJ$!U;%g!JbWLn2+9b%<
z**6~ZDo;Y2@Jg!%bkWy3q&6thhiw*CY}2pj-Vpm9P4xcU{+J5^a2%^beCLKVe~Mb%
z+n?DVrrsn{a~21&y%YXp$AJIUH=*!A1@L2hME-Z}r|+Azk$B^D1v>>-;oZIsy(OiK
zZ-Wir<v>e^02MpVvU)q4@I{p-_6f^M@lTHH4^La-tMJq=P8qVew^>WOXzK4Mk8G@=
z`9QdzF3;^^u1ykCeD6rEMH{5g_Iv|SW47<Lt+`WEx=~Y_-_Ym%|7|<a<ZJ$OmB7Y>
zE*S=0)mb;+QHp2i!Sx%U2RGsyV6&$!$eGw#3yL|slZW8%z@&Rpw(mrg44^l~aA=3;
z`VpG>h1o<(oKMFF03U!RbgVPpGK!pr2n0h@F)*VJ8@;dMK>dneu3R!M6?PJdWRu$e
z@?jSV)J6y5t%SP<2<S+Q=;zxy%65|WrI>E65cbr;gO(1#kvI$Y03IGY!>&LN_oD<7
z>V4=>L#SW-I|(&}N%%2I1edbR2QY0%zn$UXn}kP7&3r(}Jydj)KeJG!jmS7JeY~lU
zKeuojz2pa3Mz5=J_|}YKsl#`qfL7P*SZhL}4(h5$K>5P4a-x2~qZJCqpNU2CcA}U+
z^*8AJSQsWYy7eZ-L*GV0ww~#QqXWbxiZ79fvqNR{2^k!lTbo!NPsLvbHYPi);<Et7
zOXb^Ogx(DCTCRT+2=^57SK%6fKl{-Ka0Oy4FNFtAEndp*eZV};VMR?W_W@prdg?N}
zM86QA?>BHrI_)>K=+hM0-Gd-gy0my7?SdmUsH_Vrt9OS7qc3q0GcKlS^{|hji-DOB
zf=&P<a3iy+Xp|hI*{X$#J%h2X-3*NjOPvnjz*6V1)W-uk|8_r!#d3EJV6dWh)}iqv
zMf_h#=#aZ%0HsB-3}Fn08lkkVwAFi|#5BkqN&eFO)Pg0j+n4I1BGtLN;15^+>9!d(
zo7tIZQEtP>D~j#p#E<lXVq!^Vn?t?VLa*2;N%fh%X^B}C!R|qih`Az0XvIo;*C-<}
z2ihBsTQe;A+}`TFwtDn9{$-p4cb-9n-3#4X^M$pdA!&b>?@}y2=2dc%v?|KOZ$FbX
z6g~j-4a3c1Y#t0~2U}y4)AwuUZ=9d6i%mQ0`^bdd0Ek?1ubM9@pHC+IjWu5r&QIBy
z8R*#t-1e=`r(AW7jqNgY6+4prjuqc7s5zCC{MvqJu5GPT&9!c$dz_Nrv8R1d(-vD`
zvX;RFCiMM4G2K<8pRUTa)ts;<)nZnvdC+PlfB%qN>yTU<3f5eREf`{t7Q;sb_!}gL
zof?WpQYj(w!e<VB9Ktn%Oh4St?r^}g>FKxJ&pr{pL-Wz;=3x0b)}&}?h$wcT*@I*A
zX|;M&1h1e%GKjI<STn&e7Dv}h2lyxBlW(}1oF{-a=A-!H$-V>4N#QI&lziE-2}8R3
z0&5Xv{FcS+5I+LC%}0}Pu{m8Egs+3>{t<MJ=$p;BMLk*|`R!qjnjhoY0pC|9b0gc;
z;BeG5Tg?G;ow=4Bij}Yx$eE6=$+=6uSw~oUvtH3J{-YwzYE=0$nt6E-M%?-&E;#=g
zioiM47p}~GHO*#mb{W-)8|UeJDcU4|W(?-eUOL>stKnkFFU-Bj^#!b2PruIs64^ds
zqVi=T*)EniXsfR+7W<AQ<dDpYL~q*{MIDbgLew@~oo6jdiny%ange(${(%w`@L@hm
zw0LXI<Ei+EvM*>)M782T$<ax;d?xwrQS8IanlH?g4t#A|WAk0Kl$`dhhZ2piciE^i
z@!7yi(l=#0OVD#*x|-9f=Hbn$cKFV)KaYEj^5CsKjVFC4DBF7A#8jLN)Sm#BZ4n90
zfWQ?>dB-S(2Y<~S6q!GndB)Ju5Tr~TueuMCKYFT5&1s-qPqv!3S7Z%S-Md9rx|*|7
zWc63`@a_#t;h5kK$^!f^2QyEqnzu=$J5={(?2)K>kBi3?wVYZYko1N=$nlbGYxkAz
zjVRc^5B&|g&sVww$9nvE)xcfv-a#Bd*@}tNHoL0<cqzI38A{4)ua@9g#D%XJjpm$V
z2byE=gtAxNZ>f1zc%OsSsP3m(UX?TNt>PP4&eH|;Cdm?USNYse$1r!5)BRRaNN@*p
zR$haecaYkD1`VVWl{+(zvb-HQlavt=j$yx`nvc3j9+XO)nqltB(2r2uzS1Y*H4q{Z
z`UcNb7`$r5sV9GmNzHp&OUD71I;VR_k=aZf3RGBPJS-<LZ?k1A%X@lrOvHUU;(q!b
zXXy?F2P`5vd(lKu!D;x=i)x{?l2MA~?5LQW7}@OB@U1!^nKmx6IY*<z0;;=G&3m$Q
zl`Q8p4(=uUnut5@(`NVXTj<2**2|RBCkZ=Ko<UPkkmYT~?dRr3j2?H3xz_&_^%Vd7
z0*$Za@*3hfE*Hx=280=nx44@RG~<#m?Cj@hX<+{ab1eqC-{KO*V^?%V6&K@6?hqfE
z$a|6Hyy(o?Q4|NZn&=6yqP<vQ>$W-PRlS~yoLBj4U@x_>t5J2a{><D@SLA4$tvaWe
zdndSA46pu9Vgxd5<D%Td&?$}2I2vli5cXY6EVcSHvv`Nlr^SW-g+v`OzClAxjP*ja
z_$654*~#U1A%11<)0EqcTx$LAsP)(8P;4^+zGDEs2S8uxPB=?+p=c7M#Fxg411(zY
zHW(2SoJ0R16lnN=w1--rr){>Q<t%3>_?PVK0gZ&FhmsI#v#+GMiU^@^xj`SsGIx`9
z`<3~-DZgt+{y}V%yBiouegn&CQgaTfN)tZ4B>ElZMQkBXyRw|EoIwOs_g-{oX?!(x
zxfWY3n$e_x$Ky&2IvCkq0HgD=Fm8ZsDGU??HBgSxQTqKPV~}`DDG1(+0+3m$ra5jq
znKODXJ%A+MjOCE(e$H3=oTX$P%Xw~p+Y~kDS%&}0bH1-lzI`zVzD8!((!p3{<~@g!
zjp$(=ee45JDrvPW?^$2q5<db=<`#SlG4EM@RQqb%`G3Q24%ye?&A3FbC6+$ks(&i#
z6}^NRRb?p&^=_O&0PjnE?!7TiWhZP*uvH3uM=j0Uk(Rg9nYVYXmF4U;<?Mtd<ldn|
zQm^W6TMR}o)C=`)%9yD5V(@qBacBiY6^QX%^e#ppR6_D&gWGilnzKorno0^cZ?o!g
zKt-yL3}!+>o870?NyA9tx_7D*)1fNWqC3Q6lR9w>DPQ#U)bXNhgX(cnS<C^1YOm_a
z#$$!Mdh^6-1Sxt*oth$Yy(%tK$GZ~1k1zQdD{i<cX>OXCOWTD_z6+k{0hCb;epjFf
z@*1!ZLU|KQ+D<y#d@p7rocS%QC6#S%RJ+kd()ZfvihJR5t)!d!visM&vPs-^pQ^Dp
zrSD5(LTP7WgX*!0sI|=&wc`|L`MC{QaBAx-?RsAPy>MIT+l*6RAz{NI$rQ4SPhwF4
ze>9YJJ)Z_J8s9Da_kRTpT{^rSGZSvsVL9Qn-LQD;`C!0w7}qMQB_uZh9N#~A;j(cJ
z4+INz?J+wyUsl#c_ln%O1mKa05D^*>bnS`whY*@qJkzkEbXvDi2w#8*Q;e{;5%xF2
zR3mgC)cr@D`Ln1MryGbxIO++bG_UY$*1@HE{@}~#jdRJHevPtk48q#)Wo+VzZJ=Ig
z5^SYaXcWCFT+g3HOk3tWi_^XzrtQPJ1-TZ=t*8Ce4HP?zgAbOEhb0u>3U9XA$4A03
zv=QbQ4$}1?nS1g#<I#tF7GUvd1?|_Ye!KLzOX3rekmYp_N-kfI{H#zBemmIv4d?|e
z`tJ9Emx#yR{sK~r_Zz|E%ll!25EuS4<1$e68#&g==YHQFRMbLLeu`sUhagOlS@IFV
zgfjfybMd8H3!NW=85QJMqIdX>bLYJI@q2^;97+cXcn|c_hsqhTF5dPent)}w*d<%|
zA=)<-<mqejdqB_Z!u-@?5`feKtg4Dr@yYMYzNZnX9(+%{I6rmu&*de{R;4aUU6sEM
z*=rt2U0skWqv)EV)ejXdSvi8}#F_xcwJ+k?&;y>+-PkGE=0Xj;+aGale=H}q;j>r)
z7j8C&gDls2z7Zdcv^jCpcA4{I00L$@!N4N6tGmqjv@bqgl;TMH1aFXie+o{ROdC$#
zSRCH<*Z_$Y>tdtb&S8!s<KEO={K9*{fkR3-GWQ8LfgSglztcI=WZ32WL-04c{~_+F
z+5ySbSHjiSH_#Jvwsz`bT3QA}&gamp`e{SFqf=+bi66yMWx`?R3D50CJLNvKi4p1f
zG#==-zw=Ev64bTMY|{P@d)EO_RrSUnOHn{^Z^41$LfivUHliRX%bh4F7(*F~Bh%DU
z(Q;+(a%Ng)Wo2e&X_l5ba<9zHp1E6E`S1LHzkA<#T%Ujs#nOCF59i)<&-m8)&ic+d
zC5Bq*PhswbW3HL7C4u$64`VJyOm!~znmW@9Z2-<L1r3llI+^G-UkqiX82-Ej4;<bN
zlp^$VF|C8|`b&zBnK8p!aW<kt`t@^>%k~S;zRc>5Rw6>*hqFI{x0Ja@jh^BRvs!LF
zwcKJm1BLD)&L50UJgY5s`*HSpgno=kffoz~)=>(qkXztSh&U}!s0C8*D)Us#_r(_^
zI*BXsn79Lf^j?S_q4&n$6(nKeLF1QN%9lF)LXu7N=65V{P4wm~W@}(Ri0ciPlMS17
z<FWtm7BlSeE$4D?ZThQycBsC=Sq(!M<1?qmY*`a73<SY*=ec6jMz(H=TkGQnCMPJ*
zK^Z*~;*-*Gle}{3lj%CT5~oK3Pm;+ix-$30E=WdVLb6<bm$YDYAw803N_s$%r7gqm
zP4oi@A+8=g>oRS2d5Yu^0L!NBh<e&!z)ExkuGn?W!jy%9^%=;9Xf;6&+b`rS$wf=m
zyWC~1{!_+firPhw=axPZjRN5qI!nT#oX?B%(+{FdY*j~`WMsMtP+98_%tPR{oWFx7
zfaAgn2L8h9Mpok)(Hzw2zdFJsmu7@r+YqSlgnltbI8yzb#MG639pK^)-$^Kp#eA;6
zjM^x&u3;lE1Xu0JJWFJi+7N|_BGiW2(3Mo=KcE&G5gyJguxo=|F?}q)5YVRZw_ljC
z7}$SrX!oTKX1t_~Ce*<#c6B%WKns-%BWD}2$Eq{!EXG3QF(mw8CcePBgKG)O&JKMr
zz>CoT@s`q8NYy7|-ik90?<4<A92apjVn!I26K-v2s`vgAp8~O=;S#r{ZP%arfbSUO
zz~18w-e-Nw_cJh~0sWK>A{z$ikD}*`)?AWp)n_1ECJ?$X2!vv{@s|G7%Njb21AH?A
z&!}_=#}|O0Hb{PW*?wXCA`s)WN{sD*5xEG`#3M6h7(AVD3q63w19x&<l6EnDqK3Nb
z2LQnc{ZCjqK$nQM%wXeMeU5Tq>Mnf1#qFGy(7|`c0Ky<&nEG_)0x)Ml6@8`;RA`mS
zOt3o!W=JhTGgVFECJ+D>nGl(nl^LHlGSzq%68S`1N_G#9=3MVK`S-EGK{V~Rf>9|J
z%=Pn;>BUlbABXV)j`E&@ceNY08e|8|mGyf7BQ~XFmeOxmo@_F0gS%yI0WFkWpvwF?
z?lVIv91!2a_7!eiL7j?DY%^ENgZ??B#drf^p=qua9$tb%F0lz;(a|Iiv7Ds;=oH_<
zb6Cw?lRQ=KP*f)0m6mw_cJTC-g&HPyL~&ScQu#Iwm4w1P5dQWH+ZN;sGaDnRKM3Wk
zxlk_n1O`UBAm|DK?T<?1I@Ebt@@_2HGpjdG5~^GJ9Eb#XqtL@xlh!MR<4y!f+4c(&
zEYD!7sgz~Z+|yq)(!}d9@`K^LdTaVt3IVM*cIwCB!{(KU$kG<PM@D4UXQfb%XOZ(f
zdVjzHo370p5mTS8M9V6HgC5`Z(OF&WsKn>c${4?#A^sPP@2AGEl(-T)A5}^`y_w@U
zmUt2BJg95w$!Q2R;x`A0jFqB^g5;C)f#mHrimVe&BO{u?Q|bu2z<BqK?H1cDz*`L?
zOikHY#yeVV5MZp2SB;Z<d~{E>^{UYp&}Vw){PM~9Vm7}lJBrYp0ME+$8z?bCd7Z)6
z@&K{7e)sQa!Ic!8J%$8EPxK}_y37ta-pmm5z+;;QV}5ie#+kU%v4WCcdFy42rSF9H
z5F+jfif01V3%dYVP<YmXS9Tz2W2<!AOoxkQ_4|*4%KD2A`deHo(Zf{!^5DsrOHZ1M
z*tw;&H7#XEb?egaf9B=yo>gVyn8xU_=mU`6%fB%?U_14;DDPrl6!v9q7D0Jrk>l^~
zCZKe44sprb25a5u@W~8+K^IGA_zpDdMF(W~5!5W#K-BqD$R6rB7Ja^$c%e*Y$b<`%
z!67U>xJ`J<nR{9(FP#;6X@Zb445^zFSbjwZgk7wf6J5SXPPB862<nDqXF!z*{X9}(
zU(TofK6Qq^!y4APoRhd&Mt>OLk^1@g%gem@FH-+D-az296L(Yxe*nwG9c!p3Fs{3$
zTA;B0y)a+ah{QE`j7;2!zgRc9r8Z<ALG|L49V`z8fa3ZQFK~Hf6Q5@Uu0g%rgsPbP
zPmy1wVEtT&WiAw7e8WI}Pd1~0uSe*gMwmVb)KBEZ>`=5u%mv-czd_8-ndkHk@eL>R
ztclQXL{#OWD;|vXU><;@GAM}}zWqYti-vlxSVgJw&3arL4jCzDl+|{{G?Dj)FMUAy
z$~jJaknNJw$AIP}^4R{tP2?+sf8UDW&lt=+igJw6?7+1W&RpwbUD>fE=jM#ey6%b*
zkiG)Z{dQ>em`MF{JYptn(llUk@u>+|DtCrp4EQ~$f>l;;OqT|g$F94~(rgt<PQ2-i
zi)(JWW>tt9>XQ@X7=bG?^u3e}GOgdSYH=AB{>5xQ(?0`DY?ABRd!;(2U%}#I*(kJa
zG+9zp)Mx3%Y;c7Bb_E0%H3tW**L!_ldJ>0?6L$ot>&-(;CJt%DhEjiw!+IzXEaNSN
z%;V+@{noW?t{P)>GsO^+j1WVlEC%TZ<p#tfAZNS59%Kh)Q?-XZsZX5;9%Nw>LI28b
z{P~f8O8vsHUnvdIi4M!8*z$JPgRk(ddHmGc%7GvHMaWohjW!ew7;5C}`%q5wwN2+x
zhx9Hlp_1UF{GnDkP7DCsSEeJp(lPYU^$1{w(~TMG9f16bYY1P)KUglX%Id5<Du>qS
zE3>hzz)xO&?pYpaL6<QT8qe8IeCiT5*P^488-%`+jP0CZryuw~Tu98sn8;Tm>9e8m
zHtW7Nj6Kz`4hY-Cu+3A9gVM1%%Am9sG9Wz$ESB_0Y>8Fy947(+)M!4W?+h4M1Ry<Q
zh8trJt+9Cxn;#F<nPvQ}7ncD}2c%p<{k@ETa`sVqf2tn_vz8T#0#_P~u4p&v`?vUg
zXvy2OyUo52d?B`KZf_yCpsrabjkPxhMXR3<PiOsIGYj?iiu`=B+JzxA)lF$Mh8d2?
zdcRv><ZH9>XYn6G{BE}o5Lsn)8Sl+zR+r^FwC=LkQKR)Ez*KZvujN!AMjPhqCtn3y
zFl*G0A0U`7azg56G2T_}gQV>0>A%~Id@oI<g1e?)1Hqz<{E8Cvf1&>|Bl_erMPSmu
zWL77U`(}4Yo&N7Hl&o>S$H`?%>`@GeKDp^8lJ?S9g6M9#MaorRfc{P7Wngi6m7Omh
z2G1a5SC&et#c9z#pg)BYy-p{lmSQ;`kyl(o0C{&xNx=(9)Es>(>u)`W?@XLiL-~sX
z+*JX~=}}q#Ign$zhQ@SxNJqmH8tJHFjG6O|T1Mx}D$C|Th$O2LT@g(Uc7z;mzi=Au
z!fl*f@_a5Qy%1TSjoPUH7W@T*c|gkZWiTzMR3t+F3EvIXsyft3J0v$yvGOvKLmz$!
zA<9z&4B1*7P@mf&R0BD`=fE1q*$DYLLQYEQk3TCj=sb-$R3#4QWW<a0E*zVo;y@!^
zfn>N`FhYM2vlkoU^phbjdS{@si4{#hZ!Zy3PaDc@4*8Vm37JU@z#mBAk4U^C0P>gU
z`4R$dE#q^9-gz~G*}y{(Ba|@AWbX|8LRC3AKCW03*crG_zShOM;m*LL=&tTidgq&>
zD3<;hJRp5e1x0AX<|uEQhw+n-`hw>Ar2ZOIDTKABz7YZ;@E@=`EThEfkKI5W@n+{k
zWR_e;Uw`~J4b$gADXJ1&334^jn~5-OG_-l*pQuhBIN?uD1qMRp@~*Op-mD(j*{xQS
z11K;;pNVn*L~r7aT|Wl=k1AnQF1pNmYOmAjB;Gd9#oVvn8cnehsCS=CXcR4k`)|OV
z3n@^}<GtC3(q%T%-@2|08)_$dV(nZRIq3Vb&}H!$MCg0)5lond(u`a#eW57?SUDR=
z?+ck-Msn!=m*hrCEDI8na`V7#YKrIKZ@+K}8tkGT<1l?$L{>W>0Oq!FX-H~nnmRch
zpB|f(ioqfJ+)=(!A^vLr#97Dwd1x!|+I8Ks8@t8xKZ0)SyYT&?`OWar9dz;0^{wTj
z+gBGyVwTI<)*~x5Gbts(V1n+7UtFfEr{Skl>}Pchy`P^`$((JZ0k!s2^c-#APlM0#
zP7Zv|Hcf{g4}S*y1o+Rx9}52k_&m?~CHOqsdnSCI(LD=3&)S~N@11>gbKvvb>bdZF
z{`8CRd5-iv_&m#bK71ay!?SmI7V={FJdb!0e4cH*5I)ZrUT*ML82pt6|22cZ*5I#$
z&%=3MhmYTQI3Kuea1dS<SK>*W`OatJYX?WUa#aM&@Rw%KuI{ZontQZpfbVzvY0`(m
z@ESX8GMKuVN3&+;BsXS11@d5e?@Ms!kS<+A!@7lIA68^kbPU%_STFb^9?B14mfxdI
zfv5vI-Nt>l<Iw&f_T=opJuC`go+e>i5!Trxtl=S@Zh%Rc`%$dSp&ae6*fG>oldy&e
z3pELoX$B&EG~8^swQxJ(4#J&-y9W0+T={P>W`y&E3xewnHxzCx+!VNlaBJb-gZmWj
zAlx~)pW&>5i!)qJxW;h&1sVK-@U!8j!7YSa3&-DA@Xx?qgZmq<EO6(qE&KquD7e9J
znQ)Wfro%0TTMxGlZXetkxL@IPhfzM9E1V~sA6##^p>WT@&4ybGw*_t=+<Ca0aP~)Z
zy6SKZ;e6m?;D*6Xf}02T3fy~eU%(xOI}djgt{8Yy6^_4_@H@lxh8qg^EZkhU<#2Dq
z?SwlFr-%C!j=%EY6@P6FzUg{IKtggtW`ciuQf3l1?nTOF3tebJ+=x7aby)9BNWU{W
zbR=@XJq4rlNEDNlo|zSw9F(4r07wjPzR56MCuGWAK*KlX+4v<EcNX|3#-&H4g=HmY
zCi#uZWcsM&4CvyRxa2Iu8@4gZH)Fi0G?^GF5FsorJ}Wt)b6jeCaso$83=73=0BVD&
zzQfQs1rb7%Qk5vNph*I^eBmn!<dfzO0)zyn#)l6!M9}rfOpZ<+iB1P%b6bcpJT56C
z!FW79KC<M<%y<<P!#g8Kf^>$jqcSoRQlikxtMB|8HEI~&0<)7cBhu4&i2&aG(-Y!U
z5Q&n1a$1G~LtPfOb>{BfG&DMXY1zKIG%V0&W#)b}oWc(><E9Lj5}1v=WGGf{Lll&Z
zAxNH%2)f8o8IhUkNvT6Z6H*QD3g2=A<Kjoe4NJ-`sYk+)?pX=xqZD2R0u=lZ7CtN?
zwQIsCH307l8VJBwellPimG-1sPH0-%lUc)zbN)(ZzIW_a)$-0DZ%WxL)9{XrGa>Do
zkbLAbGC3h(7^0CuX@lhsR;Ggt+$KYLO9}T1Lj1@+rnp^da6QY2gaBo^5cjkgXp$>E
zs1Mj=r0$tz`p~qvc+>aLq=D&ihO{9W0e=3GsJroo%0g*VyTTc_mxAz^g!BxoQL2>3
zyJjyiC#*vPSR$oWk;jnK!D-re!>-{_e`7qd$~Qiqd&>+d^Qv`f7-hO!TuN?TRJIMX
zjQnb6P*!qsL|kT~Hr4I*hHt)^5XymBnF$#(A66NEkUzKD5U0S@5lQK3sVNDm&>gsk
z0;{)7fG_@8>FEf~jn1&!H3LF?{UeB@vTqG~?8$_9)N!Q_Av7p0JtZ#FQ0o*pf}j{A
z-x#23T?JsgsrA@Uq7vVvW-ImlcK+pG+oRIsQZtgF7z_ZQ0Lq;z1)*uFLzEIC5)z)&
zLKv1YBsMN76QC<PbXanNy2Y8S)anma2Gv^5j7VOCfGL^-OX0)fG6yAU^TzIP+!QiO
zjfONTcIvAteg1LD$?CfzM2rKyACaCg!dEvaEoD%qTnfh*wlri&TB>1>IY2bkHNNpf
zvHMw38b(#22qn@#LccRUI(s<YRquSw=Me(j0%}oGfa6f~1eGzV55}%sQ$#C0z9jrj
z@JqqR&|thXd_DZi@G*!TPmez}y`3_yt&DJvaXsO4jN2JLzYl<K2R|D=JmsgRE2jIS
zH1@?J{7?8eZhQP+@VCMLAN-^6|Av1JzJPCUZJORn$Mp+WlW;4PFw90bzO6|(0q3`f
ze8Lm+2rmIZ6{J+K4ftB=7(SE8<`Mo%KH(ek3E!4SIJ4cCPxzU9!ms5Mt}xdGPQE&m
zNrs=w4^jv8%qQG4k8sk#C!g?$e8LAHd{Q|pT_Vz+Qw!Ezs$`{G10j>|bKUXomiykJ
zo0ZPpFZVqjLgQ|4WsE<4zP0XW;4jmUUu3OwL^<+(`ciA%*P8Ermsw+<WA67Ic;Bdb
z&t7h=Td#R{Utz7|gr3YV3h$ws_gC=FlN;sto@=ai<23K~x-gxuE=1Q2&R-V}ALDB{
z)+<*yE9Ea}X`ly!jKAOd1&X3_Z~8S8Uw3OSX0>S`-o+__Z}@qN#a@j?T0<A{mVa}E
zyNhRAxQSo;2IN`hD397AwSkLR(a{5Gn~90d-NX}htBSsLstV@4v_oT&+1NGT^jCZP
zi|feyX9G?@<N17ykGR$+KnW+FjB_`9&qsGM#+lNnmN?L*t?~VCX|E&yr|Q-a>wx!{
zo!f|MO=_E+R_6U{-$1d>+e6q{SqpcE65>)Xze4Bn3vhqctBLR{TS}bm;a%wT5|;7q
zF5+S@f3dD@!+XjjyM7HN-JGU%?<xHlluuY@H?0jm1{FGwkc#ER)AeeKk#5x?H+joC
z<&lmw)5<30XMb3GL7(B*`}iw9-{~ZcrnIOhHV3s7PrBC>^V>HP<2>t#Ic*z=_<GgF
zQ%&nAaz7N`2G_4HRzkMNd)5^R_$JdY@@ga&A>Dg{*xl5%jS_!Nr>0_CNNc73yp6iE
zC#;<~)V+gJkCu5i5!*VqHl~;P+>6gug!^&SGp=wxa8l1G4LaVnzk7l0aY*we__{l^
zox;m=&{dQj@_u`lHsWZH4vM@{hF<Q_MC|F-PLZ#5zMkR?bQI-fIb>mGYj?;+Gw~|Y
zY30`(`cXemYgu3Dd-{rO=&H}VwiP{VRTh(=dp8C&7e67qPwgt=Mbv-l@hT;Xi~i8b
zA4C3z;XS-&MFm#s?I_nux77=C%a3ubEV@)LFA||EvKrSC-D*@6&jTmweb$S16`U0q
zo0lu4z(AjMV?>i$BA`k+A=?e+qpg?bl>Z9o+QX%i=v=M5*xI?3I2GAZT<+}$o#!XM
z1C8l=0soiUH53h<9mQARmyMMbc;hWz2OlngJ_jSb6u6dvmW8E1;bj>t?`pqbaml1T
zrcS!tCs1j_eloNJKcY;Qb3xNCkbn2mPMAX@#`zh#^Q+)i;%YuR)ZBdTHQxTN?SzM&
zjTlp-ia6W--rKXgmA?;d_8HVW(|Ged>xpTN3*VNT=2Ou7FQ9F7nNs3-r0*T&_i!#H
zz6AXXN`JrK^idr}a<vMgXBlS^QO;Qmcd0CvwQeX@G;<eCtZl@%=m*?y8Rn#?tbLC9
z9apoeu(q-h_UH!{x6+Bp4P5_`@+FKjJ>7(zwG~V|ZIn7+MrSR)fex16AGFVYYYud>
zM+qFZ1N<FO{@1}R{;~2Ue%Ja2iQOUX1cprL3l~klL*{L+|7}lyQ3vIpi18Db&`wUQ
zRrMdG!+wkbJW#&We|^h1iKE>+{$ntFg7K86y`8bV7d`5Vmzug6-_51ty~cY3?WA9Y
zGRE>g55aL&<#XTfHD7bnEkwWQ3FsynpM2<GV=b=q2{wkwZx6zMs$m^5vSF_N|EZ^+
zXl`RAe(LqllpkNMqKI;-D)xnS6rTmP5`C*w6rmMLqaTp>n5L*{5QcG-OR?gjeKA|n
z1iI*n%4NkNjP;AUoc!{8sdWRfJ6P2{>=We|?{48tE7Qv{9mjP{Cw*-mj3fJ1*P)Mp
zMLhNo`OJ8nPq>VJ*w6fixL1)E^SOfXy!xWApuf((Jkx#=+Ey704yaoVZN9gNgU>#2
zZ}c~Vs+JSS(8uI6`{M7Tug`w@a~Nx~zuT^&vtWNe7GZ562XoOs--IzJ`{UDF)fefF
zTtx`_v|3#F%>I5L^3K9M3iITAO0QZ~lrcy@^tTDi5sWieVVufw0sGn<ug*jNw|mV>
z;sca1wPiigp;8&89KLr)nVj?42pz@e!${u~c|MIgn^*bl(@zFY%x5gd_3ZPH0Z#8=
zyutFB{+VWVm9Y)`)T8l@<BbNT9mH!sO_jK_Q6AxE-+Mk_WBIE)d7zK(AU;Ari7<1_
zVp{$#&^)<8O=axBKC|if)u1VPK-f(AHwR^K9?CQg-?yO51L0l@PxAWyxQA)y0{)F>
z&Qo~84S+MwQ=mg*`jdQOU6#)U`da;K&NF1C!2F8rJK=}Zz(n2kn*lHRti{u;XAOKx
z9)|a#dN!qv7A7q&w><;T+<0a@YiM#?K1CG{n&iTBC%@Ttd>GtPZ9@!YQrA#_ug9Fi
z`B)#N{h-cM=z%z#BcN`gj^R87<8yw7Z4q@3+ceJI{21#i&LZwQA5Uezka@5?#xbRB
z!SDIY&q>UY)O9K;j-!1do^%tSufu9oQ077WtCYoDReRA0^Cg6f-`Qqyj)l6P;ah;e
z4f+wp!L3wDWj-qa?Go1wI#n(s24TLI?H$`6&dF3QS=`v>67Kxu%@n8G_+X$l+tr#5
z_TpW%AADw8-2&z8z?>V~1mZ@x>Z84peS##k2{~vFNq={Qb55>oaXY0Qse|~ZF?RMr
zpNR9j)d4H#@;FE9S=LFMK-*r?z8L0k(9bYO#_l3Ngqit~p3J`+=uX-bKFU=s#}eW*
z%p+GSQB1r6dD;hFux-!AeA!++*9W~xWA-b&(2vl<zaH%y=lIx`^ZOm}8|u3$o$q|l
zUw#NbVLXa<emB}<^5PSW_c<p{I61FLc~8NdBInTA*0(BOT7i}LRRZp{k)CnLt8(B2
z=}&lxEBgqP9rh^*{|~57L)~lKRwwUAeppsz(AF3HZVXwDK%Ym-33YC+%;i20M}LfK
z0_@wAwzCzX)zz^K`G%EI@jc{)b%gW53N0ZglpD%FWr=gJO1?!PKg^%B<NWfs@Hy{v
z33HDZ5H9=1rgBO>!+A)iJ&iP+ujDg*&P6ME0#5dS`79lIO}JT}3^UKqUw)Wg;h#ab
z@cCN5Ak3fU>fKx(sA0s5^Gb~S3!E_z&9l^1`N@Vk;ikB0;V`9XZrofs$xnW?;k$#{
zh^?sC`rg399C;{g91R_FVa(;}ZDEDXn><LYTu#)0?(d3vu(Uz#T$wZQ;<o(nIm~?d
zk>!zBa$Kk7oA&v~7+>KF{hnRFrZ^JbQ5+BRQsmnl*)S)Lghl$=vh(G&LFb&reAFDb
zs+w`jopQC=x0Ps$^^2X5A*GB$@-JT)wE5hl{EVqxT|DhxN2#azm6K7chKO>s7uPBK
z_beOcq%EBMa806>t+ntjX)j)HQD5xp+)f;g=qN5gUZ`IcSTR==U~4M|xmHltbIg&4
z!p1SBiMjG~9&Ore%x{eb54x5qBkH0}YGkbw!LUEbMA#^oisC7k>Y|~oofwXIMw}#W
z<V8_E-=qA<@~@zs+8p31=Co=kT01!kE36?D!&#&Dn6I+|PVIox?m&b5KQI|8ocxe)
zT3+$_d~AT|Qo5AT+32wTVXdq~SYbV)80v2)hvMSLUb*uZg_V>1;@_+M<ieh-bFM=k
zMxsAg0yMY78j3a6FKhw7E&TF2EAd_@%!3t`%xLp5p`|HKx4moA<?(#6R{-inHBk$7
z+W|Z%fp&}Qzs|tngAR=zpbol!`H^^Xthg_<gILn6p%_rHw5X5%ayiuRkGyl?&rco-
z8!pR~ey&^;pda$-Gi&=i+UFUK>x-Iz|5MJz<-s$h?0XH@rUP7R{svwcbp_v5oo<|e
z2aU~n=9*px^k)sg|5XJ0!~x>_i1y++tY@+P&c#QT&2kF+oIkCNFe-IK#i20tV)`VP
zDxx9aKi*SK&$;iwV%B1H3wI-3Bz+3+gN~B6^hsCZuRPxguM!t95iWC{ucK|~i7{Jq
z)MM%=DW6Y){!dgYXI$Tt;VidM&&V?uXUR9hZ@@vpE%({T4|C-Q`TJqK+}_^CP>x#0
z7T@NgHP*up!cIahUk$&vXVP7RhvwM`uR@o+<K&l?;d-o_HOBlx1jYclbP5z_BRh$f
z&`S$F>fIKujbq;PgO#6eF@CR&HL$_1)f70TY+Qp}^{P}>Bvr3`TR35sam;$w&^ou?
zQ(kgqM*D2!hne#8P3M-v1+qUL^J^+SbLC`a<2s_9ot<G#H8(sL4)WWa@CPS9p9ZuN
zuFyS;TdQkmTA6sgm7BofSmOKG&Ia5x@~PB2bKW1U{H*eBA*uq#)jp~nhgLSmVy=sQ
z?(;o67fxohGWLMwC#P{;Q3>$R_i3fb$z|yNOX#PrYS~y+!`LPYHUg?lnj<Iq#d&b@
zGoelmQ3id{s*v+O6)TGPs^x{ZQwdQG{kgifHsXEEn`>pN@XrrceiCX`SL}e=mvR!p
zjwMA)j%Uyx9gg|LPtYHd<1(#W74})dS&<`^KWchB8|zT+bFTiOo-@=h`1w6Q1AF?|
zie<#NJyhEn&bJuhQ*@Xi@B4XH>Vs)r&xQFm{b|GrFq`pw4Y*x`9h?znrjdA?JYVYR
zlS{LF;@p{*@}t5^cvRa1zQY-4qJ-gDep77@)HsAo@=N<n+fg}Z%X!YrSo0u1na3rA
zJ%gOXrcJ97$1umMmO~rR0A((k-)Q&1d37Vr5SA++DowtP>ZGidaK2p9oNF#zx8OQU
zJ*-1;ZkuZ>oExWY1n0)N&d)U=+A5GfT>q!dLNL<30J~tW8MMc`1=sTHBHkdkYQh`#
z2((w2i+s4AKpW!vr5waJun%a4JrIPM_W4b*9zYvwt|!oTf@>$Lyi2;Nazpv$`j#u!
z8EErM+L4}IPvP1Lac4QijW!Ehdzp#-Ewp21+zqhDW?HV5l__SY*iUe6h&Bqe?dG}!
z{nmhEE!HbK0sa-hpSBoW@8CWfuJO?4dK2qOSJd$}h)bMSAs^a!a4pS9cSXi><%e_c
z<<X~VhO$^5Z7yiD%(X7U%{4XRMjI2_j1YdVM-WfS0O8*bdq1vo(Prgo*i?{r68;~+
zJHomaI+J!6v>D;L3->dScFbSGPuU@DxHiMRK!k_;fe4SJzY!0}C1GG5$~qBz?u)1a
zdXs*nKjGl|OEhf0i67VQB>c>WxRXBzKr6z?vKgN?BgD5f`fw~i3bx;rgAUM1Tn`~l
zY2(2)4X$HK_?b@?tocw5xvt0ZnKmyQ7Zo3M{iYgdFcRx-T)!dRX;07kMEY{wk&e%l
zH`<qQ&5`RslxL<P-AD_r>oP6t18KoEMy{1IFRmRabrj#YP9trRD2H6{V|}9hbb<Vk
ze$0>GxX#Raq39r_B@D7Y(`OpW=0dF5a-RWhl!%)eN3HMjnL3NI&N@r})0T%YF<cvm
z>A4Qdy3TmYnkd2)n&sgWPRb1P;64e$oL^iSu9T<2MGZITC*o_+uhJHR_>(3|yt_T)
zdv5v%@NA%gN;88l%7ZQv*Z+(!=}%nEd451NQSE`aCyGCd|4-9_c3M7g<Kd*8md+0^
zCcpoT+&>^Ww$Mk_ofbM+=pbc4v0*{~NWN=*_H}4)qwSBdU&g+aHXg@4>|3&5#xa$Q
z&pw#!LumUb+Gob+c!&9&M}JP{tBoVW9)!=nawPh!rg^hJUIAkb+KaKT&;AzUaNi}z
z3^G1(roB~3%#&~rs6X~z(#DGWlDSWcd;8g6=K2`zeQ3w!fVfP@eU|o^pDu;*9sA$5
zh{G|IHjXUkLHV>V<QPDkKVjoIYm{N1K5^g}l(NFH75A9R_#6|U8B+ST4C5Fw1-9he
zf6MTW=(E#~jnB06;#iH(9ADE$jW%FR$9=R6XMb77F}0hLWfrAR{5b|8j2t_2>_M3)
zEYd!deQdsykHlZXOgK1Z<Tu*<^IhUknc_H&{N*>s(c;f%hH;NP(~;+V|2Ob2Zf&iM
zok{>!@`UhGp1FU3uyLGQ46@8Uw#1*~J%)3flo$ToOF;SI{s`vHGb>E-KaadvKR9>6
zym(%~zlFb)f9j&znD^v<5yC|pus%D&e-`i&PTC%F3{87b$~O076K>LFH|7n<f6|Bc
zi{C;vI-zcH--^VaXL!)Ym%5evOh_Nb;XZ1Kzcvobe2`9C|H<E4z@N68ER#B&dXTaz
zVPGAgzNTF^_1PD&uO{3JFdimO#Gmw{4Jgxa&k5fp{%jj)=PdK1eKy}|<0<hsjU(ee
z2){e(DfO;1=02#SDgV?3=9Wd8QI5H9iD_u>Ogu6SdW|;6e8*8ZkcUo+PNBY+?V>E_
zV1%j<s86YP@`@wl7NsxeL&#Uoq1}tl)$SQ$|6pHu``hw4f;ps<s0)OfI)mlpg#+iS
z?iMGnbVVI@rGK#azJC{S8vaGVTTuR2VQ+M~UuSU%`+*tn3T$o*iqCKQyX1Md^p@`r
zRwv#MeSgB<+u3z$iuXD;!Px+JmxcQ&>tRg0xl;>ePk2qVaX!#_&$+mW6VUAsBdiYs
zre!VNMQz~SmHSU|R>EvI7qQbP@BNVvqWq%H^Ah^Q>=&7vZy&6AV7^N1gdMoKX&%;i
z7yAa|VtXg?W~;hp;c_stvuJ@nM1*~DjBg%Z9c3=P7d2}jFwH3TMw@3l@>0tt0vG6s
zB~9v>MK5#V_&4HR#kp#+ICqA2L2q_6Z=YbClar_m+k;nIt7C<K1MZ?K^9%2Wq7!&o
zgSHg#V@sA0BV4PCnT_4VtIe>dETlcg%DL^^?@^(mJM77;BL1gQcVCYxDmWihKD6Qa
zz}r(S@o*E9-0O>Ou>Y?GI#h)`xWah=PuiOFs#sQZg)Mq)X=mYH++Nhew|%jXe%&{v
z>rc>UZ}~PB6JV<{q<&pd9b+EuA+XZfVGIlVdpo?tuL%4n)~yBE_-D=lF@^J=c>kt*
zfYQgY2EMkSffH<}>|raVyhBD@&;~qPSG9TkC*b*~%lN!&N6`>`#^Jme`(pnB@W)BN
z3jcM$U57mZv^o4d%=|M#|7jfVr#$ux5-K^1(x8Dg@V7x7pd4_H%no6;x?-XV@L$~Q
z(QgOyqtm%qe~}2=a98fb0j_p7HrUUi6F4&(vS15)NGq|*Gxuzu{PKC!!{6%IT%^~m
zF4{p3YJ>OOLqhp45C63m|9$)=|IYR5B0j?0{#>+|b$~zja;$6q-<5xfx2b;?bZ8FT
z*;janwtATFd7Rv?m>|U#o%nAF$(`r>wreY~6nlKO`9J7AhW{?TcVXPiGx@j|=(DKY
zxkG)lj|hT(NYb1a_g|EYcRMyy_Q|#e{%1`3fP*n7;sqL<i2iqZ^dRZJ2J1xBeVxz_
zO1pDe-Yb|7YKm`*TIcRDl;8d<{z4C&0RtR6+gsnE_l`yRi#GW71kQ>4ui$Hn$N2hK
z(*utEP1e+9yl~j4HpBO$-OZm<lW89Xe;D=!bA2<bo_a>TDa_B{%t*Ek%g|3S{q|pY
z?+qPS0{A_Ld6K;FdE2*z(msr;tJ*!}73Wb73oec|RN%iPpSumt;JgRQe;3Rr{nzFQ
zIA_=qdY}6LP4DJ;@}Im7vePN;z;`{n<{Rfxlz~&&qvwIT&-(p!4|Ok1UU+maX``$W
zoQN`SUOBHk9>%bp5dliw<~VRqOm5##3+t{>FJ=C)E#?ZokL~iG;{WT|$4TDT1pZ(5
z54#PwUol_sZ4W;Y>Rd)RV9sDbg>rZFkF<1p6rW%AtgrANS7(VRoXP)6n^s~|Kzp$g
z`>&>=J!ofTD;zObM*XlB_A-wmjs?Ly-=jYEjPgtqTg->)@QiT~e4cAn5{~^sTpxzJ
zfU4q5f!wu&g7SQnzCG2buG06ZiMha@IE%V}1=xO}J>Xa%6!Sylu|NJ}ACLbW-zASG
zV9%ioa81Tuw9CD6$9PwJ=dBB6y8nu=$9V_eVD0C4c&@$Ne+9P(jmP=u2XlW(e)jFO
zzth^7=l6U!ylE><dtsI%<I;wXc6EH`p0!i3eUo-|T3b2VyE7hP;a*0@r~Mr5C}m!>
z2c%6n-(^`cZyBc`KR^3+?z^R3JJWLSByAsgMlNj>Iew!pH0?fV6HNO>I@(5ZFDT()
zI@*BJ4wn0exu=$UjTtWQKq6kWpQSA@_w@FMtt{=xNt0<fOPn^5Wng#7JBnyS&$M3H
zbNUR{m-)O1^QTsb!+oi|=dLo!qOCU1I;D+0<J`?@?OU~Rc@8>pW*GOs5<lY0J*|AE
z4YagdUyMDOyl0B`(1e-i%`+YM0&^cLpK0UBGt&7S2R%reV)Bi7@r+{9g8O5e0e;4z
zy)e&%CoO4jOxzgW1al*qIQyN?gK_o+_Z#q;cRxw`vV86#VEEl!UiR%wL;S75XFlHz
ze`(v!xU_Ai4K!_nh#T?X-eWrMe_$MmKcBf5nEQ9R&$bQ5#%&-63@5*NUNE1h0-wC_
z=XuA>mvOjnmUnS+e|#~trDF|g`K=&F{7voKdHyr;C;Z$`&HdJVraaS*m(R4pmHgM@
zKLk9c%+rpQ^?^KLedT^?$|+&d;y(^>^6mic6DAF~N1t(sKlj}8IS2d9?}k6?1ousI
zAIfL2ljT0=g7B8#wDPaDZ>POBZJxPLocX%IrriUwN0}yGwDHah|0vW|+Nv{u-v7ls
zqH)I=>+uZWL7RW>o1y)363!Q9o!}mI?%^kWNDrpv{%h_F;4}A}GY+4n{PQj|>J2B{
zZ<UI@A;gz(@$6&L>R#%<*1nyz;F$@;ljl0Ku2MJiECzWluNHsun0quzLLc&O2Es~5
z`QhGpY12$S&ifu%N4PhFadu(<2xW}6?lK+E7?5oa?@gh;<u{2xZQywa8}%LcgeYY}
zhIoboZM9`Sck}PZzMbclvo25v)2HKE2zP6LC<om4!m}xe=iOk`es2kUC2!f*@XQMB
z_rg9CR_^z|SNnF}X~(p*Y3F`6bIND?_9^6-dPCcmo0FF9k8JNL1KNItIq5BN3T_W9
z^s&(AzbXUJ&z9d~OaYz~F`oFN!8V=~fjiqxfB#kax8P;b?G_oZ$bdx#EHYq`0gDV+
zWWXW=78$U}fJFu@GGLJbiwsy~;GdTPuBmI!k204BT&w#O>zrJJljj5Gm3AlA)Mzu2
z*Een0Y1lP<h&5g2sXfnvXLgz9FV{Y$orBDWYcsUvknhsxnz7cdLxyu5i0fY;0|zaP
zJR9(YVNFlQrJr9u+BlEWGtYD4*;;fwAKe_-Nf)_hiFr$9&Cwd^xt6%!<lLy~t<*CH
zJ#m(OL3#7+Hs&GoqwNIO`gyJ$!+4&Xa^^R9z`I||W8InIT(6h;QVyAiBi6OgYSsa1
z6T-NS%V^G=M?PHp<5_aDOs<FW+(fP;k{--Qd){S!`N;AgMSlitRwVw?W~LxKct#k{
z$CqhHQ?8>+-Z|sW0IucAJa}fNjLSR3WVqJn`8A|H<I&!y9_$XBK>M{=kEdOMOfTy-
zZ82mReR;n7Oaq@8wpnw2U4PtjAmg(vmd&&5w02Xp7olT3-r*qQ^K3W?YhL-tZ;z@!
z6}B-FS83B#5H7S;V|>~hyb7Bs8JF}fZr~yB0FdFauql!G%ey<|H|ev!$vCv#k>T`t
z_l5i>`OG>m!{{sbZ6K~zmZ>{rK79=5KQitG*cvcgn}<9@li@s5Qk%C{C+3xpEaOr2
z3&VfXj^`+nKD3iF#hG?Ll6JB`VGjSLJr~nTdn=i@DgW69&_+p?L!WoAGrqa}r@aaF
zJJa%9Pg$1qY5yhjx9~r=KPu13ByGkwt9u9CSPv!L)*0?c(ehu`JxOQj)8<O1yBq(t
zFvv4YX%EM|%;i6Ay<~Y~@~~0Nz?rY|`{Tra-qS-G((zs+>UXJgN#Cuo$&_@-tFN#E
z_R8`*ZI_uw%YS*ksN}o!3&VewE6d=0GxGTeY{1OrKkXJ}x=EUI!X-SE3HkkT;=jaM
z>$9B?gMA<EE!ppv->B;)y`;~3mgIMi;TW#vzqU=5Y3LV*|FYd~0Q**sHDr0b>&IOF
zAH>*Brh5W?LoF<PmVF$?d7SvqF;+XYeY63m?K62V>BKXmIaa1EIm6h`=XhPxj=G&^
zsq-8A(Q;g_<v;t+GQM^!U@re@=PBEM_6wL7VP=`^o0-dh;=wxun2zHN?Kpp5xR-G(
z!tak0|4sY<oEMRFA}wfJy&iVdQZ8J;Z`y~m4=K+^XFTo+k$mo{8UOJc$BJ|u=kbmP
z&Od0!h?Ko-=yldn=ArHXaXiR8=;Zxta!f`!Fqi+#mwI33MZ0$5PQ6dNco|Orapphi
z#C<N39^^B_xG#ZoBQjk298XWf*qm{s8wUGue&?8;_bte{^x4nS>RRo$lm_bA6k7f>
zjB(g^mveP;eu&}PxdLrlBVk~FQO+SzKWXJomR+r+y&`||UCaNx@{xExs{Y-^f7-tA
z6zm6+cyj)gdrL@jI_|B}wg)mE=jwPD2l>H!J18HFuk5#ioUmV^t&5yjT#mk@oOjdm
zpL^KIm$rueRxE>i@1#EB9HZo$mj5h+`xM^BJqZ#n>2toB{Yc(zLVVbc$-7OMmzMtp
z<s<WZ)ck_@&wjF;XC*DPd#s8QPjlOUImbwTY0H;=68W95YWdH&+Wno{w0S+}$N$3S
zlULpkTbOn(m3vJ&AI|YK_lC*3M4$b_2L(IVcVt<neGuMLBfm*s-uWZp(dvB}N6Y`h
z&fC9+dtqfh+WKGEd?b7ivrqje^{2#H>+@ST?3L55rxZ0lT<fErVf|$vQ=9*b(8*eO
z*w2$=3mK1VciK2yOVIY|xfhV%+1Hotzf7B#ugy=+V=`W0^T{jkhcS%nHSAkc?@7n`
zJJun#-~R;6+_$HtwYE&Q53G|Md$7INev{ACA;f|AGMUaZaovIQ1Dt1;@$cqyEWv)R
zHr~DDqfKvl&K(z6Xz}RL;^d$RvA=(~I1txed_Aa}_yp^@d-7S+EewB8g{yaY9U9PG
z9PD-Hd21*8hu&5X3zN5ud$Nz8I8g+!%KR+;qbI)>o>_QikpYVgSY+VQlYuXM+ld1~
z=AG?f;qRlz--39yJ0@Jj7qb#wFoy5zU@PXdt}nJm28u(m_unrps9ejpe_xJHMFxp^
zo{fYLc+dNacyD8CoQW0)e*oO7CQZc2u<-jHA6R((@AEo89*nPES+obQD`8%*1bANs
z=a*6zTEg+}!@jUde7<I7iwt0nGCvwV%HhLcqscotcwdt<Tw|Qg-l>>Qguw5PbE+c{
zmI!w`O115MlySAde!C1G?-MG5z+>ut-q{oEU?*M=Xd|xm?<|hTb`uA~aGq~)dvQ7<
z?|EShJ#VMyqehSQULK+q?l9yz<<$4nJRAHcb=;%I7cIQ|yLS@1VK=7@E2`(A;63Yp
zMYxV|Tcf*((}q1fMOB6+pL^F4pX1);A>hlf;yQ6kv*)fTXnHWFyXc3#9<2Lxz2FY?
z2!0@PRuu3)Zh7qO6CrwoC!ug-YZSb{v#_)|5g9Dr3<(e&kT-eH{@;??s?Bd<^RmRh
z_xhb5?T$uu5gC<BE93BB@aFX}bzfzE@e3P%pnGSLjeFWWk+&OM2>Sac!b2=|{~;OU
zeS^E?BcStnhh%5Ctvw^f=_0%{@~a-9A{abxjPZU8<lhJVfWpd<C4SM@dr8yx{JcbK
z%)`_KZ+Kti%D|!>d#`QUM7e{mx*`9>k{I9rNAF{lG<{V3(=lB{Ecj9lb<+_#fINzV
z-Tc08Mb|f*VrQ?6_Z>0zZ-#lEryEof$1U?a4}}g~?@>#{82DcTys3g`j?D+bO@JKC
z#~oU4w{4DneZJxwjMq-|3Kge&n!i@_YfzY&Y-O+9QC$LUKm*9xqRuVEwSND-`^X-Z
zI<JLus*^evW4r7Q{`0;#I?m74(pf7$-zgKm;9YlHE72c!4JVhx+FhL*;<FHcaRU7Z
zZJyfaKO_2zak>)99o41K?lZ4dk-p-1FAM**bo#fRk4F26cl}z3Cr~%p_v`OeOoZFp
zi3WJ)SgjHqbpn0fqgW3zKpwV&>jW197gx+$Jm0XMSkbnbnB`Jgj72;0H14H+x_EK1
zwuP4%R>@UqS2*9_1a2MftpB(0wUnE8Kk_8TXvey%_L^UH2^4!GdWcnRyhL0nM}^nQ
zydBzaXY>=DQIC1IWOaKRQ2{<(HH24%Y)E-we}ZyT6>-biT4SFd)_m|xJ@b0Fh5wI=
z9PaKBBo^S@u3qJBL>utGDR@X(pl)D&R?d3jSwYrzLWg@eb-0gI$9J?PI(s<!NT-8*
zl(Dl?^vbw~ZsJh*owmV`3QZn2I8XId?}|LyCs=$D)=6v$4;CxKLWHlKol?i`bUc3t
zd(5m#h+?|p!bxYR$c7{2!?AcVQJnkFQ2&eLo%*3I+%veZ^+e?DcNRZxbbXZZ-O@Eg
z_=Arwa3yTGzmRp`RygR2p>425n}9p%@XZ0v4$cbopZ8o+COF3Qg-e8PxYn=e#+i>Y
zJs&05uR#yI?%PpW!>bHF>d+=AIv#qS=f*i;++fXnsjcjA7bNee)(LCq0qOu-=!#Od
zwo3oO1L1Q$?mT<uQKH4;2<!34u3};HM#3BXD<}DnK0oE41av+1yv~N_FM{{DJJi|+
z?E~sR`EO%QU4eHyYb9+r$jr_>&Srfa>G~+)ys@i~Qva)C+^E!j@RNLXfbMr>UqERO
ztWfu@gq;oA2J)W{vSG#VR<@!9o;e<v>|RBj?3?$v<WZu@;{@y8USXn73DtJfk@XsN
z-^LDoJ%#@z6y0xyegXBpE%gC;k2uAwFcwr~qd4MPDYl;p<%)~Lu|>P)@Hp|}-@<iU
zS3eO28Q_|(17twzcx5aA9+S`ZsOOHhcDO&=N@*8Z=S!k*Xsfe_p0HBpl6s*HIMp-n
z^MwB`+$`mqr;pzb?j*udubY5}<sbva;Io})Juj}v0Q5h2PQE)KoP7he{^PD`^b;H4
zJsRN_dYeb@hmlTuqr;UoB--~hDru#R{mF0pV#S0N&K9IzC=MPwV7zC8xj?1=2OUrh
z{O4R!H2RJYBVHDm3MZ3q1bB%E@VFiL&9NQr2{=c{de3nJpE(b#%nzcUU}NBaFW3WE
zXk9p3KdkgR5ZOh18Wtp8Y1~K*E9s!DDS4rN@C5JKPbd%B;5-of|C~3hkFbH5Cw^G*
zvA}ija(OzcoA@#|LcH9*nMiT87E$OM_+ZV5YX=+`u#Mn);6RKaEp)zjIzLLZ`@Bau
z+IxFt-JlG3PrWe2(MDYB^LXI@DDmn+z<Mk)T-oEvHGm3e2b#mrsOTh4$6D3_9t6D~
zwmiS+6|Srsac#&6eF4t@JzH13^W$NI)dEk^>g40G{^G;lp^7~T=ZiRRNIRmJS~bF%
zuKCaZobC}Q_C@$(j<~y}pYV|E8Mv3aaXKbIyd4#+=zP}y(s1Pe>Y#SwSkJs=ZAnFY
zk&ZaMF-GWzam1k>mVG1lLi>j$&8m=&%3c84kI`<7wjghY`-x+{@~;2eeOidVh|>~n
zg%|wy+TVHZ_rrpl1&+Myu$C_KyqYWgr)?nThq#9PF7^kqZP3QkKGPQ64f9HFXfI}J
z?ugXJu{__M_74M%a<J#0V?Or(UEzY^KE)oCf?&&bv=VNZJ8%X66ERnCG%|mC^MdlR
zeEWB0gnJ4{R4T8u|J41g|1sd{p`Hcv|C2y3W$!TO3Om8Q(b=a!d9m>M-{o_D^gk6F
zC{moAl={!L0PZJv0`>Y@--5^fhq?zV=f!bNfx08BUJY>~)?!1RADtiO@Hl&0WzC;<
zpsfE1X3qU4mvvC~rZz;HAoK-~VISJVjHd;*ymb)Q0J!GMxqsIG6bCD___*4;r3gZN
z?n~pG;aeSUzgxmW@4V^#Fwx~??+}HDRlz^ngs~4ewqi-M_<yK(gos4^T5#@g!%Ntj
zmF{7}|8a-qKxBY&_9Mssv<WBwXV)`-?so`uhYQkh{jdkz{vHMQ8y|OiKWzB#?CPzI
z{i*wDBgXOH8#oirTsU8>S5s*_ICcnxd$nCFv(uVeh9%yEYe%*Qw^jOnv;kuMuM78a
zh`P7T9J+rIjyr3ShWzI^Ai1=oIMFTtc_VZ3w8VLE{5GZSd;YBzp40xv4t@9r;Nk8F
z^X<M5U>zs`XAe;S*N6QG_p6(hVR`@O_*qz5uf(0R)cMr?v<YM#{wAig**rWJ6(ojK
zFR$2<aqQ3r?f~{86&4Ol{C`JAa%xvl`h2YaJpZ{P+^N2W+XFnWou{&9$bH1rA8&h`
ze-E66@Ba?pCEZ71pAU6+G3ajg{kx(Kkl)Ppx8Xbj_Wjrgpe~u}TBFc;m|K=5UeU@+
zGVHv`clQ4|kJG1QadAARaAh3r6DFdNRykV)eu8~*+!5K$A_I?rT}V9Ea9RI3_sf2K
zX0=M<7|wz!Y&}cBJOJ~lgmxqx{=t|Yh0dd}Wm@7FuAZ9G>lD`b`on&QeB;^=`+l=q
zc#2ceg&)6-En}ms9dJ(x&!E`V-C`GJO7Dm5eSd6M5e@!RZ`1CZcAu*Q3t#t%*OVHi
zMRnBuvT#1g=i{!HdBBH_-=^?v>Cx3V_ge=2KGy#=*gtF<&z$$64(R_Ok5X`~|2w)B
zZVX{g8J0Nrr|-4&yVf^Iyb%_xoFPfwU)I3?H@fF-^QTQ~`n;!im|`>Jj6ML*lVkh8
zr$@v+$&qQ^miMCLxt5kEV?)F%KJAtH8m|3NZ?^&O-otv}sffb00Vy>rsO!hzKgSaB
zI7{eogoXcFdOvK>N27zqjHV5gc^mTI8T@Yse@lF1q3Z3%PClYB(_<Xr0Qun<a&py5
z;#%*5?S~#VdOU9M9E=VU*)=OE_kOVN$MGM}i+Brn#2@KZ@Ywx&P)9{ZUT)D&(H~W8
z?3D8)oWOsMA=h`XtN}jk@^mOBSR|Dyq4fD!|9K`Lb$8Di<;CWnJ;bpmdWj>j={<!p
z0`~#zkMzP`AKHY6i2YrIMTV`tXovXK4Cl%4JQ1evhWVtgad+&)j{oBh-wBNU<8eM1
z?-!{A9+rTk4&WRv^*QHra~gY!6<!_0RIKqo-_%XSppO_?%2qiafV{4W^Mag}bH%I#
z#}9sJLl$_}w($NDnD;x~r<>?wX!Ch4s2!XQcu5;D%0Vrh6~y^~4sgEUZFBfd5TA1e
zc4+H$@XO(>5WaKHhwDCLs+AI_`&!oi9tGWUv}YLZ7qU_8JxhT1I>o7HL+WrgWHIoX
zx`6zxz`h-1fbBcailVM(f6)y-*L%C*+vsX##IfEM-aiVwCyaX|J1b*<)^(l>Yj2Hp
zK=k9N*U5AGYzMf%gXhL`UZ3;CwDn{d_Xvi;J&7|!)_OO!==?`O=WAv2>t0=i8|tkU
zb-AIg`+=X&)^QQ5ecOo@?V5`hs#g)|sPkMS;(0KMh&SB2m>7-o!(Q{OkA1(Eex8=5
zkJ9swu3pMmjbrw5aIEXo>r@p-^SKA&RF8X`7k-pz@;Je|E3l<<MkM!dao&gh{f!-)
zSoHWKrpNC`X1Bx6@7>rgVm<B_UEaK&I2CEx!+AgSw4}B42P`sBunZjO(h7H4wXw7_
zk5M~gsS^d)2@8E5Zu%VV-a*ir%co!Z28bP9+K7w2?i@4i?bcp=8{O%SyiP@R6#FB*
z?g%%x%!1-w>g_Lfc5N%R1h*203c!PK?F+vXhF_tpz6xuHePONdfSvKr$KGi#Z~?e~
zjxzb3=?R~t%hf)&+ZTQj+E(a$-kAr}oQ~=wJ_OvKf}TH_(3A9K86S0Sbz3<F(W0>5
z$VXc%+?N5j9na>ZAJ)iKnIHG5T=us3Z~HgLJu9%0!hJmFVsiW1q`RZ7jq+_%P)lQ)
z<B{H?UTFs<ob&C{Sp$|b#qET5r845Bb`8bPkhi?xI*T%T*RG=6|0L7Wuj^D&yyAWP
zSnmSpUlw^1J}nHpLfZ+qQVzzl`JH%?XUmWWVR3ORVdOF4nAF@2_mA;Rc@^f`P9>B)
zM|sp%!ur>(W`uWEn+8f)LuW^0n8fAT7WI_;Wj+p|5n&@<v9<2Rs~q5es%afX&SW0<
z>(6NIZp7m`z++B+?J7DeX$Y@2{y5J%#=I!g^4rFM7RK;rnz<Rn$y<qgK|cAxIxh30
z&pPQ=s-%+M&e}@!aH%Ac8`KmYWu1(9zKHx~8tMmG#$@o1;gqXd;4Q<+=a^cRMOs4_
z(FnXMhC8Gvv;0;KcT&rI-t=o`%!l8qlqe3n5F14XWnL}Hl`_VsEXZ=TIPh7y#}awi
zplsFyC)AtQd^|<#@}-qD#EWu}4Y>-z8Duga%7BFDe*LM~A1CwG@}{7CTN&Wvy=&Td
zqYd)U{Iqp!1N4F{gEAu1Xl0MIU*pqMaVt7{C^$Rw9tY$_*B5hlG9CSt1};iC>+5>(
zM1G?#p3tnW@~tUkL55Se$-E?<U!$#(VcI%NJx;pIZ-h<eGtjNNG5l%Ix=J|Pf=I}p
zjNeSd|2}|QhBKbbXJ2@3*+c5*?k76Z!`m2tt*@ssKGOwOEvI~|;gBnjGQWHE9~S;=
z<wD{@-7NJi`Md}GlHV%Yb4?HHG!>kUVe%XOcLJJ=ZD`MBSYG^RpM?1`AL<Vom;P?_
z2PEIv-pOxWHTCd&O&iDdo%NV$%;7)V7n#2ncgh}h(6m<djb*ZI(t^5%Y1ocQc<$GK
znE6lK5>YoKoyHpU9_cQ_sP9QXtz*5UZaJvw3+Bat=Fhq(^P=9R4x_$0s;P(Mhop1o
zYUP#q)Xg$X`jS89@SpuUS+17<GB5gULsJdyk&H`!xJDke@$cnX%YVu?=|(rFZ3FRY
zr>25^G}C;g{%4<2`%SC=-wVt=E6E)FpC1k0(6qOqH7Y3OvEFLwk>7J=)E5a~e*EWm
z_7%I;tf;i}GB5I1KC`Wn`AGhowtf6A+yDFJ|2GjGM02zuvV7^YA2Pj_dy)44wEUOl
zXnpF(uo@M`cbYMs<UiwSbzo-WT1J?cqYalddmZhV%u}|R{HAUH^W*=Q8a>SV$#mEH
z1Q`4LT_CfU(U;OX*>-E|Xny?XxZr)rD)lb&J_*@c3D~v$HgoyUaRBkWU;cBfAnC=v
zHv2Q5pe>W*Oi9<G@U{G}iGBskYg3`LGKP|EBVi%WW%*kEFY#(@<a3m3Wh30tc$V<x
zpe>X5Olg@r#xRHftP3)&maahtJ<LAy53#vpP4=r<@0q4OaFH<N$Nyd!KQb<9EaTGG
zw*Ru-VR%9HzbN=m_$9v7{aTowbg!w5c{rBQhTqS#mjAL}Ec4@>NTm{LKZ`I)ov!6S
z$4G3W>DV4f*y#s@M{KLK{do4vWd7#xpYtLzPv0uJ^9}6V$?`bf;@E+DhI0loKF4a5
zS?bIfjciiJGa9=J>K6Kp&%RqaV0{<5fayA6%qjEH!dw*m=bQ`YEoA<zZye*v{)#)s
zg8at5E#;Qu6z#afbZ$e^^IrUd_|N>bI-PMDM!ph0e~d@8;~t3*>kDZq-=)uXMCuUc
zV-El2{0Z|I3i;RK$Z;a)nq>acXWKjz^Dd0b{)-GZ^^@FdD06OdTxI&5?-A%1Xv^d{
zl;L@e!N@OuV}3GCUgJON#=Ods?F?nUf?<4P8jo_5-+Y)XvoQYM_%G`R;gGtUdVzgn
zj$v6A>j&k8PCM==9-I?n9-P<E@}BAL#{VnOg|aTNe9kYL;>LNP`RyAi^8tgQgNTo5
zpOy2c>|aP)vYlezmTkYxZ)@k)f_;<tdeub&9A#LGi;TzdIdR_{oI8&xzj2JlZ`yHc
zUi@cYigSn(p6(cXvcIIAXZ{heEd*Z7k8;nsLgp{aDk{Gq{!_=6*T~@qnz`GeC_g{`
zb1Y5Tchu-$&gGcOPhnutj<-fMsa523%nz2l_|Ldnc=GG}=9gzthHLv~oL68U#uam-
zrh1iaW>J>Qyk5}EJ#+q*Z7_XVFQm_TZ>}rdPx&0D$o?$HY4b2Q%=vEF=H5@<1*Mhk
z1#!`??`Zp%rv0vh@+<0ZoMVu5k@VL3{Kl~{*CdL%Z0g*C%BDPU%uk(L6lH7cqQsH?
zl%mKxzdU6BiS<dVzbFgTt(14!ug))z2OZA3#kpoV|4x4$-l>E0TFWg;c-Xf!Et~WC
zlnu6lMOhZ<Pu!^gIkw`sAis6lqAHhT(=q5vaE`$=PwJ$?th<}0x4f(C?iM;&=wOin
ziwsy~z#;<{8L-HJMFuP~V37ff3|M5qA_Eo~u*ksUC<B<^wEQd-uu#B40Sg5z6tGa>
zF{3~&U45OKE(3pEbxH7Db*Z{ET_*fExDoi9jPQ8nYbwGMbVK0Mjo-5H=5BT#gOOVr
z^2|h@smRGyHw^E5W{GNP%(1fBImRow6($ACPC*&wV=l`eO;QzF$UIzhAqde@DGsz5
zqRUcBP_fDchOP?6EY%e*RW}G>@pv*neJ%{z^iH~PlttR5=?3F3OGv?Ux^9%t5wJDI
zcb1rre++d6uj6&4bU~m&GQxAYJs97!6zrVuz-h1{b}H~^3FUNAh)t|g6pD<(QyMr)
z$Xo%3ns<h-tfrhe;5-O1G87pj?x~2E0B9=ddccoU=sFNjqmY+MWyYc8skq5}OXvcS
zGDG*IQdSo5NY+)j1Ljl%57H5L5MolshAFg)@O4&l7@_2nq?G2W8;EjUb)!)}DOCnA
zk=K-USENsbKS(JtmzFA>v^63PlECk(l#fJ8Q|TyJ{#6>Lqh!h#so(+%7F1*65w9RT
zD%~Z$Da4iU5?_@NEsj<0z%jQ*GoF+TEmjrpNHYjn#u;QI6P%zd4N^ifb)Gt3Jm<;|
z@l8|WODeHmsv0XE@{*3Us+74Q9}hr4{U)V|a%LK*lr9qKDWQ}pQ<^yG{1skgDw2_`
zYl3%INJJ9SRMbTvROJEd6Xiwf$_#u@hr|tnuX3{tY9lez(t@xLME>cB#k6j^KwY+i
z?J#3Hi2-Gpb&k4&a!=V*aZ~YE@hz!@F}w^YHw^!%!AVUChbzjE8lf3D&eB<vNkeUG
zaJyzx^#@^~_DVs%YK{X9kc?C)l88J^bzn7JH>9{ToVr5IRrO6_xKle)(~{n-n}k-%
z3hOBAi(3CO4D`NJHcivtS>tN!Vob`Q#>)i1Np+UP7BN|oDA`hGfE%Q9E*EW$I?YZO
zt3XWdHZY;JDyifoabZ1IH4bYHOC*-Ax|XN`?R2e`vKdC{p-fSZG9ZDs^G}sJa*3@g
z+a6M0=3QOGdE!C{R4%IVP3gnZSl%dTX;ZqG_7(_hZv0wz#LxYvYGbwm*+|27hxn^n
zo^?UhG8xe7tP3ipY<rRsi)p9}Zm%8LhF)8QuZ^w?Vy5bBK$is6EE`>z0+o$Y7t#&y
zqu_T@%2EAfy!+yP2>eJTcN^4IQrSk4-4XBu5I)G*J1lM}CrinFl+NBz9&0=?9i_7~
zl+4z{&QLmAMirt_I$Hw-35KU+q$y^AA`6_&)Ri#6LJFh+7jnF~0j@N|yS)Lv+!*!-
zNOMCZ(8P_jB?Oc;8?@u>ZP`FZseAaIh!E0_wT$s89mNdk*asnuYHIbZxFL@Wr03TX
zhP+adqYSe*<V$&#d8j3*Z}x_AvQVlTLWm=L(*u$tG9&k#KQhLlp%p@299&#?;Zqx(
zPVb<rur;I0p;z%7V67YF<bq=xtw3dGT;ZaFlqBN#W-FbmtNOMEq1HN2T<gPcYj9kz
zjn2nMeRIcQpSHU3;|*{2%w>~pOT5MasweO_5Op~cEmk-v{RI4Opbl<!!S5s6tADc`
z(_be;0D!pTYefYzwl}0OYn|+ih2V{PP^bGDXj!4w%YQAwYXYB+w#Q0ojZz>F>>Xu-
zqB@1TYHehWlpIw@sWqFNcGZnU7+b-C;4h_+H7-|UvutWJS71tQM}3A95%F87^EQ@A
zjh_l0cZ1LJ`RjpHazqfId?)8q4bn*+)CA5SU(ylE7LvU_SIAHTpiuRat1cSf*ovw;
zjV&vCV+H+V*~=B!B>h-FGZdYcq|pwH7XfJbbuge%wJj-;i)lgS+|M_b-340A%E;pw
zBZlM(f9B@TxL1(cN*9X1Lx4%LA_>DlDN521)ZENM<Y#WV|5iNWtI8gGSZa@l`dBM_
zdGqzbLrmDZDSW*hHdF4J3kmZJfU`2RnNp&2HG)o87g~xnovktJIQz@8KgaYs-3HqZ
zow8GsT}LFOXC$Side?5|;aS@?A$3q%d{XKV@7mE(K~37$cFo9)OO209PD@Sju01Lt
zqjsl`P9;0UWn?6z3``#7iVRXSylZErr?$@+l$ekbm(e68X;6AvM%v)aCWF#a+Q((2
zc#LRP+chOFHED1{MrMq*G^diT_$hfX;)oV^&8bCgZSf)T38|S$nWNNvQsYtpW0xKt
zA*rcp9+3%|S;K0pUxuZp4NAz!NK5xkAC#DsnJ_3bD;-g@+qO1D(9*!e6Le71WsVw#
zXd{zSTQslTlm*8pWDH7A8kPxqbz~{7N+}(hYQvRi!xB;f+n`ZML==%w4axL1P|ol{
z`6#J*J39QtpB4x;H#OYVRYf>V(%U08DK$QAWQK=-T1rY<Y7_so)Xem><O~BcGL;e6
z*2L6^tNeUdS{Wl|4NOiN)HPvLRN9jX5TDkq+O-<kx@EJLEe8!6+$?^uNwLXssY9~j
zhJc<8HD5?oW=Im=Nuk_Og_0dI)3Y)%LsAE)nJIUQv?$qUBn-+*hoor9o}Mr~3lf<S
zACaCkA}KjxNJ56@vy#jhB`_NqknN!fBNCEbllj-Xc3ehC>Ih(;UYoJyFDuD+5XH^A
z_TaeWj08n;<hKq@jalANYKNv8C_6MYA`75U;ZQr;#|;|>lE*3HXP}$<0U}DyLmD$t
zcQYh;5;HT0wQt(gP%}M@HPZt%vuR{lNYmz?o~@c1#6~7&4KsopKP<_2WL$beM?jMR
zcF0%BwLFU_z)kaln4zlTK$HmI2;YE!kZ!>}dm0`r?|IW>bn?Ke{dBtVI$gba&kxg8
zx^c<w!=HW?bFG>NTpfG<_wo(?Y<6+m@0&ho>O1_8=byB?6q;RU-pb59Z6{snI;_g>
zpH^hpzx2fOL(;vw)fmw3uRmVh(#bLWts%oodmeA|di7CplW*ExAGM>!v?*to|J}_=
z*UI_B7Ksa64106q?CpOy`)aOkPZQ6l)`q-myK{baoiCDpYTo^gZ?ez-Ht$2R{mAK=
zbB}j<cAUdc!@Fnya{TQ>e;(ag!_n#F+isipSB$Hj{dAYuaT^l9>}&f@<8uQyzjMCt
z`|CgM`$zv9ezR9@I~cZ2A27q-KC{p2KitZGU8VHSSrt8FoTooK_IyQ`N#gLBPd+R*
zZ_D>Dm2OaK+{I0$TJ7jp=H<?IZbM#KGU(%TGY+JF7Pj=$iOY{o_MY<6tA5X{cx!3@
zIX>?-JTmRqUzS%~diIS)PgK6VGw_E`Kd7NU?>O{W_^<natTgfF(@EvG^dE9|=+f3}
zdj_96_x%rbzDU^BdDi&E#Z$76ytMts*s<FNw05Z0AnK*J{A>LF`f%4-uZ)>sKQqYM
z(<3COqWio-Ha%t?bbfzwwKXXVp1B&?Bq+J~T>XLx9U3ROt*ILq?(}Ng!^yf6Z<dOC
z`9RDoHi=ipwtx0Y^sw%0C%snOt6TIc*VA!dbv)+PcH@=hpU>Xe;@wk|o;&vKxDm6<
zlsvJ<efWk+R?Sz{y?Q1pVEx5!x?UVrzU+qIPIfK5vGU6v-_^UZJTk>^NzX&Ap2?bA
z<;=RZE8cpkQ|5QW*UWf*{W`A(oBwRFeD%uHBf9H#KVIv#c<yU2y!o3r>bq%uhrP{T
z$m%=$#r1nSUOqJ;JfiP{-x?MViT|P3xEjmKS8Vg!fhT`lQ0lL}(T%TPJb1IsT=9h8
zg+IeTwXsY8HT|bX9U9DuSU7ol^Ag>@d;aE-4NJax>*&lQZu?VjPG9@3=an)eW^9`E
z<E1t&Z@v7t(}5?KeKP5j>HR-H(ZX(|gWJNyPrf<x+)J109DifG?}l|3`|mn4`q=5^
zRtbLvrmS1s?yte?Hmy0c)&KpMetEHVsYM_Ee0syQU(4UT<?Oqp<e;Cee*DD2rPr7R
z`x^PI-I$&+ZPMCTx_d^J*>m;muOk{AjGujLjO%+BPaoP^?flf%4NAs#`}o@`i9gMI
ze`UP^Ee7k}Up;01#;~FF1{ELV(|beKjh}}+7uu*>1;49RH};B74Q`baSnHYD->q9V
z-q~gC@o(NJ-ZHGo&_-Daf3}Re*{aTh83WopzwTD~^1ol2`9zIUm9yV{S-+>sfgev7
z4_(%!`f3}O^Mg)r8NG4k?_Z|4{4%OW$kwaj+cH<a{MQFn5*pn&ll@HSM@I%8ukdR7
z-v&<Te7MU7Pkpn|=dMR}3~W^H+=drMHgNyLA;!ir<@-4cr*&R)Fl3C!*<bn(U;A_V
zsOOyRSKeH+c4Ok@Ma9w`YMmT4->UPIuj*b}^ux7bQ>^Xg)~fR7A0sOC`f+~k9xpV#
zl62zNX$x1+{cH5%?0|$eYwCH-8nXPEEi0#dIQCGRz?fTC*BxA$xb4+>SG(MF4E$fH
zPo3Vi>g@ch<y(Fwe>q!4mt3aK?kD@Ye3J2O#kHfZM=yNxrPS${%6>Mj)cT#iO}oA<
z>Q>n^YsRcI3DvhY+2A<x>zY+t%w2qZ?((CqFSPz@Vc8+=OK)!XQ;RFUtM_Gov1<EL
ztIY!r{r=22=XaBqMh#hYbnjPRZu)BKn3vzYn&DJ`?+c%8`{L&;_mNRvljEPdvgt;r
zcS4q1X9d*1(WkiE>bB*>ZFRjiU!Ce)W?y8-*Q@+JYH7!<pO5XCzWLqp@nd!U|BNX0
z_Luuhc?WIo(0jwnJ~!9SPMUtXMSA#Cix<U~d#<%p?;SOS_4><m%KW%w{pW7yf7xGg
zMdBxA+m<hF{duP@%lG}hbew);*BuvXx~1qhttvZZ>E}(BuUJ&PzW0moK3%KS>9L2`
zbn5kL=%PtMjupmjiSOPjd+NFO#(r(R?!b|Er@TD<jK_C<n`M7@-1F60B?oPqF{#Y3
zkIIM5*xGpgcd2jvl<ao>^8sZ)&-Q9E_RMoB8#i=(YijeBbpp!$knYkm2%>Ur?$6Jb
zxYX){r@Q_z{ex|PPu>^u)b`+C&aW;W9e??N+fzRtj{9SNkLPQDe`D|9iIoo>`eR}E
z6V848H&y=gwa8I{O-{P)80o+FWv6T1XTG-Je<Ry2`E;e#4f|)yZEtjazk6icYcHSO
z=UVKGQPCq(+W5O|*;~qY&yGr?QqB%~s_$>JCahc1t#7x*y?2)H|I}E|ma%6iXP-Vl
z@%b9hl^?zOO7E;&^#UCZO#Sou^<B4LTU`IWp_7Mgc=`AXZEDp0YC(<97L~N_ec||9
z%Xc@ia*0jdQ>*m$73VKI|K3A{udjA)<%hLqe(7B;=$EtA2mDpG-~I)cT%1c;efh(I
z9X%5gs=JT8FsMt9rb$<4SiSn`xMw_Hw3=mK??BBleLJ^m9^!fOg(o6E>J{gEBEzHg
zdhbo0Z0lY>a<=I<r?o3jg#YmU@ZWlb4-wC`T=dx$tG&Z>re)Xs@<6Xe{~L2+z`(#R
z;mu~Yv2vcerjh%;V=q^luqu4QJMWKO-0ei#juJ1|a_!Y|oo(0Ft+N|<ym|R2z4x5K
zXX|GC_R%rhi)DYVKDYT-V@mD09H;;IY~_rosr#x7*?2bY^pO%tYhx?EXj`k_gv8*_
zs|?(+Y?aH!m8tdSf7AJ>S90gSRxj8U;1p6VXlG1`IUl~ZXYl5!=d-M%L{{;>v%Yv?
z!MU0XR+ie6l2v#A=yUr|)vDvx`S)szPL`eN(5PKhhv}o=`h3jv3uh+BIBhO_>%--v
zPuhg;e|E;ZXZsyo;(D#+lF*XJsx2H_`nyjXfA-wcwohL5oPXlA(JdygafqH3=^I*U
z<+tBC+8w>zrss??i@!@R=h@}r>D}u#_Dejv(Wl0nf4=itm6fa8Wsm%y*Sv2Amvnsj
zqIg|*Bq+U7jDNcq2k#wQt-+AXI~|;^1P{At({@(P@s*k;9Thu&eRe{|su}Y$Prq0G
z+O{`*XN^7(wy50tRVRk8j(p+C_!E`fYrG?#h;H@4r4cu0HqM^&_u}e54etK+&9^T7
z&%-w1!{@vg`R*#&uk4SbBj=nh_uSsl=Gk67Mti*-TVFqJPVI$%jlJ6W-0PqE_`GxE
z!+PiI&h7N}l2^<7{#~`w-UAU|ba~<9CTHI}Fl)&VQ@VHR^mKgpR~miTXZqwr-ecUq
zJ$-unN{_M2W>;QYI{8MO|NZd99-YhJz46h1J^gfzg#DRAmhF3g-`}mb&knoTaNOl<
z>jrLr=I5>RHzd?(f1>Pa{jr~}4A_;j$$8iAk;Q)5J>%oa&fEUVw%yyjXY9<c++G-v
zyzsd>KbLCX@rTu;%D1dC{Nw8bMBlx2o~bZ;;Cja!Q-9mkvtOThul;{4?%ldo=&E*I
z|5y5tl1H~Mt-k)krnG@e-`cgdU#T){udVO-M`DK?lmD!o8k_Z-YgohYcMRM(bdTfB
zRW-IH#8gXY*LVE)m$sa{bg)avH=_;@h#B`szqqg4b*Yd#vSW#c^?H=}D1Agq$1d5+
zn~eX}d8Ffn8~yEmSi0)XlD(I|v2MnV`jz8b?^-tf*xJKSEk3Z(Z&~yw)+<N6zu>Ba
zuj?;I-9I^&^rF?)ti{_a+C6<ebXV(uPo96JThB@E_54~_YP)Z7ExR@6S2cU$&*AU<
zwbSS1Z`-4uYty{`lGX2BY4&li6HDS|eHQ!ruII~+`J;D0M2ne+b$tfute=T$x1hsZ
z-yI1XB7%Ki>N7Io*2iJp4yE7tHf-I1bz5FrTVclevET0VS=D;b>0h?>?K^XQK%J%2
z%2)5>=+~h5fUe7j2lj8>?(aQq-@ABl$h*7t{oZzU-)`@}`t{i}eiZ`W=(uFepIg_4
zZHoyzKYs9ysjp^aH?S^!pzCXODqLv!<*y&zniARMpnuG&H@_KuIOC-rA3s%Q<p+II
zukLp~llphbaqIf_tdaag_YsZP{TcYviu2*42ewbyIxV(}<J>>jj0^D#8MjTh<m1;p
zKg&8XDR}iCapONO@$8Mm1JLGH-26%tyN^G1Y<IFv{DP9<%UzOd`n|KiO+b$=8-ugk
zUDP#PeZ2Rn1>N@!E48iCu~B1gv>IIO;x|*)WQ_c>`Mffd&d+OTJA2KxBTLSVbAIxC
znbAv~i`$1?e9e2%N7MbrU09S;>rCfLBTmMKHWTmlDRwr!V^CUx?S_wPZ<|zdO4a$l
z?|v@le^;lzaberGgVSGY_1o^9&reO*>K(oN@Q`<|t^D(^4qHZ?esz7nzba(4npEc7
z#^)j<=dDlw@Jy?mD&^i1S(k2NZ1(Qb;(KGZe<NC_xKvC#dG6}Io`>7*J^p#+wc}!{
zUMRnJO3R}ys=jy8<NG7YYget^oMM-`_|KJ#-XHZ^y8-7HyB=|PadFVI?=L-nq~(F&
z=5Jn)3EBMC)`}x_Q44Z*EGb>?^4QbwZKzS}Z1x44dQVqA*x-bBnb%9L?$dvBEtj%O
z9p7q@HEYqV<|AL-nb_phT{XiUymu^W)pYE_X8Tvhd^E<d%!G13wA--TzxRzVLX+$J
z1<g2gvPRUv@rRF>u5qN=rC*Oc5kAW|`$C0~PX~N7e*D?i@AaBfztUWf!8hKR8C~3Y
z@{wj9b0(C0?e}$;Jo|n%=bg@3XU+vq>{}(|=Nlsf7fsy~d05nH((%hOtqzT`?szu!
z^{=jO+)|>sS7s~wl{-GIb@A)z2d-UdWWB+Cuk9x5wyoPPamlK;;kwRh>AVIDkC*HH
z<D^<&1vtK||D)Kh=Un%Ewz%xdsg-Shad0X7>yy_fhA&yQwZc!=Do4%r{LJySm9ZJ?
zOSt|0$_)Md-ZQ)^E$K0<#ntzJ9e$$nPo3*cs1rT#+maI;4t1HZKyTgc&r>mFGC~in
zEP1}!^_au2y*%lKlYV|(M&x`sKkAv<4ohNI1U9|iH)zM;(`)8MKhty9OS=NSYK8RM
z{J-D2PTM$myvMIu-fM^5jJm#L<_Onk*G?+yam2CW`7e?>J+*3LQ0p512N6K-zd}i+
ziU#rd^)bc$VW0kVj2*Vl_ShZrP;I-y3scGEI;tjcs@<2561G7W>#WmQ1yb@8bOqD|
z4nLtvqp%#zkoxHbIz*M=UK<HwzNi%4octW*_T-_^IbCxkhmUBc=P`L>6|N2(3*4i$
zpe#<pO_QX69zHWUZaHsg?!NK;|H$U976^YvEi(lE%;c3lq}o|-VN(tru5-{}ZE(a8
z7m-R|6rq7!;T+uscUS6<Mr(AW!$x(J4##KN=gB@G*8b!a7skjd8_35H4LX}-IJ4Z3
z^~{fy@=69v2MnYU;{+zjsm5$4ZF5u8I3v*pZ6+MZ1P>qnC10k$6JV9l#(6P&7wu{2
z0bt35RN>)N(Uv{`g<K?U*JPooT@va3zpcDWGCIhJ&MZIRfE!$D{=OpI?L&kH`K%*%
zR8427BrQkS{Qh%7XLO?NloAgl)5g&JyC8p0W4U*ybV=~WyccQ@RB;{Wj)j#QAs<F+
z7xPs{Q|s7~Rr6t`CinB<MO*|Sn;eY!fq#=}WYOiH@`A8m1y;)rYs2M(jz0T=RkU)}
zY;IS#&2aptx+U)pAW=cd8`RQZd52JKw9Tm+f@_*w+eV{!>Up0{79&M$To?d-MRKph
zuUU0h73c1`EMa9I9`B}_UuEAe-odZSnbdKWD{hVs^(CdP79#*C0;-|Oe}4K(!_<z5
zKEs*c7A6BUTv}JVfGoZ=#>|5DWz54Ns7!X3a(>SX)Q7`$`_l72Ly%GsUaGs2Pu%zh
zV4nZ2)#+GTcV=7_F!$*_c-^S+9224>j^*q45_~Qx`HjD(Ihwq}8*L-`Pvu*^-ApVr
zz7wVpceymX{?xvjFo!Zj0fSw=Ra9BmGL+@H37!`dVI(@VvT#I`d<Z6VlqoDR?I9Ui
za{mSkNtt{`$5~PVZA^s6%=d2`pllu}$34wF3q-BaX^tx6qpG<jM6m>NEOc5KDT2@N
zi4pV*$Ds;DrWh8P0)h-&^p|n^2nLSxG3?K>T<H@ul%4J-^!J?_{zu!3HwW(#>KQPq
zk^Jxnxhs8lbQ79j2N?kds0NGv7ec*Zj<GCLm{e*}nSFbL5H^&TJ=ri|{dM}Q$S+Q^
zIjT{ugD=gVMs-{{PEM}uMne+L{#9n9FUbH#ENEckF!UIe;AjBCl4|Yjl#%Lom!tM#
z{@WH4|N5Q>6Xtef)A7`poLjWN^TcOk9cKki+$uhwf768LdN`=4=od3j7K@W#Gpb&N
z*q^IKAjN!^vGdS84?6vedpnYWTQ)?pAInun49~eqHg)ET!y$wzB7SYpdM&mp*oG||
zEGQ3oA6W!aw>QfCVkiZ{0GqsIRK2}g*EBqaRGce&*BWw{4~CO{Bn3&#(aZc+C=p@h
z++8(yV|b*sw|BTOQ3_y5ISN4BV{7+UX@ACL(2z1-@Yjyvsm8ZP&c1D{8eK`gsLpdX
zgCk%oV6dCvy3&>{BU`|<5zuOsnFd5#(U0B#&T4~eAzy;O-rZ%Nn<@-sJOPG`Y|5;5
zh-bjW7~_eqt+#Wa=;Zl%j$kH>3`!la52Q!POk@uFZ-gjp@-PY5?GcJ-VMaVI`?0Z8
z8j-RHyV-FL5w|M<pdHE~Pv?x26rcbeslYT)J}mx6lW^TB6r_5L2|%~;6SM)-rd{zp
zI*yvw{fW$|y`Z7~O~1tQKHGxD0aVSmP5iF<b)CNeHlyQpUa|-iQSMPx4kJ`?Xo^%U
z0Jla$sy(Mc<f4Iq0D4$6Fb|mJHMHH5NZ`?=5Szhy6JZo&CsGs<xR$P6E6<|Gd0nGS
z!DDmk{A7jRrE}s~t2Tar4zVbyKgx-);iosmpsATO7b4Hc$|I<^gM9Ml5>pVhi71pe
zh>URkd?NrQ>;RlsvhB~X9%}Z*ssj4bGV}^Oda(_fExrF7vYzRV(e27*Y+HBS77{D{
zb9A@3q5Kl!Iioef2e=S1qIuPCj199ExYaIwx4VPns;VMl4`UiDpsTfs7Wg751Aghz
zK0T8bVz3I*+TEJWe;_{&<tX5aptA<cm0%JA@Gu|fHh}NBYuij{_c;7HpTkK2&u)=1
zmez=<i#{=J8j?@>MdjM`<oiK_OX|J-8qzJ7w6o2^LZ4<K5?8XmDIp}OVaIAtkMYUA
zPB%3y$R(V&C6DC$!v*0FwOTk!iThU^Pk<-GHE4|vf}ge_UCbd1^};tL&u)^)F{wwl
z@`k}?N|&^?IbM^d>l$sj_o@OM&mAB_I97hukjS?WN!3G3Ia$OOP+nGHJ3WO6R&o@p
zdBLIcRb};~J?z#?Pjy~z1T_){?YdXp7b6;ENuptKPRe52?CeR<uE7aSKODwc*^h5J
z+Ntp|W>jKeSJ?v}@w&6T3->a7K!Ob34_piQTQc7cHwH5UtNHNJo$`(XX)f1QkNZe5
zuN}k7Gl&Kz-jT-MO-tOm9G2CBdRp}QvDWgO?$cy-l8(gyXFt+0kc$yR)*l+YdPCdA
zTA?BN7#${z2K#rw2}xjjS@WH?Nd2OceL5$kzdKv+B9^chyrB05i!G>%5#aZdbkg}m
z4Fk8>ib|%w4s(7ZrvaD=bQ#!K+}f!TKs3?Tpl6*Qdj>v9^`|}PD1dAhrW4p5Z*9L4
za<Fo&2%rKrMB`_yPrr(36OBNrH!P3;GxG?chQ+matYvS^T;`TZ|F?MaB@u*;a7~uZ
zXOBjfCig9hY~B3;y)if(ach7_9L=OE)Wuqs%!-r$2%lu4^yEN1>h<j$?#KNWYW*>U
zfD7$k+34M^p5ajT$EkqcobpOF!q049O&!U?D<1}s?C+$u-8M3L6p|)AZS_a-hVgw5
z^!__l+*PRj_-1lVuO0Z{bwP;nDUGg9P-+}8@|JHEy{U&xW_(_)qND|1X+LqOIZs8N
zg49Cxz{#V7ogaidFdDRVU+0@~NT@!~{uT&$JEzl!bAV+d<&7MwFj|9aX6!%BONoPV
z#ahAE2sP-`;B^}G=VU)Db)bvgS$9hzmSDkZu>ms0_|IVVPKi-f+)aQ)A(xBZihrtx
zmKm2LLNiq=_?oImxhlINLfJTHP^dIN)Ieo^bFwa6E5)*|&wXhf;@wn7VK0AppPQ_^
z^4&Ib&_VpGX!NDLHw;qpg68O5GpsYQ{rMk{KNa}S3pSd^q3`>`lD%;lw$Snoap?wt
z(DR58zdXlq%1-r3fe{bUGU+Aie+PxZ;#>ATmprIlOev`$yT#j76x0KJ4)pUR2zJ?~
zbEH$EE|<=Uy<{AUK&Ftm!(Gm{xTBnH6panX+2e;Pmf=N4el)X|YOL2w&D^t>A|i(E
zeaD~jSSK{F<bD<|`DYjL|NBkgW{X-Whndtgub5y!dQ5YIMEcDgNe%9`kzFv$1mCm_
zT~1SYc<~_iY+3&#4S9bmh9!LAp4=<Nfbe}k6#<@xTEEPsH($G#E%=|kiq(t1EcI!e
zo)B?ij%jRMk$u{q{l%h-E_4PeI=u|&kJ!Z)ojruZU54p08>9xM!2IN)E)?zSyfPq@
zh6>ToS3P4M2+r?A1D%}34jwmrZ><P#CKLo=)kNwbdgJ(yOcue3N|P(|zC9Yl=)&$5
z<qiV@e~eKDG5?%7Q;G3xcg6Zv`-s?Kz)#sFQqJZz18Z258<@=o<pla?0!bsR;$qhr
zm&POHE_=AT=>>M*6br>dye!VwD1|7X)mf^;au+Mbwz*|t#5dzodY&A%uxS57K>4@k
zNd|T_NMB?@07CZv`r#4{bcY8b`@HZz%u=qqqTz7<Ocr#=xa~ucFh-Kd8F(7(fLa>H
z$XzmJvO00^S=w#25n|n)%V0((u*6$j{Z97UlTiKkpAy4wCyBURO9vJoli!x7wJJ^`
zF&FXq#%L8)5a@y*gDC6!*9YfJ^=KG>rWYFuIahJPki4}A#Ae!3k=WpVGJB$G6s*5#
z)9tqimiWy1JZh<HX9~2?W6%LDibJpr`St(G<A*oUMXM4!x-)HgINZrt+{etjyJTt2
z9{9K~?_BAkK<&<3L4UL?J|Tsn1D}CK4U74&?}o~Qb!U^;KGc-Zh8X1QuVdk8dkCgV
z-KCf8VK!LQsr;Cjmx9pjDs)8<(uMIBw^HG$5>pa<L?c~ZIY&;=-=i4>YrBif^ijca
zfV@3Ya@wgN=&HCVP65$QA|ac9%r7L`#C_%!(r%M(gE79}if`Zh@95O{Tr=KPMEX@q
zim-^eO{5>V^z({)GB5r_KPa7^+ju}!{ebS_^hMK9eN_g!QRjbPQcJI`3(FPrZ-`l`
zsovqw3zI`QHH1A17()r-UZQ~7r8KY^|BdG=>p=dQ-Hdvv9Y474{YW3d`aR1Che?Xr
zJ%#VBa1mqbgRXr{ZpZr3@D^?(j2USG<AJeI@z~q>tx3QW=?3iw0qO!_8Yty#YJHsr
zu(W2~^Ux<4+1)p9&{oG_OkTkx(R>CQK*L2Zg5In7-xD!LL4Wfybbc4fR7$GWi`Lfh
zk5ApH4O8MwuSPVNdj?dXz%x2c4Vg)IKlgF;6x4unUITOhp3q3}Lqepj+uM`3(${3p
zBz3wO|F+kXo-v6*Kr?Wi$lXYU6Rpva(Y_B*LLpftjK2}VyorQd@bF~NIU&FRH2xJD
zrF09*Ep9hjS{YnkgW569fa__&oy$S6Qx16@ePQ=fv#bWCWloMoU-A%b0yxw<b8i!a
zytZw;qE-+VwF6^{5Be;UxV?QI_w{W>j@~zc$@)T&CQhc(z^i4p19HV~=heMzOxX-~
zol{PD8U=WYwZoQuQ3$e_f6UFVrYem-q0L;!WqSupy;))CJNmdU1lvoB_zf&Z+W6!X
zpm94L7p?m9&q$kB?Ic~|q)RaFhTS5&ytD85+zN6cFfm?4^HRDGUEE7gC0~t)j)j;p
zPMbq7I&V`mH(*-p?1CY3R!av~yd38Dzo28cFZF6zh__>Bs&FR6gl5d_^BZva#@U@(
zfHnqSE8`Y`k*ClLXs6uTKd3p^?2g~CqE`!{_W__Cg6BQsb#?j8w<5pQ;n=9249(HL
z;YLWa`w8@gnCzdR)~o3<$ktnnMyPYYA@35Fa(kO2%LKX7UjbRk6?tV(M>>{O&KrHZ
z$^zwA&nSy`=L-R-p8*xA13{=VU+I+-<JrR*WBw5t9GW+$+^{ajC9SUo*sm<lE-e*~
ziB#qQdU{4Tt*LPfJ8&MlPbx+#4HA}_Af7_Z=})OP9a9cPqAI16!d>+0YBn^K1QUwZ
zA6Jn^kOgLw;nUVL-rSi;r<C4EU9nC|D}{2P!@Fny8|yUGO%~>Z^?2S#mnLjXOU;-|
zm%3)O>xhFb>=TrNFtTQ_$UDB{CDBKRcgm<l0Kf+`|0J3cf2lSj3gv<eK-5u0XwyOe
z=$0#CJRN``{jCX7JMVwq?9dU0N0k&Ai^Z$mr(Pg-i4`$^XKUBB;Mj-qMsVu6$@dfy
zvoA`Wea%R!4b^J(#VPXeQzX6uFRzGIuM!yPx0Wmy+F87c*<!6g;Tpx2DrjD&cqC#o
z7Q!&Ytr0CQmydH@$Q*3G@Q^DGtoXruhpr@k6AzEOwS=Wmkx%>`1NI<KdLNNOW^~(I
zOrp2oXrbUdP-ae#Z?@yOE2JdD?0h|nT^CI6NB5-Oe*ZOX?XrZ`#vlQTr_f2h0XNVB
zn7nB>H!8T7IVK+*D7^8oxsP)_$|)4$OxnLEr@xEyb6G|==vzX{j#>}&kw-xn=O%3|
z`4Ncjhf6*QywE4mjh9g>K+u|SEczStUI0g~;k7eqEn@H?R;>Km@Yj<DxYt0KN=Q+)
z(B;PugPGw7=!FiMg5-Mi4YTG0P}}DU1oJIjLdQs*qO`eY;|<%P^M{Q^*(gGq4&lbH
zXQ(#b%akUXqmpB%XjsDBUyRdq(jOQI=G&k)y!?w1vnp}f{c3WbaBw_{vvL;qy;Oyx
z7(mhPfMMOj`|8FeKp-_Z(&o^f$k5`vgQsX__VG8nz+N3+h00VE@$JiZ%WJW)Vh{<u
zorfx3bUDTY)rN2uq){VA>-0I4!(KMN?cAHmH<XB*i8@BIu*P_7He!P0*4d`V>(OX&
zO#oZ$1OTv%)lutv5X8~m`9Zs(|NPNNKG+!QGifz)0I)X~hOsc)F%Ty#X|68b6breb
z4#e7tARG#d$j-6Sg%Df>z$N8ztvx2>0xI7@Q=f2qDNZ)KIo~Xk$EHzvCrk=`imX0g
z(G|(UYtUY+r*T6Qam*Y!sC{d#XtFnY;_|(t$JASQBGheo!_<tF9*iHQq#b=+;j(PI
zkml>3DatEf^1n?spwi+jawP!|f6m(f>(z%A7qBEiKBi0PK4-f)!nIpr*ZgK=`$f=w
z%07g7yR!>G?Z1~P!DR8W<{3hYI>gXD9qjryP^onmL@3=FTw;+^!E1*^0>sL#dtBz~
z)iBSOOMc)b`%5sfmhaS2A^}SGhc7GR?#6ibIiAl#Vce0;h?s^l=G@iNa3V~)5NsA6
z(u%6JK6X~!54!7sh@PJ^fxB^QQH<vy+npB)=Z)m`Fkvb60|zei0|dI>U_tWH1THs;
zn)*RYeNei0cC%amZ}(oR)Wt%=@`vVGlk^F%ZUK?hrGF};Kf20~BSSCgu@YyzWu-Eh
za*BuWE<-ZI1Pu~+ysc(3<(Jj3S5yzaE^%A{EptoRc&=Q2kT=V)#ouTkFKznRp0B;c
zanp851?b}%2G`QSefe3(UD;x<St=>lxZ8U`ki~f}d8GzZB}cV{C~zcU!OE1QR{yPV
zO80X*zUyN|OsJ2VAx^Nl1trtDKB}&<VO+$CZzAgC*d@caV+uRDVvI_!m!{<Wuo0m;
zh`~Cd1Rvm#RxGrl%9YFN?}PPfeF2CMCS_FF)>E!L^~idXY<TwQf@;m0$W>OBKiqgU
z;Uc~2hJklO`YCHFd$e$T1KP-K5m<MWV&r94K=rM-DI<mmbK>BwDEM+497dqzjzTgn
zbjv5r#oa`*yr=pA_e6ro<B_W8&Fw6l+z<io*^9To;X`i8Z(b>R`&HPNrH)ste9|8o
zqG}(hi0?M(XX&5>Z9Q{8+0A)aS?Njpr;6KtL`Z9xs{l`AK8eBxlo;|21T$3Ii(35_
zyM+dqS?~y`TqVUE(&fVE0G?Ar${mJmKj&jG*@s?JhIyuR0=!PAcKIg&vT<Adv;ViY
zK69n*TwJE08oZM;<_xI6;*+UjN=K6lf_axMXz-*h(pC~d`9eHGgRYe+Dr%Du#hnP6
zh+ifb161iAEOm}X^pQ_Q$m-xU5(h9HjqUPp!HXGItdW#c6vGwL${ai|s_fzeSdv;l
zo^$O98Nzi5pcc)ISY>DJbL~DeN)NqgvtA|-e|aEtaKD+Z1D+*%kzO+Xv@GWfwd>7{
zIo*ZS8f)Fe&VfzbR-Iq9k?y?~e_{!?O$N`y*!!?3+)=XHYCsLRf_;lTpHG7k9&1vJ
z>{@haEu@DkgZZimHsNY$pf3-7>$)6%u~uP8a79-@(@WS$!8&%ik|5W9&msdLF0?mX
z&{c>f7U%ckfW?v+r*i%_LHxKq{;dr|XrOCX<|<`p-k2?v1*HNgJSRpKMCuds9wT_9
zL-q)w0Qf=<A`72qfgvG3fiHQT)R%y!rVURD5zo~8@0^W$pL?`^*7bD=YWzN8?!3|4
z6=v9%G#Nn_C5KO)OQ2fqr%?0p)d{N47>F@r1z{DB_P8R;V^!`}B&>J&^Iio2m64iu
z4nh(HL^zZLSLAzXFNPl4mlO`sYd*z|jcmc7nyx)MoZ!<^+vk#OC}A8xG<Ix_zN=<V
zH;%^9f+t$DEp6cp5Y;e@=@{ghwL`YnPe?5z^c7lWC04}ykWW67k;gbY<8-WpesI*X
z0iB$&uw?O*wyRTo!%nz2m}3mO9|GU1WD(;<WoYP@IL5c{kplnUh?AErZttRl(IX1{
z=ww_wdeGoHM##KN*-N|y31LN8gs^(^j@>t%>C%x&to8iNn{dW}<>S+<27Wi32Xi$y
zvAQh-E4_Q}a{>1P)&YIL<~_N_qLX>#P>g#^cgCGyll_ts(4C#Q=BxBq!@7mG<Nex|
zuUf{KPi=ekpouZ6=_Z8p`pjs*WJtA->mdQ?el)2$24q7Q{8(h#2riRrF}5Z%cAjQ%
z)+1=>wrOl`^V0ip!;u;+%xA2)yvoR(j><<DLfUQ-KE_cIfCM)3pYq%$qH-Xzf6x2}
z#8gMKTV`^yTi|Q2I-KfR-o+u|gK=G9*I<9WB!pNh`tW9%VcaDO@6dduoijO_y}gTq
zaNE>1Iso0W)8F5KpWCbWuK8-5_a7?1GP-GNYxExM88leRyx+i46h=ni0QKY!=YjZ7
zVKeD{2E8)s6(g$?G3nP%bXod&J?Jxs_bSJm`*qms7x1MGSe&=i$kunKL$&0XcP0QV
zQ=Q-R9O(tTQLjrqgvo>9Y>>sPtaU!c%=mkW-`y-A<XBG)-7DrE5VmfbMlKjs_KZ_l
zV$Zf~fA9LWe*=ENs8r1-46kWjjWm5ny;RWz+RUn-i<Gp?eF-l}@o+OAmb&3GyF6xy
z-?tcT?K=%okVI>qw?9qMw%8JqN<trV+YtEx7T8zf9X#ABudUT_Xlt)R1UTXVdbJG&
z%dIz(WIY9MI9)t}cNwKOrBi3+fbE;P=v}iH0TuJWL7ZB0;8s_cA(H@^x&9@?DiGH7
z{D9su>)YD5{3LR@p|)(t7$O)2{S>n=8rwONX+&o(u>*b)vCNSNgBp02w!r+(%&}Hk
z4LQ%BLdqqer~#CAP3Et;D`9gjb?^Y()uGF6M+g;Fof*gjuX+}VoGAPod)cW<_68oN
zMW>$ng4d7oM2MFDPuvI9xG6X;B2{M@-i$Fu+KupxeC`b%<_7+&eoRo6gii%$l7{L)
z)!eokDGKrJSw82w$y$vll6yzTI{20mWQR*(b3syqC~$4+!F}2ZLRtK%xG}U4q-Psd
zOQy<$F0`dkPl*N@l}#d}-~H)um0_O;=w0(=WgEYV7f@@Kx$g#Wd+voty)?;~`S&f#
z2u*KJv4}DsKt=kW3le#8wfkZ4(tnC?@sclm((wNbuj(fus#x>j1r>DKYNj7Rx<R4Q
zm@1Ar3UP{flyrNQb7+y@ehB@tS&?XdD5{lIOUF_RSoV|g3r>?0l1oF+GQh)+P|$@d
z08_0kj`52U0C&N~bzwz>vWtHI*8PL!r#dO3z7iI3kHfN<dw(A^ulY43aK->P$4gt6
z$3p{BO?K%#A-ORUhRaCYDf=JF)eU#sfim?_1Ow#umh=)%5}0T=eP<aw1jY6N0gcbE
zUU(Q*Y|mn9{R}1i)=Kj%;FaFoCN@;*7uj~`L7rfE=#}k@<7w(EhA(!42mYYWQ^aP)
z1B7e-QV(+a_c&(9n7T{dmD}R(+wJh(U}#p?S*Sg%23*YvbXM#`z$cZdE^AR`Z#l}5
z*+CG9JL=Y?o`F&wj!d7fSH)k?M$8ObPvvHId;W{;uL&GX{C?mp=DK3k>;z;av8c=@
zaxoom%T~EKiO|oq9urIc_y@ZsQ$`Ktx;T7bjdE&h(&R#&H{i<XhE-k2f^5NY(6)2$
zo-f)`3u5^a0gnT37~K^m>Rh=nYw(tT_`?A@a9ka-#UD&}t?b>Qb^xh8_qoWL!dYGT
zt}&Q`>}$sTn;9+8#`=Yyd@*v&ak?z>KeYnW(5_|}(J0|4T?J(TPRbDB-?BBdfmfA5
z-|drq)a-)=!Ph5La|lVLYG^;6nUAvToP8AKu?Rty@L5=1AgAmKO5(za#ofD{o_(p~
zrntiX^Y(Ywj`B1r@<3$M8y4JJIGNZ}Z5a+27t8nPkCe=lc6>erp)R)K|2JKvcp1{b
zHh2Q<bwxfq%nYh1tS3}MP5uoi3rt`klsQyOhU!Q2MWMPp=5jrOWfG#N(D19ghHl)i
z>@mwWPe?|qpKizbR2s%Hcgy`vBN_ZR8smzUzYbBF5R7}83K6ToXI%xdhxZ7Fge5Sn
zx|;XdJvRsz4&CU&PW(h`cL4EeuTs->ZPdUpM?)+SM6LLcwrmeK%AQ$`OK7&SH@0HI
z{880Z6J1+S4*g_@E-qK!1k6BZE{G9q<onutXPAIMa>ZY8zSiLJ$7K#5@dBa}c1~dR
z`BXM2Qu?gUJuzxz56%72$cBokZYtdRav3xI3C2WVFW+*ud~8}qi9;9*$*hotCr%t3
z4POUQBV=6vm^2gFNKgGBdK|^=R-rk4ynxMn$0$sfH{NQ;_^0u_Y&|l&{^Qwn`rq|K
zw-muZ?}#zx?#8u1S-caYgk?<LP4f~#(G!N_)pVWi1wL6VysALh>W0iGm;Gra#vsps
z%y3W+2#J>tTl@hl9A8_LR%S|RxOpb6t7mU)_zT}`f08fav3tB%+WHz+B{$0P^P#WW
zOg?E?EVbJp8)ytUsA}SDf0CNX1N8P1RYSdm*8Y@7G=^QQ-c25Y@n5Tp;^MVVMQ|KD
z{4_QftBM3F4B7?VKNqY^10Xk6l2_Gnku6@oc0HCCir=g_IM+WI-2Qj4IvU}C8=^G^
zU&G$X;~!}dW*uI%rVG_9qbxht*IT|N_^_g5@0mYPns6R+lqhwdZ-G$I{W_ipx#6&C
z13>MM-A#6%M2T%2M?;7J5T5d5u|{9HaqMy#BAGmhNk3QC2IQ%FISinTtbe&Po;Hj9
zQ3@V?8ejUSSA~LF)|(uIi7CGbuQ*f0&t^<qZwk+VKRYd8z=Lkt)2Jkbvi3VtA!s~k
zU7eR=r1kn}L*8hi%Gw}dJVQtD6a_*iY^QMnw3cb#Au*gD(_<c6L2v*;dit^B!jfUF
zp&>o?naG~nO(F;85jLCY25fCc(mhIaBOi3LFE<Uc%<RtVXY%@bw&nB;O>Cjle6Jka
zQL3l6{RPQCED6Q%LpaFWy>HfPaW2-wwBEKt-XCJPLK$b*o^EZGCUjm3^&nwwQhNW-
zse(>4VmyZ&9M>QdV|AWc0o6bb*y8WY!9BJ=LLr#doH&<}es52iOHhbc)aCgrTK7Bb
zDV(C62$T}d6Q<3a{Vf;4!XV6)mZ1(ToRqH-X~s)QS8m*rq{{rHAUhi=bpR>MY~U0V
zrwv$C4-ekmU^Eeq#IDr0JXN=d;5{JZtX*=QVmIji4{iiM**Xii)I1@A>PTYi9;U$-
z=C!wSG|jG{d&Gb`Ga?CO_9;nIDc{QlO}!ayfCs<?yvja<6_VpA{ZkW^jrT5#8QK@o
z8LC%kMDjOc%}~@UcJ!k6!HN*v+1-%k!0E%cOZDBcZkvzAu`5KD5)7Z?mYAnrp>U$(
zz0hRYaiOfW<;d&QX+Qd}S6XRwM<1oV9d;T{9RruKa&C?6S-6C71|p5Pm_{{qVI-HW
zuVzv7MlH;w){*s>tKf1phg~tou>+jd#f-trGti%JU{RgUGXoS$915f7>2z9-qx;vg
zDW*@%JFzaB8t_UXUpuQj=3f}#rp3xNl*AmS;9lE#17xuba73#95C4@qBWQz+rT2kg
zwe}L&yRgBFz5@&p*YRP83YQ&|_Ts@LEMUe=O%7-7mKJjXCQWO8;7PfUr_nS{zVfo8
zGb<wQaeCZ(!s47?0j&Y@HM0DtvjH^|QSeJtqFTdZAqm@ZBFn#4NubO8Lt1#_?HA>%
zfRso;RvWaI^yhI)1Kl=o#zEYEJVoKWfVCA}oi))BayU7l8I27jC9juGWe7%r4T5DL
zlP|j-S=fI1?pnxG1V2E)AV#7FzO!Ags<~XIy*S~fPh*Tm@nI<$Sa?J79Xnyfp+T+|
zyfjQpbFA#qHG^R{`jA$?_<R2+;KdL`8jt!}Kzo;pGP%(4V}{4VWZxNxsfT2A14T$N
zQskWDwK_MaYKE}L8LBond6INn^KkfQN+op8=LlmJ876Is>GpEG<c-xak93WyqS9ho
zr&1NJPVFs=2{K5Z{4E@;VQ3)5JCeHItkhFONaYkD;N%lvDhU!ed?ScXXLUCl@6>Ys
zg3ON2(VIxy+fOB2Yu<EhvkC0<2Ic%!eC9YgM-#Pd!rs%#Vfe$N#UsrcjbFZ(KEB`S
z57uv)IvoH1>x@QHAF*%#e`h1CqM>=3S>93js9AP|?2c}=gp{)h_`6<lWNv+_?ZC?P
z(TZdOt?c`)7)UU)zWKXTXG5%NQ*8meR3itQ`n42-kM($N1N+?G!vAOh-}=OjX7v4w
zKFr*6wcGY#$Kr0dQzc*n>lIk5b50QY&wI0s=Pm~xB`q|2{sOB`fWGzx=-%e=?uR(j
ziEl1MEQTb*f#Nk{)AmwcJFwe$*Bj=wqIqA@)f^j;ayDFUivv<bcYK_0saaUXS;#_<
zV>%{+PoZ`+c(DYD82;^Vfh&S0p6kM1PPd<GCH6qbML=JbXXt}UJUB~JtT^$#Gg3ak
zd^>^@FhgCCJuDId8tFfCtwVE&x~hF9b#1Mb*L++1EoFh5I5(&7<FX7q=Fs|e*b(I$
z&*D&Jm)MmY4kP@tnIA13G6y5HPCJ<Py5vnfe60Mq*03ncuG0#_xGN~w;bztP=jZWa
zfrseSF`w-kOc7$JcRU&rSI4(%6`NWfp!EXzmbi_R&SU_7wBFDnnt#{NHoaP~!mTZG
zN`jvMqFheMEV<eXb8lbJb6xof&{<(ie^QJI!1dUAp8A2ulW6}AdDAIw6~AR{p?T4)
zXR=fbH@&*mSqvqW!$@XZ@yy$9;7cS{^H<jY=pW5drpji{G@^tCSO@fi4<FLlSiE|F
z*wHe+Ccb7dwkzim&KAduD(%Z~7&WgiLf@8)IY3hMjv4a{p7bP&V6V>ujuju}(*c>c
zCUT}0><7Cc1$Q4abPxe2gq{5aAGa%Qs^i&-D;}9r?$Z4ln(A6ML+58cXTHgpQZkX~
zo?{mm1?Tp=kZc!aMKDo3#XR^OB%cU@+LetDsO*~?B%YWtgn(5sO5f^1@NRlq;U^9A
zlkF>Lx?W31M2a5xr-jUQ<`{q1@2Ip&tD+^Sjvi@kl{$lJDa7ib!7!e$QiEwsfW?>V
zk|v!axoeT#2hD(l@agu6KN-E<^4^Ju=|Sp&CF?G;_R!qLjj8BB!qjHel~J8T=>w^H
ziXLSW)kdONm>qmKhK_%<cOFf)bneP+4>9|{E4kg~YjZeggzVj0Ki0jx{GO5tI*uv6
z=yW^ParY=H(vP2zSaNMu`&wh<mnEsnSfc{b3Kgd!FePtu9d|AJPR{H<V}U%4xT5G7
z{_XQoQ+Gk<;`@tgUUlMDr!ovl*{K;-yh&%Gam(RF0Dc3FWmpyn;Z9;KtYQiqbMSkP
zXVxqp%>@-5P!+W<rV>>BuF$wFPUqF3pL8gS!57qV5VIhJkTZRab8|8xJ`x4&b{H&(
z^0YgvmAYQdfl%^UjkF?-eXKHkk+G$XJ>YE?OHPqY1_VvhF;UqPVKVnKy$oZgxEE6I
zIsb)lpTe-%tiQW>vjl)9uGArOCE_0C-^~=De9d4sd*pFHY?|uS(kV|sS~EdL(xV~m
z(y}BJE2_rj`z9)_Ij_72eK=`spU7mRS>6f22`SPpLS(v)sd5a0jZan_J+vI!W{N@5
z?AJ)=#3FyhoRxn5TS>Ut(8?RG?caBQs?|Q!`Z4#?-Lu}DEw)bE)7Y<Xn!H!6@%8yf
zZf?E!*;DY#e-e&1c?Q^u43H=+u36YL{Q!sbi7U<TI_Mo6f5*|8va79BP;<uJsXf9(
z|LxpLnwnSr+G-D|QKVihl+Z4fjf?XsZvT)W^=p|#*DNm0-^FAC(HFruleSC-8Jrr;
zo-m@nON#RN>ZG-2#u9+qASrP2fx8;-m8Uh{Hh%lb(sORFn-Y@#BSk>w(?UV&r>-G6
z5yV>;K-`di*^UdQEp=Ofdq;Hhr>jgeCIPt5U0cflvl$!;8Zawuf2zLBF58~D>G4GE
ze!W?-4yn(_NfCXL9|FvzLwE<eR_87y=wr6s#dj+6oWQ~G!*4-s3Cinkp!-m9a>YjT
zqzi&ds%MzVCL|c(r$@%8x-gI(7!cHsDe6Shyp>K66?!k8<4SvorI4AEr<!fey8Zh}
zDJ+BCBHCHI>cQAx<m{x!`jvReMsy?xka(-Gu2*S#D`&~)+aAn%&|*-}!RtS}lYMnA
z4{*&JMAo6V$2YqwX_@H@wOn&6XyV<M)?bG0+B5MsI~DQrcdO`3=EsAxuoznXko$j5
z1pHltteKM`v|J1vCZwpqNlNt9#yXdC8y%V$1i(fbaM7uoJi5Hk*xDBXxE;+sTgk`M
z&eqr*JO_m#V@qqeGM@74Ek?ql#`<HXa*M^FRM+fS#MEI9ayUEmAY0-&MHCi-s>3i4
zEy^W{*&wL^X;ZWP`~1#SCO*4myG!I-nv3aU7tm;}6OYN|O0hK(Em!&G1`xl9C%AJF
z^=UFdA(2nI)j0OaX_{W%K`$-ZgfE&xwN}t<i$kAb;BJzeWBi0e%7$zE;I&3m&HxD^
zpKK^oDN=8>Esw14zF#9wPUmIu1&$XD1w!o>$FN0UQV|K4PnR;@csx+_8(fbeu!n$=
z%kq)*R@CkcD=OnF?K63U?!gAcc3xD{ZmSPEg9bqfTka>nqcKOG6;PJCY&3)@yezhp
zKb?KMV?1YABIR1GN4ZmA*${aIxOb41*e;Ifa<|@bUx)9r^U&PC&h3EzI}%ehXl;<?
zWRP+Y7JyM9eR^ZEp4I<m8L~qc$2=uR)bc8Z*R@4DlKvZeinYrj*{pweI;_PGAamQB
zhrelmWrEEo2=Jh07M#mf-<Hw_Qpz&5!=4$2o(o7JKazsUKnl2wM;Gp|!tT!a5AQuf
z|Bd1Pd8N)LrwzHu=|^5r9O=wU%|9i6(bxAVa$QB7(QEenhUb#d@vjdE%`Y|qS9a&k
z>rX6t?ir=+Az`x4smR`mM!S+UXuW&=Zgj`S`<*$+$UyV{I%1T)bWWCShTm9TRo|iD
zAE?v_dxZ<?m8@=G7y7L8DDXsfYvevD?cUNCW)8zGb07ff+RFr>2=c|nn3wOr6r_ip
z&Pv{(treK)Z~U6y_LciAv=QrvDv%106=7mL=Fnb@n0gzl*U0x5vex^boD&k+CD;(3
z_eSiR=TYK;+LXN!P)f=W=AuuRfp)wC9wkdYmdG0`O_y6=IcgsPE=NEhD_7qVPV+E#
z;e9L}kg;tl&3~anr2E&}(Nu!1P^6lTCfoK%&iZC`MOwCUZ`(DjZ~`E-Xm;>dai<j~
zjMTo)xbwBE>eNO40h2&Y$Vq75S@LFe4;5YubUUA+FK4p1+loE-(UNdjJ4I$V2xZf2
z)3c30ZM8gJYn_W5nN_qrcXrJ<X)?)qj;*?iEz({&X_*K65FuS5vrG6P(~j~gpb4g1
z{L>pDsu(+5Vz#(F&6&u7!WXA%I}eQGjU5c@p)RX3Jj{{&4)*YpOk5nYqFrvUk~s46
zom+;@QfPpb`=R}+LYBVNm>-3VD$5EkQbxHU1l%RJU+P*v_9fy+r9=HhB2o4a;TbbJ
z_-I;)(leg<8ok1_OHAF&2}<O&h=XrH4=2{#M`Og9`s3{6Z9F2Va2#|n4+7YCQp`{<
zZyrcvDi6^;Kz_p2%WeAaB<!4PuU2MQZS2oXfhzUB)mehU11=fntd*V#Z%bU<%5@q9
z6VeAtOHd8U^$Q4Z8UfEG@6%}Ffjq9nYY{FW2Yn03AEew-p<ZZ<Y;w)@<hkS<u&}c@
z$ciE=_IaLgayF8$h}JQ{N?dXym~l!Jn27_Yq!OBG*VghtyhQS8&}r#+0wSaD7nDl^
zg;nQWs}u9DE=!IRuuBGQRKu@p`6!P!S=SEKFJls~#77TV77H>Qi7w-2MI>&ZHz1&F
z;M}3VTo9kZ3b;EkmoZd>PK$j_@w7a?hnIlOp|QxNS8*3>Vyo>17axylr4`eZ?5zA4
zL%2v<e&7fAJSmj~X96(Sq?v7Ct@h@iW>8jIzi+$mzb@zRG-G@2TQp_9MgQz*DT6GO
z4x=4Q_ERmj@rBx5HGK{!9!l?DdrBqsDdKghMQ~lrcaF3NcV8<PHu?dhEcOsuc2oyG
zDpGy2+_+D-TQb{NIa_+f-}z{}r{efd@VjIc{Zcz3#&CoHNS7~-GfoWoLL>L#<!d>U
zI?Ux{x{+~BmYvhyu~etjSXd$l0@M=tVrjzKK$?l0a0&I*D^JZgC%Pl*estVhLij$S
z#6CLeT|V)?Pc8B}xF60ARriVJeq6~%Fo<m+pBA1zOe)tferP`tV-(&d8>As%*E83v
zd8bW`9x+Hu^vg-5kq_^?9h+}eM;uy4Fi7!UwI<GsnL{IF*gZqf9rOoem}ZejzF@Y$
ztbsUKgts~h%Hv+~?xo<k)?kXfE9E^|@H}v_i^Jt{ZP<%0`SB|wx*dF4Hkv{}=1vtt
zZ}3c#b!p$@>XfboU{eG3;OX+Rm0!FVS;b;MV^rTWi#NX23aPIPnTp0e#%XY7wLd!M
zu2!(e_gx^?hT!e~|IOnc=Hdr-4bN!U;$#~h&LS#w`aGk>U!Lk+!S<;+Ix6J<`kcxJ
zpBcpqql5RsD5LEz_{YN{p9e`;YoadaOi*=_z4yEZ-6!PJzicTvW>7ekQL`Y6+jnX}
zg>t1>H_W=|_IM77RN9zYzluUWyv=fmK<4!kmfHVr%3$A*oCFW#7lG_#x<j~~fx@t+
z7trV_2j~yK0w8>$V^sTbNR@-eJcEpl<b@p>zf-P)u(5<h>-M&w75PWUc!ghs^Op+p
z&voM<BI8=E7x^=;71Htq*Sic>AEED#49p@Mw^806u(j~+Lz2yIT&8PkddR^yL?hY`
z^w&4Eb;ez+M)1QjbF2F>eV#>NmoHB_J@y<Iu4!qFtp{J=KRUDyK6vSD`4!p&*I@i@
z4Vgu|Xxx1RPKGH&&Ln-NrBt?=4LmF^H~0&AJqf&h2Syp<#2xVa$x9Oq<&jsH6PE}u
z0wWT9_rB|i&kF!u$(VO9VA}l~R@EAO{$WW(F)H53$ou-)J1n#swUE!Q^caY&IsHJd
z$=yu1cdwJ+T5)ZDXxqPha)$@VzhH~|yxPT7*Z<SdC|=QIhcU11z4fAJ`37Q~v}4Yn
z?%xY)-Udk1;7CsZhz{DyW!%@NqkN8q^+!==9pVU|KDI@n@XQML;+!H<Vrv0l#%y+$
znk8<z0TBZC>Z~cPyXrS>EUZzp=etXn0!S|(wxLo`?@v_Ve+L|e+}3XI=98*(<zNde
zMl`T?8?rD5b(F`PMyMabSc$aR+U_f+Fu{Kl<J35dNZs#kj2kvf%tgrlDnB4mB^_dR
zz8!xYlGotNKX?XZbA##6UpF{x4iib}`N{<YWEjZGn9IgiZZVPN6YB!)QIu-BE3%4z
zMqV)29IGU#sc;0yKfy6fx3B<V6a@!(@dl}Y<(jY$AZD@@J`mJ;ngnOmrcg9ppPf``
z5%Xzhlz+zoT}jg45^Rx0yzJ?$CI4HRF1wryv0mpi15w|Qprcwwi~}UF`oXM)9+Q&n
zk|A4FM3z<CeIHW(OK&bL<##8g(y!sC(P&3KmJ$tlQj8X!xig{L?^*t?<r3(7VlCF?
z+#J>TRZOsgsxVeIUeNbXsOb4d^z&DlX)Sf>VmrE*5Y^`;x&>c8(xm|T(9{9cK<4zt
ziXf@O8SM-=V}lwPwPv;&WUq}WOv10K!-y5>Z9PSw+R1Yw;rFv>t>Nq?(~`h^`n3Ec
zywDPzE@ONFJpaO>n5v}N(zYL$Gy<x*`16@Egc6NSZSHJqWu~oq_)SX#brX5nM|!U8
z!o!=$z5<c;>8{HcD5~_6$HyRhYr|>gotqNRLeIwyy(4VxF#ydBu3)j8*HmWIo?rQv
z<+E0*SV6S9)^-N1FWWAIq*0AOBHJ5+aNIp>n%jMA;I`^Lo?MZoo3_iac{>{{XSoad
zu*|&$-==*P+Ir|b?t(xeV&Nhvoh@<O@Eb;b{Mh3FEUYhvI}9<t!WVfLp-Bt{p}G_p
z!e)P;vB0~=CvUW>TCh!ciIihDo#rVlk9mxKg=dZ5l`ayCtzf*3SFzNFVrRNY;7HDq
zlCbA$)25t+#|H~QQ+*~zMJ=8Yqy8LuSqqj@(A5lC+K!ofq8YJ3V=_LK-r)OC`4{Kc
zrLF31R2=XXY+hi&ke#rXlx_w3B1zzhZI!k6sNtFpVn&GOy7TnhvPEmgk}Gy9i*?Cs
z_x50A_8A6VI$Z+5f5$xCZ#z;r8iD(c$Q%C5M^%r{4RJH?jznFs<9&TlA6sDxdtZCS
znJUkaLD7}*-L;8$%E8HJE+XVIUy6x(;mRH_b6E^qTF27#Zjzz@u%UgAzsH$Az=lLD
z7*4ItZ+dwW{*$t6MKMbuhI%43QPEWXrE%~7vG0^+;Am}$yc3W)0T~<^Qt>Nu`zekJ
zRVVw>(yU!a-914^_#B=|M^t6^tq@pU9vKT!=RfYw8Ex;>lMX?7cv`HrYd<-0Bd8%O
zucm=1(OC(+Cx!K~ovB|5IZXs83dy4t>d_}c^O??9VJ9z-X?FF|<+Mh#DzXE=-b69t
zy6@*$-G9q1vA?}(-oYqW^hRFUEkt~Qw#1#bE*C!&XRIgg06V<_vNV&-3fqKVV~@UP
z1+zY;M6g&5YlYz;3=sl%WQz)sd3KI>*qrn2Il`5)TKzXNkJo@(zoid$7gd^h4~7i)
z*?X-vB%0m%Ctk)Y5xLXbY<GPuo($0U6!<+04Oa>gb50`TFC!MAJ_;sM2lm1n9xA9|
zvaxpWr9ELi|I$9+c64m|G14qAL@V6Fy4h(3#b)m@%I8Te<3AI^mKOf!J9WzbKu|C3
za|z?e;m^D?V2renqf2I?ISLpD%+2FbEM%A4PbaG&{(EpA#?AjK;>*&`;7H6PGQ!)g
zZ_}~)Opb(mnzJ?_2SlHKS?;AcOYh_<R(}R}$gO_7$-dHJp6PJ@KVl9cArC!XwIhQ|
zxbO5SE6?JtL4ri=8J7M@&Lkg7tZV<(8*_ctg1Ym%9mF;%1Ji(0D{?tyT9+nUY!L(g
zJ3^s?orLCqM`yTakP<;eZO367@(ZYHgm%(cJd%9awoH0==_7X&?6Z>AxKA9o&Ni8A
zSIMGxo`?8+Y-dr~;?~1zPgY@(n)k{bP)mzt!Om#XJU9nL0527JC~AK7pivMQF`%$n
zVP#;KQhR~aD9>u%ypAi~NDHeZYR$AH0y!>`l8Z|qzb8=n@!p$3{O@8RiAlr^@l_w$
z=BIfngo0Jy4sW|MhE|CfWRoaYH`Z^tMNY~3iC3<_bWwb59DH}UzcTm%>TlQMw!x%X
z=^O?kz5}b}5FE}p$ioQmr>Ge`@@i>6zp0zg(1P{EFNthbCe!<UE><?js-38x&|rz6
z96lV|s;Wfb7QKJ{MxY_k@?CF{x%7YZ`4Xx)P4JT43&Cq>Nq#)(_=Wrdcn4GB*=mDH
zyGQlEESi9I_2TL*Cnw^)A-N%nBCsDK)@GKAj(xy``#huoUbgsLZ1$;9QgM3mY5q{c
z4Ut6B$xqttcsL?j11X{V?NS;}$Lw1$L$BC2k`Yrf<W=8C0NlJwuU1AiMXUp&Re7V=
zB%Ie^n8+b>N4S6F6%|VzoCMW|+~mfARlhk~Rb~XNh>57!uS3Vf&#CO={Ojb4TRo5N
zzR|}!tq^V<IV@0$c;)LN#x*a*$UrO=7_+>>_H}F<n#<-Uk~G7g=6?W?dYd+Eiv|+d
z>Ho)Oq~I4L^tUNrH^8B1VnE(jGqf#?!K1$w|Fu$5VqU-lOYYE$NEzKJUut&qCfW`O
z0Vi<xBHC3`Ftin5NuT$|=##VG9LGNgC#`U-<qerG?%r||kM+7)`neZjLGBA$XwnN&
z5d{8Wchl_pC7}y3>+8QG+XNB@3n@5fM&#<r)1Aj(O=;%%xP;U_Sw;rzGt&V6vKL~9
zw9~NHqdXKON;hEJ#BiP~T5`T%>+T-2C##O_^vjEh^0$UH=F>}34ddlPNhrT%^ASA|
zK?owxo<$@AC0t1*hCjJ$E2<E?_`-2ykRdpa;E#T*tI^ZL^Uo>>!s@a2@9o+sF{T$$
z-)e7DW<p5PmzY?;%9@!~GV-6&Rgwl}Vg%a*n)NS~y=jNNfk2Omghr-kxn}9$#>~*U
z?4!e+@CYo6qx{%DAi-S(Y#-#1wz;$h#q|OWyiXlKRA0YH7k`*B7njpq)L&G${P+BP
zO@JIFYOrjbd|RAL9gj{2s=#zpV|4yM5c=5@3|ez^Ebalgugrgf6F1|iLV9}bYX-FC
z;giv%1e<E<$)%&%Ae*b>J$R1kx>)Tt9B-=YWEOR*xBegYlQ;Gi*ahLzQzYIIYxF8v
zB^!%@a<-zD7bSUX9Je+%otl4(uSFSmT>2o}d-D;eWcAT9ZD&^u#y(3|4Zu5Y0;{eT
zAsiIkAbLBw0~n?<D3ISrNU6*>;j?!-N0=0OYKE9zD90k3Dr+pyz`?8z4-%c_gWsh_
za?p89^<)jk#-fSuSQunnQ0!u+#<)=^t2Kf{?k+^zvQqENP|Cj<#+19s!&DYntckpu
zB{+##TuIJ&BCfV;v-#&{KN4-?ipWc5!&^Dk(0S~dlo&{aT+eUsS|i+13i_RNsvYd`
zTL>4a&J9}>rPn>srZv~bcOyqJk_K$Ot_7SoVHVb~PSmw9q!$5kb2Ee0$jP<es(|`0
z1``AF9Bg&@@=@!qtKh)coumSrBLZ&1@^)49rM17054Vs>mU4JbcP!`&iA2wG%_0Up
zIuD4`@=Xr~4sk(kwna(@u>L5T%9y|VU{QL4OQ70Gz^USO4I;+gtTc7&hp3bsiNSbG
zUBC2$ax!=bm2QC<N)#*#BnC2PkM`|{e9EJt*{2xT0j9G2UGKk58Fzr+#mJY90If0p
zKVT<D=eWWq;2vrk<Ak#r%)&P}Z0cPRg&z{o9CL`w{tmri9hY_JKw5EQ&_NUC`CqVa
zjw&sy*F;dYW9lkowtMgdk%r3#pXd#a@%(jp`_{s@8<@X%N)X*EmPPlntUt~~);@WS
zpQDs3Z@d&n-%gKdi&AAl`h?X>6uJpd&b+&$Ub$)OW-!Cu*mHI`v(!mR=)1e1VsDSW
zAZ~Q^TB*_-zu;Y_$3SyjJZjKM)2Gs0qX;OWliWzjnHO}(Bn6r859iU6*GR)|9L_)C
zCfq#DgSRe3<6_2OamBd30x<Ejf)<33OR`N#)2n-Y&qHv-OV%-6@I(XWMt*(2qa%6q
zsDm(K@_URf3r9olHy;J-DV9~`AAKbOo;cjM4lx7-F1#moB>6~o^<?8A#7jTf051iZ
zP~XfDNU~QFC{AerY}$x@={tuEPX_Z=qC(v|c^IF%#jPSEm&1Ic&T>@q_6wwm??m&p
z-Uro2F27fEodEGeRuN|KKi527<mwSb5u#EyR%J4c5B00UBDM4Mmy+IBIu0xH3jO(+
z%I8gF^ON7E65^2V7<}G~o_K&e{5xRDe+LbmMVib>oSIh0K0`9kxXudl%ItohFSVQp
z0$S0GWKA@YxAqEsg)YWs+OFV#$pLpN(FuhQ81Hg6)w9^mKOzr4Hc(Ld5bn6%5g~uM
zMQr;np*>~Pah46yV}us7W(}mfNE~nvH>4^A?cZ|?YDP2}d-+)RVe4frT4icmo3K`i
z1cSZzLh4Mi`+WDwW=$G7ezPN&5AC;<aQ5UJ7YW_n*cbixi(%OB>2dqlkUbd_!;71e
z#)|T~UuEPf54fTixxylu;P3!7K+3<(h2*cW#=5t;+nCR@46*4l{^xP~G9vD>?u3z(
z4LcU|8hTHd^9Na9)tQ{n%y#xQJPq7Jex$1ikz-uHmFNSvFJgO`+t#lKYt*ixzBD3|
zz4p_|w~NjYmOt0Ym)iP2yQQxX)jiV%=F9aXpFd+gU!>TqJ;xpO-q*P+9xIA}v%9te
zYJ~;=Qs^qrO`VUg-D_(t2?=8T_H_xS<E3s)aUKJhsFRyE%JHv%+um!O0zG*F<-H+H
zV>(skTwLLq1TKd?tE)~255Q_a7q@!dEaeX3ZadthTV>JuqDsx}rj^ZkszAqy4QUk0
zMb=W%lbN$-v;ua{=CJzum#R09G<G~F>!(t?Qy^vyBSBKV71b6uu+QyK%iXf&tM4a5
z@=K^yB_u%)%5IZhh$UR<!B}H0v^xIsF#FH3NQpI+Mh-fNOPM$rN4^~HsBj1_H!=YA
z5-g(AUK_`0C_OxuE|Rjl$dZ-X2xJKE-P4%vSL9#c&(&AuylfFZCG}XKGO`lWGGc=n
zv~_H3>r0nAdiqU!4mf@b%b!OJ^qo8*bf{UIkd9$Y^x~3rq$qJQSgTJ*z;bumoC3Sw
z2hwz&r&>0YY-6>5^f?o}gTxluDxONAgPH12s3*tRQ6;vf!V{v5_tuvNk9M`om~39u
zHQ_WIl4pGjuN02{U~rQ)>eC@|W)lXxR9Z<w$(zpmO`OQN<NYz<@Yyb_TFXv3Naelb
zT$S$)e3Amvt=txQgyvTXp@rEhU8OVK_DDV4J+lw+GPKfB<REAIwy~Muh&#pu_$w!%
zN-HHyG8^ZZ?eVq9t88D?(snoCb?nD7!uNsLj{e{Vf&J91sDJ#H5d)h(#+)%6g><Uh
zE5%wU5c55SWKc2tqMgu*%JtSnKylqChIOidZavVr*dSk(C)B7C5!@kWdCBc;VT&gt
zkM=}uHOb}@nkCl~s|<gj&G9*4>Jr7Vvgcfnn^;nmV1TQIfD<P%hoVy)tRjGQA@yEI
z5_!h@8%3;;CHb=B!8UW|Ez!XSpI#UX5&_oWLPGj3ChfX^RPyMj9x^YAr23ZhW;E33
zKsplV)wXaOP@?f+!2@j!V}|0i<Ux^2(M6~Z>|L6!Qj$qF&297xx?iqei+2sNbDE1w
z<2q20Pmq5QsS>ff?&Wygd;I88HuA7;))cSF{ORJB1I$WvU~0ddX8ZR&1`}#4oaemT
z8Y~?0?hLOk!4z>w>nD}i(^j~U<x#In>IPmHbtA!?NJc-=6@y{BJjzhN=W|9Ab}cmf
zQES6s)D6Vo?N>ZY8L=u2+j+_>6a+S@)wl;qsw|VpbtAUi^lS2bgg}(xVi0h``4j$Z
z7?4v{JkQ?mSnc=?n>$1~BzIf4$>po=zjnW4gg(nStJ*s$T&SrlbO3+iE}PnMRAq8D
zou@M}*k)_gLQ#sNdlgteYuZ(QC0jDCWt4XwqKoH?RlP3o`g@Z~m85gsQ)YxttLK{D
ztJ#Vg1;6Z{O0byuRUgeWmZavniR%H-uOFjt7W=-0v?t3Udn~Al2#B_$V8rweWw-IR
zy@~i$M{mbz>3%nI*)4($Q1}2F^o7Wy!U3~)DF<s%wk3XpBq2_lfy5cv1cpGnFNx+V
zc6}3l=5}S05-9@m5h9?5Ysn?w$1w4xg>FjWlOPDXG)d2?6l_hKYo0|~gz<X%M=NYI
zh}LC4%0<e(5X*m^%}|L^RYig2`2Bb7M&-yxmI2of8Q;U3LnzTvGf4sMi0OBLi91Y(
zC-ps$fquu9k<j4)a6AxDm*S5FfBkc-O1&ChnUe3zUA|?x2)6fHly;DvrEHTT%@~!Q
z;-w-@MNMA?f7+bq0QdXmjPJTeZ<s|<@jX_(y4A_-t)D%X8@|z4?BnZBDf(IaJ?lk?
zIIZEtX`td|=Am2Hq_Ib%;;|!XB5HR{e?JE*#o+jGfMkJw|HicAnt;+VixJ^$-sc=d
zd2P)u6n7I)M~X1GUIech54wPEyaYRrllcYsAnjGBxJq57Fw*IXm1ZsAKi&P3sN^MM
z?2+>0sqzbQlRMa-|5qG2soX2yUEpgI+*v6v9=#mHEN;(#i~K(P=orVPqy0E<uEK7^
z`%c9U6F0QgJAj~Ajp45@+$Vc_TKfVp?DT;b)!WanPd<6+Njq7x6~H6@917AjzxUqY
zcMuKTO+U5x*R)yrFULHunj(TJM*{YCpFO9f2vCuCGmEx_kY(g<#t0GSXT<`6?~a9l
z5CtBZgw-$c9#uK}U39}bn85~s{WzsMXb*t2N3KhLB>2Z>33i|I#gygS&xQ+NEx-GY
zhxAEOqSu=rgqa4U?UU!b3O9c1H9=G+!JDOr!#6nORNeOEfKsiE=!;V-r+odFs@4#j
z9vwUluic(Ux}aag#8~^PD_I5YtmimsO!aHfz+h~*+^kX*kxl{A*URBdP>EjS-nM^F
zWEe+=la9M#_wj&7n$x0W_LBy+YZI1{K#Y3uB}MVW)156ikOQi3bP;GTy^oz_Vlta%
z9QG7y+&lR%C{tCu$38puixVh2w`jFKJLKoOu|+a4pTi++Fs#jdM)_)pl7b940@-%5
zHB^F11`+1ToO+SG0cBCbtd?-An!mi!P|4m>MfmKHwNstFWI=P<cUr&sdZqa%wo=MD
zn>4Vg+x0y&h6)FZzY)BB&q((KYQZxh+MyYUY6wu=^0m;*PI*!ec>z`2bAa0H{Nl8C
zuGN9Cpt0qfI^?dE*1&XWAa+xZ?&y4A8Xz!r8&vRF(H2rSDghN8X});Cs0}g^W#mLG
z7nJ$9Y1QKTSb&J5PA++Bhpi`UHH{zrY2lM1!msH^S+uU9A^dkKo36eA6H{mvI9b^u
zu>cr@b$*A;P%m5w^E8FaFpZ8oDR}Qk7Tm~a2m!$@d1NQ~Xy2UYDzQeVaL-VEL3>Y=
zLS-)9ylB$z^?*XktfCdbL!N#+SG<DG<Uzyr{FAzjd;YKMo*WY9OnkL3;#c*+yW?!T
z_U9R!yd8wtKl-y)(XI=%jb2!mbuP0)PV9wPKz2!4G#2G*sqRz?{kSE}Kw)Q_*SIYw
z)Aq)TeyBjS-Wd|5^JO?KaWw`GzbruKTOx0@NP%2qG)`&Qj`iwKLFQV}1p37&%z*em
zjfupez4v^)bWQD*y~vb~tN0nsmJo{To~;0}iRwem3Z3C{Ko9lR8Qp4PC^;&1gQ$aS
zZY8yZX{g8YW@vFGwR<IcFrQ&YIKHu@GnD(?{JSG;k|f77>cZuPHc%?bUUt=DBF!vE
zjFifIZ_rIhojYrIsln#?m)V>|HE^>?43+7t!?-vXPhmr2rTPum>T)r^wEr=xUcOv4
zYr=a;7i2XR`5d`D5eRq_qP?6$Yw>l&?8Sa&JazF#JjU*j#9MKq$PJp1r&K7%46EAN
zHKY8+XzBsei1EK*5Vw(WgZ$Z01f7%ib$WMDdc;1fxVDJ|(5ePVMe<ml+cVza?<sso
z02)G0idMZEeb?D6i+Mcn+y`!~_(;&`&J5M|ksa++WzHJmxe&evJo}YfM8{+$?O8qJ
zZDifR8RFDf=&!n)R(l_Ek-9k$#+ZJIckrxD8R{Au;`jv^C8TZFqN{x7(Cdy5+^zyG
z?ZY1ilS!(`J8{o%C8?4rOjw9M(>K7*60Bq8``MU8$HIH({e)1T!7o%uWBeyYr(vgU
z^pnN=A+6lM4_#JrKubPb9LvNw)ihCM0HIHPM&MQJEo^6vtcB2ZP1XT+1e)O}GPRWf
zJu2}-kOVfI4ISHDn!Jj3T9BD_tWKlIzWZ>7QyYR$Nr(+fMKe=1i2GoA3v`Qn63ab`
zjl~4BO(T9D%GoCrB4;5^?7Xj5CtHMqcn*qF(w5Kol{Fl{l9UuFW77j+cxs6uUy&YB
zveLTD9wkVT(8ONfkL!P++W*CFoNl#Vn1cLO<dnj|hH`3TOPm65)3s{DMiRi)^>GtT
zt$8@I2kzXr%HGVjHjBhnLi6soQ;v830D%bFwKL2W<_Jk&d{Q|TMkbq+#8(x&J)xjA
zs!jkrPOR~zd?2x{=9be}%KX_le3oPHt$OdH%1xsLBP@3KcMgKIc+;iJHVZNelnt7Z
z02_R<<?mm0KddHF^t65|Efo-XCd8}b>RY9sYr04k0Ry(LMEHiS*A}L{XZb90zqEXe
zHW~mM=xF429Xfu3BUf$lXAl%6MTD&|2rY*at>ubv@Hj(aS~bhLF3Krie<gbU46PDO
zo~`cy9%7asok!ocBRG{d4=Kpj+G9`N4l3{6lxo1DN-_Ea*h6SQLFtcM2NwD7{+0?o
zY(Ic-UsxRXHhP$Et3PB>ixx;=R3>S42iVoZ!KV-KhDs3Q+0+r!J7U}<|NA^ST)z9f
zk)j`Ek!wwK1?mFrOORwssZ@wA_M$Q*2z%q?Gr4eP!;J_jI~g|ssvS3U;m>34&-L&C
zC%4RN`57t2cYL4m?CP|`QNnlI?dmY{4B^7Hq`}sB^_jqRtYo>T_8G0*Bn+EeNHqH`
z|5_XuOhD60RtG4Ee0mYH`g|WpCcqai;;!Lo_11rgw_$}LbG*&S&<t!aCRKW008h}(
zwnEJmm@B~%=3eU2j7b-o$HfgvCs22MLL|^1{r~NZltsS^VG_!Dwn<FEvPtDt(X#K%
zFG;tHRb*W^iYzCkWr#~CAN|N4lj+4EXj41qYIS90F^%iqc`b>1rIqodgRNEOapd=P
z=B&6pFEQV;x{xgm*wN)#0OI<KhdxECAj&}m@pZa?;!qDIwoLgJ^~0um*|;a#WEzeG
z6+8vv!rYw+D`9*|d|l@I>0qg`ClonW$!tU+!g$5&XNKE#(~d&)1@wJB#U~soU(}-U
zUN)%WSa4onZqP!>nWKr5#F*u>9?)_y6t2%(xg8)%MdaY*@OMD9V#>0KVeJhQa$vcL
z?z#N*yXe*4a|)a1xnjY`4xOCAZUyICbE=#_DjpI0tihMTXtp{FO`n3T^ykc3o`aQ-
zPV*&rb}G3VA&9ppA_7D6n^%L-w>aMwy4<>DnVOarsK{K@*>F_pBJ+Lld;t0PT`T((
z=>d3yaCvB5V`Pf<Sj(g!mdj7L5m-RU%T1lDvX12*b?ex2mI3tZ^uiVEg21p&2kpk1
zxHqtsq8@>fO6#S7czQEix{?AEh(ap(fxzg^_G=g3a=d~!6+SiC?WQe%HN{|DyZznX
z>B~OK@=$-h0)0vn#x2}LPv#rzLkyTz*A2nP6UvCuj|~aU4$}^xiWv>DtE6S*aZ1RM
zuk3vb@)6Njm%u{SnJ%D1vw;J}HSTs7p)o!Zg~Wzk>ed`XFN}bss}b5+;#1pVJE>mY
zkkiG`ZM8#hYb-3+w=XQxn&hB>tz8*eEGC#5e5-_~B^q)cAFl_3BHYF^MSqGDcJ*F=
zaQP(4Wz7GVL)G4#?N=mlfn!e%yPuM4g!)EBvGP1a?pM+mXKF4T7)}naPu#MG2wBTT
zpNi0zwB5JNE=HToZ}s_E8C16!xqQcj{)G+CF~i2NU0ib5s0Q^zq1K-1z)xXVQKXOf
zv8oWu%sG{^pL<Atet1q|-d7bxTz%hA=WK3V>Z{!w0s+G^H5oGhQ!)3lINKeurw9$X
zMT@oUUO?5;9)}lr)?Z)5<n|u~pS$ANvtYsR&Z+5tQyqi&%YtRZGtxn9dBD28Lryk9
z+j%lAXydzJQGJzm3_VG<C>DL~c@1U$*SW;_h3Z;<G?91SZ6iyOI(_rdqDBh5bD$qg
zxds$$ZfULJCVyVw?A1t{>4@_TNLPxx&D~;q#WNi;Rx2BaWYez8V1pYfxdC#a0ERzq
z`OFZa@a>QTX~-ih1EDr;#wfL>%QtUrbA-I}7MajdUgvnu%}Pu;j*n8cXtL*`>Yi)M
ziq~CsOl2)gQNiXBg^J=?yc(Gc7ooc>2;dN&Na6MX2X{o4!e>;#BlIo7-kx6cDPvKu
zn2h4X3ZuAtn4`9J2({53M~P>OF30{Cpzm-;IN-OurP~KK?2gO5;k+q-j2Ee-9N{3t
zjFMxd(RFYm2Q6F%%6w>!0ozTR=bwZ4Rw^xj$aZHi(!PWIl6z{jT;6Q}w1OrXuMBu$
z<+!zg{h*;;Fn+=LB{p6KJqS|BgL(JV3ffn-@IIPUCO@-MvF&_$xx3%S0NL;Pb2&A=
zRKp%wT9%rq`c^Ue4pX1pS7`8!6{mhpdoLMy-U^Ogbu$Qevyp96d_11@B3|p^;Z2`P
z8KG)`v%=<m`@-QYdN_|`ug0+a_e^FAkAfV%Th6W()kniXpsk5}KR@uUtptRBYd1k`
z>Z!cU*(TztWep;M+}*iq1_=9H?Q0j)R3XG^m9$vR5AcXZicR~pOYZ)Vm2>1XbBxYy
zRI{5HpGAz0kxioT5rq>a0nU%5uwr;#0ZGPleH|kFj51fQ6JU83y3hnEMlZldd4q9o
zDeP#C2tf=fVTtra%E-rmR?(LB&3d{|*7hx(G%N3{<3R#=xLJ(t#T!wE@f9o{vDcy8
zv<wh*@`V}OiKrBNcV}xS60=(tPo;aAC5h7=`h@~+8$H3hreGKpF9%v#DFS|Wb5&8=
zDD%PsuI_$}rd(=fD16l~y4OP{;Q`PX?r$<~vyEe*5WuOwNQ`9sg*!_E?y!B0`5SK3
z*S|{8l^DF@_PSs|7Wom3YoquAEfXjP!WrxjeBz=m=lRYa?-?E$1ui_jx!r2?C6K7J
zBzC3JAo<!0mU-Pv1^e%lH$j<H6Os-es8RBX`i^n}`A;f%7pMD0zrN8-oNfRrD%@3_
zyMX;MQm|S7w3(-t1Gu2vQ)S+RSR&@##HlNQ%>E_=Sq6Z}fPqS*Wxu{ePirZdxQ`i^
z=4an`CAMN~EN_to`-o?Y73Of0@X*s>RDk+r6)k2X`0w9)mV-64-`<-ZNi9|~y@RR?
zc<LZ^s)Ao)WFVnEZ1M<?9eaOsJ)dA7N0M2e&!kp_U5scf(v{Bndh>AMs0`5UEsB|)
zB@t4Hh&>J4yBAEeRby};JH4?x5{U)aBxtgwEb=ovsyoNGY93y8KG~QMoP}rWVO(eZ
z>#Yue6?$s3rgl%DF`l(_irO_}`^kiXA<wwcx#ih!>)=gurybF~IXYJOPy7UF?Jkj|
zDx=cM!+A|s+Jn~9wSuqYG3J7UA1Gm-Y=}-}T9E-}z2W_Dgo0<DFcg^s<B{eGEmWL=
z->lAoHPhgTN|NIvxVS^+VKgTHs(zXDiL2ZdDt6$B{}$=5=D$G~H-b&M@nq@V_hd6g
zP+pmWpSSjfV;5yMZ+hUHg?u2vU8sfqkAm!gd#4LSQvC@2%zN@d^z*Nes2<a=jjKpQ
zr#tQ9C~IMlioRXN?!kplJt|ttRjQM(>-qXI?n)HB5d+E}-%U>os4y)dk8SD^emQ{8
zA)7Nx>!As3zaq4zL$m64b5ytmQs|S|I}gYg1ierZ`YDad?%(_OTHEb`S``wwZa@4?
z0^1ev!|MI{sIMWdE38U}+(PZZ)p5?CEuI=#RxKy5#!kiw(|mE0HBO{N%v*%&zWtAj
z?5>d6pVTj(IUNk!b=7qB#g5pDTGOzGoGLN2uIZZjA)pFCdAzFp5$@tANc5zqfk%PN
z2HmvVI#Vg0Z`&OnrB=aS<n^H_RWBnbdWvF{PWBs!Hf?4ofK*|jq=%cwz1uk<zNWkR
z#0@;ZMisUPY?n)EX!`nRpy=C%FfteJ7_EuA$Hj)wUfyQcvnAwgbb?yed*Ik0h&MBl
zaFG7XhdK6#=11|c2fs3m)PI=*VLKuakPzT>!l6d^a8#d0R)9X=5!%JcZ&ys^6JM=O
zLkn>UTt3)O=$<fNQ`Rnyxmxb<WX$;=dSqR`J5YzEhB+5knQvw~CzVBg9^x|qh~}E<
zJc!ntF&t_dZ%Tm%L&oPsJ9YZ^@vIWXq4Wv1Gz1rlmJMK%w#??Fh~@g;^EYFbnQ>=P
z(n9fo#JaCc3ZAXTM8%}N4kkt{ncWd?=LZ6wRl<C@*|{oTFw*pekYm(;W`jJ}j<VgW
z;nB|0TA`gGe7e#M9V+Jz=-SPRTcEao(hZ>rHllyiW^gIr$*M5Jt*`<HSPJKu;UZ+g
zFXUf!kAV<w6+hCp9g}kO6KaGn9senS7xyW@%du{G13p2YKBGE#d%d)05ma@-tg0C=
zc`C<<3t%;14iCEj;e5Hw*VmttT1A%gvgUok|J}{BSN17&ww#n)U#in(zhhBs*A7wC
zNgqN_R1c3>D4p^5lbsi7(gt<07uB+eupxP~`<F44==>-!Z0dN0aZ};WNO$}uGW*(4
z8ql!1%CD`*PT<<$mFPDUoAaYjdBa2R?FFq1G(jGymOZaQt2JD(9m>$sE(-f;bTwo;
zc9Q1AeV7@PM`FQe!>a$;F<9myu{Y{};8uuGGnp~(Sb*rHd^Q;oc`3f@?utG+o!HVd
zovql$zE*giVQ$PF3>261j#VsBo$r3+nmVPmEq0mt{(Ng_H(=+@(qI(GHS^yMusnTi
zO^mIk5QiemW5u!>j!`;$gbk~%2ER~^ssd=cRYDJRq9|k;U8a`K3i7(cK4DKF%>Uwt
z?DdTyl2^@5oL10!Gfa?*f-d)368AMot4pU-P4}X1fvjl%6u#^kZ{meRiH<L43}|i1
zH2b4KsKHpeJUuSvWDbj?O0K0XSyt%ao2(#IQ61MG?P%-Uu1<|(;FiKS4cR4Z#HdmQ
zx$OqCKj2|Eqn+$SxkR}3`;d#>*6yqhQXA1vmmO)gL+3q9iBp)F?xJ*Us*1!D`}YV(
zm^{9aj|CU_ehdPa08nt#<jh__?ZX7_WgFM3-P!q`7pkTrg~o{qPcUXfRhtr%A&#u;
zLDt7Mnv7WNAwy4PyTN|GAf~1&X|Kmdx@SZ+9E3n+Qwas6m1{w4c}bH-aH~d{LdB~D
zvrihIAg=a9YVzN_aztYXG>A|X6Uu^X8$wK@0r8DK#-%HuThl`^&f=n~kr3kSGByxA
z7eJ*v3SwG(s0*fRzMLM{wB%lOtca8nx|qa4nbQa4@vq`0ijR@?#@OP`3)tuH4VXC`
zHzKoy9)-l=z3ebD#wq?3NLwDn%uL>?scJmECEkC7O*XmE`SO{UUA1TUY`m9hX4E`}
zu-$7%G3L<JY>FdeSPRMP@Bn=s22nw?D2mx3>HLW+yCFr1f;>lwyFOxU!n>>DMIl*b
zR<xTj4WBOyYo{xK-y1ZE0r?zCF%`il&X^qX#?7#z{bKwc5EKFDq~0EW53Z=_sbO5K
zh{pm>NjC{)bmA(@4aJ21TOs`#iu;oK1}QdYv`P60&*gQ^kKC4ujr`7LQ^kdyFM*mO
z$1}#*(DJe}mt^?-<?!)~4UyJ!V}~NXrq_{IHgXL#hjTUBhL-pwbEA0Ed=Z6Z+$KrE
z87*@z1t|uIsIQ?%yXQTuzbJkXmQAsC6x0>^b6lFi+c^)e8j2YmV^FuT_j!f*YS*2y
zk?JdX7v~68E^ke4GL#^>AodeyKqr^B{d8t?_>iuE#>~_Gr{`q4Pd$d92PprpkBL>3
zCZL)afX1|phIQ8-`An5BG`wV#j<d7{S+iuz?|%802l%E~MD4xdswl{iE!sS8x)^Y6
z40lhSOUyTIrrBI|gy?5hTN$?J5`!(N@OAp#{c4wP%@B%^^YN4-o39@3O2LuZjKF?!
zevh@+6a6pLID|<Zj8UO;T!JUR0}YpEDd-RTj9T;e*5(J3wA)`oq(=fdB|+#=`C;a<
zo3DZDq&MQk$yT4~&}*}6h-13T)aEv-P`OP)?F!m}{|wz~E@7do`6JILQwf6$#d5#h
z9ubq)iLqGN%)yLBp<rCr{<Qg(9UL%hN#E0gq-1soym&x-CPaFY7Lz}=Rv#kxtM-JS
zMFbi_=<N30`Ezw9PAWY}y1hDZ7i1rih;^(0xCbv}1DPF9=Z`Ck#Sqp~HZV{*cQeqe
zsou!p9k+vpx_hK=qi7WFL2$`nbH?41U}da`Ez@E)+pgWzn#h6emAtwHku!VU)R?uE
zK2cqbv6e6N`4{8;)J4U=EE|}<@g;iIAXZF(XAT}3h<7m0Z}t)rCu?>HYC9_Y-eBg)
z7|pXvi)g9^TwtAN%>CS2gAMbUP~9f|X`9fMIJBai>fXR+S_tdFOd^CGS6+yssw!D}
zE#O-Kbv*I-6li1Q>`w?E`mf-=eHs_ajKTdEE{kC0rC{z-NZEAQeVgmOT_{Kl>=Pk-
z&Sny(_4k4G#|~dBKuDdvySe1XT!^b9eZD~E&<Qb~mP`uyZ_-@!dGw&$-AzWvdD2Rt
z$>V@Zq-hTA0vrQhx)>i`Czeck)28(I#@5guHkOfSeppf*MD1d!RfCoEWJ?#|DZZZP
z$eTFcBRYIx&DnE1lHj^@n@tL9=|x3Q0$@}>u0;$((QDB4DCZ2`3Gms&cRp6GIT<(O
zH1Z(d`(cO#o1DRK)f!x0s?VzIutxk>QOnDg`*aKHh>0-oi*`g1erN2=G|!W<Y~lM8
zECHEghrg6)NSW)|HBnhsN7-;8uljR|fr?L=tR>e|ZS-JdP7_?b(9DE<<1V=)r3(QK
z5y(3;d_MC~Sf51NLv~vgg49>PvI8SPWO{V@bGdc<oU>mVLJ#oAE#u*m3*S-@FWXnx
z8Rgs^-aDN7&7~iV^lseiQzRz>@2rz1xpQtlEcVpft3OmVoEP?a>V@+k_!?m{40zwW
zon7x7=tGFMFTkNv7-%zY+e~#MqeM3GUk+VX;*;FC*>XpK=<HQwt252A$g0YuOoxNh
zH8p&P40qGZ^xu<6U{Had@t_Guj`bRi-<^?ESn^A*vWVJt(9;0D56OMd(kiS?v`JC0
zyRe)joJr<)3;(gXOY@kA0F@qH8}^z(6FLiy^8JuHiJX{XUyE1z3QqN|LaJ|iAq0UT
z?ip*8MuaQhyaY`nE^sfFquvS%b0!5rq8aP2Wj{5i0Z*{Dg-xyY`pwp>SJ^&)UPwQ?
zwAsJDR!y<WVkGZA?=`X^^V4}BFT%}?GUdAf@G?P1#b#xhSWYyO&dI}(2fCs)mwIS>
zPn;X&qY~&9(kRLUV*eB1n&yU?rX_3Q6>en+YpOs9e(FnH&<3l^0?=WZntZPbO!Dv1
z;0aXc1k=z#<%YS*3JUWd2b`#$AkswOjo-e8FRA1;T0HO`<XEL4EmKf|hGV}C23LaA
zGG%1hHqA=R3v|LMimvE<j)0!BA`XQsb-%dck_U=0`JF=n_10qY!Uu;nelbjd67}}Q
zpk2%1n_E<Q_!t3_;FAeHT6%ePQ5TNT-HDo!arp>sfk*9C^`Y&1m~SRMl}k;^t?m-5
z0ZxZNpo~2G{LFU(!+k3rXr>yIJVi&%|0=b5a#@zBuL8fyiw}p`uE*yd5s9|Ajuc(x
zKifAX=0**&DZDC@qa-l3RgmOa7-od|T5F@2ZTjw%4a?YGiJ#Dm9fT0~NX9KbVY}!-
zvL18?<5b}R>fnBxH?KmjR<IFK!Ktn-_jkQSWqYyubnOxPd&LE6b|W%~n*98(w;s&k
zzq}8o@29shk%>rsr65m9>Sa^M?lE0wtHPSRiM3Moi{sqsdjqbV5NstWD{+ET21N%f
z+=V}?vpi%tD+FEyG=!dF(aSygnh2GA8#Kn~Y?*<%XDxhmn_uu}e|VgW59efH70RxO
zQflx^!Tz?z2GX`r%HU@EMrxD@zY>C6YWm5urtZCr5`Mv?&xT!d)k@g+mvO!+U!Y1;
zC!DowdclLiLf3ELv<pB6<x4}3zKYoA4%B($_dAM-!?}vIT8oW@py;q}K=V-^0WWDG
zr{RAZDFQ(Pap|Q!G`~B(5ZCF@H7iWaIi+89GiAz!#t6mHAl|@OaTm#UCCNEJWO;9Z
zyAID#Li-~3y*1UP8RS5i%QXZ<mJdb@`&`CtC_tyg1?@T~@axTUal)kD)|YhVvtT@b
zW#BhFy=S<h^i(^~4OlljoE^E2L^f4fR?nIdm_9gv;SWQxlaik0C&o^~%@gR$pA!7H
znF8Lcn2eQF=l7G#%rdRIx`3Fa6^uNaW2`cAV|I45&n<bQF#@yZyHl82&fqkL%NV|q
zbXX+_I}-<dMQ4G#Yv7Y~FCm~>N3yWMiU?x-e+NWOYs-6zK8(4GXej286~I;H=b|~4
z-Z~S2fQ-6$6TSJWI~M!e;Z7|IR;IRk1d+Em0#D`cgnrZ&#vq3CV5N~%DPC~X;FiS1
z(FQ2y$;kdA+ah^z(4H9N=b$r^dF?Sru|JFYAof2FxWz6<Yo0B`rO60W5RpQH_Zp~0
zEUQ}%#Fn$j#U1()XAl{L0|yzxC&Hfx6z7AUoEXcTmIM~9WH1@j472TG%$WeQ)Ut6Q
z>W0tu<DB}X0V6W9HB^i+j=e`_vvB*UAnC)%Xi-ry5BEgyaRW2sDrSJoB|9@}o7Vr-
zdAju3LxcEsclxidEVD`^Gy$ZOWqTzS09)muQR)ZQ5>v3tFE9|^fK7wms3A?*K_}N$
zQD}8k6(#v)CCh4g&$3AMvCP+m3+1t|I!BVjVY()g1q;{Id>!A0_PAK->8joV;fv3(
z){5)Xr#TKh0|XD99*5wGDL9wLBTh-7q6=>xkF#|#pSIwG%m`MQ*1^JUkHREW9hI@U
zBe;Iw1j>TrMm}0`g;MIv4t*WL{d$!*#$_&bMF$~Sdc<6v2x}$xm3UT2&OC6KZ?tfY
zU%5j2!utb0si;ABqS7_)*&<pXfH<W&SnlluRS5fh=iVGO$omyfxVqdPy+MMeUf~4$
zY37`#>Wr7PL?oZ*u|ve^SC3yx0MGH1)=(&rBc-GKyo^&~;UQTv<qg$WvW{(mTnyCx
zvV2O2eNZn+$54rPTpQK$)iV-Yy6!vaxv8FU%i4i%ZT?ID9|g(Lw6bA??R=YqZwMNk
zKlObH&=Hw3lmhwwHZ=uDm9s<8x!<Vdh>_wG%fm2xOKv1}@WIXHuBA?hocht;d<Fi=
zn*F^O5|`r(z3W}u8+!go3PJFlO|o_Fl6b@gl$AQs2aE2{p<Nqxsz#eJfr$=AVo5)S
zq6yB+S<IqMMcRSBq<>K;HtY(Xj`Y0d=WdPV59s2+m)GI9f2~;_!*VQC1qiSTJnP%P
z97cE2#J)dhKD(HdN_;{5@rg)vyfS`KGdGwi%gRn@=BO%ly1)tS;!<Wo>$b*f=@gZz
zE*M<`YyF=Bb_n+dU%ji|HEy_PdNH6<RRc(Q|NC)VGRGqbJ2|~-RE<G^a(1v1##sG<
zs5o)_gOx~XDT|1*;Sa^X98-N3X1CiX8o-ADwJ(OG-$Xt<_SmZ$Nk;NF%<UJc1;YKd
zi05DMd*z$<CCzrY-S6U}VM<^dHl0sh_@_#y>`MPOTw=|~OQ@JEd*>=R4@G0eN<M%s
z3`^R5|Ne5LxX@{4YU!1;Gt`{23CWt4g~hsiG>=y_ssU_qMRYSaSOT;3;*W5L8gt@i
z%Bf5dwn2rpI?<5fV7eVQz{zh++?;P%G^8q?cd&w+IyI~R4-t7U(J(=<TtVFM{_oW~
z=ZVcG(%rE1?fVt+y5-VM16X;*NvV*X^>%ezoM6Icjhv4Qp%(l5H!nW3XXMmr8;Qlv
zcg1KWG1r?)YA~17c+lif3!hG&-`NDmK3$?cYiw(7$<cGdf(2yVS#=3JnjK{4?2jX8
zl#of?QmQ<q-Olmk)6J4jE1|3p&!c-O3k4@&+5tn6WnQ=-I={y4*QLA&J4mFA)nKtj
zSYb=U9m#}3MOK<AhBSI+YwDijA2JOw*)+bpe!eVr(}22;*V?^mr_rNdcbf*as>|^H
z@bN)4D0w$(E<U#*pMiV>4}~u$+akci+-Ur$m7RBgkuL2ULd?Yvb#Z*G3X%ifw6+$)
z4vInIlWt;=&TI|(t+xH&ZepK04(EfI9e$aEN6Rk<uLo&TAGgCu^TOeA0(K=LD&$0%
zHKfcsZRZaM+hOn^YTfpRQd2Zyo)kj8*NWSP5VQTP1NX7LMx&7Y9e*v|!yoS2wkABh
zyg?r=wgpTpn^C!jJpCm`xRxy}D)>G!EsYI94PH+uY(IL1#$120&_qywd%2E)Ox|#R
zz8q}nqBfz#hD!ZQmPa>2P&ExuWdZ;CR{)}+&W8T$>;cUA&<4(v8|~2xrJL;wP0wd2
ze``N;N+>^z!<)J-*NJ57PMJ6_K7x?c8SCMg+&9tgph}%cEccU|M`J0C*f^t$1DR;y
z(AyMKV#}6_ej&LFs=qsII%kigXyc`H?tLr8AS}QWnZ#tr)Oz?cod9>5-oFs$e^hrh
zf(c2}!PW?+aGS#qGprO>kyNC2DZOYqF)9}o5R2ZDavTLL-1`;w?1G%>R6m*4et3$k
zO03DND@_Rh*}n-`RyA$DR%WeR(f8&F$2z#(&SFcqQ3<%mpnO@SgiI@RAYa8y3z6Qh
z11sOqGpB+6j<fBn8I&jfO>i_#{E1NsQ<)%<S&8rT$Wz&Ao{s>J-A?p1ek<haCkw5Y
zFBgc);91Pe5u1+P%~=;-KE3}Y;~Lf=U&5$QwrR?h_-Zli+92y{lwxyFuJrY^g3pO^
z!;x1b3dkbq(mi*U018DKEAeV~u=%cpf3*%N#DR1Pz+@p!%c<gF@R2!u1jXoi3=f?a
znA?`V1X6rk9-RD|uWje%r>JHlJ<`PE=f?js6;rxpH*;o4A5)F=lP;vg13PCPcWMY3
z!HbFgZuw?`rvASn$+bO;zuDsna)#v}uVz+WP^YfY0G`#(LkEylqgC0lPrIgeyr0w-
z9eIH81_-1dXfhW;DJ8*HZOLnv(@!Jg-+Q31d=AX(Q$67UEAbnZBgs2w8e{`!OBOLD
zbg~E7VRWG1D}dL3@7o-7llL;TRDg`(@}s~yPU`4~IL`(#<Tkw$k~}g~DUk!=$NWRs
zKFSZhaqsnkT|cDNzS&KtC&*{wJyw{bLEN16=#T`al7;w$7PbtuS+4%&Tt$g;cch~L
z1qw>8JPdnLOmm-p9<x=J>b;NuJjm|CZrqJXR;gezE8ctf^%{`1O7_!f4?;u|;ig_o
z;`XiJeM<g*uoev1Hm^1~UAPM^H|ksgh!nufDdC$eaVz*wKbmN=@i#Tc=7=6ZE|1oI
z1rtm#oXQ0~k2-d(p>ffSo2cyp2L_dW(9QG-1Zt|R@`)3qRer+2^X-o_QPG;!yWkE3
z^FmXOIm94Ql2#TJ%nEeST~0V)Iu*b;j#gzb-W0B$U<ZEnL6464*3d=%vL?6BuSET0
zUlc=9f52&js-Rl~z~O{x*cgkgPE}39DyexX;a0y-YdmY!;+=(y;=ArUmO-c%*&tn8
zTRRhAJ2wHn(%@%Rk?IR#z-w6&#C^f=fTq)2h9e7t8#`DnP7OR+hlNx1bIiphq2rl(
z5sA3cs|^}hDXOJoXg49ce3dlTV%WLE^upX(v>wtUu6?8SFq8xpD^T$HqrM-e>2C8M
zl>?B1=v!+38NwsHGR&HDSH8c=#a*~)L5VBJRJD6V;}=TA#-2>Fkg#P=e*w76GjrPA
zP5`*XlQQ^=gP%-@OJEx}gd$okD65FbtuO!3u`s_LI0Rv9;D%mg6YA1i55qC&KzCWk
ze+e=p8Y{Nq7-YKv@c~64C?0lYP28h`T(G2SP=)acdj4z?HiJIA%vN=gcosTRU-M+X
zzeq;+>GC21QBI0{o5L>krEv5v)**E9yM}VZ6}T_T!^%BzbV4^B{Af)(F+%(21<yX1
zUdnn&qajYE_pZAXJx}v&UlvL1`V;<vw-IIo=c)UgFht_z613Ris~TpgtUa_aj6PWP
z8cLEcn-$AK7F)AeZEfcb4F=1U{E*#CJw|e>pYa6?PvE;P)uW(DF38}GzMI<%>qJr3
z8Nf(rnycBl%-OLx$eFvOn7xwvNXMrv*3^YD%JxGzOgVGwE-I2_le-GWBAC;5A-&r;
z^7L(iXn528h@vfJDK)br%souJ^L&i1aA7%=4lD%G13Z#VZmS?vtyVxkzHYX$;>;L^
zY|3cs4ZmAo*Gk9d+2Tr8#}50x(8=G;DYvGKV>LmGvoyU=Akm_n{+jjT#68PqDdKbi
zX|Ew)#=7}&$&}fxYt}d+wGZgw`M?W$BF=G7-FvJo{bEeI&K61@oXbtB?(L163WM!f
z>i_E|)uV47&TmzrHAh=ueQslscH(H#+3ruwcTKzmCVu*`w~BB>h-4Slvu9B9!Z=cu
zH{9cPQHb{1FhqSl0ZXcr&Og$=yfIKmb1btCc4^k2+JpMWSLTyBjH}Wu^?W>kanVG8
zv``LOe`n1g^2kM!J0mGH08DD|J@Koy{8g(7$alJ$95<mn$*Rc1fkt&s&=j2vCdx9-
z%OVWV%f1`noKD=b4HfQpVFd*?o$;t!$w~hCN~9lN2o}NSy0lXZxjw&%U3h0X)*8VJ
zfs^*729}Tm8Ec^`JUuo)s<>u9A{A|Iyr+*Tp3z|J(F(U?!Ful35`Mq!tjz+of-V1K
z%jV=qf;ruRelg$G1Fl11)0($;$X(va8&gL4zPXE;OduN5F>lQ+{IAF3QY9hMR+3#f
zS`~H43ER7_$o;3Sj96Zy_dU%c>6TrmT>WEnka!lqq2Rl28c%&ZSade>=ZnQZo`Re%
z+YKIbs#K~~Hy^_YF+(5`xAwd~CjausX2z&4=VbZMVhtP~lHxwTfaTpm#QUBDL5|!y
z7$$GGB)Jxu&*V}KO<4P)hDSh}85)4=ukWnf4`$HEiIjp*Y`&`_c^<)z{$VL^!U6{a
z<bA-<De{E7l0`&W_njALUObO4y~DJr>PsN=9nC&hF2Yz+gAczfT{oLa&52!P_kiDu
z$oPj`5NRr_+AGB*5!=g3toVYP(dE5Cm(^OfbPXRYqLMKE^VuY>(-`gZhI+1SYnuf9
zT9V`MRfb`#sguoe<eFx!6X1;@?vJ{i8kQg@ol_&r=$xlS1s&)4Pj(qP82}lVairk&
zd`x|356Pd#OG^9K>4^0S=Ju1*Mp!k8#DNi%PUpqe9TO$buHgUc%L?~Qkr<|g6L~j<
z1k>eNgAT{K`T1vW^6Nd|y!{%Px$t^j)aYrj7Ql47Nn;yDhTcA4S@uJ6T*XXc68jGH
z%B11;1*5=f3T%$>y%|{STG})Js6kf@Q)r7eVH?oWK&-uO7F-f);(e=mMVD1TkCdAX
z&}~nI+mJSp#OT#fr6XdI!q|bfewMT~i@&O|rYO8G;TqZ9;+YaJZT9{0qGC4&3QToL
zhaVy4O&>!UQH=Qwy;?_cW-D52rPwd7V<&#HvL4c^m%~<q@rDp6qnOUef%ap7LZrXS
zA}G~8v=F~Z*e7H{%QZNvYXf$}bXFwzss}<pBUgIcbK_qJ%E^6GDYqWfj#sFB6ehQ1
zT$dt-ds1+Wvc<&ZCHR4z-|VrGUmVr}j*u<F7pS;JlPU%SKx<7`Klv&ekAHssN$An7
z@)E6vFh{}0jev3NG`8{^zm~grqRvU9ENZ<4@q}1IYOYHgdK<b>-Fdc;Y*m#Ir>FO8
zy$dtA>Yn#~;|&nECW_2O+@mS7BZ#TQ>n8on6|y9d&p4rlZRiuUQ^RM(<1I-7SIBT;
zZ%`YNR*h#MGD#H587`UbUWM8-g0hvuf37BWKdg`Nb($*ezVM?0TdS=+3+-eE!OVgQ
z(N_yX+O8yC9rgb!!I4jk&SrS+cy#*9^<Wf=ky&^w0=B+@T@v7e!n6)YT=M?p;ZS6p
z^wh_hIkcrb@t>x35HZkSE}@Y?r>FRXI|Ghoy+hZH#F5#jdRdp-vqq_I%oi}pxE*$s
zN-r?RB~{0czG6{?)HE_JZDrOEte4tmrGkOrHl44jM$nX%dBuQhxqxTSXNorm;6!K5
zxc(ymPEdW#+@DsJ+)-ZXZ{+kg?RvSG7R!lK_#p~@i1Kzl?A>dUhQZr%qJ0AZcVz>#
z?q)3}-fwu0^J3N08cdroW&*Pa4GF&UbhA%WEv9q-h_Wu@UxhvN2xxuDF`mi+u9wc%
z%43s~uBE9ZaX^U@1h(>Tr-uJN)rR`rm4FtK^a%bfDf}=sl=Xuw$eoyfY5;)xcx<my
zW8mhIO?i8!(rldC<0q-vJ7vby_5yGnFwtb<VC=+<`G1o0_%}v=ITH1EZ?Gd-pOaW|
zskcRZkJEY%M~Y%P`@SH?>tDXcL2$rFLk_!Swr;#vQ@y%q_0|hpqQkx3c`ynvTWM)-
z@LJ}*+xebNuti~mRojdfYOk7%Te;Q-#?qPX10@5z%|r@ou7tlAdaR~UZcrRz(LmhC
zM}R>x1YGeF&9A}?1H6|E@nRePid9?L$>T*3(A~@<1zoixx3tHh(KCt5xpoU$E!je8
zO&~>!$5)9Kwm&-VQo=3UX6!XTkakYNX)T5@$3+K*%Es<eFy;QbGqZ~f-wiVh5P$L?
zHClBBk`NSM1!)K`r5O76+NI|A(|JjZO-*no5xTSBl#?|0jMMh+evk#J7*R5zM^XrD
zn;i?^N!NVH>u=9@BE{B3Z4NKGq=2t$lH>(PRIdz_mBPC?+1Ubu*?q_ud+$HIes#{n
zY5cMn*HB6QeSulI0md`)K(Jwp8%=hIc`KEJ2P4c6UM@)|lKc312vz4=p?z!U<P7FW
zO%!fBqOg%i_-aff_O%?NYUln*qKs!19%jaEfK{|;u};K>t4$tYS29<itKyFyjG#;d
zz8L1dA4z1V1hKxHS;_gYO`KDITf>BZilj^eCuh!I-w|2fw+QFV(+Vy%8)p_CznoiV
zi`}EIJe*@${dhUGUH$gL<Ilm8G%WP?n$hE;u8_3y`L|5awi;DyMevr$nn6bFbE((k
zN@6PCVgfcMy;-Q^&h-8F^eo}!qV6@>8aJdoqh%LaPr&scSobS}tJuo?Go93#ahb$r
z*E)*Lp2$cF+lkz;94^O=*Di7z?Up!TSH}hW{!}OjMGM-!G50kP^++YBJBRqD@SKr4
z^TxI#-+iBHCxkXY|1z;}iBPEOnCr9Ux}@Z{JiUZ}P_V&G-Yq;z_j}?P`xRq(=x!PA
z(lzI$(rnG~t}T>%Uyf4SW>;BK+R3^b<{xI6pP7=31ykup-ThqNd?JGHAjon!Bl1-r
zgN7!Rd<ET>wEuh}ccfcAE$^;INa~S0ap<kYLfECH%6LsU!5`Lm-`Wf-%MSgyVoLg!
z2HP^YVfc4n#htv>E_4h-)$wND>mk~Li9V}gr<7~d4V35SLXlJechgu^Sio0$UhD|P
z#WF7Tpfa*7w|VcDvOJ_3E$ReXRwN8ewrxpp=6;uep?{rNSv<dExw0z(h&tRHs1BGD
zABi7FgLKQ}dWZh><Qa6cj?zZVTO%(`G{h08WdEH}VdN00Kk$A$b1FKc&Qu>Q_l(M*
z#r1SAc4Uyx7wG_$<gEEFK|^Trc+?q$cjaj<<#jfV_wXq^lbcPlWD(IxErU)Q9Qh>d
zWIsf7M;V=HLsIk+A8jw9Rydvp!-~@1<6W}88)*p~<}6TIZ?&HS2(TRn&0|ueUmiD8
zQXn^%$S1^kppKwz5dm7p@b(3>2$e#wxEZVZZj`uu1^MQ%oHz$}qigBkO5YoH`k6^c
z@PK?AIfT0eP1KW6DI*#*2ROdcJpX=0N7Ik{?JpKv#r{pKhIfpn!l;xW^D6?7!Doky
zG$?hy_$hO~nE^z#+V_SQh{=-<%jZjut5=goCmmBT-4Fd2hS~auj|L-0#-Bd1;Zs)d
zZnF^5()D7oWyJewG#OMoFt@~enYTziG{8BwDXgwDM?>Z$60$jnOWiJ}U9*IMze>7O
zE;dU2y*Q-D0s8Y8Sk${Z6n3935gS~~1Ii&LFsrJ^uf1C5sAGdx4a5SN{a;~E@MTeM
zcGmUCyw@U>I5tDCkq5o)mnu|1pn8j}TOyHmcklzjyj3*tRdJ{#8QyTnro+~%r4I7S
zEKt=K(C95C^Ny=)VqN$9OOdmK?DuogKM58LWF-vcRI4K~dAJ&33y>W6NyYKyf8y?Z
z{ntu_78P8$ttt$gc&R&eKrDHyd3_(Ic!q@VJ9p3lQi3RjiC19!Dq3S*&~1ty)B`%m
z65mf2M9KQU2DYJloLE?%oIUnZ(us&w6v@ygLe>GjYug_o_uyOt=d~nwx2%wRzR-k_
zc@ytUT-bx^$yp<`ebQ}-RFOY^73`qP9u0!z!v&>G8s#H*m}Pohm<mTuh=*snH=Ltd
zZCaN-pq(0~VuJ)e*HO&<HnOkFOnWmg669j^@!I(EzkSlI$x{+cD1cel2A$8}V$+}G
z4q;fULlKKT=H~k=z_BBRld`pQh{5*QD)BBlpH5P9FNSM;OC6kq{@yqO>9*wN3C3fR
z{y~y!-X^@UXr{KHz#Wcd5V<z*Hc#0S+Ngj092GvzZHha-pb(+h!@VnAVUhQPIPE{@
zms6VHy3x-S=NTfe=J&c2+9)VJ_j94=K8PXS7>cMw7$kOj;S1SM+R7Mw<u7q*2w{h;
zo_7RBoz_RbA*w=teg*-y&kXOfIzx2RxtL59dE3EMtD<GTl~t<Gpq?=#lEfW7xd2-K
zafdw}lPhfafG0aHwuEHVcPR_5j3*>m<KE32J6@L@hC?3i4fsCW?o@5B9&@<f-`o@a
zKEVQ?az*R%pMDc5UbXQGVqWLpZ%I|7i}}Vd1Ck0sR)>ZaYHe|ulySU!YF#y%lQ1X^
zH~gVuw+%O=P=(~tpvBy9@y?No#qh6MJBJRwA2=c#jxi9I&|SUI&K1Qosmp1Y@a(dK
zr9gWFNYb8}jWq(&PkT3ho%!iL5>)ZY?ze?=D9z-3FOikjQ_9@X0a^?C^?3@n5f+X3
zukQW`vsA~fUGbx2?grmL#}?)sP@dz$@1lk9W;9G+M}iSlz7ZQg(UVrg1xLd>XjNR*
zi=^~bv=%lFbXg#5yD2;_60@rVm})x6ocknJ`?Lb{U<NF}P~8RM`x0_q6O7*F;JZu5
zUfO#Ds$oN~#v`p^MucDVilHU6ehAf2H;qk7P_9u4-9ng!udoV}wtIX*m!B<BR+3sR
z)DF`6yQQ~m6pc1p#;umR%FloA>p%#f6eDdTf)5!)Eou_D{5-KWJmPj4IvZ=nee)=6
zBz)fZy-O7t2pGVytw{H(wyHMoqM>Ae2WG)TqEcXieC(#Z{v7iOA8LF)(H$b`rVX#?
zsdN>O2cYINu{|H905{>eya#8jUcJ<BTer|T#rxfj_S|WKSq3-;<S!fd8uU~js!8<}
z@~7j(CQI-q*J&XG_mz!Za;Gs$K+t1Htj*hMw4kvD1fK;60%p;tlV{ksUxQ1n7Vd;W
zaFc%nr;&InS?1D@%nft~Ipcb-h!hC<zQDJLPK}(*bh^$+R=TM1<q4a0DR+@l1!oRi
zto*=Si{YYrO{n3*%B|%5n)(q{#|A;&dWn5DN!1yJV>yVYD^&|V*Oa!XyRF%O_`P=8
zw~vK74@Eu!ap!)9rDntJ{N?O*BvkMqqM0?eB*ig#su~c8nT45=;;N6b?I{T^q`o|#
zo!b6)eq(5$>0(D!CM9@sw?Sv3tg8?Fb=MiADNT1=$ngK9N#+80r;4NNeI%*W>6@WV
zM_B%ol5m&?nRA4IiU=+Y<ujU#lyn7aY_%6ZpV~=V{y-dmcP_Rl{uC-rP=U|BARoC{
zIx>o^$W|C=f_QFP?&70QWbo+hHle|3NPujo!r;+?TxHx-86d-gWj8@zO+Wqx-lma#
z!6vlTh%bc6x{xQ{Hw~GH@5QotNoF9DWX>)~06Rd$zk%{R!PEXe1qq*^IK+o@Ec!Y}
zUE9O}rmK1eCURG+7waIhXC(CIyU`A+juX@k^HQ3(%doY~%<3^Y{=R1+LZf9XAGb+t
z-^G##R0PKizH5y^AgT?ypkh!T<9a%nVZvmP0}{OK2wQX2b>-@?9v>J@#4W$?%`)q0
z$J~k#dbpbx=p4zStN93Ra$(XIyhb0?oa9XB+2OnHOD*&Ro)Ko@<fZxho1QbEBPT(2
zZb1*YH88~+@ivC5S^p$1^JuaJgw+G2rPC~rxg{7KW>Gvkn)gH_#P@);k8jxwKc1Mr
z8zt3!cdtuxTt27gUm1qy%;&2iZmI(lpk(n<uKARWEYxl)%r%;{>Mn!&5-|JfNrSA|
zbIkha3@M!7Y?-==ML<iSI}Iq`z&kWIqGGyqxq$52=&LO&MMA790F*xxL|5k(d!-We
zRUpKA<1EY%_$r26nLbBMfMuG+e80PsxYz&nP<++>i4;RtAPId_05G~%iv(`fAc>y}
zcSnyErn3rks(`o%qF@&2BB}3!y)la+^Bt~p+)a{|jg>pW59)gTJJA(RG%%xGqWV8N
zMt_v8BdXjuy`Tnjn!wlsaPPHQWe6=Op`h?E0AD|*quE*^OR4^EKUmosGLB8(al<bk
zD{@jsekF&ItRJDMId!j!>PxTUQGAEJ?|qY$WQvv@bM_q3cOPrG2dU$H1ZWEVBP@DA
zlNc*-X`n_^NVxa4(j@rqosONPc-<Aqw~4=Nxbw?Wj$l#Lf^QKDCK0uD^#!4#O}tax
zcpHa#Sud{GA%MAgw!`Ad6RlF<xs*hPf0}xB(lR`wp7{Kymz<J(z~OHFE1dWc%f=qm
zx>L5yjmnp?SRsldN{?vwVOtTH>ShR30knf+2Gp0WnSBA=_JB99Eo!8ghQ?vvMHJ<%
z^>d0V<<`GhK9JjImO@0i>9P;&3sACZ2UX#f#t+A6YVFh=ne;^-JUxguB_$d^xDK9W
z|7>y<pvuc{4}{LO9pMbfu6Njq;BxraMKQN%xhE=p000po5o+H~Zx^{|M<T61hCmMP
z|5cXwH}AV+sPs?K+P;52rQIG4?9d_kDx6x!t;wawoTTqR_j;z~tdGwk%K9u27ZE$g
zuZy=?_UroXqBPl&2u(Rzuc9mj%n{(iJ%K;25@rWdhNGYwX4|y+wvz7wcZ}udw@~mp
zMO!Wko54f{!ilv$iN4r*tv`Oe0@wPUH`vSKy!+%v&3PxR6q86pz5+#gitOv?i>?Xa
zNiu_@@jYAdy*M}5m6>Yf{J^Euk%q5H@wV+z-e9tlcY*KrXKTvCCaNc;2c5Kc@(t|{
z5`iv&?rSY9YIHuG>2d8`6$YD1)HP=Vlwt!xpJNpP0sB$=XKOba&M{9rjz~=gb8Gzc
z2%be!sQJ9(P?_xRmsHX#V=vNC1~JG$9v6V&3#x3JN8n<~PZxQsoLd$Y4N#7f1h>uJ
zUSD~Wgoe*`Kw#Bj<*$h{K6vgriQb`0Qe3pX%}vaT>qybNd}cNvn~!$v8)n5U5c7nd
z5BeL3GdCY*fctL3Tp$b90X9>|ymDVGD<rhRBCq~ydSu_LXT>GL5FZyM_=s2rhZg)>
zT!mr}L~V$dJvX{r|K5xTs5z)-x_H+AkCcHV^a`T=6F}Y7JLPd)C`~yl275oq&RD_{
zb`ye?ZcT^;NfmEZavP=M>4Or+06McL91`-Rw3JoM>P%SZoHEs=8HR>{Tf&WmaCB@-
z5evz-{Xk}E=`@%3vJc9I6$UT;S`caz3AJ-5?v|((MQwwjVK=p{7tQu7VM<D}ztG6T
z=aERVOtW6QA@s4cxPboS94csci(R9D9Q|f*7rkP|^`TWsA$R(`Ow^GLGbA&4lR!$C
zLVuSfdiF-ElvKXkw!vX#T{5YcWZa0d!}pYfF72IKMSS+CY0OL~J-r!+jN?3Ukx~oR
zSX_Q1NiN=T25#-;tG?J>L{Yb3rylOmeqIL7p&d$YUpr;B+Xx2AIv1235=P!zW;H>q
zu%KC6=Iv0Q=K;<{)nI7jio@%Y>FC|sjtMy5$L}zpW674}NtLld=j_RVQCf=T=ob8A
z!<-uU#UovsM;cQ{wK^%P%NNBa_k#X+G=00#9Y62P*Ip7r^xGhc4*{V9RL%BD=77TL
zXAe_i5;TG6M96_GIU^B@b_Gj;9%`O81ndu4+Zoqpw*6dC)g6%(9&Ss>Iac}>!ua5{
zZ>c?&$qGwDof;-l97+x^9y-CPs_ZLV?zsV1ylypo!d}kCkOL^-YotOv`UAb6XQ@=D
z%ADA2M%b#>lzyo)#TB0tw(qOYKR!&(N}5+NcVwL|t5n#>xms9=!|qMKur+vPW|L25
zL_F?-3Y2K$+2}L1d*9YV9=jzy>QUIF)%k0Zh|`j)r;WT#<EYyay1(l8{G(N$?8)zk
z9=FstJR3+Xzv$_%HlhcZ)x$AD+33XpYgn68|4yDO@wj6)wP#%A?|E(TjZ$R<D0f8!
zFjxK6hm8$F`U2m!u;MpHL%P@Ne4(7HsE0~mH;lm!6WL$dT8=hif-9_+RU^d7Aq=Do
z?$(0I>5k~s*v>tX`ovPn6Eq^s(y%9_ZRcmywzzK2(xc{iOIP^^FihttwoT+o;D;OY
zA>XrRa!|Um=9-GF`lHEMt~p4$C0`v939X3&Ki{tV_}c<gWer|smbH8A!OOgFEzZ!N
zptdBs>;FsXHG7cHrQUj0zC@4Hh>vQWgQWCU>jH3<#Pc+CMxlhB97TM{W{3QXZ%k?@
zH;os_Tnr;x%dyAFJ5b%qW74u71gn~A{Y+}5U!7+MMui7zrViyq7Zxnk#<QYNHh~bP
zd~(;;OSZZqVpjOxf$4O;;ly_Q#oeITpf#1!y1Sp|DN{$_UHuL5tmhclT7A#I54xvK
z6XV6RUg9K_A_Q&c!VS)HTg71&8}LGrSkcn!qm!90ONX2?i0v4o*QJc#Gnw!=ZNiZT
zB8L!D!ewPq(^YxZ+63>3d#}Ti+8HMF)+X9owIo+E-{C9UA9JFi)4Wb14T_eeYb*s%
zbP)QMu<EjV=H4`X@++A~eDlIG(4V&R__uJQ{m1y9N--xgpc`<qeG>^VRz<+--fWrh
ztCdBREtTc2=J%l%Lk|TJ&Yj-_Wm<@gDuC2HFm$b2Jses5?+#YI4faUz4Iz$!BNu-^
zfn=BN2V&fJBK^2gc}X5~4Q<$(W92kH8<U&g0@8hD_Jd0uR5e11oI;K(85xD_dx0e<
z%UoBy3QYY?=WLE&Na~30fHk)P%|@wN5OUNMk(XiR6OP0tih~rYh_p~L7Fg3zUNU??
zv>krjFN<WsLSK-}m8%>RX3!$QP_@0{+}Ts%jFH)x2HpdAa#!NMK+L)>LZejb0G-|*
z{2QyU9d$>}@{MWOe3bd4b5G4#BkscbH4c0d{vS_Vrwo6m7{An(b*GhBsFYY3<x0U-
z#27tG)Mw#8_&xjob*F>eHiy&@=51T1jVTBOr*7+yO~XbnhlJ?aG|80N80oa6_Ia42
zZpS0T+H5L1l)qbysLU=f<jMpNSa*L*TKmx;bYrAtHFVz$2&xoYr#Iz@^uaK=&zzPX
zIT1`Z|1XI2blT;=8b$AyQ8&n(FrJ>hh-qs&$|)HB2$4#Z4966xW>*RE&Hv<_gk(#U
z)}2yJSKk^xBK^`kBv&`Yu)dpSq&^@4wtOsGu`f__nOc(1(ouMgx1<EsN!3sEyF<n`
zI@yM{>aU8U$9|zOCL%6_^4s4hk>)Idhgr`BdhPU5XKjncYKBQ4J{Q(Kqz+epE0Q(G
ze&_%X5GPLcD4L~4Ny3A(*^g=I?K;&;DmkxGqm=JdTLstBMF{g-uXQLH;yu$Q17Y~;
zvNA=C2pL0}0NxL_*dhNw<Qv3^Irw=B5`){2_&PpPJKd8`A>Q5B&jP%3&CE<@Df)fz
zR3YpiqOlMe5;6zQH9p%hp-_yC+clh_mu764jacdN6vTr3DukcBRJMMQJf%l|1O#i=
z((Ns<Y3hqoPyzp#9$jYry)U==J)(nDXCbx_#2PUPA%a-F(x$hqw&yVGy(XQPz`9z|
z`SZv~QhLZ_aX+%4stwam6fSFvIFV8J0V>iAx+TbqS?+8@GKaAxH5IIb-C{q25SS-G
z+vCw8#mS{XW3pr?*hi)%3-72X;qiYRs}VM*1UfO54M9|5TRNYhXysO#f3(oHE{9T{
z#QWf-yk}YLz)h3Qy`Xl{+6<dPV(UKuKE|wHD#kfN>j9*SY_eT?Jxi=_BS+=voXvVE
z-Sh%a8g+EPlzP90^G7uqaCMR2KZk_krv%uoVREPC{H_)T-Ibc^$Lu{sqMx0h`?Pd@
zb#5UR?*&y_O%iH^h&{fnITVrS5-u>tk8cO@IxF~}QN}uzLw3a>bds_H1a<%>Tn~Ir
z5}14)7daGAEGlNsHx`Brhj*XL_JmM!k+i+m82vW8LzRE0f;{y24yf?V$k&VX&{J{(
zyg7h=)(w}GY3Eva&@9(BmK|mCw?Cu`UH}?TR`1rD_gTK&iqGZWh`tu2jFD$TESLbQ
z=_dh!M;S^jPr5rLLc-No={LDiSDAP90{EM)n47Efz4MzXR{{@J)X1suD%p_4<(IQu
zQHu0QnPDGY*!xc<h)Nr-fveu{DiN|zokl&}RTM6SG$*C5ZMz(tFZGdR#W6;`y5H|5
z)qpaAWWAiGHhZbyqG8(WK8U3k%h8hVgShOSX!*k$*Y~!qZk4fQh2t~pqq8>Qe}Obg
z#CcW37mzOIDG+s(4ZL?>aD01}fI7F*6<wuS6xN1)<;`MG-;EZ$#Sn)HUO?(VV0ZsS
zVHb{;b`YOe|L5_d-;<LJV2ur*e?@Y`@t^<1GE=-Cy0A?Ih#N+4K@7loKUBS^O<$l{
zq%)oCBXQH1DfJUiodAC+?8++gP-CSe&5qXv2u=|E8D79Zy5x9s_d{BNN1}ye`zt4(
zz95{U2eCm5W1MC^`<)(guLi5if>tL22iGxqh*ud{?!E#a!REze^{sN`qoVvePZ4oN
zdd#fY1}pu?otsIYo0jco0Bmzi+aw-L^7!+bYlnE?)KeoMIn4W=VO+u4Qs-W`yhA^A
z{!{BelYBMm=wxNN?&Y0k(8?}W5ZVnT-T3Sr5tdyP_@{xJ$ErTS8VbAI8Dbd&sfLG-
zzigzIH()JHciOZ(=$sWcZMom}t)W@o8rVoUl{I26>}Uum@Jq&hBT;hUGG+cTY!&|_
zO8CcNeKlkdY<O`5GU@aL)&X`DqpgZ^zmm7fWECdoO_W9%y$U?5sz@aVB>-UbWqtPT
zIM(}G5sNF5qTSSMRJY{Ohwl;~d@BEuq!ytYmztf?=IW4~bO8qKrRQs)q3;<rtVN?9
z^z>!jMWoID{472-#b!ZgWt?7sx=Z^=9#M=N>^P(#LU%cp*8ZQYnJcTEquO-<ThScM
z7?MFniE)@_m6)d<V*M3Zq*1Y4>#R)8e?tZbF^~;9_%}-orYScHTd%u~?|UXljSm>^
z4IWaRL6AgCYHPW@*JS3NjZN)A6?273v~ey+zDeY8kgGMNuJRw-@wVs6<EcijGq+wy
zetC-yL*bA1T)9RF=gCzzs1Gc-jpW4!tmWY>$W_VkXfW+jM2Z3?j`lBYhq>i>6}BQ?
z%A>D!L-ms!YQbLy-_11T*|;khzq5%WUWh%l&qzDNVJGS(lUd}_w-ShLDSSjy5SO-}
zqI=m$W5*S&iJY62EdS^u#=@xCEu%#f7L^@CqQGG;H2a~W32{T<+uUnuuE;bodWQQz
zk5=#T2T<Wj`<2gj`$YPR+<id1%anrZ0uvwd97TpebsffDRNJfzUjeS?S`S~V=v+r-
zUn}GD9l#bs>?BvxhtjDip-dk;8NNwALnoB52JY-fJ1OhnkQ0<Kt+its<ns-Ndi&Pz
z7~Z`ZGop`2-RcOY=}L}Vsao5cWUH3LxmHD~3L+Kkbctla8zoy}Q8)iTM}?r-0qRSB
z4IEvzFjC8&+$sWoxd8aNri7<t{!)hAa}3IWP1MLE!|4-Enkukmv^enP@Kq8}7^P58
zFu$8<DR>VeD;Y};(F^rTJ*a6B5~R3VXuXIDrDM`qdcpa<hf62r)kE<lP^m4hGdh;m
z#Q3c(c$w?ghQ>3B_Wu`)m&tMOoAOziZBj|%47U>qi(7X0Uey@XZ%!)GDt5x#p%g<@
z>`eoCpZtC`fI$%C5aRD;R*%%zBp|1FiUJ0zu<-U5wZSRd5h2&d4uG+&(;SaFq8AN?
zj>@Kq3sNfKb!c25r5Km$KO7AT88N2$6o3XlP8X-lu07=WsTH{R7t;OvrE1?U;XM(G
zaPt8yU=JAXt)ODXX|DoxcrF9O8F7lGMSrOS(dC4}N0=u5&Q^c4P42spU^*hizmW^q
z62|@kmh=q&APKPq^D=*W@TOY+{e9rJ7)h_QV*}AA51>R<$fdlQ;KVKLLMi_s{XxoC
zJsq4TuebUlaif`JH5s6(;)43>Fs+(Uyx_%dm-+LJ@mxk<G-X0D*b(2)hJ&q(AxPG9
z%IG=qsBXYAL7SkreL@?Y^0uU}LnhJfDPSWiwKxo>6Z`V@L4paH9e}(c<!+hqsqm?8
zt*gqPZ!gyE&R^}Aqq;doS5YEz^ds|24}lM4k_B|ObiVyLAEbCOTl;2}GeIQO1fs`I
z=7fNuaEj%Eg;+hVfND^u0w2q@vAqulK$D#N`e!9XCBV&=KZlwdp%Z4BxB^{dv9j3@
z1Z~3!N87>Zg;oJxQ=5e{N`}-ptHoiQ%C;}z9aFp*MQ{U-C|V5I<OR+`LKh5=u{tWz
zLR$U><Y}d$<#Q7_Tonrz+I?laYPXLDYI@GIr=&;Q$mooOq1BY!LU9qYqk>m1L1D(J
zu0?b%6(;aND-U}$^mouX$SPr9fvW~dbI;v~*Dff?EkX07k5<!4;I2FttAP^%`C?W?
znMt6p{?_8JJXt8~*BEYr<r|v|c@zqN)Mww{7yOh+H7hZeZ`bBS;V`8f0c2p*70bI=
z#Z2(|iu8QVr+wk@>xhn4<C{k@<equrO1vZg93(;`AI)o2lyT}!=DPG>J$JfJ6XFx0
zsg5d`4t!&ieUitjLbwBSvGu>bv{8#b3Q8>|=h_P&PRod!C$l6Nv;llE=k!^cb;oi9
zPaH)>>^Y!^OwayiSdihSzLo=Ru+LET!)xrTH<wUPV@^ZrbUj2pNLXa%5BujyC*X2p
z*{I=u58@I(3XlS+>e_}zy%5l4sgP1TBz-QKCMYPZ4L0I%eJv%6N7eeTi(kwNgu}@-
zP-}4eE#Dz5EZ1CS=q4Q0L7Uh}WaNV}YroXX-q~QL*0iVO*D|*k>yQq=ra@l@&9TNI
z409@Q#}Q}}$TL3vqjIbiX_|Ww|JL<hTUny+Ws8X&hNu?9zOEapeh5PUOXSM$-*s77
zvc50e8MDQf`VBO{(yps)jhf;G4dgPx_1-cZ#3uQvUxi_lTIomqpfSt3gT~OTCJ6oa
zt|<}8CiLhwMWV|~C;b5u4#%MZRAn2HMPv2Htcnt-%Vd>aUV(r1PPzAt(+pscGhRZ$
zzB8(s?}laa%;6<R;O+i*WUE`c2cSnW`TNPEJjU5NEDOR1r|yazz101P(Ju}?yAe)%
z59TNAHh^tPr9WRy0NlGYqvJQnoJrczjIBxQXU^~QdALS;=gVy#nDu6bo>71582%e?
zJn?U}!-M)uTQyvGEH3{Rt3S7=ae-yE*)*^}6OWcUGiu~9ZP3c-pCo!l1H=)Z$}?X6
zY(9pw<vai}HtLb?ePt^Yk8P<cz2YbjF%2I#)5P*I@UzcB&Lq#Ag6axmIIIBDkuB)K
zd6X~g%n0^*B|LKjoY=YiAPdT-%tU08(_KGx;6)?B=Ye_b)Jy7WP2uv;%a!+dV$8q@
zsN4yqUx}6C4VzTXJaX&ZMm_zB>04`r>B<<wkjz+!=7yLTqR?!l0%7WxSxD&tR83oh
z@ORx7mZn{-?h`A4QCjc0fS0Qpr|p2DEefe|;bt!6wZ=Wc*O%S+Esf1HOSos<;C{od
zJ7AYv<*QJmRPHbxePaT!`TBiSK?i2ra@QPUl&Mu;3O6|d9v?XBvE^+5%puiV?L_}N
zO2JV&m<V0<IjTSr#x$&MlJb~})?%qO!NKzZ1R<sq`-=4Vl$=AL#s6C!c_fkT{x|mJ
zRw5@Rsf1Zpnw%+;c%q3<`*tZppc3BM?J<cyn<fozh7U^PIK`4VBd39ikJMAJviD1b
z@t_{6#7x%bbhU6V2{rk}-G{!RqSsySVn}lRUIga`0?Ev40rQHokL^>oBnr%Cu=HO;
z>d&i8sd<cL%TjP^^V99(5A06`Bc_Y;f6p}sxv%&D*p7g?-qy<);&T!%PX>6O##XI9
z{0nAe52t9k$*C#Q!F*ZOAbBrUvN-<J(r3Tm2JW$s1s`T=g>QHyH<MMPRYzm#Hd5DQ
zcujFow@leHFm-^kvKdi)t4P&Y!iq~jDoD?hdU|&Ojy-!Yyvk}yq$)ec(sjKLd1*SG
z_WR_cmLbTb{!Fr_*uwyGsBn<3%!aA4u#8}=_~G$PG;HPQ8l7kqUa%)^sGOuD8wTVN
z-Ez=<I|2(E*gS_bx#N~<(i%xrf=vtgM?hNmN=o!AF!zJ>tZxH;zV^DadMq#w^{GoT
z-|o-~;ddFAS&!-T>9d0pT{KW`+R{^|6jxb&gWDB*_%X%m4Cqp0j!SofBbZum@k%N;
z^Y@T=NLUtmA2(SN;{O!N!Gb{$gfuf3vhnUG2#{6wJ~JSB4}Ht4XyZgR>3);;)$*G6
ziWuHl-$6o=`Q~9*ik~O?U5~z00Fa&L!ffa;6q7tRQ2NHi<Qum8kR7pkUsH9{P4cSH
zb7-yAcTs#K0axXzz)PTfNK1y8jHNB3ZKP!Z^Z=V4!s0NECkPh~UxaGrOkf+#i5-M=
zeN6If(+Yr&JUqT|wkId`>t=?Hlc&xh{3Aa5e7<O++JaAif=YF)Eii@21X1Brz>YJw
z#!Z@F!mzEAiG>ye?pfRvZd<Y&76262sqqNKlT_c$4M(2yr%|FFNIce`mkZ&18c?RJ
z>c!$;RBYn!-Z&OAW;Ax4nqn3Ar8|nKJRnkKNGoEm=iWJS%M;*vG;fhHB{T*b;ae0y
zz1}SMQE?g?n_z{YdTrn!u)T^Xhd9*VL25A&33_zMiT%r~4E~RMC>i=2?OMU+(qDPb
zs>tFt6?#Pzu$Nzl99>kxYc-Q*Xd}7ut6}QcRt6ibY$&=YmIpZ%ts{2H677z%n1c&<
zGIDO~`aei2q%I=`Z0WMv&B+pNE{8gSH`8jvs5GFktwclSSb<V^+PoLj>heyEZke9F
z-$Lot5Z($490-G+>7?lYM+``nN>Z`ba*KpZ-OVyp#q!nFE3VJs)A&wFoV{Wu>A(Xb
z2n_)VQm(kd{ycyp+}d26a3#&xKlsU$oYTCb{1w~QgqB|ChRJ9Qv6Amd2`4I0&wi!v
z!=yb1(O&i$Sd&AH%l_C1)pyb`X4mDsf?tWKGm^;|eGXe1^U)^wkBJ3|H`Lvy%lKVH
zTnfz8<w)g#V7xE0CodsOif>D~#N3xD<P@As9Tm${iYcz){;O?1P3Kh)e*MZsh!)}9
z0jI5_YdS`k;D#i0j~3o0r6P$ETN;ydZouuN{pa#-bzcy=5XdbQlB5j34n7I4YwCM*
zhBK4<icZ<VpYK6M+52drlsHs52keM|M4Q>0WD_PnvEQR$E*y$YT2m7{`Y^yklld-h
zCE^g&jpqn6el?^9a1lzN!Yu#Io|QK)vK9cIZci4XOr_2G<&G&(<Jk`5e288I6T?(M
z=leOOOlHCoPHVK}*S6HNM<hp3b}Ee_ysSTOm{tL{;}BFHe;Maqd+HDdAF?Fb9h%(T
zc&F~)fo_>pf&2|Qll6h7zZd-+P-n1q4BN<AAy;lcZl9-#fw!=O%F#b>xWsMnRB504
z1Sr+CYt7pR;hw6a7)HO+VaLV@!J1He3F_<1{_*tez)5~|eaCr53%(rT2ssuVf#vJX
zdUySMs+Fj)GXRC!H-ug%<9JC90N^KTO-lxBIguCw&BGJ9Ao1azGCHt7C&_RMFt-58
zR6Cs8e?b?B(yw6RyH!$WiRgb}1mds^B$MZ+6Bh%(gyvTDK@-Sj3p>UEhi=dDF*luv
znFkFwFQSe#ykyAV*j4C`_mR2Pf~!cIGF1%<2u+1TKXN-IC$8#E??krljysa>lLhGs
z9V>Vamu%z4soOy-D#A76Jc}^f=Z1jy$_b@fw1N7y`l0l)d({V$6ASG>pNTqet;(p}
zJLf>o@vbbtsa$QzP=#d!R;D5HFzs`jVJ~KYae!pa1!50GPXlo9;MgbI<uV+o^LoSG
zk7ht3cD-jse$;4`rn1ZS6HDI>g`+K2T+h^+y=(5`v(U~p?%mdt&3O?=0Pk+(<0;xc
z0TRv$EA`2%zeRaOKTr<t@Zjtcnqda#Y+NeUNo{iZ&e}R{vb81L4MuOs(E#gJl6iiy
zS<Xu?RGP6_75`Yt1cz~_Cc47y0J*&&U>8es!kFopVoKewaWIdgxyfj2QmI#|4XG{=
zgSpDQj8D$RfscXvx+IgnOy~`@iicZ63Mn*7t(knUK|$|^{5$~xXvsiC884&0{zZ((
zgn88_Deo_|Y>ShCJB)%DK&y!bD=qXRO<(FqI67}F2F|hhU4y7W3ZG^7&(kCTlb-&Y
zoSy^LQW;Z8@S5UW9gqkIid33=FT1wX(WUBUBp4bq?*$V3>B2=YG0acyS9Ic4#!rX+
zsEmlRCTjOlq)&lA%-X>Mi3ebFLXAFJ^r2QO1xtwokrOJoJC(aW>&dT4!E2ulYxw4f
z9@6X3t@!@Y&UDB0m*#=yR2GnE9|`V1td7RdE&x6*Ch(k*^ZYjaW5*)^D;i2)teh7V
zJ=ntrEt6~Td@-?&1@eMUji)<Ie<C5yK_Z#;%sRjg+0yOG#WDnfAg;E@Ad_2s4h;dz
zSM7G|%1EbU8XoyU?etqoRwuLq8Pfd&Fn(!|g%dtbFP}NbSv9)Wq`#5VI<FWTQu79S
zl5QbI;I}dd)?2#vmH}e?f-s2Sm6ya<7P*!3_Nh<FP_hl6JqfU^ww0y5g@Qz(WU9i+
z=?f$C;4Z)EM0Fj*@GDaFdJIK*Y;JN4Bcxsc1?Wgsj@JdKzP5a7oHbxN)H+yC^t1u)
z&(Q(AuH5B5)lyFiq56YQ4^2g`+}@tpOJuKe;H#b%y5mkQL#UX9a?UgWgX!QEq?ih2
zw4ss5@14W@`74rkdOi*$1u4Z8!<FomK_!#7D%sqyG8v#`0#1~ic#Ue`lmKe<I@u#>
z)T&+O`d8~eM}orBpO@mjKyU!wm+1!Sn@#1B1d3S;jW63pVsSKFLZN|7izzsT9nf#2
z)x)xJHf(1!VPlkQAO-ZuH#Aju^wb&QCkjWd!6iY*vPt6q+_=9eaR|G_shI2TVIB%M
zmMaflUawrZ(>v^fuVw+zPwdk(o$gYOuTIfy_k{=>$;CwB+7U5nYWl-isY~HL^r`j!
z@Ufi)&VJ+*Z}(N8I6}oAGIQ4`-GXvGpnrn>o=A*V0FT+aw|8#2dCK>e7bY}Ah)cW2
z$vms{RteGlzh1tS`Rpp6Vol8~ApcEfxv`_f)e#{8U+~->n%c$^=%gCuj3Bw_(WcF4
z-4M8gn={T`h$OmjPwh%JyAQP+=EhCs=|djTN#+J$FptQq$vgKlI~8eUTGCrGeh6m|
zeqhu(Nw&Mf95{F7wTeno%ERiqfOY+@1Q)}ckzE3TN}$@o-Xq2ga^e~ZZ*3!=ulv_)
zK4t`OBd`MBy?3QPx@&15NG+D_fnpDgVQI2f<y9iISGMye+UwHJp{FfTrEijIQ(LfN
zU|qvruF;CR0buI}cXL3vgZXS7A%6(bQkWiWSvonl0PqXL=WjqI&{{KS;yWv}=Ahgq
zA`%m9g_xdHh|6+wC;@i#8fut*5lDh=*`3r)qB7I;%9-Hfl0#QH9MMud895O$wFk?J
z=969RA|EY%pK^owUohJZ8`XWhZ=PK+P#H1s=4b`gh}{yXeyy6dnh^bCMg4l8Gns(2
z&4oT2bm650z&xO4=);1q^WQrzOofCS@|o(Bt>VPsnQ}0me1kio0yB@*RPsySn*EeO
zik2UDV2aHFYasNSgOc6Gi)SvVE!s|M1kI*NPu}~+f6;Dcv$%Qh{w~AxL^=K?xrvQw
z>+KowR5$K=>eh0lxT@Snl>t!z6UR~?04j6wn~`DQLIAQG+`>v-ny-uh;a@j9TbTC!
zQ9S@CDzf+DoIi#ZM}S0cpcAuen4{uYTnc)CK^xxm5f^>EK*gL~V6z9|8jgZeQ+ovj
za$=jXC`=sM(|UaG>Rn!wD-!x_rRA^vJWuMk$_%+L&2ROi-Yk6nCX)I{onB>S1G519
z(=_RifZqTW^QLf~&rLuI#A9qOf`J>CELt@@kfsKOV~=WRwCvrKMaHO+!L=dQ>>#kJ
zPrO4mAwQwWuc@?qw+}zdk+FZ9s=#ChreLZl`2$F#avPHh`H5?ba))qDKf0&9GeC%x
zH-K(3+)wuYp3%t*5fUi%+5#`BQ+82okp04ER=60LIob4091hnhZJK%9xwtAp&eEcZ
zG;trT?OndZ+i%jos=oZ>Wx|IqLrw47ex-L8WoD~0UH%GG>rl}ij-?6nsgD?dpo8B+
zHo^qxbV4@TA0*}hpcZm*4}3r-xsd6zf(nN&g!!aeOqlA*Z4h*T#ny6V>wa1W@wbaz
zDhKdv7p*b|*uHmG^hmhn;csgKqn<eKS_7v%)V_8z?gLdKLM}QYbt+DUAr*(jj#$aq
zcm0$Po9$zv@U!JqmL2?gfjMX6kbUAZmd8<@EZj&CZUqdj9YkG7fW&S_@9kO!^ptTz
zMA?g5l`-7SgDP6;L`+l9vLb_M8?9o|RXQ`VN^s6)h9ND2AJ?aNW##?Q;4}Z}j+n7p
zFHRCr2b9aGTtjWo@)zOf{bC7}hE0!Vf}6GAfo@~m(tuu>FgWd@u<|v1?oiRl7e4N?
z;%d7k)KlZ3m$5eJ5HeZazV2DpR`9uW6Y?x@o)t5M8dX5SW#Lg%{6S7522P@I2IcME
z3aYig>_GiY9d;pZW4Td`bDoV_iv(t!_c7|U`M|MOJ64C2d8C<IMg)iykI(kS5@)07
z1N@*20hc6ziwid4gZ?hL;BJIVz9Ux$m1%3Y?9vwr{0i8o#*~Mz7B8(Khe&GmoUVW1
z3|S(X{RpCjhTM?uBpO=-_a3V<5E#d~riv5+h06I&01+H5vAZ-(&Op|~l&un9YGBj;
z+L0-bsIHtBB?LGLxDANbC9)f8EJ3gF(+FrYnO;w4qg7Tfmc1j^ulAuHAXcQMtpnDW
z(&L|9ty+9x+tEs_u8**Us&Vx>A{#EF`_{@u8PM18nQu|Mdoow+j#Hs4X`HhzB3GYW
zd6lq!J^6iKwLR<A3NWAYC<W7JjEofm`PL;Oej=5mlpXb|&bN=Y2Z~VI*M!p^C$*Aq
zhrTz0T+wi;ed&QPr@Z@nJQJKFMH6vhSgHlZ--1ZKmd7iF)iDV3o_kuypwG<lvK-~?
zR1A2hopAzg{>R^-ra}*RV71i#7llNoO-=~vkKGdM7-i1d!U7&u3R_)Q8LYIBljOAD
zoS;uxK4&aKg3Qzroj??8qRr?a-SzPmWW9R&^#^_{&>qZ!XG?u1H5C}^iwz)~Nh4?l
zRoauswB|V$(SL5TT&(&UVyRjDeWF>;WMib`H8WK=Ph+QV5mMPKGxbp97+KX>IVO9s
zXU&fL8GGQtoImz);^50v8ZonTsAo^CkD>)_GxPOuTFD|lG!Q~oAkU*|kJ;NJS?-)U
z;sAN~c&t5Py`~i%z4+Hfe;KE|%eM|MBz7fLIuxf+<$%S(R?p|hCGdB>W(Te8E1bZ&
zuK^M3EMDMUV;otkTT`cY_0QW)!hf#siKoVNXh)$U#8DzZMnwaz;kpWEQ$Q2A39ujJ
zinx6QIn64RLPi{pe3We_a&?mQk0RiX7*s;_!F8?++mRK4=E9(ilE;6W_E%T?FY`f6
z0@N;gg&?ibo_n2lsvzjpr#eB;lPr630u7|jsCeCmzbe&i;);zC*}6vZ)S4;u4Lo42
z>`lv`hmhcs9#lzW7QPqW4SqiZDH!#KwM$50tqEQ5j~&HpCxidGi)-cexBbohtR0Cz
zg2SqLwPYE5bbbOhwVGCRfMl?xFmT!mG?`p}N=}yEQksl(qk+#4@6kA?Kad`6vc%Q5
zM+AqJy4fq~hFo$!+=K~ypNfEGZc6{Lv@&ve2^I`Ah?3UJqn+R$8(D4Z3e1u3*@0Rd
zhw`R+V>6_E&6k9E!pnG@l>UKBa1P}NfOz)BhUz4iSFeUTWAn4zWM%h+6Xz1?p<;_G
zY48GV5*VsploM20WOG_(pcTnu(ekyU6zN(0ma4}9W-w;4>JQ?4X+Dj18@qN<O-7cC
zTsCq4kCXr`zojb07B%pf6qSylcB_ln2Q(p!<+g$+{^~qx=+pL{VO0Lbq&2A+p}>;P
z+QXam8AcfKhUZ){6t9E`zboY*Z+j}!5KE3PDB-0_Bn*jus7;G|x4wy4=%zMrS5JWW
zq5lt|;qtL(aPjkkDZ!SUb24-cM^-4pe))f~9=>Nfl2g~BGpCqrZq(6e{*}C9)gM`R
z@M@IQ<r*jK;s&m5iWj5WF;ljfO!4^}dhR~%ZqF++(GH5LcbWIyrZPhqSKdDvKf}mi
ztD1MYNqiH5!!qJATN}AiE*a{T_+$z@1(^7(qP2>@{_WMYg4RN(<Xe`SAX*Ix=;(^n
z(xmQ6eR?(RX=l=NJK)f3)XWe34%;NFk)qJPx1$%=r2U7=)hytH!4tLNEOfk5yalD!
zxL`0VorJ9lWztCyZrtP!?I6CC+wsojyD39y12)JAY6uPb7Zxt6_9DtQn)lKglCxtI
zR`ObJ*Zwf(KV|vyR@Pi{{5<JXKr-J4V-$AElUi>t&7uR-+?^b3%?km-$u<l9hBd2d
ziPuzajlf>2#kqMkIE(?7D71I=pc-U9l)C;4f;Kve;mfUpIYa|2(Zq#*wgZ9-U>cSL
zMMnAkp2{m-X_2t>@VL(3hE(c$c}EAEU*p@b%zn8DjBHjF5Z*o?^w3$~dQDqj7r#J^
zm^_XXz6qS|6UrB<_N(BPq}A^Y5gjJ}jwiCQ$!{_5a~B&!+f>WZCy%mP_r*^XK@K4&
z9Ly#@G<KNhwgNYQUFt`0HQ5+n>n~;yHT&}>7a!GvdBd&_mK4?$jpv7cQoL_;uxL?A
z4y~>pihlCz=esd@&vAwcbfPokFG|ejM&I3`?GrNItT~2t?)-&nOh*@uMxg|D&nKjn
zh)hucNJ6u@pR~S0&ml-UWzQd?4{Tabhr~sLL!?r7A)#}(ts;kz_d%AY442q@&{jBF
z@)=3{qHof0t)SM}ppd_YYU4-Y_+Rpp-E{kBwZxiX5uAiPa(Q=TFtztjmaUC@mW#+>
z<^W3Y)7J(cp)Ebf#6qsD6@(D8Z8#{SK<dJ3{KiW`Kjb9QpbZ_vpN2Wd<PMX6?a@-S
zT5wCnhQoMcwFrS2CdZ35BDzBff-M>CO<t&HPuNS;=B|5_X*tZI@%_iVh+1*1p!NDw
z{;3G-87bjVVCkr{;EU|EUjGBhcXV`EmqM{?DmCVRSbXCYLCdU6`9#^;9MtbBCl;E9
z(HXCt2jm=!yN#T<qHJdR_^%2u3|*4Ln-S3@1hjQRF&}KX^1y_XbFNq$)3!tY|MmG1
zS_6qVwnPFnL{y)11kY>{MAqLnS(F9=y|(uU)=LdCkC(mAskOc;<^w{m&`RPaf)5VI
zc5pvWoh0Vj_1i6TRZwk}eFp>BMZZIeSd2DH?4&N~r6wwYyK+nwqo+G@pE^k*?BcUu
zvAP>ssYX0$-_i#O^&HBmb;PM*r{-DvauomjsExXpG@zs-#^}$9We7;?@Q(|EQ0`{J
zWPyGsoUJwesYld5D+*id#RhIeGRvPO<?b)9lL48DYem91(1%EC&6f6?o7%p|?WDF!
zIst8vxIS@(G)FrZI)kx3Eu6`3hoic6{;u8yKTW5|ZNa|^Jj__{@y8UsGK2Gr7H$?0
zu|_ik>2hu|P;M`JI+Ej24(?^*Xv);2{NXJxccm3KMmORp`39G#lMI8Q4Pec9v?|b#
zGoqgEW&G|LIEq~PtfJ9`)&NY=orc1oE*ByG?_>4tWx)<b<*Wpa@c!%n8-89BK*CVt
zW@`16CcRndl6XgpM=TCUPhl=mcn2|QtX%$lv-doxP}6;o0*IgG*}&~Jz-ggU%GRVJ
zj<Yprt0JvQwp3ITWvi3yT4)Iir-Xq%VgOjvKm4!sbvy2h%_Bx63e98`c$W5SH=i_q
z(z;-IZv2ef&$V%E>l8`oc$u{oumu;e%Yv}pYH4Ljw(ww#0pM`-!y2&3f0v6As4ae1
zam{T3lkwto?{=4VN@{~Me@;Z2BLn^9Bj#$e)z9%yIsCy;_c+k8NfC2W^h6)l`}<r2
z#{m1G378vDWVN8f*P=7n^)#gGA+Ugk+99s%rGLo6l>s2hJPnkK_<JL{@skrL)ul(_
z>7gJ?nA1j3jY)WLW~+Yajjb6+8s7Yk3)QGz49adM$!Zc;9R(qfn?s!8RJY~$@S926
zq=pasrpm6!#`7-FuaWst6O#dA6Lp7C4L1g<y@)ezrwnzm#5~sdl9#nrPKihi_WA?*
zF_<)2|LkXACt`%8SDi9)=h(1B(s&L6wi<~h(odXPuZNsNir{8z_t`W~e9Bg6c~Xd@
zwKO{F7w-JA8oP#bK<&8E<vqn>{$4$TzDW8}g?RyQE-Fo{n@h(TuI~nG9Jytys!YCL
zAxPK}j-28!f~D>kXShCfzQ6IYNfx8sV^G_B2n`5lt42g(u#q*bFv5I}7%2ngGxBeG
zQ4hpxdw-Z)-|>W+EI}FMkbK&B_0fq#FJ)^)Taro5?*+cUgE9z0-QCGHJr?nXebM2V
z;DIB_n&@7Nt%;V)1)2Iq6<>db&Fv-Hy2yKYCer(-;q_6e?mfhBaf6E%>y5Ix_{7Lz
z<rsmpOU$TVUpn6iyy${FS9O2{`7&$&6QWi$L88Us-K=MP?(Q2Qd~tzoeN=B|6TKwf
z1oL_)%MzG6mH~d+KLOF<A0ciN8>A`$F#ry4Nnx`^8y!LzLr1y7nBsAjX0qyq2BBu^
z+~e=E(8Dz}UkDe41vqOoJss>DhWMqKW?*Gzk9x8}$~Z-gdM_9hA;rhmIsv7(Fmavy
zC92*nHx$&^rx43s8K1bP7e8H8ar5@MW<Y|Ht#OPjyoR6VmR=$Mp2d=D=lik3+CK$G
zU|6$tU24z8$N$1SmL1kl6L^q}`mMp0#|BFLGtu0AdpZAkPuU>e7X#+wCN_<5j`J_9
zPCeX}QW_}s``bA&o2l9%AIaA8YJ`MhR^WrXg{vm3I9YprJ29qLM)%x!39r?}8h3@=
z7Fw5n>Ti#oN2xCTaZa;Vvf^VssswxvTgA!9+Rwr8B8lQnCY3G2xBzSy0J7rb?|Wbn
zadERhG%+EIicyr$J=sR~L`!i%DO-V>UTmQ-eWNYhxueX>RkNJshV<LTS;<Kn@vY5|
z(uPICi-yU5c)nAJYs;l31$ji({;;n62ZqUKRCW2JBxtM6?SHySrHHAj%H1%@7#z8s
zw^(O2MUH7~x5TF*1Lx7A{2^)Kx1_J{<o1bFOLS<G@$V#)dDFzZNwq~u@=RIO>&E14
zO|TRVn_I6QFWkfLr0*Ou)W4DHhpKp8LSyg@fw7TFR%ICDGgIh)-)h3T394$F&x!G@
zg@*u*h*OD;0MD(D)7TYN4n!%fwCh+*0*=6w>I-Za3M3tn!G4yE7fzY9Ui{@uP2ItA
z2*SrzXoiGo61G6A1ZPTtaHq@;n{<$?kqd>cVMsO;?8`l28C+a2BgGNiN{ujq?~h-Y
zlgjk7kDXBUJ&FWycA`W0HSa818__jwKpdz9qCQffS+dPm;pFIp5DxTP?S3SH<>C@h
z*ArC??g3Xd_d=E_eV;-1HL%E#8TCeCJ+-UHsPiCZ3L{1;Jjz1V!&94LLW(n)?Uo-b
z&m1Vo7QJT59$pE%?W%;N@#w7%vAqXez|y8$NV$z)^EA9RVIw<gRxAXMUqm#;ya^Rz
zeL@nme$FlJY${oiALsAg-raRpmhwOu*Oll%-rf4$$i9F26jpNfI_V1Ss-be`?F`E(
ztap-p#P>^_PC0SO^mL<OAVWRjU9PR^`a*pXyBNuo0wUaN%E2ws5ObaQ!UWDfs&~iQ
zFD{_39?bM@auVdhZ3-!?U6iUqR#Y(jE~UfNtua(^0KO6(Jie5OB+6k%C1jZL@o;!6
z4J`Z$p!sgt&LtHK_ztJ{4$Ut9=YMVWt!1;oyYCl^@#d`YB#XbK+J{wrDTio;ZlVOo
z&S5lOC9=o0NSLsaX-|?lKAdx1)Gd8}Ni4y!2M>H}g2!XeJPQz1HXy)bP#^jqN8~U`
zNs#akLSg0i*waIQ=oB4jfhJJu>NJ>rs2aZMJqSRpX5b`W=!+IGZD^fSJu;>Cix)bb
zaos(3=UZl`X|XdPSZs97=tj_mjs5k@5ahM#l3ZStC-DO4CUYY<Vwatzx`8%K+cS*|
zlLZSvPzbASGoSV>ldV{R;g44IOj>g?wID?NK7*MRKJdeaa43TOxPzJ9S<W8TRYyaC
zt2M(4)FA)cJWmZ#$dK#1M1oMwbutfob!y0zAoO>fq$^D)*JGj6ZRfL0qbKjlyRKq~
zV5k;lQ*ha3pu(7q!0N8f@D~2s_$`!oaYK*WX^W8-3V`Zk&W46EQ;V4&<?}be`t7wI
z(Wc8U^bY<4Im6zVq3bVEG`e&}86<YOr?Ftjw*wwFn?pU&k^XBzKcI-30xtNHs@<*#
zsnk|D|4Rt7X)x;pBEp99=$Fv*E*9w~J)3HITgeA0T+`M6Lk;8Bq~I{^vXz`<tO$&a
zqby6=dT?gyCWHC&^&rMm|5t#*+1-~Fw@Q-sReY(_AUBGVU;InR|Df`oe_>q~^CFKw
z>S$d|6(ND;T>(WksbqT?B5xR`eVHQA$jbVc+tX^=E<o;wDH|$LyX`n9azwP2{REOK
zfsW<`LrEALfQ&Ig+H>R-o@OC7LaAZVI(6hPscC@0xbH;W4!nKS2a+Y|gDb{F$z3B1
zdr<M>3SN_(gr-yPq}_*`dm<P}^SWE!YEi<(prlb^DGLij-mOmj2b%fz9U5C+HR48p
znK=D@@vaxJ)w7cP2FQutC|}+1Rm#;fv3sjZHiR%`{VXf(f(Tx#X(BJzxrV&1w)=5?
zc_iFII2JH`!DS8Ez@?~uRZ`x8a@;-qP3DY@y2iyGt1o~O3#cGWa<jR&gFxtfhepf^
zVP%YuPVZTlk)`>U;@#Sh!^EL(CHieKd5~C1l=!Hfn2^;M3f>B{{kRQG0J2A%0{F5g
z6{2T?bckkxg_7&^Lkt@SjOo)8?gq969`JNw;7-V-vc{MT&N3ui-;AQ)24v~1ruI^2
zA>AiN&~4umHKnzys}|flH$xpYMXhBvVE?b1O%qg|xGutPXH+I_q;03G&RYwYhIYLI
zTjA8ND>8IT>P4j@FWehH_M6_4y$H5)@{IP&y*S+rf{iW8cqNEUY=eP1cL9I+Cy9&K
zz2vprN7AV?#7hyx>{WW&=a$8SLhlCq&FlvM>M98iEox>Rr1a|)_=cxhC7@Bm1iPN?
zfQBj!OvChyt>Y&|b#KvmB}rx?MKx-^XI7257Fd-4HVh?Y!U$ZSSDrh)x!rYo=6)Mn
z%SCVEXXR0sP1h_4AXwOs5*xnLg5WG_>=7c@1VsYSgAuRbaVkc7MS{iHpE!5|Aa<ws
zG6JSv`u7XW@I692ne8MFp)tNFUrt|_vP!t&pH|h>m1~s>xtco5S^b8d4V|~a3hv5J
zg^#)36E8K@rfGkiA;*t#LmJf>1$#(_+-k+LG@q$zKZq~D#V$nB2c4TRYC#Bvw$VZ4
zWwdt;>U7(pjT$htj@$)rclI$Q+91K!b~NAIVl+w~<?>)%OK{kq^>9G#T8=YUf&NW{
zZBQ6H6w=d)Q(k0nm((X_&95{C%F6dH1j8G|H9E}HaGcJu#WfsR;Tgw`jNTxGoI8>~
zoeC`ji`H54o$j-?f}vc88?P$v1IZwRyr`8uKPzg-uqGIvWlXz8m4sL)nSd_rgi=p>
zwq1_)og4z`f9NKq7fFALVJsL6il1ME>9iz!ij&jCxR`BgUDo~qCWKaoq&~Enj|Qpq
zB`7%IlxeSZ*1l=ox!h0)AcvOWa-zv~NEEvg8VM7R-Q4^;t-_<?gmN7!7AxU*J+DxP
z?>p(+6vN1q%r*@_=0xup0?|c;R?f}F`mvTqC_Z-Ztw|mM{(t@|@1aA431?|rm}WO|
z+HMa`4A;G{W#1yOJ$~b*1=cGLlG5dS;E>OVkT{2%a+-F<o%xvy#Q~4S!NxjZP_CgY
znRtt}k=E{V&YuC@kPS9JWY%e+0b_!eXRb66;!qIkN)Vi8oig<l0%PS(8=*5KgAdp+
zMi?d#1{!gHP6#N36CtP?xA&~v;TkOyu!84=RA5hD9@6b<<4|RCaHL&1oS<=h*FgFE
ztbC_8>3x(Plv!vZ)H~ybrGsGmReI`$RFeCr+z^`VB#%O}M(A-onPG_C4sg(rOA!tL
zu*~T5SN+=TFa5OfODpCbzzbC|t4<`MP#Q4GFZF;37@P<ro`F-D9}8@58abw=6a>Wb
zIA3Qny~3w8Q6Nf%zHRy!R%xEh^~IiAaJY}Z5bgD#pmbQ}OzjeOP3z_E@qk<dKR5|e
zk<)I|#$BkacZ&p<s0Jng)MAXqF8<xjfPOhml3QwbaRPHV^2pnGcd&-qO`-Y^{?eLZ
zmAGP?C+?D~a_GOCg(;0n&*WL+1VR)^jB45nV)sEbBY(z9D>BU_&&Xkap*ePSe>an{
zG2G-Ckv`iKi)<_!a9SK)XZxxB*@5Hjr@S$WZg0RWlvWVD1e=i4de*grv5LG{m(rnE
z^d9Y|D%I6YS=LnItF+suRXq^95z6S7%3ERR-dP4jv_X{;_+q;+W$o%E>P+)gQW{gQ
zs<86qD>9487x7&_WLTGSHy3U6Zbu??5jXmc#9;1yN`_TS+vm0Cn;Jn@Oe;p+5O73z
zRwO9(mtyad;mPP=elBSl%tRJC!f)%%1ttX!&5lq8)~6r3ER&yb`DYgq1s_8iioD1Y
zRd@<%wV>DkHSgGT<ra0KID1H)TvaeYAH>*ePp8Z_^x>HbvXo>binq{4lZYj38WfWn
zNHK9};I2tK|B|mW+>uP8h#MYyH}NkNE@>p9*6cQh8~*-#{NOVFIKb#RSIB3a6GWbh
zWW*PyP+uaRL||p4OxvFOM4)&3AM>uI8Dq-#WX~P#f!Fn5DHa^sv4w$LRkWg)-9_F<
zg1JaFGUa!F-l3I>KSAY7Nh@r;b0V{hDbQd#rJgi~`6en%igB5YO)e0Rbz^LCCW{V}
zw@pjRBXC<Y>!n>W$a};NTS?Auwu@=_02ya<-m>Jsv));JvfplnyE(pfNT~2Ll`D7h
z!sQfd*CvgT2GKZY&%N&MA|CXY3I>a+8tUm>;6^KNJSOtO#HGkGeS<ce06{>$zbiQr
z38P~bx4OoP_u%Y0jmtQ?8v&)$+xk)ZcCU6zW*wkqDc~Nb%yMci@d$Zc_RR%4wOz!X
zsR->bUqXh?9A|LGf;+9%X{D<T^m4{?@3?Fe&K;+3|FMK&;}={OaLA8<0CkA#foQ*<
zW(1C=j@F5wuAsk;yXS>4<#JWc%ElpF+a_GlPM;Uovz0o@14jawm)`V`SOmR#5u3+1
zhjx(_{H>mF9;UBjAuSsim$SM0eG})m5vVuAX5u@*RylC`x)Ld#j0Yhw9gx)->-ub)
zm#KT`?WXdrQ+03}^t6NAIMY@gWNUlvmUpX<59ik}5~o*Mb!FSP{+-wk!QTkH5CJ@n
z7pV@|vA|gjF|e3abNX9GZXkpapCJENXI-}p59IHT;mM`!acXu9AK&f4vX3M5j<VE|
za-P6iy>%z`9H*_|caNY0uBthFFp!}8(7c?Z5r@EANyRPdt|*xNbZy&Xq}1>3Hpu}C
z*UL==nGC@;Wnm8Q3fag)@co=RWveo9fN<GcY#R@>fm-`P1(8DS8we<y4U-W|32m@6
zQl(u+<EPamSjw$h?N(xl)RmyhdEYpZf2JWlq`zcKWmh!+T=;I#kmtr1uvCi2pcAKV
zAJWPI81s+w^-~J`GtC7v5CXC{dxoe8>V4Kaa3w0;AlXu1SYGA4Niiv%r-1c!LX&_7
zH@=_NL$Aa~m-0%}#gQ=Q3DwONcl2~1(#Y5a6FqHqDHtK<2ek+Ul;UJ4Cvx>Dy%RaG
zjp<(F0-f8#Sec=ls*6XMpfmjVg$R8!EvsS-pu3hWY=C%WX`0jbGrnh1e(^>nXEefu
zU?Po=M7%}|hZ)|Y&e((zaGcN}y<7R>i3DT_@*ymBzzPts{ULf%H}>RI3jspmRouF*
z)s-bwJmuy*Bhvc+)Bh_@4639vBc~ebwh!`jVSq0J`&}kVEeWS_CJNS)SFp0<)q*+2
zx~cn|@&#RQDW=BvPXXTV)BI(sI}yN5)bP)K?nyTbNIw2Z3Ay2Yt7W1C42>!)r3M8)
zVlOw3xWcp_YJDq9U9Og6nc&cyQ$V@CpYo2~1o6LmvJu=9G#9zo$-zPR!^A@Z0+I~d
zam!s4&+dQFie~&P%Bu{*$&mVWE(~{U&EH;z#YjPsl0Yf^nhsiMw@a%ZaK>C$k)M_i
zbs`&Mhps#-c35guUzGCa1LCV?0%>2gQHzC}df<}zKb>{aDTM6{m~;ko?MeLtQnVqk
zXo}x(rbQGmzCrI7wQq^Y{LOU6HJ5xPH)t6pG>z2Aet50bz@dDw|Go!Ku3HKKeNCm|
zT82ze_j9K<bh5R-hLtx=W2+vNs}h9=Z-&D&FMq}p38~Pfppr9z{&cwi?rQv&h57BT
zkAs5A)h=T*HsK2c_t{s*&}=PImBEf%kDG^qVR@(nJja>@soxdd#F#6IVobmnO&I<n
zoTXV_$1fFTdmb~PHsn38yM2=;@k)A4gco$&&wZz++0Yn!y4}n)&G3pSM?IUU>4Qa_
zldpy<&B%J@2rU9+Eiu%7$)Ys<A=0IhA<7zu?OHDZ<OE{*H58m|9O&2EoHSig9hnzx
z<c1z>Rw~^E1@7<yt4&F{Cm<HV1`QdSr!qm?oc>L{H{7*+nz`l9Uk?U?frz^upcT7&
zd<c`Ng>jA8OK%b2Y53==7RZH2;ul3PSvZTWlK#(}4FG+y4!P*$@D#GRkQdZpJn#fM
zK*-RI6P9i37`*qIQB9Tflk#-sY1sy?IZc{Qfg>D6m0?EHD})}i3AFN#z76#WaQHpJ
zLMjrI3+}(>&?O-~o)^cMSOs%5Gpr{hE<v~hC`7!vUSC+?HRh8g)ZLrA=&KbZI(CQA
z_%3ROjwGcy;>XfQz45(-Hj#O{Ome11+LIOzOsAf6Ab)hTR?)RAwW<p}LV>Z=3rL!l
z(T1_?F?COa6h6I2kYNn^hqVkC73<bDSt;|`LUq56gqi5ug-k)>KnwTI<ab`Kl!5wx
z=GonT+|{HKzSVU|yQ}8d+bHSbi+ViN)!NXMWhj2US$r#FKLiJ3_l$gED#uGU3_Omz
z2lH4=k?smv>IauW*TLd=A5)c5*`&&YhJ?GGY~C!%YTcdK$Rc8;-4GiSYGNWlOD2&Y
zG=1|)N_MS|UjD|`*Q57)--ri`yw+4X)jRV4plz~>y@e7KfVUJ!S@JMPj~!9EXJun%
zF)qBa)3$9<H&Qhz@UCMGqTF#+mNA9X^tTmb>sZ|d%b~*5BP-(J8@EzzTs}}9yREK!
zAL?{-yJ}n3*@E)f7GKP1BP3>h^&n^EBv1i>SLeDQEApoYP%LY8@XgSb*>q&sVopJO
zsgDLVSK`TC0D*&AqFqb+K&LK7^^Ei?>15Q;*g@9X?c{qwPS#hP8!^-w7V~j#hmQ8Z
zeAhl<eJtzwR5NR@Ld;&(R4<`vwRKpeT^Z&a5s+@O<~a9^Lf7PjR5Epyv(GJ<Dgh|o
z2xE2g;edNTU`q}`!O<AWALr<#Va$Z$9o@qquY)U{JgfkzkIu>p2Sy3$r<1+`-;_u|
zvEtPlyBf<%qzoxp+Z2CtU|I{T2tF_;AidP<x%W@^q4t6eWmsN{>}>K46L_S{Y>Gwh
zAKdw!<{I!ZNqNJJ4#Z$o6am1Dy45m?B)8lva~o#w&EIevk~a`<Gz=V+B()?dzNkXo
z?N(aFd4SP^$W~A{bUvtTI(z7qQdsSNe+k=f9Rb7fPe=5RJRh)8lltc3Xr`7y<XIE*
z_$Ypge^eQ%?S|AC>~TbQHQkG=c&w?72{_mW!{s{L!LnawZ5<-;V|vCTa`M!HebP!s
z+BR=V1dJ*(mc`&~Kkt}4Nk#$9NV{Q%r`pf81J=#Lc!hS;z<ssF@w(_$gjWIw2->UV
z8m?0(rlZdH!d^oRFUdd`H3h0~a2;-{n5#I)miFE*Q7{fQs8QGO@LE7S0OpkwVplpw
zHzn&5Y)}BgRRZ_sRePrliW<D@AH$R7dz9<{TPvB%wbpL-;8mXPDdp^d4jT=jFbisP
zfkOOri2(OKn`9bQ-*%&#`_}~AT#Y~#!3UM`cy1J-%epgD&HgZ09I{KyU4}(~*6oj=
zb_M{O73|?(xC;;Vge%NKQy~Mre>pBLp0zlM=G-`x&f9g!inST*W^0SR0OI&YnnlPo
z7>nxjH^ymoNPZ`D3XpP8GW>)J<=la9v_?fk-j7^~CFQD4V!t&G4wG#nL7s9C!?~+M
z83;iV&xeC_dx|sC_ojPynV%BgtD;3$tr5z<5vO^4-E$a;B%<*bhWM?Qta3y^GAzyH
za~R`(Wn$-L*cZPxYJQ52{5$Mpmk|gpKjd<Wd!tFOurYG*Fm)zetIRvr{PglE?4r>G
z(2Fg}=LLs27c&jkT|NmX2F>I>Hy$2n20dV10E3Iegk%C!@5Ru4%L1iUWm0!rA6ZC(
zA7>_{wyVB7Kq2!_`_PWWcoxF=f8NoH44!?+TP*2CMk$*Dyoi*oAMX5O_a*XfShKO}
zKvK9J15FUyxuvARsy)9xkK&&QKNqC$MGKHa*fESwlwf#_o<xGoeLV;^$*~jV`_m~+
zra?v8?R`7y=r@y=vU77|4~AL{-GWf}-ZQPUA#`jvcLiRB<S`X>anB_RG`h^=t!tZD
zdcGHXm_0rN{4yu_+H027K$&GQYBurqYhOW6px?kDMPH{N-uY&j7KLkdRCNr}>ZwUm
z4nRzk_ak{Isf#-}!~h*i8hXbl(W`#gCpUU*=-6*1T|F$ZHwsy=qb0%QPbX#-*&8TO
zd0843)TX|{*EPJ&D2Poa;&g}YjaNu8TRJ1sw59J!n(Rn@DQKfPJ&cV@@ju<yfex<9
z#|qT&vT&UtH<BFPkEe^$n>|Qc^wDr*fEcIce%bhQL3F9WbqEjUS1-|~&<k+AIqyC9
z-fc76-eMGfXE&X9Tr@<z((hN2J)4d56sWYfDut#ReG=TOwGsl8TTJ-kNd@AFR|mpE
z9fo&ud&M-DoOyXoT!ge}kLL}O=)9ghU@<3j?PL)0+tR-sQL~W@-&{eMH7pjDxk({z
zus<<5QT)D325Q?@g>`u2uy;f<wn>4DQxk@Gb--<=DyKGV5e(c!Onfp+)PI{o$9-Dq
z+mTl$2I(LA4ZTT0$rc7#Djx}<LVn@DF_6GVTVfUE@LtQlA0#6moMUWQj-&&$;Jil~
z|IreAf0+V?Kf(yJ<ZxfV8%v8c56*q)Z%(DxyDZ|T=~YbGZd@MLAE|DTgKsLs&iBCW
zIh~fHJ?Pr~m&cQtkaOyu!$`<DsfV&n7z2aU%E}&mrlId9rd1Wi#On=6($a4^!3Y^r
z6VN~82rhH$ROXW(U<jO5<@gJ-fgoxSVL~{H#a}srMW>G^JP8$n*Cqshtl+7J@IMLw
zvv@2?@b3;>*&B>tfJSODFC{>h+L<K<0$nezGS=nxz>mnQIwyCK5-VZ=Qdn|Q<8@RZ
z2M^i9x({(aOht;D2^9b*0ZsQAHt!Vp;Ut1B+-bkoAk7KkCTYzY8?+WR7Xyn}Z&EGo
zS7sWqz1x>KbbTUpLMlLVo2%O}Ay_1-A{h@6d5EH@&j8gPnP;2FK>(RCHy~a71KqWB
z-qp*LNHl#5i1&az+hbw)4sRZ_R4qqnl7n?bnt6=IS?H#2uJ9IQnVfzYn&Ctk+mAZL
zhC=rwNu)@5&>r{ucceYt!^;gC)}U6GjMB%o2(;KE69Rdl*ywq6;kYa$TAOogL7>DI
z7tB2cB<>PPWgI+Z-=%kixE2c>d;Zfd(S<4z_mbi6H3N)zv?+O&+H~kj%{3)V{LYZH
zfhIP^M{pm(rA!>;P>J(=eooEp;=6|7Bqc2%&K;=Xi%}cJJaYwrVHN2q=}i}Qcsm@^
zg7Z>m4u_(+MJ6HViE(W^C=iTp8)NI-l!BY*b*LAIH$tDU>Eeknx*4KQ#8cVU^(@fU
z@L#N<^(D<V(#uLVQN@J*<B1GS@hrWr=bVqih3<+ecE9}<vkJqR&&isk6T+3r<;=}I
zKxTEK1!=3TV11tZ@MEQ)7J<y$M#)srYxKh_fY$&{*ZI=SguG|bVE;IL;BnJzZ4gyx
zE9^k`a1ev5w)6QOtUM);S=oA|Q~)g~`{0(tjC$yJ;GR&_8=<n7nFGagWFOt}U&1U$
zJS}1p(5wE{6P0D=HPbg+Cyxg~*Ldw>a|}?2#H@RQOlj*8c@uVDUawz6;wKaigPwH5
z<~a}EROj|94lU|%Pl=5$0P7PYdT)^zySA|q?cEPVn$5Sz3+YpRE)(>1vvvl+hyW!M
zt;9>}LO~{F`vPyK*{wc;>M29Hn<378sk^KkLA79%ut+R@S;sIh`a=#0o%pQW9EF};
zu#fB%eH*2x9$Ps>Q)d)k?3kGVG*2ys6KNXLxJZ1fy)9y}mt@8MUzHgf)lrrt>Z+H8
z<+xLJw7N`xhy%ks)w{iD3l!5&ixY);z<D8%zS!|mKJ$@+LrGp@9PC;ZH&6BpG01T4
zlL=@Vwel@b2`Q2ysBc4EQ94AG^AH<CU$Oi)=WSmR8@>8_lUcSo-|~dd7frft`N-d}
zad4IyoMwFa@>UvCyH4zna+W`n)Hsx#oP6Ehru4~gya{PCk>Pqi@%3{^mNo3(?8Um^
zN93~1uOjOs87w^$<#hN(f%G%0B&H{b)g+rOH!z)gM7PH<1d429+JfBd1Dk@lK$&GO
z!j&^xiMKflXuxSmLUJH*ze_;vAY(RpV)Mc5Z<?3F`zEsYaT4Zmu99Q{haNs|KADsp
z(;}lQkb4+4`s-&fCADv_yLr|bIVgk#fCnogIVMEyM6Lo$Ero>X_Oo6A<qC${jILQB
z`lg%I7$TZ`_g@R#fCI|+IvIK-rt`Lh`@trHd4hz7h$MI2ojI#Qvgiav$7T)zu}5j9
zjR__Mx(XiSl?}3*+!Ke@*l>2`D)`XD+krjYUPN9(6pUgrHFP<yvhqhm(OI!X8FfuE
zplc~|wHE#PHk@AoC*Ckl<b8tg{opYAp}z`Cua1!lwo%p2$&0c^nWoS5!czlV!MVc0
z<o@s13$gxDi|Ek*GpOx*8ynD2H%HzRYLC@u*LCEgCHd0Y#iq2C<w!?C&jVEowfj#U
z7>L<E5GvO1HVw68eR=t0q}={?=$@LhldRu_L@*J|wzXI=Cr5h>0z@@xtlqIG)AX@}
zAiiR%+o^hU8Oi7HA<biD(W%$Cu0vDJdnlE&(?Lid%I#|G*9^<~<pULfy+uhc2LY$f
ze+zybv0udo!4p5r(vg~HE{CuU>H*BN%#Zq>fuV6f0B*m$3KDM5y8B!VD;XUg_~?@A
zyDtt0w#{`jpD9&*cmrAbN!7}+=~iK0Fx%aD@lpzlF-5*aQZ={%iEn`j@FDHPX`2N{
z&z>#hO?vOFq4pJ*qLePFY$z<R_N<-_kyCDr(~wXc5Jms{<4@FT%rn>0<bT<J6l_W5
z7%9OUwVBTH%>9Ka)Ue;sAtly;J`)+$oq++;0+U*&2fJiMo2CR-3WsQVw%#8(0cg(A
z3-!Xxd?G)s1*E1iruqzjmI<@zNWRWs+MRaTY@OA?%r%jT6U<$U1l-6@7VvzMdeGMA
zO?AN<{t@{WPVX%zsH{_&2&zNe?FcZ&(~x_6<eJ0a{<0QlLX|^hx))(cl+K<l!$mD)
z>_8X<(K`B*vfg5t{R27gxvI&}6Isf}?{eg7lml4Q${lgk7ns~pp4L}0UHdE9Dh9fK
z)eWPc>MGs+n|3LOHjtTW3~IFr125#Y<M&DAD^YmkQ@-c0t8sC&XgO^INc?<YRVJNS
z`MQ%BcAaGz1k&i3ZrpT-T(i13gedLBf0C`mR625oH@B2ii=3ojK?b$T^4kK-1-VjQ
z;E!2pLPfC8TH!b%OW_nc&uQ~*O+3AdlwMVc!y>BwvVwD3z?bvZHve8usNCqhMk~m^
zFn`H$!2n9<xEXzw=<b(>P6pjGV|D7Uqyal5kNG<?<-g)S;gh0~MVaC3Xm>98#fwi5
z7DAlI=y=3D(Z}sZau4sQ3&NJ=zdTb}(3}aHZ2UnDjk`PWSW>qqhKHo~K#}aeCE}=e
zM+Wut!j!KQV;<oTZ+O({)<Hj!2eV&3_sj#>&V`&rDzw<Y_fk^w$k70AZl3Yc5OrWw
zLupYw3Mwy<f!Mi0;gm(RQ$-(_YxJ~-sU6wimOl+%k!^oVf(MkH#<&TC2avG4<mbE8
zoa^pR-EaJLA}TZA1)J5QsH9@`EqD?H-X~(DH(ox&%+lh?y;6=+F_l+92nh%w?ZXX$
zSuwlCjzl5sbWf^pMvpUG(D@b;B@!gbsH(NcmSuW^7g#69))Y<n+tG#5WE#2l>GR$s
z3XEJq|K5DT>uq0DasXN*IHxKc^u1Vk-!&vxK&j88`wj(2qM{%8>C^Dcdq(o$RRg<<
z*AkW=M)S^|L3YrG6j4Rp(r?MYu|!e<YS@_~c{>kDajyB+@a>@Y3kOtI9Jm3ecR6Fw
zsuKOkueO=F^xJab04P#nO1nV^W}Fy2cV&lb9{fJZhkO*MQl0;sqPu+h`$e};g-@oq
zt3&-DP=Pg|f6=bz7}|pc=^varbc&*I&S%)g`nlejd8Za!tD1;Fv^4I<wcn_A33M86
z=HAi9sO^ZypT-3R`EC_I!_wRfSvxa`LeO&?-pzD(dHsPbKr#;yDK8}*KD?P4AHfbG
zi{e>6!LDhV{9uXQ95YC0Z>`+)0c4F;hda&w$4)3DT@ngp7U1jHmc$HR^I67M2mW)#
zfzHC_-?miwog5XsGaA?wdr=O&|IA+U_4;@(oLsN_R29(Q4YyeJDThO$qYiUR3j=xu
zM+4colGxFj6a}1sEY|SV<9oZeIqsV)=(_;&P7ti)c$Ekhl!T&i0;;b?NtWdG-iWF=
ziNf$}1!2obtZmT$P7fp-A``GPfo(^y2!iZ)A3%Bf4>SF<7Z@uc#D|_{MhNp&Vdy@=
zCC^Hzqyj(9Yi~@ay4{Ik=U4W}dC<40&>=D~t}Kg!9`SXZ?bA4|jyYh%y<S=EWM+O2
z?lLVymnkr%1R=)a#PI1FWQw7<a13_<^Af>(*Wr)7QF|%PVeO>bOUv9H?XjP)#Cazi
z7?S5WUqf5%(PRp*RsiF#k|MSU8p#M9%ngsyVm;R3%f|Zaz1nGFV|O7$psex;$$jV7
zD@3&Bs2GU&2t$C@pUhTA895hf1ui??BnQQEKjjL(7~w4z&Gk8*A8n7a8$LMuw~dJF
z22%2D@AsVPl<jCOzv00`j+roH#d)+&7myWnAHrJX6`a6Jkf$=(bqvOsJ`P{IP1n#v
ztv;vJJ#U<865269OuaXToy%$hab&rR{>jNk!M1`4lZA-C$9rx`d*iEe8m?w^@Q+`0
z573eJINu3?Up2<|j_J_Z<_i$c5hCqK{*v_5D^-JlmDWrP=RElB4g8w5zs9K+&pzLZ
ztUldyr>+yE$@gI5@C;)WzMD$f`mDAY!@MIXxMs13gY)jjT$NORPG9v@0jNVM(ixe^
zsHC^r!@h!uyq{?Fhlhv=KMd^HLyY8}s=%Z5o7&FIKPH<}yEdwq7V+n>Ouq+CchI&f
z$=BME{c^e$Ipq={!j)UW656ErC@9_rUfDmTEHlA%6_Yl^hCfl74|UBAD$;Bnj4*U6
zkIhTlDFe9AkvjD4gZX0)t9lo56|bs906=t1mT+2XZI{Vj9|>iZLlEJ&6OZ@o<bFDm
zU$I&&alf+2#tf<y7+vtC?kQFB(XFgE^(IRn+bFNpb4}S5czMo{$HWz{Y`?!iNUo$&
zOaDXZ`xFqzVxR2LOXw~O;O}^8c6CDu!&Z388AbF53&STUY%wE?$dt<q`a@MlNoi%X
zjb=xem0pXbi-d@nPgdA=-3XmqZ76gY%vmX)4d*GusUJwH6s$2fRW7?jdWNde>}(V1
zRbBoZ{PB&4^|@3C;82dp>Xg6VwRKH{^`QCv13Tdn%++#^?<00xvQ%@ezS)_MvR5#{
z`?yV$q|yyoM5Bv827ebHXd-C7KQE_pwld_dA`r4pc@3oc9DX!@4V~U#M@z7M9v1>1
zMRrx0D6+E}ML;5z-0bQ}Ae*a-maQcJQDdAb_|M{lldX`6vvw?00P3>i><;;&ej#QE
z$YUck3BVZ8gps-<Y7Xf5<^qYH<~T1};}M+#9?}5=ercP@$we^pT9;e!>UFy>*UlwM
z#)OSs(BVBIx-lbi36VG5?LOb4QT8D@?Z;ESw2bxV@F&jobZk+bG-132yGvd|4F~=a
z6&s&O)a9?HF4#epgQfS{#_~&#cbeqDg+0>Wn4)KKF;-d3i0(<3^;me~lZrY1QmtXX
zL(v?qKm6I<M@1kB$!GOX=tqL}ys1X9&L<R1=WSWGl<sxW)8XB#spzWIEnI88BcI|7
zd;B5ue)b(lKT$tFA@6p%xWM=`kqa?u-Q#6{+IaPCc+wndm!Al=9~7PixuHS|t7H@I
z_--ywV#H`yugsHYlaxwL>cT?8R}l%heSYqFj1OXYd6OiDVYD_xL+G&&IpEE7#KQrf
z$(tyP1_U)3`~*kfMA{0(Mjyag2PkBrynRV>1VHMQdm$z6ckc3w>ZxqN-MRmFkNnwS
z!a%_*cmeiX;Hy6_6@aeZV80WVq|L$skKt^@@wG^scD-62#_7~;(UAVq5K_*~VDFrA
zM>?>erM|t~nVl}Mrtz*#M&Cqf>*Hq`Ff5fmX{07h?Ea!PT>LHSd1vSK>gqCSnoj%^
zn)PeMlFl(iKCPd@Dy1uD)C2#h<<aFq7-bzpCYLW^=9^;?_K|8-rU%+D+85o{Wb6g8
zl>#QL4L`>HZDqeDTxgoYSxNH6X!jXK`$?5Nh<5awo1o^S0jMaD7;<D6<g>JYCD0PY
z#sJ!tA;>JF(&*4pighD{>oC7@p~kEPYq=Df--y|E8gFGjd(|lDUI75b=)ZoC%*hu=
z0wn>oVBJ)vVu*=zgT&5wYV<E$x-R#+`y%1OjEQx17u6?vI|Gk?p8nY1ZyP*CWCL%2
z&q=kN$GA-Fi_KS`Z|LVwSq4$)9c4XwsAWglsts|E>tYsM&U4A3NpclvQ&=>;t7M-4
zkp*?ImKAu~GFt2YniqIqhUp5Q7l_F1Z3jL!(CzHvZgv?8$k5Kf{N<Z_Q@!tq(se*N
z<V69ljM?vB*OGAJ-DQJhZnnre#RsuWpK8*jJCV98k{s#^l~O_aOmW>UuZV<hzzx#8
z#Ldf}>Ba%nxPU)3L8HtRZ^0fe8K%=FG-^7vHyBQ^vVA~(Dx#sM)ZM{xzpK(8*Mxg)
zYMM%K#MG)oKNIFa^~>lOwoWA7ykB<M-;SxcQnkp0?zr+hr&TEPT>BOQP1mc8GxPw^
zZ>9cT_hF;$f_n#56mDai0q}(@XF)mnEAbpeN=OP%0r;*F+5xf>v^IFx5uVW^x1STm
zotzPul7K!geCSMsPn;4t>y*hEm5IxL#7MahZx{YU_<uoPs{>=;9}3B!9(i^LoUUy!
z4^ivkRtXz;>OIOQHUyV%d*GG;@zc7IdF2!|W}|$+@%`&siTU+c1?|`>pXi7wR#tXE
zb_UpvMAQH`gSG_bg+WMy&Peof|8%|Y*KWAapLz;meCZ*i`q1(BTA2+*n6)}j$apPL
zd7x&2VKNl5Rzx0k9ZCdz*Frd*?CN)61AG{wX)?=tN8#($MGFCLRK5squNVz%2T1T^
zsA8(oD!_Z>eOz%i8LjvS8=PY+eS#<yD0XKego6xp>s1pX>B=GO6EwTR#?2w4Qr}rd
z89{8Sl_!aqMcB&<a(==8%f5b^0F>*~#lk+3d+JY?-0;$!fYe9mv%9EqUI?~6@`vK}
zo+?s>Ow;w4Cp(=!n5NbC2raYfkhQ}b<5;gNd61_+U<RyDhnvP+l@IafgVmzkRa_lr
zi;XEqh3&_}>D|Q0TsHVyaoqo}^1bL(aH-E4Y{n7rnlV>6#Clf~7q5(8s>_~V1ZO3e
zI4;M7jLnN5YG93`$q)+NRKGH;Y+igl+HSp6>lE!jmvz#)@l0*7yjEe${>yrO2s(^?
zVaP6jeX~P@+W4W_R!zj%OmKAKUs$%WA@5XUCcgc%T<Fqi*Ym=9GE*_-DX%79Y9`Ct
zATS4j`@@SUZL9k`FlHUsl`<RidG%#~yl1Lsb}ew@np`|13i$)rMz6uk3-v-slnW*p
zo<=BYf2h|kxnJ>Rx#0Xqv?5X+9%%{*%3AC5oW8*YAi5)B-t?t4^ta&Di_Gi^jQy<D
zgL#zl&QLWo3-!CaKva?i2C3^%8o}agQluECs=1EXbopeZ0j*&ETz}<Ql}4s~XY7D}
z<-%;rtP)Ckn-wJRuA1!K-DtdTt<SIJ&TKnLp$IP6hS0v<o{lg`^+~fgWnrWq80E+5
zbe>A!A%Rk!(J0vwDzospB0l!KT+643pw0Awy@E(8f+l0_i#`~+x!fQ=AR3{Zp7C_9
zKowZgL@v(*4eq}CLZ=b-e{{-ctPlcs$C+I2ECNLGsuSaSBhkixppg{1+W$Cd!aczZ
zO)qGax%xGChayPi$Dx`<tl3Cb2Hos*AYDzY)Y%ELHb7ZZvsa5W(q+Oc`>efo8K_0*
z$Rekp^a`I83^y_1_%d(mM@_*AQ>og@CDb7g)!w5`b`}|%D!0&!uHrZo`Q{3=xB#K?
z7aGojj<&)g-u+aj6s2=ynx{tKk1Ev3cA`7z;H`zy?pXF;vUamrxMGWRdI&iZOSjwJ
zMK1P5*qvu}{*Lc)v+F2a3eJcOG`85g$ZV0$E$~2ouLy_dTQw9T<ms!VNq#(q;G2*n
zvzzDzvPTEEHR!`6Cgv&z5)nn5;`i633LZ}lLe`YzrulA@hvuPo0@I!h20K{fm(Zh}
zbqU_cMvISYeiSYmoLlqbxJLW2O6kw1A!`iRHE$DzJR#(joVQ)Jd9LtIrcKvc!maEr
zN=SY(1<sPmMpcBsoNnemH<Y2SOZzB~(Zu6PbF_?iN~z!V*nwI#`sq_^|Gl~CUt%)T
zcPnU>Oo^YgUC=r%>?IG9t1}+>wUe=);g3&~u?28fkZ(jae)Rm%y~a2dGm6U9p9E%p
z1)Q+aXe?G6bkCturAAQdph}wq2UDC}{OK`-Ri7}m1?u}S6EH~O&*)k5^C+;tVN~bL
z%~0QusnKiLY+FDYpOtnZIpvu-Jp=uK`E9IEQ3K5}EN>XSrVX?8$~oFdVo&5vJ!3cY
z%y@H!;XwzdLhN2*xKM63aVMmqIXfXFY(nJg_%=j8Y~om!-crNg;H}^4mP9Y39XGkv
z#+zl4F@vr3pm=tbh%KiF^^7dz_F{D6Ca<E@y`ZD&AGd9k5J{vwDYD3-vzZ=)=-XE>
z9~W@}m;oPw!F<cL36@=oz%<$V6XjMA-}cqY#NW1@O?TicEChF8Q~%RL#EvGMU^<Ya
zuV1mA83<mxFn|8<5rbvRM*(q}{ncgr9#X~%Di<Tr@n^tG`EwAE7lf%SYU1l3-uZl`
zNFF2%?<IjgvHMky4fcDy9Z@Hi-cN_<DK&Y>Nyw@}c-I>QxL+LulwaS^@j4wG{M*n+
zJJ)6uwXV0SdrgYkU=})8pa*u+CzO@A1wp+Sm}thz`*vsjOVWLJxo)EGzO&;nc|^AC
zg5*TU)d_~aC%G3WGMwD*+WJz|hY}iN5&@-L1Gtu>R;JutQF7q9>^D(syZ@a$pL$uk
zf~dNQ*eg`N>sBH`vY_s)?O?RR-SS|(iG4FC)K2u5x3_qujp4)9mjl@Q68@~5SuvMV
z^DX6d=qBvKJev@X6AjKSOFxE2Sm8Ma9~Pr<Bc_P#+0<1lwXG!Ba{3nr=n7IbWfy&f
z3WrzT@pkdUu%khdt}y=EaBawo5stQj0M!aq4mt2tQ21M+B?^1>qat-E5|7R=g{&*N
z5&m5BK@%y2Ml3G*24209E3BmG;?p&0+dEf~$t`WNlssH*P5K{8Yh9F}nVmb)uK((d
zDSR`XHF)oD1_0%JPhP?2uI065b9$1}8lud$z}ke^kk4>L9Z<nnb4ZT;MJo_O;l9`U
z;arl$vI7Gj$G?o-&LB#5`@ShavD*?J(sYR9Z%&VVB|_I^ARHI8gJhUPBsr2p&FnFN
zVBz3a?kIFitBm$i5d{U$0<v5JTN!zTMx_^g#8S#-oORdYvAUM*_F=AfSzd#m3}NFM
z+cpmfcv5ns%&(i9&BKVEVL$bN&GyOn^c%|;#6}O+c2lFy(jfAHmgtEy!9P2<;v4s^
zg0G#y0IJrBcb)fgIS;c|hki%E{ID%|)1(?ACX*XLa2?gaInoWr%C(8c)^i`Ag=wb4
z!&(+z!sP)AtWY6p9HwSH4YRg{OT)OlxWB9(o@d}?BvBb@^Fugd`hP*eq4|%mYR;ry
zr_KUGQBKik5MbIJ_a(C-k0Gy-Aq!ziRIER8=%vFW)e5JCuAJ!eeXXl%^V3;U=WPiW
zlx!0VFlZ?LB*H7wT$aONHo?Yam_n>ilDGT!Z`<R}KY$-JQx3opO9(tmZa1R5@K&ox
z?GeI(?vYL|-K_1GeVuGReOF|N`QO&ufV}@b)JRb`1QWRsA1*D<m*@jJ1R}y#YKIIH
zrXaKhOl?RcDCjQX+8?kH{h%^u=rcKAsllLHitgQiYMFxl9{~LoWw(D4AZQz$yuJi0
znnuv@6o!opWKxdjGZuZK@@(t>r<wl0Z6UZ%uLEcjw`Fj<H+{IbnLzJ5L;wS4p>7gu
z50$*EHGIe$w{}xL)ab>0G2ynD+UC^7JI%|1K))LF!=j0d^l;KD?ARgnG17_9xol=N
zUmQtq&kJ+~8b$eJJg7Puc20Ha-V3Y*^RA8^r5Y2O;`a~dsPU>5nA22##OX>3QZo2T
zbJ0v1xzAcv#PwuWyUX+KF9jf>68GwuVxmj5Dt@<2n*ufP#qd+ZO)2A^D#c}|I_7{j
zYnxHX%suqvPZ1#chKOEF<JYegK76Go@5kcrqGDT(;jl(<Of6sWDJ<@}u%ec3zN#x1
zj@c80kR3}>u}Oi^Yy7}cyhCbGpz3^UwD4O}?P&N1=brDoK4>uFaF)2SBbDZ-0gCoc
z#RW{--79Ff?E}y3y$BrMNE@vRm;?K$da#6TQLB{PqQZxLxJdaA4qrW^G~cb&rs+9q
zhqm09%R`iADJFOC?rxBTnXP}&;y99FC-UBe34P?E?sCD@J=Gb0*<qp*g~x%gHGp1H
zG&^QcbXkq&gU=A4-P?u}G0|R9=sinR>h=%ypqj~kd}li1#+P`yqwGixK53H5V1A5b
zoRuXK4T>CE%dDpM0vdB~O59lH@U{)+Tk1s-E8G3c?j8V@Ug`Jh^nn;4(Dl1Sp}o{Q
zm&yCZn)VIX{DRQ7>{M2PjBHz;w2H}c*H?2K9R0dGJ)%`0i-tHtPg<OUI%G|_I_dMP
zhJYPr4X8EwXT=3AJdSJ6$=s+*CwM7G1S%zL=q`tAJ_Xu{mw0U2kM1Q!Kf+I?+tS>U
z<p_3zl)2ng=~c&Z3HjpQYaoMZTPLPLcHDN5oBlmroRYG8f8p0-|45j8nL%-n;7=C&
zV{~P3ow~A9p}Bs>{-EJsFhF_FxLm+6MYKt@75;7}I&9#9yhXc<*sOUIuqZV`FHyRr
zj4Fwtr=R$Fc1N<@{48*9`LC(q>|;MtfLFewGdd;ZzeBlwrgceT-$T00y4c$=V28a0
zL0{mE-jts=T_#K|QPL@2uHE|yn!y9VbZJ(PBKw~l0NX&@4kdyjM{C6_my&dg0DOJ5
z?hW7#z}8qnhD5^>Q<S3o0wF>*`qea>DcM|RqViK<Taj{{C`h~w5u_tXGfVlJIa7RX
zh)INDu1BiWH?Q>6<caeBJj+t$F*Aa)bCjZ3ZzsXO&k90Q;R8htsps!AG<4P?udD;b
z+nNr4R?B7!l!Nq_NV6g)(qhKPg`bNi7k|+!&m;%$O239e5XP{;1&{n1i6lvwv=Z(|
zG4n*wtghVl#Oj00v*YPrD1xXY#Nm0FEchu!j_#RGE1%$WB@`vmRsSWhi+HGwdoW9=
z^mrcjenz`T0i+g(AMLk-<8`$lfPAi%=bFCgPeyfI+olO9*;k4D3z^Z1$R+qwUQs5S
zMziyY%%?Rw%zTW_y9c`YT*h#wtY3p;t_%Ojr(d6x`za=LGJc8a_Jak;q^Dwj2$Y*3
zP05~P>cp5qjHa59m4%xpqC%Wi0B8OMVSh@jC>s({SCM3kdM|)Jk7)(de7T-TFn`}w
zSeV>4ZWdb*B?)$TZ<RB0deeyBw#@*&#|qx=6B%7b=I7@eGxBbc>nq(kAJOcFN02Xc
zvBN-jhDv((<1CUw79r`qUqsw1^{akDQ~*ah>(VldiRUP#h+S#MHzDg^UXk(5?p7l8
z1x+6JC_(Dh>~6VFM&{iE)?nQ8gc}~+HNd9pICi%5QyK+-{LyRLS3dI|Y<Z9rVA&@{
zsHywy`azOp8V3Dy1L<XW@V*wJO6-A6uP{ze2;O5*QR}U<o$pMqV}pdPxpUjCl=+@Z
zTW+12y3!GisG|cgrVK1RrnngePv)_ODA9?An0~|vOq1M`=*p_5Meis~vJs^DbWM7G
z#IX89<av5<YCg}_%&PVC<GUyWPAf~up)Dd(*3*6bs9S3a4mA3oe%Eh0#$})2?k@&{
z*oS=h!)B2gLSmC%emR&!L3y}hGJ=a&CIU+i5q*%_1y*$>kU;7?=zod1S|Z}M9slPT
zyy8@iq7+0QaRbr)G2Us}IbFC8VmKvLc65bE1CmNtWaBY;r-}p-w2X?pMA)s2^94DM
z6rB(%V~Q@^s^5ZBw34sjU@>PS_tBBjX`NtmsAnpk9Mfw~_<Qfir|OD&-*v?Urpf?)
z#IRNx{G2EJE#)+&6r3emnRylG7A@MefpoVMLB*j`mB%1OakQ8N;Ek4q@S?0M2%9Gp
zP!&9h;z)N*@&Cq;9$b@}jR_th`e~Xp)a-!#PV&H*gcKv$(DSVO2cc+b54y)#^4=cf
z-gIP-D&$<34JIj{a0hnVyYiR5mLnCqc=Br|a@4YelhYI6Ld(7qQ(??&-J}w3RW0^S
zZqELXrD&ovkiug<jwZ1|Ba*LtKY!Oy4@GmNVIT`~FyLJCTI%a7tB8S#rtFOWFae>A
zJqUD4N6O3~kl0b!6q4DaDkPRfI&bvil87dH@4rqrf?DRWkQLA4ngziiD6IV1l_H)a
zk#3F#z{cw1ad0qpW(R!!RAykvv{v!oDs;yS&RmHEj$qN`^h%CbcIw~)lzz-To!ERo
z<NqEsc9H97`q9ou)+^-khNb5+61_O(xW<4wE`y@lXImh)R*8@x>I0t{o~<{ZxKHkP
z!lbtc{*GTpvZMfVEPM2-bD?m}el0I-?430oudb+;YvT3{3?Z`D^2vOQ#B@lLmbqxY
z!ruh+Qa9~O3KF|H?F;J9E^Ps%-Mzb1_o6xqWg$F6oYZv!`#k!G%6pG{`D;G(>;QkD
z%oKEiPrVwyN%K-DBpiA-SOQV?Ji$g~05kTb=+`)l81g@#(oEjq6Kg1Gdd7*GFjQED
zm1g9JT3J=Z02KFepw}+b>CjKSi@&n0kn2~j@-CRvN$$z*>3+`9Mf>1U8D;~tj(wvV
z7?n;BOIblby8`L8b0!K2xsuK^ty`RH*@n0eZ0D@_n>tXWFX!S%q$J{TZlk>`Dca>0
zWc4w#y+=QVKeGg5`EyZhi#Z~Lw}{gJ<DIBe34!KwJH^#MSV^-=m;*v)au^$NK)~Wj
z$KcfFx}nD|n~0E(ILzWeNdZaAsni?>(UIJ0LfkY~G%vn$L}!Gwd|~<y^{J8V`zoy;
z({RsJa*8uPD0e+Kj-VJ{#uGi5kJN<VPXGdNcWU-zAU9017L<Y-n_aw3QJ>|`y?5V)
z@)+;QTr9U%Wmd-iem9~_U4%a0guchjN|8e<#fxzJlg`TA-bii_l2IScEiB+mzz3F=
zeWT)Y(ETb1E-Vhv22o^5%0_<ajnjOF$RpGwP&ABP2m-LWe3IWmg!fl`Y6}j)FEFB6
z5te>^;M^^h2E~9tFFal<6~EP4z}9>`xwD;#@l1#wVh7Z)?An@zhI3%I!U;Z8>E4}k
zcLri!+A_@QFJ}iyUZ`@t?s$o3D#!RT0LXmWHgmrzxiuXqXrU%%FIj1Q>4d$hP`Fva
zJ|DN|%roN6(`aTd<d%Q~AR2(xgHKhq+r4<&s(P7)iGL7_LgObWl0}H#t_nGm>Vkeg
z`d4cD?2PG9#>a*iWBvee!$F-8T?5-PTcS1IWDt5gTt`X3k7_2mZw0WxZb6H>I{6pI
zQVNUU)s`3Hx!-hicT-oL4bM7H%)efV369a?WzcDbwI%okUC0lL>T7O%ZA{W?ea!tR
zlFNc1UU(roVTq;2yFgHrW7?%@-=@ewFr<i&cTMvm?o9a=Bt!CnBjx7fGu6_PMkE??
z5Zt>KBcE3c1^97pO69f3%2bt-*Te9{jXevV`>3t2Noq8Xhw%cAAd;(eUz^)#w5(AU
z0sVxvVEnpP8;lmisHand&#cq}hG8Yx!I#-dFN=-CL$?hUl589|lo;xR%LVx0Y~#zh
z$^s{{^-e<GBFScjMcuGN4VavYJ=bRS02Rg2Hu^=4ZTS5BpnA`X*cJ?iAgeDh!FZ24
z(xG)KHQB^!$5`m$WKcjfZk~tq!d}2}ER<*t#CG>inpY+@oCy*R*?~KOy4<P8+#QBA
zS=ty)XyL$nuEP9kf4O*;UM^u*g~}AR9qhT9;3C^Obio+^CQ*I|iITMfEuxCS(h!7d
zoPgen?)H|Bw~TbAB0C^BL}BUOnxyC%*K$A!{=QDWz7Q_c7$dYf>RQdCctq(0De@%d
zKKqI<HYGG>dS8O*<<`n1vl3CPH=0V2gT(DC6f8co^k->WTHdv=gHo7mR(VkmYi_F%
z_8V)r?`J)qhof$GKoBo!MYdA~USRcbei1uwrFDu0YWB~oHzieX?z(yS?i@!#6TLXk
zBN1SN1QEq|@5NO%x(#lFBXCP#{Ln3;4a{zSyz(PO0*%|v31rIj7H`I2tm-;)-FP%r
z@1{2^V9&P;zCsYC`Obh!nA7UU`IKy~4_LUEil-EsxYzLkI>FmBKf<##O)Q406gJsy
zndD0XLO!$^r+YLI$9r%8S7$GSGTSfcrAJs-^y>>=kZS^ZtNJ^szJb=XtC2pr-MLaA
zgN~bp-!I98pZemoqX&GBHz;@WLc`DFlOdgSOWDAm=3uBmlY>_{u>?@ePasT&N1UIh
zkz@26kj6`2lh9lXTreAN?K4S!)bQ9$doX)YbVhTT#v{A29MjC1@20WM^N3)3?LZ&p
zKR3*p=fw+Fxc2LH^yZlu+T|C81{{}@6|%&WI7IiqnD~6*4WM9_{oGJ_3|moMi>BHJ
zp^!<GMsKPGd~-n#Q(FlF_Wj9{B=lg=v8D%;3ejj+F^>!nH9D~)X-^evx6sP;dab^)
zMBDq*d5pXTGL=+9vsZxH*?DREjTyzHp4j6XjuQ?ef<z_WuY7KVnBv4P4tWjXFNVNl
z;>be8(4f$;p^I=JKnNkZ0;>rA;-@L8wosUEgcazBhaM?G67wx}^Z1M9q?>EbqCyaI
z_9E)mcOVmkyP}=(gkhbD-wSw-&(sJ1b#Pgf*wUcgRfNg9LWx0uI6VZS&p@N6*1eB)
zl*6G=h?UiL3KPTP5|08Nu&Rn=U0dN2m}poSjp*S!Q_`A@Aioee6rc4Ay_`moltbe8
zd;+{R+$HyQGw@LR)t6%gxK-J*ih5)AXxmJ>hqRN@_E2Q}8^`wXmj!KckS*ai@}|+%
zkB1ty((ZI`XTccD;pjzelH4)2Mq#X55y2T*AKi~t@Jz7COk}!mZ!+I0$~E+Wu+Glp
zy%73>T61JC@-Ta#7j4HDP&s(C;%8={|1a)Ya`oFyI$m9aB*W>|THs}5;nCD+lUT}o
zZ7t){brtEn9Bv>EwkiPzH5xLDBwq0pNQVAw5oo(1kmKZnz^?6KdlIvEX#PZd9J0mE
z5y?FYREtTuYoMr8z{yEsGXt+fX_(Y%g-}W3`m0&H&Qrm~P9~TUuF<$GL*w38xeOx_
zdsF7Z7ji6cBM(5fKBQw(Ha%(<290F%4|_G}raOaXyo5`Ji;RR+-8KbY4?!MLXC;*R
z>pf1t?g`ijOf_I*pDj<E=Na0|rXdUAgJQVWFxkb;iq;B0v_C{S!5CIo&A4FF2Vcn4
zr{KmH`JwJtMkajLoFiq`F{GQJZPfF+_yQc`r=;b7S2v7#eC@4GJg-sqq3EZRZtbsy
zy`Rne@O8!D26S^kyU(g<MB?`q#TTa}t6-spkTaE{D5@#2a6S^o8c!%QiJ^Oz9h>R}
zh=d_sFPp&`uX@|+)H2zJ8&w3+piguJ+U~cx<D6;A3kL9^0M=X-Uro3Br~1aq3mVhs
z$76>3*5V1pvG^O_ZwC!6Pa{1AF0*fdnC4S5asF+K+#y&Fmh8z@L0R-TF~0Kc(A`Cc
zPdo>Y4MK^20v%wG#sT{#B`d@E=?XNCoy=JYYM%+3o>DMQ9zCZ~mjWh%?VQhJlkg$o
zsr~@8HMDCE?5)fm7AXj4N2rqfrqenqb?!C<l3g$Wxi$_u>VO{)RKK$SWX(2<7V<3i
zvx_|fjSAYTnBE)$mo?K`yj%h`Y_0dxF>gt|w+`6F*|)9_^v7%og}&_R*F3|>eR<=c
zASIdvw!%JYF$tW3=ee_BGOY0Ra+N2qE#EH_d*Zsx>GwsP--nkW;c3Ft*w!fcDkC=<
z2t)1gC<s?uad?HIQ8$ydZQ?#B?65aUvrVK6so1_~NMFcVT7MX0=FB~(6o{>|S-XOY
z<Hw@~6w+6v+N|lPRnngd=uuv<_6*llGv7Q6@n6c8<r?_p>mq;l0@S5+yRma=>KbcS
z@|oGTt1pMvJTbFY+pk@)Cx!OFAw-j!wAkm};JBp3%bs+;j6NLnp(P!1FuS4*jG73p
zMEvxhMPofik7?DAJ;<!33tjXD+V}?nnna)1xlzN?`Sf;g<OW(JE9_YU35F4_pi9@;
z<T@KL&e}(<14UJ;DQ5QA{=OD@1}atq2M>;5V!`naT(sn=Y{8{ng%~(!RE5wXjgT&Y
zL6$?blLx$67lsvKWYT5aDjbHXmjR-fz&qfOe)w%)TKVcT-Z`=Qge8=;TE|N_;Q1uw
zsoXFs-5LTt$%Kwm$SIa~9(wy)iWrr+?s1t7;W~R%S~Lt?Xvzg8owQg+0W&F>P())y
znk)+Wh)toz=g%Ga{9n$X0M^Q8QG9lT?2OBs?&2JG&f^uq(3Te%s=a8&lw)vv6fwFt
znVfpt#8AaHq)tkqy%kto;mMhz@N=yH@#!zfTt@^cN(55tuDI!mP7oR*Kt0P_Ev6md
zZ0U?gbs>X$2d+|KE1ud!2JOaR1z%h5byfCG)W{F0>`=aw1FO8fz!T4GJJ!;Y@o4bX
zSVdw6-rbe91@f@4UUZ*ZJB)w)kKBe8+dZ0i81MeD3?ASyt9D7UT@^)F|9v&J+hgo6
zG~*3EFN>i$q*t=)C!)~*MoC1rSM#W|y8rV_IO-%`MwQVX?N$uvP$6`=htNyl8g?!g
z*O9`2Y**^;7;{#ahc>Go|6dPYCIbleto$N(5&n69ucElB4w1@xe+((5q@<rXvs9-*
zM^56dQqU9pA2bJq8P=UA2#d|(x_@LERi0mUc4(>Hzsyv_&g44s<sG{II|OB~dwHv_
zNO(V3j0Qm(eMr>f=C@#r&{AU{&Pni9GU~}mLXBE#(SYt!MxfJ?kW}an?PwTVx$$SF
z3gh8d61wp`w$2gkO#(5CF?p>DMOM$_!BEMqk_vjLjw?Ugu)}&0R}}hY5`0UwzvMg;
z6F}554MTc84QKA!dMIl5pPLf63mD`0Z-F|AS3ZSTDM8fB`Br>&kG&-6MR?t~XmAEl
zD4BoI$B$5~S4;~KY)k>AE#1u;VhtPS27Ci$Emj<W{MHyM(|<tbJEm%l5W77M{jml+
z@9fu*6<}Z)9a&^BEKI2nxx_Uc{5`%})?c!DV^Ha0R^(WWoZM$4Nv6ci>+@~BsD_XX
z8s<C%^T}hWt=>3<Z-kvQrY&N(*6e&Pl4Br?MySi1b8yTgUoRUkxSUWnn#%d)pat&o
zATdwwaRkF}yYF)r=wd(0QjgGTS@<?1`y}^7bySWs(q^=FETWz17==H1;gGXCDlif$
zg?qGit_N1r6_T7em@m-YJj!httgcjs%m-a3Y-b+S9?s#R>f9BVB~zH2j@lru@RCe^
zYQfHYq(A_rCjaqOyJmEqN+Rk@yjBuJAs2xlyz0TiaqGEvo2dyiK&%W7QRJqNb&%$<
z0Ukv-2$NU;L-qy)4mNSd?t>!y@4La%0TBe4wByNkwP}@><~Mm!hZdFLGUB7IH3xmy
z!t(*Q^WSwfcN2M>L9Kq_<P~<UC!Fl!#}p?F4$);$?C0DQ<`tVcJYgdfTe+OV9ifBG
z%fGx341|BZUHSq}4~2|}pJazOov!Ncdr=9yMV3EsYRVjyN7)tEEcM00F|F72suWh>
zDTECAs9bsSPc-|^n5Qc-MoK`VX1&~rHM8xeL9F9G(oX|<%TBx>+{f!{!F&5WGoow0
zrW$2Oal^7cfpvjUxUs;!yMjTj>_a~_20Hfmc8YX3*Kz@#!Mpt{de~jw=eWnVmV{DS
zm%}>?EwJ~=If+K%TLb_-K*GPI#(b<CWZ-;^5!SxMA2K+$l-dddpoq9D9jF*fg^}nJ
zd;H6eXG4bH@`!(*kF;6}k*nGdPnoYHY^j>)zT2!^V6dkzQ`jjx^j|4L^~j#+7@gZ)
zj#kYP@d^YcSM@foAIjJjB5eJOYOEjQj#38zO(F0>jcgBve#g+UpOXNnjc;DA>+TL>
zuJBOWA~~g?DeGV1Xuv5@`d_u<eN+Rgr=tRSN_{Dv28G;U8{^94@<Y36?B73zdFohl
z_JniJDx;%-dFZOVr%1=+x7jpFk5(op5lYE54Z(eG5{6|?8>Y(OQj{xf`QGa4-gS$K
z_T{TH?h~o-h1Z)nMx}>5U~S~e_b=$Lr!5hbkoc6-HZ!VB9Wx|);90lM+}EzwSJhfe
zoS2{?^D>1|@<-Dcm{u$5Z8yT6eNb@bGcEeImuJQ)ZkOpTA=LsggZ6aLt=~Q~rjD!R
zh_`Ab5c{RedH<N6v%hkt<hWO^+W<~1A8xxfkVDSjO<#1b0_P*7VR(D+Fzlep^S}A_
zKp{_%K31WB{<yy+w~?Ae7miy+TcIjM!~}mIt6A^Z1doYCuZ;$^H?zWIbY~YiX;xyQ
zM2RAQ+qKbX;m%Adjlu&wSmp)v_EE8s%p1jR2XO>`U@>+2kmcfIGSAl846Q5w8!1WL
z_X-t?9d)1y!P@lhU#4I|!ig?`^&q595THO-qC8Nl-P;90-k+fCm6VkNf1z9|NZVjr
zZ5%jqgpA@Fsi8mxHc`qgp!rR~ZPr2S#sA;n$>^CfQpAK=xTA;4eHh7gTWhkZ@r>g^
zB%(?1#Ud%NsFA-F1&zr&ER`yUAp->84r->f#lROBRb4;L;J?+$%$+X1VB?(B;-pv1
zlbHgZHP93=`TJ6)aWDf*azZ9!0JwX;A$w4sRESWF*RiInUIp;cE-c05_;M+k2-)v*
zvACW0{mpfP_P1YL97)A?_J_GruK0Ib!h;mKww*67=0|eKCdbpW5|5IP@TLxR)d-=j
zEsyCJB|@1sbeo!%B)>9NjG5A}wElPsCiN(UT-=;S7-$MA1E2mkj(B6}C%UZ^2o>0K
zu>aJ54kUG+=rbK|v6C`Jg?IyV{VMx5|2dX0kfpXN)}7(h*oN~<S-o~Nmcx&tt>y$L
z7gcng>EH58$p=g9-g4ki1wFST`g4=llt@Fe2I?b@VcWS2*UH8ii54chAINhy9s87H
zHWe|ULaf5}6+^c2GC#@m&^j<mqCOS^@|_1m<V{@)nX1Sm2c{PEe*Y~ICTJgvl6ty{
zID0*M?-2&<j!ANzX*EB|G#|d|l@Vf&4I!6yD1=3bhPp}mu;O<#rc&!A*1)a2i)N3n
z)mfIThZ>lwna+cnR>Wb=H^Y~;@JJ*>dev7n(mYf8CELmH9-W*k%jRFX55m$Vh&5j}
zVtmU>60Zp`Q=+P$Fm5aBxW7jwR;X@_z55yL+BG-1+LTG9gspxZ0AFL6G3c>!h|N{k
zy<FoUGOrt(8v)Ptgjo8hwSM-eyouIRD6bqm4lXjX57**kRtixr)#rPS7=E#0-(UI?
zF;+JKWT?yzkDKDUb{bS=E6>Sn$caVn1$n7)m<BQcp}g3nFV3bPHMK&<j4C~TMFi3U
zwB!EW?%`JIHfmf+ld7F$cIZFm3$p-JKrtKxk(TCooCQ`(`-;kWJzV!^Fi^qiJS8-2
zR&<KT;-YSU{`RL2fElk9W6iOm-lo?UE<mc9c2g+Ba!-O6dr%-%|B;I@STX<sTE>pb
zxqmkoPQZ{tsAL_PjliC5L<~{FYE3ELeLdE!uWd(;>K=W3^Sb$6MTXHiu`{?o9`-m7
z<w<{(bhKppgxs{0Z~gPY?jpVlXsvL!5Trl!s8a1B>tkX54299Tu>s#bEpj4I;iy1?
z5)o|BPuFzPTyi8zisfFlGwgKA7HYfmo;iqA&s+_S<g>C<=+O=*kqaly3-5~LZue2_
zds@+`{o#to79{a3e$y?iD7cAghH)oDjaeE0WKY9+zv2De;S7)|O5702)9>z?<SSO$
zS20b(x8EK=us(q{&fUb+k6-gnEFo!aT}Z;jCBUlF;`{f6y)KXy&`{Cw=sp>m5B5j(
zm&oy03@7f)FPWkl^|!7tZOX*2ChOy|?|I4F4WQ#m&-o@S<v1P0ifT@dr+Eiqze{wB
zmZN@2{m4WWhhgsMSU_%A(Mtctt8^`Z@>8g;H7_2vPvB61iPs8^GiaCmpLlM>I{XTR
z9f7tH(r$8*@^h+L$FcAG{&&wI+4g%X5Vm&2+}1`XF_kbD?~!ges=rr~yzKK{FDYE^
zsKxpN?7b8^3}-F@znfT??j6ae+NHeMF)WjP>w!FdZdkc!0b@dX0ZjdreT-!90IF!G
zv?eCG;=t(1qUZ}nIE;2vp`uvERu>$@&*hZ>bs(ST^UYg^jCjq6tO{F+X1Qj*_jEng
zOSUAGt+Ri@z-5AN?P$-^WdLY{ZxW_ghH}PeWrw!MqX}<L;s2;{5)^xVR6+l)WC}rh
zWoBbmoW}8Zj}kkbNVbtgTy9fvVg`JkN%J?=JTZd<@B2=l9l5Yi3Yqt`6ML>!h=|4=
z+_SOXNryX0kzocBi_yk2xS~bwegyM1>vn0@2-^b@D(_ngO;t?U6JLmFh_)3}-U7~N
ze|ht4HXGXV_(P7QPmr=cJLf()=?=H%va%g0Q@@NdHe*tGdV)zeA11AR_jEDe&Pd}Q
z$yQr(xjHk(#>hyr*;o%$7^+CF<P7NVBRON=5v-bdA~#>QUw9#-u779|k-Y=A^(amG
zw#91qf{DchBSDGe;|>+uBT>Z;tIWT7^y+Gho6}I>s|B@_8)t7pT5fRvNYyA}9psKS
zOf|Zq2h6rWb$k~2H)nn*iPBX1>v*MRQ((@s;SM%x_w{zrZ$cedgtP(pnL{A}<beIk
zjfLOvYI}C!ohsa6dc8iH+RlnM&O@))U!vtrf3J5hGXM19-4v_t2^BVhs%V4?(wejG
zLP|v)Dt8zkJ7ppT|83{SUU6oLbNo|@obUO3Z>MU7tEv&KZWh4RNE6tmEk*qTLn{Ro
zk8mehJenOF?KYj~@K!RArHP$9ZB*o0*qq#IS%+y2r9hGfKy;~H+E2)X1#tzw6}+%$
zGjG7$iQdt5^YfQ!XE*(n*k*iGXZt#+K5&%wkwQ8hEt9?}QPdqUS~m!oY1IP))r<?~
z{!k;MpCnSOWn!g(FgC~;5Y53H9lbqLi}@M%4M9l`e+)gx-Tl%Q;@s*Sqr5}8bCukI
z6?y57<kHX1wY!iF9eUi2*Ei92{2W2y;y7_>5W20gCXSZyGu(|Iz}kVm!mUCM+pa9L
zP_9^b-**Vt&BPAfA&7<@p^14W#l$XXc!5j033zm?rn?BZGI9@LxP_tUAh;x+9;lTe
z**M*sQV0&<RCgdMqothfk|IKk7BR1OmTEeTwAfA(xZ&uSO4cP2O**R*BUQ9t_yCv5
zW3qE8$Jw8eF>pcUg-SG9Xd;lBFwsz?3WpU2^-8hD>jWh=Jfht&JT*pA&b)yS2?(*w
z$&C{tM7&!qu^80BxJF;UR1JS!?amj0-V?462KqY_Z{idUxX}=gXniX_Q3w(Go5)JR
zljqHQBxB;SWTnU!$mog7zP-ss)Zso~1^F2Nua-1ME&M;KN((IH%x6R0L(#YSUkCV8
z{Bv0v-Y1IAWm0Ywi?$z^N^x=}3t~I!N`z~ZPYPT8^F^W_dZan;E>B(8CZIQ7=_zoc
z5TyJOzfuP~Brjp5vE@~T>_4>y{u7X!0h->PxTp)U=`XW9R6Y0kN$xR&ipj@DfysHF
zoXr;lTH_a#jgHyDg8H-*@jC7D-Rnf&o@u(sdJI~NW=3Qu$(Mpgfj0usWv{P_zkXa1
zjdOREFphh-6j$-+__`)YPNjU>NDFum3Pk9Sh=a)>^Hh$3XUw8)Jow>J{$2}qTM!-c
z1LSk2=?<wd#SA#wPXig+^lqE<fuFh|Qp*t@RU_CbnvC;)ek#A8|FnfiGcaHV>VjWr
z=*kw)k2RVa6Uz3jigeA3E7iqm5gT^B{>Z9(7BTTC1LPZ-KCGk`;@qKtG~H^V;<cn)
z?Kgzs2R)MTp@#3)rzID*Kjnny4uN&pqfSLXrnfNNN&vxq(Zd)k>#Y?9b~piY`H*z<
zw<%=BPpQGdJ5Y0fUlmiB!~HvH*y{%s1-1!MW_jUIJP_%fFXg3q8>L>=%0EeH0}5k!
z$oU6yoN}YD6BXVP?p{UxdQIBv-zZN}$iGdNtkE3*ZShE>B1-*{CeAyroLNXNr6ES#
zgGtB-D=pmQRibk0Z6cMx)cacRj_0Qpx<fc!G-;hTUqKDHRis`<OWx->1az)glJb4r
zqZ@4MC$`O1M7X&=*z)Md1|uLDrLmc1m4A7XImoN#SSiO2jR1huuo*Gw>nS(23(S8r
zO_)}HoUP6$>=LTkOT9AnELPICF~y=^B*zwh2Db`meXrlY0Y!WSD+~0(D`h;hx5Yx%
zXlBHnOK*=6n4Cgm!btS3YD-5~cuR-n8;_V@rB7>QzN`{s=#srDtG7!nUgy}*mUett
z`$kioKgyLozD`jIt{83F=qOyE0tS)R8jQY=)4W4E3PHzW8p`!jqFr_h2-x#`e+P~I
zwRtk>AvA(-PZzw3$xLqi{prOGJrkc_f9mj31dtht_KQo2Dh$G)Y@dr^K6l=V0*r&#
zJUZLVG;)6w>_2!@qe~(C!55UvPI?D){zF#4#kn(vkH?k4GF794r-k|wdiQ$3?nhkh
zA4=n~`;<vkSo6(`0lJl7k-JnG=~W#Zzw3rGg@X?#&^qci=jo!->4rXMy^6Q)^u|0v
zQmMGi+QA5+ywCcY06)l!%N7K7!n!H_BdPF>IM<T8I_N9}LS*ciqi`l}7+b}*x?g?<
zcp>Dx*NUH3X{D2nr#_^5^e=i<Ql-(dTSm{D!2<<@RawQaakn|O-dYLR$Ze*j8{q1z
z!rJfmvr)>~EfZB@oVHTdx6MN@I96?haDdAyEi15;6>jV0cdRDwvGTxq+DLb344j$E
zudO8xD#-nqxb@FAvqs+F$VkR-E{T_fE>}!tH;lX#c9j2$sz7MWd!_)%T35JTVW34q
z<Y@k}BlO{+ZvX%y{Mj~OpCZn#KFt|m77mLd?bwd5&fk(B0qrh3P=8ON8Y@RPM<XEk
z%y}enFN|};F<5{Od?Q)PC%{tsVb24V{sk`xtHnd^lKIQx$~`wgY9dMoepm@E+H-yO
z#6|6|tKM+5I6XXJ-u=`~soM~}k>{1aoU4OJ1*`^w9bC=#Zioy31;m=gcxgo>^_TN_
zdOdkQ0Odfu3lw(~?D1hlE2b3@7SCkXu>9lZ7e@3HJSaC#(IdByM5qE;Ayw*2#vc-h
z)`dTAIC`F@ysu%jXnEqsg(&B_^dtCVe!ArzS!^Q!yyjxNnIRJ?t$6n;2_K(LDq}JO
z!d+h=pFG$>^oRmu_<&YRj@R71_(r~(J`m^^dZ7PLtZ1J~Q~QZPkbGYwkcU&;P-tX3
z3GWtcGA>z%NR!rp8IiKyEb4#BR?Ab93fyn0pkjLYA6fC4xK9W-Fjp>m6y3B$I#Op+
zrNp}Tx6i1~4w3*(EjyE3DN4&;_RRGRRfgGK?qTx`zj&O3z70k71R&4g@NJvEQoQhH
zyL#ZBkJLU=%-%A!QfEfeSCZRg06%SO1q*fl_1^zCZ#c(SyY%XOaUYE(&-r8LaQ<vv
ztaHy~V70!7!Q|aEI3)}PUc`Z+X=JD>?508jhZxx%HqnN9j=i-yv0c6}TNewoL$*QX
z4#{lNmW99PnJ_wIy_$7J#)WupZmLap)Ti&`jNwzO;v|aEKXGg$!lw=$%Psfa*5b2(
z6*NW?V0qkpEM14ZG?GPMf^--{_rQBha{^d@aYnGUP09jy5KKft(9S>(Lh}n}{(@!J
zTI{d-qygf5;Rfe0B;9rcG;@aBZ)0jrigvoKlxys1sWFuz5wx@a7zRJ0C9jSBNH}^j
zv*G2iKNL+IJ8Aq`PiPBihqsQ>ry5&97|rZt@3@`;@n}w2Pf|*~-a??+quyC$?!VS%
z;`P-LFh{dJe^$x5aB<ziB!u^a>E~_{#s9~-9sdK`Yi&z@aL;!-psHeZaxbb>>HLz)
z=7Rg_bllalB_P}n2_e8+Mo?o76eGkNDoZ%Q35&4AT~q&?ZLdnZE=_v_0ja|PUUq+Z
ziMVT~*`8=UOYl#oxI!gj{U7B@>@b{M))Ap0rxe0;lc`w2U+w}hCx~?HG(f2EJ-cVO
zr9Dl&oeG0&f=IoHUrRD-RkJ4E2nVpW%V$y_#8?Tjic1r)*4}onxU9Mp32BrIQ!?~8
zdK(#Vzz0e61if$>G%XV3_pf5%zl5AaP$yFSZITrMg#2sHH$U4>HuLXL3m!+Nz@*mj
z-!(vAwaOp>)OFei(7@oCjZZ8$oI85_YX;Ct!$ayIKZ5j_eqixJt}-)%J1BEf!yp{$
z5&3*vG_1?S=6F2x)!8+n<4cqSbtShT_epha6s;n0J9=_xP8){QszQZx*E;B~^Ob99
zj_PgDK2R5-ddp&}PkE3}6a*tknG?dGa#)<XqJphECby2?zB>5C*cR8Qq~^F{20y<-
zCxS5K5)aern0MD;F?_MMqhw$o4K7u8isn&;ZAVwZ4~GbmHI(}n)zD8Ztz)=a2OJTo
zTJSwxQ?geNor1o<OwBnO52(;MW#6B1AvFPU<8&h!40#3<kt~Rg)%GINn6qC(u)p*v
zpN&XOk91<qLxV-Dy@08ah&J(n2DSgLi0B9XHjux>!gMx*#awUbNsiX$kI7OAy2{)-
z+&#~KL-KhoRTQ#`x{r<Iw5?DutnteZlV@OPefnH>=Y3()t?`}fA8>E6tF6KZweg!t
zIcUDz(`OFYEJhe%MXrg3bTq7fbqbsX*kY{5+f{I|LJFgm=fL_G{eu;Sg)@_|0=cG^
zds<99d^JOyl?|aUE1&nYc8x@mIr+0geGCKRaa}f+%NdOC4)5v1BX%ya*~4Zf-Xg*q
zD6gone?vhm@Pa`E30KQK(5`C`1Qt%POekt1Fsk7C|Ct?j?YR~;k<2tUTwD0w@$Av9
zP!~goh}?!_fv#s*^>E+*v(U?0A@993+%r&*Y`LMJ_Dh9yNElSyWPEy%|F3S47{cXc
z&lY)kN3Aj5E|14TqUr;bvYxwtjV7N8KxYMd=)>Dz5*;bd!YZ8#n5vI!`>3GSg-I6s
z*Lp`4Lf}J+((2-TYF^8o_9T00)o&?|-H?9lZ{VY-&?g*hhmL=mZPk44hwMv~Jo_yU
za)F@DDQ0=yfaet0%dm|V8)1<)2V=P)E3-D_8$CM1YQhur$xytNfBLdt$S^)|zj>)R
z^R!7`cHLqv+u=cs?Nj~S517Zz*=$omrjlMd3GX8V3j269yT<!{t}=x&)nz^c06gi&
zQxiO}=s0rj(GbM)9c(CH2z6bplO>wfYz9?pO~N=&)H8GLTo6V&fyGNFp@Ji@GA(_k
z+$#J$8#%DLRLy%EbQ(-9Mff@4GCWGYoM5jlcKFe(OMN|^{@#;|y<l_N;IqT4hK5d4
z)N!3WFz=6Fo|2uH+LCrf_qZ+tn}Z76f}PS?OZhK2nB(+fPEkJ4x2z&4;)OqFBxoWN
z7}98fPr?5F26`BQTzPI3Tv<LKBsRd9_|^unKXEM}IxEjN6r`ncLFHi92C>&F9F67l
z%kHl1Q2=LfM&cD_Na$66(6GaSdT+jmSs9~3Druhj?^Y9qRAB|Tprg*0G7wt~Z_~y<
zhjanLHma4X_-g{gsmKVFwDVh0bqp&BKA*m^l=S7D=RO8OS6i+q*lyL~PuV|IfBO~1
zWKTu@@ZRV#1PHfcbujO9Ko2V`I%a1gSTt!lIQtXKksk~3P7+gh_<TR4g^LROAvG1W
z@Jr;rXyRuOtdIXXgseppvf>2~CDaYg=!}F=Iln}fO3h)OC(t~)(p*IJI)ChPL{qz{
zKG6~H<osqhp%DX@kkN0{3~^;-jTxxBYqE!j=PTJV^R!t+&G+Fh8rdk~DBQQ}Qzm-v
z&;CdAZkp4ha>BoFuaCuP)pSJQ(II76HhpxFy<JLy<UkR^wb{(-DprDPhZJbQ-yw=G
zt1>W-+TI$DnDBfH&BuscPp{hk@yBG_Y+qUfi|KWfe`tOKPTZqNWP={SZ|=CJ{^y;#
zr7maI`Q*<>%(Xi!`uM<qQmJF&b>H&2CYPkw=Et!)0VN_D4oSWhlJn@H=Sf(K91!xp
zNZ0cH7v2*2e5Z&91ai=`jg7x_yRUs7m7hPeEc#>M&(Eo80IWT}=~up!x0_L5nAW6s
zDU={GTEIL7DWwvstiiNL!3)zX)d6ftcNU(kfc4Ijsw(xHvoCSmb9jtIhIh!$N<Ox{
zsgAS*M)z1%i_9t`487u#&nN=rW3>Tg$6!@~{)nS1QcS+wetg+$yaQJJP`wXXU#bO-
z{W~)0+raxb5FZHrqW<jTLP_cPp?P1V;7sgTav0m|AFidE?O7Q?^k>L}E^cUkJ<BZk
zL5(OTzA<~Q=(E5HJCeLT%{|MX5|w&6iE)vKUi^#!TJCzC>YK$AzxTyr5m1rj@vuP;
z6dA<KhwZWhyqi#>5Q(2`$IOD*Az8B5+`TkPR4U~5#b~NCWeFdl^u_rRrg(6w&UA%2
zRE4V3Gx$qhKWWTS!<ob7AuDmqaiKmQS2y7WClE++0NMiDi;$XOV!%06S3qZmX@y*W
zjOVY~YVvdvLjbr5GKc%!fCd=CC~%_A5WIY47=u$60S~d{lE(61W{YQ<19vJ`?kLdw
zu4?)T9ds%y6Ro((biy-K5Qc%;Q51Tr7gymb29&&a((x1&-4aj5rs5NpzfYOJYo9*>
zayVj9j3To!Ye|OZs8bUY0+y@;3&sM<EL?O$*+;>MDL&uWQ^H)vIzkNsWJ&I~^zoAO
zmVbn^cMP-a8DJ;DKv2S1-sJ>-DXf;frAMzcmzNlYG^1VQ0R87q)jzzLP5Dg>XV4fN
z%9=np)@<#E+X7j>*F&W2rrPw$SF-Dw`AXKn*$70>PXa2L!eZ<AV?b<6>LV(Hi{Ujo
z?4~dmC-n7RXUoDjAQ}cb*<uiLWiPGfvulVT#hZuX5eo$~D*N)ug4dNCUz*`???eI(
zlg~5mxkMXTl1-$X#?{dMB&MYop=vL;oa*=&u%wCLhns>?ZK62?G^>3q$*~z)VBwgR
zk(LQWBA*ykx9em~?3M?uy$F+`FvWLPV2KN;gVriA%jedZ*4>gdb_it(O8Qx5=$`(w
zyiU^jCmCWSKLASk8hNDz@T&$*3ZW?N_~19ytIMM7=qZG$-d9B6J46SsGHPIM>-%$1
zqdS+fZip?SH{v(?>g%pVKFBW|Q`Ji?#6=(AI$)COtD-<e^l608=QXW4SN!BFnxulx
zoX{$6hbg!qvsS<1t#_nuXEp*mh!^sOJ;SSX#d)I?J17I6r4r<;_<qkdltwFhUuul|
zba`uL(=}_8!Qp$cwq<GXGQSKRS<hc2>Ow~>SlC{@0A-IfG4y&qE3>L~b#z4iFF>ni
z4MON4jQ`UJ#z?^`XvQ>V5@UqHzyB0u`|r6MqMy;GSo3;@4u?(}ZNrH49LP+(M#kJh
zkB4wf=^m+j(WXs8wYX=+m6am)#v>s4n3>=rCn;)vyg_|s)3%hy)Ei}mx6FZAkgadi
z=GtRpV!y-cRYjqZ`H4KBE>UK!D`th|ns%%43mDWvlCqR5sr<{C^t~CdFBheIJ#<(@
zO-c<?77<vyvrgNI2WlLEQSrMhd9l>bSNRp@qCVj3V;owpx3a2EcO^8P5@r*zYhJt=
z;Ch|fu;~<c&WJ-<j5RzC98egjWUUX#sqAB&0FPsh5_xJ7(;%<aYkB*9v_2p(Dkm+_
zrMU62ZdW~O%U+4T2sQniJz$z3dlHx4{-kQb#h21L@D8awrAilEKaNq4K}q^6{*V^8
z6xwAH;78>*aZ)<n@kvdCL+fm~hm-b>k|`ry$Z;51p^u3G2IN~wvoYPdQtJmLl;H~;
zJ6bopm+Z#>IIo;M$Q!pEuPry0Ib@~L)Tuuf7aX$A7cKxEJDqSmBC1CmZbSRPJXhZp
zbmh9qOgXT!=<;r5jAw~4m)1sbD56r5fu(2+kvb?+MnoM`{zfkaYnNls#}i_=JcM~+
zaG<jJQXw~F<JtE>6d0zv(@P#RYjNLL&oCR@-U20X_@U}rxrE4X3B!pORVMY;t$NII
zDrJ(`QTbQh<%G8z?8nYEx#Erbs@b<ynX<K*XPM>9Or9ExZJ1wPdQ)><jpMQ@K|Gq0
z3Y2rgFZe)^-+D?_fj&bYJ}g3_5|ra1ea#zd2wE@{?VbIsBge^_io~kyjVp@`2;Ua|
zH+c{>Z9U<)Y-iKeF#jLaek3QpI84_*`%B&RgLhZ;hQ7r_o!L>ZgBO}ckLdy&GfMJc
zUo-k~amj9p9B}T8l8#F8&1Mt9gdTFB?*t>op6ZXFpjp|&$hvv&UF|m^TaA^?mze$H
z`^h7=qTJOvwku&5l3YDgC8M|pmjPJI4A23Ui_^T`G!fOXyXg%&0^2Py9!@eH?c1VO
z=o>AVOC2_^`vy0OOO=z~fUFn4`ZLTqy{P>B_5gcqy^zttUA(I}rb3PnFAh<|Cl6_&
z#AT@u8=TWpz(Cvv!@AP_e$+UOvhmFQ{ZdmX0SjJ5%DkqjRl4duD>uYVoXZ&FTf<)l
zq;6(2c(%36p#!KK#nGLpP?R8uUEv3-xSdkB(5I{Kab^tO(KoZWPO!fl+hDYsU&4Q%
z#xAub-TQA*H!En$u8n$=Jd|qDun^$0z;5Ubv8l4Y8h4z2oTULicz6r9x8(jvEDZ?D
zvb2T-rjqm}D|TMcbK7hedR+h#d88VzBn;6RxB71nG(LHM*`h-)KrOi@g~SAt=Yg43
zYXb$|-W+YT(X9E>$f%t~+_zBmOlE$lBdF_y^YllQ|0h5&CIQxuva_t!Ug!BQ6v2-(
z(C5nt`&UVP2ifV^kTQ0{crX{f$R>}~06DXeo(3g<-GbZ`<Anu0F%Nr99+tG}$f(BI
z7LX`>u3+Ib(=Nl>L}d!fJ<3=n45}q~ASPaSig({UdWFEDR)u!+ZxW7pvj=gS*xrQJ
z;O$iV6m~j7O%VV{HjpcHDHDoi4$_Kp+{vV0J1bhc(E_0|1c<yJ#KRL^Vr^}s=ecRz
zcDd<$sb|*EwIH`OzZMC2hXi$;W&X#y-0D+WzCq7*c;YQb$yZ>7UWR?QuWcX4v=?gZ
z38!Sh_5Kiex2xI3ce9h#ErY}}F<*J-n^dX4LQ~9+*z<xojhpS>@3Pis+c&pw;Jc`S
zAzDczI+~r#ZUcA+L&ys2CS6PbGo(O{T1f<`BB^`W9%F8hS_GEt-?Sf*BX%m6QPOP?
z-ULZ*I*Qi&pw>&zXTgjDX;;%+rSfB`9wv6JE~a~)nowE~CcSPgK)yF7dp)3Pj@ypk
zA@kLuq(`>;rK?BtPyM0!sOXB}Rt<UT1X<{~_<Zk3qFmM9Gh*ksLBas;w1TX3u)e4A
z_oi_H$`*FBC48!K`mT%QPn*jL%J&o9DhW^}6>Py2Iq#Ln4<(R1T^0KpY@A|Rc<Kue
z^Jz17dQn&t<_7zz%(!i|zr+I@RR4sP&PK92Rt>jEd2O}v=d}}7h|seqFpon%_@@r@
zK&4eHd}shddIPq8dg5R&pB5dQpB0w*n2}N7dP`K@Fe9O@hcMA36RQ<r-OSd$suRPH
zlK%J@Eht%OGKrh)=UHqb3c)rW*#J82^I=o=l2Apos2Pm|E>B-M4_qKS;m%R@gSM*k
z8dzv9=6tSJw?oD73re-RijdB``=;Xc>0cg;a6(*m=;5uxRz4{KKe&}8QHca^Y?yqN
zMGz!=oSGHqgZ|Mb$Qcv;4`?;FO7wW9MV{=Z-!#sUA^FLMi?37a#%pe9vv0DLn$yH&
zq$hw$iN~tu=DsD?ol!eDWMIDouXjk$b?ookxZRM!ap!#!8VS$g5tu$ZlN~8h&{d?8
zE5SCu4#t*)q(!jT$R1O?gc}Zizk>Z{u<+fx1*eq#ne_O6t0n#uaCYafC0rlN?5l$(
z-z=JDq9cQk)?TDIj`R@vP5HtSC5*?=`1%cu-3)<RqymXKsL7Jj{+=o4@#9ehpmhfz
zCm2aQHlCcb#552Z>uPtK-KT^E#1gg+vB-#j_*T1#B0_*}A9YGI26#t7+T>r%*>&+z
z`B(GoHJ879pl+NQK}s)7j#ZB@>=~}bKZ4FJLb#2B&sN$oC5LO06XMo0#8H{|m)!D2
zYjLX=wkpB78dp$YMBM5Hh6SZ@Kq~Tru|s(FdC~k%)X+PovBG@1CtRcUR~it`@6qiZ
za}r=7|M%R|I=zqgE4VEq`rEo-l9M>VMl_UpT%v?y+=csmf7`JJ1LFmE>uR@XvAXRq
z9y5#<=$g|o;5nW2On2x|sxYj|OODFWrP;Gy{~Hh{jxoc8`5SZLii%4fB@WkIg>DdS
ziN*A8L9;VU&m2`NArA=MH*!;nZ4t8rPCqb9w8mY@y*D`Xik^gK30$6c3b8QPKcrji
zogSs>?uBV;m?fa#6(R9&4Rw#FaS~_};UAL}js9;%;T(kwHjQ`G2A6~;bZ4p3={guU
z)&BEojrS$;)neJ}{3G9Fy%kYlPh(xpi3-{-*)YSEqS9aIUmmhzY~zrwSKiNeiH5Xf
zhXY`b@kC}gqX7wQ&h5TU!%{%PPAo`&#WB}*OFG8_5pO7^w>7}X+zE#V8P)E{$!;Gu
zhBJ68kYQ5@;$9&uY_;I=@Nk*5PCzk?{V3BtXz;R|LK)A;m-?z;Vwj<6{1-!#LfB^l
z-)8|CqMHq0Jhn8O_0t5g0b9!G9Em$=BR1QV%W=UMNxnp!SzZ1Kk6Q-^21Y3}iw%MH
zW7&1?S&(vhmE4G(r#H<u7d7HpUL9;7KtY8~a!^9aqN=2LI0>vJqN%fi4M>mHqhENk
zq^%IQ9o;aX`}YnnM2=q3So=V0^#Y7I&74#JN2HPY%Q_#^%(#7MN-zgVzyrvCrjv6h
zt_-DdV?lra0m<5b(U%nVI)az-KXH)Nkp70yvZMwP>mGS=jQsZtt}RF%kf_B@ziLmx
zZi@GEdcA$9#cD&S{;P7)Mjyk0%v8=%EZu?)hZW%nJ@1jdQkYiGtk_hP4}&@FRp`I3
zV?5-uytj%jwF#JPdiAZcp_5id`P{~99WG`;rwWf7g2JFFB3;mmX2k~3JorfFR@gO_
z&9+7}c#Uqvfcz^W+`VuqWh_IK&_Xk<^I)oUs<;u4!N^mppgpC&#yO#k{+-4=XXo&6
zDJ}^t`<O^q-_qg5likkJb@6&{k8r;eI2%j5o1kkml^86RK)v?aH{sSV2xsEQI^;|W
zB0J7QfNw3B4n6n1Qds)7q8!|rUmYdS2|i!ZM$fs%kHGTYLzQ=T>Q5(>`1l`I>h;<j
zN!8|iF|jF5_K`g1sgw`nGm*PR<qzHi&Dv-mBqG%UT}Ue7&!G$iG(c(~-K8K$W}F=n
zz(<ngYthgoHY`|lz3(%2_uMPNt)vSYNBJLFNM>?qA#SnB-U&`Jkm}?1x<4L8l56H^
zeBE8R>sC81v^7I$fFYggB4`0*bXXv}QN{x%voft2ue}ea<VM#$!UNRw+Wr!W#+Aqj
z87|SEBB2Bvlcir^m`_pLew#0zd?w6tcYNd1h}VGK*1ca-<4yE`J^~bsE~}AMJ`oKC
zW;Rc|_(l~A<N57*X@{M4O-uT_M~49NN|Fv99D#QoH#ff0T17;B1y|3mk@edIM+vMv
zgW=c>K;owpW}#i1LHoRPoi{s<E#q$3qOzBlQRXP9xgIH1&yr<eEx16-8+g}BmY3)l
zPTr?Jv2eAa!B$U2OhqWo-o`*vrUZe9!;{DW088KPKOq9RPPPcWafX@2A9H%zdI5HK
zf6rFk=3e%dAI`*B^-<wQlY8lQAf$?vsMdN5p0WlAv!qIiI6Im*B~hy02Q-j&`)i`-
zXO}EIYGF&D%kwqyswXg9X=}kO2fjvu1Wn)tM~Bx%ISDr$U6%dMK@!s{EIg!5z*j%Z
zPsDFmbkLJ3IGyFP>3Y>>_fysbrS(>$Uj>HLC!UM`9`>6Tv*HN(Mrr7^j%EK%48v)7
zAoKF(o3&LTVu#qJ%IBz<^Y+7({~}eKfc%|~EiqcvYDU%(9gSei+7&oRb$|!{UAJNc
zUq`lSJ_6ohB_3?Rz!+@of$%+%A2N57cGjAQs|3BWdYPViL)cHixuE#fL!NGR<j^<E
z_;~InypLwzRA2GIT$sCQtdy}7CFuQxU;25~F|2Th0en!H0o{vst_!cGd*Vy_BECfo
zM$)?ymhIZXwxP}kyPHV^T59gFGCg*;-5hBp4stxr8x_ulLSuV`hj{IJBBFU|cKexS
z)Z`CMU5CpAx4M&!Pbm@R2;|YI!Aa;g_^q<n9SW5rc1~)x7m6i}ZVoWDfU7^0B3o&k
za~F6t&oEJh(iFd)xKU;i&BZU7kSQ5gAVIyLf#$L0d<j2f-#}!`B)``QxR0baA^Wzl
zn)pw1$Mm~GQ4RG;)#8)Nrw_6y1w-*Q!Lh%<o^S)gv&lht-REnNSbg-~l1`T*$P`Fa
zfRy`kaG{z|&X;E!pUPH-3qfLDKscacb+1h_{rPZ}fCB3t@{(X!BTm@AOp=c;<K0Rd
zY*W9XLsBee895*v%2SI^bFl&`19^4<j=A0H9MPh+tR)!=FGmzs0@7i_G5-`F%7LPr
z(F3x?m!Ym{v&qh0-gQ(;$d-D^D(fgftsHW9=2%)no>b*B_!~)9d6TD?L|0FSFmZ5p
zoqg^olu`%eH!NQVhv!ELrf0{KclWJp+-;uUq+k*Z$jS5+r8%#S;Xg#Lg=EnJm&45J
znExYa4Z7_@=WyTuO+yCDq&hP6`;5%|FU)`Rf6xPb5FIk?{gc9GA=elEI@S~XC|Q!8
zAF!2*rG*#qL@u>S=-=xD8*0K}aq&E=K9B#HFJ<)`o@oKBv2M^DU=VOj!LiBP1jX(#
zk?}rBwzA{n;6dcUve<gO#XWI9_?s8|L*yK5Ne6wm)fASpTbCu(KjbT&1K+nlWxi2)
zEjIiSC!9t-cYY4c6oO)(W)H)hN-<};a_Yvx;*fs~hIEee8n$pj_~SlMLs7!Dh#&cq
z5n}!`QgVJ38|=-82=gwI-@llN1HyU+GcPCSJNITG1zIdeAC>Kf-wM&m*JthnVh|OZ
zn9+!ufyUp}5lMT5JUXXQj*DsSxS?Zzdu$K=HL~cf`eyHJ-4lZ@nh|s~ZIzQeQ)<`2
zfEjw?gsS`m7=LGeULa}Ig@|E}MBGGg(7=w^TZCOpww;zBb&akL`RLVxF@4)K?3XNu
zhp|j^`ot-ZsE;Jof_45bOhRE;^i;WbE2zExlOlHfV(4+EorgB7TzD9qK>Y#LZ&wg_
z!{uH=^;I)_<)`4At_=BnC*<$u+a4*fz|rivWH1^oZBC4>^WHec;xOprPQt*SJJY}m
zCFap{cy)xczq8SPe--{?%vPym?9t(M>eSWdO!b&s1N8aFlBu)i3nsz_fAKgoZ)PBd
zTb5Eb);|eiM`vJb|IuR}`Ou#Ol!&=@)Bqnq8V#X}#X{r~hWo#F1Uw1$%SEQiDq_JU
zBZQx9=8y{7hLzItbHw6=OX$`Z^<*L&2dvBxPN|<61pySZ4J1C42a~s%Zla;Pi5Dwz
z0CQqOcwHQ@1YTQfM5=WVu6W;xxDupu9`H1$c7&qiy|-{KAbCYAB!hihs&avEseQ|L
zU%3OwV6%$2vh>%C&H+RnH~{1L;2d%x>W#|pr-Ur40n;z9WyQ|$Up>Gx{h0SG1|Cxq
z#K9<(S|g*4Z3F~^O@ziuhhAk^TXYbLBh~OE=R4~?y@P;@f6z5c?d|?PBiK|=wr(h*
zb)yyGncJq|j4QdCrwlv#2g(4ItB?#kL_}yKIE6aKF8Juj6m?5hVRKp|9SS~&-fZ>Y
zb?;C)6GMk1E5&PKUzV7_7wI`IsB2}KBh@B?7MfAr{y_ya^Y)1MrL<TbfVkj&I)Y;*
zZntYi1L?(m0pMexD!|1<11T@QSgxi3@GbBg5$|d=)qtZ(2*5G;Xkej4!krPXuGZN0
z);+;8%)g8*<cCYi<{0AiWYH3Lo7|f|Y+(E>$T8%+aesriGwpiOR|b4FmqZ&_X2hFw
zLU0uNKc#7XfX8d-3?;SToMPwllXWZ<LIcn^pGIl6USQip?Kb=VRBN8rh&9g=h9fp;
zJ!8ZgXL2<E_!UFf18d}1(s`hY*=$k1et#T_XeBI=)toEX;-AUVtaGThS#qVH{Vxvk
z2#6pg(sK+%hP46<Q0*$8GUC8@lF*zHln1-{q?}=C+5>aqeVa!&?{zTh_?;N~ejzb6
za!uD<xVf0`kHGg_`C@tjHHlfJ+-F@<P)fw}A}&5N*RYz$M^z$T|NDG;5rAn;RG~`R
z+Y<pYzeelth9G>+Q6Gza;il6gq^s-@1wLifra$)1EZYmVokB*3`8KYg)ug1jHn8X<
z;CqauXOly#GoMZ_5q`5TVk6s+1!sEVf^LkqIE}c<bcPT)?a$H4ADjhBQrX{~QcmA_
z0!Aa3_O7`co55K}Mshb2I5|gOW88{aFh};3ndA4;aI7;0JdLq#StQB6I-SR+Ovak3
zPbyoxKU9Nl<OhMXG!uv~%JF|-dOrG)Zc9A0r=wUD+Kv2~UFQ_v8}p`_X9f=7-gJ46
z#@G0m^tEDUkf=*$4>BPEyJPa3Sl9B}CaT;^sevD`W9!VP*}6QfkF{|1Inx1I4zk?Q
z73~A5v;vXAEnoF!mS0IR1VHA&Y(IIN`Km*5L#ai|G7>YS75nV$fa+q}lXBJ!6zo(k
zNt%ei!8eAE(V}f^fl8>huPW4DRo);{UGJxvBZL0?VJ6r0eIO*H6zVIqHOoZC2IK8V
z7BEXUtq;r$f%nT~m=Z)OlZJES#7RB>zD!Fe{I8SHS^}|}(}?2<1hzf!0oAHcR&2=E
z8ubYx7Zixw1PHHo=Z`K^$ih!)`I{462n|`M{r_t5?Tp{uqB!tIYBS{ncZ(j04ZIII
z0_c;9VgJIZ+<aPt^VS*6o*HS|@><VZFA@yC{~|&uvbIMw<y(;DiEtUXrmqbo`(snA
zG7La2i>Pt*3o8A2v6`U0g=BW+n=DjAGJymCw!Geu3KV<M0R|OWoE_jkIKlJ(OXVs(
zDDGAW=H48^EXH_n<#g7!;bhp$HI2<_uX}a4Vf1YPYu51hw$Sp{41=-w=y!#t^a9XO
znAwXs&L7@<j|E<X`Mr~lh_a<$^^uLAsDKb3eavOW+Pv9!k2PZ3jseZlF>2`F%$xV=
z8YM`gZGvdg7U>P(>2#=1fs<LfFlwBT7WqA@2f=0d2E+;xT(3EBm^J|7`hM0K#j#t^
zg&meYnb$d$gOc<RpML`GRk!DYb1a#O7qoR({5)>fe*C7_EwrM*fSX?&-f;(4%Hv&q
z$}MA)UekdtrjJzd`skv@xPt@a|H#Hx;K~rl+b&}(!36RHnmYJp`aGwlY!^y`k8^I}
z3%<nT$z@VYl%ssp(iZDs8zU8zB9P^_;?nAV(;%%y>Gk8dwG``h4i=?5qFu7F0^{wE
z2AZt98G+o|c^Gd17)B6K&+-K|^G?YcLH*ZxL?Db9Y&v~wvUla#2AFRm`#Wb&Nd4Y*
zQvWf+Ug={cXBq<|IRFzyi2$Gc8X^m#jV9toaHWbCEWS_UG&V`IFm<tLDi;$nO{KwX
z1Aw>Sd@hDvAC(7;AM2#V=KbC?gZ!4YiE{#$+T^8UI)o6327L7XWbU~V0eIg#5lXc|
zw@&T8S`7HV`1-Bz#zmM}FE|r4IvRQl$fTCqEo4K^d{E&eq$%=BF2<Cn9j*G9X-xld
z7?hqF0h^M>*pA+jRy9wuQgY;*PZ-<Zs~%-`r_O@1#GKh^74aR^QJ<V@dycu^Ib1^=
zv!}61Zi1uV_No9fd!#Ou`<#mlSuVx9Bt_2Y1mtKtd-bdi0zm7lK|9{M9!uzl7Hcma
zWLK(S@p~PESKzRhUMX&mAVowk%{%6fPdE8fiJ)mK<5*HpZD<hl5iee0!s;Sifri4y
z=XO#0MKdrjWNRHoywT<YVyJAER?n!XJ$R)FS>iGpsgC@HXZ{10w~jbrY^N<Ih;nS5
zI@@Ei!a*106yUCYkBdoY*(O#d>N-p{*etaUtieLZI;H9eac9W40_)xzuAnkmYF41l
z&?&QtkU@qjtWGwP8!suZ2lz5T!0o$lSc3&GLIF1+w3W_2&|1VY{<MqB58Vnn1u0c0
z?A$t|&bgqncd)NXm5`4mJImVH=ulKR!S6~p@<~Fj=<Tit6{tn-_-ae|N~*)4uZr(N
zcHAxIJM8^Kjwcj<L_*Pk6^!M-#X+YlGSuy?w-Qc9pF8z74v4r>eMJVb%*piua!DLy
zLI?^g$@SnT54uv|=;)-usVmRPZs@0xvMCCs=si6uY{a@R4QcwVEZ6xuM?8qF(@#a#
zqb5H1e+0};y6fJV&6=;%_LdQo7>n2ZmpFQ}MMBZcE}arsxSEl-2H2+q-I_<`T5yF`
zW`<=UzI`bVyS4&xBjphK5<=L9J|?73<dB8O+La;I6p61cKdD~|CLhPP`jS4qViDO3
ze5fsyQXv=D;e6EEvxDj1kKrKhwmCJjmpm<S-ZB#TUab@_-oQ?fi+j}hY)tve^5Hk+
zWYkHaU2udM)9J7m6b)kDU`l5w9way_9Itf70*6UTMo$8sX<mY{JFQy~?@dKTdPU)m
zC@<^K-}c%A57c$GLE_4xM8Uzj@(o42)AWhVewMqRD&o>%|C(pwlrg>a>JZT_twAx{
z&BPUTbNaDNe-vTtA%EmdWf(Tg`D0JT>2_?eT<VCU4YV}Ii=3JMz~z_%4D+ceFD~Zb
zXEO<Glqa+)Hq98iFlyv>HL|6sgW77XcDF=>w1ZjhZ0lTLLTU0Tz^ejj43)^dG3b#i
zaiaq<!68pE_+)}Ai&$9kfTy-KYlwJH)e_u8`7oT`kSC!Y_8^UIY+}rcn_17_vz|SD
zg1R^zs8#(ermkGj>u$JvB~*#|CCvF(OH`^IJG<1*)y#IowE;k~*B%U%1o2tj%(WcU
zRl&(ShF1PyNf1ml0L7%kEZK`%TukT-v)%wj;L`jirF@u$H>Oq@PYr;{gdX4?&D>Q5
zyND;}P*}ywkTBOXU2)$K3g?DO<*Q|sQ}y=a3^jAiE@ekg;g*Xn>LsKk8eoj$AEVG>
z5TYj-yTAWg0}43M-6q7h{Fe$~WsrhAxKySu7xC<f!;>Do#Lda(YABGK7Rih~1Gw1e
z>9b#B&)!qW<GbYWJbC#F;A&+QhwoZnzTdn-b2f{2_bJL^7>p+h|2Awzhrpd+g1JHE
zcB&k*#;&SBRUKOrG`GF{*cEQ8mb6iLi$;jGBB}G#m16@y_lZ`FJwbx;L!CfU^cgJQ
zD_w=v5OUzch@dLIU2YbEYj|;HbB-w(leg{O5n4UnW>R(+&l`OQ6pMNq+#vX^v?53?
z?Xxyu{Yab98`A#&s_Y^Lc$TG3*1?VurJ0-4aS|)gnNJh3@&J_G_&<amv?F2cQC{9d
zhZS7DUPkZ>LH<+qXH+gdoio|0M?KCi2Bs;&@69!Oyy6E$;A`gCQA)wap=mAjir2Hu
z3#;o_L0LGn=tyKXICDmTBJJ2C>Cq_rzxNeO%TpOLfb;ZzL@hJGnVAX6t<#OohpO8p
zIw0|PHHa6?)c>b!Q)UrlR2BM3rE%6-`SHW4-5Q7z>78(Pqc?fOkBKsgW}lm)H|dUt
zYILkYg>V_YmrO}h`T_g961><6(gJhK`*qiWCxrz-@c2-e*Jjri$O~r|q7#Z8g+H(h
z3j09hz!D@NQzt{=%U5<0g%=OqQRrT{$i<kNBiUKWoCV|2gmWrCrhw+*lFDRPmrW<I
z>61cddXlxOVPz)qjHCdLOv-A6Xxm}Re%Sd|zKI(HOW$QJ13#RU-Pd{pWAurL=>w2E
zCStm95t3DPllH2(2Kg(S_}Ny6Tsi!nFu65W832ts0JBFtsC{%HVcDV*O7FI!rOUVn
z2RHi3EVfqA?xEt!v}w(Dc|e`Kfk!|5F_#8w`*u@S!LpUX(SwW{?c+rdM)Bl6Sh}=B
zwvMR+;U`T&n@D(22l_O4YyYUlzg!9gf3OxR-XADz2}}$%Oiyp3d$P+HEwn5n-~$@*
zx>Vt8AI4oMa6i;@oZ9KoE|*g<B+UJ7Z6u2>LG*N^4N`qoKJfA2lKC_mAx1BP6|=|s
z&5omS67c0@KzzmSu%9UMJjyZ;7EQ}8{4wXnuQr7eG~eEMr&A?lHxEv<S-rPmO0baX
zM7`KUf;b{WRR-_%2IZ*lIUKK$jZrv8IDg=iplT8iL9qz&1mKw7K~z)d9D55%jxG)H
zKxR<4`fRr8uf~wMqa`2})a5BgM}D$Raa2ZN+Kh%GL{&mhDe)h?y{bb>0wOimA$|qS
zXWWbi2s%<=^4BAza^kBpryJmBeNe}_=CL&qR;3TtA!2}qB>REItPL!`mQMMy+a>5T
z%bAx{q%Z@9qzK0DuuXm@6K1S)9ucF}6$iKtM%gECgHmKLbcsQFz0CMP){~gtJGB*I
zIH~1ea`Cp4Y+%Epaq|Jm3Q{776Uub2JNg+tHW9@Po)P0c4bZmNR7aR&HV~BZ`x2kR
zwBO=nv}0Ial{g!v6Wg^gS){6q_u?xXjW$EXXFM2kMe1+WK7O%#iZ3n_?!4WjQyflW
zb7FM1Lpf5;cvi|~x`a&xL-dUtJX`X*j<(0fpoI`wKM~p;Bn$Lz#1GqeTg<T}VqyAh
z0jWf~L%lH4{}8z|U+-M`=b#rc4U2l4Q2ZBP0cpDN9W~8Z^MPoE>=TBXKYfu6Sg(ob
zYJ!AJyJcjsal;cZY>p@U$VcpxMG<iwGUKPDt&}1bfM?qo76MkFZD5HWZhv9yg4=dv
zd%FH0C7qY{t=E@kq5;{Dz+M<Xm5~$w=MLhpFi3toE79hBms8_k9gf~T5nsj9E%doH
zB(GLVYhCeA^=ntxm0+#9z)!sw{T>9hKCt<exj$-`Q{i__*Z3KC>bdh*E&3Fb)1vW4
z)+A_&0<;l+3YYo4c1k^0xWMv>AlGbx3*_-e5PaFlytn<hqfc&HH-&!alTpWJ#E_dO
zev>Ae;)x^d5RF_ck~HBVEDeGJmC?6g0r9u@c!}Fo#oC;VJw0t_DQr^fk0W>>d)#$7
zdr2epusa;2TJK&>YEKxdP1y&=*HEui<rDXjV*RD2T421sr}4}VG6MLV2l3f(qR5{d
z@6=Kd-bfNl(mb3ihkjkUpDr$B{@lCBuBLn`<*14mLtYTM(<b(E345iQyo&y0+Dxom
z3|Ar#fvKKZS|D=Eq6%@cU%q3(G{8M?TTLqn*V-uBZgek=7luL<Q><ZOhiu$f6#wJi
z{0WzSTTfLzP()g14@p)}8|w2CwRhM3&SgzCAt_03u(jQs^jt=@9;6)d1+2`F4z-S-
zEHqzL1`CFnj~mY1CwtC}=$iJ3V;L<TjjK%mhHu}4O$d94zu4eH>~12nkZ~bBZgQ-u
zN}>?=t9^3t@jsh>TPQBv6S1k}e^Ly}Oac}YBU!QI0B}H$zhkylu_dwuO;P0!5Q&xA
zqP)E!pliA$!w)0?oBerqO3rBQXYkP!5jB=otK#|WH(TBarvBsxxBH`I__Yn*BSY@X
z`x=IAPK0D1Skyp-KAzLf%$rV|g`X&fTyiCo>El~!WM~VxJ|>suoU4TLKQP)UV($7k
zgn3HYL54cgrN(nm!O|$;){I!P#s?%aatZ`Q66$H`yVU`wohiks-u_B*n`5c3os;rC
zQ@l>*CUmU}I&j4?2WxH+WH|Mb7|!QQTc|PGki5!tEs7<*#~<f^zr`xySK}?QDLP)U
zFTJ=eXsFKT#fA3h*k=b>Twpx2p&RmBs;#k6MueFOy@Jo*oJHGS-l3)$&)F?RX%_j3
z=}~H6Kly{Qd@E?W$R}f92n!q|GXr4_%0X0PUgui!wz7j8Z=s`W#<UTVe0`J7utBs_
zi78^5Gg3t|jR&YWkmA3Uq#qcxN+{tfY~|*&;VwS(-_a5?UBViw{sb?plYiHebBD76
zZNw4|@P*f774QpFz@_F_N*F2+2yBo)Gxke{tA0yz61sD~-El}r5<MaE|E9w{@<jkj
zh%|*T-gVx1*0ut(iKI&$!35P0yCg~3SMPCg6q}@G{j)jT3H<=JwMl&lq!-sw5G0J^
zJ?cT6-E$xe$Q%P|eEisaO|A2}@+5=qwDf2Ts_@pr5r|b9SVfI*zXMDual$_^c^q|S
z*7SQm7zqzCfJ~PsMHt-&kcqP`-Wff)7aO%b<3M_)2b;yyeF>Ki@E)@j!e++ix`3Vh
z+thA}k~k*E;B!X+M)bMSts6{(wE)Mz%<J;*c$Ekk2U!Igk<2378+h$d4-%Vz4qJ9Q
zK9@WQG_CUKaSVIcS2dl}vYI3_M#2G|jEq^UHwrSysV)HOs8yebox;E+w<0IRx;P)n
z&o_ok(B5`r#cf)AGTR?917v(UOC|ApVrUC3uw)zyVjFSP136t0H!plXNDkqzQ^aPO
zd_IGek3oP%)-i1faGEyxR(lB`q$M3H_oZp1DyF*WMf}=NQ{SZvtv<a-Xmi2{rT+fc
zt?2uoXgz}C8p=JilYBs&T!CKUhN?nDX<IomZVk^5X?`wy;HtNI(+?3&KI-kT`=<E=
zm33sv=JO$V>sdTU@3$0oKG4>`8>01!Z^hJf%p&gb@t<<e-G%@|`SNAaWEd2<#+Ro;
zmB2T_zo^VFlY4xGhUY<PSJBFS`uU1*-dR9+PMlw>v*h%}uXoy+&dzbAO;tKk%z(=0
zp68I=uHd9a7X2P>PJ<EgFdu)QLp8zs)8dUN!?3_ccen2t$9aI*8bYS;&v3UGH@iHK
z{p&bV+B)9OFr~cN$W`<X))-U%iY(=k&&xt_Z<zHA(^FwI4G9w4Nh^2f6cL^qQpQGG
z#L1ObCt-!iZkxKEk*C~ey$spTY=!FrG_5|d2;&E9w9xFYA*+kCW_GO)bdw90SI9_^
zUg~}2NqxhWkcUJ-RF)dz3ze(jD>ZMwmbg|Dr+H$gxUqmy>?rqof5qa&2H?=((XE6N
zgtWrYXE?wxD3j5EEjW|0{DkqF1)w1|q6i54$RS)M-X+sMM03O38jZC8A4GZtkp5T6
zHdFySGAup@KAI@K3BIdyG!{ATTNB+H11i&zAA)?Kj;-igH{Cd~iMDC4H5Z`A^6)HZ
zP4|ASNM3|XVUvDRdGYlj(|@#$OM#;B58tQfLwgZTeK~^_dm_WCg0muPO<!4p_+m!+
zBi2jiP6qWk!r6zE+#CvY3Fb5Fs%{t)o>durux7`TI}Q3#0kleEf-*%FaPlTX70Plc
zye^>xfz6uBT4m)v;SXEg%S^tvysO2CGYrma)pq~H2Oz=r5L0M$BUOfgHvv~!TtFy!
z=c#cQS4@H<D<}Q8H<p|j_K_SVCF@AMK#F`hLJ~0{5T5BGS|E!EfHekG9yeAgVM3d8
z7M_tv@mao%DZSEO8!*Orm`zH3JMalZMH5gaVd{|6do!|i5yLIjkMEz`v3mO(NtkR`
zv8_MfF<~c8B)miSQ8zUHLHpih{s7W6FgMdLkJGJ)q;jEau|RsgQH!y7^#22v$MhLP
z?AS(@#ijy`ra$nY;~Z&jvvLr2z2+pp>lZQEDLg6*&t))pxoZJZFbI4UMy_oWA|EJG
z_u4NDmA7ol^~(5KQz!jU6<VcKbRVpq{KyE-juiS5hKA3897+FP`Id6~V&!;Oa&eM(
zWC=Y(3u$SY5m%P^_wK(w`cqISLX89aQ1v~!T(!`yJ)Wgb^y>dAa>LlW6ho{^<XLoZ
zJ0$uv%2ru&bR^||BJEW>=<s=jMKZF{LKR2H6}Lb#v!g%q$G%2MTnNKte#ne&kd=i-
zF4Q<@O*ugH<eF6+n#O$ZYdRxt(2R`mAG;OHL|@a+GB{h&VH|uHk>3(kis_F3qmAy|
z4cn0P#_sw$@61O!SFZKpne?OCO4%+clbsEtxX)Ri@QHUZY)E&k)`W^vpU%EuE6Aws
z3e4HvCr{Ad+w7@(ai<%5f#*TC$vhIb6VL9|$?i1Eo+Gn8b(K05(nazRb1u%50qYUA
z^og^2uSL`BvJd;xIx#+v*!LJ!K@8b6Rn0M#hSatSDNJP~PpE~I+zswIIg~{d=Y(Oi
zc^MHoiLY>@&ssF(H%;q^hZLY?IE}ey<!D~uONnXka&ESjZ7UPffga051Torl-*7v_
zt}pW5?`>=d4UaHsln^He5sb8dN1K26|N9p`McP#U3mP*;^1jZvP2HeBOzOrX#tL+{
zBx(|xRL0`R8wQPRGlpEUFjq`I_mv)U4bl|`!blUvjvq#wiu^#uSq5RLGGb&AY?Jt4
zxN*&XH7oU@g2j^51RSW5&=uO<|2o_XU~E?G?Ac^*Gx>3kpcHIv|0nYeu{9*{##6Tn
zgPb`esRW2NF|e*J?LOn8LfyNhQ!w7A^bwO}^_N%*bB4w{8-rNFU_q-@jbl(Qv~Z1p
zgk-^|yFH)zs#o(?dkB~&BYzE`aTIF^*M4_<l|W}m&i@)Ti$xERq?yn|?u4D&Q`Kwk
zX>)0b;L393!2$U2tSz#=bYyK6mB}Ctr%lolB9jt)BD!y%!)`g{BBc^cp_U5oE61N$
zplWS<s#^2WgeWn6rpz<uc~P1Vg^lUWT$TlSJ?t8?j|or}d<?P|=urAy&?E`s=i!Ma
ztjTsuFn{zW**S7EF(|V7VtcJ|9`VTlveV~lk)xame}?>3*j*V2O8Jw2s#=ad=q_!t
z66NJRa1`)&Y9T)EgM`X#3z>^FL2!{6Hk#wPk!1O{aHK7yD&jrD2NX^;PCffnMd5bm
z=zD#>o)?=%<81Eq#9W8kMeZxs^E4R>=sld3246}Y$Fsx4Dh+^Gh_ooixv1sk)*ig9
zG^h#{YtLU^o$)WQwc)g+@PnMq!5mZ^K0@8$VwyG8mv;e54vI;_LMf{|_kzU@2s|H7
z_aKf5-Y4^}xs(LC<4Be~FHJ0CND8VAfsrp6jd$?Z3R6hSTWVm-$qPm{L%01FeGqda
zm=1)B?7ohKJVEW@&i3+98K3_Fp+&PPb@!#MHrt;~*OxR}UjR#%r_w@U<)bX5o!^c3
zMyd@KH3c=FJhs*a?dZ*ic^8A>IGg(hVn40eeC5<e>DPPlQRPe{u#w9w>Y|s1lV4;O
zPcgmwgRe{q^9=?P43BI~;$>uw_B6EPFj=vXy4H!Itap^u5vgXZ3)Qnm<#yDxYM}XR
zJb@^kiCiO6Dgh*8N&xHzF>r_Whk{b+e`Q(#93j}LxiY5V*R2HoLcrg<{GZRdxR=99
zU*OCt?5QF|wtx~PE$>D$7}H&mGOg-bXnbT0zq5cQ*Z_uoR|8H89m$1^B)7;!&YBHv
z54ENe9NM_Gu&wjnPOobYU?VYNP}W^C)tgi`oWgm33hB&?IK(4KTl62d56?8~4d2rz
z3dIwETy+!Sl=o*a-6{4P2fG!nGH35_ew(8{ke&kleWXx5=4bWCq`Ayd^ap4(irh_t
z7HOx}@p%!v)B2lJ4O%YJUe5~dYGQMu^b0X{olcMJ_y@01A6WnO^zhe@Uc!O97=``2
zMhiv7@z$koIiJ6TQMSDQ>s(*0_|4fpHLpA;GvjuQ9UE_OSyFYw(o%%fUhW9to6|oy
z(87YS!#dA!X&0l7v-g@Jtuyk~T&^Z+Pw~z>8i8hOQf+it?31O%_Z^^2iVvAh0HL0J
z@hES)M1D`3pi+%L2#;6unptk(Dy$;_CHUSB&FQ=Q9t%F08-jtMT$fOMX<OwTy*b9z
zeeH#;+(e+5>tj!Rcr)l%Hn@30u|+Xl$~(dT%|ny$xDxo6MyL?XJM<lf;N0RJdB97d
zVe~Oa9lg#rb)J-rEy_X+)dB=?1mRL=i3fdfvH7Vy)}a;kaO%K6`G~%&2YSJr@|!}f
z^<bu^F?if@4c~>@BB(&`(;Io$ysO5~#V9<PoN{G}%sBgG4(tz8-XJErvVqa<(yGiG
z5^YTk3o$wK{|q;nkaw8vdqFPO(u|knKOVj2NEVK`TmDH^^XOA)LOH`%rK5e=>2y2=
zPMaEY1l+-w!>wdrR414}5ixVIW%~JYO_?znrD(Hkj66O|uTXL^GWlVY#HVsfTjVGU
zmgq^v)l77TBp16QA14Nyzp214Ig1n1sM_lvKY7UF(wE?g>GUwjnfGIi8$rPq6pKyN
zf}5(9SHC6qNeIdx3O901v5-VM+0z$~rL(WYYwqvT$tfRHY!wC^S~0wbEuPaunR!qd
zBN?^=kRAa~zxCGEl4|_%TH`iDk|7R0$=jYcyj-v(4m9;`G~j5Z6`10FV>@7I<)^Jn
z|2sbSs;7a`sw8w)H(oW@b27_-|Ilf@!X!t&Z=h=bjtc8tYMmrm=7%ydQ8yCCL#TXU
zJs~Mo5=XD32hQero9+lV%NS>LAsE+$U-0Ny9#2c8M(@=lNbe}#(3tny+@HP!hU94D
zv>mTXFmH*;(D;S(Gj~8+vdW>me*ET?Y;9Nnm{R0e+MenG9Of|fAu`Ni3~&=tieZjJ
zt9<OlI~NDG6@d<mO}3m5&1qMW&9X4AM9b&PiH*MF3pm$Gx))7ec_Vb2&nlKuOBtIA
zAvEmOA;7gm|0WiN=Kw70Dil#Z`5r?Z!@e{J&V*tGz~S$8b}vmTV!Uarv@#Vl3Ij91
z_<g);buOaQnS7wr0Pr^jaKiF`{2^P(DOyGD2e8jMQTc09j$uZ|Dfi%PmRc62sYz>u
z;Ri-#aBGkZW(ydEKh@{4v0s9&%-e2RURa_1TKczmsoor2kKRHs5)T<u#e(RSXV;j<
zzP`sfQN5c_^r!@Kews(;N6e0qlcIxca1#%W!@Nw~ce#2cV>SSt9#L9BP;zl|%(h~7
z@YMJjbP?)sVZ=qyk5P=-)Kwkxe9$}<6km8bB@VVc;1&i{e};cK=-EV+a?4i+T(*Jm
zMZt&ZItPSNxZu}%?|lxLOFdwzwLkKiu?>nzmeS2+ytRIKr@7bx_~)|oo4V1ERjur{
z!;{;g9?ZU<zzxZamc@ZgmZFon+U^0pr@1MIDdtIqVTeK)B9J<%+e6Os5D7x6Z>)Mw
zUR%LR2l)j388ptEjc~4s&(#HrQt|KuI_Y0jY_>#7K2EOdz%E1u7)xq^IN5c(LIFh$
zz>O8#Ux%TBfQh~WG?FbW*C0^^ckJA^vm=_dv`l7lY%8{{EV-TFV8q0@Hj{Km%UA*f
zxi_%+GzWR{l|bn?5@}l~O*xrR;Ho5(8c%HUpBwVP$}C96n{elBtUPn6!jH#3fqVNV
zAo7yoBUee7=$g6BEcGU^9fjRRyk3xi-eJelW}Dgd%#>pNAGU#A8B0p;Qf5sXsgN>7
z9hxi`V)RD<3>j6b*YByL)UtWT0VAiCY0(DHi+@_oDB*DyBJugPec8%1A*1yge0;))
z&IE!G40S7c>Nm;6nW^*%ZoJ*|ItGH@(A8nt7yb;OlQCe^m0L#!k8BOkanh`rQW%W@
zg0&bS56Agu>S{y%jm&$tlC)W%X?kQ;O<%5)X8CLwByiZTM7rI`Wf}FridY9pE)U{7
zc@SB^1tDQjWPS;TxXJ37T6AgN_vZnnzg4qN4VKIilC6xb8)~cGA4iv&oO2Unjv8n;
zyTvVF+1yS|4-6~`Q0H#I45*A(|EZwv75T5YiI}AU=C<ItxuLsh3vly(BmIOu$pjC&
zIT;B6-?(l6`FvT^Bx}l4$;I&Upll<d2qY0qAo6S{(~8A7ZW?&I_>K86<AOPwCR)5j
z7*LMV>V)wb-i$=v>R>?eGl$-}kCs^q{)vXf6i~c<sw$79@hVYJ2bu)tM865$)MzQ;
zqnaL0^%g9YZ~DSyW}%KqWA)mKxE+=5fCODwDIYf?QG@*_ZEYZfAm!t_AG%mS+4gFY
zI8R&3L}9t`2B03DHinq50M{I~9<Txm;I%`QA1#EP^^-{B(cu~P^~z<S3(6mLVv()0
zO!z>K5(b+sEK(>hy1jn)egP#v&$DImKH}($CvsrI%DzU&70k2w+2uxan?EGc(#<Sp
z7Fs&)d-r>JH7-aZ05l^<Ql^Zc%Q$vNX!Wp{2UJBYZXG^&-V?vi4qbxgyG7Y=q7)hb
z<AU<^Sz0j8-#}zPk{+4bdU|y8G;XODqoeA^!A9^G{Wq{)jN;wk2SUu{co=6h#IRFi
z;~-S)aa5l&F^G5Z;0FoXkt&|b6j6l?A?~s#I#QZslxUXmc2Ek>US-S%Y!8ql5JK^=
zcbFv%o1GOI*>;zxMoy!09#NrUuv*AeaGsLiyfViN@28_mZ7``kyE4;g5^=89s>KG;
zu}pXMm%V-)$q|?m)wTj6B<A`T8(+8c(wF|Bqg!gws<nsbqi!boWa<C0Ei@Tp{?(#m
zMx;LdS9!rQ1UUu3R~$uq+V}jna+*`q2A)yTu&Br*wgkpr0|`O_)GzP#ondQ2kos_n
zXCr?AM3QUH<77x+jYWRWTUZ^cg&@Ag`?c2y&jAVc#d|D|qeGC<*)uVmdd3*2>Q(bv
zwQO8qw7cm}C6W*<2GHZz(Xk&Z9haXS8AXozMO3o`wW9)b(f3FiA1msML0b4isSG{g
zgiTdkv9G*T!I_LTQ2@Z+4asjK&*-^2p<0$0fzTruVVPBEEFWY2|Mf2M?MZHKZy-};
zbaikbQ)P5@a3DlsbYUPUH7+tPGbsQ700000000000000000000000000000000000
z000000JQnQx+EF^00Cl$dPQ9T03ZMW1pqYzTqy@YuvvX0^?i0U`OkB$@u)WGak@i?
zt8g`dg8HrS;mPZ0@HH+=h7fClrDB0_G&Ip;NN~L$-hUQ|k)9hHc(5NhC5-jf5ajM0
z7X~CdVgwCr_N=Qgs&0J1({2bWv_jp9=Pk#Vz1~d=TmC;@ek=r2*LvrDlzK!+)aHx-
z%FwMD%(J+N4u@D0t_9s4Amg0<gHX#t2xf<!tGEr0rUZIP$I}f8*CiXC;(68qaShU3
zO%<g9%9QnV{{%BlUH*wAb>UAqN7^5js0#CxZ2JSuwX6=(NA|es4?0R2rj<ckjj6Xr
z<G?+?qh}NlF4<PNvR-om7DN@;Us+VxLTx;zQFGs|pV94yu%zBCC|jp?*eRfdfBl!2
zvdNb{!RGYfHVGFCP;rKHQLJh^MLCKsk1selM4SUh#Y)h)8*i~ObGsSk8K;q04fp3H
zJdOGl#vURhv81_%9GU6Xy@g&b*8J0a&B1T_D}SO`e~`G~#Z3UtyYp+`Hgm}CXy-pL
z08)s1C;xnTcbWUl&9Mb$a(KIHCA8}wsu(;ttI1~T&`;=n?V(cQ97m?gs{h&>TEosi
zN6|@xok5FV6EsK|GZ!T~72V%wy@w2%O|G+Z#LX@T6MFg%-`qNxGv)(J=ysw1b0{Iv
z>R1UKopI^}Z<VQV@kA{p+ATgRC1~;b;2ihqDqhx}pvmRwZO7jqY4(bk3Iv0psoTcl
zV0!`)nuuFt5A_bDmznK!_fDGtgS&t{<barn&0JvqgiQeT8XBeh#naM23R|p7S>>(6
zb+y)siIu$+p73Su02Z$uf*U0bT@(({BTA^5SEGS5<IUyU+yVzS0xhAMU|KpI=qJ+K
zw0J^j08oz#$?<JDuP#O3I+f|$Od}#cY>F8Kel@G@{wx=*D~<s!ipBoA%)B<E^riWl
zzCk7}M#;298Zd`?9*qAzTF7sNwnua9q9EcO`OyX)=8#A5gH$=Jn^?hkD8PTB#2*=7
z3DkAiW7%oL)hm-7_P<VOm_Rr_7~I}99ZB&op{2McTr74)^9Fat-X6ELX{L9Q_;bYT
z;jSieND^5oZBFLU?`mMP))Ok4O}Q&Meq1AU@|Oail!<a1U5#h*)>B`^lA^)UY(~Wp
z?s>k(`p?x+*S#?))2MG`FxWPA7ov3KGIwu@#rIhWGI?vvuN7qTua;VWj;BR4z^nXz
zqGopU8aOd@&!}NWdvca3hLT5*#t(3~hy#eqz63M&(1jk(D^}Zxo5^}!G!T*s*Sk2I
zgK<zv;GIsGS)+A|Cc+^tc-p<N8aU^sbd3E!_H$4I*O{N73X6d%D4cr<Z7S{ks${KS
z4xwF6OtFNi@vz`O^-{Qa6bIc0Nb5$>j2g5yn69ugxn)MA*<Pv|(;#UnLD#oX%OR2_
zq2tN2@iz3jI@Z<-Nh4wqXmYn$?;45v56C*ZaDceY&ooekL0_PM+y=l;E&hmR+(x-X
zsIM~UDzr}=UtD6u5<b}bY%bhel4)@imiZ_&KHNNh*wuVJ;f9_ui9Jg2W=^DZSCB$S
zI>=z1ob2Lcd)DPt7g}`C(e$s~w!QJIcw3bZ<1258_NX^9yqy!a9j$}7ttPo(j3LN<
zFSM%nmuiCiXXNYF98J4-9V$rM%fjjzm~8ow<E`ef=<TWgj!R;m&5kEfH^gR(irD(t
zL4p!qD6#bPE*W*qdNJl|?I{E5o_v<@P*!2|qAsG+6>5EX*SnHYlBw-Iy(DktT+!%!
zW)BDNRi`QAX7-c_${jE=!Uo`vEMjmb>L+Fv&`FU^sp7Ne9umSY#s<MSFBE*BTxki-
zl0w|^1Mnn))qe)B=A%dr4>~<Ob^?w$SFmn2#Rjaf5-4+k)#lq6u_i%+Y?-nKac)$d
z$<k*GcD}0j;<xs5zu05WgILr%zAj6s^t?uQZ?!(#r||$+*`x{oV+}~M#Aq2gtEg1A
z77!-BGRiqlxBh_~WMsQ|$pEUv1|b^n)(NEnhVXMzu1|-f>j0qK%^He<jSp@#=2OS>
zs4xIl*m!)ir;w6S<OI9W(X)H2d3m__r}vg+n@9Ky*G1DLTSq;<`{l;-sAmEppe(Z;
z5UmfKngmjoG6uO|LO9B7nyRn<^x6PmEYMmTGg#LmF1hEqO$j8X)L*gN(5#W-n(Tyc
zX=U$Y`t}4N7p*@?#Gc))lcl&A%XadQs$QBKhCJI{Dw@B~G8MtUzulAb?3iv?*LDUX
zVZ}swe!CtIv<$UW_cmSd=JAERd{a|`hZN8d9K|iv-uCB7025a-@Gm+BpLlYVj5atN
z%l!1;u_lH)Gy2E4n`@*>rxI|7-7Fkbo8g7C!xVlo|2%12dnZ_Wsr)Lb(YpSg6YZ%Y
zy(`&TI;ZvgZ~dj^t-GF(YWss;RsBj3bp2n2ZiJ5MzCm?o-N6W*cIj40k1j=>+gi~8
z)j!lqI0gRa^;I>x5h}l`qA;km^=h?R45<y)Sw2_qz)>tTki^Q}!Mki22f#P?pw&@&
zD{{2b57v^yGSE9I0AgoM;?<qKx&47HW4*`IcKTjfx?1K-l~f^~HN3mTo@(S+g#QII
zbrDhqoGg<(3;6ova=s01GFp6vq2ru#WIY!0^$@84MZwb@I`dbS+zTT!+wibyAt&@p
zV<z)Dn-M{3-U*kw?g-t&lq}2+``^><6OwQmUC_=$BhfpLz>ze3soM~;(}Zl*jnmy8
zd<ul;Jinqyw9pk)d?!_)BRj$`)p}{w2@YI9u<Zscsw8js0y)G-Xa;g$K`zo_hqqE6
z<YV<lrMQ!EmPARu9W}%oT*)Hb7uh6;*@lbB$5-zFa)ww+=nX{)hT2vmJ2Qm0c@>ZU
z(K+$6pr+UzA_E3haBzs_l<KObS;R*6mgMCx@^Z%#)?0WqG)M%5H5WWAcW$+P-a$vZ
z0CWwXQ|4B`58X1a32@#(m3(Ilw`<P8*xT!W>cTaXmosg-Z={#4#<ODwfY3UG-)lav
z6)%sF>G$1F=e#ao+TK|3glZ(&Jpr7ANcg8zLy*?v3Nu8gd{a2XB=Y+BBt_+6*!+uO
z4&jBinL}iD4gW)Hhj^$DsA&e3__1183t<=b(fTILeqo~-2%}}l{*0}(Ts&t#!_j26
zm^iRagZ#P}b^J;VnM%rzfLWU>5b%*jghyQJq;z~MRAA6*LfH2EZ@?Vk3Rpk|**h8c
zZH%V=w%>|;wQ&YaU<iRWP!lZQ&`6%h74YSR(wIjch~*3VOD420?1~e3Qh<HiSyy+4
z1~HVEgoa!d*Wlk=IVi0y_;3T{yq<-fzIZLy4Rn^pEW7wEe4BX(hPzXz4n1u2gDF+E
z6c%g<@i~f!Aa4V~HGJD3;hSX>yloO13{+&V{XC0N0Ap_Fa6lCDw)xORCYqyy>ftgu
z#s${kwv&vr186!jYG8SYshbQ=<bNzL4<Af!?Pd>Bsz^)=7Xm;4isl48VQ)lQ4=d4%
z%H-Uq{|YjxXtu_WrPQ?PoIpWch+d~tO}LBQK!~m_K2e#NDiKb!1h?rWgRrV}3MZDp
zVKMDZi{(6`W6~G8eyAQFS<KWig<42K{T(eEr(j-ldG{<?wY>P+*H=kF<OjnxKFAFZ
zg~S0wZJj+{jw=aOI5ox<!(E>3&+ewup7WRVig+NB^L_lbZ(6>%U%7?b5dgBGEtkgZ
zBrDyE0&g-s@s^}L3$nT^wHhjjv|YxS**l%$C;RC$hyraR<aS(JT#n!Yx`QnB%$21;
zU%-46%=t@kE0otVL339$!7BGE4BC^_^9U*5`hadqQ$78J1^;7jQ7}Uh9NCDH%J!Gm
zAjQ{{itn##XG+n0KZ0emSKpbG{jc1uTXgDmGmW$%iTt_Vg|hNgvegf&!=epQM)&TY
z6O8^=JW9{?B}IMYBk(cZX<CKoHF@|rI1~p4ZFMIVOVmXD`JM5mh6uaeW8mG-PYY^A
zAM;^FZIQwgo^RvdQXs~8bSU}|QZgEoUc0rZ>v<<+)ecw!{d|wL+SSXp4;mGU3maxN
zPEY{Nb^q75yF4{_@S9#k6_L1C8i?6a8Abc`72eY}d*412nMkEXLS>TvnE|tHPtgO7
zn_?as9A;!EN|nUVO>{<F61zZbCGenCBnzdSl*<5ovmOPp75&=LKk`J?0L*q!U8hXc
z;K`tcL|%f+9wNEVluEv`LGZ0irw}^u>svBaA3V6c^BfWYI%R$x(rlgS=a>bQKFE(?
zVI*Va-^;lh#Kt7x#JH`u!|^D1|6`+2(aj)e($0j^kQ!3(tj@(@-Jiiv6&6;4sNxnp
zrkl?gw<~*KKk3|NS^nyNRHyN~A@snS;?*$!pd~fme<5#2Jk>Og?-lz41lpBi*Ctd&
zR&Q;K$351fszsIgk%@@DUegurwCEBbjK2~#J1t+)Oj}pfgvA4?-Sy#VUU`^R3huCE
zZ^qi;8g5T3VI))1Teu!@$*Nqz2DW1!*pP+&Z$ETam%M~jp#u;ujZO&k=)TwX{rdSl
zztUo`5@te0VeDQn3@fpg?TB7m4y<L$%wan-V&S@P^?CxR7SKs26?wcp;!L%mvVnbH
z68u1bNJuK3b~;0}r`yG}Yc+j2AsQ4z93PhpKMb`s>K&)11~c~oV}HCIV2|gV<6nTH
zPEcqPsLB37u?K2_e$0m=8<MLonN}+zeBO~?o{B9<fA_9Q6Q&^cMh%^3KpS-VA*5e*
z{VhRtxsG?gmS@^FCT1M?vlS_2!)o{xab$ZqAMWPyf|}w4id2m$GL$Pu&wiUwJOW&&
z(3x1$Ap~OV<c3JuQHAheKvQo_#Iw57W<%AwJ4rtf*(-)qajomjE7)i>PLm_-w;F84
zyi|PDX+MyvbYi44cJ_8kwDMeLf!ZPZ9bgVqx|MV=C~u3!fcu~81hN*&86?uX=Q!3K
z7!B2~yFz}2!FU>G&Jdu7k4U*|J$S939MZl!tR5#Cc`2|yk%SiY*Z~lcQTKyzm+4`r
zj50S*RQiajua{YRm-*Zy8U)HMOTa6lG75IbV%yI!cylE&wyBw|b2;Pnt}KT-dQ~7J
zmn)1VHI<8N;+W8m=ESaLm&bA5G#QzxD$s=sfKQW>Ej{C|EPmpB>r1~lF|)u~!~y>X
z>odtBnRs87P8~I|BfqG`aj_$kSS$}Yc1snl#`@gj-NHht-h7kYCRV;)=F757g?iD%
z*$~V!hilgH)YE^{vwbE(A9i6b-@TadU!UR*lcP{)xrmv}BL63C`7lBC(qR!)m<8fP
zW^mWVTe|7jXnu%mu-1!RIgAg=R*(SX>KSM=i*YxYTM;f_OO|?b)Z~u{G5^+4LyUb=
z5a%jjrH0j$Ofa`HD&G7q*N#IX=u<iZwkhkRgLx_;Uf-CsasLs92S{zz4fY`S>u8U1
zfaKg7FatNDUltR}2JNSy8jzld!y(?q8Gw$zDVwnU0{G6!<;j>`S?l#UlH{IzQlg>r
z>6ZAea+EjYSHFUE&I45(Kwu(~k3}fX!t?ZK!vnN<ATjPNr9jdIP#dv6dHYh??zsim
zUc@=q1MHmayy%Xwp;sYXcU3ZG71y5CE;n7Mm~|!CpkK0x?dX8G)xG|b`R;5S;4m0I
z67B=&<ca$gKZz28*hvYO6FasI4tNt#<2i0(w(<?;pelKa8Mw?{Ug7d|bafqd`V5G{
zB({*RZ&uPi?dDOD>q_cU+2u8+dt@mQ^a)M2cFYbZ!~FS#&29(~Yq(z9l(^~>$I1D`
zg&s&t6G@zny-SP@J(hJ_I?EEG<pvRN_}Qr~_|Rmb{;#FL5JK*viAYRw+d=35y~#eI
zL$Ltm=?$JOBvm^{+$&w7#R4hOu?sPo^iyb7Kj<m4tO5siGub>vE#hRQdGU}T8KKy}
z2Yp?M=)|{1_%XCjDE{1SShYD8)}_w(-<z03_$zbB`sh}QePfZ_DXu%LCCUI_9+U9C
ztLQ`BX{_<kr>BZfu^gJA24Nzm9ToX>NYRIb`lwBv-RR5ysqxos$Fj3f6;3rH^lp$i
z9H&-uC$E%Cw7Z_j4|n`mvO(A3pR+KHlPEGfy>I9Iz<q^fCp!>^d0EXxhK*6**aa_U
zVIw6S(A>(uMh>u}OafITeO9jIpnhpnPG%(H?>tpf=u!~Snu1^M2N^5%{(401eo*sQ
z@8Z$fQeGyf*43X(?rhDyeLI^&9`s`TS7<8zdM%qeOyo9g=A^w2+eA->jA=@TzfNon
zg82u1VeVZX{fzwY!QBh^!@wQnIEK;^DALyWHlGY~x)680)-ulyOV^EAC?j(V09L;{
z2~nL=?in!*_o?JXeU{)j%f_+g6b4u>o8}P1Yy)1wb2`!`i;A+(a_ze~$j?nLgodl%
z6j<Nv^N%u0zr&HK*Jg|qb`0H_#xc4A8mWDXPQZ>}_FI)d_b+AV#|b!++Hg|<0o$mJ
zxqu3b5h8bg0XwkBxK5nm!8_{h2CF5b>;sO<uo%WvZ1zR1g_oP)b}FF!I}Of)IR=qX
z@|P244V!+iFfBHV#(ECsxti25(!&Fw;JB!vs*;TC?aFg(xp6|It{lj$624t#vaI^s
z>Z)*nMDf&?a4OFGZsy4aQ3=BESAObIcyJEAU4|Yof$d3T->{v-TVRFp;>|U_Hs3!z
zc+@1-!HSMSN~Y%c;A>u)DV|v#+=O1ytk+ayj(*cFH#q|SQ;$RK$JzICnnM&3<ZvO<
zps#JvSFO@xZ6ua2=SfCJVSG!g3uD4)uam*|pa5ufXv>diC)O^MxnInUhi2w<U%0*p
z$Yhl1U0-)PePG?kz7>e0GBgMlYtPRO)#v|ibVtFe&;0i2B{&rhWD}$2gQ1(Lx#-}o
z*lPRi6-Zh&k$iW;9_%BXcZGV6<vJbomu?}E0CPix*Y~YlCQy3UTj+oV>>u?1>m*~U
zY#=mz9ClztH!OP1F3{c@^%d5}$}&xf*FeF3=@KqYS_~9n7csi5Tq<Bmt;-Q`Ja9Gw
zXT(K&3WjQjVwGQ^16B;8!R$PYh|-n-3FN_zof8Wrd^H|&YqX8(bFQ@BIULcIp4}#*
zT^M_U`y15?YXMCs?@W*e1YHP4snmIvnd9{*lwx{7QB143Xc-K&ZL8VIq2NsyqLVVn
zdcJlKYR^WRD)^ic*D1J^%H64ugIa8T%{M=*zIEo2DVBGHm_cFcbVt-#-N)w4MMahZ
z<?-Q@cgLj1hL(9UPu!y*5xJ^(=1J-8_k(SP3{o)!Vk1P<(ivoRQH}Y=_=Sd`-j5SV
zZhl;Fxsr|&4XpD)CF8I5IOWQJDn^W{R0^!9;WRCf(a7Eglb-U`!eu&^X*x#Z*(oh6
zvcR|uc~WU;tB)}cw6m8;VWibGk)1Tc8g(Mbhm2+^@=3||Xfc-{LA^h+N54nT$Z#UU
z%Do&I@Mz}a?6Wi_F%#!hyfAyan=^tD?UnyxD|#qMaC0?u7>6U+IxTDIf^c-m%+cFl
z2R3R1@<S5kGNKE=QAfJ^<5;n}&k9U5;f<|+lI0n|0mN71K{z*%DUm3rgZ>)aRNr*8
zQHNKrHNAfnToNybz+%??IM^uK+-V<U36T)4&CANm?z>{wpL3xpmVzj0H*a5NS+s4K
z3Vad*fsPIOfW&abF9bd>`s*szuwI9sB`2Yocs$`hq-+0#RA*K(4}=R_N304{uC)F>
zP!S7*c}DcCe{ItP*0iCC%N0<PEE;osHL-a#i?Xh^d+x1$N-F<h6S~AOpA51+`AyoI
zQ#l3R1}JhoEL1gZHkqGQX1fBu4%FRriuf;p3a&X*x5C)Ah=`?MoM`ogt`mmg+1SoQ
z8E4DcV(vsKF$zhZW&SSRZvn4ytsC;Z>vnrh9ua>LUlaPL?adl1s!zo5HugfaoRJ1b
z*qEmX{cb9mzzkNGa_<HHuVkgmX%|`{F+*1tRJlIRm0(z)18li=Xnk2@o6Z2=8y5#r
z@tE4QEiw!D<so>5<W~M>sKhrf_h_X9hsF`!)VFia2iLK%OcNp=Io6O3!}8bzO<LkT
zKt@ybuYQg2SSRp6b%`?ynI!YFrvYB;giD2rS?k6((c4H7`ui<=Tp2R!K`oRGhm`<v
zTw<aM2ap@Nz;r#&*$U85IY9U&TZh-^D!>hSMDtBf5?bCX%AbGD!4B0nHAMnLF|913
zZNH+`1uG|4w$kHb+9`(0$L)N(4Jb@~?o(>qy-;GE=peQ}KB;Qg#>RmkAe~o|tknb0
zjF1rf)<I=Ke4THwOr`O*-{ZT^MOEASTl3z-yGSZvvEQJh1M^NHdV-<~_Rm&?-aJBG
za-50Nagr<gaFi2AovL8jamvMytVCgCUt)NmUZ>*gWCdw%L{RSVeH#f?4g6hNEC|c5
zk}YUFikbolRi;~1vw=<VXdmdZ@)6UCPe`S>`%aBKXJ@7>G_fY`J&eNSMB|IHP)@yO
zWm7Dbl4_9x9YsEz7H|#oqmpQyM<3hCtYViRIRq2e`xUyYL~rWE8}TNMuL4e&RyliN
zaFpinAUfcJbYKikr<im`mkfNw0S?Mo6f2paPz%Se<so5R?z04HqX(TjhBf-C`wTG`
z@e7w+%P5u|psE3sc+Gbx5vy-iM2Hq~dwGq+A=0h+niduFNuWZ+YdV%(F=9xcx`El?
zPg?9+YcM0Wc7!_pKbPUgRt69UTFU%MRA5ccO%(R8p7%Nzot7^<sxhZ}`NZl*(6cnj
zbC2ltim0%S2H$=ELKU+fX>w_P(Kr&^v2@3+0%toTBXYENYfJV)ia%-wqfq5*NBQ78
zWOPpaeY@sWSP&-F-B+QW-Wxr*G#6qEPaGy@2o_{g(;;Ht|B(BeJNtw^#sBO)`)&GO
z6W^Wy0003=(vzHB001BW003?Rcku=yjHy#oPCD4<DWs9BCx9fq?+>Pv=T0&LGQ?_p
zj5C)fYZ9tL-IF6jN^etr%G_S+&ecsq%Y8UH_mGx~9r7raCqUV4n4@h8qQs`IT=f2y
zt#cSFYW!bWBKG~-!Lgt8mEcw`i)o*l>ax+b(1T9-F_1<USs<OkW4LyeA_CKvAfkWt
zu#5ly|AAou0Dmev+oPic00H~SQjA>y03ZMWCYFXB_woU20(F#+r@njWItj{y7tvB=
z!kEFPJS|s8zAe6#y^Gv$C6}*I@zPs`QsLBmJxp~?rym=0?dt)>aW8ORv?XsIqs7Sa
z8@+1Y+^Z9_TPML``C$ejJtHr{w_mK!-p)h;%p7IUQ6*5EuR(M|&y9@?G<cRM$TCzC
zhtKACGj<QDqHsOg=ca1iY0c?_MwZ=WsMkXx`Lt_!FuNI6gVFD$l630XYw;+MqZs&!
zY7?_rmp7@Q+E3z)w3|b?t_?>~?H&f1M){f2L%LZ*j5;N|cuOrq-6TG*Sw^udxF*FX
z>u1CIs1<C*+*V+Ow%+!B2nY_rk!dlL=_XxHtdqUc-{^uX4nc?X^=6;fLzwR{bUR1)
zkUtTVNt%Cb{~Pl!nWEJ7ZCamz`k0Bdv9dDy56-3Nr4O5hm5d`Uq!bSff5Dl@u32sR
z?aBws$wJAVhA&NI-pO;oR-EiYpB((l3WvsAInT(!--Z$(xRB3%8OyI&_pF?*Xp`@o
z_>;(Sd4S+9JF%uJANv|z0)K#FeFo+(F2~Dm619FR_eV@&Vp%^&8n&&s#<G74y?FqT
zrTor0C5nB1H@hj)?M13DG0xX@7|)QsG2{~pTsmT<_!Nq8VO*B&#S&&j{B$WWrB9Zq
zu=Ze~p~mVou2Bus`Owe+9A)e#QurNuxRNG#i%w~)Gfn)9A!g(asgww@&FNA7`FmaA
z%SzZC-F-Qg&EWOm78O3K_g3+16(Jo;2hOUTEy<_L-nAlp!jE=QN28Wa{x{o_F6u07
zfd0GRyAT1dMh6{_-DiPW;XDPJ>B%<sLe~GgkdziqRD3ZeFzQeldXrplvZm&+W{RCJ
z|2{o=2k20Tf2{lPqnA-Fy7q65ugLzQcN{Z`nS1oa%;Mc)vwf=y95qD^Nex15o6J2?
ze}7S1@m*XexRVE|M9q?(ZWew#;l|?NFjEmye<RF?`KxfrgmE%aonnp|gs$6xsM7#2
z^?TNtjYb?Ri3!>~5}!b(yQIzc49ZoPX6g~49CvK=w}^~0oh)y9>LAa&+%pn?PsQk;
zEfZKe#1~fYbPM<fTkV8AC27dH0d1XaC_!NBu5u?(emvZrMvCT6Z+tVhZvH_`2me}0
z$3BZRR(6Gw6|K{9j6I^Xhar<F;5UD@q9<acoE@XLCRY>iiF`?Q@e#kS$(MN<C2LzC
zEY3@KvAbgaq-d-p`FehBPIZZ32w=pPAu*v4&A*E1&bcq@3eflw?TH?`Ms1ug>ifyJ
zh!%<ko9bayS{I*T)`JCPo>$u2nHd<}xhwL)EQPkEQ@wDz$n}z&+f6~*f>^P&eP}`y
zc6^Ecm}WRy(4HhaL`RIQ-9bbkJN^e2b%VUiGul8JQuE7%8C9(cizqiU#Z|*>h*u=P
zxUyAC&ZNb+0eshwkt0e!#Fc#wXFO}zt$r}a!6kx#J^Q|&jGyOZcv;z|$Tt2+g!V8C
ze*fp=MH<j0D`kjidw%S)ZdbSy;$=({e7C6PH`#g<7Y0-dT|_+MXDUvK1kIAD4Goi4
z!*46Fvmp=+o2<ynMLR*Mn*2j##I4wZY}#)#%W{HzLUe*Y8B|Obl#Ztwn#62s`b%{e
z&-a#Up|i><*dvEvVugL!fs2~}<{-`vvoHlMFL||A(*)=Be^gzoDRGPb8O}na>e1y|
zCu5D^bIe$<lE-%$*9#W{TfC@E_S;)Dj7zsi;+?XjOadxo9c4thM{i=U|9v76&%o88
zpyNK|c}cnbO41Fi0@Q~~QtAEz;Kloq5W%c9gDw649Vt|QEP2l-VaXMwe93DX$HZp#
zVukhfJ}Id=4~^hQMWRr<I%V;j%t-;4;~07G*Lm00E?6RSWGMQ;yRGeIeP2Ak$^Y|8
zG$Q%;Lm6ZuR=O-4IVUSqV89@Ez8SKykh1D->S9Ub&ihxKY#kIB`+dXMm_OR-x4T}j
zPUQ!(Iap14d$caXX6i*wXcR7jq~chpap4@=yLQJm^2bvE+i7*15b`w)Y#HK_89=Li
z?Y|A@2y-sI^^Vlyg?C_-$EGd<N-}RzO4vz+!bemZRJ=;}xN<vXqJ2b9ex1GJF@^hN
zrN^4D_nG$>j8_zC*MH6NW~vK!BIvPAJ%so18@bvggf8>P7hUbRZ`L$r+>EE#4y&_-
z-q(hTJ*js%Wk`ySRt#(0w@TSlCMxI!V($FPI6|SKZsX+&7LoFK))=vjC7f*!8uyhD
z5u7uxpO281tB8G_tjq$rcEpMetwMD$_||0U7&K(e3}x-Pi#Xx=Y^!}@13Puyt~exW
z>6*X!^OAN|CnD2MalOg0O!gNP*hzWi;TW?8N0tD=><Ja_%{8Bq$pWd#9Als}r>8qc
z)AVTUhLUFylPN}zU<F`ey^U^vsKB<G>Cnk=4+F7@*`|6I`oxjX=Emv%_~Z1xyY&oP
zma1Q`PB?<?ywb)=IG@VhDEzg@|3O2wClT|JI+-KO(ie#Hwy%j4Ne}b{NzYuU@bp1f
zhvk{83ge+C&fbd>uB?gY!p7o2>)Sj9e?ULR+U`eVoo}&4ZbU@!w_D(6rh8J5%1Zqs
z!nDQFBzlNzflxT$vSr4v$O7frzF?RZL60wF-HIj&rbS@<8-aRN&!v)Qc-$DMjJvE>
z-OJP3yNx>0x+00xq9+D&9rFIwl()pq^wrx}1huMuO+WwX$7DOTBgfjYumlBLGlho9
zR1##O<+a}rewr1ff%uqw!5&(H!lZUf=_lD>!Dq1>0UBziCnhJJPP<ItyE@{25h&Ef
z6z$sqV<>u$k~b?e0#48ZI%>$UtBAGab&PU@W3YA6FG7Zfqb-b%nLk$#Y_usNt6pFV
zIh1b=q+cFxwrZ1ff1SiK6ZSvcd4--H<9e><5+V6CA46<h<2jXPXMTq;XsB?oZ7+I2
zrV`NPNdD&Hj@{>4FcPXyXNjd4Du@X3-YxJ<gS$7}c=f&*ih_VmSdNnk6MWA=3;R8;
zrN(Y0$QEbaSTETBHj}s=tr9L}CSZm`%IMEFITfbQt-=x(1|%kixd@+6QrM50_B_*!
z@03JcNHK0`;XjBg^*#*RM+Vu=os2|ubwtkOe2B0!<S^ePtU(`eC9XWuVzs({s`_qG
zTRPPAIB|WY47{K88u;jGtqP6xG46ouF}2wJsl-Yak!6-gJ70ftqqQ?LNi`1+Htb-w
zP9&M=s^t{PAZgrSZ}Tj*zlqlAUQ_8xRLJz4Hg;0_lMa3jEgSYW4}9BSaL0ky4Z9T4
z$<(%>lQnr&5iC%pTGF00cokGOr6PL>$F+ALbp{_`(%;GJsQjAgx6@yhNW@=;_g4f=
zgU2w2<piN)aU=BP;?X}uYT)Y6<)g%HQ}L}}#nRy`*<HfcI?}PAe*4q7?=UwP(6$j9
z$d6&`zh!nt`0Lav=J>(Z?76xctqs?)PQDm0S?0k*>|Tk6(=iYvyX!`Dh?NCrjVh*7
z2qbWuN;`s*Snqy6c^51Ba4h2L`kC!c$je!&Pn8Gm)bGWE5GRl$S~!4ePC{S3*{Vzv
zgZCiF`0Ay=p^4~}I$|xE=MI1;zp^M?g&Yoda3tVJ6oHR6Y4?cuT4s?%pSu|oi}w)T
zcUn2FR(u{n_=r+z3rKcRx?c(vmZ;%vYAU8^)e?6JnWfaPEd)|UiR;P?px%XCpC*@H
zQ6GoefqzNP7iD(lp~xgI+2aK*aS2+;eacdR5`Z0JU;SeiFQfVAJ4qm+u`Zv-^6Al1
z+~+S6#%ESjyUL2w7+yH*61Q$nxveIn(HmMPRT*aFvTGJHs<oWpwQ=>&Y!7fk5h2NA
zo#k(Cf}wTzU9Y0i=sfV(L<cVDR|v++=*C6rFP2=JryhIjQZf;bIlX^N8fc<42N@IH
z0IRc)HXSRc`&V#Bla}YkqIVB9th%MCkt|TFEU2CLmFm5^Va*&}<B@P1X>inLY<)Hi
zM3v`IJJT&>F9;8xv#LCEw?vId?L`EJ%B?s0Wxm6YzO@1d3rQPxG<^V`j<>PCY!YQ8
zbA3>Hc5Lbq>$-8lR3%WMXlC&iBg{5GTJ8}8?iErS*~{8!Pw?3~7l$LH6BIK1{jZ6H
z1Y@l10qJyis1NbaCZ2HY##lVmCR4<^QY^f)%PxaSbLR<!G3C^H^_373bLydx)^Z?t
z!s!jH)Qyq@XMmX5Z9j7g@Y#skt{@Am3aSQq;!*z>F4d_p<87R}!vNP(pSGmAozkH|
z*9I()O*NQ(Wus9l9OEKpkV{IT?p9vfS}}l$2)#CrCQ=?x@gO3d=pOB(j;%<H8X4XS
z&(txa!&XVT*Pi9?(lrD~3$Rv4`3IAXD?xQa;P|r@z2$0Skg3p>zalZcohfr0%HL2*
z^k~O1Vl@CCf!!W<Axn6qEU#fU<beO_W42(X&HAj}z{s%)tFr;SUZiB0gwM4lm{{Uy
z9sqU?7S}kvrL&7#{;R!rm*993netljjS)#@8kF0H&#5TVwvL_@0%$0r@y|7oR;Bdv
zIylz8ipYXDtf63B+9aC**u4tspDj_!n@W6+pb%x~;cF237(~%bFoNR1j4kr&rX>L?
zs@W;5_2Z*5UTvPt71pnK=-;*!B~wY1ySXNdBWFtr<?_$D&JfmZi_6sjY7D{DZ(f3|
z(y1GhZxW;U0uPTcNGrkZ^?8YFhE)qQE~gas6kuzp;N$4cy5N4*`gaj43oP^8j<=IH
zr7tk{eu<o=d*!6)X#81tsBlT1ld%2I5F008Lb$IjLH0X1I%x9|@j1AUYImB1+aS%!
zyAHa_XS}E%0le`Gy<uH2mN$2}3L*L{08R&Ap*=D(Tp}*oTIR^aEB73krapM%NhZ#-
z%@L;$MqqML6z#ur5yn(!|E2!6;tTs0f1hCna&gBl#=OAhpDI~Z*Qp^(gpUzU?LzBC
znkzhHy3{OJMTS5DP7Z+5Fs_qPzR9E16iVvBghi-TPcz)l7BSm14XlgKR}wn-OL5#l
zhZ`Yx5yDZlWNFeAXTBR?A!h<WJ2WItz_WTPboneXXh@RWb1BNnwq;bUo-C>FepD6S
zvvO!-*-3t)ncedaa;rFvH!RPuV*jhCbv2wHe$3!{^S1HPk>_9I7P;NkD#ypaObGV&
zeC!r8atF#Zc0DG+$o%pDIA3SIHu=!qlFHwl&+B-d4hKn3s%;Slp<LP6#zb*<rUEGc
z*BaQNYn+H2L-NY$+rgeHd7+mi%8#I)I5LZ!m540SK^BZWt2$-WkN=-1v6?Z;>!i^&
zazG1y41G!ha&X4|NbA0Ze4CB+jxmYQeY@u|zndTbMCnG6;Se!AI~d-f^whwhZe1A2
z=SJ4HVffBuXqm^3KfkYXuH7LrygGxx>YN{*?oLOeXf!=P&`u#Z8Cy{pt?DFr#kOzA
zG|@rKuF|vkX@|j9lO&J%)WGn7di)0oPa5qbpypX+T4s4$f7X8s<QE)1L3O)wZ~!Yn
z)W21@Z1Pe|i9Z~Nwie<7i2UK;BRN#GFKHcYwz;FM?A$<|D`zg&jse9<s!oi=$bC6Y
z!dx_u=HRy4XZGi?9LMOV*R~2`KAq)o>ChfTjl!y#4Y0Tn9th4}*I5fN+M@wI*NsOI
z%aYiS2}JGzmQ7GrVKU&%HD`gtv*006$ec{wxENy}tqrBc-T6e{>#eVZH&;YJz2`!g
zkjM;k+HZPyxB$`s_T=<!j&4q^s_-TVoChCu=^I?;1b6Rg=o*5`G9s=Gw&R$jp@gp#
zEFP=!zwaWXFRA6xD5-)bFmn5o{%k~AJ|u9H``ZUl+&ZzEE->luUi|$>DuWX=;ShA^
zry!W0AY4ST%F)=1H=1{yo>3jVq`700JLHh8IHi=1pn&n@VD%Xfn=e8@xXOlRe>Mp#
zn{Q#eXO_uLc(y-r%3z(T_@|)i_A_zX!=LM(2eYa^G!ijhCD_16xWp`B4*b2k`}AW;
zwp<K5g71?2Lh-NqB?Qfo{-VcI<>0!MRVnFrGf$6c+5iayi+%sd&EIZld3<CVv?K8l
zm3LH?L`=#-z&@c!w=n=Y13w1J2Yb5UZJyUUskV`#wU4MQ1#y#!psbgBga5aWn2nNy
zVIcXLW_3yeOtN+jXIOQ>60C1=NAk(Ej^*v&3y^{EJ;68mrhw5RF=>Az&U%a{T#)sA
zt6buHN=Z!6PK$BxL!>{mDs%a;9`Nc|Jx{tSbQ%$BltSaH2-hh_PK`J{R<&v(akteB
z@hNf}4*2N29!qx^aJ<UP+e>U@+1{~c!4nw86&OOvx!vU3BL$Z^8r5q#hX^OuVL9ty
z{NXJ+!4IraX8HUlPQXJ4?t`)a@DU=M-=<Y}8jq}7oVLsB+-w-Pd?;HeI@eoF1cfZB
z<j@Q9Tdi3i$p-i+Ej3PfrNU6S)+Ph0Mq0E}dxUwtM&!2Xbllk(!(PZQb$_wS$vL@H
zPiW>-oZKJ{v7RLj9lr_y112&N#gUWO+;Y%)ZOjTV<gZr(of!Z(v9t}!E-S8@&sY%}
z{klc62xCbJiEBjtTU*VBE6Z{xOl+I0lytV?r&H2`IE{J(kZb+Tu43=8-2YvZGyY-f
zIG%M2o#(TmyTqwnkIPz*3FLa<2yC3|@?*nBqn3!V0;E4JAB34-r0r^39fA}5ET?hD
zKFh6*svFdIjKufe^%y?79Q|~RxL@jRHZvkR3CXpf6+clhXV$XlgC>G6on>~7ebSbT
zeKYI^@mq9Tb`pAmPb~t28`Au2H}qOI(M9kl_>~Skj%BckYXg<OAIy^&vq=(OP>mRM
zQBFI|PpU%jPP^MeCdWMK*@`%urtUf&0A|$J^Ht^**rIQn5bPO($@&wrHbhsqu`s!t
z6=eSxYH}%+5S`0IRmJ0{E&6V0Qo8Vn&yM>}6B=WO<T@7MI;!5EHdi0k9VPUo9}F3I
z8$*q4wWX<aT394SEv_L!WMG-sw-6SW!+=>^ud)s?+R<<&vOvyFN*I7^Rl)63X9H0c
z|FB1M3N^b?q>10&E2(T8*plN=Pwvnl`5uA5^te9X==9%;3B-Vv?}1S6x*G+}e<0M&
zmKxV4jM9&#-U@2L>D>z^&%PwtAX=@Z(0?-bl!K5$@@|t;%=n!eE13Zi8M$CmIh#NH
zz`19kK^D(BV95ZO#<T3@PoV*wVUIk2-fqX(?2ibUHh2Uf^FAx2|Ib+<cTk|L`-oS(
zn&BTM*n7Ou4Mq&mSjF{8K&_V78}*8&TUfnMk7K!pVbvuFYepqHb#X(}L?mw^7N_L`
z4QMZj5U`syovoDzoRXFXl=G6;J2(C<oWOQ6q?51}(@`p4I4dU0fr-iUc&jJnT4`oW
zRt20g3J^~eP5iEU{~QU6^iJ-55+DJiX}iS56&;$J)n`nINkk!O6Uf&fX41UgNzxEx
z30ix``jsc3hoei3j!v9rID@$EvByF$38+}Y>+6YR2%8Dp76*cSExo%+01Lx%$j|om
z&#_?$PzPSi77}8tb^*B86Me}fx}N-Ps3@kqik;V5efo;dS!1Gon@vD?(Q!l#F@mOr
zP9Ym+F;#gA=Yj{Y>dauI7%A<%#Zu0J4R6f7#yY}5;yh8v!z&cnYYCU7)3#muy}UIu
z$hyyi3{qP{t+dcr#Iv|n$V$N$;VXNfB>zBRuFj996DHM|1bmd4cPpR~PAt!;e&dkH
z{lE2?D%Y+4M0HsEfZc*t`IcZgMA`~yF6>>+(Y|0;7QIhXaPy?;j}*eVF0{Qk=@zDn
zNL`^!IWy|FFb1g((l^nZc8}!r3#xKVEgLN$9F{-W-HmMi*jHd7&@gOTmJMGuW}V;1
zf^X)UDBh7Qj%*@^Eh_d7)EOyY(nUS^LUyxT0=MkVfJ>`cE1g3Ke+4CJuoM8<6F7~1
z=>zdP&*BNrWa9mfe;mmx{aFGH(JvM0A-3~Mh<V1Zrr_)(qP1~Ns6re3eymIu(f>Z2
zTt7li%b7zE#*d%+PDRRNXl(wPBb@KQS>h;HnX)m<t`|;0QH5obl2oI@&WkANceYWU
znRxe3dGkB6w>iS4W-Ub%nfe7@+U&g<gQP*0+BD;NXBDHx>Z(DOXwLQqj$lNn4C`R^
zK%SUNJ$AU|p#y%I+6s$$Oe!4FbJ9)l7dbBi+$vv)+wZ%U+S8$~SrfGZM5x?yd89lY
zZ~>jb+(Nri8X;h6z%f^-`@UbcdX+27Oi>_+Dpgb>%OQG=szR^Ph6Q9gkE3$n%CP}4
z;So|X8R03sLCIADQ+N8X&o+&wB-^v@fO16It<G)5h}wFr{yzqH&_QHff#x*AO}@jc
zHMK!|0Lb`_ES-gxIl$Q5nGHhpQ}(kA9HA~z*cuC4;-$x;FY(EY+Q*(BeyuAl<po|7
z!Dt)q#A~&@iu8<#LfpE7a7p0`o&5CJ%e-A5)X>}U7sl}Kn|N~fD6H^PM@QQA$FFD&
zIit-%k?3{l@pA+{lsEh)6>{1we|O^LtLe#KDQ!I0TjBgktGAxQG@-$P@QTubt)JqH
zGR`kr&;OFvIpdk!o1tZc;PTQwybs2X<k&YtWE41d9>-E@ahL+7Oz-d8Gt{U`=)^z&
zPN^RU8-N0ndMTga9kFXy9cpokh2LjPLwRAeBB;DoLojSWO6PApzE+-8s~ji|r+gF!
z>xmV+jOgPjq6F?ZfZV?lwSWUN9=__3?Mp@4O-2?a0|_1KJfrV&%Wg7?2-)sG9V*%%
z0^NtmdyOD}(8j5McK9=voM79g<>dkYj`M0czk9ywvJ|dw>3+N#q>sc#I|$hX$Gy;3
zP51sZ+$XAy_vU9GX8lq2rClDGTFphHgy<?nZfr4M3)|<U&ak85W#GC?=8mDTq&dm0
z%IuwO1`_E<{6KzpuT2p+HP^vXvm9S&EIo&O(ym2Eokr+3n`%;u5PIdqmk{z>q1`U6
zc@Eg$S-iHHUM<s^ph}BYKl>X?O0L9@@s+aY8O&>C3+L{`{Ej=wPBe8!4{UEIa?kQS
zX{l0y>#KvLVWPs4`H(X`obf>&lwsuGl!Pwx!9?G8Lru9IECXx3S9RyCIr&;hv5R+&
zVC(yq{lZ_DTp<-Cu!|2k3|48jt!}*fTjb~yp;W)d(c2~l*Mcm`={RHue{mQI_0SVa
zL=I_wRBJFTfBv1SE}xc2@;;a<4z9arXhLYfatPCGfqf$nP)I@%ccggRL@xd;0CBgj
zyrOtl0QaKu^ReTyqEV9fYI#`{{NZYgJ_Osv`YLE*>t---kb8ygqC{YcbheF+gQE9K
zPICgIX8e4dfi*>FB;_fZ&fK90bkBDw1*(vG=BARH0oC*7FLD_(0{IAz%gppj(z%(S
z@lRyLHINVgChJt^_|KLg?-c#E-mzQyn4Hl~issr`9>QTmSKKSGs1o^@!G4O_f9Da5
z?07y1*<bd=#5xlg9}TxE`D|x6z+!7*)V|<V+C828UqqD{>J*OLN*+xbh%K*gh*!)2
zAu5<HU#Lf(OA<_;kN#j163~L7a6l_LaN+U>|40qh<R_X^Fe{9kD&tz+^Lv-9<W#zO
zz*8kZc@hqpI^e}|2eW?`A_=Iv%;RCg1YMavuq#k<+?U~97Z>VgMOB$jYH3_e;Az$p
z`H})L=E14dWDC3MnN()7bcn9MGD>zw-=P{lti{nY^&PL`ezu=nsbwY(38Gxk3#tH#
z!Z5WyLR7li4ay?n@+an_CxsJ}>a^k=n4CfeZbDepnjyx<XMX4H6_48!MCLWdk>4+|
zBK#)H43h}0guuug?mCnh*lvVP5A38`=4=nzSnNs$<1_&I;*z|ji}$zR`i83nZyOr_
z07gl6e)SYcAMw$u?3UddEJH~U+nwXyYb5UzHZC%1<Ul#X+B#6*F{$T|cGz%j{ws1a
z#Skk>`-A5izGbT3KbLAl(Arp^OFV|#ylh`z61U*p!6n0l*9)F){=S58;UiD~vVZq8
z2&?Fkw!Gnj_{vXN#`$*Tip!+%R4twD;GG3q1`$kn|LA7jj=FyWF6N*lH4;_N9J+cM
zbheho6G&?Dig2c73=cwRn7ExXp7gP*nRP<R^z;!V?JtPEdm@a|Ex+~?x)6J>Wq>2Z
zmKs@!v06f!Iv4jMw@uy~E$f>g?Zj0Tq2W&mBvmttV<_K~QLg5+)7!aYmK1Dh6o1+N
zaMCq|I8wk>`E(kz!{A}u30%TO{*&Nkf|8!$-eI$Njb;r9h7kzN`7URvSPA-!;1jf)
zrr7H{fjkP#x@E}y0$jK=f}XOAf??j34bIgG4t4Ee{MF%Ykq4M>8{o4Yn`$5|<?)oC
z{D}t_+CwF7A>5`LnPw|8?7p8|E9(8qZ+*6hIj=miN;uJ)0lB8XS=ZS{5G*xi{fFpu
z>3>f8KIMUmH29c1Bd^Ibd4y(3awdf9HUXB<sRiBf4EX<cd*jNzxv&B23T-M4w>kG@
ziqmL=`X2uU$cpf`4saC<aK)~5@A^>@Ewq9vPPEzJ5W2=^E-Io3%7eS<ZlbB!-thL~
zi<kQPvJfHGYDspDvwq$|9I?;S1#%@$4ULsX-hUX2xCz@s;;9v>jRLJ-WSD@1JYl?e
zEfUKAt=f6E&?+Mgyg-0=fLb^1GcdayNOnRkpvFRJxfFo-d4iOunM!HNgO1v-Fi<$o
zdU~R1&n6CqmrIvZNB1N|TR@jtE-3mE8vhHkzEcCH=ZIlsQlZhS1W~52_jVu2YiWr!
zY$VyPbI%Q)z51E)_p)t{Tjl7{BpFVA9*T+tNJFe&Px{+YNOz<2VGcw-VBUiK|G<%=
zv`tUn^ZYXDJvNR_=3;@z_$`N$<{N#yXh>N8nH4|R6SFD!*57SBL%_nO^#bPUsOILZ
z!Xuz=LjmxP+lTLXFZI>xvVYiQ&6kM_;LQTBZERfwu2H7Y?{opO4B~VK<c7<M33|AF
z&dMI{`=s=gRA!e@i4{h$t3q<)6*xj}OXXc!`U){#CK$J#N*AQGMTXJI=1!5HR9A;^
zo|z}DyT#)kXPSVa?Fmi0eslaO!Z=XjbD`xt8XB|biOvU%JVAY%#br*dhf{(JD4k4%
z*xw4Y7KCbWr<CLfrL+s+jq^*ApTQP`9fpG+PgVx@0OVR@Q18=vaZrWFa$M?k1?Q*H
z%!_)q?c}Y7@C(zanqzGugHOPCrLVY`kb!{%q_SOD6eUz0CBUM-KL7_~pE}b+i@0wn
zt}n_Bv^jMtzgmFaSU=!(G`}_3wqKSGSNBy~&Hi1@)bS7%IkKbNh~@7lbnWS=pLpJr
zz+oRJCF=6ZYNQ5+f0%njZ%x<WtD!~HFFySy<+rMvzqCq!^<AN9g?8-$(+2cdQE7{8
zKp!q-2#)hkm_U&dW2Nm_`_i0OGFe)`!WQ_SuZ>vJ2>y^SnZN*axXbDu;MyMp`+{Jk
zW%QE=`q>~|T^m2gQ6w@#s8z>5&d8UlOE(c|i7H;m^VmlucBA_M;9PtmL$cwFS4#GM
zx2$Y~FHO^qTK<yS*$b0XGeEyHsJ<^E*uo5N9>3pkaj>H!^~p+WPkJkPJRQ{5#@Gu?
zyY-?u6b%(d08<6ZvlpD_6O%E_*53wqScQH(DQ<)qfiBp+IHFT2now{;*N!IUCGAr%
zr#@J+3^+J0*9hciCo0>a_7w~cdm4jO9G(&WyXVlm&XybYd5BNGG<phq#udG6_`<X9
zm{nG)eia;xg^(D`+lHZuAj00WRt@QVMPdi2N*s-}q?XJTEYys_CU#WMgC$i~OnmZ(
zVS&95*}(#RLv(pxJAp+G8}r_Wo@k3KUSguQwmpt?L!UA)z7U_!d=ct&fR)%Q`OdS3
znZl$h9hv!)HW*0sedcpC0OfU%W^VA9Q~)ZYsNs1?qS5ic;Yd3pPlD>bw~Hcbu!aC=
zl*RlmScN2*hOQ9Il#zv6==3IWZDZM=@x=P)=b@PMOyPTV7Q!E$XIj+38CTzIm~o$E
zBvy6EWL3;)q<xK6IQCkcshtMIYol8I&Xkwn+Tkc(BOb1h#2I*}LuaNnN3&y}Qj_@Q
zID%IzxNeQhz-HS6YgoPq)A+t8@Lv3uk?+&HRA7_?ZHI*1yv8@;QU+-g@{dUHQd#ns
zySBsl8YJD?oYHnkPBB9G1ALmI%Y@WRzfbQLtUX&&^Hl<;!s{qAf4Vdo?{d?gYJ6x+
zW6lhbN?@l`A`?Dfb{_EX%yGoW39ui5xur*FMqIEqj3_2yY!$E#!2GzSW*nqx#w0E4
zd43zF*OgP!_PH0<6xSIU4*F+r`EEZ_iKxp5r*N&M{#wIpah;wLQFor7Y0Dk5M`*h8
zW02BpA2AAj+R3?N_>rm0v;xykaMgUgS6s<1xW(eafAEMNdJB5I29;IOOhkxLsR>}@
z$K3Nk$cc~Gz6m>P#&ce0UCwWX{kCWMTSKAM*2A(93Z3i|Wmx9tZ7D&qWZvBz!<CRu
zG7pq9RW5t`t-_*3zry01#~7RP0i$^+!ir6>{XkIP6H(&BUI{C4+$AM3(GMCl>QaTq
z(l6r@Tk21qY`+sxWQ)kaVzlGyHy@tAvI3l>hmRtbfb_s*<UzusT7#XS2)q$BHkbp=
zS-1+J`Qvgr9&DEn@L4tP+{rS=rN1}R{53yXm4=J+IF6#E@0z9R=jJJyhvnFYvDuzm
zKx6v@MWN`whRT-EY`&8rIRv<wj%Bektq<Q9E^@PZzZ~hP4d5b!=IrVG*>r+@b@ERx
zrAs5h1_IjAk~0$>dCww)_I1MAorRvOSgrl#oYW(BKf61bLY+)608{u$`Hcyr0Z}!@
zL()ie8iZV92;PLEgwq!rfK3MotYhs(=95wCkgkavyIogS`BJ>|A20+19VwBh6QXHk
zW2=4-hM)8Bu@zl8933vkv-NNrPr;fRt9@C3lTQr4=vE15+S8%>6UK<<Z1^MFsI-)Z
zBRJ1&3R!BBSW%3?Be$^oBl5YN(oKg=UV&HH+;8Iyfwe>cTj_Kux)nG3XMKdnwmg{h
zoRA*t!gO!tzQsUDT0MA=Cz&`_w^Tr$%Imz?@E<Sjvpbnf6Y5W`-9R6Wt4W7AEYaPJ
zngTfK6Xd$hPPYrGR(E6*YKdEQ4T-#!h{-UqyMD$Psly#U6+64%rr$t6`~oaQvakPt
zCfMi(LOS5+0*5D!y*>Ca1gHM#bQfPs;@>e7^m6$u>R=EeDm+#N4j<zejJk(?Y=5Q0
zg@LC-t6+-r$(sNg9Zq%G0o)Bu5lRxDzGJ9;BNzh85u;e-*~RMv*xm16r#hiG=(s%Y
zlT?uZBL1Z70h$*9o1>~fk(o$m*;+B15O<V>>MUQVs5ryk86FHe8QnL&sc{*xqePhe
zz<@><wAvIPi|{JDqZ*}NK=y(G1qqgJrfQ=d$FgLKpgFmUB3tHqXo}rNz!x+{rr4C9
zlKOP~W>+7r+0UH<P^E6;qGA%RCgLOOccuBvvY&=jZM?C`K%Q5B;pBQ;dI(6R7PoF{
zV73{t0?-T81UJ3v%~PfPe}LhER^FEDwn9m`_dS^ZVN;o{e{5oqg{4$4LyrMu*|#v8
zuwfVKu)eJXT$WTuqg0xI-_1X}I;6<5w!o$_;kltG!dwgf3Xa7H?N=Rw0y2sh#h#m5
z_4}5Gv6WF|w0Anp+5=ll^A?zy)<y`#_EfTaw-K0U9t}K6KIjyz`HoQHY#Gr8UAJk4
z$998))WF+=xFB5etH@@CMDkr+<(c+nP!#~>EKZ{7SbV?SRd1ci8}w$Z?pEr4D;xp+
z7+AX7eZm8Qstl4gz500L<L`P9`tZSHlpGv=;>;_T@baoF8VIqf6ZxQ9h=8UyVQ2Jj
z>!8Du%wxmDPyRkz1$Hx%Mdmb!9S{O9Vri6i#1b)6!;H=wfng^P!De9gvqs3uI5OAH
z9=#_>u2fptnPL|F3)Mn@#-Z_p;&IBThz>JV|0k447h2u`x3qmtRHR|6f8SS{{oJ`-
zKCXP>;@Xb4LK2Cf-l!?K3sf#8(tZT;uNOKaauFizCe^b+W__~B;&r9SPY4v7@^h`J
zG@mugtKg~WD!EagtkASU??w4BYrm`E#bS^;P-2>!si0pVG4r~Ju9jup7*NA0kAaAc
z@wsX;x%Miss)<N!QX7e4uT0~Jg$cE_ODp~!s!|dT-ncOfx$p+w=JLwzCn|7SlH9L`
zbAbLRb)LcfEy!j@kn_6xFsmUqV_wQ(PDN<wd#6WO>%;JrGBVF4bJxrVI6S@|AV}{g
z&;b|yD@Ub6bx-rhny48a5(9m)Wa9Pdtu~KqLgk^d&_K=9oSZ~RopQcm!qQ;r4Y%{`
zv%_mIy^9YDD`TGH1t*_bl4xurdA1MnUxDgR9GP{?EyRasfF-izs{NWL{Xn<Rm;KPb
zyr&6CcxzoE@=as-*Dc^clOK9a<nW&*E#{I)1q@vJYoIm8M0L@qWvd*$6)3$~?ccJf
zIQ7zp<`qWZ5Am%&*weQcj|*#vn@=%RU}yY9olAXdO1_V=8SbnQ9&UqkMfhFnIOb!P
zyFcdPu<S%B2qCq}dLb4H<w~mAyFH|5S)nEfzhgM)PtNA6uxNJH;N&RdmU6a5AIyVW
z`+o<}$I}Q&FI@cbRtF5tHj+Wl$MB|hrUsiq-kClQ>PR)hXiNYt)=mB8wiv)OO*CjI
ziOBo$ouo5I&hy-OWb81v*_WlfPOBYEPoR?IKa)V;B^2?LbC(hMf6{|N6IFi_g7A9>
zc5xv|w0{h)$4&D##w_4!?W%|QT1=`c-0PK<yaE)7@L^$>Bgjd&Yk@u;ivY|Q-}Z8~
zWMl}}siW_Tvm4XIV`GYk+9jP-QMGK;=)?aix%84-%w_J>3GEZ!h_G+KuDdbssni=b
z>k9B*RqA<JTo|IVV)5}mdk4dh!|?2e347z`Tfe?XDjU?~$Qr4}PfuLy%x*FHdUPuO
zfm@=M6uCwA1t=mD)f{FBR8kQa`e{))I8UNF4u7pi<kbZx{BNqPZtQxE$&YMjp`5Ub
ziz9OTD%$=ryPZCe2>f~zV!npxHupV&pYQY{cauR0D$iRdGtc@=NIe(<3k~4RKJz+e
zB5=tOC{-i5`d}IOk7+IFy?=bzOC^>#4FJAh!Eyv3Xwa(RA0IU%ICa}b85Z>c9ouE0
z|AuEwblY}BT02=PuPE;pnM-2aJlIj=fw*O(?=X-T9NU?=%#kCE`=~QcHup^7S@g)V
z{QZ+G6{47$lGBv&`!I5p5h{=h2g62Ce(f&`u-3%TjZG1iV~J?3WI4N&Ql}erXN2l*
z`_;0>aQj9BHsw3@2zc@!CmV1K7n)ltpk7{XQIJ?)unZw4dVc?WCP%OjE$W6!n2_us
z{4Wi6<=ma=IdP_|7fE9qltO~Y0XzDr>Zq|<=kE3BtklP0Cs01Jt=?D$aqNvkT$H(8
zwweAhUQMgkj%)R(^$8yj;~NHwBtzseP@)}eXac3G!pJTs88O};`am?HlY|9z#~u}(
zu>{!7<!Dg+Z{%3TwlT`OxezB+ir!)zf6b|5FP3052ibJu0>`v5Hy@kU^X+?A96Cm|
zVfHbv*O_QwPphU+h_~if;yd!^e<l}ITMzOBO_5*z&NR|rTjCBRfL^L`(wz;Z5z+dv
z!**cfz-{XFK;-BjMc~F-J}RofeH`IEzFm_bkQlW#qw7<!qTC6oF+bSJ)3zsqn`U~5
zrf#8A%aaRQa*j_hh~{&4etUWk$jYl?36r%m?Z2X;F(J=hNAiOBN!K=oA6~70)5D#f
zofIT+f>v5bxrG1mgWjccsqgD^tiTmn3K98q^h_U6=d;6Lm;&l`csb4KkbUQo|AL|N
zb0v57;`1;TKZaR7OanQswTvtHb|C~&w0BM(@K@<+OS<RwnRF+2+1CqS=gh<inLrJj
zv$HPR2TEMxQ*s#j=XUoFl|#<;OAGNLfm&+9l)!@o@*S}7bw%d@vr_n@Tz@Jb8vEf=
zTSdTbf{>xGIW*d?zugAMWn}cqsQTEk<tZrDRQ<J^Qbd2?sZM^H=I=xd04vy2jNZ#-
z8l>tpQ6M8!9Oe|GIywt)56xRwxNsy(w3Z?{2q{d|MtbAg9ZBJ*D)@!>@;J*yB+bTq
zh0=_>tG-ir-`&b6w(%)kudAEv7tuFGrATeY<+o22!%_zDxb>Nfz79b}SL3sM#)+4J
ztJi>wnYXk4!g^1=BH_->bQqH`{s@%Z@9hAf$X{O3-%kpc;>6$wZdyzlVPrlcKEHE!
zTYs3^U_8!LcQo7VM`v!bLHs^^#SK);`t;~};)-k^sG^jGyi<lP*_iu%!AZZjU#L!P
zZ1%$YB>ZLMz8aBYBDm{{FcQc?L-X{mdu3C9|4p{!vm|@u)R16JKre3-ffrQ}blR1T
z!AmI0isz)4%|OhgVHtwF3l90mD0u4_1D?y5VM;RHy<gDeSEXWUpU!vN+^fzO8@?1G
zdc#d*gP22X`TF1MB)i-SzklPLDRR_h|1+TNky_`9WXmefU=@jo%xTPpVeNKLskb)<
zS|Vd}K7DeyJMn>X@$pZLhID55Mqe2t<m#ox(=lI>?k2DrokF?V^GOYf31USPIKS@K
zl99YsL9`!-42wNv4i@uP0l06~eLQ~S7nNdrW*q$8^xlM-AqpfEfyY8g`5={wCFCj0
zxE~Y<#$k^IgD}X_IuB*9i)o~|@PS5YD+jm$W!_IzV61->VTwvlp@W$(KZ;AcTG%IT
zZcVZkSbmF!0F@X01~<ItWIg+3u^b*vPq~ln2s;1PB+=^zBW*`*-EbXCs9z1+07NX^
z`VS+fpn@ptskN2PPK;=XuACB_+U^CihY%$E5WG;#;954H)-S7<skL{?kZM?ScjG*T
zWU3n;7zU|l;6M#zZqysG18pau|ImzEyG6?_drA>-N!^Y<$&11&PN!m~u%hm3!;N=?
z*2>w&bF<g#!gQs3-TR_jcn}%JywYB$n62^e#qNldiCGYrP5+SVUaDQ%ekR2h7OqP_
zCAuM9ECkp}5R#vXPBckGAM*k#ddmm99HB!|ydD5%$ZXOe@?^FDEsXjy@<L23G-_SA
z;&WJf6=BOC2#Sq$Ti}<qDH*<aAiig28NznOHvX$<^TXx3PD*9ck7AA6#m&W20NN~0
zVX_QYysTQ<r1^cC<_a_fqk9%gEiMEzjP=$|Rr_%_0+>~?h!CiNHm~w4=FrIp{l1M#
z>wlMCNUetG@oF444l%XAw~)8yxMmL;#uvom315o-W4parB<1y$cOJ~K*`R%>^jNGP
z35p_Gzw!3!uE)pc>p-ma6XMnpanxo-oD+x(*`9h+Ui*tFpCf*vd(jA9+V691?-z}F
zJuhzX`Hr{9m;_E3tO{3n7(QON31l85lLqx^5<7Q#F0d0k229<lINbK!B@_zkH17q-
zJ`&HI=cLFeZ!_19!V9vfV&hLds!35~6T~niK}UEx+|8Tt;*3-jru-`kjIVt)R!N`&
zVHBq8ipDL8Y}s3V1p|1gVT8ur>;(BN8dKHg-fhA6r~KX>avv-pA~_njDYrQiD4|4n
z0M-ORx%0~52D5wSvJBKb<J0?hAD*u8H`ZDWwn|EEEBCKW_X(ZJ&O-2#NqgloQ6v;;
z$O5VL_}PgTFwq+l0+03zJ9#>yzRLR)U|$b`7e&Q$Y-SFeN1s4S2jhOcD>{L=;aox@
zt_J?1vFQm7AT?SI;Hb9mmX_bc%j;ijCyezf`e!Ft??3*zwi7b_Dw0bi+ZR4JZDFqI
zqJmspqa!x`^4!5vzhrvfI0t_<KWkqwv4JzQI3K{fn$)(gk}Sgu#j*@W_rTJ2SOyoT
zGJ>Okrqm~dq}?p2UJ9`+XDKXu2VAh-DM?)gN*s{)k$=6f0R-{fKMhLMOP;M(YYN4i
zumLb5I~U`8o|AiL5Zl<!%g?1$K6IV8cCVqUNOxd$Yt>=N4%ha*H~(;Twah@XfW_n5
zDd%|x?j5-zr*VAa2+nuP1&k-(>w-hq{z>7@*xwIIMuft|MeP!S9e#_A2Bd`cdIpx3
z3d=Y{MuPD;(9bVY2l_);nbuWqM~O<h?~QTI_=Q=Iwe#G9%d)RQ0Io(DIk<K$XEP*U
z8q=%d{J=4hukE1Wu_Cw!thoO?<~ACTW%k?_m-Mdi8X}rsXel@$YUNTc%)}O-;tyA~
zaxNAm-rKt)%%<WjYKCd^cX~%yj&^`7u!us*&mzw$GJ|EZsHahX7Beg66n9irMt}k4
zG3Lq<<gLpZ0UabeydwXrxebzTi{2AJp;#+~QD{^y-VB&0YG0Y_1CQX8SLYAJ?7LUp
zd5asg^yes|RhY=ikSy5WkBKtu%!K`d>T%832->cVqwQ|rg!%1Cwl1`bqs8EIYEnd7
zpsiX4gFF+07d-Ep)A?1q#m{H?nQQJAh?zB3^5;?@#Z~h$dU7`92hbb2#wN>7xaFqn
zOji;J>gr-AcRQ`G!QfgBe8LifE0mhC@nCDKYSY-=U5of<UmpuLu*awZ?l-wQT}ci-
z0bkDa6tLA-b5i$i2=$Yt+d4jcOZNkRxw@($v^A&bGOBcsMruAy=oscrI+WCY@KrSF
zH=gA`BX%$oLk6qkLN{CnvM<Fh6QnOV6>w)cx?l^$+H_G>0TQ7dglQ^_A9AFxB3v7*
z1yYJcoPl&i(OhI-A|6&sMT1GDoQ4OJ#VF9wmw5w?3elCaQyc3%{S&S;rzH-NeDpV0
zWt`d=oA6?!xanTPnQ!h3^2@X9o&PK;=D!Pml83YyHVmT8q%MJ^zT4gtk+BO}`Lrv^
zL58TRbLt>~J{j0*diB%<dMX;UpUXe?IE~Maad{IFdz}oILhu@Ptxp7*R8+_7eEI%e
z>$<+{@qP}x*WdHQ;IKo%6KO|))?7dz51cX`rlxm9mDnVf0-fzH1IE>FfB|U3m34?O
zFOYVkz>oFR4L-1Z$nLg5qT>&<cSE<lVDHaTa9M1?U+58p*CQthe4bUqTc>WyZ47SF
zr1LgQ+kJqGCJM*^0PMC!rSVYayyleEg#xw6QI+%RowD&Xdd^|c)h1nxB!IY{dW>`2
zUVR^@9{XDdM6{{l3YX=gkW`{4%;*T~e4KJ?7--C!&pAyT@d%8$@1Jk}lVM*ibHbR3
z({jAra9Lr%?-ePa$XT)<(F(orLv!?tYR{oRJQL^)AtQK0jQF7PTCz_akzRkYS@A&c
z5MEy>l#R=-MGCHfk-&Ty>V8W@p>n2_`NlB-=<fri1s7+nefUoc<RTy#*-kSK6xV6r
zBcyKgw($D;>|3%0M=jNmq$1X|)gC0+gi^cNV(&L;*3ls|hZ(njkiw+-YV(4$bQ_PW
z|3LdVO#_OWWCXl2-m|pK@$(}~<^-<g9lGG=M?_&?r;BoB4a1Mmt$FI{HFP&M&gH$L
zVfvgS4F#sVB}1ASwDjyxa%NkotZ)ut?Vg+Z&A(&Gf(yeKt$ePh$ByzDnij^2EnKUJ
z2Ic~Q3kN~<zWj4$1PwPfWNzEWpv|+LCsyz`IgClI?gn<g;7;8{37erJ=&Ri{|5}s2
zERJ`PI7-L4swu;5P9|;IBWVxICFNr@3mjFdmp0Z^HLlk##R-&|iBp{t1qmHTvU{s!
z7n^z{q|2!>uw<;Da!yLGB-GYA#K_d??KJ%CTzksmD*ZS^iwwBe{kw=yrOp81REtFr
zmHG6h^@Ypey_bS7l%<(@0DMS<$SvhRI$iBN%RJ3&>+S(N&1Q8SH+_(6=k3uOy480F
zD8*Uy5;CYu!sb0E%$FaMJSM^tF%s5#2=}k`Oh%>+a_w<2rrv@D%tDBs3{~ays6Sl=
z!juZUB0#7Fy-|g+VxbmKY;}`GckD96dRN-{_z}64mCc?C+#H#{tcCSrs6aMJy7npl
z9Tmz}XYCcS%QFch9mDSkk2C?DY&Ic!&AIkI@qt8c*0z=*!sz6e{keNT%E@DeasEqJ
zxqS4*+#v#|VJYR!b99%p3(bY3g=&SqKt!Tp=~kZT+6Db<Fx(3(zQLAhKaI-gLLSQD
zS2@xEgeei!u+{S+`$OI(NfS4sLM3^0$bbzvw?b4zPXWrDiu(SMF5~42(vnH`%_Z{{
zyQe;pmS3a*Rk@(>OwMSGTRG`oKvHHDTX-PKy+aV-^y<%aRylTghdSyIbxy1~ycU0&
z1g!6=y&K!TMsaME_(}*QlLE!VD=D>(V0zu#tq`7O1XOKDrYB45>T?Lxgz+6~s&;QN
z6$!80`E5CB{YN^l@CdWci02MaZxFnWQPg!f+9@TXiKj)8L}yVa7mC89gg%TJ7jHWP
z%Zb{Y-v#fTS9A5rPg^prhA=13QQkXvP)VT|Cue;sGb&b7>$^=ef*YLXPmn{=XKlOm
z2>C_)<g2B?Hc%8v|JOO$=oz0#zWHdEQ%r9KYE`i+_cJWSvWX{dziRoS20tG^q1Eib
zGYADc9`E_{$Uxm8VpkT<cR#Q!g!ij}qUce99b&D&*W4#wx%0S?>43tnHYn;G^@>VH
z7?u|6in_fT?R?{Qr&dz?RrqUrs}nH`$gs_#Wz%#mF@XK=AIW<(?wP-<$IfsHkBcZ&
zZi=U9DeHC@7E>TXn=?~GseFuLDk<n^2e*iQgv-B!c6a?qcECrhrQ&h|ilf-un+>Fz
z+0}#zKLt=bgI^NnNOSM&%NeU#?;0%S=|~P)0-*4)5Mb%7gzfK}b5Rz?TUftxjYuL4
zW-pw+gHJJJ*()uMKpq;jb2+ye4)DOuGi&QPpYuLNeOJg(+nZ*OT&uoH<^tEZN|qt|
z_EK+4P<ht_DO{t>4V~V?M-KcgihrQjgbe<~pztnCSfqyxh%xzK4R4#B9ASXOO_$+=
z+%H1$&(pf&HBT>rL@4q<c>Z2B7ao&s%RYx89VqM7&94E&G0Ej5?uG6`II|`E`#VUu
zl{0ha#FjFdCUv&&O?R^+UzuNKu+bPX#!{r7$rudCKyePuoP4z~0G(;hLE{H<8HhON
zc_7MR<p;hC)2nzfK78Zf78<NB1yAz6g2ddUTc<h{=ZQ3*{629vYgZbI1M6Jq`Ika<
zInug`vh@WuzhIf4M88o#WE#YgyhA}oH<?}DbgST16j?RsDlUXdh%FGZ1XGh$C&UbH
z#1L}+!G~3Q0wD)QK03@gl=LZTBN|!0eb+|)ucsREfV)ICsMom|x0-16SiEZOSZBW~
zST+Y-PG;Z_q4!QuaFoZy0PRQ?r=nDj887M0X<(+d7o%ZwvZL6f>8jE;9>U|<EkQ%(
z9YgO`A|rGU>YGH1Tn({w>W`p|*}e(lvHI>iY(^kw1rw;&MQBK_FaPpC4K<mf<BxV`
z{lXUQe!HZNXG}OCI2iz11i+Z2SM=jnklRjlM$Mz;-I;$Z`{16;NttYdAkg6(0INtf
zIgIZrzDLQ~MphM~=>Wj_;l7J6XR-)fiT71?tbku@e3^**V+Z}KH$JUu2D~%gBgP?T
zAf|LVpXIZpY}6~F)=tr&)c>B(Z35ywHoC#3^u7oWTX~=fZyi*|Wcutq{-pCfkYUq@
zZTHg~^w|zXQP;+rTNKsA0mK*DViTH|S3lktWC=(NDLz02QVzkI@Y|c6skM)J=WO5p
ziOwD8Jlu8`cfpbW4>M$K`m=~-enb|Cy9)tZDI_}Ktl1MK6lX~87ULyO*b9!)&7RRO
zS&k<5;>;EoA;5NaBbGNqR(SbVeaKE+&R`n94aj0acIs;6h?nijT;LiG<Wfj%=lOe|
zTcz(gJWj(1yGyY1pKUX6xrtyD!7QJ%)Q3&_)9AF<c=jSVoh<w4k@ET(k-Q`|m=?YW
zwC>k);_nj%Jf0k^L1NW>e(WFJ!-jY1ruzBFL}~i8d^~)(ZL@wK()`{JmgR7B3yxc5
zZwqj5p6)-FPPB2r`n^mSyo4X(hs&hlT{ZGEh**fq!xHJGXuKn*86F3IYf2pC=M+ko
za9X52UN0k2t2zzH|A)*6mb3ZBnBK0kf1(>bA?>zB2P~Y-Lso!AL3r)tI-IsjZ*oRX
zMg0A?)Im_5YH$OlpJ@T(AjihvET&jEaMKa9@HgiRsW7$^4-OgeQNKD|v7M#EL{Q#z
zM8h5g&DHwCNE22*;Jhb98X$XU)P1EYX)g`7YIYbb=#L@Ph}lwBMd)+1F3czkWdWYt
z@UQ~*I)v2Z=?b8AjwTg#yPRCa(9IHQH0Q%vRvt4Ru?Y?=A#Ghe0Cx_}p1K4^Vzu@I
zTzw$xTtcZ68M>J`!UiX<>mE;_*^$+Fbro~3by^PT?}K*FM%u$Pau5Usc~Sc#BVG0C
z%rCiPp2H(HG$<0DEv>v=x7Jm@VfpoPE$a=y28_fvOJcuTJ5DVG3|MQ{PmN>YOI!fW
zW8<&H4yJBa>K6X|`ZNzY`d!fl`@fpt!^Q-GYe;O_ZdzL9+9?MI+rSlx->iWdoiP33
z&RRP-3`7OZc^~RcuaJi}bkZ1C;b9i%AGA}0H>_$X6PuBUvt>RCte5pdUM@-aLTevU
zHMqQv?NvNyPE^ds=$dPjnCqW|v86HT%Tqy$9T35{30*uBTxCp$Nw&m@I58OpP@3^a
z44~}xTO5^eYqjb1Ua=%Qd=LOo1-U`Lw5F8ZZ(aIsI~P)K(&4j_8n#Gt<xRzEOpq_!
zaID+fgd~EBos_ViNDU}5y%C++WbkW*L^yf(fEs+z1U?|=(Q^|y;dm)*cuzT{3^4&8
z@vkB<Y<99k9sWu_Pv(nPS9qXn_6)M8(iK|rh_@4RGbSeS$G>=d8yw1!Iko@y0_f9l
z9`rjMaIxbpeoN4ptUf|FTecLMw8Rs^^(3fF<pXqXhD|Hf4pH?4nvXbss?`z%^M!t-
z1r5c><$EfNEojQnp}t?=I)AWN5&wAQr)N8{L_=idEbq#S;%{`ET-Kr6T1@<j&g5H~
z$_u1XjOVsMgY;fSA4v;024EnX^(v)EfQB1N6q9XzFQN`BdBei;fZm!WPC^DX6Jx;5
zbqh7PZ6yB-&lgVm=X{#iUXj&;&iL*vWu0dw2e|s?f>mgO%R;?ra(Aj06>1nZkk5}R
zmv4kHo~X-X<gt`-3<_<wGkKzKIxV8jPRz7v-L%n?8cys3vQNMErjb0!jqEAjy1b|d
z1?-LM^A2Y4{TQ+3WL7-PO>EOXD9qv(SB_&ovuD&;g$YG$Mr$x32esw|01*A&uzdlo
zY;P19b6SG7CKAfm%1GNIID`RUC<i3X$}<cTx4~oAQMEzxk$DL0cK{yfHraDLM|G!R
z@5*~%GwBQrl1;|NJwm~2KO%_`j%uDXc}q^*oK)fnjoXa3WHS7?gSEgl4q5L@`xJE%
z!1Wz}8NBNA>}EUNXG*=zaMD&qE-H?2rcd-s8T6aMG)3qF8`c>w#^FWyEv^GM7TEMV
z8{ZJvZPTdf9%9VN+6Jb|v*v|XuNd|^jrHaFKV|V3_binusXCKFcXS3zN;4*&z032~
z1AAevQ`pk2HAXqd^;V9vQ2h19x5u;S2bUlC%rM`2@{xwgEl2vm{F$QUUEzMEQ&H`h
z;zic}R^xm&x*vi^orr=9xkzK6XKphjmu{6!z@mli+}^x3nqu`@DW0CcDJ5&8%GxcZ
zAodRZr^`bm!@FRAc;LQ!o|~iXeCJG0z?n9!0ja~7{SSvlb8G5g7~k|6?jv7+!!a%F
ze2Cw%BdJ0eA9&L|$iGi@t+F4Cf^$l_La8>@*CZzkBCEm@>>^85$u<0#zKHTtytvKZ
z1;dh#K0h7H6nDFz-YmS)fx*=PkV_A@%5ZAE6}o%`BEk+@3kdigj)fJI7uy`}l+G}8
zh>f>80G+F#(*})X-0ZVY#dIdhXFTOwwYe>VZJP?Eh3u*is+<K0GXA@%laQ`4&V;eW
z$Z>d<(l`|$+$$TUiTHt;kuUg`_W%q}(NbWnQZJ_BoIu3BQFxZo-navcHoKP`!3Vvy
z-}-bIYXuA3m1P!x`l4cuyh{>?5v>o(nph&|*r}`Dc?4R6!lnw_B1&}J_!wL<??;p~
zq02f1ANtIrpHhw=swzj*(TP}KS*Bx}Mmlp5Ph3*Ax57^mdpdz3j{cUj81qhA%FSq}
z8lmq?N};$I0nV&FZ4W{q?^#|k)(FKuXOd7Xk`s@aq7-W53{&q5erx=bbl$d89Miu9
zC~R=434~{_lr^Kxe4@lZPGuQgCy2=AO00qYe@s~}M?<3-u3yX5(26`tHKhXO>nbyP
zR8OrysUZN|*(7|9DJS)t9sxzN01WTtv;1M0dY{YAjc_fnnW3E=RqVo6v(W=Zrh>ax
zoa8kedCs{7&XSg(qprW$FWD<deSGqtP-2QNw1i(5VQ`JLzz;!SdqlUxI8pD+%wZlA
z%rkI~e9|fh1s?tg9I`WKWCiqjULDCrl+3zXq!qUI6aW1$zP-p!J+Mnnr&ZRv;Wc$|
z*4zbm8q#~gXQe7bkx+hhMkQbI0VfTU1p5gt-!Ex#QY@nC)p6T)Vpnodn%-fx*@nVL
z1b~0LuY%rh@<i((7GSjJO7jy-T6aiI)~|G0un20N!KJS`kaUI(vnvz7(`u{g1U_o7
zl;vi3j}{_=tJ0DF%9Sv+_$g!t;CbX$qmf+dz{=iM4CCj5kmNr}^43ue!!;e=OLqn9
z(>^JF9hiO_lu+@qHzj?s27P+iXOG1B^%nHSpc$=Z?%t0OsPi5%-E)h8ogsqbn46g1
zESEwx_u{4@WsS`YT_7Wsw(Lw8)gePw02n6~`r!0v+E2GpXQ>Ci?YxK{(~NkRbnaZ+
z!$mGzU<Olq4UF$Ij(Duk4!Lv1!m#fDkNP1r)DpcPnto<<KU=E=U11*bAecxq^csQF
zz7)12@FzaqmG#CDo*+Q{PQa)+SNDwsWduhV7s(B**qW_|?)#?9s`uI++-(kCb_dKB
z2F2A7wmBzkKn-IiZT;fIiuXp|Di*#V_8$*KtQ=1N;p($Aufw%3(|9o@!yrb60E#MH
zBP#>=l;R-0WNxL)T+(Kr^PAZ_hTN_N%*-EjrV}&8$L4*kiW1jj)qG)<t-qXn`B4q7
zqbZnA&HZw6$0(`T*3vM*_Lz6W4l1=T_|L)L8eUwYKIq3PoBDHiA~_dbnxcc;c`S(b
zEm}Bq(^W^Zo32t8mpw>3!pQ)CYY98}%mi}Wc3Bo{B0JN68r0MgYMNscMPO>!-Rz$5
z_a5`)GW21HKE@Qd1cAiLZ7P(U)HkcucTQMvQ&PhcQiDo2R&}fDjx+6#-N_IO(U{sN
zN-L;#PtI^BN%6Hw9vv>Qg5?gox7}l`CnS@wRYS1bMC=f+y4!zh@z)-lA-~D=(v_@W
zIzIOV5U;QXgf3qCqF&_}w2+y=zC3u#bef-B!WstJjIHdKP2me760d!!!nI&BuV`<Z
z*$#rW_mhCER>MguC)xs9bwu9H1&1bYhxZ6%lA4~qp5S-*WE`uVp6o?4S5;UPS|{bK
zA+Rsv@Re<Ps%tvjErG<v)D3JT3*9orA#ZXbCSBs(xyH@MMxE1il@F@sm``d<HRW8h
zpEBvQVH|+l5pRaEqoPXu*&<syaE78c59lJ8ZWwV|i7_dj3t=1y6?=N}C+F?Lr6I;<
zm+~i5ybchaOA^mEq6`Kv9rLi#Lvn;u?l%K4lqty~=o!}kasY?;I#!7@73_){7;QEV
z<d1YJzI^qFa(RC~lm4M*4m66$pL$ihIlmb}(1OmD+t7F})2be8N7+QLG@XOGti$Sl
zX7UhYVZ4^bGhq;TY>Fef>UQ4}Uz~=23{BmDWXZd^qlufQrzy~L51Km-u`^Q)65;!3
ziibpA3%=%D$~a;wvqzU<0g6d>5c#%u!IV>hNIoyt?2$OaK`>B0HGYk)0VF;D3k*td
zv$5%+2)BY<>G}Fj)dK|oOH^Jw8P7+L=All8As|^qTtDSv&M&`Mk13a?WS8Vkd(7Gn
z<rHZnVn<$B(7bbxCnWk>)^stuK_^Azp~75)4D59$d@E2&nBPHx&LoD?W!&>F2$qR_
zt|gfcJo%t5(T5r3QEf8zAD-W0We&V2Tq4qvQy{nAll>VHiD1|1KD@X&t4Yu{#h7b<
zFCE5KKib@hZk$Dje(L2EU*^R;JD0hO*cpj^bE$HyQw!ck)o`Ax&?%C$+0@0zW;pwG
z-!&ZefESoc!CtCew1I`LDDy`2rPN2%8$=UiAV*0W7V}^$uXAS3Z$}OzO}XK<_0MLb
zai7jERcB+K5{2*Uz%u36J5+i?i^UN|d26o&($WR!nzF!r)^}mMu3<!EZtIKFa#sQT
zA`(QkeFK2F$z*VmSryrL#>*J_n|jo{4rm%^<nGn(e_T#Aui)zt2t)~Y0lGBmEWbn1
zwqQEdO$!fZNF-nP)4>y-YNZvVi)^dqWjM+N>Lz<kra^$#SgNeRF~?;vGk{+`3?WOf
zc+&V2z0mDchj-&+zyUw%iURssWUSs$=F(Z`J`h*H^mhl~OH{z^2-g<@MLrH^BBMMf
zu|pBAn8B#f7sfhCPc~HUwtx&&_q8&+8%M+G*4*OBbiVgBL(HKG(Iojy+h(mGXQjD1
zz^QqH9@`qb(F~a!GvZa$WDHpVZ1fxf28?s!@c3W>@y^xh)5irIN*LZcN774pTsxt%
z)Fog(B&#VL)BKvA-c}~`QG}*Lfgx-dvqSHIQCCslZ(<3KY)RXNAetf$QQ5nNmlFX-
z;z|E=n>PfY_gDx6C$czP4)_OLzI#wmaGJ6nw|2bE_n&T#i4uv^?oQI}3v$JnTg(@W
z-0z*;4BlR$;#(prB%4@$6mXg%J5F~M4(Z&eOwjo~V?}J-3CrK9QHDT>4UJ&Mk}z#)
zFFad(h)-RnMYw`e9ry-Jf8*2ETub=NAH<<`3%|713=5u-bLAmq+_5?QO8T7)4nqay
z(+(;z5iAnsQSk%ExI0Q=X6vdst(=|e{Y|Pm0nBGZl}Px*zUinMLW~T};;;<L$!~MP
zup#(nt8y9r<rha3i|3S8sdM!-9+YVyk(KAN*YtxtQgU_J!z>gx(a!+>BL7&kLJ96a
zmMGounGDl+t!cc}>#eM~P%>RbFt)aHvq#S29dnv;@O?z<w!h#6ou0R=3>|;glFcBI
z0K2S`n1<exqf;s;f=5E{45t-b24<?k#V68hQ1ok23LU_0A3Z2CiS?(Ij)aEhgQ!VT
zTd?~3=HeLi(1qy}c;mX;L>M>x_8>s{tF8O1l~HH(a<VmR9#XeqCUA^8z?CI1G5|S1
z#=mz!aLTc@ASWx<;tGVYkFUDsxmuhEF!$t;WQHIw*Ny;(lFge!nro9jOf1P#+wa(Q
zvHYNKW7eKoM*L3Lcw!R@Uf#0WsuJol`!O<Pha6gGVu-YK#o$6`>ScZ|4AOFh5JTPI
zW;3e_IBclfOYwcQ8sLH#aA&cmZbEtH-McIxl|o{PA<$#QDZ5i71~P+p6CZMW(<lzZ
zlFWB-eoce!YpTogtIY(qk?tleG`1)xGf~)nzFi83-Q?Z<$VZ1;sc4!ki*SDRLk1nA
z_!}eJ$Ji`eL}Dx=0ENR@UBfamm9Y0Gr%;~4tl?a9opmh~|5>TyCg&^4E-hbJ;k1-w
z9H(6l_nGo18|A!<f+-^zKwp`mG=O;x4$iYDMK(+oKoVxu52jQTzaoNQgv%bj?G)t2
z4{Yajr*n<)LcW$G8?BC+`fhID_8<2U*}7_bSgMkxMAybhC#`=W4$q(yWmBl*0nNon
z$|W-tlXJpk6#jP=3fd|C#|7;slF9hg>N>g80T3ESY`Pl=e#O4@-%hN9a02l>s(WLO
z%VC`vspdd<{Tl?~twytn;3Qtu(rG|^d&rwXk68_bl*a>g#wLc)*<5!9qGgVs2`cPG
z#(|o_yM~nZ%UYq;b(6>cD}>q1YJ6}n^(Runk5?Sd3(rrMvgD-VSlq`%+AFvK&XL<y
zAu9%}#1peD;EMRHx_UZHQy2KK)7wN*l}Hq(3>w~tqeS~4w|qflcaMp=#A8|K?+WVE
zf*QDE6272s^426pSSOKa$1o{w6}WjOdePTM=%5%(MWT}3cq}>Wos@<Eo-64%{*IWY
z)lJ6M5YGXO?mzkbkx&qoZn3qNao3c&gof=%IvZnMt;rQJl2F1@UlHTQc1;@Rf`6N`
zG-Z`3abI&aG-#>qI!zCx?5V|S-Gu>h%FcZI1wS@WhXeP~z#*vYD9xTjJ>ycKrdtYr
z1e!=6eHx!|?wRb4llL>dhH<$$WZ+W9b^ALTpQng{nptX6OIo&ZQkTufLz6l}Vl~Xj
zoru|ASZko)>vl<M&uxB4u`Ts=WQG??AxUSK{mZ&y<5!J_4zDjRm-_iM^w@^G(6WuE
zLPV^PzZ!HoY8-!Ztpu^cZjom#0=Y6t(4sOJ)6@~H<74wgIy&ENH`m;&{U9{|Pd#~d
zD;hEQo#QPX0V3-8a7<ubqr&>4E9$7wyinpa4NZgg-q;JxEYBD-u1Sgqksx7P-(h)f
zI`HV1{0xD+#o06-3xK^!#!a0{xeNB-gGqCHo+>GoAUd_z4KZrQ7>Oi$2{#U1H#72T
zl`gnPY>~Ol==?`}MIKJ{!QP5PAG_^coFMB6Y%hk#XS8$YufTJ0CuxB=1JmL`Oj%DQ
z>RGmB#@~@{m=5QOKt>i!^m^LNi+rBGi(k|S$JsTpRfA;<=s4U1uhU4;yi2ffkXq%B
zeM#lAu2rS<H%yBA00lvDL9>aOck^_<VpM>pkQ?oPSMyi6C#rnhobQdIo=}fBh<c!x
zmjNB0yB%n>tFQ2syE!(=yK2e>LSm%1u^PHNds)}`8JZ&OQXhogBeq+2zo~QkOKC6V
z8Ll!HEH6UT@vB#H1(`oTlWqSIae3ibK0w^8Q<O)0yIHeIFdnO;x@7T>Ii9pNp?KU1
z#Z2oN|I-!dXZpRbW9ofFLtS>BYj~hsB5vNj7I&|7#AX_3p({T2d?hL`C4VRF+8rW|
z3D_Mleak}({JxDpQ{F-g+fa8Dc=RK2BME+%dAlThinKEON2RT(P1=e0OOtp_7_DFI
zk5*Chp!%Ms9G#wg`bHiz8J!G>TBstKew9Hkv1|(npUGozWM|ufBFy~!KdCjrKW}w`
z|BAPj2!7m#y!o!SHlSWHNdbn3g`!DY00r9redkLi<H<tjI7`X=BG80)l9`F3WGhMC
zX6+l^GHP*j7Va}H$@ox#P1MiGbxooq5AG-vV)NMqSknybM_IL3tBSgO)3y+jheH;g
zv$i3wVd%o@#Ed4g5d)X&6i-Ha5>9UAxq0GrVMr5BgJo7m#k@%WEG00j^PMLERYU4G
zZ=iJ_9JnRz9mA^a5Loc;g9rSr%yLbYn(~J0ISUlPRK}WEOBR6mxOD(yzD2lLQVT^s
zl9t$oe%4a>XD+v9iJDtKV@|FcITfI>EMuBPblt0RQKNSjYXN3TDY;3!G>VYS>XEB)
z_Qupda(zzR6B=;i(_<*fFR^odz|?9_?(Jrv^g`sYJ5uf9t+$fBeJ$;hI_zQm7uOTh
z+VGac0QaCTB2g=u6ItFCXY%VM_TxsCPBF@!)kb@*X4lU+je|%wf08mm@T7t;9i-Z7
zVWbjYD&EG$4jQs&R|xDCDB1t^i&Ycp`mplBZMOC9ym>cOyqUdaYnh;a!{T&Sv<*KR
ziQSLIge&K1Wsl^nQ=8G%kR{I7+R(JIR@7;o)5Z~rZJ9eDBR619(4&@g5aE(84nd;~
z$q(<OH>)%wWeLulCZ1$+_q&7MYk2oy{ge`-@>vb`R-1nQxKQAog=wp#DNmyzttfcH
z_-u&RARgn9k;XcwsP0|htr>g}sG(W0$*xILW$?t@-J=+BLM4a8!TtgpqP`F4YqW_s
zHhv^JvJrx_4KxFfGwLu*olJxMv^FolhbY_1FqUw4R;S@%$rR->AG!3LM5J75%{I(d
z5D0MdEx{>7GSer^yui&ht^Av(Ytx0#F1FDDwK?|;Q#<8z&Z#MS32Pj^ul+oO5U5#p
z%bUUXP*xbj!-<Gc%{N{uq^gZXf=vOj{0@vT3SSy9kOOvx1y`48Hw~Gx&-tM3(}73=
zmTFx89NH1Hs-sv#NESV^hbq@l9CDt9Qh<<wx~Guaf-}0@7q<C0vKo`*^ZuRP98kE^
zzoz^`LjpHXE=Y7z^_0VMwhNKqs3!n*W+hrbKakw;^7Iy`$&Fr_G$~+}tX(3&7<ZSn
zr!xd#6vOiX%l^K|Q>0#)@4W}eIJ@uDCV}4Eh4H=l_p`FRyGK-)GBe0&Ass`Na!N|=
z^;>@G&&2Pfp%20<t!ue(-_7B6P#$-aCgV&)r-9qS)9GD~i?EjH-pA83KYm=5ziNP9
z?n2iY5lG$BDJ1^4{NI-rcKhKbb`%^~?{w0B-CyPNQ9crYNw0<XjC$S6?A~97_2E51
zSHFUQD6Yn%r}%sX%+OXVum+YD68Y>Gq0Akzk~VuMFWAIl^MtYr+jS$yrOJ4QRI0t~
zfaD-{_Xg!@!L;3dGsO8vque_6TE><W>~>ebBbNxs@zp@9LVaU^hI#p;-u2Q;OX#b;
zbq!BipL2g<aZ>2Bp6c$R-g>A1(G3|XZQ~oaYe>TlunlmIM$1p+`VJuw<vodr)n2*G
zC}QE=QaI8AGr`p5B5(@2B7bR7yZ>C3@HQrSM$ZLtU}^=Uke<#@UI`kCbgnTpi9uuQ
zk*Bd@k>+Am;4U0rEj`04gQ3V46{#6r^M`q$KgH2giU??lt2`5PZ^8n`rt<I(kS^3g
z-Ojf8l`*9#ZIsU&sRk=XyXtatd}}26T3PU{?oDE8Ke4E}sR>o=_zgs^bWY0&-p3s}
zz;{;@?poyU4l82;X=pDR(6%2F+^eAsMKA^dnXh!MH;oMZzgWM;==>qIRccD$$sOw>
zDi)0MGZh*k&((%IYx4v|z`0n~>qiX^Y5*|b&4d-RfJV+&l8C@uH+m$`A7vAd=tyj(
zZmSAlTzxEBr^mhqW715}u;MCa`@JhwS};Rb1iMG#d*k4B4k$#=c<RSMeuA%$=b6U|
z7{X!M{J|k4e0hG@){{RXbdYjF=EEQDVQW@!TtaJJtt;x44k2+~?f)BN9(PLW7f7f0
z7#t#DucG+8b)v0D`nElj%5&F(yzt7v4YEL2)pFhRe+Tt4$%zRqSftxoVp}BZH}r7r
zI$~+FNt$&&zpJPjf_E4#MmPiH6D328gP_z)hAm6t!%~FNMi{i3D*Ec;%j)B3$Dn|j
z9Yj6(SJf1L3~59R-U|2H&w1XfG1gA%`eeI;1I=8x9WF{RmjdfN{LF7KRbL$V7^14C
zH=_8>I2j**554NLd)|B5_ncH_(q6$qsq3OY85?vsg=RSc`G0r@LMwGjEmUEyHJ>_M
zvt+6;kfwfe*rB=#eL0S*Lsf0=F~@JGi%(}od{RsY7~Y#?P=5_8$}!8`sM`}pokq|_
zm^^0L<>HL77t|z3b8LkeUv@F*mCV`tov2}Xntb!dS|E5jQr;@2;mzV9@FYzW5&=<~
z-57<K=0BB?S%s!IC+?nX+wYE;N?Wp0YWxwl8Sxh8+O<r8;$f8X`o7yDc_!#-yPGfR
z&8tVaOoZ@peoHkYO+;1&A4l->Cf-ya&Zzn}5iPq1gD?TKf)bqmh8+S!e}qbN*3!-@
ztmlUO-0!6`NxCx68RXccD+A*JB~^!}!CRnl=Q9#Qw57~a7FCz$OKJ{qG~p`Z4{e}N
z<0vekWM?+h(}n8Mz+r=Mhx`;^Ca9M^1X}0}l`WP3=1!eRSw&7crysLd9oh*ZUu)-7
zTXL>;@R1}<%YIMbT*E~wsIue59b-Pf9VGIeCL~%Kp&dZXBN6xX;sGZby%wkbyIdN!
zBGs{1cjw}*R*AB<^1Mjp28&mr8;3p6bv&GT&%KK%qFaW7jCKe0kb{A|r{<Vaq2FvX
zk_0Z#Bt*(5aMMKb-)xnnz#~d9-h9{fO)-=mWsb#w>_=;~Bq>;67aU{2vU<p|9#*y~
z;W*r&TJIIo5`L}$Jua{$9=OBY8?n?z8tY@+vtw~`RH6b)VyM!ooKui131zHW=s_Xy
z{GWIPcMG)~bx2SsD=pYV(yotae)zG^4_Am{4h9Qq9~{c{euVVLVAZqJ@F2GeL(4q)
zqhopht=fkSCeJ`7)JDm(S{-N(ZkrChHI6RCC>f2Tqx^D{3Qt@~47;7e(iHrIkx0Di
z0hK@{o1n}V&aE~Opwn?@t(=gRORgvk^Z~oe*~%}S+k?I6SI)Ua2|-}s9nNJ0vmX0a
zYet3^eD!b>98%;}H+n(;60kWU?`yfrD+q|;qSSOB7x)JhB8xB<f~f`SXLA=Z+*!gS
z7eQrj96$5#$uS7&rAD;Y%Sfdi7XT~)x&K1eG3?W>h{5M^gQgs$#gEjNlI_<YEtsbV
zHBd2CDnkoCsAEx0T5^#Z(*Pt)m%TMJfStVAAJH!*WI6{K9SG>o!HDbEdmJ*;4aD@Y
zx|Mip7JaLXZmc+Xbxg^_@L$!hG4q+S?Qy9A5xl)*P2e~bo;CmNKu=x|pFovB&He@-
z>sgn$i$l?rk$Fra4%{Ccqp&TqZ8+PE{eF40(FDK}q->s8v0Qyu*Oix3oS!z*Dwcu4
z^cQ%7gq_v@4^=JB0w#MluRCF31xLC#D0eF@Uc`iF5&DqF(IPrAe`TRQ4{iMq(Py)n
zY~OkyjM{z6*VzX^;c?Jb0RPHX=koe(?>BOldn25~83Tf2kO)iVFZebK9}Emu<Mld<
zwCRaE+MkFPi+CFGDXnZr+aPPrAUdQv*qd@{QidH0jjEQeSwcN<&a#OP59k|u9pYQ*
ziK3}P<GNJX-hirP(X7l+F*abI=PP(Hoh6j&H<HTB^p<yb$`?(RelUxO)jl@fE<$X`
z>D$s11xpk-;JQ*DB5u&DxqAW?ybg7xqsGN7N%fv>ro{pdl*oD|HTi>nN|b4sHVrZo
zfhC$};vL94^Y3}l)+S`bUTe*XXQ;+h3hoS-HBFL%gA6BBnrow71b|Z+XsPlu0cX)s
zTbBD7ne~-%{$7h!7kSRSK|zkP;IO_{2eBC&XmutmARvH7txJ7($t{H}UE`Ij>P5fV
zNgUL3=Lq4ihJ>71&=_QF=$VlnT??^of>cMF5PGA2(WA=`7-KzPYz^Tag+L%nV~4CF
z$GlQ%#amL>ouq}$Vxj&8woFf!a}C9u;wL~9tqq>`1$-v5ec_dG2apvWMiBB!^DoM1
z4-vXvHm04_Y#dgli?cgbR_ra5vX!_S;Y21i2@kCTz*?s+7<8)^Bysf29RuAq3h;d*
z+6gy2-O}m)B16G#sSM2^hZ?I?FJ<tXdz7M|Dk_26<QI$&DhEuRVbcoAeb%M(AUMOZ
za))1}o!Tz=#((nbX$g$rEW<ALfN+$kOL){zVT784FhT%33nM0+h7Zr+k&Z_;Vqt`+
zsM0E66hb~?euG~}?16VqR1eLz^ROyk;3hjMvt^mY(Lgj<yMCD~ni_2ddwpT$-d1a)
z029|QZuWtT(Q4A*5|8hCBI;cu)K>z{e{UlKFs@E`uSv)?L_fE>6w^$$O26A;0j*`e
zyE<fc%11H)(c^X>x_$qmLMNg&`<O*Ux;LZG^=omYGi+$+M@pWF-Iys*d|@K4ghRZK
z-F!YM5Yq!Y&x_#ZOvsGGM>?-a@O}~H_(>S_m+L*F_>|-sGj`-Y9VQNtONZ2$Uo^<G
ziQ6u;xMQrQnKd1&Zfnvuw_ua>kWhMW^J8ZqV-E4nMecp*9C{RO4TDEg<R9!Gy|1i{
z^z0wtMqw))v2Uo*=f0H1Ra_k)Q-F~nZ}vJRE?$%jcQq(dVnE3+dS3pPsFS|FTXA3H
zWSsO&EE|cr%|V;5a%0+?(9&#`C@RJc?*Wvr9H2&Z|Mr*}g+uviY|t4EROaWlPY5Q-
z%AgLpusPYDHNxsp_juLn?^jlPqY{qCvku^pQCOL!tQKFsQKr%j(@8n<<k}5I_rI)G
z!$!yatQqBh3d)>Xq#vJeU-k_sdtJ?RrvUgQgCITJfxsX;Wt3+yCo|%l*awy$Qt{Z-
zFgEReM^+@x23{72p5tQLO{$FjzuEv?)j(-{*4+Z6)c+flif6q~IX}EN`YWV`Y=)W*
zB{JH%Q_Gf-$Q6|gmhr1vHOLwJ*?L;R>yB2DU!a-hu2rXa2d(~HKQ@};<DT&p^XMVi
z`B5((y(;4m4r_4&UJtOCq0i6Fj;{JY;6l*-Y9QZ!oT16d#wEP%B}5*P4TR`XE(d)j
zKY9IGcCVz8{egY(AqJBk$>t5lGbbyr9Od~N85HqVbTI;OF=pf}*wn}{y}IiyOZPs{
zm98Q@KKeQK)%QyS^t_%S1*!3>=9+Jm;rihXPDK2xgm1L^zs5O(0H;ir%8)nLv?oPh
z=jzkIfJYs`OPJk0*}>lyvG-VC@`%HriN?zM=!1af5DEvvsDlk<34qyPoCYeeS=spD
zb>|q2){lrI=bqQhq;C{;bE2FllRr6_X+7fc$Sc2y8b(WVrs06WR3tAd^=#8NVt9@f
z#`2QlSjh3fYi&}!Y}<L+oBM+a4_FQ#GVTf;;HeGQUgC`@i%VVy`Yh8>sddMxVu+Ag
z{7EtVoFKaWgOo)6TUEcO9Vrg-k`6o!8p(3sprV$b2xHxj9JBobS6D6LdPC7lPUhkS
zJ#s1-bgPe)fWL^}(VY`XAGuGt$JctPecg)O-Vc0*GGVjVHQsI83cXHzI;gj<fXgWH
zaz<H$MQnO2rlRoDKM0u)4E;h=y~lS|O-<R<Q@?QJW=i#79^3vh!6|87IFKIgfNPP}
z%dWT_FugT)>g2N~TCIoLf$}f!3hhV%a=GB}Kb1}(7SllQW4#Sm*k~^9aj;QFf?hU)
z0vQZ3vJVxLU$Oo<7Am0-pB=vt^^=liFKdPa6P*|Z_GW(%)CH>m9L#MFr;kXqlFhx&
z??*&JJK`S>kq(^Jw}Pd5IZIC*T~`xt-e~Js%K(dTV^4nZ0K{$DgTnNijh2qkY^1I>
za+m%DcRv+>tyy@pYh`@=a0&&b=e1-cg1)sUu66pe<$s`F<k?4Humv(F3!<ILADP&m
zwh6h4lEqX{HCINwnZRA+h$WP}0Ft`I@Mm}^T+rZ8KA1~He<_{!BZ82Y)_BKCJjNpE
zfy%8k<z|OfGm#=WPv}rEPc=yl{E~460jjR7m$X&u=9&cs9~K0wn2HSp4KTRX=#9dt
zSE!3j?hmn-fNgA|^)1!=79yuAvfx?Nrb`zVq}g`gf2@mE9@B*F65h%DOj#*3ahx=p
z3FIl-4ott<gEC_nKJ7B$j&g5bFy%Te#F36fIcG5e+hAZ#X1~n1zC#DjR6grxu4-b@
zinFHkx1jNTrV0gEx`29?)EfrFUaaU(fIwO<ZNY1-BM<KX<&^Z#@NdGAsMm=7+4hT-
zBH~H+02KC5$nDPiP$2l}F^mN9U2D&oifFhlQ(Rno=?NZB%HcB#JT)1PYuYndd*9rm
z8{9vX>BZv}CpdU*RT{ZX@dvxcD;V(y2hkh-RI_UZ132A<gf+BO&j$lfhlf>#S>o%Y
zIbuHBkytJ$hPgl#8GxBqtfaEWk05pZk>Er~fth5WR1p5+StIOrF<E1Jh1qwrmK-fs
zMEq7{%i0G9JMIi)cyWR~!}l&~#M@A_fGn7Cn!2J#Th?~+*P4X2t5-U|c&ZDqyZ4Fr
z{z%J*bGexST7tLItN~}4V|=4s@EAIIrncU^HYqIN9`7kHZ7tFS*B}{0jnnu{EOv?U
zPQYolYcj((gE(nCMYPe^b&oI}GmTpXW1jFcA?~hN7qS;IIt|HJmSBvOH%KFGa17u5
z$ES#>lFG{2CG_E|?MS;z{>)C2J<8drvOX*|TdR64X)#m&B0G|g0U@N#`Z!VEMPL5s
z9Oq<NOwU}3q;|Q%nZu)fKT~S?C!Z;>z!}F*eWaQTKyTlhh4O$u$XMUD>jvIyZ(&J~
z+65@|OH{^Ae6E!?i1$VMplHcB%*`eY6itVxX^G6Sn7hfuwxG}ckQ8|(U><BZ;Ed@2
zC(7MQg(+>EZ~K>fHV#F<H_M^9y9*Lgr<KN5)pa??2Ejh&dJv^*h&~-)$}1*KXhR1B
zv2&b+7H4cY;)E|J;Psqem7Acag1d^&5T-C~1*ynx<YUoK1n!htqne<MWlHCaZl<v`
z#Sb=vq0eTJod>Mn`TMmV|B(9_XaaF*zhMvQCRKSN^fA$C9_b~H^49-(a?x(Ki%V(s
zY5#3$WU=kTb6<~c6k}Fxl3tF7#zrbVGPnPhZv2!Gia-t}Kd1~Qbi2byF!`_0b;52D
zKt*4h`z&KJhZ1ybvxQt62Ik=L7fp}53Jnj5`xH-Q_amJMk(DaCmY#mP8jkeLRPX9|
zhh*DA?qoWJpCw_6Y=LDu^+3(K_1oGEzDfiRxA$WQ?=Hq^w^uh%HIvlx?ABU4Bv`&l
ziyTu|*Pmjz0o-|*1#i&)%#n75nziv0G;lXkd48wI#tD?l#<3H0VDP<u^$-qx<v`0x
zH-LC9YWUr*rv(x}z`-tWxUYN8^@{W0(RK1QK#PGYDK|L#xq_eUN5A^CowW%}69&;k
zyyjUbNTBo{@JTH(>)6QlJC>)Vke7l*_Y8x#hIC!g`C*t%gza?;l+w~*=m%m>5q^&F
z6`q066T22goDG&hx;SV(iR*k!s}o8ga4{5}Qm$xC-PWix`((iM7KZy@Lit<f4D&An
zz9Lp1Th&?2ljy5qWigJU5Vcb2WwS0O9pQTOH45;ChsNX?$Rcg<1YYmH$Bg@5o4)PA
zYkNpXq5vpm9c<j=L(h$)UT_EY$240B=4M|g3@^mBmw;<xkW-B*NCK>xAoaFB{GXHu
z7Y^KrHpmfpAvWAPjWb%GcRmim3VZOkw3v8)TQyg^(I&&9kgrCQa(}Jlq3x!^YI#=<
zaYNm6mdWb<oB9kZByVvad!A$U4&GKO_a}p3Y+wKXa7W@@yticIc2>99Hgp3ct3d&j
zMVe!8*?+7_Z~>d89!0d$2viK5i{4P3-3jI36ZWHmK9*HT{{iIY>HOI=dL16p0;-d1
zS~4X;lWU{qZTyO8s!?CLk_CI-|5{EKwD*PCWaBq0!qpxYd?I?%;f+C&`K#7{zmk}f
zkziCrLMk|WT~B5b1(3yggU%L2{$Xjrra7<acbxM0VM+f%?|4eUI>iB%9~08#EX1#q
z(plzx=FpnQ(S%*qSjSWUzk95VxB20a>LcY%9-^w|k$Dz(rkAagihyEGsayGM5)_gd
zkA@zx=v9L{-zb)yUjZS$)K#>D0dv2P#a`EJeMRDIqxUCllLJ%CqVW@tQa>Ezt3*Sg
zvhHCx3*6G99r>>jFTt}~={$l;K#uw?GzUjmV#|bZxNL|j&RI^vo~C3MXwLoPKS<Qo
zeu~Sik*UKk=&MkoISL=R+ko7Vr&?6V0iFWo#Z~&VykQ9zHtZjT_xMK)5(=Vt($T!^
z8*rYID^ZUpL&1t?|FzhzUTgXqaMup<V4;7YNOuRZ@#fkowh71NbL5VEP(Y=v8h<6f
z950SKJNR+?A>e}8g`p@$!$9hrph$Ja@|D|AunwSjKIU}Fi0jITzT7U8dIPOkO<}0l
zX>tT=O9Lmye|xUrmL8fE>jC@{m+<|=j*F4NPW$FwEk5-Mh#0F#H$1mtRPn`DIYpsD
ziFT0d#Ml}}C?I%9Y&8#fu1IjKg0+a3*)2nOA)?B>GQi-HWo3Bmy{uRF_dC!j5Z06F
zgF~rfoK{~1i3nGiY_y%eTPuJLdC*=~%TvnOte@*sW`)P*&sm4#GpI?GD#-H8H~YfI
zW+EAJ9^5u~Io$@h<UgE$>T<i0wpPpzCKD9&jK8QsI-|^)3kkR)NP|EUhHhuKeOCUT
zAnSkwvtyMlzj^~K^R2`EZgx9tpvTwI2(~gVYSk>Q$)kUX%Q7j{);{L*Ih9n7biY$O
zqS^Y@;JZivRu?J{4#=_WVFyU_?*h|TP%DqwH}rI_8PH}aL8T0un4Tx?W_8|c#bK)m
zZ<j6W?<l9H>K@h7iBW5e{6J~=o=0*5#fQ|I{zco~?-h_BZq>VptVH|q0~Z-wsr+lp
zR8mvqcOUPar=Rjtu~?yoO*qBic%cNZZ544JeX!@qbF;2L?AStAhGq=liH^(Z0UWOq
zG<&T4R073E45=Mq&gizZHF-OttUWg5v9x`Is!Y4utWY%m_#NNHK&=*H<b0x;KI@X8
zm^JrALFzSrv~)qu0mI|6xlK>3%sPBS3JiRdG4hT!aQkp(u}YONdavmYE*K={2I2s{
zTGv?Lm_W4_)Lm@~kT*clVT9nowJ)Jk#`Ts~ZY^<|bCLKIi(gk{4$??F+ygb-+N^6f
zb2&I*lhx!H6EPHJqb@k4a=ofWHluFqe*Ie^a3@PctS2-R7NP`mzy>(WcFw+~0a46K
zM}xI3rQcd&&}pTf$&$6O(Fseh5Z8EyV|W19;O1TZx$v~3+cvm?(i(t4u?WuP`Cx0q
zdVn7rqjT|l2}CD_EU8B@V40z^8l4Z9sjUq~4Aq#e3}Oug`6UctP^W+352nMj({e5F
zs=6}CFYrs;HrpEkL%cr?`<|eiJLBX-+`CV^0B85Wr%>uZ{|5DPjoN;SyEJR?<PRAo
zS6lYE-g~%!^WN;#7^J2K98$xv`Lr-WZPOIU(Zwz-I=X==i>1QjQj4m&+0cr*Yieui
z4kmfN#R0vHexI)IIBgVh!}NJ=)m!{$z;6FisJEn_8gcV`_S8#Fw|xC{r;zylBQgg@
z&lf>Y*?||t*DK>iwwPC*>rcRU)tju3%i6GWfdKZ17W^KY;5rv7yXx<vS$Fv4tj!8S
zf`vJ?@RGe6STh3)hzpzUVxZw?s4qVvwJhuwJ2DWg;Bnb1BQP|B{zES+wW{%&o$^P?
zq1{mLohup~(N>Fomht_Q28|PzC771jmmZ3`JR{?Q6`3k~kCKNBTjgz9PMeU(cAyQ5
zs#ladjfnt|X>{Du57#O9KH=DMP-~sVCJ(;z4REbpZP@BItAnkd&x)^~L$JkS5nL~R
zW?oAaW2gxV@U-kH24r8IY1M5Z5OM4WhD{<XTP-t_=E(LKMZl^}Xqo#T<Ps+c+{n~Z
z#Qd=C<#;OFBPJgTnlJNwcN5;pnl1Z2?Zp|aazK7UhCUh@3d7oVpAJ+x%y8rUPScc;
z^9A(mO`((w#Kf!;_L-Yub~;p;rxIh!F(?SOO?yOi)S-7J03`gRi!%X=scbNmBETcn
zGKFj`PE{~G36_9ue8OmiOOq6SJxI+vD7?a2l;CiHx^8m~UJt>H6Ea^0kI<Oy*o1#-
zwqHf+2XKSOXbj{9Wph{C(~^ZMaD}*e?b9oikJ%Q&AQB7>4k0>&(&oFEn3#!%y&mw%
z6%NXsVf|*ye%ziGMm61N^wFseWQU!~D2J7^q+y8}Hyqh-*?+p?bDymW#-)KcsT=aG
zrSLXyT4D+c`9DSs6kkVwj~LcLeBzNB5h1<9#uHd*wmWG#J_pG=ZCNnCDy4BdVz{<-
zL#Bw9;#C0}teoL65SRKMp_8XV@$EVOC2YCeN7^8uvx6jK*HCG^l#zLc1#JrXEB9<L
zi&}qanLo-KEs0{zGXps~)<0$;L%&GHD+bEGWdc;>ndMAc`uCJq+s~j%DJ7Fw*XFoR
zs9ehRV{m|>SIEtDXt_BghNo*7wjNMgS>#hdgN%rt10yGPUJXs_+w&XrJQnBZmJRHM
z)|brQl1`V`HPcO0FR6ymU~)e;s*ei^SjRWIPH+8_gf^{2TPH;e-1FKdg!jV?1sGqG
zJssfX1IMIxTlz|5dAg?q?rJPCxIv4KtLbb6(J2}nKbn22Sppb!U9i+;CMG~`bTB#X
zm0@obe6@1T8`Gc1(7wh-x?W&XR=c0F1)H>jfr&OC5qjOn1c0}q0zrOVF#EitH*d+4
zCiv^t=F=-1v%P#te#-(^`MT4$kcJCG1A-&pD8YRZg}2>Yk)Zk*<}Lr(WR3pC^<!%|
z<6z@!FXU!hIWSI9fSFin!1SUrLXk6?M|1utgL@IbCa9VSEfLBF);@LDzT^ff+RfJ2
zqny4+Jl-gXZd!K#P}G31+B1#Zd|v`$+{Cu1Aa(D#T@}$9H5^_hact79*pb}G>zYTS
z>h~BnIYe8aWCW=RcU^OhR>fjkAYli^mW1nhOB91=68LJAC@DpL^)$F+RaKX*!v&V$
z)(fi%^*NoT6%fsVf_%r@X6T2;+fw?ratnx(vu1!y>(5ftfMw{ciNxUnAO*LTrqAT^
z6<z1o=>^ipWQ+liC($i>we+{8rL=f?%-3@Ieyom_+__eMQoK5jPs>nMD7k4&hKc*k
z%QEB~Q<Wc_U-2zL`mj_>Y&bVuTdTLIjG{f4l{#=cNBj;cSW;UPM(`C;S#Te)&z3wz
zup9!8G#Mx_f*Rs`W`;Wg5OAy^!@3i@z;HTSRuHTXp}hl^5kA-ZH;GXG-6rIs*}oQ7
z*gnjXe2UQFd&nSKD*9I!zaXi5)<ag=MDd_Gbh_qtX1vvB`mUKxJvo;4uBN^8P{1_k
zHwV^R-q9er{11$r&V4K@NX9x7#xIH|RT7%>MFZ=^8KGMJxTz?RsBbM=O6G$^p`rSS
zpnUku{dhM+TJNY~d__tF#`eE@TfqJp>4FTb()ruyft1d#r|BWbbK36Z1@luK&69G+
zDNQKR-r*PuxQc$Aih1{jfu@n)XBIbeQUMp)ns;t(;0<NDtP)~S8!2?za@*wgny}3{
zGqVN9GGr~2Aj4|om++9XKEgw95LQpQK~huACKlhU?SIvN856+&y;rH9*L%CV>JwaN
z-RQ_#AKFI;%%-RkX(Z(rg|OSkp@KGS6<=nsDB|P|&6`>q_*6sW3{8~>M3pjWSIDoe
zEjVx6Z5~JxV<c20EQGzUTC^h0!rl1GfrmY>9)3_AwY!5l(Gb!QB)Tg^22&E0igW$U
zF$N~L{J7V3M!Q$+P|L*D6Xy6<>z3`19-kqNLkeKx*1k4v$#6)lKmUuK+7F=!=5z{9
z%ZShM@lj=PQebko&}Lrswh|Q|{=K<r4bcrx8gFg99ebIIdTCEc%{Hq{bOo${xvpm3
z-WR1gvwI=o=WNr{%6^fbFd69+P%s%r<mVk2Sm>*sXlM7w{#E_7+$<Y^xJI1R$PZFN
z@(3VZzKSh9rvw2<_b>eKXNi5DZK8<nk~l0X`z$tI?b^dQ0VknZB$eBC8~VE`$P&c4
z>3;-A9*I-HEx_{#hU_bSXUKTij1DSrV))EtqWVJLxx?ytWUfPj^;0AHP|y=6cBL5L
zxF^sB#+z&G>p%16Uf9fjnbEH}E~RlRl2W^cU`ucFvFWhuzX07GUxAEy1i3fO6I`<R
zke{@<MyVm-<4x0HrA7v|Ici>NJ{)7T9Bnig1zDfJ5s}`J3~&?)u|#(d)6v$j&NY_c
z1mW#N6q&j9YTbw(6BJNlidvQ;7Qj51gAzm8cvgfx<4@}B*}6+&7mV!MpuxZDTn6TY
zpNv%m8bq|X*nnkBdPB@pWj{80ZD;+|1h*i{Z-4G-PwJBp{GMY3Tb<sytNL3@vo;nu
zzaor9WZ-FYjaHfx&@-r}I<&Z^R52cs+ve)gQ<)u=Ava|ae6pl}d5Q#ZQt0@?3ODI@
ztQKZUVXUI5u1N-CK7*h2#Q>tpR@hZI3{N>+veq8Alu4Bw%g<RG;o>Ytn9;~cIPj@i
zaNy34puZdVAKr$$gVmR2;nv8Gy=-pJF7+zxP+<vvzHH#(mql&HH0iSumb;pIP090L
z`Eyx(q5L>AT^(f=<0}qpnUxhw;6Jwzwia3COkJE*iLdf#ZjE0BrVjwJ73|@|?<=bl
zX<}jeW6=(jv`o8k)6emOXQ#GZOU!Y6-Sjffyv2GEwSA$lhv`!JYmY!a$0sH5@0i^;
z9rwxC9z;{<nz4j0oekK>d`G`}s|hGF96%%g$l2e-7CL_umr?(XtO+mY1KH>==<GH^
zwn>Y_ehX>@>b=s8M&tr2sPVw8d!fJfoIe#pZWwU)2Ojy>5Xj{sTKo+f`7&c^qS{1L
zZ1|KnHUGixC;}`fgHw%V!3w#iQFU2Ii1UGA>Kw7g9p=onSKz34-SQp?4Y>ZYDPQ`s
z7Pw!#lvEJpZmuVAe^yvscy}i1dxXaTRWf>+sv97P>|8#(X214miv!~b(mPUPgMK?R
zEpP^j=^CeRi(ui~2){8wGWJj}{97XFg+5^?)y29cl!2Z5RX0O$YBbiG{OmO4Sv!W0
zddxjnzhs-=Bxz16)j5ldDk_Ga)3au3F(?7ldb3;r;Qe;Sa$0TYe%-nSku#A*?%wuO
zjlr<1wcz@T?rg?!mHT~1vkfO#x?Tcb@i4TmV!nsBQ#K)%Z=P88<zd$e1QaxKW+0tA
zmHi^y^(-4>H_CSOIZWsEAa#4<i$NVS;d8Ho(wCFC!94vcqXGsgH%}=SP_5A9xnfBm
z^ayl82U>L770g~^b1eA~fQR2|a;EMLOY@t8v~rx#8#S0^oN7u%Lc1edJ1ss_|8=Wx
zp@Q~t)EsrdS1`45u^PG7$fQ`19@YPn%<7`kJ1?$YaHa@aHXx#!5%>mb$b~NNxK5)N
z8goKZK@sTe-Y>QeE1Vg4JR7pJ^kj7&C})s6tK(0z)E;fFb<9^E56IzVIXw=^3OROX
zTUhI*8l!Pk@*JHiIY?*);yJ|#`b)udlrh*@3BFHqwnDvw(SQ}us`8v2R#?uF*M~aa
z&2N1%51S}jial!IBw0jksZl%M#C1Zs@IId*aWk8fQB|20R1Px!TWA87wyYRm=T~2>
zVlHIg_RXPbkc(Vxr_HZ8UGD>^+t09F<fLY+^of{sNA>OKA<0PJqVQMj3~8|w`ax}R
zO`oyfcBqozjp!eB3r@6~0NgJU7k<X*r%5YLoMKz@77jc_M66nU1X8o%Gfo9cKV>Xu
zUv^X%-75aPr}bMEVC0zCf-~s^cR{@X-o~iEvTT!*=2T8lh{_W>S0R#PM)m3<WBpIG
z<qHZ2vH>8<7L5BocYT&j!cK8&jwASOMXw*I6A9#Q-`J*a;Em7&ceMI05;ZWLLbxoR
zjc>rXv!?Pu^P%?7NRlOlZF=@tMX_hri3`?5dfk#+@+O<a$S2UX8ZJu7sh0AuMOY~S
zVPfV2nX0Yuy(CCp*03fJnIG=T3^aWl15uc@9zS26MLh>Jh)LP!-2QiGOOL~7Sg2@e
z`{+B`(7Mx@S9laTQVSY@q_)zIF3REa;?-8rVHnQ`*y<!oD>nEtUIo;rqytI&lfLbv
zHBEkfz1!9tHt^9FlYbw5*_>oeoq91Ariry@+|yJQ4l{IJre=Zk5G7mF->WUc`tkwQ
z?^EP_%ZWwptta-=DbuqiOrQ4zpus?r_4a`DWW3aY?eV~LgGci&B)sLHZYfF+N&rK5
zm9g_=U7TmUbM)EgC;*}R8f%Q8(ymWLr@82ZL&s;!#&7fp@aFHT#fM&O(51r@_4Flx
z@Z$W9v8_##$#{w%E$>35_nYj?1Zw49t4<TF==z%B^fM(r#n}D$w=j#ZDDr000!>I3
zf~)(cGLrfq_<wi19LagkYr^;=$g!mdEw``i9$Am7W)*{*Qcl@vsBV|_)$uPl)|o}w
z&T(-;cBaDw<!aT#r)zuyo;MEdIx|s$PFpMG)33|@J(@}omE?9zsm4ZW?f!-tQ`QU>
za-BbuX=$^x8W8t6C+2>jLMc*07Ca_4f=sEhqw&M3tdx`zZ7dACvC_o*08&vy&2L#G
zIwgCVp22X->c!YMd2koaAs-6I{GZfN>f9}u&}GL%wdI^i`h_dLP@rB6g+vVQKHw)I
zh;nYwNltLC2In3fy2gvoZSNd(vW(pz>byK&&B8t#4gND(vupbsD3`jyx?-v_4b`Qu
zlYRhDD#&F7-)MsF+tREg*bDY=$K&RLAO^ZcuUTwcw<#x;B`<lMl@Q1$Pmv>2gJ<01
ze*sM|@$x{8-xvgJhbG-Ul2yytL~<Hr9rm1+L=!qCq+T*Ue)l~!eOXl2cL$y3BqgWm
zX?~r>n&(+UMOXxzGZumT9|Ob88jFD6>Tdf&^sMquuQ5+$&Af|-?GRZEb&#`nCuGrt
zg0>6kM+XbajD?BNS1m9{0lkY5<w|3CN!(_qiEw24v;`6kPY3LtT36ZWsR9_U$K%#d
zIVjRT8E1mp)yo8mTFC^?!xA{cMU9bVKoD^dZX4)M!lTS1Dy@`)tU_jx81_p=9*w@g
zzWQ~Vb)vz4eYP=nQqXlv4xjDinLVd%V8rkrIMxsaH1R?2<_Qr7Zbpb%<gsu#BsadO
zYr)~GPkBuvBtHcs*2Zlj>?adl+9AD$Rr$S&u_wx_Nt5o-d|&a-Qlca2mu$U$QFOJ<
zxC7|9SY3BRQ|KPT&pb?9t0Iy9oW^Byho31d;jQiwroS(PO!~LxtgCs~oTO#zGVGs8
zDBW=T=DMBibwhX{emc3wn-q1$XXB%1haGV9nQc~zni_WYhgo*o6J$H_RbL5#95~E1
z2<q%9k*f2Z3GM-{e}ilmXoaGsATfV-%c3QHnTSrQ>Pj;l2ub<oPr7EBI=Z3y-YjFc
z;RdU4O@FQ5Tkvh~IXU7|Jhv)*g*asx5hS_Rs0+pQhvqt|Wl3v@KWSZc&`b%=>TQ_i
zr|#HUF6-4@=z_W$>JYIdEZ;d43VJXqc037%7)ltne;Jz80YOnx9yF|}Vz?cpE80^c
zVs6XmSlF1W#Q4B$_#0MPx3B{BVl_m{)k#rSB!Y+{)v|#$@Gfn{Nh%Lf8FMTY5$VWQ
z!H9Wui2Ps|Ftw2SV#R8+o#^#gUD&4ZGf;-MKL59ZgM4+b0Pf-~8rH|$y;1y@wYitA
zXBaR<{!tlej$94SY#9%w_~UFdf6ly{qks8JozK3Fltwj*D|Dsm3GV~snyowyQSMOf
zV;^sdoYs(GUK7K`Ui`hW869Mpc`p=(KlVjBWPgOxiND_^=)<;YfayMYz5$!FSS*&N
zQXCXA1-A3O)Aly@&|jUt$)4?Cp-m~V>f`dNlJH?BJ}ytKD#HIyYs5yQSy1rPJh_OB
z&Kbx+4n}tm*Og9W?F)kcVp2;PU1*n9NN?rosVjEGxbNjb?(*_NdV<lv4=3Ney@gy5
zlpQ{&S-US~)PSB`m|m{Hf0wNReMua8mV$oXWAs*$JR^0r0CzF@uTLKS0m1mKrMP8V
zak4!lS7REx5y?^ZYUG64iyJTam4Y$*w=7Qs;{6_752*Ot>hgqA6nb<rDCR?Jv{iCs
zU3-IU!5ZS!j`mB(YMnl6kCmJ<Cc*A&C)E*Y>!z*0%e~#I7_tbizoc>%yVy=~%{4-b
zR{WE8G84;7`b2?D$c7@@lpIuSB(Fm9Q-A0-4nv3?t)F|OssuQTQPSK%xSjOWW2D5f
zm^aKP{oic9vMc?C!~{#?Os|2$3SCJWtJ65Y1h`apv}A@t>PUB&W6o=hn2WFvJiCN9
zBFkn8w@wCk--h++O#EiF-pz^dsk94?2)khr*K&Cn+XD*L$AJ=8eB(C_xm%+(mkLmd
zl<Dr5y#Q6SjaV4^@An%s5yz_05}9lsGpmiPDb}bkI1&`5Q6XAHhg2j*ynX*k`qjtT
zxy-G)HiaWxaGibV#HcDZomw2lz7AgeM+1r>pDlOJgbCcI%EF9NnobZ2w4T;oOx&=x
z^Kyv&Znbm?UayjYKNu8+ORe}eIMlJ4BdmkHoe7usloEN0;5ZB&G7anHd(zK+aBw5#
zl`x}!>O)Doyf+%Ahasf+P(;ZAuR>~*EVkEL1hTy1m2uA$D1rTYaBjk)zQy3ziSIbl
z_Hg;G1hoE9C}oS1WIkA|_cHU);LwvN3Ov1rVAkyXyUCquzfRMxsnj|{6Ktu#Js))f
z?*&aejAaihh6{di{o7E6c7}}&Uv1xyLH|}5BDd|;EUGQQ$8iYk*YJW_{`3ML4xJK`
z^>XjWCvEi)I%-25q)1(jsu8jTzz3y%)%;SF4D$CFn~f2yK-#^2omoLvEkl;zq-mY>
zvti4TUT%p0NMR?t5#kfexohl^i`QQ)pvj1miv{0^XDsscT^_%|^Z9@dDJ_0!e7Mbi
zm%(o=#rnHB0PT=GO<;G|dG%5Sg^I`UMT~fz+wo(T%vyx?;$WfC2BmOhL(Ld~6N;Vo
zs=TK3NpG=MC>dybeVac6ce|F@Zk1Wui1iKAB~kr?9tn=KMC@?2k5FiyM7}(JUoo&W
z%XMO84D~kI1`mKPi;_H|?WVAcX0$GDl#b&ka8{dDTKV2PSgZWr-)$lh?`D#VJ2F*A
zq;<l`J$o4caboiA7Zy*hpV3*Ol03rGEcBj?q^syf{y@93CN-JChIb*vk}cZg+)|xN
ztY0X((zxjl@Ow@crMzRQVV49^Xu(#ZRX@Y3RomIf*1=m6u4TxwFh%@O-1iJt_r(-(
zRHMx*Cz!i**v+_I`?W!D{OtwRJ+P`P&~q>c&{N>~Y=Sb3Gkl)#wwuExxVLj0R`!a`
zU>Jr6NS0H&aJ^4~h=%45upjOGy0$ct(G~F@fajhGmZy)ksY|H$ih8zwVmfj@8295F
z%A;?EwG|eE^UR`i&@v8&t%8~b`>FZ^vwA7ZoB+#HL`J)n*V81_Me+&(Y49%Dg6n&q
zA$1q>p`r+Cp2YgIw~vTKFJ?zeQfQD%WZmDk**zfy6nZ<i7fkC4&^AMCRJdW=&(oC@
zqVljK^dL@CT<@!B5P*yaPs6AUz<f>VX<|lX$R#hVAJJg<^nLfvDrXHMA2Q^r_tvb2
zsn1^M+SWZf2lSWnCFLK&b=w5@nG`1RhQWR;h*Z|aQP`EImQ{>0$i>$)9K^h(S%jpo
zrAW$u?&fkr6~q@^a}j~`6qwF!zoLZe%8#qI3Du~eA<YDT_T!k<o{=M7A&}vfc?Nf_
z4M>rci)}r%&$rihCnZwo)OCZrQ{kIku{$Y;m_8M{73gN8f2w+|tmq^B|CW8hD5oW+
z{>0<g!*YF{xtM|nRvMQ?6zhwr_=3sJb(hn56NcW4{HW_l7wic>rJ+iSEG!H_8;^LZ
z8P3eDMIab65^nOX-*h2Z{kpv+mLUL-z<LRaM~PAT-Ri&qZRsM4P!OH&BH{<tuPwI;
zc@cs;fJMyDxwuobBHyCR0PB04##plOX(+WQ-GO89J|&!0>{R+0)z(v#hjLB|lHkc6
zToJCq`1ch{DJiWe@I3<Z8D+jb6f6Nreo6ciD&$bP{4l%Uqk3T$45%>{f$XN!GNe2a
zzpPiiOWx&LYodB+u|qxwX;ed!42>`fF9^0=fK<|O-kyp-*?<b@7=8=O2|yG~YYhcP
zQalci-%dR_oo_$p2+;tr8eF8Ehbtr@wZx?rebY99Bo2o243f9w69e}P-LjwN&O{d*
z-R|Pw>A^B6R`7dm-bwp;q@Xnnvr=xV61m*;3&v*)MvvuxYi@fmr(aW#UWej6IXs09
zh><lLS0#vUIBmT%dYik$&9Rjq>5lkFX*a!-9QWHGnB%0biJGKYusED{h7$xVso(@#
z>}V3J6(%w7xU_LMYqF8R)@<AiMG@~*HnPTD6fr>J;Ka=903AYLlF2kF{8c+*tAA7T
z34v|cb={T-`n*o@JNtk+esJC~Jb#&i16t$qzK{ihmf|aIB4ZeRYZGpxHtqotA&e;g
zyWNu>M12sMSFW5|Bu}}r*#fL>Qy!TULrS4cH8tIYk`HltD(n5B$=)oG>GuA=38Dsk
z5Ww&2&4BO3^$0`+EvD#(R)V#CuHWD4$!4Ol#$<6(#tfM*MTABw554^-Cp%qdf}t7j
z@cJodY`N|8*qyZp?IlX&J(ciM##w79B3NiykDU=f<IYE`G3UAfSd|b&iVB6!zbsI+
zV)&Ww?ptxPNp$gzN@45F2SHMWvlU5Jv#tIl76kvH5&)4e%#HeI{q0{r#j_aIb1iA%
zb0P5^I2IyJU_}UM8lp{k!3H>Qr;RT@w)OoFL55?o4Ul|DyQVVkUxclE^OF~Vh!d{w
zBv%y?sEyw_Hr*$anwZ<KiK-ncPq?%*1si_&o&&C@ZhgO;fFM7S!@YdxiV1hu<?kC~
zV@F=xKrLrpv1tJR^k<Zr$(91HSbApL*fYuuEU!>i6@6A~l}W|#<7eDb)XfuQ3I-$S
zhICZP=@`4A|85Z7lRgs0jWvMV^QqIsN0lgxkzwm`ZVi_gW-V-h;R|rnd9iXwTBlf(
zzOXRItTGCFq%~hB_1Ho@A%^GZl?6!i3$u=9VqpT9XxH;mHoGWO{&^5*q8~G7{m~y^
z*ssLY;#;!Ic85nr!mcP81+)ML72<^q?9E%kI}OfVX=|$ryV5G~h{zKZZD57vpL545
za{C#5(AOvg!V(qaG<Pm4_7M}lclm23p*K5s4D6zsjZA(o>N-X<7H&>s(fp-=)%q&&
z=`hGYo59YL_VvEX!QZytq?Wz-8F-bHjJYaH`h`8MCB#J&stskyaSK;f>mmP1^mb8J
z$l;j&JPFo-9#Nk}%orQ&BUkbJG=B<L_g<9t_8Si&*CajgDooP7&El$iPi$LlZg+qg
zWI$$O)k58&*+iWXFG@u@=X|1p!ZN7QaW2C+{jcPyKqc)tl}XQWpd|xZY^WQ%_?=f|
z08UMix+jY<_{!Jud>vO9pR9jI8#k!M!dEM%L|C-Vz~<SBnN6#@zL^)8$uN>R%nyN7
z%fkvS4&d@V2QSwwDaKz?f$29)6Sa>qpzwDn_vu{*H!<KBWcn0h%6{Rf6%JWcx_0n3
z@E(L%+89%FIZAN5LS6El()V1RNcBZ07+Ykq=VTajf5S4O#5*M~{SFzb>33(~ne4sN
zpeTxC3--b208Kf+>7i(}s5&iFvVBKB-K#K6{&5tjPRJO*yJ-PZ_Xx{4BiP~P#AhaJ
zSy?jE7ouP^C5W2<H9*S0=8RFa@et*6yx{zNx9qIHLiFtc`sgD5ipfD^M?-^y0FzdH
zO_C(E4_-4sp5QiKtob?$hsB2R0v1~OrWSZv{7f@(i2xz>BKvmr%o(MV{gVE{NB&S6
z(5XQlJffzT0dKzV_>4u6mm9kvKWRGZ`Oz%Q?Z=9-tb{qkI*jq*3!aeePah>$<kUTS
z|7G(&=!a{=<eS6S>S@unR=2N^xP*~b=TL;x!L*L`T<9aHx@Xe0!3sT7rh2L(?X;1*
ze+5=u=!Qy=?WLmo0z0YKPbJ)~uFSJHoJzT5eU%sg%QZ5o19!2|xxpN%4yKx<l4O)v
z!V{BOd-JGHq5|&+bSxSawEg}u@LdsAwzf!3#MFZw<No?4yCo}Zmp10p6*+XnSGZNe
zLCsP}_93o&4sBWN`9AZ*Qjz}Ba|j2W0Z=+(8Fo+~CKCJNB`Eb<+T;Ph9`VE6A6Urg
zH3RYXia{E49i@))iUZ%U?ihqKuw0y5)dZgT-2x)D&Z`EdBPW2vW9|^&{;VeF$Sgn-
z!T*7{Y7p2HP)4q0{eVm<A8=R%)2`C9AF+W&lJ-;qm()5#(rU+q?R+I4lE!~Je?6WH
zu_+aSQ67QQ;nZ(5YPByH#$Uy$wY8;`MR+mpaby`aEDpGWIOy)5CagpI${nNuKoDCA
z8Rt@gDdJ+o5!xa+leT5gu0g%4vu!*Ct-0_&L=3tHHjonw{Br>RiGXpe>a^iz-sSS6
z-$^6-1O#>OV2j+|+(TaZ>m#|!JQe5ojW&m)3|5i4=S|+yS3{}Ax>!x_C!yM?J||XM
z_ygEUExAATyu@^-@sT2v_%@g>FbY3oD;)|y=xQiNq7>>|{N1*4D-Zxnv%ORb<StW%
z*<p)$=21yVZ3WC|8Qu|A=@|dnaFD4kPBLc(9Pm1xyVbZ?+LZdI%yzH`y<%4+=pmpB
zcUyh^(mllQ;bpBWbjR@gy^eCKAsAfS3<9C&@;dUZ%m>j2Jfykc0#J>+*s2^@dwLGw
zK`$pFq6*KcDw2MeBu<T(S;e?TkV$4~fo^fXAiN*^8fnQ){aD8FgP+KAw;LJT|2NS#
zFF`e?Sc@bx6mrV%JOLuhjt77^eDnE|k4G%D_82wbRELBQl`-U+i1Fh18t#xtjySzG
z=nFyyqbA{khKnrW;#z8^tC3M)`?iB2KqnALVEH#gRGS}R&wf|_NfCuaxtY#p;AbWe
z99Lv#mdi}Y#fzzcQN=wBj{tJHOX$f?de6RDK6#5nwlnlQa!5m4DqH0}O;FfDkE%6B
zV^OxF4bQ!=d5CL3JaTr;BBSZ!0o-?h9P;`l?~~lyc$9aWYg)nVyQ6+P>_b{IySUZ#
zzRksiEy#{(fY4Q<VVKOYV_|ueKR-S#g0D1PXH{p`H+i{+DkvVqQApbX=r}y}B8pC7
zeKT>kE9l=MW+N+*y`*gkM>*VBMxdTqs`-}X!GM5I<Cb{4qX%z?_<1fZ)<l|VZOb`M
zS>kZ4o2O2)XCzB?uvL(QIbIQ7!d4XE-^WPS<wxa-|IgG4qg5N}7h5eM?%IbTEuWa3
zPbp%}%0u+N?Uh_tEn3&=VV*VJj!NG<!O%h!KQOMA$iX#fK~sI)LGRm64f+Y3X>|6l
z1*|en=8_6Gc|cO-OX;1iq7^%P=bR_g*d-gz=7HB<p4qWiJdXJ$V&w@f<(%&$Lf<^I
zOOn2dfm^w@6qcP6+VTmz=W#qzBl8zzS)kTPMS+1w!TjmB^KY;vVKDCqFoXp+Ex#cI
zal7!75RaACh=Q6}fSN%^?Pv1YL~Y4vsoJ-hOJX+9iDoGjb~>dvO4>$-n=FS^QkX;~
z$Mw+|ciHJ))e^zLbH8a%YCXd%ULSJ^DU<~e(f1AUCt9|3nE<2@#8|J^v~Dm#oHp2c
zKiP75@~Jy7+7qP(vchSIOX<Md$D7-I<ikhLsNAWQjj2W=;@D-^@BfKH4FbQA4(VSK
z;?qlO;R1Fzav4JnY-b8h!qKbcthU<Lq>EO|DU&Wprc>QyyWQZ^BR$J+Ep|bwi*Ar;
zD`!RtWVQZa!<OMb5|CrbAJoZvpn)3$4Bn;||Gmd7RbO<fXP8U0qw_?dF^678a9dGm
zZoU#Fh<99;%*52awFt0NqkHQ$BN^R~F4|!dZEYMH45IfGweyjKG-ST_6Ii<MHQN!b
zw_Bg-n_}%P-DKr#-V%en%ZS{>MqBu$_*FN8&I*tF0Ixk}g%KsjNyt+1@OFh~-wi1y
z`~GcTl|8h40+^uPs{|qsPh`39TUQ#fFaiwSY0D-C81qgb_R%u6Z}Qc-Ej;n*iEDj<
z<8H12px_$5&}B!TIcKE3cttp_iYs<G$rrLe%5)zZ%9sq81VRTmvFRtoh+qC(vo{*K
z9vZs|4~$;(bxsa%?;~X*b<eUj*#5jQAVx%^i|CT3Ka_At-ajhTsGa}O|Bi>)>mQgp
zHbwEgs){bLiOw?l9t>fI7Xh9!zKNI$<IkJt_{Fh17*gGk$^1YtwdDQbx-IEVEVI-6
zxBaFpbt<2ODxr|h{#DeO+uz~qzVN#}Em}r-)I4_RbTc7yl_O+fzZ5(ekP82Epo0_&
zKBNQ4GLCkIT1o~>mDS&i8uZUu?M|1L;7(I<L&Z<UM7p$cLh4l{j3f(YCfYNwq)32e
zw4aonEHJJraYCa%Zjg>T-6)WT0_A~4Q%=hu#_M0K1i#e+vP`sdS==8FbzSbwpVoM1
z`pH$w?moQlx5}IuSqpW;o#VWqWg+Fo63a+&^uz{JXmj5>b%ilfEn&5J5^DRLZwF28
zcUy8a51)q>6F`Bksn6)tl;lzEZrM?j^trIcsAXd8dO=v$UEguRi#wmrQ}I$!@J*h(
zD%Vi2w1tAA(7hQ=(33ciJhC+1+|#8P^ea$w!K9@>3K4LP71V<!I-PS=@OM(uO3O$p
zuqbwdxtS{&z{fetsaUrdj)PI|F8>6Xef%8in(?tX$Blq|XUfO0#_;>V!go<KPr{a_
zyuscLW~=*RX%Mz;O1Og4mx>DgHd{BTc@vl#>AQ^<r(LvHEReJWtB{)!wUqnj$HmaC
zEW2Mk2SXeO*Zh=@Xnug%;k90E9ll@>OvOJSkQv05V9Vrh8|FF+-CiwZkj&q_PH6zX
zHjZ|dBMT&1{Zt%1p5SgM+OGYKbv<zfaZS?vQ<}JmDl4Pu;jU)Nuu)PStE0Y!xxt#q
zOX80vN&egOmzARie+g!3ix0GF!z(l8|FBe0pf+>Z*Zt(#-9X~l{`ByhLqrgz=>>HN
z-jQ>XrCz~s@)4hXflHh;SleFTBls^fBjUHC#&<|^iBJe^{xTSn^j(DB?<YY&b#Xat
zx^egtJewv%@MZRREE(AGQ-jxbbKMkG6-zrp4wBqJ|CJvFCt=^j7Tnk*Ky@|Ksu&+S
z1qDT)!7nQ3K-^pDJr0j!#T)f<@4vJn*`n2P?8!Q8yu*4zx4;}*lol1i?bsd`*FgI)
zgSO$AR4}nPgX=+5u1E&i+-L(#70sjXPY<ZHCa5C3MnA5{X$WF-hP}D*PA>(UlQ^72
z(j*$NvFo7jjd_IGN9Gyeuyg?KGC$Ztj(#7Rau_sFJ~|J!Hv#61$=?I*=2f-1Nq!WU
zZ<A?j-+|u&FBM~g5>bh!{KF+4bTv)|o-ry$P$f)f8t*K)FLfK0VVBe&1#5W5+C1qa
zkjHvzZV?Pf{<yKDcEhR%<V=Cay-Shh!^>cl6RU?ekXIJ#%VD3xpIK?(asH`<bR@x8
zs^Wz-d1UZ*1zzstaGZT|Zp18mdqq#b%Uo$BnK%~wp?(6@R!JOBI|7ZuB`N_kRJILV
zHZ*nkFc=^bl`c>KdMDF2VgH6=|NLViS>n;@$>YCf!{a9q#18JKieGqry8*0SmcKr)
zDGp7bR`vJGRzqegoJ>ahKAr=ljvPS`F&N6VV1XeG-CAVCBSp%&!dPIKh`Ll*ck{vl
zI?SSkS>N4-{Ac;H2+w6mwNlJ(m2(?IgdDfgqg|<bx=g$LNBS&91rlUFG+*m|c?F*W
zzy1Fk_6trvROeU4ivB`{Tj`Bfq}j<9JaT<as+SI}(ptU;c|GSF_~=#YTj<vu`;a47
zmdQ8HNn6{z8A4XQW#1AR14W;tH4wo3rzJ#2Lm|<)tiOyfDHEVtc0M8EEh6B6A}wRn
ztifolRY>RWMoP=}rk=#bCFZKjqtl<H0cc-+mWchP1f_eF^Lc3gSEZw&IK^(2nBB0z
z$rFJ}zoT&JWjZad7bnao-8@}AWz{a2nQt~1Lj$Hy09lu9i~?^n06&OF*F<JBSG1dn
zIYFJIDG!=hzp9!t1uW&w0{U|Wo%5bhbi38dqAksJmBO_C(9Np9B}V=Oi+2g|mJ(4}
zRvqDjg>}WA-R}36>>(DWy@-XBjJc;2aN=65nM1YtSB>D$AKkF*_VXh<-+_7VW(Tm|
zQKQ2XD?jZk9E^2Qm<5tE-~aP+nAFDXw0d8G>D$AasE8V&7UE59?}vf~{7D?p-gPq$
zR_w|0L@0f`WK7RN++{aA9o*(?I5q_~KR*F{%cN##zXQIH0Y5j>=WXW2<p2ydEW=>n
zy##v&$d_6<7#xq_+uQy=NRx8RvU%S~K~GJmxQ+YQizbcoW(mLDTGet&i<`6NBXH^E
zNX~H$0-T=7Q%XqV%Fq+JlIig9hZ!i{#uzxH%KO28ql<sg<wW6<?$pe$eInM-cKZKc
zDO_MJHxdL{yQEMy?0`)*Bt%ROB0q@$@GFTjxO=euiPJ(p)gePH;kHhs)3djZj3xHl
z-EC5@8jMkl7ducVH^H^^mUks5XpqMhMw5*NB7CH70x_uq{g{2;eEH$_v$lv<iOz?3
zi;$PqQ2Dml9L|ip1=&#82#5g!corY@ec;T}rtGXnUP@O{u)kDEUo9~Z!&xi_-1Xqh
z0JVbjozTLz-frZImcDf@;A2&Uuv6xcFTN)KDl{^wH#Gqp&%3;{cu0J}diNSc1V2t$
ziH6yNZd_@I1TZ8Q>hw55c8Pd6>p)-ZhPLV8wQU{g0hhZaW<NK^Co(ize9)5c^c^1z
z@x5GUiWTK`gu%3|I9!+FBRl{NxV8`E4=P=AiAPq0TIS<ppj-Fk8q3UGZaawvXBv!F
z>V!7ZX)Mus;>Z`0Tmnyzr?kpQ5XuDfk~8k+D+oem)$uXEWB{|{9{dFr$@!ljZP<Mn
zOv1d6oX!?J32B1P@_kA%-;pnlaaoF07B0^s2A>;+7b6juZF>N5CuUm?3EJlC4P;et
z#E=3(@o}2w=i0r{#)tiqv+pp*(7Qp5a)rV`SDFwxso%ofZ`&CJj%b{qW5r$~4aj2l
z<a(97j}I3(OI->v-UQa=pm(>dxWhS*P}-}Bmlre`EBX;I9!FgOcdWqb!)UX8sNFHX
z{5M#J2&!6qa5rak?gq{fxsei~5n30qAdW1t!af`MaHmBWTKBUoW>!^cy6ujLn~VX)
zd&%s?qABrq_b*|?U1AP+%PvVypz0OBFtwCN4m(p_xi{;8Xn!^Xg?MX57IGddO!QHJ
zsLGL>s}%-GtGpDA&}Z_K^ebhohSrVWR|pshyHQJ#6$f9Lh{@tsU8Q^xZj_4n5#<N(
zlKRk<WdjuLs$w6VBGk}{=?3dylf4hntdWilj2tj`0Q1W_spF-!)-|(k%YNWy7BM7H
zrJtoQ@ZQ=jnVBfGPUePmY^=L*G3w*tFkbcLvUY`&O*cLhco!Ay?1FBH*B<Ue*~sLl
z%cMy!X3ti$$&8ja(g!TzPyr3jDuI}`_Ufdtn~bD^b(M|ZnSU3b=I07+sp}EXq9)Ve
zC-@vP31CT>e~9nYdS<#m(Q=)ob9t(TD-9O?942@ci$u%KzBE;UP~Pq*de@-Rs}Rw+
zyer|@UMaZfz~D7P0jd>cQb02bIXJ!)Fdc0l$I6kzlP<K|Y6DOi344&vH&K_~BZAEj
z&gk=28Eagi8K|uDhI2V&LM548JLpf6t*F6sAhg=_rYJhmYRHMNN&R5Z71i?{S2jOD
z<k?(1{5-4DegGD6$qT^YOWRC>tbV|qaQ&a`J{`V$>fzeDqc!g~TjS<^yLb`?+@k^8
zADpmNiba+d<wXVDk>$OyydqZAy@<((YY>!Id5wi@hFuR$<^>zg<raA1LF<OkKT*0k
zAfdeYGu`X1$cy*mBqQB~YLp^vA$J-Ln_$uaw-&a$31<~b#h9m6uu<T>dJR(0wC8KI
zO{=}dduTIkr<^-{40+QHsm@B+`jXK=!XEp<J6-n|Wr@*cQ(S2uT(V<uuCuZ4EMpI)
zGTXq>?#=DgGtslyZw1hQB<z)b=(C$Cj6nATo<dm%O}iYb&ui!}D+{RTBYxWl%gxoU
z96fyC)-0l1fddWLK?vf?iPzE>^-QdE%;Y`>%;3aWu1(W((9qjFJ}_9&f&0=ezC?Nm
zsNneOPhM;hUSm4~&t-x3?&O-{%3s(BX-6K&ak5vm6HZVqn5)r+wttS9cg=!NRyUo=
z6Dghv5BV5dXiGio-Nyd_PQP!Vx)%j?-EykKl2?;iCv6!*eblkS=K?klzJUOcKG6$W
zLb79Nn*@DstIn;|E>qLCvVwNu+WV&=<q}4)a!MHK!NUU=fg!lfvs!ZQh}s5h<k+T{
zi+ZUMF^`~1W{|Sk{+gC}-d@@3?Ie`CzBn9jl-Dr7tbTV400ho=++X|YhWk2%;(x)|
z2vAbm%FLfpkPQF&=p<g6y-ki%c<o`6zBUn9aYGSz=W-{g8e_LZH(wZ#1I_}DU`t+-
zC7e@rteV4`<R{E?!UWmmp{Xu7^k>M+96*A(I5{E{MM>Ufds?z?3lr2ojLQof=fWTN
zTu&<%i8pyT-IlzaHYo|K%7K1n+k`nu6k(PL`ev#qgil^p<9fP$1B2*z()C>YGlJdY
ztH;)d)`yTKHDRq%ahe$MT5gwY#2)p&u*<^_g-y>AGX^`Q|DS)~2La_3O(r;W(&SuG
z%u8An_`ipMd{7Qydi;z*B_6sIVuJ}>0>Ot&H9AY^s8O&X@<qP-3a=E#RD-!T>2R^M
z*j>yO`WC`sac_vxnT3=d!DN7oB*b%~y8=pxqI8QKAEg4WY>mYIUg#%Lgj!la3as^=
zE37{4lXKe&JhJGvaNsS0UNsQhW8=EBw2L7IqlJ9$3T3McXI!MsVaYDJW!R2D@k{N(
z9J7>11YN)Gs7b*8yjkU>l<t4FS&UiG%MNuqHttnQhiG}~=LJhg4BK4e1SvlBB=k?W
zM*0*i`}mLHc7At=4B+NpL;Y@CnE`{URr$&AZX6&{37y_uaG*J;Q6Bk}>!k>d1EC^r
zNIK-u8D1JdTR5kRR4oXj6fOn+jmyx-@6i+4)GQU0PV(;boR9TVs`o|rlfCi~E)$|b
z8mwTqFB8>xIn3~#a+34CU6Ri|J_tu=BoiPWD&sIUi<&ZgYME}bfA)l%ug8&hHTCe^
zRhV$#)|`?68>je52wA4!o&^JlBYOH>k&>ty9xagFNEhe@je!6Z8gMW}>B?UF*mPyV
zjLJGD{)qabm$PrGTwK7-)GuuZI)*SB#M9R_r9=9v+%~XJ&qL+Y*je9AYnW}*UIzqF
z1LAQ9XS!viT#GC)Py$jO-l##OjrFxX9OCawzB4TCql2`ht0v>^%KD1j1nK|L(jp^}
z0{~#syDOw0{$D_E4UkG1*i21p;`8*3oK%7U&Sb|Nf<=pUn_+>dq3yIr(ejIVI~~ic
zau#=w5;<MGx><dJ1LH?ei&Sy*s~M}@%N!bHk@q5Bsg%{Mt&`f|(|2BL9z|f}*)Ox>
zjA53T&eBj<m$Hmal!Xe&z9Hl~Z;?!D6*mCDtHa^yCABEBS;+tT^HWhE#B*&e2{jFd
zTo02#6|R4}X_6{&{g$wm8?##<lE+rQK7#58*Db!OJhX0&IkZp{`Ncy21$8#g^zmEQ
zyk9?HC<N@l!;I`mzGh5A`ed}8RI|}$#$v#xuNT!}2x_dtA8-4-%}AC>ePCW95q7iq
zD9o;b&PT=zeSp0tR-Ds<z5&(gQBrt5w!Nl$Lbx42B5$v|^#wZbR#FV3vOm8XY6k{v
zgvrayPMLb`1&7ztql21Gw}`l<c^kyy!7Z9xDOwp<rDv9QG$}HC^N|I3{?1`u36#b|
zRWX4XAKk35XfUT!-8-=XmiT!IJVDI1o0NpHex}iTUzOR|$9SHWF8vgwDCC?QV@~if
zW3#S+rlJf`f#HA4XIhTMQ}z9(kcSV8r4NbCOVtq(xp;_h_Vto6UgsgEp5FMiC5pJ+
zuvaqa4z`JOuljBwP$>7ZcZ++cQ0v|$D_H45%FO3=OOmM<Y3qQag73B{{?GZHg7doA
zUS>)reku4S%T@KIwtR%j|4ZwnXmT7Qiga<*VH~MxUt(SV2rnNJAES)m&8Usu2U2rY
zCh|2np_8;%?{-n1mdzhas1?|{&y(mgvb2K(G`qm@XSg%TtS$t7)}ZDmo5g5%_KlXY
zGC`*su!)RWUb+F;8^iIK5)M&^cc}risH#YpCZ#_5^b$OefH4<Xr6qDJ^PXL|n{xW^
z^ZVFJFIm>>{o!O23&A+Fy%ubyB*aBdb!4rW3XcADtuSE=&s=K7)#)igs+n$uF#+%V
z%`1fuRR4tlV&TY<<#92vn&mlwdj#C>04LwG<|mZEuRL6cfU+i$1fdA=0H0ZTuYw4^
zM6@$bvM^?>YdbuM>K}+*6lW^Asc$ao^Hap94Is4^$bF*tEnzLAZ^ahtu(v*3J-Ujh
zoyMNT?^bBgqg>H5;DXq3HB|Mhk8~`&MyP*{I7uMn`psEQXh(DG(UH}JlA31ieIV5^
z$Jq*;xJWtcqpu-JK}rH_zs5%KbMm(!*QgezEn~?UQ%d2Xhtf5N?HO^{coITVv?mD1
zfv6A9)aGWR*cv3B>k*}|-MkL{)<ohC`QR6EEdixu$usR9$}asUy*6sEI-1-<FIqPn
zNLZA^7ZVG&5Ib$A{}xkXX!PQ(&o67<0JT^i>h9cx&5hH_T$jERWxroUQ)uB$Uhw0p
z{z}vna7u(q`HMI>Bc1Gs{}mf_8$Kw)CWtf5>Eku$dt(97U4>eqD|ZUSCqpcgn<1Vn
z?`JCv=?G!4h|l6d^k){W?)|T;`c0hmcdkr8`jY|*c3_V}zXT3#sTVp6g!Rh6Rlub2
zhUzGBG|wB|2iDcvN}?8jvF3(oW8esNo|*+~jyh&8p#bgQ7|O18<1J^f*G(=+%qR5i
z;3HU?ti~x(pjsV#d9j95Z!K~2v;j=7Enbl$-F-EopabGj05h}~As7Kd@uKj@t3-G<
z$l?MU&r|WDIz)n30N#5GbKjh^hhWE5*^5kOotbCj>OC4MNptN!D{h~8B&~(uGV-=0
zho$I*fVh@8ipNv8DDcF>|0vdEYIE&T&swfbM-ix~xyp3}&5{3j?_vQ0`G2Rtz4ddl
z{a$(yB1ZvyeP?!9Fef>^#fBXMpuSeswXekskfbQ2)?E_ieHfYUw!}gC@i)A|#d*ag
z*xLg;UP|KdIo<tF)@qzC^b2MQiC)s_*(6a<w5)=IOs&1`R|4SJg3DlGMZ?KRR7VM=
zo&D1>QC1*4@D}`qoY=G{)ybVrD<Y3ma=oLcz4E0Dt8cLrpmXvl1&Jxmc9@HL-8(Cy
zq_)F^kpNJ|Fu27~z#%4!(C|4Il0pKx82@D22uJR4I&WV5;)nqwFFb7dF@O1zOeKh6
ze(6V)EP*@p*4hA&-xY9uNk!Z-$H1FRf%F@ScO>|-4%&(>X|7D0Nq&?YZt2m0H_m<X
z)Po@;M*E3eU=8bVRqQ8=x*SJ+(Q=x8dnxZwSh=E9ZO0hYvm;FiS!R2A`km-8SwnRc
z{LX=;n`!4ujNNPjSKYy=Je1Vf|4kHE<X%IaY=|zUhxt-iMPgEF`i<Zvrv`^?RCZno
z;sjqipRn_>o(vM*>1K4HA`>8QwKqI5RcW3}dQqJFAvfD#pkaPiV~9JVwf#lwBsiRN
zK)auk&OE-<)Ivtk=3?+`sBPo<gVW?F=N1IdeZ~F_GVl~pv(3--zqB=vgYCDAQ=M{i
zl0$dK3j=66>RgheB0!PK7o-ikeMhpRY^pD0GlK+AQJWj4J-&L%>_KqHV)&4u@)AH_
z0}6XsNUFNdwbTe@B?6SqGSA>x63`#3-0VJtL3P{;KGkS9-@8M{Y0)&{)nK0Yi$Jx;
z9k`64F2k5qAz6E!>O|!_0IpUe)WdY?Z>EJM%*|RLskKbTap8d;;>Cn5Yn}+fRX2;y
zFR<izg8Z;s(87qLmrFaZc9F1M+8OlAGNuS;5c^B7ejd;ep=lcaxGkPNS0#TV3v2tQ
z&z|=;Jzwrg9jvh}Bu`%<&)p~xyl&v*@v9=zdr+(`ssLK&*U#d_c;J%X4$mXA2<tEV
zB|nFex^g;UOni3NbcEE+yl2S|SdXI=^)H{2r!a|>7VEeBc96`7+tK?GQXQ~9Q6UhY
z(b>@eDx1n`<xQZ*hu1mgO7lyLJx8{xR*<Elm??hu?Js>7RR90iF`v)RyJzL;O`hdL
z`_t6wqUvyjQ=d5;I1>gc^Qbg?wzzHkl=kCx58<B!c1)i?(t2HeNH3yd`_fE_BAB`Y
zY4ywV#i6}|`j<Xw2d_YsH62|CBHL$-O4spkiY5JX(+xjR`)jpkT4B2#rCY-3sK1t)
zzElGLjYGeg0=>)b@20!f9IlimXaAzE(JGcFvSyq)-8OEsjdnCD{(_^CyAKfF!d^~g
zp$#b9QEYKCLM5|s&Xx;$X;|AKgL9&y1^`>(52B{LAq7{@BJ2Tp<XRgL72_i3xS^mp
zjBwPF=VrWcn7OxY@`j<Wzx=W6!cE{Q%9fGhsHeb_6jMEB07e8F-W{~<RAzR`Qyq|I
ziY9)-U2I^@b4`zdK^Arzq2qZHd~^p01S(R}+nhR<_S4i@hYOrp(nI=eU844~p}JEN
z$~_@AwWFckiMHjgt78Xb`Vw8N?1|P_K2lYE=lbkB&`F6`_VOqmbbf~xF9&Fa^d?0J
zm|SH7g~ikWti6mxgj2;Kg-Ks2QxWT$y?hEIm4C!CN8q@gZzfp_omrSNJO1|F9WSH5
z-^qEeKREPaygRcf?W;hk%ZRU}{5_cFPOvH0xp>7J6o|Z8)zcSW{Gp{K;kI$QMaf-(
zR&hsMWGZIY#vo<PRYx@^PgCYL8~90_zw1JBlJ89&L&mOs43MPYd|zwp2n2^fX%h?p
zK|cPEp(TDQ9Avlx!r3eX*kCu68x-Im{9@aie(99;8UCrE`oJ<rW3!yfNbVXG;~M1D
zXYh8~U6f3tsF2lyXZRN=blEPW0LtX)0ss$v$BM<?n#7sM?erP2ght*vR`65S)6dq3
z#};sc<H$O0c3#ab=1>uRTC8*zC8564Pbwy^6%lgbZrRMr)=_o~8y!RAG*9=`eWm`?
zs&B}MkL7Tm{Mgvd1c$gC&0`N1#s4rqdyzFQia+cPOtVCl1ekc_mgbK-cdmWFQV8R_
zhgAMyZvp<Zs^TuZ@hb|$W^7~R)z^=s5!A;fvgH!z4pVO2$ovw9EnDU_E=?`$JNRC&
zddN3)sT{!&aQ7Z*Y4C7;5{x0v0^sR!2V3?Di<xK$<IR&Q32UwB$5q>a*ed6+kr;I4
z?))u9$ecUvsTf2es1_<g-Z7!PZf3hK{@>#=QoKTixHwOyr6MBSo^XDk?aZdQW^Cg5
zbK_dsvkp^l8C#4TNqP5B0pL6*lnA<!&9JpQ_!?MXQ=v(<y?p@8@f^a&ey7^l7VNY4
zKCi2Lp{PU6giO_O%$i<j3d&%2=&R0Q(z4l9Sx;WSwkatvaYV%hW##X%zsN!_`nIJ5
zdF<g55@x6a{hq$-V1nV`tgF|ACQ+r|-luY-bfS=GuKbXgAfrmt6@U{~L9K(kYT>Ku
ztl+lK(q<M|yPCMY8UXR?tFkFw?}<LF@>XCBjLQuE0b-({HGwCb4|$mwEnoEoI~@&T
zh}KttbXhwT?oQfX-t9}RER90Lf#-O!xX7d2z<(*<a+5GC%5K}>v26k@xIq#j$hiRh
zBZ#|D)?Ixs>Z;~rA2Zt>qd1Z6nElhwn>h)6s5aQCWv$#y)H14hdHt66;!b|g!-=-M
zyx3I(x8e!ADSY!|=;U@Uba0q~QKTp9a|ebtL9H;@t^S73&s~DTTOr{_fm8ehIi^O=
zJ5PL|>jVfi>~Xn(<l-R8G0;8<N>B11ova$v-PmVh0Sj`OruBZgwG+^Fq2CJu_wUL~
zm<ySz9st<nJj*>zI{Q$#Iqw?GGz<OlRFl%_L#f-MJ5drZj*Pma;-VMfnN@?Q!j^eJ
zKs$yC09t9KVU#t*IkGBb?Yf1EDf)r$u9qJ3VTe&F4_GEngAHvYEdmwB3x)UI4cIxo
zzQ_4QH2i$odKET*Pc|IEC9E56lqV%_va~@aY~~Kc-HEWdPgj2AC3(FqdCwWfvOwiY
z-cax0Z>ECmReBs2+nss6GlcAgmDEL#1o%F&^otx<=S09C8>)#Mhz|fg)2QdlLFC<_
z{11m|y_hj;p}QZdax76%nVa;h+u3nVL$w(KV9l%NzcZ9&;9y%$&b#nXHlSqFv^qe6
z2(d6si=)2yuuJIu{<(O5eLbp0V>yqA+*4f0aH)tzbQ}3ng1Qy!G&jzHLE7HLbNTM!
zv2jLEcB<BDW?J3V%1i_j`a}W>d{T@>i{0ocP^kNVCm#~gUgVNqLZT|iWQYPh2>+Y>
zupSUzP=DNI4mP7(a8+Q-x8KweT|@*nQqf?o6p8HIe#)8xPZ)~9;)>eTBCm{3fXP62
zIz`LBt78qZgS6y!VBJVu{ZwhSzJ`;fhzNnnr2jiYbn%6Mw@8$5@wFgtNQYxB(_tJN
z`<l!gO9u><xre~R)&!;P+0FGgtboK9!_We}OtMgzmILoP)p>Qee1!tW7<IBQby4Hq
z48c1Tx=iv#R+5$KFF1|K{S9R^gp>N`-_BN$c*W0YZG^7gF*VqrUjWl|+YU}Sw&v93
z^;phbZ_qj6=kw5mK9sa&xYPT_lvEr=?6~m%y5mxEhP#b=W47Ag$bj7T&77|tcrZg5
zc-v0|p`2Jd<B(geouOmk<mAdBpzMnF3otI*19dyk#Di<s4Zu!mqeh0D!nQQkbDLjE
zep!pHeqNi9^mwO=pf&H5yrcVaBg@0v;Cp7KzJWG?LJZT_#e}(&_@^NNeJMdYl_%EV
zwF}C5xO+=)`^odp@DTr=0pBggovxn0jCkgR4&J&_T=d9(=idi~SAG5ldPvXitu~X!
zW0ipNifrzwjFBOSWLJ(=zJECXk0}{_s|A2H-{=^5(pNLp)LyX3e?>bIxoq;@L|7yj
zWXN9S)4uw>HFFHOwy(+UaLA;|)eQKzN6(%Qiir)gd6NCkP@(Zs{x~e^Mf^rvWKF4z
zm4I3m*?2%37?{RVxFVtrVc^#eVS=2$UV<#AuyD8A*mO#Jh^VxdQ{#Sj#>KWg=)zN(
z`{h2YWj!t@YaqD|#H7dvXsC4m^lc^9eZFq^=3?A(a>rif!!%zs2N3gM%}d-gIvN);
zx}{PCZ9q;Ipg^c;V)_^|r{wP{cXd%w;WFUCb%O&^OV{kxo4!u4Kn4Z2eMcDO6fO4%
z=Z{jDm^!q}IALCp8zhR-LegEtimd$euso@!5979z)shOcD?s_8Axa`kztw#Vh0Q9H
z1<kws{o?WE<QSF<j|}u4+||v&>4e>+@ajU{?M`K~<{GqBMiK>QG=(*%MZ!Qn+EJ5T
z#@RDf28?x_MK6$Z+P)}1m9}(?ZC}fUyqi<F&Bg#tR7Y|HbyW<-$5@VIk)Y^ny3-J+
z0tLxUD7}eeyXRJIg0$r!14mk0f7{NGhjA_Pzb*1?=gu)SdSdwyY8GO&ZSz!sL4Wyg
zy%&M@R_BUYz#&`To${6tW-tvY^?F<k{zaI2T@>yeHX^q;C`+GEN&o2+b3hIXa@rv{
zMP$qP`$7NsfHJ=5j&YTR0;`(+SU-=PGnM<$5OSnwS-e*tC#^UixVf;(!EIzp@eG=)
zFQ_<^WlnpY*-ab!%5_b&i#wM_4L&0emOo#<9m9#$%P=vQqbeEk2kpgQ0wImsJ)|+u
zXuJE}r1V;!u<ktjX=cZ@$5D@tt?eh3oVlHtd?l~Q2LscF)&BpdI@b5mcj69uBGWYI
zf|C4!r`D=vQTR>lgMIJsoSg*T3+uG{c0&1S`8NJI>Cd~qw<Oid17>YiN%Cut?X8KK
z&OZLG;w6Ah%59J3{Ut9>V$B5GRJ>xQT7YWre|ujESWpK&vEn;a0%jrXr>0iQX0ilA
z$7p#Z*nglpD@pQ(JV7Bf49zl*49JrC5X%Rk>>XO?U9?WNzcU)dM3osBlBzkDrzVVk
z;4nT)5gY!Ug%(St18=t5*nfdKlu*&~RCjG6EXBb!){vPx``k9wle(7O0*FBlZraRU
zcZ(j_N|@oPcQ@j&tE95CQP>Vn*_4Ux`A#NewyJAqSEky$u2a@<`@h}DC>Z+bc2ohd
zl(GHR5zsj6Ok=n|jLRa%usmgbb72zurcwuKa$~-G(_T?(@T_Kew9|jqVTzbmgX~G~
z<6MN9%vditU>Yz-NAtf(#3nYcZ<t3yd&q!I%cbunO&Z&=#rG=U@Pi6SFQ>#M`7M}3
z0#M1d=B)2|Wshwp#XC+C(7lO3=lB99*S-*c{>Y2rCsd|3+U1<ZzH?ayV)x}_zRIm)
z+=3=k2(R#NIL>+nM5HQEI$sH3;DiHuB=QTQR;I-wz1>~2K5IAtFH3>JeK}*qaw>{F
zrBKl!!;j93fK;ofuG2HUsi1h&g3&f%&L-Xf6Zp~W8I)!)>xf(o%gGAADjlUXCUAsv
z#C-0-1!!m^T0OQb?wPQ5`}5j8l$HOgN;m-=`KD+Y^kRK3o9>80%ytSKL1fy_3>AOB
zfE9@}ImRuSa(G@g_)kEqloKWdPVs{2Sp0b5_QaF#({!{31AVo9t`YoKXX4B_yQLw)
z3)J^s52141l}p)i7d7mk7?YuWX3VWWR-RtbA#Sik@1I%)&===c-s`0*zv=UC%T!!r
zKy9YLUf#f=hg-Sy1IV<0;+aP^uBwL)g*DnBS$0&lQ*&Wxo5h)}H9nTL(1M(E-p}6L
zV!CI&F__PPO__|fk3=rQq7Ro}$=*jXo=GEJV(`qH#dmOO%Ixq9fCEBEHGGZb8S^1R
zJNw-;w9No)*<`NL8gU4I4qCCIiIr+MDwoS0fbKapp46LFZwh$>AmF+h_)pTG0TtHe
zGzE2fQ`^`O-)MOAs(0u48U}@77U}Ht7GV#Vn~NBvQ^=R#WDx5{2dmq`puXC?_DP`x
zlc-nTB9SCTWDmr7MsT59xt9Yd!P$PP8IFu37zyh6x}PP;2I+wi;%q}m@<JG9XGZo+
z`U;5s-e`wCH#2d+A1`I<cP8kr*J9(L2Ekc6F-G_i3+|vma+Mmv4BbhIB}T{3aN)c}
zIXoSn#9+Eq5&yUbUXp@)NlF58AzI@zk}-#;Sk>^-37{7nYtaZf>Mb-&PRn&9kD3O0
zk3aZ?Tn||r%;qhW+P3g+nNOIDW&VK3KZ2q{=TDi{MbIUtX1j)#0O8cbDAk|<mD2K+
zCjfn6Y!s(e)g!?4tuSyBhkbWW3PfK--$_ykJUD9<<tPdVkQLB)X<A{?hS$l@=L{;<
zc=1G8%n)9I7a}mSn?|qQ7Le&2+~TFE=Py;o*pp}g@o%s2Qzb-IBH+Tyhib->7%b^K
z-7Kb!w5bPFhhKSQGqH?E$rVfIx>|780xX*&ZSnHYvT%zcP^=->9H2fKg`i7-bKbO9
zP=03JNmOMDOPdbMV3pEtoLu-h!NoopxvIQ{<dS|&%~9qL<a6lKWo?gK@$cTWF0$Db
z^s1pw^Kp-l-{U{PKZf|nr!Xcw>R~8tQ)>FE*Rg~|5B-ZI>Y)~EAN|$|sU$^dc^IKA
z4y|FaRy~n!tY9!-!~j*%s794Gi>GVJ0@|sZs&L8!3)E~bsp}~K!_DZh`9UU2{k&m?
zZ5#B_%PblL_YJo5kA-F-lNk-aKycV6{jVw4cHfw%bNGozc{0>M%JETE|NOuzD;X<e
zirw6sZjn}_B8>&|Xr-IF3)p#Zyi!D=8;U3Bb2@V}u!HgrMl_%@Q6f#0ECszx6vlJ<
zriD7GBEQ4`x%CMqu9waPV9p$0jaa@qw!YYP!Nrur@eHrvDDQ!rBvGOal^s#2nj8b+
zn}!av3DtQNJ8WoakrhdqEWLekHm+$^av+{w|BAyC;+f$dVaai0DSs<jz<;v90v9hP
z$!_&c=AggP6@^fO$G2sb@&$IJzD=lKou`sq5WNs{{qZ*&6GS7jDYs|ww9Hn>UXhT+
zh4`s=VkO=L3WPGT!zvbHEgKMt$ekWig9`+?g32XE_8?EB9zg_1mhP;qVBn^ryC=eP
zHcJ0!UUB?W^BY)(O|ZVMksvNG_c5*LZOAvDXzh;I)~;NIijrt0sA2-76$Yo~&XQ@~
z7BNh|9@6lH!d}V53kFK6++heX;AYd|WHN^5#6@b7hlk8?KZo}iFl`1T`5x@Wb20L{
z51ZS{NyDftGn;pfikAlY7L3#HkKBS^6Vihq^x3<r)L%1RNiGQRkmWQU*b=W>VhRz7
zN)QMbFAz<y2iH7K+@-y7QUx1zcf1L4b*pAMwd^krlF&BzLK-Pb-bfbHAM7x;%?`8O
zAcy`GJ$+t-Ue-vQD}G+*@>ur@W+U%H)HZ`sT<+EXKwGcJGP4u*1{yC>jbv~A+JKJq
z)Q>5JxHQKaXZvU$2Sj{mEzy$N9$8eBNT`9lAr_zgj&P>Qzu^EhYr9>w(k<E=eU-b)
zGm2r+EkKbsdViA3BMZcBV#POZj@U74D9LQ2htoA<qx~3=)NOR@i<$aMGGkS9ee_o;
z1{7v=YnPQ~bJ`C*LcB78OAY!s(%gK9u93=NV$Z$@`AS>}SGC<b3wPjNH!*Kt`6@WY
zi)#N{1NIT<kiv-K!v%~v#qwD{>$-6d$~yU3%K=8k&MMoJ*0|IE*X_fKWA`+R1mXOQ
zci}=2oqrm;6ziP1KNKl`d45CCVF2j~k#f_}^b&f0WCoR+FOIsh?%toq;t#}RM)fD;
zD21ECNlJ@?{CK;FHTxrPMp=5@WV?lj18g^R8ImMYuAy9=|3stZKR8aeXbeW&Q4}Wn
zR3rCDrzeb8=S^!QIAwm%n)O0gbz<VLU5y;Xsyua5b{{!*^#GOb8fCdEMIPxVp(>47
zC3)N1_)<Cinn=O`y-p|GYF3!xj~{iLzl45cHQP32Fo39$Ow-<LD<<puu7Y~yWumdm
z2AIScA-#ge&1vXMEMnpidTDx<05;XxvbaAZV-Dn23&N#_*5NM&P7|`K0E<0M4rnE%
zbO9;B`GVdf#7b7mMPjlm9=oL<7D6oA#@bTNviym}P%(_-fhtp$#d(F<%GayI1%X?H
zSs=yqZKdlf&YTqKurb@^evJj*s`i>Q`M|{d&8?kxj}S9}&x#j=!;Z)26Tqy~wz}I7
zAoN*|x~S&~0}z&bOgtbSBRwr_2!@7vVMO4kUG;}x^6rQ^A)DkK^s3|yNWM2afIapS
zRtGlI3VBc-xYT*nZY#Y-Ha`g5aCfu=!eCZ8%6*c_h^>2Xi1fqk>TK!>Rz)xp_~(6H
z+!*fCgd$pdI+KMc=tPo!I}T7C?c0KO6N4fpR-b#n$g9F4S)Fh9JCeS7p#651pQIsQ
z5k*{YzZzlD1<xpAr7rO8bhIqDv=_|W*c6KU8XSeF%Rgrz_<i4KmP-ddYw#fSW&=1R
zZjQidWHFHrRyt$K_!(YALZR|aculh|u`@qtYrxh}9rxbWt{CUrv*M1#P7v9tD}k`-
zIy}HuG^SWL4(Ln{ZJ0_dNV_}qY7^t#QF>2h_=*i-z4?w{v>qF7SSLOpgf$#XmCz79
zp{p<pNol9z2?AIr+psmfP%C%3-%<8U2f6@f5gj<R{BZj18#eNjXM9aD2O224K{Wjs
zt8(@Sq-CiK8*kKjP~Z18m^VuBiQnm78HXgNRX_QxpFzQQ_J`d}0i4g}$*u^DD%C_7
z_m4r4?$L2BOps!UywbY(VEOs89sH9x25YJLV~@p0jO9$PLFzv6ivZ8f<7xsA3$Of<
zu_D#9w3_W74Op9uij)gH9)Z6eerG1Lo%PVZWZ1Zm;+P2BnX|HxUp_x`ay;ZPRE2OF
z$hW0+?SmIpcVeBWO574(0LVpW6}_v2D<wNuL5?d5tWjq(MyGe)H@c-X)kskP8JxxO
zZ1fGISg_p7m72Ln3}9#k2?p0?3Ji2x2IISHqX-wFRr-*gr)2cqy*=78S+}f+wbRQi
zr@eb%>s6i^;^W}o7hF7eKK%`xhK|JE6N|KZQBXv(JBc_mL^@(eDoDV3jC!;yf==+H
zL3Vjma)CtyT|&&PRq5kZ741%NzZ@MIS+ty?gY3^0x53ar6Rg?3C|xFEF>-w(Pnk@M
z*4=3$gbu#dfKWum_r%e?9<lFfJL00|>&vj!Rd{y)-b1BeTp>$NlLF?yZnB;DD*S;}
zc@Sz&g73zCQjz}1RQjtg%=)7U>Q6t3GOE(nD}2}$2(AvJs53lvHtnr!J{>%|&^+#~
zE3>wNE92zD3fK=V?WVwI=oT;>xHXqlCeQ$DdrMI956tu2RC-^G{irtg-oj(0!!N(x
zbtjEE6@D_TuLykI&`4(rGM_s39)9X<9px%_pjBa`SJh-x_UkO{aaKJ_;Ot?1DejHW
z(jHSS9T~T|GtAven-W#ffpbNIDn=kKeOg!~;2B5q*L5zfKIJ$I(6?cs4%u6VKbCMq
zpIu~cXv?TPJqf)=nbQyGBv`?%*!6fkX(@F)`HA#12m2<2^3IlJUPIO=rEYDAJ6{x>
zTbL0c@uUtEsEz(Fe`?xh<LmEvYc9Gvou3!7ofhl-!3-cBzNB;?@pBc*utfpDg3bSq
ze#Xmnm<v77PZf7pJ4{t}rA01WnK&yFR#H&Y9DTP5R(2&WR=JG0S}s^ixxa95oaI`z
z!#a!ueiM^}E_zkFlOkZ5OUyS+sUskIuFE;viuV2^(h><WHh2<hxk(Gi)MKjFO;vix
z=xcWpEz>q*po2W>Yt{oHH86%+70e=B_rY~N7qhgzSB6ht+Yx3;TRgI}q$rqDll<;*
zuoE28|C#^XG&PqW&;W{9#K@YzCp44t2K<fOqeN|#;`<f#nl5wjoTkQ$m4h->&09F|
zM02NKyJL=gW>9kv+V+*FtOw)d1Xc<>j<G8R+6MK~)*Bi7B6rWyKc$a3kW_fl>kTng
zT=T~XZJlng)k9abPJnjb-sZz*AimEHBHX_|lE6;d)HAJ?5Ibrp$;eU1+Hz98f|ct_
z(OgHIX0q?rdMx&Gi$ZonjJTUzPMyxIR`1>!U=E}b)MEWkQcOl@>B9|vlq%N0rR$2*
zino*&J(R=Xt~KC<KqC01BXG`us*Q>TXi2Fu(p2P`cC!;jF=&Dxsr&Uo$<$d?g{~HY
zD0r7A7BT7%Vmyjj#vd`R6gN4;6g%a;6eIi0lmEDB7dKYJ#~tyQ-UD^`>^|rFRMgdg
zXLxnbdBpyeLKMGiK7>9+pYFa`#l60nqPj3Mdttg=4$1=76)=(=v#@*h!*ySu&#X>x
zbhVm~;kJP!nOI(9;4ij%lH2ts?nH|GYm^*=&GT;9B#)az)d7oxG+T@@3)Rc_5jlb#
z>bSlhal2h&z2E^)w^)3Ms8crOqNyg`40*Epnh{D=8NKO7zf9REHWS9E3UK^y`PC}i
zqkVarBgO$~$?q&V5{}Nv>Dh0r!d#1lpht5|CR>oARE6Co4e>2k+9@b%E64R(X@t9@
zlr_s4@_&n7*dv5g+nw@Q2%<QrbEjbyKwKf!1>@^p?s+&cd+OulK_6v)1B4u(AG-89
z8ZRh_8UTu<;svjP@F8oCXj9wSM39juDW$e8x@|&R5NwPTA@k0|^goVnX0vKq#y9%(
z?#ZYFzM$-(8ox^9K?k|n<2}4^2Jtij5OX>zi+P(+t{FGg#^&*)1J!6Eo6|nc{wEnb
z3W3CK--1-nzZxZZz~e%OF=0Y7fo@hd%EcHK^TK{H>fdWZ6Vz5rWnoN7v96-1v$YJZ
zR;5e??C(X0PZCesE76Y#wfvo7fSpQ$Ev-mEE4y!TBT|)Ygx@_WvZHJYCA9KR#-nX;
z#B+=M>y>*<_Qp*0lxp*ySfTo%v?3v))pK)@4bMM(1XDD_vZXv|tyWg+jVIBor8j@3
ziAImd@f^QPOqo#N$C;w2bKeS|%{pRGr(9*q7`n}p5@s!p^e|F}nt2qhcV&h2%Evyl
z%xLa;DtA2vqYW(i{IhbquBD?Fy9p^%aZs66x4ncWyWtss%uConb!>p4n<kQzL&%xO
zNkm=@ddqH%N9jI;Kq?=0M(qmk`7q2)f{K6^CKs<9W4ulI#%cExLmDz<v+tcVD292C
zsv&}pf~KY%t-oF>p6`%GlleF~0_*A7v(x$^Gd8A0LG`D_2uMvmQ*HPJyiCqPrPd@$
zv)Wfg&ag>}?RGg@u57s-m|O;%%|i`QuP3$p#!4HznppGOW^uuKZx76Y_IfV`Dmnhk
zc>6%yybKi^V>CtTD17`QPWjK=j6HUirJ~2c9>*rn)GG{*-8V6}E$s;TvyDZus&)s3
z5)TEh+br?s-|*H_idW&g;j~QLX-0U`$!L8nYE)mja&8qal~K_md*h!s344VL;_v)C
zgs&q`4T=Zs{U;*D)J{#wCOrmG18TRee7ATJ03QnkGA8>%Sy67uvp8UrHS+D~k5+y*
z3KG^_%%Rc7Wq|af6!CtSUvL<eglPNO6Bn4{OptEihE9Fs=O<~1z#C~6+{B~0nKDhJ
z`Z}I^ulRD<PKe2V{1=H77|=hoV?(kiCyCxw$!=>eYxCTlg^OwcV2ZMCUV`Ma#u-oG
z<eM;eh`N&J-<A|+StD#tq_u`;jLZ3V(Jzca{V(ZdL-O{<?e;b8M|SZ%D^s1~YdZ5^
zojpPK^xPzzBfK~48{iTb{5-YSB}kf7O@?9OP_|+OF<IwM$#fo@*V6SbQHmfF0-cD8
z2wdKVIU@<aS!fJcWretJzd_Zz#X{9x<KsIYl0WKUa@xp8uk+y{=rswt1`-~psiUNo
z`$FHVX&m+J_J7HnsqAhS;g}}hO9=B;44?lFT{zBIL`7aWkwI)R6H~&^de()Pq>xP}
z9<!_#PBDPI_IalCirO>Pk*l(wq*(Xd_&leDgc5H|Q4<ksuzw@myuo<QiZ#;XX)7pu
z$GoP|o`)W5SWvGKxS58j%V)g3uM4Hif^gG%^LcMpeM!4Y=i;MkTV0Uxp8Sc2{f6A!
zyUHh|_f?naa^~AeF{Ntz$Q-I@uklvcpbma6?q!jy8Bb<O<dSvp#H`6Aw&31|%(b4f
zVoDT|Ui9#K%2UT=_RQU65=9pyYmWIyB6v|DEmuyMum?Jioq{YNXA-zbn&2AnfBA_d
zz8r~$cLBNlwD%ViyST^|Dv*$gD`YUiSgH2RnN``MvB<^iDZ?mSmeDJiRpCbXr*g86
zSwd50p@;B_JJR@~sNl)aYJ%MUvQB@`B5mj2qRIDI2)NRqbI^~isKm7(AAG8P_x^9k
z*_tHk41XY^u?!w6n(!Satc~*uZva0)z`t0=(Nz)6R-ByM(2Q|EYaT@p>46Q4#8y~p
zT4MZQ)qxO-rK~$F?e~|PvRQ9k%vSZj>um?dFoQ$MGB6oWMH#$OP4@Mp<ePQ;Lj$-H
zEaRPP@8eT8TxE9N7(J6Nd~HbEW(Xx$aELdWKG;L7{fdXXqs^M}O~rKpDeSs>`CNmC
z88T}8FxfdWCx@v3Z;Wqi)J^Lqix((`r>SfPY;FY{lEHUI_z8hYGt3P5%x9rP&v&Q6
z&=BiQ)K(Fu!)oyMJ21|8IL#?UV7iunw=F@vl4Vr%jx{Bn5~7&*;V`6t%Y}1So)@|P
zqDG{=XQUOhI6V3<#ddQ&DU!0moXXk3?~{MF;lkBE!`%Yh;I}hUpB8I6yF!xX8bz1|
z6R>N#r!R0S!;#>KDj5M_2b4s(b%C}L7lM6)Jrv^VV2Ren^Mi|qmTG26Zh=jy^q+B4
z5_|jvToqZsLVtF_dsY<?9}f2B2%1451OZ6|hZUOC2zR>!wsOX%;jeRPIwDP|rM!Dm
zNM4u<M}Jd!I6$cuAxaog&^4<;XhZj)1bT*y%}(A$O@yYl3Yi3&k~=P2#W>SYiqqyn
zlFgO3aeRb+2^DR6i8Q_Uq+)`5sH*MU8@s%L%DAe8sIK#ob-8jE49OVVvEXET^v_xB
zhK0B1VJh-&5%JHRsg}#lbu^DF&cYEt(a)-FSuh<ykb@>_UrYTB?N!kZn@D*jpzN2C
z>hI%lt^P8(Q$Ucu$CV!~=mbrdVnXB8+)O;cjKy`>c^f~|`-#|M0EVm^Qy!TcrDDSF
z8!2mizwR$mk8;G5r3g7<U$MK*4lB;L!E&-<qAjVCuA3o%cA5Bfsuv#r#I%oWSu#@5
zWb>kXAArDDXOO8H7uxJr36WoMnjV=x39`Bo;VND8x*+LvUF;~M!Vm9_+V<E_?NRpk
z+kEtG>|wXy)Rh4~SRDv^hTDDX{^h2m0Ga1A8)`caXRA^k+OB51)t!vV6Q>bmcO<)@
zW9L4j?vdFH=}`dSXY-FFK3tnM7NERcr+Fk)^oXZwVms|QbTUUhC1Y-28GLf3cJ$@e
zBbdG~8S<Flp|)kBDL$cRBZ@is1EP1l1+43rz7{~kzA66VzS|1~P=3>L#eJ+j>4Cgt
z;pkJN{K)TfyJ86xYAZU{_fq-6)KOs|#dDO#j)pPFtqpsNa(k`&Ff?FBcEXa8t*j|Q
zq}y|86TK({ljV71QgfsCFLld?ui=zwkwbNc;jlzjI;+tT5YI$XkXLy!U~B%Hlp&4k
ztj*8AS?ZEGmlWf+1uBP`c;2XYheJ6m<MFqhK!SJufp*(tSVMgmA%G>H_v=d6f(Smg
z*1i9}+jbyP@S#a|-J4v%TZX-PzK@ifa=*E!Fc~t{QD*`#B$x@Z4o&(Hk7tcl3?i$|
z0*z>fenX*0a*x?3DdGs$?BbZBHSC8OV=DjfpK&$LLVUn?^W6yNxGjTcvm1L;?@5-s
zX7XkfpxU~iDoM(9NsA~0oszBBwmO#3<4BX}3DCP3!yJh!-vy4@KiM1QC<7yiwBoI|
z6JpP8JP`8F0zlTw0M_^&{WOZw#dF-kj!kIfb<mKL+Qrl&IEv&vF9g_<__pwQBYh9|
z<gYd?y6EX1{3Qbzm<)kP%~>$_+<sO^f(#6wa3A+JOf5AbqvdCnzPVI}j#v;fxQ<MQ
zJD#=JR>50@^4^{}fV(c=($}|UdE2wDf>rxhOOlk_)$y86Kh_LwL(?BS<9%KMW}WEI
z3Du`ir|gvyfnRRI2rxAS$kTv1T-oR;41FGce>Te1wZAz|9ZoNuO7qX`d>reW5~t3m
z6EJ0?^ev|UQ}Et0phU@zd@QGzfC<QN^^<M-z|HWr@5<q6wIN!9)qg3r&y7eI4BjBJ
zo^5HKQxCoGR|`C=)^^K19M@-7Su{^E1-ZrXpPPMDLvKr6wsQWo0gX`HB_KJ^IbDO8
z0UCb%F67aJSb${4V76t2X9dYPMZY^A$Mw2pW<3v1H%rT0Z9qqZMuRmYDyW0h5Nqp!
ziLmmyRQGW!D`UJn_cLZfuWLnoMPBUhP<U-Z-fy}+;AQ;ZMB{V}sI|^O=>`ivn9sSX
zW1`{4<x*HXlwd1HkA`qPxPF4)dP54x;Ql3L@}zT4NhnH^@Fk)6{VIdi_V$PZ5Ho<^
za2^QO*e~2-=BvI28~w3xP2@A;bnRI{LUG7UPm#ouocu8@%sqJ8MqtXT^b!x>i8tca
z<wByC@+bJN1a3K;cX6FuFL%dkix1qYhD$qEzpa!}YU&tBUs&_AbnmT1Z%W~(F4`2G
z9)K=tXsFz@rba1`bv{^Q0%4Z(_TmH{H2jXp2VsO0KakAY(jMQ9C=u^^PdH9Q38}s;
z4$u1|d27Wu4{7=3$}}{C;zPO7@p}6DfY(JrOfXAO3|l+RpHZ2}kFx`-@Isii4wPhh
zQw_VDpy6yHnUHDa0_~`x1=c@pxOK#QEMPokgmjJ5#DXsaVXWxF@ayoI!m3>{f_k;z
z<60mWrWH&oQrRKZc8yI$4z=Csz`vx6ivRaP*s?A=0BsZQ7Y67*>uHrw$$wN=+CcRI
z5(T5Ls&cu97{kDksc#&5@W0iA`+h)B`ID!4rj)aS`1UwVPU1|;C8x^WeS32GfZs7q
z*{alVe~3@&eb4F_r9Ecn%36!Khmu8NeN;bWcyjcPBj9lGld%d%)96AI02TyVWl?NU
zetU?dqLGHhFiS~v-lpM8k5qbG2KZfX!N+ysr;t6l|E~xPY3*>Mt)yaz(M;7V#NhP-
zz2r|Vy3J+DO;P=@tZQ_;A(Z_M=(~vP39<PdYUQj(rb7&}csf@?NO+m{7|96Fr=|nx
z9HMQC{81g0>C<eEzPlqzgu*vwr3AggRP;9%nv@-1AbUUUdeJAh&2eI;iTO+3_ldSd
z)eW-d`^n?IHrTOKn;{PYgP)RtpbdZy-hJ2+fE>?QTNAP?R7Yf7pk#bB9uzVx{=yIn
zk+ZI4@1Xc^O2$d<7eYgvug=2O0TiF{<|M{C5KO_AEAL@bvV7$G;S-kE`WzZqR!Nn=
zP+<!5d#_TGOW+4i)SXY~z!LTrv{4)yCNXdge&h1%F`Rq6x|$RLRSVb6tCN)>FsE^9
zg84A${>?K&wLOZx)*oxyt!W<8VY9!i=M`Ni0ZFY1xF0tlYtiEqO}KME-pA_yB~se-
z)(_fs38}jl5)}8fD@j*dogv<D6;vZ9a-<HvyGimR&T0=i)qdtx<ne_Q>M2QT@eMC$
zLeOD$5IoPV!&CA(#Ks=rcxs@$`vp+4Cn&YoQ{u@n4K1AL9bk${JN2N5GyBG}ka-f=
z_AOz}^8Q<~dkB9?(_*VARIs?Y_iR6ih$T9G99?v3y@mE9?)^#g9dO;JYyv`|UgWJq
zp7G$pA-v1L1u7vQZw`?bQf=k)IKz|G?fPc!Vy{f6qH~t~7lt0}POa`&^m@F$d+(DM
zFyL*S`QTN*JoR#&X)T&FGfPONdZgX@t|!N!u7T+`(qB3%!xa*X(`qL@XpjyOX9OQ^
zYmxbhA}PEd4@cz#I1F3vx~AhMN*p4S^GV(66tYy_CYZCRwL&R5|Ft-1o%(O|hDqz$
zV9M7UBqnyG1hOe^K*ZkrITidf*j@or>=d27IDg%CJ@?+f492HB^}$lR7S6b4!~fkR
zF}A$3D%^T)Xm#ti#^ikIYRAKL`hqWBw#e&;wr&%VH@oICDx)<gmsXlM?jpKu+fY55
zr5dJx_M&$8-HosY7_91!?h5M6hvw#3aoP(B=(2(l<PTBP|BnslQp(uzJqVfkks>Ty
zygU4^W~!-gTKc1!Uq!+(-7odwusBVFWm7#6ZKAuZbZi*)YnEdgHp8*}%?J^pS{*37
z(uW=Cn0lm;{#7YzH~ZJcw1Qauv@xya&M4qOq`*L_XbqB6HgUPTr6WzE?zOF?E5~zt
zRF=>wfP)VSw*q7_73hQCGR~x+-LnaF33K8|S>g8aI@tEKoJ|}GjE;VgE$T;t{3*M{
zF6N~<AeM8Bn?!Y5q*j3J(4GYnb-Xy12DJiFM!@BbiaGv*3_|y3XzlvIBc`BP=A7CE
z&`{$$(^wE-hI8Npkb8m@PKRyCoDIyH(PP-=#i5Kh+PNJG9W#PF2lR44BwYr_-t~H;
zg}g{*IH-kY9bgX@$d`v^k>Rjk1N^166VPkxxo6_7(TC6CPAmBr%V1*wU!C8iwEMZ=
zu^oz}4CH5ul{#6}a;!(V9`*+arE$ua{8fBh*Le{AVJe|4y-t#jCVt&)HKR<0yv5Y;
zlDZh>bg7A+<?6CF7p2A_gotjC(6Y(^@z?UEzJgR7KLZ@X8yLG1F&u;AZBFAs(Y6_*
z8_)iN7u093V&K@Ok&Z;u3pTEd2$^-)5v*MOYvZF<Tz7521$u!ex>fHPp_7f&(^pd8
zU2v|OUSiTc3}85jSy}PDw3R6we#8xpd5S(?+5mRT5P>RrX@iaJtiW6~kPv!vI*d`&
z0~R!&Kyw52N`BrnfOla!u&v<h;brc84hAj$oJ(;`)D1(M$u`OE$|;fdl-B~<;KEHU
zBKfs1<Fq<CMFYIQtW}XBAb-GnY~i1_DnWb=XV^?OV=H^+d#RM18C94=qvcy;R|W7?
zuhf|>iJHvQHU(g-K(b@B6(>JEi<an~x35Jb)B$rj&;JMgw3*y-+1i=fod`>{WKfQi
z<_-LprPIGM0h{>>WC!B8#c2JqnwhNg3|OoFj<ME?VSRyG*qTwH=TZxtjp&#xo#e+p
zBe(oC3*OJeX|#gMis!M&3!g7kxf}4%lzn7*of5K(i!AR*6mjrQe{iax=JBm#wgg@t
z_}p(qW|eOHg$}w^jCa3PC#!$jq!bhoFHrJbH2ag4F>@l1Ys=cV_$=EaZ)>Q@G^_pL
z-+H$f`a@F`cJi$_rUUf0D4_+<x1J?t%B8<oX&;-kIE^Y2vrG`b#YeFg;;$Q}mEGeZ
zUI)v9xIgtiW`{r5-jwwRo^SQdNeYIcAH_!{tA9ZIRmHFtgjP<pfjwE3Blz@{+b;Fj
zb*LU;bQjOWPiNOL*$55alx0)4Fm<#U4d9=qqvwM0BzsK^Q+rsATAOicc%s-mjVkdf
zC6JhM$eUHNKfQd6Vb>S;itIFwV1A;U|K?TPxz#qE>Ur`9lFE?IYhSwLf>2(oNfUN1
zgrQ_aj}<znUX&IpXfuivW9)o~Whtb_WpM-(uq`E#b2W}OqVR$-oAifhF54^$_l_PJ
zwZgoo^((wLb3Uu3#0tZ?Ph#dlQgxc%$Y2|?DpzF&+UoG(W5dyrTQ#l~MTlzsHEyKy
z6k-rG91ArVt<-pu=YAVpb1dd{C|l&B^1ja04R|*%y8bu(JG`6EGrVru3KuOTem6|N
zmVT!O(RiW9$$i2PhkGCOBEYFkQsTt~;KtOiBsp2JN8gWhreoC}|7`u0xYv>_8CAsJ
zncWb-w|+y;k&(T*-lze%ud*8(zKF4vz?~4LZFd=Y$~Sn6LK#9p2x3T73pc6X)^P`$
zJ~IEkYmSS{qqel&r8Q&#?iXl|1Jo1{g4-68GPpmk!hIfNlN$<FrX@;N!O0%_{A|zm
z2ps<j$O**4R<0SOW=9)<336+FEg01iiL7vaSjU{=<C9My&IY>Q3OW7Jn3Z&$^K{eQ
zSh=9a`W<0jD{~*d#O+4Rs*@pSpOtXEU6v#USB29UFq6LbXQB-ze%}TXfkaISDzs+?
z?7<jI^=|0>lhKUO1pX#6NylZ%QNNlHHzdcmfI97GrzNIkQ$@g(wpa8;RE}OcO%4q9
ze8pssCW~K?q_nHby|_k0#Nh%C`@L^N;?gYq*mCCy%Nv(CKXkFzrtr5x)72g;#$<ET
z<%Hhz8!h_NaDC}P|Gv1y@nINTJ6#qq*C#EijlQvHG=hr^Wc$sc?=LEDtJeWQ2V{qW
zO2AD8RK4oqrWN*qNn3@0u>J-Ad~-ToXb>-@&->O@AAqy3%0JTprznC3XLG9QIWrhk
zz9LTPh}bDgm9$kYfsE}3KAL8nB=v6WoeI<xVifI_gw0B38MWgxOkIC1#{s$Q7ie1;
zi0wadhbw*5$b0U+&3;9kTl{fZrl~RA<b@-mR$TZ#toL2mjX5E3kEhi99^(GBWsc3s
zNg617C@c_CMb%{5M;7X;=(!94TK8z=<AZ~lFj|ufl}r<yUAS-d_89~7h~t!3yWgDa
z^`U0&jGLH>(K+$%HgS9)SXK#{Z?xuPMB1F6-R{oY$D-826!j2snnUKZBZi8twO;{*
zypiY(IcbzT?m}5?bT=@6Q$PnTxIM`i?U|D&ays}OmC#m%h~4}JgdDB~ieQ*R{gBxe
z-r4@!NW@DDs&8rj&rNvRkDb6I`&7q>Zt`W)P6YrPBg?p_4$Hp|pWswnx3pYKGd`eL
zE@R`xGSG^9OGuc_V*%O3m!&$UZM@G#>5TK<b!Eq&yMGeA6M%`&mgiAAo;OHD2bvzw
zx`O9AA-3Ca=nmm^yP_RoNN&NuhL8?-Y%zyPnio!8fDmSXu7p6H15H-Ge2J=Qz$eOw
zC$mV?Pkd3}jM<yKUZwgDb9b$XS=ik5R*5=TbXR7lb@8|<d(d-#ec$S(!Sh-v0q5~|
zTNwbWMonIAMCFUI2dM-H2Dz`0+63urvI@!f<|CjHiEZaJQS=IFCf$2=xcXNgEA^bD
z-dXZDmca68E?wCB3|Y%2M+cWPMsmtn{lpNHV_iVTJ+p&0)GjQ15m6b4#kgie1t@_*
zP3@5LK94?Ol>nv^I|_!|-C_Aom`%ZaE0P6!{}dA4#$wK<dnj^%ozy29pNoOG;qXg~
zRWSV~FC-}ULb~_K_uU2XH&vjkxPi%KlOw?zKcW+@v>PHYJs=HsC{r~}^3GA?gK4)Z
z6r`b?eeO~*bUY3Nhhc|40J69_pc}(dwmr0+f^4LJ74^=44j*3+ZM}AcN4jrfUM!%d
z&_`Iu>D}&CP1d~oK{qG_AexT?Pb9JZb*M-%XMOQrB3Ahn-qD#mF5PWxFP78bkFE%L
zQY^Vfp-e!1?H^4`Q^%P~S-aNNH9yAmFx0Je!&)@Pt)U^zsM5&@0R$LBEv1_4APE7H
z?1R>BXp07NA}9cm09NfCe|Rn-rr*Q$?Faa_h}QYsfZ#^Wa%!Re7g^2q(nSG12LK-j
zN=U_69K!*daliugy%-XVOb868n&MowQocUjHsn=Q@yG3k#FC<a{ln;FO%%ZESlLJ7
z2RQdqJ-S9`Ll9TkB(CeVQF*_!0?2yes{jG<P*f~lpr)S%G|xM8H!hZRS%KISbf>6i
zvIThZvx80ZEMmx-FXp1cV5^(}@q8ZB2uLRehw}}VK2p_&f*?lmO$*vd77PTTX0f1O
zXuYt%#!7~FW*)|rx{QewMhIBP>PNDv+Z#$bWi|@I=su_|+Hk82iVw-()y1vt>Eymj
zA|_T}uvd1PVjsRcJfb-!&xDI-)7^)-No~(>H9`2^?oY8Htp=L0aV``4whvXKCYUyi
z@(lXrtI$B`%bF?EV;ch~8K)Lg2rMk2ExKAG&LgEKG1DH{%yy}yN?Rrs#L!!;VquW7
z?0~5xYrhA;=c>~%j*b_2zhciO=$T4V2l<4|O<`dC_`*2OAt#(lk>Mzl+o(7P>(Q-B
zh9^!}7N=-h(;GtG=c>u&O-t74tooffpB_Mg;VkgadlLb>%AX8ne1Y{RHf(BQo*r1c
z(nFQql_!f(H)_aV^shGF9`648hgE4289_gpG35e=aKvb}23>@L*Pe?5pmqz42|1$1
zp+Ct1PXF9<AHPS8bX~z<*zE1@WeUgY$U!|_B+O2KK2cs@LA;XJ$kZv>5J|@b5VKsw
z>C1ZDjQA#}!mZ6~LId=DWGt!MKqXYh%ieV9ND=rh->M-np?Cw*w*Y&S;srLN_}mT8
zlZ?lHxAw9se%v5<$ya<M*5D|TN3rQi6PvG_@PUm1H-mUZGlrp15xo?X#HgDjjCaZn
zsw^BnM?*(hXsQ6?J3>j<NX~k(N@koIr+@p1=BuDuUgz_aeJq)WfULecks`-TwhRI5
zE1-=CeGnqpr3mG6#~J9-T7jbz{P3r7r0okeEE<(gTOF~2P69<eF!<R@u|^PZ9`Kn$
zO?Be+b$lpk%b{v4pVkK<7kUQh@RsiPu>tRn<5g36_D&8}yl?^0*X{^xraI6P7zWYG
zT!UTg)56@ze%Ff=SqLZ9*bM3u6j5&J21=Ys*26OR3_Ih1P!Lo=2`!`$sGGIiA2u2t
zuIKTaG5!7C+!SY=`X3*s>Nm40GM=sygWNav5Xx0Tb-!_BxFrlWw(}=%ubOpr4~v`p
zL6;kT8G^HNC2*4mkYQ`oOwzr$tKp=FcyHR;w4ZWD#J`z$amVSIWWOiTxfrV5=Bbv>
z6ufy%XNYg1^Bi9!Rc}-<*<OH6g|ni)*8%$V`?l>jFQB2@(1;{uwqN_2OGUow@T?Y^
z6BrD33Ev*!?W2Aq#}BDwr&lXDvMr2RIM(uDiOzp0&=8#F@w{~!iNQv08aL28tf;54
zds-47I5Lf<@yhY?{eFfLe>yn5cs`VVL`~bn-u_B@Y-_im!*^Q7Fu{XhE)w=KSyQ{!
zl)t_`N!j4*A^#XA26kF|*ynt)l2bUj*P(QS0J<|G>Mos^d%_}xY<Yh4SH~VU=rtiL
zVc!^sOe;%VaVnMhJ<vQ3L!Wgr-;XKRF)HjnA5Tq+O23#&=r)3x2q3ymn$`7Mx-NYL
zPSQPKQx$T@fnp_m68c4AvE{O_v=1O#5JpwdH{LR6dRkWd_F~)?Q)`!sw|gW?04e~S
zmT1w<bemm_o68A6yfAizy#bA^FJV+)u?X_avgqV}f(WrLe?)j=3aBZ2)AMg_2La<b
z`zI{s&^IPSA0cI)`i{e07k=umGl(Jm;ef4QMUuQMNYz(NoK=9T+l+UK?a;kLK);Xt
zT|oQFQ0n;0$vT@Q({Df)QD+cMnQ9f^ybmnzP#{;BEANo0ih?D;B+M%V^ut0coJZgy
zzq5!ifu51{uLkj>b4^h3m<5@}ZCXD5o;9M?21>J;N9eCu-gbl!NyE7PC3jJncoOgY
z7%}xX<v5{E67CGM-i1P_2;lPdZ=}W=w=P^2%nVu?cHsD6NH~K6$&4w#tN|Opyy%sg
zBH4rLV{aXN+K-{adhUpoGs!PWvok5hhb1;#g?L=U{XUTqqIai7&p!T&bRG)eot2=3
zN^t~k9V9!kpG+#AQmvLL<+G(3i>}v)Jk#JHnGJ^yv}mpEg4KsvSQF44;YMIg=9ta0
z4)WX2e^E{^XxA1*c6#T=Wm{F=H{Ln?XO{dQuiGc5)Jz0DRSMG_q1amOGh_UKsX;uo
zqTR9+ZaFc*(^g8l<H~a9wDWsObp5-4AUshZS8&B-nk;VVGG=gd)PQbzz*%=)YL^!x
z)$SIk4dL6zfN$6mnz>lBR-oe<R36qA5}9=bW6{){a*^Mizk4)LWTwHBV~icK(Wqan
zCONZf8eH|zN>5fKF*aniecBG}s(>ApN{`L6eTEU^pVhb-=ea2^W!PM6bVeAQ7khN1
z*GZK;F_i~5@SVCk!Yel6KU3g3^f*Kaf#f^rqWOloD;VK`R)F)AD#vwes1v2sn}78t
zEx)r&1eg2F{`w2}0t7M$GU*l4O{ckhrlMx^XdrJ^fS(n-wRU;+`56Lh3Evrv?wgaA
z_xYcbJot^QRVdVK-%oyw3H}C<ai2ZG8Ya#*MYn4me+9_U{dozjj#^c=#G5U>b1r0*
z+vqK}>ZUsWFN*Xj+;l#kVg<X4x7*W0zZs>){~Ar_`rSx;SDVSLv5~Z7u1ijJmDW{T
zugR1Cog;b~p%ZhDsZX2)^4MpdxUU*C_F&-b;~ye*QBZITgND;bS|+GdW>#%*>Wk+`
zmqSIbiYF!;<LwzSySEF+9{(JJfSse<P(S@0a0w2phKQi+Ir2Qvr2!{Obk~~iYcB?X
z+Ad2SbC7R&wlK`I$UkTTq5|zs5wQ~kh1qjl6CAC0`RCAW>eQ{eX?sAJn9H7A2wVt}
z0)d`Tpmw3dN5iwmQ-L|+%WD5q40YCPTpaTmd#Nw2F<b{6m4M>e4oe34@5JCX_#ry2
zpw^sdfuBY!lXWV7zt|`}gOntLBJsW_bkBxp!zpyj-4_)uGZQ#*%pAm}jL4z8Fz`cA
zVp8WPA9Ev-u6vRhEW>iNp7kfL;R4m-M%}5+6S(P384{_#H*+TJiFrKNjLYLGbE6(l
zqBxa{233}EEQ`X}UKS$hUb5Ik;0oysPRy4DcsGiF^Vh|69q~qP(fhar&s>uQ6=aBl
zq?mu!R=M0Rs7Q%Hs=vG~iDGgo?(#co4O^liFZrmTvNHpU)P@_g$Gxh|h*J@Srl3wO
z8E9007w2^x3&R-vy=4c8r(V$fz2O9H>C|V@P2V|+)XGhBUp7zv<I4d~DhxJNB;x~1
z2dC`XDM<E-ioDJ~Wc8q2-14*XE$Jq;nRlO8wtTS<1H)nN$${_#KVnA$97?8MR}<tU
z$n>`{|DI37Yse;CcG3R0SsO~!qu`4X4E)&-I=X^RD3ibn8Hre(q0LQk?GI{}B&!Fl
zV!EQcYb(3>g14z<*LanUxiWg0@Qi-zHHsiXf@Bql;z^J75>XOX={|#IkjCpHUyu2K
z`3RwI#O(w_(VNfp;*%@n*{1S#5u<rf0a;d{F&<gjid%IHlJpVhd)cn1;CUqqibnag
z6r7izvXtMsa7g@^(7Qyz6WLn3&%0sS`JAg|uV;HnNVdO+i*;(n>rDiZomTKMmdghE
z$#)sPfH#tf)^D6WO(g9MIIs}F)y;7$wW68o12kqp){MS|`9Spy8=83re)kSudirur
zvYF)T<D7C@)x!J1)CV<~IXmpBY~<xm7JBlXBifJ>iH(T{>@?aNcj<tAG#BPgBpQhj
zpYkmKo(?I4{rtyK$$N8PP0ghToBT-x0Domokj8+@ku)TzO<q4Fw^WFxK?(q`%fs>T
zLH?BaF?W|E75zxgb739C9WuzK2e~Xf!S@o%&J_;?%$|lz>z$CW%{+vkBvQ{RVOc_m
z87fvM4RwDQ8E_>%BF+~iV&|5MH)<mHc7vcWJftAfxD*Rwjx*0RO5D+BS+GoGmq?+M
zO^wDMwkpJZG~*2!wzp-HVUuO9Z41L?e5lc{_*C8lZJ$u>u_Fm;d4*<MbMN*+oEiap
z#joY<=4H9RUmvm%_u^!KzA>19fYC&<KqgSHcf>*wV83{;i1+SjaP;=RSM;V{V5^c#
zGow<}Q8A(eZFCPuanR7{M0n@c);EmsWZ=x^_ki`wU>Y@ygrBTLRqb!8Oer+}1ujo4
zt0xFKGRUY=i5>|#?*O=i<E)e(2K5R&w=~N-Nm&vhj>piBe3g@~Pi@n-vrpSUqX#{&
zdOS`{yXx!b)uNauvw82CjH^ok1vsK%YPHzZXQaQ$YCN<!KlzdQ*QpTS^od>-jX1i-
zgN{R)pZd7wHr9Fqm3l&Sg8{ymR%JU3j*1c>T+C>Kv+5=J52UqJ3L$^pf$ohm)99hb
z*748-A7A_i=9F&(vcjoI#(c0U4h!S+L#I0%c`k*{evv_|OoLoeGq)_@(b*1<Z+UwN
z_}i<_Uz<CHW|)m1nNjv#O6jlwjTpOwss1_~irr||B?DLB7Tg^<${Ue9i3|jC6WE@p
zfbF?{nsHbNDOZpqMXLqB8+g}_@cxTbKR*)o2O2c5G1{O84TfaT%>_Z#dL}nnRiC3|
zx^gmX_Tv-V{an1IxvXK0>8;e5ezweFC^E#HRE9#M76)k{vxFBBcTTqr1g8)!y=@0t
z+i?xK|EcB76bfa*sFqq$%Npfj8AbI<F{u>k+3qSV(F4$m{MjTuub(gluvekeV5Z1Y
zTe0wvu+f$gJbZ}JI6p3n_^?*xg!f|dREE!w5wJ5@Kxa?9w_JLv`Rpz1Tac#im%n2-
zs|vjTU6uNDn!0L~60DnBK}`)45)aU^COACA#lOsSLvT4m52hC9cm`191Id`j1)!ET
z62_>=hCN)-%#!QK0BmS6*&YiJN`_Y`{9QQ9l)0$~Z~Bhii*S31MstZ9;E@bv6zI*W
z3t%<`kWP8DYDw0tuoVZdu)+3m+A&-uxgYGu$}!lzA-v)qBMz-7H|^r>l_4T|I5Q(_
zPbvfe3lj%{Z)@0$s?KC)=p%joMUP6f#A0o%UH{H7x=o}QKqNze$7rXG&h2)uCB$OH
z{4eFiY{t<tle)0fC^7!e8%tTDdP-Y1O*F&4oKP#B)^$f(4QG*-u<P(CatKFlX<{$e
zh`*Dnu1wVku}{~R&Z1))?EVrd=NzVzDS!XQ7(e^tG%CzN&XEVDypLkp97XN{A-~|j
z!trh$mlF6zs9y&&*|d2e>dsjb4%Zbf@nkP1p>RC~@CRzW)&hFluwJ(Y^kcAq)@0Pb
zCv0@OaqdHvy*4JFX@O16Ad6Bi4^ZYPnC<baC;(Xd%3ysTVpPKid5Tv;@nnIIeJ66i
z-@cRlHHX})P*z^yzuDpKNVZOIT~sdoovWUL#-~{_A29@`gPHpI*erGa9$qul{4;Wu
zb%o$>H<9m?)91i#%t^L_X~s5RdZx?3osB@gL|#E=-R1jlFDKye>>iPZ)jZa70a3AL
zSjR^g(ysiw8J)xzg=;{}IhSm(%*?4utRyEl+>o_PJ>25re|(uF*rM0hq3(~%`%ikZ
z+_(S{6}BLWhoUbMqHI<-;!?u6Dd!dO7dG5ZdySjW5yilkTVW@h4XNwI`F&F<3=T?!
z>I*fRA;@B|G||FAYjTf%Ho%2BclzZ@*%Y(<rE>i3SoBlFbJ%NtJ$a6S7YzbZFeY{1
zg6FLFKph|+H(KJ8YRzO|_7|OER{u91wsZ|d)$8iUa2Ji0f6eB`hqllgJWmM;h_k!h
zXyA&IcaTSv4T|)HveW9B(v88)a{Ks82hpJ^z~@r*UmQO*QENN~N*#r3Mi~#S+4sot
zhPP&X`oo8PwQvOxHM?{=OC$n~pQPqrl%Ngzzlqp{DYRf~vOfRaOq_`#SalYV(gc+j
z39*X<Tr09U(hjE!{0GGdO)a(^^FD06qm9=;M=_a_nM$6sPXzYMoQME?w1}>B|8^JH
zF0k}x2w4Dwy2hF<aNh)b!UkDnbj?>|TwXhyIpWDSLM}%-Ifo@>xXe+|a`36ll{ZIk
zUO%TZZbXMmRoH3x)ZsBp=i!k3nLL>ba38tr;jR(0^;qu1_nR@DP@D-l^JQV<?^}X9
zQ^mwa$D?{6z8O;a)T@Vg0R!m-y?6Nrdcp}aane9u<97yrb`Gbc%!Jd~`2YL|Ets&c
zB^h@=+ztuA9|ccSM|yzy^+!XM1&!rcoIY%fsR3~GxV0Q$^TizV23jm?vFJS$_!a`q
zMN~+#q}Zc0SC*;@OcNSBg%wr@JR``*B-NjgV*8_5^*h-Zj9eonz8reIFn~7+w54Gp
zyZD|T4C;z4qy#}@V#aLqg+r!?&X}N4MSa+qD!x|In!x^S=78ASm>J%kG-O@xxMiA4
zbQX1yH%mK)9It2Gy}Gps{)0M)^OZj4MnTr2C%;3^18rIS_}2q2$D9B|;@tMIugU)g
zF*W<DuFV#0r|{Fv3nVK`2%r|#*3Q6V*+4p(CFgcBGp8p)+>dpO4HOSknXrz>yo2^M
zrD5he*?zSJpQd8u7b+NoDW6?^>L)_intJ-i7V&FvgU07>%!SC?w$Oe~K_ci<yI^PF
zfh7f6*Kz=WzzqMvz--v4NEV!J(?fo^N?Aj4VHeM`av5HLaH=%tmnOYjm}nCHUhP7_
z=SF1r_S6MVuKcQ2CnUtB`<&6Eh7*IX`Vm9HM9mf>L<z1tO;77NQnG$R9EfQMu<ZCC
zPve(NUN1P${(E*G=2;hSu4M$cOZ<(T6599k7Ir`PV4L?E?`Vn#7(H58@9!Q;7+n?2
zPZ3-e3&|sOA&rj?6wfbx5SGj^F;l%k1zxJm3j%{7y`3C12yxJ?R9`uB_UfCGxQz}R
z?JBEwD_TzlTwdJ7z2qNG{d7LeT2XwDun_L_J6&%7y5BbPi9aylmwrWmt@z>uJEgoE
z8x?vU8i7l>-9({XzU3h#veIXz6B|{ob-^f%+^9JVrfQ@PivnQ2+?s~Sc?|P1qpl_c
zWP+=qSEX;S{iN|L+WcwoOSW%@8AV(dU@mF4NK=)!bhJP9JDac;;3}&!+U@;V)pGYl
zs6_Is7kGNJD!Mu!N$t~7EC`x)MUs_-V|X?Q9q(jJd1TVfxFh|5w=dXK6IGjNpQ)mY
zE$~2>qplMhOjsblz<($XcftN1W2Y@0dyQSOlVo_;&}Zzy4w2fVn*pQ`AOS#}`5o6r
z^pJB5R^Y4GJ%v===Eoj`Mr{P`lR3~0O`!d(9c#?Dk($zld8aq!jIvaUs>)BWs_=Eu
zw}lnsjumNA4K~sbhkp$D&+%Kr&6u*5)2iwU+T-TMla5Zb+@)PiwS1*|Ca&iB-`~0U
zs)(Mp7b+oW#jsB9=?1>(QfXqpQEcNYQcb#$Si#l=A|-EdOS}(G-8fC&gwV9DwyahX
z#9=EQvH@u*{V>PQ<!Zu0W4(L2yTd+k^nSm>G|kl27_TfONh#o1fAs*v2&V&SHMY!~
z2ZQUck6rY5(dm|U;kSSSqF8~)G^cd$DT}Uilb&3KRs!GOA!Meoa2|L0V1!1!$8ncy
zM!BaG0qj6Ez2R=LqY=np$czXacC5Mgd9uF^Rf6<7gube$){Q-`b&96K&MQ~?S)AYs
z8JwvK=cOf$l{nY)paRk7J5lkl&+e>Mdr8IcR{?XC4X*hMHp&Q_vhsc(F6mmnTdc=h
zdG&$lA4vL5aM$3bldgGPkGIS1$W?#`Ca|v1f+_4ew2#kbNhLch3iG}`hu%xjdy+y!
zk~94CvV~OuV-1wuz#CWZcIFx{N{89n2wnD+i?<@J`<VE*{`2V!8j{7^1M}MaJcq_#
z$W<HZSYRe|N#G}7LJVp%+XVPR@Oh}_hed4q6V|`Y`j6j!2v1m9P4F6QgObnW$){H?
zZ+Y+{rGI1S5TOrVA%w2$+`l5zwh3vdI57Z@Vbj#|h_bf9u0!W$Q#skT$SG(eLJ<7I
zm|Br|GYBzk8&pijl*{;jfhW0`Y|?S<(yZ&iQ1Y5N);HLq^$=fUlGz4<xUw5xwvBfo
zyKI6wrCqBf^@R%R$MjVyhSbr$x@tFz%~G~fp96G4iHM(Ph<DZm^Jl32^LH?*MfZ@*
zD+k?VB4<AE!NsLVE2z^mdkp`}!*J!gme9G<`E9H+XNLs;F%TB4H?2d|((P9%#?KTm
z+ZkYg$(YiYz^HlTQ~npEx=3svZ|iU`{Ii{nn;B|oscc8{A+XZNNnlcbPeI<*#}Ips
zS3l2-#5U+(b!x;E`*8t~c!ILn5M+CZmWnm3qm9cY@n8{PP5%HkMn}vfixoGu-#`Dv
zHF-{+?ub;1?`;I2JMMM{Q=Jd+^yGawMzB9DgPW_(bB%f+AovukW`Q*?onm~x!jtha
z8vU2r`;>ws9fs`NtARZ;Yj>0n?XVpG`|p585&r2-7XH`<ZR5R8$ahW-@$K*s7yTc{
z^D&InDlr#)r-J8+$3I=*3`daZ9;lCfPqqBZCcXi@3V6nQ;!N$2m_+TS&Y!8Mt#R?i
z0)i+(d;#*I*Zy@t;#K*!7XO^uzM717gYx3z>^T+bl@r}KOFc%<y-_S8K9-4VT9Q1T
z*@CLZ2e0wqEehgDReJZs**AD`cvb@zlV*XlQCkMgb*O=XMe@UgUSux}5rh$;8^)~*
zQ<>So8xxWDcuqwleqgTsiE8!cO#uW&_5c;w{O={la-&j#1fG9V`t7i9^@C64Oy)T)
zcdXOHxKi_C=M~dd6m#?a;a03|CVQ)6pGgz<{$&N1`;PI+aW*lJ^T<v-*P*#NZIQ58
zuZuE8SckNK;197$s#@nlm0?f<c_{3)KOt+NFvVdQA8WR5*Nr=wn-%tCW%uZi!gB}P
zdEOEOV_BWSMd9jnrBQrcVj<8Wy|QLSubLJEc+7*+$t}Wj*b``rDK<@&=EjFLgAC%$
z{H(_OXb?zu#H&@wE6KHp`raS|@a5+f%^3F|E;P}jYLKToDIBEL315*McVv8)!^4MA
z2%y7=ewXfEi`Y)nKH)EvNB6<3@1B6cf4IQC>pH#7tSfmhSMSd?zi=LmEH^QGRL$8p
z`Md)()l}->kp>f_g5L4oi4y?t8p6<Q{QR<@ihr-)%n5k(yY@Q!iQe-$q!b|#FTf5e
zFO=vvpVuJP0#T_=ULavn<QN<|Ig;5OhdbirdiLsul%pYDf_zCU?P|>D=mj@%GXoWt
z>P5j9OWy|h>)S12ZjxOYAysrCL|kj9bc=Yz8bK`M9laz^D+_xa7wtFp?C>pz0Ee0C
zt30wJ2l0P^FNC8p@gz7}XI<%B#H58T%xhA&_6JrS1UhN9F$m{f1AZlKH4y(w#*-Bn
z$Skv)1ldjqkUVY|7sKV9%}LJRw+nrT=m;WlSB%{~+?2-q{&G~h<${RpsBZ8Im+r$y
z-U@olxylwpK+fuO9xgiC1!-AaFd%huXQ$wRYM%j=tcu70Ap3YX*NXPTSP9SYMUfI9
zd`^77Rk<kIgYb!^Yy(jnp!8=tdfVr%g$zg=pVU-b3Tx(E(-Q^3AF#7o*@l4Qz}r4#
z_+Cq<kUuf&1qHR14z=>BE`wYxMo13Ygdh1=tGd)PfJzgljIREN?<N<i&YFK+^}YQB
zxcWs<1Bk+(wZcS67PUCqH0E4q?|h%JLpnjc!mUA96$9h<RS=!D=t5vHJiauDE2yF0
zQvM^u0MldeR74q%5?CYtb&>e^1>E7BauSxBkkZj}-7%Jg1SY$EFR6=t0pQCKu#m|3
zHSpp#uv=VCm4#8kA<`rfEHaw0oEAFlW7HcIE;CzZBeSwWMbFK3QEa}0+LvXve-046
z-=;#q;-3j6ZF8{DK*x9q&RfKU+cizc)DKf+TLR1<Fs519&sLRRP{^F<&OFNjStets
zrZi~DmzK0Llwjo`ga?s!k1tMZ=Tl7R!z26TK~nENA+j0FaSF|E4Sut+Z1e~9KQ7p6
z)Gj*!Vs4}_ju&aTg=EpZKNUlE&0`$+>5u-Pa>{zV%SVL9L9lywp^x-yl9DDsl*A;F
zMv`YLSirk~SGV=-fJ%gkOrMD>C-q3EJ?(`T<Cky4IIyya9<mRV$<<biMTX&>+*kMC
zUT#I}bh07r!*17(x3>l#9r6UT5zOt~qpV=lBCaRECL&9}Fw95!N8!;^PtY1HF*-$F
zXsk+ByJA1^c_jP`g?Up=m4^fATqc$@G+L?$Po8ySmIenN_b~)&fd%$qO-s4Bx1{@s
zmLUTQJ`miZnzUpA0~WT54R=>o|B5L99xE3trsqj))k(^%+b`Wo-ROhK76bvz9V5#L
zI%*e_a4rZ=*Tt%gD}mRaNL57~X4;(ftC*>mAfi|{ku!>4cbHo9dtg34a>K!INz0gm
z>ko?v9QOHv648BPV|nr?C?ZI}BTRPKutk=QX4hjW<Bh6!g{)p$uEC-H4;o^|@!_CE
z+Oh(_S*pGu<%Fu)^c3e6ZWyMpvjN4R%M}N5M*}k16C3*rMmtnbv<vgtq$*w4^vkvA
z&}b!9T_?)8r!yoHzMZ8^e0N8ezo7i@)qe&mEQoBtl=iW+!*dO>^N@5l_U+tvvE6Hr
zC#m{iBigbO3YkwIZq2g{eVNynz%pM9aUx_*+#|n#cy+9nW7c12@1_=76zKn;_w#^C
zl;Y*yN;y!2kk``Sm$=lnSofs~%$E@6J|Wd*#(GIbD;w&luFl>lbEat}R56gaa0kg*
zqnGKy#eOs~!p=wrQ~ZsL)XxQ9H$d05b7x3kFErv6DmQEZU1N;on{t0%y`%rZuZQ3#
z*BFK9jxCfIElmS0cp}KeWKN$tyia;h7Ef;O*#g+Yva6q9PC0T`V{z6Ppz3Ofk*^EH
z&?GQT_w!$Cgczd;4u!w<hoo4Oo2ly_t$$4AIAIr%BDDEJVs2U*At(Myw{wTr3(?iu
zS9>{8QB^#u4RN`Xbh}D`3+-zT$0;ZypS0ga&)AOV@Nn<{)0|>6cHhi{HeHx`6(=q?
z*l^fTS9Q1sl{URlZ<WFnlsc1IDDklxS2-!wT=;EuB9FO|lFvBAq@1)uz@J#apPOx1
zT1RDf8z)=zyc9e(3)R>B(*A4FMj`SdjrROd>L!MG#QjiT%aN;y&3(oOF|=GA*3S7l
zb~#~W(e)-+hhz(_b`P)(baIo4Ai9)r;kE(@I)8o$O_>mDHk`63<(%6OMNf8|NvpBX
z%;d2yM~36Ms^A~i6OaXqa*GL}-PS=Uvq#q1^e+u|vf8tF$a<8PqN^zJv?`&Tjcz#3
z%PDI*&#Ck_ClCh;`0m^rTnG?0?W}*fs=To38Izi=WiHD394&_*MOz;(q-MnvHm>R1
z88c2=01{}t;&<GKI%w(3aWK;dY`yR=wQvlq1{kIII|RZ8Vt?0;bY<F&(4J|%a*C|h
zZ7_mNT;JnY@~$^4qnFWewF5RQ69B05Z_eY+tNF4oJ}iRzdEelTi4JQRe^YBwrw>E$
z2KpU|d}Jt4n*g)1AkJO`{CRZ&fl>=~0{Iafi*C7w56nqq42ZJ=goNf0L4EVu<tts!
zS!GP=DMuZFCjwG69jY>YDoAeqKr5!%hn^KCFN~M80~$}nAIl9Hq(;t~SwO>i09nYq
zQ>1Lez))f^@H#kOvxE(A>o|HEelIK2r2#+mr9^s+<zori;H~fsU7xg{r`SYhUw}0&
zB0qAy1Y!S;@KYewyxS7^UCFAPncF@;Q}Zj1`6PLiGhFlixBmmse31wr@V|y=ts&44
zaGVA)qn<%@4~0GwgF&3fd4;<3Va$WYA>HIj>d_pwL{dHU^xmqh0-9WAz-bvZ)S`3r
z>*jIUxVJBh?)gI_dPoiDA~ZDTBTcb6T4OyEBLsM1F4Y$%v{+unN|kY_XOWf_7k@Am
zp-H`7dgvA~#+n;AGBq$>)pZF)z!fm7oVcSqe0ez*q<M(goH+a}IW(krd9bhMIM?@U
z3%5=P9|vvwnZ&q-OM3R;*fLHM_bUdjR=Nt-JzT<JMJii2P2L$-m%-4((Ja_Rxj##J
zqd@dQjhVrDuz*Ycv|=dTb(x<H<inUT#XS-MM776mI5RG{sQV#8>zWVJ(M8pBbJSm<
z1{A*g{C{U1lSK;T<n~_SY6d=#Vf}WtGM0&_d}vXasMhQ32o&2$X0PAWWnY=_P^FoS
zN~Ggg+a~ugsdT<KBy)o?`&Po@$o0?R!UAW4QGcc1h<Vy0dM=tCzcNQXx1@2!47?UB
zz$^LLp|3>7lSRyDtWB;k$rbq|u{8lqY;c$iY=g<yPL(e<Z0QdKx=I4jj!Eci*IsFn
zc^d>JwJF>;)=V4o=4Km|=5}Hs+Wk9@wp81!U`_0nxp~2}e6WI+R4VTos<Fa}4H873
z4dEK=$W}_4ikf0-r`$0r?^lB7$-Ppa#)R<TcDW_T2jS>T^t&6G)vu(d6B@#uDl*22
zOGyM?%J&H=nNBUF&q+!>^J&uniNqiA)D=gO27vo|ysXY5RyIlN#Ke=#h8IwN@M(@H
z5<#*|BaZpR7#N{buh&Q}#t3u%`x}2RqxI}<;|W@v_m|4-Pma~#2qEo)z2OF)yAXee
zeiZEmjpi@P-m}0?-iI^`8m`h>PB(#lHCSY8ee5(md--jwkkc(_%^x*V8UQrgS51EZ
ziYfqSwm3ghY9Hr%GDvy|lgvM-($Qb0QUrBA!18Velxb)*Xl)zSRk$yn;HiFaI{XRn
ziTUSQZLRu#Jdo(UjI_-A^x#FVy5GmDx(p$#@7`;wJE{|0l5_Pm0V}%bVorCtZLG_H
zl9?NwoU2n>;IK|)a3%|$cA6~f<EMf4l!C49=Pc7UpeK2=@J4Ulju;M!$aaMtS}VZ$
zGa|~EBcbs$m0nqRa%X&e)}D?B<%-oexOgjQCSvIBC>+GH!Rc+dC<S!{biC>5_&1n<
zT^UJMQo-FtWHM8`;Ngvku!W5yEMwvBCl1Hm{NzUpKVUT#h}@kusWzPyIGaXC7i4#W
zgT3B)U05Ca+pW$hxKcjcl$IbFjTgufWG^;W0=cr60t&L?3=!wvpTB~Pjc7vQ`DJej
zRiB(xHAENb_?oSkmLOcox!aBQBqv2a`7XE(2yvQ7M+>~zctb9KA4PMbbX^^y?Ta$t
ze`>yo^(|a4oTZBL;b7MF9vxyA4!7>G-9!x!cTFSrXA0tP*CMC%A>favlYiTv%(8{&
z)73Cct0oPjAY@AQDC=yPvXc#{0FHVw6tzh*qN7rq(IJE=RR@2Aw<ShN?aRRcyNXw+
znUPvDQ{M(FqQ~y_sX@%WZ)(f{ynQk=E}3>qZH$FV)dD!s_DL&C%qdV@DI;C(kI2RS
zRx#=4{phQ)ER#~mOtBLwJPf)Bk8C2@&-{HpqGK3-eZE%4TqWCf+Fqnu1;_}H^QjbB
z>Nr+LVmfp&>gBSHHjdj`spZTa<J+jrINlbm2}nAB(?J2)n%2OKD_WoqfR>GJ7Zz6{
z&(A!dLb?gtMpS>v((;Dggug2hDJWYz+0Nc@D3N^7gDXlWEnwm&g@E_~;D$k7qem9~
z4OEd}AvMopSLs0Zt9kAUH0Mq{uvq|yAn3$iyce3%bH$~Od)HT5IBQ^-aZ5NI{kiaI
z1ofF<{p55aguOeD9g$obYI}LJ>Arcf!aD~7f#GxQWIR^O-BwiiZ74(F`Oyyd(@Wwu
zADK;zWGRjW=EW2cmmwgd!(%o8;R=Z7sW;?^ak4=bd)*p9V2`#?ZWg5umHhlgrpT|V
zEy`1@RVAFLM6(azKw?+WSKx!`!CartTciCWPmyLhi9!JCx2l8$^zcV9pN_^=wc$%e
zfnM6!*w|fSpesC}#O77X>9CEu@_mWuUJy7d6V2oa^W70jI6O{E*oyIqB#iD415fCA
zxBuzFR3$;nyACVE-0*2_M9l`$fi!pM?rzL$@a9C4<krf%2g#_w&=OP>xImfjtvCOv
zQz*$kXus!m6U@R0=G3^f)_Ku{C3ot>90>u%iNlDn!&8IgW4Xc*8>!l=Bl)RW=@2U@
zh&5XFuC@s8aO&Vy(zg_oCUF^vAtcBE;a^8;0s6j$4fbh?XRpwEHwZGGUcssG-2G`2
z-cUkX&RZCXSWgQRu1Eq$$wai6uX-P5w?n8!jcuFmmrQB%)=cWwG;EOEnx?dhoZ6LC
z9?HSL$&)Xl1{W<9cOqgl5^$wJk*W)*hX$o`r?#u)Vj^Kv)R>G!n|FWifgq)PAwdjM
z8?j{o1accfWF=&U!q&!UOn_;@n@KF?o$j-{V%6u2rd|Jucq80(tu}@AJUC33l8JX<
z_Qs4aHEmzs*oixphS0i=Rx=LFajSm~{z-IGw<)bk255icD}dW8J6F*MZ@iijUL$sh
z@P}oP;R6Mly?YGailI}>&_Y{{Cz76VTR-E*#bAXuI#LOZSc_2|iI${%IVV9hXHUR~
z!({zna8<36XcW^lVO^9LOjjAsM$3dhFhzV|t?0Co_N(V*!pF=dZ2cVkeI#vLy<ke}
zuoUk;)5J%Ak$SCXgr?#6v;_B8%h@K_YDBZ&Ar^%-V@|1OS~C^H#{g15t-l#HPhwux
zHv^E<*9JgGhrz{)Yk>ZDnugA+1w?Mxl7Nku{(ErSzq^{VYCUH)gczzN=zt4n=3Q|c
z#oz@{`M#5S_@&grwZyZZ>;8GSwVF^!0x9j{LH#JApZc>t>EN%e8}GYPP|ah(#GJPz
zYQB{OeY?{{xfxv_+|uM>QqmJ0;W5BCD(AXon$cOxw;81%z0`4lUExOM&y@6PdtBr!
z1+VeN8VoY4NKPaBwpgj%FSDBEq>w>$hK!fUA(}pJXS}#1jn7p}b`7e$JolOgE%EUS
zp9NfF0_7m#7rW)Yn+uywwr#~iO$V)A0?H+X%b;F~uEM|CXFZ<)Z`d#AK!Gupsngen
z_=chuweke`s3l5EvJjAca1(V#ptj@<wlW#EjULz#ID8|dqFlVM>z_|kAPL|)F#wg3
z$crwugQsbHlDde}Z;C)bn@O!{K*z_?`@FX#A1$V?t+|1Yg)`}ANa@3C)8s$x;$><y
z&2gy#Jj)Sk?JAvSilYgK7b1(RlqYk<K*%(u^1SkG&v=dD_k}On^0p#yB-#?jtE2B-
zfIZW~Q<5I3aC_=`atNb5uG%4y@Y>CmL+#gQRV5#w2J(uCWR8Ca#P4}3O?OewUkHBQ
zDu;O|J#rROL&_1{l<XF_1piK&5l1MuWLhuY-X{aDUR3|WJkdVa%-24%wIu17tckG9
zdd))cWch_<?NhMic%dgz5OPqT)D6=!3?Qym03WQ1ZGY6>v+&&{uF)0*rICzyY6M>)
zJQ8({{hE+NEu=tC#6r9E4y$aio;iHng#hVPTcW^#NU#Ez&+<V8=JgOlq=LFH$TRVt
z_K^9$Q3#13`a~!-1}&ftSBOwjY-?r>1uviI8c?p@8?Cq!uxky~{V?so1-snMcD9O}
zs3u{xu^CmRlGgSD1F~ab^!HsVsKT4o%iO;F%V=aHN?!u#%oLM}=Mvs%kTT_oS|{Ja
z^%vVYf_J;&7QI$&pO_pBR2(J6C^jD{$egcrjn{g%<MET85{z8FITQIbiAq>?&kAV_
z@h$;JYJnw%eAEHaP_~}?Y5KUaxcfH}-XYRy?PykRGd83Y;XZkyxT$Y7zQEynC}bwd
zy1K8ljYMXyQ}VBA@tfL%+vjzG7G4%-9&ttf=|i)g>$SQ(u4`<(_n0u(;|TRe*ZxhC
zt9h<%GX=!|J*sJ-pWwqT3=tq7-KhUJ66{Ni;m}kzW40W!f*XRPz>L)tKwfY|Sgxjb
zyKiHQw#)PUTEE5)61+7t&PjySzYaKm>dv^twK}_x<Y1St+jQO!R<5yTKOiN)p^~64
zJ`-|lK!xjm$Jvi*pB$q<P8g<5Tbo*rSBPBDhAgRGT6c})^;oiEvn{eN<FgM=-$h%N
z@loLfa5+yGI!nSJ4U@>>j6UM=I&b0gx)*`9HAl=5N{^(S|8EJL7jLuZ{`Wt2wh6IY
zk`=9{zw+b=xVf3P-4C|{K{mo0uR%jP+`q5JPIUW&*aCL+KlPjYkGoeu=5mY#g`@-S
zBc0koOQMJzLw?FIX}wdltXT5903S?l%o|z%ayMzgA;N}#ga#ZryB<N|o=KW-|ESqn
zbbZ7!hBOL4nFLfZlNXQANNclJp|U!CAnk<XwIoQJ4k}b`dp$wgl4Pq;z+mY}*4kT$
zMZkg__<m$d7z0JiR;NDMeoShx8iVij4$tt0t4JLDmZI!pnr?plO+cY3N5;=ci@hL4
zm&$Fw!Wewc=}WxtM`b;s+h%T~3GumIh0~SziEVY$NFIQwj-l>4E2-v@oZ|m!&F4Cu
z^IhdlSqLgdnZn+Rk8!u+^xC|SOZi&*$<#Q>XF3OQ|D*5}(tCRP^Oc3MhH--KKYJJ*
z2EsOp%v619Gce%o9@2!DoXyp=BaFq~y^~;?7kYxh4RlXl4O}$ges^B3u1eD}nd2WE
zlzQJ>=u^HD673uk?gK!8z%LLTpDuKWlfT#AK<u)Cly$Y_kFyKi^u%ANGhPz(e-2hL
zv3+Y*Q0|~C5TXJ}mRSYYp5rKr<8Q%^u%obcsIcMK{rEV#O37@Qx0yk#-;Txe2$S2q
zxXs<jwwx6(59#HbvE`JYP*-_x+oKeNxN+J-_dA}Eflyz`*XG{+)vtn5G9dvP`F}h>
zBOPGN$50*QlAjJlh%>0t#<`mMh8*#PhED8j?&W~UkQ7qsv73WCFipn)2P%c-iEcuV
zJw1nP2Lu}q5n~~MLEOTjgws}qo&Dp@v`}=+E3XecfA{vmnlRC5B_Wg`QgSgj<+uaC
z;eVGt<Z=)h{>@8$l?cLfM~F+W#~qHcS;lQF$`r1O>Kd|emKI;IY$-tkd#7TkV8;F<
z_dCsQS|EN^-w?`8#~%JPQGHV0t-h+ObqPj4=R4X}n}XIIUN;Qoc^pc^t@<Zz-Gm2|
z#$sV0luv^P8uuy9r=y8#aU#jQQ@4<y0^4T?Qd-^Jo^>;!Swf^9Qd4@9RxxLYKG|;L
z&Rt3sWUT6YBTdDflfKpUzcOF^s(fzO75wy*M!m8BqjDrVW-kYvG1zo3%QsWqMa`|?
zTSF1n0@cqDjJBJz|GS+!&U;k%b;OVM4U|;zQl{5uhz>df(4Z0DwSX$vM+HZ6?5TS1
zPjGIu!sB(m5wink|At_$mivSPHdQ+`yA<SNHy?0!!_<p3a>UX(tB|UL(13uY_&CXU
zZ1O=Lai|4-H#f@jNN)M&9!_pJ#kEp?4IPtjn@g?FK0<cvq#Puq>S-ToPn(wo7ta<-
zgZzN|s5aBNZX5g^cGvsH53`emBNtxTmXh^914Fg`-7nL)LkZV6mRYR(GF=k|Pr0NN
zEShu2%XW;>I%TiV6G@P^E(`A$=+kImnnqTQcfk<#uP+!7)6?bdk9*v!9l#c28o`7|
zX#v_U;7R)C2w)Qn^Nc{Q3-2&!qFp{D5uru$Lo7;dr%K7Kpvkb@7V*_VV}{9X7o%lJ
z8W)g^nxQj!UR^26et}ZK#M1CYUu1&)n!XLjxQiHOSvl29OLY&ATB(l@l^|HMH6iy9
zP7Wg_oun<C>X7o-95cio3x#B5vv~r)PQO4r8USLoeJcSFa}O5yl}a)N6?GKGeQnjy
zU~fJg>#-}WcOiZ@qNNB=vyEaqI73jQA|61N*6@RCz0+8}FyU^@K!rOQ8#1+@Y>XDZ
zu>Gq6vr#O#CtfsT#Q+zW;f6&LVIRE<W4y40R@ZpG)$;EI2Z9FwxCT6nr&+i1-*Ob_
zh^p(pT8GebxuQ9}7K!T4{m4W3g=Koz=qfw`>J9WgwLccXt{3*1;@b(7mgwIn;rF|u
zJaVG<Jj2IKy_8*C4Bcn>@SA9Z5)&?xw$hkw`s^Sk?vUh^>xC`%s3qb}+>EiKS|CfX
zu<ATT+Hp{bdv2qarG8{im%2rf#zXp^&8Lytdr}aYwa4@zDcNGmSnBu%z@nR~V-S3E
zLA*)t?4wuEm@-$=OS@Dyb$v+dj5k3BRb!gm4@#&81n=l~Q*cKH^O?`hek!YY_>y?d
z5$UjDnm5YD8;FT`;B?Pnte)>(yq~G@G$t2nw6%ab(@^K(YYfCSkCD*7p^Z<nocDU=
z5d5=O<eZ*C_@xCRL-AgJJ4uiGak4nqu32tll>*IrtS5t85+PS1G=~FcQ&co<O!Qld
z_ap<>S^IMQF3o*{+vjP05B0~}FEP#G`P(W=jaDR%@%c!^pL4$Zo`6k>LtaD9$Yo&<
zAUG{4_V1uLPmI)?MNUadr9pI(eB09$$ww~=Kl`zpheDpFc12eus|7Smg384*Bf!u-
zIkDfcV0gNMQ+~ZJrl-xLaEwE<sMzZxc+Icip!i5HoJ|;nUZ>>Zq2BI*E|_|@{*o(a
zz<Sp>tlV+}Twsc0Ypd3}sfA+)K-is{I!)45?_!@5N>Bx1L8{8D!|!`6|9#&{Lz_Q<
zPy^jeV+|kcF4-`CD;WjzY74U{<4v8VWbTD$b;dbu$FYMx?X%3<mU`OD%pT-=O@Uwd
zny8S+Px3%)Aqj4GJQmrFLZX^3Dm{+$VVS#vc<xZUUw{E#ggjJiVy1C;nON=}ZwWVo
z#s>wdtIaTtg*n$6M7xdg#Bq%Y_6_U>9PS&)sc3QUecr|F{RR?se(tM?TdDpkV?ND~
zzb0AR3Q*Hv{&I0m3N^6j{!6-grdJN~=}riNpJI`XmCCyqTD-AvlBRnSF<P7UAR57f
z;?fsOb)07#3=o#Wr?;hL3DU{g)YZ%dASO%bjBlk+l++%8L-=d1n6cgHK3<1EoaQ?Q
zVI~yP=E89gfO4Mk2JRauzvRKAmhgS>KS6}=n!APO?7uhe3Y^vjv$y^+P|iB>;^uW+
ztJi9(3|NY9&+;$hrpZ{uhL`Q{MfMUWp@O4xg{0@jYTaDqk+v5`;72hvUPLRARRH9e
zd=7H)Kh(%%4Ux*jvlU=-?a?Zjs@%GNY(L73OMS-HG5Z(MKh2Be^^(XPMtRXuZLvJ|
z7GA-tDU`L8H7<-U&8I5S(2_(Gs+!`cX<xBA`hOg1A#p!mr4ZeH;e&)?8!oVwGoTM<
zzu9^+59$h>3JeU+R4>yo2Z#C)xYon&_t|oITtgFXryqDL^Qoakbkn{p5zA0K_J6C-
zQIgPO2FwmIMZg@%H&j8!2Ym0i4BIVl<86LIuuKwTOAwF(`+(@$24h0rxFc=+&)3~H
z#I*PV_4*K9?rUC(ObdN{)UfxzmIb9BJt>gk*tD_4ods|65R^<jY5$<`%Zd@!bw~fi
zi>M%;WhR9Xh<#Ql!mz|IOfIqMOnVF;gtwoN%why8Y8L6MRw)R+wr&2M0|LHuhz!;n
za}{N`afg_Gba!3{E;qv#iNQt+D2B!AEgjy{XVnpc#2{wCvu{E~()DEbvA;aNx#}>I
z9u2w^EGG7tf$Ym>>)Ri3PZqIiVBE8g5rD)yr0qz^V)b}wSBeUBKVrJR0r(RU*WfJN
z2t{ZluwGL+jxO8&-#!MD+h-F8)6(H-(^r7>|L{wv1pfa33g(y0dn|$`H$~<~Z+oy4
z@|pki(NTVa!pET6PDqdf22Zz}%Qc@9=IyEDdaLTA<&tYChC!)_(Ty5@A3GR*>-htM
zdC!IKSEnYHavS_Pzyx>DUr6jYBm25B=<mI1=3YKMr~t$aDcwnNv;0-Pg;gmW)+e*C
z9JeR0k$@72x*bs>%Fohu0sl*AQEV{Ed)vtZ^qudYiu&0{6FH&rY9$!uLXPG-ui4X|
zT<Rf^@rle2)@304gqdZqmK6WFJ`8TRW4cWqD~21+r5fN%QVEap6&0M@B_`ie_UOsN
z1bs=aIHx`JB?g*JBHP>xX7sx$L)r}Xzk_jEB`@z=Yz|;S3<2S|1GS*!Xx7QlmxJ=a
z_Ij3@-t^I3DM)9}1(J`7fDCH09RAxA2Qx_wc@nGO7#eCot^H0Wn2Mk>k`0#_uB`JB
zu29f|02>xsSN92S@VD?6nYs*gNC=L{{H?1o=}7xjw+rqY9>#SNN+$FnKSb1Z$NdXF
zOiF6a^EpYN%3#XHg|Dc5eFNI&yC24^Az&kldovAiF*db)_c1j!!Lc9$js?HQOyC=6
zC?3wBw4;bBpZ%J1NLdP~PgKAqq9p=Zmy~fp$lvOHeTHKtW|J4Fhxh)S4Ivlh9ED8l
zt54x0WYPOQ+=Sf2eHYAji70CFlA%z1c8=@T?=f=aG-FxApHGZ@-=jMD`sTY`VxP$3
zD;hPVe|du!YD7`wjE%6~Ev!rkl1BhlCo!r_vM^?q`fDcuuFqjO9yN+_lCeW_ID4@o
zTm+o1km~|@3d-#b@}H)0=+00iD^G9Fa?Bj7Pow4B2XO6&nVoPqiesyF7Mai=+iO$z
z=DGjvlE9W7o(w3wXFEosJDcOw<<!?GxDZmIRh+s={()`6@{VdTUm;vy4#Cc@ZjQmN
zK_}Gq@&{qc%25(3M|`R2_tD@oaiw4CGOdpW%fp`abZqks$|ivK_gQbvWRPpjzd@Nr
z<>=*q+T1J@atxNl(+tp8^jy#rigYt+0QWI9A!aHOHFfoEsRj8p9&VAHSo8E5uc=C<
zH;1huf$EZ?AENHkz*6n)*1Qnk9c0rbjbf-CVZ#G_-eoS?7^(2$wTbL^>v8c26OPlV
z-EXxw3~7;e1VNVIaz!7x*SJY8=$%Cxg3l9!5)|W`PIl|Wq3Hj$D1^HGn8q{SQ%|Uh
zqp5--1Em=Ii*RF0NdJRv5HJ43lk27fpW(J<-rPqt7t~?}n=}KbISjs{B{&8#=ZHrI
zBHcrIJY9ViF_I%d07drER`^|^mJ%`~7Liz>k^KGhF09I(JpArk6DrVpKO_A~VC-+%
z^<+3!&a*AZa#1#Q7b>D6*QwA0ebbP!)=-1l{$X0~xzKvi78_zTC+?qSNreQn@=6n1
zS{`-$GGdsWX&xa=va#q3u~HIN3p-`WVH{d{Y<NPv(GYh(*X<%}cW+CXa+5dgw!Ca^
zD04dGw1OKMUC|@X4~SDJ@20+40P5({R@_IUXX7urk}9SSizMEL-h#Gy#ZPVU)~DM)
z3c0x#uRchX|6@%>58@F(zd=S}+Fz(-Wv7-o`}d6!4g<j-t#M^M7?TSEz(r+H((Id3
z<=Fk)U}QgYB3@36NFdhKqir|8_wSMFKh7CrJg0`Esm7#Vs5ufF%aERO12||tvVEn^
ztwWxBM^jVu2)aKm#ftHXzL4bD$Y8EL2u{{XF4K(&2f(6(>^1PEVHB03GUotNl``_(
zU>UVoS%6f>EZ?<Qxg2y5=KF}$ToOT`H~7-#$n(g?tJFfII6x0LrNZ*Refs?RPX^lX
zPKR{JtFagS)fjENtGx|A<}Y76ri*Q)HHR*Hl|RptuOZfx?H#(v1Shu{R1t?o%h8-%
zf(WR)%517&#a11$f<Ab3TNMo0gaVnmiAL1kvyuFf|J+kB>f@l(c5}md&0CtiiTK9b
zBe$?)?)R~(iHiQ!r$ah)shh?9x@{5;ZV2pg*=5}%JQM`cGo?mJ4+`2$xVL<a2A|?s
z%^QID#iVP$_e2K`3MO~r2M#Z2fE;d-$}B<QJn{4Gx<4^gfT*L+A9WiNQc&?b0=6_k
zBR)%BY0(PaKvEwrRw%=4$V4JXd|4q5^(>WsyH-G74RoHra`N}j=)Iv?krR<2pLwvR
zWUIw1Y;&s|xo6+bf6%ZPa*Q^)dzJhKZ3nYBuJ0{<qe=!(eyZkqY94}juQdUHzv60S
z7PZEkGX>|olt&RMB>Om?zhwWAWo_}z15$?X9{24j+1?xtXEEsr_63oG|1y&Z$+0No
z*8Bv=X>{lAXNk8lE9iL@=R<qJ2FjE}-tkHjBfTIPddDtE-H(NAgmXR|U=vd4|Gbff
zL5l~_MuzWsPsRqeUp?WMxYue}(bt~#5RZ<fvm}cod3rjr)(+DBXXFVBU=vDdbzs3D
zbQV;wLtFAg!`~`Lhp?@I0C@bZdkxh&KRv;479Uo;3VtpE*H73$wAl{MTgMY;@?kj_
z?Tvc?JotL+6O0C^b8vRGyp+jAhr0pLiM&uQ|0k=DKS?~n#K$@3_<d}tA`SoB`iF$4
z3f<624rMSfB9BlY6Nt_@`%W};^#Fb`m5{*_6O>39#4Oxh!OeeBMG{vBdYL<3bcEu1
zP8{^^oW2ff3Lm)=#>-;{-@k<=4vN87I`p*V0~_bg+kkP2lMT^fUe=eGuonfsdIykZ
zK+_h2@rz+v8~MzEy}~Q#wmHR34{tcXiG7Qg@k?UOOUWTpSpT}K+_S(58^vnA!o!1;
zh0rW18h!P3Rik}@PuS0!US3vu``kgLoX$Nlr*??{czPM8A_rWVyQ*ulu+P*m%f@F*
zwQEOSb=}D+)s!D<`vF2pY>Q_FD)xigW=vldvTb3osM0lUGpQI*St`=dijDQl667aU
z>qa_($oT*(Fx9=@__Y$iFmF_8Y9)lYR-L)(4v~3|7H=lKilvS=G-*YgqT{-uZl&&8
z%*JZ9<(Od!l?!gko1wn1d{4A=<_Hwle!{4>n_g32Nxld3w32I*a`SDb8%>#_7TV`_
zW@wKsg<-wBI$7piecTM3j#GzDR4iEiXYO2!)!mg!f)!h+qE(lm%HpJ&iqkB!+BW`c
zUU-QscGd*B*k^z66w9Be&?u4wivW}-;-EdgqyCQRXFKigoVF2U-1TH|B+w`zw(Q}{
z@f;p&c{Cd+V|99tj0?5ngRp@p${ngJ-wC7c)j_lG8$16KxepXQnkps4==0jWwv3l3
zI8N=$S&Z^lh66-AtE~1)zbSocTg`pi3`ySEibbyY5yn?;jjcI?Zyxuf4zmTimRDX#
zP_J^FqrU-&zxwZYuY)ww|2fn?=}UE~241l3l=O%;y%IOv0u-<vK5r+8ScQeAVFRj5
z6ii82`c-Pa*M&tH5YUQ=k(*Ry@A=P%32Ax#2~`6wN)XO!%igx$Dwt2-3Li4G4vbBh
z-P|v*Bzh1AGtNtFZcdjhKbKK#6!H)Mf`DT9f{Q2c&Z*6Cj9#Imjx*0CZIcP1zW3%+
zzd_WdLr~}7BXpI+r+EVV<5yb+EjRT)*k^V=-UD~ck!~ZjdL9l{p98f1?JpAEuX4Sk
z_+QALh!LwF&FC14($>tfOUl?MbUjpw8MnMY|7}M*%JaC)63Jq<_V|3%qs4H4Rn+z<
z1+wm)mhc4EC$)YAb=~>IG2Ql)83N5aak-aek({$lK1u!X!hfuQY|Svmj4ua{trhvB
z{ivTgaE7Na=i+}G(XvwRMHx)>D_bG^Sj{sHUuGw-wSnU%S%T%gV3!YoDnB5lK+wo<
zq{?^6OIaGe1Wc&SkKhuxaLngNKtB>CS6d>sRT7(0G#sM<rn?3%RD@}*i(E*o^i=}Z
z#_OZ*u<gCS$-Jzkmg(awMS9kgv+}m6{bV4-A%xdt1fGt3x51w2f+8}?@53nN<49U(
ztF)yN#fkUqS!r=P!YRGL*87;pVALic<*-^mTNXs1YK#DyK(>Em2F`C+M>SQo!Ole`
z9)a>ZyGpgPTNFkHyD-xmsxb0#P|UoF&1{%VzT$<n<NrpcO322H3lQ_;0Wi3BOH^be
zR<ZtzkuDPJK`VD@;?*qv&eS)Db;fUNei&!9elcj<fpY#NHpNN<Bb5$;Cdw@i>P}%+
ztZ<|6mowSVI=-L!ao&4xreoINQn=uEvN<awmoXxK^H7KoaU<xikqPz$)x-jTuM{<s
z-0fr*<<rC=f`qDZ9Eq_J;VZ1lit?=c!^V&N1?*Mr4<^52f~2O4Pv|@<wC_)ws_nbf
zXATYzf)4KhjdF_oy=1sOrI`$Na7uh<V!G;%3_b7N?n|vppC}J0&BJ%F6M2P@wouQ9
zK=#As!}x<VW|Vizz__BPyf&N;I2k}3tvRuX?_9<f=TM!T8!fw>TWLhOph==OLi3k;
z3z0^PlBrl;f&Tw^eBR5oCBJ!v!@e!+%sOuZE$GP~32i>3aF@v(#sDU+A!4wnCH9JZ
zd+gv9HpP230-OLLasNq`B9OT3mY4_E3`#k-+YL)HmftMg51dl?qlmG#K<`^k#^@TI
zE-=R>I8Jd-I5g={*S;tidQ|>XpY4h@^B;aIwh9qmhQRTEg(H4RruQ>l4gX6|a>&r)
zk}vbTF!FGX(1m~_uy<&>+;*6{M~Eknf;HNbCLv!tY88Z)Tw|c-U^XO?y5swhcTX{y
zKiE1o(5ih@cT^vDpzHGQC%f=RtZbiRp{sDVuHv}mx(wyZsr+h0stJ%5$cax-M0@N=
zI5Nn2E1!}v9ei+&{j~BeDYEtVi|&9mx{|mwj(HH;s~%C<vJ)7ul(2MP{`tESZ0BE2
zUSK$v^g!b_-O(l|cCoY!H%@aVU`{IB&1^yT+_;_zlEbjBN18Ff2yP8WAKW3Eue%^b
z$jr?)8M|oz6XEp-6j<$~En8K_OlWyek~5s;AUbyF_|V4SMuP#qQlfI3O%j?GqQYG^
zzrZ;Ju<z%(I-KAB@}X#FtgOhVV99C`NWgVq^~Ho);a_;cX_IItM`&p_kR7(2H&&)m
zrbEu~b^xE!txG)8!MRTmAV^pC&)59#H>u1sDodeWQn-zPg6rfH%VzB57{`b;g6%%P
zai2gIzG`grH3t<Ny~JaMUtaN$Lj+=Zm-W1es>C%2M%nLc{|4H80+n`+xx@X2%-iXj
zSo{B7{Vco^zN|GY+(*2m?;<lH`Dun6&?_~O?ZP0QHvR<3!kXS8Ws+&n)w6JL!bOS+
zhSo2J(W4Dl<-d&;RzDp6MK%G{@S!|&CYmic&R|eg^#Q#HCj)<}E*JZ)p3T@Q8I9u9
zF3A1c`%)vF<U3uY{PQ2Die_H#CHF`4&hW{_9l$4G)uA1Go0i>d&n&*<W727?R*`+g
zCVSbPTjqyi2{|fwmF+(xld;J>o9)K~#p@tyZ+=!6cByUO6EJ06gzY@s;ktOxloW2_
zF(Z6VeQ-|jJpBoD*XOF`nZ`u23+N$nZWLHKPHh8FO^I-1hw_OzZ*{}K%EVz&irgdd
zQ(d?#TTbol-f7bGrQ;-pspX@MOzoBeN$ac~A3<7$btyD6&?G-E>#n53^k1|Ve!0&p
z15+Q?Avl1z>-~F&COn@~8)<!C26BRpYhE3@)yHh|E^~uvIT@NYGRh8#zWIyVP_C#M
zO9s=%QdQ6#7m)<IZS<VP#98a(zE5c~wxTDIfK`NK<#rpJT-VyeOU|X5SxY;AxB9-n
z@W<9}5Zh_~@^|kvW3)%S_3mjfJiT)-QFIF$LzJHs5ufl0soIB&wlo4cu!KC9#(R(&
zuUMZ9V+t%*sN1FY1By8kbqJM#+;oin)+^E3oc3T9ox6hbS$JZ9f#wnL+rZeURI(&Q
zh)xd_WMRP!AWc>2QFA_Q_c;aC^zQy_|E=NwLC5LqO21kH?ADNZ_HXw?*Ri0v3MlPr
zLY{L{5C7SCZqMf)cO7)`ZI%oP3%_G1oO6|4)|%>+@~eLX2NrX6qOwc@nsld6`$Jks
zRHXirI1KNEVY~wk0qVVZqJF&d7`2KP(sF<MBm<|Rc`%6%X$wLgBxA)zM7sO5G{7>P
zY(Cx<HNU@RZ_03>7ehEr{^#k>nlj|LZfnJC90#Df68omB@GPd+o7GB?B3X6B0>Zh1
zl}JVHpem2&_Y`C7qkjZ1%8<wFVB^En95E@HiQl@b_DnlR1dQ{zlt26teuUztVVbg0
zK}_1PR;>)Kg7{;OxV3*IKX4~sI+6c~-O7ZQWB(4XY&{zZ+xYEUtt)8I4Plm3jr@pK
zM0{m{byx@(SSsVhw-@UH(wtmNEJYrU>3-oGFz9(Vlt6xQQ=XMSfaGn$sz;0-cc$to
zDghTw+bAK}Y1{%$(uRpQUOeW4X49c03yvmc?aqH=pBCe?k&lCy{7)Dzq{NacS0~@6
znb@VofZ?zYT&{ES%x^M>c9X*{Pq_fkYxut+O(lst7pC8x<1<8>ix-{x4YepbB>7y!
zODOlYzaE?NtP4?PnMb*AgPXN^^UehmS!k_Ug5iJv$445IB+o0H=uax-Nw?uO>>Jrb
zNXCf&PjD|YYFfiZ>UQc^GjD;g+k_{t$2*Y(0pRhG$sag1QX=1@45=BSE0)e%N{bw8
z0_7cx!2iFxWR=g0aFJ4JF6=WYpuP_hZtWJpyNiFdf@x3yln3i-O`*Zgepy9+vf=j2
zr@<Jvc%AHfp5O#F7#sepcT6QxBhMJ(i!p^QtBv1lQt^QUic?9e)qsUn`d3g&hv}BJ
zxIv3Hw?~NE@lAK@G){nNnIWTU(yg#3%zG<U4yGoeT83#z*Rp)ZGg!zva3wx~HDOhQ
zkfkOd#0eovCK+{hzsU(=NeO9engdaX`S&}^mSgC^375S9G5oa-;e3I5_<Xj3$k_$u
z6%g)e>=63qlG+9zYk`&C%BCJ|ap^Z!y?WLG=D+M`Zv$8*aef9i&(c2htHtOaS+pF-
za7*i-!~HtEr^qPo3|I{@O42n4XgGFp4Y$qVtFBD8>Wsa$LI2662+hzc&_u%dB`kn_
zuY5G^5d3?slt4LL9?Pv9A{s5m7}ATTnxC%XG@mapmikbJo2AdxrIK5B`6Zrjr_)ud
zSwy8`g!O{d;55<fx%>+F*|Q6u<*mdtrD9)NI)(bduk5<0*BUvjiGujQh~u>*s<No^
zc`348)W4453t;Fheu8supZZttFw^}|K2*$Ne`iMuhKMm(JJ`xcB}4Q9b!#IePbH`)
zZdnT2oAxJ`r*^o)XLja)yR~w_LkVo4jfDTO?+M;3f7SrsIkl4he?#T4$i4S|bHaIg
z#a?PH1ceA+*rv0}m6setjE5ZZZg>Wb2Vo?EcvbAC2b-=q{G-!|L7%OU{7l2U6`TN4
zA4xs27(yRdNQFXqO}HSS*iEV(W*~vT0`2TDZ5Tzx=)!^Y;bUG$hQnKsgHZ40Wf!bK
z6RbHgZ<0~SV+hY%+-co=J>Hf+04iovM*_;XOlT;&EB9CB^F-0Y{*!M=<o3R(qA&Sw
zFjqTCBAQpHxeA_CNJUw_o9pqlmdf9U0_c#lAS!ysko~_radVieG1P3&IWS>^%&nl!
zT=m3Ka~y3|mdWh@rIZWmE7>l%6m3EKz~_TM3y?$JNBuT<&dstWcBnzrS7Vx$FCW9i
z#9ClYuq;Zp0yq36W2P=zOzFbARJg7q0TsN=cX%+<?LRKj8q)fUgFJF^3^``Lo9cOJ
z4jsc0k&qUkE;mrlLz3GOiNd<{YkNoa8cmYZ8^MGrEK4q0dU@%4vm_a@{1o$1+@M-X
z=VwizSEe;)Qutjq>KM)#7O3rO(cTm)JIM3v09TWL*U}0kSR&7-Bty<|u!A!5l_-@=
zdb92zp@G33`0N#(+dD8PaKs#RyBZ5*CG;VqmY;y4kzWGXAA)EY6sP99Hxc-2kq)^s
z&<gL-mf6EcOQNjd-{DeW2wAe%8KJpwr7s)c1EzSQ49G2XyNgyl({*QHMm*s2cObr3
z@RR%`b}@d~V^z>(?(Cqo8~kE~wOq@Bjn5K?jCQnm*rOva3*%xIek(1EBOv?EIy7~j
z^9G1CfZ)QTSjgO8@Et-mQ>){h?!|8<kwWg{^WpEfBmS*Dz*R<v3O$tGgR-fN({rN*
za5&=*+Yn-xj$M7Zy#R{uHW}YUa2Y*@I<~1<&;CHE`#|=}N0c;*z&MIAE~EAPC)EZo
zYQeS|jU$kVpu6y?Zk)m!P|Y8})_wvXBGNR2s`p7RYf{xyyNUN2oC-DdFd-(l<%#u6
z+h`ebeJ)FNF$%I?N;}S<4`N`8Rc62!S0);oIaPkGQZf7}`UL62&x=}JA@()f3Alue
z4Y1EPXSrfrQ`=p*s8ZE^lI-lPkYkzn8qjp!$$;4YCy-&OxB=={r&3ASbvEkQle#4<
zVkN(7v6cgDOR<qSA?e<`hNXtpFEM(P{--4`1;z=kr!oz03@Rl1m+K9uEu$}xJF`SZ
z@@fCqjy;7_u@2cNam+OvR`)F^@`PY2*B`$-aYD1CpO_g0U$>nvB1`*gP6nO?5DmHH
z>9u+o(@mIHk<8w07gHZdz|zppyeoF+lDgoEIyca0cXpGz(%2r@EEbNl6bE|S*WGgY
z;`-92A@7x7H3m@Ug3r;NJI~hTb*BX`QJ&Y&ZmKBI05=FSm~=7%;I-Q)6p+p+aNTr0
z8MEWcF_HY!bE&6_qNV|g9z%nZ-+{FV?#AQq##aAO%h{bbzomZs_Ouy93HmduU=dfC
zc5kpYkQfhYTt%6-Ig^}Jww4faDzUc@Y)IYEzwg%yzm7BLQjz3=*%W6JpdKih<n`DD
za)5W@S+}`=GE5Jlss>er71ylJ<7eVYV{_-4aGtJSH}m;{M$@8mY&$#N;KMpkW_=G2
zG{hSCRS;_x`>+j-Z8t9QUEvY#zd!8?Kf=CmKg;z{u_*u1D8<yv7~}cOlC6ePVAm}S
z_!vBoF5iG<dqFUbH+IHQI&6zw0Soi=sMRy#d}VydK~{*th-zaO-D1<GC`+tf%<-e+
z=%vW>eR)o77h5x4j*ao(R$ToUNcB>aQqjUdd%v>gjFu~=z2;4=mdi_voIf#hS?cJC
zIXrC%9CGLK+ElKpeU$%ff-EF{f55>Q7N#G;yvWcWP3(`=X^+heO8z>sH{VeP)@Jp9
z#j5ZnSQ?8@G1VfP;Z`>UIu(wzluxuPi>e`qdFN0})1#CaY{%z+|Lxy=%}`!TZU+Sj
zU1*Y7g=!${$^P(IzhY4ej1?RXN>bq~95$x~yW6v?Jx$vi%qvZnvM%BWtMR3^plTM`
zbv+&uo49%$>6aE7j$*{^-IqXY$f{sn1b=52FZ9CxTDZ)sw5G9v`Rk*{#iy10H{GEg
zEcCX1>f5hU&8Wf@+@nWFsvSSwYgolYB0*(`KEMp!`TrdAlxu*0R*6GI1wmd@$RK1W
z<>S#CWD3;bE%`^h<-qoHcXXUOECie70SZE4UiO2<aiHSZuzZZoA+K8<(f&*Tln>%s
ztdF|7?0d6=Ml=<B-Ip3*>f~TQ!KW&(8U>ZSeBo%?7QZW)DPbevG=71&6pvgo@i0N|
z`3ZF3Fk_WIXUDEfGI}zZid*&@#nC-6+9$5@6L?<xio<*|yE{uI!5w2vI4TM_O@f!@
zjqAml_##8+&l`jBr7ZOk1B4%%WUa#0^dwlV?S;Iw9UUK*3{<b}nzC_EmDdAJTfbWo
z4*+rBikJq_R^cW&@j@P&c}cYo%%Exz+=3T3&`Pt;qGh7DTQbK}vLU)&4p*Ta^#mHL
zw3tZ!b!UMW+=6di-OEiJSl5&4h0D!CgicWeVurecMPM4ku%$CBEHVAkl7Z$U)^)i+
zYPxyLY#m<vHJ*?ly78TCb({Ayio#|xiff^L3i$&t*UU}~uVk|{<V91>J^#=b+nf(t
zRSQ?Ptk^1NZ#m!>BdhN#B739wQuH{aY&QquwlGmtofD#tPZ1AZ`!Gx-kRGH1;2Av{
zUE~82mw*s0iS8&C#~(*ZZzTb0^wI?Ziw$5>{Z*E2iKI82eSj)wI`<ZPlmy6$Iy+8=
zJhKBx&wc*blKARrQSFa(Ph#vs{}UW8Je}yv>2_{k(2A30a1g01$F{&Qk0`D}IA7af
z@oA2ki{YzJG__l+!3u;cvt99KWil$VodpTR`D1mR0r<nF-=mJ%*JZpYE^t)h1U)SS
zzE8?!T%)pY%)p4*NX`;45ZTG4@YY<qe%P)-q)nYYP={-ZIgitz?YkWkhh^rr&`Q+h
zF@{xe$ius)iG7u8L6Y3z!(8=MnY~VJ9qR0FDvGnZAk*KUe?F025Mi%mMH<b-RYW=q
z1a3a^SWh&QuD+|qg|g0e4JB;Rs!D~p{u3HiuvGoBT&rAOMw2>tv+<@VqWo9A+70Q*
zhBQxb46%FAInYipfU6fYn-s((-vagSSCHRB%(j^h&09i*Xkwn8C2_5&F5ND%%pD?G
z@xb0zd+~Uow>6!X!UIO<r~<wrhd#4c{CtY*7MI<M!?MN|;p)9dj><3{{#%1Is0rYq
z&76nDur`if?3}4k@Ubt{KOe`krNq%TY8QlJtBR1ti}CNDlaY5b?c&Bbc>JM}DhgOA
zGbxO;M3*xwyhmNp2-<&_3Y0^=e%RSx3;e8!f+nI(8%N5jZVc&l96&-DAH3M#X^us+
z-j&%-B6Lmkd|PJq^@`*Ab9BuEewVlcxQUH6Q#n?kYLcgR(yx(`J#Qhk%|;eP5g3Zo
zw9|p=v&&`jjrQ_lF)Xeb2H(=du&?~%-sB_-<W=N-Z3`k{*$N%0jowqHsc-SJ1LFk?
zTm#x|!m>Eb5Apm3MQck<u3O>3L|?=VUIut^LEY(RNb^ooQp6aA+numFHFzftt=%NF
zy03K<Vot%0M@}O3lzP!<47ai?*KGSl!n=7#dUP-h4|){~qlXprTzq1dO&>PB+^boe
zV>-l39)=*6C~*i;+?swF5NGb))&KbzeW(%@1Md-gW*R0T<;T~c$|Iol=Es0pyPEHz
z0#nZN$Hz9x7o#aX&d`b{u10QJwYQ;P!K-y$e~tHofGC1a)u%P^9RS=WwxfZxf~nHP
z_U}&#J2eaWD2*;sql+_-{oWw$EA@c^lxceDZwA=sUFJqjB-LG^m#wBHBL1(>^`v)@
zu2~gZA+`iC7=E^X*g9>(h+V5(eN?$-<lSb^d(4~{OKLTA7^gFDL%d^B^n6Q_+)qxD
zjE4$JJ`d%neDuVY?VOSE`we;pTvsfQPF6kX&ZO2YN@7G|F&N8*HQS!D-+__62WB`V
zSnNXyV^Sxw;BB)|gqed*&v`XHCP{Pu^x_36{E_tLJu1N@pW{KV>szN=?5mF?0<{)<
zr$SwR(*?8{txr}uFXM%=Mn)ehGUXa?8i3sVrGGChxR*BZZ3~OvjUi*2Kz1YT+I`VP
z6aYwWuTPk7IshN8K5xAv;sn0b$B_hC3XaQ_C9FG7F+LQ;!9sj}Eas86FUoY5UDOcC
z4xCqy`@kp2aO`~4?)%UH<DCr`JB9X7mT*hg4sNc?wth+}C*%m982gdW>pdtQm`GGM
zB)UWAqJDP`jcfJiFd0Tw#J={hXGT)>m^;9<Zu`=Qhok7J`Qdr++>QP-R}tgOB^q6|
zqr3RrqfOWFRRp+D4or;)q_Ka%7bO|S-ngjnF+}UT!$_w_JO}z3KCH9Db5-x4(DDAw
zu1!J{a$uNd{-~UN7*j)QrD4d<!4>gxi~8cSG3N|MBzuPAKPni3Q$(UyN+}v6uA(9!
z7<&tRBKSsLH*eTj+wC*Kj9+({TIMoOZ!6P!bKFcd9NffDh-Ol-FE%v(G;*6NzkG;G
zvp|r?E4XGdT5OfwSN6F5))6Jo6Kk0HIVtiTSL5vbTrwis?T?AnkQZaja+<94A*4!C
z%(Bk*{D6j^R3?*+xVU-qA?PmKOHk7c{^cR2+$Ak<?<ASJBgX5Ld%~)gl_wC_XCR~+
zN|9ABIHA*T_UR()3H!y~=q^qLTf(d5N1oBTRxxb2GvN<hQW`u?zS^QmiJsafj<rU<
zxkn;_zMtZ!G5Y$XV|%LV1CvXqO|tJOzc`p9{AkN3D+Ux%$qasvh;@eaf2F@Vbl-a_
zP`jD>3-^V6SY%-}qmEyTp-aO+9n}!05VwKja(<r-HiT17#8{8}+>2=2q%IW=A^b7C
zo&433cKW%s$2(nNh`Gfhz0?Nq6Kd6q2F6J7z)_!5nLTK!gV4DxS$Vi)(N=&<$s4FC
z)VMlDs7wgCw5vwQC#2ev)!6-I;YQKj|0(E~0>R%M?`T2`cCeF|*p}M0L9sj;bCXgN
z%$5%Y`<55VX#8-lA@l!9WZ|;@q<AXcLnlAngwt8#g&gFvKMCSmBrn;Q{2NUQogL97
z#ms0VEq}vUIuYPEMb&zGqZp71e-b<+G5r@=W(hD>0s}$VR=3)=c|ENzm!}tbcPOyn
za(9nA1w-rMR>SNyPY;yge2k5YXbPO$`ocCvX-L6DmdkDv_854YIB<V}9|7C_k`m2o
znmw#v-z`8p^5ss!8Fts=&j&?)07v2yQ!35Vk5Im3mCSg<Xz4v|)jz^dwJx%K!lSSo
z4?ByYE++VABYRj^ZJ*a8ZW+<}W*yt)Z?dpTlf}wmO|(-+$af#Q>i;<TOA{<gOh2xk
zIV-dMNpeEFE|Z$Oii+>0h!+IQUeByoo0(n-2Ld+;mu?a%*x9Jwv@WHne+{5ZW*JTe
z=1upa0EI@XPYzY^&;F5%z;7nI>QF7@h26a5%glhlM1bLVq#-NQN`pe4X?yF%7mfGC
z@Rte3;vlz%0Uf=U8e+KhK7mB;&6lRbr-}j5lQ)YJn8cCb4*XJ0N}uR==B1>iOK<nw
z9vF4tSh-fdZ*PW;{Ogw&w#!?Gxwdx#rVMMIl>ITgdI%j88GwT+@eMN7+KO6oN>da|
z%1pgGrPZB^(F<tQq-Tnb5%)KYj&Wr?K#E#Sc&Y%mqE%or%bmxFy{4pv1`}l_>q>XP
zVK(u{U?^gg0#LD?h4oAs4O^Dl>30n}dy38|7ZM4X1E)ckW|y*3n?)F6)`4Re9q#56
z`sgIB6MlX&c>os002bpysV_V&uJvWPP&{X}!a-2N{XTS#T=&1tu{@oONfdl!3Z=L1
zrefoC7)iB?GLvnX5Nx>-l)Yg>(Zez~dNdFspk6^MEZ2o^(w%74sw04IOgrtq8nSni
zV&-9m{P-I6IAr*})T+z6#d-v3v?Cej(D*SaQXQz9phq}?Cmi-h^^B+{k~ZI%I5mhW
z%<J-(DTzJ<25j5YOOng66NinH2Hqo*&GH63wUdx8^bhx`9}Y=vP>11}_%8V!X6^>x
zg`W{(Dtq|&n!k~}Ab5pN{Y7rGAF(KVGJL$aZ*<*RSEI$4)9B7WhxCWdJ@<>J9RJU*
zM@%2}TWp##2uL>EVOzsj55Hu~#l!w?u8_l^XIy+4G`6jEuI^0rxqtJ2jd64Q1oS<k
z?o7f<*}_keUXWgVz7=w<>kMebMfM1_02+u+GbAaH?oTRrgb9Jq4d>XS*tv7H{zg!e
zL47RHkw07LNeDJhuoN<M3bp<Z!Ss#@S%6$^C(+&Db$00s{!nYN4^aO6Pp?kyUNocH
z!^ML5e|zuiS*O^Qz#j`FW*4Q1gly3n$^#qwGA-w<n;_AES@@f`rk`O1@r%$FE?5~c
zv8MH}z!r+!mz};Le~wMY5e@;?DokH$_ejLH^y)O-+>vYc*;SU7p|Bl!3S?MmWNE)r
z-W(Hfs&C_K$9xwYg`Q?Zh9x%phRidi1-{tm&;jmBqmfxXDcN3#<MAbsgHiIco^!24
zX+7h(Y2KThz1Q#c*-3{<F(~6%_j~t;xyQb*o(|~-hpg?1Hy2i)2HkZg!fN1K-iW`T
zxk5~CRO^?3d#sstBG}U{lo~rD&o&$#;JgIHGX0}F3F2UnOP0lzj(>EP0;Dv)%$zUU
z<u5aplv(O?BH)9{MJ8=&&((A-Gsh$T>!b}6P*8V~=T{0n?Jm4PL`o{UylY09xJ^bq
zjfOTcWNi1$96*~dj8J`I9`m>ntqs}`pbTTh^L5Q1H-tYdHt$Z*&u_5kN7Dgq5dUBe
z14<A;AL1)z<3nS|KKxUgB@1;k=ysi|_=mNgDWa;)L{y#Rgir$7)saO}C37hQD*jq~
zr>s~<s^%YPkQuBy{>-mK9TDA9Y^ncVjD8$C`BPE}Q?O+DY?`gaufyv~;1*QVnb2}T
z()^?I1jQzZp+<0L4|tbfPu2Q(FSXnD!5dvXb_T8jh$~^ZS|zU#xa-$nD`&C?gso75
zfk2nV7Y3jzm>0h*HV9<)9|S@EU0?&JIG~A_blD&9Y@TL=_sD|BC<us$2On6V=Jze!
zuERw!cms}j4Rq4t?bnAT%9y#!Y;)ttPaREAH2D;HL*hb>9iDsvw~jQN{{#CsR{qwt
zHF1F<28Nje6J6i7hRTl0{!=D~xXu>^W$DYa)S(R1LJaq0i&CDf@nh}7TxFvr{v<{J
zaOy3*K32)Awrc!*O??l59$Z%PCvQSS7v83~O-VWI<*n@YSW$nd<X`YOkfdx-+^?w!
zsmt*sqCeJ&sO$CGhQeWavp*)v|4v~f@&LreF+ON2HyfH6;rpI{tOp!WesDiu*`bD=
zy#2wmx%~W=LRuP-TXP*bhuX%A<;1TgIbo2^eb+p@F785ERmT>8$}YgQ|5TYh#!VE1
zVr(qE`1KgvTLkXFe_SubVcfy}Q}c-@l<;#lFgWfN=2p+nj7!4EozYQMOF7JrYzDc|
zy?9Ts|6i)d{L&*Aqy68*RgWvKN2p%r{NuM43RLZ&qm~0>S)6C_(fPAYxJ>D*d@;f(
z0$?KKp#LiiZ>I7&!>7==<Ia$3!aF;GMflO)-AG@mG9kO{5!TqA>(uV6zNUddmd&hi
zeKcEB)Me3H1fuNzb=Zk1ux+>XC#&@Pkn=`YMAviBt`RIQQ}E9CLvtaK^^SW0dA9o3
zcbN;g#*_0Z<v)DxFn&^guHkunA1FA%$H{=3lb2J~|AORyE==3lKepWD-;B_Y;Tw9}
z^MW1m2u+02E5n^vBsDa0^~6`|E&P%+SpgCZYFB>f$j;-(bPgeKFXPfO5oM7_W&RAt
zQz9r0qz^n;+}5r9Kz-zQQ+N~0{)!z?v1LsZJ$NqvE2G^ULZ_p+t2Mu3jbYH&LX*Zy
zqp)-S$IW$m<s(k$dLRmCf@)KFCg`D8EA4r7JsF1;po%ifc)V0;O3M5)tq@X&vs~<c
zJaEzgR~0|j%0h`@02DEW2zZ+9t4hX@1{g-Z5pAK(hsdO%w(9am#jF_zF?k{Y^;c8?
z?X6ImDxeyQap}fcAU!rW5L+@QoXY-=G}GI+#h6^=*qgB*{h&-er8KiuIEoh-^T-cO
zZ$bNDmVQE_vB-YnMxCWL<?v-oJIUBpGGHVNiCh<vPulWA3Jc~w`6mgwhPht#jn_I0
z?lehb1CGzF9d`!G6-CM?^`2~;YOK5VX3>n}DL7r0V#hC1?E)-|`zAFn_Cfw!HYP1$
z-P(jYJ;0ncsf}k%9vH9YxXPX+BY3(%f_90~5PZ~bARv!}z5Ykv7tZO5|11N4n`7+G
zCqg`g{7+4yJAquUco>M@F1m&XO+b1)zY`>&0^(Mxy+-%+94oSph|P1Q8=6Or8GY4Z
zJ>twaMkreIgn2+k|7pwBgfDHmRC*oR<nRZSTiZ(v<S?-#!V2T36(~9+R}Ja@(ZtpC
z*Bnm)IV}<+0zIm?2gQ7}u-edMlByHnWcV4y-K-$Ya&K8hTSi74rz^Z<VE<+<&C){g
zMt^lZ*>#()p05xOhM9QBPo0N_#hF=0fr_zpb3O&gXmwdn8*)g5o;QW*xF)ac%sH5X
zrfztZ-$A=$O0yZ|=0VGQFZu%45P*cGN*pe7A!=aU+o#7fp()J%QdlZ=%R%ojwGmeH
zr^NR2c)7JHf^rznVXIkPI4&#WaQYxqS;2(JCD{g-)5L?uF~FWn?Za?&*I2WEa5tky
z5p$q0i0K}hefMAVwK86q^$Q+4r5XT3+%DU}b@8MQu$_GiREdpk+OblS76!0)ok0ik
zQhsV0j(*@hAA~r|cxPZYDm2Sw_(Nov&++NO({nQ+50IMx5<Zt<EW^n_aunCX^Mvv2
zF+cJRr1vPwqUjH5J#25=Nl<(p>v#Yl)=Y^9_r5dw4MNl=!bzJd1+ZKE*uDw?I$Sp+
zP&=1d_$qfZQc~{DorjdC?K8(~KR!A~nw?#`1%#)>#IuG<xRoy<j|GyH6tI#g%ps8E
z+ruv7$77V@1|V)D1!n8+&g3yCuhSxPOJOZuVmUTkMf}B%aV)?=*cmx7m2YVm|ITXT
zNg(~XVP|pKi-?kIacfvge$$mW3w3;dMd`jt-5!w8$Gk>nWh#LgW&WLkh5yETUz8cx
zwruv65&mr3C9U)ZXFr6>jA)B<lhl1mFTqlr=T{NI&PIMol(^Ua4m8JiT0?GQ?*rTb
z_GBR=3OVSCeft$kK3>QECYsaQzyR2q90rUJT89#EjV^qzWDLk(r=QrfPzUL?kMTB3
zvrRs0K6%jY2g<CMIzpIqXB0!!?D<sq4%&*Dj3){aE-%Mx{LfhDk8>}5p0gsXS=aC%
z!X~&fR+Bk)6<<3%4HeCIq)tHKTc?pKmXB(B6o9#sTAvt^=+jx8{trY;D}&)2YClN4
z!Hs#@V+IjI*W*s-2NPKR_<+=(pgHx{$<0$*05?F$zwP`TO(xfAW4xZvxUDxUYzx3c
zbWiB9cD&1YtPr1tq@2wxo+{0ETlSnmL+0A+Q`fh(H^>Is)*1im-ShUho$O-_i}lzZ
zr_N`xwduR~bv*)GZN8dL2+!-c4_zE60!{)U@gHyn4aF2rJ!c2ZfPK|7Tk1mwpFTt?
z$ehoDVzx_Zu5g^sd2G@#r-N9}4UY;H3KSW*1KSnRdNw(&O?jr)WQRHg?RQZ4gKuIA
zkBzcxa5D`^>)!@K3VjHhp@fyO^3FBiI0odc>`NQE@fiiy_<v^B-xs%QHj?Q9A;wb6
z2_?=j+9m#Z;{Vm!YU7XkP$|BOlH?M9p0D>Of|{s)cH~%{tty!xOJZ9RA%8R>VR`yG
zQ`}q%J8{5r!I{ewC}pve#9lv9?39_~ZDC)Rl>LU?j@Z|J%)T-n3<%v_IyN+^J&<uY
zQ2e7cg3w^)_*KmC2TI{3$4V*aGy8GeWliagR3M_8HX}rjR()8|2g}%z<)@h6YLiN3
zN!a-t`%0oT$(b_9@<qbs1&X-*AZk)cHx<pt-UF<+ZOI)%ofTaMyx<$0SG{gXue3G5
z29(Zb@&x?L{&(I8%i-*BdkGz1QFUUJvi@jVBW1W$R*Hi}gST$$#GfOg9>Ts!#CM*r
zZbL3Xb6Vxb-B~3M@vLvX2pKM32_VlH!6BMl%!*?nL0IDEWRvRKh9@`k?{Dk(4I{EO
zEgXDAbkAS_r0DHz!9q99+}k$A`p+#5X<Iu6&@txT(z;U_U0V>c#BV9o6%6>FP9{y2
z_&_PRD#}fte}xwpm;M2*@71gEV;u_U%gsXwl1L|`W6Mbr1zB-pilW^9SP<C0)FC?D
z+sYsMEA%X@RjJ;DLJ(1ZOtI2RhJ4eu4wF(+?0d#(ro84YUVzM$eGyX35~-m{dBj{B
z<m-0MsGN>Z!V8QsnYu``oQYw!99Fx__@vKcHk0X}szklSw?P^9PMJ<$s><RF{$31>
zz!-re@%tu@C8q{WC)ZuT)FVCw>E`c1@aDQ0<%IGBT3H5@goGK;6IP&_=B@~_6MjxR
zzv0@r8q6T{Q{7qlKr|u*)L<0Cqq=q}o3^B$NDx${<2H-GcTL^iCX@zr8;I^)ybf&V
z4+1UtL0JohbCc;UocR@d`DdXd!emI_-vkRBWMy?B9bL}(?#A<98O5y?aE-c5eaV|$
zoUWXm7+OSn!ev<+v7Ra+hk7nhq`VKBFBy2kfd!BjA=YQ5)ruG(_-4eh;hW&;74I-2
zUkjk(N#mJx+b6pK%w2|Nx+>X?18=g9@YXu@Txb{y8)%ARuUcJ1j@@Ae7wZ}kb5>Pj
z)RP=EiLY3f;f)qqy|sIwQmC${I%PWFPS5Vv=<{nefZ`N6eEx#n@6Ui$6O+^Fd?RdC
z9aU0?sn3}rwF`EY+(o9K+c>&p!EHijye0a4ym5Rb^3&V05GRUX4P@t!QC;fb-GMXn
z7fJa12x87MuQj)4y3q0^su_Ay%KIEX)Ck(xk%lCj9VBVIyR<{(SNILMR@8xHvZ^oI
z$;|M%L@_XtJ|9=sOIttHQ4YvP&E-}Pynz{{63G;{AY=?%7TxEB_B!4ILj(Al!N-`4
z$~4eRF;#RZjYH9K4NVK$hI35a&moQP@`dv~bozRQrM35hQ&z8_tw~L~NpNJwad&?k
zvroKOShugIwye+zsOb0plAt>qB0T{e$a2hhgqtuaD5YN`ajh`;jyEAz62k$aSefkl
z8bp>W<J>m(T4z{&M7KE7NaeT>M;#tzePW~M*xisC{lA(a+ya(dgro)N$Y(xY3^UFy
znMnYexE1&0kuqRh*!aWwh;FNu!~LlC3QW3P_C7##Fv|a9E+W&25{`JoGcRsp0(<OT
zyZ~V#z}J57Z59-@5&!orkKgv#Tr)A@q;sO2V-8H1z?ZStx5NnV*sGz!+A`L_&wS}F
z7MYP8B(+YehPquMLLe%OSTY|6WI}9VnUaZK8z9B}TIpx%`D#u9lm8qEZVyX*ANSdG
ziHz1=kFpRsmikw#hH~4*!xjFR+cy(K*^9X_ESePQxLI3JRsLJ>a8NGA(NkiWSbb58
zy=%=FGy!u)QV$RC2g-~rKdp6GO>VvjpaUjdu7>&swD6|iNZv9GXl12<nu=gT3<~zn
zlBHvOZK%gyMJ<Wm(rDN$fQ@GceZ`@uE=4)oV!ZSe`mqKG$BhubJFBf7f4+4{^kHe!
z>gdI2=aw>|i4M8M3I}uFCNR0NU94&=tAYIF=BbP7_>VU1E&lHlaqRCy-6-B;6TDa4
zm1Ahxo4=ZMx!aJ3VL*t=!apw;Ge|Wtd^;Bgc{-p!aD%!NXp?B3eKXW`S_h$6_v!GV
z5-t$rPyYZfRP(gayO6~qK75jCos8T}>DPrLkj*^6+4uvzs-R5FTF=$7nTY^GcsDM}
zUh5FiXX=50Fq%X4F51%RilT(tj)QB^cBtcVnztzXdgSlOKbKpj&gLruMmR-!&;7)s
zR||JPQoGfD)rvTp2J9}&4rV2)LcYbEZ7kAeVT1KPga1i5H$kAvKsyaoRoAA>=rbpZ
zN#LY!;Kx}PMa0foy#}sdQDFjR+tso9q9N%m+?}X(7Tx>oKp0WQMyyQ<t69Qzctbpo
z61;GK9cmnyB-l=CBUcxjpHTe#R+?o0%YQ8j3gmW#*D^#M$ql$Ww%&KGylHSS(zb<=
zvsW@tnSSnT$Pc9axy;~BG#Wzccq*bs1H($NE&RTav(YR`u<<|I9ncw|hd|ppd4n%E
zD*oUQ!o|x1w4vWzWJ!1oO3jP5253%onWAdLAriW6!zp^+Q%kml@Ql77w24!rZ=)4f
z@P4MTRt7<EWVA=G0}_=<IV{k?(6%DRWF^Xn!|g2Gj))#)x0U5xq_fB4VS3LC_25>V
z-s??WzbnP+^!jkSX0CJs=&o^if05$=@vdjf*~3js_-ojoz9;o4j_t|n&jG=-V&{<v
zWcA3~ND*Uq9AWy{zA37o)4LLR#Bj~{2{IkJsez_1`^B_JMKT0NBahpLQ;je2>p;pP
zBStDF6zT15Mq>`pXGk|K6R3}B!L@VZ%7h~K2t>oH0t$FU(nfE0BvIxRyKU^aNY1@p
z%bXABG{bJ;U~Qr2FNDnK#IcPN_cFZu{69UQJ4P6xwM4tya@j^Vn_O|iEk)PywfKk8
zHe<xRxRV!+M9A2$^mMv7kiNq^K1sK>Y|>>(4sod>zV)8f*Z@6*$mQ#AjU><|sidD2
z{;yj7tH>Au-jBl>ZC*(gT5F2j(Fu4%i$0JwPK#b166>Q-0ugXP#;v8x)W9hxzcVxr
zB*dZCc86%A(1HVY(=0Z!6TtsgO;Da_ya-@@$!t%g%pJ4-*l7!#UTt0-V#T&l3Fl6e
zzY*D|MGFro5WO<sjl~TqYNCtLk>z|wrYyq~g7RTrY^dWMaX}jL^*9#%oi>u01wA3<
zD4;ZHW4fk(%wjzb;R)j6Wx&&s`iz<h96il#sLcB-dx`x_tf9gmzU40?p41~S63O!C
zrK^n$N$aD!m1lC%>>=1iY4D-0S{2ql9V!UmgFf#=AU1!WHUs_n7j^=Hsp&aiRpI4k
zJYVOnI19o&u_u!zaz$p3UJD)^=)p>DCl?n){dL!d4VT>1j_DqYpWq^&_SfQ+^NIyv
zixnhquPn*MH=4@=e!DoHA_Qa%#xzf1#g?V>=lR4?$(^yt6JyL^v3gb=a9nxHU=?Y5
z*Ikg@wWng5z<FxT+BDwp?34Hs*#nFFSQ}nqFuEXsV_rcNQY+-5wWjuSbp~B6#*A~v
z452<CR|9b$(`nU207t1CX4XEHJpWA#^Sd9<_iZi;8b;qJ1@9OXP-QH%62jT(UG`zc
z4O}PixW>429P@Kav^m3Ck3MnU2OKobLmk!&f|UBiqs>=f$hEzCnV@8R*85^w+56G9
z{k%WP0FOTDQ8i33K>3SKjlzHPZ|vfM)siu~{fj>D&GKnUm`vjjJ7J_nlXm)}?aFyp
zY=pKkJ${sKYWt_^F(WR7L#QrLB&cTW2FuYS(c*jK3t1-~6pYo!5~L5`MC|7sVgZtQ
z&t^8S-4zBTyJo8+QbPRXq;O^t3u&&e!Z5nqjAyyMMVfRz$|LW68i<ue9+G5!yVH7-
zgt5nrq`9iuLQQpUP?0f2u)h?6S|f{UtY&1OgjfCC<fQw;V^5$`)c<%VTX(J+mx&zA
znb8$=na~$+r59UGP%ttfYYo(*F9rEZFUVHqvfWc}OrgC7_EbSbCgx1U&B5VN@i?-;
zHIStq&T9hwN{;HmfXuV9B$@dW2k;0);R(Eq^eONp%eJtb<Fc*x5RBbJ)Jr0Bi>Q-;
z5WWsBuN3h%d>F=nJS8Nyf;szTjY1?3Htm%>m;~V|-{xSapv2<!`PF_upHmIz%CT#<
zISaWWD$<NOTl3cOYHA0cx8z0UNOw&UOH=s>Idn6tL**S6$wEyCq#hq`q<~@5C`)AU
zLSx`x_r_@l2W9*;c6$slI@pCw?0=iY45NZAxW6)DUh|YLK93#JR*h7>2!JeF@~o}9
z{oV(XSL#fmmUiPVxi*l8JAz@#AefSc=v%y?6Giw>@!@@zQ~IT+NY;+58%qk2FA+aX
z%0%+CtQbweps>C!Fdr0}fC?$dhV?nYVbsY?66Ohcvz+b#r==ph9_`JWHtsp$h+NV!
zq$AjyJ>`XWw4Ror@RzB#d9SARoGuY0zyE!IoH0naS3a@3@vZT~XTuvPk%HjF9KO)l
z_@!^$ItW5xI?*q4sfDW0xh0XFQ{~up*3rvF8$zvcqA32ahm$_T1#b;2a7K6oCPbgF
z1_|H=j7RK9HmPw#QKMa-S4<DVMC+!rrn<sA4%T3OIZo8>${E5NV|YTW;=8jV+S|>f
z?U;V9o6T-qI5T~kz(LRP<t(z6e2Xnw5BNl~fyE;<9s`Gj`H7UiEMXA>Or4iq^Be~+
zEq(Mq*U@Ap_MQ1j2DJc@>2JbWoRQSPYKIZ%;?h0FN%98UeH0%pFrr5==oDTEjdC6p
zbsLa;3`g)%RFHG>BW2zIm=+oQM}FusnPMxhVDSs@SJtdA=SueVZS1vi&9WPi9__Ab
zNbkQJk{pjrFfiV{c861@m!blf-`z<nD*m}~g~I96)tEwnL*7GK_Z%tmJOLmb^zNX^
zJ<dUbtmbAq&{5+Sw6*kR`7DUu*lS~K73FnxrY(IwZ`r8oBK1i`#fE^|Ndf$eQ+#F0
zgEPg=N?sempKLPnQGffXuHI6kXr2ZN?4XpB&(xP}WK5FOOmM}0y<20f<$D<T2m4>g
zj`K;pJ&{+q+{`e(X|48G7lsv6??m(3QW?S=q5k#O*ORYG3(}^~d=6-J3T-~?eQQ+I
zknr8_5z8+iB+?tz2h=Og54*>A+{*QNf~2gIy~rfB;tRo;VEpreB<wc=d<mdlT<7=#
zz0Tk`fw^H5O5Wu}r!rsFN}72$glxbiJK#@?Z#*(2Cr5-jv?B%TSp=s*w{ew?JN<E|
z#zCvNtxOrGt>U@_Mvb2%f-btN1B*UtpQx-20`Xph9j5v#-MbJKof7z2C_M63&VoLS
z{_HXLAA;ibb*Fgm8<F+M5tXA0_TG^h@R3W@l#S3QMVbbogPlN$y;;JGgZDJ7rBbDE
zqc{z}u^rvPYf@5A`mP`JAYmzma?1wQD#Xr_)gQ=5T?=Lp{a@3Sf>bvo%#;ZPtKlfl
z;BcMkfF+!*nkLc{`ytW)v!=ndg|QQC2^|}Dhs!WiP9vh$rwV1uRVw|=qz$5p#PqPo
z%%*LGGtcDqfj@85JXQ>XOI6oF4tm2XUU}b~MA|G4XeIsnwinAgSixs^^biKDE2%z`
z*EZ+s1}uTvvV5^(L=}#39~2&4q147Gq~P0H(`0z>>?<ST7^ipqJBNQo$O(HLxE{`~
zeG>b=d;l22D>PFUFi&7`lip??s{i9t3b|b8-T95&?y2*Y{2IKHnl_BLX7WA{$#mra
zU>Lz;QwZ=wGIwGFU(A1_?|P%tiDtA2|C6${RvcPR$J-hN2Lq`3aAG0NX>w$mYCjA_
z!4ev#^~}0ne%5zN?>z)*84T)P|M$&fbJC~4{idZqXTq0XR=g0Q`YHrrbKL<@yl*dZ
zb``BCRBH(W8#DI8kV`C^`I7a5#RdM6J^aQk&>noTt_jUN!rv*6kLvlmG+#BPyOh9d
zN*HdNTMqOCzGlpes29`Je#h%^8D}pgB;q}jzW0`iF2W-G_PvgCHzE2P^E^{7H;&3_
z{76Q?vXmt>#cO^liZtX3lhFpf+(MVNlN!zEr(4whT-5g>f{>+Z3FUu0X}xHeb4YCH
z@PLS?r2Jr*C&6kjSGI$Hmh0c;*Wk|R7D5!>(m7fzSgVo0M7s{r(wzdTH!l<k3>%-<
zh{qQXN=1BtNpCpP<^HvTIY!#qPzeaz$Wmo=Qj=)%`(`oJ;|_MW<mfGq@^r#n6N^LV
zlnj_2e%`(OcVjQf<U~4*YWNl(9E5xoB_eb7x&{7kl4vli!<vu=Vkg=ejQ7fyO|Dj}
zQ?06KPL7V?C0xSjGTGL->!XHsE%H)A0XM<_&zhGGYOl%V+}q>`PjmW;1KWUv0GuF`
zCa_;ou>Ni6D8h{S6C!QaX-a5D(7dGK-H*Zr%)Eq|U7oZW7Bc?S6AX4hGJ$M$r$yhA
zQHSp!hs!$@b~>>Si^Jae_dVzq`QQ$W2FZY6QK|G`6#i%>8&sM`e<hOf*y7<f!fSiF
z=WgYdKDP$7h~d6LrXXX@hOiGcPUJ|1cq1-TN?_&u;LlvNH$9(Pjmq|iV6QCWCD!Hn
zX}&86R3syur~kyWzCrY!tKL1YE76NIE%d)Cl%6zkd+6#tj(;nj!?qFWPccAvxAcrZ
z_#}>cmcB{Xa%7x^OZD+y2~1>na5?=FAI-ausJoM9!&+&xkAzELc!Q*-gODFXp#agL
z3^`wWKbwr}4ab8N9Y<{QZ#ED;E}5F}h*<#a6#70<>RZ=A9h_1Oge+5&Au?z!;n<pw
zWi0t934w;DqRMJss$SWG`!rY&?|JLBwmn3VqIF!Ag~RmoKzAa!)|Yg$t>oOP70y~M
zJF#TTp<$SJ>F$eN24S2o>Dfia6#2SyNp;th4<!0Rt3Fmd?Rka~pa}BDUsL_I@Am<X
z{@u31aE?oZzzExyJkxnh%i?6%ag|!fD?=|}la=m$B#ybsx*wCi<mZD%w@I1z4PVD(
zNJVs$gAgukVn^jE3&RC)vbpW)>M*m}8e}hZ>6XCTN%bz$Y|hPp4ac-3rBUQ|#8VAb
z)j>&H!`Z2DaW*(J212zJ_3{zb+nhi;u*b07Gt)!xt0wYl7Yh}`_K1AtKwh`WGWdR3
zY2h~&QcB`>jpT#-*NA)=x~j;a`Y-RWQwcr`=zdvV_M9e*r<FcnviP*YPIbsuIV(i7
zZ3*DLGCh;~5+blI>KYGtIcjBZ%td;4T%3LX3q=L&*%>eoA6QFo$0n~1;4n7lJx>?a
zPA83;qpLIM*P-GXedY*<G@RqwL&obU@hG(%SD0Oq!$gu_-&{C1bm<j|2<$1-$1`Tw
zOWwOlouH`4+x>dg%ANe^iX`m70d*Apd0iVIXtn2NsMa-UIXCxslP;ZjVN}()-rzj>
zo*Y~GGL6;cxpN>xwdj$*o{;Rr%HQRKdRnO7r_ze_dFn@H(+oF*>sG&h3-%(BP2HIf
zov0S{IVgz%o`kR~I0R;JJrZ`M>Yw=c$O!(Xh|!O_lX?e`!VINV+!!e(>_6_5)r#Ri
zTpVQ<`AP`jvraYnnkLJ`hy|*2M!_7eczC>n-0ws|4K5|e7Tg$4n~q@NR#)7GJ8)he
z*0gz__Aw8<M7otuEgoXxe)ekS!<9%IXs(kNP2L1a;V+VI@C+KN$fPrErbv$U`i=~@
z!&Tfbec;fNEeSh6WynX;gR65pH3K={duxn28_TalG_eR#enUCoH=*>x`Xtj(1PaYj
z;;U;?_ABI|yy?YU-Qe2Hm^7~xy8NRFMXr@6Y;3*Tu|)^>x=3SIsg>;8c~r&>4u!yM
z;}vG}xINOGsp<H3P()5Xp5HA~Ak1^P0zoHhupdyGF%CMsAot}M6D***L~oDIT}$nc
z#YEk;Q7c~<Fx*O|N@fRKAr&&qZSS6AQk&CZDqy>O=6D_qe>>luFa{cOfNo~mN$>{E
zOg>uRD)xg48jvAyq^prW+I^N%`<cN$KFRTVrO1Wxkie77HrYkArLx5Do(sFs<_7_*
z$>RZ-O<HOpL|9Jmsm<@z$di;?A9q1JJpOfLKj~f8WjX)yo++SvT1w?CG>7Y*MujxP
zg;*b7;^n}6sHqu^h20xgK=R*b8Z5oxQ-iroOO%Emzkt){f&F*|{0G4F?m1e4bTK=f
z*NqmJ-Z*>>k7W!*<Pq55eT=VhmlCEYbLH6ja$8=EGo6aakf6DlAKQO+Y^g5)ZQP&f
zTxthgN7L#}VKewI*v=Dy%1jR~fJX<^G=;Fm2HvGl?Twu=mNb0Wj$1GPYEXm=c#JZb
zIE+cJjOoFw1;niuIb@`HN{P5hmhyHeGq5dZ!xDaL9?O|+<{~Vc6dZuzDIl<ns<99F
z14p&n4bU`iie%2)X6Rq33LN$v>YsHwu#jq-aO@i@zohV_1wC*AHQh)j>o_@-Ytqr2
z%gpR%C(c)c%BQr2LeY7d>6ZoJZa51hhSea|f1co#q+GTwh($Oz#7@sN3n3bB`GC_K
z=QLu+FfA1DBCPXpC~+zYI^ExH{wahdMH~QPE{HI}FOL_u8%Di2#XgFX!;oG6@4|Qu
zV(5}oYwkqY>bvUcN_KkS$-nOe+b!jK<e47t=C&3DH25OEK6CC^K(&;p^t*E^e;3z|
zY-62dl6YCh*VdKUi7SR_aJgU7o>UOxrSMePcj{G^2o|S1if?&foWoc?T*Z#ILgn*>
zA_k$(3GI=UjXszQ0t;+8^LKf*{~riVU*XicfkL|ay(;B@pG0%C$H%?|RFMV&vBLL5
zYA!#zm}djWXlC=|_69BbsXtAiZGc>8J=*pNrN9k2c8@^1lSAurH1<Q#ME;`z907nR
z4}4;m|FGtkB=MVB4_NR+rrGP~Ei!GiTC1FI>;K&yyA;y(LQnpbz<Nc34Eek8BI#q2
zd<|D9R4BpIX_0@dt7VSkHu!vgo!-p$KJre*i0w+u3<C3G9{avb*zLvV51R2@Yw)q_
zDrkR|TyiX5qOke%u_omS1P`-OQMjKmslXC%oA_<BS0s(8^%|6r$VPe#2Qffz7eI+&
z$wbp;OdihUleY4p22^U-7_pOf>J4VOV@Mdc#(@II09Tpb*xgl$8tEM<F~a0)E<A~)
zB_qRN0pAl!e!vgqY~FR|POTSf<6+t_<Apj7pN|H(O%ps0AGwzWt?mi&>S9*IVud;)
z3Lx8H53ylEz~F@Z$+g+}I!K7AM~4p$KhRe158VvV)7jeO8p^ef{quxtfqalsGLR#3
z2<lo52TUuwQmHQ{Wv=Z^EY?Y>{uH<B!t`Lqmo$A^J{C5h$g6rxVdBP_48>)wHd)B?
zQ<*~^(kvge_H_S5xh?EJWw}6<J_cx*wP9>r)qAzuQ2AdAFC@{6QJLgmsCak(>5a;B
zWs<d+eo~~Ss}8Wjy#ZWIIgR_wWLvbtfP6Up(M&Z#q@*8C<rPwr2en{8bsPqJA-ao@
z&E|57mvb&iMUy9J>VwXIEPt|6?&$|myUtsF_*1sCbUo<4-1ILehlK01Onv*_RT+bU
zGMuGgh;RnWr=OaARxUxFq?T%WY^A26$2)LjzBNJ5TR?L}z|-*X<#|7VuICFH&iSp~
zKfofSyc0SbK=ov66+rrN1P8q_WJt1hCPcX22FuJ~K-!U#dX}era1e=x&w%Q4?*W75
zELYy|27$178+nzFt+?&#OckD|IJ47>w(wZ&Ut6uHOV)bA;!On(>yg*+np49<lI*%Q
zG|9ZXQwmwjU{!0K47&v(f?@$r@Bb3vEIYhkd3kfQo*<nlJ5Nj>UR1?BJ{cgUhvW|X
z#n!<hPJ6(aqN(_8$@=`y$Y71-rg=SPQmpyEH;}!R%>daSQGdx4TTlM#cBI(;JkNde
z`MbeS;Z6qlILn$m)$Y04jZKpPu@Wc!j8x-dhytrfJ(7xjuajYvBZOoZIK-9akB{j7
zVNb=N!VoRKIbjd!W1o&lG)RQ45A}h{kVMHGv)u$3=fV(GVQNxJ2+U!6nbx7@`C{Yc
zIpy(OxYZ?a`*ZTu3tW)$F`D$E*LWSG&)YT!3S4U(!4U6V%dQlG<X<z|psLJvIgTZF
z7%Ss$3GXV?!SxndDtK!`Hk%7FK7Sj%C{Wo|qTLbfwDQ4D0x(R@qWJ>6&8rTPIkBL6
z;e96{hj}rPlioH~_>pT7V$QdYiHj6Ea2|QAeH<0!m2+;}FDiL8^Q#4S@k(J`q91^1
zJ(E$6&k4Ut{4!uAuVZ**{+~sMDC@~o1Ec>zm<{X>nSyYs0=`9#ur}E7cZ3ak@-rP%
zSaV=$9}qSyp@Qw+X#%N^eY>BhpL;TQWjju|LQYRdszl#)a|;%}wV=4U5PE5Q1h3~L
zIie%gQI5b#WZWoX0%Xtbi*uob(r=BD-t9J4CCS~I5dg}Mjs?T$G(F{K`N3J-Op({W
zmq&rw=jfanH^aJ3P1^+lYuet@H|wi6Nnd=RdYnxpdU{<G*WHxMA+e#A&!MRuk!E&O
z!V&`~3ta6%T8&03>Xg(T{B_+!gatZoEC@xcU%sKKNR#=^O(P_db6`fXa~`gnZ~7@h
z74*@omo7u6SG1EOwxowzW_)B)AsW>g`4k=MvQ+Cfkiv$NUUO8!FM@^16^e4f)*{VG
zaXzhI`!~5iv2=6664IbUSsp~-H0&lB+YoO!8h5f%GSmI>2S&$-)mR&|(!q7h326%%
zvV!b7>n=PmT@j=?<)(|yrB6xDu+mf>()^AdkhcEb86w=ISVjIKq;wArkw5EK=7WwU
zM1$o4ZSicwYKCg>eywBXC<g<7iGV+huo`xi5D)FJecsLW$$p2^JIWf!<}zHx=X}3N
z$iTA=)~vRJDVE-B;&JG2)K$=)Vv2)oTE1*VqWne`;<`o=T5MX&fx^<SSWjW#eH@?H
z_+N#%e%l7sV@>+Wn=&k_rD+Vh)Nc`J7J87HE}9YgQdYPQng!c#;H+fPNG~wjn@EMF
z%KVJlP=etc$c$20EQfoCPBTnO(B&Mr;`1X=DMN-gqTCbKQ-?!FBynDH@3qtYYRg7U
zZoIo92CW949LKL-?r?9t4$Js_mH2f-EILlJ@;~M}MV4O)h$JEmM8>7mZ2PQ4vxmE&
zzw1s#563bbhr>P0>(5c#hVYz+YaFFMXJH6};}uyYeteq;Z%nVc2`W$@XPT#u>Ail5
zlwTKImb%YxN`+XGYSD2Tuy7bhuNs=bN);=k+YR_WM00b*QU(p`^mM0S=|{Fs*wYyS
zy?rYFR;EN3w`h~Pv^73&389mJR5sx}IeSy6R2;8Lq%;co*3BHeD39#!W=S9uLB<B_
z7rWUjKaTSTE;l8b%vNT-0fKI0r#M@i%h369f?_sIfSqYG9Zw<4pf;ycJ|?@EILC%f
zqwu`#-XoA|B%(L@F>UXWBFND>Vff4uJv>6&E?)GsSfpX>!A7yJ5#sg&?r2nwP3n7t
zK9m4|0S?a#^PbVF*5hK}qwJia6|iX%iui!`eZ=cWSA#<&$$%Y{nO?RFFEtsN7Gl{<
z0wHM>uD@<GT6;WuF0+?eVbMx<8orurS7EiLP<(UxVZ@qLI^9T~&0_E3S_tRpF;B5C
zDPRr%>o50*;q|Nze_^nS&gok&D>j&PIT?`{NP*q~INx4X*U2Z{SFK>3;S`QE7D#1c
z(p%6Z&$Jj*93__bcH?uxDzcwWf%<E11fk!?4xn*)m5ZU^^fGR{j}p$u8kEecQH0*{
zn|(A|;tf+gOCF*Ulcun7A3f#OOmem>oSdvD+>jpXsRMi_S~wD2<9(NiK^~QF$c`{4
zB^$kM-x{7-SK21;8DZ^&(c3oumOXy}*hSw}@Hq8-zsPog1g$QSco^HHr5zM2uxN<<
zV}@uJd)6hCr^`KyuylG+q48apIPt(G`0o_|J>sXwr+6h4B+3?IP?sw*bURp4KklC-
zcDg4E?kQwnG?CNnXdB;6BVXSnHyHnG`A?dD*qejF!3C+b6H0Y1^x!!|+9W|y1&ccs
zbUF}Tfq%PS!Q>ce2_oJeN!uJF8SQj{G8<cijCo%q1RcBM8$u0RWSC|1{XSGpc)Bw8
zmsQ<?lABJd>&s;7{huWOj-z$u<4&UgH*;(UcABtbW@@*W6fP}Ov8COLUR<qFclLSz
z|KN|d_@060N2CI>V_VKB{v<alBA^piNFSpPHQfc0-@!11D`jf?d;lWtIPLI9sf)I_
zW_v~L0d<j#(p(G3>U|mMGXtrPO1Q<Of!8o@?1&czfk63Dly4<m5rh`)Co!^|%c<<k
z+MR$hxxP_9yaAd#7tI(WsPDA+&QHjF(n6=8Vu{pq%wb02UxR0F7C+Nza}NzjIk4RX
z*4%$fVqveGzA)m&95C)ZP0&49{gA6j<{|1IQwKqV^HX4xc|*kBx}UnDyZsG5MF^cw
z1U>=wK_}z3>(aI7d^%4d)blT2F3(n%lWO6!_%NTr5zn~7Mx8~Sa6fsg1{ditp%PN2
zDfpj*vGUx$MPt3Vlv)<Co2*qwi$I+(KWO6uN|7_Z7L!Q-cb<CpS#LG6i`E4snJ^~5
zXJew_FQD6mOsVR1=>i9-B!h*y>7=*G{a*r3K@}6JFq7LGb~-LHh$<vizs{@2I{aGd
zk4Cr*T`E7p(-_{HJ(g)s)DyCzS-_>j(K;`+KGP?c*&s<+3grOkF3Qyi2U{bNs#?L@
zbEF?22X*M@o#d3s$qCtYAATz4_=Xxh96xUT$Tub<!6qqV<OhWw%{Qq?%o$VdXz?|d
zXRI~1M-b}|vR3MSiIp%T^+OOoC^crLCeOk<%b+eZ>qKGsx30ttiut8a?mc9rKl|Yg
zFnzVuJymo~P5$!4pWHw?TI=X{PZMA=xr8tDe@7J#NYvP6yHEaBO-5O9f^%S1RF=pM
z-8sX$EQ6ncoP6oH8n0fWB%GwpN3M%#7A2&%7W*Myw6L-auElF`$RfI~g#$~Klpeq`
zgWHhgZ(ZB40BeYu8&iIsSJUd|4f015q+CDG640{9K~t$GUD7P+U#-!rXd*8YxJ))+
zzQUQCzqZW=tt1QZ_%ta68$h1?IaIg0cz;5xAh-=H7EGVd5=QkCZWwXZL$+g>U!@g@
z>70Q{6TbF1x@#;3Zs6$cNqxhmSmLyyig##bIbzv#Oru%*_uMw7lNEHYasgJ!5W$w(
zcnCY<lg}?|$Z}d`2jE114}oGBq5rYeGSjjNjZNz&r+h0Se8~uKcqupu4@4A$vihSH
zY*lcSl1Ci=ct2g*7AUN{T)z^ltxC|#c(oL`kM&{rqUf90`Jl37VY|g*UO(v0Wh?ll
z227g>{Q;AzKiv&l?Nkei!rajkZ|4EshI_;K?B@!&2T_Uk=_mYB=kynk!R}OdjQJT#
z3Re3BMyPezw!*SC=)H4Z&=(i5Hs)Zd-Pw8ImSOh0V|m_;iy@fCZ=5a|znQuv_gm69
zv)34)T|^^8u>fXbRDkh>qPv@61A-e|VaFBvd+4fLmkmS@ywuTec6Yl>pve(go7&ti
zdxpQvyq=dpVa9408A_yjS~4<ANA&oDVUIs|v4IV?Vf<Y8kCN)<C;l`ayt_gmk>n%>
z)T)xj-d+JB*k4po-Z2npxnXdq-7`>&-CTEt-c<*YKe6W7MT{DAM6)Tt!iF?92*jt)
zS+i$9_R{z?>Zd$%goX=a{<mXzT(Z_}jpLdlB(6fHoM{H3t1U~yb3<Y-oakz{h(kvb
zW$8S`j!E9X3_w=cdnzQ<BR-Nn4r9Y-RdjEfc-0*>)?#_+;z|OvK?G^J5AiTI$LNz>
z0qE(;u=+#qt7!>u<lyM@8NV1~HyJNl!e=W%YDnVm)u!X8yHlh@%a{=x$LflhWqo|`
zR)KxC1IWMI1u-Kq=0bogC%y@{3i=t11kLw!AN7ViAI&KWB0${0f`^TEuM))kla7Vv
z3|A89XYmb2@uyV<3J^)N*L%H@5!HwlKrVt#u7`b+H=ndIJEO~m4U>T;Q99vB+^MgZ
z?uNKSe8e;FlUIlrdn@chHQKsofW7UJ7X!`vmA|S=Vo_7LJ5M36{;rAN%dHY*@@j&j
zuBc{LP2hV%j>bzOXRv7N?9b5WOfHREs{Y!8ah3JC?Mr+udhG&f0d>q_8^Xd{S6qzG
z=X4)nPn!irs{zCRAt|jYIIWV(Mk->ITZ1~`k~%0?w^AS<CujNdXW@Q_Qvl!P+#$&`
zvW_t3da|m|5GPHUnD0ihCciW9*mv1Rb?O|Z+x8s<N6oJDhiu5*4u$7h^+UV5;Br=g
za3paZd4RXwn(m9H6U-S<F00sa9}ke7>aGy@k6+%7k3y>5O%L;@wJ_RvZA7Ipmh?xp
zKgRUwB+^V=rGVXfp)Y~Z<mQNx)&mdjXW&9{^gV!iGv;LWdu4=fMU1N)%m35>ji5co
z<gh(J$AeF?nQo2*ATU1XPVXyjf;ExC?oGY2{Rkq2$`=-L7fcrr>5~K%*7B8MWAVwX
zfEq8u+U%>k2&|c&An%M8s}H}{%g4q??7}vpQdSMW<=kyUdGqt|&+JHRv6m{@_TpVZ
zznWVvCD}!wRoVy%GUR6iN(X~en)|<#TL`amAl<VXpb9jZ1OKf+{2gY=FU|9sRi(o1
zWf-XC3Q~o972v@Y=u2&mVw<cnEviO(Q)(3($}o;5;>*T4KdHZ&t@QwTkDg_0WPIvY
zW9NYyiG>}a&#_unf_1gj<L`L^t3H6yPnzTdfhvgzShPcfu5GCIngYBsN(H3=8s0l2
z`*Z{p)~4$$ou|RMRhI<7->$wcaH;b(S<>fTCJ%19W8Cz2?9Ndg>!*|rS*bOAA@!&U
zXi8kU0Y~p&_AN#a@27?X572A=$3v7(=Q%Z`vNf!jI_J9{hc`O!X+~+_j*a*7OktEh
z0Y|-V?)c<U&#t6@KgIDhTGDH4yynDKcQI$G-C!D5qPXZdgber|p8IRn-iCDY->+TC
z%4HiXhuHAx{l-UO*{MkI5YT^vc?JUN(%R;jsp)B6(JdS+yli`__SyE}I_T&EAW8s|
z32z+&VuJ;NK^&l#>Q}td`c_@5$|ZeIGqI-)*H4hCcHBY+XT*wX_CcN{b9#vowYwzY
zsFpNo*H(P4dtaOT<JLa&_AD(8;~2Ojk*$aw(AE<t38m|Y2GRz5z(PNs_#jH#c^RJz
z7<5;c;eB7etQTVwXrd!%DD>-^;31^&83CJn_qCsq*gJ_@6QeUWGq!E@{M5%*Z*U=3
z@dnA^;xXd-K&ae=1izF^{ahWl2GdfNQ-QzH(_pkvmAI<xb%Ng7Hr4Bdrbr|NDV+*(
zx>6j*ajwiLe_{U2eLK7~5anV*0f@8s_fDciu{d<G`)5Xt`E*hY;^WEOUM4QPp@dIh
z9XCjfak|(C>9AZ)=VrTTS!z`Xody)nuhxCTd&cK$2;v?4gT&kZ{Tuj{3efKt3!}V0
zwl$pz3|E0KQ<!@~;joJQobB&`5T0W*maV@p*!Zn2u1A2fnumx`$Z_V%=IkIf6<63`
z&8uiYktDqFbHqXBbp$uiNDS!S(K@C{uT7ZQvAbVbf8BF3Siuux@)i?9K5T(W2owD<
zQg?d{5{U5sstU*b;i=WKi&SbYKAgB=WJy-_w9i{YEp$y5=#G#j=AQYIJs3k8Y~uzY
z?9;w-9J)3~lbH$<Ko^gigR=jK)Xk(o7%+eo6VOMXOEMXe-rHIKRyCpy2FiC_R3I&(
z^7nP|1=Km9xcXKWMpQ%=Ym0R&anMbdmQSAex{PHtKj8LLSKZ#KoFhm->z_2f+_-m9
zq44J>t~7T}8tW%{Nu4#X14{`Qb$`rF4uz6|ofL`j8Mn^D@bsf<zFQDJ40pgQkMzo~
zKXQ26nC_)MNx&v8p1sW4kque!`KZwCShaPON8Dxw&9<f)L6pGKlARq)Tn{^yhBaU#
zN2teMeP8A^3Ju0{AfxwzTzbEf&|P-pCNzSvIY8&8o4mx#<;0tGkpr_*r-;7w!(wh^
zM^pOiO6^&E^c5X}s)Ify{%^O6kw+-XoUj9Dzb?kQlTN#CO#$3N(~@<iC>p-xu3O$`
z6Wg)zcyrHBG5aU(v7!Lj$Yva=0%0_>`B`Hu?7Gk4<Ie|i64ajI`F1Y&%=VQvT@2s#
z;KKoGp#>*0p8vt-OvV%|#8Q~TP3-SMHvX2u2^{w!>%t8zj5y7b(f<47QiiKbq;UZB
z=)4#Jah28hqLrBerHZlyDOlZy$a^tJF#=|<U{)E+Zv24z<N%;(Z$dU?0>!p|RnUu7
zDJIT#&6NCL{|mOfy%z(p$wY!lX`$wfMq+MW=UYfjkFX9Sngt@I5s-*FFMSj95M$L~
zvsO)Q0=IH%F3QArkmXQGMg6q^WJbP3NY(f`X4JY$H@sNVFQl)GOq2w!_c2>yq)3!a
zpC0n^E#TKIDdYd>Xu~?ZJ>i%D&OGC_>NF6CbMH!U$$Hf83`MHVTXMM6271{XLgK@p
z&de4nOQKdR=CIAkGA9H|tpB06P%Z!}3t|%afqpBT117w6Q_gs0sUSHw{^`hSX<ne4
z6~st$nuEH3%!(u1Uzw3;IogGNvu3@H)EY{<w)zVpCi&2KR&ZDnRROr()FCa>lX6A&
zJxwMgAgb+APGSGwzNe2S4|=y88=^e@up!)imtX89dMenpEZ&dX1#eY?i~nD8SC__R
zyvBxhZ4r(;v)Es+MoPJPqIeQNs2}|_5)tiL_Re2!czbxIH?#+%1`X>Cevg^Q85(RP
z_Qx6FHzAS_83i(#vi=5zMqBHFMBs(=ruq58<nD0(UrI$!eg9;VzxM9mxBin~TUrN&
zp#H5kM<S885%+l7mT%OYR{h9jX~tG9rw7QJ>b?hO>g(lI0+XoF<e<1-L|zzyG+S?v
zusqNGP)#7yN5*yPqFTILXjoD)z*jZw&Ih(}P>^J71K-f0FpHP{KooqhcZB$R3_Pf{
z51SmKk288md3WU`9{ZF9_l&Ca<ujB>e9ziuVBpA%4$FZ+Ahg46iX9N4>trfo#!Ol?
zBj{fw9#=&jo;{e->RVZ~O>*10TUN<VGh#7dhGcFtiEL7;ClmXgVp1mvhOX|oCac&x
z3@mi046JvNvr3D@h$7yQzHAZb^INxU`jCc;{FA)5_7lJjUjQ1><ur<=VOl9ynkZiU
zLl)yChnWk^+$G4Oz7m=+aRaQXciG%8T{$)80rYUz@kqg3zE?`g!E#K~9J$Iee3|DW
zg!CUUprPd0N0(1jDbnIEGoqbx&WUT_zaCis_qD!^o_wk`p;gXM6mh<_?}J3SAAp9l
zdhkMO-SEyi>K+v`DuI-7QPrYh6BDzY)8}5oeDp$Q=I#$NGIS3?fD87*v=qivKIPGW
zaSCp5DQw(>%f#4~pTKS7q9JgwpIIG?rp{-zda*n*HKW~75duk9Rs_R}NOlcKt;2Ej
zb=*p_;MU*s-lE6cteVjuvrsC+XXVlsoq>f`i}?bZzfDQX6B>Pp<B?axNEW_Wju<h8
za-$f9tzK;>Q6iHVIPHt+7K?8y>WNvIXeK&zE@f*1a^jU4^4;mJ4dA;oi0&4Q%|_=-
z&8_U5<NP`L0?%zLvW|a8O53oQh_YQm5gR#rnvOrLtfrI?iEUC^bE^y$J)fH#GzN7m
zB(%hOs(%_xS-8-h44o<zz(|xPT12Ze>p<?|@{BzuUhz|MbGyW247n3TaBj26+7er%
zww$tu!S_t2WgPusmpARy-9LO`M8vRUy;Zx@$}k5u@VMVppac^cAK!zcW~T6_n$E3^
zQ|5N2NI6kwKVUnU=j3d5xCx*y-yQQqI5bS!u)GI?yt}c{s(ghwy@%7d%v1v%@*=tz
zBM=Elh-|Ga;mK43wkx}5?geQlz`Xg$TI&NThu;{gSV0bK(8jl(lHlUVF&U_wDr;{|
zT*Rc@+{<Zjq%0ZV(MKn5D_8W<SNiD<x3En*w}+gd4~F{AvON=tgUhnxr9uVkaGI;2
zq5|U^$X@NUqmh#JE=||}bk_T3<P=m!-D&r>r&PQMnqBX^ko)6v(i3-Mna*xSsAxtg
zYn6g)@1qkdpFMYLf~?tyS=4TgN=ma9C)^jUc6$$IiK9kKXRtjUogtZnsD#&l0+rZ9
zr|I)Q39bC)8OPE^?nbqpQ5ta)ydRqIbcwg9^P)3FLLhoj!+u+R=(p$Pm(#9kBV{65
zUZsR?gCr*IuOIP!qxq`fbHBEp_C@Qg)d_+VQ8nUfOsJ_xu@03)uTnPDYv`4*Z`kZ*
zkF7LN=vpQEtPUfM5J6p*ej}6yeFz5{)UfaM&9h?;6-eZ%mCeZ@y%y0pFRA>GTPw^k
zl`$(z#XapXgYR~8rkj!eF<3gd&|~tRaV0Qy!Z!cuG8Mx<H|~d{6Xe~9+Zt;tG0l!J
zdwzAgS05wJww$FozuLBK04KZWZHnJp`-iBu{d!1uLEadCZW!SO>oS_~;M))3FJ3vY
zMh@jY1A<6MQBALw35Wk?Gh|`5_yp3bbE^R|xhYJFPm*2r`ekq&>+jQGX{DA{aQahL
z8##g#XIa38nuL4vYq3$LzDb3o0~@i;s~I#v6D1S>b=Nh<+s_y<Nujg2`z<(ff@~I0
z9PK<S%QE+3H#C+I*Dg<zM*>K(r!H$M@ld#gzQYxzDIR<O5`TxgTN9d8x3FEQ1*!|o
zc`wT+nYM}|;}j-)g%N+5!@zDS^meM7xkqbL6dUV0yk^L3cCtr1oj=i0y`weP$@`r0
z+zFugC6m9bNX+TsY_74w`<$20P^PD&sU9g&MQdY>nuFjFHq0gi?EhzgS<k)*K59;;
zCB?lmp>sbq6$eb^7JP>1*Y@bWahjDsHAQ7^_!3X22!&Em2k8(~U_BD-Gzo%o>Q<qN
z&bNZZ>SmVo_ClN-cC|RYQ6c}@o%n~n`6KWpJvPD@a@a5E|AL?L1)rs%y|!ZX0efh?
zm?aUa%Vf=$!wQ%!uxxa53!8H(LH`Gb>EO)j?5qpYDj76q@HDJ~-HNx;k&~mIyiIww
zSRe7(q}`12Cocslw!4D35oE_0Wdy^>1L#(*K&#s%#L6#;K?t@+xIMtg!-SvCsaI=`
zgmOHrDTk@mpi0<6XKM#9u-QH7jx%ThyxS8GioOfG7=&*=kuifFJi}z}0z$GhwtZyp
z2&<F6iY7zI$tOD(^G#kVXLm@P&?9V^_DjWOnL+bs3<~tN4{om9n!-3;iityosSbvW
zY}--`0Mw1Q*)?oUE7`568*f#PNN5VRsz|cyKO>i)KhvqtsmX#*$7d;|c|dY=bCohF
zsQ2Kll<<UC4^ox-5&UkV62>hFp$^Eulvu_*Spi-AX;PKiinzToM1kOV>|>Xle*Y&F
zg9>F_d+nq8J1p2~cLqBUUOu-%165@P&#$WwumP9uN16{&*R~ha>Hur$f_9~`U|Nj`
z?jI}2-V3bL-1sSdl$ShF?KAOMWIp!u!|8L7R^pdyM5ZyKRBVXlZk7%!IDAdT3KEoi
zcE51G)`-RobX&>`%BR^nY?CdrW0~QhINf>JBb)SDCIE8JS{a=>2kNMCov_Lv3J@w@
z6(lVES3!#&0l|^sB9^NrQ=<*oT`$w%%or>_(Z<q-aD#oWKwHAf8M&7nAGv3&`Ll~J
zp%BG7v01pzo?}2DYrfPZSx7^gGB>`&q5);q8KDr{o=ur4jaCLYG>ovK5RDZk;kAh?
z^gb8$>Ziy#A4}^$x&rY8NTzi^9qx|L#$^b>y#2@apFq#>fnKeXX0GQz`iFa#3yksi
zAr|t!k?wNKx6giu#*;<RHd7V<k>ATfpcnPcwLE;l-#AE!fNd@zBGj1;Yb?-)nb@!F
zL^@DA?(~YDyqhz;M?v*-wGRuP5yUJ99j8J$xP8u!&i+cecZc2?NpN?UdF-XxiyL^r
z=CZPp7je)W3UY#s@86V1QhN`N2R?rILlrqfBjRaE)2f~6Yv)*5{<Y_l4Lxn3(S$fh
z&CW<do~7brf%Jmlm#2o-Eg7uSxTD-XRA@%Y%~w(CtICA|I?*zc1yHlB&K=DU&x>gb
z9qAFX9iKgbc$N#WOhaJ*c~N(G=459wbY5^r(9?@3vlA~Mx}2gLEXPhpu5i&Du?z4A
z)vh^fURdcNU5}RMXPc{TB+lDJeE;2xfi^<5-!>2W;F=h!Irl5Ejn{}zlBd=o3J#8{
z;#y70^siimjcKz`{1Y69miPbOd;fp&)wy=6Nw)JYk*$PB+%O1NB|0eY?<J){N%)^{
z6H-)#xF~l7T0G9AW^tPNtC)?tAukXlMN|Tb|3B9Uu-EMDX}&Z{$J#De7f2L&13}Ih
zoNTYaR&~XXj&3H>YRzlcalz;obC@Q(g<=NtXYl@q^FJBtuP4?HP7+Kp=7n)CVeh3h
z1Od+=5Y`^oXe2GuBQ8^)D|$wK!a?1@B&})I`@Iz~urKW-RX-BZ85I3f1Qrpitd;##
z;b5!OQcByoYqxAW;vr_cf;*Fcl{L&=XoLDpS<aR9>i+*5tWxo#kx={>Tp2$P#Ox3f
zA9G*`-!-~?!twd}Gl?;vySMelLKND$p2iJMd_LP~Cw4D)T!Um(aMBx@xBVXOKIjEF
z*>n^F5%CzGv(y9`pJ<0mj~5qTf2KrqSByEfzcZn)Qvi*PqEm?SC^&Us@XCr)$|4Bl
z1kaj>y>_FPa3bFwly~tl0#p?;0REYrZ87h>A}BCYdZ4`#n21!)<{^mN%ru5WK#3OB
z-%4V>awmB-I`w2OM`A&q4udrXt8Sc(<o08-g%7=NBnNv(addBwc9z@q2dgzz#h|Fa
z6fOcUsOAt)u5DCpe2a?HijUvU^=8GhCY@wjCBHK^EP!BozNpERyu7`FSw6xbF{!f*
z$ta-~=`aHwD=ZzU+xD}D@9CyxENmMI^FeFQ1=jj@j(%NUl*^oB;v6u%v~3q(R&h1t
zN4aF2I9`~g$QYboV%c!L7=q1SR|J<+hQ?s&`Ghg)?EDMTJ`K$XG4Zf!kfLnh6XPiP
ztOJwobXvXP*kx)-4d|#`c^UV>wKvF+CqvxMla)N_yelv|SvY``dmd_TwBn<+09Vmm
zWz0<|FTH^N0w8bXHjD>_tExEklpBW{hq}FwZ6igkawaI%M~iT|5;vB+AiXB5854Z*
zOfj9@ny@T@tQC*s*8vFu)zgboy%za$EY|)|k^co7t~8e}|BTYW>o@1s+WWSt<N6FV
z0wX#7H<wM!<~h;xkQW(UUgBeN7xpD0TT~_DQVNrhxV4@~lI)Ph*t9pU+R8O%?RdnJ
ztMf=6WPk=iFqrqYLqAd0RWuO>eMA~JwbHz9*0se^5AgJdx8eCBJlF6w6Z^dv8#JZ^
zDps$y3Cp+3X@LtIx^zT{B=Lftk4jE@^9+23qeF=hQLNI~Fl0kH$kP1vQ~8xy;cG%Q
znuNSeamu)%@+k=SHerVIV83gwBzd+=D&)cj(R6Gx%9^AZ(PBL-069R$zuf|CobA`{
zN)7HXw8SP}W36!wO7lP$<N;(gyV9=zqcD1<Zqj+C-W*Ei^#A$V>{(yszz&w6%g$Hm
zvig+|eiBlM+QrTL-Lq+M8~s^hZWQukcZUd+J-cvS8{*q>Gf(p7$60C#LoSC^^oLMX
zl%b|(7;#*?Z{;>sSVRVnr;D2k*4Psb_LN@<q6%AUxbipg<u=JHW2XVX!B1l;mIZM_
zI+=LopM&=PUb&DsfX%yB$ck-?sp(*h14jPwEn{j;*gH=d!^yc+0=L`uLC`&%-t7{0
z_xhKeD`>`P8{JoVp`p|{5B=}3*pin6CBUh-fRmKImM0{}xBLis3|gVo^eSQ_96$os
zev7<#eB&kAe2l)CR=48vFn`)pYR`7_ct3`pEOg5S&ZR{2cao;PGuB;(_BD1*v^fuv
zv9Xgn3%I?G^MUY1tIF%{X0D%@WZFbHQmV}e6*512j+f=5hwAKkyS#MKcbcGOgU}M^
zoCSS$^HtGUl1m7TH2-a%TPA)T0>34&ZZ2&lpog2|q}@*zx2>BSWf)BEyOa<k0NJ2$
zaCP-<s;Uo+NOP@tGVw`DG;l*E<1>LKetGSA=i=$AHQcn>U3tm|&tgH14YvAZmS>~z
zS)9c|R|pilsf(UKSS4|2*#3XSHgl3S?%qPCY@S)h{*Ikq;m?F>=^=~>`a|oI(a&uX
z+R_W_2fcpnC+mY1NeYiZ6?F7w#pyvTXkCczC59Hm!28}Z$Krd}2qMJ3w&dJ&UVxCu
zHpeq`EGD4A=YVJ-&Fz(hp*Y3}%om}~V;)3#>5=j`DE3L&YqqkA=C8oZ8G5(C!$rSB
zsjT;#DgW~mODu6^AClW0vRb&QStTN{<!9Y5?o#(iymP4Uz`R<l;ZI=*4_N%%i%^dA
zgZC^61^j*2LPA|o<lN}Tc}arN^r|3>cO9H~J4%@feWldzra_w?M9|63qJh+4cZynd
zBBzwXf|+i3^=U-7@64`xx;{<wzJULpC@2|T$H{sTnG1i9cax-MpsV2pi95o_KxY)j
zrWMs`A!oc)Vi51u*A}>cTDBgdgi)7{3U*?yA3qA7QjYXD!uXprFQ>&w#Z3#>ZaLtE
z;CRZ$u}5|MW!<ya>L7%OCb^^)Ow3jmy`1d1JyJAljc$$jk&%CqJWV-}wEJvTP2zH=
zNc-Mm{AD5kPgd>TOi($1wZdEqme4ER8%h*|F%Zn~+swmlIww^#;}iK=-A7|C-5?vt
zT1V@R8&dh%#0bn@-#xiNeB7DvrZX=83^g(A+19)a29uGEC%yu!!8^VzSamFdu)%+p
z38WoPGdcE}>!;DIER@{_Nka1#H`<3PSTNN(<iTtm?bKRjRFDwmcYoRSQ5qQL*vN!p
z$6;S+Y#ji3!rWC4MQb(9A0KlCA}on$tTrR^V3!nZr_1GrQhO2S27y$qux;G9axIfR
z#J`heo2n*G(9n-K1xzK6Ye<}SBpCO7ox`D1#b9wUWTMr6r4J(7xcUnOspnE@rXrFX
zr?G0ENku(?OF_Hh?P=@OuHbg|T`!!yONJYjW~70u7xj2x6#RHF%_B8lr*FTX?hwjI
zAmW`BWVrVMfhoOb-N;}dwAtaq+gMK54LD5sW|_zKXfbVxd?apEox~$iizCMD&qgiu
zzU{)ZFVx~tc0Z%*GyVMw_R-CxTu2oG+RG>c7U;gchB)l<v{^l$m=&|(pA=}^+A`|7
z4OAvs>(7BliEu|JY{*5FTECF-TS9dFUJZ)!&xxuWZr`+fq#`m-;Ny({=6JavK(uO0
zx4rqE6ZNAhQQHXaQ(qA4=bX!H*3}xj2&nbX%FI~xI9YR=NK3H;L3!4@8Q>Y*6k={g
z4Z+2@sNg^<Szj6t9SI0~c#<u7X!~oKe7MxY6e{&@p>wf@&PageM^kN3QAr|h=liSQ
zZ&)Pin9Db3<fXvD=L7?A(hr~|Gs`Z!k}Ko+g3@mM#2h`<0}DiHg$cJ<ZO_dQn-3Z=
zTheW4qHU?AP@Rj}lfW0Y72P7xwzYScUS)bQ99<BOH*{%EJDt*48V6M*iY<Q5f|DN#
z_f{wAS)7oy!J?FJCPw^!Ht8!g{f2fhgT6?!UAhe2DY-kg=imTd*JQZ060kJ<-k1TF
zk?}c`U8A#l<5Tucx5-2b&Q@@}LSZFs#=Z{S|4OO(KH|mg<bfHlc?s0VKeOnWGqQan
z@}3*Yw?kAkKs2<@cCwv)N+c5fkfOfHY=KEK=mp)6T9+Y1iIZTonH;P^l1fF?Nl$fE
zcfK8f;$dK44`h8fvK>fI`6jjAD|+GFxoFC;0!fM!#$_4okGYgH-&~LyHM%BS4)SlN
ze|Esxr+U~Yj2jgHX(A_Vl3N2!E*hdtc!y94ADq1D%`ON!lzp<JLh4JtL3~~0<>H5l
zj?wmKmy5|w@3A8wiDuIXqRrA!Hsc0~7>X?H`FHQ<neo3-L1e)YFrFK|Pf@tCMe47{
zlBmrZBeYHm>t&sleLK|Y)@37CBmHa6X79>!Zeso}s5v$)0$Ku-lIRKyfbV+qOx7_i
z_<3feQx7>=?0}co%@Bg*w6XRZ6Ayq<UYA90E0U2?^t{`G3__A3HK-q_K;?D8u-$y^
z&O<Rje9W6xH3OQ4X`ff#^35z3abpM}I2T;c^?H=@@_TW#D?^9PYNWWw<Q2Q^a6IZO
z6)hkdaU03QteCcuuqiNHx8!U>9U|XDeJHtB*tKj~eLt`URSf-lwY?DY1yw7e9qz7v
zEv$+sl4JaY2TW{L)9Tp6a$39As)jyypR4ygs$9nYH(txg{eSP#|2rb<;W5ih5DGDg
z#RGFH)F)|V01|5-5jf0NaPBxcl9SZ?yWUAQhXE3!n}R)M!2O2F`Tr~2PAxheOU}xy
zi>4215Th#C+mw{Q7<T0{;Yx7zMFP|%=mDv!5K21XY?hqzJyui~M^9h$4bN!KMBOiG
z9lc<SsOr2yBx%l#2M}Ftx@VjniVcN5DQF`dE^sZuy84)yD<pUvKPFmIEIl2<mDiDI
z*+aFj`-}t;?W|IB(*zybdUk2DBWmwYgnuLiy%IyI+{kV<f@gAvV=rfLP@iEVOXcWN
z0FZ`U9Hh~67KJ6*KrqHFl}^Cr!nxX>J7#5!nv$^W1B|N1X|EQ)C+%QTNXJA1vG1tu
zp4dr7i!%0Jv6YzIHshZ?^3Re9a?sO`I1eT=Gw5;V*~Aqhkmmd`I{?@YqiK_;Mz-(8
zn>v0_LH8r8aeaWYoPZt%F&y8PEN2x{m|F2!`@DT5RX8y|K!L%E6r2r<Jy6t0QaPg+
zl)Uq-rr0f=A38c!?W|TE?_c{yVS6&RL1g=BcpVP*Oa+@vg|hsn?XoA=#An<$NkTMP
z&2hvlmxvmFROEeu8p83ZLmA{#z0NPlE-}oL_mnPYb}P_hKSER1(WaZnV_Y)7^E1b1
z`YA?FGdvZgqTS_27sBn743g0@UI7HkmhMF2`q<9_&(3h>Xq5nq_QdXkGFlxy)TQZ^
z8@`lAAg^jY+aYkg!ii1&AoQjbGMJa?RU?>ZyuO)5kogAWaYUlzs#r!k1W7|!j^d-p
z%nJ%IhZgM)|K8I&wQIZObm7aWwthciNU@Th=uVPvSALoL_<A3K+=-bMiinDVn)z#w
ztVh$}Y?3E7^4x)1((+WnEm-Kf|0I9Py_-AupjqGnT=4bR87T#YuKl?Vj$VSaqr@_8
zmNKq?WCG>0BW$oRvp_oSr1S_pnp~=Q0dfkUV^HIWnGB%03u_Ime=}9&5m{zYd~|NK
z^Kv?q2y0u`qES6BAIdge#(TloXWhp`y5`{43&!yVZ!HW!@VLZAlDAkX*6J>T2(Lpg
z|E4T!h)br+Zp73uW?eMgXf?&Q&YPJ@gW5It5$6Hr$gZ)FV5Vc@+E5(jR&lDwMD*kX
z(Ns!sLE_Ig)|H{7S$p!$G{X+5$a-;n{i5Dy>^GJT<kx5w5MV_;C@g@2{5PChXl~T^
zgdVtwqu;{&Yg`^5!&l+8vj4kqAgU&0+yP&co0u%F7hDYv3IXkF%x35KJx^dH&UTm5
z8VesNw0ljz&xNcFd-Z>!ZEdG$OO%2>P9M!}q1JFwkk4Gg^fo%YZ4jVH*^`CZsl~Dy
zw?q}Ej0^W4k0(uZ#CNEO71(k~+Z)sSK|%p+Lk>a2bhDd^5?YKRaAf*3lR2~Zxp4RG
zU_e`=+Z9@7P_h)E0D%fvGO+@DuVd{Iwd4{{0}S<<W3)iIiJ}fL4sR3mm>`(Kr~0Z?
z=>kp^k0eQcZ%qsCo}zI3C^Zxw_4*<A)Jxl&{YXOc<a<_1f`G*07;5liPavR&?t|@|
z2B6T_Mm6B-uO#x7GL&i9l6K38RPo;`EOFe|K&aNoeO4l&?klW*{71o=F=2_^@+4J^
z_jOqV-x?KBR7xH4Yy1H;RQl85iM>U#fvQl*FQsqXj-DnodzI(ZpkWhShZ1X1hI(M5
z5k9H$nNZJ|MoJZvl<1csO$tZ}@9<hGg8)vKSn)BZMh(+K0*{*fF~H?PD=_$;uMwM_
z=eK1o;>l~DGkmLfOsf&87U<xoFqavEO$3uAr7(0|-+r9bo>w(&+?dC2Od;|Te3NF;
z55Ot*_1zb8ta*q@J(mIo&fB4YuX*d@nP^DxpgqR0j;l8?StR2otKR1?GRUx9o$naC
zZiSSsDoCzPo{0IYiqg$Fw9iX~EA1Fn#W7uF{jW81cfv%8%7*kE@O<#7Ix&77^=?}+
z-Q#F4_GrsDc0)q>fSdGlP*ifZibP3@&(5&Mp%QMrO>w2Ug1pJ+6JHCUhWSADTA4f_
z-ukA$r0FEH3_;i~;1C}oxMc~zTv&|V){~ly)=F=Y>w>*ESgJBCF-7VdYbR51L&?}H
z6`RB>WJkKugg0LN9_+jv4FOy^8E<AmC7+=#Bl(f>%V?2j%$Mu`*7C6`{{;9=Um?<e
z;s!u%E<$ifxdLH<n7AA?*u-hjCP^NV1EB@oziPC5O)uq{thlq;xCQgOFGVl5YaMO@
z@LlT$=JxF~s9JzP(ypF8NTY3xV+`48W>)%jH~Cwoo(q;C0+CzuL@_vq3wquUivG#c
zFPyM-Xag@8d%MyXG!Q;F{LnLkQWX+a8zHYa%vKYJ$ISdS7Uf7EccsCRYj5aRM7^cE
z=}6!Rrv|Y`J3v$ak&z+Sjye!cLU!nBB6X<$95G&|Tu~$SgSiOk;Z2DAR6?{vsc4?l
z#}-nTxtWqN;dxL1EfIT*{FG6w&juU(GAPy%I{2M7>!`o)(4k)&ZZbNdbF}Qx=xyNe
zuSo}jdN0Hw<1&SkQKiDBY423bgj4!gUBvj4uUnPtnso&^JC8I*h=ZznY^ZrtPg+%F
z><+L`UV9Hg$9_yG!bIA9DPGLZ(th6}sYM*7PH-OCB1v}vk6?~(N<Xu1To8Ys1uj(j
z>AHj6ki-_SFLlP0beqCX82e(=p}N+V2c5@ZR7GCkJS8wPQ;Z|(55#(o*clV}o(=ya
z+hr(XV<_g^EdAsDK*y<1C@D9pe$z94-4kD)%x7+PF|^hvP$hkZyJ3T@Xc-!cn@cLh
z&@?bHl8j70op~>(f#6nYqOT&Z3;pixGhVw#i}%>45yNV`7qjJKA5#pJF<VZ{L!2iJ
zQW*J1WX>6e^=WP5=^}kA^Ct<w5>A8+$r{}0(ra9An9)TJB}sxDL+Up&0<HSG%tO4Y
z``2hLLPsBJBQH%Rk~-HT*XuD4<NKBO{#$t_7k&CrwrIFEmB+K5LClkYbTN9MqzvdK
zmo>vqe}-WeEfsnbR@5$h@HyHk9z7yJ%xF@>2X-Z8;DVFEe}8KBxt;;gy6ZrH0=Sa?
za;4P<)gpnADRQ6@ep;hUl7jet(QML>m{E1o_m!Z92`OI(TUUo2Jw(#w#|ejGaPn|s
z?xC9-nshCQ$A#;<@aa5O3x{pVVt~CLkKLDwXU&JI!hbe|b5>sK1gsdANwYHb$kplF
zMTuN0)#zl6<LjkvDARj7;b%Z-J5?AL`Qg&5?C!66r6_CS^uuIag`T(^LQunko|au8
zx8Qq4nhPnQU;>qn&c(FxoKsZEMdV%kRU7xkwAMg7vL3#{iNXxC*1A5kL42ITz(v}X
zwQ2Y^wxA$l0BjG-gegR0x{?f8K9`t@Gyx?pEN%q1(#J23*iJ?Z_$BZ9Y9?I6H3xXI
zQeI@fzZ~{l$k~)i-GSg^W&4bhcJhkDV~{Ku5oumTD4Rt=7CZ5@WsKzu-y#dcY{Nsx
zkDG2cq`)eZGhclT_z1e8_fe+Y-2SJ#TB35cnU;&Aaog<nP?WJN9<4(v!MT<k@!J1q
z?&dAhdD-V)Y16Uu<bX9RJ~OjUUrEb(%lzCw*HX9&t>Hl;rpwZCiSv8iayUe-^K!k(
zIgQUB16h$r<32$ZVHoO$&m4H)-@t^khq_~0XF2a61sGm4#Uk!CmJu7q>qbZFeT=h!
zV%9tx$eFyp6Q<L#>C8qaij+t)HBYa@RS{rUhL(RBhor_`wos34q|fJpqeZ}+9fBD;
zLhw?cX^~6TIr$XrO{hEf^?R>4zDR&M39FKM(*!<0#}06jxluga6*r+Yf;*SiL1WCm
zz*Ri5(7ukMjfCum)RxGH=2sxen22r?{A%^?O<(iW9{z9tUQ$gsu`(l^(IfAuM1T0+
zT>Pp@@_zCMVvC#V`o-zANFxg=e%i?1(P9=timx0$DEpm`z_hAh%|Xh5!PGIB<H0BE
z)UQ!_!!6p%R<bZKq@SCXo}7=T0-Wv<nlC%GQ<)t~My{k(yG7~*^s?_zj^|u8*+T7g
zXHLgZFdj=spy)z|ZH^nI+429<^1fAiZG-6~riP1-iXR>K>7Bqz*y+6%V_z7$FF5#A
z&PU`uDx-Ifj7#8)E-)gQPSj<=RYTKfwBhQ|_Ii2tTBy2X&c8!Bxab_=LMP{+&&P^+
z*{iv|)13tPvErHgQ%Zn%;HNh@vHbz%5dT=OFq_cY2CM`D!8K;sw9hH^IrlwjW$13r
z1;)~J2KLgdL7%yHuSQNQP@saFz0$3dmRa5A(BNvgUb483uN(v<Zp%#%1op!Mk?+f*
z7OU1&Y6rHbxk>Sk{c-eV>_2mhm1Hbg3MAL5i@qLAG))g$0cX=r3^=)Fa8C&PV_S?z
zUZY^yI)P$?tVY)GD&wWk-^H|?WtCrrJ5ZG|UY6Kfr2N_xTQZ1fQK+n%?ZL#J+$K=n
z8etp1Z{-|t$UZJn=FnoJ4o1vYUPWe5t;tXiI;=L#utkH<9cpq0{US~L1xGlYxb)~m
zp04&RJkeO-rN+@E>Y13Yx=UfG58xmS3xtS+1;*OVePODG-Ba$wOnK&~-bm=o2P!Z<
zSYaH^q*5kf4pVts!jIr7WBbkjtxYvg!e5F7?A@IvAZ-#zP8cxhB1kT<2Y`sHx<ian
ze=`&<V&Ju1`KAyXK)F}uaTo$46KWH36TS<`W(Pd4E^y(TWMRKQx`D(tfs7Sgk~l9o
zeKghbrOfVNM+OEudd+wKe(^R5X~y(l<E1{1$R}?5(0pBOdTn2TU+}Xq$KtkD5`N@-
z5{9b2`DYsx%a*ja)DiREd;I1bVRgA7vJ)P)FOIz8;=P;i8PNj$y&?01tf}k!bCT(S
zloErym!Ab>coU&O)K**%lgxMPN=ZfoY}7Q`*E`Ag_3CJQh|8E70Hd@`5@Jw!WqQe0
zOi4!lY<zR>Y@Bg5Imn6_=AUo<YQ&XtNttx=Y>I20`zS_%?(=`5Teo1Y1=p{YMef4v
z_U(Z2ZztgYuTYgI?}b)&Rv+T$f96~o4(j4<n39gL10kVpbayGt4NDR=Ul*ybs^!2X
zc^(HVWx;RAHdKs_kZO7mxHOho?DdHI!r#<aNoh{=74!&H^w{{<%D-eXbveemg;NhL
zfKqK4_ZACsEk3Xuvwi!_cHXtwmmd*P8-sojf|Bv02wx<dva9IAIpn%M4(oosKf@1I
z`7rxNHD9hgXdM48r->Y0dzOXzH^eHwfQR@s+b^E(2G&tUGB=4l@MMJ8AIsfwnD=O6
zVNSaK>^zBb-0+mF0c2FHW6vWxoqJY8Xr7&^E0HZiIYj7`h-MgxrC*U%*X6HsiH=4{
z<KKHR8LleGo1=HbHl4jGHT1bIl;E0_-Q#$ZBLDg*r>QI0n8>PZ-$){R-_LaRlN_jX
zD>N~<kC(-wjjtxt_PMEM?%V~&<wd{Fg|JWMQeA2O&$ONRZW0XnHA%680TV^`mN#{F
z`CoAjw;m2w)+V0KL0~V<SGW#^XiIh$uwpXv9V9-q@B{3V#xsqZ$^hKCv4nNk`(`KL
zw*%8xa{$Pbq4_NzYA$-Qvx1DA3;{8nfL^DNQUzS4F4`_~9i-P_HfodCw-8isM7DIX
z7Zy;7kE}S55ziFU5|qfDBn_7MH7|t>+K7C*Go#GU6IoVfSjghV{(MH42?t^#_TJzg
zJI;!SHtAU**Dsc<eO#8b_9OyqrB4&VNNh7ApW4Y|bxcY%>N<eCD>fZ9Nnr=V1?2-6
zO;;#&7~B{=5e2BiUgj+V>o6w~NCYyyD9wS5026zn=W^MCkdM(Ol~KyW)lTZKLGZ__
zxm-oNL+yK*T~4V7rlzo8AvS<Q9+{77ccOf&<tVlxve*Z%c`FV*#2K65fFEaR9t&YE
zjL7#BUrZcm%yuJF?Jss^KFFqMaq7=(-Xya0lI~0hc8}^sAJl-_wKj~b@=LGWxXl~7
zp?|Gdf>|8~>YL*W=@|bTBEWMz-NyvVNwrSj#Zk#++jG#ChXN{{0GxkDK|1dS`=g57
z*i@{FUFG5-Po4*~X1dpBEG9tN{2`#yh88WWm%UwUB;Hm*=K_KrG>>!L$heJh&n<@I
z0N9Bj+(K|`$SE+y;}iHMEdv+d!LeLYl)QoDP#-jh*B)PzmlbHMbyeQM9P`H0CuUS%
zYjHksEY5rh+Jes=1h|+`@IB_zT2xmhQS%9mFc8Kr`u3)^&m{-n^2mw~+Okx?+Hw3)
zsdY1@1eKLj0hf{hSNsi_hBp8W(8R2{R$}XkcHJlsjF=DEiMK9LU1yyd>AOtsnqgq9
zU~XR@mcJ&__78{hU?o60?x7Y&+ld;@G0`2JX;n2$bNx0dp}cb@TBuBOrNLsguYNM9
zs%;0?7lX6Esi!(4P*32EgBXvjAL+DyDehh;hVBA)O{BFsCuNbQDf_)lNfK}3!zQ>b
zh13%9jpzO!j$Pcw(mgnW+h<1U#UiK@)vDID&PDWGUzM+tqM^M|q`4mB`+OAhLN(*9
z_}*Eax_j$dpHQ2qOjyC_jX+YTv(8@)XN>yd0;@#2&W!?U{6$9TyadvIlNN|SbRqP!
zf*1=AbE1smQ)g^m!{A{c<KA192Wh;h?1bJnJTOs(fMwfYvW&>h)w}X6NZhaBn>HoH
z#LqZL-G{H|$wo)0g#|Q2g1st#wI@tZ#}x>j`%N9nxL7c{G~2+aR9k}f_nS2h9FqCN
zVzw1MlpHlwmTCK=T*)3A3$kEPrn0^FGRX8P7(%V6cjkKaFC=~sDd$86O*k;nSX0$*
zBHU?J$<xG%8X=ws!{np&_g!CN#hrXSOAKtuD9AfA9rT_Dxa=84<hc7SphUTN5YYn`
z;H9iudbziVo$?j>t#+RafCny|;q&%>Ae*hep1O%Hn*97VBvITfh6~K@xjIe2Gc}zA
zXg3I1K2m`CNn0uEbW;NI`<eUu%EQ^{m5oe4-La>(j~xzMD%8>f1KG@yJ-s)Lf#7CI
z8refnKHA{LI6J5``P)w>WNUr|2gmb3j)Skyk;)OR_=0P(>0%@P(zjG+5Ccc8kfl96
zN2y-%!7AQGnf{mxgs`p^91nSjJoyKVCY`dK6#RUAv->vHxL0E)aqR=%<1H`uyqeS&
zd130AM;N7>_gEdHm*md(?R>GjER>Z%yT09Kd_4G8m;_WQ(s;1DKZ`I|x$Zzyx2ns1
zqcoG7L0XKCW#q(iehGofX-d49%t2O6a`6K64oOeFZ<H@O$Vm1gs}-Fx6HHt-P!dYi
zi?aC6#jMyYyN9V8L(!p|9>cCXB1s*3TN@zfS<EY&7GHbVXS5tcSR~WwSW`r6K#)dO
z{XF$ZaIr#4fG7I$iyE=WZ_LqRadCTeOE&!p*@^G*rR4z=QM7QZNRUOV=vqmFvbc!T
zd9qosDj6tg2up<lw<E&rFLkYVuRMou#23*E{&zvUR`WnmuJ8^+Mw$7Zec^ny_;TQm
z-A7yNN5H3gKTrj0tC9BNP)K1^#qjX39YQQ+UDC$HYE%XBns*hvtnx;Ww%(K|<uQlk
z3`MdS(a4nX;!kP?CwzmB^Xg7hW)jd$v9`jp-gCauaD>fN4$Vq)ZV@(^B~vuhs9okk
znT;KDOB2wPeWBO;gq{$<Oqi2IT0C`1ID{BB=_-nTBwut?#wj?MW~r}Gq?Ut%T$p&Z
zlzF5Y!`X_r+}Ka`e^f>9E6H_d4Lw5??&s!mRF^SqIS4`2s1@t{1xq?|XBuD8FyVLt
zJ5L@(%Qa04LOL`jIP5Ake8KNnCC5ErRW+I^5*6_U>7SF=x7uE}RF?9Oum<zMT<{1K
zTKv<Ouie0bkW*GcpQB>o;3gK}b?|FEJUVepgE!;xNJ(b{6NY;PbrxB3C(!tv+&t72
zJx^qz*aytql&+6a+&0navuB%{G*tjN_O`1o5N(BkC_5t!m%5T|`5c=S0o6Zr$VKl<
zaS%E-i>61D!%KwTRb7uhmyfdM851N9jY`&lr&EIA5V+5~c>f7ZX60WV&j;w;tWOHX
z(7q9cYCjGaPt74a{a^+i4eN9{`nk!>P3^jX^|wSn-j(QH76Cr9s3wgFFDt7BWjJm|
zaM{(ueH)%U;9)bmsS~UT8-L0IvYx*>ue-$W9)e|>EV|<ftLp70J4jQkx4Vz{#ia>G
z0gp8o4(^P(#bRjh<d3#YC3MK^TMWW+W)7*7Mf8gSt;a-fyCn(F<?pT^`pYJ5Yv;5h
zTjQ7{zS97>ZzA98O!B)^&FY`;l#jBl?WzrZ_+S>83h<`S*O6C8UHxowH&#|eDvK)e
zg`;~sDHSEFQKcl^Z!zIreD3FZ>&Y(jrO3u3@>*c>GDZpeQmh~7m{(GYZTI|XUqYZP
zn0&BLe2XIRf-MyW9W4p%*L{>8mg(^6R1z~%OQPkgG&+rGNqi){B}V!=9?v2dQlVLA
zpW!}#aFKWU^a%0@HnKX~oP5u8_|{AhPRs|~6ZV-_@OUJhwj0+pnmpKY_6|5vEh;M>
zDJiX5X~*_szjAoup$)L>!&$8}<?H?GRfmoOd2@{+XdcY3fAc_rt*gnRG+3x@MmLWf
z*+!ZHVXn{eUChovI^Dbe;w1=Y!^kbOCl2}80n!eOj6UXHr)58&h75G->fDdtjWPRD
z7u^OVt-Krx5Gk~~LgjZ&xm`)fEGvgYf*&yDK}2wQ<fW|)<>q&aAD1oG9;Y@duvf#d
z4xtY*i^J~GjZJTJa&PzPzV&K)(J4OG8=3Q{&*Cn=!tS@N{Km&0q>O3~-LTQ;`j14K
z;-NKT;$f^a0NB+h!?JWOg~A)dXu7bG%De4I-BRUP>9iENAjQVZ7oX}>d&Tp?5BS$a
zsRSt8luBe48+CX7BQ#lh`+8z=Lv+jg*ZmcL2B*hnNzrj==9I{Bm<Pn(Xc=f*IE*S*
zoEGRl49xpwAai90ofTR<ATRjLs}@NV<Yp3ZB>`m3Tc0~4X4T8~W*5xqCN-#?#CCRd
z*cPhsf#Fa#Q#XO29g?73z7a=J&VJ>{3H?By0`!NqyvCV+$Q9o%9r+5ig0ru@hn<xP
z@8^IRg9!ki)8otUMYvoc1kcLt^-6q8cnM~c@;EYNfCWI-TSb5mY70@6X^NuG;95&@
zx~4&%p5_xHN5C9h;!@lFzPa1#2)foR<(QzqD6@9VcV<huW`v0@YQq5V8?5+npYqJs
zVrHOr=tKucNl&+blw!$ZE>XvGho2$-82eKsFR<u{;&e42CN>S{v_Sm)FY4FfpI{Ov
z^)!r<<SJtHFhKm3-x;u~c-n<D_LF~=8bS%oRA-!Q53!HVqLFQA+s+Rpa;1$!?73YH
zIoq*1FHJ?Nbi+LGg`j{SzyZ56AC5pHF=*yV-d?<_vGXu35e~+NR(Xn;Px0M34|)}!
z-rw&-=wL<h`H8mbr>T@_Q6nR^N+Z3RATz463OXrLHm3AA@0n|7w8bZIj1LA%ixB5U
z$V9L^akDNh<I2*4j|fva3J3Fwo5nkvp_0VI)-1e%F~p{&*mGd0ub;%#^R_A20iU0f
zYU@@Qg!6=9e=tVlO8+y|v``fPIW#E`fw#CMLj9f{>N5$=L~d1aVt4qGZ;izRl?gE@
zJELexHRq{36Egj09MeE!$19Adk%5hmtW$;;8m8buuIRRC1U37)%29#5)qvDP2Js=+
z&(*NQDQ>IkX!Ixjo-b>YX1oq=&9v@gAt4zhUP-M$K9%IYszFLZg<0(5Ba9Fwaozjm
zZo|251q7T>tEe1(+$o@$RTJ5bHSrkOI%kq=n*%Q9uN9?ju+xWVs=HhFUyOjFu;sb@
zyUoQB>JyxrUV&f{q$gHrpC6XAxjaoG_USWnHOd7V1`ZYbLSn4d{YLMw<0xU+%}RXV
z-lZGu7UEy76MP)h5fD~!wm6HQ<*g$6$r00}{@AP?FTn(0?0v|%B{4RmR~kQ~&`s!)
zPb=MQZ*B5x1i5RE;J$AXN{8^hwWoDE(8m@6tu=C_yes0GGX~GNVz2DgT+ycd$RO3@
zE=5tB-`KZI;6}1V`c5$v%auk~YDuing2xZbww)Dq+lY?AE~X7#sVIgk;v=BtY`8J*
z?3H(~Aw;_^7}hQ*ByyFJw^MXI&=a?Rv4U_Ckr`w#R<^`f@jn@4=H!}sQ6*gLAPJzZ
zrJA1}i!3`XBlB~ZB$eAie2fI^=~4+E?n!xOesz3CPovsJHuHO;*$D$aVa9F%=s!r{
zNU)!P!|C&#aCu#W{V7?6m+-A;CSHvxxS6uvD{S|d0$T{;8RZ(|LvW*HG|;72oByf`
z^nv}R7-P@ia8LCso+2Xis3dM4O-|_oBo&NCM84vqzlvMprO{6ro!4U)F1c5}54qL=
z6{nDG*I2lT>JxW!bJ~}atlPDT%d?&Jr5ur<uiI!h^FdE`uL^S)W?Db;RvQB+s7c?i
zr@caz)0=mT0<OAv3g{;Ng9l4~p!ShG+7?}Gob(Va37dw8_|l@_d4}CGGLJiRp0TBB
zlA46W`s@JxOEKH=(N*^V4t|$gI%E&z0JZh(?4>jx<DovjJ$e&K>+>c$JWo!oVnlvp
zpnfYff1iXd&pm~~5AXJOK(v(cnOowN?k=}aHH-I=#QR(r!hpQ~91}xa<#Bt}L<v;j
zJpvgf<%PJr`@yp+?E(Im9p#{XG9wme8>WT3#SfDBWf3Z4UhdMA$fNGBvz@I;HZVOc
zVPfYyKO|ufp~dg>`+=u-5M!pNnrWylaGx2qyJT`C#P&WJ+_$((`)ex_s-HjR6g<S(
z$-eOjR``+9BfbtTkyaX9(&We!79p7C-H~|`(-{$rRqm3MBT4gyp@Baycpyy}C6YuH
zA)?ZnJ<L5fIR(q92vI$yqCCSMHOC<;kySH}e(oC`>{XlreaMSY$X+0Y$%*RBXOcAr
z9~^pV{dJ8{V_W}ZWphr6<jkVPVoJ9ScRZ4tX9icq8m_h>8)>}!r~?J@>g;y>J;YcZ
z!>FsSqq}m+YCEqD16~LqGr&beP<vcosp>&sIQQ?%!l?DKWrCWJHyx~O>d4X3urtWA
z?PyC3@S*Eb4c>7*J(>h>SJJqxX#FR&svAn2XaE3R0Md@gw6wD@H<68NBs1)R_ib$}
z-Gd`7YTbsjPe%>KHENMS%PeP?GPVdq%mjr+?9geSNS*w<&#)2BLF#QcDtB#L*}Ke{
zNcr8eT<Xer?|(WOF4cMy@EG7Q>4B{wQN1&AsfP0=We60;?MW2Uw5t~56__`21S2&p
z&e9rH^O@Ju@k9dz?Os@T0G5P)paj<txSM_Z$Hl_z*^1plcf>l)idVJ=^1ZbD_T#(9
zAAnbq<ZgYEFCEaexJC_TLOK6(N5$s0o7IR7CM^6TpGWtt;AyHhrq@m`)}r!AeE>({
zO29#$+Z<)Lq-kBC-c0S-C)<+8{?`zzphg;tAKVDGnKf%Z@o`YzpfKa`TbL34US62O
z)`4Inus`UBO_?nJZL9utBFE6_7!n6kznf*7uCrZ!XPD$8rvTJj=TUsQ3J|BS=odQ|
z$rqhL?9NBVUnjg99`NU@C{6md1m}a?ryg4P;~LZ`bxLUaEisZA&y1d$Qr-g+<Io$u
zBg-45r17<^;+9{~BhtrK*JAv%#`1=<{p7Gso)!X)gvJY}nU38)(ZmgRk^$Y<tx+?e
zl8Arp-D%>e-i%eyBGlHR=-kSZzn3)i-HL+yXp1Yf9<mQJWu<NCeoheoUBi2XSgE}-
zmOfn@&bJ?4f((Tx87))TMUC5lx>)dH_x}H_wf9|vP6(j_fhZ1O&gh(7WzsC^F^*7w
zntL6KgL_Y<$(s9PYoVCqnk1kR=0%>btNO)=J1XS^tm86k<0g`5>HQwDLsXaUI(=lT
zVN>Yw1vR3H2ti1kU`khpVmJ9X$@)S6DT2Zm8N+oIyGNNAH!~D2Ssm&>2DLg*QZHha
zf7t=JC>ch;GDLe@?q<IGDjT?j5Vq;WW*Ds~rj4T7Yx}a)AsTl`qd1e1f4z2s?RqY=
zo76Zv!-Y3!mEA6A8~3%OP{myX<Accv`=38$tkd^zGzgQsE&X_(F2HdkTP-04sk5h4
z3$LPJD=@AL$ukri2q&!cQ3wjqSqzc^Sb2aWy{6S>@}MFj+?cpllSz}zlzTC@-{%!1
zC42u!A@GP!#AXtJ$If<}H;vi7343KT{gccPE^20+x0J#}&gm{k&m*wDi&3QJA}RB+
zi`>1%1wvCE%w*J7f9Qj5^-n~P*U963qQ9=Kql|64TB#xU&PQTkzi}S!n11w8j;3n_
zV1E2x8|g7EqrS+K0!n1U&}U?8QALVDGbTuQRKki@U87%R6eG)G3`r>ch$Vd&{!qTN
zt!4oy(v4n7y5AQc%!v0X3k?iT5ZajHMN5C|Y}7wW=~%+&TG$K1=YZx=%f+Dy8f0)>
z_8d%nt|Lv=B0E5Ux8T3lWw`5bnadN5IEG8h658MA8D@u~AFz#EZQz|(f=)DMGg;Qt
z7>Zwd&m{{n2bX2HBjo}b)1<FRzVZ3Y<HzY_1WfjgL>eGzvG+~{pq;g0RtwW;3X#eS
zZ5qKY>NXpiq|9nn)HKd@>#u-5NaisbOrS>z%R)Aby0FP@Vr>Age?PVeLichDW8Nh;
zm)e82o#aC#QU{lRVJ>vkl3_+WwwHfNbvx74V~rdg`5>qU%`#iY*YgXeJ9J7v`I|uf
z?Zl*$s%l6Tt*-2poICDU|ByS*=j6HW{~*O+X+{`dD9yD3!MRNBC%4s^+%<VeNBqbh
z4y@1ZQ{hBi)%Eg@>3ly#!{5}DpT3_+M<@tv(WTPDJr%*EE}xs$M!qQ1c{&OisB##M
zzJ!N?d8Ff?Z!m&mj9}=Q5{MfedrqNc7?2qslM*{T2GAy0vl=Ko!qL(f46EG$@$ma%
zxO&$j8)0aCYIOJ0fN3|Q8~uAQp?Uy@%YoZvkrNb|ULIkbCZ2$2!ZKPrsT-i@tT$yX
z&>$@oQ-L(~2?81)__$w_Mzx3Iav>o3{F&vDBPGwBnT4Q#3fc6B2(V>8aS*PX-6Y@k
z-y3&((94uwyyR|}H3f8UFAKi2tn;lM2S``2z2zdKN}Q($SvWVALHNZRQ8mhP2Fr^|
z9Iv>(tKVK_eqL=6Y6b=NOyksoyX36x#P>@Dd$&Gj;VhCBBHG2^{i~mYL%nQyi-O&U
z_pJ-%tqL5bkGZtmP<ZeAUv^%el)q3;iwhfw<k+O)?brhk2K)9WW)?~2(|+8y-H0f0
zJ)z5(;}fzL9BH9LI3oq#c@S0o?ujveI+o5{D@jyV9<VgoZd3|w`+VlqgSpXAtCOX8
zavNcyDqELVduLS4-vN$Xlof!1!*K6=F9R^YGO+0y=qt(REbyIc_d$$hA+}55;S<KM
zp?K}PotX<M!$rIZbXPmWi}!eViM0XV@sR$|b|s4OSE<s;OQDOpp0&nD9y39hJWI>(
z)k4kvJ=c2g|D(&^{MJ&LKb+t{@VrCrykbOM%PK~VjMb%21kFp*A?#&ZCSAXI3BhNe
zuVzqTdSw@pZ*NkSa;e^>>YKmq8u@<yGSf(zi&<Yz41S4b<-kw8@C5OeapNS-hIqDo
zHvpaUcXJeG*s#!|M}HMsBO@4PZal&UN(!Ybu0YUp1LU!gkj7JUW{#F3o){&Vdx)J7
zw?|MYd9_|n|J2<R9FOc}apCY5wwJY)JW%v=8n3o);_c(e&rh@6w@Drtl!zEqAz1vf
z3W8bPD!Wc%le_f}o|=B@NTdP*6TCV7wOfS0za}&09F?sTFZZIo#YMO{RryfgsPlXV
zz&fyju9>({gnuDzKmAUKXj^G+B6X|oi1<`7i(TD*4pVPW>~FFGd>TPOh}LjAMA_pk
zfQP0KQTJ>>DL{kG=j9A$(lY@R>mdYk7XlR%q=q@jH}}IQBIY~mk~`8Z`776W#RCt3
zFZ&JdtSjVc`TkWzvXl>OGv({2Ic#^)YdNvyZEbkX6K99&06PRFvL7t7(l4~=ZFehm
z%C~K6uTor4{@z;|kUUFXppfe6kWq|6>l4DTF6S`|-g0<@r0Wi}22LCjs|pGMpoQaf
zC1u5{r&vy|H>U=CeZzm4(O_Z5e1Z+Zz3x~8Ue`m;`#wP*2aPzvmKmX!m-DZP_OiGn
zibET*wYI<ySA2j$Gl)J=`D$m4+Vys`Ro8`hLZJS_!}P`3d;6@=qZ%j~{KB$!{Ob3d
zQMx6<%Yj?Tm7`u#I1po#p^8AEaZ;ZcYDQRZUqZX@BX~4x?bvqiqAE+w;~=sRvS&|!
z0XMX<hSa<*g~y1b6x@<*;m(X;BT1^+<Jq6Oi&5Gz+u+HysU?91Rxy;YcolWyy8oiL
z3U0O9<@CJI2~Xu~u7>WHbt_56Z{&ZdQCv=?f~?iR*1}~s1bXKd$9MK^9IKOglSGTp
zaO;k@?qmoe_?A2sb|-Wew#H;L0M?)5T*Oa2Nn!%BsA3v9%4Wlm9*^963rdLzAFl!a
zI+MU6MX29GeBsCxALnBO6Sx4Pfg^Lx@wh}99*83lzLv#gLVr%d^p%&mL9Q_j^MaFb
zXkn2@nDPOKHW2T)<_~B~`8aIYRj$LLlqJr#3w3FDkv@<|)DP7kff(=&SBV9o=<(rh
zKfjGC_U%zzSQc@9Il+|5<vo&Ru+_hI4QgUHSHO{6#QIu`M91Xw6x{sw_fVbQJRk--
zH7fw`k8hX6%`c$uyjyvBO-aOE#4O@f29;tEjSPOy)UY&t4ahgkD)iNVTHf7G6Q~Y6
zncDR&{5s?+=yN3{8i=dQkrEb=xYMbLw|!uZswBM9M02n(vtNlI(;AYuaQ^%{MzsY!
zg`BAZ>V>8zVx^);`J9Gp{SB@Y5}Hh!t~Zue16Rh1a1{JknpQ@_1bww)jUZF8%jC+n
zqjlnX``l&CIs<F#sa&(gwqp1UVb`n7R2v)mM+Qo|0M=>e2U<)No*4+a277e|8BK47
z-%JzCld=yi0=%uE^+wwrra&hv;K2q5dgvM09=8ki3yc`jognUc8}?-5>qD;?X=sp6
zZs8sg9Rl$d$SaFdQy>&@p2R^O4tGbOQ`QzOO4N;)K!nuwG`l=p&|CEkhAY@btjzh5
zumz5AH4L_HuNTbvOK6}MT+`wytT+jXxclfBu@{_3Un*0WsHsByfrSR{w*K>snXK@@
zI92Z8R{p5A#kAY`CoxQ(u*rLaCfs3q6;V$QSBwX-w!ES!(4zC0Pg4%Rx3b)nA|M2T
z2m#}+R(m!|>(HXCRHC?5122~w<x-sV)1a5=<SVTLslA4*Ez)AXPq<e^uy=zw^OKL~
z#}di0fLEI}<x8C0iA&?(7{!NpN)?w5(7$~Zh<MR9WBRyf>s-hzZrVrOt^yqA(_G?b
zs?+i%-CpgyVq#-&w0s;q**7_mOYsJzI@Z<DJz5Lt?3-#hRZxBd;&m^)0nu~W8Jk2l
z@g(KS<ST6PK=iQ@D8f;q%|Sh?!op2{?g+hz>LK{D&JD$6UYJIu5_R#S3>_*3FF(0e
zJ-9(<_#m+>5!Bu9i0G~y=hk1e&l6&A#I?P$$a#o$ss4t@_toiNlK`as%9uX!`6Zo&
zMT5DuL*LE5#li=>Y<mG1VWg~+XzQoizcz5RDDqscp7HcLeW!n=8w!Y}<0P<=JcxbL
zZ1q&wNTu2O%)=`giBS!7O%5-oSnrGYPZ~Vpu7x4Neov13Q*;IbA_^}bT5g(ph-k{J
zv`%mILl@mL+Gogjq@^Qr-HAq{!ou#zR9U{YB6_Jmr$Ltvp2d6f3_!o2E5H>K^rcfx
z?SFM4*O9|h!lhHB^NQDROXAEgP4<9zZ+8u4=QoQUc&c?jNeaJ$ofj^ddb61`z++4_
ztaAm<bG+C%>vynn>Ue=@m$(5+yaGZPU0at5=%wo?2}{R{gh!^;6_48Yup#66CpAQ!
z=`X0~pJ0Lu+jEWSSKbmEW_`%CeQKdW%=&bCup$LQ?W?SPQMv+#r!C(FLO9d3oc#oc
z%)z=?wMw|8U3v$SR^j$cCoH;JOD`-!4o;}@oaF(|pw?wg53`T=t$S)Z3Foh=vQw2$
zgWn;1Qz>}EI8MRB{*YPo1h}hO2fwwQH-_5b<r+iM=Ul?KvQSAe&L-IU>*Bm=m<DS*
z7?f9vU?R{&bXs<A)WPX&1$ESGi=RbBgfS|LcKb)v_(R_@C6b;<<?=#TFlhRUlTotR
zgU%lWgp|dJjbSfCO%pd*)20O1l)}%JB8iw9vr==FDI6w;4!T|wj2zVTD@WNjFROYA
zaEY*<p7F?S6llAXJ$Ju@2{YlEAtlpU6)w7WxwNa8GkfqB4f4qVnT_)4*MiATHG#ZA
z!1g18;_E=2!}e^X*CkZ$w_N<R{%9J{v%Np~?}JtI?4$L#l&U8Ntj@DH+tl)7SK1!3
zxG1jIpCPBooMCb5vxfs~2GtTU`O6dXN09&Yc*eC04kp<oOeC#?&dShgLSeEjhfau8
z-e{X`)b2(B5_o_j0s|)RLETJoTX6`|LSzEc`3jq;CSio|>kyxf>xNg+T-IR7&wfhj
zE5Fjz{CL@hu2sEga(@Zx$c2l;;q=i_(+;}2rQl!Yn7kB=erD-t4$1HRCw&jbNEYYk
z<ktiKhT-p{n6q$_9+IP0Gt)ES1C%dQ=Sm9Z+p6;*9T6dretoW&hJ^4nRoZ)KvW1c@
zEl5e2%ccMZQ9*d$HQ|GlTsjJ#ZIH}S9UG)zIDxu=OWoo<iN{<57a-yqJjj(3p`fwN
zpjs9pZI<8OD^4WCzhmsj9jIE(W_gim75b@m;{Ilkr3=_PpvAbW9JUjuiK0>h;*42`
zV(S{Ott?Q(fN}o5+nZ<W;Q-5PklB!y?t(suclIJxxC3xab@-zoVHZbE?_|}3oX-=5
zw1%GaWZA=m>*h0Ac$tD^9i4NfDnr?C1AdtKULGPGAmB+Nh4!yzy%+Km79K3({GV%>
z2LIBZmlMX$mpSAbg(rdl1i#VJ$+{?a72)-+W96CH-xK&swy(FFU9`o$xM^(Z3yamC
zQ2Uj#sIWPF*Sc`epCP2{UG8Mjgy;J$^cZcf(};>;p;7YiODD5ns1Z(ML9BPUOP0^m
ztU^~SIJ<N@Ngt`)$yY+^^skMf^Vo?+X?5+OSX{h_E<%|GLkZy#&?)88FY)e}kq;Ux
z9|+V+%?YJxm}&9I)3POKXpMn2`>~zlhOKONy6@`XOG(&@N1^!oQUpb-=<63Soih=<
zZD$~j%>5YcLN3Rw<%}Zpm7PAzL*<e~*xB3LDW|c$35s*juYyJ$TVoql=@j8A%#{v?
zOVFrk!U<Snf1mthmwtj}gSqlN0c~v|OG>-ctmDKKRd?u`W%A-<ZY+0zGv8*-`?)CV
zZ(||daHo4^R=V&odl_5gt%vfm70%T`<;Z_=2=j}e-A*o^IXKa31D#rAGT4WEe7c{k
z?Ol>*pZt!ClojG~jEK(zyT3m*?4dO{<h9x+ClW|1!rM;X?~)DsLv9mFH*3H2(oqrf
zV&M<v6U*vh2kXKp<y+YcG+p^=U(*Gz2T^$-q6(ywnu*s-^l*hO4V;TnGw9(yK>uO*
zWuwI=Aol#Y^bq67n2Q#8M_plX2_R5ME-=U9l^C2$IY7N4-~AQgrWF&52$o0Wt5z?0
zu2t&y%LFQpvm6&06Rq6=m_lOMk41uh)m_NMr{r$3NAx3|t$EVaZuxF<4n`SEmkP8c
zr}T%^(mDS1MZkskvF9ZN6C;`$2j(_*U<<@jT!fQ;@iF#~oLF+bEAb%>nzuEE-VfGl
zS!C(hxrRe<Wq{^+B?$H)(!}=&In5M#!FX9Snv-ox>)^Z`!4`gL*Sz2<$2HTcvs3k$
zUr>)>_m<-=JLvzyH&G$x0moI!R_#?#@t;F3kK95cYL(!F-3tJ8l!}*TV{sW@k&KL&
zCFJ#o7>RlJ<{-oLthm54d4~PR-KA5}4>hGq<if0DO2!)Xu@_~gtXb#t<dvDd6zt4E
z$lbVlcXSaF(5HwgH*8cl@t2@23%w%RS~#buEGE`Fnm%``l%rRPVv(n47{ya9F4_`Z
z&g+0u2QXG+Z}CTye3f~4CIuXHOGDl<jp<G}9=kHZvF-&Vi1)2`fFGWf<D+>;uG+CZ
zq&g3Xm-r1&tw!xpvCh%=Q)NdDH#N1BbVMIQtG5q(h=ajB+epFn!~<R|o=}A+;T9To
zSWH+vHyu&D%}JDlyg<AwduDWO73~b|1s+E@h4n1>n@nP^0c2=_aU|sr;tr{yTk`c3
z**`}GRm+NQAshm3W<H6swZFvfnk3R`8<xUNY$qc2-A#{mg$mRkF<_Jk|L2G<r&CVt
z6%Bdw0yGK2-Z`lCOa9TQH1_T~T~S!0{%Mv=j~}3Q-@S?})d^(>r*zbCuVo@GoQaWQ
z>44~sgWvKk%EEca-y5ax`Of0%;z|o9`UeL#&EM4Bpa03UuN}HQ$;m8XmS+^rbG!5O
zTa8d7i}=0BRMcb2Vl+i>spvkVlddlY>hxsA;lKg*_hDOCB!yByCzwiVIbc_?aGE)F
zTXw_}STQ_L<DM2%6+iO`7D9emmE(3t`qm4-V_|KvWx=iCdrVsB62%#^*#$E&%t$Ib
zM~zm7;7yBrZPES9U;Q4<-nsRc5U=YbM}wP_vTdCDN5(^(QZsZMdDk^MJR^P~ntxuo
z*@^PmU}FHC1X8VIFSX`%#e1cWO@?hoL22UK0T4>m6QqX~9F#i!J`!kQ0*@2hH6l4k
zZ{rS1VvujrAg$~g{L>h{ZC<ffXzl5psiHqM<pnnLL*Orcm;A_QyHMM%-xsYAzQvdO
z@axu0g2U}fbWUvxku6?tTP}BIHh!QV9Uep^4v7W8BRavN>&s$6N9Xq}QCqU(?P8WZ
z$rW$HT98^G{#4>hfifQuWd*#nV>D`&r7w{d*YC^OCsuxnHJf?1(Q!cWM`bZe9I&{k
z?sNb-K*qmrsEGdA761s~iMq8|tx~uAM*vyO{R)=_#I*<^92sM)MB&lJ-V_uNX;%11
zEYv_!c8tHUF$dT^QUo88;NC1!bSD!_8@M(icYP+MuP?-ypK`$kS!kt||AF4@Blr|U
za#Vnb3m(iGW$g<2*K`0(t*k)bj69tXr0elMjh^vg@Fj%uuRC&gMY;=3+~Tpq57zu-
zOY6WL3hUc{vp4GR6;O6QmmMqp(Ms(tgIRR+G$7K>4obKl%kAq0(YLi7*iD%OGrlE)
z+Ao%B2#)9Dmz0<BO4#405b!&hpK!e^$T}dqm-<i3KjH5dxeR1yPmu+33h)m;AT`Z+
z;)<graSnK^HvH+sS=jx1<zk|@^DzYinyi7<y3LX=u$&|w)S($dZ<m(mr?kz*>b4PY
zwRwTD7^vdCzhfomV!SHtLCvwu35meZl%gCY!#`7DC>Lw}KCzRc751r|mlvv?%q^f4
zQa@Ei<3TT^m=j2-^bApOlv+3tyly(p>oX{Qz4hhM{;dY}r-sKR4x+Fr&fI!LwTaM9
zX4?b=M>*ACvA}79U0%45;LRAxP?B|l*|vJ1#MwjHqntKTQ;(!Pm)kdjAOHoT^+*P@
z^wB=sQ;K(ZT9?HS@L$)G3JdN&l94oNz5;TLYO9ut!<KrT!W~inlzZ|r0)s+Ri41An
z2Q0yH)Od6BH@nxryNZ$w4RXVUH4R3YM!52X-!dMhB2u<-B!w$O(v$Q;iq`Vt!Y2<n
zM8`T-Z=bq56OY}S*e>Js?#ErgVo3_KR$eY&7Wx6%cEKS}Ne72zVaKC{VjqH&F|aUI
zf2QOT8$2tm!PQoBF&BC{nT#f2foq*i<_Y+T7oa*%JquafnKhu9ss!%_gU`SrVw=n4
z;R|(UicK|h#4D*9l5GI8Q>$dhOwA2?#|M+5kDQi{z4r!I+)aFf7Zj*zOwPq-0P*J!
zghOSw!Aaf=e`)7B`qM01PE6-Zlig{qnV821QN~lLg!!_xxsOYXQ(+-#4ox63h{~{1
zGZ93LWRtd{<UK{WVk76Y14{yJ;(i@jUo?@*!X+LhP<Sei{ocyXX%~u$p@I?;`N|>P
zJjp3moBQ2>RHW;c6I%%}9Oe%Z76GaG5iqb{(l5(y-2pcB?D`1>IbW<%&IV7Z=<5R5
z7Ut|a?gai7SF6D`xS|*K$8e-ci2+uZ`?{LW{cO$L<#Hk}4BknEfWWvPTPfG@RqZ13
zc=|egc#B!3_Q$*1>Mrj>cXDee^wDJFjQK%rFn*+A8hF<D*L~Y%ycf*g$}pzV=?#XA
z9m31ni0dO^Lbxq@|B^1&ckxUZ<^FS)&qg`d5tDBn=o?Iw5F$N8zNA!NEMLr4#UfN3
zC}#zI6{{YCYo<deSbJX>%g=%7X#Nt~=EbjNd?h+`_zOgsA&F8?M1bxYJgG24(v+~|
zxP#Jn%DtkKEoX?}9~#}E*saecza~<i#&^4Ii|;l(blgcj1aq>}UK1&!PVT@`eWcej
zrR(Y!_A8hcHw<>w+Q}miJSW&U$VwmXIr@C62~Lei)`bIrDiOQqpCCUcF9*ru_+>P5
zCgiLr&T1HVu?fCrT$T}?O#aV&5bSA2i;nz!wV%z-Cq87vztd^4N#sEi20XDEP+L%<
zgRU*OapWV~?h!$~utdBuSkKvnK|~EP6%J)ve}e{G*z1Ar?&@fbIL)!l`OZD;WUL$m
zpi#nzg4Wo-0{Zg{dEoHCYLy%9<^QOiqoSl9b>dtHbFECFPzgTr11#4rs$|aCF&WqS
zH&~@Mx82d&wGpAen7vreYx>lEvPM>Tsx(K!K5f=b8`taRC+=)m|0TwMw3Br0YG2)D
zf5j*Rm{amO9pa2Vf9{)U<x3~TU|ve}w{qXsm7Nt}v=Z;-B%=zK0)r$uC)2SaGrbo^
zauWH+^7^$HIvOA|YQ{qiC!%SeP}I}N-7hre_hI;<ty~D*mp`W@^D7*7SxS95Wfzi=
zaS)J7jkcUh53%(g9r6_}nJf<F4c8|*ZnJrU22{xT6JkO#>89e|jcCviYjVFg)=oo1
zW8U4pqC`7DO|zbR^_IxhX|1`xZl!%-Mb5~O*2epT_210>Hmim$=ltXs`lr`b)yWhM
zy!H1G@!67Zxjo{buoyuWK>Ryf-$c$n$vyINX~g-(Wnde;_GNp`%srUhJl_`!?gp`P
z?0sJ~45VQ6bZhW5d7_VVI!1tX;gG{Df)aC@gvHm4IOvkAOmkmBY9b{nNKN<lfa1>)
zb3cQ5Vvpr*a+KkGFqWWAoBr$SBtuCxwT*BKZKvG4n}R%m-r!2*V1#p&wDOAfD>91)
z9!Wv|q{)ZGAkp7hw@TY3uJ78j76_s1Q&iv3n;VtwUN~=GciMzPZO0Ieu)6E)>x8>Y
zJ?O^UZb>6LA0b}G%JT<tNTEvA{fY#$LVh^SQ%;eo$={b<8x{K#@g0G!f}L_zY#LF&
zwdzvMJFFU5af;)iV=QZ9@2{m8KFC<>aSLVg-k24+U$pfc5H*c?@v)QGEg(XHzB*Yr
zS`fFx66B-l%7JxX1U6mnjL57lQ#TwueZBIise8z85!B~%&eJJRQ{1;2sISYWqt#)P
z-Y?FOdiro0_n{}SY)(i>0$X10$VVl~Yc+KYmpb(vrf^*~g!oEoSyWbZ)s}K0u_+M}
zx>4t9%Z!-V5xbME?7Rnlfn?^H$|ZU885<TMu6wJ$V5>+SxG68Uyw7$W#<NQwsKs)C
z=R%U)@8U4Mj@uV?MWT<af(i6(4|eL}8%b#dGi651vwd_oIj`Z1u7dHPpW$xbCY)D*
z<+Ru~j4g`h1P9Ml1W1Y+W%X>8-2b$<l8ne`+dzs!Jni!nY&!aE2@HC}D7C(X>5}bd
zvmGVtk|w&x#_$Zv1$8l<N0Zl;SMwCyX=B<mzOr3S7-c)CezEZik<UB2ko{-Pchy#X
zw^uT)b);cuQan0H5m-Q(C!u=SWJ-$;$OMiMf=W7`*k$(qJlT{bT(sgyy&73KA$xg?
zUIkEEUqjgafMc2wnD1PhUhL=pl?vczEm*eWxIl-EPr~>q8tnDMxGWkV7GjGQokMo}
z!!=To{~d_3Q*<#BMF}&ek;1&=*hQE`CcGMKETnX>s0+3%0=Q}>j3QX%TEMu2I8z1&
zbQ9x|2{iB6WjWe>-s9y{T1UYNBYGhPfzX?H0}N)6BeFJFz+HlVPP!+!0zfHb^3Lh9
zaAwJ>PQxADj+APfBA=$i?vdHc-}qk_!CQ&~=GQCQrFvATi;a0!GeIa_{u>Q<q&F&~
zs4-XCh_YWYEA{4UPu%2oPTj*;k{;bcjs6Y9RBcZ(atbNv-hq40dR-H@=E(dSjAsw!
zIxiCE$YBjcbPj*Eq6yl|LB{GJI`nHNQ_^EwUxly7;xn+C>K?Z~J&TSs@Zru(MzkFd
zUlRDN1Y+cv{(o@}i6bZixY9*NH<Z9vTP(ZIRt(&7Uk~;}ED3vyKe~2qWh2uJE@=pm
z{1?qStGD<t#sKuJMchBg3<gT9i?Q07<)s7qy_`$eztWE>53Bfs0nPn^aFjOo4Ow@Y
zm0f#5CI7{zyp5F$X=rIPntSEk+no8d{*$gQngCpIT?7o+-DZ##s%IOLy(*`V@pvZE
zRSXVszs1I{Y|pK#t%@xJ2G5nhXlbBC0&QUJ?qOy&^MS<w6JofkBkHN9`XJ+$#}>{)
ziE;3gg6+2Zq934BcV8Bv4JL;3cb1mlOQ7!#a8%^)*Hq*VZlf$3Jr{2XkPtxdq_%f1
zu<;ymLFY@=<7AVD+UKQX{{^PK5XvONzD=UvA<DGw12#*5#JOWl0rpGmxcCi`lNkGp
z64^`fza~E!F5C6niZPgnfS~L8BwFBe_}{L`3~d4cxKr-V4?EoGU3WvnZaygD0U}GS
zbgK7fD6N8l9thHB@tlxrjbtZS%5U`o%*-oQy{yI6ffg_1H=T8qkylW%^DiCuV6Ol?
z$?J(R&<%eJS(3uv3l@}ZQGl3Euwe%VY1Kak75C{Fsh`Wd^unkSra){z7-H?%5o`B~
z0oXyAEbM0@e^7OIPno+T6F0+o;j(AC&|s!!h$r&4G_55aj(yMmm7FFx>6p{8_)fYk
z^D3UuPBa2R(sdLpOX3GyxBJ^T2Pm5sazj4ZL@#o9E#q=UD@R_vdt=DkIySAykD3C&
z%9#Tvles@}W_};!F(gRB*#~LWb%wo80~&hLDGN#Bhwf5nG6rmXV%ag@uAzM`z^G5*
zY`n8}mQjbypPsaXtshBwNQ{g5bp^&CIYAOXTwz~L1(3pB6a88C;q`V9z`}A_R}X;h
zwUXPVQ|B$PGGtorU}_luNZ)R_RW_N@bkR_q{7#xW9OZ9?w!%ak;*7>-j3Mj9-el14
zxgQRf8SCj3{FmR(_sX_x51QRss==TVn5y`6H9*FTNk~T^s0!DbZmtsMwINP2Us&Mv
zk&>Y(UtLGJw`@HO_!hFn3A--G&SS@_d>J2CgG|~@UvV1hHKA-@CrK3&+6rBx4K*rL
zm`#ze4TLE`xt<~DXQyNJ4bxZ*h)kHa(R~5xvwZ~t-2Q{){?uy4Bv*i|H@)ZJipmRu
zO?EKb#_#iYtokCu05jm{exm)SYRtjs<@1(d%|p&Vf%F{oL~%e7t5OQj6~~L<*#5>+
z^8_y$4X&>fbwzZ(@jwwM9|)If>Tk3fkytV;yKRUJL8#ppKg=jW6N8#Wo5SZxq9Lk5
z_(Q0_6i~$F7KN+-Z~6&r4Bhu?qB*pmga&V<Id+1=AGvVY-%Z)*q()k8aL+0_x3ahB
zS;@Dxcd6=!T4yEn7qKwUlBI!q`HO@&=h#89<;ARQwmB)PBt&SULPZoj@wJ4Qg9ld5
zsNOy!S&5l`7q+A?iF#M>`c70wKjE3Pcq}Q_<I~&7%@m%Gt%Y)qFLF`nX5DdYlH*+h
zTY10TIdvKHjE)9Jj64ii*>9dk&9r#$K=!dG_AS!~uU3GF78y+v(C1aJ=PLIKvse!N
z%zXrfle$uoz4TU&8@XzF?I0?EW^&|Wy8-9|M4w!`sn*lFUa)4Qc)Hb67{oW*zATOM
zVcL5P8G{gpVz1?!3)ddMwmC+JLE^LIdcx;WU2fz3(F0p8U_yqr+Fca?1A4xiXUOez
z$AcXb9J%w-)EO%tct7&{Os^oP;W1wb_}vv$<iF(8?nHaa_Ltc1n(EuQ*<>av^`KS=
zST>(r-o@Apu2E8MR4T^y=P{v}xL^aczV-bQ`2NR{c^*qTlN;O4{qadO+!#ARFRg{c
z+Lq$lh{28{pr+0w1BkVjK{RSfL`D!XaQMurwrfepL;GGJCOIpWXjG`}B$d=mTkD~$
zfjaHS;YjW0eMhxij5)P5A`#~{)%>%<6>NI*&=a_b(n>vy!U1<R!WVwvNfBesSIkSS
zT3s~J=+^BuClRm^ekc78%XZvgHr9u_<aQRb{U}SNGYE6RORvAiTYbmm2-gl#E=Y*|
zDb@PiPz3dn12k9A8*eUtw645$o|I<?)Y7va>P?#v653+e{2Oj6DU|344ALTjBKVU=
zxfcZ(`mN*ATFM#m2wV<*qxw0{2i*zP$NWgjP}vv_c=j$2ga5f;`_MiRv3BhmDHV*w
zmBQh+g&eda^^|J4*i4gKy#gzdfD8A*l5}%1NKO-XQg_zj_5-{@Z@T+C+PJL_O5~jS
z{bylP`6lHVGAqF-4LNtMWE2dn{8oWiaeS09$IJp9GaKn}-<`cr`Z0Rexl;%A`w6DA
zVh10xkE{ZE?Dt5O%WHk1CoHib24J^pmuPw!gUXZQOS8{u)iU}T$mL=bwo2O)c=a*y
zV<s!Z*_!sbjxGpyl;}TQ2Z<O#lc~hUUpQ(045r)m`Eo_rjEt_qL$QOvNQ~NtIJ?^1
z(O2CiA!T&P-~w@PW;O6a*b`7|Bsm%%8<wETVjx%+fSd2B-Z?@a3Xl|T$mcQ|{p$!d
z<SFiv!WDNU4##u@`oVn-c+JABw7j8a8~)NhoXA(LTPAL@mD%$}HXjPkYsEg#%sR})
zua$-rKs6L$5XevtJA5i8bM0EVvJ@m@)$e0J2CS&~d~$*A4`e7#7%@xCK>Am$n@tsw
z-aa=h^5VrVrZQM`Vy&~*a-p=k_P+WhO{=FJ>_C}mHyuT76a7!F-JdiAkiAG!xcR=}
zh{}EoVG3*vCCN1ILM`e5kn@xnNA|xKJ7_!ZJD+ix4ywO_P!aBx*Y2#^Nqx%InD+Hk
z*p?SQG~K&aQX-sJQjxD?i~BX;5zL>4xdP3!MNq`APffP#z!x%!^aMOW2YPldXIGUs
zX4?rJX9x4NmWTV)g@g<rhj*RbO4~t<o`*5hx`vw(Y7mjCOi==2fGw?eC5c<j{UJ`+
zxc}QJBj2^wUQ0};-o#EcEPgD#?vW84RF`5&+LBx4_)L`{TF~ND1KN&DL~D<f+iCp#
zrufUGD(F-nPIIk%)8zv$m>1O?>)5>3{`*ioqp+>}LkixYXHsl{aCC9R&oQ<YSdMCp
z>WHSxby4H^oqaULm9NNk{+n@3Ic2=fs6X}hNSA!d87`BBkUNHal{IH%xt1&j!L8hl
zI#mf}-$Hz(j16udLD8yHet)b(ShVn@p-lQwvupd2SkD%plQ+CCmYmt}clGADr|0zZ
z;|8a!9fR=Y>ThLALYgIV1Kt;1ffA_#ap-3)<LwNyEGuau+R1OjU2hg*0Zbnl_~K<e
z=dFnn>yde2Aqr<;?#Mix_rKoO3R_$>sf-oyt%<ge3jnr{d#|?!P}u)&c9`J{`Bw<`
zst{~kU7{SP1A`0g8}_oG;({dIywk#R%D{IZaJB7u@(ri-HqS|Gz33>Li5+T2OFpA{
zBrn!UC8ym|4rVk$9~lUXcr%x6Osw;ap@zv{yPC#D)kP))%5#&i<vKGZH*+W*>O(yW
zb0-cXCOFseQ@-S7MNvy`ZB*jURb?G>&?)#5H$`N7MSH`JqgK{@kPEp7Gx4`Y=XGl~
zxbSvd5RdG*JNYEOd+NCnJpW*)Q|qjwin6;J8deTChMNv?ai6as<v^ZSDRzdT<G(f1
zg&Z8I?hy{7rCK&yxc=V4(|&apc3;Y34JSf0nkqrjTPnW>OpGid5Ss-on*ZeaA6ggM
zY8?)L1_6mg=fYzJE*_$WC?tCr%I*Ndoll9>+R<^nd5ZanA(gNE54gpvXG|zLOWent
zyE*b)G4GVF&Ac%-Uq|>z{(urs)d_K-aX_8jDqrC1lJ#`@DLhC$n=3&*N;*_0x0EJJ
zjMd4^qk-%bZgyThVJzpG0@;$8?15r^*;TgQH6K43{Td$RT0_f=ryuWtw`JpN2h{vv
zT5bV*ujgE*TB&@uM11RLgEm)RH)`KM9X}862u|@FnbYWNxTaVa9zoPX{-H^mIKDmp
zf$gPXw>aAs&<4A#LJwI_4kiyteyQ@WYBjh1uH{BEJ!c%se_oy?hwaZW_t{?0;t`Ad
zqOa+7m}iLOhb)B2L0d<~6`P)>Z*)zJgbWS+2_%Ps^^%qs8$T5I+@YX`vP9_<bl+g`
z4fw;9rK;pdqic{V(_G4j`8lp`3jQ=}NuRW&&(M?i-6nmndp`#=`(yWgO{D-SxzMw1
z{mt5uKbLY9&ekF;9Bs3)cRk(eYQIjF_DpJ9K<Q&Eu^jxZ0%kKXQ@}25$x3|eqhz~o
zi5XLpVv(YDpz(uVwI??FY4rQ93s^XwaNE7YKktBh0tmN46edh&ndN!|hh>cvdh?Mf
z3M^jO$;r$*Sr+AAxo$KaC&)qaUTt~A@zmX<0~#i}PkR+5)rP&ZRx=!}$czJ}RO9eZ
z=rQhi2qu~ixF5dIrtHcGxbEwQ(#Grtv-yU)+P)_|IE2AZToyyQyM_Q#oe8cmuvjRj
zB&5<A=Gy;N<2CzMYUIdNk2jM*eH7ANd`%v1@LHHNNS-c4cr)@omksTqZ>btWCPP>c
zsNTIlqDLm$g62n2!jPQwV$Wf6xs$1>MD4#EWz8?FWexBov+X}Ump{B|YI}35x?Rgw
zYXHp~ob1z9tkiEpyQn9zV=zIfM*>(K!|*tF%&{0Xeu{esaA(c8uJ0>_{#2t^sI~v7
z-Bhk{MCI}v)fRDu2W_|o<GS(SH5yB)x?RG)!axk_dyOXWaD3T!`CL-{P?-$SHW11@
zlfZ2iX|9a@!aNK;h;S>DO1Ee{GOh#|H4qdMEzn#@VEsejH2x#dfoG7s=3rW+$^laY
z_8Z(zoo20?>rya;2|vB3`BH+<)m_ouOaHI5wV-;~JA;k_j=Yugi!ONYE_~ORpYQMs
zpMvJN-|nZ;b!;|*u<*VR^;YD*9Suqxjog0z*{7GlZT=Y=RU4d<$rt!W9d;=Va{D~$
zdpY*%&>v8u9VW%@5w1ui(&7`--5rvklh)VORF=pHf~8?@;JJPz&|}F%YjiT#j`n(j
z(Re3XF;%r_Q*k48!8;%+SE|HG#eW04O)2b#G3b^JWiJLe7r6d}I&P3X`#x;zi|VNX
zinD!>@7$*sl|kV~^J?Yv2d2f|UF~9|fdl_h(}DQJCr;9L4g5tSxBy)%ErkH2Ylo|N
zo5r;xYnSr{6B`n^nBdpS<#wN189jLuH{)XYKrHJfIb({tv1enaH|6&%N)fUHV{J+0
zts6elY?QePDdAryK8<|zQqIzJosf_exaTM>4JXVhBF2<Lntw1Y07I2GW+?3TDSV`s
zi?}m9f)E7addG<eFPDLOB%~|$wA$b#d_45v$38&xqjOFtJEp?QS{sWPv{E%tQA4C5
zO0zS%A1wDy+Of%Uee=5W<uSufT4KNnmHNM&h|i%a#tZaL9fb#h%WWa=<8JP^*5|Se
z#H7%%_U)*Gr133~NiDMfhjw9vQc(ZkEvJt~i8-E0f)&VU@o)ar0+HnLRaZUS*4<r!
z7pWcaLb87D$i0pCJ_p)psYTP?LbuP^!3U&_6YLU|9mbn7{9s-9@&gS_$<5dxCVW3d
z$9&2NRldzbK6ReInCc6=FH|$`$k+iV4JY{JAGmDURQ(Yp%1pR)N@m4K=?t<9s}neB
zw{)=4L~yT9;s>APB+X>GyZX2F?Gp&Ty@Hk!Da6IH{?96~Iu*`+r}Ng|%3%55LbXIg
z04#I9m0;|6@o2u4yUR}f-WcatQ0iMFZ&9lkXr>0V6IcdCFxmNEoQPHcr$<a*>g-+0
zP5#krc^0i4PEJc~KV~bf1bOK5NmR++RXPg(tCgYfinnEQmm6dEgy|0Mk6ooydQ(=R
zT~JkXif-s>zR5eSOE@jb=Ew?FgW-r1?ZCD|aYK!eA0!k0k=50WJQI$f+uaxlN2y0(
z3*$G=lQ8OCel^*yP>v-G1!9{+zIz$ds_i>LK^5+vQ3R8EJ3dERb%J!_;`Tl^e9IMV
z@4n3mnUI@hAKS11@ftv7ThqR%x?8S~y~y8)U`VrtpUD77>s_uEz3`nZPlKpo#`0%T
z9gHm1Xb$kx+tn)J?XLtOv3#hOLfH-dnEdc-?4NUwf^xKRHlMC)<9lJ;c6w9i5$A;9
zV{^UZC_?><thmlX7V%DS#Q<MTsb|B4syAga`}{dCCUQPeIpTn{qj9j~m{fO|rW&@6
zF>#)Rsv9o?%Uj>eB6F=vsB@cCjsE(oOn+TK*JM5gt+C+~(K5oL*_)t+d`a?FSNISp
zz=hzORnLmr|1dIz(Ot9>>`P)whFQYTqSPLf4+G&e55GD_b9#fPYn{&0{j`l+>%n4v
z<MsP;X%y@SsM8tE-d@p&Y1kg%-geE|-uF;YsY21xndr0;lT;14pOJcjX%fB-Fx6fD
zv7c(*s@qK0y-kVUFYFVz6i@JP*`A>CBBxf;UKB2|3}bkS`6)q%PxOx9Oj?wPAL(LX
z?p{JYpo4l=kvs==*MB3FhucQpV1gj#RzBZEAGO)$S)L7(3aD;R#8wo5aD)!z{&~J|
z&8k*9k54C;M!+7ZW184FO0-G`tXT_@zm1!a5JCRFAstitqgp3K{hTb`V%KW0+dy!D
z>4PlWi?Elwo|R8wQ&gCjWCP8A-R4Amz0G2yRWg2A?s&1bX{wq+Rzh?NFykDm#tJ1m
z#Ab`EmG0GLs0AHfu2c?A$*lDOKa%Fb`zJ<;%-W;Nwj)(^aA0w_R<4Hx<)Rciq{$0d
z*v|uh6>q{!@FWmp!P@10O+TF3)(XiEjEHd=8I@#1741K$$msU7E}e`+tC6X`RSI9`
zd0jTlVWbRId30Ka(r?i=k4a<U{X$ok|J<qGR@<&5(j9Q>`U}|gn$S+WC1~Rj4VSY&
z&DC9BbCxe!D6DBGS58mFYd?Aa*!O0VX?H#43v0&${`xKQLycu}DInRu3UHT0?8Q(k
zpwkofi-G!+nZnF^^Hv&bE|@g0{%3&B2SjIv38n`;z_i5|f-@A~ytq?cw`QDe%f?}3
zb;^Fs+3AUQdxnPkU#E#0-}Y_tZG0Cm<B6vhDY)`VLMUcL3WI$WW*B4tksid$(o6%1
zou}1GYBgy-9ZCY8d0$1BJN%pg;v>Jc!{f(t>Q&IheIxx5GGxMQ&U(#!V{bLOt*D#b
zP2icqchz=T_~!}xi!YlhMZnHhVOL2RSZLZNXwV?H3^hGgUkeqr1sLg2GAkYJX!xSx
z!P7lEkJU0EDMfa#Ke164H4VM&<VNe0+h2~M^i%H-Dzj(oufe(}snhDG0%Or`rcPj3
zxw@3XaKCkZGY79-X8kl59*IawGSnzYynOZa<zdcpbOa|VLqS&^O^!9(-Wt||NMLQT
z^0+C>9M|RUB@A)*`fQR4J{z6_6$XE9?JJAvv>)(QO~a<|b%Aweq!YcVw5IVLUV-0S
z+n$1=BL)v}=FPtV^dbqaee<pQ19R1^6V}uzp{_onky-S=4NJDJ=kqz5f7EK~ods|i
zQn_06<)#N*wv)I3QVCyfq-u#zYRXu6-1{yWm}-C%V*urnTqYf*(GI6p{*}A8sv4?*
zTONeAo5~-Sk*;^hEl*|^xIonE9N06ps`&D`xD06ct&|V*Bv$=|%39vVg8zdj>#(qB
zg5hqKOl7JeotoM{pG}@aRB?+8d5XJd=`34ICa+?9<7}Ap2>43DaJiUH2vqRK#?xEO
z5~iCX)dg}cS(G#kGDR{N+ZTDCO3r(%#*{9v!B6-)5q0naH=`bNdYp}nc*@0txcw~)
z))e5BdWScN$;&PA*_<)&taAeAQMk`rC+9wGjfnQ?4q@9TGX$sI?gU5SUeM9}*rl<4
z?v^{HBzCHJX6Qo%pjBXpH7`qSbaKBTf%vadS8UW%N+r9{l%Jh-k3`C0wDW@Oe31Lw
z)2>FNfk1fMAsTXT|8#j<absqH6(&P{wp(i&-LeCvz>jMj)^kP6I>*(#e#=4&R@b+M
zpqmNId}trlKggKaa%XrE0Gt^MOC}^#9uvxGS!#A7T>>JeVqqdW-bNUX1OYtYOrD%&
ziA<&W52|i^%;I#Z7*X65!o+0W(=Ke(`%=ekNZOs$r_`O=@ZkYXOir3m>m?lx%Q-j2
zI^<T7k3x-Tm8!lvmZd!#K9szH|G<_J2O+-IH)m4bQ`>KJgVhR!wa^S&{CfbxnITAR
zCGrkEx-v^fs&-o<3q&L+GS>`2<5m7!f4LGr+0*Z~?45}gb<jaboKgH)s#u3|&d+wB
z(&Wn~`T}AEveG<i5q)$Wb_kWwVI$p4(H5b|N73j&HkEn(|FJc7jJ_t*z$$p1-1Kkb
z*gjiXPKCZ#)p^R7OaPbHXZ~NR61!GXrLEk|uPJ*hQ$~x{D&QCNEM3s=0*lOM#E}=e
zmA{_>*ye!z-q}4dA9;#=&Y)q4Rs0Qkoz%eBJ^p8J2T<Yj%(~uLR4i0k?QLN$5WKWm
zjxjzCX6D4_S{@J_vCMwhkKLQXoip|EXs+@S)(@M16TMWG^hwVtCveCJ${HKMCc*+E
zNIBxE!;|Z&_R=lrmzm9;deYh?mM0vt%_Nx}j8ynEbKC|ubrdHNqF9W2P<k8YycP5l
zva&SRQ@c~lVvkz+;4|Bt4>!C~85|&;z}!`c?Sbo%{{>F_ZqvE5mBw3h9S3{YVGgm1
z%4`z^c6}bsPo>5#MoxNJu??&)Qsc$zBgR<qNj9wji3<)qtn~K)CS%OltwtPXuCdt%
zET07-_F+*<U%W-X`=yBdN*qrWJ>WyEbTC4Ai|Q%&Uhj6FLWqbc2<W3JAD7V?oo+*Q
z2RmF)ZB=wM1`HdfAbkzwT5c&4>~S-=*;fMOrg?EcdAHZi)G0R^vqRD}&SLw@0fN1n
zQg}v{&UyxRvbIvD=*TDJDI3ZA&cW#6T1f!qKLpI1=94hcncXBJTX2~fz=|T_5}|aG
znf!B$jdh<4dHv~Zm*C6|F0Bka*E~t%3gIiSO4QehmJV4)te__@QV-~xt&+iZvL#K!
z)&Z@O;_*H19%G@wT`_nXN~%5R!YwNnP7>rj#2*X#lw@Oc7~YEl_7E2BT`wjd_}V&K
zzzo$q1s4uE*PP=bH1CO%#GAl=>MsL*lMo&x<4jgt+z5<x%^#oZeJ**Y4K|1W@=`g6
zB(H~e9Z<O-v+}WtixC0C+QxCq+lGrOf>KN$u2dAL>XKcbmC^j7aIbY(5Vh~9ICLC7
zK%V44mJK^{pyf%E6?s2`29EA;A1$~8JF8-gT9k^qGAUfdD9peRz9AzKux|F6NaSb0
zwLA^@5)Ny%iQ1FTlYxH3E}pG%=qjNRv(Pbk6#MFc>*Z*LcLe=i=)3~T27hCO5w_IF
z<$h#U6nT=zLcK@NyCLbpIwG+%%wruDOd~c>ulk>PgAB>a+;GEnXQ=V2h>lfkxo9bL
zK_!=8^hG(hd{GcFfYln4YlS?$#GDj}3G;(GH_hB=u@Jih?qEm2@S9-MgE=twVB#nW
z#zuT)v`c+j5Z0p<c&Y?_kr#gurmqRt&_1XV@Mi-o--BlwJo2l8O2p&Qj?jK1fexAd
zVvgk(#*mk*cf}6kI)(Ayv`lxsfS?uXwoAE0g1Y0)WvxpMr%90~p6npI)Bf_oIR&Jn
z5CNK)vlA5?dJ=aM){=l=a*mmzC-URkS&9DUuHyt52SGN76n8<vD301yf{3G`h+~mm
zBghE;6P1BBq4gkP(-3S)l=T$qLIO@-H@*b%2xYX^VvZOIN!z||>Gj882|M+8P}v%V
zX_ttrud}L@NfcRy@qu4C9(%FfM**u8{C*JjdpUum=yk)DC1;K8?L$K=tuT~sv_drR
zapYLRVP*s**f@ae&)}VFx$4#{0{8@L<+0z^16p@B{MbKSD!a6o1jqEvbs_mdS(h7e
zu_R$vZRp>jo=pDRdoz_OaAu5n3$brT$?I|)EvfUkR?wz}l$W0^31<oo9Xb+YFF<!t
zDvaxyO#Y$DfqtHis%T!ts?EXhaJ78jl22BMQW;mf+P|06XM;d!I{R|}dPx^~s~#<m
zyL7nWO&60PUR`ExREQw`-fTXLv%7qwF5|=|i|U(O==!v`@ILO}#<|!-56^qx-|zG;
zFzcb%Yg|gBLO&Kwmx9?rFSXH>03zB<Z-H)(T=HNrw`KCXE?a+;SQSEG+A^MzIK|Bd
zeaI=4hiRGg9vm2*rj*wH<qAKYU&{chhVBkfVG0h`{!idSfyab{nHZ;yeyP@?g@0C(
z=M%Wl*gGL1B$L1LhaUt#4$WVURR(Nm|Mnjh(M$b@m?Dhm7Nd&Nnd-3sBsgo=6S<n1
zDJtvW(@4{$Ck}#lPDd^ZFER9hpC~WaeH3Ms@HtV#U>~TE8_Ub_rXSL|A+wQ~4#pi(
zNMT3<L3I~WbwACGznOyRd05zZ6ZE+@`Y9+b)?s6GTQ@;O-`t4)SvrgVb-u!qjnZ*w
zw8F!>Q(ice&28oIN_{9TAJ^u&aSa@DF$k&~s%v~nH?P^^7-P3n&A5w48di&R1&Img
z*xesPqb@5v?hcm~{OwZAcf+XM#&-Op)_eHL04E^uR<bn7V}D?W!jlZd6{*n+J=qV-
zQ&h370r;Gcmf*~bM;AQ~*0TYxXwo-mlZf>PX{nH<JSHNtBS7nFu)d33DKQpz|46AU
zM(Y=Vb5|LoQV1L)Bo;#uidm4}ihHBz$*h-xTKZlmSr3srPF-Tp`-l1rf`6kTXh<3m
z_mbBEENM)@yB+vbP8P2!;oizE3@Q?Th`2PU*0w8ekguNd(IJwWdJDR!mT5a%Uh{mS
z1yysl%kGK9rlxmB8*dOf;O$K|9`cL3UDL8C^7ddjJ#HAuBV|qWJ3Mx5Sf{Uynl%Y`
zu*0(^R&avg1C5zxi0xK8^dDaj1&V#j9aIfXf5=vS{p7eMZlBk_$bqQtRs)<kWe}j6
z6-4mD2pX*%6<RnEz)Qf?m1vOT{M&e&p*(eHp-6=!ATlU_FkbtAjV<~Z^Afm{C(Xdx
z^uxtVS~%GKKvX6@O(=O#={T~WDO><4-qOmD2Gj_6N(fiS-F#}SR(OF;HK0_iO<%hE
z(`gd+lCFO&AU$jn_#BWElqZ@Lf~q>g7X-g1pZ4-9sWHLB(r{aKnV&No+zNS;Z*eRd
zQ5R~s^iQZ)%a)w~0XK5s8YSS|?aJ5kSdn=q%aLi?=K^&k?vhKNn_`TjI|3AILT#ul
zNygGSPoTuH&kdy<PTk_uiu+KZFC%IsnsVdLW{n3@w-e=x;^4v!zJxhtc!G@K^UfxC
zIJO)O(`QB>PM2)hP9CqCzipd-5KFp_opIl)7~<6{#5A2q0yNwHg>DIuReS$BAoo%B
zf7!80R(-)PmEHDMMDda;em;@a5rq_-T7f=%wgYFUo#Un3-F9+A2dGni(5jgx0F%O(
zsO^3XwdIXJ_#m9lR#a~u9#?LTKFE#!s}9Y{hh>fm&ed6)$;SYqkv!SD)OInEu@P-o
z{mDQY=A~oJfE<!A&eC#<jVt*f&jl()P`p9z|0+nReeTCHTdy7DjuI6DUD9P_?)a_o
z5@+pcjSx$19J^lY9TZTA)rnvF)GS`bq&0dQ)L=*%qD`)Af2U?X^;tWx5%b76FpF5f
zs9l|tgcYs{ys%kbkY4sesLwIH1Ek!?vsZl^yXD~@UZB3voO_D*4cX|uP5M~ZEpA&%
z*>QHm94kxdGw$BpW|M=^#_-V#pm)sQ6{j{M&kgrpp)m3E?D5l39~&&mvp^P${BZ@P
zx+I`IQ!H#xdxJ$d<g@Z(ns@lY;WwNscnsq?+RVX%^G1AoK6?P=z?4#{Y)S~Oj@H~A
zgKp&bv;rCodffn?_w}O=HHItu5DG(UV+;7D5EVy9^F_2kC0C&3kQq!~JmbbJ6)~B@
zBpjP%6O;qjf+txZ_1;Ob|H4zu&r;PM(1uf?!uyD(MB#qMCRh8nqnE!qtrd6l88NQz
za%VA^-i!K6Lc3L<;JLJhP5$Wx3QqqXhtJT7Ih$~Ddt23)-T91dW|oqwM?RSk&<HwF
zbE^F$Il}EDfkg$d7!*geWqtE(o6)GzN9iFbz;8glemjg}rz5=mB4~bOEL#_~z)Tl&
z18v@wPxOj25}XA&bEhniiS!&0aU683V$cV%nYmL@adBy6Tlm4$T|I+(fYr`xXhqKB
z@$5(kbOW3~&ZW_BH-ST5d+K~SbApzfXi+8ju|Wdxd_M&=2H`~UT#|g;tR!b?D=|+u
z8=IOl9Sf?8sjzHnk}cgHH`y;sF@77%J^rF7lglh5xE<F2uLIbVi1&!~5vFD-JrA#Q
zIj`kmc4B$%?Sm9vUD?>Il02?G$wpdYAcNIc7@u18ZflarHlxM=0Qw=LO+*okvGR<I
zb*F}guzFyEYMsFctL0RCOMC+(>bW$RpV_|E%mc+9tcP*2mPbNH(k#iZ4hTET^9(!Y
zxJor6K<j`nAB;j@^d`ior&i9&(whE#UMVyELbr^xUcn)C&jxtO#4ruQTmf3|QC=n_
zr0B5%3{hoWH`QoTi{RzWp+`KV5B!%4Q~({#2`;#}4d*IDC)rWHJ4&m&HHWcrDy_H#
zZT>-O?K2U4dl0)x8>l1~9U5s`=+v;4<D(Lp@muW6XdeAhU1dno>314cADNdP;E0m*
zMl;XHRjm0rNTo>Vder0qCi+d?aFazyFunM`2xmtm)1o%b_W8RszvKQz#7sG5Tn;e(
zF}k<M*#)8mZkMWW0ySVdFIo~$H<FG?KA7*kZu^-`E(MzD-Z@76!9?4kC^Ch<y%FzM
zS)HA~FgPKLSA|-vHDpf{(HXcS>LBOIaVc=!EJss$OX!VIs)xyAvVP=&%mmsF+PGtI
zgU)6ei%8r^XNfC+6<3R4o&axfle&=TJ^al2J_J<ckMu6m+D>s^KDPFC*&}|v^9+6)
zBM|b4WSw^~uTCT9<w^AU&!t%UTmk|s9M#93sYj<ZKZYPi!hYOuZ{|O9$qpEjvG-w$
z-hI5ClkVHKNMo}n*LoaS$*$IvGZVG(@lw|{hCRch8Z&CiHJ!hnqAdCXAjM3gJ|3Uz
z=m1S~Z~+0K10VFztvC2LcY&$w!9LjGl3cX>XK$a>A}HYpt+*uD(h*r>3LDev7%z)#
zaANEzIU_LFDY6^qzmertx;z=)nZu>Y!8GK?r2f=6boMKN+Dn;Awx>5OfmBDA{@C-?
z#k4sF+|8VCp}chmEc;-EI3e|L67q5cz9Ifl+c=~b@{H{fexcy@gi9|zIXK*(q=)Kq
zq<`cUTy!Q(V@pGzk<re?pMS-cWE`NVr0hA7)+YA@e1mw1NB@QIS)A2D@RML%!5y~u
z*Usr^NH2{S8L>AH1AG}Pumxv;5?Y~z=VnV~Nk?ZjIF4L5S)UIbIZU})-2Vv;K>FuL
zG#I$+Al#DIO9Ri<CA+yK;f|FIW;I`X@wTm-_OR;4ec0gZtHOT*AtNn`PqR9h#+xJU
z1;dty)9Jip3t+K*<OPZ}MM!m$<o4NWr=tj=&xJ*V5c6b3zpTk3HHL>*+y<jl;iWO`
zQX^R9Nf5`4f4hb|^%U7OEZ&HgaFK(6zjVOL5wKmeyk5nfkWKx{jG(UaCVT9Ne()$*
zeF&prj#MW_6<$VQ*d;Hs+>6YJe}{g##NaVHut?PCFx?N(hH0))raf;|8w4+8*N`K5
z>*R;FWn*gO03<00ev+~1ajrSH*#&}yE4M&S$tiTX$cUnST0+ZvQ=gZq{vqk<(RBDY
zDV23RIAKv8DTL(Sr$ux{(d_lmZ1`SB4V^4qeTaY*u9<`y{~fiF%62V}S*oZrU*ZVQ
zb*>tW^ohLdvvkDf{8P8TPi0W!^^$;XfC5%J5kL6(PC|%i9Kwh+IzYMBlAtg&%ZGrY
zy)n$U=YnH+3s6xWkh`w2fWyn`7U0}#-Xq0Y;Kw2u32b5;dQ!3U-%KQHJLt8dN%2Fm
zc6upMBO0@dqjt9;x%$G~SDy~NT<i}%D0)nH{I?Vj1Ik_>E?uhP@`4-R(7mTn=zZ?@
zvF2p$#&o(X?+xkM^A@QKvL8C|P2rDhjynN2WSenUWjdV^6)1h=oe54|g(Ob<9T3a1
zD1i7+mV2C7jMKN&P6`U)z^<F}D6|7s!E4reByrE(VmWs|GFhsfE3XS%6Vr7xnGM1U
z^o!1(j6Fh8vtsso*SQqW48qA0HCc$HS=OW@TSBYi_t)l?cyCo13cR(mm2Y4I;Lf@#
z%E46(j_x^#A2~pXU&eXtUhFBfUlhI``Vz!rj<v<1OMZ<3{4O-nVzv}(HJ-MZ2;-4>
z%F-b_1ZR25%c~CmqoJ<dXCaCbEip*qNmq)4k;4l=ueh(qvP1S+EaDU%YsT#i^;%2+
z=pofF6R9WNtlFpes)DfpX%4DlL@YWn(O9F;an)@v#fyCgs;v|$s`QsR?vhYDy+UIB
zQGO>~3r{kATnqA3q1tTDIfzG1;B3u0xQ9WEBUxo#)-}KkbdEw~KB7<*g2NUZL?9SE
z;B2w%x!RQT@&ds2!V4CFi-NQ<yh>^sZCHxmi#g@7Q)|Fc*wmt~e*x;n1BtOFI__H&
zWLKZ{oOzpQ7n1!Uw-HZ^V#CIQ28WYQSS+n?R1Btz5oyfqrsCrwEw??@rwP$Z*ywrg
zx;`7h!zd#w=w2Zbv}ztZ3n7m8cuLSMm569N*9bFUCmcvbu*UHZDi})H@Rk)e(4|=t
z7e};SW}jQoFwIj9kFpgT*`01+#-US8rKIn(ssA|8b6RU-XTW8qlMWC}P>L*Uq0tx~
z?C+=5o_tEJ!R$h}zIp&47eG34ub-{?@J&7_G}+)lclSmD5O+TFU^8>X)g<nZE|Rq9
zHt`x&LeT0dPpi4UghQhZ<vTn48zUoOd@KliZwFqLg)C<B>f6$d_ah>hJeahxQRpmI
zjwgstLWD8Rn<Q$#bnNrw&MZb0*-22h3*Qr=dRBkkyKl)`a5sdvlu`@SDZ64>S#Tqa
ztQ+!OZ5m;&M(LAohX9OkN-hSLi<}$&efzsHkbXIio#y#2nfy#TO1lT_!@TZ^MD!(0
zWdVg%J*WC$Rhl2)3UyLas7Aufor-#0Pg!<v9P9;CB=#!cnp^bCF)g+DLD5`j0s;7x
zFn3}Pr|gZ9#dVxvLr#j!|E2+~QNweWTwkthl3$vLU+65d*RM!kP$Z;1RbEl)uFUc2
zXVBrB9);hw>F%afxio_p>XHOMyv=&!aGQ*2dTie`to<Qqrx<@ZK<&;3{JnOm*EPI6
zu%Xa>fJJhZwi_2ipY9mw+T7Spp8vqx46UoE>52U(f@6J}(0CN7_c1T;s|L>p5N<O;
zB~ggfd6s}6OhM`1Gp27A_eY3EJ4^S4mIW-Wz_YMOaP}T>zWk6}8YFN>0ZpWS876+^
zZ0=PoKV1#G&eus$Qur*bOr9c4g83nU`&F1Q^A`I$MfcEZo#eGm!03xXxcr^Q4J?ha
z*swVy_dc!zGaB;wyHcOjtyhGf3!mII>{4>=XMiVj=DBL*PTFP9O9q(Th{;4?8F~M(
zapwHhEac!3a(hKRviYB~6SNu#t4uJLq5|vKSWE2(fw`={5gfby6~_(jUNMX*0yV>;
zLAfvYF_QOL7V~joZ~!~5k!lCmE!Dtf>zP;|0ZbA~$<UlCA)>$O(+)khp|xgRbWPTd
zPSHW=G4No``M0m@sI4@YW@Ib44cKf<m*G~Lk>g9HxmR7~R3kPt;Hv6pvauCm)pa_t
zDPhb1tFWOJUPm~Na@{GBhk(Mw1Dv=w`@V94+L`A<Sj59)N4gw9b*^+V5*F^)da6_(
zmafeT180k#-$hHjhYs=WklbZ3ZK6XllT*FbQeu6NShmLPKw@H_4!)ywrhRa#?rw<~
zX`lPW&WYmX6)`punzjn#KOsb^xq43pR=3vUXnh$=faSW6cZLPGF;CJA{B~0xD)pE?
zCDtE_)wGU3qg?oFX5p8?%QWo3DN3MS-IT1=Chh}6Nh7L0ENL<X{1zW#(pMaVN+vg?
z$y*qx3E#8|C?39`(GO9Ta1qEY5@gQXv)dw=1PG0h{ZS4bA$K1iceAAs6ep<GRTm3=
z-HmfxXn+La)v)c4ehk}Jc|<p82iV(z_+Bu|;B)5#@y*JnDtV5WThbUo8?Ev9mLLN%
zSM?#DC?7>#<hlw>gv3kLC4o(kcRt0msPm~fqL5N!C7I+TV{&FIDoe)_0pqAL@3q&q
ztgvx#51gHyeH!8imep+R>MgMDyl)w{7H0g*W16JTn8`&?QxvK*b!+oL<89s;1d=G^
zWSXpO0mOEhmE9lOLBEs}hh!v_DO%dZT@J(Zx^8xmF6>!U#w4VX0T<ASPf5}7Z5`I$
z$S^n(<$HK2L0G~3qDje>HB9Lq=^mHijE&r+l&C+zdFs`Dts>yIQbCFN!Ma)yEUnV&
z&o2fi(2kp5Cq0i<bfn8Q^$01<-?!k-KO!LU5uQfY`8V$g*pl}VmhP3u2R#7NsvKaT
ztUNBn&?q33rqr(yeG=ydYb<#Ck6cSlyZE_xJ!$1DT@#?At^3%w2weS|$4TyREEoEP
zuvy!()UfD8eQTFe<<}K?6+C}C{)c@nPm-!X!XRJ(C&i6ykF<G|z`l)tNbL3k35|u~
z(B0N&c4_Lf84qyB)9(VXHGkXlV(fCzPwo?j8b$xtA@0G&{2)Jrdf&#py+r>$_|s2V
znW6U*j8dtL72Z6Wfi}V3l|YPk5X$im8{8@VpQ^y%tptW8S9iBeI_iPog0M>&^Y73n
zqlEdwG38dTV|1Dn;mQjjnrC%j5JB3_O*sv{l<KR!QpS(;8DJ1N26O_DXbO*MCOC8`
zy<`cSCXaqkB%aj9hZBO71QBqCtT;dr-5MpVDu@9<+g&{3YbBjRWgo_eBXgoak$cJ<
z-rtAOVH{E?f16?x%R7Ms&mDBX;8;?jF$mVJ`x`OBg`+4$+%_Y^mFNY7#>rM%TKS%G
zz_H)9u$@A}`EU!C@dI_6na?m4ajV>PTwR&vu3m{uGU3HBHq6}-F%dhVA9_qHdlgfl
zdz&&}NC{d5^#;F(az{5k6jiL9C*{Fve+ybcn7zZhUPWhmOL@tY$&mFLEb^x)hWHW>
z#MGVt?MCiybS(m+$O#4U``s<YsnJZZ0RrQKFkzy9E8ZD0h1Qxd!bYGormJ}*WzZ_T
zHP1FRmKl;`$?y@6LSEE3JZfBPBI0TK)~G1onjB{~a{{$e8v}&v{ZOgG|Az>jaZ!J8
z$cRCXAnWk50H^}YQ0y!GY#d)Bpi%Nwh;=a~YW(N|T^@C>omHy)s1Khk3mG^WTGkix
z6c91Dzc1~3Zfnb%64YR)!$akH)*Ud^hI>imvU1&HW?=+9bIYtloq{)7<(JCQu^h!m
z{O;Qkl7b6J@^jJGmtH6+k;*7$1m@OnUs?7n9fA%*g3Mfja)#i1E!l(~X1nA}raVL&
zu{4$9!F{WfuG0+y<+ZXAKC1XlZH@%9aZqNohRcbKa}Nlfy+1S@iEdBqwnNFgOEPm+
zy!9x?A>R^ao<H2i|5a+A6PsXWEp5D@!oycWkFYKc)w0so8Gw2}Nyh?!u$qc3Wvb$S
ztyu3oqjS<;e8YKF2_crmWd9i$Mdii2Ke{IqNE<YV?9udpDASMwmt!nbtzMUnAJ6?p
z3=uRSx<jUSV#Be^6Bobh5~eRJ);tEuZH11VKt)qc>7t%~5f0q}40{y*5k=dXSvnHz
zk|$FATB}gKkiNY0$UNShEH5_9Cya?0g!2$582A!nTl5m+lrsvFgmtFNa5;|E<N9v#
zh6$g_ZzGJI_$22dN@><uZIwM~J?UndF5KHOk%H|~`nK)>+K$etgqPjbD%1MXW}oOe
zU}@gq=mKy+LF~n(nas@A_=|nJ`~l_w931#H0(Esb0%2iGKzDCtlwgayj41twkDac$
zfzOaW8BKW4zkxK8-oPrvL@d%#AQNqC)ZaEf?oE1c3g$g3=?`)FBqfSDD61(J3D~Pz
zFX#_PyiO2g+={(-vbhDG<X2HWaMGf2>m<aXfMB&InaXHz(s#GeGZ9y}af}t~efK9@
zM}*V3rnH7sR%Fw>g1t;a?T_mMtE>;;tzvsm%Neif-?@dMxMay*kIPu#Gw(5m%v_-f
zT+wBL>HyzHV%`1JF&m9vea%%uXa|x-?Vxv_Hfg2b)rPy~J|I_rc;RI%)OpN#aoie;
z{<;i4qf|_QxlU>!{`|eAWhQ#cJe1UzL)AUL=6ESCd=>(*vgO4ng(MXE7`fHqQMqp-
zV2j#3tGz9-`}>+WysN0M07*c$zY))?0s%DUYgYF~GNV{?sCJ6%5M*bF5AVLE%YgdV
zS}mVFqF-E=`NcRs7f{MV$gf*g1h<_UUwe)CX(I7gfbh%oB@;1mc>lrq$Hs~F_&|EM
zh3Me}PvSxRcA50@vpY5xa0EsleJ((&1n#i;NXhFL?rKafO!YP++L3FQrvj~-Brg-z
z!~So5J+Z&dC(pf6JI;u-kNFpIhx6F{XB6djHGxnLj()p_E>a1SL|`cu1Sjd9Rn1)e
z(?3_+oN6NaUFoR^C~!6RgxFN~M`P;m6;?2IZ@fGht|8H;1HFt6^`7V-kuUK!e_4Ss
zhZVE$T=4-iTg#W%g?-sOqALbl$9TBf0~vRrqqVXL=&YnD7y{2yFk%r#7v<lemqkI*
zO<e|*2-|wn9$YQW)gbecW?&D>xKlW=#Sl}hDV&R6&_cR1Ob~pG(2F1q5=y#FYnIEk
z!nb9=BD8~)gitZ@J7hZI1gB2NELPR>z(0F!Qj<_FeNU>1tB5$E6xR`SIWib}D}nNY
z2$<minDbIQ-Fn@r?h8U?<<QY%3>QQd>|aZ0b5hliO#_^u6aqq{-<XCuZcZpGWN}BC
zL%Y_FAn8?ffXQTJCWMN3dw`AtERufyn);&0e(*SMQ$&w=n-+*KW0OR3kwQhM9*xFw
zsY<cM!LWuN+#MpKHUmHVNDc*~4?p6PV*s}12`T4GY$IN)1Wghj2N?CkHw1}-Q39fb
z4v*gy(>e8VIY{bGZ=bZTWi`<%Tq4E04m#@PVi`<o;h0mwEtR@>N6{{S36JGHA0Cxs
zaQQP1myZCEgEg*3peH1_V?%BX5)g4i4SSpwb{KQ4&zOI5<uNTL#<)8(ew55>j@Vx9
z!Qt6>g#Ts8JE)vxhx_bpg%HLnjKH+RkKC#?2uhT{@*(Y8a_4%(CqCoTa`3=t=+%K#
zawLuNzjnh$Wh4sLMg=u%jqO#J(z^2n^l29B)tLG{y94-$z^a&)e^~EjKQHq#(u;~}
z^Pk&!M)e6(ci^Ef)G%ZW11EFHx62snMh&?wS`9T6Y-90T&PNWQ_L2@9%ak)$e#yw}
zOHS_d_N4!kf=|s|Pdf%vVrzSuNkGjGu3|7?`AJo<)h-ihtCW?wL^~zM=m7{+0gadA
zg3I`anhRWGLhpsqH{&`9dAoVvPzQr_*{B&JcT|Zkh-EAG?7NqCZmF)iZ7m%U@4*pc
z$ddV=G&qR{s(1h3GFV~D%)1JIEh<aGHQm4{h7v(p^(P5jU{G-T2+S((E;c%#-1sD(
z*}uDztB~m)PiX7a<OApC{kAxDu^h6zR?#mOX)o^3VtPl7^^vnhoE8WR+vAn9Q4A3&
zDu+R1;ppBr(ySyO&uiDD_t4(<;+o2KU>Ui1>e@zX8f3hF?#Zx@AuS;?^Ek1p_J2k9
zz~7beLM!`_$mccsWL_i;#!>RC!2r<8lSa|ACxmCWI1v7H_t5hkB=|zbMe(KfV#n>E
zc+mm3RV%&+$o{_FfZ&T3jjj+BkTTr>nfqvtcL>_(g@;?p$OK{$gw=2p>nq#c0>C`(
z?!nqE6%nbvs0Vt`oBAT)xCw0os?HC{MHE;g_9@W~D)NCzbcJJWszl*RwuzM+09i-0
zsOTY3bU_^#^S)6P1&u7aSZsmZA2fKsf5_?*Uai`0w0cln$@C`z_UTO2Vp0&SYRPXN
zk_D%H*K!h!NIvxCUCwQp$7KoqeR*^61mWiZ@ma;g_X8IWmzP_^_!P(Pt0!=;#L7cb
zzF~iNNkS2v0bdfl>}iYuF=ZZKG3O5r4JYXSKR9KK75&yMFuMwH@v@)@NmW!aUw>FJ
zU;A771DH86OIDH~AyM#m9{bb7n!8qKSw7+2fQi@ZEg%}sx@yb~cF&e$6o5OwA)<%0
z+w(6Y{(yNhmiK12<qLXB!$Du@aU`MvI7yrm;1W}`?H90Rk0#yTDiWOzk0WxjGfZyx
zg+ii{PSovtw(^UtLccAEvS@da^Guj#98N}eq#>>rcexPCa%0GZ$w%r!G*o^E5iZof
z2vi76PZ>?}GV;(@3Yzybjcusn2<KMpy@ay~9{So7PXx(L>z&Phx`{j7>UER(U^u?u
zFae%`)NwhB+Qv0kIg5YW-{ZrC17U%PH4gQp5A*k#dlAF*Qey@03L5o{Vlskd{zob^
zK)k*{uL!d0BW|hjm`_Qp`a3|1nTuUwgOe=lCl}XyhSi}?<L^0_jB@gkb1CE<lm^Fs
zDaCvY2pD}TD=oyr$GIy*P<+=b)h<T^%4ZXl&PAMk!j$DKJQg9_E(e<)ss})-@)5K=
zg>dd!gdj#Ix_2qP#*D|A*eDlZe3__s)AlTr9A(5O<UeJ}C2d9Pg9pi`_Ha4Q7SZB$
zY=Ooqu4vPRb66~G*4lrt%aw<ui)F4M8=cmV1R{d}5aet&xN4rYqIpn=@Te~bE1Qz(
zb#pSs@@!O#ELz3Cq|uZWS_nzztp_TG*~h7@!gbD$$FSW`5pNjBm=HI*mrjZZz_W~^
zup2_gY_SNt?7%iD%ojyMZ@$IJ)JV44TH>9Y%I}h9`H$~57@&*e5h`DJEOB#xqZ+4T
zf}m6PyL%hXC!a5Aqrn~EL=tiaQTXuMD+QS*>w-X0)|}N_iPQJ&_#0tZ+T}}cj3h4j
z!l_Jh1_pw&5uYAkOOx4Zrye%i<%SwG!Hv}CJm~7i6ygvIh`wW108vsLF#`;ik3eh1
z9w-53aa2v|wiq&R<-mU^B)xZ=z-!6iSDj$2EU^M3aQso8ET>;qNdzdU5buNNgl?V=
z2KT^b=V<a)1hJ}aS~<<l$4ww_UU?6HBMk_ofuk>NKX5eBY6?is$|<C`tpXi_akEI2
znNQ<aPGyi(x2Lt$y|esXD7{}9q$0-8A<El=ISOU-1J%yzi6A6fxDL51J5vrXQwDFR
zWfM6U&u%m~@iO^Dr6L+U*EC~(N{NchT`lPNmDR8V_!PyJ(V~~EKdO%EqMn%jKC}f-
z^ZvPrS8j9?aop*?H?lllmo0-qXx~VO?77vAn2?&vzpLyEP4P{Vcmbf&;|4F+(!TH|
z5#ujMUgmff{Oi9UHaLf~rx6I8!dnlqoEDoHz*@@O1$io1$H0zlOj|_TF#c@K;7q;O
zf3m)svp3RgTEXCFcBR+lzTeu=4H_~{s~xO9buKkAq|oLWEJW@0`~iTn?@0=&Zu8k$
zg+ST5CKMp0T@mDUPZV00St{$!_LCn1+Z5`V$AM5$mYtI>p$6VNRY9W7^7nSpTu}9M
z%po0vrCb)n;vSs4|434+dk%xKe4`lg-7K|Jj=iPu0EbyOWiGkRv_;{!)>YZvLfIj2
z-=U~Fa6K)WI~}#Y&(6FUiln@<SCwcu7wl7rVCHX1n=Fc2jj?I$@e&~G_7_@o$M)J3
zO_T6uWb<0Y?k>BLe*&oz^q^#=FjoBodWwUno!2meHVPwIca8G>1@dX>_TYP-_6yVl
zOWeRM3j6oJE>#PZpx5x-&3&Ot;&#`qOt}$7+scxn8WT0QCELs;hmaO&R&x!fL$Sn{
zi$L8(Sx3_Fy=>3=f02y6?!$*O`_qOl$9({}9TgJRE1Ml%HZMlMr9>NcCUW_6aE%*J
zv!V(IRclQcO9K%@cM8(zxja?wt~u_z872Bor)Xk=;p3o=Z6bLKla!$|g5+UTX_zcu
z2Bgy$!As)lWRSPioQCe}mK2y&x6^M!Jo*%*h_?U+I;RU5_n=^3Xv!YpM7|3ukgRH6
zy0Cfhf>a&p+hJ`8x+XN;pau|zFGG-42HC;*%ioC5lG`Ke*~X@~Tmx;b%F{U0;Q~pG
z2Nr!gXea!b-q}SrOd|pXirf+<4&KG8kT-~;dQfkA6Ud+2I;+d8zk|$EYY#FI|3<0l
z=$tr74+Cxq=J^7son9W79Vv@qtw@ar#%P(|IL}-1Mb8%6|4x9RAaK_NgJ7e(AYdqV
z%7~kFS{l-?6NLSFlg3%Hcy9+Z@QJ8c8aB;TyyS=W=9=`K<-aoJhTqW?f@tcwUNP7T
zd(Du5lN;rdz!C{-fVnQ+tUf@o-#R}vDlBupCTr)n<9&q>_<tSZlOn@`zhBDLU=4x+
z$I9&fkmw_ax0Pu{yV}y#7iW1X^9tYg<z-X-DZ>E9x9oyhd%E3kHP6d1m9ud?eo^-E
zQ6z+$SftoUEMH>_C)JBa(l(0nxB7dvqn?JdRCYN*#o4a_n*IS~B0bpC*{7r%7=tjL
zgy(5NScOPn89_}4ak(jV%B`DXZI%6j+-82=5J?cA>*w3sS&UvV>EeM`7EEEt+xLu`
zjO|XW>$n*7@9y}e>$mL1sT<d}{-^8qZ5^VdC>~VI7Gb_6*`g^jJVX}%WCiO`{Z>Ts
zZ{ETp8He%y(om7xl~FlqGP*7~e~8{&C-*Yt>B`-Pq%Pcr_p2>Jy=rm7e>>hU7D|je
zS?c4X>H322eTkU-km?@c$t;E}6?Rx`lc%++E|j9J@6Bm4I}H#W(o1lxLgk0cTXsh^
zO<kC{c3AFOB%O2jQ3G)JAMhatJ?y6ef!Me<3!)0wP{0^4{H&x3GrnCxsv_l#%CEAz
z%T`Br8ZbTw0jF>OWK967n*B)3n<B0E%y9yy<6a&~-jj>BeNRbxt(gL}haWYyK9gFA
zZ8~9>I&J^~S-!W;bPIOQ0f%EL2~gMvvbf82dEB#Ih9~8W))$pS+e92WbPtDHd#dC)
z&hhO0tCkky5|I#sH=EN?Mzh@iI#S!MVLf+QO-zlP3%Q7n(#8f3hyxn0?zlBy9D-q;
z+;5jUh18|<I$(6;8rghlkp~2v<nko%S;;j!4k{^DtMno|DBMp~ck8=ijKd}%n!>{t
zdmvAT4@flz;Rji1pJmIv_=pyoVEARqng>O~R<cgST>8;sKlW-~fz6#`t59K{DFAke
zjb26eJy8$gr|-)D-mWyV?`4)hU0G=TVugon^H9a7luOYBwBnvK6aHUncWZ*PP_cnR
z6If-^@+K+pHMf@8y{Spw3A#sQH|MCa8zpG6=bZdO$6=7vtCKr9xeIJ@oV?36ind_=
zz0HdQhVJ)s7UFIk6klaJI?C@1?&&m$qymo9uy?Aht{C9TIh)sVK^m`>eG85r{1scJ
zF!LYibH?%Hjrz}Ed@6jQih%;uk42T*hw||W_E?zl*aO?LpWjLNG4<cgG%Ag)o*t&3
zE|aA@PI#H!?TOs--zUF2gagGqg$sDLDo+jzB=01<GK)55l44kRvuk9vlmZFY?LzSK
zGzgm!aaLgV=qJ}8y-MSHJ?cywQa;8d)QD!t62H&7jT)KcT?rZylF@s|7W}J|fgsO2
z;eH4NmLm)R`!&u)DhF-%QAP0nGbp@I7$)JDx&AY*F==Q#(#uMft{sP2J?G&h;HCz;
zk@D%;G&sae|EV^lUX5>?N-c>onAXG&1EIt<9f&C?)EaV2F|u~;<DMn;j9nGNCevzS
zcIguWnsav48VMjDhsP}|7H9wwjE-+vy~BdC1e&;MahqCG=qjE^neBT?gV6qKwSSYi
zE06FzfpMjTrrA_i-^t%qLS9+%z_;8;2ZZg$YYSyL>LT?NvLL+_nq>8T$3&?3pyHIh
zx!?(iy?2z-7uiWo#)ECc)8*;vFLa|dkeU*{J0$qnxQfU+s~sJMZKj9)prf?5QEYlB
zSOu4ND6-5=VN*G}r-isuHLP$s4eiP=y*s`U18el99~^dtBCp=Km!1lABlwMq$Erh>
zc4PF@x#!?YN(ASNzFRQT98lhV;|K(C+X0jN0xSJuwV~f2*caBf6ETke&-Lov?<-SW
zUWsXZ%}HU`qS5Ex8~3DOL6={r$#IMgi8Bu1)U0e(e6GBwWYO&6fzH({E@*QR#YCyG
zO)P@Wgs!1z<p-P2LDrq#cyGTn+0I%Y)jaKk#A)B1ewX+>D}owg7nvx*G#47<JBO9X
zvsQ;j*oK1$FG1OG?fbgdYL{|&5jznHF(SIyk@BO!re|9k+|Mbv04d0XeLP7LB5`!Y
z_s>3{p*RYqm<#Vwv&ULdin-AV!%>}&w?C75*LeKk)_h)0mE#Y?jlg?YR8WGm2KQpe
z;6ey2zo<-%3w2B>RGH1|FJk{{#E3b4Y0w=MD0`5}0v53baH>aMr@0m+B9_Y8tO*Yd
zoO2a!I>#w>HZ-<}k}5=XJ?q40lx*3Ii6;?`zYRo_2MS9{f6easA?njkh`w~W4=ld+
zt`AJyiNkOA%_v&Vov|8Ff^6&5d<$PRexv;PB#DLfVdPED(pp2Wrhnc2C9NM;spG^l
zdS-6e-yVTEeW2Sd;-dS4p95s;FGSlHYl{%lil7V#5pdL4s}#@-l(OL9IEfQ4qjTQ7
z@}0Kszzw}n7dn*)FQt!-iQ|m9G4V_XgL`<hQy9FpnO?1+Pk^M|NcNtRJq370XK3^(
zr5ce;zOwt<G=Pu;d1U-PX+lI4=lefyF64dPYArE=o^7kxmz7B50#K9IFbOFU<hr-B
z=4mu^zto89pAPR5uJ&+v0wjD0S2H})u`j}%fM-;(78NZHJ*>{QFH(fEq>$HYFf`(@
zFf-W4#Oqi*EP7*A5>n>#$t@fG5d8oBH@nWAT&rvwkYSg83hEW^{({~h0wou5COTX$
zTs8JlG9q>IxehFC;3@H0pMX1|a%D{Pkv=)r{^cl#*s<v*LSdBv-dg&R7vH<9!zh{k
z08(kWQ*6#7P8lr@QC)F!jXG!o@z;;Ms-9<#OT&Jax<p9na2-NtV=CdohzRa30r~<l
z!GOx$v5zjZDg0gYq4vqtqMau^y{+pbt%NXxlT9dwJ6;0I%w-8vn+nK@CE%n^Gqyw;
zsSGo*TDUGCEkT6WAAL-rYLkiQia%3*1l{9RKVkuc8@jOx5hjC`&Vty<?wq>q{n`nw
z9dN-KOKP-x>u_6grO&&DmKSz8)S-vD@bYt9)x+LG#nd-wg%J2*xPT|Iz|cB$e+fbR
zgT>gpZ(~K%Gz*FNXxjcgi@JNq6h)1rdprY(F0llP8HF<IrH1mF%Eio1c=mLPj0$}K
zxSkrN6Fxr}3~2Q{&nI=4;eM%g7=Xl;C-RIr^fW6T76mcPrG;VLvnXlFO7xk6VCxua
zkCB}RpckfQ<8D!v#HNs3`+?8_=--$TCg~zCE&T<PWq5Io!ZsLd{8aNfNSY7ymezM5
zg%5a}LhH**^I``s<bsGI#qTF|D6Gch+K!NAh>xxtGMm?aVoT~!{PAk`7{DygI&T$y
z*wiUngH_=CqD)EJmSz(Pn~T+3I`#AY2CQuNSdCnt{o}R09Opq+GOm|XuQ6}vo$#$U
z=Z`dnpie$0Y^j#cSvvFBKxk_%dMPh;d)POAcm<@Kwht>Lb67H3-11fAOUNcNvgVeq
zd;Sx1d|);7E*+4vc*ikAXkAMB`b|X+U_}5`?72-r2tq44wJ+MefWPriPqahHi2C_&
zxYWQ8E46-x`B#(ZqSh(T09TiMcZ@~j8hv8$Gq6CM?k1e7Z2@5~>FuoQx_(RSkJ;|B
zy<`xvNwOkk=l;%e5}gT1+7{WXlR=~45T1wdwzfIDg_YR?TYONQxpZvADsG*85cMZD
z+TLg6s&8e*mn4UCUKU1u(i*%9?sQ9jmq`bF7E{MFGhLkO6o6+!V!g`(?u&RjS85(R
zv5Ow!|E1P_DVj>bc!Z0(MAm?ro1)4;JOb7i2cf4pv3Z2(TqJ^*Zc}oD>TY9=NoCC+
zAcz-~K$^}+cr`M8UsKk?ujdsVPEfdg6<vi|_u83FN#jGdlz;n|GeKYIbTDvqw94me
zsik6q#I}KkhMW~~C|HNARV(cPA{%y+qTxywS|TaDI=|3n%s@me=qSY62X$`I)qNNM
zxF#ph7tp}*wlxn~%H}%z)^knSzR|KEx=5^6@(EPJ@YZ78p>-64pG)CzX}=H;B7F@r
z7a>$um&^@*fO6oG(nJx9hT3ex>+UMnf44t8OhP36L>oXi$#e8AVwoN?k%8!URnJ#I
zcaBvXV^y{&5$Olig@pkx$G^N=Gi)K#7Rm&T;+O8P56O?5_1LAzA}t)~TZXztF6o)F
zrC@wqY~3pG`pAhjn><u$A1`{~hCOwf!NbP#IQvw5!kFlw?BE5HSPqFWQF?ad*>;j-
z)-GZ5^O<%+;C8#h%*f37eEkpWQA?+R>j<*S^mKeS!7nc1SRS8&LllJX`7au-OCTS`
zMP8=P06o5*U{DA0aJ)D;pUe>>sDjut-#P9vSYJgwHbuwoXqezS)_iM85QGtq%sFVz
za>><t`!r+hQQA`~wFt|$&Bfs0e>-z-b?<9W7lV?7ASZJNiT^^{wriowyHf!6X6kh;
zg*)Jx9W<TsMqC}Ws@`O?*Ap~QXLAMy>s)wvST;^?PYj=0OUpq&s<!arfxThWl(sAJ
z5x7nX!+bYR?T;z7JRKh~yZpac>66hk#Oi4h6LUw@6Gf|{+qkVw#3oq))=o#rX`){s
zbB{pd&7hBg_cto>bi2tw?af+`+(*+%a0FM%P>_C=A#-9AOx+ZGbjEtT+fg|zv0qIb
zuF3f_rBByeNBS|Bjv`(J;xnyljw--2`_y$$;?#gzg61XXw%p}QE6wkF*hks>AqCGi
zQ-NHxkK*B@AxPmJ+_b-lCkO;7vO)@d6{dXC0e(gG<%@dI61q?#21!eNQFMYftL&ss
zn$w|v{=P880nT&U;7lHz&Ndz0CSMR?+%LvVR2s;=t_vg4H4*8ONsI28g2Ji-j-q9B
zK*MI+EylE{8~ywGT8g{oLW-O8JrsR@E)!br`%Erm+ux{5DP)dvQ;hCre5-eg%;B@?
z2c_0&oTFM-T`a`bYZ?0h`OmxU4x|*tAH*w9c+V#H0e2)rskniEEb?x~Rq}iTHiv!<
zd<=ZHXd&(?(E1*E{1F!j!oyi3`YFumjmzp6VvRHAU2pU>C6J>XhNTgwBy&j3hGHf$
zSB>?Y%nt{nz(WK@guKxpU!t5Bi}Z&@ft^ZV<$`)72LHX55;Te{rHavLZkU<%{8(<t
zrB31?Bols3_Ho%nD5_uqY^IZ(%>0S;;;_*}%9(IQTX_5}lLE2M)c6)xo;nKNDS*Ga
zE08!IkIQX}T~`?|vbg$Z+Ju-*1%1#Mz+e5AX`VM`BtWPacDmeROHlHSZI2BaTmpo)
zY;${7_AN`XKx|@)aEEUiLdqsvx)V+5^m?(#Unw)LlwqRiI1316nZuz4iCuIit|*V>
z%b{Roll43drtjomjfJ_BdBM#OrXVrxO2~A-l)9wqdQW9kM$Q*lSQqA^AN}dL(@`<{
zP7KCs0nU1$_tgMEv?drihlF+07T%*=mfnZS<EFSc$(MNz`f>Dr(d4?<#3WdZ7g`ON
z*h~xIMQ&xXsp6vN)(S!*Js2*-Edq`BgCIOf-a=SOvI<S&%1laSlJT!(Q}04iB{OL?
zVm=@?8$%g}3tqLn0x$^`QSrW^gk7D}ge;-@S3~{XsTO)+Hb9(02Lbl*UtE<^M0i5p
z4H_8|7l&b_IJ3kc<NH4AA@bR|GKYmr^IEi0{{QY4cK?=fHz0I%WiEcCm#{vqlK+x!
zp^1GN%~k`AbVaGqDn~2|>jtXi)(fp?j(-uCk~NNcUIY<+i9YjP%~MTKcA0p*Pi{J9
zti-`~zfxwn=38o}%j`t%%nWExmqM#(FU^kKF~S!?j8Ta;wY?8qn9>u|wns}lSVaoX
zk&vWI7Csp#@nV%|4YW9<WxYmf38swMxRrjZVW7nxazdFmjt^-!nAyVQ)Tx=YN9c18
zQ$gQ`7CQxol9`O!$#hU8u?ljJ`wf8G1{9l7bR}N$gt@O{KPH#}nn^iml&v*wKmaMc
zM>1LWs(d9vyN={e8MDc7K)Ss|bo3M6(&i-NL1&(AwMiEc76J`Zk~~FhU4bd}`Yom0
znahKoHj-jyU7bKGETG{lqc3&k#}~#r-jkT-Zd6|j%{CEkxZp!BI;)6DgJVZw?_7pS
z^jf+Eg|AY!yZDUfi2tM!QSfvedWxi+NO3IOQ8W*9O&zh-47%wMnR4KJXeMZ3Umh<K
z*qP$=EkbNESXjoIOI$Zd3|h8((HywXzV3saza#GamzRKOybGXsYL`ALlS2Lb5+M9%
zJd5L}VE&tLgoezJ@={Uh)MOn7+2!-c4FB+<*#mp`i5O`Q*B?;qogMXTcGAvR1)Nio
zZ}}pkONQyZzR_0T$A@om`(ch`KITFU(D=Y>=#kF>9LCnEFmeckEs2SBLf6_<f)K$A
zhY8f^#8k{<GyKx}#ZaTu9?;N{6vf&v&B6=gjFOuS*zgc_<8R)z_M|(J4qzzInP=Cg
z)Vk4sv(=lNRqAkSY)B~c*D8o|_U>f52LTN)S58B3(|y%>veXV*S`)P-i9kA(a;=yE
zqOt{rf;;<KYdZ}v&(r4&NyEdnkpEk4I149|YHf9H^A-mUuG;%jM%6@TiDyK(UsFx_
zKZP&-mTLnmJV~bjbtMrlur7>GWv@6ag?9j1uU;+G4HJtZ;EpLCm)y=;u1E0oVN*@-
z;l~OAWYY_pt}Mz90EKZ~oF_h5??D&F4pw;!1{F-ri-U^bJJ(IuF9iohcA~^4a`J8q
z+#~geLlQFfyRZrlOec}#U!ceIKv?KOtJF?Gl(e&X5jcW%rxUS>BzXg8-Pj(px1YCS
zOQ@5Lp&BimZ8s%m$p}QjdxjAazBAK3dliwcQ;RuQ5J2vsJmVfE2ssJT^0XbOKY4ko
z$<Ulqjw+~cfUVH<)~1R(u+4<ub9ru&LwPr~?&wTpWE(x@;6Iba2N%V`xGoC@t+15#
zvn8&E%oe&*+5%gv!|vklH82XvSeZfbk3G&H@f5tuHngzsC{q(bL53syD&wlvMFmU@
z<9||XcxmX0(x)zhr-jMiF1%!x?pYXu=x~t{o}kzLI(2D_F`uEiW%&6=y&tp&4<dtW
zPaNE;5#$@-EHz!Wkeq^hWNW3$t7#F91Nk2vVC$l}4?VLVfxNc-K9gp->!%|aYoV|b
zf1iCRqy>kLQyHnux_tzF*gn?_KD_jcvc}8k3nN;yvq!qQqkh#@T{N1VZ60Sey|e_N
zn<RuHGYQ{}#TdyXb{TZNqgu$r$>MX!z&LJ0ddQ&~mz;9^p42Kb2+&jvl<WN|VcQC`
zD{Ssi*}3;0Pd=bXt#J_)JyBX8jA_!bHE_L)tU+*GcLrc?NCJuM;9292)KQC#*6j~A
z(z8c52nOBlC!Nn51M#Ko$mLy5EHkI%l$1buA7v2^z|>L!M3KNfJA`n^BFsgaXxeMM
z4uk8Z;Z_U4Jj3<0tra%!!cp(KE1KU<F@<KlLSk72-=AsJX?%eSu7w|p7H3&W>2#JZ
zi6>ldlPNIK0td1H9XtFz?R4_nK+CJKuhk`e0@?puL7>+p{|G~z@L^~S5A{HXnp?=H
zjy)LBU?Q4$wB?_=W-a&l_ALNbBz9w~=MsLYAf3ZA#G(_fg|5l(e%>6nQ96-vs2FJ=
z$URZj;mY#RGKSNJ_VT#G7Oz^nfYZB0t;lab!FyuGkZ5n7U0sdHE106A9a(Nyyj&2E
z3@c_bNTSH?!e3ty%obw601UQ@=u8h&5=Vn?qo<<MIkF;rJHBlc8bIg|`os9V!e<1L
z8z^c0MP!+&;Rv1$qR019$;Q^r>Tge6Hl-W?a(!LkB7s_XU7qCow8p&SKSpL@Cu9>9
z+rmKxn2}>sLa-OOB};D(lp-`PsUX@5k7}^kI{p01@bo~dw|Ia#ro1*-qyQy=-hhmE
zKI`+eQ2rY41%|h_w)chcpr(6!KDgi~FmRqhOnw>v_E)*F(XPsgiXz2A2hL~U_GF)|
za2V~h*?d<}6o5x<4N+K2ilzSgJP<~ZlSnw6&ZO`{#4+DeBip}x?BS$L)7!9h*!9%p
z3=VCZnIZ^O^pTRNB4&ns8fV{&?s9|*71YD<ppt|650@Hgce!UaF$nwRc2B$!%2oR1
zxr&8&#eXvoMm&L)i1kQ^e%V|nXlgagvRp@xt~d%M<G5tpn61^*?N&34Jx#B12)Y3X
z#}jkvjhl)Bb?Oz^)nIKICa!N;;ifyh7r?NNpVix7ueHn+YR^rFaDh*b-S|}-M<qUp
zy2Vq?w~diCAYa>GO0D_IGqRtN$<CCSFEh^n#|xp(Gh49ZX=fC`I5Ko#&onwV<|Mf^
z3RW#43xdC-t*G2UrY7WaLLVvs?`AL&s@5mpL8RofaB_=?A}|U4{AyjrewLDR_rXA0
z9#vJ!aB#q%g-Yh3k~d}I$2uepK$=fG-l8+#et!&kO|>R0G#K?X=#*;*jU_KGevlF=
zR5bv+v{{~;iG>(jH}e0p&xT&N@HKv7_D79XVB~ItQCFG?z$OPI+OUvd18FAwgrl80
z&}aZq2MjhJY!5t?#XP>u?Q{Pt3UqJ;V-5uO>ddCoP|){HZ#5eHAyD&oxxLB}QpD^C
z?8o3K?w6+6FkC8l9p;xTVWty;`;|xRY@^w$8)JExXxkwWe~TN_#_OQ^n+yfY-$M_h
z_VRV)(r7>w(bVWIuna1>hd*5};-UC_W{6wL%ms_*gEji1ufe5my8IX|eOd`aA{6wb
z=*VLNzI;1{I$0qyBXV55x`n&&Jvl5Tlu_Tjx=?hp7w%nInVKdi_Q~-5^Xe5srx4p0
zMnmRTx5ML4-1=BN;fh794w|dP=MPqPeHF|sSnI#30goE+OjaE$gcC1NCV<6LLZ<HW
zf0zuvYKG@MsuwY35l+09v>l{;yqm=Mq5DdEJXLxJMm=tHA8JSpTqC}-Cf?cNgxZ92
ziE1TxH{#|5ykqvK3w<ujvr<0378nJn5v7gQWN}2?b$c~g+WBcyPnDd=oadsP(*5Jt
zv!*wuQdwHGz$HiJ2D+Cm=?!G5P@Zcwi-<`}El_{!zfWLvVN?DioAs|DyOwWz%>J0d
z)tvAG7`Os55V|pUPc-iq)5LM~a?d1~G2jhVOm8O_smuu8{zZoxt0Is8d!%vG2SG6B
z1>A6ir~YW$ZDqi(v*1oGSO<_SAiEqM1^lcQ(E0>-u@QpMiqBOnHzN#DkAslyNL>qe
zdY)K96M|XoDy;Fn8xwKiXSE53YeC9sBMMViV}ek90pLYUDNqs0mSC?}!vUx&jz2%L
zJ&MYOulwXnaqOR}wXtWSgnMynN5HnHW|GDh(KAFE$1@H~GRQxW6kHqsHMW%A{1QWe
zKJieXWVK)qzY$_EkvCoMa-|Z0^$S3Ldb6T2BM=VRu#|GHm4pFdVG4y|?ETh$3&MyJ
za6Ko2&B3=2<opH>;Vh-4K+rfNYOrt^Y$AoN;@-`oZVBv&BR|3@86IahOqYG_rgkVc
z7LzCCns#j3u-QY|f@7KG*`qGjNT~M&uW?-*?ID9;aLE16Sh3E+MTtP@aBPuWl&e>}
z+irf>41pouVTir;h1;`Da8X&}R-LGVJ#R~1tjCg<Y3ZF{xv=E^ekY=<nve2z+aIn%
zeeHY~5<F}ld-H%SEOo>1>{$mJhd8r6{zSf8R~54^U*Z~Wh~JpD*zy{F5#qkag1#HY
z0qOys?q=gQ)Tyv1c$Q#9Xn&K{v3>mw_#ghobLHrbH-uW%+2tlDnD4^J$|S+ZKO2H~
zLL7XqhR+W6yf>ioG5$ssua8XE7|+RuH&vzz))EX0aEju$;Y-K9Pa7IXJBedBRb#=J
zbS1yxf&pJ(yy8;rO}4okp!d1uRF0We^&KM*tjT5~aVxL_yl2u2@kZ9idVPKFb-4On
zJkXsa!9%|+q@GHWeUyf<Y+IYCzs@!>S|o|_+5y=B7esArwyYyd`d~Hf%BL|mn#>kc
z+#i~zIldX>P!KwJ--v98{ktDFm2c;H@nSUrJeC=;prn}{k#oF~UHDrW6EfEAVX{Y}
zhHpJbg7yam8p?x&{F#2Gj^GVxW(oe*20se=ihO3HDsBFE5$?Z<IgPi?n!j+bT_Jke
z9X*FQeQw>>`R!l+>MxO6<^K0u<IIg4=$VNRfCx@rVlFM2a32V|1rcmAP4SYPt)zU!
zvmEH``lId2iA~1EE)ejEaieP;ygvd@H|MHc)@wp92ug6QF>-Sx6U%p0*Ulj~(R7M2
z*5FGU46q~IyOOgRFAnZ3TaRK2NX|+Tx+3rZw_;TW9UE}0P|6s)P>?+hu5|g#&+|cs
z#LyA3H4edWTq=nTvz_5gko47(JUanAr66RDwy8W?L4KAH(|JgCx4Z49Z>u@SG_CYV
zxTH;lZ8^-ma>M-fe5o+yL)OBs&u28RQF`*n968?0YJH2R<OD`4v2??CzfyG&4yIfI
zw1!MYpu71#v!Os|_ZMHbd9{@ECPfEF4&}u}kT^A+1Lh=B0`t)C$TW;AVP`v_>6=Z(
zUHv$C!5`h)rXJrBsbjh<iHTPW@3~cCP*L4dmq~mv8C0!zoITxU=+-b=B+50@wUqP>
zia%n|izjN)URm4+Tz`;}^~aKssOIPa8(qDLkcdVCibYT^9t%s&mSnX&FHo)V`y|wu
zUAF#)W12*^7!oUOJ;!@A|E^Mh!&n}I^*~O=m4`#vFU(xTHTVGm_b5C$tk)TWLFV`P
zO6}@{SFj_#<d{E@7V+v{Sz{_jg_j;(WQzxR$U&N(&%dk|FqDXY-m#F32N(-O{??W~
zIBxAuxd~-0ZXi9!0GA?+_N6^(wlNl;g*7KbMnKkEN4NAYKOg}#DYGG3^f-z=UaHT>
z_CSDisIJg)#CC&|p;wQO#luBOZz;ukr`Sb>G~N>Cif4*ZOH1@YfqZprike5BcdVln
zmowOZw{z?zWI5o5lT!7%!=w0*8iFW6;mZLnqZWZ6G#;*CU&HEc6z6Z_41lhwokp`g
zm+D~$rgf|1AzuwbaSZ#*EE#<oY-(CCT-XyL@K(#L8zwM|BM6?f-?TysDl!FsF@hMD
zD-aC1vO{cXh<;mkO(8t*8(0c2oRbbR8OgW$sW^61tQsz^lg<H-yvg%cWYgiy5*gRJ
ziA>PX@DDJvaAr$h<Lv=DCs~Nz_*`<%uj^jDEW)>e7{-V<6E3L47Hngi3#4KG%glDZ
z`{`Cd1V8m8acuvbu)<C^`EG5XGk5xT!b2OH+KueOk20BVvytrKDam|TZrN<b(Z5I$
zokq{61rJ7@vSAkR)A#WF>lFE;>eup9Wy2*SuWGkyF$`_br&PIp>8Ff&3T!BlXcWPE
zB<WPSj=TN+p%*2QFEN7{o3_nf8H0m8G!6Q>hgv<iWO^MQ8{mWh_MoTyv$Cv5Hw?!R
z>!GTp@VSCoVVvT}j3oDvG{Qo?31|caz`a$FJ4DPPLX%qac5s>!vBbGSH`}~0wg8JP
z0rDtOLr4oHI}{pjr!p+@D&KF?Rvx>pve`acIk-%_N>o7<2YkdbqUi!OGmGJKp!t{i
zgxd4UMy<M&b`3oAI74m}Ao?I<=KLz7p1Z426vodCu5?R{<bL_4`h|>;iWeLVW-)F7
z7+jB15+k3^m%zk)7-0;FY&(Gl>y-n2Sr1QCl$Mro`WAA}k?b5=il!OA7+Ui3evHJz
zhd&@kR_)C^sWm+vSTtkf2za&Q(A*n5@7_ftQbr`)PWxg!O4zMybyngKT886<x*0CW
zWj4E63S+r4tY8fcOfVu@(nttus87wSN1^vY#5+PqYgxZlYGmfbM#0EB9!xL86>2a5
z!?91%p81N^6Y<!%th4h-hu`DtNk(NDG}<YoK<X1$yu<($l@lK2Y?{I_0FSb=%IMjC
zF3BDh%++*l)=2po6XuBL602a`PKtJx_Zpz?#X<N%d#TpZU`;jW<>&|EZc5(<Ll6>E
zOioD_CpEY>kWYth@MoUJ`VIx*kgFsAgu<l}_N{D~EJ1f_$o5}IlcgAlCjqvSY#Na*
zZw;E})vkt+Z~5>B&+wPJTNj-S>Xx?S)K$A}GaV!iWe|#O3Tb+JzrVYA<J8yor24li
zeUl-NK-s79@arF~!BQB;)km4Hsx%ci!Th5+=`r(@NdimmN|^T_XrwvWIu=J0m2wL(
z3;8o(HouMR$n`{!dMh8!cXPKOpF(=Z0)`XSX1F+XVE)rsC3epF8RVd~Z5H>?UPn*L
zoyamqsRRL*cejmV>?5z46pUBMIUw;m&O(M!ZF-b6(4ZmKaPJ?WTz_@mcP2`<7ZYR6
z0!dMrn|Q8@*E7|95PL`D5uh#FJ(^nD`xq1>h^al)=%%$68Tt+6_z1^VgrS%R>O_Ys
zJGj((PR^-+6EmLaybuC;I&1Q7noycUK62414&H_&b*yee%i3h8ZZhDKnn8KR5c>o{
z?k=Ye>XTE;{QEB8=DgR3O6w^u8|N?KbR8#}dXTc=_g#!cRHG(&MWPUI6<6q=^ipS8
zF-W-#7b8W~<?wi#nvLH4J@3K->~oUG$^<9|wWZyyA{<2@U-Hd>r8Q1OnJ69yjO<5p
zt8QDk{w=;sWLr3*BeDoW*AjsvExCSc$iU9doD*hXe>@S}shfp8rs~a6EX|wvEBB2)
zK9Glc6+YD_glD~T(tzY><Y<78n^(4#pLR0?v2<XhG0L1<>M0#wL{5w8NN#h1-qClc
zg|s7;dzb9Pfc^yhL0&apF99EPMNNxVx^oZDE&$94rjUUa3PU(**k0MR;cvxx8uHu6
zGp=lb&IdddkeoT+T~)HAUtPmO0luy^PIkACu?W*qW06ythRam9jMXRdc@z7shVH97
zBBW2@<SSe6SC+Sx)6BNWAX8A&|7%!)tY+jn%-AuYIX|<+s)vto@aBVQ5u7;1!)S?=
zyA5_}cinTJWluC!$IV91HR=JG5b}p0>7BZQFVnUoLNLGZrIj;O?Dz)bl`n|LrSf!7
zrlM7ISWgUCx=!B)N$yD599fRN$cka<HI%b`?ABK|G#h=k1N`<gjh%{-m?d!IGc#%v
z(pxi~Xm{pw16Ic4hx^nw-;oSe_fqATWE%{wXUV<4%15LG0JSeg@<P)E$r9ftQm2gd
zb)OSshcoUcE#$m;UR>;toN~{f%W9*e>t=k!hqu1{_sH4UytYw*<(w_Adb13OEX1o<
ztH8ZhCju<-aKRwpMJ?ACH%t{kh3kS^(0720+8KN=Om<sl$Li&n82Kh<!o2IXrC-=#
z4DHK=alugC-z_85r3?sX`Lp;`qs*#(Q%BMT_UbqILkp$AyxF@4ugMV1Rl9h=sLf1i
zuLuj3s47NvSzDAB>kR#w1~vc|;5g`o^+TAmbLMH-L8GP1lcm3KK1uC3*jsRmbT74!
z-MORN9MOP<Nub~G&dXSAOl{o%9J7=w36;+JK;<vrlR=TB5Vw{oY!>m!ty2Z2oiQ#9
z0~Pac0c~@wTv2l+5KnUVCTdydSGJV&Kty;P;W7#4@T!aUT__=v0TIMc06=_@!ic+6
zuaMLvb6&M^=H!E8w0T%)W4Iezf;4(_CY8xM^0G}^h-d;Xg_sgNV=ps?O;G1ZHq`>B
z9zTvu2);U)AeFgCy3Ziyz|)kO&0H)8{u;T=QglM3V>h_Fb-gUYO$ATj-3cbq-EHFr
zdlI8U;^I7L+wCbX-6rJhD4Tpw0U@LhB5|F}Fj`R*)QDM+l!%w<RV}WSdIc*qBdR=r
z*OdRo6RkA*BWg`ACR{1GEIm<^)zf;9)Eto4KW%FeF@h^mp-lAKu$dMHns5aDTMlct
z0G-dcE_&;FJXQp<NtegqJ~-iJXJ=N+nnbamRcN}iII@;-{=?gO?et~@Su{#52!V<~
z4OZc({(NXaa^i8+h}5MQge4<Y2%*eVgJ1fMd(04Wd1mO@z-RXuN@}DK6L#oKk4a8|
zy_avRyU#VUK2}()XM1PTPzWi98|4MKSm7}tL^UobbN-|T=xTeF^R2W_5rL1|_pK_o
zsJ4;CHt}XEa;BHvms4heo$*%!cJ3r7ae9?mMZEQl%$1a4_k+7Th!y81AVPZQq*JLa
z?YB2<A}v`jm|is&VfE+M{Jb)O!Z)qnXnau(E#m`8mr}=qu4!l}cO4)=%XNb&nF}D{
z@|WQ<HRy%^sT*4}l}6^E!&9Zh<3S{@$yn?aC}15Xp{M3TeDeyNj))Sy<&M`)+$02G
zsj9yHMa-hEZY8`TtS?kqcg4#s!_76qW@*31H1M>GnvBL76se|7YN5>4dpzl(mHqxD
z?)p`u*BDl-Qbe^JGi!B9F<9fW0b`WeXSiiTS(YG+R}!0KEN`D#058Z8V8^>`s^kKt
zGY0k)H_9Dt+jg?@&*)i^;OP8!B$X`Q%OB}IYk5{P3zJtX<J${y5s=qm%zRtIDO-xe
z6a|LsiXN<p`FdWlQ55U8I_}qT7J;Z%pJa^nd{SyjcOMJ%x@s8NQ)?PLfdPG)P>N;8
zO8!f$AaO^}+9>&(z*_imlLDRO`!!#F9HfrD6N>k%b6Av=GtEYzx8SGFw}bY}Lky1F
zjXUw?ZNi(Y7xqIh!pVqv=q1{O#(Y`KbTLspi`ISERBI0Z{6tTDvN=H=7mJ0ht&v*R
z?MfPP#zNUYH(z1kVlN$dPvZtHIX%l=c0#a8e->|oC@Dn)oTdC+T8K2FdvJP^2U!uh
zah?dOz;-hhJ|=}@PTLEU!Gun-1eO>8zzgI&w1Qb+4KKrK(>~}y9AW56AS1%jYiFQR
z0A>Qzlx}V3FJ!e)V%4A(IM?0lk3Z0OF${dMkb7`QAJ&g*iqGaw#P>K(ZtpWkIQ5dg
ze<fn}{3&vKDHZBZC<`NUus4bsG9i5;XWT=<l`5nUEXC?-^S_Gb|Lfx{$%R;S=Rk&S
zCY=$-#Cq^{G&WGNv8ms!;Ke!T!^rSqnnf}vbjKx!)l?@5p=@`<5+qiL)2}xYqb{aA
z21CQ6$0rr~5^7*PJeML^<13=@HN~wZjFo1YWWIwQk`dgU2DMR{n4+%H93-?9M5izT
zzBl9kNE)}qV!)q&?vlzd!b%g*Yesd+y;VDOLf;&oSJiqai(sCEGBp2lNF>Qzx@`nz
z8nov>A1R-TO#i9mBnH*uB~sWuU&+1}r(VArKE(+3Jxp*`i)cr@I0PlbN?Ir@kR16+
z{#JZ)Y0V|Q%XMlUxXw%xB-PNs99=ZxH#>WYf;&CVn7H2IhgkxL=WYbJ3<k!9r;kqa
z6<%C0|BLR$ZdER){4Z0ztSk)H<6WQ<yzNtb)u@($FKRq1nB#pCj=86!rPdrXy-H9O
z%}xhB<F6VOyRU2v3Z}<kOHfO9P8tlU(bR7^e2ghpqYTMsh&v2UnyY7Q&D8AVcE&f>
zp_z<#pUp%I2;?E`wI3~3A|VRSKq{R0H4bd`6+!Jas;L6BHnG+APV~rT0KNm+;Fw`|
z2G9X8z>*p@6gm?#<3Xu;$xmkGG5e%We8_cz`Y67eDc3}LsY!%=)kLKZ1b|ZsH^>sk
zyH$Y0bip|R3DvedZAZ&s-vzw&vC&F|w^vnX|7GLjyooDv$$B8Q)I5?wx?NyH+Z&i#
zu+h+on8lvvF~gY^8ZRzE!nqa#N9=rUsG=*W@srx`NZt>w^m;f0aA~OUo~j+smC%Ys
zfnADbmJR`iO+H~<aGipih!lKpYqdP@BwdX(<4MDU_0q~WW!R|@!}5o#L)gZS?>yH+
zG@*w-ZA9V_{Og8{=2M4bIFVA8T5c=!aDvwh@OP`qTY+k{&)6eb#0Ub%?XcP=j60~4
zSgHqh3`;W8vlL%6LVea9?3CQ6-@lyb)~0tT9WS#`cmXPI@dVy~n>uFgc=1B&X@e_o
z=jg+#AL3znlo;xr21i6o11AN4j2al}g3iun#aW%#Zw^DA*+K%8ggK`p)9MwA4cHq6
z^pBd_H%m%!BvOnEXn8a46dsRRmlW!M{Hnd{kuT2wAgg@S{{M^p?uAL9rqB7#B4p7w
zYrT0)-E`9axA|m&@8lMZg~!u%8(A^9K>%-*27~jSYhK~r>^}1;d1U@Ghaxhwck56v
z1dNe3jq%;@+TsSx712}rV5y{uITkgG+YiE%ih(Q)tDW;#zwB6zn(>|Kod?!zZKu;Z
zg&z|B+xXTP6*GvJaC!a-TNv4{ATHvYl0Kndl*BVUR>jqIpuHic)F1@5KA65iUPL)H
z(CDysP!`cOp*SASl!lzjK()pWy1vJ90dU;t+YE0w=~&62lCBL;pS>QC@#qq&VMJJ1
znlBYlfn$97F<Oirg$LCaxlL}%Jsu+oYcUegpq;34w6YyN&bw_<htRR`Lm=2waT~`|
z$!?iDs7lH*cwDqW{fdZby~)9xJT}O30Y}FdBo6kuFHmf;Z-E&k((y)+V}Q6bI|+xI
z=hxyx%EU-+f2E9oe`Z-7O8(}74wf~|Rzr^SufI%=@)hnFA;|U(yqR9lfc1!{MhdI#
zUQA{OEaL&U6JR#r^xFha1qNd<%$kkQqOhx+HkEQ4(himo#2F49xK>zjEO>o7iuXe%
z$h-apc{;Y=%O@^7bYqR@%NO~mbieTEcougRACI)X6#kSpC}1`EUupt&Lo_i)d}pt|
zXP^DGnXtD4rt~%}988U#un~jkS`akh6=%TAS!p+K_Kg0h{6THH8wucW$*6!DWP#bh
zT~9?64&PioLF&#p0u6DLggq+mr#Pdt7CrXrf{|$Hr?9Z(w#rK6ILPTmlLNJ2CPj9o
zW#sz>^}L`3t;y2fJS#{!o;HxrH9SsnWIZ1XJkf?nE{Pp)Lke(+fRUq_0j(Joz)Sd#
zx9g}ib1>cS4lQ}U8L2DWaCTe_(vZG`Z;$%{+Y%6KgXj+I<xd>qL{dr(T$Zr7#OU$e
zE@xCV_)r;;8N2cn2UTz0#(3JUdc0!`_%y#5k6PVKUe$y9`<gs04lI2q*{g=U06EB8
zEE>1nss`^Z=Q&+~jZ+El)QZ2JAq*&s^4<|t1Jnk<N|UB6=+VU+7L#!Bb!b#0T*%b_
zC1?Y<V?~k|{Eo+&XVj~}4oYH&!T%e(U=@DD7joVw<7&7$%L*c7cjtD5SJhj*4;g~L
zZ2-fb;)>KnMT@VhZ~up*GOkfGGNcyoN3^7m7RZaW4EE@l0{~+xS>7GDF#bO}wt(tP
zLCuXmoXQ!N;|grL6ErcN710bHGS%JJdZ$fUiU%iyQ({$;X-mP2PzU>1)BVy^J~d#x
zdq`I#8eP6zn@|khi}6`RLHKv};t1AXZ3mlBNN>4wk6lD#_!T<}O6CxW<jVdKL?5Sy
zHYHwut_}d&#ivP~A4fy&ZlA~4QNfRi3s{?H*;oCP!)t<Lfw(@&<2W|m4o$6B=NVj$
zJ)#3H!-f*+D9Yc!%qTZ=kuAWf*p6`Ra^-i}Q@b<2ThM4Sl$4$(L{r^O%QCVemV&1*
z3dKVLRrZzf;ooB#^$4;vqj;=YSp<LmqnEp!K%^Egp&FVtYS$M&kup1OjzxpMWIlKb
z!_pftF`?u7SaGlGz^g1EF03w@(14ez>!do7X>88v>6r*6MJ6@jP$4tlx(ocy_TzTT
zQUGw*VX;|piy2!DnJyewi_`ljvd|jF42<d?XVV~1h6bSCgLikU716>KYN8?T?aW3;
zUVvuRUwG7fC1ZLReJi-wof7j&TGKN!pc98=_}~bW4E0?RunZO|TPY>7*=o*Hd%*Ob
zUFF1izW0)sI(nP^uK`o{I`TLw&kEf5)Zc!sLIMTXs_xzPR`M+|w>n#tQ1rAiWT22L
z7%YcwR7`7ChQU}4(365+kKdrAF^6D(;(s218b%%S%gQL7|JwK%YbGGoJBk2VK&HQv
zsBCPJGmhSij7|!WQy#aXV~V32bTuycQ9v!BSm8(EOYv4azwk-dAn-JQe|leIs1^cb
z0T1lUW%q(8`G3q&RX=1D2|~XIQwZL6zrk&`)POX&xDjOG&L^aB#j*%GmMeHEZLq60
zJcLKKS${pY^CUIP|NYBpkMB`J3zLd@17ca|#EHz~f~JLq8~*Tb)m~~&j|_{g(Q}k<
zo4+42d66rWbW;CZ5~kEg!AIP+3~W&ht@2z;dqxg7u9w)@1}@C5HI0>KMdzdP{w-!p
zA#4om$7}BW$`vlI6u{}7u|M5PizyT%XtuBB7K&pE=tF8pMFieJ7MOXV;X7Ezk+LIL
zLO&0%p_d4XZdhjlTiyYI{_bt`2C0X&(2lkNm+s1UT5G(#DLZH5BtcO&B4t!sV1Q%4
zr|SA%6<i4oJ1ua@!G4w>NoS9fl?N*lobEeX*-SC&$M97i<5K<dCT^J5L2hS#kWgyC
ze`H^kqJ8=drKCXzE7Wi_)3|oZ1=|!P@Jbov6YIH}u)QBCGdw0{H)g8D3xbCgqmbfc
z9Yamb_R#q~gOu^1OYCa_G#5j{ENMNGW0vOrtk8j`V0UtiTW@0^<TMXDj3?4HtcyAA
zGbSX&1l|lAm|x?zSR9NE)fOQJp&tM%T?kH=98GS!a2gm+k%?z|-K#i&hIF&$wCn;a
z^(Ma=%>MqEq?QL|YS@rO4<1&mpT;pO=?9fbFIujS2gmSGy}vaUvLSpRX53$NO61{?
zD3Ds#PI6z>JqOWAo(c?pu-otM&EF#O87=jbEYV!6<f{qZAn~eVBLaMZl>D3)f-EN=
z$}#Z9Y|ssS6E*x$IsOI1q2!^gI?OVxxH>STZ$13~@ix6mLFnoqkB#5IulN-tpX)|D
z#wUamDky$Qed6zBrOc25)5537|Br#NTPuI7-S4!LP-jJ~bZ3TCEH*#DQ4A4e(6GQ{
zwT2FV>Xu~vYWHQvFg(!XEMXL^m?h2m{>ou6ECj24l{TBppuP><k_4<&;4NDFk5hQ3
zpjpR$gBQ{kzDI{^78iBSIn1XzbAo`0!YxX6G$>QmQ==_PGyC=hgbq7E85P@m2w%G?
z-&@|d=*>Si2Jm$BGqsA*{m~*V7%p4KKRaR4{#JLayiM{u8j60)OH~g|ccfq0<;pmQ
zDUvg4*YRsWC47M^0H8(ZzGwHP(Zt*f3qr1tiiv6Mi*m36wqYBxw@|a3%9&?PEe^0$
zlNAks`UJb9pZ>DM2+FOtW3dljd>+)&0YOQxu8$2W@>GvZk8#TT0K!oDS-F^mOgm+6
z+5MryU&NnW<eiShm4(KHh|w38C5fYuSR%>51DaLTM#tj`0AHu~^(t{w!@#mepKzIf
zv6(8M{FQggrtYS1y>p^E@I;03A6(^cN92-kC`Rvin&v>hEK#J)R31)nm}-n>0K0JC
zO%jaV7W$w$AM9YusQvDlw++qiBcq<pY*&l#IOGO`*b3*{(IY4{Uq3AcQ#aA)ydayc
zFkyM4^p=GUy+7P4jFG#-I%W_cj!gdBMmOGDYpN^6L@^gHiIDUjS1{UllKrD>7ty*A
zgaTEWg}{`8vk!K{X9JnIaMnG8`0?`Zx1Zay1W8!`ntwj|R~iMVMy7;3>zBi*gTC|G
z8yg0(U<GCH8T0KU?Tr9k$3o)Izm;FRUi}Mkb!+sf)nn5r+017Rta5_lV<~C#Cz=-M
zHXTauPxruB0>EN+Ra|IGmmI|dJ^{<73yXGqsm>uyPIZDS1&t^uV}XrWu+GtsS|K4Q
zvSO=L;)<9+4u(W)RyXL7g>Y|W%b3ma+xFBBVGEPrIC#+F(8Ad1%pI%V7jFJ3v{Z-E
zv!;7L<I!H!<oUi(ht6E^Zhl5D{h3L}it-hlHbT{HZ&2x&?k9>D_#dE>nZcDaa^-?p
zhN>m)EgQZwfH*bsIpM7=ubljs=f23bC!~DaFxK+2%&$1E>^0wV$Rv%vIG|j|`%k>P
z@9yiWUdwC$Vt$2}lBTcm)UGq1*zv>dv{*%l4Vgf;eTGg2-2NnajvO-S+pz|w*O<on
zit|rG6k#lN|6qo1(D$Q`g?+dIFmFxQLTuV6_gINQa)<WoF019US0{vCT?|kN^r}rp
z11R{x3fWyWI0*k%g0_qwzq-M@nhkaQaW;N;Uf&-oqeqfltTHX1f*Is^sa6S(J(u`Y
zN7=Oc6z`9up#`UuPRaEE2|%9PST(s3v`9I$IMso{^<d*+=FNbDqm#4yn2`u%YIw|X
zOn4&#NG`dCc7*$H995*eT%U(=h7smuNS<nYnFFAm-t(((7lg9D7m4;^Fc$RLm}eoh
z%ZnESpk0mCH{!mst)bl>NSFp4Eq*r7st<SeDN;c_;>~vboYYz4W*gyRkfqH=#nD2?
zm88H_`1Xw2G9ghOWD+XoaG8dX$@{dT-Et+QO0)LO#!6-l3n9@#6yVidlhy?ypLNdh
zyN<T~T=D4{H$pTmZ`5Ij{4+;*Ad5*M)H=n-xT$YiB)n@Jat}qf@^p&|b09%8$9_Em
zm{_nPDgK8ISH0sT7f5Rck#`8as@+FhujkyWKtUpmEMGdPSV?hnxWAEmGyc;3t@~Cl
za))Zpy`Q{GWV+OwPSRN(Q@K#Wiq@ta@D@;G9abRR3>@>nectSxdDBDIe|RAZ95IEC
z9o*M~S}oeT<B~UCJWuCe`5bV;3XmT|f4ocCxThFt5E67}V0Gn@t?k}8-r)p*e*{0;
z;$;!_$D=%9C|`RyS$e_Z_F{xQxK^ACZNN=@q-bX};qb>P5(G+^4j7%*qbF{wzWa?=
z<ht~N99g#=)P2O-d?FD<9kxRNVS(qodf1UJfWX`xQj;GXcTXukvAx5AX-xR&DOd%g
z0`~ZG)B_-uio&|_uOMA`o>`34Ld&ILN8&^d^sdvK8mp`&GL<rpH{+9GD@ZKJATO`A
zf)MBC_A8rw6yDjMw^_jY$jsDGCUZii3>}Q@8=m&qj*(IVYJ8iF?wa`j_wSsK*iw`n
zKs)$w-C*u<(5fTy@r+M+Swm+`r$>x8r~r%efU*qTfY}0g0C4$oPq!1-J<__1qYyAC
zSbmZCHT~Tw6agkqslDPGvuEt^5tOMR#Gg4OiXqwd6F1E0L7v++2tLANSyx?i^AGn1
z?xd2<Oh#nIYEU1d`D$ZD0%lR__#EZVgji{l$j92f7wMm{nt;pa1ta3R-Qt#=bG$Vb
z1T9o+!RKqFll}a@l*bWOrcux*V;wae(V8^SBiKCP4k)iWxB?~D1}w{d=5i*rp&Hon
zhLKAxH1p72Wq2W0X9TnNp<+wtVxq^Uw@vMmiswM^$Nbs)>VIP3x6ROvRCq>K5t52&
z(e9xE<Joa>1g0l*opSKqahm?!qXY+!eVR(e`{;uWFkya{IBI2~Gsb<%V<tMP>fqh%
z3ja7lN3UJ;aT!l1?>Bw4jk*&<E*LQ!^SFG)V|dOUI9*(%or8}=CUIwDdK5sKOmW4t
z)AFto+0T0(k9{B=>sGK_s#gWVS}13ajiJk%=qlx5ge#mG&AUX{E#}BNUPl5RsvSD*
z%741iYvD%W7cw~Y79A(-83asq2Ofa6dNaT4Sff-OKtJaS<k~%*-R*{i7=(#lw7Q#c
zMs!<#FBIE~NNy<Aje-WkCJ3`|Y*W_)r|7&S*)6X63sgb|+jG-bl@gC61x1>eewt*Y
zBOOW@%{btCZG7}JDgbxjd@yjr7_T<KqBAQ~owK4Teq;ndcXWXMk8@n8EfJ519Uppc
z1FqHX14op93%_w@d8@yl_FWvwP<;pJh1ki=dL<9z&Y5E4l=Taz)=CxX;OTP<PC03n
zbtq4Ooe!R;w$m5-K<W)NXd@5~BVwk#pCK)Sy0tH7A1v}Mo4t9#uPCdI1jm&$Ry!7=
z87xU4=^TesHv>Wf!Eba4#L_aVMpBDIX+egJu@<w}NGDPfm4`$2CKJprUXG+mwEKoJ
z9ZzhFb|X^yT#$|;e6P19iGF-*QHsgAgW;IVS$dw%R{=15_=IY8)kAKswUz&nA#ITv
zPze}KgG$~Cq)`iqOf~LmB|7#zAof&fn|Tf7&8vL=yDNY(5xEK-D<CPMLEGZvHa)%^
zx~90N&28DV0t=i@lb8x+ya@TAh91`XFD3?;hRY~~(z?YyQJ^lcD#0-V?aZW*Ieh)y
zd@YEe_MAzN=&(`t2BmfS=2mcj(J--acub>zh}t3DB-2q9rHkv^;N1^$q=tm5edlMj
z6+&yK3f;W#oq{aq&qlyW{1++B&2n`tfv%&$i%KfuwN}9Gs*EFtWp#V;k1Q<_CU;Mv
zmaTor9mWmtbkW6$Hek<SmB<gMUzO818Q)A@#RL~DgegokBBPgt2Klq+Fac7Uws%S-
z@?hmI31;w2;IywiEdk7>9+DyJ@gpgz$UGk38(bVNMimEqNlcv@ii7*)F^F_8KFd53
zrt-X=9cfYk+s)c|-;sSr@1v0adgfY=OwVRl#QK_JH`$b*^9sa6nGCg-y1bRmb3h~h
z8@0WmMNB%(oui7!-}3uhQAH}C`j`(sDVZRdR<Onfr0|ij+>io~)io}ZIKxC;-T(q#
zpA{Mj&MkqB#+(%pQoW(nCakFO`jx6wqicNZnc7hAF={@x+I^TMX#}St4$7Kqk$l}B
z3;xWj{2zw8LuV?O`bc<d0q4Ybh%go<Fz~S58JK*%<`-}VCm}SE!F1bf9t6PlaruKX
zbJpPhDLq4ov*5i$QR4e9n{<gC+<bf-<d$(R+y9X4F6m2GOCACU^W@c&L#TeeHgZ3p
z$f@o@gkm@Guenhf0hf3B78(g2`qVVVRWt=k7F_;)*8QE6$-;L<s2?R5#>pWw(I?1Z
zCEp&Wo)8vFwr2DgL+)St5pBCA)$2-O<%57C`MPR91X!)1S$=DHal<3(w!aRPIV6F_
z^(}XFeo{=%kg4DXWVV7CCtRKAl07&CIc7FLrjrl_6q$)yC@zHVifAQKJP*6mHbFfr
zYk>OU9qkBhA!Ct;@sy^M&b~HQpLr7V-a4W$@96WfdLR<v8$>xa6PJvKPk-JczV@Fa
zUg3>dz07Y&i;XZE3klfZtOE>7BrBB^Y&Y<RorvAJla6?F<a_bC^>+wCn464)&SSRa
zzEr;ZAt&0m24Mj9F8JP^Cx7dt@YjiR2brVQ<Y*Ro_DYV|bK{Jlq7RmM=z+T=`^Ca2
zsJ<lo;B!qL;s<8WCK<q&YAY`Ez=GZczR*bCoJu=dN0S9sKwzVROy|&kUqj}uAARej
zjC|Lix9j0^I9eC?a@H_sZKV3v?L7K53?N#$Y^tO<o6bQNVYx}e5(7UOo#&~5Dbzy0
z0=qtjqcJ+e_zDTroU{b&=DVC@>C>(#m9fJnrsa-zHpgT61f^V()iBTmMZe34D1wdu
z|L|BGSx~Fe!M2U4aj@Zd^Y>$$W%<U{w`%yE!USjWcYXlD4~`Qu*pa`-seM}<Rbdrf
zoW6ZbWXtq?4<<@Wj%t;8cjJ#t_<zEn8g+1XGSa7aQuwP-gp3_G*8K&r&w5W{LsQ@J
zW-^T8dQ&U48}3eOgh>G=K~G+xqnIo1@|^@0aPg8=rrj|8O7Gs10*;xkK2#4A=+ep!
zJ}br3VF)+pwy*EeVoNPfioBxJv<~&YrzS_yGd)RBfr|x|>Z^X}hS!OkuZ#sPJxE4x
zA+yX0S{{B2s3<&<E)e{x7sMnxO3ip~$LvslkDSo%k+>@$`=I}!mV=sL+9i4HRrJnj
z#Ans2zvnka7bmmrx4R*IKSNKAAo+3y;mdrtP7b*wRSBG-uO$(XydYbP@hZGdnzb1y
z=QC;sYN~sHf5nEV`9dy8J-^qIUEfeXU8(A7b47<9=zWuqd<U`X?qjfcBj!WPo)ln<
z1g2bY6R`;ejS27|M=i7=?xvE2T!;L*!Fq5mM$E=J)xKDw5*&~-l>gq0+uDW>PMw-Z
zaEi4mH%1vnsRzRk10HtesKXjgVYVUT2p1Rw=7It>c7=Tk6|__d6FZ~?a?18g^!iJ)
zkkP*H73G3cyX8P)L~0LsJp<r#+p7RJeqMRH_Y_aQ{HiW@W@G2-)?qcEr4=}82wWN6
z7#*Xn`c&%A9+c#4tkYZ<e_MSWb)HjE$6c+s)~+<c;`UFz*V?o^dvS;uS!q6yU{6Lj
z&?)a#C%!0y+erZ94KdZF1UC(fz4yH9iu^~Vyhox|+~{~hk9cQexEt=mRkC3;e_=Yr
z7tvE^nm+XER=}nIWGz2-MU9lO5nT#-w0~r;CCkxqSZp!2sMmPY^jfIT>+0=JMc>de
zsajQS*rOX~ZChoBPSZ_cf;r#|QDd@ZW-tXyL@swl!1n}ONAD16IIqrULmJfL<I2AO
zzes8jk&05^f3sFU!PW<;!W*#q!R4s&jDoADUF}(s*=<&9%tk`djUpgq7(*qqk!`ij
zr3!O_xEQYCC8N8*C(rX~c$Vz%8!}19>OCf2)v(Raza4|7VRB8qbbTbo-p)_fa{_mY
z2IFS}_fSy5c-7CH0-D~fRs&k%BQ5-V|B)!Xt2ZshOg|<63~}D6LR<8ecRSB=S@Z!|
z2SW$f(&>#`NNw-nQUZ@$oI_waI~swu&+MZF(w#OFotk%0@$%*%sM=X9y>Ylp&}&M^
zhP8j;ahT8|j`QDa5-cQ#XP_=+`W@UJ^o}nFApFCKMT?jD{{;+Q9<OJJ23z4<98UQO
zlMxUFr8HfY^?CpZl2vwSr5X*Ra35r0Qcd7Gx&A@xCyc)c1vwd?RKkdcue2l)ZNzGB
zq}YLJcWPk=)ar?&v9s_f<c2z1ESiFMtf1K3q3VTd*7yVUrlKv}v!-(4DnD81otlO6
z^icE%AD@Z>m7=L4c80UWfmR+R-dib(xNDE@`;Ax9%}SfJlL7!3-@76BtGV+NSwy-h
z^lQZH(IQnD6GN7Y;oOb&mkiaxDP7t<G1nX^s!A>LJ3TRh#N`5|TteHEv|mC?A79md
zRPUa4p;k!mcmrmtjMO#^pnE{aZoB@JCm8`EBzYu0Y^n9QNS^dc5C?g1zGegT7r*to
z>S%kn5ztJ83u*+IT(|dUY@TSU9a8YdssF_fU3jzCE)1`zN%8kP8wJ9X%etW@lBOxE
zPWw7~*n>I;<$3jI0}s-iO@0w}fX08*0>KSt$4r}iJ7-(s-crq|YHM>k2eF6Ylk7Tb
zlbK*GS;-p0ZGm^HJ;ELJ%6<>b8luaAKC(v>>9EE_pdP~p0KHom7;sx_bU=<)zB)cb
zkH$0L`c42(Dj)zOPK(dpACFNVkAnv)*RzK*j`<vTqh?*QC#sGubJpEGP_f&(94OVo
z&$AXC&S+S@e1ZtQ4^t_~sDOFpy8h~P!@GNIB9N?rZx8iq&~fOE<_n$(7{pNu0pD>2
zqcddidCQW=rA6V7o=!vep`|6Uye%qQuP4EA<6?0yc|CGGU^~;Az+YssNyjhzd};iD
zIb`B!_9)Vj=ifO)y773`kWGPf1p;tL@a^_IN%ZBg2a+<o73Y*MX3x%&H)9aiK!LrQ
zrklz-A|Ce1y<>n<_gRJNS+>_?Kj$0c0GgO>H*3Fr&_fi-v5PE8ZX$GE!3QP8ljQ{b
zy=CZiZa9~CfrGP!tLKtDLA~IVvvQc4YvNglOb)i+4_&hC`eK=l@TK)Ux1^OOYR_ye
zlw`}!ffPiZ2Z*P;c+XM3=PKn92~2^myR1t%n_ME`pxp+l<)G9lGWh7@fj&HBpsbG=
zSAt{xDZ_4Hm50!H@QAV)!by=2ZKRr3*MOXRjR;MOKOs*zn$z3QB;Ln_BRSYp9K4$M
z)pkd)Mba0(KX%BRfOD_UbT7Btpidb>vCpG-2L6_`z!Zd`wEI}UFbhzR@7GQi;<7<v
zrGVPGc0r@ysj!2b1>^1wnN3-54t_cH3ko~`Sp^MD0mEC9=#(dpfZ2WSM@x6=&?Rdl
zj8j^*siwVOGZ{~kYUsvl7mNF^lgqyrh^XV}g4*`wELK!QGs(tm1{w^U(h)tRj1xQ!
zHhg-xz^s6GDy9W7Ym>}JbJ1>PQWe7=Z{dz)1M<<>MIHkI!K1N{E{MKh<w?U2ffp|5
z1b<U}y<9~dQ$_6aZ*=(S;2D3@q>)ml2+q-zFEu1l)KsmlE{Zj-1BTLZ2co}cmq1by
zMtEC_Ojzw6Z1IG$M0rrbhG*$W9wIKKFN>>a`+KGwvNVfrYZNk<gB|<IAT1O1=K&5&
zED6~0tD|LEoX}yKvyIzFD>bP`ahX9cvVX!*QCZvhKPysHLoRj-5Z9N1dAG%VqRAa7
zYBzv`A1-m}VDAr*vtJ>*<Ae)))7k@(T4JdQz{z~rIvO^u7HBBTyf+&YRz$84vwbUX
z!2smb0Z0=|Hdl*0j#JZKrk%cPNIPR<5~Ocr=@Tijpo_jkg&XcaU-kbD?MX!R++X&N
zk~l!D1IPAXeeT0LF&R2n^N2j66#uB<I&eE^<jeVB)krcY+V%{2NgB%zGSs~NAf3{K
zG%$ILgd}KEzC<tht(|wbmm3r@CI`NP`JlvyOh`~0X_j5Cj*VQ<_r?f>?_shf^(lwu
zCH&56-TL?oWErZ&`zma5dU{n;by}l(JichXk3UAOAv#$`cB^%!r8?ntZdjj}0Ww?x
z&q<kLo_b_!2G3pHQhen1xsqh3^~T&(;cj#(>Z7HbSm;JmW&5Cg11{;-8UrpdGK1<<
z2^6p%AM{CW*EtbAX7bYy`O;YNw{QA#-9hSx%}c=|yC4=OF3oV`m%lR?BzwVJMq^l0
zN{&S)tw^=|^;3$OIm>U|4^+jUBeJ56Lwf^wSMpz^p(Lu;H3%p8Pl4^(_9Mwn4)2VC
z?YtEp|E_6oVNo)L%b#A#09C8Lb*F5N4m^XiHHiN+@qX*m){yHBB)yl*)F9iuEZ&Q*
zXw#(KMX#u++EOZB!l?T9rqup3DE*r@_?MT>T-`FZ7<~{yi1K5=#PJi)frN-a0(GvJ
zxaA`u&f1%~>7>6_^9-6bh{xg8Z}de8Q}HG$Rw&LJNp8C=6NHz&F)wyc7_JxPd><C^
zszNVA<PrYPM<BJMHl05{>}pa~5dMWPTeR``ykxU}<RW-@rYZS*6qcOjD`@UQJ!BD!
zIDoM0v{faYl(_Y27WJV>T#Y1&!fDdB5dgn_yspgrFrUeg;{{}vj0I-BJUIBD&fH&J
zrbll7rvA8-5a0f=FDQ=6<~3`Oo1w!VQTXV3kHU45WwKy!6)sDa-xg2zZ1WDNNcejt
z_XIZp>;leo4R{Ia^9`)x(LFd&nf^|XZQ!@5gV(0H{C~ym=3izE^MzSA7=IfeS;jfc
zYY<31H%!J2Z<3h>)FQYkvv0$G*Ygo(kuIrQNhHknxgBuHmEA2%yX@uFsaFi^68p{%
z_~c<E#d8l+>}2bn@k&OnqLiSWR+6o#3{Tq24w7Uy&8)}Ny5^S;&SDI=_xaXLX%BFV
zX7;3PoxEsr5Ee5F85`Q|vH!FnHF32<u-kcpY2wI#kX&pnPcW2d@N@x}1}V1g!zrLt
zG>|4*#+=<68=2jWMZRY{3VC;a|6jxIX_7~8%uu0$vv3`j2kz0K94T^&gnu`l3M(yw
zu$x0AUz9AfY5S#yw!W64tlG#u36@9v=-1iM#y3PR+EvD++m!IE$X|d7)vS$R<7Wal
zC28KtgfGse!YpKmC*nNJ^#3~?K`9m#p_!Q0s;w^zbaR=HVvUawlC7)HaA8y}<B{mj
zJD8WDKe}#?Yoqow)iZi=MeC3aPUZVw!>~0tI830;COGcBbPUtk1I%#b(b!YwAf|p%
z*T!qO3hnYskorjDV!L95UlS!K&ADuocr{+xVC%MgK^gBSbUj<@^bt-eC7uoLe<x&P
zK5**+5U9fbO-E;WB?Oy<Q-uPr@O}q$sY1|2@HwQ5Dnfa2H37v)R}v)7G<NNpj%YaQ
zDTL*Z-E?xp_qk|&iwX#gOe+&2X_|Xtbtr_DQ@1fP+xBAhGCMGeZz+sRI*KHuV8?T9
zxs{t=w*KAHPNRH{&6W0aC>;A+WrY?~7ZujXQv=Himj$=v)6c0^lRRlex~D8L{PqH7
zCoB0#HgC&D<ARNess@3vRJThz)p}VdjJd%<>)<s4p9Wu|3=fYQe2<vxhjvFCfblyZ
zb1Xo;kh30adHeP1&X9;g`w(y2=R8m>=8R-9!V#hl5YcZzXstKe9>-e?Fc4mP+udjr
z%z*=14CU4NVrtpBYScO~kEg4wnn$ff#1|a#KrLE;IeVuQE5ohk+`fBH{S?MA&z)(R
z<;d<|+`LwPurPH`!&|$RJ$lkF2W#&2BD|eyBswm)VfgTEIu>!moQR}xCU_t(NL$>T
z|3B_?9(iSYR9TeOF8bT%qx%YU;_MnCiluM{2yC_PJKMM7g+w3!&I=<zwcv49$NA`z
zKz$-@IXPcp3&*y=75d`jcxI2cmpEzTm*mXlqLrus3DZvPc&rV85oM3r6;m5@Dt+_u
zku6U{yNg^Ks9DRwgMi?FhvhJ~Dn>Jo0OquBIeogln9DNnB>e?C+{K!bzJR$BFz%%x
zzqR{b9PNJqa3Oz9+9JNa4##06=*V(73_BDUnWx=GfM2=bc=c;Z{T`i@LmQhei@T@l
zWl6CtJD<f@t}JROLSQ2%?CSYeHKigG!je-O4DZkCtEl$rsWbKKV~L@n1B|*M9Se=_
z)q9#B$a8SI7v2CsY3%6T>7=+OzKZm1`&wY`zBIlInLFLAn=5M;7+Cc640wpH2BWaH
zz(Pd6*r0TfxBa@+F0NbSqn_qK2b(9a)qRwvV;YjdrkO){!l)9$xh!bxFHPpPE2H_m
zCSLp*PE!}6u$%&&<XohHSmOuwIP2t|<hF;Y%eL!f!Ly!cV*hR`xY>-5D8E12<l#8a
zcJP<BYf}r(gaY|7hU*r>%;h@}MgMKuxK8>Z#|O^Jm5}-3LCd{R`u68F6nU#yi-p$9
z<gwpkcVNoJH(=T{@RiOQEpX`?qd%WR;^GLW#YZ(35?0s9;xvQ+sdWC^?*)>VA>d?%
z38qIYD#w&Bx;G67Qj3bmfEuq_M+e|QX3UH{+Hh*|WJ)<UWH`)buXFu3asp+`UB1}b
z%EB~?t6tCJMoBQcf5UvX^3T-_Q3FG%{mJ03`Luj5<%86wgO@L#WEqflu`mEsdfm&!
zS7)dSZvvo&1TyMGhfp{P(?9YIac#@0c?=)C`q}a~%VA(Xg!@*QHzapo4ZYHe2ac;_
z4G%&5zdo_T2v!r3z)!tv^Ig%_o<_>JQ42P6i9LG$@!hk_Bd(uTn!>Ed0~?+^Kn1(m
z?iRp8#G^W(w8{|VwKORkOeFChx=z2#d-HQ<Vc1QL8angwX5%mhiy;zGQvH+*1#uT>
zPzY2?mXps;CIk|Xg&kY@`7ThqS1Peu>E&-lieaMO8n^1khT2}19X8!_Ubvni)0{;T
zb5C%tEh3N%C+8^-8Z2cDA>o6H%6VUHYd6X3Bv^QF>diV>Ce-7W55VgrOgHY~Gi)?v
z&e|kA679#h?>tTXsa7!g^a}taihz-Rw{g8JfMn5!aerZ0Qy=F_u6-hafP?VO`5Lf}
zK-q8JyuN25P2Md~m88Bn;we8xedVY28Is`$jo<^CIM@CieBK)+q%{R+SgX25F+<-b
z16VOaA<&h8aWnbPKQ`qHOns!EY@`GO)u_vf+DrgLXp3Yc<MJ(w%uw@i4B9(#(&Lrf
zcF29Epd05N=IipT&v5}^zRSaJK8`tM)mtum^Xl@`AUc35>*n`uZ-B@7JJR6j1{=Fg
z0;`3xxmXQdM->yY&`VQvdWVk|D?z!fjbM=$n~#NW$Mpf2%Net&)(Fx!$^%NZW@Bu&
zw+{dy<GQFlHz-deN=mWMqO-iD);B^{_Do)=`T6dXTj7W3i*sA%NEBEyNB13o{aPT9
zSV@a?_6B8a5BCQK$)|{o(A-#Uz}fF{UqAn0?vLAHkGLh)1S>EcQF+@Pqa_iOu5~0X
zn)$^jv%*w&AhB4Onn(&#H|n<t6|h#6<0(OMjl1Bs0-+r(R@;Q84`5}Ufp|;C9~iqs
z^W2UG(KYrd7$O9Hd?5X|y3VL~Q|#P*7tx^(YZs-M+ed+5aZhm#&XtM95jwPw{M8xX
zd`l(kJSK((?1U`coM+mE!!!X87wieyy5E2YDzsDagO|J$r`E^#3}qCmoWXc`130%q
zmq8&-B4`x4TH}P2(yp7wM@1ogV&MYvXD7eGD8-Pr>7oXP|B)JeZ@9Z2Y7U!F-d@;R
zp*-B#FmARF@O>29Y)7>h>?p4$ssT;c&SPSWT}G!Zyf9Iz4pi1?QjeCAmD#(2Lt?1*
zNKoPgAZFg3hRG}`PIX%eq2@Tsq`td;?gSB<ZIRX~%K^4gJx=fkLEnw7MnxHBg64%8
z;k<Hk)YYZo-cK;xqbZ?Jb_evBMpF8bm#Kt(0PuR8%8pT>OKq}lh21Go2G%iMm++^3
z5E9DvhmbPyX@Lv)MkjZ;Fcb$@9(;B`F!T)S{f1t@G^#uMdNlUZC#j)?Q@^m(rY}7!
zO2X(!Ykw9jb?z!`bKugx%^OJ@ADPg>n#mE7G)3o$--8gHf&n4&JVNzMolk*0%~!K!
z3Gq(X-*xMAltaODrjHPwTe>V+AsY(3ukL=Eip#honj<d<C34falhMyPShb)_FqR*M
zyZDsEsQI0s^xIXYwoj>zZ8>{hHXW?V<fdA8V;Of>fNF0}A`cTY49@4gY1e2<T-ao(
zQY0DHn8MR&01_Op5S&V_v%pfxLhDTZ#uHoDIt@}w9r92fNfYPqM?>}j@RhmO%;@)T
zA~K)=hjMA#IZEyGKeOKoso2NGG&c3+L{07<)rOR=MGILn-GUM|1n}YH^{-<RJSMlB
zPmY6ujPR%q-Kgus+a}2Y0mXoxPTNbYn03vy(d+a)wf=%~i$sic-_$gy5rUGQLjO~@
zB`IazWsHFSPF~q1BW1CVlZYnR^?%z7et`c!Njms88{90PD_I*d{wrDhX6x~naa_AA
zHCLQpv=EG*Kj{qr&iBJzT?iVs3xdg)>0SQmgW@SKyne_iTdr^XizjiX+@}e!MT{<a
zI!YcfL+*Jx1jGpI!Cq@^xY<|`L$%55e+MX^7j+(FH32}()q{hQge2wRZHt6bfNy`B
zR}#xWUReF3;|fR_CVZ(nDuG+>8a?u=-oQ2FmjWai1uwUDf6pO3Ez<#nq<B5mhavMu
z0Va)OgA@xOYB}J$>mM{7g>&nhx#U<VB0qOnrb^Am$%PvOMfgMFf1^96qRjrygk=Wu
zYQC^=(M_I14iN>jVFDP-5D=QyR|NyPZVER6PK>3*g3~Mig3&k!OZ<)ioK}C{1-CgL
zgpS6KF}o;fody)Od{mUT8~Qt)igP=<>s#7(d8`9LlssUeRFFPagEl+F$eCc>CHC>>
z;4!R%&8y7Prt=quwm2T_giT)cyk@EeUP03><w{!ET98Og&bw~>r138?*oOudNB<0~
z`(Y)%oT;Q>n8@p(kn-5dKS%fQHXonP*$XgnO|fl;-O^TR*x~2Ryy7L82?^##Hj8OY
zoJ4lr)O+Y&OGPpiwR|82{5SBo*;h3~#L@e7L%yYK*aY5J1TM|0#ooV0A9bJ=gXrQK
zjp<=L2)CM!$R1p=J$g{_q~8g}<;B)XFqA_Tq<mFgr+0}87bsO1xIk4N@jvU=h0Ip>
z4g|jy8EDWmFY?22&(zv`N(k`&T~{Zx>3NZbm<Lj^lYI~U(9a)n+AcINb*LhHK?zSw
zdgs~SJ>5lctb2^D8+mVBOnSqjrBym)V-kOFNsn`R!iJ``of}cgn*KnmQKL|t&~@^h
zgAWKTjp|df(RKsQBWrHIz0D8^q-thB)7ohTmhX<<;<S_`Ogt}G*e1F6w6H~JgnYG{
zeFAw6ASHlU)3OBAa+UT9^P??|^oU72zr?o>lKJ51wFD~jg2g#fXe~c^EXxUA@EAu*
zOH?NTV?<T}!=PXzhx=WD)mvREK3a!@elN0X)Xp4waW{&93I*^^iQOU#aTXO&liXwi
zSKLRAhiX(xUea@_j38RW>fB^snDuBOziN8%-^v)aE3cP#gGiIWu2)qY=+=m}z54$&
zztvX`!WBO6-U`wdp<aMU6sC;!HaEG~&uI3Su)=KGUV{n~c2-<IWJ}sdK}x&;+y39+
zj5r6XuG7a?jP<%WYF~Z>*%`80z5OUK*2F?A@qywe8Bjr0Nq>H=a8yu^v(gBSW7`v<
zC@_M2uqx%<!b+ZjY)Dh@;CI+4MgOC6hf|f<=gWYS(A^9LC_7%s;xT4^Jj(Fei=**W
z*HmDHRZrp2T9xLp{h&-@KWRwk9n;sGkS(JQBG)PU3jHj}<7j3hDvFb&-)9%+um~4_
za6Z7|)6r_y;7J)xS_Mwgzo1poF|ir5kS=T{-DMmjRs3m<DBh6ifez1K*C1EOOY0BT
zrlQ@{8n5n_fI{hR50Q~{9jEY3VyW&UbI4Jj!w~t<6W+Z6QHE$Wak2`O&ousTCkV9#
zHkUyO`7x2VRbU4uTnU_xw-*t-tcfOpZC`|PLN5}V2vPrRh?n5d7v<hgRZ2`I(=k3$
zJ<!)tDPtIF&W^}7<m|mLDTJr#<f#9)<u)#t<J5{@Q+JhBYSq$ae>UYiDVW|Rll3?z
zQ}gHfe`|oPZ~Fn%-xzgKxH?F@ogC9ny^>Sq@N~tG;ajA4ro24YXtZ}$dzd@Adwa?>
zi<P?il!QHf0W*>^FIr;Rver?j1gevr2g~*-vh6w%luBizMk2I0!R<-ktg=;<V^5hA
zz+?qNh5X0{zMye{^I+Cp!?o&nA=6WXq2+K4Ctw(#WP&p#8W9yfI7!O`38D6p{=rV#
ze^>(ntLHVtiwlU2Egqas?6ThCqVl#R^vhmlkq2{bIurkXE_kcZy)J59(8}<WuQl3T
z^-$g2qvgJGHKYOWus46@t1|)g_Gp%$4^ltxh|RFdW!x(gBKI{See_~EdxQmbWNKvM
z@Ke?97wTBG{}_Qv{u7Onc^Mj8G>uGt>^*NiVfhg!xIL!;`BJ}L^L#d6bEN=|C2r~6
zR%75`$Slak1+`B})OZ0<YKa`oV-`tFbN%~)sa1J(v_4xRa@OuVWQ?C*3a?azMc)Uh
z0}*eEIxh>e2B2n5-5tnKS*s;_wmJ|Dba)EI3d1y$okGv?wdCobb_rlBXCxwpLp@-E
zQ!}}bo|dd0;Tv?&5pwC>CP?+7{G3hr=Am^*_yb>Dwj-I%6f9<(Flny-i);K*@J49{
zW0)N=c7wWkRt=s^S_<%Q$SnA@_c!m;_jOf+$?JD_b5Mh~K!2K2QdoekGLcli@CbyV
zkdMOKp8S2tni?&2St`k5?^p;Rr6MM#K+R2uj$|YF2{!bJx>fwhy3WH5wAbxOaR%jF
zlf;V?JFPavbzxT&c`>BkJEUG^r7l>}w(CTiX{pusPPOl9qY|Aa6hDcApe@i+a_rc^
zx@zt&I`*U4fCIScr;?tknscx0U^EcTb06Xe0)k+~l_Uy;z5{p>n55O`mS&p-r;83N
zUr!O=kq>f>W?Y2p&fQ&!Lf0+&Ie)eL)Zut6zW?%t+`=^%g!RQbM}K>GSecIM|6H_w
z8^X7<Ec;Xx7bYnZMq|<se=*GMuzKgVz{M!AePT-ra-*XgAa*6-vh}T?F!MAS28yD>
zHsmD~Y1lvVIq&gJkp|KL$C7IzZL8omzWj$Mq@0c5sl}`KeiK9r3+mD4Ayv=?bJ5b)
zdAvhH9+DZ;Im9WW3>?0x&wgYoabF^B$bhhG14E8++j{XM8a<E93cgKET0n2HJ9a;C
zUm+Y~=&VkW{hwqn4lwe9#kU<qw0q%_W`;0HBE(Nq?o}u)_DW??xlrTkeHgAh%wv!d
zz!IJT9QYrr@r1od=TV#YwUagMn}m9x|6RLJd(AlHlHUCh_fM)m9X;uW<LCEZK$Xh5
zI(^z5Vee+QW;YqAA17-kQldYITV*M>1ZFS1Ygz~>E;JBL<U-wK4L5hwk(Y>?%8@*l
zTlFPahZZDT9%q_4wuWc@k0n!N?8vrbhl6KJb6Kr=qWVH0OjhDFD3$}>gCM2`-^N*&
z!MHau+xtLsgoh=(9?=}k+zW0>EYMlkK-zKb)@ezWG0<)K)SsQr@+=b%q<E0JLZ$sI
zb=9x5h=zMVkZ<vTldqW$a5wufNd0C$a9~zeQ7W0zuBUEYR&iD+7n`zjEZ@}C%0;BS
zU;AeX;h~M6+fodb4)>F!?+vot@S|}U2O=`2ebDmG>!dtli<rwa1$Y{2IeS?t`V=qI
zEA=$A0=*bg-zVGq?Nqq8n4AA{BMn?|x^T7g(;)4=)yMNGC<`WMFz3DejNPp*?AgXZ
zbqw&!;&aj`ZOP2keB3`KJe00`5|YjDIbHhC^59O|I26VlZbv85>CtbFoY3h_2trEW
zhf|LxY0Y==e@dg=KXPf%pPayy?HC>wMyeT6z}H^`z9OL>F^&GjX=w}H{^WoO)pK9p
zm`cmzla%AH8yCfn$+Pt$ussGZ%m?_jZ5C;UUf5c~F%nF5PcxHOXMce?kO(AyC^%PB
z?W&-_B-a&FDQ2_y!|^WZkwQZDBp-#{XM`4_^4xib@-FxYDfZ(1tWAca))p_<5DdtG
z?4V{qPIq<(7)AJz*o4bwL_?|yM|2F*CHoxoI7$g%ldwF4&%C`pd+z7@Z2GfTB5mG8
z&prf-&#d%`S^bf|r5E_BL}_sSK;1?|RFXlxb6O{{2T&%L!%syYmT<;Sghp&`a0@=p
z)FPVdk7tbOGhFGeb~%k)?j4#a7qL09C9C9x{O=PDG`kHWj<yqIc<Q8B!0n@d@lud1
z*~;bTv>e=p=`Ibdh=R9IdjMu9_f9EoLwV@0SPc?t_Q1G1x{YvW0Gu)lyN@xa@KX^c
z>o4j7pZ37@eDjf8ie!9ph0WmqlLXhreo-&%{9X00GdytbxLndI4m={@aRfE>E>SYN
zf#u)NIv!s`5#2G1*KxIOPvCF?tI!Qy^AArSg$r}_#eu<<79u)ecVn}9iF42V0ZXT#
zn>xD9owf3!hshfc_61m~aZe#Syg@w$KS77gpQ(7~X2wVO`ELJhLy(nyNS$Lfu&9Qo
zWacmKwt7yR-o|V$Ttuzu5dxblLi2kwzN){92;^Zw@{2n$>Zn_p-phWoIi5Q{ADuOU
z3G`}YW}MpZ3z_78C-)Vy;F6zJZ$6xJNA%UhsPoUs2W##3wohd;)2}16mP{YzX39&1
z3$qu!rf=YM6YvJ_yV8F8dXLLcu=qF3YW<Ae9kWtVrYdBuz@})61Vo>{q=*iUCTndE
zUt`C_-kdUnf4bj}<u2$+AG3c|Th8UGItE6z+?}tCfJcpXI2^y(J~%V08_~pv;x@Ii
zCi!nTR~0XmpH;gxSkG{}pJb=~Ol&Kh*37xYafyHXoZ+}*1fJmY+WG_c>m{H@qHpns
z;ANL33D;X<s0HlxhW*`yaA<|UER=~6l;UYxkWvGi1tmsv!c5~J1=K1#zFwRkI1;k#
z*GOG!u*vDjDLb~H@u#o6c~|>kqHW8n?rZJ!7(1x%xk=&<N68cuZLamTm4`s^N+T+t
z#X#8?)t`%T?qRzG;kiUR0OyDQ?M-gGV<+C3vJ@6z^$!@`40w+bO=c}hE;3>xTRv_$
zR{@>3KMQ<-eD@xU+%oV2H$+_6mzmqe1O3m;dI=Izc-#g{?g4`Cs^(`s4s~j_&=qXm
zOeIpdJF7$KXq3n-6G<Y(fVnbEDA+okxw^BxzO2nDPLzSG@YIwq=ADhIDaobn!6k8h
zi;4M=QAkT<#YHr2Cgzg3zoC_)4LSD;JDL{h5h#nqg*{HS+{}fvTwm461gKRsfKf4(
zgmA%4gNjHu9r1PvtUIl7HAZ<NcO%K0+hu0ki2~;hD@uhQDAVjJn{^_8zEBo%Tq)Eu
zFXjdOA=3^2+@Rixq-|e*gAI)6h>+mv#}_z#ApD?xG`S97p@ko%Qlw9HGY5G_Kk7S9
z134JezxnMUUjs@M3U-E!$qW`It~qO4FFxj40x+JV5A5!rd=+?v#kt?_HcbOz0yc8s
zxiZO@m{GBA8pz6|bpeiDow7&4cbK@<fj_m3UO3mpME!FcD59SkjU&S-3GN+<q%3}8
z@yTqfc$c&-x2v3nm$EBaPu2u>Q5;gQs00sW8}Zj?KAm8Bw*30DoeT4rnDu-$>FRYa
zyqBPiS?RD7_<-sC=im2O?o~Ed)fcPfzMUJm0Zma?Iz$V#XZa1DK$T&#lRQMd>m~_=
z_$GBXZ-(>wb}#1;%P$O-PmW^l2J^j&*h$AwfNiuTp<cdW;-LP+8Gq*IUwjm)OIXRB
zFwMQLE7d7i6AsU=Detb<KrVDd30!y{x@7{tekU$RJL8j-O%bI>s=gWIPqM>;f8`|3
z6gU29`o>->Z&hYKBQ9aq@?XKl!Q#mQUl@5*VZq&9E=RAt?!5`Cdm1Jh@Cd449b%P}
zFW=v4u|+R<^N7;VNcF0tN`vI4Py~xm*j&e|(KotPzcgocR|c;;N?VHX&wwQwIuZ}`
zL@4d0(DpY?DBE@~;ZS`8@_SR8#<SX+KlK3h!_MN8UQ^+%q&|+x59G*iZoW0@)cx63
zQK6^p)598Zo8;G&HZP&sXxHKJkN8Aa|N6)+u`FsAXS`rF3rTK}-hmGpFB_TiPcMFo
z@ZgXhoG^!s{U8V#Ieo^J{Sh=M!B_g0Y;4%HAUkPd3$me2)w#_Ykr1;u$pej@oK+$m
z$aZ*6xU!9pZ2k;XhnZQsURc3r`=R6Pd@lc^3`)Gn;VL^#Q@a1&cr|t0a9&EUf6+$}
zQSOotmBo#Mb)sNwgIHn3sxl7QcGbhO*}Igj(C(f=6T$tUI9}Oji(Rl`xLculV(|!(
zl>3((k{XfI4Gf!nJp|+RwL7?Rj&?0hX5UEz1^RA}Add<N@~GnFW3-BW%eAjJ#0tEK
z$p*GCVQ(DT;j-a>0XR><KvPpxf`w`?=h5`lK3{RAZbzWKw;|*>qmS*d6SDFVim~P`
z3_$|SjILcr8n}t?rpZDQUZ%;Gub?meS~`Im>~rw{1uT~XK<NvIyDaY>4O<9Qkb4jH
zN!tjAZ(!wSUw^oXtCl23vhOlV!no90L6|K#iQED^vD|pzl<92h@lxrbM?t0redf~O
zbwT*kR@FF}&8^TSS0$0~>FGx{W8Vnc2BYM&b{Ecu;EhP-|5o=W+YndyV}Yp9xXjX(
z;d-q{Y_|yDp)SZ4UEw=<evyKGz{pP>|DH2%fe3T1lpp@;DlADL*~SZwbdWru_srS1
zVCjoY)xwZ&zdSvV=LQE31*`<nV)FJ4<{MK*IlDa0nX>|Qf-JJ2(HDFEHD`!lVPE9g
zdCaMtOc%tznu;=49kYVJ$P5kNhk1Vo5kiLmFC|Q}WP*EIR<*u0>YziKhb>u;UN7gd
ztkNmQGm039%mE}fas;*1Y7@ftMNesTi>Gm$#XN$*B>B=V_qj81nhU*{rT-oMo(9&w
z9Dmty*@&tRtx(${NSFr<Uo}fm<onSBBbc>()}n9i49J^C9lwcRg-Zo7zx86yP`?kj
zW{Ysi`H0X^7S^u_Fc{(NuIjU6l?G>p=aQKJ1z77rin+~|2ZNL}iEre3AbZpVma^LO
zO7xqm6Fo`<#fLWo)-)1WNHlHrTl_gwSu-LA0Cc6EX?|=R5Rp?93g}1{WRt>i$nTo9
z6*?x;b!j&#8g+kVOvzLEO|yOlm(a7E!1c-+_??Pi2*wc08$=R^tUVcoe)^BEG$%r=
zD^ydiKZ%1O<Q5}#3dvhX5j)kDHQpdKk$jQ}iUgZu>JH*Isn`AYu}FS2ELT<YQU>wy
zqr=y1w>~Zd1WniE*hNx5zvcoN40uS&kj;&>93l`HyaPS$9h1SA=3u0kiPN{IKX}8f
zdf^moPy*X<f~DTGTba*Lb0X|;<R)3Lz3tL@Md(rL)d_;2#ks}*BxhEW_rF;oZ6Ke)
zXX9}S32@=!2OdZm0h8vc#{o9W5Idj@yhhj&BiwEQ6`?LL-al<ztRWiJ(0fD(<&JGG
z*Q107MOQ4aHKGoxY*>(T51R+hddok(cT=^1IJFUf1LaQO_!te*;1W-Wh-^D!83i(R
zl4-~sYESmOnu#deUXdj-e?<z$$wesByWAPTDfezY3T>zn8BO4F=gySD_c3(X%<Y*1
zUZWz3O&IkLY%<P8!TCEVF6o>2Q0woO30pmiKPaqj7FdqQle}2^Jwe~fZ&DeAzICD=
zTF7nj^YikO8CJ}#lMb1}r5%0W{%!}v+$lRRx_H#G{g{J2=gdWXD&itCI<E0rNdKwM
z;i+l|e<1??oIfnQ^}y>^JxPV15`%w_XPiB!pZBvg6kseazwo+qlyr`B&HF<>xcR=(
zyar_#Tx1!V5rHXcl2A9E-_5w27$IA0#sd`5PAKmE5bIIm^Ep!E?lR!f&Di%$0C;et
zImtTGmW%|F5W93Kb%9Ndp%2nOHE9a&OkPIu5hs{cCxmkV&cosW_nqcCgqyD<)WJp+
zIzA`8j==0?;p6jZfP$Ih`mM_+Z)X<)fgR*a$ZQ<dm)loCpJK}>cMp$`BntOmy=kiA
zUvejaC9OU`yTw4V4kY7>in?ItQ+B;W=;e|%k=Fc04U5gI1AvJT!=&KR0k^E1;x3}R
ze#v;x(}*1EPl~5KTR_#!{zaH=B|o=dynD0t1)mt?`^ch?yQcBj0x@U>6G3`cUW*l7
z=u{L(f^3RYVR$8pN5v<gI@6&{FDG@r*Fy3qQ_dv_^SpeJ;|q@LHnel`6p}`;?x-aJ
zYo5?vDdKSKlea_z#HQMsH9*D^R(_*uL2uI8C^)w+k4<o_>qvqq4u>ukr4lIEY|%5U
zSVKjUk#gl?-4rvv#WdQ485(_*u}kr0eOv?W^jS0<G03pv_n|o;FFOg`hxGCO_pW;B
z_GX3@%`|?mO#eUWOEXYnbH21ZsX{FB*ymwNYCN53?2U{7E+>NYv;$73rZP5k39}<K
z9UIW>?GJ3Sd^{`>u~lu`@+K3>hWt6|_jmd-_y`F%oKVc211S7RR}BNX9GVyqBT9ZN
zogw(@oA)fGYUPjm=xFl7F1p6PU){{<Z6bHH=*N9~s%0CrcuE8g>qI2ly2m8lM8fCI
zyz|O037P?ah+l`Ddxp-VW}4QyWSK}6t`gmL?8?MoDcz-(7wC9Shu@AXzkX@`y@xe!
zL0d)Nnb~O6#c}w!fjk49x>5QOIj_#x<)ZE*cbJxe*TNR6(0aK_il3AwOe#pyJ{G8l
z>;Hauxq!g+bH`WrB9}7u2rt;^-~DmF$3@WEHO&PAsZ`u}t+Go?$nG43{J$dvnZ~}9
z#$vIl02D}$lKIBfJC=%7bv_BfT|WaE&ON*SdO|SwfGsagqn98s3I=so7DUU1&OG`3
zP)lu2!VEP20OFez$`Y6&f{{<IMHl4w_x7(qu-Ls4L}2cpD=Uf#S{&!$EztuEb$-Qr
z=6`RbbWe3FIr=yOR(_0eOiWs?lQpqBo?R!D35{%E&H0K^$S|=wE`DIC3f2lN=I-2c
z!P*K$y=&zFY?g0Q0Fqx7>qk126g%9I!D@~olu155H7Pa}GGfdI8}6)FE2}H&80*A4
ze&hdtk(*k@7giR+V{{K-nEW2f6H*f0!tJ+3J6K+9P0Jjn#MTrF05w3$zv_n3-Fi~C
z^I`8`lLn0gZM>rA)dJ~4DS3hytvesE2SAde=KPcZFLd0p&%Q{)KKi89_ZutH2D<|K
z>%a!2N%G(BB*}K%Z-pUl@N192&Zlsq8;Lb#9wF(eM}{lPk~**&Hc{hg4h+=<AeUco
zK~P!8i7QD?zedshEABRNOq+_|I$ot&T7T&?gVHidO{xP-F|#hm(mX{CCY+)tJg6gM
z16~{hw(=ecA%7vrwN4QdAWjvkW!vX+!C3!BCtpG?yIj-KZvw0(uN=T&W%OXq6%wuK
z*D~ZxWKx?U>q-7t<{=2*NMZoBq_kR<+7(Zmy2nnj{uO7jLB_KnD@bZ~@WxuZEt7d>
z=$~65hf)uXN_BCj1d8HV#u~;v=(XH&?Zm1*Xu1}Kj%FKR1Oy=F-+@DIn^3(~HoO~t
zE*+vJ<IzUQ&nFk#FFx~+d3GuY2eyA(frv$I_bwVxE8_@HmU6Xxb>$ciU~b)1)zJ_b
zU6k-+AfEf}Sw`7~WSj%+eSNxH?}J^-a4n32UE1+gTcCgFfh+SHQUtyg2Z7nBxBGJx
zY$b@FHtlwDm&!=QQ?4EH!^ya!%Y>C2+uTmz1R50_n;j}YLi>QnAY25m{K+gPssuqX
zC)78O`u>f%3I)9%GYq={E1wKy^~V;wC|w)Pjl_YqqO@NH5FBc5m^wk^HZ|Zq5H{Ew
z%N(KIDwRz2^V&-P8w|f0`vliD!3%f8)gK@K|G9O|V!Hxl<y`?47nLlgMm5+)QfV9&
zs$}^&q~I4fkp!e68yRez^Dli4?UWc4C!pwiLYpc+q%^&c#hQfsBGj#bwe=I<gmj6l
z4W%=WzL)@uEs6b`Z&~}QYJS9%1-f1R0DJTyQZZNKE&XzMS1BMq=36Q5R$s{M14D{4
zjO*7K8fb1FQ~&P6FF#~Mc$*;ar|H>*y$^fdIiMnO(Br$eC5_2hP^J2CASb&mitK2}
zQ$c4bV0)?=1PP>%7z4TFNhf=v2Y;_~L3QrR&Zn$GxV)QPOzcwsTe0Qq3}r$+5vU8R
z#W}r`CpB(9QB*6KGm)<1Q8A))j!&(44`v~*_4;mrX1axW_;w{yqh46Vf42m?J1xm5
zi1ZBQrAxMU#bK7-KvcZgs8r=!c2*Lqv{^n+F0s_#Lrv4Tpejst2zFVcl@}PnWW5y7
z?QvBlk`%3cFnhgN2l+_5z#X_A;s75e4PW;64qAj+P=GZK0q{S`Zhf?D*i{tm1empF
z5G+hP8bnC{GklX+@aaf79wH5*e>x6sk`S|OjXcO^EHlvr=XTt#N#94IHBnWt!4n&H
z)hGQ84@-F~g=Uaihx~iuHK;+c1OyOGd;)Re*>9gcQyevWmVtVnv(7PPhRLZBzyZU;
zQ<n*RWn&feKc}5i^QNX=L;7<8Qvr7ae*`(KB~9;FDShzcnOrPhR&&bV5jRUX^`pEo
zP^hc>ddzXassnXQV>~f{E)1VJYrFLkP_+S;Tq8nC%7M?C=hCRQExG^bDxpkpl#nUG
z!;{`9r^(PqkZr0s)P2fX9M5uKMRs<{oHRH7o^>h|fK;7Q>|yd43=(O$AtL1&=%9+Z
zqY7d<zYVZ3g-%ru%6Yg$qSejC(g*u8VgWka)WQ@espSQ!VhSH-3w#cHI)rc=s?70N
zVHkzTOC2n-H1b?f{DzAJqkthWgY1V<seG>y`cOQ@BgrGt*Z5PB&*Q{R$Xl8sr=j0+
zOFnYj|Nmc;lc3RTz;D+kVy!-<AI}i^$QZm@^1y67dU%n$U3USb7WM0NQe5)Vy`CRM
z`Pj<M4NnRl<$8mJ)T~mqLR*S;l941+jDL;>WkUkXaCH<Z)92bm6<(#rn*^5ln0D3a
zYxGm#@CeH*cVCSHABNqp0#yy=c5?lemYE~>lKa8R(paals?i?z-8eb&-JmD)h?|Q4
zmKQj_G)+?TwP!ns=apu69F1YtNauD%bQQYCp0L&pifigU^znY(<pakKG;KQ+a(OE_
zlEOgo{SPv2j|l)}jY3G$I*7pj96y?qx?RVaF+lk&Co|bCW?3kvtV~?x{M%KB9D}#|
z62gu}&$cG4|DeNd`@2g_B6CyFHGfMvKy1<RX^9uTeGv&Z)$X|Kv*f;oP_pK--T5Z)
zvHOIc)rcP&kiakYJf#-P-}k90kH>xIW8Ql8_4!%(6ReEyd)&gj8W&o8HpyQk;0fq<
zl}6Q&A~)>aCaOnL2T6Ix7D_`#J4=<Ej&*<FT3M5D;|CkUg2xS&CkcGxOWoSd*liX^
z=Q;nu9eJ^-+!Sh7<oiGfW1%=DabmcDA$sogE^%WfebJpl+C8^YYEEsWUB|m1)ge={
z-NHr=1*HV0%X_IX+dJ<Dma(vk`+YZ(5=jY2LhiAqv?tTnaws+!k~3yje_mQrFU(5k
zfMB`_5hB6nDu7N{hT4A4>|U%XA-T=pS$nCqM8#%4z<=zFTQHj(koRwrxbUfn2R$Yo
z-Lbadspy$$Pq&Q_?Ja)sBeG~aWEOrcVd3-Y@<!|;QmRvw6GsTxor~R9G#&3NNH%{V
z$CC=EO;Ovub~jv(lB&RZ8=a=`gdNbqSi!$POhMQwvGZ7MhBSc%YzAHLkdQ@|ZJ}<W
z5rI8iQEI)U2DF@<ap@ga`nN<ceR(X5d;#Rg8_?Rakrd4N)jUhAfKk%qN}c_94^BHC
z)*g^onIkPNnu~LL+j(m^!X%8&Sqf6;Y61>-s*ic>-vJ-R(>6)!dN5JU2e*Uo>a@?$
zA8EN$Pl=(_dV+j_kRA~S>bI6V_DFge=hhFD9z(fMUGbTg(x<8kA-1hFvD<_<C$@Gl
z^3g)F%96~O^4}=XBS_Tn&Cuo^MTx^B57NUNBa2ldZEfSLBcESxy6LCM$Q^3Ats|~*
zeS48Y1D6$94k)&@T~B7Dwx5rPA1*$@Btc*w$AzY7(UvXr?#~izP<7}5S62=B)s;}a
zrV2KJ_V@azbis&A$cjUGgDTTb)K6S}4~We%0jgf^lI{5N;~`tqGGmu?k92sA)p?~a
zNgLPYjVt3Z^q|;&QxJ#ImQoEYFc0sDHc^nxc(<^9%|xps`OyW(-yQe7+OYOb%_F;e
z?Uv@2k2nECJA+=>9h5iaSHJv2Oa`SC#PX#%Dn7>>=U6T?>UE=iLs%?3>H#^CS`Gt6
z0)E(Wlr>OpzxipXMmvmChQxFd-)m_%Qt72qc@J#3on>m{039}14`2pQ8llNvfXf53
zsykF=x?bDI9S*V%{>;2GXp4<szE9{TKLCFmbUui42ExlD1$`4l6z{}%V}G!nz8>{w
zKYup6<MV(yQ5Np3+M0xQZtD<&PK<tsfv{^|UVa_)rsXEKL9)#O#2phNyWhG8=Yo)9
zzPc*9G9uDC&{KD!b#ayccwt^#{@ZqqRtD3`$vv)dn$ZfjN!8pQ2SYUjEgHbb^k`ar
z!#)S`;C_LfHfGF?e^9m>%ua)art-_lsV7)pTbzOfONxxOpvCI?a9oX`m@F#-CIjC=
z)#->Mi)KQ;D6CFrSH{T#hhiUr-zg4o^yV$^A5IsgXBBuKMjt?!8H}h{tiHfQ`|RbC
zvZh0^l@qZ7!DI3kwnk0o&()<}{}D1YF8uKUIAq6~p}4>(<PhlyeMi-Lnkv6sSp}ld
zocL8}uiUie^5@s%TPov^od6vy6T;M;@)mn|q!p{p52D|TTQWIY4!ByyBq`s{vaXs$
zPtn{94p0NSf|?K(-({LRmIb&$`2Z`SA);Xm;aVD%yhhP8wOfIc1W*ckWym-ggH1*S
zFSo#1drRt>tZp>@vpRZnb!b;U(d)h;sIuwKpjeA_IxWZ<kEJ3ALOVj$!C~%K8|ALb
zuT=XQFb{w_U+Uxm(XbWkd7%{j056U{Rrv9=zB_k7u(`JHa-YE`8@g|{#Of7$reU;*
zgRYGVQ0w*JC6fUhrxs59VZ!a>{z$n-yJ0t@9pkozfYh-axuu=m$GD__*{z6P(B@Jq
zf@}YAQvC`bYFz(WQ;jI7%XjeE$i_4BCJV9xe)_^JF2b3&iIR@+eG&oQ*RaBHiuSXz
zvW5@_J?+K;|1vn8e<^Qw!(RT%%7QvmRPVHF+#u`Nbc;7VS$iU+2n%_XDlS9inZ#lS
zd@5bcUNyL;!Q0Br(@K*b;kO{t2TN;jMzgEw>%?^09Tr)JdG8qjqb@KK?u{{mg+uB{
z!B;r?3AOc0?!$0_g#w4p`o(w8&shlcnE2VKixo6bSBQ$V+}l%SP<P#ZfSsjClkZCP
z6r#gJmfN8<pynHgp$+XgunNoEt}g8V`@O_lBJZVL{gT}6R(O#roV&$9F(czzG#S_a
z1{eAIrs)E`gyzM;CxQl?WDWk~gthRIpqnIv_*1r8rC4ic!MKB2`3X7qc`~OX{jwXp
zBOr*^;Mic%c=#oF)`kIM4m$Of!1kBY$;IalZk2#@OZ7_QH6MvOf?^eh{u(#yQWcJ9
z`IP@RKN(d8$PwuxO_??!sg7|(gV+1(V<{_WY9xJ_cQFr*<MAL}`i55dr=dty9B|(6
z5_b6Hs#TE+U72U3(Yh5DNTAuV1}{+jkhU}nrSrp)I34&@rSI%dgM^OBs|5=?O3XkT
z>&RxekX((O;KcZ9*Vd(>Bvxk1my`<98Gp0)H!WeWcB=(#&4d~BvTQdR#iK*cW}<eZ
zti)4FK(IY^UhSBJ^gtu&$B=``pk=>V+3|z^P{$VHK^jb?MF<NM^ji6+P{Q2Ac0Hnz
zt2E_vaLIW|Ec9?d#GnA2l;fLweMJIya@j$Gd<EfQeR`<z#I<N=kHkl+aYHo9Rym{O
zsLN6Llb6U2b-PoeQ=f07kcX{%d3j<xG+3^T?v+to7|-9sfpBFjUV^hQWAVIpb{n>*
zg#-_$m{@}h;qNtSIJUH-C<9JaHZ(YaGYmYSV_*!YBrBP_9DNQ&k4ejJcilYPDCa{D
zvR<@Im{2I5AP;C*2E=O<Ve)y#%_^YNYrvHLEmq>{E76>}X(I008|q}ZSZCwK6n5(S
zmqjDWVHwB)vL1(0phf2O5TO9ZaIu!FKj%p&%u&Eaz+qx}H%l_dY_O|>5g)b|;6Tum
z*K%HfHl?4T;b-h(rm6;E@kVHl^kg&k9(k$uSVda!Vb{j2#~2l6M`FRHsqNd&H?JXx
zua_e_<E^jcCu}L+%>}Or;&{vC4_r^7$UV9zCol|Z<A+*HUbKX$oI7EZbkqLU?HMFL
zhc!;E?#Iugu8tP!zyQ-<a+)<u_YCm=(;64G!U++rj9SsH+z#=kSu&&I1R1pWTwg7g
z+tWbu3QQv)3Z5pd4hlhZWGYGki}^u(wyCsDMbw6zV2WJQ&0(J(i+iP-)j{h;LfXkS
z;RlZ@87rMHGTMxr;KFjxXg0m*YCEf^Sqr+!8=G8HK;Ht9bI0oD3$y;o0|H+YFpH+m
zRgR>g2z7~2wv;P?<(4~Ws|op*ef0)d46m=~iUN%1QmaA@7N;8stpN&f-m;Qek41X0
z9Z8qT4)vlllo^7MhoaIVvxUAs+XWt=m@6RRvFWOOOB)XCcWjmK@^?rBLgu@4)@B(A
z+%lfG?rkhZ`J-a!lB=T8G$<<uR3H6S*Hk63oJ2~XgDFkpv6{V+9qK5SvNW}!<<M-E
zen_9z1W;&1dk)7<GCKGDTZbHu`bCMu$9xV{f)u`CtItlt#^d<>zu>A#+6!N~cG`uY
zY~QRCLuLf~B3^_Bp`fD=ahX}y%mlBq?A^TVfdH}P+a`bMycIR`4dqSs0fvz>dK5FH
zllUiolofqhK4;hOl@iL32WAx3%Y{sVRpzM14}b5)c13+@*@c>-l?GT7LFX#riIYWC
zcz3v%!p1*MEQ{;ati-Z5N}iv++T@_N($e{i4qTf}sjAw=Gn%6WCQW>4f`j2eQKa4?
zW%mjxLy1JW{N9g>;OU2ed+z;lk+XP(M0nZxLYf$YUyRjo2=Yk#ke~k|s3%HF&IX$I
zvS-DoUu4ACa;({{w1;m4C}@PxFB?OfhfS`=N59gEIpb}>;(S%{q<l>y#?}VtcaZ$J
zQQou5arC-H7OXF)`BCXepO=Fh<Ap>>W#4rcwY(*~{(r!#0^nZKqgwA&`*y05oJgUI
zdwfBX?#`d%;if-OT`^ZxsyvHnCx>_)fkuh4BWe31bL;WJMQx=y+C$&op4D3nU^i7v
zV8HG=aLzLw0fJy;I`hx5tQN2nhe@+0K&Rsmnudd`W4e|5h`W&qhSSSfA-o}@7PpUL
zy+&s`TZ%!_0lf_6)6+^DW<3jx-zME;-^$2lBx3>XHxr3_!;1ZVS9bEb*%tZ;l>?mV
z@!t`zvz$aqTRw!aS7q<rT~FKET>U#U;SkY4%o!tdYfZKeLYq8hj3OheML-TP5Pwlp
z_GEh-9h`Df9Hc2v(iCGT_XM)dwdCpEU}(IlCo*_~H3Nv>){ZVs){=kn=RA?-2#P1Y
zNPNraDNYJY1>UX9djSNh<+b{}Q~IPOTGfe+lKX>sCw`mipIiW@4F%-vum5N9@t|(-
zp$%A*AIN4k6WbQa2nkJmQgfUO()mX(N>b^VTnppGlhzooKibG*8Gtz1LAEAPsgVmF
zt#1d8Zbf$e)VNMNi%-Mp^86O)fE6VXiUkUDLg(=O_9_Ojrm?ajJ3Tmj(5p|dvu_Lq
zd84&`2wrx6qczUgAbl9Ypi^6F5Kj}sEfefNewFMxT3jHEP3sot2Fmt@OZ#LMAHf>`
zc9_Q&SS4iZb*vSy(a%|K&X_f{jod#{S76j3wwMeDD_>E3TLPxYnrsnw#{yvmOFCq(
zK+@l^w{)eE{Vh{m9>fm!u(0#SSy8o{=bB3?<58yVC4Wn<gKl4xE~I7lsMTjy<HVb$
zIYO*u??z|3O)i#D9D{8Oq>bSaJoNnS1#%-nnz<cR>Ep0+Pbub|eckBx-9X0Ic-}R(
z0OryHCTXFm$n2T&=!3^ze4n?;fe1Y8M4=?utXDRjSi<o$plq%wyLcybn6jsbjT94a
z{;>ey6-R()xxS-bv5Pt1oe3pFQ~nAZ4dk~7_S@oV^Uw#NkY-)pDs<mbD^U5FmT0;9
zvz9A?0|XB>$mrj!G|iNlOFxx3hGpf)B!+%*QHN1!&{h~AgHw6k=%4ZAg;r6JaGw}s
zbinhEq(T`Z!qt*k-8+)HxAX{1vVk({(K{G1cr7;Y#H6MeaZj=6QJDF{4PEw3%-J(T
zLxzC=PnjR{4kZHZKj=;<Esdn0owx)Driv(kmP7yIHQWplS*7$6awK5GY<R;T$OZA&
zxdFB|wQ7UvDDcJk4~Tcv$X!mqg*nPj0QFZBi-pg>G~eaF=|A~7?7tYe{npnhvA3q8
zi5412b%pRawcuzMxwk4Rl5mDk)yIVD90G2HXgqFi!-~83x7h#x1868qp=mBu+QTxQ
z5I60$CVbg4?&B@KuJGbhJTeRFIeP&p_9hRsX#fCLl{0z(FGSR5sr#sAK$9}LjyjZE
znNTO?XXP>PEfgVL$GCn{!V{a_`<>(_tATpAteN~hz~y~WjgYSID0*zD(|<F4Xt8*J
zxBc{CLx2oA4%g#PYoPwms!rdY_rigaO$YM@O7^$oM5Zt9rt=jY`}6&2$u@DQ2S)lj
zB3<qZjlUuVbnOe@FE<n<?9T8`a(&XZmx_=cN%9OxC3;BU$JjikD~&%%>_R`ig&+|i
zwFd&0Ayr^Qln}X-mW;*%lg8;+&s}TCrc>W6Sp@}b&{L66TA(GIqIKdV$dZirL}ICh
zEyyUYVjM}^e3j2HK|OE|YhG?i-i_&hG8u1nim=DA6EfHjS4#RG^d7d5x@~M-UHZKz
z%*2W<+S?U2cqP`(U!#4C0t-K~hdgjc7OMd_h%lj)iHcYfrJNsc(AHTO7on~KTTkn<
z!OWXJYiGXwGF>}3x-G?F525s#hH|feEUm#XtCEznm#eG4(NlgrI1B9xxF$x~?WKFb
zSKoCpH+ks{=cL2nB{`i`TS6mR8J`qg+F&s^s!$kX1un3|!G~nagQ)1PV(;mezU0)z
zx;x5K(+zqFR46CJjX}K?QlKg`=0F$sF|P|nHfH@yMjM|`5K{Bxz;>2bw|y&^=K2sA
zy^;}hgaN4=U2nMYQhzEcSCF|V&WNsAegLInf!qHf9`$`gqs8Q~R)tC`#WfQyGpANS
z^=ce-f#&OFx7Nr#0Le=E$<6C<9Zi4N%iG61X<cdyD`Hc<2;+%enm=Tpl=k^<QC0|A
zAW86EPx6BRih)Zn4!B_=2B@=|79Y7fwd!_9y=+6iQI|WC_ZSGcvi}=9V$ivPmJQu4
z)H{Bc9(;OhNjT!k*#IOO82SC>F8h-%375IqrzsahC7+6bLtNPBP8F<P3$4DJ_0XNu
z7?q<D=W)<P%2)m^_Xw+;pM@f8;JAI^TP<;X0u?=~eTj$_#?2Ty^-G31z`NKl7g%li
zj1LCbsB?Rk+tvWt<L^AIl6spp-yl+XdczKytEDaj%N!?K=^7IJ8Tfg@Z=Rl}mU<v2
z7LiKWCqqHSrNuhu%kCuzsgEZd_#|EbRT#3{q>Oq!;6Em>6ZT;}zki9=GBK6aJb%hg
zdsc_v65fnPJ#QOtiO<t63&$VG?5O@%IG5Km76f4kIu8|^B56`Shd(S`l{eHp3j~FW
z1Wv9${l2o4s%)Q<onLq>!9r<58u|zuN9Y8qENMY1wt{M?xu5Om`D`XnI8A;pntp>2
zdf6t9rb}Olquk8BWY;P^d9`=$ts8NBZvHgmf2Uk5-8~mRbsb}GN+thS20-7X>p0jw
z&IB2D5Vj&0zuOwlB#-;~GUf%}HO2A0Y0jMpmtuVuhdG;PbyeQ!@HpdOAD%(iNmh5>
zYIFjZN@&uh7})ZjO8{7)7;vr}SQKf!uCml{<D99-lzoc3hCop4Pm8d1e>&eWSX4Op
zW`FeKj8H5?H~jSpx<ueKu9c0O^(z;J$FXflF=qUsBV8r|27#uvofRi(Tlis*1sFo0
zxfstxmq){{ZU0p_p3>G~Qfe%xM<k1JHX+%CHOFD1XLWWiBD1L;@_(cI+u-fmOh~lA
zzmdmSX^y^CW08m$QSxq*uXncvz!cnR$t|QMN_Mdn&#z~?8!=i-a@8MJ)8oK!BvZNZ
zHE;m5bf*ACl}paRuCeDVF#q#exEVG0WQuEfg$jb@?Tn#OG$-oO7M`6z5kK#BJ7je`
z3p!OImz;p7n@us+-~Z10`y2jN9ZZFVaP4-ej_KGo0DLjEdb#5x6`$?Qu8`ciKct-O
zv~4tI658~B%8B^}Z5762g5X-C3slu!h38qd=zyYw>z5yB>`>ncE$APA75N^$ip8D#
z1p#w+U^DUwIpp+}6?97)O^u58yFrEgr%>_>!LVKQ_&Wn*#AaV81g#WG2p4NgdGt}K
zJ4Qlcv0gRNdd((U7*<#d5z|eAlA&wZg{AS-QgW7+Eh#3gb|>?C^rrsW267zyP25)@
zRi$u6xa~y1ERXjH@;#6ekt8|1%uRHiY3e&EXYBpTAcmo0+O?oQS6$V}Y3<04_`Ea?
z9l((fgj~uCKW0w%ErI?6p|F`W_w5Ge{C3Dl+ZCi}Kys<3?D)Gmlkl`^%A#vq&Hy}d
z?!t0g9E*lrdtlb+HH5~tSPK^A9z#(4-GHg|0wPV{QL-b7g!c!Ng3yoru<goo0jRO9
z2tD#>+dE1XS>D%39v^+Uk3ss;&+G57p|`vs*Ql_(|FTdxc}YXiJ23^hnS14!ISd?h
zerEs<#BjM(&_YZ?4lQK|zwDunl^qpBFatUIHzIlOY$W+Sb1V3jzDca&w(h)I2N3a=
zEw-I`?S;LB#!Rgjm=)Ly2J#;Hly{Me#U)4zvsxgQ!#mta3O-;sxYD<d*}OSpEL~GN
z=A+(bF_j{-k!nM14J0g)J&dImF83Tgf%a`cUNIy#;7neYh<(iYxfsWXL<W1t1sFZ_
zW4m({lIx~lj{fdkvnEu|kFAsXO&+rxl+Q*>c5hrz1>`R6?v1R<MZ{znDTiZ?yCEQ2
z&e7<AKOYL5)yA|=iLeVCcS(}!8wCPsS!f7YlnfydoAqI3WXl$bun5J2UF|2{K7J?o
zMkE|52sJjF$8=z46%O$Tzcvglbg9$zl$fS1S2v!kdnAOf@L_u5BU^}yPU*FZi1Hed
zNt2#uR8@O^Sc#2-_Sc^r&GwW)SCH?=|MUJ*A8vcx;19}s?dcS&_ct=Wcsky&nq@!j
zVlZ)~pkpj(So1wRac=*P6=s_<56kfBd{BwyV&R9_9E)KeD=}V-a+gMlQUf(#<95=`
z^0k)I+2tDWlTp&TRlP;l=|$J#`|+|;zDF2Tf{c=2Wc&?4+^NOeajEP?SG0i&DSWwF
zvT0`J6$MfQQ=|?ssD#v@M|0SJ|EZwM8H=$xy0n|J(;OmMBHzYsD#|uhEX1-(Fp9wa
zbgbLom?AjTWQNo4l$|67{(whJVZlkFI82VGeN_=4eO*EtJbN*}{)V7_UUg56|6JUl
zj!=cXu=?9yMag-fFan&w9eKE5zhg<nK`S<;YD1+om=ny+N195$k@4^%rP<it>r1Li
z@rF2V{xN{^6Z@Z)m^$o)&Wzp=g6yt~;iqK*M&LU%<;DV)ks|^>kTlR`uD*)GdLxHW
zyr$sdf1|EBETei~ZxnY510d@n1&2<?R!aIWDAD<(=dsd?fo=kE6@<oQMAk@uL?U#S
z7hvrfR*{b$`5hsU%~7+Orm^=zsfy{kApKbqz6#8X@CzmQ5(PfP=4A^8ezAki)%*&m
zPoLK4WHQ<$!02<XjOuD<Ifz9|MbyX9{N$+_((pLlQ-PbT^pbaQ<-cI`5#Xz&uw}f6
zey^{+CNjd3QZFgFPDGt`^5>F}hb|a?pY;vRS#1YW8c}|QpGB-0WQ4q%*mnVXfUI<e
zz6PODl(c2p#k9tml90?$&HueJk&B)N388mK&u!EG$-x`%<5($Tp?`+mc?yDUGxk$+
zN91HBcj1GtP5r#hUaI!-?=aPQlbxGB*e`%{ha(Zs>Q84Kzm+e6@uAV?MD6wFGKfz_
zvXbY-V1k)Hzkpy0Y<(C-3p_2jWeG^x-$z(>d3896FTzv%{FZi^dtP)?pO4|{{biB5
zc@pb>zA)IQkQTZm$P4@MD3<>RNdRDdMR{6Gyp3?%c6*^0E5k_V;5apW1W;Y>O-%Qi
zXBS~DtPXjCpNypx5H_dz)ey?N^q^NR2WSay<+ZdWn6bQ?ZWH(#x_WG6!KZg0zk}me
z2gO2;DT%HO5(Y>Q(l#Dbtqa+HF9CtHlL3iGg-3i;61?o6%4CP75KAyxq^?)4O#{5}
zZw$uDiYjJ#Q5?2BDg|<NMf#|7DR}Ygb@XBJ6#g7D?7mmIuE~y?9JYC2_TigAko3+H
z5n(mm8u*sP+@sG(c>u%Smi@XorYT1g_g~fYFaRia869J{K0+q*Jb<1X85Ltyrn>n=
zLPK`ea<C7tna_;Il|O@G=V@q$!{aLUu(QMrjamE;cule%N(Y68OQX&!3`@h0R*?k?
zWT5;csxCrm`aJdh=qv7Po^cP+9DqysKGI+*=%O$VtJ1RFnw29L{*}%u56dRcyQsie
zN>45=NPzt*d#Os2+{+tCO6y#qa)|S#<4DGV_Ci02eEDhmRn*6t>&t;17<C=w<IC5>
zih77sQnfJJXGtm%w<+OJpDZ69#75bV#2}Nsk~0TRfyjfPOH^g_93SNhU)ldVVu7}a
zcb=ComXd1JHC%o1C%Hw$hz=(FhY1!hKMA0T%NoAt@-$p#AB4kjsn;=u$DDbzYI3lZ
zHkEW>A9fC9ZWIJUE|4~UNdI<Ms4gu5n4XA7;<#&$W9wQ>ZH!Qp`x@lXjX2DGO!TXB
zo_hOAcxLn03?VtD+)`R?B@&nAkH~N!?Bau^@w7#Sydc5Pg3c6PYX1B|C?NjNJLrP(
zW1X+2XBK?*kmQb;^_~c1ps^moP_q}J?S%Z&bU>@8KA$0v2X$6w6)<X~f7J%04#D*O
zAt=0fGp3I^McBUeGHzNG6X~s24!QInbgALctsO?*&4q%#J#1WsCk$WM*O2o<mSlJ@
zFhH!8a)JpPING*S;oUpDArraV-;Kt;M0`<8A+NlKtIzHit%)x?7YV}^a6DZ&v)w`f
zOhD7QF8eqjw(7(m+T3L%Q(BnsJVz?x0kn`0TAlpW*|a<J0T+Q={yliVoKYaI@m%t)
zVX%!2))(`;jG#^Tgz9xketn)XTZ<v4;mUsK3E}0KJOEMskLOijEG*g{Tidre2u{x_
z+ZVpnNgw?YCBw%2Yax?wl)5!=PDV(=1n8^iYx<P1XHR+7@_!=yz2F7fWPQv*6?r2(
z_o|XLGoyJlaTFZ(O!!&{z|=Rbk&gP7g^m{D4RZ<R`K#*39~1>rH68qn+Tlk#uY&!t
z2W0}J&+$)&T1LRoPdt($S8&<<DToF_!1gAYh>jR%CCI}<Ho*>xB36wOJyE(P=Mbhi
ztBD305v+G#=j1vUcSt}q*j0hOKEz9D^UwkvbF_*YtpYiKeGp4o9)(j6emmXa!kJ=W
zh*$CA{uR31)XpL}n|8g$aYy5e=Av3-fbw8>zNmp}U{DWeDrlci)^LVFHzdC$M6N%B
zBvb%S7QeZ=YsjS$te$v?mS+UT)mMPVtsxJjU~UGWpk{$$2s0DsBjGJC+HQ2Y4=L(;
zqEKe7R2G&0v1+@91aFj(i#XJNKnkf`AI%BF=l9SLTqYL8Fmq=*ws-WzW<1D!d&G}_
z7Ga}xuTBVH2)!`kg~b1Znrx9{HW7{&1_y*+j#AiXGf3ekj$)m6AwBNQ?KD%=_^H{I
zGiZUI>mOPetjDpr4%TZ>LwC<9;4=t?^<|T8%B7B^Dt)Y{5C!C1EKW14!E^i;EYE42
z+D+wZ%Ssrp9+d?S9={eu&Drq3SZ|aFUoRb=kzn<_e#nbU)2ndc@I&GE;ca9oYe^^T
zhlY-F#-gB`Osyo$GbWieJ#ZtQT3}=COIg%)Gs2Z<_uALWxr;-v)jr5!z=-@dumWWe
znvtr*e{PSs6<y{JnA#Wm<MXuK89gX;{4}W}3<!%i%&GbtA6j1GMD7Kfq|-|;uShFU
z{2+IedM;ysFM&^dcak?`F#Q<V!T-exZJ|*UEE6;)FeBp+f^AsLuQn6Z`+pv?Pa_%s
z$$81$kw~O3<&Wh!oyXpg9rYYjJ1%i){ca5}EzS~XFb3SKnHuS4M^({3jj?EN_&O;T
zc(WqGh^A?Xg|0xn6w}@yu^Sq))}~vzrNr=L(jnLCwj9V*e;cYoeQzF5?-m$`2``!a
zg5U+^s10T4Wl2eAF<5la^71J(*c!X=uM<$vIevfrPZ75wdcMB-Z_c6M3XwsdiRPFj
zbV(LJYAz@?(KSBA0Wbh!v@4x=*-&4_9wbq=Y0Rb=OX_Ux4FUnWPm(>duOIjIz{l>E
zVv${O{mKxYE&xBq{U?oUsBq=yxFVkJGU45|cy7U4*Sz+#I0Dy$Pm&HA6@o2sYtqOR
zCSW6-<q?Za7LA~mYbDu>^N2AyA?sCqH__J|%fC8rKT?YluU1flt}{<r=%R5*V~6Vd
zi)iEl_?;01+i`tu_xYPs(X$a;)*?}V2b6ZXIUfY8<bMJeH|jp{qXb*PX7zvtRCpTv
zT?3LBnj>Z&X(<Z8o<i{`<EB*%A87vz0rO{Zzz1KcZN~}m4uC+YPNGqUE7Tb^lY`P?
z4JPf@NZT4I{T;tgQhSYo$EJNfn-`K{Iw<BZ0quAy#|z^<>s}9`zX<$#G69BCeGxZT
zk$-MR_sxc;bYeBqvLnzwlEO($A*sa?Cav&Ld1crBpxp#sM-@tDUQZXTU5c3%C0?HD
z#+5o>@q8T}eK-C}(F^;zY143tiY@3iXFv9ho@C)@(XSbaEImRgnODdv*rG>Sl%VR9
zS*i5e@%}}wdN*`0FQ?<RXLXv(gha=CqKqTX`cl?i(*0LI)+0+}Q)z)hIO@}Apa|)7
z-}zzsm)mP*G$O<S_ALir7*$Y?1s7CMWduHC9U1u4QT3_ol19q~6^(Y1Y>dZT-}is`
zA4>V%Ty}DUef#3;F>gIHKca%zqjOrX@mV*n#ojr<XcYMP*h7vZsAQQ%hPFgiUcxec
zLRC^j0o!>PUTuz{E%=#2Wis&g)i8MB+emy;i1`6=K5f}qZZXA#l3ici^NR}K%|r2Z
zYM3#dwJ>x+C~mp?lxpI{N;ae<oqez^78MhB-Zq!BI34wEwzV+&>{-TjHw*d&JvN&8
z&jerV2G@cR_I*)hXo_1={;7w#Sr`+8UMvfsGOlENB_(%1md{+B2*x;P^s2SZhaP4a
z;OQxihvFl5-I*9XFvTsSYAn0_OYhosm3|mwkzoD7m%_GCYp#0oA?v)sZ^A3eO^!QW
zLeiPx2m8>jBP$e5(eNWCz@_<xl7`I&v64HlB<Ikk&T8eO<KonWAevnVzHtGOwE0mS
zQ?+d#ug7IxT$rcGamMBI%Ac}nng`<`>_DxA+e7nyT3tBT256^#&9T1kh5()!Gm#pi
z+y9<RCd+$QGKjAI?}<evxOtgKvc`qR@>#Sb(Xux_fht1zWcniw@Fc%tEIeG!b!^5=
zZzUJ6GD#vB*z6y}WWhqvT+?T3$$*`%aLmopqgfpybCYn~Cij~mwOud=gK=$0AknlM
zKhAE^0<w3ufs=Z-jUT;@r+4Iw&55ZDk3QPd)hiUBf|1~iyf)P1X(ph^An*zmW&6dc
zn`mLbA2x5s5s^wCiPcH`MN?y37+M6r%)@>Qj7SyL=?}WA>Yfk&M;@!`R*<IBi4Atf
zPhq6W7F}4{48t98k{vnB2d%W6&oQf50QT(P?LRMg=}y@-F_n6wTOt4|t&jui4D$kf
zo@Fa^z}9XNl{Uhqem$@GyuOSSJP7R_6Mhkh-zzIanfSLlE7WgCuTwy|fDRESfuWga
zP1WyX{SbmfY$SgUkw*;HW=_?L$iF5YQV((=-9)2Iu8t5`Z8bPpS#OFcij=U<$mt6C
zVRRtR=+LBZj5_8jJ$vd5WvDI7;Q22Zlc`)f3Ge4A$-+ejZVZG#NWRO;L^5_nw&;}P
z(xCjb2KQx8*5v|yiWxQh4IT5V4av>fpdl<C4`~ui@7NnSRcl5wWymBtJS-tY7d74D
z*Nbl?T_AcO{>b$pkMzR)r1G^f!I+lfb8*kn-DeAC14X`gtNG1LJpyX?nB{`TegS}1
zJN<H*y1;A6aE3+o%+m|L^cDyBP%gF?Igbq64#{CH*_d!ujk{$z)+Q#|^E8CJdbEwp
zw<4kAlkCjAh8<EkTAC~sQ$=}`#cw5B5t{?Oy&Ny=?`24(eN+~5O<SdJmu|jpq>(#(
zxWtTahoZQ|#Uo4a4!aGNl;Wj;%5E6tH#6DmM*-qAl(nyii1@MklhX>`D5Fa#UOH~#
zQAi`*HQ8pOz0L^bMvaC<F6g5b+KsVaz>Uri5~yA?xG4?>TBCYTZ%5w_Fs{n5_9)^4
zv{eW4Ga5QQ?QHAZZjOl|$bvyd<;lxF_eO>c<wlSUGx-*uI0ng*9cDERD3EJcn;_+o
zS^)^q`O50TpF9m6x~5n{)f{$sQ}V`4J2%*VzYN@BNof+$W_zwCB<CQ(Qoyq`*w*@z
zbSV5ynwb>^5}(22g}iA|hBItF4xoJ(72J{F<Th#*4k4aL5}S@WZ@-r(-B)M|n2l7g
z{+t@*pe?b5%csEQ{~Mn3AjmhM_^Bn?*6~MwaTQ5yvq`K1$NV}~O5uvyDxjqqn?0Gx
zve}>@GcwOSa)I5v=nF!aEw3?bJ-XTqDyHmDYIJ7^L^Y-XG9Wlf)F-#lw%ubMzV>(T
zex+FOOHI6Bs-hGS<i5xWP5!Zc?Ap4k*GwAWMD^m7YE_I&-?I5%&nmE3rAkR1ZqlHc
z#jHATponIW(YKzA!A3hg-0U7R@t|I0jM|Z(aHrssssNHJbIZpOC$*_PGPmbfEQm7y
z^go}@nxk`r<qv<;!$7R!$d(c_<u&CU22m^+L93!TtWV*cjf{gPp&~#5kmY^V^4AI7
z6j7S?jPtz=GsN1G4HPW`QJqa)D;lqap@+<B<`&4CP+kyCdEK%1XVKc8#BoOn703j!
z3Ta9zhOsR3aQvA3(+OGR$!HLYg$BR|@SlRq01Fbw5E89yEZj(XX#vNG8g%*Yb0a9+
z+7hm<xnDh>_Ksmw%8YsjWdoc-*4_+MmuW6I)O?<iU^eQ0OeIOc9m=F+GuPTP#7PHc
z$UKj=4ny&q@<*ekwCUU~oMi)d#M1`(T6ZNHLRJqJGt|xsHa^K$1u`pz5}S&pUx%}a
zrxFtY+~ODSW`nfK_fGAqQ2I$}E4+?v)@S-$8QfWBWY#I%X;=w06Tn~nS-a^{v<Yu!
zPmrUgceMV>b`uGGZB}3h7bLfr2ruzd5vYCoFbN9IgG7R?^l?!+KAaPukj$EdAu*~p
z{=tOB9)+<OVCh;PcNH#IybpN#{TNWWr6%P{!e&1|kRw8skahUDZ&kesc4N)?qu+rN
z)tzaQyJlJ;0JRgIo)yhj+>yL`<^5@vAYNgD(tv9?hW%UQ9In3cmgG%5165v9H~w9U
z&4)tVk5v^IrIED7VVzN|Ky}cfv3lPwjO?@ft}UNNI?DmBm3KJ8*49yv=<*RzFHCJ_
ztISeXNfYG)7gYZNn8DCaZo?w}v%fGkW(`)$-oyD_m&VT-5v*D%cf9sjIvwz7w<Vo9
zwCVw1VKO<{TViwLq>su)@XBF0{bwViUW)u}^9-6gwbo_;^VI&j?~{#9nTz-jqdKM{
zkmj$rf>+vK?Wd&S)2kHaWO>1?9{0vuDqCT5p1*@V_l3!o^3SOox}n1nl4<8EyeD+s
zK3H6XKlA6R-2L>84<0k{6a(fD4C@!8#S?^qw0*kw<_vfPuSw0<XIZ^hvWgc^$GYPp
zzB-@gtp@j>4$ZJ8?bu>f-~x@?+yj|w&ncUVamG--cAf!hr(p<qxQmAbI+xxZuV#LP
zU?)tnUwKxw9kq*<a2Xu~_j)u%wxU}GQkEw{s@v!@cv4Y7dnWoGY&|9%3lnzrc*7{d
z`R_~8iAVqqA2ff|FAiiJuQWx)4irYOBR8k(gvUFXf>$79Kr;oH22;i0u!B10qEg<2
z=Tc@DkCrfkD@nZO6JC|j$W*BubkVbhv9E@0rZ0@E8IBo$<<wBB@rV9K9K=t$Hp(;d
zQ38S5&)Xc)ty1-bZrmG_+xzJW7ND3#Re_l@tTCE-tyFqT<&Ru&w`36p13&4;L!Yaz
z>x|!1hK{F#CA@H=M=%_E8wt5@8$_n4lVBfi5~LhP-@_PcJ;!3*o~X}Nm9?t2C)SCR
zOUAHEuW@!YLS_5h;kvKE`U-Gd`zj?-`(=oCGgM$sAh-tN<*`IB@s3YR5IH6buqAOF
zI;S%I2<U-Y1W@_B;Ur@-0>oIV9sH#Trkv>NY;x%9iIp6i4srJ_Z61jI=E0mZ-t?{P
z`K2+GxmgAIWjGjy=zK7=UXbU+|I1un^4+w9!YsqCPp3LKoc4?T|HmBVt-7l8Vp8og
z+9<?J!9^@H`xsWLc&M%4Nt0NDxf9|{9;H8_(*umxr<1Lz)<9q6kahKEX2mO)X9tn{
zwh1NReMQ0CyG9pgWCqSM2$5N0+pVz>2iGmL?%?~-?3GxP(qCH2Zr{^;m_z`l_13(|
zPr%AZ3=HPXHgA6EY>Q5FQG(T({=2IuttrT$#zBaZ#c7R&{tqAgdi@tJHw=G%5!R<?
z;s`l(!mo{ST8JXBo=-J!P$ezhOCI83FR>Z~8Ht|k75Ub#!tr&+_6<N(h~bzEURSGL
z?1pbML-Nb!HHf+VMlU|bgREchjf-*X?`FlOBa1(+%};y<Z?E&<6?zZ@C}%#>CO#C*
z?^qK3saC_CS0-!XJ7Av$C11(J0^1yfF<8g}>D$1{&08aI@5LtO359$crR@@PJ1Wj}
z(fLk?klQ)Ug;?$J5i$OXKo?liZ%ieEcw!`|Shrloj1b_SE$@uhc@zv0S*`VsLm8J}
zlcwjT1jZs0Fc$5caK)GKcz)}fyPtHL8@N=pbt<eES}r6k4SJfSdTSU91c!$lyc-s*
zd|sK2I9h80X5Mch_|7!%3RQ9U8v+{)kRd;>@HGAVdL7hugi3Q1BOX5!>+Ecy-*jLg
z=-YbA6EZ(e0^gFGGx7CI%E)9FLR_~k5wD^pL&5H>qt$|JXI7jZs<Q++Vjia{dG?($
zgqSTmH_rS5r30wEaX7vJYajp$+tQ}Z03swdpwa&tVOG*JMf+>`490_@z&sMP@WDV*
zG3G@iUB^pl$t?{2YSOP*XC%xL9pPkpaD!XGwCv+HiR%8DiHFmI%TD5|Tz{3X%A96b
zblq=*c((EADWQAV8foY;xC4hcReDN*rz@Hdm%6#ddr2%Nx~APutk@4Ip_cgi+m@7|
zs@8krsrKGYJPnBB42%#1jQD`122)2#T|kypJ&*4Txv757hyWsU2!zBYktBLOgS7sB
z@^Y@kSrxx{P%^JywBG!>a!H;P(wn|^0Y&;$j~i$qFHbv~5tz&^(Y&Ak9@@1HBu6<P
z<J$3jItg(?5~I8s+12|4M^1Et#g8S{jVbw-^*C2l`q8<OzJ|@=v}%54%8OumO|3y3
zFoU*jnIN!vJMLWEdcms(BH2<{<|Yf6Gf81oPed5AYlskuum4)=fDXVkY-C_6E_&~G
zZnC7TU-y>=^yaRwAQQLE<&UWO+`CZ(%_|q$*X~ye-Tnh@{3&xT0;xs@7;r3mhpfL~
zICgHYbp<d_tG4ZLjCDR6<LQ50wX#VRG&tfkaSRe0v<w{Zxvh8!wM}|5Nc+~6PL`{l
zurgGn*$?*|o6-eQuVC(8xb_N)#WD9-42N}|LU34?hTqeMUnF5ymMYy&RQZoKgX)b5
zFs~~QJ5KZJme$kP1v00y5LZdD6)k<+Rb%D+y}(;6>^1TGxpeW!Zg_Z*p_bQEGYBQ)
zCVT{#9di`C;Ob_!-83ajE*vPfOtCR&1{K3{TJq`i^C04vgF2C1U^_8+8xm{BEv(QE
zp*&)teMQP^3kqp|Xm5`sN!&nNTF#W>EX&OMW#4N?6{MmWWJ*G@0GKW%lut1_NY)0d
z5<U8|Z}qwhOFgyo5BQ*KvK@1L3}~0sQYXhz`^HR<y8?l(u%B6s?>U6EBuDffnv))u
zQp6$HY#9rXxcP5v(qK6b<xy>R*-zW7R{aJ7Z8~V_eeN-YHKv1VAVI{i;PN*Fm|uFI
z`CPp2O1dj;MgKs#n@XhXLq%8k_Bb%;x2^)~<Tz1kyz>;UOs?oFgvZ09)!f$+XPMJ!
zJL+%$o2ot#-uE8<wKHy#LXRj|Z(iE<7=pFBxUv<aY$;yqs{|_MQ3|@V2z6<Ky(d&J
zjd~(sX#ZTH-WDg<&#=-5p4y)4<0M;pbfNuMDO$Rv;n0hT<hn~1aa!@?$Fni#`-zLS
zlgJ0|f{)OK0~pti=ss(4_x3MD3OUr<Wl6L1U6dKCJGk<I%Ype&6N6Vk;R+e+2*|oZ
zYJx~S&vXjI7|=2DJ#uV5+$a>6d=J=PsJsA_mZ2~MVcEN*t5=<nbX3?Pv~7lT4>B}j
zYv(`xOi1cBtMuX9d5-2Rl?r1)+gWUo>=*S@m*f{{rE&J0s>$XLAz|2{m$ruJG>l7x
ztpe;PDD5t>H8kL2?wrfMCh9u!ekB&;#AA-E?{Wf4f=|CS^~P&$gXSVyw+n`@tUM`q
z*ESnvom!7_HU%)d++tD-YUs9T8WAQrlH)Xg#XUzGH8x`&T#I*ujLoeBb95>tW0i+o
zI@{+g07IQT>80+ll`f&<mKz`SJs~O<C0F$H9zjafvASoPhrGWj3X$6weH#wg9V)IL
z@BgGOw<7K6=$A_2d*C}gIFL&MQ6cs}W$X3~RRgR!RoEM*_OSgQ_8hsU<TCKBNPc^A
zg814}P5&cZWM*TdXukr2)q(-JrT~j(3+UXH6Yf=@`xFrx?#N__5$P^oaQE*TNt6B9
zG$LUvI2=1Nu+7`psN8O_^AwV*r~a}xqUw4Q1r=~wXUp3~M~IQ#9iReWOHV)ugvI0H
z(&io&rH|fn0LHNFZUl%)6(I-26o)IF#zm(-Q}2RlHC0-h?_on{y{8F@xnC)y!CCg%
z2cH;-SJ;(#sG96CEXD?Q`#T*jsAq9i$OWu^{@s?}pLFU()fWKWoThTL!%khDfhnY5
z4z%xu&-oe$a@4E^4dF4Jg7E3{kZbNZ+5+TFMNN8QU7H9%V$yHx8JF0`t7}g$xSSPA
z$OgF<)`>>M$TLw2tk<0Jw!Qwi4Z?_uV2${+5^>!+HRoV2=skBLsiD$YF@#rPFJp+<
zZ%>$A^g9vrv2s`}On#c_^;(U~Lti@G#s3=VUaczL&sn>%rAp%d>UKiI6#!;o1FJ%%
z=yfc0IaJ>Hz*RA%Dg~e`q2UT1gFwa4&6?C^f`pY*$YVyjWf8>K<3$KCL%XzXwUR%m
zDAF&P9~wI$+&8Sbi0m9T0+~JOguKTlbjMCXND9=m(Aw+6fd(s^jDwCVTAC}ismRh6
zWI5g@sgl@8Mrtv&&=rVZy-HIuNc<|YmSV(6Jdn!tCbZ;SOfIK^<T+XmsfCvx51y@u
zbmK&t`JR1~jvcHukG0pK(@IVJdL_+tl*Y7k5;i@dWHee0fNV(xt4mIZa(%&W<bjSb
zUJCmK`=g%ataW%Qs5AA<*$_<GF1IYD`~aHvX66tL0004Kyh92rz&wttS<^xi2ut2k
zGQ4Q+56<vjz8UkSdi8Ab?7wE13^?D>M^5)HR=i03r2C6<Ys#oPog_y^`@hWY1qo&q
ziJ>lz)o(s$=42e}J#_{yqWd6Q@I=PCxa?7Qst+t4H==m?U&sAaln6!#GkT~#&q#l#
zBI@)?WALZILm(o_lfGbn4`h`^xb_H#MEtV*3w4c4HYj<}bFIYM9d&Dr&^>Y|Hl8(N
zkw9mVdJ;xHu~mO;W{o`#t~e-J<_v)LroY^VRX{PUD0reDtx%8Un*MX!WJH7#$(h6F
z?F-u14VmkAcd)odMBPioJ}nTnaDwPj=1WSx3}^z=WlN)-KAu=g|J+QhIx&t!W7W!<
z<P|d}$$f5jUQ73KMC>CZVWB9sKz-%yl|U~!@c(0tf+tV4eLtVpy0{d=if>;`OmA2D
zrK1|HJ&vz^q8zLI0~$nR%T7cqb%o3YkSV<(bUdgq_vL0UHdc^U<|htl<JBVt?RMB)
z#IO-GhWF?3en8|JJc{4t6=}mWGx)y|l=QZ<Fs&%!GmYGLVxPs9+_15}synaC$u~EU
zL8W3LzBQ%%$x+=!X;#M~^1&D`FN(VpaycFRO)Rv}x3U3dzOMV<{}|p#e1y;#=k5-}
zRVoj5UAZ9v<N!kKK2Xr5aV7iqPi_^<ZlW!3TfhU%+ZiY637n~u9<*AyS(~xVyy%Gz
zRBl}A6(^o?TC<^QL|75pJ0bxHk`ONoO?<11zBWLQ%8a^~zI;>rwF8*%DvEFt{hX{B
zJu}SRZiHnxZaMb-68m!EN@jcDn~Q$EuMrKPq`vBSW&hDiKQ821jwS2`UHpL33<p@9
z-Nw=LSHf|F$CL3qF~yLt_{x-=_(rqTxORT@^-;;J&g?m6dAR>3`Ei{qioEf%)5ZWp
zK)k=<m1k+zLLbcmE2>68O0Yb#T!UY~dcs)W_G(pa2F6*wwSD4<hHMTfUHMWRX^qL@
zbExM@VLPn?AM33%VXePy)11-E|EJ%lNLUykb0cku$=gG?=o9EbB*UzPur*54hwj*<
zi^*ASlLGm`75FqgAw8c3Y}R1@`Ne}v9p<^9>RRtr@alwH_JJ$0rvLd)?vF<^!sH{$
z1&l09>+bh5Xr6%G!z4a@5auEn)J*2eV;1F=u<G<ZdG=J#yaqW!B!)tz9DCitHehM>
zTS6PQrh)T3xW%b!C~A629Y#_gBZ$^fGgE~qq=0s?=`t4TqWskTgQkT8hv`ys4y{Q_
z7H+~JJBK5dsu{W(|ADd^7S1{+N-#9;oWL_|`0q$`5HZYeCex%)JVJCI_Hj^kL&Kkx
z3sU>I@mIK?;Hx`!)(SOMwv0T^=-y=dHIVk`hS?mHx1cQ9S9@Nugg0jrRT%W4+${|V
zk6WZ#|H{rmTV)QDL{c-*a&u^->_SU4%KsopmUYr3tfJZupx%K%O9W<ui8Dw?*cQg0
z#}96=KPA*q{*bMgqk_vWD5CyHo0c1p<s!>OPn*!B#nPapd9%-e)M=;*Ts$V*VxuzL
zsGmy?M1Bo#S}lW>P|wLJmvbHcYbFOH^^Jm<j(4&nw0qQwA4i~~tiL!v97yxIxJuG8
z70sTe3S`cUlw>*V(<=wOO9$<;|L(VxQM9v2x27_yPfDpHU&neQegVGZ&~$p-HJW(a
z=~yDBu_Lr~gS)UTVx%hQMGSl@X>1LvCDr?~6v6t^4PCXWR{(o?&`*Ck3`rhsYe^O0
zMHpo#$050R<gVJ^HAP`(nAR@iM0AVRW&7@NRmy@lBVngnI@pl|V-ZLhqb_nJAij%a
z1xBA}Sl?-qxRM<9f?rIzoDQYI#h%~$&<o}MqiUY?!7MR*u|OEj8m}hbC23ci*%i<<
znCc?Xxn)>9mMpzN(0k68l)zD=c{dtT6yl6L0UL3-htCtM+t@WpFrDp|<s0ky==Kdl
zQuh7O&rYG{ubw%Lt7jt}w_b0Hp+3V_XYQ25zYk2-aZ|z^*PTF!>qeYb-K~@JF`d_2
zQybZ9Ou9dy&+9G~+ah9CGE|ecdaD2YBn?F?kZp1tMl7dfVYDkNt`I?yV@KOn+>>-+
zPkmjHKcBOM`*o0M{7CGDH3ae#74QEVG#W~;|4yg$h`{{lF)!H)PUC0SB;lCMEnUdM
z53ayK)=CmvhTNC6O#a1>=0r~b*7P%-D<cJ=szNM_-QXZ%bw^qmN54vJ{tx!8CLxj7
z2)n>kM>FLv;pHX>!G!>a{#^<LY7>#UAT)WRXtVV#+A89C`Y8YJw4;0U`2J+)nk^{I
z?vr|wJ>?Cyk*Bcfws+-%5HiO)7{g3V*(H}>Sm3*0s%y3YxrSDwisXoBwrBq?wko%`
z3rKTZ?+L9D3T#(L+|*Afg@{GF2ue-2a$$O2pzkTP9#>H#4>0ba3SA{DV)@Cz5Q%?M
z3}4qI#Ngn|SG?(09gSw{AO!C7G#tom!`QBUq?|!`xlZKuvZXS>a5B?Gb+)Ln@k>cY
z4^f`3UNgMaVl{=O77%gWS`1;enDH?eBDU4pmp=U9?DKOmD`pVgG;c8ESW(7SkCViL
zEnb|7Bfek^r0X&+TF-%LcfWJ5yrRn1tT}E4Y9Kit`rl-?=DYkAt;MD9t)0c{2CyxA
z%q9dU8&SZEoiTkl@nr~zw@9cdhPIY8iQ3G1l_qMkYI=|?`gDBv$DMzh%&eo<g&9${
zP;H_+GPJJga5MvjY(szvpZ(drHu~~{vri<zx$bJ{1aMxQ1KDu0CB^Xzs4XzILTqvE
z1LIu}i&x%Gwu_~eDQY(-c|p-mj%WvfdI+X2MS~rKgoPWx#vX~mY+0!`$-Ug63!lrx
zLv0UhGutv{Sq4=P7Zx7itw6pQgg@c?W#>D%pr%@%RP^+m<ty3cc9EzKd1YhNq)P!2
zNyky%%lzdI+&IKkNmxVrgc9%X0ZhsSvz8}td?)a3^&zT%AR42P%lQk3_cZuvy>V!6
z$GwaU(cccFGW*>k?Y_XV`W?9C5H~K$6yfNzZs#nCfxs%X<hvsM^Vg3|5?{R9b>`ui
z30RR5=?=+!!v>49Ux(2kxhvpv8CzvfkbHVVy&mB^y8zAQ2~IXt>UsPE0|^{PmKyE%
zFl|vr!6e+D#hrd=;c;nSd#7vMU|fB%lTCYzbWAE>veLmPySh-;5Lmc=-*MG3j3)t4
zwgTz@ltea=zNII*wlsETJ3@x-U8sTI5>@+fO`05sS;(Qm{s-v4LxblI`R6_{mnWeo
z?@$rMcz&%x8R0HrDlE@rs{tE~I=>lDnynmNR^xnPx@qVp%vaD;gtIrcsWpJxGx<pS
zAK|oz-;%VuH!U;tJ<UtyTG~r?Zv;(3gJ}H``k2Oyy+<h0zq&HIS<VN2zjZ75q+tth
zdgbAt%w35$FrMqEP;*T56zL$yfr?Q;MlsETcCI4z2num~8N_w?iZc{IoRQPpcL~P_
z>uaJHt^i;`cX5GBFh^gE!ZG@{=I-_%y}YflVqWDp2XBdK)G=040vSND?0_KUI9EF9
z5Ev0pk@vo^vLb>0vdFU(?vWGEi}|}XOK#)x8&&fO>Bz7;Av<Cuiw_)Y{NxnT|9)Po
z0Ko{3e$ghh@j(ZRBO~#py}#Pi6_D;Gyd5S?F)amje5OzoFXy(Q40rslvlwGY+D5DZ
z_XS@El-sD<7{~|X3G)u%3E(NIJC06AdzT|Q@iQEOA>li*V^ZR^Ag~%bq^)a|=kP+Q
zSJVfF{;<sw$);uTIn_N^v1#?qqpeq90&9A#Ri+s-<HanE<s7sb5!x`^POM$qJgDd=
z&D~$E;rES<HF0JC%SJ}JvwC4W4qpWt{}j!uNAo=W<PcWksniHo$twN)pu%MyyW7Ba
zHDQ55w+cDnMcDl7%Xwyq*c1ybDg^<qq_Ctckznw>fntaf#N-cdnw+Mr>!P|V`@Ygs
zRsx8V-3_xIhs=lD?narmbMt@)9yN>HNApF0@W2AOzsZb2os7pJD8W4E7S9p+6n)rM
zIM&wyviVCSJ=D)PM4kkYT?{-sm!=WBsNEMoJpwNe6CE?)t{OIe5_G|24iaUCmSn~6
zXh{Ple@27XD>>NKcQ+Z22uT_Hf_S9=6){ni<3tly-iP(Df_yc48>PG19=pwh4?|59
z-2Vudx3CY5QbA!wC}+GD*Z--%dJebokZH8w*4y?Z8oTqJP&#1vGo8oggl)hxayyOd
zb>yMT$B#jh-N#kv(6Qg#F}i_(MEoRcGq=ECl5*k=4lNSvd0#SetJdLJdBuQLPo<Z!
zkiWzr@C227rl=3TM7xf(IyXvyQ#CT-%tMyIe#vv>lLS0$JC|oW6aKPufX>C=P*&v%
zv_^e<496HDmQE&EED5(3>uDTnQ5Z23N)CMwNKmtLv7qICCHy*}eq?Rji{cv4{i$>d
zyW<(x2$E8IKAn1a&Sm(DzXOE+1k2X|E{I-Lgo2eLIG)_GDW33IH=*R1!~M6nkVZl!
zD|{MXvIQOAwy^6*7s}a{MIjn&Ztj<_pF<e6CQ0rX(tA~mxr%9?|NUp!T2Fy7TW2dB
zwR(9KS-5`N?CiPfxh4N&+(ksC2J#kT#z|-r(<UU2&8ToaiS$VVC9Tudd7BJW-aH0E
zh9u34#uH5DoLQIh0ohR7GNlm22GHNYe6vfmW+4!hRU!2i&1b)nm-PB8l?yzsOr&3b
z^455^aELjIxyOF0qL&ddBF_#CO&BmrE#$rR7%Hq9-XAhtR~Mn)_=iT;X_a#-?>I%{
zaQs5y7(YGnS7a3=D=c{DGS}(GZ8G<=YvQRqlPZ5Lhd}vD8jkXYD#xrV&Vt8_QN|u2
zz!rutR-YOn*;<-wQ(a3NUZIibZWnO`3B8E2mIKXthIt>=>)Vxy9Cnx9Zv;J5dy~y>
zJtIJUorQmGYnhQF>ypHvkv_m4FY2?&LrQh56XZ%9$$?XdFVxiATHdJv{Wc;5wV<Ig
z%8l(zNp<+v;EzFU!y$&!L|lM~8OXFivA#e-9<qvC&N^X{)tM!-F-2%raJMkav*7C-
zx4v$?ctXwq&hk5w?Xg-ybktF`JQBrC5U_^%fgsP6>v1@v`_@zi(B5hu)v7jyQ}ZI_
zM}c=NZ{W_M=e8vf+<aq(rynk!-XC6Q*;e`M6+|qX=<9-bpn}CcNmcwPb-3WoipU!Q
z^Mr1LXZXk}mB-BZ;Bp`-934IGQTLd~9CgP86~+H03tfV?Hm0?oj}C6Y7S80-Aer*?
zu4XK%JqFLW0F<ez^IFK^sb9|u-nBYE73ABgH|~m`p4HOFZ9n`AehE%6)tf%#hvnQX
zjjIb!`SsrrX-1`(j!}0ZDUMahdtwTCMmHZuEa*a>7^1u0kj7|z?{8jlF=D7wXu!Cs
zj&~lg&S;dZQwk8I!c{gj61O4N)X`(3zoqRyG%g~K9Kv5$I@QxffoSH4;O@?FCeB5F
zH7?j?dAxnX)bioAfK>5_$8~6rs7ZQSmgC8+t~6=iAA3g>$Hu*Px<~+_^;8g+<*reX
z4n#xa)mGN+7s_tY6R%VQ?o<~gar?A0OJWZzMiLb?g)D^g+dbUQZtUXlz3C>>af|mc
zzOYVSNvekO9eQgHWliPfC|Zq>UKU&+*V&SXXsgIyfp$|{T7Evt?RdFRZGoc0%;x^)
zA;QKnAwY*|ro53wgBY)@mwT?B`KY!P9Sd#S?MI+k!gNHUWz?sjJr63ZJ28ZslUIMP
z<+zG?B|z)p8_X~(aEmI+PV+}?LXOkbDAc#@3_#xwl$79!Ud5TEw~8IG`<ss>6k&xm
znZ;*9x|yjh-{&<RUY8Y`%Q%sKF(nO!T0qCzruosp%|f96o}qK}x6S@cJ3q~EO^-!v
zf3IK;xJEgTSHPM$engX9g-j%R(iJZ(t0q<NAhnJGq)hg)wzq|s1jsz4i_Xa)QAF=E
z>=3gvauld=#$~V(GQZ5;cFOUwARC@xA#9}Ql8{PJ6fZT>&~T$VLu}&<vii#{XY0l9
z&WhFf5{scrMB7Fp@}+S>HLjJzWA*m=pK5x<Qx2bv&D!twt3n4UlmzB<advV2zr*G)
zc0$LnF%jEVyJMnKVzQpOxbaMLVgd;{BTOsA?~RF0AFXsA?Sn|5LjV|C!wjuQdru!E
zWPng>HXa3b-Jstls^8Ds^_@>UwL&iJo%s=s)e}tzXHP(_#r<y3{5PyXdQ}OHm7!(H
z=w|y&Ha{(i92qSf;Cw^CZ8c*mj`JxggtAnL;-YNoLdAT;)6USY&VeXju$j@01(~5;
zadl^W;@`4!qwrq8>sA_N(IyqT%Z?AWhO_9K152(*I7q~impdH7Na6sHhe;3ebx%Zf
zsfe$c4fnuTCIO+hrfbSN2mHAg%keG*>>6=j9CAv1wmXpDpm|-J<+ylJXzM_k?2%*r
zGjuZ0pm2?f2X>8F4e&Ygj78DOC3t`N!Ph2%dFXdFVNXc&=Fo>7RzJLw<+q@l!^R9g
z-bT`7<wbT4X35S_kC&!RQgI<B>&i1Tv?=J9$=|@6ymK5vNel-e6|YdK=ZRwxTa_iM
zRUh=y$)By1BRbJE4qc`_R`+|CEC5+sK2${HVS(dT-Z0ms8`0j>N-q>_nJfc<xNp)p
zKNbuy53)%ohmmhaDg&Ul4_$zmH#$L1V3i=+X-7BcnCl(<N2qR11mkvn7p6#^a>qFU
zUs)}TN;AGcGh;fb_2ecD!OAj1+$tot#9w<37&Ze)?fP@!Yp^~~h6%d$T{inCCz{Ol
zbDQrKcsK;)h{0~z=Pt1(*uF#WUs%vITnp$QAqhbjz1zOM1K61%>EC1F^0O)oF{*mR
z)pajvHnnf9<Mb)@{Ik(v28^`oa7n(V3VnHllq*bLMy4Q<HRdKFLea-YFi=K4GnioG
z4tU^17Zcy0DIst-&a%QflTF^4VoIAq{^*S$p(oU;5bZ&99u^>9!xCZ^Xv*0St|h+0
z>_bPegRf;)r~Uq=B)gUm*lCU!5&5W&k|>N1_FO=v^^E%lfWQk0P#X0Ho1D#^>Yl~O
zofqrrw_%-yt(S83gw_Sj;ja1tA|aOz@2Xfp*N)^=ZUCrz0`Vd2oZ)0W%7Q?~v&^XL
zOLlq|3AD_q>q+xW?Vw(8K}5Gxk1MC>;LizhwHl7Rp8n|y0UA2weA*Lj@}+w3J(^zf
zzX!nAw|zn)g9PYFmUDUzFuOERY2{D6xHEgl7s+|BH<>Ff%2@R2sb_tU5H!I~cxK!g
z3o<VflG-@Vj%Q`OqzZTNF2rmK+c53rO39-8DUy7cYdlI6o)Cd;AVr4U07ErB*;k0M
z_Es+<KzC2|Bh;*z0O^5x#p`He_;n$-ejRPfFLzUrj3ywiSgyTOS}2UMHS_rhvCebM
z1xSKT=E}0*h9E-!Qa1ZC)f{peYbPSd=o3Q1pdUcvu+=|haSj#$Hdd<ypFKwN)u$tZ
z<|e^H&^*o`S9~IuNx_r{S;p+rm{1HI6fU+IM5YDBvH{4*^Xi)J!}G+9qF2T#s}m|y
zdompZS5P5D!EUbi3&E|N)q|q7Y3c#6P9Y`zp@m^QYie=hes{p#MPJ;5KRh`*k&6bZ
zv_#CYm_vd)8nF>@!ALMp-l{4-ZB^*XoXr7&!Yyor!-**4*=&Q@p|PSy<qzuXh635o
z!>MGqrEe~%dmPGl&{KA$k&C+vh14vN0?D3XE;+6_h=zI0dF~?_H8|giy5XIBz%I*x
zJPlPPn0fZujLGQZ{cn*xLNHw$EQdoFiKovvM+W~F;);^CEMj0q@{3eIpRfVqR>ZD{
z^(Q$l%|}H$JgV*&>v?~-e%^Y|?R5`HdrDo8GP(!gk&GKvl+xc`@#jb*sc&P%_-8kO
zJdkAr1AH!e3c97U#@M@}rpxGsUrOLqynCSJI<Fh~9L0EIw!n6~`=PP1f+j9=sbQI!
z6a1`h+j2<jg7yzTnD>N#z5z?6dK-b!4*2Uu?wwCX4I0NyjDTkbRuhkX<}ixfoP0Dl
z_Xp(@x`~Ymo6HKa7S$b0(Yd;QEQ$6%%9xHC%=TrV!Fwm1qt0Mc{c)IQ>NI%e*?vWF
z<ajeDv@$}*n;dZfA!yAU;8*Kr{w*D{9*fhAr)HdGu|!KpuD0E~jH{E%#i5Q5stw;3
z;}ijBa&+Rt%=r8faOgbnl|B%=losJnXDLP5fp)9j;nNvT5%9?)?aKB@MKY(;v2q}=
zNj}Plu#L+2aw6w6nJ2gi>C%0P^|&i4g*-W<1X*+)I3rp4*|_RTQxpBnUE?EqPZ0jb
z&mh45?pim#kK1O<UYh?)7kF$!dD6oceF9@0QE+-+>yFr&X;?^#2n0x3IlVZ4p-aea
zRH*v|gICH)|BP%KK6#)OAO`6UP?>LFfr~^#gQ&9OaKv@7;)s;G<=(q&;;mR+k*I%b
z?a~0l2Dst4wdjWzU_@cJqEp<b@V-GEbC666z)Z)0l`X9;mJ_ZMM#Xg4uA}aF$CCU(
zn`0B`a!4!ccRnS)rZCoRQC+1lr`(3;;bw;Gw7URW0Qr&zj^ghx(G``g8{kVQQ)(<s
zScF{#{m9I*?!P6)Pf(w&sY5kdC&!5bV~0(Fz#FL=BIE}+Ydvf=<)26Z2b|4i7?CsQ
zoaZX+HNK85rGi;qgDdJ}HeC5hB0q0tXZZ@CfFU&89ZnIb>6Bl4g#V-uDW_X06)f3_
zY6d=m;NhV?8#aOZW$wKzlT;V)kLSxtU8Qf0BM_Y}b37%U{*4hg&Sfz^8cp&M-%fKm
zDYp?C2`J>3=iOX#t=k&TYC0PK#fUc@Od9mw*97AD@HvOD1#pr_+q3{RdnONE;eD9_
zXid_UH2qF$kyKfe+;E9+Nv-@tNI*jO&Lt)?L|194JLCU&pdx{y?cp|ZKV^O1M#8$0
zz`64=L30(iklOvIRnm!oruv0_(kXJax^$W&F|Wm2Ws*5?I&mvGc6XyJSlb_W*2Nz|
z9o-7@jcZHN3;=QxY@!joq<M*(b&7{(Hc~i?XCTn5nO_O|_H<r!N$C{FxS|ktVXP<g
zY6%E&XzCRinZT~V2Y2%D@HU=JR+AR|n!14SN$177>Ee@_Sk{~>z=JN2iCm}bXWw+1
zkD|N!FrcsYtGEyPB08zRJ^(@+gmLqgx>j*AFSBudDZ})3ug|0o-BJl-2dYTTY)dF|
z;Jzc_n4`{@dOj32B{r7E#4tGl`1ZV2%O69e7ry!eYjVJ1pXuOE=}Ax^DJ~n*$fC{*
z033Gu$kxMRTh0BP^5nn~<$jkULc8gscMft`6MvYNuFUF4x0*57QUliH?5X+%w`QcJ
ztu{oa$LOIn<bFP<QJrh9zm-s)*8xZ6_RG#>l#n(c9_ji6(+qtFI9-&GZ(`r)^UX^H
z0$e^@t?!AugEY<6y1R>3%-)OZ4fxPpOWj(0MXk;8>~urSM$9z&J#yP)Jy&kPu5Jdm
zFxvGRO(yF^vp&Z%EHzcXyTWhL{mXgH{bG}-ugM|nKjEKO=`#iU^Pp;kPX58wNoETk
zmvSq`ZI!~YjC~=$7euP55S?W`7DiPw2@iUZFVNu$ajR4v{3c=djQlp_z3JKQ63(O6
zY|1MV?@0fKxi5XXQU+=06kVLK{O!}*wQrdID9$O#M`72e(?o!~=$nm{@cw~<;gqq~
zBR?FX<XIJ>=Oy_VF75jAj1m>3m;)UOl>YokiI1W0KTLhRK;5f2_u-G$@~tKWdQcFA
z)=^`?Bf)A)ot}4lmRSuY5}GJ%stK{2Uyt68yL7iKwbl`>8UG49X`vWH;=(7LZYX<n
zBM_{9YDM{wkpET0plGamqbsZOC)bi$PsvKt%lKbrF>MXfjFC+m3oP<R&6G(?4U`U{
z5Lt?@9TTp0zd_lwzrs9c0o_A<Dv33daF5BA@E|t-w`w7G{T!8YvNKCk{0hnb*Y;sB
zQe`Y=(vZ5J`vq8KAF738=u^_S=5?gry^Fi>`fqhD_A0b%j6mT)^bc5=Aq5_LJb!VI
zgu~mo$94F-2|g9MLWvx2YXdLXKjE*wNBXC4wPj3pOTL~up~NCUWvk$5M#*`WkAfO2
zErZMNYadZ#$@T_S%NL~V5_Cx?5nNc}XvTmvADrF^qf9&fiHdNaA8QWbN{**|u7XOl
z@JCR55ZUw_%s!Ctz*_uCY@jipGU6v-yu|uB7TnI8#9$4W*)V}g(pmQ7>4@#@HZdAj
zakkvxZEo!HWFvHg_FJ>nqisFK(7Iv!U+x2DG1RfIK(cC>zOF_4U0e>e6O&Jv>nAUM
zhxnnz5dJg8PQZ4APPG1T%KsV&uD!n0UCKE!iJ3%H9b9nLXRV1e{R#GP4<mM1uQr>f
z`9Do21PYJVRR=Gwrjmi#Z*F#vFCEb)38T+h&|Ro8^2s2H^j>#Z1S%Nzn>c5_I-KTX
zR`Q})E9y92Z~-FG0`R&|<#lT4*g1(*i@}xU++KJqD76c{RsLQJTmT5#-;67dpVt_k
zQs#&P<bpxnQ~Qj?VGi(*Oi6nFx)&p&J5Ij|<tu}Cqjq9jHKlFnwt_7*SAueKeWRUy
zVQeYKDtB)ugn)GA>lz~^D3t!?O=Cs{pp4B2c!e5cYvo1tO*x;v+>UE_X+R#%LjNgK
zkzlb8b+8=de_K<buD22lEYqEEkFZnqe4?nJgt47=*RHF1WgBvdlyt0(6RpKrw_-v~
zTTb1?6SIz^Ga09|UxHi$|J~E({Bmoiq{qV0AMj1kO?)W4x7Dh?zHJX{_S=}oUzW?I
zIni$eN|SD#@kP9rJN!D2c4!X5Tl-owuuTp=LLiD?h8?1X<;n9U)xM5zJ_Fhuj3{<3
zo<2|k3?y!c<G|`?Ri2C^uE6PetS7|Xw~KwE8_8OUogQUS5*t0U(NC+3%62L~Vk}X}
znsK0k-5~cYE}Bxl66~<0f8E&DhB6&8(Elx6D+*yC_c(>zPc1K2d(Z?4hSLCddG$w!
zc~O!CYh^0B1mJ>#>zu_lw;@|z84#xO)1iAEG9yy0^Huc|{zte#tQznWrBIt&C`a+J
z=Wt$aVY;yA3XkgVaW-53?Xj^_{E!4Co6hD0DR7|XhzjFQIgHWW$RF-E0VqbcB0i%@
zqiJwz@pcc#b@PV5?o#6A!%)jzmZc1A>BW~zI_Ps$wJU*-)6~LqeU5-WM9o2U3c<96
zLxoudj)5Q0IQ-v6G|jgOrwzT{KQ*cQOU|TXR?blfue_FTHmEU$G$371zke5xt(vKY
zc<c~EO99=Y;hJ&X=1ZZwoT@Pr&v@1=u8z<`UC!$K#kbe$u+8VHH4Y>Yf?;__0?-cW
z6D;2=N0Jv?dnK!W$FNe*0y5p^#F)ERO3xp0)$ueYTWXb<aRTEUJ!5PYT#afM<TMVo
zHs$Bo%;F(sOAIXx%*<KZ2BU?=n<wbo6!LTlt52}O_z8pbG-}{%mqX*HBh`$Pmu$cl
z<{lx775C4p2Gd}^SbsS6zeyRINTqu4g{@*P8xx5iGW798E*;7?>-h&&l+efQ3!5~f
zF2ESDsEQy8I2eNEFlK^T1Z`irTP-}I=9B?&osF~EmhfnNViq)kEpbVyT@{i*pQ=>a
z+D!&bWeB_{l%riNtoeM6jdB*?y)HUi%6lnFk|-xTMUq7w{x-4tX}eYUQG`PbHlTHF
z5G<+Ej~|J$$&zh?)B`KHec%Kuu)%9jNWAUP6Py@ZDf^17jCJHXF4X%WeLdTuz0%gA
zW9I6R4R71f@gJrbnntfuTaz-~<UTz{(u)B4e`#sa#pDjuIBa22(4*Fq7~Xc!v+ypi
zyqnU%k1@V0x?V>iN!uR6a2ZBHDxDFF6yoR1Jy@~z_ml0TbENFzd~hcx5@>Yss3ccH
zK0u?E1n#M4A1ulGEB}q!tK6N6-7SB1u-^c?r^W7o;}wVyov#i2e#Jtd+WdY^a2tc&
zYg(Pw8o1PXjP})0cmB~)gu(avLw$kzJA*hg-jyv45zdgQZBiUg4;u5L{AZM5Tr%8f
zn*=JQKTfbF7-fg#89T!Y@mG5-&dX9At}$LO-Y13@M%@@_@8QPDnuTzWdi6x3OG;Sa
zecP&U9`=2W>qQEbBCy-?CF#34g&*M%=`46uk*HBsB8O!+&-{bAL!YTFJ;r3QwlwYQ
zIBdq&5?z&UEZaSdAz9Lcy32YePh_t}KXCC>yi)&f)`C*HOVDm(Jssf}xkD6%bc$FI
zQGHQ7o4C5LuT@FE5z%Cl`)6K^fg!3Y4s-Ln!Xv|Mf&Sh;&OtL$_wwtfEDGc+%W_%P
z4xbOGd}yBKp(+atsL$t_e8Ne(ow8PPtoE^q#AZ5p!AD45GhGWTHKxIa0%Y`^rd{lV
zge?l=1~EFsIF*zaE&7w!m#tRyyKm{BI4TQ>Hw#ZVP6y&Y<o9UZg5#1Tiq%JzII5}w
zjPr5MVXE_+VaNt1!*><h7+fkYeb>cmZ^NPr1^zwsh?#gAE9QAd8t`+1>^Goqhd}MX
zc)?Lj;c21!GV1cXHpr%JcIYkcJqANMu-^RYEXNH5I}A7<3Z?vMwZk=iF%L;gOV{1l
zw-dnG6kLkLZw1I@c~co8n?t;gHb2DH7n47{?&l=g3Iy4NAlPO&3Xkd%WN3iQ`zZI3
zgzbF0q*w=})>&tXl(!s<{i%gfGm2jMM@H_{!{Q4X-2^0++PwAj+H;~ahvVxmwyTJK
zl3^k9n(on)>nY^VpgC!uh-svtVq>{bxwkPR-vHj<CP>Wz<+<S!$5K6-rA7^xD%J7!
zWiZs3^>vcx69c2)vR4%aqo&3S57=7({$d;NTR1~}Ux?Q|igm<NWa3Uy4D1{+*k;L6
zctqd{ZXWSc7+F6d=_{xHo}#Nq5Gfaxvj|(K*DgN;mmd8^HdTg`YcCGmq<VOS+`%AZ
zPhqI#;e`cU7{iYpYW%j-99iq7l{K|GO$xP{Paneyc1sgrGUZa>ZoZ+BmN#p;X4k3K
z>F89qa-d%kvIz;PjJqS(=JoweyHCKhuZK77D_N9~qZ9f_Fwq(mG?#r?fOI~;6Gs1N
z<$-Kfr7BrZkv=LWa13XZAX79sibG_Vjpz_eaO6Go!^TJ)XYSU^Sf3&T$-O<zp`9z1
zFgy5r^}DIk7RL+a8+35A{^zavLnt|QU-7@1eh_k;wJ6fn2=QBN#qRlGZZzuLCmao4
z$snaNwN%FP4v;yfscI#;vfpJhoh@YJeaaPaVAqmLQWmEo6qUD82s$VHsG;>!TQi_v
zA)=jg!%AVW#dg)2q!=%_F^Rh~6F>j<O_h!L2LR)3zS*rPRi$>}Za)yh><3nwx~L(U
zusTr=vF6R|Zt@skCI3`bGq&p_+EgL)89YUY^@)yRcDeQSr-?0$eRl8&Fc4%b2sD~H
z4Btr~z?_bV+3avHZ^8i>HMD>`eA?L!xZtJ2G|(MSqp49I@cIuI8sx3>%l6~w)GX%I
z0kL8GA@SzN4d%l*dxvV7i(x-%84L`wvlHUuwzU(~#*-BlAQ9^Or_l+^odGlHxw#`D
zf<)i*kW%a8s1KbvE*|EMguzoG{urJ&ql2O^FTpqFu+RonGqMcfm$YVi9FRz2j1+i`
zjQ(dWirmY25A{5lCQci0hY+$8ctlD{M0qFOxW*xP4I837_?AeLP1iFr$JXQFhN2#&
zbooI*EZ;)WO=m^2#IvYx&i%Pa{ni(2GNucA&O@}^l0JrIs!4UMo02@R+@v>k9W%3=
z5ZzUqvUaer6%5HMJ*bI?<5hA#G8Da^3hTr3%Uc>`DNge;)9KH;!FJtJ3hN}=PxB!6
zG8Z&%(%dpw7XTXp;c1dKiNHQxkzge8>;}NKzn_MXXB|>|-GP!0B*<uc$n*xu%b<x}
zWr&Db3QN!~EYj@|alkgJGxNyXHm=eV<}=QQY{W_Kp4trIp}1I269Tk*(_*{J7b!pJ
zI|4j#8DD+cbRcl^a_ut~0#yBJoL{$ns<yQ`Z&CVwOHk9q$)C$gP1q7Ga_e$x{J7J+
zD1~(?2LWnqz9)s+qZVAFs_E>rn%8KF6SSfg{|BA`JYDWeNEproEM=$%A$x^R*Mmu^
zLYB{Vc3pr8vTvWi(AN2I50{5I-&>11w1Tsoi4fk6FA|f=<|5q$&OK<y<PZ@pHvDaC
znZx?`qNf@v*XV2x_tp97bCxjHer|I44*+pUFjn&TE0_CZ#a#F$o5&kdgPmfvtx5k6
zgs1UkrA^^RS+EThKW{CHyE6l<L^*B(3po3yAun%PQ^MO+H51u=EYuq~dk2n2BRn5O
z(uO7bH>5f<W^4%LIvZalOA*OnUdC^HL%*q0J}7Q00Cx3M<*lUbB2ox9UXk&KDpSN6
z@U;+>IJd&N?3fL0cPn2sZX3lI_~d1%RVUqVDCH4&9V(bv8d&y6dpp@R`cl2SX?9Tv
z(D0mt$h@iwr0B$tvr}>j<>9H`X|Co6NAnvNQ3b<=9Y0bl7U0E|*n<kA1x6)**;1#>
zda_COHd1so5&TnBOigJvQN+ZK*P;XJ9B!^q6YXxTV8ai<B!lu%s4y<tNgj3jY6d_V
z61Wb2!4%Re%L{>#A-GNSXviE3%dMY55_tDrGV{%53tE!WTMCHf4|HE9zpz$$B%T->
zESq<w&SqZK3{o~|cbQ3m=gx?*uE0TfM4mRprV&74h~2(M?=d?~?_Sa`4(GUeT~+Y3
zOAsa)^q)^R`?$GCr2YE{ZK0hUy~^T+9y6m5^JU+oXwZeUQyAl1V5ThiKzFb9_%mYY
zz7F)o`~?w^{sUGyDZ2)2Za2f&Gtdk}l>ST+T$Bld=EUgzD~yVuck<zfI3jM>#0)QW
z)FX3r@HFb@P3PxP1;R*)dg$m)9~Vxc#i6WNm~SY8N;5&%`A;?*7s&lGh{<Ua(E&=d
za&@`83%~L3k%XLo^zUdb;nRWh;jFQAsh<vrB!n84MiI(cuXM=(t2l%yVu`KSJXf5U
zSXjR7dFMV5`+^<dcUWwQEgw-RRd$X|4sy@(+=2)G>s`Z-Z@~q#;_TgsW|{^hRcp14
zb5<^+#miGr#-yc^w<WeooGf$!62`z<1A4^NmkgdDuFlCH=b)t?{vNuBRB<X4L>GR&
zktD&KL?ol#{0uM~bH<7T65cwgs(%6)7UsN-C9fhDuaBxRguL<ANGr#@0<&L`9clSL
zqPx_!fv;Vh&0CENO%76>qsqzEUK^vk0$p`CbuPghTw|U*2gA;<Gcz+e>k)MO)rQRy
zrd-fggU{>Vzm9xAh>GXQpC}rUXRP@iH9|FqZ(e}2vY-}7?8ygU-_fnRlLr>EC3!y-
zRSk{@iqs2`!jGyKW#Jnig!@Xl-X9?Dvoo-`JMp**GMb@hjPRsp{NoXroT{}*3Fg&O
z97MkS`GB64zk+@fT9qWC#TC-2bD{Ic*AGOuZF6WSZ(=^gf9y^F%?H1w0)7Ci90HOI
zRO&OGmB;0BP%6Rsp&foZwBQ#n6p}sL^UzhVCfmF6t6|1x*u_`DyX_(WL`CQ5;ZV47
zRE>w=g~PKii5P>cNjEX<WssO>pR|F1Xo)<+YB5?m^IbX@eWx~fFp`7#?3{{~ZA&XE
z|7*qxu*%dzMkR&h7~ZXo*>6Ey6N=r1DQ?ww6S~Vr{)jWJhO?&2+6saWB3Vw#P$;h-
zIF4)wLKz)Y(a;j_*8V8c3(w_hSTVv@Gi?5%#}NMgN<j~K@4qw}M<Fzo2nP?ZiJn2@
zh#rab=^bTGk1?GgN-neQ_0wmfcpSK+EjLLiRUi`x#B+cwF6}!t(>ut_zJI{hDMN2L
zr&3!?!qUQRovA)fjzc!;n$#;Cj!g<zE@TNejF~QMXSfPO>xq=Y-j=0#GA_tID1|F8
z_H&9cWI~5pd(}8eC^f6G14cU}q5$3=DR{yCX|h`1KWyn_DS=iT^;p_BB#qhQX1)Tb
zbC&bjW6}dZDEN*fh1(8?t8GdydM24Rb4WkrK^(TCt_t!)WKMVKLM&I*NP(fEq{nOc
zA(gWs``5Ujhzdn`K4o4Plej6{xZY6L8D?9fM@tSy57bz7%}uarri@<TWhlKlMRCeY
z_BM#|$_|D=H@jB8qJF$Q3xkV+IENXR?S^^-$1=C#8%d%nz6@OrqfGGt){%Grp)htU
z43o_s(xR6k6yfoWSTqo1Z?&51n}aMpK**P|%m&_bq;3QJn}pM~ZbUQtC}@U9tW7gY
zD08==)KK*E**s!yv3o4dalbeRV#<32a`X6_t&=DZ5VStLu*p6cx<QmW61^Yg0}Eri
ziG)>^l>Ay+Gow@TBH5yU=Uxr%Spk7&61ry(mS;z2aHY#~-rI8uE9VvC3>81A5zuby
zR>KncE3>=A_;4a-{F}qMtj$DE>Rs}L4@TxV<3;|)`2&`}5dytFEqBi-@cZVNg*YTw
zM&rA<0R^TlD6bRtZw>uMw@nbaN%16>$xBNQ1@=ZAD+g+u8Q$NgTr<uUo5Vc3*$(2u
zpfhd=OE1B_S{Gfu2mDz<NJBRTN92vY>O>i{GK+rxcM2!t{0n=;0cfm1aO%Vv`1ybS
zdr4pp6y-3A{y#tsbsQa$@_At%$9|GomM@<u8l7V9MYPL9!l13(s#PKM&M)*Vw&$|b
z3D75Km2FgY8_$I$v1Kdc`wT{F8LlJZ&58RB9x#-5b&?808TvqQ6~lO@pT0Yk2w8uR
z5>~MpEd<^RL0a4~i=V`+$Khe7S`Qh}-Z)+-m}9i@jv)prF@Uf<{|PIIuo^Y<Dib{q
zTC5St%8vh=IC8NL$<m*|*J}o74-nr`HLo<j)DUXrB{?i(7@-21$t<1p$6PO@h#7Yn
zF0l!?luX$Oabb|4MnKTfNj7TU+_;?c4zWP9(TXU(8GZazuCkWUTIc&h<#S4<964H$
z+Q5V{6$euTqY8c2Q4$Sd=>?)aSq-ovus<fcYqK^}ku6%|aNMl?`A`n=3|dC4IFBnk
zaMx8q);)Wk>D1|ZJQ<&oCFtIU?~_AnKxtZ&-ptP-=HGnJ)5o4@Q*0xB-q%&}Ly5n!
zZHU1_7iao!0TCU@CrL{%{l~zm8;CqZ%yc8PQ@JS`Y63mHv-}Yg-SSq+lUt3$Lu7dV
zq`xAeNtF@EX&dnxJj|1F{gU4|o5y#YOrAVw@kYZcp4h5(z?J}Sor|0zvTrX*mCV~<
zN6B2(xXG!yrt-;_R+E0z&fHHnG3KDbu~Hfbh-L+H`$!yn@MC%H<QiU{-1&p%$bqE;
zFb8&kbm98+YjD}|%zIv09K^{vwAdZ&|Dxt2UWh}{&PZ~r97MCNB*Gl?a0OYbE}V0C
zZ&&oBHjGEzuv{vj+_xWG1(|L1W8nfchNO)H)SkdtG>!+}r=tZg=mky~lP;aaOaNv4
zQdI*pEt0L*IuC?_ly^7CjEPdt49(a?1SU8Q54*Ss3zONhw;5XpV;<`;51ZT<B;+v`
z&?rFT&>fY(fOUk{nkpYmd&FVBG+9v(*}4!9s(M@HH6AtgsFGxuAhXK2oE0P%`02>#
zz|z%NeqbWA(8c|SQb<BbV5i=>4I#Q*gi$3lI?Us|{?rtO#*{=U!yYCFcZrhPX0jS;
zk5x33h<@1?rKVl5wpOJ#KZ-u9#v3(NmK0wDi52voIDE#SL6m|%4zrc1!MCO2Iz)8d
ze}@oDFj7=#e|`Q3p}V!ZC;AeF50Je@zeR7BAqv?z*dPNFRkTLDL;loTh^eeq{GIAC
zyKVG9fP4#6=F3Z=A`Mo7Sgp;<n#Dmrxp8qn&cNm;m;YS?3-vCrnl=EzKpyr@K+F|u
zx9P&#sIrXa$t?wscTzVFIAJ^eL{+;yTGFsoz3Gr|9g%tG+nyXV*y^EVtu;4#*eoZI
zx5Traa#SAG5nIbD-=A@4k~v-NS6Tv(_axZmztLEL3vg7owZjyH5uJ!J%U&B$eU$lx
zcicoPT%VR<tCn~}$&gS^B4oPTS%V0%m9l`z#6G3rb`bu$sZQHnP>*sycFIL1`s$HU
z-d|d<c0n~7u$OrTVk?Bl8K>zxGsx%PT`crMJ%%4!Jvu}b;3kRTu;?Rt>*E6sR2?YL
zMg@HuAxf|h82~Q*8-CvI9{a0)orc1WQcYQcDZBE~f4-eAjrSb`n}8hpIt=_|Ar`G)
z642DMLe{Pks~zbEvAIGY<EJzrB#bHC$&kT1m)>0V=|Uyfg|`^iUJoGCUsD;5d~vj4
zNWt$<E$?TMN1edJgVaw_$Jmw2A}n2ME3{2d(@!Z%o*U-HEB<Oh2r1&vdsJx3j5FwT
zkdjzdgqJ<oajH~;rv-05pkSsBEcvd3DDv52?wQqM4;FzULoC$ox?ndiaB3x#G>d(e
z=`SHQ(XXA+^LupE0?!_Bo#Ex9fiK^~u7=o?(<{Cbsof&zsQ+!c&o<R&g6KdqA7lP$
zSPQ-tDiG1*=}A0OnPrTa>HHh?vY32`QlEn&Qf2ilQxgs&o?BFjp|G|dDQ2O}z|x3F
zf*qiPu#sBzurtvJ?+d^<Zbv|mT4zUAiqm@U*$=v3VIt48-H;iZYfsD=BaRRnVHW(W
zH-EU*C!Zrbz&o5pO@fQWcK>vbsrTKsXi_<2hY;Lo^HxW_d347+Cee_dw60En+&#;1
zl!W2MGhvx`Dt`7?Ha}3|hdG$hvFE@fd!7!MP-qmbl7Q@zN<~4%5wY}TcspwETzv$L
za7hZstWZg#E4@bAs<R;qIrefCjr^jBl7jO*!t6(;;E$=|aO6bc_0<i1cOPGmg=fyM
zRyFtKct#b?VR=4h`MVM;*DX2$<u%(0Sl*H>6o<TqhBhB(t|=<5k5|^N`e#sdQFYbs
zAik;Gxz>R8cS-LS=w({K!Zv5)Lf8CniP0Z=(kG|W{{_M%^dED87(q!v^#}ru=ex<b
zC>eKa#>dom@Szk@8tf>@s4n(Fw9ryQjy<*90uHBptz}guHJkm6+nMyU>V&TCxxYxO
zi+T|0U=l)k>NThiRM!oE_|26z(hY!3s;MmXn0?_W6UO7R9we^Le;jVn3s%yX*;O6Z
z4r4^Mw>As&ypSLNx@BpCno;k$QvNehA05k;wL4&~)oZxGr)f#cfS@h#NMbKN=g<d5
zE3i}D+eDrcQFMicmMhEB3xUVasAZJxs9p(uS_?=f5Bz6Q{Fg)H%65}W|D+ZJO+}sX
z?x9sb?0Ro-RlsR|F2hlKIBI)+hlU#yxNj;H_?{Qz2Asnv3<JbjWspo?9>e)?IubLQ
z8CgPS(wgsbn<$Ub?tWGK*Ww_33m9=d!TF2t^qXyGw*=+=Yo);X=7)maekT!!dg$!C
zA*%Wt8l&X{2}jtxLg5+BRy(Z1$=OG3=}DV}U6L7I7PmvAErbC`jD2FCrgEI&_T_SP
z%~lYBZSi125?+R5ELn=6<+HX{aOJwD8t*Q&5G%Wj&gWDZdxy1zmG<h!{~ilqZ0S0C
zHlPG%#y^9~ti~>S8Y0o3Z(;sm)`$#+tnqI_+U2wB3-@1<Y4Uxflb*7wL-7ntN3--^
zEu*86wA;GJWiq_DQR`?J!rjwa^=TMci5Nli>7nv#S&lPfY{3Bc&|H<w=6l}qL_4#F
z(}D!Ba!I88LC`KZ1QbgX2AiHRBKEN$XZU3cu4u((1MC=WT`=tmgh3**Ua75=JxQyW
z%I3;gYSELVMpibhtM}-lMsrEP5x+zP=CJ&}ULOipdmB*!`o|rHpbVZVdE2PIrRVwH
zAiLt{&Fg=mua$2aawtF_9Ws_)qHL49p|3(FhS2mdcGe<-?Wzbt?%={1SW~baUEICO
zZJyALp3c=p!%m=a_LM|*=Jx_CzN*}Cr`VD&Pn0XQ0&TI2)ypl1C=ykB;#GGxEPiZ4
zH(l#pw*|a14(^Kjd!>v2lVrr!tteAIEa8sa1PQZOx;wlD!}nM??KeyQQa1?v|L6IK
zlsGeTnY0XjSuz^ki$Nb6NzwQ9vGfU1L~jj<Y^d(m7b++}1pt(<z6|9EMUraBLolX&
zJ7?Sc`&XPn+6o#}<uByFm?CfgwV|xnBqxN2j0Fw{c1~H5g5<;?eW2im_2YPX0O*s#
zdeZN&5k|79-^)ng35f8)fBQi=|J{er797MyIR?8dAyXMJ$(FjO7EPsMP~qHTNN3`}
zJSb?=^Q_PRIE(ie&1i+4>eTLG%t@XHF#PClJ>E6ou$jb|raNUuj*(>M*vSs5;@afj
z<xH%1G9lwVoWM$A7*k{(7;62uxaC<?!8mD$9sA~mo7DG;0B>voHR@-Nnr)E9^jyOM
zw}Fto%Ktt~`dH;NN5PxfzBF;O=2SZFo47U*bih*8yVVbMAF#{&n05_<xqEl2uo3qb
zTnp!%hrUDTWU+B2%e5K!eFs5T<E*(&pb`<3a47d4zE{|t8%1nHLfy)5G~%Ll%Id_<
zB_j#7<|?jzh!I^zW(ARq<_hpL_hSgPhZ3`5iqGigNH`ZLV&>^{8a_UC1VVHrQ5BnT
zA&BQwPvnGZxq+;}EFGa3=YaV52rv9Xu+9KTugUO8g}T>TmB3r%AbG0~>G@v;rwa&+
zuLnXR<8>tub;b7bH~OBnmi18A3^^aR;t1(lxyEVKd1u(XN`^WrHnSwJRVT>)@J~(Z
zr^Na=f__o5eg*S+)(rN|PSyM$>Z9#CPw@Nmd~Q-3P=15)#BxxcWO^8b82uf1I8zc;
z60eUt)!UCyAEjMOSj2pcK;{3>FHu*=y^3MULCZC5V2+aoq%`6rP7`*%j09F+0TTk?
zp{SKYmaByFVIF7GQAaAIe{abK9}XOp#OsSf<c6}Py5=ulpm6fX>YmsE#>XPUliRHb
z>I9>_q_d?S^RL*!Ju#*4yS1RQ-)S?3pvK!F2+#ep-npY`L+><G_vyqa@RuVf{nH5{
zdX}ZzCM~I2j$PPo^_MI)dM!-_xjHzB@E28<6~*YU2R(iQ#R9TW>^&wK7m1&NL0RBx
zR76?XibPKe%CX4CWz0@sIV$gNIls_QNgY9<veQ{vc-jR)s2x^uXJAJ%nUI$L+oeL9
zwcJDmcMBW0o-bMna4$&u+p`+Obr2YyLSE|pQ@ry2B8}f>>&m-$KLHO?kWOTpEGPJy
zmu!o^o@BV31`Wq|P8jDpI<ixdUoW>_?9UAA#CA>VOwi|~F%N~V71+0FW5Rc3cV4#b
zna$Kp<3D<ap0|!spk358X6Ia;eshx~>}Ab<!?j}Hp=8-wV4(MgtE>!gbnhXZ3cWc0
z8H0V^g`6TJUZxP#c*jrT2zf5YF7EDL(0LRox!80*i1n=7O4`kByU6VZ*=mvr!zP}_
zqh-#hFFO*v5XNSqm=NmBRd)RRgC;>1I97ux8mhSL|6z20ZA-C;=Avhqa_?fd1w(SR
z4q?bFGb-;~b11TodLz54V`CI9aZt7s$CC!|54p|lUIyo<(h3FH1}?^j1cEOu+l#$$
zJ^$sk(M7jm5Cj>Z3{q^{fs1u_mogg*6J4o}J3sLz23b8R>q8(MMERf;IxfHY_zqR4
zKl5s|`MC_HlwKIIX>sq7B)mO3*`2W{EcUh_6LK@k#!udP1p2|MdO(Ef1V!@%XC~KZ
zlrQ_DfA5u(icfKX{#C-%eMkFu<4v@e?l3n9(|DO+(Sq8}nvCk4+#yU0Fn83850>mp
zL1oJ-3+M6r_`4FRuO$B9GcGb<yIBAx@JdFBLwlDj$T6V%QT8x(8n|N+DWgdKH@e|X
zfPVv*FmbRNNAiLr$4!`pm#n3I9#Q4eTdjf;6*{SnE?$w)3w&@`RJwfcETKt(WY9N&
zh6n16MxQLcTxp}<T>GdSz&PgoE6Ou#>UTku#+ud3Y##a9W9Eo9E)ecn=OJ>fg$QU%
zCAsYc)Bw+xO4eRs@FMD*_i-5^H#1nJKv$U=&T(6getTq8iV_`^vJ2(xg7w107>C+m
z|H4&}^)O|5O0KCb&L6|CGR$H4*9%RstOQQ^D8<=RyMyAu+b{u=$J~y~R!ALZ<f2i8
z>PQ_KI|eQ@**^ly0-L`;`dwWPc5CD5;@pYGg0P%mTzMiPP~Qtad@9j;duF$p2s5O|
zVZBeF?mgS`BT56?IaFgk86$a=32}-cb;W9EJx%O;ov1W8tyW7*?}-m0vSYY3!k!dw
z2U1_=8lxYF`DhTSn^#TM+;0V)Px`zQ&zNuIw&a;ywNI@iFj`rdIv0f9m=h*=CNjL_
z=Uq;@>*r_LbfbizNNKl;>2d4UW*+gQ+{^x+5q?6D(v9Ch8^XOD^s9*q#ItODjLoj8
zyIXF=RPQnFRM_0Rnz3x!2e?=8>ULzqH-N96h$4G&R>K+b1cftzOs-XM)bC0f4`m%4
z@M7kPETgG|t0oZFHq}t0Vb~;SmY?{gFpS{86K6bfenQY~_)b=5TkJIo!ZMw%vrB%E
zm}T=cf}yS!{nKCla=f(Q_z$95osfUt8lPB%OqPXGjp*V&S+%k!$uYhQD?@qCtvcKV
z6H~@MCwgC}1_rpDHie#f6`oh_7ALWAIrkqecs!;ld<+g$`MBv%bR6F!bsj^c+Y%&y
zmbj5?+HlMX8H;RUpU&p|E2AEMDO(MqmSTQxaRrS#pBjT%7eO7Vgdvz_*iEj!eYQT8
z_-72E7Y{(t>9V?o_5tmvl=8I32o(jHMUPf!gL|0u;^Pw$k^S18iW5B?6q+4YJ%;c8
z*zG`!1sBbh0EVl{sGpV|YCk&QUjqO+K*qoQLi{oGWe#y{%5^i6E>T2uo-8!VQc_4C
z5IRdb-E}M=ghT`1s@FIYePq3hV&0*?6<%w8lO^F7`kQlG8|cz5y0G5>eM<7R*i_!o
z@*e8a6FeUXs^n`Hk%n|&B1-+e`%w07Os@5pZC-U2<}<yMG8FUwR~RXJeOXcoqN?a5
zBncw}1mtxufDe77NQj^RN0EXoP?TN=+9ViH2;r<tqz_qf)yRVtyt$NCiy?lCHDX~`
z7k=9b7mA#2Iw@EA_}1oxn<koBrCvcBNiFwm!LgZU!@mEIVq`m2#7YI$LM#F~l@1CY
zc;cjya3{-rZl})f@`S*L%$_ummiecFcEGI<OkBWyZ+-OEemA{AdvTqrzE)8w7U_KZ
zH!*~=4TersxOs{*m=emg<*%9%xqC9&W$DfV=nzRS@rd$(5)PC)7oBoeu<>G!fW6oE
znOAh0&(`QhmGFx1@~<{LTNwtmAp1m!^%KR`((v3JmjS=Qj76}aW?VXXkZP@9U;~z)
zuRIy81<NJAtLu+mM>!6+rXQ_Na+=-)E%3K<z+DSyvwCDd+xxg)1!cY_;rUmGghnIp
z*Rs;@o%?AZ{sSlh@dJ2)z1`5yfVjvF#G4uL!u(_;3wU72D0&ZS7X)M{hhyG+E8~G;
zOAx`x>O{Y1`h7BJAxF!bdH2l*rOM#>6x`PS*R~{1*}%mo_Qf<PWc8T`r%PLbL-C6F
zq~7v#>F4U}ovz|6`P$Anbb=mN9GW^ZcJByGPaDIne7uSc)!-g#Fx>KfZ~ked_Un9R
zw6_CunJ&VGr6n1sX5|xGD$G-qk=)LH>E>uT-wlZEUk11hm05B&(AaPhh_3V%Se4!#
zKkF(<eznyxK4ub=@4Z1He@gYnrL09c-uXW+4fF`k61EX$;#%0li{NUL#zt!XSJ=fJ
zpp$@DjD+L&qm%1$!*Y1R7mke`Qt4f|a^Tl#K^VxwMf2%SA3p#Et_4rj2-JXVLlxue
zz5tZGtF`|F)537G=D+PhMLb!6)%SjNb{_Yy6hK<5Z(}dMw)zEs1r%FGGrc_`D;-pW
zTuf@P6BG&d!d%M$t81HQP*Rnd52kOjWi+whZkOUVskJo@wG1wWW@(`KZC81VoZSii
z4Ta{%mK~nwAX3*W*qX4!`GZ-d8c7o)Gu%OoiHv^$Wn8;#IDbYYlKBZ2q>$2$vu0nr
z(s?#0UcMJUJ)4bAMK=^ruNEr=u5}-OC>4fr0`7J@I9a&>79F=GEN1-rtc%hXl+zxj
zc}uz7)mo+;8&Pqz$|)U42Jlcub6<OKn24H=$P3G>RmykmE_DX8ME;TDD(<Yy`ccN~
zZ!XHwlp_IZs|Mzg^pS;QbTK4|*|phx)0jJi`s0DL>b$!dh!07~*k)eWLnn5)2$!=m
zC4H%KHP2ZJXWz9H<3~#myx*BpqMh=nfdP+i?)&-kW9|@*N(ikDhR1`#oM7C$bfvXy
z+BHZEQre^|NC+13u^u&vB-~2;)^u_Hhun`tI7PLr>DhxsJ1^K+^k6N!eej4e^4=mf
z#4T}q^{`VHwi^VZ5MEA3vJa-!RuBN$1&0|A-44=<$6}}fC1iXVbl6ITS)aN;hmT9s
zb1tH>Xly5;&3t%t2#2Mj?j~IGgEX38jhT}Mw<dZsX<2jjpe91KnnKMj9Ia|J9!WE$
zPm}W&{>4LPNC9?A=!MHOT-tB&rJE^^s6zuqfhu43A1YD51%=@*NBw3mg+URb0#2!A
z_5TsuS>8WxAPUQX+q6UScbmPRiIqzuhFb@Umo8{sa=`q$ex%{>sOzW=`LGN-y%^KT
zTd-hDHAk`zhigxAWMw&%E@JN~l4EtyV?S-+xAccX3lc#TU`Hy_me$q<&$<RON~tJw
z43iN77tc4wKIeie^X^@6H#%yz=-R!Umhd@c%~Gll=;xx)U>?Mqke6397)j`5#*`s<
zO~x$3MfF@h0wXku8<Lwn#lI)BPPzc2kUjONZFflvb_^3nj(#$tS>V-@h)<rZOVNMB
z!<08B9ZWCMo5U1aaDw3l9`aO^=@p_f^)YPURQFLXh-WVGwzwe;*l&48bm<)Hj$eu?
zJ3yC!0W<)S;3L)f{$H{%<Ehpw*TQ*~T~!n1dcI@-P#b8S@sj&j2a>@pO}4U!@U2!t
zTALPm)%Mvxv4qFzxxrRgGV+#<_np?SD6>`s?z@;Tu>E&Dprr7SpD9tz04t#>d*<v2
zl2{FEi&n&B(!yGbrX&G(1xISyI!;@y)w(}{5N<eq9vhVan)ZVb_zA~Ufh@y7#uJ-j
z;jce&(SaN1H8<k;GIjK2vo<U&J4j<EQ~CK{GE5njc)Vh?i#7ZtfFc=YEeBG$@;hS3
zE$>k?<DCOVm6n5?=c-w)v5EiNHe8PvK@G={PW|l=?E@@4ut>P9tH}j`4eit+5G7@V
z+(42GVD5zrljdE?e5q6yT8juS;;~=cY#Coe!VFSz9$e!-Id>hhsHWzF{e^?h%Xjez
z3<`{>l~#Z17&IYeWPJp9uaP24w~f0xX3}e5%@rGsiL+0M$3<M8P+b*kzF#EN_=p(i
zb<QZ{>nE0*J-KKQRvUS(w5TMZ4sE4Z8h+o0?n{#s8OBk`8td_~DC+>;JKFk${i_^c
zwbuCdcz}tn++hKQ>(!e;BD18;58(|n%mXipvIExtk&<kFX$#7HC8w{on3;dg+@J3`
zf!|Skg$UP!TCqg1)@|)dFqvIE=sW4s<L6b}AmBd@pQMK!F>j1d&ThtUh)^0Q_c#uY
zdt85tu@6M(eQHRwK`v?S+4(sEovZEfxX7dLqQ|!Juf@J5Fu^nm6!+WB)DknX1u<<T
zx5ZWayXvV1ruszkznUcTrFLT5GH&=c_ala!+?|#ZoY=<>8#ap6LsmFZ)o@<eYAeUk
zPVCIvEm^#|xYpRp{2FrZVkK?K<w9jNLs~<1$nvVgyk~@LI&M!JVoGC>Pt>t@dXkk!
z6GjB*-Hgf$39s?Th$quSuZ`>(Z&NK=IDh^jymf<`jb6Wpn3XWUB~m^EXM}?^(TWv~
zW(tFft@=rm1+|w=YJd-MndB5TP^bM2VE&CQ*4xVGPBNONx!_bXQ3x#fG?z3C`>z)F
z!NN$Mt;gxkHW_Aq<}<!u{fBv3a~4BTY-MuOnb~lQ9e5h$Mn7=y8y%i^;W3bAGgx>)
zkR0Q?xZLJJkknC`rr_QV*ka+Pz;$%@5x=xWc3Y(l1g_OeL+P7E+j*WV;T{_glpY7!
zR%ur~*b+_~Ikmph`2_$f%?H<=A;<DuQc<AFfn@W91Zybkyi>d}V}Go!qm{kYuZs<s
z0}nz$FpGe)EtwbpgE8H?)y>L?Bgj&}2_j4%@oR(*$FY@9iqu2<-3?MkqGP1ftQfuP
zTyGe0F7kL~9wRbrcuazY>g*SsDJTeER`Ue{(&C-x3r512$lkm;;y2V|d7BT=a>xTw
zQ!R!)v=(`KI#{fYB`aOP0YN#D4s%JEIX~!YHR=v6I|~8Q8spzW+H3^8Ugtja&rRCa
z&OIr|umaV*X9#giuacjae{I%sldAD^6o^ngBpFx4a+&yU*h>!Mnz_RKm)kqgMzO^5
zDkjbNbGAUO*Gp2xSiy)Stns=#uV~!DZS2RQEPPSCADtzMRY7)wu1AIe?7TjsG}1zf
zoZOi@0|xCLfqH%+IqF&lc|2UBMbH>N%nMU^-?cU-O`n<aj16Jz#e2?i%wt63*G|(k
zj7=YF#onh_XiO8K{yu>v$F5QiZqu5R`}8xZUEvW+7n%3if=K4nN-wl6#YYEr)hZ;W
zt8UxvZ1pDXe80>&oe*{W*(SjSE}@f7U0VyK?BIm%ZnVV0Ro}ATQh%y3x;Ip?V0JH}
z{$6=Qz%Zq1-gXjXRmizy*R-l^U-zTlo1$|Mpea|YVkk%6q_UrDvx*C`Qho2eWMDfa
z%bEXzA{faE8xz%nt6T=8$r_cqe^~Z%_oQZ{7T$8qEQpKsd@r7R;yNnj4<>3wikDiQ
zsQ+orNtO09AMl0N{8%!Ea5cW2ERagkTi@jJB5h}plaO#i)YyZr?|p7+y4r7$KpKh{
zp2EX$BG(hSMtx<B^7TPTYmaQ83EUrtLq}zZC4cUc{2E0;-zvTzqDe91hVkHG05fZV
z(w_SM0{wJ>7sxcz(nDP;s+}gh4BvG~!zwu})jAt%uLOi_)tZm`76NdhPCW2GGJe6S
zASip!LDBTU7oKm(_*Sw@MhHt#=gA*N7}ZLS90c+4MVJ3ICMxQ3Ve;EOW0dK55=Hm@
z!UaM%p=M@dZ9Z{eTp33sU>kTWM1+_*dtIhs2(R4o*(EXpU*MgDg(iuJrJP|+{r)Gr
zfL>aPK%pM6*UVX`^@$)>d;+WJknxy2bWYrbRsZuvT`jdT`@rcM3$c7+!=jyICvJyf
zzCWx+OZd*Sqe-5om1Xi;w_{>Fz9RiYOsKrM>kZsuIH<7HF~8ZS11z*DX)O&Cw%7&@
zU7pY7S^4BsHz&?Nv8WfwR+S8McscJUDVKL1NXaAFR*kQ|SOPpH!?}s5>u5f4lE1zj
zJFMw>Tl(8wO18*nq_18c_VZxWn@0B#VHN}0AL~epYw<@t)YUEaC2$m)O=)9Pf-q4X
zCXO`x$WvU;Hf~BXs+Z0=YO=%bxcMH>FshrQk8ED-OK3au0W{T#NL8w@kV+JAy$4w2
zZUQ1l76y_-UP-17f<%Qtm3kAL^dp<GXx^%47k9Vxgz}MRNeL{>c{Vg1#O>EdOc+5t
z)-9Tu!kZIw8H>L)ObR8)E3bH=F6<eZP}c`SQe_F*V10~heMlE*-_lhudTOT#_DrYd
zD%n02BqAxW*P`Z$d}6k(Pj94+1qmee39#-MHh-;v==hH>l0l^}qZT-rRMH<ti9_UL
ztX6lrBW7>wJbDN?cqJ$S*7))8A=U<dzhvKDx@M(#n#1X|X;UP6O7@eNxXe_ZTULv-
zYtdY+9QKX54L_Y!VfpN_dM=b!$|4uF?7bA#UdaFWmm1dvRPEbk-r;3}w$}p)NH93q
zs}M*(kpWW&HS(Gb#U2|j5VmfBKYO|eUbdbOOd0y*sxcB=lR%PbH5LfAymiY&laM2^
zHg)c3cdfsl#@Zi{J!rIQL*mf>n}^ZE1{MQK`C_eI5J|p%WzZv}s?xRB)_Zqttcjxb
zDlLoxH6*Cj%Ri^YrR}>PdSJ8^_+knt@*W9PLD%qpu5NW~QOdkIWa8mkb4G$4#Uvzj
zRRx8v!Yq=5*?#OB5i49eu)He4bRMI(U(s{vcr;RE2Y7Sp{g$8D3Q@P{o9RQGe68`(
zD^KK{xB;Es|KSE|kr7K_4f}OTrGzYrVya(faJF#Rs{-15rS~v=Zc9WT{e=xLFw4uF
z>g7s7(KsVZqS!B79iW;HB4KHlzy{kSY;672@={{j{o#Lz*SnRCG=H9}z3a-L944q1
z1A}*ZA6~sS2-~gv<c-=VhGu*V=KYOW^KZy|{CcK3+lY+iG*&X2LCq8D+*ASQ!#w7Y
zRIuNVr<`%YNK{HC*Mh0)hQ=ssPBHRS-3-6Ks&veTGg#5^tR()(6?6WnyRw4}NC;uB
zM`F1sO57Ykjos=yHX+yN_ub++;P=Mw)Fk?oJJFU;)q}~`x2gx@mL;!Ko9c?c>z#{J
zJxAVlG+!z%zrr@nu#Ge+I^|q|0cTE-bi5X7zU?)PC@359@U$D{&@63Ot5&q6h5JKl
zk|hGZ=1#Dp5C>xfg{n6cRJ?$sbqYBXU@=Ew9YMpyxCFs&_afM)Hd`j)JTN8yWR=hI
zGE0qQ2+UK3F6@E)tdP_f2B_dK_I;Azs#b9p{fF-j<66lXu46YkhnDhQ&cX3X8fEy5
z*|6LOXRrl#v|8=*1QeoFURY5^p$c1Qh^UF6d=7-yNywGp9}6a}HPRBKX#f9_d%HY-
zQT_&ea&q5Wq4rEg+v~s_?!I-jLaoifQ82B%PI-)5t-HtHl%Q}TI-TIB{$M)YFM_TJ
zF~+j<f(!uD+AhzBTLy>IRr*0aY>s1NDk&3eP<P4PdG@e6r~TAj2JCg~xbB96k!+Xr
zTR{*vBDDsoM$yJOz;{=h<yN@3Dz(bVRa@pBM|tbxnI}}A3n}>(`phRm?CU|m1u~Xd
z2oC$!Biz>tfF(<@qvB({R7KG=D~|OPGGmjief-!l$-RSIUU>Zj6lSf>K#OPrq?#so
zg&G#FBbhrXJCLh=8rOf|c8nFY%{EJLfx$f?f=%mhvvDI4o$)~y9+A#c%&tc4yqr^F
zzXSQ+Rj~_aYnkti_D?1E-?9BUJhUNt1`=YD>zB}`-)}3H!exJVB42p_XG*e}3Mh6%
z$sLpy8+UG~tF%mscFONlm%-ai8;nPK^*KZUG>KGSy=awZxG?)E@4CqWa?-6j=oD5U
z`7>c6YXp4A9T|-wl|i4pdW{hxFX#<AhieeMdpkiD%6kfl$})ip6BmufnEk-yxZR!K
zO%bS$`Y3@i#Gtt9-*6tE&;J?sL=V#|q`=38S#cJ)gjZ4@`Aqrw8(G#P+ZANE^c^m-
zLe3alt@Ca4T_$>=qz5!lne?WLMAR10+C4K$%ykO(DnnR;|7t=T2N?~#*gdbF>oA)-
zk?+>64vMYL#?jn+6Mx?&(W8R@b1f~2{~OFP<2x3`GfIZ1R~DR?g48tX;f%F&LC2YT
z-tpW+meL%qSKObJ)AntW0{v9y4PEcA$4s;_E&nG<K3GA=_!PnYcTX;&fZtuXC_F-0
zkc!fvqBDyII}NgW0>AaPr1z<Y&i!(3ea4N^N{Rm&InWVOpK>p1u}pTAy;W}?b#y%<
zm6IOMIOEv>y(*=(;xN`;|LPA2<v0q-2`o<1$sAPljXus;k>)V;#foFPOxy9t;2+^n
z#Zq#mLn$n_#s;d~Go<k2)jQY50b+5>&)$Pshl#=7{)ci}TNvJS6NUIsH@`@|u1t6%
zB-TCseugOzhMJJ89Wbe_c5QsZ7}Nl2$f^`eLhiO!884)sBkcn+N1~u`Evk%21#=?8
zkygbt6fjG_8{_o`w~B<qWV#v-6e|oPY<?wbdBiwbiM-l+qGxt<D~VcUv4&Yvum6~b
zXOkPcHS@c$IY_&>l3dpbZjWm&*vCU{np!xJyh4xD8h&>{7sA**_~aKn_8$A1mCFhj
zhW?0^QGXY*923jLRXSDIr38>S6dvDsTM6U6b{_0hMu}j?Hyvza6b?d-=4&SBX86li
z#z@PaoijB<XE{wi<g-jw!r3|f{XZmyhBKCXH~Px33)2Y@wa)YFDmumu<<O}sv3zw~
zsJi7*&!O=7WHB|X^fc@JzuUWUgpMy)Xl7)+6VAdf6j0=<kfU=8argVbJZtY)q%|ue
z$C|t?M^m3aH`lZ&=D9Q5#zk1rbk5j-@;QPRa~=VLo8*%)=N<dG7ei^k&c8x&c3Y@d
zN=;F7ijs1M$Mq_CV$#Pt`rV1$G~_RDqMAXg!~cocRe&JDcoWbMY}Ph{xP_tE@%th#
z8s_d3%{4fTDwW62t*9mwS9OXF++LHN5Nf+QcsjW4LAW;gsk>DK%igj@r44x|ouPDQ
z;f(B+m>liaTf(?P>ek3)w1<wR3RCcWV>Ic;D39)O|Lda#gh8LWCE+yyVlz^#8GDLL
zwn=6|e2c-p`Fg90GoDS?SJ5n0nz>|geCYqF6h2u9j+3|_zPfhwEue<<=wrw<+@`f2
zEho!0J@-FdB9)aq?l>?zstRI$(*Ir=bUj+Y5;36p2DkVuUSUUZq|+EoK+;0}zC>m*
zM}(h`f4`u4);yj&%I2C~9+wQ1+N-E6lssTEV1cC%8NcmMe3K`|(G-=M*laI$Z-eZQ
zh&PRZAA-lkA;&lQogIZ;0%syR4+(A3Ea^Xvm=pW-n#s(xy?Baoy8+#_Y3)tZofbg&
zz>?Fb7{Ga<pI4Gy7;A&JWG+)0rvuEZ&2o`iJfq(M*blB^T^XL+Ke2pn<-}kSbou3L
z25<?&jU{sM!H66oLs(RT$A-1swaL~{x}E(043tIJ0-}Wi?#Md3!~q74=}WaK3V^DP
zlA>NI_(a@R3&KqpPaAyYW9OX|v{NKT)J{C&e@t-Hmhnq&A*+nl2Y-sGdaCW7dcV5p
z<?=APF&qLAHX2x?Gq5-sOI>*0Rc(A80VKMByWfgMbN;;bFIq|HzX^2P)R<p>8CjE%
zeF@Nf??l|%cRfB1IIs{n`Y;vddM+ujJwKdXjO{Nx?%gUde4Q00J3?_vV|f(#$aIVb
zoqQIcm&4iH`Pjr7wb^<`f`<JtN<P!zS7FI~^_u6{G#J)vh_>iX!JovJEuzhX)QZD0
zj!Y)~sx~*Ri;XA$x!Xl7;><t`YA;!idXd;z<vU+gK~ZTh?HKZGcI%b+q{^b#ec+2O
zYZS-jJzZZ|IVx%#SX&*%sp)W$axSWazTIwh+bElXhX*O*eQY{m0(Fb-Ey@tZ8{bq>
zM{=<*6PYIEDOz6OZ4BgT{L|I2)Hnj<@s;;0HV~1}b@rnKPTI(j@eT4}Ut%Mp#IC+p
z;q5x+&$_R7L<gxx?kobD-#!71n(iyeh^Ix}@aad=6n>)6D4p_ORWtSUxvea5h`Y#K
zuUb%b`Rk%1lg?WTHF+hT)<cUMxjm`Vwn5bsm&{bpW?q!@IfG=zcLbcwxC$gKYmcun
zrP80`$&`;GsyIUt-N{T`j4rwlBNfF(L-6)F;~@TW_PmUyqn!j{qo@CsA`fwNgf!LY
z?^?E@lq(0xqn_V};3;Zj4Bxv@=>EtMkY$VM5J8<$@x(ww9(m{ZNDj~uG0b&Elg}3d
zvh5Hw&T%>jgq@}}f`1{3^Da1AEu}j{YOkwu@??3E$w4i+!YZs@=?B+|V2H)N(bCd9
zz;X5WpTsa{;5tpg;DwsIcFxV)pwz*;l|!mA+0`4LE2g~)hAQ@uAp~XUTBKayBRj0c
z2wni@{t$pM7(U!SSi#0-lVw}Vvjr{cZWm0Gr>V1J9^p@yXi+_bC2qIKZKuGsnoJs>
zqRj0RMmy`kOSC|lGbAldB{@0(!McRA&l<b|PUgzkH6w%t-1Y=}p;@sZA8zK<8AhhM
zEiCqOw?S*qLy=sZ+(!py>P^tNNB)%J-oha-ySd*KIv_h&R_z-BKtY8YxdA0M6Qv8{
zxhgjY0CsRGJ$epyE91{~MGDq_>}j>e8hc?70TYMZ4k-#ij<OEZl$<Q-6RR=~<mhWi
zcd)7nVM>P$68X<?utaIo`99+YzZ34~F6Z%_$l@uez^Zpw#OU>^nS$wTt*cuYWID}5
zgc6ltdK3V@oTp*Qlp5O%0aXb6$~BpdS;{R^&6TZ%lks468K9t~6x5~|<~rpHHRV+d
z6?QmjHq=`^(n%W@&Z99)!UdBo^s87i_G6A_N{^TMoUP)SFuisMLve2o+kZbyEbK=5
z40d~PU{#m~<-b4g;&w%-WBO9Gq{jFy*X6u~wlrl=zmTN!Z4o{D7Zun6nCozbGkq~^
znzFyBE3y7R+gdA(KXEC__rnQE$(yDkqRm?eL{DbBKPPnDa(ZMd4m_UnF-LdGA{&m?
z77S5x*;VVf8|%w99W%}d`%kTi4;r39%>x1CU*+Ro#`u{Y<_515ql?777}w^V8PNZG
zbx0OSOx4wm3=t$6+fvJ<#ITRa1=KS{-Wd`mLMFyFQ_Fe#s=*reXrD*jwQHM~W?!9y
zk+ZOVyy9m-rd-T~DC;-RKzLEnvOfNQfrKkQsbE~Xf$q<@G42<dqghA`3Q&}yQwG0U
z&HXyW_gqZ5<tO`G+r!pG;Om%8qsxPrO$`QwwX@)I%}eTe#2uUf_pTH_jkJcwn`K2b
zR*Vvzk_CAwn5gzFD(vs(#E5R#=gk^ewi;z-4uv+=#k+B9>b}E-{KcN>0vDbf<gUZ$
zvAs398yLYaTTb|Mb4N6^FI6KofVSGyVsBo@dFDPmKR6J7TFx*9Q3^M}1<ZUoK{Xx_
zbj?`Qe(LFiu63E#Zdw8ovc1y>-YHnW{G@`j*I(pJ%F*L&E&<oar}Q7y`s($I-J7!o
zJ>Xd%hg&;>2EmMpH*)gf7T1)M)&}c8{*mDLRK6?+pjHB%ayx~+uw|Cgj*CgOvjCin
zo_K9N!j*1ann9hpRbOEVf*v3`?|}l2Pbw7*{s$Kq0A_DVx9P!qR+C73<D3_94Vx64
zEoXH06dXs0qDAogn!HSh+Fp$}GoS~nf>k1^$Uwf8goPtoE?g%*2RubmR_$0A<X=QJ
z;GD@RvH<O6%*vOMP0(`Xn`Zhe1wH5^6+E=9psfRcpPe!?jt?Yi&ZUYeo)7M5$q%&b
zl7G)i+1t9nXxr6gdc1+@SCF5b<n8qr6r$DdPN83KNyVD<D>jILNWV9Tht#OcfS_3m
zK|SKY(<1)LnYI+-M+YnACQoWI4Ml;u0d_i^_<<7-Zs63vB?AI}a&%yzdSuFL%{nBs
z6JxPJ!5rs2_-;HeM8t+aL<L-~>E)f7NiIyHlfbIoAczJ0R3e<0A@%IX4zJK?Ak-Cb
z(Yf(9fkzJRY6zkc!Fx;jR(6l8JIF+8GYv)wK82zA0&4<++?Kw<=Qu4XaIrgtCImte
zL6^!JQO@3u$M@5#(85=9S6h+I*(-T8=rM&)aQUWW7z=Zm0k6}blt5Q<0vk@puP?!M
znnVEGjR`v1?sS^0>_<T%N83fd1HhMT-~lgG>;U2!QS{Tc8MhyDlnLODZP_Tj@{hGw
zhrbdequ#7vgIE$0mHrz!JkrxqSV}NUe)I!>e^UbTo4iB|*3S{~3E7$~CUxSo<CdWF
zSs0#+hXUDOy8FSN7(Mo|4xY+~I&6?%rk<&HDBGIB?JYp%K~Zn#X(VN?ARhW4jM%q~
zY&uiqW-+X;oGgsXFU85??p%H_aYJ?`cEb$ed;>U}b8j3}$OBgSrO>fI?&BEkkbF%G
ze6)TP823`R)yl}<^naKO|3-5*7Yx_xE0&+EFtEyoXfy-*Y58uYoUeGzt@Txf*J^_5
zqVPq=3)uMq50*IdG9qR_=R*m)%zip9Z+58BC_0HsNS*BXWi=wMHC$kV&GCyxam3t@
zgb3VQ8#CZB-}{cW?9Vqh;)B}pD*g&>YMxEHvzd)jBb{IBpyiWQLMOcOTUqkkm1&RO
z1)FcC4my(SqjXDsZf7y!=YEg+n5;>oh<S&WBitgD5{D%WM?_vj6prV&p;zAr`V$7D
z;8aT3uSZG6inFWoHn-#gR}0<QrZ!5I2W$lJe@g0r<>$Xs!l@@nThzPf!Y%}~_sa}Z
ztNOq7HLAibqWbI{igNnLD@v2NlV`lZn+&Y6q@%99Q7P?^)4vj9=hW*5j8@zh82F4u
zw)G$qDIf^ElD9~l2*&$QumSXJ{!_26`HsOK6Sal0K&L^2b65q4z@Jj@MrlOkwcNR<
zsl)FEpj6!Y6IQSEbm5VDY1%H~m}8y(u0V#`7!SCLH`}IgMESX@5U7Jp%)%lx=X;a!
zmWI+RVe~)1SKI$*x7CTJ8y7zw9wvAz8?zkLCG>vR_RYgyti=vuuZ0+i^I$@lmKO74
zEM^|{s~znVC1^~h$Ao!S^(WSmt%2&1@8XfKDS7M9M}?|`vsjh)?JOEYhJnItO|H?F
z4Kk8&65|?$>=j&P>_=2KQl7H50MNN1j1y8aCNM56^M9f?%Ao@H&ntg)r6)(hgfgF|
z*niWF*xV2|MoU5_ks*{|OWni?6<#Ay0@R@V^{ljIR7>ULg+x2SS@EJx3lp3yF6VQ(
zoHraiV0A6Ggcaq5h=~NjE+M%BfAMAX^_Vo)GzIHO$LjIY$F>WzrBBvar6!+)w&*je
zxLqnd>^PzNx<@&ezNRoFP=UvU{B`vFW<9UIs{+ti`37Vqkq<C@jG~mW3j*inzchwS
zs4FDwV<<5XQ{gRhCdCKPC{Baug)t#g;<ukJl+Tg8E5@-pm1MZ<dPRp+8V*zyT_dpd
zYn21l@As8gt$sz}p?@F=(tX<Yp)~-4yuSyN3EdwE_|RPSklO<g4#;@<zs({d06!RC
zxtsm7doPV@LOpcxL<nBLA!zsd%uL{iLVr~<89AYOmLA)osHe)9BrbvHGZMlHLb?rY
zMbYIj({a&d26>LgE42#~HU%rLL+9hc;G=kwG)mP;L-gxi`*)#R4WQG5o3<%mt`^4z
zBTIVgY?C%ktMg&_Cc7M-EwAc0%01IrEZkw@1ad_%Wg<pq8sHt7oCs`|0u1)|RiSMB
zE+=4h*?xUpFFu5qOQ$v|mJxM!sJdk_#%-jMp~Mhf(W68~58+F|hZPMKfHuJ9Ml0>@
zwucGgy7~3R9NJ@PTm;u#UDTM^sZdz1{1HVY%ktV1`iDVX$<zCL;9$)a?aTE|p6u0P
zQO8MG4A{aBX7?d|dsL3c8M3gGE*5Q50ms*wfh*GM3o0w0gN&XG8Y)QcFbgj_r;ugy
z-Xf#uSz0}=#_$F3YPyp(*0i%EuYpF$z#1G#<oBJ+?wOK_UA0K}adHYZ!YiM=aYf9c
zs&JXvZa8_Lb~wDtgugNRn77xxJ-lpYRMk-#M2Mva%==yjO&{5zs5A&ph7FI;<kg=$
z2sEb<<w<GcVnC31YhB^8BZu8*r4zqOu1=-=mdTBh{vwMU%KoI1JJ_2TLH}2)?sq-)
zMG%KU*46ByHsnSe2K<hn@Vlt&Jo!MUn4&?%GdUxad*^o|CA|Cs@Nd5YPw%#66-uK4
zjo{JbY1*L$hs%1xx{||37SGfzS{ze%MIe>dE8eL^er_+O!D|UXHB^~sGnvSRK;t2^
zp}B@zT2+BhjfnM0jtGkG`}`yUj_-}QQw&o;L2@IU^WHOBf=%d&HS@jZwy_*MA<pD8
zs0-V9boo!sf=NyL2N%8mIs>q`B(;>g&ukGb)L%{4`A?bX2{cvo<3l4;-aIh;8v7kZ
za3Wp`%-8~+D@flJAlF2D$dp3NPFW2b5@E$W)Rkl6H>9?Ob~p4@OkYUBJjFK~H$7h~
zZ8w2_Hw&nHF4v`;s<z%|iaR7!6?@wdxGUpQ-Cu@%cOHB~=|@nPZgAA9!GzbAZE!-j
zRKBCOw`-r2aMP#>%7b_XmP~oyfX<=BVrD(FhP7&;8s7v8yIdsJZt1+io<O%q8ep{0
zA?)I(Iu9qsHWKw8#9sO!3PLJH#0y)T{m^Em#UXrXGiasuw^UV%!4RkL)+BA$q%Uum
zGRJ~X(4201|7UW!%CS2Pw!kQ=hEDSj(?)Poz<$RLc@&b@pgmiZdz#m@9AzWbRUqAx
zAp$mHX<8dE88P2MMU_=LR90~g%Z;+uCi~#}Z84H4&&pE_<X~?;&o(4sg;~*23{fm~
zeUJdR*imJ8<vdGvemN|#fb_&kIoy3xC-SNVrV5^{_j4=8@JgcE-V&|ho>8x!{f~0H
z*XL;so;+u)U;FuN+78;bs4#KPyPia!k`FYc2&cS#O>rE&0Sf5@0SBb{@i+S4O8-3w
zD~mg6pcj5CFs^9TQ9(rlIa4q~fFl4F#eiN2ebUo;$}m!mv(>IvVwx-n{4B!I7=GwS
zqUXBxbn$z+Q-E2ZFi6wy;825i9Fuo2IpMaxwDEDNUSFQSbN*}Pyl2)xOWlPQ0+6+n
z&Ph<mO;j#k)ucQXE-r+iG7s;IHDZ9QyFQ);T*8Mc0f1|3be7Lj5aQF+oL-IGf8=@G
z4V5Dh0yYt)=DnrG5VwAvs7W~S*hm1M6d{iKzcXcR2qBrSphX$$)o92K**AyVSyf2n
zwP@=4|B>0FZ9?bVdb<v#_rkTp&s}CM3$wJWB$fA{o67rW?lN~PzyhpW2j+(F!ae~-
zb(|8Sxi>*dAnno-dWOe}*zifhQ^%>^YN(&_a5Xj+i8T|F0i=jYJ&W#o0gS!@D1%=6
zBF?I**@r@=<=!v&%Q9AM1x`#*i-4QsYb>Nj_|Ea7pyGmDQ#6JKEgA<<=kIK?HP=n}
zZ&2Z{#y2LnNFgUR;&eHJ3H8flL!7b`S1s}Q)xXuYuP=s-yXzOxS7Q|7UJCBBsZey)
zBG8U9q)SRXhh6(T1DQ*v>x^pg3lDF_;r1doPlYL|QNT}cQv8?w+WMjeYgYAXjt>1J
zPkD1cfWv_<_6b3MHv(6ng);YPz<7GtYtD~IsCt2|`mu{4P*h+4CvA|J0<RvX*O6?&
zB*a}{vo{l7Pq2VjdpA&Rg|96f(;lQ0kuTR$ZBTW8KHSt|OEj+O2Bx~Y_P0%Yc0rh1
z?AC1ddIj=YG~iQ~u@`4tZ~i}&=nj_`o8Fw=zD!<C`5HrI4HYY__YBkxoifSq6m+Ov
zM^;y!!E?s&_y5cbl>K}<x&L@(i7ER1zg#yrq1xxBco$SVzK0ltOW55t5WmHiT1)pw
ztMcDpW{!4BP_10EIT7q~@^NKbelMSfS>zSS&Sp_(yth<KeFJ|GHCVVCA@Kcq+a7^Y
zIgZT5QW8|~*Ru-P2T@+x!J_ryCGdBA`?!#)Y$x!L?tT#&!!(!}UCXqcFig*sYaqH1
zZ$(;nl-6=0bgoB>_t2M$%m-}fPf>C=1a_x{3tn?ssMI@`9)Ff|k00QvTemE{Lat9=
zSyOe)LRY6mWoC}C0)TPzNOA;38Z`{3r}8*PG_=m`Yx*A-Xui3K$@x-Evna`Eamsks
zoiXc-5zV&1YnLK|4Rir-MTp6$6H4l^lz9(*Rv$T?o}2RnkC}cmvH2!7Jxf~Gm_z_J
zlq+CN1HoC(v+*^5$@UJt(8T-CFbyi=KLY*&dyXf;zk-I?C)K=(J@KcFxn}7*za!5@
z82|V2xy=&P8Pn(<Sx=L6Eapn8qkcl96x9PQmG(HOOKY6t<;j<`T?le>hor`Ik(DSe
zuRaP^JUn?lpqUF&YqY`q-!|0G#yd-A@d7iCtV*M^2j(fN+jn|wCd=h!@B3K>+SMkZ
z<v$)`Bvf1=bJ*ZKD1dCpb^gED>d#&|EMGueaEB$O5RX9>hp~69$6t6+@~pc-B%(+R
zCHiHr&6Du59ke*Tv)xf#rzWLRwmW<%n&fua3T*Bv=f1K%@lUK*7v;lkUm2lhY(eBO
znITRYEqm#T8$}YS6P0VP*LH<Tqn5tUsAaW%RQ2st9)-WejYrd-CQ{XW8m*s(*#d}7
zzeS9lkMyjJ97TOajl;#3DB&T2@nB{!1d&PXBM8w(J1WwBnsT{kS$~P4`ncj|xA;3(
za=KN_LsAoXq`?S=B*FYTBdxP}h2Li643N@}u<CEM1jl*B)8Xcm0`9j+@RPuc>7-Fs
zx+aHo>Q9`_wZJ?vMpwa@Kpj$Ui9X8e772Q@SI1wVu7vAY#Xm436qP+U!MurDY+bvK
zdzVCkMw-qR1jgskBL52<0X2tiqM8F|>vk$d7%g+Z@1C2wN8?S!5ZqNDaW$K%2Qf7w
zW+aQ?>ENlBHHBj#sj$`nRc9i|&R-rq#!aK!Z;ti$lDNpxv(+WOM+1axn4)$w-%*n0
zO545Mc%j1T*R}9OfZAgMB?xnhv?6x`P0<S<J12D~|4M!TAKqE$>ue`sgZY7WKOvMq
zz2P7CT3LX8oe0|}l3hbw;{kt8E^u5j=vdga7HD_GCp68ST65lCD=2$GUx!2xQy<`4
z<(;s*^&flou{MrFwSZhVs7v^0REJNye~^*C{h|bj>NGiS%CD^y?k=53A3fFI(Koq3
zLB7gP&$HKcaw`qZ|APniCGR6f7{u9rVUOERj^p^l7d>}nfNPE(!>$6XF6yQ+gRMl8
zf-*xyl0!5S)gQs95l<UVOe6(a?WJTCB4+J<KI9sCS01uTk_Ril)ZJ(HFkL<gF1#`V
z6wgiz0owzKqFfomJS#yjCYZ<$-fBh;Ry_)m;@|`p=5eMuj=|>tjVpPP%6#krka`ib
zdk?3gdU8T5qwdDGFUMY+h<6W)Oo7={B(j1n+Sd#KV6M8!Uh#t)VQ+fuj8V*Eu*+|N
zQFs6-b{8?exP_N?pEFPPw2yq_M{q{`KXQNU6&E}<Nl31TeM7ga6`<|LE0sjt)y+(O
zF0FfP-UgZSSvbeclri!0?WtpS;4dkf_v$A;{2ru~L4Zwg7aC1ozeP~n^!5Ke?eD<}
zEFg_QIx?G)K6nrBd+cy)p)7z`-L`kovo9He7kaLuDj8#B$e}65Br|Dj1u_afw@WfE
zTB13=m3Xg!5^Vd!Gutqp3la`&kWUD4WN<!<<!V%T=B0`ewJ4RCsS0lxV6|s<$xhBf
z<~DU0TkvdOOt!_CD_gCwHrL=82f)J4e!k@jI9m90-UB0bL8{;vh~iH+^LHnb+h?pd
zRLWa=R`#v4lrd&A_3>&VtO1c;Hq}C}J-9Qkmc$2>HT9gDVP8mC(zRymu<K_~Jk9a#
zz_?fsp-cO+^Fq_1%xH~=6NGm+(;*DL2vbbu@0?Hbb#z3VagDkeS?mucgO!mODb6cS
zACIPdQN4M>gxO;4f*h!N8TP)`NbKdn|1S`GSJ)3wKbXX2Y%8gYILUFgj=~~sZ1kp?
zhHjeB$o6u;6axd)&=%?e#=R3K=hFT20Q%QnY!<>x4s`4(M8-C5f^Yo?vFx4PcZRvn
zL~a_O$Mh!#D#5032?V*&jd-?QjVT!(JhosU2V5fG3!b?yd5|pP@4x*yRL7||j$mD*
z;Z<FiXx)gD#8DUQTff?J>lEfNjS@s_2TbKP?e;lY)qVME#K!oIDW^2wcW$3etp@1f
zB4PmMLZ++(2e46^Oup3*01a+-1%?QBoRU-Ns2&pvFI7+b&I=-OWWf)fhWf}|x&|Dh
zvI5!KmNmUAvGWzij4%*y*RlTWE4Gh#Hm+N9lIbE|<=P!(>%-+2S}02qpA*)&G>DQc
zT*1DynGNDP2~cr{&On*O(*b2f05vnNiAKAx&T&vhRm>HgI)JLvL*-23wH+!L`8S@#
z5TQZ{EPtWxY8h;I8$eR_X6y`+e#c#qYGj9UNPk73D6yceQ-oON)<L;JwBasM)!$sv
zcIrmK2~9q6cXm-zNZQ7_&?{@jIU)_O95u~?`C~@W&WOCABusJ(S`kxl!>(C|Zk~|#
zRk)fH`|f#g*fW|dpT|y}Lz(Fv=BCK|eepXoR438lMw_hsSb*fY&u;UGIU325*!8+s
z%wxQ=(Z6FmUOmFYdxW=m(B3@;uSZED{r0~5<3r6fWC6NL`17CncTYg=?!=VI2cxZc
zoEmING7ICg=e#KRn~K2a8!3;0E14$dvzffoW~4fS-BLYiW@cEF-zFKo%fz0pDcxHM
zPZzPy%nr5-n0iCZYH8*nYj+=Cy+fY+8$1dit9vK2k|25-eDl!z$38KWr$PP4y?62f
z#5LOk?OI<FRj9p(#Gyipv6ozb3W?PTEy>!6*BZO)zK>FOJ+)D#sL-q##}-_xnv#-t
zdWNO$`++I*LbdW^tKnhs&W1QmIjz@Y8?!r8cbb)$D4N_#o*bRP;r#LsKZT=+YGSXJ
z(dlsSJd>RM$e$vL%m@=qaCAdG&VTr=*=a)o6M_jGjTRGVb@7ic8urY|1A(+1kE2ch
zR?>=!=_1O$^?O8lB#_L9OyoC7*$qs__NG~~<$dNuHz75>VJtNG<TI><$EAHXx$3?>
zdERd!s*>+{@Hc2*x~nTVQD6&u3=yNNPo(!>S3Q!8%6O9H#$CV%`;D!4DPUwY=W@))
z2tewW22CO0zWeaal`~L$tF;lKhs_~H+sZgt*jQ|g0KkdCyeo4E;7`S|kyAuvg4#CR
zb!!JNM0gOs1>b+12Zmhyk$2AC<W@~*=Ung_Ax+~rrZl3x1*+gn6JTPAx!*z#yFVB0
zS6#$uuf}tbXiR&IcoY$62+ZhnkyH8U#l@x#+gJ(vqzfohbTPmB<7ar9z(Xa$Okf1b
zb3sT$R0-3xD>=kySwXIs=mY^5vF5GlmRyj+rmJggG_x4dQe9W^(RlPITK)*58<b|$
zG0{=?BgC_vF~R^&LNv6spI$WoPUD5sW>IxiSn^b6g-UuQeh;_(!zMd{xyVR%>(t7`
z5c7}7ad@X8V178kHoT+YEn0bB?qJ~Sh6h!+>mr|NsVPz`JqH-I=^8~}()I10IV*3V
z5ef75l_7r4oW;pDs?%W1_3%l|ADPjJwH#JxhP@)~avTdOH<myRH8Yxbmj=hlza!N~
z-^>c(GaQ2<7T$W!(Qlz~tE`}10&f{Slt>faa}y+_WdtDRST?(n$qeL<T2Q7^O2Yif
z|7fJRk-mzI1QDDL+GwQRv${XUn&h+9O5KBN6M!5PXli9kva$BQdVkTr{}hlo_&Btf
zGVl&jye%x}A3pEu)EQ89UNiK#A+cf-P&v&*;nPJSGkJ)Az4ZMO+-ZY*#P9U$dFp&?
z0Ylci0kX)2EI9fER+;QC;f-sXa<ZMGgPoZEnt5+}3aj{4EgoBR*9nq%xq$PhYOdqE
z;zTX}jRakN4}B^qw%WfDW$vi~zq%t5v7zwmTPA<CM`^(vteuopK;+u{{Mw)lr;r5>
zYLK^sv1wa=PeV2g?XG5w#HSI2uc47x^k|u+9|`>Cj`psZ1ton(22mY)brwpF-DB+~
z^D5}$guq-vAp<D+d|X`(U2oA#Ms;(1`Ai7`b(s2{jO_z+7@<L&!CzRBCH=n4mHN;7
zX~!8;GLdpd;#06?%MlEGsrCvZwWsZB1U+oEM?X2zhEa=6vmaRsUep-9!H~chnO}I;
zb^&9;LUK>^8^4D|Ym&;h7)aCBLd0j)-)?T4H|5w}3$;_T$D(^sq3~V0{A|Idv5;|p
z43!rL9E#Zfi*u;hiB%w{x}uuFUBQ5r^P+1+KWC}7yBfOoF`ihRU5`^+V5cr{)|pBt
zA9R?ydl~^89HbtQpep;fDW2z|D5K6jvHVHXo+yK-;os=|RM|JWDuD+=AwZTgsf4Tp
zUDQ_at77CGb%y6Le6W2ylJ;qILunk}89vYFy0@A>mNZ?^m#UYe#R8H;*^$t|Z}zN*
zY?(h9T>r_bDcA=og^X9%=~;)oBk;!z%4ufqOqvO`+1?l3on75@<nd`f?ew30;@Cmd
z?@XusxV>5K|Bny^p(B$-P8cAC`J>A`)>~<2zrJ}`#7Z->h_@p?|0Ypjpl3|b%*FxP
zZYOpo<E43w6=GG1Dz1A(H`@#$^ZGYOeT?14H%|T(j~c+RNh?fJMC!O?EIH~>y(g|d
z&P8tgh_9StGZ$WMZT_IzBX1`Dg(D#rsd?(d=`TrabFu_CIO3B<rgfQYq)Me}I+2uS
zw1dV{B@q?JUo2gLeK|+keMG;=Eu;x+FhTT~K~tAn@xx(55lO&h)$J&{tHm6n+y1dC
zOhW|9SPp0v&mF-HD(WWh6$vE_M6}}u&$%DR37;Wm8?~cw`d0&<zMw2w&QA!_p!>t7
z%_Lq#;x2H4<5t4h`t|SevQVoYwj{7Ny61LphX6t=aq*iFs!lYH``Wp?7vc`2Tei&^
z+ZsETW~(1ei(6L~2hzilX)`F;;4Zv7riK02(!8Pm@p+?=)fuNk&=IBM>oV!@0F&NK
zu@9jEQB6xMdllMS=A|60p|)DOBqe3NQ)?%gL*5TXU(*<YWg>~{r@WR4>3rh>s!HP9
z<))YXZ6j!XUV*Hv&{w+l(CVL}k~elKBKLppF)%qK;hp_QX>|<3#bB9eySwTt;5&PT
zhXae2$Ll0{gKXIp4+UmYD**2}Z%Nj{p;Z^)*CNHhI7PNoXOAdz#sTkn9smB6vVnF)
ziEniCQYb|Vt(2`j<kQ#dNPM6jOm*OV52X`Y<<cXxS^a-mRgcZdz`jCpPh=~~j=O%1
zh_Eow{0;fwp&6d%9b$W$uc@}<O9g>VAR)JNCF<uSKk}AYveBzg{aKn;pNLW&b97%<
zrB%^&(?8{AaPRAOZ(4tNZDLnCNu&T?m;tPhrSjv)s1z*AB2d?&8}eC$s@$_Z654ol
zWVWj8TrN6ZX=w@(7$kC~RFZ_w9MWt<3*sm-Z^4THQF>}qd-H?cy5<LtQr8>aWAc2g
z*^C?2NbMb-VsQP_gRGS!t?J&OM;Wo$3n5-XrL)?3^{b!dxF;)L1JrjsLh^2pR&`aw
zlLDwCSLOqnwQ5^jbC(RujF+9a7I<w*je4Hly!kSV)9}Kb=$slo?a#Yb_!Jbny2(&R
zo+`imAIG<QCI$u=-NGQ^FDyPg=o9Io;rv5**k-H>^V4tzk0k^16#L@I_xBGH0VkwK
z@h9^oc-x6|jL|i~N2b{~`@}pV+FE%zw2T+jCS2`2)nUh+k(+RPD5NL=0#||z1)||n
zZyPXNexs?%CzJ3Hbtr!Ym&!BPm1P6bTe&DTD_@+}v^=K6USFd&LbNdih6;jn$pU_V
zfQ-7Ue}yqm9Uep-<E-C#KiPiJR3=UtWU>EsQn&M9M}=>{ewKFP{sLHe>1noJ&~v**
zcH*hr*irE*Zx~Ih6&9ugMV@B=7F`$xH{9t(L#q<$sjNlO3RWM>(B63V$jAZ?NhQmk
z3;z^Of_792VJNn7D&g{bpy%nMj-FN$P&{lBijW<Ud&jlJx-XGWO|?%2t@WRKRoblE
zGUr?()%tK_W4Jzvo~ogIg<azNq-Xs(Eau7jsTPXV*vXnU@f>%Lh;=N0x(^s>Lg_T%
z{#ozzf_iJfw!|C<9z0|PJX3AMwM;$+qCH8aDEuEgD4z{2y;QR_vO|pz2bnwGv~VH>
z8|RTKO~$k5R5Sm>C0>Z|Ms%G1ZrgYXD<?%6ouSeKZTVB<gzktjBM-?5s@~ekY<-3y
z>CMB>GJR5pAa#nH>H$7sLs7#O0wvbH(S%Y1>=y0_&VJJPzCKGtxo<TrJbU4~0`Rwm
zvFxDT-hBa58UJ@7R=YQ9yzvA=^ZSyD6a)NS7Kp=eBUwMj$V!$alVW><uWLp;9>X~j
z&HdQ;pUE(zi%^^xUtILEFFql|k*=lE-#9Su)A@D*woUy&J+c*_?Ykl-K^WOlbtaX9
zY2fNC4ok|~t7Avs8{{zsY>tC|_6a|TSW7qtSU!R-Dc7&~q&my6BthnO1qlE{=h`-y
zb1+(ss*Vzz=p7f47g&fh`h;BmkNO4hOJ$%ByHVwMcfsW>IqktmLKS8w32vgsN(+fC
zEBEp^PQFwjD{3)lZ`O(mW2rX0REmpy8b1xETKLXHZL9ejZJwHy>+Hh}Q1X0p2?^S;
z_Ctz?|053@t|=j@hXHY?B0ftLV%6S=VT=}M)0StAmp|-+6?2vDgZuMKAe%}_?<y~C
zQC;Qk<e1=_GS~Hz90*zz^B25RpVXNV{V?<w)4}G8zJ#kZCuR#ARyvk(C34Mc3$New
zjEeSa?Xk*w*L&US@quJQnVYwm<#aIgRcq2GjBbsp1IPhSKV+_^j!huq(KQOu9>aAy
z{hG(D_2Ajs%CuPnlP4(;W_`n-(&U`5lD7}lKvn>&a|N5mguw-Ykt)s$C1QVbJ?BWj
zald$<u}O%hD&&u(WNu}G1p!3CfS;h!&OW;I4l4CLgXmy_l5O$UCik0AmGyIjdAC=M
zLs>T7C_YsZUgl(eu1=~MQf3eM$cQh27mXd++SI4uGmkMX!dpY3&7Mda@rE?Z0&KPR
z7;--@tJRLkVbz^Q)I6%N$)Dfl$Yxd2bDItMR;!O<{V_R$*czt0p~7`qqkN!8v$+t&
zcpx_za6;iC@G4vRXPtsk=-$h?z(!X1X7aTTqXTg>Qvr$B06##$zuNd~*#IXkdB=b!
z{l3x0ra#&onkP?7u>OdHQBhv<$2vvneT*r(8|Fg=MYcF27fKm06xG;&IpnHM<dS58
zHrGR<U|_I2Uj82ctQFxwH2|Q!|G&%f%i^96@;&9Pzwi5vSZ{2*1C{{oOEADrxu%p3
z3=5w^QObP$cLE(Mf{H;>LbE0c<6saI`8IKun&EQH?PAfN=Gf_RG;#DJO-@7Ixt$;L
zwtWoWc4iZ=EO&8)u!>0`S`nnFv>ERf@<8DWeaC+BorHM5VbXvca;7qBI)m_1X{L(a
z2skha9}}3^3&-CTMmb^C1~Z;zp4LkdQ(5or2;ONe-mBB_47%XMVHtK-9(K(nj3Hd)
zu<gi5hU}+to;JLh&bpr+-sQE{a=Mk+*t|Jh`whcjPB0m?ohJ8|V5eg_RMXX~d1vEr
zg{S(Wi834wVoOcC<`72%8YWr;pH2P_n{xMgMiE)_eAK}mPM_JlJ%<zoh*;rFfE2K|
zH?GS9Ph8C;V~*l&T9o!Tr<@O@E&r`a>8{lFi=^gtQj$>t{Kty#%5kZI*IPT^z2Dp%
z+)HR6XE1T_>L{5@QLni{Bi3LO+^7C=owU&-l`U!Y37AEt2DaYx6b2fuuX$4pdW>)S
z^W=3^p{`i|Ph-W=LK|kBa8#^CsV`9uQ4EfPp=O=Fx$dOH&dfTyiZmqvXDGaDw!vmf
zs2yq5JQ_8JRjX}JZZ)bJ-ergw_sG8&mo}}}3<#|uLrn3wF-Y>GyoWLgW^OcK`avHr
z*hF@rQ1R~x`^_f4B-%(_I~7NruvW4DTAj~rR=nnQySIM}l`fbGCe$r_?ocKPEc62g
zMhOQX0rdZEOg(#3c90hu*>pS#5%dzfh=fLwjRZGHASK=d3FJzerL6~Oq-SaFk3)P)
z$4uE|V-_Nv#A=x`SY^gdsk&Ju>J6W9x>TcqZ3f9qA>G8&T}Kj*>ea(;2Fr}<4IF8y
zR8qOI7G8X+w~PjwA>N}t4tMG1cg~H{)U!LJ2;X!y?^Q7cf-D1;R>QXs*i1PgH2F93
zj|Pf7^)w?Cl5q#F2s`A$<U>&kSYSP$J07+_!Gfz6%75Rm)e>QxrA_&rn3UfcLFOfd
z<Han6M`g2|{)CQY>%u+gd>b+01TLqN*YUN>d=R4r(M%Lp1wyOi+nbhf%o8b<^$Xw2
zsYF_$H16bqlik`ndOVlOw*U?untQ*ZJ&`hqoj8ix+C`j&u?|H8bDuPBE;zH%9!<WU
z&%}N6-A*|`u0^%KNaH4|<a_jvZEEa7p_;`~v?r2}q4h?AvMnDD;>;_K=`#kT+Ia~I
zFz;h02?gY;1ktsmW$Bz&A(=lsb?A{WAUGJgr=@bNF?r1tK1h$N7Wqz!$7s~0z13zi
zpx$e^uzEieZ@{2N45*&Bjbr*Trr$kYG@ck$4%C<5;D6pUoF-k1_{H4q0Y+u`H*xk$
z7)?!N&3ael^z-4`DrW8CqCEysHx7UD_$(A>KoBN0*dSJ#PR-3AFK&p_{^D1gLCiM=
z<sTpYg1{{^HIjqj1)JGy3Z##hD$+?`SoKmqQR431s|T9Q8k=R&xWg5^&WGBKs-{V2
zuLx?+468YdY+gsx5v9xlopN-zq@}1@8N^G(0gpGZpdMm%H7_xPHnq%zcLUeFf?smO
zDH)0NZo)qkcYQf15Y>65<HkxDhGQdTlJyc6XA+*+@1C~EVaE`n%z|ymMy#=M`6bb`
z!&#Av*LR7A`juk%M|&F*(+N#_u%htI5YVk3t3m7Pg5NX2VMCHEKOJK`s23i#q+pqD
z@9y}2vFM~ky-t$RF>;%pZBTjJy)4-%|C3H$?doi-7B7d-u6>_P#!@^mk2rMAZMhly
z?ucGsR3kzRa>OpZw^B#S{D4o7a2O;6F}WK;9!5Gtxurq_xADyK_%!+Ugt_{_PlrrQ
zv`-(9@?}adVrQBi!|x2rHZ_8EGsTt5kz<Wg$DN8lhU$!~t=sS{2A(8@9KPV-?@<f=
zhKFTb!?45a&N;COr%(FHw~Xn1)&GM{v`w`@KS|UO4r4R9V5%SSfamCJUn99_Zlf?8
zD1EsN^hS-Q+uSgraCSD`?p|3K2`^PELkXDERNWBfwE?SqpU^3)rx&x^1xP8iW6t_8
zM@x<<*?X63mLm{@ujC<MSqxnH8F%DH%zA5K`M?A5u_z$x$u4jN+t4|Lh=@=Mgvx?e
z6tc{y_One+P`MwO^P|r4ChA5IbS(}TJLR4pb>ZhKaHn-`!IM+Ai<_`8{k?yW+i(yC
ziu$7f8IUV9t(K*;2+$<2f5XB;SIRIgxQW^^wYYdjtG!=k6ZM%z&0a}OzqR0D1M95k
zoQHf;EOP&&jH1Ft-q+(rX4jWVSS8yTA|a|k9=$$|WAf<vzXPcqpZdPr8LQ&LF}y2D
zrF6L<bLQ-J!zJGbtPTl<eAE6EF>P}jyjYzcTW3~a*rRpd;s;)QjDAKt>~P%Y+Y>I3
zgpy{V{~xKpv;!=RAYE42LD696*aD*?T0(unnvMd6xIQ;!wDIR=v;A~rR7zy(In(7u
z4%rW-$w!f?ym;i9!oU1JgwLmoFPSVx8V4<l0Dq=eKOb@~|4I30cQ&=7t*>4E3+d0k
z2xyn>2rh{k(+sP2iVn}TPU6uKHxQ6_F6nnK=xRdO-ee;lm5+E7{^tM6lG~`VLDipE
zqFmS$!^XgfO(9?Em+162wN7=6Z?c_owccOU+dP*15TV-8uKo!r%*V#<z@zg-JJxj`
zDUYL(dwMEVWWo;J3R(FmvMz*v(QZY}sP=^?5itsWNELOke(-ZBhb5_zLt+@Sa6S7;
zaXJpp`$)Rof;vk(b5RS#<oDH!#J3T{pKZU2I}_r^fJ_0)gu2KbEiN!1^+(x<2+ea9
zS{2$BC!U&_mCXSp3c7F4_+Fh#q&1jrq3umT4OkBpGBtDM#*5Q&!TreV>7A^BPXszv
z|8m9NdyF})0bIW2CDKQx6>s9Q^5SST{zIct1<wpqw^8n*HX$D{<ao0k+nj-f7NI;a
z$czg~ZF>~jM##EWMDswo*XT>qikjXZL`e17paH*F7ZQ)-^h2AOp(T?)uWMl&z%H2d
z`?S&<P30G)FEi89a{)9Sz}(@ps9YL#r{q%WW^J9ozrMzorQI?yv$l&)f{R9{j?R8_
z678I<f`?MF$Iupu#5pWQq|^JWV&xp;KJl43y)Z*IG)V)~N+PxVE@*57l6>9*Ouonp
z5x^FGtn4PC4_C@Pp_t&XK`_-T$7aJoSNxTQ)B~DFA@Mn}vCpui7B=>2d;HndsQr80
zqik`{S<jTy_)LV>*&4RD&*@+7_`<zpsnNLs6xtZI`Ma+qaU_NVk%EO<u|L+$8ueH3
z=41g^wMeu>^(T)h-(z2p1!PqVWQU7hKeKNco70mH8sEZ+P9Gfl>9|ykNugQ44TXXM
z2MjQA;(r0JTVPF*WJ#j+21KewY4uYGl;R6(l5pQvuB@AkD(r_RAOw{(nFF`e3C0FN
zTwXu=`YYl3e&j~Aj09nTlD+O;w!b2OV|MR_L(>)4>YRMLxsoneU4ERm&JH-!H~5|~
zww4{LTRvonwf?w0fJ{GB58IZ|?YQ-G5+yFcs7$M_8^wg0xt41)TReQt^^kY!A9CU=
zKd|e7;qewh4%S1V7WrgBykIx;yLq&R%N>&V+A<KWN|KF$hG)LshBSY&WwUWL07$;a
z;^$zQn#>B3NQ$rdNQ)ay5aPI>tOj&*AULZ)D0TD$?Fbsg&+$2s>m?u&<M5NZ5T~iU
zOg=)^*7rCAanF;e%ae9ch<6t~bQ3P_Lm%`X-kj2>vDSMJUF2mda5=~g-EKi3ka*jN
zO=^3YTwy)r^-#p?)wAe1lw)e<K{)MrIi|@9SMAcrH^I1(>$nmTan0Op&(4uKiruC|
zCyg-KRC<_1(ncp_?rkK&4BZ8>V>8&}$$tLqc*RMXPRC~`m4Ce5I2bjEP+0z1k54t9
z)u$~tJqa0>^j|HOU>E7CbHfV?6hUyxg(i1j{*Vir|G_T9PX&vMIV;pbmTNqx?`_?H
z9a(h@l9ck2uALxV{dKGB?9mDOlNc7ivnO|Q49+nmUECe$vc{HKG1vg4*JeHPqvOzK
z(O=iD>Tc~lq{~%IWbNzTsiWw$_0J0R^P`jnh)Q#|$*S^e0k$bW^siToJ^fkp%w)`B
z26uGiM?d?`mY5t?m-xGcSruO9Cb{F7hS@@1XRm~p!f1g+Nzn)fh@l39>jG%<5puSm
zYz-g4lB8MkJ_;?oH63SGGVAW)mKF)kgWyHaPKlQZN}p2LUStqXYGl@@3`N!<Yll<Q
z`}2*QiOxSAUx9jmGKh-4DLw^`Y%Owgt`9Xt)l~}FT3^~+_6&D=5#t=mm^?tK02ZA*
z5Et|PRV)jYZpm(iBA?T=_Ha?Pfo`VYM?VB6&LuX^v<ml}>{kMcUK&RQZO>!KS*0|p
z-7J)d^H<t5rCgQoR-&r>meBl@LEMG#P|WfIL*wF~wNc)G7HEFh^n@@yKqwvLz6%g)
zI+<;k;T)N1fx!bTP`VO~VyvYJeLFW%BIWR^G^j>VN!eiK+gOb@n`p#D7(wPMWvV5F
z>_Gc56J-6<2iGDaDP)PYMge`$+$}iO{~i;gGN=K8dVGe;`)IbaFlhQsGYR|zk%=A|
z%vSmf%0qT9StdDBEDwA(D)F%FZ2z)o&NLu9^DbeZ<<ZldYqn}mFi#Hej|VMkd^HM*
zV<LNW+KB*J2jh8IapUG^`#5^Qj>OSrtINQ0#ZYRl=<OJTM{&6wq<|gQnfbjmPitF{
zK6v`fV>+rCtUs&};s(9Q?6d>3hB-*)4J`CYi}XZ1shK1^N#$=i-IHL}iiQ@7u#Htq
z<bP(&7AvnWVKA(%i{Dj{#nVpK%nxW8Dy!b;?IELuYwp6yp~>0?k0D8*;DoXy2QV+u
zI$3V*1&d)uGir7A)Te!>nL31Xyfw<UO{1MnjmAN0T-=+m8;3G(<Q#i#%rL@MEI~|K
z0?`Zx0D<r=<yy#jv^@~Lq9MGN2$r%WtiV?pxkAZ&U?3ey-#HcB!;>{q;yR2nCFj<S
zMYNN#Lv7mJ^9Mk2qPa0za26+{;V4VAGi)b61Vq$v%j@_}X!lk?b`)s*^A(>ju@^67
z`}*Pu12~(_wym-MCCDyoLggx{f_4_$I}Ou<Eg1DO;b$C*lL<KNpbHJiHU@Sz*e~;_
z>sD$?uHtnL75ef<@*@3*^wMCCA0OPm)uk01oZUOt$AKN2B>U8-l*BYN(VhVDF=6gf
z1U7FnRw@PgohUwCAQevoMr#M{L-$$%eK1i!W;^xF*$42zi;7LAOTtZ}EO|ecaH%Z?
zJ|hp88TL)%X&VdEw&qTc?8J@0g&bDwQh;Y?3Qq)yyBiu^PT5>!321V#NcsBSR>k1{
zHm|n_b{atqDvhOpXsS-%qkUUN=)&died#CAiM{yZ1DsHsXl@75L8`J>-Wco9$}H+$
zTupSBLJ+)kQf2A~k9^SVNYkP|RKXkMGz`nD)iK3buQ}n?6Wd<J4&FT&3kKx={@>Rv
zJr96fM>s>fWBHJvXV=R+4g7$0d|U{4QT$HD?9cx7U7>bvp&!({wGTyc>lWA3WIyBM
zt*Vv5j*JfKZ`xYPMRFO(#WqHy?^7*-*yG<h%ATs;Wl}~+dAh`!c0ZN6+Q9a}wgd8d
z0)w)&(77JAW;7?04Y#{ar!bNzdw{inTo#^$iC8H=%+;E1P)O0+UzrY}n+{H4bvFmU
z2T?dop?GOOJi&?0U(4|P_PIF>8ASAtmeQq|E*wharsq-_B!*VN+!A<_4fWa~9x5}1
zePBFLg>Jhm`P2vlr2d6rSq37&o-8DGkoJZUx!oa9plSyju%S+#Un?lFJ~4f1*#P>v
z!-d}JV$J5G?tics(fi{*V!IY#3tHWYsUYRZ0xWcG1!^rY4H8grjI0Z=EXjHhZF6FE
z*;WL&rCWb(K|X%K$8cJ|iz1VhT9c=|vUPcP>S5X#RmVv$e@5W{Zw1|ZVjEuM9!%%i
z5AqI6w#g;={J6_xD&>s8wy3HnD^+5i6h4Xq;xq>0A0}gqd>+$D1TOZpd%_U$D~ra@
zp$H*UD-F3>Ts9c(i?_=za}?x|(^0-c$}65s+QCK#vGs%UO+NPyT1$@u(@^}K?dyt(
z0IUJt9Jm9~C|UA5`q8JE{J3Xcj`-$C;=UCx915d%H(6Ezopc{vFz1{Z9LLl2BU<N<
zc|0%^DI$BQPlj5wL;+&7TcJ>}k&=?ENQ)CdNal{`>&f!TC^nMqFqkft+uhnY^myXX
zq$y_L<z<)W%)GWvzqMev)_ZUqVH#|+u!rJw5+sh}@O+&D3UG+E?Gg0nQLM9L7)Y5Y
z#>r)XHQ$8DYoYV&^gh(cAcd6v@lvq4i~NV95rvLt2>%P4JFB!sHr{9W#8*`@u2QM8
zfx>qY%lz;~xad3hCI9-Yd;*T>$PEv*69^Ga2BGjsJBFD67#IDK<fm<c4`_!~MD@SA
zbj0R$ghHl>K&tK~h;|E1+$32nb#%+IzdX-5>S1!83Ynv4bYk--@q-bNLpV!HyJdqw
zo_S=236;1E5b~R}XxcuJ*#?_l(&KGE{p0+{jva_GX(bc3UQc<+AUD6cgc8ogf<uX*
zN$A_%aPK!?whZuIH}Pd%1h%{E`c#FpxcevA#+%A!mWp^U16fZ8uGEVjGRPN&H|fC4
zc>iCA%n<Q++WVu}{f};(4t$#iBwiE{9%_;c2dRalp=T4w^5u|&h=)nQ))XyD3j!-c
zQ7_*5V%0s0EJiMSb}Nwj9WLJ=sAWY-jVwEOt-pyS0}AE(^ng9Azj6%)PW_cD;N0X#
zQMTwR1gjme#V3Fu`g%YanOCc+=DICJQH?r)90XCM64tq-Z^v!d-D}0g{AWCcoQpkM
zHJl;{Nb>ZTvz#8L@gEcNVeuE2iK|zo&L5XWG8P*STb^ggOyghfzAD^7-zicOqKskM
zgel^fED!C^HzTEL4}z((<&_+UIxh2L%f{8?SQeb;>g3`?5qT!LISn*kAp$JN<l(Hz
z1FOA_A}!q%jRTQ#4-f6DX+IiGPQK%k$obYdFu&JzD>sKH{8}(MY2R#Jhz38w*vqA;
zJtF#JE-HHw{b^~?{*0{G-CoX!OKA@61CD*{@5+-chkAeC^1qb}1A$O@C6H|SAlPT|
zv+YFr5(xHyp1fuaB3XLkt8?x+;{t8x#5bNI`+PBXN(@0GSXG89Z<%bLRwmE>)jXp_
zj2Mf9_271qIP*slmuGYQ6t!Nv^7JL{9Ju*aVHi~e{ZF(^Yu{Nt=+*75JB>0RK+~Tz
zjPp()hg6_1MKj0H+%EiQf3D}kJ5>CoeG>kv_os&Y0_h2G0qG6w;S+9_tj4!RFYx$%
zqcSjT8lExjg+aZrdXEww!ob2$05qxdZePrzRa#!Fm>gc@?@J1t9YB2cnn0WA#8Gq%
zbkbtbK?Q!iTk3Eu{~93DLInka@#@;DLJb~(vBK?<3XqEjc^!vM`rJ$v3XfH$v39#i
z0ARs?@s?;&;Cu_S;23Bl67UMM4NAU<{xr*}>2ssUU{jKw`uk@^ddlIQbc=xi&JWgo
zin*&=2+pMZhO*4n-I!VJC%~A60V631%vWzFw=`0hl9cvSa09Oy?BDoIJ)QYTdJ)D4
z_4SV9&nFf6#k|QtE|aDm^s;4ag?#EWwwuOV_nr*0<Xq^CwLIh|GXRjV3Laj6mzF+i
zDieh8g%cX}pguq?OGEraP0=)Mi+GigkC+i41*?0j=+d__s7JUs>1i@X`S}0@V?In*
zy08$Ve5d40g5jCk{o}8{NKN2`O9&T68GAtN-S|)}zl)Hf`<BbmQ#i|eW8Xny9hP%y
zNYqcB5$0eY+72ct+rq~Wi9ZsWsK|7MTjj|UFhIRSA82hW{YhovYDK|^Pw0Ifjdc_6
z=;Y<2Al;<#<QH71hn;4&HK^b790qLe6v~{S0V=srZs((4Vgp--j|v6`!kP0vKn~Yv
zHm4FN&_3gK9XRssMb0P`?dD~gamni0T=C#-Fa}?BeqqTTJ$dOIP~*wp5m|2B1Sh5V
z5{+m?yr6{GI~kxd46|>m9-|01Bs~-x`I5YI6}e{E@2OJ<TzHS4y)(Qv6@#wWIABM2
zIS5Yh0~59e^IW1Q1@g9>kdduI<gN-2eN_dNa6L{ExihfpxZPmbvd6d?A41nJ0eD@d
z%6z!RG|2a2?JSdX1WG0Am_7oZ(I{Dq4<A>y2s`U5(86=+gW{zYB@};S&XS}IW!B7h
zSKA=37FrZCHhJ0^JfxUupkPwxRzj7RawPJ-@qiMQ*utR-h#+cX2RGJItMu_ZHdZz`
z_p&UoSi76!@QMETr`L^ljk-QIloZ7P3YrdFI}dikn}X*VooBniAi!)Zl~~&dCMfL|
zM?J0UO44w4hhm|9W@Ue8S(*?us)xwxYr&z5bgo;RAUpW;)!QBXYbINCYh8&-7=)>V
zStCD=9g|D?>_16deWY|Vcu=B+bl5V%AQ&a_ba1&IFAR|g)Q+~tV7BQlk71Fa)<1e6
zq^pLsMzaZ8TvOk%vQyEY9L$-ScO5%iP^K?An@H<jo_!#<7lI<P7%%!si%4sxEKxo)
zP1%z}rum`<>43Me)9!)`VzO^DL4`mvaN7~r>ZgOY4c7H#HK7f<X?vE;`BU#*Ym}>w
z+>mfwb1O|xB2G<xAZZWSF9>Fv+FLu~2s9P$De^wY%EiM-KptV`>}v$=q{>XR$>Htk
zs?p?IwHWz5k7C213FpOW&A+=<z!#(I5<D~YPJ+i=qxJw_52extUq=f>yCE*6`|yS#
zbX1@2y-|q5clkC;LMOR}RWS$dwrU%HCs+i*G|!9hA(=Q6XGUJ&R(G)27&*0<51I~7
z6=v$bg*s87?D5~9I0g_kyRz#;Q-<m6)8Q-)x$E#ds6XUBfZr2Vai#&0dSin1{P4iG
z0GRSzYrt0;JQo*&TSfR3Kj6ZEW#nSuv$gIn95Ek?X%wfgW;-*~YTmMY^rpkrlAs(6
zD5W6*Tc@$|p5aAS(V$1$CNy~?X=t2|9o%WngvobN<f(ZH5%fPS7@HhdJtSzA@1JJ=
zOnlQo$If6ch!jAog*hr%cq=^%?80iC;*>a-!Fx7!I0A*DIc59@q3Y>x2UV{pD7Y+5
z^dp=WXu?KtEnt6k$H=UtzzZ>S+VRRPuW@gbzl<*e`X>U<p-8%Ji!Gk8)7kOx64p;}
zq8h3`z-0R`z?H5~|GxY(2z~I$hR9NOA}}818Th)uzG!BLXB77aS>BUF^W|_slphJv
zB!}`el(?v+7wv4}8ica*z*+w=;T@|dD&+L7E*VV0D`*ZKczGczQMIZK6<b^aIxB1M
z=xHW+kM^g??Fa6_EToKJ|4zw)Vc{ecb}{a}p8}bBu8-PzTpCLjIJT>mHd!qinp!3g
zu_edBb_bw#k@DkZ!Szl*n7%)wFoz*r0fIGR1@<0L7T>gh1xgLDVR>cPD$QcUVm4*V
z#u=y8=p};ej{hwHBhnHKqs3CG1yBet+?t|udG;ZHS}t<+N+r>V8pHnj2CbeUL$YG8
zvmbZPCza#~B$RVZy-;tqkQY0u@L~uWGJbo%s<Cc#P8(=|5O7l0NQ}XyE+>A_^A!m2
zz!a}cIvYM%iqXXd=6GrBm|UPKv2pNp(*vF&gUF>&v^_0RF7mXE6l1>&6uP4I&}Caj
zLZ;icNiqu|j~_YCATtpT5r-rUutWs)r=V5gq#>|0oCzoJNh!XpWPb|O=Pnnl24Fa`
zl5LERDQDdxgrEwF*djq{AkJ|4CALVolhTcBIoWkjmzA{f)_Qju5Jl7ht|-a?y!{0Z
zTa;Aei5x*uS<!=-#ZMyxN1%3QfA<(YCCM@I)6PTt27u!m0nn1aP|%_Nhn0p_N796h
zS^$;^e1)4Mp-8Cr^wM+NbbeA224hB%&BmOT>93|=P4ufLDWaDr3Rpp7uDeC9oE*Ey
zhDfXQ_&vNcZ@?N|vh1Mx?MKI?e(RhT3}NdPpe6UaZBt_<6JA5-I^<~nEl7xrcK{by
z&Ou{h&TN!qb8k4I!_<lETwqAR+3=ix1}fdAfjlH(ovY=>5Ofto-3oK23suN6f+4PE
zTHX!jX{<~^L;E(khShIuPJ{+|v%R}hzT2^Hh65vImtzKadW0KdE_@&T;P4QO3j*xa
zL4$ezfX(1zL*T?D^zHqJlL7Mckesb1gKr|Xk%2PO=Uf_OlY_;dcP`Eyvn48BS7X0N
zY54ECl@3gC7BERKFB|hsaU2*KqJ$Sxb$p{{^R7u4n#-u+YOwL=ja*xXmAOUmc9IGC
zSc4XJY^Z(Ht@ET|trR*Wu`E6ZUB@gwMb3RvkLL}zsT~pBT;znrYb1HdDY2KdLqHxs
z7uYehtniE`sbf<js;-rf-ZglY2|uaamkY<jWusl}d=!Pn#3g2q(39}Z1_mXNSsU`|
z&$yGmFUMnnH_$cJfk|(CG39qa?J!mzOH9fj7KEE}O<R~^JTSWKa;I{?g&vHdd4Mzg
zjrkIRy_`!Q9K@Og-+pT1*7w}}_?6(?>_PxVfb2&eZ854#xNn#Cr4_y}S8PjnVOyBn
zk=#%LC6K(;5KC9K4&)5s`+TC?_=4=-FOB8$%rk#-CSweuA^J&5e)un3Pl&iitZXzv
z08dfPTR)%|ymK+<@nA7~!sq})h<o9)Xy+HCXW}ZKZ@5U1G_>>jQuTE9>y-PbZFHxa
zs{yc%%4}cj0cTERlKr7=$3O;$OI?}16ik#OTgea5b2Z%?6@`i~0U&ZUr+<Brw_Zj+
zBl|-ywtYlCmWkYxD)dIW3h%RTHfBo8&_Mkc78H8D-_b_%u#|G;5If!x+E7e)LT862
z)B?KC2v9P?zr!0K+u3Bc+E!Mcx|Bu03v4EUAwtqYlTqOW-)F9t())|KUQ;?C{pM8$
zyJLVKXYfLouT2;QE}ZnO!-syveBxG$vA2Vkhotxv>ROI1VorGXwP-CZ4D%|%&>!`H
z`vgBUgP4tYaC;rtl%b(5J@7RMTOVZg^MG|^L^y#j_r9i?ArnH7s=>bu!9(}oStBLA
z$eAWj^RH@6tHYs4bKg)dDz-a(723Afx^p(u86b>3SRT66Ubr<cagmhmO<~b1V12;|
z+M~i$ngs^YNg4GjHSI3pBQNX>Z*psh(JzjMwqnF*z_U*o9JwnmtYM<`55WnL?(eN*
zl7HFomu<29pn_)HW3~!q{<NSj5@Nqw`X}CQ63c0O^2L(EKDsK9#-hqs*$_xFn6_T>
zDpxy3EESC%_#9&3FDmYlqco}5(KJq10|$oE#S20N+}0PSjv1VQ%PwZ4tit6V`P&a^
z8dbHu&VZz_+yD)3h03&BjblcwPfuv_<cb-wI&JC9ni!c#8)XJVcF{<)EFlFSQ~kQl
z<NT&#Jxxi@Qm98DW96fX#NfUZSo$6tb=mH6!#Y2-b=+HA20(YR>Jx?8Jw~{{(n*Qk
zP3I7+Y!-=zNcC-%I6Zoe;!}hTyJW32GrU8|n#-H~91-+tBV!F|B0oPifM;Kf#P#_c
zP`4#^5a++hMEygD9<GJE5Ie4LP9pRem1C`7iT9kQ_&Sy^vUTFY<2RLLQ{;+ZK_IQ@
zfJcE{;!2sA27B!C09!vInlE@L)-amJF}gdpF>PgVwM$s=2Ec;5<>*;-MjkQGbpy5=
zrJ7PwB|*xk32)%OZI=C)V|<N)bIkYXq7g~@z(hKKmtJyxTm!YQlepi~Ja(L#F)bm)
z6EjEL5np5O=Mo3T9nr+89=mGfLA!0S5@*-FFvb9=l#nd3{8$TPoMO?LR3EF#Pp+_|
zc^vyk)rH+2JjjIH&hx2bTVep=PbR=OA+Z`h83>^|Ax2#Pe8R45`r;D>(e(qXYm?t{
zQtOLz*S*)<GR5y(k8Jg^l~^8pS9`(`#0cN3{bq3c1H<wPZ#196e}=Bpf|eU^z*%5C
z&vDS;U8+1%mAdHdQq>UtXB6eAOOkF<ApjR`V^<uhf3%G{Z{b6_(O)j#D0edLO_vZm
z@hhGE+?{!E--(6v)({&AW;I-W)R?)XYOuMMUAk;Owemjw!2Qhq25~%S)e!mS=2P6c
zTuO}i{7P*icQoUV+e~<s;ew~;c<T<fM8ki6b<e6-{>*ZuQdJXx!X{0-#$;|0DWVY7
z;GvsuOvL;gM3BgJDXS|G9ph|KVX}&G<H&mg`h(jFnR?Lv2;}_0a4B#h=ed2kj;R2v
zdPqqdp(#Z4N3eX)YZgp3Ow@@(F^m|1L&Dc*jo>+Fb~|uG>uF>#Q+?469mlMrB_eT>
zJL-{=bPl<)OY6-X6>4(7h2|paZ2OX9BPZT#X%AH(pLk|NU97B%g{Ma4Hgo^yYcOZm
z-(Vm9|AviO*%+1gOKOZy3(lD(3tHnuZ7llk6%|EZ<qya3N<<pKiDA9Q(xu|~4KY`;
z(?^1zviy@YeE@=1Ly~6KOgqu-rye{8NLjo%BTBG_Wt)BFhG3SYkE%bJ&-z7P(j;}p
zH9EUY!EH7jK5mW4{6yWa2YWI+2nXjB;AQq8;zO<v<laXAHe3-#gldfaXVMo)FW~2b
z7Km(8!7PY&X(s6G+gQj~|DbGBDvOvu$=h6ns6pAAT}MXxkxCa`WZdo_Jb-)YGl}e_
z@Y&+on>0NHOud`AXXFXKif+1%ulU_jpmTg3?Jj!(G{;e{=uF?I9A0%vc}SpB)(M`M
z^rrhR<&GxTF}v_P=PM3I!`f25O7J!p?Sk%{U;7q^wA5_yKCLw^O0jErTuloQRxEL@
z9m;R^T3&H00Yy%-^E$}!ZjCXx5O34WrIShpzK&<ISgdtF1wf^M4Tx&~{(?;>3nr78
z1QEVCBS5Q=tOHn&|8{z=oHO<QcsOr7TL}!JZF$xR@NMFVLm{hlh8Ki^;Sk&XjPNI%
z#={@dYt0dG?r(UK0lOC4a0OqeLTDCn6I$jZ9T)o+seg9Sj-d#FcEV4TL;zjTAM{#v
zfgc7sG5p*BDZw!}L1}f*`bx~g5MoEh@cqYFbJwTs%v;{gYri2nSiq73(Zl7Ly`twL
zQ`3S2ER_;NWG=G^6|Yd2bp4z9@lKeM%_laVRguHb{-6?M;uyPJBK$QLe?5*#X(kDl
zs*2N0or_&+9269#Fx45XnZsNob)<E;VgVI<-Ur&z_GU|EB<DT$yjibTESuhwLDsLV
zuizdV9n80e%0{dqZCF9Ejh~P-&3147h+8FVp#Bx(<X{+J*2dfmCHVBVy9D2Z3-g?E
zP=YuNE@u&!mvHSuw$8&%^_<W{MI@=+f?KOyZqemVm{Wui^gM=*&Fst(f*?r9=%5f=
zUzft9A{~QJ)7ta)1jaCs>kz67tqpi;Ixl2b^F>uYF`Ol6k)HcP+=`b=XKx6{{-{Dc
zaHsA@ypMExBsG%NA$30q%b{y90^Mb{$&`N2hk~n_{f}gGl94AC`c|Y+a&nFN;&`Cz
z2X2;&FvgdUnnoe^|Iv5RwkEB>m<P=Q9;o?b_-ya0&}IwvGfJ;ZEAZ1oua9X3`%BrM
zVk*{O*5n{u)Gm#i-MI<u?=-Q5PPmYDLZt!>HTKVbS42)1=<x2csi}E}(HohjdV}al
zV6Wn5f7t8%tsoCu(n0+NN6*hhq9_@9ZqNn#2btUuvu&!wt08xkTw+4Kf4)c`e1{TE
z)qV%43Tc>rR+GRd$7Va~_`BEaZcGur_<X(#J6QC}^8FOeYPdKegJ-{yi8JQ!Yk7S8
zqC@ovA|@*5CsG)<zu}+k^IThap3s|kp!|%#!S$V?cc}Y6K*}mTSJRYd=!0De+s~U~
zyj^R4-%bU+gr78Y$)Uh#lde8MVAaSO6FNKdx6`ft&QYEy_Ehvw67<mje&COw+^FuE
z5Y37%I4DwuxAsWO@^ojsJ_P^G>?uB?rNwHfPC1S+Q(_P9cQP^x@emxAqH<TsQ-Jlv
ziZG(WL=5>mM}=tcVALD!#0MqwxX+(?cU=p@w#t;~YA*WO!2!J)INq*04oRTqgS1{H
z(z!T5@<JJ3ywQJJxVkG}wLBt|>C^q0#;mu+j=l%YZF`N7(nmsqE&aE+Kqnfor}z5)
zt2bD!S7$IT(|j&F<8YiNM_A;Su*F_|Qy;7|6cL|~`+mZz*Xgs4wL#>qN~NqGzrxdq
z^!zY%VE6>i2N_M&H}OEFHEN=>%uAT|Pgluy^^R9504Nw*sC`8Xn1!3Ap~j@6nvg*a
zER_`Xy;N%fIBwyew#Q!K0a^<+X!{r19c%T<RVoSxz>?8ZauKu#{+Chy>yB`TFa_9e
z&Y+{N??v$mz=J)qgT5aF%~h5y3jEmVeE*XedXYavoc1SfAnD>A2aLLdEG`Gsw@Uig
z)S0pO@Zd!%B}F#2)}*WEva#7vMpk&?wK25B%8Yw_b7tk}ctwRHh+Wl(?=6=n85V*D
z>#uxO#hpVj^f|)q&J#lpPqQr@=SiuZq4(2;Fi6t;zE`c=urB=3jl6JF`dQCjOp(r0
zDz{*b$fq`M%bRKqc?xPsT|HrXrn0NGu+S2=9l{&_e2m)5nv)bOTDZK6Qk?Q`MdLWA
zn!pqLJ#_h}e(JX-Hbf8kIkx$oz9e6^`JW@Bk!WdqufcHMEdpUQcDgNbTcguQ@N@{x
z+Xli;mmILx0caZ3OThMjs3J81Pjl4DeHegiFkDO%Va|I|xwfARqJKl$=+DkD)#uz@
zi(DLb9(j8nm9#VRGnZXStwux%#d|I&@g(pq1@BhZwRqq9=moA&K;@|9-a$-xw$oPF
zTakxpNg2KMF<%wgzb8XuL#VxJiE&-3Fok%dJX)C(sCQOgX<e4JjE9L*4m8D7u1<y(
z#Z$W(&Pm2}QSiEbiU3>YUNLgwB12V=l$TGnZEg;RXxuTu(UXnarV&*uKc2o6>9%vi
z4;_NC?Nd+a@$2N>nkcMovNd}<<xkf!)0Nh^U1+FM9wmH!9a0hDDj{a+Y7RFwPIYsp
zTuJu1cZaM-2^q&gI;k3<Pcg_+u2U$dRx_!o0_w)eM86cmY(9z;5*1cNd`Qb&q%9xp
zj-a_=s9rBbf4EbB7B>FD@<k?IA4i&u1ywDPct;+kQVe~IhK@-C;DQ=qxu?Ips{Lvd
zfZl9U4T~N;Z}WtjrbAy-@$CNb8ZrK6F+#!c+;cthan7P{P@)HU1I&Q{UJY70zr_m)
z(9kSoU$C-m^}R>?(hsJ94p{EGYj5bFMH*O}N$8xvNVpO<Qa*nO=$m52)Ggt@=R%6Z
zPI!S}b>48LZwkQuJg_yJu7Nv%CJR|tkwdHlVQi!5!accvkrAnVH0pbCS+CvZEpAqf
zf40w2tC#Q+FME$RreA{mJ%_U!IOST?AYTU_WQ{WCQ5xjH9wDIWMAEyP<h|y$c2K={
zRrPM&Pe8cdMD&&!oaKc2>t>r|QW7bMBS5?bhjrNqt9n}_4NEqYM^aPqO}psxFRl3Z
zPDnYFhgf+saX}pztVTj!4*JM$FsQ10;3p>yfAS^lJDx7=LREH^rE&;2z%Nu;qXpXT
z927iF4$E*_XK!Uh7#a>C3x6AV06kENzgDy5C<GVr5BB0eFaq5#MSIhR6~ch8+S4|8
z5%<=$AB^jDj7R^By_en0&oAVJq6h|7Vw^VU6uUSm^%PVR>_4cdi2<Ao+5S^jWSL;7
zNbWAR_+eJiDvLdgU4F#S+x|(Ut4h0YKfL12{E=~PJ$vIoR`9}@>hG}~uO*&Un}OIL
zw>ovv26d3IHDN4XZVzwRSHwz(A6AYOIllq$l+;{(`HQfnDnfPBNr;g0+9{Hg6&=rR
zo7upx2*sHnlG<Nr3#{Ah8?)K>o5*+*yUH#W`QKw(%(UJ)q4}@ONUJL4z`E}n@<quw
zYpy*%v(r}}%H0o=l~FLxS6E}3A}8>*Ni<s<AVJw??2QJn-=*d9sVvZ4=tJmNP^_tJ
ze~~Kc?R~~!37r(ff@N0L%rE#ys1=B?E#GZIGr}EwYF~sHcQS)d6F#(aM#k5-GsJS2
zRPa*h?`=6SBT+<oq8#AbhgZlLNxB~}3U;c40ajla^HG~J(2`pwrqsU#oLhaL!=N}k
z8pUXERW!7tNL?@JKW*(RE};SRak)65Pw`Je&&Ar?HDPnuf1g6e+|hfc>bVoZmhM^~
z0jd}#c4fm0u1n@;$J&n|BEhUz+nlvktluKMk54;8of3WSw0R{Oi@ykU?xJoe@$e<~
zf2pojK34h;cwW@#(o{?wGC>_J!t~PDknxFN0f!l{7|25GM{MAJEd%4wQ7!zLEyQ-=
z^e4P%yD_}zz&Qvd-*}Ym(7R^Tq6x&qU&?|pj3WZ**+Tey8)LU>+|F=!-0Zj^K5!E)
zyh@`PV1Q$`h-xH#HOdWw?RuisKV<@ryiwO$i#*&3$qmD5D;y?CoBf9@M))YdXNFS+
zzl%(JBsAyba$E~OezM-|XVsM3_!qM?+G-kgaKyA;qr(X<BL}EK_k(0vI4Q2T)5t2g
zh84Hcv+Ljnu0Vh%+0R_Iou!0Qes@_Fgc$FpgIfG~2<n2(2A5^o>x2Ge6OtT$7g4AG
z=qP8xuV(YHLpyt!Q;DwGwDufPUU5z8m4F8xFLtfVKjg0Fp`8gHK5b74Tc1bkj4fVZ
zB&i}M7pj*SeADF<@awQUlBgGhMXGW-z6m);2SnSkwr{&2il`@>S5mTWg2)}d4~-%^
z#FEMpaS{>_ru%nuEMRNY9wpM$Csz1TQj9F_{;D&CgD9FORYFNh)XnCBUYxQW6iE$h
zG?dOsq`=2gW7)gI(?uA%j`8c^B^N;cg-!#&ifyz9<P2iB+p_jD<Mr-LNo;gLIt(ta
zz_rI@Q1AV@N|t6sA$Vm^QZ3Z|aPa_#${i&;cK+<h?jTEMv>s_nnofBQps{sGApytr
z-qT+G-(6A2j6ObeZ-p`*?BC2!dKYGEB2<4SNB^{lA!Gv&l>*0_h~uO2Mdr3gjKnP5
z4np7MoukzuuAU2R!rE4TNEHk9#P9iDm4_jD<@g9n0)#0w?2Rh8{DO!lpL-}CkjKs~
zwP@^@;W$&dGkYSfR9989pb#V2ETw@;l3pQ{7$-O%G!;?`#gg<*0ueopH`y1Ny^=3D
z{1>9U_*I!`x8&scy{LZ|s0HIB&JVp_Xo)5z`>a2%$`S+&-Dv9!0^|ns9|uK5LoE8i
zRvDl&de~d(-0tjpf@{)%!m#7i>I~3YA`<9j)!GZ{g6Xr?LqQl9-_o-N_A`jWdZ&9|
zq{Od^De){g-WUW7a{V|YjH4<rO?>0{OJ!e^m7IshZRu)`G79Z_S>c}KrJyZ$e)OSz
z7Q|m3OaHdJm+d)6I&1Teek>-eJ0H@OJPsfFsV+lP#@Tl}G}c1@9Gj+-sutla1(4}+
z1<yEjsK;rjpKW073u;&TgF`A58Y(u~fVawLh1U3zMIVX|l5gXieVayi`=oB*l-Cnv
zBn;-G)(ba@itYKl|K!-Pc}YVb-17ShcjNXrTFUg3e#iQchwqAd6mZkIE%Ik^9#Aui
zz*684AcSWeSBxnVW$O3fmBKGyT54hlXOghlw}mP1Y%5st>R$no$NnkQ{n&<}<gEVO
zQ8|}l5*_}ma{%m;!r8=lbkoPOn~*HUg1Xa4Vqg{*f()G#zq4AEF(sW>c$a?im6Zx(
z$cp3}Kx`dO_^fF<Y}r2<?(>vXx{w=Cqz>>k{oTABADmJjdiWo;#BBof7gl%_fCSEU
zD#P`hrRdy7bS1<@+7(?4rIRp}V=!?x;XM&<UWl|kc92k^5|F2r5Y;gPD*GOm!w~*I
z_i#Q8$f*yxE_6n25>g|6*2Wsmw)ERAN_zGHdH(Zu({$OyDpM579rV?O?^RPR6mVB+
zAS^XD$5AI!C1uvN8-1^g=a;!0Z(pQ$%tmNE4cg=Rarn6QI=4MSjctCroU3n7wYa3T
zHj*HO?>8YFu10F+6tM|)n)NXDPliusbcXAm5GrFoTj+T-plp^c-`~B=DR{3u{L%!3
z5WBE1u!vdy*?KLerua~GQyhd058X;V#3={jHj=(vCu;TL{M3C&`Mml`cB68&CskgC
z)1D3Q(H<i`zC)~w(oq;onllDPzUfr;$wnQGF`U_5%L=4nnJ1T7(DCeb#Jh}mceB^i
z9UPO(Qg(|>xEwOIwAk~;o<-szA}9Av8;&q-;MZym<q->)oHic>9^A4z&;#_<Fv$#J
zg)>zZl88}|ZbuTgAk=4tSsVfHl_Y-D5)Q4ScE5vKuVuz>>4fWDZf=+3@CA-kIUVD!
z3!z>T%c}+@qvBj|sPNP5P-=+59|tLma75<&Mi8RcyeOD`ELG=`KIAo*N<lfkozWp(
zGXG*v=QAir9l)nUpX|O4m;}OYhK0C3jJus2Nr!NefZU=|#1DvqbygBEoWHXhIRI^4
z1HnN&U_RA7RB<n-^AA5)tw1L^Z`b@y<-wNda3w0U?SB(K`;AA5MNU`10OD5|E$h$&
zVYXnvsk+d~J<h!eFik`0`I_DW-1lJ2#LW~Tfn98XQ45J*C$-Hm(aW5+4YlaHSp!M#
zbAi{j#_#!+$M910teo%+Z#f#QExX3Ig~*l9ohmn+un7)}au<12k2H*Ft82jJ+DK%K
z6BHQB)K1O$k~Wh1j1$nRXEr2?!<r$&G!Qso>laK#?|8>87h#lRU|c+36>?PDrG-|d
zuS4cB7WJJG-+WorS?>?ft3Q;cY+{Sm^qwNSvSI9N=j}}TE@6q~^9Q+ym4rp+<qQPQ
zVnm<8>Z>A~;w=4VN7=(KB+^6uFlW9CCm4Kq1N-X&gDvX17ANciGB?ezx^7f3e*V!X
zJl<lf8BP!`^2<GG+c+l%%JJ8&OL08PeRlk?NTqd1Fw>Ar!(=BKA&V}cZ8R}?dm%a_
zQ?`b$#d`ASf<E5vkXEJ-)Fs^P;#8UVyi6Hhs4c_B=6X_V*sv}h$N!!=W`Y3+Eowd>
z2ZA9q#g5O*S8?i;UZN4pS0TqgU7oW#=ENKoM3No#UL)ohYa`8cjxQS$bhVlanR)3m
zMI^~YbkE_y97tpn|0bWb;gAuEI!@^q>tTv*?C5`}2S3ToLQ6$fT}kWc1iOdpCYPp`
zYlYvECYG#$$+UdyL?*_XK=BU=R|yJ8E%Pw<&HHopRVfsrwQhg2zYq>MZuj={UkMnl
z+I)P2&YLVm<83E`aA~%8wn_A>vZEJ*-Y`Re&$@E-!S;H?&-OhH<s{T=xi*SWakr;;
z!*1J7m1^{uUHU)1yL)2MyEwES(B26?Z?ptZA3pe~jHYdB9*3Q2>K!gN$Euf5c3M}*
zY!!OnX<eu1@be7*4Wp+{7x?2XZ~n|d{t^Ur-f7O|K{fSI+yWjNs1c$wyJKF{TC~(h
z{dR9R>&B}p^n_@&eZ-25*dwRPljU;0M*sX#p5}qE(dJ@YMJc^LK`0(O83FTfJen(P
z#G523<EBARf?5fJY5kZ~m|(L#0p`2ORK9w!^2>_MKtFmBFP516f5|1yQnD>(`~`W~
zeN<xG&rFY<7Th(TN#6iA?HHl~4o%-~I3uEv*K?e#qgc)s#6GTD>Y5xd3USA=uCC1<
zzY1+$<#3sK(;+dn=qm>mYj)dT;w}=AIEgW<-jJ_r{s@s$uq!|j#@yO0iPW4=A)(%w
z;OqtDwt52sO<p!S{r^7O63R0}6dYYcRgx~PYt>;x2GsI4XE&N{P*QlZW;5?SXBn7I
zp3u7q_g6_AlV9}w@On~IgMhKN9$C^L2OoGBgaHjEPeiyHrG1FPNM_9+m_>Y4=Whcp
zo*xw6pUkje-2VqORVNTUyAR2*pmQK{55oF%`xivBsYc-}5e})MB$ZBd0xt<gtZ{N7
zA}suh8k$Kt`iB&+lU0t!0|5s~J^inm|2oO?@jW-Cx@}p)p_RXN???p<&%x(uQY&3q
zQQKJ<DK9;>t9EIwXuypuh!BWLNO|(#UpT!o$1>?vzN=Bx68vR;59CyQg$gvwx`1sb
zQ>+#QE~aF)(NDsrnAT(jIRe8Un4Yx&F6~|BO3N}#TbkEd_+WK-y3WiT315)fF`|tA
z(G9SjnZrP}Vr;mL#(js+Q9@)G`Z?$jz<*~pDlq=!4kn|nEU_J!wSPzPW7@TTCIUlu
zm6j-qblc$Zb&TrI!|w*kCre6Jhp*Tk0+=;>?@p&>ies<ckWzx{=x{wVfs9CbwhoY)
zTRPD7WGMidV9-0~1yFx{GeYZdc51%ibjGX+mK9JL<Xx~Dy={Me0$^MqWo{id5DPO0
zkq;9}$YEt7Jo}fy*JSy)hg!)Lo)n+K*X)J9SyLh2`0@(+aInC}*jX^p{Rv4#$w|^u
z2d;vTJmc(t;y5UC?R_O8w{0J6iu5VX&ytR5_@EooY?PA^zd9O+@7qbrsXb-<S7G9W
ztn|O8kK2~~Cz_A9JZZxBDfQ`<vH<Uf2q1}CaNT4xf4{mhp2;QzkeTJF0Nc*wa_24E
z%}T#PH(bh>VK74Hz=i!WSx5^P(Io4c2+@$2vwiPt7IKi*br5kZ|M>3Jc7f}cT8V+2
z!%U=r5f={%hYKH?S8UhZf=ca)5GM(f7+NEju;v5*+xiUCrEc)?#?Z%%7eHKUv@!0A
zmo0g4&r`WQtU;Z&N>iPZ<z~oC*BBYzVd46b_9U&8J2+`OjZ1a$7o};KX=)w65f*DP
z3oL$F(wfwvu3E-+=Py%f2FGPdnU-Yvm3qheLSl}lDNBXrTO-%ZbzZJ?+}T}Sh5!Jr
zUHG5`YoLbe$j?Wn>C}vYi#`>I)z%a>+9{Bxrlv!&eoH!s3}gh|Mi<3iNlV26O;1VG
zR>l4*T~H0rhU+4V+Eypxyv-`MxBPIW#bk=ZSD5%g(sXz=_>#Tz@naBM`{oXE8K}nf
z!J54zsKl+fMoH330uR2fd2oiEtvYk<H{`q1E;+feaq#+}QN31(wn7n2I3y^2?|G}(
zP>n(uPD3j6Q+py>tcCi%LUpiOM0Y1Lix4Ztqm#;U9&%x^olQ<ysIm8vik&F!u{$jH
zP-JqlS7+~bmEYXWcO&3J{nw5fs3PtjhGaC_Byjp3?fxG$p4yHE%Pn!*N^)FsCr-3<
zZV_h^nm{;zM!fiC7dW>~7)^gUa4ngWDhF!0X?R_|^tz$Z1&{%!L$K9oRMZs*ndRom
zm~0#?OcD@wg26f30XDbF{py>jiTN#}&|u<|!NpX2(wt)>A!&6o49a9rea(T3gdrd<
zx~TkOWncSJ-xH$I_ycUZ3VO{30S-&MV?hq8TX+(`uryIBueiyO!H2+a7gaWry5EYB
z1vmONNZzt@TdfA1l@_}`pTG_ngAn4`-^_5~s41s^Iz4&Jt!uZNi8w*|Qo9wU-@N_`
zhyHTB;dC5+pgHW#i}0reoJ)5|t=YUzd?108L930e=C#Il6cTOAaaM=*)N!;L4kAVX
zvh?I(QoG7LAZ)1+$t+Gv>_EPgnIg(5!(;=3ve%borbZhTCz;bbgIs9J<tE9r^arh7
zQlBzHv20$<UVb1mVb9(D<MGtawKZY*JpC5NqzBA`2=UfC@_+Ov^uJ!TbeX(AT@PyH
zl}7XY9g^9F2<tgGq2b({geEVUIz@p`3Qp?etGu9GP~<JR6HtGPC@ByXV9h&?TpO;M
z8|c7j0TU4H@3CXEaboQD)qmKw-qqoKNRCHbDLm^vEblPwMGTD?(AV(n1A-9G#E0PV
z`fVy1i)B-!J4SWPQqE?-z?~z84}`d6HV{Da*OnbQWDvDZ*8qC)p>FM>ub@YTnlN+~
z2mpnoHPQg<2Kv-+STLUSpFW}xHyXA?7I;~QW3uC+=da|%RCXcmshp~xWhAlsd8+l}
zk$egCt|08nIl_YqBjChw8RMrX0pU#OEBQz5r|KZ8iV&@u8oDmC4>5=wxg4m4cj1en
z)6fq@8S+*?Bfb$cf440gTpVH<tIe$6CoyTS<E@OGCshJ~awt;>z5R3x1F=3uKRDDg
z5hj4$Rdo9&>rI}lmnWN?hc4ck>Arz}4C1dmhmBn>rd)&Uqy>SQ7B_kcV+|IYcfUd0
zeV`Va5IGLq@=9NJI|~)vlDJJqZdTuzHC>9@xL_Gt9Bfx=Iv#)iT{t@-fF_b2PT%J{
zddJ+Oz%(kF>#P-}YT$n)DYZ%&JQ;9U%(dZT;qe;#Pc(;}2T(fpjJb;VQ?qq|iLWF^
z8L|UYnGRxDW)@h2(=4YHJ{aY<GHL~C)&+C-dZQW!{7nVG^5Zmv9uzGeX>{-NTw5No
zNOn}m&i6Mvt&1KU;ZwqR+ChkQRQNyQ28d}a^rus~P~@c*;hAT-v+zf<g(}3wx{K0V
zm}TyOjNh~H5}ILekMZ^_x9-n~<HTM_3Kzyjy9y3(b4ta&aD1BIeZb&`&<x0!u87$`
zTgjQRAJ<a~<+93NSBl&g>;U3|9PIXr;_A*?TeH2$UYDK!-vZ#k9r(QxNpEx4Ar+_4
z3y|ujPJ(_JlahV@Fs087nRL1WK<(P(@(Q!vck_BY-9VeUXwvmc_`V{0v{NozJLb|F
z6l^o590-a&Hm<(9aslCD!H8KR>v0^B?s^5BxSQ%q9Npa*zL#^et)6iUiD6LCHJEUG
zmRi5{FNXi2gkm+sGk&Zyef^E(?Y0@f_^W#6>G?Mnknbj`IP~Sj+Bjaa#%s9>K|rFm
zMruCV#C9N=lM7P$ieW_bQOw1kw>~@vVB-k;N<snYBx<L;LWn2*TNS?KudmePs`1LS
zGjPD8MV6x$G$01BM4M(q$#Uq>gGIjx@Qn1v=_)m3QE&<_?XG*;y{z>=_;;)5+O<QM
zW^u^|r{wXGB13)CBtGvn+Wl#;M6jS-<_kSy&J1U_KuZa_TpgGCPm-{0N%C`_G61tG
zRg`>IUrC0D&cM1m8x#1qQ~ws=>>z?Gt!MK^m2#swtU}@c*kLpP+8}-;-EX5*6&uD5
zsk*4nTgg}kfYq|UE|z#deFF{;>myB@iRR*Uxa^mBZFt3WKCQ8q&-zGlFy$rW;!m;n
z3>>l;;B<%LX}z5tIqm&Zi&V-VSkIt?BcjoH5POZ7bGA&@`c8oHgQ7U8HejB)y6%z6
zc0aWcG^8Ybe7Z0;c<L1<v1XFPR|MdyY0?(mirgVsyG%sF@^{xXNIun=n*9M;d7rNq
z5jFtlHXREUP&pV@I*JPBgEo+ccpCZUEOxDt5{K1x_K*oK2EaL<5;fXUcjf(PeIO70
z@&olpoo^koGnCsz1(;J8Y8)OBNWRaQ$^pogw1Y1hK&l#I+v?gsjo1Mm!e;WT4+v0Y
zP;KYgTeL|Sz!-t|bA+{#siNqsdvjn^emd4?O0KY3uYEJtH535K&$ehE7QOP&b1T#a
z*jS^a4WpB=bxz*ff$yJFZj=TW{(*vYpbNFQ3Pl)-4{}XQz4`<GbX>vb?f#%h<O}4R
zd^)Dqn2BKgbP3Y;ff83oaVb_P&L6)u1lh)tkrIF!Z;`z6O^=wxzcNF8&DLd~OP&He
z%PI}{tk_1q-8&4%iSzo_#Q*sx0@r}&AclpN4($N**pIVz6sJlA#)+0=bhr<e`2!gS
z=Vx)=gLOw3B=+NhVreSp2YL(F6w_;}1Sjv(9_5Tm7JcxaY!FC#IX!Xr5jCbUJ(FI@
zCZeOqFKr5)^@wRis`UwxY~RzxDCRE2G5u+ItK)E|bWo7h_ay_q52U8)a&Hs_2SH}k
zZfE~i)3Wj-_-khEJZ-h{q>}3M%^|<Vwv_I1gC~w@zEv|r!9><^Ks{e#7?oaL%55~R
zKS@0EWM|oD)rn|J%re;a4o|nkQ-}e6Rl^fd65d|e%I56qvgQcX!gCAz_MON|Dbb)&
zE`Yn|J8UX#Y#@}47UN>;OPG^6O1R6>OhN={De>mz`7M9XGx?O-Mye_gzC~z1*Yy|@
z4qeRyO3QdGH4c^gZBzJEN29Xrn<L7>m8FOS6IafO?R39a^GhlgTETwU3Q|o9ht7@y
z`MCQRt>=sb*3a#)<ckS|yD_JqE3jrqRPZn6mwVck{*-n-71-Xns^A(IU-*D)3Hu^<
zO_ESTdn)5fS;P;LZAo`Rn1Y+MkZ4$}N$30mXUB*eU2xtPXGa9YPFoR;mkwylmb`8Z
zcP33Lv|;<$iA4Ue93gHo?9&qn=G`Q6R8G#?smZ{R$_nIXJsR78Jwtxkr2#2-3`9D9
z=3Xk-QwDi2y4ga)NlLz7RHtXBY1U(-IN5%QP<I>Fc{|<V_woj<wF!KuevoxrWc0si
z&X6&v<xMvDoW)Y>9O_onG7VZE2<I+uKimY-Okf0aCQ#Nk;L3N5-#IL~eClIeA6?yi
z7N9U)5LGn6chfz?#IENO75DIL<Hw#@v)jf0+~+;+HlF?5K?oj_bH*@>mNpDfS0jX^
zu%N?j6ACEFX!@&BBK?H+=w*-R)PG&Yo(uB9sRz%4C<|W+CQ<l2eu2nAafZtQIR$Qa
zQfC^-h}3`0-0?Ar*0em%wi%SOH?gTRIdbt>3=6`LLhF~BB&q2{LBD8UND#^Pg#zbG
z4Zaao#1qJMVZg|0m&u_Lw-oX(kI!g0YQ}uM*5<x^(*NunE<+>`4t*Qw&1hdbQ&Mb;
zsdujKdbUKtWXOpMZtxd)w_Waf*b^N)Nh2tJCarTrXADCWYHe)hmtRfX^P|ieP=X5D
zTU9aK(a+$juFz(BiI%{?g*h!QNT<?w$U4G;v|{_lW#E7Z)t+JjhC)P9CXUTZk28f>
zSk8fS@Muv^R-!zFHm5hMFeUKz$HW1-UGc}QvX{It@dBPNDxc^VKz059aZ|LUGEpG(
z%n5G8=>?7`797cjHN7gV>IV4`$uqL;!@WcIW={k**+=ztde*cE_Nk8S%+pNkPf2by
zM%ZBt3(^8mLXMo)oKOKf8E@y}BK1J$bi(00HvGsdgPZcz)eND+>zMJ)$Y2QPHAE5>
z2&U28_G8#~1G!x%xnF2Ry~|>=z2kCt$uY=rov3i6BgFh7A+?aS1kQlJ%6Df)lCNh_
zKtXd3tp{Ayi5w^YFRdMqtFwU;po)2oB2_Jde#rA3rc2x)aS@Di)R+?Vr~8T24)n#i
zdOiF0mv7R0Qa5$gT4l8+ukTtcPO$j-N0WFP{=gl%<frL{ogHK&{F1481xBsXjfr;p
zl1p71vh};57p)yzAGtnSO7}(7b1g+_mLHF1^Ga{$Ixz`V1-v%yQ+Vnx5@Ap>q?UG$
z_;U9q7W{6S;Q=n&9B3#x>Yr72GSEc^<ZAiFC^OSyW>8YyKq*9}$X}&=xEx|d#Q+Gf
zXniuK4?V{=8X3C-v2Tp?^I3-h93fhF&8L0H5IsLm{-ynWaE=u(;fSCDgCG2G4`Q){
zaRS)wNWcKbZaHmswPi3X$iq6AWU;jFuf2v;F@wFW{-EC%+E-yJ&oLi2lFu*VMk7!;
zAFFdkwhzm`cfqZJkQaFz1|wsI(LR&(I{PtV7tW@s1VjR$8_Lk~WJVb9rDVqf#tRv7
zCB8iWG__xSqi_ahAJi&=%wP!{@pN`@<5~(W+Kqwz8#4fU{65Z$x^^^<&@Mtw9Pmp6
znh}pI*L9lGS_-rs81h1QmWw^Ip0>JcC+-eLI=V?ltP@7IDf&60M)g!3;J{n<5RW8*
z|L~VVl6>HykGnU^^43|I#YUDahB0TD&buV{r}CZs#>isL3f;kBjtm_3cIJ_j^_wK9
zO-6FqR*a#4ehzzKbOUPnUk&i^FLPCc(-vOeyjYcUA;+49g4x3GTx6|+Zu3*+08B3%
z;v3iJ@1XJO6_W%u5gehB@&$Vtp_#28Yo)D!WhmgHNY$I5Y^)dZDwr&FN&brbMjr%s
z;+q?r_n98<;zfWv8D0%}Gher+iVfz!>!hhUN(uryc`bSM$)>WGu{Tu5gBE8wwHDrU
zh-$qAwPZp<0YnzSy_SH<EF6%3XJUA9U7p|@C;UM6r`{JYBLniQN)D0OJ6;3H-AH*$
zw<9~!zF-e5IS>zxg>0Xknr<T=L4c9*SlM$2$C&wRn-kriy;kgBBF(8HTQ+HU+)Bm^
zMqx^0j0$9~;SZ+!s6Zq}B$g>3|LkbDaxuQ;q0QQ0mAY8os2P<jT2u>Q+M=j#e$uhk
zxPA+Ig_ss*J5d2f+h*{mL^v2<06J}66DXpzL9;rxm=NhI-kCH|P1+mnP3o9ht+xRm
z-HVR>;u;pVAW_Ni;zsq^@Sz!&u2Jz4#2V~!m-lmlAw;T76=T3aa5J!BZ7?l)i^-oT
znq@pof*+G3rYK^}>FsS4!3Pd+BVT+juC2LA^>$x%saW{cDf)W=)^BBbwq)HZd3(!!
zSxw@h&^^qrcZ!t9v*J*EPp#KU2f0|`GU9nG=i+Ecq@jjjp_}a`GZHUxWQSiiEK*5q
zwond_FJ1_AbZ=nl;NuRa0qkR>^03PrWWN@;T)JAVCKn{JV16fI$))^lnoKS{%4e8!
z=vRWa7O$HC|9=;UHV_KZ=GAj0SMGb(mzsmU;;qaO8*1ieZ0ZLRwooYg2*u7u*VWQj
zoXXcX4(#3$yA_o*^JD6x*XLb%+{S{^9=i;cdr^K80x7BIj0;Bjt|x}OM&-a$^3)2u
z4I<)Eu4*{DKlJ62NKS|&xkx{#&7OxeL<shARdWAkxmt*yB+|)2!7sjT-qQ*S@vT2n
z1wogai3y#*W6F<O_Px8qn#@&s9AiX2s|4hZn3c=nv!+Ln$+`oZy<(De3EQUEke3G;
z4AY;RDsto!r*$1)n7L_i?5jA~2Z=w`R7fHFU0^LL`=YD1Y-KrnmJ%6FTJK_UQz#v9
zK0w?1l=6uEp&s!|>2cQ%MC%b9`mX<)J87J^S!}9pmOemJ5y)Q$6CJLJCX-Eg&MPx*
zfcQNxw2}LUw9iriT4Vek^{%>IL_vgAg#7Xn6aya8+ULdsat0Gvr`SjlfOrOm(oI8*
zgl@khnWG(xlqLv`{^i)I^>!RBN$63Z(v|v53C5cTkE0SDjiv~tWOat19-W@>7m{?r
z%_sDdR67<H%%U>(vRsqZO@oT+!=ZF-D!SM--m&sw9CF*wDPP{f<9eRmlbz7w))B{6
T-HY<>|Ls65&7Z0N{;}O>)f+{n

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_linux/README_LINUX.txt b/pd/portmidi/pm_linux/README_LINUX.txt
old mode 100644
new mode 100755
index d3adf5a9b..754f41a2d
--- a/pd/portmidi/pm_linux/README_LINUX.txt
+++ b/pd/portmidi/pm_linux/README_LINUX.txt
@@ -1,31 +1,101 @@
 README_LINUX.txt for PortMidi
 Roger Dannenberg
-29 Aug 2006
+14 Oct 2009
 
-To make PortMidi and PortTime, go back up to the portmidi
-directory and type 
+To make PortMidi, you need cmake and the Java SDK.
+Go back up to the portmidi directory and type:
 
-make -f pm_linux/Makefile
+ccmake .
 
-(You can also copy pm_linux/Makefile to the portmidi
-directory and just type "make".)
+Type 'c' (configure) and then 'g' (generate). You may have
+to manually set JAVA_INCLUDE_PATH and JAVA_JVM_LIBRARY
+by typing 't' (toggle to advanced mode) and using the 
+editor to change the fields. You can find possible values
+for JAVA_INCLUDE_PATH by typing "locate jni.h", and for
+JAVA_JVM_LIBRARY by typing locate libjvm".
+
+You also need JAVA_INCLUDE_PATH2, but this will normally
+be set automatically after you set JAVA_INCLUDE_PATH and
+run "configure" (type "c" to ccmake). Normally,
+JAVA_INCLUDE_PATH2 is the linux subdirectory within
+JAVA_INCLUDE_PATH.
+
+Notice that the CMAKE_BUILD_TYPE can be Debug or Release.
+Stick with Release if you are not debugging.
+
+After successfully generating make files with ccmake, you
+can run make:
+
+make
 
 The Makefile will build all test programs and the portmidi
-library. You may want to modify the Makefile to remove the
-PM_CHECK_ERRORS definition. For experimental software,
+library. For experimental software,
 especially programs running from the command line, we 
-recommend using PM_CHECK_ERRORS -- it will terminate your
+recommend using the Debug version -- it will terminate your
 program and print a helpful message if any PortMidi 
-function returns an error code.
+function returns an error code. (Released software should
+check for error codes and handle them, but for quick,
+non-critical projects, the automatic "print and die" 
+handling can save some work.)
+
+THE pmdefaults PROGRAM
+
+You should install pmdefaults. It provides a graphical interface
+for selecting default MIDI IN and OUT devices so that you don't
+have to build device selection interfaces into all your programs
+and so users have a single place to set a preference.
+
+Follow the instructions above to run ccmake, making sure that
+CMAKE_BUILD_TYPE is Release. Run make as described above. Then:
+
+sudo make install
+
+This will install PortMidi libraries and the pmdefault program.
+You must alos have the environment variable LD_LIBRARY_PATH set
+to include /usr/local/lib (where libpmjni.so is installed).
+
+Now, you can run pmdefault.
+
 
-If you do not compile with PM_CHECK_ERRORS, you should 
-check for errors yourself.
+SETTING LD_LIBRARY_PATH
 
-This code has not been carefully tested; however, 
-all test programs in pm_test seem to run properly.
+pmdefaults will not work unless LD_LIBRARY_PATH includes a 
+directory (normally /usr/local/lib) containing libpmjni.so,
+installed as described above.
+
+To set LD_LIBRARY_PATH, you might want to add this to your
+~/.profile (if you use the bash shell):
+
+LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
+export LD_LIBRARY_PATH
+
+
+A NOTE ABOUT AMD64:
+
+When compiling portmidi under linux on an AMD64, I had to add the -fPIC
+flag to the gcc flags.
+
+Reason: when trying to build John Harrison's pyPortMidi gcc bailed out
+with this error:
+
+./linux/libportmidi.a(pmlinux.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
+./linux/libportmidi.a: could not read symbols: Bad value
+collect2: ld returned 1 exit status
+error: command 'gcc' failed with exit status 1
+
+What they said:
+http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?part=1&chap=3
+On certain architectures (AMD64 amongst them), shared libraries *must* 
+be "PIC-enabled".
 
 CHANGELOG
 
+22-jan-2010 Roger B. Dannenberg
+   Updated instructions about Java paths
+
+14-oct-2009 Roger B. Dannenberg
+   Using CMake now for building and configuration
+
 29-aug-2006 Roger B. Dannenberg
    Fixed PortTime to join with time thread for clean exit.    
 
diff --git a/pd/portmidi/pm_linux/finddefault.c b/pd/portmidi/pm_linux/finddefault.c
new file mode 100644
index 000000000..634031689
--- /dev/null
+++ b/pd/portmidi/pm_linux/finddefault.c
@@ -0,0 +1,92 @@
+/* finddefault.c -- find_default_device() implementation
+   Roger Dannenberg, Jan 2009
+*/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "portmidi.h"
+
+#define STRING_MAX 256
+
+/* skip over spaces, return first non-space */
+void skip_spaces(FILE *inf)
+{
+    char c;
+    while (isspace(c = getc(inf))) ;
+    ungetc(c, inf);
+}
+
+/* trim leading spaces and match a string */
+int match_string(FILE *inf, char *s)
+{
+    skip_spaces(inf);
+    while (*s && *s == getc(inf)) s++;
+    return (*s == 0);
+} 
+
+
+/* 
+/* Parse preference files, find default device, search devices --
+ */
+PmDeviceID find_default_device(char *path, int input, PmDeviceID id)
+/* path -- the name of the preference we are searching for
+   input -- true iff this is an input device
+   id -- current default device id
+   returns matching device id if found, otherwise id
+*/
+{
+    static char *pref_2 = "/.java/.userPrefs/";
+    static char *pref_3 = "prefs.xml";
+    char *pref_1 = getenv("HOME");
+    char *full_name, *path_ptr;
+    FILE *inf;
+    int c, i;
+    if (!pref_1) goto nopref; // cannot find preference file
+    // full_name will be larger than necessary
+    full_name  = malloc(strlen(pref_1) + strlen(pref_2) + strlen(pref_3) +
+                        strlen(path) + 2);
+    strcpy(full_name, pref_1); 
+    strcat(full_name, pref_2);
+    // copy all but last path segment to full_name
+    if (*path == '/') path++; // skip initial slash in path
+    path_ptr = strrchr(path, '/'); 
+    if (path_ptr) { // copy up to slash after full_name
+        path_ptr++;
+        int offset = strlen(full_name);
+        memcpy(full_name + offset, path, path_ptr - path);
+        full_name[offset + path_ptr - path] = 0; // end of string
+    } else {
+        path_ptr = path;
+    }
+    strcat(full_name, pref_3);
+    inf = fopen(full_name, "r");
+    if (!inf) goto nopref; // cannot open preference file
+    // We're not going to build or link in a full XML parser.
+    // Instead, find the path string and quoute. Then, look for
+    // "value", "=", quote. Then get string up to quote.
+    while ((c = getc(inf)) != EOF) {
+        char pref_str[STRING_MAX];
+        if (c != '"') continue; // scan up to quote
+        // look for quote string quote
+        if (!match_string(inf, path_ptr)) continue; // path not found
+        if (getc(inf) != '"') continue; // path not found, keep scanning
+        if (!match_string(inf, "value")) goto nopref; // value not found
+        if (!match_string(inf, "=")) goto nopref; // = not found
+        if (!match_string(inf, "\"")) goto nopref; // quote not found
+        // now read the value up to the close quote
+        for (i = 0; i < STRING_MAX; i++) {
+            if ((c = getc(inf)) == '"') break;
+            pref_str[i] = c;
+        }
+        if (i == STRING_MAX) continue; // value too long, ignore
+        pref_str[i] == 0;
+        i = pm_find_default_device(pref_str, input);
+        if (i != pmNoDevice) {
+            id = i;
+	}
+        break;
+    }
+ nopref:
+    return id;
+}
diff --git a/pd/portmidi/pm_linux/pmlinux.c b/pd/portmidi/pm_linux/pmlinux.c
old mode 100644
new mode 100755
index dcb2b8b25..49e266d78
--- a/pd/portmidi/pm_linux/pmlinux.c
+++ b/pd/portmidi/pm_linux/pmlinux.c
@@ -12,6 +12,9 @@
 
 #include "stdlib.h"
 #include "portmidi.h"
+#include "pmutil.h"
+#include "pminternal.h"
+
 #ifdef PMALSA
   #include "pmlinuxalsa.h"
 #endif
@@ -20,7 +23,10 @@
   #include "pmlinuxnull.h"
 #endif
 
-PmError pm_init()
+PmDeviceID pm_default_input_device_id = -1;
+PmDeviceID pm_default_output_device_id = -1;
+
+void pm_init()
 {
     /* Note: it is not an error for PMALSA to fail to initialize. 
      * It may be a design error that the client cannot query what subsystems
@@ -33,7 +39,15 @@ PmError pm_init()
     #ifdef PMNULL
         pm_linuxnull_init();
     #endif
-    return pmNoError;
+    // this is set when we return to Pm_Initialize, but we need it
+    // now in order to (successfully) call Pm_CountDevices()
+    pm_initialized = TRUE;      
+    pm_default_input_device_id = find_default_device(
+        "/PortMidi/PM_RECOMMENDED_INPUT_DEVICE", TRUE,
+        pm_default_input_device_id);
+    pm_default_output_device_id = find_default_device(
+        "/PortMidi/PM_RECOMMENDED_OUTPUT_DEVICE", FALSE,
+        pm_default_output_device_id);
 }
 
 void pm_term(void)
@@ -43,14 +57,13 @@ void pm_term(void)
     #endif
 }
 
-PmDeviceID pm_default_input_device_id = -1;
-PmDeviceID pm_default_output_device_id = -1;
-
 PmDeviceID Pm_GetDefaultInputDeviceID() { 
+    Pm_Initialize();
     return pm_default_input_device_id; 
 }
 
 PmDeviceID Pm_GetDefaultOutputDeviceID() { 
+    Pm_Initialize();
     return pm_default_output_device_id; 
 }
 
diff --git a/pd/portmidi/pm_linux/pmlinux.h b/pd/portmidi/pm_linux/pmlinux.h
old mode 100644
new mode 100755
diff --git a/pd/portmidi/pm_linux/pmlinuxalsa.c b/pd/portmidi/pm_linux/pmlinuxalsa.c
old mode 100644
new mode 100755
index 6132e0906..a86adfb6d
--- a/pd/portmidi/pm_linux/pmlinuxalsa.c
+++ b/pd/portmidi/pm_linux/pmlinuxalsa.c
@@ -9,9 +9,7 @@
 
 #include "stdlib.h"
 #include "portmidi.h"
-#ifdef NEWBUFFER
 #include "pmutil.h"
-#endif
 #include "pminternal.h"
 #include "pmlinuxalsa.h"
 #include "string.h"
@@ -39,7 +37,6 @@
 #define GET_DESCRIPTOR_PORT(info) (((int)(info)) & 0xff)
 
 #define BYTE unsigned char
-#define UINT unsigned long
 
 extern pm_fns_node pm_linuxalsa_in_dictionary;
 extern pm_fns_node pm_linuxalsa_out_dictionary;
@@ -385,12 +382,12 @@ static PmError alsa_abort(PmInternal *midi)
 
 #ifdef GARBAGE
 This is old code here temporarily for reference
-static PmError alsa_write(PmInternal *midi, PmEvent *buffer, long length)
+static PmError alsa_write(PmInternal *midi, PmEvent *buffer, int32_t length)
 {
     alsa_descriptor_type desc = (alsa_descriptor_type) midi->descriptor;
     int i, bytes;
     unsigned char byte;
-    long msg;
+    PmMessage msg;
 
     desc->error = 0;
     for (; length > 0; length--, buffer++) {
@@ -423,7 +420,7 @@ static PmError alsa_write(PmInternal *midi, PmEvent *buffer, long length)
     }
     if (desc->error < 0) return pmHostError;
 
-    VERBOSE printf("snd_seq_drain_output: 0x%x\n", seq);
+    VERBOSE printf("snd_seq_drain_output: 0x%x\n", (unsigned int) seq);
     desc->error = snd_seq_drain_output(seq);
     if (desc->error < 0) return pmHostError;
 
@@ -448,7 +445,7 @@ static PmError alsa_write_flush(PmInternal *midi, PmTimestamp timestamp)
 static PmError alsa_write_short(PmInternal *midi, PmEvent *event)
 {
     int bytes = midi_message_length(event->message);
-    long msg = event->message;
+    PmMessage msg = event->message;
     int i;
     alsa_descriptor_type desc = (alsa_descriptor_type) midi->descriptor;
     for (i = 0; i < bytes; i++) {
diff --git a/pd/portmidi/pm_linux/pmlinuxalsa.h b/pd/portmidi/pm_linux/pmlinuxalsa.h
old mode 100644
new mode 100755
diff --git a/pd/portmidi/pm_mac/Makefile.osx b/pd/portmidi/pm_mac/Makefile.osx
new file mode 100755
index 000000000..383255481
--- /dev/null
+++ b/pd/portmidi/pm_mac/Makefile.osx
@@ -0,0 +1,129 @@
+# MAKEFILE FOR PORTMIDI
+
+# Roger B. Dannenberg
+# Sep 2009
+
+# NOTE: you can use
+#     make -f pm_osx/Makefile.osx configuration=Release
+# to override the default Debug configuration
+configuration=Release
+
+PF=/usr/local
+
+# For debugging, define PM_CHECK_ERRORS
+ifeq ($(configuration),Release)
+    CONFIG = Release
+else
+    CONFIG = Debug
+endif
+
+current: all
+
+all: $(CONFIG)/CMakeCache.txt
+	cd $(CONFIG); make
+
+$(CONFIG)/CMakeCache.txt:
+	rm -f CMakeCache.txt
+	mkdir -p $(CONFIG)
+	cd $(CONFIG); cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=$(CONFIG)
+
+
+**** For instructions: make -f pm_mac\Makefile.osx help ****\n'
+
+help:
+	echo $$'\n\n\
+This is help for portmidi/pm_mac/Makefile.osx\n\n\
+Installation path for dylib is $(PF)\n\
+To build Release version libraries and test applications,\n        \
+make -f pm_mac/Makefile.osx\n\
+To build Debug version libraries and test applications,\n        \
+make -f pm_mac/Makefile.osx configuration=Debug\n\
+To install universal dynamic library,\n        \
+sudo make -f pm_mac/Makefile.osx install\n\
+To install universal dynamic library with xcode,\n        \
+make -f pm_mac/Makefile.osx install-with-xcode\n\
+To make PmDefaults Java application,\n        \
+make -f pm_mac/Makefile.osx pmdefaults\n\n        \
+configuration = $(configuration)\n'
+
+
+clean:
+	rm -f *.o *~ core* */*.o */*/*.o */*~ */core* pm_test/*/pm_dll.dll 
+	rm -f *.opt *.ncb *.plg pm_win/Debug/pm_dll.lib pm_win/Release/pm_dll.lib
+	rm -f pm_test/*.opt pm_test/*.ncb
+	rm -f pm_java/pmjni/*.o pm_java/pmjni/*~ pm_java/*.h
+	rm -rf Release/CMakeFiles Debug/CMakeFiles
+	rm -rf pm_mac/pmdefaults/lib pm_mac/pmdefaults/src
+
+cleaner: clean
+	rm -rf pm_mac/build
+	rm -rf pm_mac/Debug pm_mac/Release pm_test/Debug pm_test/Release
+	rm -f Debug/*.dylib Release/*.dylib
+	rm -f pm_java/pmjni/Debug/*.jnilib
+	rm -f pm_java/pmjni/Release/*.jnilib
+
+cleanest: cleaner
+	rm -f Debug/libportmidi_s.a Release/libportmidi_s.a
+	rm -f pm_test/Debug/test pm_test/Debug/sysex pm_test/Debug/midithread
+	rm -f pm_test/Debug/latency pm_test/Debug/midithru
+	rm -f pm_test/Debug/qtest pm_test/Debug/mm
+	rm -f pm_test/Release/test pm_test/Release/sysex pm_test/Release/midithread
+	rm -f pm_test/Release/latency pm_test/Release/midithru
+	rm -f pm_test/Release/qtest pm_test/Release/mm
+	rm -f pm_java/*/*.class
+	rm -f pm_java/pmjni/jportmidi_JPortMidiApi_PortMidiStream.h
+
+backup: cleanest
+	cd ..; zip -r portmidi.zip portmidi
+
+install: porttime/porttime.h pm_common/portmidi.h \
+	   $(CONFIG)/libportmidi.dylib
+	install porttime/porttime.h  $(PF)/include/
+	install pm_common/portmidi.h $(PF)/include
+	install $(CONFIG)/libportmidi.dylib $(PF)/lib/
+
+# note - this uses xcode to build and install portmidi universal binaries
+install-with-xcode:
+	sudo xcodebuild -project pm_mac/pm_mac.xcodeproj \
+		-configuration Release install DSTROOT=/
+
+##### build pmdefault ######
+
+pm_java/pmjni/jportmidi_JPortMidiApi.h: pm_java/jportmidi/JPortMidiApi.class
+	cd pm_java; javah jportmidi.JPortMidiApi
+	mv pm_java/jportmidi_JportMidiApi.h pm_java/pmjni
+
+JAVASRC = pmdefaults/PmDefaultsFrame.java \
+	    pmdefaults/PmDefaults.java \
+	    jportmidi/JPortMidiApi.java jportmidi/JPortMidi.java \
+	    jportmidi/JPortMidiException.java
+
+# this compiles ALL of the java code
+pm_java/jportmidi/JPortMidiApi.class: $(JAVASRC:%=pm_java/%)
+	cd pm_java; javac $(JAVASRC)
+
+$(CONFIG)/libpmjni.dylib:
+	mkdir -p $(CONFIG)
+	cd $(CONFIG); make -f ../pm_mac/$(MAKEFILE)
+
+pmdefaults: $(CONFIG)/libpmjni.dylib pm_java/jportmidi/JPortMidiApi.class
+ifeq ($(CONFIG),Debug)
+	echo "Error: you cannot build pmdefaults in a Debug configuration \n\
+    You should use configuration=Release in the Makefile command line. "
+	@exit 2
+endif
+	xcodebuild -project pm_mac/pm_mac.xcodeproj \
+            -configuration Release -target PmDefaults
+	echo "pmdefaults java application is made"
+
+###### test plist reader #######
+PLHDR = pm_mac/readbinaryplist.h
+PLSRC = pm_mac/plisttest.c pm_mac/readbinaryplist.c
+pm_mac/plisttest: $(PLHDR) $(PLSRC)
+	cc $(VFLAGS) -Ipm_mac \
+	    -I/Developer/Headers/FlatCarbon \
+	    -I/System/Library/Frameworks/CoreFoundation.framework/Headers \
+	    -I/System/Library/Frameworks/CoreServices.framework/Headers \
+	    $(PLSRC) -o pm_mac/$(CONFIG)/plisttest \
+	    -framework CoreFoundation -framework CoreServices
+
diff --git a/pd/portmidi/pm_mac/README_MAC.txt b/pd/portmidi/pm_mac/README_MAC.txt
new file mode 100644
index 000000000..6fa693840
--- /dev/null
+++ b/pd/portmidi/pm_mac/README_MAC.txt
@@ -0,0 +1,163 @@
+README_MAC.txt for PortMidi
+Roger Dannenberg
+20 nov 2009
+revised 20 Sep 2010 for Xcode 3.2.4 and CMake 8.2-2
+
+To build PortMidi for Mac OS X, you must install Xcode and
+CMake.
+
+CMake can build either command-line Makefiles or Xcode projects.
+These approaches are described in separate sections below.
+
+==== CLEANING UP ====
+(Skip this for now, but later you might want start from a clean
+slate.)
+
+Start in the portmedia/portmidi directory.
+
+make -f pm_mac/Makefile.osx clean
+
+will remove .o, CMakeFiles, and other intermediate files.
+
+Using "cleaner" instead of "clean" will also remove jni-related 
+intermediate files.
+
+Using "cleanest" instead of "clean" or "cleaner" will also remove
+application binaries and the portmidi libraries. (It will not 
+uninstall anything, however.)
+
+==== USING CMAKE (AND COMMAND LINE TOOLS) ====
+
+Start in the portmedia/portmidi directory.
+
+make -f pm_mac/Makefile.osx
+
+(Begin note: make will invoke cmake to build a Makefile and then make to
+build portmidi. This extra level allows you to correctly build 
+both Release and Debug versions. Release is the default, so to get
+the Debug version, use:
+
+make -f pm_mac/Makefile.osx configuration=Debug
+)
+
+Release version executables and libraries are now in
+    portmedia/portmidi/Release
+
+Debug version executables and libraries are created in
+    portmedia/portmidi/Debug
+The Debug versions are compiled with PM_CHECK_ERRORS which
+prints an error message and aborts when an error code is returned
+by PortMidi functions. This is useful for small command line 
+applications. Otherwise, you should check and handle error returns
+in your program.
+
+You can install portmidi as follows:
+
+cd Release; sudo make install
+
+This will install /usr/local/include/{portmidi.h, porttime.h}
+and /usr/local/lib/{libportmidi.dylib, libportmidi_s.a, libpmjni.dylib}
+
+You should now make the pmdefaults.app:
+
+make -f pm_mac/Makefile.osx pmdefaults
+
+NOTE: pmdefaults.app will be in pm_mac/Release/. 
+
+Please copy pmdefaults.app to your Applications folder or wherever 
+you would normally expect to find it.
+
+==== USING CMAKE TO BUILD Xcode PROJECT ====
+
+Before you can use Xcode, you need a portmidi.xcodeproj file.
+CMake builds a location-dependent Xcode project, so unfortunately
+it is not easy to provide an Xcode project that is ready to use.
+Therefore, you should make your own. Once you have it, you can
+use it almost like any other Xcode project, and you will not have
+to go back to CMake.
+
+(1) Install CMake if you do not have it already.
+
+(2) Open portmedia/portmidi/CMakeLists.txt with CMake
+
+(3) Use Configure and Generate buttons
+
+(4) This creates portmedia/portmidi/portmidi.xcodeproj.
+
+Note: You will also use pm_mac/pm_mac.xcodeproj, which
+is not generated by CMake.
+
+(5) Open portmidi/portmidi.xcodeproj with Xcode and 
+build what you need. The simplest thing is to build the
+ALL_BUILD target. The default will be to build the Debug
+version, but you may want to change this to Release. 
+
+NOTE: ALL_BUILD may report errors. Try simply building again
+or rebuilding specific targets that fail until they build
+without errors. There appears to be a race condition or
+missing dependencies in the build system.
+
+The Debug version is compiled with PM_CHECK_ERRORS, and the
+Release version is not. PM_CHECK_ERRORS will print an error
+message and exit your program if any error is returned from
+a call into PortMidi.
+
+CMake (currently) also creates MinSizRel and RelWithDebInfo
+versions, but only because I cannot figure out how to disable
+them.
+
+You will probably want the application PmDefaults, which sets
+default MIDI In and Out devices for PortMidi. You may also
+want to build a Java application using PortMidi. Since I have
+not figured out how to use CMake to make an OS X Java application,
+use pm_mac/pm_mac.xcodeproj as follows:
+
+(6) open pm_mac/pm_mac.xcodeproj
+
+(7) pm_java/pmjni/portmidi_JportmidiApi.h is needed
+by libpmjni.jnilib, the Java native interface library. Since
+portmidi_JportmidiApi.h is included with PortMidi, you can skip
+to step 8, but if you really want to rebuild everything from 
+scratch, build the JPortMidiHeaders project first, and continue
+with step 8:
+
+(8) If you did not build libpmjni.dylib using portmidi.xcodeproj,
+do it now. (It depends on portmidi_JportmidiApi.h, and the 
+PmDefaults project depends on libpmjni.dylib.)
+
+(9) Returning to pm_mac.xcodeproj, build the PmDefaults program.
+
+(10) If you wish, copy pm_mac/build/Deployment/PmDefaults.app to
+your applications folder.
+
+(11) If you want to install libportmidi.dylib, first make it with 
+Xcode, then
+    sudo make -f pm_mac/Makefile.osx install
+This command will install /usr/local/include/{porttime.h, portmidi.h} 
+and /usr/local/lib/libportmidi.dylib
+Note that the "install" function of xcode creates portmidi/Release
+and does not install the library to /usr/local/lib, so please use
+the command line installer.
+
+
+CHANGELOG
+
+20-Sep-2010 Roger B. Dannenberg
+    Adapted to Xcode 3.2.4
+20-Nov-2009 Roger B. Dannenberg
+    Added some install instructions
+26-Sep-2009 Roger B. Dannenberg
+    More changes for using CMake, Makefiles, XCode
+20-Sep-2009 Roger B. Dannenberg
+    Modifications for using CMake
+14-Sep-2009 Roger B. Dannenberg
+    Modifications for using CMake
+17-Jan-2007 Roger B. Dannenberg
+    Explicit instructions for Xcode
+15-Jan-2007 Roger B. Dannenberg
+    Changed instructions because of changes to Makefile.osx
+07-Oct-2006 Roger B. Dannenberg
+    Added directions for xcodebuild
+29-aug-2006 Roger B. Dannenberg
+    Updated this documentation.
+ 
diff --git a/pd/portmidi/pm_mac/finddefault.c b/pd/portmidi/pm_mac/finddefault.c
new file mode 100644
index 000000000..59e02a10b
--- /dev/null
+++ b/pd/portmidi/pm_mac/finddefault.c
@@ -0,0 +1,57 @@
+/* finddefault.c -- find_default_device() implementation
+   Roger Dannenberg, June 2008
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "portmidi.h"
+#include "pmutil.h"
+#include "pminternal.h"
+#include "pmmacosxcm.h"
+#include "readbinaryplist.h"
+
+/* Parse preference files, find default device, search devices --
+   This parses the preference file(s) once for input and once for
+   output, which is inefficient but much simpler to manage. Note
+   that using the readbinaryplist.c module, you cannot keep two
+   plist files (user and system) open at once (due to a simple
+   memory management scheme).
+*/
+PmDeviceID find_default_device(char *path, int input, PmDeviceID id)
+/* path -- the name of the preference we are searching for
+   input -- true iff this is an input device
+   id -- current default device id
+   returns matching device id if found, otherwise id
+*/
+{
+    static char *pref_file = "com.apple.java.util.prefs.plist";
+    char *pref_str = NULL;
+    // read device preferences
+    value_ptr prefs = bplist_read_user_pref(pref_file);
+    if (prefs) {
+        value_ptr pref_val = value_dict_lookup_using_path(prefs, path);
+        if (pref_val) {
+            pref_str = value_get_asciistring(pref_val);
+        }
+    }
+    if (!pref_str) {
+        bplist_free_data(); /* look elsewhere */
+        prefs = bplist_read_system_pref(pref_file);
+        if (prefs) {
+            value_ptr pref_val = value_dict_lookup_using_path(prefs, path);
+            if (pref_val) {
+                pref_str = value_get_asciistring(pref_val);
+            }
+        }
+    }
+    if (pref_str) { /* search devices for match */
+        int i = pm_find_default_device(pref_str, input);
+        if (i != pmNoDevice) {
+            id = i;
+	}
+    }
+    if (prefs) {
+        bplist_free_data();
+    }
+    return id;
+}
diff --git a/pd/portmidi/pm_mac/pm_mac.xcodeproj/project.pbxproj b/pd/portmidi/pm_mac/pm_mac.xcodeproj/project.pbxproj
new file mode 100755
index 000000000..0d06e565e
--- /dev/null
+++ b/pd/portmidi/pm_mac/pm_mac.xcodeproj/project.pbxproj
@@ -0,0 +1,594 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 44;
+	objects = {
+
+/* Begin PBXAggregateTarget section */
+		3D634CAB1247805C0020F829 /* JPortMidiHeaders */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = 3D634CAE1247807A0020F829 /* Build configuration list for PBXAggregateTarget "JPortMidiHeaders" */;
+			buildPhases = (
+				3D634CAA1247805C0020F829 /* ShellScript */,
+			);
+			dependencies = (
+				3D634CB0124781580020F829 /* PBXTargetDependency */,
+			);
+			name = JPortMidiHeaders;
+			productName = JPortMidiHeaders;
+		};
+		3DE2142D124662AA0033C839 /* CopyJavaSources */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = 3DE21434124662FF0033C839 /* Build configuration list for PBXAggregateTarget "CopyJavaSources" */;
+			buildPhases = (
+				3DE2142C124662AA0033C839 /* CopyFiles */,
+			);
+			comments = "The reason for copying files here is that the Compile Java target looks in a particular place for sources. It would be much better to simply have Compile Java look in the original location for all sources, but I don't know how to do that. -RBD\n";
+			dependencies = (
+			);
+			name = CopyJavaSources;
+			productName = CopyJavaSources;
+		};
+		89D0F1C90F3B704E007831A7 /* PmDefaults */ = {
+			isa = PBXAggregateTarget;
+			buildConfigurationList = 89D0F1D20F3B7080007831A7 /* Build configuration list for PBXAggregateTarget "PmDefaults" */;
+			buildPhases = (
+			);
+			dependencies = (
+				89D0F1D10F3B7062007831A7 /* PBXTargetDependency */,
+				89D0F1CD0F3B7062007831A7 /* PBXTargetDependency */,
+				3DE21431124662C50033C839 /* PBXTargetDependency */,
+			);
+			name = PmDefaults;
+			productName = pmdefaults;
+		};
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+		3DE2137F124653FB0033C839 /* portmusic_logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 3DE2137E124653FB0033C839 /* portmusic_logo.png */; };
+		3DE21435124663860033C839 /* PmDefaultsFrame.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE2137D124653CB0033C839 /* PmDefaultsFrame.java */; };
+		3DE214361246638A0033C839 /* PmDefaults.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE2137B1246538B0033C839 /* PmDefaults.java */; };
+		3DE214371246638F0033C839 /* JPortMidiException.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE21382124654DE0033C839 /* JPortMidiException.java */; };
+		3DE214381246638F0033C839 /* JPortMidiApi.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE21381124654CF0033C839 /* JPortMidiApi.java */; };
+		3DE214391246638F0033C839 /* JPortMidi.java in CopyFiles */ = {isa = PBXBuildFile; fileRef = 3DE21380124654BC0033C839 /* JPortMidi.java */; };
+		3DE216131246AC0E0033C839 /* libpmjni.dylib in Copy Java Resources */ = {isa = PBXBuildFile; fileRef = 3DE216101246ABE30033C839 /* libpmjni.dylib */; };
+		3DE216951246D57A0033C839 /* pmdefaults.icns in Resources */ = {isa = PBXBuildFile; fileRef = 3DE216901246C6410033C839 /* pmdefaults.icns */; };
+		89C3F2920F5250A300B0048E /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 89C3F2900F5250A300B0048E /* Credits.rtf */; };
+		89D0F0240F392F20007831A7 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 89D0F0210F392F20007831A7 /* InfoPlist.strings */; };
+		89D0F0410F39306C007831A7 /* JavaApplicationStub in Copy Executable */ = {isa = PBXBuildFile; fileRef = 89D0F03E0F39304A007831A7 /* JavaApplicationStub */; };
+		89D0F16A0F3A124E007831A7 /* pmdefaults.jar in Copy Java Resources */ = {isa = PBXBuildFile; fileRef = 89D0F15D0F3A0FF7007831A7 /* pmdefaults.jar */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+		3D634CAF124781580020F829 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 89D0F1C90F3B704E007831A7;
+			remoteInfo = PmDefaults;
+		};
+		3DE21430124662C50033C839 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 3DE2142D124662AA0033C839;
+			remoteInfo = CopyJavaSources;
+		};
+		3DE2145D124666900033C839 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 3DE2142D124662AA0033C839;
+			remoteInfo = CopyJavaSources;
+		};
+		89D0F1CC0F3B7062007831A7 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 8D1107260486CEB800E47090;
+			remoteInfo = "Assemble Application";
+		};
+		89D0F1D00F3B7062007831A7 /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 29B97313FDCFA39411CA2CEA /* Project object */;
+			proxyType = 1;
+			remoteGlobalIDString = 89D0F0480F393A6F007831A7;
+			remoteInfo = "Compile Java";
+		};
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		3DE2142C124662AA0033C839 /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "${PROJECT_DIR}/pmdefaults/src/java";
+			dstSubfolderSpec = 0;
+			files = (
+				3DE21435124663860033C839 /* PmDefaultsFrame.java in CopyFiles */,
+				3DE214361246638A0033C839 /* PmDefaults.java in CopyFiles */,
+				3DE214371246638F0033C839 /* JPortMidiException.java in CopyFiles */,
+				3DE214381246638F0033C839 /* JPortMidiApi.java in CopyFiles */,
+				3DE214391246638F0033C839 /* JPortMidi.java in CopyFiles */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		89D0F0440F393070007831A7 /* Copy Executable */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 6;
+			files = (
+				89D0F0410F39306C007831A7 /* JavaApplicationStub in Copy Executable */,
+			);
+			name = "Copy Executable";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+		89D0F11F0F394189007831A7 /* Copy Java Resources */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = "";
+			dstSubfolderSpec = 15;
+			files = (
+				89D0F16A0F3A124E007831A7 /* pmdefaults.jar in Copy Java Resources */,
+				3DE216131246AC0E0033C839 /* libpmjni.dylib in Copy Java Resources */,
+			);
+			name = "Copy Java Resources";
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		3DE2137B1246538B0033C839 /* PmDefaults.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = PmDefaults.java; path = ../pm_java/pmdefaults/PmDefaults.java; sourceTree = SOURCE_ROOT; };
+		3DE2137D124653CB0033C839 /* PmDefaultsFrame.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = PmDefaultsFrame.java; path = ../pm_java/pmdefaults/PmDefaultsFrame.java; sourceTree = SOURCE_ROOT; };
+		3DE2137E124653FB0033C839 /* portmusic_logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = portmusic_logo.png; path = ../pm_java/pmdefaults/portmusic_logo.png; sourceTree = SOURCE_ROOT; };
+		3DE21380124654BC0033C839 /* JPortMidi.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = JPortMidi.java; path = ../pm_java/jportmidi/JPortMidi.java; sourceTree = SOURCE_ROOT; };
+		3DE21381124654CF0033C839 /* JPortMidiApi.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = JPortMidiApi.java; path = ../pm_java/jportmidi/JPortMidiApi.java; sourceTree = SOURCE_ROOT; };
+		3DE21382124654DE0033C839 /* JPortMidiException.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; name = JPortMidiException.java; path = ../pm_java/jportmidi/JPortMidiException.java; sourceTree = SOURCE_ROOT; };
+		3DE213841246555A0033C839 /* CoreMIDI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMIDI.framework; path = /System/Library/Frameworks/CoreMIDI.framework; sourceTree = "<absolute>"; };
+		3DE21390124655760033C839 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; };
+		3DE213BE1246557F0033C839 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; sourceTree = "<absolute>"; };
+		3DE216101246ABE30033C839 /* libpmjni.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpmjni.dylib; path = ../Release/libpmjni.dylib; sourceTree = SOURCE_ROOT; };
+		3DE216901246C6410033C839 /* pmdefaults.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = pmdefaults.icns; path = ../pm_java/pmdefaults/pmdefaults.icns; sourceTree = SOURCE_ROOT; };
+		89C3F2910F5250A300B0048E /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = "<group>"; };
+		89D0F0220F392F20007831A7 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
+		89D0F0230F392F20007831A7 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		89D0F03E0F39304A007831A7 /* JavaApplicationStub */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; name = JavaApplicationStub; path = /System/Library/Frameworks/JavaVM.framework/Versions/A/Resources/MacOS/JavaApplicationStub; sourceTree = "<absolute>"; };
+		89D0F0840F394066007831A7 /* JavaNativeFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaNativeFoundation.framework; path = /System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework; sourceTree = "<absolute>"; };
+		89D0F1390F3948A9007831A7 /* pmdefaults/make */ = {isa = PBXFileReference; lastKnownFileType = folder; path = pmdefaults/make; sourceTree = "<group>"; };
+		89D0F15D0F3A0FF7007831A7 /* pmdefaults.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; name = pmdefaults.jar; path = build/Release/pmdefaults.jar; sourceTree = SOURCE_ROOT; };
+		89D0F1860F3A2442007831A7 /* JavaVM.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaVM.framework; path = /System/Library/Frameworks/JavaVM.framework; sourceTree = "<absolute>"; };
+		8D1107320486CEB800E47090 /* PmDefaults.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PmDefaults.app; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXGroup section */
+		1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				3DE213841246555A0033C839 /* CoreMIDI.framework */,
+				3DE21390124655760033C839 /* CoreFoundation.framework */,
+				3DE213BE1246557F0033C839 /* CoreAudio.framework */,
+				89D0F1860F3A2442007831A7 /* JavaVM.framework */,
+				89D0F0840F394066007831A7 /* JavaNativeFoundation.framework */,
+			);
+			name = "Linked Frameworks";
+			sourceTree = "<group>";
+		};
+		1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			name = "Other Frameworks";
+			sourceTree = "<group>";
+		};
+		19C28FACFE9D520D11CA2CBB /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				89D0F15D0F3A0FF7007831A7 /* pmdefaults.jar */,
+				8D1107320486CEB800E47090 /* PmDefaults.app */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		29B97314FDCFA39411CA2CEA /* pmdefaults */ = {
+			isa = PBXGroup;
+			children = (
+				3DE216101246ABE30033C839 /* libpmjni.dylib */,
+				89D0F0260F392F48007831A7 /* Source */,
+				89D0F0200F392F20007831A7 /* Resources */,
+				89D0F1390F3948A9007831A7 /* pmdefaults/make */,
+				29B97323FDCFA39411CA2CEA /* Frameworks */,
+				19C28FACFE9D520D11CA2CBB /* Products */,
+			);
+			name = pmdefaults;
+			sourceTree = "<group>";
+		};
+		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
+				1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		3DE2136A124652E20033C839 /* pm_java */ = {
+			isa = PBXGroup;
+			children = (
+				3DE21379124653150033C839 /* pmdefaults */,
+				3DE2137A1246531D0033C839 /* jportmidi */,
+			);
+			name = pm_java;
+			path = ..;
+			sourceTree = "<group>";
+		};
+		3DE21379124653150033C839 /* pmdefaults */ = {
+			isa = PBXGroup;
+			children = (
+				3DE2137D124653CB0033C839 /* PmDefaultsFrame.java */,
+				3DE2137B1246538B0033C839 /* PmDefaults.java */,
+			);
+			name = pmdefaults;
+			sourceTree = "<group>";
+		};
+		3DE2137A1246531D0033C839 /* jportmidi */ = {
+			isa = PBXGroup;
+			children = (
+				3DE21382124654DE0033C839 /* JPortMidiException.java */,
+				3DE21381124654CF0033C839 /* JPortMidiApi.java */,
+				3DE21380124654BC0033C839 /* JPortMidi.java */,
+			);
+			name = jportmidi;
+			sourceTree = "<group>";
+		};
+		89D0F0200F392F20007831A7 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+				3DE216901246C6410033C839 /* pmdefaults.icns */,
+				3DE2137E124653FB0033C839 /* portmusic_logo.png */,
+				89C3F2900F5250A300B0048E /* Credits.rtf */,
+				89D0F0230F392F20007831A7 /* Info.plist */,
+				89D0F0210F392F20007831A7 /* InfoPlist.strings */,
+				89D0F03E0F39304A007831A7 /* JavaApplicationStub */,
+			);
+			name = Resources;
+			path = pmdefaults/resources;
+			sourceTree = "<group>";
+		};
+		89D0F0260F392F48007831A7 /* Source */ = {
+			isa = PBXGroup;
+			children = (
+				3DE2136A124652E20033C839 /* pm_java */,
+			);
+			name = Source;
+			path = pmdefaults/src;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXLegacyTarget section */
+		89D0F0480F393A6F007831A7 /* Compile Java */ = {
+			isa = PBXLegacyTarget;
+			buildArgumentsString = "-e -f \"${SRCROOT}/make/build.xml\" -debug \"$ACTION\"";
+			buildConfigurationList = 89D0F04B0F393AB7007831A7 /* Build configuration list for PBXLegacyTarget "Compile Java" */;
+			buildPhases = (
+			);
+			buildToolPath = /usr/bin/ant;
+			buildWorkingDirectory = "";
+			dependencies = (
+				3DE2145E124666900033C839 /* PBXTargetDependency */,
+			);
+			name = "Compile Java";
+			passBuildSettingsInEnvironment = 1;
+			productName = "Compile Java";
+		};
+/* End PBXLegacyTarget section */
+
+/* Begin PBXNativeTarget section */
+		8D1107260486CEB800E47090 /* Assemble Application */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Assemble Application" */;
+			buildPhases = (
+				89D0F0440F393070007831A7 /* Copy Executable */,
+				89D0F11F0F394189007831A7 /* Copy Java Resources */,
+				8D1107290486CEB800E47090 /* Resources */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "Assemble Application";
+			productInstallPath = "$(HOME)/Applications";
+			productName = pmdefaults;
+			productReference = 8D1107320486CEB800E47090 /* PmDefaults.app */;
+			productType = "com.apple.product-type.application";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		29B97313FDCFA39411CA2CEA /* Project object */ = {
+			isa = PBXProject;
+			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "pm_mac" */;
+			compatibilityVersion = "Xcode 3.0";
+			developmentRegion = English;
+			hasScannedForEncodings = 1;
+			knownRegions = (
+				English,
+				Japanese,
+				French,
+				German,
+			);
+			mainGroup = 29B97314FDCFA39411CA2CEA /* pmdefaults */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				3D634CAB1247805C0020F829 /* JPortMidiHeaders */,
+				89D0F1C90F3B704E007831A7 /* PmDefaults */,
+				3DE2142D124662AA0033C839 /* CopyJavaSources */,
+				89D0F0480F393A6F007831A7 /* Compile Java */,
+				8D1107260486CEB800E47090 /* Assemble Application */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+		8D1107290486CEB800E47090 /* Resources */ = {
+			isa = PBXResourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				3DE216951246D57A0033C839 /* pmdefaults.icns in Resources */,
+				89D0F0240F392F20007831A7 /* InfoPlist.strings in Resources */,
+				89C3F2920F5250A300B0048E /* Credits.rtf in Resources */,
+				3DE2137F124653FB0033C839 /* portmusic_logo.png in Resources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+		3D634CAA1247805C0020F829 /* ShellScript */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputPaths = (
+			);
+			outputPaths = (
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "echo BUILT_PRODUCTS_DIR is ${BUILT_PRODUCTS_DIR}\njavah -classpath \"${BUILT_PRODUCTS_DIR}/pmdefaults.jar\" -force -o \"${BUILT_PRODUCTS_DIR}/jportmidi_JportMidiApi.h\" \"jportmidi.JPortMidiApi\"\nmv \"${BUILT_PRODUCTS_DIR}/jportmidi_JportMidiApi.h\" ../pm_java/pmjni/\necho \"Created ../pm_java/pmjni/jportmidi_JportMidiApi.h\"\n";
+		};
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+		3D634CB0124781580020F829 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 89D0F1C90F3B704E007831A7 /* PmDefaults */;
+			targetProxy = 3D634CAF124781580020F829 /* PBXContainerItemProxy */;
+		};
+		3DE21431124662C50033C839 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 3DE2142D124662AA0033C839 /* CopyJavaSources */;
+			targetProxy = 3DE21430124662C50033C839 /* PBXContainerItemProxy */;
+		};
+		3DE2145E124666900033C839 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 3DE2142D124662AA0033C839 /* CopyJavaSources */;
+			targetProxy = 3DE2145D124666900033C839 /* PBXContainerItemProxy */;
+		};
+		89D0F1CD0F3B7062007831A7 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 8D1107260486CEB800E47090 /* Assemble Application */;
+			targetProxy = 89D0F1CC0F3B7062007831A7 /* PBXContainerItemProxy */;
+		};
+		89D0F1D10F3B7062007831A7 /* PBXTargetDependency */ = {
+			isa = PBXTargetDependency;
+			target = 89D0F0480F393A6F007831A7 /* Compile Java */;
+			targetProxy = 89D0F1D00F3B7062007831A7 /* PBXContainerItemProxy */;
+		};
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+		89C3F2900F5250A300B0048E /* Credits.rtf */ = {
+			isa = PBXVariantGroup;
+			children = (
+				89C3F2910F5250A300B0048E /* English */,
+			);
+			name = Credits.rtf;
+			sourceTree = "<group>";
+		};
+		89D0F0210F392F20007831A7 /* InfoPlist.strings */ = {
+			isa = PBXVariantGroup;
+			children = (
+				89D0F0220F392F20007831A7 /* English */,
+			);
+			name = InfoPlist.strings;
+			sourceTree = "<group>";
+		};
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+		3D634CAC1247805C0020F829 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				PRODUCT_NAME = JPortMidiHeaders;
+			};
+			name = Debug;
+		};
+		3D634CAD1247805C0020F829 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				PRODUCT_NAME = JPortMidiHeaders;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		3DE2142E124662AB0033C839 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = NO;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				PRODUCT_NAME = CopyJavaSources;
+			};
+			name = Debug;
+		};
+		3DE2142F124662AB0033C839 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_ENABLE_FIX_AND_CONTINUE = NO;
+				PRODUCT_NAME = CopyJavaSources;
+				ZERO_LINK = NO;
+			};
+			name = Release;
+		};
+		89D0F0490F393A6F007831A7 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = pmdefaults;
+				SRCROOT = ./pmdefaults;
+			};
+			name = Debug;
+		};
+		89D0F04A0F393A6F007831A7 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = pmdefaults;
+				SRCROOT = ./pmdefaults;
+			};
+			name = Release;
+		};
+		89D0F1CA0F3B704F007831A7 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = pmdefaults;
+			};
+			name = Debug;
+		};
+		89D0F1CB0F3B704F007831A7 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				PRODUCT_NAME = pmdefaults;
+			};
+			name = Release;
+		};
+		C01FCF4B08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CONFIGURATION_BUILD_DIR = "$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
+				COPY_PHASE_STRIP = NO;
+				INFOPLIST_FILE = pmdefaults/resources/Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PRODUCT_NAME = pmdefaults;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Debug;
+		};
+		C01FCF4C08A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				CONFIGURATION_BUILD_DIR = "$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				INFOPLIST_FILE = pmdefaults/resources/Info.plist;
+				INSTALL_PATH = "$(HOME)/Applications";
+				PRODUCT_NAME = PmDefaults;
+				WRAPPER_EXTENSION = app;
+			};
+			name = Release;
+		};
+		C01FCF4F08A954540054247B /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+			};
+			name = Debug;
+		};
+		C01FCF5008A954540054247B /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1)";
+				ARCHS_STANDARD_32_64_BIT_PRE_XCODE_3_1 = "x86_64 i386 ppc";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				PREBINDING = NO;
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		3D634CAE1247807A0020F829 /* Build configuration list for PBXAggregateTarget "JPortMidiHeaders" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				3D634CAC1247805C0020F829 /* Debug */,
+				3D634CAD1247805C0020F829 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		3DE21434124662FF0033C839 /* Build configuration list for PBXAggregateTarget "CopyJavaSources" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				3DE2142E124662AB0033C839 /* Debug */,
+				3DE2142F124662AB0033C839 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		89D0F04B0F393AB7007831A7 /* Build configuration list for PBXLegacyTarget "Compile Java" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				89D0F0490F393A6F007831A7 /* Debug */,
+				89D0F04A0F393A6F007831A7 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		89D0F1D20F3B7080007831A7 /* Build configuration list for PBXAggregateTarget "PmDefaults" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				89D0F1CA0F3B704F007831A7 /* Debug */,
+				89D0F1CB0F3B704F007831A7 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Assemble Application" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4B08A954540054247B /* Debug */,
+				C01FCF4C08A954540054247B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		C01FCF4E08A954540054247B /* Build configuration list for PBXProject "pm_mac" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				C01FCF4F08A954540054247B /* Debug */,
+				C01FCF5008A954540054247B /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/pd/portmidi/pm_mac/pmdefaults/make/build.xml b/pd/portmidi/pm_mac/pmdefaults/make/build.xml
new file mode 100644
index 000000000..bd08c6820
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmdefaults/make/build.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="pmdefaults" default="jar" basedir="..">
+
+	<!-- Global Properties -->
+	<property environment="env"/>
+	
+    
+	<!-- building in Xcode -->
+	<condition property="product" value="${env.PRODUCT_NAME}">
+		<isset property="env.PRODUCT_NAME"/>
+	</condition>
+    
+	<condition property="src" value="${env.SRCROOT}/src">
+		<isset property="env.SRCROOT"/>
+	</condition>
+	
+	<condition property="obj" value="${env.OBJECT_FILE_DIR}">
+		<isset property="env.OBJECT_FILE_DIR"/>
+	</condition>
+    
+	<condition property="dst" value="${env.BUILT_PRODUCTS_DIR}">
+		<isset property="env.BUILT_PRODUCTS_DIR"/>
+	</condition>
+	
+    
+	<!-- building from the command line -->
+	<condition property="src" value="src">
+		<not>
+			<isset property="src"/>
+		</not>
+	</condition>
+    
+	<condition property="obj" value="build/obj">
+		<not>
+			<isset property="obj"/>
+		</not>
+	</condition>
+	
+	<condition property="dst" value="build">
+		<not>
+			<isset property="dst"/>
+		</not>
+	</condition>
+	
+	<condition property="product" value="pmdefaults">
+		<not>
+			<isset property="product"/>
+		</not>
+	</condition>
+	
+	
+	<!-- Targets -->
+	<target name="init" description="Create build directories">
+        <mkdir dir="${obj}/${product}"/>
+		<mkdir dir="${dst}"/>
+	</target>
+	
+	<target name="compile" depends="init" description="Compile">
+		<javac destdir="${obj}/${product}" deprecation="on" source="1.5" target="1.5" fork="true" debug="true" debuglevel="lines,source">
+			<src path="${src}/java"/>
+			<classpath path="${src}/../lib/eawt-stubs.jar"/>
+		</javac>
+	</target>
+	
+	<target name="copy" depends="init" description="Copy resources">
+		
+	</target>
+	
+	<target name="jar" depends="compile, copy" description="Assemble Jar file">
+		<jar jarfile="${dst}/${product}.jar" basedir="${obj}/${product}" manifest="resources/Manifest" index="true"/>
+	</target>
+	
+	<target name="install" depends="jar" description="Alias for 'jar'">
+		<!-- sent by Xcode -->
+	</target>
+	
+	<target name="clean" description="Removes build directories">
+		<!-- sent by Xcode -->
+		<delete dir="${obj}/${product}"/>
+		<delete file="${dst}/${product}.jar"/>
+	</target>
+	
+	<target name="installhdrs" description="">
+		<!-- sent by Xcode -->
+		<echo>"Nothing to do for install-headers phase"</echo>
+	</target>
+</project>
diff --git a/pd/portmidi/pm_mac/pmdefaults/make/find-classrefs.sh b/pd/portmidi/pm_mac/pmdefaults/make/find-classrefs.sh
new file mode 100755
index 000000000..2217580d0
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmdefaults/make/find-classrefs.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+# Prints all class references made by all classes in a Jar file
+# Depends on the output formatting of javap
+
+# create a temporary working directory
+dir=`mktemp -d $TMPDIR/classrefs.XXXXXX`
+
+asm_dump="$dir/asm_dump"
+all_classes="$dir/all_classes"
+
+# for each class in a Jar file, dump the full assembly
+javap -c -classpath "$1" `/usr/bin/jar tf "$1" | grep "\.class" | sort | xargs | sed -e 's/\.class//g'` > $asm_dump
+
+# dump the initial list of all classes in the Jar file
+/usr/bin/jar tf $1 | grep "\.class" | sed -e 's/\.class//g' >> $all_classes
+
+# dump all static class references
+cat $asm_dump | grep //class | awk -F"//class " '{print $2}' | sort | uniq >> $all_classes
+
+# dump all references to classes made in methods
+cat $asm_dump | grep //Method | awk -F"//Method " '{print $2}' | sort | uniq | grep "\." | awk -F"." '{print $1}' | sort | uniq >> $all_classes
+
+# dump all references to classes by direct field access
+cat $asm_dump | grep //Field | awk -F"//Field " '{print $2}' | sort | uniq | grep "\:L" | awk -F"\:L" '{print $2}' | sort | uniq | awk -F"\;" '{print $1}' >> $all_classes
+
+# sort and reformat
+sort $all_classes | uniq | grep -v "\"" | sed -e 's/\//\./g'
+
+# cleanup
+rm -rf $dir
diff --git a/pd/portmidi/pm_mac/pmdefaults/resources/English.lproj/Credits.rtf b/pd/portmidi/pm_mac/pmdefaults/resources/English.lproj/Credits.rtf
new file mode 100644
index 000000000..18f83781e
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmdefaults/resources/English.lproj/Credits.rtf
@@ -0,0 +1,14 @@
+{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf320
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
+{\colortbl;\red255\green255\blue255;}
+\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural
+
+\f0\b\fs24 \cf0 Author:
+\b0 \
+	Roger B. Dannenberg\
+\
+
+\b With special thanks to:
+\b0 \
+	National Science Foundation\
+}
\ No newline at end of file
diff --git a/pd/portmidi/pm_mac/pmdefaults/resources/English.lproj/InfoPlist.strings b/pd/portmidi/pm_mac/pmdefaults/resources/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000000000000000000000000000000000000..c7e5600f98a243b56851ce705e364d2712c690f9
GIT binary patch
literal 220
zcmYk0%?`mp6h_b5Q%t%P@wXMLZb+~o9-wGxP)&=3H}aA=x{}F!cjmj_J-MHEk2ZlB
z7q%pv$a#{o)4N+MYMl#(HCQus>M!%%rEKywSKXuON0VyPqvct!V#1BH+=8Y3L~g>y
xsgzhk=|m-e&!J(A<wU&H*j(jQYA;s<bM@r;?Gjk4`QL_DNge$meFol$5nuOnCrJPR

literal 0
HcmV?d00001

diff --git a/pd/portmidi/pm_mac/pmdefaults/resources/Info.plist b/pd/portmidi/pm_mac/pmdefaults/resources/Info.plist
new file mode 100644
index 000000000..58bedb450
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmdefaults/resources/Info.plist
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>English</string>
+	<key>CFBundleExecutable</key>
+	<string>JavaApplicationStub</string>
+	<key>CFBundleIconFile</key>
+	<string>pmdefaults.icns</string>
+	<key>CFBundleIdentifier</key>
+	<string></string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>PmDefaults</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1.0</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>Java</key>
+	<dict>
+		<key>ClassPath</key>
+		<string>$JAVAROOT/pmdefaults.jar</string>
+		<key>JVMVersion</key>
+		<string>1.5+</string>
+		<key>MainClass</key>
+		<string>pmdefaults.PmDefaults</string>
+		<key>Properties</key>
+		<dict>
+			<key>apple.laf.useScreenMenuBar</key>
+			<string>true</string>
+		</dict>
+	</dict>
+</dict>
+</plist>
diff --git a/pd/portmidi/pm_mac/pmdefaults/resources/Manifest b/pd/portmidi/pm_mac/pmdefaults/resources/Manifest
new file mode 100644
index 000000000..5dee9b0dc
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmdefaults/resources/Manifest
@@ -0,0 +1 @@
+Main-Class: pmdefaults/PmDefaults
diff --git a/pd/portmidi/pm_mac/pmmac.c b/pd/portmidi/pm_mac/pmmac.c
old mode 100644
new mode 100755
index fbf31c83d..13ac68300
--- a/pd/portmidi/pm_mac/pmmac.c
+++ b/pd/portmidi/pm_mac/pmmac.c
@@ -11,27 +11,44 @@ non-CoreMIDI devices.
 
 #include "stdlib.h"
 #include "portmidi.h"
+#include "pmutil.h"
+#include "pminternal.h"
 #include "pmmacosxcm.h"
 
-PmError pm_init()
+PmDeviceID pm_default_input_device_id = -1;
+PmDeviceID pm_default_output_device_id = -1;
+
+void pm_init()
 {
-    return pm_macosxcm_init();
+    PmError err = pm_macosxcm_init();
+    // this is set when we return to Pm_Initialize, but we need it
+    // now in order to (successfully) call Pm_CountDevices()
+    pm_initialized = TRUE;
+    if (!err) {
+        pm_default_input_device_id = find_default_device(
+                "/PortMidi/PM_RECOMMENDED_INPUT_DEVICE", TRUE, 
+                pm_default_input_device_id);
+        pm_default_output_device_id = find_default_device(
+                "/PortMidi/PM_RECOMMENDED_OUTPUT_DEVICE", FALSE, 
+                pm_default_output_device_id);
+    }
 }
 
+
 void pm_term(void)
 {
     pm_macosxcm_term();
 }
 
-PmDeviceID pm_default_input_device_id = -1;
-PmDeviceID pm_default_output_device_id = -1;
 
 PmDeviceID Pm_GetDefaultInputDeviceID()
 {
+    Pm_Initialize();
     return pm_default_input_device_id;
 }
 
 PmDeviceID Pm_GetDefaultOutputDeviceID() {
+    Pm_Initialize();
     return pm_default_output_device_id;
 }
 
diff --git a/pd/portmidi/pm_mac/pmmac.h b/pd/portmidi/pm_mac/pmmac.h
old mode 100644
new mode 100755
diff --git a/pd/portmidi/pm_mac/pmmacosxcm.c b/pd/portmidi/pm_mac/pmmacosxcm.c
old mode 100644
new mode 100755
index 4971da1b6..78513573d
--- a/pd/portmidi/pm_mac/pmmacosxcm.c
+++ b/pd/portmidi/pm_mac/pmmacosxcm.c
@@ -26,9 +26,7 @@
 //#define CM_DEBUG 1
 
 #include "portmidi.h"
-#ifdef NEWBUFFER
 #include "pmutil.h"
-#endif
 #include "pminternal.h"
 #include "porttime.h"
 #include "pmmac.h"
@@ -40,17 +38,34 @@
 #include <CoreServices/CoreServices.h>
 #include <CoreMIDI/MIDIServices.h>
 #include <CoreAudio/HostTime.h>
+#include <unistd.h>
 
 #define PACKET_BUFFER_SIZE 1024
+/* maximum overall data rate (OS X limit is 15000 bytes/second) */
+#define MAX_BYTES_PER_S 14000
+
+/* Apple reports that packets are dropped when the MIDI bytes/sec
+   exceeds 15000. This is computed by "tracking the number of MIDI 
+   bytes scheduled into 1-second buckets over the last six seconds
+   and averaging these counts." 
+
+   This is apparently based on timestamps, not on real time, so 
+   we have to avoid constructing packets that schedule high speed
+   output even if the actual writes are delayed (which was my first
+   solution).
+
+   The LIMIT_RATE symbol, if defined, enables code to modify 
+   timestamps as follows:
+     After each packet is formed, the next allowable timestamp is
+     computed as this_packet_time + this_packet_len * delay_per_byte
 
-/* this is very strange: if I put in a reasonable 
-   number here, e.g. 128, which would allow sysex data
-   to be sent 128 bytes at a time, then I lose sysex
-   data in my loopback test. With a buffer size of 4,
-   we put at most 4 bytes in a packet (but maybe many
-   packets in a packetList), and everything works fine.
+     This is the minimum timestamp allowed in the next packet. 
+
+     Note that this distorts accurate timestamps somewhat.
  */
-#define SYSEX_BUFFER_SIZE 4
+#define LIMIT_RATE 1
+
+#define SYSEX_BUFFER_SIZE 128
 
 #define VERBOSE_ON 1
 #define VERBOSE if (VERBOSE_ON)
@@ -59,21 +74,29 @@
 #define MIDI_EOX        0xf7
 #define MIDI_STATUS_MASK 0x80
 
-static MIDIClientRef	client = NULL;	/* Client handle to the MIDI server */
-static MIDIPortRef	portIn = NULL;	/* Input port handle */
-static MIDIPortRef	portOut = NULL;	/* Output port handle */
+// "Ref"s are pointers on 32-bit machines and ints on 64 bit machines
+// NULL_REF is our representation of either 0 or NULL
+#ifdef __LP64__
+#define NULL_REF 0
+#else
+#define NULL_REF NULL
+#endif
+
+static MIDIClientRef	client = NULL_REF; 	/* Client handle to the MIDI server */
+static MIDIPortRef	portIn = NULL_REF;	/* Input port handle */
+static MIDIPortRef	portOut = NULL_REF;	/* Output port handle */
 
 extern pm_fns_node pm_macosx_in_dictionary;
 extern pm_fns_node pm_macosx_out_dictionary;
 
 typedef struct midi_macosxcm_struct {
-    unsigned long sync_time; /* when did we last determine delta? */
+    PmTimestamp sync_time; /* when did we last determine delta? */
     UInt64 delta;	/* difference between stream time and real time in ns */
-    UInt64 last_time;	/* last output time */
+    UInt64 last_time;	/* last output time in host units*/
     int first_message;  /* tells midi_write to sychronize timestamps */
     int sysex_mode;     /* middle of sending sysex */
-    unsigned long sysex_word; /* accumulate data when receiving sysex */
-    unsigned int sysex_byte_count; /* count how many received */
+    uint32_t sysex_word; /* accumulate data when receiving sysex */
+    uint32_t sysex_byte_count; /* count how many received */
     char error[PM_HOST_ERROR_MSG_LEN];
     char callback_error[PM_HOST_ERROR_MSG_LEN];
     Byte packetBuffer[PACKET_BUFFER_SIZE];
@@ -83,7 +106,12 @@ typedef struct midi_macosxcm_struct {
     MIDITimeStamp sysex_timestamp; /* timestamp to use with sysex data */
     /* allow for running status (is running status possible here? -rbd): -cpr */
     unsigned char last_command; 
-    long last_msg_length;
+    int32_t last_msg_length;
+    /* limit midi data rate (a CoreMidi requirement): */
+    UInt64 min_next_time; /* when can the next send take place? */
+    int byte_count; /* how many bytes in the next packet list? */
+    Float64 us_per_host_tick; /* host clock frequency, units of min_next_time */
+    UInt64 host_ticks_per_byte; /* host clock units per byte at maximum rate */
 } midi_macosxcm_node, *midi_macosxcm_type;
 
 /* private function declarations */
@@ -94,7 +122,7 @@ char* cm_get_full_endpoint_name(MIDIEndpointRef endpoint);
 
 
 static int
-midi_length(long msg)
+midi_length(int32_t msg)
 {
     int status, high, low;
     static int high_lengths[] = {
@@ -102,7 +130,7 @@ midi_length(long msg)
         3, 3, 3, 3, 2, 2, 3, 1          /* 0x80 through 0xf0 */
     };
     static int low_lengths[] = {
-        1, 1, 3, 2, 1, 1, 1, 1,         /* 0xf0 through 0xf8 */
+        1, 2, 3, 2, 1, 1, 1, 1,         /* 0xf0 through 0xf8 */
         1, 1, 1, 1, 1, 1, 1, 1          /* 0xf9 through 0xff */
     };
 
@@ -110,7 +138,7 @@ midi_length(long msg)
     high = status >> 4;
     low = status & 15;
 
-    return (high != 0xF0) ? high_lengths[high] : low_lengths[low];
+    return (high != 0xF) ? high_lengths[high] : low_lengths[low];
 }
 
 static PmTimestamp midi_synchronize(PmInternal *midi)
@@ -237,7 +265,7 @@ readProc(const MIDIPacketList *newPackets, void *refCon, void *connRefCon)
     PmEvent event;
     MIDIPacket *packet;
     unsigned int packetIndex;
-    unsigned long now;
+    uint32_t now;
     unsigned int status;
     
 #ifdef CM_DEBUG
@@ -262,9 +290,9 @@ readProc(const MIDIPacketList *newPackets, void *refCon, void *connRefCon)
                packet->length); */
     for (packetIndex = 0; packetIndex < newPackets->numPackets; packetIndex++) {
         /* Set the timestamp and dispatch this message */
-        event.timestamp = 
+        event.timestamp = (PmTimestamp) /* explicit conversion */ (
                 (AudioConvertHostTimeToNanos(packet->timeStamp) - m->delta) / 
-                (UInt64) 1000000;
+                (UInt64) 1000000);
         status = packet->data[0];
         /* process packet as sysex data if it begins with MIDI_SYSEX, or
            MIDI_EOX or non-status byte with no running status */
@@ -305,9 +333,8 @@ midi_in_open(PmInternal *midi, void *driverInfo)
         /* time_get does not take a parameter, so coerce */
         midi->time_proc = (PmTimeProcPtr) Pt_Time;
     }
-    
-    endpoint = (MIDIEndpointRef) descriptors[midi->device_id].descriptor;
-    if (endpoint == NULL) {
+    endpoint = (MIDIEndpointRef) (long) descriptors[midi->device_id].descriptor;
+    if (endpoint == NULL_REF) {
         return pmInvalidDeviceId;
     }
 
@@ -335,7 +362,7 @@ midi_in_open(PmInternal *midi, void *driverInfo)
         pm_hosterror = macHostError;
         sprintf(pm_hosterror_text, 
                 "Host error %ld: MIDIPortConnectSource() in midi_in_open()",
-                macHostError);
+                (long) macHostError);
         midi->descriptor = NULL;
         pm_free(m);
         return pmHostError;
@@ -355,8 +382,8 @@ midi_in_close(PmInternal *midi)
     
     if (!m) return pmBadPtr;
 
-    endpoint = (MIDIEndpointRef) descriptors[midi->device_id].descriptor;
-    if (endpoint == NULL) {
+    endpoint = (MIDIEndpointRef) (long) descriptors[midi->device_id].descriptor;
+    if (endpoint == NULL_REF) {
         pm_hosterror = pmBadPtr;
     }
     
@@ -366,7 +393,7 @@ midi_in_close(PmInternal *midi)
         pm_hosterror = macHostError;
         sprintf(pm_hosterror_text, 
                 "Host error %ld: MIDIPortDisconnectSource() in midi_in_close()",
-                macHostError);
+                (long) macHostError);
         err = pmHostError;
     }
     
@@ -400,7 +427,11 @@ midi_out_open(PmInternal *midi, void *driverInfo)
     m->packet = NULL;
     m->last_command = 0;
     m->last_msg_length = 0;
-
+    m->min_next_time = 0;
+    m->byte_count = 0;
+    m->us_per_host_tick = 1000000.0 / AudioGetHostClockFrequency();
+    m->host_ticks_per_byte = (UInt64) (1000000.0 / 
+                                       (m->us_per_host_tick * MAX_BYTES_PER_S));
     return pmNoError;
 }
 
@@ -420,7 +451,18 @@ midi_out_close(PmInternal *midi)
 static PmError
 midi_abort(PmInternal *midi)
 {
-    return pmNoError;
+    PmError err = pmNoError;
+    OSStatus macHostError;
+    MIDIEndpointRef endpoint =
+            (MIDIEndpointRef) (long) descriptors[midi->device_id].descriptor;
+    macHostError = MIDIFlushOutput(endpoint);
+    if (macHostError != noErr) {
+        pm_hosterror = macHostError;
+        sprintf(pm_hosterror_text,
+                "Host error %ld: MIDIFlushOutput()", (long) macHostError);
+        err = pmHostError;
+    }
+    return err;
 }
 
 
@@ -430,13 +472,22 @@ midi_write_flush(PmInternal *midi, PmTimestamp timestamp)
     OSStatus macHostError;
     midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
     MIDIEndpointRef endpoint = 
-            (MIDIEndpointRef) descriptors[midi->device_id].descriptor;
+            (MIDIEndpointRef) (long) descriptors[midi->device_id].descriptor;
     assert(m);
     assert(endpoint);
     if (m->packet != NULL) {
         /* out of space, send the buffer and start refilling it */
+        /* before we can send, maybe delay to limit data rate. OS X allows
+         * 15KB/s. */
+        UInt64 now = AudioGetCurrentHostTime();
+        if (now < m->min_next_time) {
+            usleep((useconds_t) 
+                   ((m->min_next_time - now) * m->us_per_host_tick));
+        }
         macHostError = MIDISend(portOut, endpoint, m->packetList);
         m->packet = NULL; /* indicate no data in packetList now */
+        m->min_next_time = now + m->byte_count * m->host_ticks_per_byte;
+        m->byte_count = 0;
         if (macHostError != noErr) goto send_packet_error;
     }
     return pmNoError;
@@ -445,7 +496,7 @@ send_packet_error:
     pm_hosterror = macHostError;
     sprintf(pm_hosterror_text, 
             "Host error %ld: MIDISend() in midi_write()",
-            macHostError);
+            (long) macHostError);
     return pmHostError;
 
 }
@@ -459,15 +510,21 @@ send_packet(PmInternal *midi, Byte *message, unsigned int messageLength,
     midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
     assert(m);
     
-    /* printf("add %d to packet %lx len %d\n", message[0], m->packet, messageLength); */
+    /* printf("add %d to packet %p len %d\n", message[0], m->packet, messageLength); */
     m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer), 
                                   m->packet, timestamp, messageLength, 
                                   message);
+    m->byte_count += messageLength;
     if (m->packet == NULL) {
         /* out of space, send the buffer and start refilling it */
         /* make midi->packet non-null to fool midi_write_flush into sending */
         m->packet = (MIDIPacket *) 4; 
-        if ((err = midi_write_flush(midi, timestamp)) != pmNoError) return err;
+        /* timestamp is 0 because midi_write_flush ignores timestamp since
+         * timestamps are already in packets. The timestamp parameter is here
+         * because other API's need it. midi_write_flush can be called 
+         * from system-independent code that must be cross-API.
+         */
+        if ((err = midi_write_flush(midi, 0)) != pmNoError) return err;
         m->packet = MIDIPacketListInit(m->packetList);
         assert(m->packet); /* if this fails, it's a programming error */
         m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer),
@@ -482,8 +539,8 @@ send_packet(PmInternal *midi, Byte *message, unsigned int messageLength,
 static PmError
 midi_write_short(PmInternal *midi, PmEvent *event)
 {
-    long when = event->timestamp;
-    long what = event->message;
+    PmTimestamp when = event->timestamp;
+    PmMessage what = event->message;
     MIDITimeStamp timestamp;
     UInt64 when_ns;
     midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
@@ -502,9 +559,6 @@ midi_write_short(PmInternal *midi, PmEvent *event)
     /* if latency == 0, midi->now is not valid. We will just set it to zero */
     if (midi->latency == 0) when = 0;
     when_ns = ((UInt64) (when + midi->latency) * (UInt64) 1000000) + m->delta;
-    /* make sure we don't go backward in time */
-    if (when_ns < m->last_time) when_ns = m->last_time;
-    m->last_time = when_ns;
     timestamp = (MIDITimeStamp) AudioConvertNanosToHostTime(when_ns);
 
     message[0] = Pm_MessageStatus(what);
@@ -512,6 +566,15 @@ midi_write_short(PmInternal *midi, PmEvent *event)
     message[2] = Pm_MessageData2(what);
     messageLength = midi_length(what);
         
+    /* make sure we go foreward in time */
+    if (timestamp < m->min_next_time) timestamp = m->min_next_time;
+
+    #ifdef LIMIT_RATE
+        if (timestamp < m->last_time)
+            timestamp = m->last_time;
+	m->last_time = timestamp + messageLength * m->host_ticks_per_byte;
+    #endif
+
     /* Add this message to the packet list */
     return send_packet(midi, message, messageLength, timestamp);
 }
@@ -549,16 +612,18 @@ midi_end_sysex(PmInternal *midi, PmTimestamp when)
     midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
     assert(m);
     
-    /* make sure we don't go backward in time */
-    if (m->sysex_timestamp < m->last_time) m->sysex_timestamp = m->last_time;
+    /* make sure we go foreward in time */
+    if (m->sysex_timestamp < m->min_next_time) 
+        m->sysex_timestamp = m->min_next_time;
+
+    #ifdef LIMIT_RATE
+        if (m->sysex_timestamp < m->last_time) 
+            m->sysex_timestamp = m->last_time;
+        m->last_time = m->sysex_timestamp + m->sysex_byte_count *
+                                            m->host_ticks_per_byte;
+    #endif
     
-        /* if flush has been called in the meantime, packet list is NULL */
-    if (m->packet == NULL) {
-        m->packet = MIDIPacketListInit(m->packetList);
-        assert(m->packet);
-    }
-
-        /* now send what's in the buffer */
+    /* now send what's in the buffer */
     err = send_packet(midi, m->sysex_buffer, m->sysex_byte_count,
                       m->sysex_timestamp);
     m->sysex_byte_count = 0;
@@ -656,9 +721,9 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal)
     CFRelease(str);
   }
   
-  MIDIEntityRef entity = NULL;
+  MIDIEntityRef entity = NULL_REF;
   MIDIEndpointGetEntity(endpoint, &entity);
-  if (entity == NULL)
+  if (entity == NULL_REF)
     // probably virtual
     return result;
   
@@ -672,13 +737,17 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal)
     }
   }
   // now consider the device's name
-  MIDIDeviceRef device = NULL;
+  MIDIDeviceRef device = NULL_REF;
   MIDIEntityGetDevice(entity, &device);
-  if (device == NULL)
+  if (device == NULL_REF)
     return result;
   
   str = NULL;
   MIDIObjectGetStringProperty(device, kMIDIPropertyName, &str);
+  if (CFStringGetLength(result) == 0) {
+      CFRelease(result);
+      return str;
+  }
   if (str != NULL) {
     // if an external device has only one entity, throw away
     // the endpoint name and just use the device name
@@ -686,6 +755,10 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal)
       CFRelease(result);
       return str;
     } else {
+      if (CFStringGetLength(str) == 0) {
+        CFRelease(str);
+        return result;
+      }
       // does the entity name already start with the device name?
       // (some drivers do this though they shouldn't)
       // if so, do not prepend
@@ -703,6 +776,7 @@ CFStringRef EndpointName(MIDIEndpointRef endpoint, bool isExternal)
   return result;
 }
 
+
 // Obtain the name of an endpoint, following connections.
 // The result should be released by the caller.
 static CFStringRef ConnectedEndpointName(MIDIEndpointRef endpoint)
@@ -710,17 +784,17 @@ static CFStringRef ConnectedEndpointName(MIDIEndpointRef endpoint)
   CFMutableStringRef result = CFStringCreateMutable(NULL, 0);
   CFStringRef str;
   OSStatus err;
-  int i;
+  long i;
   
   // Does the endpoint have connections?
   CFDataRef connections = NULL;
-  int nConnected = 0;
+  long nConnected = 0;
   bool anyStrings = false;
   err = MIDIObjectGetDataProperty(endpoint, kMIDIPropertyConnectionUniqueID, &connections);
   if (connections != NULL) {
     // It has connections, follow them
     // Concatenate the names of all connected devices
-    nConnected = CFDataGetLength(connections) / sizeof(MIDIUniqueID);
+    nConnected = CFDataGetLength(connections) / (int32_t) sizeof(MIDIUniqueID);
     if (nConnected) {
       const SInt32 *pid = (const SInt32 *)(CFDataGetBytePtr(connections));
       for (i = 0; i < nConnected; ++i, ++pid) {
@@ -889,7 +963,7 @@ PmError pm_macosxcm_init(void)
     /* Iterate over the MIDI input devices */
     for (i = 0; i < numInputs; i++) {
         endpoint = MIDIGetSource(i);
-        if (endpoint == NULL) {
+        if (endpoint == NULL_REF) {
             continue;
         }
 
@@ -899,13 +973,13 @@ PmError pm_macosxcm_init(void)
         
         /* Register this device with PortMidi */
         pm_add_device("CoreMIDI", cm_get_full_endpoint_name(endpoint),
-                      TRUE, (void*)endpoint, &pm_macosx_in_dictionary);
+                      TRUE, (void *) (long) endpoint, &pm_macosx_in_dictionary);
     }
 
     /* Iterate over the MIDI output devices */
     for (i = 0; i < numOutputs; i++) {
         endpoint = MIDIGetDestination(i);
-        if (endpoint == NULL) {
+        if (endpoint == NULL_REF) {
             continue;
         }
 
@@ -915,20 +989,22 @@ PmError pm_macosxcm_init(void)
 
         /* Register this device with PortMidi */
         pm_add_device("CoreMIDI", cm_get_full_endpoint_name(endpoint),
-                      FALSE, (void*)endpoint, &pm_macosx_out_dictionary);
+                      FALSE, (void *) (long) endpoint,
+                      &pm_macosx_out_dictionary);
     }
     return pmNoError;
     
 error_return:
     pm_hosterror = macHostError;
-    sprintf(pm_hosterror_text, "Host error %ld: %s\n", macHostError, error_text);
+    sprintf(pm_hosterror_text, "Host error %ld: %s\n", (long) macHostError, 
+            error_text);
     pm_macosxcm_term(); /* clear out any opened ports */
     return pmHostError;
 }
 
 void pm_macosxcm_term(void)
 {
-    if (client != NULL)	 MIDIClientDispose(client);
-    if (portIn != NULL)	 MIDIPortDispose(portIn);
-    if (portOut != NULL) MIDIPortDispose(portOut);
+    if (client != NULL_REF) MIDIClientDispose(client);
+    if (portIn != NULL_REF) MIDIPortDispose(portIn);
+    if (portOut != NULL_REF) MIDIPortDispose(portOut);
 }
diff --git a/pd/portmidi/pm_mac/pmmacosxcm.h b/pd/portmidi/pm_mac/pmmacosxcm.h
old mode 100644
new mode 100755
index 172593595..97235b5dd
--- a/pd/portmidi/pm_mac/pmmacosxcm.h
+++ b/pd/portmidi/pm_mac/pmmacosxcm.h
@@ -1,4 +1,6 @@
 /* system-specific definitions */
 
 PmError pm_macosxcm_init(void);
-void pm_macosxcm_term(void);
\ No newline at end of file
+void pm_macosxcm_term(void);
+
+PmDeviceID find_default_device(char *path, int input, PmDeviceID id);
diff --git a/pd/portmidi/pm_mac/readbinaryplist.c b/pd/portmidi/pm_mac/readbinaryplist.c
new file mode 100644
index 000000000..bccd09518
--- /dev/null
+++ b/pd/portmidi/pm_mac/readbinaryplist.c
@@ -0,0 +1,1115 @@
+/*
+
+readbinaryplist.c -- Roger B. Dannenberg, Jun 2008
+Based on ReadBinaryPList.m by Jens Ayton, 2007
+
+Note that this code is intended to read preference files and has an upper
+bound on file size (currently 100MB) and assumes in some places that 32 bit
+offsets are sufficient.
+
+Here are his comments:
+
+Reader for binary property list files (version 00).
+
+This has been found to work on all 566 binary plists in my ~/Library/Preferences/
+and /Library/Preferences/ directories. This probably does not provide full
+test coverage. It has also been found to provide different data to Apple's
+implementation when presented with a key-value archive. This is because Apple's
+implementation produces undocumented CFKeyArchiverUID objects. My implementation
+produces dictionaries instead, matching the in-file representation used in XML
+and OpenStep plists. See extract_uid().
+
+Full disclosure: in implementing this software, I read one comment and one
+struct defintion in CFLite, Apple's implementation, which is under the APSL
+license. I also deduced the information about CFKeyArchiverUID from that code.
+However, none of the implementation was copied.
+
+Copyright (C) 2007 Jens Ayton
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+*/
+
+/* A note about memory management:
+Strings and possibly other values are unique and because the values
+associated with IDs are cached, you end up with a directed graph rather
+than a tree. It is tricky to free the data because if you do a simple
+depth-first search to free nodes, you will free nodes twice. I decided
+to allocate memory from blocks of 1024 bytes and keep the blocks in a
+list associated with but private to this module. So the user should
+access this module by calling:
+    bplist_read_file() or bplist_read_user_pref() or 
+    bplist_read_system_pref()
+which returns a value. When you are done with the value, call
+    bplist_free_data()
+This will of course free the value_ptr returned by bplist_read_*()
+
+To deal with memory exhaustion (what happens when malloc returns
+NULL?), use setjmp/longjmp -- a single setjmp protects the whole
+parser, and allocate uses longjmp to abort. After abort, memory
+is freed and NULL is returned to caller. There is not much here
+in the way of error reporting.
+
+Memory is obtained by calling allocate which either returns the
+memory requested or calls longjmp, so callers don't have to check.
+
+*/
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include "readbinaryplist.h"
+#include <Carbon/Carbon.h>
+
+#define NO 0
+#define YES 1
+#define BOOL int
+
+#define MAXPATHLEN 256
+
+/* there are 2 levels of error logging/printing:
+ *   BPLIST_LOG and BPLIST_LOG_VERBOSE
+ * either or both can be set to non-zero to turn on
+ * If BPLIST_LOG_VERBOSE is true, then BPLIST_LOG 
+ * is also true.
+ * 
+ * In the code, logging is done by calling either
+ * bplist_log() or bplist_log_verbose(), which take
+ * parameters like printf but might be a no-op.
+ */
+ 
+/* #define BPLIST_LOG_VERBOSE 1 */
+
+#if BPLIST_LOG_VERBOSE
+    #ifndef BPLIST_LOG
+        #define BPLIST_LOG 1
+    #endif
+#endif
+
+#if BPLIST_LOG
+    #define bplist_log printf
+#else
+    #define bplist_log(...)
+#endif
+
+#if BPLIST_LOG_VERBOSE
+    #define bplist_log_verbose bplist_log
+#else
+    #define bplist_log_verbose(...)
+#endif
+
+
+/********* MEMORY MANAGEMENT ********/
+#define BLOCK_SIZE 1024
+// memory is aligned to multiples of this; assume malloc automatically
+// aligns to this number and assume this number is > sizeof(void *)
+#define ALIGNMENT 8
+static void *block_list = NULL;
+static char *free_ptr = NULL;
+static char *end_ptr = NULL;
+static jmp_buf abort_parsing;
+
+static void *allocate(size_t size)
+{
+    void *result;
+    if (free_ptr + size > end_ptr) {
+        size_t how_much = BLOCK_SIZE;
+        // align everything to 8 bytes
+        if (size > BLOCK_SIZE - ALIGNMENT) {
+            how_much = size + ALIGNMENT;
+        }
+        result = malloc(how_much);
+        if (result == NULL) {
+            /* serious problem */
+            longjmp(abort_parsing, 1);
+        }
+        *((void **)result) = block_list;
+        block_list = result;
+        free_ptr = ((char *) result) + ALIGNMENT;
+        end_ptr = ((char *) result) + how_much;
+    }
+    // now, there is enough rooom at free_ptr
+    result = free_ptr;
+    free_ptr += size;
+    return result;
+}
+
+void bplist_free_data()
+{
+    while (block_list) {
+        void *next = *(void **)block_list;
+        free(block_list);
+        block_list = next;
+    }
+    free_ptr = NULL;
+    end_ptr = NULL;
+}
+
+// layout of trailer -- last 32 bytes in plist data
+    uint8_t unused[6];
+    uint8_t offset_int_size;
+    uint8_t object_ref_size;
+    uint64_t object_count;
+    uint64_t top_level_object;
+    uint64_t offset_table_offset;
+
+
+enum
+{
+    kHEADER_SIZE = 8,
+    kTRAILER_SIZE = 32, //sizeof(bplist_trailer_node),
+    kMINIMUM_SANE_SIZE = kHEADER_SIZE + kTRAILER_SIZE
+};
+
+
+static const char kHEADER_BYTES[kHEADER_SIZE] = "bplist00";
+
+// map from UID key to previously parsed value
+typedef struct cache_struct {
+    uint64_t key;
+    value_ptr value;
+    struct cache_struct *next;
+} cache_node, *cache_ptr;
+
+
+typedef struct bplist_info
+{
+    uint64_t object_count;
+    const uint8_t *data_bytes;
+    uint64_t length;
+    uint64_t offset_table_offset;
+    uint8_t offset_int_size;
+    uint8_t object_ref_size;
+    cache_ptr cache;
+} bplist_info_node, *bplist_info_ptr;
+
+
+static value_ptr bplist_read_pldata(pldata_ptr data);
+static value_ptr bplist_read_pref(char *filename, OSType folder_type);
+static uint64_t read_sized_int(bplist_info_ptr bplist, uint64_t offset, uint8_t size);
+static uint64_t read_offset(bplist_info_ptr bplist, uint64_t index);
+static BOOL read_self_sized_int(bplist_info_ptr bplist, uint64_t offset, uint64_t *outValue, size_t *outSize);
+
+static value_ptr extract_object(bplist_info_ptr bplist, uint64_t objectRef);
+static value_ptr extract_simple(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_int(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_real(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_date(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_data(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_ascii_string(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_unicode_string(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_uid(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_array(bplist_info_ptr bplist, uint64_t offset);
+static value_ptr extract_dictionary(bplist_info_ptr bplist, uint64_t offset);
+
+
+value_ptr value_create()
+{
+    value_ptr value = (value_ptr) allocate(sizeof(value_node));
+    return value;
+}
+
+
+void value_set_integer(value_ptr v, int64_t i) {
+    v->tag = kTAG_INT; v->integer = i;
+}
+
+void value_set_real(value_ptr v, double d) {
+    v->tag = kTAG_REAL; v->real = d;
+}
+
+// d is seconds since 1 January 2001
+void value_set_date(value_ptr v, double d) {
+    v->tag = kTAG_DATE; v->real = d;
+}
+
+void value_set_ascii_string(value_ptr v, const uint8_t *s, size_t len) {
+    v->tag = kTAG_ASCIISTRING;
+    v->string = (char *) allocate(len + 1);
+    memcpy(v->string, s, len);
+    v->string[len] = 0;
+}
+
+void value_set_unicode_string(value_ptr v, const uint8_t *s, size_t len) {
+    v->tag = kTAG_UNICODESTRING;
+    v->string = (char *) allocate(len + 1);
+    memcpy(v->string, s, len);
+    v->string[len] = 0;
+}
+
+void value_set_uid(value_ptr v, uint64_t uid)
+{
+    v->tag = kTAG_UID; v->uinteger = uid;
+}
+
+// v->data points to a pldata that points to the actual bytes
+// the bytes are copied, so caller must free byte source (*data)
+void value_set_data(value_ptr v, const uint8_t *data, size_t len) {
+    v->tag = kTAG_DATA;
+    pldata_ptr pldata = (pldata_ptr) allocate(sizeof(pldata_node));
+    pldata->data = (uint8_t *) allocate(len);
+    memcpy(pldata->data, data, len);
+    pldata->len = len;
+    v->data = pldata;
+    printf("value at %p gets data at %p\n", v, pldata);
+}
+
+// caller releases ownership of array to value_ptr v
+void value_set_array(value_ptr v, value_ptr *array, size_t length) {
+    array_ptr a = (array_ptr) allocate(sizeof(array_node));
+    a->array = array;
+    a->length = length;
+    v->tag = kTAG_ARRAY;
+    v->array = a;
+}
+
+// caller releases ownership of dict to value_ptr v
+void value_set_dict(value_ptr v, dict_ptr dict) {
+    v->tag = kTAG_DICTIONARY;
+    v->dict = dict;
+}
+
+
+// look up an objectref in the cache, a ref->value_ptr mapping
+value_ptr cache_lookup(cache_ptr cache, uint64_t ref)
+{
+    while (cache) {
+        if (cache->key == ref) {
+            return cache->value;
+        }
+        cache = cache->next;
+    }
+    return NULL;
+}
+
+
+// insert an objectref and value in the cache
+void cache_insert(cache_ptr *cache, uint64_t ref, value_ptr value)
+{
+    cache_ptr c = (cache_ptr) allocate(sizeof(cache_node));
+    c->key = ref;
+    c->value = value;
+    c->next = *cache;
+    *cache = c;
+}
+
+
+// insert an objectref and value in a dictionary
+void dict_insert(dict_ptr *dict, value_ptr key, value_ptr value)
+{
+    dict_ptr d = (dict_ptr) allocate(sizeof(dict_node));
+    d->key = key;
+    d->value = value;
+    d->next = *dict;
+    *dict = d;
+}
+
+
+BOOL is_binary_plist(pldata_ptr data)
+{
+    if (data->len < kMINIMUM_SANE_SIZE)  return NO;
+    return memcmp(data->data, kHEADER_BYTES, kHEADER_SIZE) == 0;
+}
+
+
+value_ptr bplist_read_file(char *filename)
+{
+    struct stat stbuf;
+    pldata_node pldata;
+    FILE *file;
+    size_t n;
+    value_ptr value;
+    int rslt = stat(filename, &stbuf);
+    if (rslt) {
+        #if BPLIST_LOG
+            perror("in stat");
+        #endif
+        bplist_log("Could not stat %s, error %d\n", filename, rslt);
+        return NULL;
+    }
+    // if file is >100MB, assume it is not a preferences file and give up
+    if (stbuf.st_size > 100000000) {
+        bplist_log("Large file %s encountered (%llu bytes) -- not read\n",
+                   filename, stbuf.st_size);
+        return NULL;
+    }
+    pldata.len = (size_t) stbuf.st_size;
+    // note: this is supposed to be malloc, not allocate. It is separate
+    // from the graph structure, large, and easy to free right after
+    // parsing.
+    pldata.data = (uint8_t *) malloc(pldata.len);
+    if (!pldata.data) {
+        bplist_log("Could not allocate %lu bytes for %s\n",
+                   (unsigned long) pldata.len, filename);
+        return NULL;
+    }
+    file = fopen(filename, "rb");
+    if (!file) {
+        bplist_log("Could not open %s\n", filename);
+        return NULL;
+    }
+    n = fread(pldata.data, 1, pldata.len, file);
+    if (n != pldata.len) {
+        bplist_log("Error reading from %s\n", filename);
+        return NULL;
+    }
+    value = bplist_read_pldata(&pldata);
+    free(pldata.data);
+    return value;
+}
+
+
+value_ptr bplist_read_pref(char *filename, OSType folder_type)
+{
+    FSRef prefdir;
+    char cstr[MAXPATHLEN];
+
+    OSErr err = FSFindFolder(kOnAppropriateDisk, folder_type,
+                             FALSE, &prefdir);
+    if (err) {
+        bplist_log("Error finding preferences folder: %d\n", err);
+        return NULL;
+    }
+    err = FSRefMakePath(&prefdir, (UInt8 *) cstr, (UInt32) (MAXPATHLEN - 1));
+    if (err) {
+        bplist_log("Error making path name for preferences folder: %d\n", err);
+        return NULL;
+    }
+    strlcat(cstr, "/", MAXPATHLEN);
+    strlcat(cstr, filename, MAXPATHLEN);
+    return bplist_read_file(cstr);
+}
+
+
+value_ptr bplist_read_system_pref(char *filename) {
+    return bplist_read_pref(filename, kSystemPreferencesFolderType);
+}
+
+
+value_ptr bplist_read_user_pref(char *filename) {
+    return bplist_read_pref(filename, kPreferencesFolderType);
+}
+
+
+// data is stored with high-order bytes first.
+// read from plist data in a machine-independent fashion
+//
+uint64_t convert_uint64(uint8_t *ptr)
+{
+    uint64_t rslt = 0;
+    int i;
+    // shift in bytes, high-order first
+    for (i = 0; i < sizeof(uint64_t); i++) {
+        rslt <<= 8;
+        rslt += ptr[i];
+    }
+    return rslt;
+}
+
+
+value_ptr bplist_read_pldata(pldata_ptr data)
+{
+    value_ptr result = NULL;
+    bplist_info_node bplist;
+    uint8_t *ptr;
+    uint64_t top_level_object;
+    int i;
+
+    if (data == NULL)  return NULL;
+    if (!is_binary_plist(data)) {
+        bplist_log("Bad binary plist: too short or invalid header.\n");
+        return NULL;
+    }
+        
+    // read trailer
+    ptr = (uint8_t *) (data->data + data->len - kTRAILER_SIZE);
+    bplist.offset_int_size = ptr[6];
+    bplist.object_ref_size = ptr[7];
+    bplist.object_count = convert_uint64(ptr + 8);
+    top_level_object = convert_uint64(ptr + 16);
+    bplist.offset_table_offset = convert_uint64(ptr + 24);
+        
+    // Basic sanity checks
+    if (bplist.offset_int_size < 1 || bplist.offset_int_size > 8 ||
+        bplist.object_ref_size < 1 || bplist.object_ref_size > 8 ||
+        bplist.offset_table_offset < kHEADER_SIZE) {
+        bplist_log("Bad binary plist: trailer declared insane.\n");
+        return NULL;                
+    }
+        
+    // Ensure offset table is inside file
+    uint64_t offsetTableSize = bplist.offset_int_size * bplist.object_count;
+    if (offsetTableSize + bplist.offset_table_offset + kTRAILER_SIZE > 
+        data->len) {
+        bplist_log("Bad binary plist: offset table overlaps end of container.\n");
+        return NULL;
+    }
+        
+    bplist.data_bytes = data->data;
+    bplist.length = data->len;
+    bplist.cache = NULL; /* dictionary is empty */
+
+    bplist_log_verbose("Got a sane bplist with %llu items, offset_int_size: %u, object_ref_size: %u\n", 
+                      bplist.object_count, bplist.offset_int_size, 
+                      bplist.object_ref_size);
+    /* at this point, we are ready to do some parsing which allocates
+        memory for the result data structure. If memory allocation (using
+        allocate fails, a longjmp will return to here and we simply give up
+     */
+    i = setjmp(abort_parsing);
+    if (i == 0) {
+        result = extract_object(&bplist, top_level_object);
+    } else {
+        bplist_log("allocate() failed to allocate memory. Giving up.\n");
+        result = NULL;
+    }
+    if (!result) {
+        bplist_free_data();
+    }
+    return result;
+}
+
+
+static value_ptr extract_object(bplist_info_ptr bplist, uint64_t objectRef)
+{
+    uint64_t offset;
+    value_ptr result = NULL;
+    uint8_t objectTag;
+    
+    if (objectRef >= bplist->object_count) {
+        // Out-of-range object reference.
+        bplist_log("Bad binary plist: object index is out of range.\n");
+        return NULL;
+    }
+        
+    // Use cached object if it exists
+    result = cache_lookup(bplist->cache, objectRef);
+    if (result != NULL)  return result;
+        
+    // Otherwise, find object in file.
+    offset = read_offset(bplist, objectRef);
+    if (offset > bplist->length) {
+        // Out-of-range offset.
+        bplist_log("Bad binary plist: object outside container.\n");
+        return NULL;
+    }
+    objectTag = *(bplist->data_bytes + offset);
+    switch (objectTag & 0xF0) {
+    case kTAG_SIMPLE:
+        result = extract_simple(bplist, offset);
+        break;
+                
+    case kTAG_INT:
+        result = extract_int(bplist, offset);
+        break;
+                        
+    case kTAG_REAL:
+        result = extract_real(bplist, offset);
+        break;
+                        
+    case kTAG_DATE:
+        result = extract_date(bplist, offset);
+        break;
+                        
+    case kTAG_DATA:
+        result = extract_data(bplist, offset);
+        break;
+                        
+    case kTAG_ASCIISTRING:
+        result = extract_ascii_string(bplist, offset);
+        break;
+                        
+    case kTAG_UNICODESTRING:
+        result = extract_unicode_string(bplist, offset);
+        break;
+        
+    case kTAG_UID:
+        result = extract_uid(bplist, offset);
+        break;
+        
+    case kTAG_ARRAY:
+        result = extract_array(bplist, offset);
+        break;
+        
+    case kTAG_DICTIONARY:
+        result = extract_dictionary(bplist, offset);
+        break;
+        
+    default:
+        // Unknown tag.
+        bplist_log("Bad binary plist: unknown tag 0x%X.\n", 
+                   (objectTag & 0x0F) >> 4);
+        result = NULL;
+    }
+    
+    // Cache and return result.
+    if (result != NULL)  
+        cache_insert(&bplist->cache, objectRef, result);
+    return result;
+}
+
+
+static uint64_t read_sized_int(bplist_info_ptr bplist, uint64_t offset, 
+                               uint8_t size)
+{
+    assert(bplist->data_bytes != NULL && size >= 1 && size <= 8 && 
+           offset + size <= bplist->length);
+        
+    uint64_t result = 0;
+    const uint8_t *byte = bplist->data_bytes + offset;
+        
+    do {
+        // note that ints seem to be high-order first
+        result = (result << 8) | *byte++;
+    } while (--size);
+        
+    return result;
+}
+
+
+static uint64_t read_offset(bplist_info_ptr bplist, uint64_t index)
+{
+    assert(index < bplist->object_count);
+        
+    return read_sized_int(bplist, 
+            bplist->offset_table_offset + bplist->offset_int_size * index, 
+            bplist->offset_int_size);
+}
+
+
+static BOOL read_self_sized_int(bplist_info_ptr bplist, uint64_t offset, 
+                             uint64_t *outValue, size_t *outSize)
+{
+    uint32_t size;
+    int64_t value;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    size = 1 << (bplist->data_bytes[offset] & 0x0F);
+    if (size > 8) {
+        // Maximum allowable size in this implementation is 1<<3 = 8 bytes.
+        // This also happens to be the biggest we can handle.
+        return NO;
+    }
+        
+    if (offset + 1 + size > bplist->length) {
+        // Out of range.
+        return NO;
+    }
+        
+    value = read_sized_int(bplist, offset + 1, size);
+    
+    if (outValue != NULL) *outValue = value;
+    if (outSize != NULL) *outSize = size + 1; // +1 for tag byte.
+    return YES;
+}
+
+
+static value_ptr extract_simple(bplist_info_ptr bplist, uint64_t offset)
+{
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+    value_ptr value = value_create();
+        
+    switch (bplist->data_bytes[offset]) {
+    case kVALUE_NULL:
+        value->tag = kVALUE_NULL;
+        return value;
+        
+    case kVALUE_TRUE:
+        value->tag = kVALUE_TRUE;
+        return value;
+                        
+    case kVALUE_FALSE:
+        value->tag = kVALUE_FALSE;
+        return value;
+    }
+        
+    // Note: kVALUE_FILLER is treated as invalid, because it, er, is.
+    bplist_log("Bad binary plist: invalid atom.\n");
+    free(value);
+    return NULL;
+}
+
+
+static value_ptr extract_int(bplist_info_ptr bplist, uint64_t offset)
+{
+    value_ptr value = value_create();
+    value->tag = kTAG_INT;
+
+    if (!read_self_sized_int(bplist, offset, &value->uinteger, NULL)) {
+        bplist_log("Bad binary plist: invalid integer object.\n");
+    }
+        
+    /* NOTE: originally, I sign-extended here. This was the wrong thing; it
+       turns out that negative ints are always stored as 64-bit, and smaller
+       ints are unsigned.
+    */
+    return value;
+}
+
+
+static value_ptr extract_real(bplist_info_ptr bplist, uint64_t offset)
+{
+    value_ptr value = value_create();
+    uint32_t size;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+    
+    size = 1 << (bplist->data_bytes[offset] & 0x0F);
+        
+    // FIXME: what to do if faced with other sizes for float/double?
+    assert (sizeof (float) == sizeof (uint32_t) && 
+            sizeof (double) == sizeof (uint64_t));
+        
+    if (offset + 1 + size > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                  "floating-point number");
+        free(value);
+        return NULL;
+    }
+        
+    if (size == sizeof (float)) {
+        // cast is ok because we know size is 4 bytes
+        uint32_t i = (uint32_t) read_sized_int(bplist, offset + 1, size); 
+        // Note that this handles byte swapping.
+        value_set_real(value, *(float *)&i);
+        return value;
+    } else if (size == sizeof (double)) {
+        uint64_t i = read_sized_int(bplist, offset + 1, size);
+        // Note that this handles byte swapping.
+        value_set_real(value, *(double *)&i);
+        return value;
+    } else {
+        // Can't handle floats of other sizes.
+        bplist_log("Bad binary plist: can't handle %u-byte float.\n", size);
+        free(value);
+        return NULL;
+    }
+}
+
+
+static value_ptr extract_date(bplist_info_ptr bplist, uint64_t offset)
+{
+    value_ptr value;
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    // Data has size code like int and real, but only 3 (meaning 8 bytes) is valid.
+    if (bplist->data_bytes[offset] != kVALUE_FULLDATETAG) {
+        bplist_log("Bad binary plist: invalid size for date object.\n");
+        return NULL;
+    }
+        
+    if (offset + 1 + sizeof (double) > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                  "date");
+        return NULL;
+    }
+        
+    // FIXME: what to do if faced with other sizes for double?
+    assert (sizeof (double) == sizeof (uint64_t));
+        
+    uint64_t date = read_sized_int(bplist, offset + 1, sizeof(double));
+    // Note that this handles byte swapping.
+    value = value_create();
+    value_set_date(value, *(double *)&date);
+    return value;
+}
+
+
+uint64_t bplist_get_a_size(bplist_info_ptr bplist, 
+                           uint64_t *offset_ptr, char *msg)
+{
+    uint64_t size = bplist->data_bytes[*offset_ptr] & 0x0F;
+    (*offset_ptr)++;
+    if (size == 0x0F) {
+        // 0x0F means separate int size follows. 
+        // Smaller values are used for short data.
+        size_t extra; // the length of the data size we are about to read
+        if ((bplist->data_bytes[*offset_ptr] & 0xF0) != kTAG_INT) {
+            // Bad data, mistagged size int
+            bplist_log("Bad binary plist: %s object size is not tagged as int.\n",
+                       msg);
+            return UINT64_MAX; // error
+        }
+                
+        // read integer data as size, extra tells how many bytes to skip
+        if (!read_self_sized_int(bplist, *offset_ptr, &size, &extra)) {
+            bplist_log("Bad binary plist: invalid %s object size tag.\n", 
+                      "data");
+            return UINT64_MAX; // error
+        }
+        (*offset_ptr) += extra;
+    }
+
+    if (*offset_ptr + size > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                  "data");
+        return UINT64_MAX; // error
+    }
+    return size;
+}
+
+
+static value_ptr extract_data(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t size;
+    value_ptr value;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((size = bplist_get_a_size(bplist, &offset, "data")) == UINT64_MAX) 
+        return NULL;
+        
+    value = value_create();
+    // cast is ok because we only allow files up to 100MB:
+    value_set_data(value, bplist->data_bytes + (size_t) offset, (size_t) size);
+    return value;
+}
+
+
+static value_ptr extract_ascii_string(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t size;
+    value_ptr value; // return value
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((size = bplist_get_a_size(bplist, &offset, "ascii string")) ==
+        UINT64_MAX) 
+        return NULL;
+
+    value = value_create();
+    // cast is ok because we only allow 100MB files
+    value_set_ascii_string(value, bplist->data_bytes + (size_t) offset, 
+                           (size_t) size);
+    return value;
+}
+
+
+static value_ptr extract_unicode_string(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t size;
+    value_ptr value;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((size = bplist_get_a_size(bplist, &offset, "unicode string")) == 
+        UINT64_MAX)
+        return NULL;
+        
+    value = value_create();
+    // cast is ok because we only allow 100MB files
+    value_set_unicode_string(value, bplist->data_bytes + (size_t) offset, 
+                             (size_t) size);
+    return value;
+}
+
+
+static value_ptr extract_uid(bplist_info_ptr bplist, uint64_t offset)
+{
+    /* UIDs are used by Cocoa's key-value coder.
+       When writing other plist formats, they are expanded to dictionaries of
+       the form <dict><key>CF$UID</key><integer>value</integer></dict>, so we
+       do the same here on reading. This results in plists identical to what
+       running plutil -convert xml1 gives us. However, this is not the same
+       result as [Core]Foundation's plist parser, which extracts them as un-
+       introspectable CF objects. In fact, it even seems to convert the CF$UID
+       dictionaries from XML plists on the fly.
+    */
+        
+    value_ptr value;
+    uint64_t uid;
+        
+    if (!read_self_sized_int(bplist, offset, &uid, NULL)) {
+        bplist_log("Bad binary plist: invalid UID object.\n");
+        return NULL;
+    }
+        
+    // assert(NO); // original code suggests using a string for a key
+    // but our dictionaries all use big ints for keys, so I don't know
+    // what to do here
+    
+    // In practice, I believe this code is never executed by PortMidi.
+    // I changed it to do something and not raise compiler warnings, but
+    // not sure what the code should do.
+
+    value = value_create();
+    value_set_uid(value, uid);
+    // return [NSDictionary dictionaryWithObject:
+    //         [NSNumber numberWithUnsignedLongLong:value] 
+    //         forKey:"CF$UID"];
+    return value;
+}
+
+
+static value_ptr extract_array(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t i, count;
+    uint64_t size;
+    uint64_t elementID;
+    value_ptr element = NULL;
+    value_ptr *array = NULL;
+    value_ptr value = NULL;
+    BOOL ok = YES;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+    if ((count = bplist_get_a_size(bplist, &offset, "array")) == UINT64_MAX)
+        return NULL;
+        
+    if (count > UINT64_MAX / bplist->object_ref_size - offset) {
+        // Offset overflow.
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "array");
+        return NULL;
+    }
+        
+    size = bplist->object_ref_size * count;
+    if (size + offset > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "array");
+        return NULL;
+    }
+        
+    // got count, the number of array elements
+
+    value = value_create();
+    assert(value);
+
+    if (count == 0) {
+        // count must be size_t or smaller because max file size is 100MB
+        value_set_array(value, array, (size_t) count);
+        return value;
+    }
+        
+    array = allocate(sizeof(value_ptr) * (size_t) count);
+        
+    for (i = 0; i != count; ++i) {
+        bplist_log_verbose("[%u]\n", i);
+        elementID = read_sized_int(bplist, offset + i * bplist->object_ref_size, 
+                                 bplist->object_ref_size);
+        element = extract_object(bplist, elementID);
+        if (element != NULL) {
+            array[i] = element;
+        } else {
+            ok = NO;
+            break;
+        }
+    }
+    if (ok) { // count is smaller than size_t max because of 100MB file limit
+        value_set_array(value, array, (size_t) count);
+    }
+
+    return value;
+}
+
+
+static value_ptr extract_dictionary(bplist_info_ptr bplist, uint64_t offset)
+{
+    uint64_t i, count;
+    uint64_t size;
+    uint64_t elementID;
+    value_ptr value = NULL;
+    dict_ptr dict = NULL;
+    BOOL ok = YES;
+        
+    assert(bplist->data_bytes != NULL && offset < bplist->length);
+        
+        
+    if ((count = bplist_get_a_size(bplist, &offset, "array")) == UINT64_MAX)
+        return NULL;
+
+    if (count > UINT64_MAX / (bplist->object_ref_size * 2) - offset) {
+        // Offset overflow.
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "dictionary");
+        return NULL;
+    }
+    
+    size = bplist->object_ref_size * count * 2;
+    if (size + offset > bplist->length) {
+        bplist_log("Bad binary plist: %s object overlaps end of container.\n", 
+                   "dictionary");
+        return NULL;
+    }
+    
+    value = value_create();
+    if (count == 0) {
+        value_set_dict(value, NULL);
+        return value;
+    }
+
+    for (i = 0; i != count; ++i) {
+        value_ptr key;
+        value_ptr val;
+        elementID = read_sized_int(bplist, offset + i * bplist->object_ref_size, 
+                                 bplist->object_ref_size);
+        key = extract_object(bplist, elementID);
+        if (key != NULL) {
+            bplist_log_verbose("key: %p\n", key);
+        } else {
+            ok = NO;
+            break;
+        }
+                    
+        elementID = read_sized_int(bplist, 
+                            offset + (i + count) * bplist->object_ref_size, 
+                            bplist->object_ref_size);
+        val = extract_object(bplist, elementID);
+        if (val != NULL) {
+            dict_insert(&dict, key, val);
+        } else {
+            ok = NO;
+            break;
+        }
+    }
+    if (ok) {
+        value_set_dict(value, dict);
+    }
+    
+    return value;
+}
+
+/*************** functions for accessing values ****************/
+
+
+char *value_get_asciistring(value_ptr v)
+{
+    if (v->tag != kTAG_ASCIISTRING) return NULL;
+    return v->string;
+}
+
+
+value_ptr value_dict_lookup_using_string(value_ptr v, char *key)
+{
+    dict_ptr dict;
+    if (v->tag != kTAG_DICTIONARY) return NULL; // not a dictionary
+    dict = v->dict;
+    /* search for key */
+    while (dict) {
+        if (dict->key && dict->key->tag == kTAG_ASCIISTRING &&
+            strcmp(key, dict->key->string) == 0) { // found it
+            return dict->value;
+        }
+        dict = dict->next;
+    }
+    return NULL; /* not found */
+}
+
+value_ptr value_dict_lookup_using_path(value_ptr v, char *path)
+{
+    char key[MAX_KEY_SIZE];
+    while (*path) { /* more to the path */
+        int i = 0;
+        while (i < MAX_KEY_SIZE - 1) {
+            key[i] = *path++;
+            if (key[i] == '/') { /* end of entry in path */
+                key[i + 1] = 0;
+                break;
+            }
+            if (!key[i]) {
+                path--; /* back up to end of string char */
+                break;  /* this will cause outer loop to exit */
+            }
+            i++;
+        }
+        if (!v || v->tag != kTAG_DICTIONARY) return NULL;
+        /* now, look up the key to get next value */
+        v = value_dict_lookup_using_string(v, key);
+        if (v == NULL) return NULL;
+    }
+    return v;
+}
+                
+
+/*************** functions for debugging ***************/
+
+void plist_print(value_ptr v)
+{
+    size_t i;
+    int comma_needed;
+    dict_ptr dict;
+    if (!v) {
+        printf("NULL");
+        return;
+    }
+    switch (v->tag & 0xF0) {
+    case kTAG_SIMPLE:
+        switch (v->tag) {
+        case kVALUE_NULL: 
+            printf("NULL@%p", v); break;
+        case kVALUE_FALSE: 
+            printf("FALSE@%p", v); break;
+        case kVALUE_TRUE:
+            printf("TRUE@%p", v); break;
+        default:
+            printf("UNKNOWN tag=%x@%p", v->tag, v); break;
+        }
+        break;
+    case kTAG_INT:
+        printf("%lld@%p", v->integer, v); break;
+    case kTAG_REAL:
+        printf("%g@%p", v->real, v); break;
+    case kTAG_DATE:
+        printf("date:%g@%p", v->real, v); break;
+    case kTAG_DATA:
+        printf("data@%p->%p:[%p:", v, v->data, v->data->data);
+        for (i = 0; i < v->data->len; i++) {
+            printf(" %2x", v->data->data[i]);
+        }
+        printf("]"); break;
+    case kTAG_ASCIISTRING:
+        printf("%p:\"%s\"@%p", v->string, v->string, v); break;
+    case kTAG_UNICODESTRING:
+        printf("unicode:%p:\"%s\"@%p", v->string, v->string, v); break;
+    case kTAG_UID:
+        printf("UID:%llu@%p", v->uinteger, v); break;
+    case kTAG_ARRAY:
+        comma_needed = FALSE;
+        printf("%p->%p:[%p:", v, v->array, v->array->array);
+        for (i = 0; i < v->array->length; i++) {
+            if (comma_needed) printf(", ");
+            plist_print(v->array->array[i]);
+            comma_needed = TRUE;
+        }
+        printf("]"); break;
+    case kTAG_DICTIONARY:
+        comma_needed = FALSE;
+        printf("%p:[", v);
+        dict = v->dict;
+        while (dict) {
+            if (comma_needed) printf(", ");
+            printf("%p:", dict);
+            plist_print(dict->key);
+            printf("->");
+            plist_print(dict->value);
+            comma_needed = TRUE;
+            dict = dict->next;
+        }
+        printf("]"); break;
+    default:
+        printf("UNKNOWN tag=%x", v->tag);
+        break;
+    }
+}
+
+            
diff --git a/pd/portmidi/pm_mac/readbinaryplist.h b/pd/portmidi/pm_mac/readbinaryplist.h
new file mode 100644
index 000000000..577865996
--- /dev/null
+++ b/pd/portmidi/pm_mac/readbinaryplist.h
@@ -0,0 +1,88 @@
+/* readbinaryplist.h -- header to read preference files
+
+   Roger B. Dannenberg, Jun 2008
+*/
+
+#include <stdint.h> /* for uint8_t ... */
+
+#ifndef TRUE
+    #define TRUE 1
+    #define FALSE 0
+#endif
+
+#define MAX_KEY_SIZE 256
+
+enum
+{
+    // Object tags (high nybble)
+    kTAG_SIMPLE = 0x00,        // Null, true, false, filler, or invalid
+    kTAG_INT = 0x10,
+    kTAG_REAL = 0x20,
+    kTAG_DATE = 0x30,
+    kTAG_DATA = 0x40,
+    kTAG_ASCIISTRING = 0x50,
+    kTAG_UNICODESTRING = 0x60,
+    kTAG_UID = 0x80,
+    kTAG_ARRAY = 0xA0,
+    kTAG_DICTIONARY = 0xD0,
+    
+    // "simple" object values
+    kVALUE_NULL = 0x00,
+    kVALUE_FALSE = 0x08,
+    kVALUE_TRUE = 0x09,
+    kVALUE_FILLER = 0x0F,
+    
+    kVALUE_FULLDATETAG = 0x33        // Dates are tagged with a whole byte.
+};
+
+
+typedef struct pldata_struct {
+    uint8_t *data;
+    size_t len;
+} pldata_node, *pldata_ptr;
+
+
+typedef struct array_struct {
+    struct value_struct **array;
+    uint64_t length;
+} array_node, *array_ptr;
+
+
+// a dict_node is a list of <key, value> pairs
+typedef struct dict_struct {
+    struct value_struct *key;
+    struct value_struct *value;
+    struct dict_struct *next;
+} dict_node, *dict_ptr;
+
+
+// an value_node is a value with a tag telling the type
+typedef struct value_struct {
+    int tag;
+    union {
+        int64_t integer;
+        uint64_t uinteger;
+        double real;
+        char *string;
+        pldata_ptr data;
+        array_ptr array;
+        struct dict_struct *dict;
+    };
+} value_node, *value_ptr;
+
+
+value_ptr bplist_read_file(char *filename);
+value_ptr bplist_read_user_pref(char *filename);
+value_ptr bplist_read_system_pref(char *filename);
+void bplist_free_data();
+
+/*************** functions for accessing values ****************/
+
+char *value_get_asciistring(value_ptr v);
+value_ptr value_dict_lookup_using_string(value_ptr v, char *key);
+value_ptr value_dict_lookup_using_path(value_ptr v, char *path);
+
+/*************** functions for debugging ***************/
+
+void plist_print(value_ptr v);
+
diff --git a/pd/portmidi/pm_mingw/README-MINGW.txt b/pd/portmidi/pm_mingw/README-MINGW.txt
new file mode 100644
index 000000000..e01a7fed4
--- /dev/null
+++ b/pd/portmidi/pm_mingw/README-MINGW.txt
@@ -0,0 +1,11 @@
+README-MINGW.txt -- note on MinGW and PortMidi
+
+Roger Dannenberg
+20 Sep 2010
+
+Fabian Rutte writes that CMake can build files for Code::Blocks
+under MinGW.
+
+I would guess that a simple Unix Makefile output from CMake would
+also work, but I haven't tested it.
+
diff --git a/pd/portmidi/pm_mingw/eclipse/README.txt b/pd/portmidi/pm_mingw/eclipse/README.txt
new file mode 100644
index 000000000..2b58e13ab
--- /dev/null
+++ b/pd/portmidi/pm_mingw/eclipse/README.txt
@@ -0,0 +1,23 @@
+These files, dot-cproject and dot-project, come from Philip Martin
+(posted on Media_api mailing list on September 3, 2008).
+He writes: "I do not have a makefile. I used Eclipse + CDT to build
+PortMidi using MinGw. ... The two files .project and .cproject I 
+believe must be in the root of the portmidi tree to work with Eclipse.
+... I have only compiled the relevant sources into one .dll here."
+
+The .project and .cproject files have been renamed to dot-project and
+dot-cproject here to make them more visible. To use them, you will
+need to rename them to .project and .cproject, and probably move them
+to the portmidi tree root.
+
+At this time, no one is actively maintaining Eclipse or MinGw versions
+of PortMidi, so these files may be out-of-date or have other problems.
+Feel free to submit updates or discuss the possibility of maintaining
+these or some equivalent files for MinGw.
+
+Update, 20 Sep 2010: CMake supports Code::Blocks in conjunction with
+MinGW.
+
+Roger Dannenberg
+18-Oct-2008
+
diff --git a/pd/portmidi/pm_mingw/eclipse/dot-cproject b/pd/portmidi/pm_mingw/eclipse/dot-cproject
new file mode 100644
index 000000000..d99bff8bc
--- /dev/null
+++ b/pd/portmidi/pm_mingw/eclipse/dot-cproject
@@ -0,0 +1,710 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+
+<cproject>
+<storageModule moduleId="org.eclipse.cdt.core.settings">
+<cconfiguration id="cdt.managedbuild.config.gnu.mingw.so.debug.1580321004">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.so.debug.1580321004" moduleId="org.eclipse.cdt.core.settings" name="Debug">
+<externalSettings>
+<externalSetting>
+<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/PortMidi"/>
+<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/PortMidi/Debug"/>
+</externalSetting>
+</externalSettings>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactExtension="dll" artifactName="PortMidi" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.so.debug.1580321004" name="Debug" parent="cdt.managedbuild.config.gnu.mingw.so.debug">
+<folderInfo id="cdt.managedbuild.config.gnu.mingw.so.debug.1580321004." name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.so.debug.1545417885" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.so.debug">
+<targetPlatform id="cdt.managedbuild.target.gnu.platform.mingw.so.debug.415542300" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.mingw.so.debug"/>
+<builder buildPath="${workspace_loc:/PortMidi/Debug}" id="cdt.managedbuild.tool.gnu.builder.mingw.base.592172807" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
+<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.so.debug.1889129808" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.so.debug">
+<option id="gnu.both.asm.option.flags.1498736889" name="Assembler flags" superClass="gnu.both.asm.option.flags"/>
+<option id="gnu.both.asm.option.include.paths.1734867019" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_common}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_win}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/porttime}&quot;"/>
+</option>
+<option id="gnu.both.asm.option.warnings.nowarn.1657300607" name="Suppress warnings (-W)" superClass="gnu.both.asm.option.warnings.nowarn"/>
+<option id="gnu.both.asm.option.version.1995252368" name="Announce version (-v)" superClass="gnu.both.asm.option.version"/>
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1250436110" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.1211487028" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.so.debug.81091790" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.so.debug">
+<option id="gnu.cpp.compiler.mingw.so.debug.option.optimization.level.1750954034" name="Optimization Level" superClass="gnu.cpp.compiler.mingw.so.debug.option.optimization.level" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
+<option id="gnu.cpp.compiler.mingw.so.debug.option.debugging.level.1357163228" name="Debug Level" superClass="gnu.cpp.compiler.mingw.so.debug.option.debugging.level" value="gnu.cpp.compiler.debugging.level.max" valueType="enumerated"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.so.debug.428547337" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.so.debug">
+<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.mingw.so.debug.option.optimization.level.1361318269" name="Optimization Level" superClass="gnu.c.compiler.mingw.so.debug.option.optimization.level" valueType="enumerated"/>
+<option id="gnu.c.compiler.mingw.so.debug.option.debugging.level.798971050" name="Debug Level" superClass="gnu.c.compiler.mingw.so.debug.option.debugging.level" value="gnu.c.debugging.level.max" valueType="enumerated"/>
+<option id="gnu.c.compiler.option.preprocessor.nostdinc.635731758" name="Do not search system directories (-nostdinc)" superClass="gnu.c.compiler.option.preprocessor.nostdinc"/>
+<option id="gnu.c.compiler.option.preprocessor.preprocess.1129104455" name="Preprocess only (-E)" superClass="gnu.c.compiler.option.preprocessor.preprocess"/>
+<option id="gnu.c.compiler.option.preprocessor.def.symbols.924940285" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols"/>
+<option id="gnu.c.compiler.option.preprocessor.undef.symbol.1996330931" name="Undefined symbols (-U)" superClass="gnu.c.compiler.option.preprocessor.undef.symbol" valueType="undefDefinedSymbols">
+<listOptionValue builtIn="false" value="_STDCALL_SUPPORTED"/>
+</option>
+<option id="gnu.c.compiler.option.include.paths.276080219" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_common}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_win}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/porttime}&quot;"/>
+</option>
+<option id="gnu.c.compiler.option.optimization.flags.1032442929" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags"/>
+<option id="gnu.c.compiler.option.debugging.other.509079500" name="Other debugging flags" superClass="gnu.c.compiler.option.debugging.other"/>
+<option id="gnu.c.compiler.option.debugging.gprof.708510440" name="Generate gprof information (-pg)" superClass="gnu.c.compiler.option.debugging.gprof"/>
+<option id="gnu.c.compiler.option.debugging.prof.1379528770" name="Generate prof information (-p)" superClass="gnu.c.compiler.option.debugging.prof"/>
+<option id="gnu.c.compiler.option.warnings.syntax.76950723" name="Check syntax only (-fsyntax-only)" superClass="gnu.c.compiler.option.warnings.syntax"/>
+<option id="gnu.c.compiler.option.warnings.pedantic.503180272" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic"/>
+<option id="gnu.c.compiler.option.warnings.pedantic.error.332437973" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error"/>
+<option id="gnu.c.compiler.option.warnings.nowarn.1830350073" name="Inhibit all warnings (-w)" superClass="gnu.c.compiler.option.warnings.nowarn"/>
+<option id="gnu.c.compiler.option.warnings.allwarn.77655170" name="All warnings (-Wall)" superClass="gnu.c.compiler.option.warnings.allwarn"/>
+<option id="gnu.c.compiler.option.warnings.toerrors.1707691615" name="Warnings as errors (-Werror)" superClass="gnu.c.compiler.option.warnings.toerrors"/>
+<option id="gnu.c.compiler.option.misc.other.1929071594" name="Other flags" superClass="gnu.c.compiler.option.misc.other"/>
+<option id="gnu.c.compiler.option.misc.verbose.1368165423" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose"/>
+<option id="gnu.c.compiler.option.misc.ansi.1130235771" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.532732416" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.so.debug.2093989251" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.so.debug">
+<option defaultValue="true" id="gnu.c.link.mingw.so.debug.option.shared.210833175" name="Shared (-shared)" superClass="gnu.c.link.mingw.so.debug.option.shared" valueType="boolean"/>
+<option id="gnu.c.link.option.nostart.1109377759" name="Do not use standard start files (-nostartfiles)" superClass="gnu.c.link.option.nostart"/>
+<option id="gnu.c.link.option.nodeflibs.1969639513" name="Do not use default libraries (-nodefaultlibs)" superClass="gnu.c.link.option.nodeflibs"/>
+<option id="gnu.c.link.option.nostdlibs.1939458836" name="No startup or default libs (-nostdlib)" superClass="gnu.c.link.option.nostdlibs"/>
+<option id="gnu.c.link.option.strip.1926939147" name="Omit all symbol information (-s)" superClass="gnu.c.link.option.strip"/>
+<option id="gnu.c.link.option.noshared.1390204753" name="No shared libraries (-static)" superClass="gnu.c.link.option.noshared"/>
+<option id="gnu.c.link.option.libs.2043660134" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="winmm"/>
+</option>
+<option id="gnu.c.link.option.paths.1702926265" name="Library search path (-L)" superClass="gnu.c.link.option.paths"/>
+<option id="gnu.c.link.option.ldflags.1184725311" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-mwindows" valueType="string"/>
+<option id="gnu.c.link.option.other.2085141015" name="Other options (-Xlinker [option])" superClass="gnu.c.link.option.other"/>
+<option id="gnu.c.link.option.userobjs.1490648701" name="Other objects" superClass="gnu.c.link.option.userobjs"/>
+<option id="gnu.c.link.option.soname.437120219" name="Shared object name (-Wl,-soname=)" superClass="gnu.c.link.option.soname" value="PortMidi.dll" valueType="string"/>
+<option id="gnu.c.link.option.implname.205634723" name="Import Library name (-Wl,--out-implib=)" superClass="gnu.c.link.option.implname" value="libPortMidi_dll.a" valueType="string"/>
+<option id="gnu.c.link.option.defname.571020719" name="DEF file name (-Wl,--output-def=)" superClass="gnu.c.link.option.defname" value="PortMidi_dll.def" valueType="string"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.916986463" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.so.debug.1822206806" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.so.debug">
+<option defaultValue="true" id="gnu.cpp.link.mingw.so.debug.option.shared.408251443" name="Shared (-shared)" superClass="gnu.cpp.link.mingw.so.debug.option.shared" valueType="boolean"/>
+</tool>
+</toolChain>
+</folderInfo>
+<sourceEntries>
+<entry excluding="pm_cl/|pm_linux/|pm_mac/|pm_test/|porttime/ptlinux.c|porttime/ptmacosx_cf.c|porttime/ptmacosx_mach.c" flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name=""/>
+</sourceEntries>
+</configuration>
+</storageModule>
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.so.release.413200248;cdt.managedbuild.config.gnu.mingw.so.release.413200248.;cdt.managedbuild.tool.gnu.c.compiler.mingw.so.release.343495978;cdt.managedbuild.tool.gnu.c.compiler.input.611335297">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.so.debug.1580321004;cdt.managedbuild.config.gnu.mingw.so.debug.1580321004.;cdt.managedbuild.tool.gnu.c.compiler.mingw.so.debug.428547337;cdt.managedbuild.tool.gnu.c.compiler.input.532732416">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+<cconfiguration id="cdt.managedbuild.config.gnu.mingw.so.release.413200248">
+<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.mingw.so.release.413200248" moduleId="org.eclipse.cdt.core.settings" name="Release">
+<externalSettings>
+<externalSetting>
+<entry flags="VALUE_WORKSPACE_PATH" kind="includePath" name="/PortMidi"/>
+<entry flags="VALUE_WORKSPACE_PATH" kind="libraryPath" name="/PortMidi/Release"/>
+</externalSetting>
+</externalSettings>
+<extensions>
+<extension id="org.eclipse.cdt.core.PE" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+</extensions>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<configuration artifactExtension="dll" artifactName="PortMidi" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.sharedLib" buildProperties="org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release,org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.sharedLib" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.mingw.so.release.413200248" name="Release" parent="cdt.managedbuild.config.gnu.mingw.so.release">
+<folderInfo id="cdt.managedbuild.config.gnu.mingw.so.release.413200248." name="/" resourcePath="">
+<toolChain id="cdt.managedbuild.toolchain.gnu.mingw.so.release.965704931" name="MinGW GCC" superClass="cdt.managedbuild.toolchain.gnu.mingw.so.release">
+<targetPlatform id="cdt.managedbuild.target.gnu.platform.mingw.so.release.1343771960" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.mingw.so.release"/>
+<builder buildPath="${workspace_loc:/PortMidi/Release}" id="cdt.managedbuild.tool.gnu.builder.mingw.base.1650720234" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="CDT Internal Builder" superClass="cdt.managedbuild.tool.gnu.builder.mingw.base"/>
+<tool id="cdt.managedbuild.tool.gnu.assembler.mingw.so.release.1392864745" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.mingw.so.release">
+<option id="gnu.both.asm.option.include.paths.591264871" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_common}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_win}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/porttime}&quot;"/>
+</option>
+<option id="gnu.both.asm.option.flags.1143807089" superClass="gnu.both.asm.option.flags"/>
+<option id="gnu.both.asm.option.warnings.nowarn.1142377463" superClass="gnu.both.asm.option.warnings.nowarn"/>
+<option id="gnu.both.asm.option.version.1007025248" superClass="gnu.both.asm.option.version"/>
+<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1754592443" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.archiver.mingw.base.503109969" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.mingw.base"/>
+<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.so.release.1693369280" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.mingw.so.release">
+<option id="gnu.cpp.compiler.mingw.so.release.option.optimization.level.1169326010" name="Optimization Level" superClass="gnu.cpp.compiler.mingw.so.release.option.optimization.level" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
+<option id="gnu.cpp.compiler.mingw.so.release.option.debugging.level.1197288488" name="Debug Level" superClass="gnu.cpp.compiler.mingw.so.release.option.debugging.level" value="gnu.cpp.compiler.debugging.level.none" valueType="enumerated"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.so.release.343495978" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.so.release">
+<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.mingw.so.release.option.optimization.level.79718900" name="Optimization Level" superClass="gnu.c.compiler.mingw.so.release.option.optimization.level" valueType="enumerated"/>
+<option id="gnu.c.compiler.mingw.so.release.option.debugging.level.778378875" name="Debug Level" superClass="gnu.c.compiler.mingw.so.release.option.debugging.level" value="gnu.c.debugging.level.none" valueType="enumerated"/>
+<option id="gnu.c.compiler.option.include.paths.140256948" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_common}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/pm_win}&quot;"/>
+<listOptionValue builtIn="false" value="&quot;${workspace_loc:/PortMidi/porttime}&quot;"/>
+</option>
+<option id="gnu.c.compiler.option.preprocessor.def.symbols.960115196" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" valueType="definedSymbols"/>
+<option id="gnu.c.compiler.option.preprocessor.undef.symbol.1891593123" name="Undefined symbols (-U)" superClass="gnu.c.compiler.option.preprocessor.undef.symbol" valueType="undefDefinedSymbols">
+<listOptionValue builtIn="false" value="_STDCALL_SUPPORTED"/>
+</option>
+<option id="gnu.c.compiler.option.preprocessor.nostdinc.824573539" name="Do not search system directories (-nostdinc)" superClass="gnu.c.compiler.option.preprocessor.nostdinc"/>
+<option id="gnu.c.compiler.option.preprocessor.preprocess.2045908914" name="Preprocess only (-E)" superClass="gnu.c.compiler.option.preprocessor.preprocess"/>
+<option id="gnu.c.compiler.option.optimization.flags.1668114371" name="Other optimization flags" superClass="gnu.c.compiler.option.optimization.flags"/>
+<option id="gnu.c.compiler.option.debugging.other.26702882" name="Other debugging flags" superClass="gnu.c.compiler.option.debugging.other"/>
+<option id="gnu.c.compiler.option.debugging.gprof.1849481872" name="Generate gprof information (-pg)" superClass="gnu.c.compiler.option.debugging.gprof"/>
+<option id="gnu.c.compiler.option.debugging.prof.370891777" name="Generate prof information (-p)" superClass="gnu.c.compiler.option.debugging.prof"/>
+<option id="gnu.c.compiler.option.warnings.syntax.814238128" name="Check syntax only (-fsyntax-only)" superClass="gnu.c.compiler.option.warnings.syntax"/>
+<option id="gnu.c.compiler.option.warnings.pedantic.1130364543" name="Pedantic (-pedantic)" superClass="gnu.c.compiler.option.warnings.pedantic"/>
+<option id="gnu.c.compiler.option.warnings.pedantic.error.1833423377" name="Pedantic warnings as errors (-pedantic-errors)" superClass="gnu.c.compiler.option.warnings.pedantic.error"/>
+<option id="gnu.c.compiler.option.warnings.nowarn.842847161" name="Inhibit all warnings (-w)" superClass="gnu.c.compiler.option.warnings.nowarn"/>
+<option id="gnu.c.compiler.option.warnings.allwarn.1245259653" name="All warnings (-Wall)" superClass="gnu.c.compiler.option.warnings.allwarn"/>
+<option id="gnu.c.compiler.option.warnings.toerrors.329299856" name="Warnings as errors (-Werror)" superClass="gnu.c.compiler.option.warnings.toerrors"/>
+<option id="gnu.c.compiler.option.misc.other.1436833008" name="Other flags" superClass="gnu.c.compiler.option.misc.other"/>
+<option id="gnu.c.compiler.option.misc.verbose.1418051288" name="Verbose (-v)" superClass="gnu.c.compiler.option.misc.verbose"/>
+<option id="gnu.c.compiler.option.misc.ansi.592723919" name="Support ANSI programs (-ansi)" superClass="gnu.c.compiler.option.misc.ansi"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.611335297" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.so.release.556134685" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.so.release">
+<option defaultValue="true" id="gnu.c.link.mingw.so.release.option.shared.1619560956" name="Shared (-shared)" superClass="gnu.c.link.mingw.so.release.option.shared" valueType="boolean"/>
+<option id="gnu.c.link.option.ldflags.1804407715" name="Linker flags" superClass="gnu.c.link.option.ldflags" value="-mwindows" valueType="string"/>
+<option id="gnu.c.link.option.soname.621315524" name="Shared object name (-Wl,-soname=)" superClass="gnu.c.link.option.soname" value="PortMidi.dll" valueType="string"/>
+<option id="gnu.c.link.option.implname.236027258" name="Import Library name (-Wl,--out-implib=)" superClass="gnu.c.link.option.implname" value="libPortMidi_dll.a" valueType="string"/>
+<option id="gnu.c.link.option.defname.1144978768" name="DEF file name (-Wl,--output-def=)" superClass="gnu.c.link.option.defname" value="PortMidi_dll.def" valueType="string"/>
+<option id="gnu.c.link.option.nostart.623404099" name="Do not use standard start files (-nostartfiles)" superClass="gnu.c.link.option.nostart"/>
+<option id="gnu.c.link.option.nodeflibs.51119036" name="Do not use default libraries (-nodefaultlibs)" superClass="gnu.c.link.option.nodeflibs"/>
+<option id="gnu.c.link.option.nostdlibs.2099774502" name="No startup or default libs (-nostdlib)" superClass="gnu.c.link.option.nostdlibs"/>
+<option id="gnu.c.link.option.strip.1270839234" name="Omit all symbol information (-s)" superClass="gnu.c.link.option.strip"/>
+<option id="gnu.c.link.option.noshared.715377715" name="No shared libraries (-static)" superClass="gnu.c.link.option.noshared"/>
+<option id="gnu.c.link.option.libs.246748928" name="Libraries (-l)" superClass="gnu.c.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="winmm"/>
+</option>
+<option id="gnu.c.link.option.paths.1166408208" name="Library search path (-L)" superClass="gnu.c.link.option.paths"/>
+<option id="gnu.c.link.option.other.1932058041" name="Other options (-Xlinker [option])" superClass="gnu.c.link.option.other"/>
+<option id="gnu.c.link.option.userobjs.1397357824" name="Other objects" superClass="gnu.c.link.option.userobjs"/>
+<inputType id="cdt.managedbuild.tool.gnu.c.linker.input.363448189" superClass="cdt.managedbuild.tool.gnu.c.linker.input">
+<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
+<additionalInput kind="additionalinput" paths="$(LIBS)"/>
+</inputType>
+</tool>
+<tool id="cdt.managedbuild.tool.gnu.cpp.linker.mingw.so.release.1088983873" name="MinGW C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.mingw.so.release">
+<option defaultValue="true" id="gnu.cpp.link.mingw.so.release.option.shared.2023092585" name="Shared (-shared)" superClass="gnu.cpp.link.mingw.so.release.option.shared" valueType="boolean"/>
+</tool>
+</toolChain>
+</folderInfo>
+<sourceEntries>
+<entry excluding="pm_cl/|pm_linux/|pm_mac/|pm_test/|porttime/ptlinux.c|porttime/ptmacosx_cf.c|porttime/ptmacosx_mach.c" flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name=""/>
+</sourceEntries>
+</configuration>
+</storageModule>
+<storageModule moduleId="scannerConfiguration">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.so.release.413200248;cdt.managedbuild.config.gnu.mingw.so.release.413200248.;cdt.managedbuild.tool.gnu.c.compiler.mingw.so.release.343495978;cdt.managedbuild.tool.gnu.c.compiler.input.611335297">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.mingw.so.debug.1580321004;cdt.managedbuild.config.gnu.mingw.so.debug.1580321004.;cdt.managedbuild.tool.gnu.c.compiler.mingw.so.debug.428547337;cdt.managedbuild.tool.gnu.c.compiler.input.532732416">
+<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC"/>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="makefileGenerator">
+<runAction arguments="-f ${project_name}_scd.mk" command="make" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileCPP">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.cpp" command="g++" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+<profile id="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfileC">
+<buildOutputProvider>
+<openAction enabled="true" filePath=""/>
+<parser enabled="true"/>
+</buildOutputProvider>
+<scannerInfoProvider id="specsFile">
+<runAction arguments="-E -P -v -dD ${plugin_state_location}/specs.c" command="gcc" useDefault="true"/>
+<parser enabled="true"/>
+</scannerInfoProvider>
+</profile>
+</scannerConfigBuildInfo>
+</storageModule>
+<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+<storageModule moduleId="org.eclipse.cdt.core.language.mapping"/>
+</cconfiguration>
+</storageModule>
+<storageModule moduleId="cdtBuildSystem" version="4.0.0">
+<project id="PortMidi.cdt.managedbuild.target.gnu.mingw.so.812075522" name="Shared Library" projectType="cdt.managedbuild.target.gnu.mingw.so"/>
+</storageModule>
+</cproject>
diff --git a/pd/portmidi/pm_mingw/eclipse/dot-project b/pd/portmidi/pm_mingw/eclipse/dot-project
new file mode 100644
index 000000000..6a3994f6f
--- /dev/null
+++ b/pd/portmidi/pm_mingw/eclipse/dot-project
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>PortMidi</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.contents</key>
+					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildLocation</key>
+					<value>${workspace_loc:/PortMidi/Debug}</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.append_environment</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>?name?</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.stopOnError</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildArguments</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.buildCommand</key>
+					<value>make</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+		<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+	</natures>
+</projectDescription>
diff --git a/pd/portmidi/pm_mingw/msys/README-MSYS.txt b/pd/portmidi/pm_mingw/msys/README-MSYS.txt
new file mode 100644
index 000000000..6f3cd69da
--- /dev/null
+++ b/pd/portmidi/pm_mingw/msys/README-MSYS.txt
@@ -0,0 +1,8 @@
+Old code was removed from this directory because CMake provides an
+up-to-date way to use MinGW. See portmidi/pm_mingw/README-MINGW.txt.
+
+Roger Dannenberg
+20-Sep-2010
+
+
+
diff --git a/pd/portmidi/pm_python/README_PYTHON.txt b/pd/portmidi/pm_python/README_PYTHON.txt
new file mode 100644
index 000000000..3030dd2d6
--- /dev/null
+++ b/pd/portmidi/pm_python/README_PYTHON.txt
@@ -0,0 +1,34 @@
+PyPortMidi v0.03 03/15/05
+Python wrappings for PortMidi
+John Harrison
+harrison@media.mit.edu
+
+Modified by Roger B. Dannenberg, Nov 2009
+
+PyPortMidi
+----------
+
+PyPortMidi is a Python wrapper for PortMidi. PortMidi is a cross-platform
+C library for realtime MIDI control. Using PyPortMidi, you can send and
+receive MIDI data in realtime from Python.
+
+Besides using PyPortMidi to communicate to synthesizers and the
+like, it is possible to use PyPortMidi as a way to send MIDI messages
+between software packages on the same computer. For example, Using
+PyPortMidi and MIDI-YOKE on a Windows machine, it is possible to send
+realtime MIDI messages between programs on the same computer using
+loopback virtual MIDI ports. (At this time, MIDI-YOKE does not appear
+to run on Windows Vista.)
+
+PyPortMidi is cross-platform, but it will require some small
+changes in the setup.py file for it to install correctly on Linux
+machines. The changes should be pretty straightforward, and I am
+anxious to work with a Linux user on the port.
+
+PyPortMidi works with Python 2.6 and Python 3.1, although the ports
+are mostly separate because of various language incompatibilities.
+
+Please see README26.txt for information about the Python 2.6 version.
+
+See README31.txt for information about the Python 3.1 version.
+
diff --git a/pd/portmidi/pm_python/pyportmidi/__init__.py b/pd/portmidi/pm_python/pyportmidi/__init__.py
new file mode 100644
index 000000000..0f3fc4b44
--- /dev/null
+++ b/pd/portmidi/pm_python/pyportmidi/__init__.py
@@ -0,0 +1,3 @@
+
+from .midi import *
+
diff --git a/pd/portmidi/pm_python/pyportmidi/_pyportmidi.c b/pd/portmidi/pm_python/pyportmidi/_pyportmidi.c
new file mode 100644
index 000000000..7d700349e
--- /dev/null
+++ b/pd/portmidi/pm_python/pyportmidi/_pyportmidi.c
@@ -0,0 +1,5663 @@
+/* Generated by Cython 0.12.1 on Sun Sep 26 13:30:09 2010 */
+
+#define PY_SSIZE_T_CLEAN
+#include "Python.h"
+#include "structmember.h"
+#ifndef Py_PYTHON_H
+    #error Python headers needed to compile C extensions, please install development version of Python.
+#else
+
+#ifndef PY_LONG_LONG
+  #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef DL_EXPORT
+  #define DL_EXPORT(t) t
+#endif
+#if PY_VERSION_HEX < 0x02040000
+  #define METH_COEXIST 0
+  #define PyDict_CheckExact(op) (Py_TYPE(op) == &PyDict_Type)
+  #define PyDict_Contains(d,o)   PySequence_Contains(d,o)
+#endif
+
+#if PY_VERSION_HEX < 0x02050000
+  typedef int Py_ssize_t;
+  #define PY_SSIZE_T_MAX INT_MAX
+  #define PY_SSIZE_T_MIN INT_MIN
+  #define PY_FORMAT_SIZE_T ""
+  #define PyInt_FromSsize_t(z) PyInt_FromLong(z)
+  #define PyInt_AsSsize_t(o)   PyInt_AsLong(o)
+  #define PyNumber_Index(o)    PyNumber_Int(o)
+  #define PyIndex_Check(o)     PyNumber_Check(o)
+  #define PyErr_WarnEx(category, message, stacklevel) PyErr_Warn(category, message)
+#endif
+
+#if PY_VERSION_HEX < 0x02060000
+  #define Py_REFCNT(ob) (((PyObject*)(ob))->ob_refcnt)
+  #define Py_TYPE(ob)   (((PyObject*)(ob))->ob_type)
+  #define Py_SIZE(ob)   (((PyVarObject*)(ob))->ob_size)
+  #define PyVarObject_HEAD_INIT(type, size) \
+          PyObject_HEAD_INIT(type) size,
+  #define PyType_Modified(t)
+
+  typedef struct {
+     void *buf;
+     PyObject *obj;
+     Py_ssize_t len;
+     Py_ssize_t itemsize;
+     int readonly;
+     int ndim;
+     char *format;
+     Py_ssize_t *shape;
+     Py_ssize_t *strides;
+     Py_ssize_t *suboffsets;
+     void *internal;
+  } Py_buffer;
+
+  #define PyBUF_SIMPLE 0
+  #define PyBUF_WRITABLE 0x0001
+  #define PyBUF_FORMAT 0x0004
+  #define PyBUF_ND 0x0008
+  #define PyBUF_STRIDES (0x0010 | PyBUF_ND)
+  #define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
+  #define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
+  #define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
+  #define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
+
+#endif
+
+#if PY_MAJOR_VERSION < 3
+  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+#else
+  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define Py_TPFLAGS_CHECKTYPES 0
+  #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+
+#if (PY_VERSION_HEX < 0x02060000) || (PY_MAJOR_VERSION >= 3)
+  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define PyBaseString_Type            PyUnicode_Type
+  #define PyString_Type                PyUnicode_Type
+  #define PyString_CheckExact          PyUnicode_CheckExact
+#else
+  #define PyBytes_Type                 PyString_Type
+  #define PyBytes_CheckExact           PyString_CheckExact
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define PyInt_Type                   PyLong_Type
+  #define PyInt_Check(op)              PyLong_Check(op)
+  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
+  #define PyInt_FromString             PyLong_FromString
+  #define PyInt_FromUnicode            PyLong_FromUnicode
+  #define PyInt_FromLong               PyLong_FromLong
+  #define PyInt_FromSize_t             PyLong_FromSize_t
+  #define PyInt_FromSsize_t            PyLong_FromSsize_t
+  #define PyInt_AsLong                 PyLong_AsLong
+  #define PyInt_AS_LONG                PyLong_AS_LONG
+  #define PyInt_AsSsize_t              PyLong_AsSsize_t
+  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
+  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+
+#endif
+
+#if PY_MAJOR_VERSION >= 3
+  #define PyMethod_New(func, self, klass) PyInstanceMethod_New(func)
+#endif
+
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+  #ifndef __stdcall
+    #define __stdcall
+  #endif
+  #ifndef __cdecl
+    #define __cdecl
+  #endif
+  #ifndef __fastcall
+    #define __fastcall
+  #endif
+#else
+  #define _USE_MATH_DEFINES
+#endif
+
+#if PY_VERSION_HEX < 0x02050000
+  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),((char *)(n)))
+  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),((char *)(n)),(a))
+  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),((char *)(n)))
+#else
+  #define __Pyx_GetAttrString(o,n)   PyObject_GetAttrString((o),(n))
+  #define __Pyx_SetAttrString(o,n,a) PyObject_SetAttrString((o),(n),(a))
+  #define __Pyx_DelAttrString(o,n)   PyObject_DelAttrString((o),(n))
+#endif
+
+#if PY_VERSION_HEX < 0x02050000
+  #define __Pyx_NAMESTR(n) ((char *)(n))
+  #define __Pyx_DOCSTR(n)  ((char *)(n))
+#else
+  #define __Pyx_NAMESTR(n) (n)
+  #define __Pyx_DOCSTR(n)  (n)
+#endif
+#ifdef __cplusplus
+#define __PYX_EXTERN_C extern "C"
+#else
+#define __PYX_EXTERN_C extern
+#endif
+#include <math.h>
+#define __PYX_HAVE_API___pyportmidi
+#include "portmidi.h"
+#include "porttime.h"
+
+#ifndef CYTHON_INLINE
+  #if defined(__GNUC__)
+    #define CYTHON_INLINE __inline__
+  #elif defined(_MSC_VER)
+    #define CYTHON_INLINE __inline
+  #else
+    #define CYTHON_INLINE 
+  #endif
+#endif
+
+typedef struct {PyObject **p; char *s; const long n; const char* encoding; const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; /*proto*/
+
+
+/* Type Conversion Predeclarations */
+
+#if PY_MAJOR_VERSION < 3
+#define __Pyx_PyBytes_FromString          PyString_FromString
+#define __Pyx_PyBytes_FromStringAndSize   PyString_FromStringAndSize
+#define __Pyx_PyBytes_AsString            PyString_AsString
+#else
+#define __Pyx_PyBytes_FromString          PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize   PyBytes_FromStringAndSize
+#define __Pyx_PyBytes_AsString            PyBytes_AsString
+#endif
+
+#define __Pyx_PyBytes_FromUString(s)      __Pyx_PyBytes_FromString((char*)s)
+#define __Pyx_PyBytes_AsUString(s)        ((unsigned char*) __Pyx_PyBytes_AsString(s))
+
+#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
+
+#if !defined(T_PYSSIZET)
+#if PY_VERSION_HEX < 0x02050000
+#define T_PYSSIZET T_INT
+#elif !defined(T_LONGLONG)
+#define T_PYSSIZET \
+        ((sizeof(Py_ssize_t) == sizeof(int))  ? T_INT  : \
+        ((sizeof(Py_ssize_t) == sizeof(long)) ? T_LONG : -1))
+#else
+#define T_PYSSIZET \
+        ((sizeof(Py_ssize_t) == sizeof(int))          ? T_INT      : \
+        ((sizeof(Py_ssize_t) == sizeof(long))         ? T_LONG     : \
+        ((sizeof(Py_ssize_t) == sizeof(PY_LONG_LONG)) ? T_LONGLONG : -1)))
+#endif
+#endif
+
+
+#if !defined(T_ULONGLONG)
+#define __Pyx_T_UNSIGNED_INT(x) \
+        ((sizeof(x) == sizeof(unsigned char))  ? T_UBYTE : \
+        ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \
+        ((sizeof(x) == sizeof(unsigned int))   ? T_UINT : \
+        ((sizeof(x) == sizeof(unsigned long))  ? T_ULONG : -1))))
+#else
+#define __Pyx_T_UNSIGNED_INT(x) \
+        ((sizeof(x) == sizeof(unsigned char))  ? T_UBYTE : \
+        ((sizeof(x) == sizeof(unsigned short)) ? T_USHORT : \
+        ((sizeof(x) == sizeof(unsigned int))   ? T_UINT : \
+        ((sizeof(x) == sizeof(unsigned long))  ? T_ULONG : \
+        ((sizeof(x) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1)))))
+#endif
+#if !defined(T_LONGLONG)
+#define __Pyx_T_SIGNED_INT(x) \
+        ((sizeof(x) == sizeof(char))  ? T_BYTE : \
+        ((sizeof(x) == sizeof(short)) ? T_SHORT : \
+        ((sizeof(x) == sizeof(int))   ? T_INT : \
+        ((sizeof(x) == sizeof(long))  ? T_LONG : -1))))
+#else
+#define __Pyx_T_SIGNED_INT(x) \
+        ((sizeof(x) == sizeof(char))  ? T_BYTE : \
+        ((sizeof(x) == sizeof(short)) ? T_SHORT : \
+        ((sizeof(x) == sizeof(int))   ? T_INT : \
+        ((sizeof(x) == sizeof(long))  ? T_LONG : \
+        ((sizeof(x) == sizeof(PY_LONG_LONG))   ? T_LONGLONG : -1)))))
+#endif
+
+#define __Pyx_T_FLOATING(x) \
+        ((sizeof(x) == sizeof(float)) ? T_FLOAT : \
+        ((sizeof(x) == sizeof(double)) ? T_DOUBLE : -1))
+
+#if !defined(T_SIZET)
+#if !defined(T_ULONGLONG)
+#define T_SIZET \
+        ((sizeof(size_t) == sizeof(unsigned int))  ? T_UINT  : \
+        ((sizeof(size_t) == sizeof(unsigned long)) ? T_ULONG : -1))
+#else
+#define T_SIZET \
+        ((sizeof(size_t) == sizeof(unsigned int))          ? T_UINT      : \
+        ((sizeof(size_t) == sizeof(unsigned long))         ? T_ULONG     : \
+        ((sizeof(size_t) == sizeof(unsigned PY_LONG_LONG)) ? T_ULONGLONG : -1)))
+#endif
+#endif
+
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject*);
+
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+
+
+#ifdef __GNUC__
+/* Test for GCC > 2.95 */
+#if __GNUC__ > 2 ||               (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)) 
+#define likely(x)   __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* __GNUC__ > 2 ... */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ > 2 ... */
+#else /* __GNUC__ */
+#define likely(x)   (x)
+#define unlikely(x) (x)
+#endif /* __GNUC__ */
+    
+static PyObject *__pyx_m;
+static PyObject *__pyx_b;
+static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+static const char **__pyx_f;
+
+
+/* Type declarations */
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":394
+ * 
+ * 
+ * cdef class Input:             # <<<<<<<<<<<<<<
+ *     """
+ * class Input:
+ */
+
+struct __pyx_obj_11_pyportmidi_Input {
+  PyObject_HEAD
+  PmStream *midi;
+  int debug;
+  int i;
+};
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":201
+ *     return Pm_Channel(chan-1)
+ * 
+ * cdef class Output:             # <<<<<<<<<<<<<<
+ *     """
+ * class Output:
+ */
+
+struct __pyx_obj_11_pyportmidi_Output {
+  PyObject_HEAD
+  int i;
+  PmStream *midi;
+  int debug;
+  int _aborted;
+};
+
+#ifndef CYTHON_REFNANNY
+  #define CYTHON_REFNANNY 0
+#endif
+
+#if CYTHON_REFNANNY
+  typedef struct {
+    void (*INCREF)(void*, PyObject*, int);
+    void (*DECREF)(void*, PyObject*, int);
+    void (*GOTREF)(void*, PyObject*, int);
+    void (*GIVEREF)(void*, PyObject*, int);
+    void* (*SetupContext)(const char*, int, const char*);
+    void (*FinishContext)(void**);
+  } __Pyx_RefNannyAPIStruct;
+  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+  static __Pyx_RefNannyAPIStruct * __Pyx_RefNannyImportAPI(const char *modname) {
+    PyObject *m = NULL, *p = NULL;
+    void *r = NULL;
+    m = PyImport_ImportModule((char *)modname);
+    if (!m) goto end;
+    p = PyObject_GetAttrString(m, (char *)"RefNannyAPI");
+    if (!p) goto end;
+    r = PyLong_AsVoidPtr(p);
+  end:
+    Py_XDECREF(p);
+    Py_XDECREF(m);
+    return (__Pyx_RefNannyAPIStruct *)r;
+  }
+  #define __Pyx_RefNannySetupContext(name)           void *__pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+  #define __Pyx_RefNannyFinishContext()           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+  #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+  #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r);} } while(0)
+#else
+  #define __Pyx_RefNannySetupContext(name)
+  #define __Pyx_RefNannyFinishContext()
+  #define __Pyx_INCREF(r) Py_INCREF(r)
+  #define __Pyx_DECREF(r) Py_DECREF(r)
+  #define __Pyx_GOTREF(r)
+  #define __Pyx_GIVEREF(r)
+  #define __Pyx_XDECREF(r) Py_XDECREF(r)
+#endif /* CYTHON_REFNANNY */
+#define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);} } while(0)
+#define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r);} } while(0)
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name, PyObject* kw_name); /*proto*/
+
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); /*proto*/
+
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,     const char* function_name); /*proto*/
+
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    PyObject *r;
+    if (!j) return NULL;
+    r = PyObject_GetItem(o, j);
+    Py_DECREF(j);
+    return r;
+}
+
+
+#define __Pyx_GetItemInt_List(o, i, size, to_py_func) ((size <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_List_Fast(o, i, size <= sizeof(long)) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, int fits_long) {
+    if (likely(o != Py_None)) {
+        if (likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+            PyObject *r = PyList_GET_ITEM(o, i);
+            Py_INCREF(r);
+            return r;
+        }
+        else if ((-PyList_GET_SIZE(o) <= i) & (i < 0)) {
+            PyObject *r = PyList_GET_ITEM(o, PyList_GET_SIZE(o) + i);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    return __Pyx_GetItemInt_Generic(o, fits_long ? PyInt_FromLong(i) : PyLong_FromLongLong(i));
+}
+
+#define __Pyx_GetItemInt_Tuple(o, i, size, to_py_func) ((size <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_Tuple_Fast(o, i, size <= sizeof(long)) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, int fits_long) {
+    if (likely(o != Py_None)) {
+        if (likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+            PyObject *r = PyTuple_GET_ITEM(o, i);
+            Py_INCREF(r);
+            return r;
+        }
+        else if ((-PyTuple_GET_SIZE(o) <= i) & (i < 0)) {
+            PyObject *r = PyTuple_GET_ITEM(o, PyTuple_GET_SIZE(o) + i);
+            Py_INCREF(r);
+            return r;
+        }
+    }
+    return __Pyx_GetItemInt_Generic(o, fits_long ? PyInt_FromLong(i) : PyLong_FromLongLong(i));
+}
+
+
+#define __Pyx_GetItemInt(o, i, size, to_py_func) ((size <= sizeof(Py_ssize_t)) ? \
+                                                    __Pyx_GetItemInt_Fast(o, i, size <= sizeof(long)) : \
+                                                    __Pyx_GetItemInt_Generic(o, to_py_func(i)))
+
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int fits_long) {
+    PyObject *r;
+    if (PyList_CheckExact(o) && ((0 <= i) & (i < PyList_GET_SIZE(o)))) {
+        r = PyList_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (PyTuple_CheckExact(o) && ((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
+        r = PyTuple_GET_ITEM(o, i);
+        Py_INCREF(r);
+    }
+    else if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_item && (likely(i >= 0))) {
+        r = PySequence_GetItem(o, i);
+    }
+    else {
+        r = __Pyx_GetItemInt_Generic(o, fits_long ? PyInt_FromLong(i) : PyLong_FromLongLong(i));
+    }
+    return r;
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
+    if (likely(PyList_CheckExact(L))) {
+        if (PyList_Append(L, x) < 0) return NULL;
+        Py_INCREF(Py_None);
+        return Py_None; /* this is just to have an accurate signature */
+    }
+    else {
+        PyObject *r, *m;
+        m = __Pyx_GetAttrString(L, "append");
+        if (!m) return NULL;
+        r = PyObject_CallFunctionObjArgs(m, x, NULL);
+        Py_DECREF(m);
+        return r;
+    }
+}
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PmDeviceID(PmDeviceID);
+
+static CYTHON_INLINE PmDeviceID __Pyx_PyInt_from_py_PmDeviceID(PyObject *);
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PtTimestamp(PtTimestamp);
+
+static int __Pyx_Print(PyObject *, int); /*proto*/
+#if PY_MAJOR_VERSION >= 3
+static PyObject* __pyx_print = 0;
+static PyObject* __pyx_print_kwargs = 0;
+#endif
+
+static int __Pyx_PrintOne(PyObject *o); /*proto*/
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/
+
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PmMessage(PmMessage);
+
+static CYTHON_INLINE PmMessage __Pyx_PyInt_from_py_PmMessage(PyObject *);
+
+static CYTHON_INLINE PmTimestamp __Pyx_PyInt_from_py_PmTimestamp(PyObject *);
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PmTimestamp(PmTimestamp);
+
+static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject *);
+
+static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject *);
+
+static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject *);
+
+static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject *);
+
+static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject *);
+
+static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject *);
+
+static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject *);
+
+static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject *);
+
+static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject *);
+
+static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject *);
+
+static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject *);
+
+static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject *);
+
+static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject *);
+
+static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject *);
+
+static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject *);
+
+static void __Pyx_AddTraceback(const char *funcname); /*proto*/
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
+/* Module declarations from _pyportmidi */
+
+static PyTypeObject *__pyx_ptype_11_pyportmidi_Output = 0;
+static PyTypeObject *__pyx_ptype_11_pyportmidi_Input = 0;
+#define __Pyx_MODULE_NAME "_pyportmidi"
+int __pyx_module_is_main__pyportmidi = 0;
+
+/* Implementation of _pyportmidi */
+static PyObject *__pyx_builtin_Exception;
+static PyObject *__pyx_builtin_IndexError;
+static PyObject *__pyx_builtin_range;
+static char __pyx_k_1[] = "Opening Midi Output";
+static char __pyx_k_2[] = "Unable to open Midi OutputDevice=";
+static char __pyx_k_3[] = " err=";
+static char __pyx_k_4[] = "Closing MIDI output stream and destroying instance";
+static char __pyx_k_5[] = "midi Output not open.";
+static char __pyx_k_6[] = "midi Output aborted.  Need to call Close after Abort.";
+static char __pyx_k_7[] = "maximum list length is 1024";
+static char __pyx_k_8[] = " arguments in event list";
+static char __pyx_k_9[] = " : ";
+static char __pyx_k_10[] = "writing to midi buffer";
+static char __pyx_k_11[] = "Writing to MIDI buffer";
+static char __pyx_k_12[] = "MIDI input opened.";
+static char __pyx_k_13[] = "Closing MIDI input stream and destroying instance";
+static char __pyx_k_14[] = "midi Input not open.";
+static char __pyx_k_15[] = "maximum buffer length is 1024";
+static char __pyx_k_16[] = "minimum buffer length is 1";
+static char __pyx_k_17[] = "0.07";
+static char __pyx_k_18[] = "FILT_CHANNEL_AFTERTOUCH";
+static char __pyx_k_19[] = "FILT_POLY_AFTERTOUCH";
+static char __pyx_k_20[] = "Initialize (line 132)";
+static char __pyx_k_21[] = "Terminate (line 139)";
+static char __pyx_k_22[] = "GetDeviceInfo (line 156)";
+static char __pyx_k_23[] = "Time (line 173)";
+static char __pyx_k_24[] = "GetErrorText (line 180)";
+static char __pyx_k_25[] = "Channel (line 187)";
+static char __pyx_k_26[] = "Output._check_open (line 248)";
+static char __pyx_k_27[] = "Output.Close (line 258)";
+static char __pyx_k_28[] = "Output.Abort (line 274)";
+static char __pyx_k_29[] = "Output.Write (line 293)";
+static char __pyx_k_30[] = "Output.WriteShort (line 333)";
+static char __pyx_k_31[] = "Output.WriteSysEx (line 356)";
+static char __pyx_k_32[] = "Input._check_open (line 422)";
+static char __pyx_k_33[] = "Input.Close (line 430)";
+static char __pyx_k_34[] = "Input.SetFilter (line 447)";
+static char __pyx_k_35[] = "Input.SetChannelMask (line 481)";
+static char __pyx_k_36[] = "Input.Poll (line 502)";
+static char __pyx_k_37[] = "Input.Read (line 514)";
+static char __pyx_k__B[] = "B";
+static char __pyx_k__i[] = "i";
+static char __pyx_k__msg[] = "msg";
+static char __pyx_k__Poll[] = "Poll";
+static char __pyx_k__Read[] = "Read";
+static char __pyx_k__TRUE[] = "TRUE";
+static char __pyx_k__Time[] = "Time";
+static char __pyx_k__midi[] = "midi";
+static char __pyx_k__name[] = "name";
+static char __pyx_k__when[] = "when";
+static char __pyx_k__Abort[] = "Abort";
+static char __pyx_k__Close[] = "Close";
+static char __pyx_k__FALSE[] = "FALSE";
+static char __pyx_k__Input[] = "Input";
+static char __pyx_k__Write[] = "Write";
+static char __pyx_k__array[] = "array";
+static char __pyx_k__data1[] = "data1";
+static char __pyx_k__data2[] = "data2";
+static char __pyx_k__debug[] = "debug";
+static char __pyx_k__input[] = "input";
+static char __pyx_k__range[] = "range";
+static char __pyx_k__Output[] = "Output";
+static char __pyx_k__interf[] = "interf";
+static char __pyx_k__opened[] = "opened";
+static char __pyx_k__output[] = "output";
+static char __pyx_k__status[] = "status";
+static char __pyx_k__Channel[] = "Channel";
+static char __pyx_k__FILT_F9[] = "FILT_F9";
+static char __pyx_k__FILT_FD[] = "FILT_FD";
+static char __pyx_k__latency[] = "latency";
+static char __pyx_k__message[] = "message";
+static char __pyx_k__FILT_MTC[] = "FILT_MTC";
+static char __pyx_k____main__[] = "__main__";
+static char __pyx_k____test__[] = "__test__";
+static char __pyx_k___aborted[] = "_aborted";
+static char __pyx_k__tostring[] = "tostring";
+static char __pyx_k__Exception[] = "Exception";
+static char __pyx_k__FILT_NOTE[] = "FILT_NOTE";
+static char __pyx_k__FILT_PLAY[] = "FILT_PLAY";
+static char __pyx_k__FILT_TICK[] = "FILT_TICK";
+static char __pyx_k__FILT_TUNE[] = "FILT_TUNE";
+static char __pyx_k__SetFilter[] = "SetFilter";
+static char __pyx_k__Terminate[] = "Terminate";
+static char __pyx_k__timestamp[] = "timestamp";
+static char __pyx_k__FILT_CLOCK[] = "FILT_CLOCK";
+static char __pyx_k__FILT_RESET[] = "FILT_RESET";
+static char __pyx_k__FILT_SYSEX[] = "FILT_SYSEX";
+static char __pyx_k__IndexError[] = "IndexError";
+static char __pyx_k__Initialize[] = "Initialize";
+static char __pyx_k__WriteShort[] = "WriteShort";
+static char __pyx_k__WriteSysEx[] = "WriteSysEx";
+static char __pyx_k__buffersize[] = "buffersize";
+static char __pyx_k__FILT_ACTIVE[] = "FILT_ACTIVE";
+static char __pyx_k__InputDevice[] = "InputDevice";
+static char __pyx_k____version__[] = "__version__";
+static char __pyx_k___check_open[] = "_check_open";
+static char __pyx_k__FILT_CONTROL[] = "FILT_CONTROL";
+static char __pyx_k__FILT_PROGRAM[] = "FILT_PROGRAM";
+static char __pyx_k__GetErrorText[] = "GetErrorText";
+static char __pyx_k__OutputDevice[] = "OutputDevice";
+static char __pyx_k__FILT_REALTIME[] = "FILT_REALTIME";
+static char __pyx_k__GetDeviceInfo[] = "GetDeviceInfo";
+static char __pyx_k__FILT_PITCHBEND[] = "FILT_PITCHBEND";
+static char __pyx_k__FILT_UNDEFINED[] = "FILT_UNDEFINED";
+static char __pyx_k__SetChannelMask[] = "SetChannelMask";
+static char __pyx_k__FILT_AFTERTOUCH[] = "FILT_AFTERTOUCH";
+static char __pyx_k__FILT_SONG_SELECT[] = "FILT_SONG_SELECT";
+static char __pyx_k__FILT_SONG_POSITION[] = "FILT_SONG_POSITION";
+static PyObject *__pyx_kp_s_1;
+static PyObject *__pyx_kp_s_10;
+static PyObject *__pyx_kp_s_11;
+static PyObject *__pyx_kp_s_12;
+static PyObject *__pyx_kp_s_13;
+static PyObject *__pyx_kp_s_14;
+static PyObject *__pyx_kp_s_15;
+static PyObject *__pyx_kp_s_16;
+static PyObject *__pyx_kp_s_17;
+static PyObject *__pyx_n_s_18;
+static PyObject *__pyx_n_s_19;
+static PyObject *__pyx_kp_s_2;
+static PyObject *__pyx_kp_u_20;
+static PyObject *__pyx_kp_u_21;
+static PyObject *__pyx_kp_u_22;
+static PyObject *__pyx_kp_u_23;
+static PyObject *__pyx_kp_u_24;
+static PyObject *__pyx_kp_u_25;
+static PyObject *__pyx_kp_u_26;
+static PyObject *__pyx_kp_u_27;
+static PyObject *__pyx_kp_u_28;
+static PyObject *__pyx_kp_u_29;
+static PyObject *__pyx_kp_s_3;
+static PyObject *__pyx_kp_u_30;
+static PyObject *__pyx_kp_u_31;
+static PyObject *__pyx_kp_u_32;
+static PyObject *__pyx_kp_u_33;
+static PyObject *__pyx_kp_u_34;
+static PyObject *__pyx_kp_u_35;
+static PyObject *__pyx_kp_u_36;
+static PyObject *__pyx_kp_u_37;
+static PyObject *__pyx_kp_s_4;
+static PyObject *__pyx_kp_s_5;
+static PyObject *__pyx_kp_s_6;
+static PyObject *__pyx_kp_s_7;
+static PyObject *__pyx_kp_s_8;
+static PyObject *__pyx_kp_s_9;
+static PyObject *__pyx_n_s__Abort;
+static PyObject *__pyx_n_s__B;
+static PyObject *__pyx_n_s__Channel;
+static PyObject *__pyx_n_s__Close;
+static PyObject *__pyx_n_s__Exception;
+static PyObject *__pyx_n_s__FALSE;
+static PyObject *__pyx_n_s__FILT_ACTIVE;
+static PyObject *__pyx_n_s__FILT_AFTERTOUCH;
+static PyObject *__pyx_n_s__FILT_CLOCK;
+static PyObject *__pyx_n_s__FILT_CONTROL;
+static PyObject *__pyx_n_s__FILT_F9;
+static PyObject *__pyx_n_s__FILT_FD;
+static PyObject *__pyx_n_s__FILT_MTC;
+static PyObject *__pyx_n_s__FILT_NOTE;
+static PyObject *__pyx_n_s__FILT_PITCHBEND;
+static PyObject *__pyx_n_s__FILT_PLAY;
+static PyObject *__pyx_n_s__FILT_PROGRAM;
+static PyObject *__pyx_n_s__FILT_REALTIME;
+static PyObject *__pyx_n_s__FILT_RESET;
+static PyObject *__pyx_n_s__FILT_SONG_POSITION;
+static PyObject *__pyx_n_s__FILT_SONG_SELECT;
+static PyObject *__pyx_n_s__FILT_SYSEX;
+static PyObject *__pyx_n_s__FILT_TICK;
+static PyObject *__pyx_n_s__FILT_TUNE;
+static PyObject *__pyx_n_s__FILT_UNDEFINED;
+static PyObject *__pyx_n_s__GetDeviceInfo;
+static PyObject *__pyx_n_s__GetErrorText;
+static PyObject *__pyx_n_s__IndexError;
+static PyObject *__pyx_n_s__Initialize;
+static PyObject *__pyx_n_s__Input;
+static PyObject *__pyx_n_s__InputDevice;
+static PyObject *__pyx_n_s__Output;
+static PyObject *__pyx_n_s__OutputDevice;
+static PyObject *__pyx_n_s__Poll;
+static PyObject *__pyx_n_s__Read;
+static PyObject *__pyx_n_s__SetChannelMask;
+static PyObject *__pyx_n_s__SetFilter;
+static PyObject *__pyx_n_s__TRUE;
+static PyObject *__pyx_n_s__Terminate;
+static PyObject *__pyx_n_s__Time;
+static PyObject *__pyx_n_s__Write;
+static PyObject *__pyx_n_s__WriteShort;
+static PyObject *__pyx_n_s__WriteSysEx;
+static PyObject *__pyx_n_s____main__;
+static PyObject *__pyx_n_s____test__;
+static PyObject *__pyx_n_s____version__;
+static PyObject *__pyx_n_s___aborted;
+static PyObject *__pyx_n_s___check_open;
+static PyObject *__pyx_n_s__array;
+static PyObject *__pyx_n_s__buffersize;
+static PyObject *__pyx_n_s__data1;
+static PyObject *__pyx_n_s__data2;
+static PyObject *__pyx_n_s__debug;
+static PyObject *__pyx_n_s__i;
+static PyObject *__pyx_n_s__input;
+static PyObject *__pyx_n_s__interf;
+static PyObject *__pyx_n_s__latency;
+static PyObject *__pyx_n_s__message;
+static PyObject *__pyx_n_s__midi;
+static PyObject *__pyx_n_s__msg;
+static PyObject *__pyx_n_s__name;
+static PyObject *__pyx_n_s__opened;
+static PyObject *__pyx_n_s__output;
+static PyObject *__pyx_n_s__range;
+static PyObject *__pyx_n_s__status;
+static PyObject *__pyx_n_s__timestamp;
+static PyObject *__pyx_n_s__tostring;
+static PyObject *__pyx_n_s__when;
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_8;
+static PyObject *__pyx_int_16;
+static PyObject *__pyx_int_0x1;
+static PyObject *__pyx_int_0x2;
+static PyObject *__pyx_int_0x4;
+static PyObject *__pyx_int_0x8;
+static PyObject *__pyx_int_0x10;
+static PyObject *__pyx_int_0x20;
+static PyObject *__pyx_int_0x30;
+static PyObject *__pyx_int_0x40;
+static PyObject *__pyx_int_0x7F;
+static PyObject *__pyx_int_0x80;
+static PyObject *__pyx_int_0xFF;
+static PyObject *__pyx_int_1024;
+static PyObject *__pyx_int_4096;
+static PyObject *__pyx_int_0x100;
+static PyObject *__pyx_int_0x200;
+static PyObject *__pyx_int_0x300;
+static PyObject *__pyx_int_0x400;
+static PyObject *__pyx_int_0x800;
+static PyObject *__pyx_int_0x1000;
+static PyObject *__pyx_int_0x2000;
+static PyObject *__pyx_int_0x4000;
+static PyObject *__pyx_int_0x8000;
+static PyObject *__pyx_int_0xFF00;
+static PyObject *__pyx_int_0x10000;
+static PyObject *__pyx_int_0xFF0000;
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":132
+ * TRUE=1
+ * 
+ * def Initialize():             # <<<<<<<<<<<<<<
+ *     """
+ * Initialize: call this first
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_Initialize(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_Initialize[] = "\nInitialize: call this first\n    ";
+static PyObject *__pyx_pf_11_pyportmidi_Initialize(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("Initialize");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":136
+ * Initialize: call this first
+ *     """
+ *     Pm_Initialize()             # <<<<<<<<<<<<<<
+ *     Pt_Start(1, NULL, NULL) # /[inserted by cython to avoid comment start]* equiv to TIME_START: start timer w/ ms accuracy *[inserted by cython to avoid comment closer]/
+ * 
+ */
+  Pm_Initialize();
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":137
+ *     """
+ *     Pm_Initialize()
+ *     Pt_Start(1, NULL, NULL) # /[inserted by cython to avoid comment start]* equiv to TIME_START: start timer w/ ms accuracy *[inserted by cython to avoid comment closer]/             # <<<<<<<<<<<<<<
+ * 
+ * def Terminate():
+ */
+  Pt_Start(1, NULL, NULL);
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":139
+ *     Pt_Start(1, NULL, NULL) # /[inserted by cython to avoid comment start]* equiv to TIME_START: start timer w/ ms accuracy *[inserted by cython to avoid comment closer]/
+ * 
+ * def Terminate():             # <<<<<<<<<<<<<<
+ *     """
+ * Terminate: call this to clean up Midi streams when done.
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_Terminate(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_Terminate[] = "\nTerminate: call this to clean up Midi streams when done.\nIf you do not call this on Windows machines when you are\ndone with MIDI, your system may crash.\n    ";
+static PyObject *__pyx_pf_11_pyportmidi_Terminate(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannySetupContext("Terminate");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":145
+ * done with MIDI, your system may crash.
+ *     """
+ *     Pm_Terminate()             # <<<<<<<<<<<<<<
+ * 
+ * def GetDefaultInputDeviceID():
+ */
+  Pm_Terminate();
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":147
+ *     Pm_Terminate()
+ * 
+ * def GetDefaultInputDeviceID():             # <<<<<<<<<<<<<<
+ *     return Pm_GetDefaultInputDeviceID()
+ * 
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_GetDefaultInputDeviceID(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_11_pyportmidi_GetDefaultInputDeviceID(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("GetDefaultInputDeviceID");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":148
+ * 
+ * def GetDefaultInputDeviceID():
+ *     return Pm_GetDefaultInputDeviceID()             # <<<<<<<<<<<<<<
+ * 
+ * def GetDefaultOutputDeviceID():
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_to_py_PmDeviceID(Pm_GetDefaultInputDeviceID()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.GetDefaultInputDeviceID");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":150
+ *     return Pm_GetDefaultInputDeviceID()
+ * 
+ * def GetDefaultOutputDeviceID():             # <<<<<<<<<<<<<<
+ *     return Pm_GetDefaultOutputDeviceID()
+ * 
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_GetDefaultOutputDeviceID(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_11_pyportmidi_GetDefaultOutputDeviceID(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("GetDefaultOutputDeviceID");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":151
+ * 
+ * def GetDefaultOutputDeviceID():
+ *     return Pm_GetDefaultOutputDeviceID()             # <<<<<<<<<<<<<<
+ * 
+ * def CountDevices():
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_to_py_PmDeviceID(Pm_GetDefaultOutputDeviceID()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.GetDefaultOutputDeviceID");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":153
+ *     return Pm_GetDefaultOutputDeviceID()
+ * 
+ * def CountDevices():             # <<<<<<<<<<<<<<
+ *     return Pm_CountDevices()
+ * 
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_CountDevices(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static PyObject *__pyx_pf_11_pyportmidi_CountDevices(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("CountDevices");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":154
+ * 
+ * def CountDevices():
+ *     return Pm_CountDevices()             # <<<<<<<<<<<<<<
+ * 
+ * def GetDeviceInfo(i):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyInt_FromLong(Pm_CountDevices()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.CountDevices");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":156
+ *     return Pm_CountDevices()
+ * 
+ * def GetDeviceInfo(i):             # <<<<<<<<<<<<<<
+ *     """
+ * GetDeviceInfo(<device number>): returns 5 parameters
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_GetDeviceInfo(PyObject *__pyx_self, PyObject *__pyx_v_i); /*proto*/
+static char __pyx_doc_11_pyportmidi_GetDeviceInfo[] = "\nGetDeviceInfo(<device number>): returns 5 parameters\n  - underlying MIDI API\n  - device name\n  - TRUE iff input is available\n  - TRUE iff output is available\n  - TRUE iff device stream is already open\n    ";
+static PyObject *__pyx_pf_11_pyportmidi_GetDeviceInfo(PyObject *__pyx_self, PyObject *__pyx_v_i) {
+  PmDeviceInfo *__pyx_v_info;
+  PyObject *__pyx_r = NULL;
+  PmDeviceID __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("GetDeviceInfo");
+  __pyx_self = __pyx_self;
+  __Pyx_INCREF(__pyx_v_i);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":168
+ * 
+ *     # disregarding the constness from Pm_GetDeviceInfo, since pyrex doesn't do const.
+ *     info = <PmDeviceInfo *>Pm_GetDeviceInfo(i)             # <<<<<<<<<<<<<<
+ * 
+ *     if info <> NULL: return info.interf, info.name, info.input, info.output, info.opened
+ */
+  __pyx_t_1 = __Pyx_PyInt_from_py_PmDeviceID(__pyx_v_i); if (unlikely((__pyx_t_1 == (PmDeviceID)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_info = ((PmDeviceInfo *)Pm_GetDeviceInfo(__pyx_t_1));
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":170
+ *     info = <PmDeviceInfo *>Pm_GetDeviceInfo(i)
+ * 
+ *     if info <> NULL: return info.interf, info.name, info.input, info.output, info.opened             # <<<<<<<<<<<<<<
+ *     else: return
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_info != NULL);
+  if (__pyx_t_2) {
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_info->interf); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+    __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_info->name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+    __pyx_t_5 = PyInt_FromLong(__pyx_v_info->input); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PyInt_FromLong(__pyx_v_info->output); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_7 = PyInt_FromLong(__pyx_v_info->opened); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_3));
+    __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
+    PyTuple_SET_ITEM(__pyx_t_8, 1, ((PyObject *)__pyx_t_4));
+    __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
+    PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_7);
+    __pyx_t_3 = 0;
+    __pyx_t_4 = 0;
+    __pyx_t_5 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_r = __pyx_t_8;
+    __pyx_t_8 = 0;
+    goto __pyx_L0;
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":171
+ * 
+ *     if info <> NULL: return info.interf, info.name, info.input, info.output, info.opened
+ *     else: return             # <<<<<<<<<<<<<<
+ * 
+ * def Time():
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("_pyportmidi.GetDeviceInfo");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_i);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":173
+ *     else: return
+ * 
+ * def Time():             # <<<<<<<<<<<<<<
+ *     """
+ * Time() returns the current time in ms
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_Time(PyObject *__pyx_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_Time[] = "\nTime() returns the current time in ms\nof the PortMidi timer\n    ";
+static PyObject *__pyx_pf_11_pyportmidi_Time(PyObject *__pyx_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("Time");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":178
+ * of the PortMidi timer
+ *     """
+ *     return Pt_Time()             # <<<<<<<<<<<<<<
+ * 
+ * def GetErrorText(err):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __Pyx_PyInt_to_py_PtTimestamp(Pt_Time()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.Time");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":180
+ *     return Pt_Time()
+ * 
+ * def GetErrorText(err):             # <<<<<<<<<<<<<<
+ *     """
+ * GetErrorText(<err num>) returns human-readable error
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_GetErrorText(PyObject *__pyx_self, PyObject *__pyx_v_err); /*proto*/
+static char __pyx_doc_11_pyportmidi_GetErrorText[] = "\nGetErrorText(<err num>) returns human-readable error\nmessages translated from error numbers\n    ";
+static PyObject *__pyx_pf_11_pyportmidi_GetErrorText(PyObject *__pyx_self, PyObject *__pyx_v_err) {
+  PyObject *__pyx_r = NULL;
+  PmError __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("GetErrorText");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":185
+ * messages translated from error numbers
+ *     """
+ *     return Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ * def Channel(chan):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = ((PmError)PyInt_AsLong(__pyx_v_err)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_t_1)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __pyx_r = ((PyObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("_pyportmidi.GetErrorText");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":187
+ *     return Pm_GetErrorText(err)
+ * 
+ * def Channel(chan):             # <<<<<<<<<<<<<<
+ *     """
+ * Channel(<chan>) is used with ChannelMask on input MIDI streams.
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_Channel(PyObject *__pyx_self, PyObject *__pyx_v_chan); /*proto*/
+static char __pyx_doc_11_pyportmidi_Channel[] = "\nChannel(<chan>) is used with ChannelMask on input MIDI streams.\nExample: to receive input on channels 1 and 10 on a MIDI\n         stream called MidiIn:\nMidiIn.SetChannelMask(pypm.Channel(1) | pypm.Channel(10))\n\nnote: PyPortMidi Channel function has been altered from\n      the original PortMidi c call to correct for what\n      seems to be a bug --- i.e. channel filters were\n      all numbered from 0 to 15 instead of 1 to 16.\n    ";
+static PyObject *__pyx_pf_11_pyportmidi_Channel(PyObject *__pyx_self, PyObject *__pyx_v_chan) {
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("Channel");
+  __pyx_self = __pyx_self;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":199
+ *       all numbered from 0 to 15 instead of 1 to 16.
+ *     """
+ *     return Pm_Channel(chan-1)             # <<<<<<<<<<<<<<
+ * 
+ * cdef class Output:
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyNumber_Subtract(__pyx_v_chan, __pyx_int_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyInt_AsInt(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_1 = PyInt_FromLong(Pm_Channel(__pyx_t_2)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.Channel");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":214
+ *     cdef int _aborted
+ * 
+ *     def __init__(self, OutputDevice, latency=0):             # <<<<<<<<<<<<<<
+ * 
+ *         cdef PmError err
+ */
+
+static int __pyx_pf_11_pyportmidi_6Output___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_11_pyportmidi_6Output___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_OutputDevice = 0;
+  PyObject *__pyx_v_latency = 0;
+  PmError __pyx_v_err;
+  PmTimeProcPtr __pyx_v_PmPtr;
+  PyObject *__pyx_v_s;
+  int __pyx_r;
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  long __pyx_t_4;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__OutputDevice,&__pyx_n_s__latency,0};
+  __Pyx_RefNannySetupContext("__init__");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)__pyx_int_0);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__OutputDevice);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__latency);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_OutputDevice = values[0];
+    __pyx_v_latency = values[1];
+  } else {
+    __pyx_v_latency = ((PyObject *)__pyx_int_0);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_latency = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_OutputDevice = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_pyportmidi.Output.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_OutputDevice);
+  __Pyx_INCREF(__pyx_v_latency);
+  __pyx_v_s = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":220
+ *         cdef PmTimeProcPtr PmPtr
+ * 
+ *         self.i = OutputDevice             # <<<<<<<<<<<<<<
+ *         self.debug = 0
+ *         self._aborted = 0
+ */
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_OutputDevice); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->i = __pyx_t_1;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":221
+ * 
+ *         self.i = OutputDevice
+ *         self.debug = 0             # <<<<<<<<<<<<<<
+ *         self._aborted = 0
+ * 
+ */
+  ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->debug = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":222
+ *         self.i = OutputDevice
+ *         self.debug = 0
+ *         self._aborted = 0             # <<<<<<<<<<<<<<
+ * 
+ *         if latency == 0:
+ */
+  ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->_aborted = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":224
+ *         self._aborted = 0
+ * 
+ *         if latency == 0:             # <<<<<<<<<<<<<<
+ *             PmPtr = NULL
+ *         else:
+ */
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_latency, __pyx_int_0, Py_EQ); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":225
+ * 
+ *         if latency == 0:
+ *             PmPtr = NULL             # <<<<<<<<<<<<<<
+ *         else:
+ *             PmPtr = <PmTimeProcPtr>&Pt_Time
+ */
+    __pyx_v_PmPtr = NULL;
+    goto __pyx_L6;
+  }
+  /*else*/ {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":227
+ *             PmPtr = NULL
+ *         else:
+ *             PmPtr = <PmTimeProcPtr>&Pt_Time             # <<<<<<<<<<<<<<
+ *         if self.debug: print "Opening Midi Output"
+ * 	# Why is bufferSize 0 here?
+ */
+    __pyx_v_PmPtr = ((PmTimestamp (*)(void *))(&Pt_Time));
+  }
+  __pyx_L6:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":228
+ *         else:
+ *             PmPtr = <PmTimeProcPtr>&Pt_Time
+ *         if self.debug: print "Opening Midi Output"             # <<<<<<<<<<<<<<
+ * 	# Why is bufferSize 0 here?
+ *         err = Pm_OpenOutput(&(self.midi), self.i, NULL, 0, PmPtr, NULL, latency)
+ */
+  __pyx_t_1 = ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->debug;
+  if (__pyx_t_1) {
+    if (__Pyx_PrintOne(((PyObject *)__pyx_kp_s_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":230
+ *         if self.debug: print "Opening Midi Output"
+ * 	# Why is bufferSize 0 here?
+ *         err = Pm_OpenOutput(&(self.midi), self.i, NULL, 0, PmPtr, NULL, latency)             # <<<<<<<<<<<<<<
+ *         if err < 0:
+ *                 s = Pm_GetErrorText(err)
+ */
+  __pyx_t_4 = __Pyx_PyInt_AsLong(__pyx_v_latency); if (unlikely((__pyx_t_4 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_err = Pm_OpenOutput((&((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi), ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->i, NULL, 0, __pyx_v_PmPtr, NULL, __pyx_t_4);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":231
+ * 	# Why is bufferSize 0 here?
+ *         err = Pm_OpenOutput(&(self.midi), self.i, NULL, 0, PmPtr, NULL, latency)
+ *         if err < 0:             # <<<<<<<<<<<<<<
+ *                 s = Pm_GetErrorText(err)
+ *                 # Something's amiss here - if we try to throw an Exception
+ */
+  __pyx_t_3 = (__pyx_v_err < 0);
+  if (__pyx_t_3) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":232
+ *         err = Pm_OpenOutput(&(self.midi), self.i, NULL, 0, PmPtr, NULL, latency)
+ *         if err < 0:
+ *                 s = Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ *                 # Something's amiss here - if we try to throw an Exception
+ *                	# here, we crash.
+ */
+    __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 232; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    __Pyx_DECREF(__pyx_v_s);
+    __pyx_v_s = ((PyObject *)__pyx_t_2);
+    __pyx_t_2 = 0;
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":235
+ *                 # Something's amiss here - if we try to throw an Exception
+ *                	# here, we crash.
+ *                 if not err == -10000:             # <<<<<<<<<<<<<<
+ *                         raise Exception,s
+ *                 else:
+ */
+    __pyx_t_3 = (!(__pyx_v_err == -10000));
+    if (__pyx_t_3) {
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":236
+ *                	# here, we crash.
+ *                 if not err == -10000:
+ *                         raise Exception,s             # <<<<<<<<<<<<<<
+ *                 else:
+ *                         print "Unable to open Midi OutputDevice=",OutputDevice," err=",s
+ */
+      __Pyx_Raise(__pyx_builtin_Exception, __pyx_v_s, 0);
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L9;
+    }
+    /*else*/ {
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":238
+ *                         raise Exception,s
+ *                 else:
+ *                         print "Unable to open Midi OutputDevice=",OutputDevice," err=",s             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(self):
+ */
+      __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_INCREF(((PyObject *)__pyx_kp_s_2));
+      PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_kp_s_2));
+      __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_2));
+      __Pyx_INCREF(__pyx_v_OutputDevice);
+      PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_OutputDevice);
+      __Pyx_GIVEREF(__pyx_v_OutputDevice);
+      __Pyx_INCREF(((PyObject *)__pyx_kp_s_3));
+      PyTuple_SET_ITEM(__pyx_t_2, 2, ((PyObject *)__pyx_kp_s_3));
+      __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_3));
+      __Pyx_INCREF(__pyx_v_s);
+      PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_s);
+      __Pyx_GIVEREF(__pyx_v_s);
+      if (__Pyx_Print(__pyx_t_2, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    }
+    __pyx_L9:;
+    goto __pyx_L8;
+  }
+  __pyx_L8:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("_pyportmidi.Output.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_s);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_OutputDevice);
+  __Pyx_DECREF(__pyx_v_latency);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":240
+ *                         print "Unable to open Midi OutputDevice=",OutputDevice," err=",s
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         if self.debug: print "Closing MIDI output stream and destroying instance"
+ *         #err = Pm_Abort(self.midi)
+ */
+
+static void __pyx_pf_11_pyportmidi_6Output___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_11_pyportmidi_6Output___dealloc__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_v_err;
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  PmError __pyx_t_4;
+  __Pyx_RefNannySetupContext("__dealloc__");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __pyx_v_err = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":241
+ * 
+ *     def __dealloc__(self):
+ *         if self.debug: print "Closing MIDI output stream and destroying instance"             # <<<<<<<<<<<<<<
+ *         #err = Pm_Abort(self.midi)
+ *         #if err < 0: raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_t_1 = ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->debug;
+  if (__pyx_t_1) {
+    if (__Pyx_PrintOne(((PyObject *)__pyx_kp_s_4)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":244
+ *         #err = Pm_Abort(self.midi)
+ *         #if err < 0: raise Exception, Pm_GetErrorText(err)
+ *         err = Pm_Close(self.midi)             # <<<<<<<<<<<<<<
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ */
+  __pyx_t_2 = PyInt_FromLong(Pm_Close(((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_v_err);
+  __pyx_v_err = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":245
+ *         #if err < 0: raise Exception, Pm_GetErrorText(err)
+ *         err = Pm_Close(self.midi)
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_err, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+    __pyx_t_4 = ((PmError)PyInt_AsLong(__pyx_v_err)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_2), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("_pyportmidi.Output.__dealloc__");
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_err);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":248
+ * 
+ * 
+ *     def _check_open(self):             # <<<<<<<<<<<<<<
+ *         """ checks to see if the midi is open, and if not, raises an error.
+ *         """
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_6Output__check_open(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_6Output__check_open[] = " checks to see if the midi is open, and if not, raises an error.\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_6Output__check_open(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("_check_open");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":252
+ *         """
+ * 
+ *         if self.midi == NULL:             # <<<<<<<<<<<<<<
+ *             raise Exception, "midi Output not open."
+ * 
+ */
+  __pyx_t_1 = (((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi == NULL);
+  if (__pyx_t_1) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":253
+ * 
+ *         if self.midi == NULL:
+ *             raise Exception, "midi Output not open."             # <<<<<<<<<<<<<<
+ * 
+ *         if self._aborted:
+ */
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_kp_s_5), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":255
+ *             raise Exception, "midi Output not open."
+ * 
+ *         if self._aborted:             # <<<<<<<<<<<<<<
+ *             raise Exception, "midi Output aborted.  Need to call Close after Abort."
+ * 
+ */
+  __pyx_t_2 = ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->_aborted;
+  if (__pyx_t_2) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":256
+ * 
+ *         if self._aborted:
+ *             raise Exception, "midi Output aborted.  Need to call Close after Abort."             # <<<<<<<<<<<<<<
+ * 
+ *     def Close(self):
+ */
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_kp_s_6), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("_pyportmidi.Output._check_open");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":258
+ *             raise Exception, "midi Output aborted.  Need to call Close after Abort."
+ * 
+ *     def Close(self):             # <<<<<<<<<<<<<<
+ *         """
+ * Close()
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_6Output_Close(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_6Output_Close[] = "\nClose()\n    closes a midi stream, flushing any pending buffers.\n    (PortMidi attempts to close open streams when the application\n    exits -- this is particularly difficult under Windows.)\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_6Output_Close(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PmError __pyx_t_3;
+  __Pyx_RefNannySetupContext("Close");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __pyx_v_err = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":268
+ *         #    return
+ * 
+ *         err = Pm_Close(self.midi)             # <<<<<<<<<<<<<<
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_t_1 = PyInt_FromLong(Pm_Close(((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_v_err);
+  __pyx_v_err = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":269
+ * 
+ *         err = Pm_Close(self.midi)
+ *         if err < 0:             # <<<<<<<<<<<<<<
+ *             raise Exception, Pm_GetErrorText(err)
+ *         #self.midi = NULL
+ */
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_err, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":270
+ *         err = Pm_Close(self.midi)
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ *         #self.midi = NULL
+ * 
+ */
+    __pyx_t_3 = ((PmError)PyInt_AsLong(__pyx_v_err)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_1), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.Output.Close");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_err);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":274
+ * 
+ * 
+ *     def Abort(self):             # <<<<<<<<<<<<<<
+ *         """
+ * Abort() terminates outgoing messages immediately
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_6Output_Abort(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_6Output_Abort[] = "\nAbort() terminates outgoing messages immediately\n    The caller should immediately close the output port;\n    this call may result in transmission of a partial midi message.\n    There is no abort for Midi input because the user can simply\n    ignore messages in the buffer and close an input device at\n    any time.\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_6Output_Abort(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PmError __pyx_t_3;
+  __Pyx_RefNannySetupContext("Abort");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __pyx_v_err = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":286
+ *         #    return
+ * 
+ *         err = Pm_Abort(self.midi)             # <<<<<<<<<<<<<<
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_t_1 = PyInt_FromLong(Pm_Abort(((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_v_err);
+  __pyx_v_err = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":287
+ * 
+ *         err = Pm_Abort(self.midi)
+ *         if err < 0:             # <<<<<<<<<<<<<<
+ *             raise Exception, Pm_GetErrorText(err)
+ * 
+ */
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_err, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":288
+ *         err = Pm_Abort(self.midi)
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ *         self._aborted = 1
+ */
+    __pyx_t_3 = ((PmError)PyInt_AsLong(__pyx_v_err)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_1), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":290
+ *             raise Exception, Pm_GetErrorText(err)
+ * 
+ *         self._aborted = 1             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->_aborted = 1;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.Output.Abort");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_err);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":293
+ * 
+ * 
+ *     def Write(self, data):             # <<<<<<<<<<<<<<
+ *         """
+ * Write(data)
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_6Output_Write(PyObject *__pyx_v_self, PyObject *__pyx_v_data); /*proto*/
+static char __pyx_doc_11_pyportmidi_6Output_Write[] = "\nWrite(data)\n    output a series of MIDI information in the form of a list:\n         Write([[[status <,data1><,data2><,data3>],timestamp],\n                [[status <,data1><,data2><,data3>],timestamp],...])\n    <data> fields are optional\n    example: choose program change 1 at time 20000 and\n    send note 65 with velocity 100 500 ms later.\n         Write([[[0xc0,0,0],20000],[[0x90,60,100],20500]])\n    notes:\n      1. timestamps will be ignored if latency = 0.\n      2. To get a note to play immediately, send MIDI info with\n         timestamp read from function Time.\n      3. understanding optional data fields:\n           Write([[[0xc0,0,0],20000]]) is equivalent to\n           Write([[[0xc0],20000]])\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_6Output_Write(PyObject *__pyx_v_self, PyObject *__pyx_v_data) {
+  PmEvent __pyx_v_buffer[1024];
+  PmError __pyx_v_err;
+  int __pyx_v_i;
+  PyObject *__pyx_v_loop1;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  Py_ssize_t __pyx_t_3;
+  int __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  Py_ssize_t __pyx_t_7;
+  int __pyx_t_8;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PmMessage __pyx_t_11;
+  PmTimestamp __pyx_t_12;
+  __Pyx_RefNannySetupContext("Write");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_data);
+  __pyx_v_loop1 = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":315
+ *         cdef int i
+ * 
+ *         self._check_open()             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___check_open); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":318
+ * 
+ * 
+ *         if len(data) > 1024: raise IndexError, 'maximum list length is 1024'             # <<<<<<<<<<<<<<
+ *         else:
+ *             for loop1 in range(len(data)):
+ */
+  __pyx_t_3 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = (__pyx_t_3 > 1024);
+  if (__pyx_t_4) {
+    __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_7), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  /*else*/ {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":320
+ *         if len(data) > 1024: raise IndexError, 'maximum list length is 1024'
+ *         else:
+ *             for loop1 in range(len(data)):             # <<<<<<<<<<<<<<
+ *                 if ((len(data[loop1][0]) > 4) |
+ *                     (len(data[loop1][0]) < 1)):
+ */
+    __pyx_t_5 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromSsize_t(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
+    __Pyx_GIVEREF(__pyx_t_2);
+    __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_Call(__pyx_builtin_range, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) {
+      __pyx_t_3 = 0; __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1);
+    } else {
+      __pyx_t_3 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+    }
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    for (;;) {
+      if (likely(PyList_CheckExact(__pyx_t_1))) {
+        if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_1)) break;
+        __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++;
+      } else if (likely(PyTuple_CheckExact(__pyx_t_1))) {
+        if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+        __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_3); __Pyx_INCREF(__pyx_t_2); __pyx_t_3++;
+      } else {
+        __pyx_t_2 = PyIter_Next(__pyx_t_1);
+        if (!__pyx_t_2) {
+          if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          break;
+        }
+        __Pyx_GOTREF(__pyx_t_2);
+      }
+      __Pyx_DECREF(__pyx_v_loop1);
+      __pyx_v_loop1 = __pyx_t_2;
+      __pyx_t_2 = 0;
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":321
+ *         else:
+ *             for loop1 in range(len(data)):
+ *                 if ((len(data[loop1][0]) > 4) |             # <<<<<<<<<<<<<<
+ *                     (len(data[loop1][0]) < 1)):
+ *                     raise IndexError, str(len(data[loop1][0]))+' arguments in event list'
+ */
+      __pyx_t_2 = PyObject_GetItem(__pyx_v_data, __pyx_v_loop1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_5 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":322
+ *             for loop1 in range(len(data)):
+ *                 if ((len(data[loop1][0]) > 4) |
+ *                     (len(data[loop1][0]) < 1)):             # <<<<<<<<<<<<<<
+ *                     raise IndexError, str(len(data[loop1][0]))+' arguments in event list'
+ *                 buffer[loop1].message = 0
+ */
+      __pyx_t_6 = PyObject_GetItem(__pyx_v_data, __pyx_v_loop1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_6, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __pyx_t_7 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_4 = ((__pyx_t_5 > 4) | (__pyx_t_7 < 1));
+      if (__pyx_t_4) {
+
+        /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":323
+ *                 if ((len(data[loop1][0]) > 4) |
+ *                     (len(data[loop1][0]) < 1)):
+ *                     raise IndexError, str(len(data[loop1][0]))+' arguments in event list'             # <<<<<<<<<<<<<<
+ *                 buffer[loop1].message = 0
+ *                 for i in range(len(data[loop1][0])):
+ */
+        __pyx_t_2 = PyObject_GetItem(__pyx_v_data, __pyx_v_loop1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_t_7 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
+        __Pyx_GIVEREF(__pyx_t_6);
+        __pyx_t_6 = 0;
+        __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_t_2 = PyNumber_Add(__pyx_t_6, ((PyObject *)__pyx_kp_s_8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_2, 0);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L8;
+      }
+      __pyx_L8:;
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":324
+ *                     (len(data[loop1][0]) < 1)):
+ *                     raise IndexError, str(len(data[loop1][0]))+' arguments in event list'
+ *                 buffer[loop1].message = 0             # <<<<<<<<<<<<<<
+ *                 for i in range(len(data[loop1][0])):
+ *                     buffer[loop1].message = buffer[loop1].message + ((data[loop1][0][i]&0xFF) << (8*i))
+ */
+      __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop1); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      (__pyx_v_buffer[__pyx_t_7]).message = 0;
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":325
+ *                     raise IndexError, str(len(data[loop1][0]))+' arguments in event list'
+ *                 buffer[loop1].message = 0
+ *                 for i in range(len(data[loop1][0])):             # <<<<<<<<<<<<<<
+ *                     buffer[loop1].message = buffer[loop1].message + ((data[loop1][0][i]&0xFF) << (8*i))
+ *                 buffer[loop1].timestamp = data[loop1][1]
+ */
+      __pyx_t_2 = PyObject_GetItem(__pyx_v_data, __pyx_v_loop1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_6) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_7 = PyObject_Length(__pyx_t_6); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
+        __pyx_v_i = __pyx_t_8;
+
+        /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":326
+ *                 buffer[loop1].message = 0
+ *                 for i in range(len(data[loop1][0])):
+ *                     buffer[loop1].message = buffer[loop1].message + ((data[loop1][0][i]&0xFF) << (8*i))             # <<<<<<<<<<<<<<
+ *                 buffer[loop1].timestamp = data[loop1][1]
+ *                 if self.debug: print loop1," : ",buffer[loop1].message," : ",buffer[loop1].timestamp
+ */
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = __Pyx_PyInt_to_py_PmMessage((__pyx_v_buffer[__pyx_t_5]).message); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __pyx_t_2 = PyObject_GetItem(__pyx_v_data, __pyx_v_loop1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __pyx_t_9 = __Pyx_GetItemInt(__pyx_t_2, 0, sizeof(long), PyInt_FromLong); if (!__pyx_t_9) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_9);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_9, __pyx_v_i, sizeof(int), PyInt_FromLong); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __pyx_t_9 = PyNumber_And(__pyx_t_2, __pyx_int_0xFF); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_9);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_t_2 = PyInt_FromLong((8 * __pyx_v_i)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __pyx_t_10 = PyNumber_Lshift(__pyx_t_9, __pyx_t_2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_10);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_10); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+        __pyx_t_11 = __Pyx_PyInt_from_py_PmMessage(__pyx_t_2); if (unlikely((__pyx_t_11 == (PmMessage)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        (__pyx_v_buffer[__pyx_t_5]).message = __pyx_t_11;
+      }
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":327
+ *                 for i in range(len(data[loop1][0])):
+ *                     buffer[loop1].message = buffer[loop1].message + ((data[loop1][0][i]&0xFF) << (8*i))
+ *                 buffer[loop1].timestamp = data[loop1][1]             # <<<<<<<<<<<<<<
+ *                 if self.debug: print loop1," : ",buffer[loop1].message," : ",buffer[loop1].timestamp
+ *         if self.debug: print "writing to midi buffer"
+ */
+      __pyx_t_2 = PyObject_GetItem(__pyx_v_data, __pyx_v_loop1); if (!__pyx_t_2) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_2, 1, sizeof(long), PyInt_FromLong); if (!__pyx_t_10) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __pyx_t_12 = __Pyx_PyInt_from_py_PmTimestamp(__pyx_t_10); if (unlikely((__pyx_t_12 == (PmTimestamp)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      (__pyx_v_buffer[__pyx_t_5]).timestamp = __pyx_t_12;
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":328
+ *                     buffer[loop1].message = buffer[loop1].message + ((data[loop1][0][i]&0xFF) << (8*i))
+ *                 buffer[loop1].timestamp = data[loop1][1]
+ *                 if self.debug: print loop1," : ",buffer[loop1].message," : ",buffer[loop1].timestamp             # <<<<<<<<<<<<<<
+ *         if self.debug: print "writing to midi buffer"
+ *         err= Pm_Write(self.midi, buffer, len(data))
+ */
+      __pyx_t_8 = ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->debug;
+      if (__pyx_t_8) {
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = __Pyx_PyInt_to_py_PmMessage((__pyx_v_buffer[__pyx_t_5]).message); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_10);
+        __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop1); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyInt_to_py_PmTimestamp((__pyx_v_buffer[__pyx_t_5]).timestamp); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_2);
+        __pyx_t_6 = PyTuple_New(5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_INCREF(__pyx_v_loop1);
+        PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_loop1);
+        __Pyx_GIVEREF(__pyx_v_loop1);
+        __Pyx_INCREF(((PyObject *)__pyx_kp_s_9));
+        PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_kp_s_9));
+        __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_9));
+        PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_10);
+        __Pyx_GIVEREF(__pyx_t_10);
+        __Pyx_INCREF(((PyObject *)__pyx_kp_s_9));
+        PyTuple_SET_ITEM(__pyx_t_6, 3, ((PyObject *)__pyx_kp_s_9));
+        __Pyx_GIVEREF(((PyObject *)__pyx_kp_s_9));
+        PyTuple_SET_ITEM(__pyx_t_6, 4, __pyx_t_2);
+        __Pyx_GIVEREF(__pyx_t_2);
+        __pyx_t_10 = 0;
+        __pyx_t_2 = 0;
+        if (__Pyx_Print(__pyx_t_6, 1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 328; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+        goto __pyx_L11;
+      }
+      __pyx_L11:;
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":329
+ *                 buffer[loop1].timestamp = data[loop1][1]
+ *                 if self.debug: print loop1," : ",buffer[loop1].message," : ",buffer[loop1].timestamp
+ *         if self.debug: print "writing to midi buffer"             # <<<<<<<<<<<<<<
+ *         err= Pm_Write(self.midi, buffer, len(data))
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_t_8 = ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->debug;
+  if (__pyx_t_8) {
+    if (__Pyx_PrintOne(((PyObject *)__pyx_kp_s_10)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L12;
+  }
+  __pyx_L12:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":330
+ *                 if self.debug: print loop1," : ",buffer[loop1].message," : ",buffer[loop1].timestamp
+ *         if self.debug: print "writing to midi buffer"
+ *         err= Pm_Write(self.midi, buffer, len(data))             # <<<<<<<<<<<<<<
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ */
+  __pyx_t_3 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_err = Pm_Write(((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi, __pyx_v_buffer, __pyx_t_3);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":331
+ *         if self.debug: print "writing to midi buffer"
+ *         err= Pm_Write(self.midi, buffer, len(data))
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ *     def WriteShort(self, status, data1 = 0, data2 = 0):
+ */
+  __pyx_t_4 = (__pyx_v_err < 0);
+  if (__pyx_t_4) {
+    __pyx_t_1 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_1), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L13;
+  }
+  __pyx_L13:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_AddTraceback("_pyportmidi.Output.Write");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_loop1);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_data);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":333
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ *     def WriteShort(self, status, data1 = 0, data2 = 0):             # <<<<<<<<<<<<<<
+ *         """
+ * WriteShort(status <, data1><, data2>)
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_6Output_WriteShort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_11_pyportmidi_6Output_WriteShort[] = "\nWriteShort(status <, data1><, data2>)\n     output MIDI information of 3 bytes or less.\n     data fields are optional\n     status byte could be:\n          0xc0 = program change\n          0x90 = note on\n          etc.\n          data bytes are optional and assumed 0 if omitted\n     example: note 65 on with velocity 100\n          WriteShort(0x90,65,100)\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_6Output_WriteShort(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_status = 0;
+  PyObject *__pyx_v_data1 = 0;
+  PyObject *__pyx_v_data2 = 0;
+  PmEvent __pyx_v_buffer[1];
+  PmError __pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PmMessage __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__status,&__pyx_n_s__data1,&__pyx_n_s__data2,0};
+  __Pyx_RefNannySetupContext("WriteShort");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[3] = {0,0,0};
+    values[1] = ((PyObject *)__pyx_int_0);
+    values[2] = ((PyObject *)__pyx_int_0);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__status);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data1);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+      case  2:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__data2);
+        if (unlikely(value)) { values[2] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "WriteShort") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_status = values[0];
+    __pyx_v_data1 = values[1];
+    __pyx_v_data2 = values[2];
+  } else {
+    __pyx_v_data1 = ((PyObject *)__pyx_int_0);
+    __pyx_v_data2 = ((PyObject *)__pyx_int_0);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  3: __pyx_v_data2 = PyTuple_GET_ITEM(__pyx_args, 2);
+      case  2: __pyx_v_data1 = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_status = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("WriteShort", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_pyportmidi.Output.WriteShort");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_status);
+  __Pyx_INCREF(__pyx_v_data1);
+  __Pyx_INCREF(__pyx_v_data2);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":348
+ *         cdef PmEvent buffer[1]
+ *         cdef PmError err
+ *         self._check_open()             # <<<<<<<<<<<<<<
+ * 
+ *         buffer[0].timestamp = Pt_Time()
+ */
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___check_open); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":350
+ *         self._check_open()
+ * 
+ *         buffer[0].timestamp = Pt_Time()             # <<<<<<<<<<<<<<
+ *         buffer[0].message = ((((data2) << 16) & 0xFF0000) | (((data1) << 8) & 0xFF00) | ((status) & 0xFF))
+ *         if self.debug: print "Writing to MIDI buffer"
+ */
+  (__pyx_v_buffer[0]).timestamp = Pt_Time();
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":351
+ * 
+ *         buffer[0].timestamp = Pt_Time()
+ *         buffer[0].message = ((((data2) << 16) & 0xFF0000) | (((data1) << 8) & 0xFF00) | ((status) & 0xFF))             # <<<<<<<<<<<<<<
+ *         if self.debug: print "Writing to MIDI buffer"
+ *         err = Pm_Write(self.midi, buffer, 1) # stream, buffer, length
+ */
+  __pyx_t_2 = PyNumber_Lshift(__pyx_v_data2, __pyx_int_16); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = PyNumber_And(__pyx_t_2, __pyx_int_0xFF0000); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyNumber_Lshift(__pyx_v_data1, __pyx_int_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyNumber_And(__pyx_t_2, __pyx_int_0xFF00); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyNumber_Or(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyNumber_And(__pyx_v_status, __pyx_int_0xFF); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = PyNumber_Or(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_4 = __Pyx_PyInt_from_py_PmMessage(__pyx_t_1); if (unlikely((__pyx_t_4 == (PmMessage)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  (__pyx_v_buffer[0]).message = __pyx_t_4;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":352
+ *         buffer[0].timestamp = Pt_Time()
+ *         buffer[0].message = ((((data2) << 16) & 0xFF0000) | (((data1) << 8) & 0xFF00) | ((status) & 0xFF))
+ *         if self.debug: print "Writing to MIDI buffer"             # <<<<<<<<<<<<<<
+ *         err = Pm_Write(self.midi, buffer, 1) # stream, buffer, length
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_t_5 = ((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->debug;
+  if (__pyx_t_5) {
+    if (__Pyx_PrintOne(((PyObject *)__pyx_kp_s_11)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":353
+ *         buffer[0].message = ((((data2) << 16) & 0xFF0000) | (((data1) << 8) & 0xFF00) | ((status) & 0xFF))
+ *         if self.debug: print "Writing to MIDI buffer"
+ *         err = Pm_Write(self.midi, buffer, 1) # stream, buffer, length             # <<<<<<<<<<<<<<
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)
+ * 
+ */
+  __pyx_v_err = Pm_Write(((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi, __pyx_v_buffer, 1);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":354
+ *         if self.debug: print "Writing to MIDI buffer"
+ *         err = Pm_Write(self.midi, buffer, 1) # stream, buffer, length
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ *     def WriteSysEx(self, when, msg):
+ */
+  __pyx_t_6 = (__pyx_v_err < 0);
+  if (__pyx_t_6) {
+    __pyx_t_1 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_1), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("_pyportmidi.Output.WriteShort");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_status);
+  __Pyx_DECREF(__pyx_v_data1);
+  __Pyx_DECREF(__pyx_v_data2);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":356
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)
+ * 
+ *     def WriteSysEx(self, when, msg):             # <<<<<<<<<<<<<<
+ *         """
+ *         WriteSysEx(<timestamp>,<msg>)
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_6Output_WriteSysEx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_11_pyportmidi_6Output_WriteSysEx[] = "\n        WriteSysEx(<timestamp>,<msg>)\n        writes a timestamped system-exclusive midi message.\n        <msg> can be a *list* or a *string*\n        example:\n            (assuming y is an input MIDI stream)\n            y.WriteSysEx(0,'\\xF0\\x7D\\x10\\x11\\x12\\x13\\xF7')\n                              is equivalent to\n            y.WriteSysEx(pypm.Time,\n            [0xF0, 0x7D, 0x10, 0x11, 0x12, 0x13, 0xF7])\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_6Output_WriteSysEx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_when = 0;
+  PyObject *__pyx_v_msg = 0;
+  PmError __pyx_v_err;
+  char *__pyx_v_cmsg;
+  PtTimestamp __pyx_v_CurTime;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  char *__pyx_t_5;
+  PmTimestamp __pyx_t_6;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__when,&__pyx_n_s__msg,0};
+  __Pyx_RefNannySetupContext("WriteSysEx");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__when);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__msg);
+      if (likely(values[1])) kw_args--;
+      else {
+        __Pyx_RaiseArgtupleInvalid("WriteSysEx", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "WriteSysEx") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_when = values[0];
+    __pyx_v_msg = values[1];
+  } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    goto __pyx_L5_argtuple_error;
+  } else {
+    __pyx_v_when = PyTuple_GET_ITEM(__pyx_args, 0);
+    __pyx_v_msg = PyTuple_GET_ITEM(__pyx_args, 1);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("WriteSysEx", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_pyportmidi.Output.WriteSysEx");
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_when);
+  __Pyx_INCREF(__pyx_v_msg);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":372
+ *         cdef PtTimestamp CurTime
+ * 
+ *         self._check_open()             # <<<<<<<<<<<<<<
+ * 
+ *         if type(msg) is list:
+ */
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___check_open); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":374
+ *         self._check_open()
+ * 
+ *         if type(msg) is list:             # <<<<<<<<<<<<<<
+ *             msg = array.array('B',msg).tostring() # Markus Pfaff contribution
+ *         cmsg = msg
+ */
+  __pyx_t_3 = (((PyObject *)Py_TYPE(__pyx_v_msg)) == ((PyObject *)((PyObject*)&PyList_Type)));
+  if (__pyx_t_3) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":375
+ * 
+ *         if type(msg) is list:
+ *             msg = array.array('B',msg).tostring() # Markus Pfaff contribution             # <<<<<<<<<<<<<<
+ *         cmsg = msg
+ * 
+ */
+    __pyx_t_2 = __Pyx_GetName(__pyx_m, __pyx_n_s__array); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__array); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_INCREF(((PyObject *)__pyx_n_s__B));
+    PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_n_s__B));
+    __Pyx_GIVEREF(((PyObject *)__pyx_n_s__B));
+    __Pyx_INCREF(__pyx_v_msg);
+    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_msg);
+    __Pyx_GIVEREF(__pyx_v_msg);
+    __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = PyObject_GetAttr(__pyx_t_4, __pyx_n_s__tostring); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_v_msg);
+    __pyx_v_msg = __pyx_t_4;
+    __pyx_t_4 = 0;
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":376
+ *         if type(msg) is list:
+ *             msg = array.array('B',msg).tostring() # Markus Pfaff contribution
+ *         cmsg = msg             # <<<<<<<<<<<<<<
+ * 
+ *         CurTime = Pt_Time()
+ */
+  __pyx_t_5 = __Pyx_PyBytes_AsString(__pyx_v_msg); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_cmsg = __pyx_t_5;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":378
+ *         cmsg = msg
+ * 
+ *         CurTime = Pt_Time()             # <<<<<<<<<<<<<<
+ *         err = Pm_WriteSysEx(self.midi, when, <unsigned char *> cmsg)
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_v_CurTime = Pt_Time();
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":379
+ * 
+ *         CurTime = Pt_Time()
+ *         err = Pm_WriteSysEx(self.midi, when, <unsigned char *> cmsg)             # <<<<<<<<<<<<<<
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)
+ *         while Pt_Time() == CurTime: # wait for SysEx to go thru or...my
+ */
+  __pyx_t_6 = __Pyx_PyInt_from_py_PmTimestamp(__pyx_v_when); if (unlikely((__pyx_t_6 == (PmTimestamp)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_err = Pm_WriteSysEx(((struct __pyx_obj_11_pyportmidi_Output *)__pyx_v_self)->midi, __pyx_t_6, ((unsigned char *)__pyx_v_cmsg));
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":380
+ *         CurTime = Pt_Time()
+ *         err = Pm_WriteSysEx(self.midi, when, <unsigned char *> cmsg)
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ *         while Pt_Time() == CurTime: # wait for SysEx to go thru or...my
+ *             pass                    # win32 machine crashes w/ multiple SysEx
+ */
+  __pyx_t_3 = (__pyx_v_err < 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_4), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":381
+ *         err = Pm_WriteSysEx(self.midi, when, <unsigned char *> cmsg)
+ *         if err < 0 : raise Exception, Pm_GetErrorText(err)
+ *         while Pt_Time() == CurTime: # wait for SysEx to go thru or...my             # <<<<<<<<<<<<<<
+ *             pass                    # win32 machine crashes w/ multiple SysEx
+ * 
+ */
+  while (1) {
+    __pyx_t_3 = (Pt_Time() == __pyx_v_CurTime);
+    if (!__pyx_t_3) break;
+  }
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("_pyportmidi.Output.WriteSysEx");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_when);
+  __Pyx_DECREF(__pyx_v_msg);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":404
+ *     cdef int i
+ * 
+ *     def __init__(self, InputDevice, buffersize=4096):             # <<<<<<<<<<<<<<
+ *         cdef PmError err
+ *         self.i = InputDevice
+ */
+
+static int __pyx_pf_11_pyportmidi_5Input___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pf_11_pyportmidi_5Input___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_InputDevice = 0;
+  PyObject *__pyx_v_buffersize = 0;
+  PmError __pyx_v_err;
+  int __pyx_r;
+  int __pyx_t_1;
+  long __pyx_t_2;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__InputDevice,&__pyx_n_s__buffersize,0};
+  __Pyx_RefNannySetupContext("__init__");
+  if (unlikely(__pyx_kwds)) {
+    Py_ssize_t kw_args = PyDict_Size(__pyx_kwds);
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)__pyx_int_4096);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      case  0: break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  0:
+      values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__InputDevice);
+      if (likely(values[0])) kw_args--;
+      else goto __pyx_L5_argtuple_error;
+      case  1:
+      if (kw_args > 1) {
+        PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s__buffersize);
+        if (unlikely(value)) { values[1] = value; kw_args--; }
+      }
+    }
+    if (unlikely(kw_args > 0)) {
+      if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, PyTuple_GET_SIZE(__pyx_args), "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    }
+    __pyx_v_InputDevice = values[0];
+    __pyx_v_buffersize = values[1];
+  } else {
+    __pyx_v_buffersize = ((PyObject *)__pyx_int_4096);
+    switch (PyTuple_GET_SIZE(__pyx_args)) {
+      case  2: __pyx_v_buffersize = PyTuple_GET_ITEM(__pyx_args, 1);
+      case  1: __pyx_v_InputDevice = PyTuple_GET_ITEM(__pyx_args, 0);
+      break;
+      default: goto __pyx_L5_argtuple_error;
+    }
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("_pyportmidi.Input.__init__");
+  return -1;
+  __pyx_L4_argument_unpacking_done:;
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_InputDevice);
+  __Pyx_INCREF(__pyx_v_buffersize);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":406
+ *     def __init__(self, InputDevice, buffersize=4096):
+ *         cdef PmError err
+ *         self.i = InputDevice             # <<<<<<<<<<<<<<
+ *         self.debug = 0
+ *         err= Pm_OpenInput(&(self.midi),self.i,NULL,buffersize,&Pt_Time,NULL)
+ */
+  __pyx_t_1 = __Pyx_PyInt_AsInt(__pyx_v_InputDevice); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  ((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->i = __pyx_t_1;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":407
+ *         cdef PmError err
+ *         self.i = InputDevice
+ *         self.debug = 0             # <<<<<<<<<<<<<<
+ *         err= Pm_OpenInput(&(self.midi),self.i,NULL,buffersize,&Pt_Time,NULL)
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ */
+  ((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->debug = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":408
+ *         self.i = InputDevice
+ *         self.debug = 0
+ *         err= Pm_OpenInput(&(self.midi),self.i,NULL,buffersize,&Pt_Time,NULL)             # <<<<<<<<<<<<<<
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ *         if self.debug: print "MIDI input opened."
+ */
+  __pyx_t_2 = __Pyx_PyInt_AsLong(__pyx_v_buffersize); if (unlikely((__pyx_t_2 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_err = Pm_OpenInput((&((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi), ((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->i, NULL, __pyx_t_2, (&Pt_Time), NULL);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":409
+ *         self.debug = 0
+ *         err= Pm_OpenInput(&(self.midi),self.i,NULL,buffersize,&Pt_Time,NULL)
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ *         if self.debug: print "MIDI input opened."
+ * 
+ */
+  __pyx_t_3 = (__pyx_v_err < 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_4));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_4), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":410
+ *         err= Pm_OpenInput(&(self.midi),self.i,NULL,buffersize,&Pt_Time,NULL)
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ *         if self.debug: print "MIDI input opened."             # <<<<<<<<<<<<<<
+ * 
+ *     def __dealloc__(self):
+ */
+  __pyx_t_1 = ((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->debug;
+  if (__pyx_t_1) {
+    if (__Pyx_PrintOne(((PyObject *)__pyx_kp_s_12)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 410; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("_pyportmidi.Input.__init__");
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_InputDevice);
+  __Pyx_DECREF(__pyx_v_buffersize);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":412
+ *         if self.debug: print "MIDI input opened."
+ * 
+ *     def __dealloc__(self):             # <<<<<<<<<<<<<<
+ *         cdef PmError err
+ *         if self.debug: print "Closing MIDI input stream and destroying instance"
+ */
+
+static void __pyx_pf_11_pyportmidi_5Input___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_pf_11_pyportmidi_5Input___dealloc__(PyObject *__pyx_v_self) {
+  PmError __pyx_v_err;
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("__dealloc__");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":414
+ *     def __dealloc__(self):
+ *         cdef PmError err
+ *         if self.debug: print "Closing MIDI input stream and destroying instance"             # <<<<<<<<<<<<<<
+ * 
+ *         err = Pm_Close(self.midi)
+ */
+  __pyx_t_1 = ((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->debug;
+  if (__pyx_t_1) {
+    if (__Pyx_PrintOne(((PyObject *)__pyx_kp_s_13)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":416
+ *         if self.debug: print "Closing MIDI input stream and destroying instance"
+ * 
+ *         err = Pm_Close(self.midi)             # <<<<<<<<<<<<<<
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_v_err = Pm_Close(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":417
+ * 
+ *         err = Pm_Close(self.midi)
+ *         if err < 0:             # <<<<<<<<<<<<<<
+ *             raise Exception, Pm_GetErrorText(err)
+ * 
+ */
+  __pyx_t_2 = (__pyx_v_err < 0);
+  if (__pyx_t_2) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":418
+ *         err = Pm_Close(self.midi)
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __pyx_t_3 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_3));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_3), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("_pyportmidi.Input.__dealloc__");
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_RefNannyFinishContext();
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":422
+ * 
+ * 
+ *     def _check_open(self):             # <<<<<<<<<<<<<<
+ *         """ checks to see if the midi is open, and if not, raises an error.
+ *         """
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_5Input__check_open(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_5Input__check_open[] = " checks to see if the midi is open, and if not, raises an error.\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_5Input__check_open(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_r = NULL;
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("_check_open");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":426
+ *         """
+ * 
+ *         if self.midi == NULL:             # <<<<<<<<<<<<<<
+ *             raise Exception, "midi Input not open."
+ * 
+ */
+  __pyx_t_1 = (((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi == NULL);
+  if (__pyx_t_1) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":427
+ * 
+ *         if self.midi == NULL:
+ *             raise Exception, "midi Input not open."             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_kp_s_14), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("_pyportmidi.Input._check_open");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":430
+ * 
+ * 
+ *     def Close(self):             # <<<<<<<<<<<<<<
+ *         """
+ * Close()
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_5Input_Close(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_5Input_Close[] = "\nClose()\n    closes a midi stream, flushing any pending buffers.\n    (PortMidi attempts to close open streams when the application\n    exits -- this is particularly difficult under Windows.)\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_5Input_Close(PyObject *__pyx_v_self, PyObject *unused) {
+  PyObject *__pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PmError __pyx_t_3;
+  __Pyx_RefNannySetupContext("Close");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __pyx_v_err = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":440
+ *         #    return
+ * 
+ *         err = Pm_Close(self.midi)             # <<<<<<<<<<<<<<
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_t_1 = PyInt_FromLong(Pm_Close(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_v_err);
+  __pyx_v_err = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":441
+ * 
+ *         err = Pm_Close(self.midi)
+ *         if err < 0:             # <<<<<<<<<<<<<<
+ *             raise Exception, Pm_GetErrorText(err)
+ *         #self.midi = NULL
+ */
+  __pyx_t_1 = PyObject_RichCompare(__pyx_v_err, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":442
+ *         err = Pm_Close(self.midi)
+ *         if err < 0:
+ *             raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ *         #self.midi = NULL
+ * 
+ */
+    __pyx_t_3 = ((PmError)PyInt_AsLong(__pyx_v_err)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_t_3)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_1), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("_pyportmidi.Input.Close");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_err);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":447
+ * 
+ * 
+ *     def SetFilter(self, filters):             # <<<<<<<<<<<<<<
+ *         """
+ *     SetFilter(<filters>) sets filters on an open input stream
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_5Input_SetFilter(PyObject *__pyx_v_self, PyObject *__pyx_v_filters); /*proto*/
+static char __pyx_doc_11_pyportmidi_5Input_SetFilter[] = "\n    SetFilter(<filters>) sets filters on an open input stream\n    to drop selected input types. By default, only active sensing\n    messages are filtered. To prohibit, say, active sensing and\n    sysex messages, call\n    SetFilter(stream, FILT_ACTIVE | FILT_SYSEX);\n\n    Filtering is useful when midi routing or midi thru functionality\n    is being provided by the user application.\n    For example, you may want to exclude timing messages\n    (clock, MTC, start/stop/continue), while allowing note-related\n    messages to pass. Or you may be using a sequencer or drum-machine\n    for MIDI clock information but want to exclude any notes\n    it may play.\n\n    Note: SetFilter empties the buffer after setting the filter,\n    just in case anything got through.\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_5Input_SetFilter(PyObject *__pyx_v_self, PyObject *__pyx_v_filters) {
+  PmEvent __pyx_v_buffer[1];
+  PmError __pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  long __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("SetFilter");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_filters);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":469
+ *         cdef PmError err
+ * 
+ *         self._check_open()             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___check_open); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":472
+ * 
+ * 
+ *         err = Pm_SetFilter(self.midi, filters)             # <<<<<<<<<<<<<<
+ * 
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ */
+  __pyx_t_3 = __Pyx_PyInt_AsLong(__pyx_v_filters); if (unlikely((__pyx_t_3 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_err = Pm_SetFilter(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi, __pyx_t_3);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":474
+ *         err = Pm_SetFilter(self.midi, filters)
+ * 
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ *         while(Pm_Poll(self.midi) != pmNoError):
+ */
+  __pyx_t_4 = (__pyx_v_err < 0);
+  if (__pyx_t_4) {
+    __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_2), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":476
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ *         while(Pm_Poll(self.midi) != pmNoError):             # <<<<<<<<<<<<<<
+ * 
+ *             err = Pm_Read(self.midi,buffer,1)
+ */
+  while (1) {
+    __pyx_t_4 = (Pm_Poll(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi) != pmNoError);
+    if (!__pyx_t_4) break;
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":478
+ *         while(Pm_Poll(self.midi) != pmNoError):
+ * 
+ *             err = Pm_Read(self.midi,buffer,1)             # <<<<<<<<<<<<<<
+ *             if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ */
+    __pyx_v_err = Pm_Read(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi, __pyx_v_buffer, 1);
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":479
+ * 
+ *             err = Pm_Read(self.midi,buffer,1)
+ *             if err < 0: raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ *     def SetChannelMask(self, mask):
+ */
+    __pyx_t_4 = (__pyx_v_err < 0);
+    if (__pyx_t_4) {
+      __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+      __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_2), 0);
+      __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      goto __pyx_L8;
+    }
+    __pyx_L8:;
+  }
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("_pyportmidi.Input.SetFilter");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_filters);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":481
+ *             if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ *     def SetChannelMask(self, mask):             # <<<<<<<<<<<<<<
+ *         """
+ *     SetChannelMask(<mask>) filters incoming messages based on channel.
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_5Input_SetChannelMask(PyObject *__pyx_v_self, PyObject *__pyx_v_mask); /*proto*/
+static char __pyx_doc_11_pyportmidi_5Input_SetChannelMask[] = "\n    SetChannelMask(<mask>) filters incoming messages based on channel.\n    The mask is a 16-bit bitfield corresponding to appropriate channels\n    Channel(<channel>) can assist in calling this function.\n    i.e. to set receive only input on channel 1, call with\n    SetChannelMask(Channel(1))\n    Multiple channels should be OR'd together, like\n    SetChannelMask(Channel(10) | Channel(11))\n    note: PyPortMidi Channel function has been altered from\n          the original PortMidi c call to correct for what\n          seems to be a bug --- i.e. channel filters were\n          all numbered from 0 to 15 instead of 1 to 16.\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_5Input_SetChannelMask(PyObject *__pyx_v_self, PyObject *__pyx_v_mask) {
+  PmError __pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("SetChannelMask");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_mask);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":497
+ *         cdef PmError err
+ * 
+ *         self._check_open()             # <<<<<<<<<<<<<<
+ * 
+ *         err = Pm_SetChannelMask(self.midi,mask)
+ */
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___check_open); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":499
+ *         self._check_open()
+ * 
+ *         err = Pm_SetChannelMask(self.midi,mask)             # <<<<<<<<<<<<<<
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ */
+  __pyx_t_3 = __Pyx_PyInt_AsInt(__pyx_v_mask); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_err = Pm_SetChannelMask(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi, __pyx_t_3);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":500
+ * 
+ *         err = Pm_SetChannelMask(self.midi,mask)
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ * 
+ *     def Poll(self):
+ */
+  __pyx_t_4 = (__pyx_v_err < 0);
+  if (__pyx_t_4) {
+    __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_2), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("_pyportmidi.Input.SetChannelMask");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_mask);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":502
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ * 
+ *     def Poll(self):             # <<<<<<<<<<<<<<
+ *         """
+ *     Poll tests whether input is available,
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_5Input_Poll(PyObject *__pyx_v_self, PyObject *unused); /*proto*/
+static char __pyx_doc_11_pyportmidi_5Input_Poll[] = "\n    Poll tests whether input is available,\n    returning TRUE, FALSE, or an error value.\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_5Input_Poll(PyObject *__pyx_v_self, PyObject *unused) {
+  PmError __pyx_v_err;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("Poll");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":508
+ *         """
+ *         cdef PmError err
+ *         self._check_open()             # <<<<<<<<<<<<<<
+ * 
+ *         err = Pm_Poll(self.midi)
+ */
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___check_open); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":510
+ *         self._check_open()
+ * 
+ *         err = Pm_Poll(self.midi)             # <<<<<<<<<<<<<<
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ *         return err
+ */
+  __pyx_v_err = Pm_Poll(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":511
+ * 
+ *         err = Pm_Poll(self.midi)
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)             # <<<<<<<<<<<<<<
+ *         return err
+ * 
+ */
+  __pyx_t_3 = (__pyx_v_err < 0);
+  if (__pyx_t_3) {
+    __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_v_err)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_2), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":512
+ *         err = Pm_Poll(self.midi)
+ *         if err < 0: raise Exception, Pm_GetErrorText(err)
+ *         return err             # <<<<<<<<<<<<<<
+ * 
+ *     def Read(self,length):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = PyInt_FromLong(__pyx_v_err); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 512; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("_pyportmidi.Input.Poll");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":514
+ *         return err
+ * 
+ *     def Read(self,length):             # <<<<<<<<<<<<<<
+ *         """
+ * Read(length): returns up to <length> midi events stored in
+ */
+
+static PyObject *__pyx_pf_11_pyportmidi_5Input_Read(PyObject *__pyx_v_self, PyObject *__pyx_v_length); /*proto*/
+static char __pyx_doc_11_pyportmidi_5Input_Read[] = "\nRead(length): returns up to <length> midi events stored in\nthe buffer and returns them as a list:\n[[[status,data1,data2,data3],timestamp],\n [[status,data1,data2,data3],timestamp],...]\nexample: Read(50) returns all the events in the buffer,\n         up to 50 events.\n        ";
+static PyObject *__pyx_pf_11_pyportmidi_5Input_Read(PyObject *__pyx_v_self, PyObject *__pyx_v_length) {
+  PmEvent __pyx_v_buffer[1024];
+  PyObject *__pyx_v_x;
+  PyObject *__pyx_v_NumEvents;
+  PyObject *__pyx_v_loop;
+  PyObject *__pyx_r = NULL;
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  long __pyx_t_4;
+  PmError __pyx_t_5;
+  Py_ssize_t __pyx_t_6;
+  Py_ssize_t __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_11 = NULL;
+  __Pyx_RefNannySetupContext("Read");
+  __Pyx_INCREF((PyObject *)__pyx_v_self);
+  __Pyx_INCREF(__pyx_v_length);
+  __pyx_v_x = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_NumEvents = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_v_loop = Py_None; __Pyx_INCREF(Py_None);
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":525
+ *         cdef PmEvent buffer[1024]
+ * 
+ *         self._check_open()             # <<<<<<<<<<<<<<
+ * 
+ *         x = []
+ */
+  __pyx_t_1 = PyObject_GetAttr(__pyx_v_self, __pyx_n_s___check_open); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":527
+ *         self._check_open()
+ * 
+ *         x = []             # <<<<<<<<<<<<<<
+ * 
+ *         if length > 1024: raise IndexError, 'maximum buffer length is 1024'
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __Pyx_DECREF(__pyx_v_x);
+  __pyx_v_x = ((PyObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":529
+ *         x = []
+ * 
+ *         if length > 1024: raise IndexError, 'maximum buffer length is 1024'             # <<<<<<<<<<<<<<
+ *         if length < 1: raise IndexError, 'minimum buffer length is 1'
+ *         NumEvents = Pm_Read(self.midi,buffer,length)
+ */
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_length, __pyx_int_1024, Py_GT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+    __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_15), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":530
+ * 
+ *         if length > 1024: raise IndexError, 'maximum buffer length is 1024'
+ *         if length < 1: raise IndexError, 'minimum buffer length is 1'             # <<<<<<<<<<<<<<
+ *         NumEvents = Pm_Read(self.midi,buffer,length)
+ *         if NumEvents < 0: raise Exception, Pm_GetErrorText(NumEvents)
+ */
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_length, __pyx_int_1, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+    __Pyx_Raise(__pyx_builtin_IndexError, ((PyObject *)__pyx_kp_s_16), 0);
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L6;
+  }
+  __pyx_L6:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":531
+ *         if length > 1024: raise IndexError, 'maximum buffer length is 1024'
+ *         if length < 1: raise IndexError, 'minimum buffer length is 1'
+ *         NumEvents = Pm_Read(self.midi,buffer,length)             # <<<<<<<<<<<<<<
+ *         if NumEvents < 0: raise Exception, Pm_GetErrorText(NumEvents)
+ *         x=[]
+ */
+  __pyx_t_4 = __Pyx_PyInt_AsLong(__pyx_v_length); if (unlikely((__pyx_t_4 == (long)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(Pm_Read(((struct __pyx_obj_11_pyportmidi_Input *)__pyx_v_self)->midi, __pyx_v_buffer, __pyx_t_4)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_v_NumEvents);
+  __pyx_v_NumEvents = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":532
+ *         if length < 1: raise IndexError, 'minimum buffer length is 1'
+ *         NumEvents = Pm_Read(self.midi,buffer,length)
+ *         if NumEvents < 0: raise Exception, Pm_GetErrorText(NumEvents)             # <<<<<<<<<<<<<<
+ *         x=[]
+ *         if NumEvents >= 1:
+ */
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_NumEvents, __pyx_int_0, Py_LT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+    __pyx_t_5 = ((PmError)PyInt_AsLong(__pyx_v_NumEvents)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyBytes_FromString(Pm_GetErrorText(__pyx_t_5)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+    __Pyx_Raise(__pyx_builtin_Exception, ((PyObject *)__pyx_t_2), 0);
+    __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":533
+ *         NumEvents = Pm_Read(self.midi,buffer,length)
+ *         if NumEvents < 0: raise Exception, Pm_GetErrorText(NumEvents)
+ *         x=[]             # <<<<<<<<<<<<<<
+ *         if NumEvents >= 1:
+ *             for loop in range(NumEvents):
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_2));
+  __Pyx_DECREF(__pyx_v_x);
+  __pyx_v_x = ((PyObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":534
+ *         if NumEvents < 0: raise Exception, Pm_GetErrorText(NumEvents)
+ *         x=[]
+ *         if NumEvents >= 1:             # <<<<<<<<<<<<<<
+ *             for loop in range(NumEvents):
+ *                  x.append([[buffer[loop].message & 0xff, (buffer[loop].message >> 8) & 0xFF, (buffer[loop].message >> 16) & 0xFF, (buffer[loop].message >> 24) & 0xFF], buffer[loop].timestamp])
+ */
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_NumEvents, __pyx_int_1, Py_GE); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (__pyx_t_3) {
+
+    /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":535
+ *         x=[]
+ *         if NumEvents >= 1:
+ *             for loop in range(NumEvents):             # <<<<<<<<<<<<<<
+ *                  x.append([[buffer[loop].message & 0xff, (buffer[loop].message >> 8) & 0xFF, (buffer[loop].message >> 16) & 0xFF, (buffer[loop].message >> 24) & 0xFF], buffer[loop].timestamp])
+ *         return x
+ */
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_v_NumEvents);
+    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_NumEvents);
+    __Pyx_GIVEREF(__pyx_v_NumEvents);
+    __pyx_t_1 = PyObject_Call(__pyx_builtin_range, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
+      __pyx_t_6 = 0; __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
+    } else {
+      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+    }
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    for (;;) {
+      if (likely(PyList_CheckExact(__pyx_t_2))) {
+        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++;
+      } else if (likely(PyTuple_CheckExact(__pyx_t_2))) {
+        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++;
+      } else {
+        __pyx_t_1 = PyIter_Next(__pyx_t_2);
+        if (!__pyx_t_1) {
+          if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          break;
+        }
+        __Pyx_GOTREF(__pyx_t_1);
+      }
+      __Pyx_DECREF(__pyx_v_loop);
+      __pyx_v_loop = __pyx_t_1;
+      __pyx_t_1 = 0;
+
+      /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":536
+ *         if NumEvents >= 1:
+ *             for loop in range(NumEvents):
+ *                  x.append([[buffer[loop].message & 0xff, (buffer[loop].message >> 8) & 0xFF, (buffer[loop].message >> 16) & 0xFF, (buffer[loop].message >> 24) & 0xFF], buffer[loop].timestamp])             # <<<<<<<<<<<<<<
+ *         return x
+ */
+      __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyInt_to_py_PmMessage(((__pyx_v_buffer[__pyx_t_7]).message & 0xff)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = __Pyx_PyInt_to_py_PmMessage((((__pyx_v_buffer[__pyx_t_7]).message >> 8) & 0xFF)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_8);
+      __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __Pyx_PyInt_to_py_PmMessage((((__pyx_v_buffer[__pyx_t_7]).message >> 16) & 0xFF)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = __Pyx_PyInt_to_py_PmMessage((((__pyx_v_buffer[__pyx_t_7]).message >> 24) & 0xFF)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_10);
+      __pyx_t_11 = PyList_New(4); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_11));
+      PyList_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyList_SET_ITEM(__pyx_t_11, 1, __pyx_t_8);
+      __Pyx_GIVEREF(__pyx_t_8);
+      PyList_SET_ITEM(__pyx_t_11, 2, __pyx_t_9);
+      __Pyx_GIVEREF(__pyx_t_9);
+      PyList_SET_ITEM(__pyx_t_11, 3, __pyx_t_10);
+      __Pyx_GIVEREF(__pyx_t_10);
+      __pyx_t_1 = 0;
+      __pyx_t_8 = 0;
+      __pyx_t_9 = 0;
+      __pyx_t_10 = 0;
+      __pyx_t_7 = __Pyx_PyIndex_AsSsize_t(__pyx_v_loop); if (unlikely((__pyx_t_7 == (Py_ssize_t)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = __Pyx_PyInt_to_py_PmTimestamp((__pyx_v_buffer[__pyx_t_7]).timestamp); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_10);
+      __pyx_t_9 = PyList_New(2); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(((PyObject *)__pyx_t_9));
+      PyList_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_t_11));
+      __Pyx_GIVEREF(((PyObject *)__pyx_t_11));
+      PyList_SET_ITEM(__pyx_t_9, 1, __pyx_t_10);
+      __Pyx_GIVEREF(__pyx_t_10);
+      __pyx_t_11 = 0;
+      __pyx_t_10 = 0;
+      __pyx_t_10 = __Pyx_PyObject_Append(__pyx_v_x, ((PyObject *)__pyx_t_9)); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_10);
+      __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    }
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    goto __pyx_L8;
+  }
+  __pyx_L8:;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":537
+ *             for loop in range(NumEvents):
+ *                  x.append([[buffer[loop].message & 0xff, (buffer[loop].message >> 8) & 0xFF, (buffer[loop].message >> 16) & 0xFF, (buffer[loop].message >> 24) & 0xFF], buffer[loop].timestamp])
+ *         return x             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_x);
+  __pyx_r = __pyx_v_x;
+  goto __pyx_L0;
+
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_AddTraceback("_pyportmidi.Input.Read");
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_DECREF(__pyx_v_x);
+  __Pyx_DECREF(__pyx_v_NumEvents);
+  __Pyx_DECREF(__pyx_v_loop);
+  __Pyx_DECREF((PyObject *)__pyx_v_self);
+  __Pyx_DECREF(__pyx_v_length);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_tp_new_11_pyportmidi_Output(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  return o;
+}
+
+static void __pyx_tp_dealloc_11_pyportmidi_Output(PyObject *o) {
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pf_11_pyportmidi_6Output___dealloc__(o);
+    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static struct PyMethodDef __pyx_methods_11_pyportmidi_Output[] = {
+  {__Pyx_NAMESTR("_check_open"), (PyCFunction)__pyx_pf_11_pyportmidi_6Output__check_open, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_6Output__check_open)},
+  {__Pyx_NAMESTR("Close"), (PyCFunction)__pyx_pf_11_pyportmidi_6Output_Close, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_6Output_Close)},
+  {__Pyx_NAMESTR("Abort"), (PyCFunction)__pyx_pf_11_pyportmidi_6Output_Abort, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_6Output_Abort)},
+  {__Pyx_NAMESTR("Write"), (PyCFunction)__pyx_pf_11_pyportmidi_6Output_Write, METH_O, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_6Output_Write)},
+  {__Pyx_NAMESTR("WriteShort"), (PyCFunction)__pyx_pf_11_pyportmidi_6Output_WriteShort, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_6Output_WriteShort)},
+  {__Pyx_NAMESTR("WriteSysEx"), (PyCFunction)__pyx_pf_11_pyportmidi_6Output_WriteSysEx, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_6Output_WriteSysEx)},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Output = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION >= 3
+  0, /*reserved*/
+  #else
+  0, /*nb_long*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Output = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Output = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Output = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_11_pyportmidi_Output = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("_pyportmidi.Output"), /*tp_name*/
+  sizeof(struct __pyx_obj_11_pyportmidi_Output), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_11_pyportmidi_Output, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_Output, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Output, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Output, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Output, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  __Pyx_DOCSTR("\nclass Output:\n    define an output MIDI stream. Takes the form:\n        x = pypm.Output(MidiOutputDevice, latency)\n    latency is in ms.\n    If latency = 0 then timestamps for output are ignored.\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_11_pyportmidi_Output, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_11_pyportmidi_6Output___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_11_pyportmidi_Output, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_11_pyportmidi_Input(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = (*t->tp_alloc)(t, 0);
+  if (!o) return 0;
+  return o;
+}
+
+static void __pyx_tp_dealloc_11_pyportmidi_Input(PyObject *o) {
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pf_11_pyportmidi_5Input___dealloc__(o);
+    if (PyErr_Occurred()) PyErr_WriteUnraisable(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static struct PyMethodDef __pyx_methods_11_pyportmidi_Input[] = {
+  {__Pyx_NAMESTR("_check_open"), (PyCFunction)__pyx_pf_11_pyportmidi_5Input__check_open, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_5Input__check_open)},
+  {__Pyx_NAMESTR("Close"), (PyCFunction)__pyx_pf_11_pyportmidi_5Input_Close, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_5Input_Close)},
+  {__Pyx_NAMESTR("SetFilter"), (PyCFunction)__pyx_pf_11_pyportmidi_5Input_SetFilter, METH_O, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_5Input_SetFilter)},
+  {__Pyx_NAMESTR("SetChannelMask"), (PyCFunction)__pyx_pf_11_pyportmidi_5Input_SetChannelMask, METH_O, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_5Input_SetChannelMask)},
+  {__Pyx_NAMESTR("Poll"), (PyCFunction)__pyx_pf_11_pyportmidi_5Input_Poll, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_5Input_Poll)},
+  {__Pyx_NAMESTR("Read"), (PyCFunction)__pyx_pf_11_pyportmidi_5Input_Read, METH_O, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_5Input_Read)},
+  {0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_Input = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  0, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION >= 3
+  0, /*reserved*/
+  #else
+  0, /*nb_long*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if (PY_MAJOR_VERSION >= 3) || (Py_TPFLAGS_DEFAULT & Py_TPFLAGS_HAVE_INDEX)
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_Input = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  0, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_Input = {
+  0, /*mp_length*/
+  0, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_Input = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*bf_releasebuffer*/
+  #endif
+};
+
+PyTypeObject __pyx_type_11_pyportmidi_Input = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("_pyportmidi.Input"), /*tp_name*/
+  sizeof(struct __pyx_obj_11_pyportmidi_Input), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_11_pyportmidi_Input, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  0, /*tp_compare*/
+  0, /*tp_repr*/
+  &__pyx_tp_as_number_Input, /*tp_as_number*/
+  &__pyx_tp_as_sequence_Input, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping_Input, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  &__pyx_tp_as_buffer_Input, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  __Pyx_DOCSTR("\nclass Input:\n    define an input MIDI stream. Takes the form:\n        x = pypm.Input(MidiInputDevice)\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_11_pyportmidi_Input, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pf_11_pyportmidi_5Input___init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_11_pyportmidi_Input, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+};
+
+static struct PyMethodDef __pyx_methods[] = {
+  {__Pyx_NAMESTR("Initialize"), (PyCFunction)__pyx_pf_11_pyportmidi_Initialize, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_Initialize)},
+  {__Pyx_NAMESTR("Terminate"), (PyCFunction)__pyx_pf_11_pyportmidi_Terminate, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_Terminate)},
+  {__Pyx_NAMESTR("GetDefaultInputDeviceID"), (PyCFunction)__pyx_pf_11_pyportmidi_GetDefaultInputDeviceID, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("GetDefaultOutputDeviceID"), (PyCFunction)__pyx_pf_11_pyportmidi_GetDefaultOutputDeviceID, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("CountDevices"), (PyCFunction)__pyx_pf_11_pyportmidi_CountDevices, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("GetDeviceInfo"), (PyCFunction)__pyx_pf_11_pyportmidi_GetDeviceInfo, METH_O, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_GetDeviceInfo)},
+  {__Pyx_NAMESTR("Time"), (PyCFunction)__pyx_pf_11_pyportmidi_Time, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_Time)},
+  {__Pyx_NAMESTR("GetErrorText"), (PyCFunction)__pyx_pf_11_pyportmidi_GetErrorText, METH_O, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_GetErrorText)},
+  {__Pyx_NAMESTR("Channel"), (PyCFunction)__pyx_pf_11_pyportmidi_Channel, METH_O, __Pyx_DOCSTR(__pyx_doc_11_pyportmidi_Channel)},
+  {0, 0, 0, 0}
+};
+
+static void __pyx_init_filenames(void); /*proto*/
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+    PyModuleDef_HEAD_INIT,
+    __Pyx_NAMESTR("_pyportmidi"),
+    0, /* m_doc */
+    -1, /* m_size */
+    __pyx_methods /* m_methods */,
+    NULL, /* m_reload */
+    NULL, /* m_traverse */
+    NULL, /* m_clear */
+    NULL /* m_free */
+};
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
+  {&__pyx_kp_s_10, __pyx_k_10, sizeof(__pyx_k_10), 0, 0, 1, 0},
+  {&__pyx_kp_s_11, __pyx_k_11, sizeof(__pyx_k_11), 0, 0, 1, 0},
+  {&__pyx_kp_s_12, __pyx_k_12, sizeof(__pyx_k_12), 0, 0, 1, 0},
+  {&__pyx_kp_s_13, __pyx_k_13, sizeof(__pyx_k_13), 0, 0, 1, 0},
+  {&__pyx_kp_s_14, __pyx_k_14, sizeof(__pyx_k_14), 0, 0, 1, 0},
+  {&__pyx_kp_s_15, __pyx_k_15, sizeof(__pyx_k_15), 0, 0, 1, 0},
+  {&__pyx_kp_s_16, __pyx_k_16, sizeof(__pyx_k_16), 0, 0, 1, 0},
+  {&__pyx_kp_s_17, __pyx_k_17, sizeof(__pyx_k_17), 0, 0, 1, 0},
+  {&__pyx_n_s_18, __pyx_k_18, sizeof(__pyx_k_18), 0, 0, 1, 1},
+  {&__pyx_n_s_19, __pyx_k_19, sizeof(__pyx_k_19), 0, 0, 1, 1},
+  {&__pyx_kp_s_2, __pyx_k_2, sizeof(__pyx_k_2), 0, 0, 1, 0},
+  {&__pyx_kp_u_20, __pyx_k_20, sizeof(__pyx_k_20), 0, 1, 0, 0},
+  {&__pyx_kp_u_21, __pyx_k_21, sizeof(__pyx_k_21), 0, 1, 0, 0},
+  {&__pyx_kp_u_22, __pyx_k_22, sizeof(__pyx_k_22), 0, 1, 0, 0},
+  {&__pyx_kp_u_23, __pyx_k_23, sizeof(__pyx_k_23), 0, 1, 0, 0},
+  {&__pyx_kp_u_24, __pyx_k_24, sizeof(__pyx_k_24), 0, 1, 0, 0},
+  {&__pyx_kp_u_25, __pyx_k_25, sizeof(__pyx_k_25), 0, 1, 0, 0},
+  {&__pyx_kp_u_26, __pyx_k_26, sizeof(__pyx_k_26), 0, 1, 0, 0},
+  {&__pyx_kp_u_27, __pyx_k_27, sizeof(__pyx_k_27), 0, 1, 0, 0},
+  {&__pyx_kp_u_28, __pyx_k_28, sizeof(__pyx_k_28), 0, 1, 0, 0},
+  {&__pyx_kp_u_29, __pyx_k_29, sizeof(__pyx_k_29), 0, 1, 0, 0},
+  {&__pyx_kp_s_3, __pyx_k_3, sizeof(__pyx_k_3), 0, 0, 1, 0},
+  {&__pyx_kp_u_30, __pyx_k_30, sizeof(__pyx_k_30), 0, 1, 0, 0},
+  {&__pyx_kp_u_31, __pyx_k_31, sizeof(__pyx_k_31), 0, 1, 0, 0},
+  {&__pyx_kp_u_32, __pyx_k_32, sizeof(__pyx_k_32), 0, 1, 0, 0},
+  {&__pyx_kp_u_33, __pyx_k_33, sizeof(__pyx_k_33), 0, 1, 0, 0},
+  {&__pyx_kp_u_34, __pyx_k_34, sizeof(__pyx_k_34), 0, 1, 0, 0},
+  {&__pyx_kp_u_35, __pyx_k_35, sizeof(__pyx_k_35), 0, 1, 0, 0},
+  {&__pyx_kp_u_36, __pyx_k_36, sizeof(__pyx_k_36), 0, 1, 0, 0},
+  {&__pyx_kp_u_37, __pyx_k_37, sizeof(__pyx_k_37), 0, 1, 0, 0},
+  {&__pyx_kp_s_4, __pyx_k_4, sizeof(__pyx_k_4), 0, 0, 1, 0},
+  {&__pyx_kp_s_5, __pyx_k_5, sizeof(__pyx_k_5), 0, 0, 1, 0},
+  {&__pyx_kp_s_6, __pyx_k_6, sizeof(__pyx_k_6), 0, 0, 1, 0},
+  {&__pyx_kp_s_7, __pyx_k_7, sizeof(__pyx_k_7), 0, 0, 1, 0},
+  {&__pyx_kp_s_8, __pyx_k_8, sizeof(__pyx_k_8), 0, 0, 1, 0},
+  {&__pyx_kp_s_9, __pyx_k_9, sizeof(__pyx_k_9), 0, 0, 1, 0},
+  {&__pyx_n_s__Abort, __pyx_k__Abort, sizeof(__pyx_k__Abort), 0, 0, 1, 1},
+  {&__pyx_n_s__B, __pyx_k__B, sizeof(__pyx_k__B), 0, 0, 1, 1},
+  {&__pyx_n_s__Channel, __pyx_k__Channel, sizeof(__pyx_k__Channel), 0, 0, 1, 1},
+  {&__pyx_n_s__Close, __pyx_k__Close, sizeof(__pyx_k__Close), 0, 0, 1, 1},
+  {&__pyx_n_s__Exception, __pyx_k__Exception, sizeof(__pyx_k__Exception), 0, 0, 1, 1},
+  {&__pyx_n_s__FALSE, __pyx_k__FALSE, sizeof(__pyx_k__FALSE), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_ACTIVE, __pyx_k__FILT_ACTIVE, sizeof(__pyx_k__FILT_ACTIVE), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_AFTERTOUCH, __pyx_k__FILT_AFTERTOUCH, sizeof(__pyx_k__FILT_AFTERTOUCH), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_CLOCK, __pyx_k__FILT_CLOCK, sizeof(__pyx_k__FILT_CLOCK), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_CONTROL, __pyx_k__FILT_CONTROL, sizeof(__pyx_k__FILT_CONTROL), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_F9, __pyx_k__FILT_F9, sizeof(__pyx_k__FILT_F9), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_FD, __pyx_k__FILT_FD, sizeof(__pyx_k__FILT_FD), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_MTC, __pyx_k__FILT_MTC, sizeof(__pyx_k__FILT_MTC), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_NOTE, __pyx_k__FILT_NOTE, sizeof(__pyx_k__FILT_NOTE), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_PITCHBEND, __pyx_k__FILT_PITCHBEND, sizeof(__pyx_k__FILT_PITCHBEND), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_PLAY, __pyx_k__FILT_PLAY, sizeof(__pyx_k__FILT_PLAY), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_PROGRAM, __pyx_k__FILT_PROGRAM, sizeof(__pyx_k__FILT_PROGRAM), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_REALTIME, __pyx_k__FILT_REALTIME, sizeof(__pyx_k__FILT_REALTIME), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_RESET, __pyx_k__FILT_RESET, sizeof(__pyx_k__FILT_RESET), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_SONG_POSITION, __pyx_k__FILT_SONG_POSITION, sizeof(__pyx_k__FILT_SONG_POSITION), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_SONG_SELECT, __pyx_k__FILT_SONG_SELECT, sizeof(__pyx_k__FILT_SONG_SELECT), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_SYSEX, __pyx_k__FILT_SYSEX, sizeof(__pyx_k__FILT_SYSEX), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_TICK, __pyx_k__FILT_TICK, sizeof(__pyx_k__FILT_TICK), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_TUNE, __pyx_k__FILT_TUNE, sizeof(__pyx_k__FILT_TUNE), 0, 0, 1, 1},
+  {&__pyx_n_s__FILT_UNDEFINED, __pyx_k__FILT_UNDEFINED, sizeof(__pyx_k__FILT_UNDEFINED), 0, 0, 1, 1},
+  {&__pyx_n_s__GetDeviceInfo, __pyx_k__GetDeviceInfo, sizeof(__pyx_k__GetDeviceInfo), 0, 0, 1, 1},
+  {&__pyx_n_s__GetErrorText, __pyx_k__GetErrorText, sizeof(__pyx_k__GetErrorText), 0, 0, 1, 1},
+  {&__pyx_n_s__IndexError, __pyx_k__IndexError, sizeof(__pyx_k__IndexError), 0, 0, 1, 1},
+  {&__pyx_n_s__Initialize, __pyx_k__Initialize, sizeof(__pyx_k__Initialize), 0, 0, 1, 1},
+  {&__pyx_n_s__Input, __pyx_k__Input, sizeof(__pyx_k__Input), 0, 0, 1, 1},
+  {&__pyx_n_s__InputDevice, __pyx_k__InputDevice, sizeof(__pyx_k__InputDevice), 0, 0, 1, 1},
+  {&__pyx_n_s__Output, __pyx_k__Output, sizeof(__pyx_k__Output), 0, 0, 1, 1},
+  {&__pyx_n_s__OutputDevice, __pyx_k__OutputDevice, sizeof(__pyx_k__OutputDevice), 0, 0, 1, 1},
+  {&__pyx_n_s__Poll, __pyx_k__Poll, sizeof(__pyx_k__Poll), 0, 0, 1, 1},
+  {&__pyx_n_s__Read, __pyx_k__Read, sizeof(__pyx_k__Read), 0, 0, 1, 1},
+  {&__pyx_n_s__SetChannelMask, __pyx_k__SetChannelMask, sizeof(__pyx_k__SetChannelMask), 0, 0, 1, 1},
+  {&__pyx_n_s__SetFilter, __pyx_k__SetFilter, sizeof(__pyx_k__SetFilter), 0, 0, 1, 1},
+  {&__pyx_n_s__TRUE, __pyx_k__TRUE, sizeof(__pyx_k__TRUE), 0, 0, 1, 1},
+  {&__pyx_n_s__Terminate, __pyx_k__Terminate, sizeof(__pyx_k__Terminate), 0, 0, 1, 1},
+  {&__pyx_n_s__Time, __pyx_k__Time, sizeof(__pyx_k__Time), 0, 0, 1, 1},
+  {&__pyx_n_s__Write, __pyx_k__Write, sizeof(__pyx_k__Write), 0, 0, 1, 1},
+  {&__pyx_n_s__WriteShort, __pyx_k__WriteShort, sizeof(__pyx_k__WriteShort), 0, 0, 1, 1},
+  {&__pyx_n_s__WriteSysEx, __pyx_k__WriteSysEx, sizeof(__pyx_k__WriteSysEx), 0, 0, 1, 1},
+  {&__pyx_n_s____main__, __pyx_k____main__, sizeof(__pyx_k____main__), 0, 0, 1, 1},
+  {&__pyx_n_s____test__, __pyx_k____test__, sizeof(__pyx_k____test__), 0, 0, 1, 1},
+  {&__pyx_n_s____version__, __pyx_k____version__, sizeof(__pyx_k____version__), 0, 0, 1, 1},
+  {&__pyx_n_s___aborted, __pyx_k___aborted, sizeof(__pyx_k___aborted), 0, 0, 1, 1},
+  {&__pyx_n_s___check_open, __pyx_k___check_open, sizeof(__pyx_k___check_open), 0, 0, 1, 1},
+  {&__pyx_n_s__array, __pyx_k__array, sizeof(__pyx_k__array), 0, 0, 1, 1},
+  {&__pyx_n_s__buffersize, __pyx_k__buffersize, sizeof(__pyx_k__buffersize), 0, 0, 1, 1},
+  {&__pyx_n_s__data1, __pyx_k__data1, sizeof(__pyx_k__data1), 0, 0, 1, 1},
+  {&__pyx_n_s__data2, __pyx_k__data2, sizeof(__pyx_k__data2), 0, 0, 1, 1},
+  {&__pyx_n_s__debug, __pyx_k__debug, sizeof(__pyx_k__debug), 0, 0, 1, 1},
+  {&__pyx_n_s__i, __pyx_k__i, sizeof(__pyx_k__i), 0, 0, 1, 1},
+  {&__pyx_n_s__input, __pyx_k__input, sizeof(__pyx_k__input), 0, 0, 1, 1},
+  {&__pyx_n_s__interf, __pyx_k__interf, sizeof(__pyx_k__interf), 0, 0, 1, 1},
+  {&__pyx_n_s__latency, __pyx_k__latency, sizeof(__pyx_k__latency), 0, 0, 1, 1},
+  {&__pyx_n_s__message, __pyx_k__message, sizeof(__pyx_k__message), 0, 0, 1, 1},
+  {&__pyx_n_s__midi, __pyx_k__midi, sizeof(__pyx_k__midi), 0, 0, 1, 1},
+  {&__pyx_n_s__msg, __pyx_k__msg, sizeof(__pyx_k__msg), 0, 0, 1, 1},
+  {&__pyx_n_s__name, __pyx_k__name, sizeof(__pyx_k__name), 0, 0, 1, 1},
+  {&__pyx_n_s__opened, __pyx_k__opened, sizeof(__pyx_k__opened), 0, 0, 1, 1},
+  {&__pyx_n_s__output, __pyx_k__output, sizeof(__pyx_k__output), 0, 0, 1, 1},
+  {&__pyx_n_s__range, __pyx_k__range, sizeof(__pyx_k__range), 0, 0, 1, 1},
+  {&__pyx_n_s__status, __pyx_k__status, sizeof(__pyx_k__status), 0, 0, 1, 1},
+  {&__pyx_n_s__timestamp, __pyx_k__timestamp, sizeof(__pyx_k__timestamp), 0, 0, 1, 1},
+  {&__pyx_n_s__tostring, __pyx_k__tostring, sizeof(__pyx_k__tostring), 0, 0, 1, 1},
+  {&__pyx_n_s__when, __pyx_k__when, sizeof(__pyx_k__when), 0, 0, 1, 1},
+  {0, 0, 0, 0, 0, 0, 0}
+};
+static int __Pyx_InitCachedBuiltins(void) {
+  __pyx_builtin_Exception = __Pyx_GetName(__pyx_b, __pyx_n_s__Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_IndexError = __Pyx_GetName(__pyx_b, __pyx_n_s__IndexError); if (!__pyx_builtin_IndexError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetName(__pyx_b, __pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 320; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+static int __Pyx_InitGlobals(void) {
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_16 = PyInt_FromLong(16); if (unlikely(!__pyx_int_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x1 = PyInt_FromLong(0x1); if (unlikely(!__pyx_int_0x1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x2 = PyInt_FromLong(0x2); if (unlikely(!__pyx_int_0x2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x4 = PyInt_FromLong(0x4); if (unlikely(!__pyx_int_0x4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x8 = PyInt_FromLong(0x8); if (unlikely(!__pyx_int_0x8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x10 = PyInt_FromLong(0x10); if (unlikely(!__pyx_int_0x10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x20 = PyInt_FromLong(0x20); if (unlikely(!__pyx_int_0x20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x30 = PyInt_FromLong(0x30); if (unlikely(!__pyx_int_0x30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x40 = PyInt_FromLong(0x40); if (unlikely(!__pyx_int_0x40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x7F = PyInt_FromLong(0x7F); if (unlikely(!__pyx_int_0x7F)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x80 = PyInt_FromLong(0x80); if (unlikely(!__pyx_int_0x80)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0xFF = PyInt_FromLong(0xFF); if (unlikely(!__pyx_int_0xFF)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_1024 = PyInt_FromLong(1024); if (unlikely(!__pyx_int_1024)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_4096 = PyInt_FromLong(4096); if (unlikely(!__pyx_int_4096)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x100 = PyInt_FromLong(0x100); if (unlikely(!__pyx_int_0x100)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x200 = PyInt_FromLong(0x200); if (unlikely(!__pyx_int_0x200)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x300 = PyInt_FromLong(0x300); if (unlikely(!__pyx_int_0x300)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x400 = PyInt_FromLong(0x400); if (unlikely(!__pyx_int_0x400)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x800 = PyInt_FromLong(0x800); if (unlikely(!__pyx_int_0x800)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x1000 = PyInt_FromLong(0x1000); if (unlikely(!__pyx_int_0x1000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x2000 = PyInt_FromLong(0x2000); if (unlikely(!__pyx_int_0x2000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x4000 = PyInt_FromLong(0x4000); if (unlikely(!__pyx_int_0x4000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x8000 = PyInt_FromLong(0x8000); if (unlikely(!__pyx_int_0x8000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0xFF00 = PyInt_FromLong(0xFF00); if (unlikely(!__pyx_int_0xFF00)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0x10000 = PyInt_FromLong(0x10000); if (unlikely(!__pyx_int_0x10000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_int_0xFF0000 = PyInt_FromLong(0xFF0000); if (unlikely(!__pyx_int_0xFF0000)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  return 0;
+  __pyx_L1_error:;
+  return -1;
+}
+
+#if PY_MAJOR_VERSION < 3
+PyMODINIT_FUNC init_pyportmidi(void); /*proto*/
+PyMODINIT_FUNC init_pyportmidi(void)
+#else
+PyMODINIT_FUNC PyInit__pyportmidi(void); /*proto*/
+PyMODINIT_FUNC PyInit__pyportmidi(void)
+#endif
+{
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  #if CYTHON_REFNANNY
+  void* __pyx_refnanny = NULL;
+  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+  if (!__Pyx_RefNanny) {
+      PyErr_Clear();
+      __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+      if (!__Pyx_RefNanny)
+          Py_FatalError("failed to import 'refnanny' module");
+  }
+  __pyx_refnanny = __Pyx_RefNanny->SetupContext("PyMODINIT_FUNC PyInit__pyportmidi(void)", __LINE__, __FILE__);
+  #endif
+  __pyx_init_filenames();
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #if PY_MAJOR_VERSION < 3
+  __pyx_empty_bytes = PyString_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #else
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  #endif
+  /*--- Library function declarations ---*/
+  /*--- Threads initialization code ---*/
+  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+  #ifdef WITH_THREAD /* Python build with threading support? */
+  PyEval_InitThreads();
+  #endif
+  #endif
+  /*--- Module creation code ---*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_m = Py_InitModule4(__Pyx_NAMESTR("_pyportmidi"), __pyx_methods, 0, 0, PYTHON_API_VERSION);
+  #else
+  __pyx_m = PyModule_Create(&__pyx_moduledef);
+  #endif
+  if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  #if PY_MAJOR_VERSION < 3
+  Py_INCREF(__pyx_m);
+  #endif
+  __pyx_b = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME));
+  if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (__Pyx_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  /*--- Initialize various global constants etc. ---*/
+  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_module_is_main__pyportmidi) {
+    if (__Pyx_SetAttrString(__pyx_m, "__name__", __pyx_n_s____main__) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  }
+  /*--- Builtin init code ---*/
+  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  /*--- Global init code ---*/
+  /*--- Function export code ---*/
+  /*--- Type init code ---*/
+  if (PyType_Ready(&__pyx_type_11_pyportmidi_Output) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "Output", (PyObject *)&__pyx_type_11_pyportmidi_Output) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_11_pyportmidi_Output = &__pyx_type_11_pyportmidi_Output;
+  if (PyType_Ready(&__pyx_type_11_pyportmidi_Input) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "Input", (PyObject *)&__pyx_type_11_pyportmidi_Input) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_11_pyportmidi_Input = &__pyx_type_11_pyportmidi_Input;
+  /*--- Type import code ---*/
+  /*--- Function import code ---*/
+  /*--- Execution code ---*/
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":7
+ * # harrison@media.mit.edu
+ * # written in Pyrex
+ * __version__="0.07"             # <<<<<<<<<<<<<<
+ * 
+ * import array
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____version__, ((PyObject *)__pyx_kp_s_17)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 7; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":9
+ * __version__="0.07"
+ * 
+ * import array             # <<<<<<<<<<<<<<
+ * 
+ * # CHANGES:
+ */
+  __pyx_t_1 = __Pyx_Import(((PyObject *)__pyx_n_s__array), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__array, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":108
+ *     PtTimestamp Pt_Time()
+ * 
+ * FILT_ACTIVE=0x1             # <<<<<<<<<<<<<<
+ * FILT_SYSEX=0x2
+ * FILT_CLOCK=0x4
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_ACTIVE, __pyx_int_0x1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":109
+ * 
+ * FILT_ACTIVE=0x1
+ * FILT_SYSEX=0x2             # <<<<<<<<<<<<<<
+ * FILT_CLOCK=0x4
+ * FILT_PLAY=0x8
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_SYSEX, __pyx_int_0x2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":110
+ * FILT_ACTIVE=0x1
+ * FILT_SYSEX=0x2
+ * FILT_CLOCK=0x4             # <<<<<<<<<<<<<<
+ * FILT_PLAY=0x8
+ * FILT_F9=0x10
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_CLOCK, __pyx_int_0x4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":111
+ * FILT_SYSEX=0x2
+ * FILT_CLOCK=0x4
+ * FILT_PLAY=0x8             # <<<<<<<<<<<<<<
+ * FILT_F9=0x10
+ * FILT_TICK=0x10
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_PLAY, __pyx_int_0x8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":112
+ * FILT_CLOCK=0x4
+ * FILT_PLAY=0x8
+ * FILT_F9=0x10             # <<<<<<<<<<<<<<
+ * FILT_TICK=0x10
+ * FILT_FD=0x20
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_F9, __pyx_int_0x10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":113
+ * FILT_PLAY=0x8
+ * FILT_F9=0x10
+ * FILT_TICK=0x10             # <<<<<<<<<<<<<<
+ * FILT_FD=0x20
+ * FILT_UNDEFINED=0x30
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_TICK, __pyx_int_0x10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":114
+ * FILT_F9=0x10
+ * FILT_TICK=0x10
+ * FILT_FD=0x20             # <<<<<<<<<<<<<<
+ * FILT_UNDEFINED=0x30
+ * FILT_RESET=0x40
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_FD, __pyx_int_0x20) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":115
+ * FILT_TICK=0x10
+ * FILT_FD=0x20
+ * FILT_UNDEFINED=0x30             # <<<<<<<<<<<<<<
+ * FILT_RESET=0x40
+ * FILT_REALTIME=0x7F
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_UNDEFINED, __pyx_int_0x30) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":116
+ * FILT_FD=0x20
+ * FILT_UNDEFINED=0x30
+ * FILT_RESET=0x40             # <<<<<<<<<<<<<<
+ * FILT_REALTIME=0x7F
+ * FILT_NOTE=0x80
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_RESET, __pyx_int_0x40) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":117
+ * FILT_UNDEFINED=0x30
+ * FILT_RESET=0x40
+ * FILT_REALTIME=0x7F             # <<<<<<<<<<<<<<
+ * FILT_NOTE=0x80
+ * FILT_CHANNEL_AFTERTOUCH=0x100
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_REALTIME, __pyx_int_0x7F) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":118
+ * FILT_RESET=0x40
+ * FILT_REALTIME=0x7F
+ * FILT_NOTE=0x80             # <<<<<<<<<<<<<<
+ * FILT_CHANNEL_AFTERTOUCH=0x100
+ * FILT_POLY_AFTERTOUCH=0x200
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_NOTE, __pyx_int_0x80) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":119
+ * FILT_REALTIME=0x7F
+ * FILT_NOTE=0x80
+ * FILT_CHANNEL_AFTERTOUCH=0x100             # <<<<<<<<<<<<<<
+ * FILT_POLY_AFTERTOUCH=0x200
+ * FILT_AFTERTOUCH=0x300
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_18, __pyx_int_0x100) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":120
+ * FILT_NOTE=0x80
+ * FILT_CHANNEL_AFTERTOUCH=0x100
+ * FILT_POLY_AFTERTOUCH=0x200             # <<<<<<<<<<<<<<
+ * FILT_AFTERTOUCH=0x300
+ * FILT_PROGRAM=0x400
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_19, __pyx_int_0x200) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":121
+ * FILT_CHANNEL_AFTERTOUCH=0x100
+ * FILT_POLY_AFTERTOUCH=0x200
+ * FILT_AFTERTOUCH=0x300             # <<<<<<<<<<<<<<
+ * FILT_PROGRAM=0x400
+ * FILT_CONTROL=0x800
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_AFTERTOUCH, __pyx_int_0x300) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":122
+ * FILT_POLY_AFTERTOUCH=0x200
+ * FILT_AFTERTOUCH=0x300
+ * FILT_PROGRAM=0x400             # <<<<<<<<<<<<<<
+ * FILT_CONTROL=0x800
+ * FILT_PITCHBEND=0x1000
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_PROGRAM, __pyx_int_0x400) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":123
+ * FILT_AFTERTOUCH=0x300
+ * FILT_PROGRAM=0x400
+ * FILT_CONTROL=0x800             # <<<<<<<<<<<<<<
+ * FILT_PITCHBEND=0x1000
+ * FILT_MTC=0x2000
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_CONTROL, __pyx_int_0x800) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":124
+ * FILT_PROGRAM=0x400
+ * FILT_CONTROL=0x800
+ * FILT_PITCHBEND=0x1000             # <<<<<<<<<<<<<<
+ * FILT_MTC=0x2000
+ * FILT_SONG_POSITION=0x4000
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_PITCHBEND, __pyx_int_0x1000) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":125
+ * FILT_CONTROL=0x800
+ * FILT_PITCHBEND=0x1000
+ * FILT_MTC=0x2000             # <<<<<<<<<<<<<<
+ * FILT_SONG_POSITION=0x4000
+ * FILT_SONG_SELECT=0x8000
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_MTC, __pyx_int_0x2000) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":126
+ * FILT_PITCHBEND=0x1000
+ * FILT_MTC=0x2000
+ * FILT_SONG_POSITION=0x4000             # <<<<<<<<<<<<<<
+ * FILT_SONG_SELECT=0x8000
+ * FILT_TUNE=0x10000
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_SONG_POSITION, __pyx_int_0x4000) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":127
+ * FILT_MTC=0x2000
+ * FILT_SONG_POSITION=0x4000
+ * FILT_SONG_SELECT=0x8000             # <<<<<<<<<<<<<<
+ * FILT_TUNE=0x10000
+ * FALSE=0
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_SONG_SELECT, __pyx_int_0x8000) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":128
+ * FILT_SONG_POSITION=0x4000
+ * FILT_SONG_SELECT=0x8000
+ * FILT_TUNE=0x10000             # <<<<<<<<<<<<<<
+ * FALSE=0
+ * TRUE=1
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FILT_TUNE, __pyx_int_0x10000) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":129
+ * FILT_SONG_SELECT=0x8000
+ * FILT_TUNE=0x10000
+ * FALSE=0             # <<<<<<<<<<<<<<
+ * TRUE=1
+ * 
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__FALSE, __pyx_int_0) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":130
+ * FILT_TUNE=0x10000
+ * FALSE=0
+ * TRUE=1             # <<<<<<<<<<<<<<
+ * 
+ * def Initialize():
+ */
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s__TRUE, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/Users/rene/dev/portmedia/portmedia/portmidi/trunk/pm_python/pyportmidi/_pyportmidi.pyx":1
+ * # pyPortMidi             # <<<<<<<<<<<<<<
+ * # Python bindings for PortMidi
+ * # John Harrison
+ */
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(((PyObject *)__pyx_t_1));
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Initialize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_GetAttrString(__pyx_t_2, "__doc__");
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_20), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Terminate); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_21), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__GetDeviceInfo); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_GetAttrString(__pyx_t_2, "__doc__");
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_22), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Time); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_23), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__GetErrorText); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_GetAttrString(__pyx_t_2, "__doc__");
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_24), __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Channel); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_25), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Output); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s___check_open); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_26), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Output); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Close); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_27), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Output); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Abort); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_28), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Output); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Write); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_29), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Output); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__WriteShort); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_30), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Output); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__WriteSysEx); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_31), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Input); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s___check_open); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_32), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Input); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Close); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_33), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Input); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__SetFilter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_34), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Input); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__SetChannelMask); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_35), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Input); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Poll); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_36), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = PyObject_GetAttr(__pyx_m, __pyx_n_s__Input); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_GetAttr(__pyx_t_2, __pyx_n_s__Read); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = __Pyx_GetAttrString(__pyx_t_3, "__doc__");
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (PyDict_SetItem(__pyx_t_1, ((PyObject *)__pyx_kp_u_37), __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyObject_SetAttr(__pyx_m, __pyx_n_s____test__, ((PyObject *)__pyx_t_1)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  if (__pyx_m) {
+    __Pyx_AddTraceback("init _pyportmidi");
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init _pyportmidi");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+}
+
+static const char *__pyx_filenames[] = {
+  "_pyportmidi.pyx",
+};
+
+/* Runtime support code */
+
+static void __pyx_init_filenames(void) {
+  __pyx_f = __pyx_filenames;
+}
+
+static void __Pyx_RaiseDoubleKeywordsError(
+    const char* func_name,
+    PyObject* kw_name)
+{
+    PyErr_Format(PyExc_TypeError,
+        #if PY_MAJOR_VERSION >= 3
+        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+        #else
+        "%s() got multiple values for keyword argument '%s'", func_name,
+        PyString_AS_STRING(kw_name));
+        #endif
+}
+
+static void __Pyx_RaiseArgtupleInvalid(
+    const char* func_name,
+    int exact,
+    Py_ssize_t num_min,
+    Py_ssize_t num_max,
+    Py_ssize_t num_found)
+{
+    Py_ssize_t num_expected;
+    const char *number, *more_or_less;
+
+    if (num_found < num_min) {
+        num_expected = num_min;
+        more_or_less = "at least";
+    } else {
+        num_expected = num_max;
+        more_or_less = "at most";
+    }
+    if (exact) {
+        more_or_less = "exactly";
+    }
+    number = (num_expected == 1) ? "" : "s";
+    PyErr_Format(PyExc_TypeError,
+        #if PY_VERSION_HEX < 0x02050000
+            "%s() takes %s %d positional argument%s (%d given)",
+        #else
+            "%s() takes %s %zd positional argument%s (%zd given)",
+        #endif
+        func_name, more_or_less, num_expected, number, num_found);
+}
+
+static int __Pyx_ParseOptionalKeywords(
+    PyObject *kwds,
+    PyObject **argnames[],
+    PyObject *kwds2,
+    PyObject *values[],
+    Py_ssize_t num_pos_args,
+    const char* function_name)
+{
+    PyObject *key = 0, *value = 0;
+    Py_ssize_t pos = 0;
+    PyObject*** name;
+    PyObject*** first_kw_arg = argnames + num_pos_args;
+
+    while (PyDict_Next(kwds, &pos, &key, &value)) {
+        name = first_kw_arg;
+        while (*name && (**name != key)) name++;
+        if (*name) {
+            values[name-argnames] = value;
+        } else {
+            #if PY_MAJOR_VERSION < 3
+            if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key))) {
+            #else
+            if (unlikely(!PyUnicode_CheckExact(key)) && unlikely(!PyUnicode_Check(key))) {
+            #endif
+                goto invalid_keyword_type;
+            } else {
+                for (name = first_kw_arg; *name; name++) {
+                    #if PY_MAJOR_VERSION >= 3
+                    if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                        PyUnicode_Compare(**name, key) == 0) break;
+                    #else
+                    if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                        _PyString_Eq(**name, key)) break;
+                    #endif
+                }
+                if (*name) {
+                    values[name-argnames] = value;
+                } else {
+                    /* unexpected keyword found */
+                    for (name=argnames; name != first_kw_arg; name++) {
+                        if (**name == key) goto arg_passed_twice;
+                        #if PY_MAJOR_VERSION >= 3
+                        if (PyUnicode_GET_SIZE(**name) == PyUnicode_GET_SIZE(key) &&
+                            PyUnicode_Compare(**name, key) == 0) goto arg_passed_twice;
+                        #else
+                        if (PyString_GET_SIZE(**name) == PyString_GET_SIZE(key) &&
+                            _PyString_Eq(**name, key)) goto arg_passed_twice;
+                        #endif
+                    }
+                    if (kwds2) {
+                        if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+                    } else {
+                        goto invalid_keyword;
+                    }
+                }
+            }
+        }
+    }
+    return 0;
+arg_passed_twice:
+    __Pyx_RaiseDoubleKeywordsError(function_name, **name);
+    goto bad;
+invalid_keyword_type:
+    PyErr_Format(PyExc_TypeError,
+        "%s() keywords must be strings", function_name);
+    goto bad;
+invalid_keyword:
+    PyErr_Format(PyExc_TypeError,
+    #if PY_MAJOR_VERSION < 3
+        "%s() got an unexpected keyword argument '%s'",
+        function_name, PyString_AsString(key));
+    #else
+        "%s() got an unexpected keyword argument '%U'",
+        function_name, key);
+    #endif
+bad:
+    return -1;
+}
+
+
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) {
+    PyObject *__import__ = 0;
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    __import__ = __Pyx_GetAttrString(__pyx_b, "__import__");
+    if (!__import__)
+        goto bad;
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    module = PyObject_CallFunctionObjArgs(__import__,
+        name, global_dict, empty_dict, list, NULL);
+bad:
+    Py_XDECREF(empty_list);
+    Py_XDECREF(__import__);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PmDeviceID(PmDeviceID val) {
+    const PmDeviceID neg_one = (PmDeviceID)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(PmDeviceID) <  sizeof(long)) {
+        return PyInt_FromLong((long)val);
+    } else if (sizeof(PmDeviceID) == sizeof(long)) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLong((unsigned long)val);
+        else
+            return PyInt_FromLong((long)val);
+    } else { /* (sizeof(PmDeviceID) > sizeof(long)) */
+        if (is_unsigned)
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
+        else
+            return PyLong_FromLongLong((PY_LONG_LONG)val);
+    }
+}
+
+static CYTHON_INLINE PmDeviceID __Pyx_PyInt_from_py_PmDeviceID(PyObject* x) {
+    const PmDeviceID neg_one = (PmDeviceID)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(PmDeviceID) == sizeof(char)) {
+        if (is_unsigned)
+            return (PmDeviceID)__Pyx_PyInt_AsUnsignedChar(x);
+        else
+            return (PmDeviceID)__Pyx_PyInt_AsSignedChar(x);
+    } else if (sizeof(PmDeviceID) == sizeof(short)) {
+        if (is_unsigned)
+            return (PmDeviceID)__Pyx_PyInt_AsUnsignedShort(x);
+        else
+            return (PmDeviceID)__Pyx_PyInt_AsSignedShort(x);
+    } else if (sizeof(PmDeviceID) == sizeof(int)) {
+        if (is_unsigned)
+            return (PmDeviceID)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (PmDeviceID)__Pyx_PyInt_AsSignedInt(x);
+    } else if (sizeof(PmDeviceID) == sizeof(long)) {
+        if (is_unsigned)
+            return (PmDeviceID)__Pyx_PyInt_AsUnsignedLong(x);
+        else
+            return (PmDeviceID)__Pyx_PyInt_AsSignedLong(x);
+    } else if (sizeof(PmDeviceID) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return (PmDeviceID)__Pyx_PyInt_AsUnsignedLongLong(x);
+        else
+            return (PmDeviceID)__Pyx_PyInt_AsSignedLongLong(x);
+#if 0
+    } else if (sizeof(PmDeviceID) > sizeof(short) &&
+               sizeof(PmDeviceID) < sizeof(int)) { /*  __int32 ILP64 ? */
+        if (is_unsigned)
+            return (PmDeviceID)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (PmDeviceID)__Pyx_PyInt_AsSignedInt(x);
+#endif
+    }
+    PyErr_SetString(PyExc_TypeError, "PmDeviceID");
+    return (PmDeviceID)-1;
+}
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PtTimestamp(PtTimestamp val) {
+    const PtTimestamp neg_one = (PtTimestamp)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(PtTimestamp) <  sizeof(long)) {
+        return PyInt_FromLong((long)val);
+    } else if (sizeof(PtTimestamp) == sizeof(long)) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLong((unsigned long)val);
+        else
+            return PyInt_FromLong((long)val);
+    } else { /* (sizeof(PtTimestamp) > sizeof(long)) */
+        if (is_unsigned)
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
+        else
+            return PyLong_FromLongLong((PY_LONG_LONG)val);
+    }
+}
+
+#if PY_MAJOR_VERSION < 3
+static PyObject *__Pyx_GetStdout(void) {
+    PyObject *f = PySys_GetObject((char *)"stdout");
+    if (!f) {
+        PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+    }
+    return f;
+}
+
+static int __Pyx_Print(PyObject *arg_tuple, int newline) {
+    PyObject *f;
+    PyObject* v;
+    int i;
+
+    if (!(f = __Pyx_GetStdout()))
+        return -1;
+    for (i=0; i < PyTuple_GET_SIZE(arg_tuple); i++) {
+        if (PyFile_SoftSpace(f, 1)) {
+            if (PyFile_WriteString(" ", f) < 0)
+                return -1;
+        }
+        v = PyTuple_GET_ITEM(arg_tuple, i);
+        if (PyFile_WriteObject(v, f, Py_PRINT_RAW) < 0)
+            return -1;
+        if (PyString_Check(v)) {
+            char *s = PyString_AsString(v);
+            Py_ssize_t len = PyString_Size(v);
+            if (len > 0 &&
+                isspace(Py_CHARMASK(s[len-1])) &&
+                s[len-1] != ' ')
+                    PyFile_SoftSpace(f, 0);
+        }
+    }
+    if (newline) {
+        if (PyFile_WriteString("\n", f) < 0)
+            return -1;
+        PyFile_SoftSpace(f, 0);
+    }
+    return 0;
+}
+
+#else /* Python 3 has a print function */
+
+static int __Pyx_Print(PyObject *arg_tuple, int newline) {
+    PyObject* kwargs = 0;
+    PyObject* result = 0;
+    PyObject* end_string;
+    if (!__pyx_print) {
+        __pyx_print = __Pyx_GetAttrString(__pyx_b, "print");
+        if (!__pyx_print)
+            return -1;
+    }
+    if (!newline) {
+        if (!__pyx_print_kwargs) {
+            __pyx_print_kwargs = PyDict_New();
+            if (!__pyx_print_kwargs)
+                return -1;
+            end_string = PyUnicode_FromStringAndSize(" ", 1);
+            if (!end_string)
+                return -1;
+            if (PyDict_SetItemString(__pyx_print_kwargs, "end", end_string) < 0) {
+                Py_DECREF(end_string);
+                return -1;
+            }
+            Py_DECREF(end_string);
+        }
+        kwargs = __pyx_print_kwargs;
+    }
+    result = PyObject_Call(__pyx_print, arg_tuple, kwargs);
+    if (!result)
+        return -1;
+    Py_DECREF(result);
+    return 0;
+}
+
+#endif
+
+#if PY_MAJOR_VERSION < 3
+
+static int __Pyx_PrintOne(PyObject *o) {
+    PyObject *f;
+    if (!(f = __Pyx_GetStdout()))
+        return -1;
+    if (PyFile_SoftSpace(f, 0)) {
+        if (PyFile_WriteString(" ", f) < 0)
+            return -1;
+    }
+    if (PyFile_WriteObject(o, f, Py_PRINT_RAW) < 0)
+        return -1;
+    if (PyFile_WriteString("\n", f) < 0)
+        return -1;
+    return 0;
+    /* the line below is just to avoid compiler
+     * compiler warnings about unused functions */
+    return __Pyx_Print(NULL, 0);
+}
+
+#else /* Python 3 has a print function */
+
+static int __Pyx_PrintOne(PyObject *o) {
+    int res;
+    PyObject* arg_tuple = PyTuple_New(1);
+    if (unlikely(!arg_tuple))
+        return -1;
+    Py_INCREF(o);
+    PyTuple_SET_ITEM(arg_tuple, 0, o);
+    res = __Pyx_Print(arg_tuple, 1);
+    Py_DECREF(arg_tuple);
+    return res;
+}
+
+#endif
+
+static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
+    PyObject *result;
+    result = PyObject_GetAttr(dict, name);
+    if (!result)
+        PyErr_SetObject(PyExc_NameError, name);
+    return result;
+}
+
+static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+
+    tmp_type = tstate->curexc_type;
+    tmp_value = tstate->curexc_value;
+    tmp_tb = tstate->curexc_traceback;
+    tstate->curexc_type = type;
+    tstate->curexc_value = value;
+    tstate->curexc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+}
+
+static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->curexc_type;
+    *value = tstate->curexc_value;
+    *tb = tstate->curexc_traceback;
+
+    tstate->curexc_type = 0;
+    tstate->curexc_value = 0;
+    tstate->curexc_traceback = 0;
+}
+
+
+#if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
+    Py_XINCREF(type);
+    Py_XINCREF(value);
+    Py_XINCREF(tb);
+    /* First, check the traceback argument, replacing None with NULL. */
+    if (tb == Py_None) {
+        Py_DECREF(tb);
+        tb = 0;
+    }
+    else if (tb != NULL && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto raise_error;
+    }
+    /* Next, replace a missing value with None */
+    if (value == NULL) {
+        value = Py_None;
+        Py_INCREF(value);
+    }
+    #if PY_VERSION_HEX < 0x02050000
+    if (!PyClass_Check(type))
+    #else
+    if (!PyType_Check(type))
+    #endif
+    {
+        /* Raising an instance.  The value should be a dummy. */
+        if (value != Py_None) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto raise_error;
+        }
+        /* Normalize to raise <class>, <instance> */
+        Py_DECREF(value);
+        value = type;
+        #if PY_VERSION_HEX < 0x02050000
+            if (PyInstance_Check(type)) {
+                type = (PyObject*) ((PyInstanceObject*)type)->in_class;
+                Py_INCREF(type);
+            }
+            else {
+                type = 0;
+                PyErr_SetString(PyExc_TypeError,
+                    "raise: exception must be an old-style class or instance");
+                goto raise_error;
+            }
+        #else
+            type = (PyObject*) Py_TYPE(type);
+            Py_INCREF(type);
+            if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+                PyErr_SetString(PyExc_TypeError,
+                    "raise: exception class must be a subclass of BaseException");
+                goto raise_error;
+            }
+        #endif
+    }
+
+    __Pyx_ErrRestore(type, value, tb);
+    return;
+raise_error:
+    Py_XDECREF(value);
+    Py_XDECREF(type);
+    Py_XDECREF(tb);
+    return;
+}
+
+#else /* Python 3+ */
+
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb) {
+    if (tb == Py_None) {
+        tb = 0;
+    } else if (tb && !PyTraceBack_Check(tb)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: arg 3 must be a traceback or None");
+        goto bad;
+    }
+    if (value == Py_None)
+        value = 0;
+
+    if (PyExceptionInstance_Check(type)) {
+        if (value) {
+            PyErr_SetString(PyExc_TypeError,
+                "instance exception may not have a separate value");
+            goto bad;
+        }
+        value = type;
+        type = (PyObject*) Py_TYPE(value);
+    } else if (!PyExceptionClass_Check(type)) {
+        PyErr_SetString(PyExc_TypeError,
+            "raise: exception class must be a subclass of BaseException");
+        goto bad;
+    }
+
+    PyErr_SetObject(type, value);
+
+    if (tb) {
+        PyThreadState *tstate = PyThreadState_GET();
+        PyObject* tmp_tb = tstate->curexc_traceback;
+        if (tb != tmp_tb) {
+            Py_INCREF(tb);
+            tstate->curexc_traceback = tb;
+            Py_XDECREF(tmp_tb);
+        }
+    }
+
+bad:
+    return;
+}
+#endif
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PmMessage(PmMessage val) {
+    const PmMessage neg_one = (PmMessage)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(PmMessage) <  sizeof(long)) {
+        return PyInt_FromLong((long)val);
+    } else if (sizeof(PmMessage) == sizeof(long)) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLong((unsigned long)val);
+        else
+            return PyInt_FromLong((long)val);
+    } else { /* (sizeof(PmMessage) > sizeof(long)) */
+        if (is_unsigned)
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
+        else
+            return PyLong_FromLongLong((PY_LONG_LONG)val);
+    }
+}
+
+static CYTHON_INLINE PmMessage __Pyx_PyInt_from_py_PmMessage(PyObject* x) {
+    const PmMessage neg_one = (PmMessage)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(PmMessage) == sizeof(char)) {
+        if (is_unsigned)
+            return (PmMessage)__Pyx_PyInt_AsUnsignedChar(x);
+        else
+            return (PmMessage)__Pyx_PyInt_AsSignedChar(x);
+    } else if (sizeof(PmMessage) == sizeof(short)) {
+        if (is_unsigned)
+            return (PmMessage)__Pyx_PyInt_AsUnsignedShort(x);
+        else
+            return (PmMessage)__Pyx_PyInt_AsSignedShort(x);
+    } else if (sizeof(PmMessage) == sizeof(int)) {
+        if (is_unsigned)
+            return (PmMessage)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (PmMessage)__Pyx_PyInt_AsSignedInt(x);
+    } else if (sizeof(PmMessage) == sizeof(long)) {
+        if (is_unsigned)
+            return (PmMessage)__Pyx_PyInt_AsUnsignedLong(x);
+        else
+            return (PmMessage)__Pyx_PyInt_AsSignedLong(x);
+    } else if (sizeof(PmMessage) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return (PmMessage)__Pyx_PyInt_AsUnsignedLongLong(x);
+        else
+            return (PmMessage)__Pyx_PyInt_AsSignedLongLong(x);
+#if 0
+    } else if (sizeof(PmMessage) > sizeof(short) &&
+               sizeof(PmMessage) < sizeof(int)) { /*  __int32 ILP64 ? */
+        if (is_unsigned)
+            return (PmMessage)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (PmMessage)__Pyx_PyInt_AsSignedInt(x);
+#endif
+    }
+    PyErr_SetString(PyExc_TypeError, "PmMessage");
+    return (PmMessage)-1;
+}
+
+static CYTHON_INLINE PmTimestamp __Pyx_PyInt_from_py_PmTimestamp(PyObject* x) {
+    const PmTimestamp neg_one = (PmTimestamp)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(PmTimestamp) == sizeof(char)) {
+        if (is_unsigned)
+            return (PmTimestamp)__Pyx_PyInt_AsUnsignedChar(x);
+        else
+            return (PmTimestamp)__Pyx_PyInt_AsSignedChar(x);
+    } else if (sizeof(PmTimestamp) == sizeof(short)) {
+        if (is_unsigned)
+            return (PmTimestamp)__Pyx_PyInt_AsUnsignedShort(x);
+        else
+            return (PmTimestamp)__Pyx_PyInt_AsSignedShort(x);
+    } else if (sizeof(PmTimestamp) == sizeof(int)) {
+        if (is_unsigned)
+            return (PmTimestamp)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (PmTimestamp)__Pyx_PyInt_AsSignedInt(x);
+    } else if (sizeof(PmTimestamp) == sizeof(long)) {
+        if (is_unsigned)
+            return (PmTimestamp)__Pyx_PyInt_AsUnsignedLong(x);
+        else
+            return (PmTimestamp)__Pyx_PyInt_AsSignedLong(x);
+    } else if (sizeof(PmTimestamp) == sizeof(PY_LONG_LONG)) {
+        if (is_unsigned)
+            return (PmTimestamp)__Pyx_PyInt_AsUnsignedLongLong(x);
+        else
+            return (PmTimestamp)__Pyx_PyInt_AsSignedLongLong(x);
+#if 0
+    } else if (sizeof(PmTimestamp) > sizeof(short) &&
+               sizeof(PmTimestamp) < sizeof(int)) { /*  __int32 ILP64 ? */
+        if (is_unsigned)
+            return (PmTimestamp)__Pyx_PyInt_AsUnsignedInt(x);
+        else
+            return (PmTimestamp)__Pyx_PyInt_AsSignedInt(x);
+#endif
+    }
+    PyErr_SetString(PyExc_TypeError, "PmTimestamp");
+    return (PmTimestamp)-1;
+}
+
+static CYTHON_INLINE PyObject *__Pyx_PyInt_to_py_PmTimestamp(PmTimestamp val) {
+    const PmTimestamp neg_one = (PmTimestamp)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(PmTimestamp) <  sizeof(long)) {
+        return PyInt_FromLong((long)val);
+    } else if (sizeof(PmTimestamp) == sizeof(long)) {
+        if (is_unsigned)
+            return PyLong_FromUnsignedLong((unsigned long)val);
+        else
+            return PyInt_FromLong((long)val);
+    } else { /* (sizeof(PmTimestamp) > sizeof(long)) */
+        if (is_unsigned)
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)val);
+        else
+            return PyLong_FromLongLong((PY_LONG_LONG)val);
+    }
+}
+
+static CYTHON_INLINE unsigned char __Pyx_PyInt_AsUnsignedChar(PyObject* x) {
+    const unsigned char neg_one = (unsigned char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned char" :
+                    "value too large to convert to unsigned char");
+            }
+            return (unsigned char)-1;
+        }
+        return (unsigned char)val;
+    }
+    return (unsigned char)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE unsigned short __Pyx_PyInt_AsUnsignedShort(PyObject* x) {
+    const unsigned short neg_one = (unsigned short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned short" :
+                    "value too large to convert to unsigned short");
+            }
+            return (unsigned short)-1;
+        }
+        return (unsigned short)val;
+    }
+    return (unsigned short)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE unsigned int __Pyx_PyInt_AsUnsignedInt(PyObject* x) {
+    const unsigned int neg_one = (unsigned int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(unsigned int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(unsigned int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to unsigned int" :
+                    "value too large to convert to unsigned int");
+            }
+            return (unsigned int)-1;
+        }
+        return (unsigned int)val;
+    }
+    return (unsigned int)__Pyx_PyInt_AsUnsignedLong(x);
+}
+
+static CYTHON_INLINE char __Pyx_PyInt_AsChar(PyObject* x) {
+    const char neg_one = (char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to char" :
+                    "value too large to convert to char");
+            }
+            return (char)-1;
+        }
+        return (char)val;
+    }
+    return (char)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE short __Pyx_PyInt_AsShort(PyObject* x) {
+    const short neg_one = (short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to short" :
+                    "value too large to convert to short");
+            }
+            return (short)-1;
+        }
+        return (short)val;
+    }
+    return (short)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE int __Pyx_PyInt_AsInt(PyObject* x) {
+    const int neg_one = (int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to int" :
+                    "value too large to convert to int");
+            }
+            return (int)-1;
+        }
+        return (int)val;
+    }
+    return (int)__Pyx_PyInt_AsLong(x);
+}
+
+static CYTHON_INLINE signed char __Pyx_PyInt_AsSignedChar(PyObject* x) {
+    const signed char neg_one = (signed char)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed char) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed char)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed char" :
+                    "value too large to convert to signed char");
+            }
+            return (signed char)-1;
+        }
+        return (signed char)val;
+    }
+    return (signed char)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE signed short __Pyx_PyInt_AsSignedShort(PyObject* x) {
+    const signed short neg_one = (signed short)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed short) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed short)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed short" :
+                    "value too large to convert to signed short");
+            }
+            return (signed short)-1;
+        }
+        return (signed short)val;
+    }
+    return (signed short)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE signed int __Pyx_PyInt_AsSignedInt(PyObject* x) {
+    const signed int neg_one = (signed int)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (sizeof(signed int) < sizeof(long)) {
+        long val = __Pyx_PyInt_AsLong(x);
+        if (unlikely(val != (long)(signed int)val)) {
+            if (!unlikely(val == -1 && PyErr_Occurred())) {
+                PyErr_SetString(PyExc_OverflowError,
+                    (is_unsigned && unlikely(val < 0)) ?
+                    "can't convert negative value to signed int" :
+                    "value too large to convert to signed int");
+            }
+            return (signed int)-1;
+        }
+        return (signed int)val;
+    }
+    return (signed int)__Pyx_PyInt_AsSignedLong(x);
+}
+
+static CYTHON_INLINE unsigned long __Pyx_PyInt_AsUnsignedLong(PyObject* x) {
+    const unsigned long neg_one = (unsigned long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to unsigned long");
+            return (unsigned long)-1;
+        }
+        return (unsigned long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to unsigned long");
+                return (unsigned long)-1;
+            }
+            return PyLong_AsUnsignedLong(x);
+        } else {
+            return PyLong_AsLong(x);
+        }
+    } else {
+        unsigned long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (unsigned long)-1;
+        val = __Pyx_PyInt_AsUnsignedLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_AsUnsignedLongLong(PyObject* x) {
+    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to unsigned PY_LONG_LONG");
+            return (unsigned PY_LONG_LONG)-1;
+        }
+        return (unsigned PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to unsigned PY_LONG_LONG");
+                return (unsigned PY_LONG_LONG)-1;
+            }
+            return PyLong_AsUnsignedLongLong(x);
+        } else {
+            return PyLong_AsLongLong(x);
+        }
+    } else {
+        unsigned PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (unsigned PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsUnsignedLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE long __Pyx_PyInt_AsLong(PyObject* x) {
+    const long neg_one = (long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to long");
+            return (long)-1;
+        }
+        return (long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to long");
+                return (long)-1;
+            }
+            return PyLong_AsUnsignedLong(x);
+        } else {
+            return PyLong_AsLong(x);
+        }
+    } else {
+        long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (long)-1;
+        val = __Pyx_PyInt_AsLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE PY_LONG_LONG __Pyx_PyInt_AsLongLong(PyObject* x) {
+    const PY_LONG_LONG neg_one = (PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to PY_LONG_LONG");
+            return (PY_LONG_LONG)-1;
+        }
+        return (PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to PY_LONG_LONG");
+                return (PY_LONG_LONG)-1;
+            }
+            return PyLong_AsUnsignedLongLong(x);
+        } else {
+            return PyLong_AsLongLong(x);
+        }
+    } else {
+        PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE signed long __Pyx_PyInt_AsSignedLong(PyObject* x) {
+    const signed long neg_one = (signed long)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to signed long");
+            return (signed long)-1;
+        }
+        return (signed long)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to signed long");
+                return (signed long)-1;
+            }
+            return PyLong_AsUnsignedLong(x);
+        } else {
+            return PyLong_AsLong(x);
+        }
+    } else {
+        signed long val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (signed long)-1;
+        val = __Pyx_PyInt_AsSignedLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+static CYTHON_INLINE signed PY_LONG_LONG __Pyx_PyInt_AsSignedLongLong(PyObject* x) {
+    const signed PY_LONG_LONG neg_one = (signed PY_LONG_LONG)-1, const_zero = 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_VERSION_HEX < 0x03000000
+    if (likely(PyInt_Check(x))) {
+        long val = PyInt_AS_LONG(x);
+        if (is_unsigned && unlikely(val < 0)) {
+            PyErr_SetString(PyExc_OverflowError,
+                            "can't convert negative value to signed PY_LONG_LONG");
+            return (signed PY_LONG_LONG)-1;
+        }
+        return (signed PY_LONG_LONG)val;
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+            if (unlikely(Py_SIZE(x) < 0)) {
+                PyErr_SetString(PyExc_OverflowError,
+                                "can't convert negative value to signed PY_LONG_LONG");
+                return (signed PY_LONG_LONG)-1;
+            }
+            return PyLong_AsUnsignedLongLong(x);
+        } else {
+            return PyLong_AsLongLong(x);
+        }
+    } else {
+        signed PY_LONG_LONG val;
+        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        if (!tmp) return (signed PY_LONG_LONG)-1;
+        val = __Pyx_PyInt_AsSignedLongLong(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+}
+
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+
+static void __Pyx_AddTraceback(const char *funcname) {
+    PyObject *py_srcfile = 0;
+    PyObject *py_funcname = 0;
+    PyObject *py_globals = 0;
+    PyCodeObject *py_code = 0;
+    PyFrameObject *py_frame = 0;
+
+    #if PY_MAJOR_VERSION < 3
+    py_srcfile = PyString_FromString(__pyx_filename);
+    #else
+    py_srcfile = PyUnicode_FromString(__pyx_filename);
+    #endif
+    if (!py_srcfile) goto bad;
+    if (__pyx_clineno) {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        #else
+        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, __pyx_clineno);
+        #endif
+    }
+    else {
+        #if PY_MAJOR_VERSION < 3
+        py_funcname = PyString_FromString(funcname);
+        #else
+        py_funcname = PyUnicode_FromString(funcname);
+        #endif
+    }
+    if (!py_funcname) goto bad;
+    py_globals = PyModule_GetDict(__pyx_m);
+    if (!py_globals) goto bad;
+    py_code = PyCode_New(
+        0,            /*int argcount,*/
+        #if PY_MAJOR_VERSION >= 3
+        0,            /*int kwonlyargcount,*/
+        #endif
+        0,            /*int nlocals,*/
+        0,            /*int stacksize,*/
+        0,            /*int flags,*/
+        __pyx_empty_bytes, /*PyObject *code,*/
+        __pyx_empty_tuple,  /*PyObject *consts,*/
+        __pyx_empty_tuple,  /*PyObject *names,*/
+        __pyx_empty_tuple,  /*PyObject *varnames,*/
+        __pyx_empty_tuple,  /*PyObject *freevars,*/
+        __pyx_empty_tuple,  /*PyObject *cellvars,*/
+        py_srcfile,   /*PyObject *filename,*/
+        py_funcname,  /*PyObject *name,*/
+        __pyx_lineno,   /*int firstlineno,*/
+        __pyx_empty_bytes  /*PyObject *lnotab*/
+    );
+    if (!py_code) goto bad;
+    py_frame = PyFrame_New(
+        PyThreadState_GET(), /*PyThreadState *tstate,*/
+        py_code,             /*PyCodeObject *code,*/
+        py_globals,          /*PyObject *globals,*/
+        0                    /*PyObject *locals*/
+    );
+    if (!py_frame) goto bad;
+    py_frame->f_lineno = __pyx_lineno;
+    PyTraceBack_Here(py_frame);
+bad:
+    Py_XDECREF(py_srcfile);
+    Py_XDECREF(py_funcname);
+    Py_XDECREF(py_code);
+    Py_XDECREF(py_frame);
+}
+
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+    while (t->p) {
+        #if PY_MAJOR_VERSION < 3
+        if (t->is_unicode) {
+            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+        } else if (t->intern) {
+            *t->p = PyString_InternFromString(t->s);
+        } else {
+            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+        }
+        #else  /* Python 3+ has unicode identifiers */
+        if (t->is_unicode | t->is_str) {
+            if (t->intern) {
+                *t->p = PyUnicode_InternFromString(t->s);
+            } else if (t->encoding) {
+                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
+            } else {
+                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+            }
+        } else {
+            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+        }
+        #endif
+        if (!*t->p)
+            return -1;
+        ++t;
+    }
+    return 0;
+}
+
+/* Type Conversion Functions */
+
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+   if (x == Py_True) return 1;
+   else if ((x == Py_False) | (x == Py_None)) return 0;
+   else return PyObject_IsTrue(x);
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
+  PyNumberMethods *m;
+  const char *name = NULL;
+  PyObject *res = NULL;
+#if PY_VERSION_HEX < 0x03000000
+  if (PyInt_Check(x) || PyLong_Check(x))
+#else
+  if (PyLong_Check(x))
+#endif
+    return Py_INCREF(x), x;
+  m = Py_TYPE(x)->tp_as_number;
+#if PY_VERSION_HEX < 0x03000000
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Int(x);
+  }
+  else if (m && m->nb_long) {
+    name = "long";
+    res = PyNumber_Long(x);
+  }
+#else
+  if (m && m->nb_int) {
+    name = "int";
+    res = PyNumber_Long(x);
+  }
+#endif
+  if (res) {
+#if PY_VERSION_HEX < 0x03000000
+    if (!PyInt_Check(res) && !PyLong_Check(res)) {
+#else
+    if (!PyLong_Check(res)) {
+#endif
+      PyErr_Format(PyExc_TypeError,
+                   "__%s__ returned non-%s (type %.200s)",
+                   name, name, Py_TYPE(res)->tp_name);
+      Py_DECREF(res);
+      return NULL;
+    }
+  }
+  else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_TypeError,
+                    "an integer is required");
+  }
+  return res;
+}
+
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+  Py_ssize_t ival;
+  PyObject* x = PyNumber_Index(b);
+  if (!x) return -1;
+  ival = PyInt_AsSsize_t(x);
+  Py_DECREF(x);
+  return ival;
+}
+
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+#if PY_VERSION_HEX < 0x02050000
+   if (ival <= LONG_MAX)
+       return PyInt_FromLong((long)ival);
+   else {
+       unsigned char *bytes = (unsigned char *) &ival;
+       int one = 1; int little = (int)*(unsigned char*)&one;
+       return _PyLong_FromByteArray(bytes, sizeof(size_t), little, 0);
+   }
+#else
+   return PyInt_FromSize_t(ival);
+#endif
+}
+
+static CYTHON_INLINE size_t __Pyx_PyInt_AsSize_t(PyObject* x) {
+   unsigned PY_LONG_LONG val = __Pyx_PyInt_AsUnsignedLongLong(x);
+   if (unlikely(val == (unsigned PY_LONG_LONG)-1 && PyErr_Occurred())) {
+       return (size_t)-1;
+   } else if (unlikely(val != (unsigned PY_LONG_LONG)(size_t)val)) {
+       PyErr_SetString(PyExc_OverflowError,
+                       "value too large to convert to size_t");
+       return (size_t)-1;
+   }
+   return (size_t)val;
+}
+
+
+#endif /* Py_PYTHON_H */
diff --git a/pd/portmidi/pm_python/pyportmidi/_pyportmidi.pyx b/pd/portmidi/pm_python/pyportmidi/_pyportmidi.pyx
new file mode 100644
index 000000000..e43bd2b28
--- /dev/null
+++ b/pd/portmidi/pm_python/pyportmidi/_pyportmidi.pyx
@@ -0,0 +1,537 @@
+# pyPortMidi
+# Python bindings for PortMidi
+# John Harrison
+# http://sound.media.mit.edu/~harrison
+# harrison@media.mit.edu
+# written in Pyrex
+__version__="0.07"
+
+import array
+
+# CHANGES:
+
+# 0.0.5: (June 1st, 2009)
+#   Output no longer calls abort when it deallocates.
+#   Added abort and close methods.
+#   Need to call Abort() explicityly if you want that to happen.
+
+
+#
+# 0.0.3: (March 15, 2005)
+#   changed everything from tuples to lists
+#   return 4 values for PmRead instead of 3 (for SysEx)
+#   minor fixes for flexibility and error checking
+#   flushed out DistUtils package and added Mac and Linux compile support
+#   Markus Pfaff: added ability for WriteSysEx to accept lists as well
+#                 as strings
+
+# 0.0.2:
+#   fixed pointer to function calls to avoid necessity of pyport library
+
+# 0.0.1:
+#   initial release
+
+cdef extern from "portmidi.h":
+    ctypedef enum PmError:
+        pmNoError = 0,
+        pmHostError = -10000,
+        pmInvalidDeviceId, #/* out of range or output device when input is requested or vice versa */
+        pmInsufficientMemory,
+        pmBufferTooSmall,
+        pmBufferOverflow,
+        pmBadPtr,
+        pmBadData, #/* illegal midi data, e.g. missing EOX */
+        pmInternalError,
+        pmBufferMaxSize, #/* buffer is already as large as it can be */
+    PmError Pm_Initialize()
+    PmError Pm_Terminate()
+    ctypedef void PortMidiStream
+    ctypedef PortMidiStream PmStream # CHECK THIS!
+    ctypedef int PmDeviceID
+    int Pm_HasHostError( PortMidiStream * stream )  
+    char *Pm_GetErrorText( PmError errnum )
+    Pm_GetHostErrorText(char * msg, unsigned int len)
+    ctypedef struct PmDeviceInfo:
+        int structVersion
+        char *interf #/* underlying MIDI API, e.g. MMSystem or DirectX */
+        char *name   #/* device name, e.g. USB MidiSport 1x1 */
+        int input    #/* true iff input is available */
+        int output   #/* true iff output is available */
+        int opened   #/* used by generic PortMidi code to do error checking on arguments */
+    int Pm_CountDevices()
+    PmDeviceID Pm_GetDefaultInputDeviceID()
+    PmDeviceID Pm_GetDefaultOutputDeviceID()
+    ctypedef long PmTimestamp
+    ctypedef PmTimestamp (*PmTimeProcPtr)(void *time_info)
+    #PmBefore is not defined...
+    PmDeviceInfo* Pm_GetDeviceInfo( PmDeviceID id )
+    PmError Pm_OpenInput( PortMidiStream** stream,
+                          PmDeviceID inputDevice,
+                          void *inputDriverInfo,
+                          long bufferSize,
+                          long (*PmPtr) (), # long = PtTimestamp
+                          void *time_info )
+    PmError Pm_OpenOutput( PortMidiStream** stream,
+                           PmDeviceID outputDevice,
+                           void *outputDriverInfo,
+                           long bufferSize,
+                           #long (*PmPtr) (), # long = PtTimestamp
+                           PmTimeProcPtr time_proc, # long = PtTimestamp
+                           void *time_info,
+                           long latency )
+    PmError Pm_SetFilter( PortMidiStream* stream, long filters )
+    PmError Pm_Abort( PortMidiStream* stream )
+    PmError Pm_Close( PortMidiStream* stream )
+    ctypedef long PmMessage
+    ctypedef struct PmEvent:
+        PmMessage message
+        PmTimestamp timestamp
+    PmError Pm_Read( PortMidiStream *stream, PmEvent *buffer, long length )
+    PmError Pm_Poll( PortMidiStream *stream)
+    int Pm_Channel(int channel)
+    PmError Pm_SetChannelMask(PortMidiStream *stream, int mask)
+    PmError Pm_Write( PortMidiStream *stream, PmEvent *buffer, long length )
+    PmError Pm_WriteSysEx( PortMidiStream *stream, PmTimestamp when, unsigned char *msg)
+
+cdef extern from "porttime.h":
+    ctypedef enum PtError:
+        ptNoError = 0,
+        ptHostError = -10000,
+        ptAlreadyStarted,
+        ptAlreadyStopped,
+        ptInsufficientMemory
+    ctypedef long PtTimestamp
+    ctypedef void (* PtCallback)( PtTimestamp timestamp, void *userData )
+    PtError Pt_Start(int resolution, PtCallback *callback, void *userData)
+    PtTimestamp Pt_Time()
+
+FILT_ACTIVE=0x1
+FILT_SYSEX=0x2
+FILT_CLOCK=0x4
+FILT_PLAY=0x8
+FILT_F9=0x10
+FILT_TICK=0x10
+FILT_FD=0x20
+FILT_UNDEFINED=0x30
+FILT_RESET=0x40
+FILT_REALTIME=0x7F
+FILT_NOTE=0x80
+FILT_CHANNEL_AFTERTOUCH=0x100
+FILT_POLY_AFTERTOUCH=0x200
+FILT_AFTERTOUCH=0x300
+FILT_PROGRAM=0x400
+FILT_CONTROL=0x800
+FILT_PITCHBEND=0x1000
+FILT_MTC=0x2000
+FILT_SONG_POSITION=0x4000
+FILT_SONG_SELECT=0x8000
+FILT_TUNE=0x10000
+FALSE=0
+TRUE=1
+
+def Initialize():
+    """
+Initialize: call this first
+    """
+    Pm_Initialize()
+    Pt_Start(1, NULL, NULL) # /* equiv to TIME_START: start timer w/ ms accuracy */
+
+def Terminate():
+    """
+Terminate: call this to clean up Midi streams when done.
+If you do not call this on Windows machines when you are
+done with MIDI, your system may crash.
+    """
+    Pm_Terminate()
+
+def GetDefaultInputDeviceID():
+    return Pm_GetDefaultInputDeviceID()
+
+def GetDefaultOutputDeviceID():
+    return Pm_GetDefaultOutputDeviceID()
+
+def CountDevices():
+    return Pm_CountDevices()
+
+def GetDeviceInfo(i):
+    """
+GetDeviceInfo(<device number>): returns 5 parameters
+  - underlying MIDI API
+  - device name
+  - TRUE iff input is available
+  - TRUE iff output is available
+  - TRUE iff device stream is already open
+    """
+    cdef PmDeviceInfo *info
+
+    # disregarding the constness from Pm_GetDeviceInfo, since pyrex doesn't do const.
+    info = <PmDeviceInfo *>Pm_GetDeviceInfo(i)
+
+    if info <> NULL: return info.interf, info.name, info.input, info.output, info.opened
+    else: return 
+
+def Time():
+    """
+Time() returns the current time in ms
+of the PortMidi timer
+    """
+    return Pt_Time()
+
+def GetErrorText(err):
+    """
+GetErrorText(<err num>) returns human-readable error
+messages translated from error numbers
+    """
+    return Pm_GetErrorText(err)
+
+def Channel(chan):
+    """
+Channel(<chan>) is used with ChannelMask on input MIDI streams.
+Example: to receive input on channels 1 and 10 on a MIDI
+         stream called MidiIn:
+MidiIn.SetChannelMask(pypm.Channel(1) | pypm.Channel(10))
+
+note: PyPortMidi Channel function has been altered from
+      the original PortMidi c call to correct for what
+      seems to be a bug --- i.e. channel filters were
+      all numbered from 0 to 15 instead of 1 to 16.
+    """
+    return Pm_Channel(chan-1)
+
+cdef class Output:
+    """
+class Output:
+    define an output MIDI stream. Takes the form:
+        x = pypm.Output(MidiOutputDevice, latency)
+    latency is in ms.
+    If latency = 0 then timestamps for output are ignored.
+    """
+    cdef int i
+    cdef PmStream *midi
+    cdef int debug
+    cdef int _aborted
+
+    def __init__(self, OutputDevice, latency=0):
+        
+        cdef PmError err
+        #cdef PtTimestamp (*PmPtr) ()
+        cdef PmTimeProcPtr PmPtr
+
+        self.i = OutputDevice
+        self.debug = 0
+        self._aborted = 0
+        
+        if latency == 0:
+            PmPtr = NULL
+        else:
+            PmPtr = <PmTimeProcPtr>&Pt_Time
+        if self.debug: print "Opening Midi Output"
+	# Why is bufferSize 0 here?
+        err = Pm_OpenOutput(&(self.midi), self.i, NULL, 0, PmPtr, NULL, latency)
+        if err < 0:
+                s = Pm_GetErrorText(err)
+                # Something's amiss here - if we try to throw an Exception
+               	# here, we crash.
+                if not err == -10000:
+                        raise Exception,s
+                else:
+                        print "Unable to open Midi OutputDevice=",OutputDevice," err=",s
+
+    def __dealloc__(self):
+        if self.debug: print "Closing MIDI output stream and destroying instance"
+        #err = Pm_Abort(self.midi)
+        #if err < 0: raise Exception, Pm_GetErrorText(err)
+        err = Pm_Close(self.midi)
+        if err < 0: raise Exception, Pm_GetErrorText(err) 
+
+
+    def _check_open(self):
+        """ checks to see if the midi is open, and if not, raises an error.
+        """
+
+        if self.midi == NULL:
+            raise Exception, "midi Output not open."
+
+        if self._aborted:
+            raise Exception, "midi Output aborted.  Need to call Close after Abort."
+
+    def Close(self):
+        """
+Close()
+    closes a midi stream, flushing any pending buffers.
+    (PortMidi attempts to close open streams when the application
+    exits -- this is particularly difficult under Windows.)
+        """
+        #if not self.midi:
+        #    return
+
+        err = Pm_Close(self.midi)
+        if err < 0:
+            raise Exception, Pm_GetErrorText(err)
+        #self.midi = NULL
+
+
+    def Abort(self):
+        """
+Abort() terminates outgoing messages immediately
+    The caller should immediately close the output port;
+    this call may result in transmission of a partial midi message.
+    There is no abort for Midi input because the user can simply
+    ignore messages in the buffer and close an input device at
+    any time.
+        """
+        #if not self.midi:
+        #    return
+
+        err = Pm_Abort(self.midi)
+        if err < 0:
+            raise Exception, Pm_GetErrorText(err)
+
+        self._aborted = 1
+
+
+    def Write(self, data):
+        """
+Write(data)
+    output a series of MIDI information in the form of a list:
+         Write([[[status <,data1><,data2><,data3>],timestamp],
+                [[status <,data1><,data2><,data3>],timestamp],...])
+    <data> fields are optional
+    example: choose program change 1 at time 20000 and
+    send note 65 with velocity 100 500 ms later.
+         Write([[[0xc0,0,0],20000],[[0x90,60,100],20500]])
+    notes:
+      1. timestamps will be ignored if latency = 0.
+      2. To get a note to play immediately, send MIDI info with
+         timestamp read from function Time.
+      3. understanding optional data fields:
+           Write([[[0xc0,0,0],20000]]) is equivalent to
+           Write([[[0xc0],20000]])
+        """
+        cdef PmEvent buffer[1024]
+        cdef PmError err
+        cdef int i
+
+        self._check_open()
+
+
+        if len(data) > 1024: raise IndexError, 'maximum list length is 1024'
+        else:
+            for loop1 in range(len(data)):
+                if ((len(data[loop1][0]) > 4) |
+                    (len(data[loop1][0]) < 1)):
+                    raise IndexError, str(len(data[loop1][0]))+' arguments in event list'
+                buffer[loop1].message = 0
+                for i in range(len(data[loop1][0])):
+                    buffer[loop1].message = buffer[loop1].message + ((data[loop1][0][i]&0xFF) << (8*i))
+                buffer[loop1].timestamp = data[loop1][1]
+                if self.debug: print loop1," : ",buffer[loop1].message," : ",buffer[loop1].timestamp
+        if self.debug: print "writing to midi buffer"
+        err= Pm_Write(self.midi, buffer, len(data))
+        if err < 0: raise Exception, Pm_GetErrorText(err)
+        
+    def WriteShort(self, status, data1 = 0, data2 = 0):
+        """
+WriteShort(status <, data1><, data2>)
+     output MIDI information of 3 bytes or less.
+     data fields are optional
+     status byte could be:
+          0xc0 = program change
+          0x90 = note on
+          etc.
+          data bytes are optional and assumed 0 if omitted
+     example: note 65 on with velocity 100
+          WriteShort(0x90,65,100)
+        """
+        cdef PmEvent buffer[1]
+        cdef PmError err
+        self._check_open()
+
+        buffer[0].timestamp = Pt_Time()
+        buffer[0].message = ((((data2) << 16) & 0xFF0000) | (((data1) << 8) & 0xFF00) | ((status) & 0xFF))
+        if self.debug: print "Writing to MIDI buffer"
+        err = Pm_Write(self.midi, buffer, 1) # stream, buffer, length
+        if err < 0 : raise Exception, Pm_GetErrorText(err)
+
+    def WriteSysEx(self, when, msg):
+        """
+        WriteSysEx(<timestamp>,<msg>)
+        writes a timestamped system-exclusive midi message.
+        <msg> can be a *list* or a *string*
+        example:
+            (assuming y is an input MIDI stream)
+            y.WriteSysEx(0,'\\xF0\\x7D\\x10\\x11\\x12\\x13\\xF7')
+                              is equivalent to
+            y.WriteSysEx(pypm.Time,
+            [0xF0, 0x7D, 0x10, 0x11, 0x12, 0x13, 0xF7])
+        """
+        cdef PmError err
+        cdef char *cmsg
+        cdef PtTimestamp CurTime
+
+        self._check_open()
+
+        if type(msg) is list:
+            msg = array.array('B',msg).tostring() # Markus Pfaff contribution
+        cmsg = msg
+
+        CurTime = Pt_Time()
+        err = Pm_WriteSysEx(self.midi, when, <unsigned char *> cmsg)
+        if err < 0 : raise Exception, Pm_GetErrorText(err)
+        while Pt_Time() == CurTime: # wait for SysEx to go thru or...my
+            pass                    # win32 machine crashes w/ multiple SysEx
+
+
+
+
+
+
+
+
+
+
+
+cdef class Input:
+    """
+class Input:
+    define an input MIDI stream. Takes the form:
+        x = pypm.Input(MidiInputDevice)
+    """
+    cdef PmStream *midi
+    cdef int debug
+    cdef int i
+
+    def __init__(self, InputDevice, buffersize=4096):
+        cdef PmError err
+        self.i = InputDevice
+        self.debug = 0
+        err= Pm_OpenInput(&(self.midi),self.i,NULL,buffersize,&Pt_Time,NULL)
+        if err < 0: raise Exception, Pm_GetErrorText(err)
+        if self.debug: print "MIDI input opened."
+
+    def __dealloc__(self):
+        cdef PmError err
+        if self.debug: print "Closing MIDI input stream and destroying instance"
+
+        err = Pm_Close(self.midi)
+        if err < 0:
+            raise Exception, Pm_GetErrorText(err)
+
+
+
+    def _check_open(self):
+        """ checks to see if the midi is open, and if not, raises an error.
+        """
+
+        if self.midi == NULL:
+            raise Exception, "midi Input not open."
+
+
+    def Close(self):
+        """
+Close()
+    closes a midi stream, flushing any pending buffers.
+    (PortMidi attempts to close open streams when the application
+    exits -- this is particularly difficult under Windows.)
+        """
+        #if not self.midi:
+        #    return
+
+        err = Pm_Close(self.midi)
+        if err < 0:
+            raise Exception, Pm_GetErrorText(err)
+        #self.midi = NULL
+
+
+
+    def SetFilter(self, filters):
+        """
+    SetFilter(<filters>) sets filters on an open input stream
+    to drop selected input types. By default, only active sensing
+    messages are filtered. To prohibit, say, active sensing and
+    sysex messages, call
+    SetFilter(stream, FILT_ACTIVE | FILT_SYSEX);
+
+    Filtering is useful when midi routing or midi thru functionality
+    is being provided by the user application.
+    For example, you may want to exclude timing messages
+    (clock, MTC, start/stop/continue), while allowing note-related
+    messages to pass. Or you may be using a sequencer or drum-machine
+    for MIDI clock information but want to exclude any notes
+    it may play.
+
+    Note: SetFilter empties the buffer after setting the filter,
+    just in case anything got through.
+        """
+        cdef PmEvent buffer[1]
+        cdef PmError err
+
+        self._check_open()
+
+
+        err = Pm_SetFilter(self.midi, filters)
+
+        if err < 0: raise Exception, Pm_GetErrorText(err)
+
+        while(Pm_Poll(self.midi) != pmNoError):
+
+            err = Pm_Read(self.midi,buffer,1)
+            if err < 0: raise Exception, Pm_GetErrorText(err)
+
+    def SetChannelMask(self, mask):
+        """
+    SetChannelMask(<mask>) filters incoming messages based on channel.
+    The mask is a 16-bit bitfield corresponding to appropriate channels
+    Channel(<channel>) can assist in calling this function.
+    i.e. to set receive only input on channel 1, call with
+    SetChannelMask(Channel(1))
+    Multiple channels should be OR'd together, like
+    SetChannelMask(Channel(10) | Channel(11))
+    note: PyPortMidi Channel function has been altered from
+          the original PortMidi c call to correct for what
+          seems to be a bug --- i.e. channel filters were
+          all numbered from 0 to 15 instead of 1 to 16.
+        """
+        cdef PmError err
+
+        self._check_open()
+
+        err = Pm_SetChannelMask(self.midi,mask)
+        if err < 0: raise Exception, Pm_GetErrorText(err)
+        
+    def Poll(self):
+        """
+    Poll tests whether input is available,
+    returning TRUE, FALSE, or an error value.
+        """
+        cdef PmError err
+        self._check_open()
+
+        err = Pm_Poll(self.midi)
+        if err < 0: raise Exception, Pm_GetErrorText(err)
+        return err
+    
+    def Read(self,length):
+        """
+Read(length): returns up to <length> midi events stored in
+the buffer and returns them as a list:
+[[[status,data1,data2,data3],timestamp],
+ [[status,data1,data2,data3],timestamp],...]
+example: Read(50) returns all the events in the buffer,
+         up to 50 events.
+        """
+        cdef PmEvent buffer[1024]
+        
+        self._check_open()
+
+        x = []
+        
+        if length > 1024: raise IndexError, 'maximum buffer length is 1024'
+        if length < 1: raise IndexError, 'minimum buffer length is 1'
+        NumEvents = Pm_Read(self.midi,buffer,length)
+        if NumEvents < 0: raise Exception, Pm_GetErrorText(NumEvents)
+        x=[]
+        if NumEvents >= 1:
+            for loop in range(NumEvents):
+                 x.append([[buffer[loop].message & 0xff, (buffer[loop].message >> 8) & 0xFF, (buffer[loop].message >> 16) & 0xFF, (buffer[loop].message >> 24) & 0xFF], buffer[loop].timestamp])
+        return x
diff --git a/pd/portmidi/pm_python/pyportmidi/midi.py b/pd/portmidi/pm_python/pyportmidi/midi.py
new file mode 100644
index 000000000..71e4f2b4b
--- /dev/null
+++ b/pd/portmidi/pm_python/pyportmidi/midi.py
@@ -0,0 +1,566 @@
+"""
+Module for interacting with midi input and output.
+
+The midi module can send output to midi devices, and get input
+from midi devices.  It can also list midi devices on the system.
+
+Including real midi devices, and virtual ones.
+
+It uses the portmidi library.  Is portable to which ever platforms
+portmidi supports (currently windows, OSX, and linux).
+"""
+
+import atexit
+
+
+
+_init = False
+_pypm = None
+
+
+__all__ = [ "Input",
+            "MidiException",
+            "Output",
+            "get_count",
+            "get_default_input_id",
+            "get_default_output_id",
+            "get_device_info",
+            "init",
+            "quit",
+            "time",
+           ]
+
+__theclasses__ = ["Input", "Output"]
+
+
+def init():
+    """initialize the midi module
+    pyportmidi.init(): return None
+    
+    Call the initialisation function before using the midi module.
+    
+    It is safe to call this more than once.
+    """
+    global _init, _pypm
+    if not _init:
+        import pyportmidi._pyportmidi
+        _pypm = pyportmidi._pyportmidi
+
+        _pypm.Initialize()
+        _init = True
+        atexit.register(quit)
+
+
+def quit():
+    """uninitialize the midi module
+    pyportmidi.quit(): return None
+
+
+    Called automatically atexit if you don't call it.
+
+    It is safe to call this function more than once.
+    """
+    global _init, _pypm
+    if _init:
+        # TODO: find all Input and Output classes and close them first?
+        _pypm.Terminate()
+        _init = False
+        del _pypm
+
+def _check_init():
+    if not _init:
+        raise RuntimeError("pyportmidi not initialised.")
+
+def get_count():
+    """gets the number of devices.
+    pyportmidi.get_count(): return num_devices
+
+
+    Device ids range from 0 to get_count() -1
+    """
+    _check_init()
+    return _pypm.CountDevices()
+
+
+
+
+def get_default_input_id():
+    """gets default input device number
+    pyportmidi.get_default_input_id(): return default_id
+    
+    
+    Return the default device ID or -1 if there are no devices.
+    The result can be passed to the Input()/Ouput() class.
+    
+    On the PC, the user can specify a default device by
+    setting an environment variable. For example, to use device #1.
+    
+        set PM_RECOMMENDED_INPUT_DEVICE=1
+    
+    The user should first determine the available device ID by using
+    the supplied application "testin" or "testout".
+    
+    In general, the registry is a better place for this kind of info,
+    and with USB devices that can come and go, using integers is not
+    very reliable for device identification. Under Windows, if
+    PM_RECOMMENDED_OUTPUT_DEVICE (or PM_RECOMMENDED_INPUT_DEVICE) is
+    *NOT* found in the environment, then the default device is obtained
+    by looking for a string in the registry under:
+        HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Input_Device
+    and HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Output_Device
+    for a string. The number of the first device with a substring that
+    matches the string exactly is returned. For example, if the string
+    in the registry is "USB", and device 1 is named
+    "In USB MidiSport 1x1", then that will be the default
+    input because it contains the string "USB".
+    
+    In addition to the name, get_device_info() returns "interf", which
+    is the interface name. (The "interface" is the underlying software
+    system or API used by PortMidi to access devices. Examples are
+    MMSystem, DirectX (not implemented), ALSA, OSS (not implemented), etc.)
+    At present, the only Win32 interface is "MMSystem", the only Linux
+    interface is "ALSA", and the only Max OS X interface is "CoreMIDI".
+    To specify both the interface and the device name in the registry,
+    separate the two with a comma and a space, e.g.:
+        MMSystem, In USB MidiSport 1x1
+    In this case, the string before the comma must be a substring of
+    the "interf" string, and the string after the space must be a
+    substring of the "name" name string in order to match the device.
+    
+    Note: in the current release, the default is simply the first device
+    (the input or output device with the lowest PmDeviceID).
+    """
+    return _pypm.GetDefaultInputDeviceID()
+
+
+
+
+def get_default_output_id():
+    """gets default output device number
+    pyportmidi.get_default_output_id(): return default_id
+    
+    
+    Return the default device ID or -1 if there are no devices.
+    The result can be passed to the Input()/Ouput() class.
+    
+    On the PC, the user can specify a default device by
+    setting an environment variable. For example, to use device #1.
+    
+        set PM_RECOMMENDED_OUTPUT_DEVICE=1
+    
+    The user should first determine the available device ID by using
+    the supplied application "testin" or "testout".
+    
+    In general, the registry is a better place for this kind of info,
+    and with USB devices that can come and go, using integers is not
+    very reliable for device identification. Under Windows, if
+    PM_RECOMMENDED_OUTPUT_DEVICE (or PM_RECOMMENDED_INPUT_DEVICE) is
+    *NOT* found in the environment, then the default device is obtained
+    by looking for a string in the registry under:
+        HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Input_Device
+    and HKEY_LOCAL_MACHINE/SOFTWARE/PortMidi/Recommended_Output_Device
+    for a string. The number of the first device with a substring that
+    matches the string exactly is returned. For example, if the string
+    in the registry is "USB", and device 1 is named
+    "In USB MidiSport 1x1", then that will be the default
+    input because it contains the string "USB".
+    
+    In addition to the name, get_device_info() returns "interf", which
+    is the interface name. (The "interface" is the underlying software
+    system or API used by PortMidi to access devices. Examples are
+    MMSystem, DirectX (not implemented), ALSA, OSS (not implemented), etc.)
+    At present, the only Win32 interface is "MMSystem", the only Linux
+    interface is "ALSA", and the only Max OS X interface is "CoreMIDI".
+    To specify both the interface and the device name in the registry,
+    separate the two with a comma and a space, e.g.:
+        MMSystem, In USB MidiSport 1x1
+    In this case, the string before the comma must be a substring of
+    the "interf" string, and the string after the space must be a
+    substring of the "name" name string in order to match the device.
+    
+    Note: in the current release, the default is simply the first device
+    (the input or output device with the lowest PmDeviceID).
+    """
+    _check_init()
+    return _pypm.GetDefaultOutputDeviceID()
+
+
+def get_device_info(an_id):
+    """ returns information about a midi device
+    pyportmidi.get_device_info(an_id): return (interf, name, input, output, opened) 
+
+    interf - a text string describing the device interface, eg 'ALSA'.
+    name - a text string for the name of the device, eg 'Midi Through Port-0'
+    input - 0, or 1 if the device is an input device.
+    output - 0, or 1 if the device is an output device.
+    opened - 0, or 1 if the device is opened.
+
+    If the id is out of range, the function returns None.
+    """
+    _check_init()
+    return _pypm.GetDeviceInfo(an_id) 
+
+
+class Input(object):
+    """Input is used to get midi input from midi devices.
+    Input(device_id)
+    Input(device_id, buffer_size)
+
+    buffer_size -the number of input events to be buffered waiting to 
+      be read using Input.read() 
+    """
+
+    def __init__(self, device_id, buffer_size=4096):
+        """
+        The buffer_size specifies the number of input events to be buffered 
+        waiting to be read using Input.read().
+        """
+        _check_init()
+ 
+        if device_id == -1:
+            raise MidiException("Device id is -1, not a valid output id.  -1 usually means there were no default Output devices.")
+            
+        try:
+            r = get_device_info(device_id)
+        except TypeError:
+            raise TypeError("an integer is required")
+        except OverflowError:
+            raise OverflowError("long int too large to convert to int")
+
+        # and now some nasty looking error checking, to provide nice error 
+        #   messages to the kind, lovely, midi using people of whereever.
+        if r:
+            interf, name, input, output, opened = r
+            if input:
+                try:
+                    self._input = _pypm.Input(device_id, buffer_size)
+                except TypeError:
+                    raise TypeError("an integer is required")
+                self.device_id = device_id
+
+            elif output:
+                raise MidiException("Device id given is not a valid input id, it is an output id.")
+            else:
+                raise MidiException("Device id given is not a valid input id.")
+        else:
+            raise MidiException("Device id invalid, out of range.")
+
+
+
+
+    def _check_open(self):
+        if self._input is None:
+            raise MidiException("midi not open.")
+
+
+
+    def close(self):
+        """ closes a midi stream, flushing any pending buffers.
+        Input.close(): return None
+
+        PortMidi attempts to close open streams when the application
+        exits -- this is particularly difficult under Windows.
+        """
+        _check_init()
+        if not (self._input is None):
+            self._input.Close()
+        self._input = None
+
+
+
+    def read(self, num_events):
+        """reads num_events midi events from the buffer.
+        Input.read(num_events): return midi_event_list
+
+        Reads from the Input buffer and gives back midi events.
+        [[[status,data1,data2,data3],timestamp],
+         [[status,data1,data2,data3],timestamp],...]
+        """
+        _check_init()
+        self._check_open()
+        return self._input.Read(num_events)
+
+
+    def poll(self):
+        """returns true if there's data, or false if not.
+        Input.poll(): return Bool
+
+        raises a MidiException on error.
+        """
+        _check_init()
+        self._check_open()
+
+        r = self._input.Poll()
+        if r == _pypm.TRUE:
+            return True
+        elif r == _pypm.FALSE:
+            return False
+        else:
+            err_text = GetErrorText(r)
+            raise MidiException( (r, err_text) )
+
+
+
+
+class Output(object):
+    """Output is used to send midi to an output device
+    Output(device_id)
+    Output(device_id, latency = 0)
+    Output(device_id, buffer_size = 4096)
+    Output(device_id, latency, buffer_size)
+
+    The buffer_size specifies the number of output events to be 
+    buffered waiting for output.  (In some cases -- see below -- 
+    PortMidi does not buffer output at all and merely passes data 
+    to a lower-level API, in which case buffersize is ignored.)
+
+    latency is the delay in milliseconds applied to timestamps to determine
+    when the output should actually occur. (If latency is < 0, 0 is 
+    assumed.)
+
+    If latency is zero, timestamps are ignored and all output is delivered
+    immediately. If latency is greater than zero, output is delayed until
+    the message timestamp plus the latency. (NOTE: time is measured 
+    relative to the time source indicated by time_proc. Timestamps are 
+    absolute, not relative delays or offsets.) In some cases, PortMidi 
+    can obtain better timing than your application by passing timestamps 
+    along to the device driver or hardware. Latency may also help you 
+    to synchronize midi data to audio data by matching midi latency to 
+    the audio buffer latency.
+
+    """
+
+    def __init__(self, device_id, latency = 0, buffer_size = 4096):
+        """Output(device_id)
+        Output(device_id, latency = 0)
+        Output(device_id, buffer_size = 4096)
+        Output(device_id, latency, buffer_size)
+
+        The buffer_size specifies the number of output events to be 
+        buffered waiting for output.  (In some cases -- see below -- 
+        PortMidi does not buffer output at all and merely passes data 
+        to a lower-level API, in which case buffersize is ignored.)
+
+        latency is the delay in milliseconds applied to timestamps to determine
+        when the output should actually occur. (If latency is < 0, 0 is 
+        assumed.)
+
+        If latency is zero, timestamps are ignored and all output is delivered
+        immediately. If latency is greater than zero, output is delayed until
+        the message timestamp plus the latency. (NOTE: time is measured 
+        relative to the time source indicated by time_proc. Timestamps are 
+        absolute, not relative delays or offsets.) In some cases, PortMidi 
+        can obtain better timing than your application by passing timestamps 
+        along to the device driver or hardware. Latency may also help you 
+        to synchronize midi data to audio data by matching midi latency to 
+        the audio buffer latency.
+        """
+     
+        _check_init()
+        self._aborted = 0
+
+        if device_id == -1:
+            raise MidiException("Device id is -1, not a valid output id.  -1 usually means there were no default Output devices.")
+            
+        try:
+            r = get_device_info(device_id)
+        except TypeError:
+            raise TypeError("an integer is required")
+        except OverflowError:
+            raise OverflowError("long int too large to convert to int")
+
+        # and now some nasty looking error checking, to provide nice error 
+        #   messages to the kind, lovely, midi using people of whereever.
+        if r:
+            interf, name, input, output, opened = r
+            if output:
+                try:
+                    self._output = _pypm.Output(device_id, latency)
+                except TypeError:
+                    raise TypeError("an integer is required")
+                self.device_id = device_id
+
+            elif input:
+                raise MidiException("Device id given is not a valid output id, it is an input id.")
+            else:
+                raise MidiException("Device id given is not a valid output id.")
+        else:
+            raise MidiException("Device id invalid, out of range.")
+
+    def _check_open(self):
+        if self._output is None:
+            raise MidiException("midi not open.")
+
+        if self._aborted:
+            raise MidiException("midi aborted.")
+
+
+    def close(self):
+        """ closes a midi stream, flushing any pending buffers.
+        Output.close(): return None
+
+        PortMidi attempts to close open streams when the application
+        exits -- this is particularly difficult under Windows.
+        """
+        _check_init()
+        if not (self._output is None):
+            self._output.Close()
+        self._output = None
+
+    def abort(self):
+        """terminates outgoing messages immediately
+        Output.abort(): return None
+
+        The caller should immediately close the output port;
+        this call may result in transmission of a partial midi message.
+        There is no abort for Midi input because the user can simply
+        ignore messages in the buffer and close an input device at
+        any time.
+        """
+
+        _check_init()
+        if self._output:
+            self._output.Abort()
+        self._aborted = 1
+
+
+
+
+
+    def write(self, data):
+        """writes a list of midi data to the Output
+        Output.write(data)
+
+        writes series of MIDI information in the form of a list:
+             write([[[status <,data1><,data2><,data3>],timestamp],
+                    [[status <,data1><,data2><,data3>],timestamp],...])
+        <data> fields are optional
+        example: choose program change 1 at time 20000 and
+        send note 65 with velocity 100 500 ms later.
+             write([[[0xc0,0,0],20000],[[0x90,60,100],20500]])
+        notes:
+          1. timestamps will be ignored if latency = 0.
+          2. To get a note to play immediately, send MIDI info with
+             timestamp read from function Time.
+          3. understanding optional data fields:
+               write([[[0xc0,0,0],20000]]) is equivalent to
+               write([[[0xc0],20000]])
+
+        Can send up to 1024 elements in your data list, otherwise an 
+         IndexError exception is raised.
+        """
+        _check_init()
+        self._check_open()
+
+        self._output.Write(data)
+
+
+    def write_short(self, status, data1 = 0, data2 = 0):
+        """write_short(status <, data1><, data2>)
+        Output.write_short(status)
+        Output.write_short(status, data1 = 0, data2 = 0)
+
+        output MIDI information of 3 bytes or less.
+        data fields are optional
+        status byte could be:
+             0xc0 = program change
+             0x90 = note on
+             etc.
+             data bytes are optional and assumed 0 if omitted
+        example: note 65 on with velocity 100
+             write_short(0x90,65,100)
+        """
+        _check_init()
+        self._check_open()
+        self._output.WriteShort(status, data1, data2)
+
+
+    def write_sys_ex(self, when, msg):
+        """writes a timestamped system-exclusive midi message.
+        Output.write_sys_ex(when, msg)
+
+        msg - can be a *list* or a *string*
+        when - a timestamp in miliseconds
+        example:
+          (assuming o is an onput MIDI stream)
+            o.write_sys_ex(0,'\\xF0\\x7D\\x10\\x11\\x12\\x13\\xF7')
+          is equivalent to
+            o.write_sys_ex(pyportmidi.time(),
+                           [0xF0,0x7D,0x10,0x11,0x12,0x13,0xF7])
+        """
+        _check_init()
+        self._check_open()
+        self._output.WriteSysEx(when, msg)
+
+
+    def note_on(self, note, velocity=None, channel = 0):
+        """turns a midi note on.  Note must be off.
+        Output.note_on(note, velocity=None, channel = 0)
+
+        Turn a note on in the output stream.  The note must already
+        be off for this to work correctly.
+        """
+        if velocity is None:
+            velocity = 0
+
+        if not (0 <= channel <= 15):
+            raise ValueError("Channel not between 0 and 15.")
+
+        self.write_short(0x90+channel, note, velocity)
+
+    def note_off(self, note, velocity=None, channel = 0):
+        """turns a midi note off.  Note must be on.
+        Output.note_off(note, velocity=None, channel = 0)
+
+        Turn a note off in the output stream.  The note must already
+        be on for this to work correctly.
+        """
+        if velocity is None:
+            velocity = 0
+
+        if not (0 <= channel <= 15):
+            raise ValueError("Channel not between 0 and 15.")
+
+        self.write_short(0x80 + channel, note, velocity)
+
+
+    def set_instrument(self, instrument_id, channel = 0):
+        """select an instrument, with a value between 0 and 127
+        Output.set_instrument(instrument_id, channel = 0)
+
+        """
+        if not (0 <= instrument_id <= 127):
+            raise ValueError("Undefined instrument id: %d" % instrument_id)
+
+        if not (0 <= channel <= 15):
+            raise ValueError("Channel not between 0 and 15.")
+
+        self.write_short(0xc0+channel, instrument_id)
+
+
+
+def time():
+    """returns the current time in ms of the PortMidi timer
+    pyportmidi.time(): return time
+
+    The time is reset to 0, when the module is inited.
+    """
+    return _pypm.Time()
+
+
+
+
+
+
+
+
+class MidiException(Exception):
+    """MidiException(errno) that can be raised.
+    """
+    def __init__(self, value):
+        self.parameter = value
+    def __str__(self):
+        return repr(self.parameter)
+
+
+
diff --git a/pd/portmidi/pm_python/setup.py b/pd/portmidi/pm_python/setup.py
new file mode 100644
index 000000000..14ab1c758
--- /dev/null
+++ b/pd/portmidi/pm_python/setup.py
@@ -0,0 +1,185 @@
+import sys
+import os
+import logging
+
+from distutils.core import setup, Command
+from distutils.extension import Extension
+try:
+    from Cython.Distutils import build_ext
+except ImportError:
+    logging.warn("Cython is preferred over pyrex for python3 compatibility.")
+    from Pyrex.Distutils import build_ext
+
+
+
+
+
+DESCRIPTION = open('README_PYTHON.txt').read()
+CHANGES = open('CHANGES.txt').read()
+TODO = open('TODO.txt').read()
+
+EXTRAS = {}
+
+long_description = DESCRIPTION + CHANGES + TODO
+#import sys
+#if "checkdocs" in sys.argv:
+#    print long_description
+
+
+METADATA = {
+    'name':             'pyportmidi',
+    'version':          '0.0.7',
+    'license':          'MIT License',
+    'url':              'http://pypi.python.org/pyportmidi/',
+    'author':           'John Harrison, Roger B. Dannenberg, Rene Dudfield, others...',
+    'author_email':     'renesd@gmail.com',
+    'maintainer':       'Rene Dudfield',
+    'maintainer_email': 'renesd@gmail.com',
+    'description':      'Python Wrappings for PortMidi #python.  CHANGES: new package layout.',
+    'long_description': long_description,
+    'classifiers':      [
+            'Development Status :: 2 - Pre-Alpha',
+            'Intended Audience :: Developers',
+            'Intended Audience :: Information Technology',
+            'License :: OSI Approved :: BSD License',
+            'Operating System :: MacOS :: MacOS X',
+            'Operating System :: Microsoft :: Windows',
+            'Operating System :: POSIX :: Linux',
+            'Programming Language :: Cython',
+            'Programming Language :: C',
+            'Programming Language :: Python :: 2',
+            'Programming Language :: Python :: 2.5',
+            'Programming Language :: Python :: 2.6',
+            'Programming Language :: Python :: 2.7',
+            'Programming Language :: Python :: 3',
+            'Programming Language :: Python :: 3.0',
+            'Programming Language :: Python :: 3.1',
+            'Programming Language :: Python :: 3.2',
+            'Topic :: Multimedia :: Sound/Audio :: MIDI',
+            'Topic :: Software Development :: Libraries',
+    ],
+}
+
+
+if "bdist_msi" in sys.argv:
+    # hack the version name to a format msi doesn't have trouble with
+    METADATA["version"] = METADATA["version"].replace("pre", "a0")
+    METADATA["version"] = METADATA["version"].replace("rc", "b0")
+    METADATA["version"] = METADATA["version"].replace("release", "")
+
+
+
+
+
+# allow optionally using setuptools for bdist_egg.
+using_setuptools = False
+
+if "-setuptools" in sys.argv:
+    using_setuptools = True
+
+    from setuptools import setup, Command
+    sys.argv.remove ("-setuptools")
+
+    EXTRAS.update({'include_package_data': True,
+                   'install_requires': [],
+                   'zip_safe': False,
+                   'test_suite' : 'pyportmidi.tests',
+                   }
+    )
+
+
+# test command.  For doing 'python setup.py test'
+class TestCommand(Command):
+    user_options = [ ]
+
+    def initialize_options(self):
+        self._dir = os.getcwd()
+
+    def finalize_options(self):
+        pass
+
+    def run(self):
+        '''
+        runs the tests with default options.
+        '''
+        import pyportmidi.tests
+        pyportmidi.tests.main()
+
+        #import subprocess
+        #return subprocess.call([sys.executable, "run_tests.py"])
+
+
+cmdclass = {'build_ext': build_ext}
+
+# we use our test command.
+if not using_setuptools:
+    import os
+    cmdclass['test'] = TestCommand
+
+
+
+scripts = []
+
+PACKAGEDATA = {
+    'cmdclass':    cmdclass,
+
+    'package_dir': {'pyportmidi': 'pyportmidi',
+                    #'pyportmidi.tests': 'test',
+                    #'pyportmidi.docs': 'docs',
+                    #'pyportmidi.examples': 'examples',
+
+                   },
+    'packages': ['pyportmidi',
+                 'pyportmidi.tests', 
+                ],
+    'scripts': scripts,
+}
+
+
+PACKAGEDATA.update(METADATA)
+PACKAGEDATA.update(EXTRAS)
+
+
+
+if sys.platform == 'win32':
+    print "Found Win32 platform"
+    EXTENSION = dict(
+        ext_modules=[ 
+            Extension("pyportmidi._pyportmidi", [os.path.join("pyportmidi", "_pyportmidi.pyx")],
+                      library_dirs = ["../Release"],
+                      libraries = ["portmidi", "winmm"],
+                      include_dirs = ["../porttime"],
+#                  define_macros = [("_WIN32_", None)]) # needed by portmidi.h
+                      extra_compile_args = ["/DWIN32"]) # needed by portmidi.h
+        ]
+    )
+elif sys.platform == 'darwin':
+    print "Found darwin (OS X) platform"
+    library_dirs = ["/usr/local/lib"]
+    include_dirs = ["/usr/local/include"]
+    EXTENSION = dict(
+        ext_modules=[ 
+            Extension("pyportmidi._pyportmidi", [os.path.join("pyportmidi", "_pyportmidi.pyx")],
+                      library_dirs = library_dirs,
+                      include_dirs = include_dirs,
+                      libraries = ["portmidi"],
+                      extra_link_args=["-framework", "CoreFoundation",
+                                       "-framework", "CoreMIDI",
+                                       "-framework", "CoreAudio"])
+        ]
+    )
+else:
+    print "Assuming Linux platform"
+    EXTENSION = dict(
+        ext_modules=[ 
+            Extension("pyportmidi._pyportmidi", [os.path.join("pyportmidi", "_pyportmidi.pyx")],
+                      library_dirs=["./linux"],
+                      libraries = ["portmidi", "asound", "pthread"]
+                      )
+        ]
+       
+    )
+
+PACKAGEDATA.update(EXTENSION)
+
+setup(**PACKAGEDATA)
diff --git a/pd/portmidi/pm_qt/README_QT.txt b/pd/portmidi/pm_qt/README_QT.txt
new file mode 100644
index 000000000..613f4a19e
--- /dev/null
+++ b/pd/portmidi/pm_qt/README_QT.txt
@@ -0,0 +1,15 @@
+README_QT.txt for PortMidi
+Richard Starfield
+20 Sep 2010
+
+This is a QtCreator build file for PortMidi.
+
+To build PortMidi on Windows with QtCreator:
+
+Move portmidi/pm_qt/portmidi.pro to portmidi/portmidi.pro
+
+Open portmidi.pro in QtCreator, change to the release build option and build all to compile the static library.
+
+This has been tested in Windows. The project file does include Linux build switches but they haven't been tested yet.
+
+To compile a DLL instead of a static library change line 11 from "CONFIG += staticlib" to "CONFIG += DLL"
diff --git a/pd/portmidi/pm_qt/portmidi.pro b/pd/portmidi/pm_qt/portmidi.pro
new file mode 100644
index 000000000..886eec8f0
--- /dev/null
+++ b/pd/portmidi/pm_qt/portmidi.pro
@@ -0,0 +1,47 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2010-09-02T12:50:47
+#
+#-------------------------------------------------
+
+QT       -= core gui
+
+TARGET = portmidi
+TEMPLATE = lib
+CONFIG += staticlib # replace this with DLL for dynamic link on Windows
+
+INCLUDEPATH = pm_common/ porttime/
+
+win32 {
+	INCLUDEPATH += pm_win/
+	LIBS += -lwinmm
+	SOURCES += pm_win/pmwinmm.c \
+	    pm_win/pmwin.c
+	HEADERS += pm_win/pmwinmm.h
+}
+
+# this build hasn't been tested on Linux yet
+unix {
+	DEFINES += PMALSA
+	INCLUDEPATH += pm_linux/
+	LIBS += -lasound
+	SOURCES += pm_linux/finddefault.c \
+	    pm_linux/pmlinux.c \
+	    pm_linux/pmlinuxalsa.c
+	HEADERS += pm_linux/pmlinux.h pm_linux/pmlinuxalsa.h
+}
+
+
+DEFINES -= UNICODE
+
+SOURCES += \
+    pm_common/portmidi.c \
+    pm_common/pmutil.c \
+    porttime/porttime.c \
+    porttime/ptwinmm.c
+
+HEADERS += \
+    pm_common/pmutil.h \
+    pm_common/pminternal.h \
+    pm_common/portmidi.h \
+    porttime/porttime.h
diff --git a/pd/portmidi/pm_test/CMakeLists.txt b/pd/portmidi/pm_test/CMakeLists.txt
new file mode 100644
index 000000000..b89074b0b
--- /dev/null
+++ b/pd/portmidi/pm_test/CMakeLists.txt
@@ -0,0 +1,26 @@
+# pm_test
+
+# set the build directory to be in portmidi, not in portmidi/pm_test
+# this is required for Xcode:
+if(APPLE)
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR})
+endif(APPLE)
+
+if(WIN32)
+include(../pm_win/static.cmake)
+endif(WIN32)
+
+macro(make_a_test name)
+  add_executable(${name} ${name}.c)
+  target_link_libraries(${name} portmidi-static ${PM_NEEDED_LIBS})
+  add_dependencies(${name} portmidi-static)
+endmacro(make_a_test)
+
+make_a_test(test)
+make_a_test(midithread)
+make_a_test(midithru)
+make_a_test(sysex)
+make_a_test(latency)
+make_a_test(mm)
+make_a_test(midiclock)
+make_a_test(qtest)
diff --git a/pd/portmidi/pm_test/latency.c b/pd/portmidi/pm_test/latency.c
new file mode 100755
index 000000000..507648c12
--- /dev/null
+++ b/pd/portmidi/pm_test/latency.c
@@ -0,0 +1,290 @@
+/* latency.c -- measure latency of OS */
+
+#include "porttime.h"
+#include "portmidi.h"
+#include "stdlib.h"
+#include "stdio.h"
+#include "string.h"
+#include "assert.h"
+
+/* Latency is defined here to mean the time starting when a
+   process becomes ready to run, and ending when the process
+   actually runs. Latency is due to contention for the
+   processor, usually due to other processes, OS activity
+   including device drivers handling interrupts, and
+   waiting for the scheduler to suspend the currently running
+   process and activate the one that is waiting.
+
+   Latency can affect PortMidi applications: if a process fails
+   to wake up promptly, MIDI input may sit in the input buffer
+   waiting to be handled, and MIDI output may not be generated
+   with accurate timing. Using the latency parameter when 
+   opening a MIDI output port allows the caller to defer timing
+   to PortMidi, which in most implementations will pass the
+   data on to the OS. By passing timestamps and data to the
+   OS kernel, device driver, or even hardware, there are fewer
+   sources of latency that can affect the ultimate timing of
+   the data. On the other hand, the application must generate
+   and deliver the data ahead of the timestamp. The amount by 
+   which data is computed early must be at least as large as
+   the worst-case latency to avoid timing problems.
+
+   Latency is even more important in audio applications. If an
+   application lets an audio output buffer underflow, an audible
+   pop or click is produced. Audio input buffers can overflow,
+   causing data to be lost. In general the audio buffers must
+   be large enough to buffer the worst-case latency that the
+   application will encounter.
+
+   This program measures latency by recording the difference
+   between the scheduled callback time and the current real time.
+   We do not really know the scheduled callback time, so we will
+   record the differences between the real time of each callback
+   and the real time of the previous callback. Differences that
+   are larger than the scheduled difference are recorded. Smaller
+   differences indicate the system is recovering from an earlier
+   latency, so these are ignored.
+   Since printing by the callback process can cause all sorts of
+   delays, this program records latency observations in a
+   histogram. When the program is stopped, the histogram is
+   printed to the console.
+
+   Optionally the system can be tested under a load of MIDI input,
+   MIDI output, or both.  If MIDI input is selected, the callback
+   thread will read any waiting MIDI events each iteration.  You
+   must generate events on this interface for the test to actually
+   put any appreciable load on PortMidi.  If MIDI output is
+   selected, alternating note on and note off events are sent each
+   X iterations, where you specify X.  For example, with a timer
+   callback period of 2ms and X=1, a MIDI event is sent every 2ms.
+
+
+   INTERPRETING RESULTS: Time is quantized to 1ms, so there is
+   some uncertainty due to rounding. A microsecond latency that
+   spans the time when the clock is incremented will be reported
+   as a latency of 1. On the other hand, a latency of almost
+   1ms that falls between two clock ticks will be reported as 
+   zero. In general, if the highest nonzero bin is numbered N,
+   then the maximum latency is N+1.
+
+CHANGE LOG
+
+18-Jul-03 Mark Nelson -- Added code to generate MIDI or receive
+            MIDI during test, and made period user-settable.
+ */
+
+#define HIST_LEN 21 /* how many 1ms bins in the histogram */
+
+#define STRING_MAX 80 /* used for console input */
+
+#define INPUT_BUFFER_SIZE 100
+#define OUTPUT_BUFFER_SIZE 0
+
+#ifndef max
+#define max(a, b) ((a) > (b) ? (a) : (b))
+#endif
+#ifndef min
+#define min(a, b) ((a) <= (b) ? (a) : (b))
+#endif
+
+int get_number(char *prompt);
+
+PtTimestamp previous_callback_time = 0;
+
+int period;            /* milliseconds per callback */
+
+int histogram[HIST_LEN];
+int max_latency = 0;  /* worst latency observed */
+int out_of_range = 0; /* how many points outside of HIST_LEN? */
+
+int test_in, test_out; /* test MIDI in and/or out? */
+int output_period;     /* output MIDI every __ iterations if test_out true */
+int iteration = 0;
+PmStream *in, *out;
+int note_on = 0;       /* is the note currently on? */
+
+/* callback function for PortTime -- computes histogram */
+void pt_callback(PtTimestamp timestamp, void *userData)
+{
+    PtTimestamp difference = timestamp - previous_callback_time - period;
+    previous_callback_time = timestamp;
+
+    /* allow 5 seconds for the system to settle down */
+    if (timestamp < 5000) return;
+
+    iteration++;
+    /* send a note on/off if user requested it */
+    if (test_out && (iteration % output_period == 0)) {
+        PmEvent buffer[1];
+        buffer[0].timestamp = Pt_Time(NULL);
+        if (note_on) {
+            /* note off */
+            buffer[0].message = Pm_Message(0x90, 60, 0);
+            note_on = 0;
+        } else {
+            /* note on */
+            buffer[0].message = Pm_Message(0x90, 60, 100);
+            note_on = 1;
+        }
+        Pm_Write(out, buffer, 1);
+        iteration = 0;
+    }
+
+    /* read all waiting events (if user requested) */
+    if (test_in) {
+       PmError status;
+       PmEvent buffer[1];
+       do {
+          status = Pm_Poll(in);
+          if (status == TRUE) {
+              Pm_Read(in,buffer,1);
+          }
+       } while (status == TRUE);
+    }
+
+    if (difference < 0) return; /* ignore when system is "catching up" */
+
+    /* update the histogram */
+    if (difference < HIST_LEN) {
+        histogram[difference]++;
+    } else {
+        out_of_range++;
+    }
+
+    if (max_latency < difference) max_latency = difference;
+}
+
+
+int main()
+{
+    char line[STRING_MAX];
+    int i;
+    int len;
+    int choice;
+    PtTimestamp stop;
+    printf("Latency histogram.\n");
+    period = 0;
+    while (period < 1) {
+        period = get_number("Choose timer period (in ms, >= 1): ");
+    }
+    printf("Benchmark with:\n\t%s\n\t%s\n\t%s\n\t%s\n",
+           "1. No MIDI traffic",
+           "2. MIDI input",
+           "3. MIDI output",
+           "4. MIDI input and output");
+    choice = get_number("? ");
+    switch (choice) {
+      case 1: test_in = 0; test_out = 0; break;
+      case 2: test_in = 1; test_out = 0; break;
+      case 3: test_in = 0; test_out = 1; break;
+      case 4: test_in = 1; test_out = 1; break;
+      default: assert(0);
+    }
+    if (test_in || test_out) {
+        /* list device information */
+        for (i = 0; i < Pm_CountDevices(); i++) {
+            const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+            if ((test_in && info->input) ||
+                (test_out && info->output)) {
+                printf("%d: %s, %s", i, info->interf, info->name);
+                if (info->input) printf(" (input)");
+                if (info->output) printf(" (output)");
+                printf("\n");
+            }
+        }
+        /* open stream(s) */
+        if (test_in) {
+            int i = get_number("MIDI input device number: ");
+            Pm_OpenInput(&in, 
+                  i,
+                  NULL, 
+                  INPUT_BUFFER_SIZE, 
+                  (PmTimestamp (*)(void *)) Pt_Time, 
+                  NULL);
+            /* turn on filtering; otherwise, input might overflow in the 
+               5-second period before timer callback starts reading midi */
+            Pm_SetFilter(in, PM_FILT_ACTIVE | PM_FILT_CLOCK);
+        }
+        if (test_out) {
+            int i = get_number("MIDI output device number: ");
+            PmEvent buffer[1];
+            Pm_OpenOutput(&out, 
+                  i,
+                  NULL,
+                  OUTPUT_BUFFER_SIZE,
+                  (PmTimestamp (*)(void *)) Pt_Time,
+                  NULL, 
+                  0); /* no latency scheduling */
+
+            /* send a program change to force a status byte -- this fixes
+               a problem with a buggy linux MidiSport driver, and shouldn't
+               hurt anything else
+             */
+            buffer[0].timestamp = 0;
+            buffer[0].message = Pm_Message(0xC0, 0, 0); /* program change */
+            Pm_Write(out, buffer, 1);
+
+            output_period = get_number(
+                "MIDI out should be sent every __ callback iterations: ");
+
+            assert(output_period >= 1);
+        }
+    }
+
+    printf("%s%s", "Latency measurements will start in 5 seconds. ",
+                   "Type return to stop: ");
+    Pt_Start(period, &pt_callback, 0);
+    fgets(line, STRING_MAX, stdin);
+    stop = Pt_Time();
+    Pt_Stop();
+
+    /* courteously turn off the last note, if necessary */
+    if (note_on) {
+       PmEvent buffer[1];
+       buffer[0].timestamp = Pt_Time(NULL);
+       buffer[0].message = Pm_Message(0x90, 60, 0);
+       Pm_Write(out, buffer, 1);
+    }
+
+    /* print the histogram */
+    printf("Duration of test: %g seconds\n\n", max(0, stop - 5000) * 0.001);
+    printf("Latency(ms)  Number of occurrences\n");
+    /* avoid printing beyond last non-zero histogram entry */
+    len = min(HIST_LEN, max_latency + 1);
+    for (i = 0; i < len; i++) {
+        printf("%2d      %10d\n", i, histogram[i]);
+    }
+    printf("Number of points greater than %dms: %d\n", 
+           HIST_LEN - 1, out_of_range);
+    printf("Maximum latency: %d milliseconds\n", max_latency);
+    printf("\nNote that due to rounding, actual latency can be 1ms higher\n");
+    printf("than the numbers reported here.\n");
+    printf("Type return to exit...");
+    fgets(line, STRING_MAX, stdin);
+
+	if(choice == 2)
+		Pm_Close(in);
+	else if(choice == 3)
+		Pm_Close(out);
+	else if(choice == 4)
+	{
+		Pm_Close(in);
+		Pm_Close(out);
+	}
+    return 0;
+}
+
+
+/* read a number from console */
+int get_number(char *prompt)
+{
+    char line[STRING_MAX];
+    int n = 0, i;
+    printf(prompt);
+    while (n != 1) {
+        n = scanf("%d", &i);
+        fgets(line, STRING_MAX, stdin);
+
+    }
+    return i;
+}
diff --git a/pd/portmidi/pm_test/latency.vcproj b/pd/portmidi/pm_test/latency.vcproj
new file mode 100755
index 000000000..afefed735
--- /dev/null
+++ b/pd/portmidi/pm_test/latency.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="latency"
+	ProjectGUID="{41D78CBF-B04B-4561-BA4A-AC238C40633D}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="latency.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/latency.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\latency.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/latency.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\latency.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="latency.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/latency.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\latency.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/latency.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\latency.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\latency.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/midiclock.c b/pd/portmidi/pm_test/midiclock.c
new file mode 100644
index 000000000..60fcf7a9a
--- /dev/null
+++ b/pd/portmidi/pm_test/midiclock.c
@@ -0,0 +1,287 @@
+/* miditime.c -- a test program that sends midi clock and MTC */
+
+#include "portmidi.h"
+#include "porttime.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <ctype.h>
+
+#ifndef false
+#define false 0
+#define true 1
+#endif
+
+#define private static
+typedef int boolean;
+
+#define MIDI_TIME_CLOCK 0xf8
+#define MIDI_START      0xfa
+#define MIDI_CONTINUE	0xfb
+#define MIDI_STOP       0xfc
+#define MIDI_Q_FRAME	0xf1
+
+#define OUTPUT_BUFFER_SIZE 0
+#define DRIVER_INFO NULL
+#define TIME_PROC ((int32_t (*)(void *)) Pt_Time)
+#define TIME_INFO NULL
+#define LATENCY 0
+#define TIME_START Pt_Start(1, 0, 0) /* timer started w/millisecond accuracy */
+
+#define STRING_MAX 80 /* used for console input */
+
+/* to determine ms per clock:
+ *    time per beat in seconds =  60 / tempo
+ *    multiply by 1000 to get time per beat in ms: 60000 / tempo
+ *    divide by 24 CLOCKs per beat: (60000/24) / tempo
+ *    simplify: 2500 / tempo
+ */
+#define TEMPO_TO_CLOCK 2500.0
+
+boolean done = false;
+PmStream *midi;
+/* shared flags to control callback output generation: */
+boolean clock_running = false;
+boolean send_start_stop = false;
+boolean time_code_running = false;
+boolean active = false; /* tells callback to do its thing */
+float tempo = 60.0F;
+/* protocol for handing off portmidi to callback thread:
+    main owns portmidi
+    main sets active = true: ownership transfers to callback
+    main sets active = false: main requests ownership
+    callback sees active == false, yields ownership back to main
+    main waits 2ms to make sure callback has a chance to yield
+       (stop making PortMidi calls), then assumes it can close
+       PortMidi
+ */
+
+/* timer_poll -- the timer callback function */
+/*
+ * All MIDI sends take place here
+ */
+void timer_poll(PtTimestamp timestamp, void *userData)
+{
+    static int callback_owns_portmidi = false;
+    static PmTimestamp clock_start_time = 0;
+    static double next_clock_time = 0;
+    /* SMPTE time */
+    static int frames = 0;
+    static int seconds = 0;
+    static int minutes = 0;
+    static int hours = 0;
+    static int mtc_count = 0; /* where are we in quarter frame sequence? */
+    static int smpte_start_time = 0;
+    static double next_smpte_time = 0;
+    #define QUARTER_FRAME_PERIOD (1.0 / 120.0) /* 30fps, 1/4 frame */
+
+    if (callback_owns_portmidi && !active) {
+        /* main is requesting (by setting active to false) that we shut down */
+        callback_owns_portmidi = false;
+        return;
+    }
+    if (!active) return; /* main still getting ready or it's closing down */
+    callback_owns_portmidi = true; /* main is ready, we have portmidi */
+    if (send_start_stop) {
+        if (clock_running) {
+            Pm_WriteShort(midi, 0, MIDI_STOP);
+        } else {
+            Pm_WriteShort(midi, 0, MIDI_START);
+            clock_start_time = timestamp;
+            next_clock_time = TEMPO_TO_CLOCK / tempo;
+        }
+        clock_running = !clock_running;
+        send_start_stop = false; /* until main sets it again */
+        /* note that there's a slight race condition here: main could
+           set send_start_stop asynchronously, but we assume user is 
+           typing slower than the clock rate */
+    }
+    if (clock_running) {
+        if ((timestamp - clock_start_time) > next_clock_time) {
+            Pm_WriteShort(midi, 0, MIDI_TIME_CLOCK);
+            next_clock_time += TEMPO_TO_CLOCK / tempo;
+        }
+    }
+    if (time_code_running) {
+        int data = 0; // initialization avoids compiler warning
+        if ((timestamp - smpte_start_time) < next_smpte_time) 
+            return;
+        switch (mtc_count) {
+        case 0: /* frames low nibble */
+            data = frames;
+            break;
+        case 1: /* frames high nibble */
+            data = frames >> 4;
+            break;
+        case 2: /* frames seconds low nibble */
+            data = seconds;
+            break;
+        case 3: /* frames seconds high nibble */
+            data = seconds >> 4;
+            break;
+        case 4: /* frames minutes low nibble */
+            data = minutes;
+            break;
+        case 5: /* frames minutes high nibble */
+            data = minutes >> 4;
+            break;
+        case 6: /* hours low nibble */
+            data = hours;
+            break;
+        case 7: /* hours high nibble */
+            data = hours >> 4;
+            break;
+        }
+        data &= 0xF; /* take only 4 bits */
+        Pm_WriteShort(midi, 0, 
+                      Pm_Message(MIDI_Q_FRAME, (mtc_count << 4) + data, 0));
+        mtc_count = (mtc_count + 1) & 7; /* wrap around */
+        if (mtc_count == 0) { /* update time by two frames */
+            frames += 2;
+            if (frames >= 30) {
+                frames = 0;
+                seconds++;
+                if (seconds >= 60) {
+                    seconds = 0;
+                    minutes++;
+                    if (minutes >= 60) {
+                        minutes = 0;
+                        hours++;
+                        /* just let hours wrap if it gets that far */
+                    }
+                }
+            }
+        }
+        next_smpte_time += QUARTER_FRAME_PERIOD;
+    } else { /* time_code_running is false */
+        smpte_start_time = timestamp;
+        /* so that when it finally starts, we'll be in sync */
+    }
+}
+
+
+/* read a number from console */
+/**/
+int get_number(char *prompt)
+{
+    char line[STRING_MAX];
+    int n = 0, i;
+    printf(prompt);
+    while (n != 1) {
+        n = scanf("%d", &i);
+        fgets(line, STRING_MAX, stdin);
+
+    }
+    return i;
+}
+
+/****************************************************************************
+*               showhelp
+* Effect: print help text
+****************************************************************************/
+
+private void showhelp()
+{
+    printf("\n");
+    printf("t toggles sending MIDI Time Code (MTC)\n");
+    printf("c toggles sending MIDI CLOCK (initially on)\n");
+    printf("m to set tempo (from 1bpm to 300bpm)\n");
+    printf("q quits\n");
+    printf("\n");
+}
+
+/****************************************************************************
+*               doascii
+* Inputs:
+*    char c: input character
+* Effect: interpret to control output
+****************************************************************************/
+
+private void doascii(char c)
+{
+    if (isupper(c)) c = tolower(c);
+    if (c == 'q') done = true;
+    else if (c == 'c') {
+        printf("%s MIDI CLOCKs\n", (clock_running ? "Stopping" : "Starting"));
+        send_start_stop = true;
+    } else if (c == 't') {
+        printf("%s MIDI Time Code\n", 
+               (time_code_running ? "Stopping" : "Starting"));
+        time_code_running = !time_code_running;
+    } else if (c == 'm') {
+        int input_tempo = get_number("Enter new tempo (bpm): ");
+        if (input_tempo >= 1 && input_tempo <= 300) {
+            printf("Changing tempo to %d\n", input_tempo);
+            tempo = (float) input_tempo;
+        } else {
+            printf("Tempo range is 1 to 300, current tempo is %g bpm\n", 
+                   tempo);
+        }
+    } else {
+        showhelp();
+    }
+}
+
+
+/* main - prompt for parameters, start processing */
+/*
+ * Prompt user to type return.
+ * Then send START and MIDI CLOCK for 60 beats/min.
+ * Commands:
+ *     t - toggle sending MIDI Time Code (MTC)
+ *     c - toggle sending MIDI CLOCK
+ *     m - set tempo
+ *     q - quit
+ */
+int main(int argc, char **argv)
+{
+    char s[STRING_MAX]; /* console input */
+    int outp;
+    PmError err;
+    int i;
+    if (argc > 1) { 
+        printf("Warning: command line arguments ignored\n");
+    }
+    showhelp();
+    /* use porttime callback to send midi */
+    Pt_Start(1, timer_poll, 0);
+    /* list device information */
+    printf("MIDI output devices:\n");
+    for (i = 0; i < Pm_CountDevices(); i++) {
+        const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+        if (info->output) printf("%d: %s, %s\n", i, info->interf, info->name);
+    }
+    outp = get_number("Type output device number: ");
+    err = Pm_OpenOutput(&midi, outp, DRIVER_INFO, OUTPUT_BUFFER_SIZE, 
+                        TIME_PROC, TIME_INFO, LATENCY);
+    if (err) {
+        printf(Pm_GetErrorText(err));
+        goto error_exit_no_device;
+    }
+    active = true;
+
+    printf("Type RETURN to start MIDI CLOCK:\n");
+    if (!fgets(s, STRING_MAX, stdin)) goto error_exit;
+    send_start_stop = true; /* send START and then CLOCKs */
+
+    while (!done) {
+        if (fgets(s, STRING_MAX, stdin)) {
+            doascii(s[0]);
+        }
+    }
+
+ error_exit:
+    active = false;
+    Pt_Sleep(2); /* this is to allow callback to complete -- it's
+                    real time, so it's either ok and it runs on
+                    time, or there's no point to synchronizing
+                    with it */
+    /* now we "own" portmidi again */
+    Pm_Close(midi);
+ error_exit_no_device:
+    Pt_Stop();
+    Pm_Terminate();
+    exit(0);
+}
+
diff --git a/pd/portmidi/pm_test/midiclock.vcproj b/pd/portmidi/pm_test/midiclock.vcproj
new file mode 100644
index 000000000..b66e30230
--- /dev/null
+++ b/pd/portmidi/pm_test/midiclock.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="midiclock"
+	ProjectGUID="{9B448D22-EC7E-4BD8-A552-B268D843CC3C}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="midiclock.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/midiclock.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\midiclock.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/midiclock.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\midiclock.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="midiclock.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/midiclock.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\midiclock.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/midiclock.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\midiclock.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\midiclock.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/midithread.c b/pd/portmidi/pm_test/midithread.c
new file mode 100755
index 000000000..fab9794f2
--- /dev/null
+++ b/pd/portmidi/pm_test/midithread.c
@@ -0,0 +1,329 @@
+/* midithread.c -- example program showing how to do midi processing 
+                   in a preemptive thread
+
+  Notes: if you handle midi I/O from your main program, there will be
+  some delay before handling midi messages whenever the program is
+  doing something like file I/O, graphical interface updates, etc.
+
+  To handle midi with minimal delay, you should do all midi processing
+  in a separate, high priority thread. A convenient way to get a high
+  priority thread in windows is to use the timer callback provided by
+  the PortTime library. That is what we show here.
+
+  If the high priority thread writes to a file, prints to the console,
+  or does just about anything other than midi processing, this may 
+  create delays, so all this processing should be off-loaded to the
+  "main" process or thread. Communication between threads can be tricky.
+  If one thread is writing at the same time the other is reading, very
+  tricky race conditions can arise, causing programs to behave
+  incorrectly, but only under certain timing conditions -- a terrible
+  thing to debug. Advanced programmers know this as a synchronization
+  problem. See any operating systems textbook for the complete story.
+
+  To avoid synchronization problems, a simple, reliable approach is
+  to communicate via messages. PortMidi offers a message queue as a
+  datatype, and operations to insert and remove messages. Use two 
+  queues as follows: midi_to_main transfers messages from the midi
+  thread to the main thread, and main_to_midi transfers messages from
+  the main thread to the midi thread. Queues are safe for use between
+  threads as long as ONE thread writes and ONE thread reads. You must 
+  NEVER allow two threads to write to the same queue.
+
+  This program transposes incoming midi data by an amount controlled
+  by the main program. To change the transposition, type an integer
+  followed by return. The main program sends this via a message queue
+  to the midi thread. To quit, type 'q' followed by return.
+
+  The midi thread can also send a pitch to the main program on request.
+  Type 'm' followed by return to wait for the next midi message and
+  print the pitch.
+
+  This program illustrates:
+    Midi processing in a high-priority thread.
+    Communication with a main process via message queues.
+
+ */
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "string.h"
+#include "assert.h"
+#include "portmidi.h"
+#include "pmutil.h"
+#include "porttime.h"
+
+/* if INPUT_BUFFER_SIZE is 0, PortMidi uses a default value */
+#define INPUT_BUFFER_SIZE 0
+
+#define OUTPUT_BUFFER_SIZE 100
+#define DRIVER_INFO NULL
+#define TIME_PROC NULL
+#define TIME_INFO NULL
+/* use zero latency because we want output to be immediate */
+#define LATENCY 0
+
+#define STRING_MAX 80
+
+/**********************************/
+/* DATA USED ONLY BY process_midi */
+/* (except during initialization) */
+/**********************************/
+
+int active = FALSE;
+int monitor = FALSE;
+int midi_thru = TRUE;
+
+int transpose;
+PmStream *midi_in;
+PmStream *midi_out;
+
+/****************************/
+/* END OF process_midi DATA */
+/****************************/
+
+/* shared queues */
+PmQueue *midi_to_main;
+PmQueue *main_to_midi;
+
+#define QUIT_MSG 1000
+#define MONITOR_MSG 1001
+#define THRU_MSG 1002
+
+/* timer interrupt for processing midi data */
+void process_midi(PtTimestamp timestamp, void *userData)
+{
+    PmError result;
+    PmEvent buffer; /* just one message at a time */
+    int32_t msg;
+
+    /* do nothing until initialization completes */
+    if (!active) 
+        return;
+
+    /* check for messages */
+    do { 
+        result = Pm_Dequeue(main_to_midi, &msg); 
+        if (result) {
+            if (msg >= -127 && msg <= 127) 
+                transpose = msg;
+            else if (msg == QUIT_MSG) {
+                /* acknowledge receipt of quit message */
+                Pm_Enqueue(midi_to_main, &msg);
+                active = FALSE;
+                return;
+            } else if (msg == MONITOR_MSG) {
+                /* main has requested a pitch. monitor is a flag that
+                 * records the request:
+                 */
+                monitor = TRUE;
+            } else if (msg == THRU_MSG) {
+                /* toggle Thru on or off */
+                midi_thru = !midi_thru;
+            }
+        }
+    } while (result);         
+    
+    /* see if there is any midi input to process */
+    do {
+		result = Pm_Poll(midi_in);
+        if (result) {
+            int status, data1, data2;
+            if (Pm_Read(midi_in, &buffer, 1) == pmBufferOverflow) 
+                continue;
+            if (midi_thru) 
+                Pm_Write(midi_out, &buffer, 1);
+            /* unless there was overflow, we should have a message now */
+            status = Pm_MessageStatus(buffer.message);
+            data1 = Pm_MessageData1(buffer.message);
+            data2 = Pm_MessageData2(buffer.message);
+            if ((status & 0xF0) == 0x90 ||
+                (status & 0xF0) == 0x80) {
+                
+                /* this is a note-on or note-off, so transpose and send */
+                data1 += transpose;
+                
+                /* keep within midi pitch range, keep proper pitch class */
+                while (data1 > 127) 
+                    data1 -= 12;
+                while (data1 < 0) 
+                    data1 += 12;
+                
+                /* send the message */
+                buffer.message = Pm_Message(status, data1, data2);
+                Pm_Write(midi_out, &buffer, 1);
+                
+                /* if monitor is set, send the pitch to the main thread */
+                if (monitor) {
+                    Pm_Enqueue(midi_to_main, &data1);
+                    monitor = FALSE; /* only send one pitch per request */
+                }
+            }
+        }
+    } while (result);
+}
+
+void exit_with_message(char *msg)
+{
+    char line[STRING_MAX];
+    printf("%s\n", msg);
+    fgets(line, STRING_MAX, stdin);
+    exit(1);
+}
+
+int main()
+{
+    int id;
+    int32_t n;
+    const PmDeviceInfo *info;
+    char line[STRING_MAX];
+    int spin;
+    int done = FALSE;
+
+    /* determine what type of test to run */
+    printf("begin PortMidi multithread test...\n");
+	
+    /* note that it is safe to call PortMidi from the main thread for
+       initialization and opening devices. You should not make any
+       calls to PortMidi from this thread once the midi thread begins.
+       to make PortMidi calls.
+     */
+
+    /* make the message queues */
+    /* messages can be of any size and any type, but all messages in
+     * a given queue must have the same size. We'll just use int32_t's
+     * for our messages in this simple example
+     */
+    midi_to_main = Pm_QueueCreate(32, sizeof(int32_t));
+    assert(midi_to_main != NULL);
+    main_to_midi = Pm_QueueCreate(32, sizeof(int32_t));
+    assert(main_to_midi != NULL);
+
+    /* a little test of enqueue and dequeue operations. Ordinarily, 
+     * you would call Pm_Enqueue from one thread and Pm_Dequeue from
+     * the other. Since the midi thread is not running, this is safe.
+     */
+    n = 1234567890;
+    Pm_Enqueue(midi_to_main, &n);
+    n = 987654321;
+    Pm_Enqueue(midi_to_main, &n);
+	Pm_Dequeue(midi_to_main, &n);
+	if (n != 1234567890) {
+        exit_with_message("Pm_Dequeue produced unexpected result.");
+    }
+    Pm_Dequeue(midi_to_main, &n);
+	if(n != 987654321) {
+        exit_with_message("Pm_Dequeue produced unexpected result.");
+    }
+
+    /* always start the timer before you start midi */
+    Pt_Start(1, &process_midi, 0); /* start a timer with millisecond accuracy */
+    /* the timer will call our function, process_midi() every millisecond */
+    
+	Pm_Initialize();
+
+    id = Pm_GetDefaultOutputDeviceID();
+    info = Pm_GetDeviceInfo(id);
+    if (info == NULL) {
+        printf("Could not open default output device (%d).", id);
+        exit_with_message("");
+    }
+    printf("Opening output device %s %s\n", info->interf, info->name);
+
+    /* use zero latency because we want output to be immediate */
+    Pm_OpenOutput(&midi_out, 
+                  id, 
+                  DRIVER_INFO,
+                  OUTPUT_BUFFER_SIZE,
+                  TIME_PROC,
+                  TIME_INFO,
+                  LATENCY);
+
+    id = Pm_GetDefaultInputDeviceID();
+    info = Pm_GetDeviceInfo(id);
+    if (info == NULL) {
+        printf("Could not open default input device (%d).", id);
+        exit_with_message("");
+    }
+    printf("Opening input device %s %s\n", info->interf, info->name);
+    Pm_OpenInput(&midi_in, 
+                 id, 
+                 DRIVER_INFO,
+                 INPUT_BUFFER_SIZE,
+                 TIME_PROC,
+                 TIME_INFO);
+
+    active = TRUE; /* enable processing in the midi thread -- yes, this
+                      is a shared variable without synchronization, but
+                      this simple assignment is safe */
+
+    printf("Enter midi input; it will be transformed as specified by...\n");
+    printf("%s\n%s\n%s\n",
+           "Type 'q' to quit, 'm' to monitor next pitch, t to toggle thru or",
+           "type a number to specify transposition.",
+		   "Must terminate with [ENTER]");
+
+    while (!done) {
+        int32_t msg;
+        int input;
+        int len;
+        fgets(line, STRING_MAX, stdin);
+        /* remove the newline: */
+        len = strlen(line);
+        if (len > 0) line[len - 1] = 0; /* overwrite the newline char */
+        if (strcmp(line, "q") == 0) {
+            msg = QUIT_MSG;
+            Pm_Enqueue(main_to_midi, &msg);
+            /* wait for acknowlegement */
+            do {
+                spin = Pm_Dequeue(midi_to_main, &msg);
+            } while (spin == 0); /* spin */ ;
+            done = TRUE; /* leave the command loop and wrap up */
+        } else if (strcmp(line, "m") == 0) {
+            msg = MONITOR_MSG;
+            Pm_Enqueue(main_to_midi, &msg);
+            printf("Waiting for note...\n");
+            do {
+                spin = Pm_Dequeue(midi_to_main, &msg);
+            } while (spin == 0); /* spin */ ;
+            // convert int32_t to long for safe printing
+            printf("... pitch is %ld\n", (long) msg);
+        } else if (strcmp(line, "t") == 0) {
+            /* reading midi_thru asynchronously could give incorrect results,
+               e.g. if you type "t" twice before the midi thread responds to
+               the first one, but we'll do it this way anyway. Perhaps a more
+               correct way would be to wait for an acknowledgement message
+               containing the new state. */
+            printf("Setting THRU %s\n", (midi_thru ? "off" : "on"));
+            msg = THRU_MSG;
+            Pm_Enqueue(main_to_midi, &msg);
+        } else if (sscanf(line, "%d", &input) == 1) {
+            if (input >= -127 && input <= 127) {
+                /* send transposition value, make sur */
+                printf("Transposing by %d\n", input);
+                msg = (int32_t) input;
+                Pm_Enqueue(main_to_midi, &msg);
+            } else {
+                printf("Transposition must be within -127...127\n");
+            }
+        } else {
+            printf("%s\n%s\n",
+              "Type 'q[ENTER]' to quit, 'm[ENTER]' to monitor next pitch, or",
+              "enter a number to specify transposition.");
+        }
+    }
+
+    /* at this point, midi thread is inactive and we need to shut down
+     * the midi input and output
+     */
+    Pt_Stop(); /* stop the timer */
+    Pm_QueueDestroy(midi_to_main);
+    Pm_QueueDestroy(main_to_midi);
+
+    /* Belinda! if close fails here, some memory is deleted, right??? */
+    Pm_Close(midi_in);
+    Pm_Close(midi_out);
+    
+    printf("finished portMidi multithread test...enter any character to quit [RETURN]...");
+    fgets(line, STRING_MAX, stdin);
+    return 0;
+}
diff --git a/pd/portmidi/pm_test/midithread.vcproj b/pd/portmidi/pm_test/midithread.vcproj
new file mode 100755
index 000000000..b09d8a858
--- /dev/null
+++ b/pd/portmidi/pm_test/midithread.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="midithread"
+	ProjectGUID="{EED7440D-04E3-4948-92DB-C85B4ADB1D82}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="midithread.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/midithread.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\midithread.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/midithread.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\midithread.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="midithread.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/midithread.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\midithread.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/midithread.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\midithread.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\midithread.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/midithru.c b/pd/portmidi/pm_test/midithru.c
new file mode 100755
index 000000000..41d350a43
--- /dev/null
+++ b/pd/portmidi/pm_test/midithru.c
@@ -0,0 +1,366 @@
+/* midithru.c -- example program implementing background thru processing */
+
+/* suppose you want low-latency midi-thru processing, but your application
+   wants to take advantage of the input buffer and timestamped data so that
+   it does not have to operate with very low latency.
+
+   This program illustrates how to use a timer callback from PortTime to 
+   implement a low-latency process that handles midi thru, including correctly
+   merging midi data from the application with midi data from the input port.
+
+   The main application, which runs in the main program thread, will use an
+   interface similar to that of PortMidi, but since PortMidi does not allow
+   concurrent threads to share access to a stream, the application will
+   call private methods that transfer MIDI messages to and from the timer 
+   thread. All PortMidi API calls are made from the timer thread.
+ */
+
+/* DESIGN
+
+All setup will be done by the main thread. Then, all direct access to 
+PortMidi will be handed off to the timer callback thread.
+
+After this hand-off, the main thread will get/send messages via a queue.
+
+The goal is to send incoming messages to the midi output while merging
+any midi data generated by the application. Sysex is a problem here
+because you cannot insert (merge) a midi message while a sysex is in
+progress. There are at least three ways to implement midi thru with 
+sysex messages:
+
+1) Turn them off. If your application does not need them, turn them off
+   with Pm_SetFilter(midi_in, PM_FILT_ACTIVE | PM_FILT_SYSEX). You will
+   not receive sysex (or active sensing messages), so you will not have 
+   to handle them.
+
+2) Make them atomic. As you receive sysex messages, copy the data into
+   a (big) buffer. Ideally, expand the buffer as needed -- sysex messages
+   do not have any maximum length. Even more ideally, use a list structure
+   and real-time memory allocation to avoid latency in the timer thread.
+   When a full sysex message is received, send it to the midi output all
+   at once.
+
+3) Process sysex incrementally. Send sysex data to midi output as it
+   arrives. Block any non-real-time messages from the application until
+   the sysex message completes. There is the risk that an incomplete
+   sysex message will block messages forever, so implement a 5-second
+   timeout: if no sysex data is seen for 5 seconds, release the block,
+   possibly losing the rest of the sysex message. 
+
+   Application messages must be processed similarly: once started, a
+   sysex message will block MIDI THRU processing. We will assume that
+   the application will not abort a sysex message, so timeouts are not
+   necessary here.
+
+This code implements (3).
+
+Latency is also an issue. PortMidi requires timestamps to be in 
+non-decreasing order. Since we'll be operating with a low-latency
+timer thread, we can just set the latency to zero meaning timestamps
+are ignored by PortMidi. This will allow thru to go through with
+minimal latency. The application, however, needs to use timestamps
+because we assume it is high latency (the whole purpose of this
+example is to illustrate how to get low-latency thru with a high-latency
+application.) So the callback thread will implement midi timing by
+observing timestamps. The current timestamp will be available in the
+global variable current_timestamp.
+
+*/
+
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "string.h"
+#include "assert.h"
+#include "portmidi.h"
+#include "pmutil.h"
+#include "porttime.h"
+
+#define MIDI_SYSEX 0xf0
+#define MIDI_EOX 0xf7
+
+/* active is set true when midi processing should start */
+int active = FALSE;
+/* process_midi_exit_flag is set when the timer thread shuts down */
+int process_midi_exit_flag;
+
+PmStream *midi_in;
+PmStream *midi_out;
+
+/* shared queues */
+#define IN_QUEUE_SIZE 1024
+#define OUT_QUEUE_SIZE 1024
+PmQueue *in_queue;
+PmQueue *out_queue;
+PmTimestamp current_timestamp = 0;
+int thru_sysex_in_progress = FALSE;
+int app_sysex_in_progress = FALSE;
+PmTimestamp last_timestamp = 0;
+
+
+/* time proc parameter for Pm_MidiOpen */
+PmTimestamp midithru_time_proc(void *info)
+{
+    return current_timestamp;
+}
+
+
+/* timer interrupt for processing midi data.
+   Incoming data is delivered to main program via in_queue.
+   Outgoing data from main program is delivered via out_queue.
+   Incoming data from midi_in is copied with low latency to  midi_out.
+   Sysex messages from either source block messages from the other.
+ */
+void process_midi(PtTimestamp timestamp, void *userData)
+{
+    PmError result;
+    PmEvent buffer; /* just one message at a time */
+
+    current_timestamp++; /* update every millisecond */
+    /* if (current_timestamp % 1000 == 0) 
+        printf("time %d\n", current_timestamp); */
+
+    /* do nothing until initialization completes */
+    if (!active) {
+        /* this flag signals that no more midi processing will be done */
+        process_midi_exit_flag = TRUE;
+        return;
+    }
+
+    /* see if there is any midi input to process */
+    if (!app_sysex_in_progress) {
+        do {
+            result = Pm_Poll(midi_in);
+            if (result) {
+                int status;
+                PmError rslt = Pm_Read(midi_in, &buffer, 1);
+                if (rslt == pmBufferOverflow) 
+                    continue;
+                assert(rslt == 1);
+
+                /* record timestamp of most recent data */
+                last_timestamp = current_timestamp;
+
+                /* the data might be the end of a sysex message that
+                   has timed out, in which case we must ignore it.
+                   It's a continuation of a sysex message if status
+                   is actually a data byte (high-order bit is zero). */
+                status = Pm_MessageStatus(buffer.message);
+                if (((status & 0x80) == 0) && !thru_sysex_in_progress) {
+                    continue; /* ignore this data */
+                }
+
+                /* implement midi thru */
+                /* note that you could output to multiple ports or do other
+                   processing here if you wanted
+                 */
+                /* printf("thru: %x\n", buffer.message); */
+                Pm_Write(midi_out, &buffer, 1);
+
+                /* send the message to the application */
+                /* you might want to filter clock or active sense messages here
+                   to avoid sending a bunch of junk to the application even if
+                   you want to send it to MIDI THRU
+                 */
+                Pm_Enqueue(in_queue, &buffer);
+
+                /* sysex processing */
+                if (status == MIDI_SYSEX) thru_sysex_in_progress = TRUE;
+                else if ((status & 0xF8) != 0xF8) {
+                    /* not MIDI_SYSEX and not real-time, so */
+                    thru_sysex_in_progress = FALSE;
+                }
+                if (thru_sysex_in_progress && /* look for EOX */
+                    (((buffer.message & 0xFF) == MIDI_EOX) ||
+                     (((buffer.message >> 8) & 0xFF) == MIDI_EOX) ||
+                     (((buffer.message >> 16) & 0xFF) == MIDI_EOX) ||
+                     (((buffer.message >> 24) & 0xFF) == MIDI_EOX))) {
+                    thru_sysex_in_progress = FALSE;
+                }
+            }
+        } while (result);
+    }
+
+
+    /* see if there is application midi data to process */
+    while (!Pm_QueueEmpty(out_queue)) {
+        /* see if it is time to output the next message */
+        PmEvent *next = (PmEvent *) Pm_QueuePeek(out_queue);
+        assert(next); /* must be non-null because queue is not empty */
+        if (next->timestamp <= current_timestamp) {
+            /* time to send a message, first make sure it's not blocked */
+            int status = Pm_MessageStatus(next->message);
+            if ((status & 0xF8) == 0xF8) {
+                ; /* real-time messages are not blocked */
+            } else if (thru_sysex_in_progress) {
+                /* maybe sysex has timed out (output becomes unblocked) */
+                if (last_timestamp + 5000 < current_timestamp) {
+                    thru_sysex_in_progress = FALSE;
+                } else break; /* output is blocked, so exit loop */
+            }
+            Pm_Dequeue(out_queue, &buffer);
+            Pm_Write(midi_out, &buffer, 1);
+
+            /* inspect message to update app_sysex_in_progress */
+            if (status == MIDI_SYSEX) app_sysex_in_progress = TRUE;
+            else if ((status & 0xF8) != 0xF8) {
+                /* not MIDI_SYSEX and not real-time, so */
+                app_sysex_in_progress = FALSE;
+            }
+            if (app_sysex_in_progress && /* look for EOX */
+                (((buffer.message & 0xFF) == MIDI_EOX) ||
+                 (((buffer.message >> 8) & 0xFF) == MIDI_EOX) ||
+                 (((buffer.message >> 16) & 0xFF) == MIDI_EOX) ||
+                 (((buffer.message >> 24) & 0xFF) == MIDI_EOX))) {
+                app_sysex_in_progress = FALSE;
+            }
+        } else break; /* wait until indicated timestamp */
+    }
+}
+
+
+void exit_with_message(char *msg)
+{
+#define STRING_MAX 80
+    char line[STRING_MAX];
+    printf("%s\nType ENTER...", msg);
+    fgets(line, STRING_MAX, stdin);
+    exit(1);
+}
+
+
+void initialize()
+/* set up midi processing thread and open midi streams */
+{
+    /* note that it is safe to call PortMidi from the main thread for
+       initialization and opening devices. You should not make any
+       calls to PortMidi from this thread once the midi thread begins.
+       to make PortMidi calls.
+     */
+
+    /* note that this routine provides minimal error checking. If
+       you use the PortMidi library compiled with PM_CHECK_ERRORS,
+       then error messages will be printed and the program will exit
+       if an error is encountered. Otherwise, you should add some
+       error checking to this code.
+     */
+
+    const PmDeviceInfo *info;
+    int id;
+
+    /* make the message queues */
+    in_queue = Pm_QueueCreate(IN_QUEUE_SIZE, sizeof(PmEvent));
+    assert(in_queue != NULL);
+    out_queue = Pm_QueueCreate(OUT_QUEUE_SIZE, sizeof(PmEvent));
+    assert(out_queue != NULL);
+
+    /* always start the timer before you start midi */
+    Pt_Start(1, &process_midi, 0); /* start a timer with millisecond accuracy */
+    /* the timer will call our function, process_midi() every millisecond */
+    
+    Pm_Initialize();
+
+    id = Pm_GetDefaultOutputDeviceID();
+    info = Pm_GetDeviceInfo(id);
+    if (info == NULL) {
+        printf("Could not open default output device (%d).", id);
+        exit_with_message("");
+    }
+    printf("Opening output device %s %s\n", info->interf, info->name);
+
+    /* use zero latency because we want output to be immediate */
+    Pm_OpenOutput(&midi_out, 
+                  id, 
+                  NULL /* driver info */,
+                  OUT_QUEUE_SIZE,
+                  &midithru_time_proc,
+                  NULL /* time info */,
+                  0 /* Latency */);
+
+    id = Pm_GetDefaultInputDeviceID();
+    info = Pm_GetDeviceInfo(id);
+    if (info == NULL) {
+        printf("Could not open default input device (%d).", id);
+        exit_with_message("");
+    }
+    printf("Opening input device %s %s\n", info->interf, info->name);
+    Pm_OpenInput(&midi_in, 
+                 id, 
+                 NULL /* driver info */,
+                 0 /* use default input size */,
+                 &midithru_time_proc,
+                 NULL /* time info */);
+    /* Note: if you set a filter here, then this will filter what goes
+       to the MIDI THRU port. You may not want to do this.
+     */
+    Pm_SetFilter(midi_in, PM_FILT_ACTIVE | PM_FILT_CLOCK);
+
+    active = TRUE; /* enable processing in the midi thread -- yes, this
+                      is a shared variable without synchronization, but
+                      this simple assignment is safe */
+
+}
+
+
+void finalize()
+{
+    /* the timer thread could be in the middle of accessing PortMidi stuff */
+    /* to detect that it is done, we first clear process_midi_exit_flag and
+       then wait for the timer thread to set it
+     */
+    process_midi_exit_flag = FALSE;
+    active = FALSE;
+    /* busy wait for flag from timer thread that it is done */
+    while (!process_midi_exit_flag) ;
+    /* at this point, midi thread is inactive and we need to shut down
+     * the midi input and output
+     */
+    Pt_Stop(); /* stop the timer */
+    Pm_QueueDestroy(in_queue);
+    Pm_QueueDestroy(out_queue);
+
+    Pm_Close(midi_in);
+    Pm_Close(midi_out);
+
+    Pm_Terminate();    
+}
+
+
+int main(int argc, char *argv[])
+{
+    PmTimestamp last_time = 0;
+    PmEvent buffer;
+
+    /* determine what type of test to run */
+    printf("begin PortMidi midithru program...\n");
+
+    initialize(); /* set up and start midi processing */
+	
+    printf("%s\n%s\n",
+           "This program will run for 60 seconds, or until you play middle C,",
+           "echoing all input with a 2 second delay.");
+
+    while (current_timestamp < 60000) {
+        /* just to make the point that this is not a low-latency process,
+           spin until half a second has elapsed */
+        last_time = last_time + 500;
+        while (last_time > current_timestamp) ;
+
+        /* now read data and send it after changing timestamps */
+        while (Pm_Dequeue(in_queue, &buffer) == 1) {
+            /* printf("timestamp %d\n", buffer.timestamp); */
+            /* printf("message %x\n", buffer.message); */
+            buffer.timestamp = buffer.timestamp + 2000; /* delay */
+            Pm_Enqueue(out_queue, &buffer);
+            /* play middle C to break out of loop */
+            if (Pm_MessageStatus(buffer.message) == 0x90 &&
+                Pm_MessageData1(buffer.message) == 60) {
+                goto quit_now;
+            }
+        }
+    }
+quit_now:
+    finalize();
+    exit_with_message("finished PortMidi midithru program.");
+    return 0; /* never executed, but keeps the compiler happy */
+}
diff --git a/pd/portmidi/pm_test/midithru.vcproj b/pd/portmidi/pm_test/midithru.vcproj
new file mode 100755
index 000000000..4eb8ed4db
--- /dev/null
+++ b/pd/portmidi/pm_test/midithru.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="midithru"
+	ProjectGUID="{80193DD1-2C02-4A4C-BDF8-49623AD6F556}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="midithru.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/midithru.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\midithru.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/midithru.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\midithru.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="midithru.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/midithru.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\midithru.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/midithru.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\midithru.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\midithru.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/mm.c b/pd/portmidi/pm_test/mm.c
new file mode 100755
index 000000000..209ff74ee
--- /dev/null
+++ b/pd/portmidi/pm_test/mm.c
@@ -0,0 +1,572 @@
+/* mm.c -- midi monitor */
+
+/*****************************************************************************
+*       Change Log
+*  Date | Change
+*-----------+-----------------------------------------------------------------
+*  7-Apr-86 | Created changelog
+* 31-Jan-90 | GWL : use new cmdline
+*  5-Apr-91 | JDW : Further changes
+* 16-Feb-92 | GWL : eliminate label mmexit:; add error recovery
+* 18-May-92 | GWL : continuous clocks, etc.
+* 17-Jan-94 | GWL : option to display notes
+* 20-Nov-06 | RBD : port mm.c from CMU Midi Toolkit to PortMidi
+*           |       mm.c -- revealing MIDI secrets for over 20 years!
+*****************************************************************************/
+
+#include "stdlib.h"
+#include "ctype.h"
+#include "string.h"
+#include "stdio.h"
+#include "porttime.h"
+#include "portmidi.h"
+
+#define STRING_MAX 80
+
+#define MIDI_CODE_MASK  0xf0
+#define MIDI_CHN_MASK   0x0f
+/*#define MIDI_REALTIME   0xf8
+  #define MIDI_CHAN_MODE  0xfa */
+#define MIDI_OFF_NOTE   0x80
+#define MIDI_ON_NOTE    0x90
+#define MIDI_POLY_TOUCH 0xa0
+#define MIDI_CTRL       0xb0
+#define MIDI_CH_PROGRAM 0xc0
+#define MIDI_TOUCH      0xd0
+#define MIDI_BEND       0xe0
+
+#define MIDI_SYSEX      0xf0
+#define MIDI_Q_FRAME	0xf1
+#define MIDI_SONG_POINTER 0xf2
+#define MIDI_SONG_SELECT 0xf3
+#define MIDI_TUNE_REQ	0xf6
+#define MIDI_EOX        0xf7
+#define MIDI_TIME_CLOCK 0xf8
+#define MIDI_START      0xfa
+#define MIDI_CONTINUE	0xfb
+#define MIDI_STOP       0xfc
+#define MIDI_ACTIVE_SENSING 0xfe
+#define MIDI_SYS_RESET  0xff
+
+#define MIDI_ALL_SOUND_OFF 0x78
+#define MIDI_RESET_CONTROLLERS 0x79
+#define MIDI_LOCAL	0x7a
+#define MIDI_ALL_OFF	0x7b
+#define MIDI_OMNI_OFF	0x7c
+#define MIDI_OMNI_ON	0x7d
+#define MIDI_MONO_ON	0x7e
+#define MIDI_POLY_ON	0x7f
+
+
+#define private static
+
+#ifndef false
+#define false 0
+#define true 1
+#endif
+
+typedef int boolean;
+
+int debug = false;	/* never set, but referenced by userio.c */
+PmStream *midi_in;      /* midi input */
+boolean active = false;     /* set when midi_in is ready for reading */
+boolean in_sysex = false;   /* we are reading a sysex message */
+boolean inited = false;     /* suppress printing during command line parsing */
+boolean done = false;       /* when true, exit */
+boolean notes = true;       /* show notes? */
+boolean controls = true;    /* show continuous controllers */
+boolean bender = true;      /* record pitch bend etc.? */
+boolean excldata = true;    /* record system exclusive data? */
+boolean verbose = true;     /* show text representation? */
+boolean realdata = true;    /* record real time messages? */
+boolean clksencnt = true;   /* clock and active sense count on */
+boolean chmode = true;      /* show channel mode messages */
+boolean pgchanges = true;   /* show program changes */
+boolean flush = false;	    /* flush all pending MIDI data */
+
+uint32_t filter = 0;            /* remember state of midi filter */
+
+uint32_t clockcount = 0;        /* count of clocks */
+uint32_t actsensecount = 0;     /* cout of active sensing bytes */
+uint32_t notescount = 0;        /* #notes since last request */
+uint32_t notestotal = 0;        /* total #notes */
+
+char val_format[] = "    Val %d\n";
+
+/*****************************************************************************
+*    Imported variables
+*****************************************************************************/
+
+extern  int     abort_flag;
+
+/*****************************************************************************
+*    Routines local to this module
+*****************************************************************************/
+
+private    void    mmexit(int code);
+private    void    output(PmMessage data);
+private    int     put_pitch(int p);
+private    void    showhelp();
+private    void    showbytes(PmMessage data, int len, boolean newline);
+private    void    showstatus(boolean flag);
+private    void    doascii(char c);
+private    int     get_number(char *prompt);
+
+
+/* read a number from console */
+/**/
+int get_number(char *prompt)
+{
+    char line[STRING_MAX];
+    int n = 0, i;
+    printf(prompt);
+    while (n != 1) {
+        n = scanf("%d", &i);
+        fgets(line, STRING_MAX, stdin);
+
+    }
+    return i;
+}
+
+
+void receive_poll(PtTimestamp timestamp, void *userData)
+{
+    PmEvent event;
+    int count;
+    if (!active) return;
+    while ((count = Pm_Read(midi_in, &event, 1))) {
+        if (count == 1) output(event.message);
+        else            printf(Pm_GetErrorText(count));
+    }
+}
+
+
+/****************************************************************************
+*               main
+* Effect: prompts for parameters, starts monitor
+****************************************************************************/
+
+int main(int argc, char **argv)
+{
+    char *argument;
+    int inp;
+    PmError err;
+    int i;
+    if (argc > 1) { /* first arg can change defaults */
+        argument = argv[1];
+        while (*argument) doascii(*argument++);
+    }
+    showhelp();
+    /* use porttime callback to empty midi queue and print */
+    Pt_Start(1, receive_poll, 0);
+    /* list device information */
+    printf("MIDI input devices:\n");
+    for (i = 0; i < Pm_CountDevices(); i++) {
+        const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+        if (info->input) printf("%d: %s, %s\n", i, info->interf, info->name);
+    }
+    inp = get_number("Type input device number: ");
+    err = Pm_OpenInput(&midi_in, inp, NULL, 512, NULL, NULL);
+    if (err) {
+        printf(Pm_GetErrorText(err));
+        Pt_Stop();
+        mmexit(1);
+    }
+    Pm_SetFilter(midi_in, filter);
+    inited = true; /* now can document changes, set filter */
+    printf("Midi Monitor ready.\n");
+    active = true;
+    while (!done) {
+        char s[100];
+        if (fgets(s, 100, stdin)) {
+            doascii(s[0]);
+        }
+    }
+    active = false;
+    Pm_Close(midi_in);
+    Pt_Stop();
+    Pm_Terminate();
+    mmexit(0);
+    return 0; // make the compiler happy be returning a value
+}
+
+
+/****************************************************************************
+*               doascii
+* Inputs:
+*    char c: input character
+* Effect: interpret to revise flags
+****************************************************************************/
+
+private void doascii(char c)
+{
+    if (isupper(c)) c = tolower(c);
+    if (c == 'q') done = true;
+    else if (c == 'b') {
+        bender = !bender;
+        filter ^= PM_FILT_PITCHBEND;
+        if (inited)
+            printf("Pitch Bend, etc. %s\n", (bender ? "ON" : "OFF"));
+    } else if (c == 'c') {
+        controls = !controls;
+        filter ^= PM_FILT_CONTROL;
+        if (inited)
+            printf("Control Change %s\n", (controls ? "ON" : "OFF"));
+    } else if (c == 'h') {
+        pgchanges = !pgchanges;
+        filter ^= PM_FILT_PROGRAM;
+        if (inited)
+            printf("Program Changes %s\n", (pgchanges ? "ON" : "OFF"));
+    } else if (c == 'n') {
+        notes = !notes;
+        filter ^= PM_FILT_NOTE;
+        if (inited)
+            printf("Notes %s\n", (notes ? "ON" : "OFF"));
+    } else if (c == 'x') {
+        excldata = !excldata;
+        filter ^= PM_FILT_SYSEX;
+        if (inited)
+            printf("System Exclusive data %s\n", (excldata ? "ON" : "OFF"));
+    } else if (c == 'r') {
+        realdata = !realdata;
+        filter ^= (PM_FILT_PLAY | PM_FILT_RESET | PM_FILT_TICK | PM_FILT_UNDEFINED);
+        if (inited)
+            printf("Real Time messages %s\n", (realdata ? "ON" : "OFF"));
+    } else if (c == 'k') {
+        clksencnt = !clksencnt;
+        filter ^= PM_FILT_CLOCK;
+        if (inited)
+            printf("Clock and Active Sense Counting %s\n", (clksencnt ? "ON" : "OFF"));
+        if (!clksencnt) clockcount = actsensecount = 0;
+    } else if (c == 's') {
+        if (clksencnt) {
+            if (inited)
+                printf("Clock Count %ld\nActive Sense Count %ld\n", 
+                        (long) clockcount, (long) actsensecount);
+        } else if (inited) {
+            printf("Clock Counting not on\n");
+        }
+    } else if (c == 't') {
+        notestotal+=notescount;
+        if (inited)
+            printf("This Note Count %ld\nTotal Note Count %ld\n",
+                    (long) notescount, (long) notestotal);
+        notescount=0;
+    } else if (c == 'v') {
+        verbose = !verbose;
+        if (inited)
+            printf("Verbose %s\n", (verbose ? "ON" : "OFF"));
+    } else if (c == 'm') {
+        chmode = !chmode;
+        if (inited)
+            printf("Channel Mode Messages %s", (chmode ? "ON" : "OFF"));
+    } else {
+        if (inited) {
+            if (c == ' ') {
+                PmEvent event;
+                while (Pm_Read(midi_in, &event, 1)) ;	/* flush midi input */
+                printf("...FLUSHED MIDI INPUT\n\n");
+            } else showhelp();
+        }
+    }
+    if (inited) Pm_SetFilter(midi_in, filter);
+}
+
+
+
+private void mmexit(int code)
+{
+    /* if this is not being run from a console, maybe we should wait for
+     * the user to read error messages before exiting
+     */
+    exit(code);
+}
+
+
+/****************************************************************************
+*               output
+* Inputs:
+*    data: midi message buffer holding one command or 4 bytes of sysex msg
+* Effect: format and print  midi data
+****************************************************************************/
+
+char vel_format[] = "    Vel %d\n";
+
+private void output(PmMessage data)
+{
+    int command;    /* the current command */
+    int chan;   /* the midi channel of the current event */
+    int len;    /* used to get constant field width */
+
+    /* printf("output data %8x; ", data); */
+
+    command = Pm_MessageStatus(data) & MIDI_CODE_MASK;
+    chan = Pm_MessageStatus(data) & MIDI_CHN_MASK;
+
+    if (in_sysex || Pm_MessageStatus(data) == MIDI_SYSEX) {
+#define sysex_max 16
+        int i;
+        PmMessage data_copy = data;
+        in_sysex = true;
+        /* look for MIDI_EOX in first 3 bytes 
+         * if realtime messages are embedded in sysex message, they will
+         * be printed as if they are part of the sysex message
+         */
+        for (i = 0; (i < 4) && ((data_copy & 0xFF) != MIDI_EOX); i++) 
+            data_copy >>= 8;
+        if (i < 4) {
+            in_sysex = false;
+            i++; /* include the EOX byte in output */
+        }
+        showbytes(data, i, verbose);
+        if (verbose) printf("System Exclusive\n");
+    } else if (command == MIDI_ON_NOTE && Pm_MessageData2(data) != 0) {
+        notescount++;
+        if (notes) {
+            showbytes(data, 3, verbose);
+            if (verbose) {
+                printf("NoteOn  Chan %2d Key %3d ", chan, Pm_MessageData1(data));
+                len = put_pitch(Pm_MessageData1(data));
+                printf(vel_format + len, Pm_MessageData2(data));
+            }
+        }
+    } else if ((command == MIDI_ON_NOTE /* && Pm_MessageData2(data) == 0 */ ||
+               command == MIDI_OFF_NOTE) && notes) {
+        showbytes(data, 3, verbose);
+        if (verbose) {
+            printf("NoteOff Chan %2d Key %3d ", chan, Pm_MessageData1(data));
+            len = put_pitch(Pm_MessageData1(data));
+            printf(vel_format + len, Pm_MessageData2(data));
+        }
+    } else if (command == MIDI_CH_PROGRAM && pgchanges) {
+        showbytes(data, 2, verbose);
+        if (verbose) {
+            printf("  ProgChg Chan %2d Prog %2d\n", chan, Pm_MessageData1(data) + 1);
+        }
+    } else if (command == MIDI_CTRL) {
+               /* controls 121 (MIDI_RESET_CONTROLLER) to 127 are channel
+                * mode messages. */
+        if (Pm_MessageData1(data) < MIDI_ALL_SOUND_OFF) {
+            showbytes(data, 3, verbose);
+            if (verbose) {
+                printf("CtrlChg Chan %2d Ctrl %2d Val %2d\n",
+                       chan, Pm_MessageData1(data), Pm_MessageData2(data));
+            }
+        } else /* channel mode */ if (chmode) {
+            showbytes(data, 3, verbose);
+            if (verbose) {
+                switch (Pm_MessageData1(data)) {
+                  case MIDI_ALL_SOUND_OFF:
+                      printf("All Sound Off, Chan %2d\n", chan);
+                    break;
+                  case MIDI_RESET_CONTROLLERS:
+                    printf("Reset All Controllers, Chan %2d\n", chan);
+                    break;
+                  case MIDI_LOCAL:
+                    printf("LocCtrl Chan %2d %s\n",
+                            chan, Pm_MessageData2(data) ? "On" : "Off");
+                    break;
+                  case MIDI_ALL_OFF:
+                    printf("All Off Chan %2d\n", chan);
+                    break;
+                  case MIDI_OMNI_OFF:
+                    printf("OmniOff Chan %2d\n", chan);
+                    break;
+                  case MIDI_OMNI_ON:
+                    printf("Omni On Chan %2d\n", chan);
+                    break;
+                  case MIDI_MONO_ON:
+                    printf("Mono On Chan %2d\n", chan);
+                    if (Pm_MessageData2(data))
+                        printf(" to %d received channels\n", Pm_MessageData2(data));
+                    else
+                        printf(" to all received channels\n");
+                    break;
+                  case MIDI_POLY_ON:
+                    printf("Poly On Chan %2d\n", chan);
+                    break;
+                }
+            }
+        }
+    } else if (command == MIDI_POLY_TOUCH && bender) {
+        showbytes(data, 3, verbose);
+        if (verbose) {
+            printf("P.Touch Chan %2d Key %2d ", chan, Pm_MessageData1(data));
+            len = put_pitch(Pm_MessageData1(data));
+            printf(val_format + len, Pm_MessageData2(data));
+        }
+    } else if (command == MIDI_TOUCH && bender) {
+        showbytes(data, 2, verbose);
+        if (verbose) {
+            printf("  A.Touch Chan %2d Val %2d\n", chan, Pm_MessageData1(data));
+        }
+    } else if (command == MIDI_BEND && bender) {
+        showbytes(data, 3, verbose);
+        if (verbose) {
+            printf("P.Bend  Chan %2d Val %2d\n", chan,
+                    (Pm_MessageData1(data) + (Pm_MessageData2(data)<<7)));
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_SONG_POINTER) {
+        showbytes(data, 3, verbose);
+        if (verbose) {
+            printf("    Song Position %d\n",
+                    (Pm_MessageData1(data) + (Pm_MessageData2(data)<<7)));
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_SONG_SELECT) {
+        showbytes(data, 2, verbose);
+        if (verbose) {
+            printf("    Song Select %d\n", Pm_MessageData1(data));
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_TUNE_REQ) {
+        showbytes(data, 1, verbose);
+        if (verbose) {
+            printf("    Tune Request\n");
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_Q_FRAME && realdata) {
+        showbytes(data, 2, verbose);
+        if (verbose) {
+            printf("    Time Code Quarter Frame Type %d Values %d\n",
+                    (Pm_MessageData1(data) & 0x70) >> 4, Pm_MessageData1(data) & 0xf);
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_START && realdata) {
+        showbytes(data, 1, verbose);
+        if (verbose) {
+            printf("    Start\n");
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_CONTINUE && realdata) {
+        showbytes(data, 1, verbose);
+        if (verbose) {
+            printf("    Continue\n");
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_STOP && realdata) {
+        showbytes(data, 1, verbose);
+        if (verbose) {
+            printf("    Stop\n");
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_SYS_RESET && realdata) {
+        showbytes(data, 1, verbose);
+        if (verbose) {
+            printf("    System Reset\n");
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_TIME_CLOCK) {
+        if (clksencnt) clockcount++;
+        else if (realdata) {
+            showbytes(data, 1, verbose);
+            if (verbose) {
+                printf("    Clock\n");
+            }
+        }
+    } else if (Pm_MessageStatus(data) == MIDI_ACTIVE_SENSING) {
+        if (clksencnt) actsensecount++;
+        else if (realdata) {
+            showbytes(data, 1, verbose);
+            if (verbose) {
+                printf("    Active Sensing\n");
+            }
+        }
+    } else showbytes(data, 3, verbose);
+    fflush(stdout);
+}
+
+
+/****************************************************************************
+*               put_pitch
+* Inputs:
+*    int p: pitch number
+* Effect: write out the pitch name for a given number
+****************************************************************************/
+
+private int put_pitch(int p)
+{
+    char result[8];
+    static char *ptos[] = {
+        "c", "cs", "d", "ef", "e", "f", "fs", "g",
+        "gs", "a", "bf", "b"    };
+    /* note octave correction below */
+    sprintf(result, "%s%d", ptos[p % 12], (p / 12) - 1);
+    printf(result);
+    return strlen(result);
+}
+
+
+/****************************************************************************
+*               showbytes
+* Effect: print hex data, precede with newline if asked
+****************************************************************************/
+
+char nib_to_hex[] = "0123456789ABCDEF";
+
+private void showbytes(PmMessage data, int len, boolean newline)
+{
+    int count = 0;
+    int i;
+
+/*    if (newline) {
+        putchar('\n');
+        count++;
+    } */
+    for (i = 0; i < len; i++) {
+        putchar(nib_to_hex[(data >> 4) & 0xF]);
+        putchar(nib_to_hex[data & 0xF]);
+        count += 2;
+        if (count > 72) {
+            putchar('.');
+            putchar('.');
+            putchar('.');
+            break;
+        }
+        data >>= 8;
+    }
+    putchar(' ');
+}
+
+
+
+/****************************************************************************
+*               showhelp
+* Effect: print help text
+****************************************************************************/
+
+private void showhelp()
+{
+    printf("\n");
+    printf("   Item Reported  Range     Item Reported  Range\n");
+    printf("   -------------  -----     -------------  -----\n");
+    printf("   Channels       1 - 16    Programs       1 - 128\n");
+    printf("   Controllers    0 - 127   After Touch    0 - 127\n");
+    printf("   Loudness       0 - 127   Pitch Bend     0 - 16383, center = 8192\n");
+    printf("   Pitches        0 - 127, 60 = c4 = middle C\n");
+    printf(" \n");
+    printf("n toggles notes");
+    showstatus(notes);
+    printf("t displays noteon count since last t\n");
+    printf("b toggles pitch bend, aftertouch");
+    showstatus(bender);
+    printf("c toggles continuous control");
+    showstatus(controls);
+    printf("h toggles program changes");
+    showstatus(pgchanges);
+    printf("x toggles system exclusive");
+    showstatus(excldata);
+    printf("k toggles clock and sense counting only");
+    showstatus(clksencnt);
+    printf("r toggles other real time messages & SMPTE");
+    showstatus(realdata);
+    printf("s displays clock and sense count since last k\n");
+    printf("m toggles channel mode messages");
+    showstatus(chmode);
+    printf("v toggles verbose text");
+    showstatus(verbose);
+    printf("q quits\n");
+    printf("\n");
+}
+
+/****************************************************************************
+*               showstatus
+* Effect: print status of flag
+****************************************************************************/
+
+private void showstatus(boolean flag)
+{
+    printf(", now %s\n", flag ? "ON" : "OFF" );
+}
diff --git a/pd/portmidi/pm_test/mm.vcproj b/pd/portmidi/pm_test/mm.vcproj
new file mode 100755
index 000000000..e9c5357bb
--- /dev/null
+++ b/pd/portmidi/pm_test/mm.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="mm"
+	ProjectGUID="{EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="mm.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/mm.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\mm.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/mm.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\mm.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="mm.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/mm.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\mm.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/mm.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\mm.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\mm.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/qtest.c b/pd/portmidi/pm_test/qtest.c
new file mode 100644
index 000000000..14d803e87
--- /dev/null
+++ b/pd/portmidi/pm_test/qtest.c
@@ -0,0 +1,174 @@
+#include "portmidi.h"
+#include "pmutil.h"
+#include "stdlib.h"
+#include "stdio.h"
+
+
+/* make_msg -- make a psuedo-random message of length n whose content
+ *    is purely a function of i 
+ */
+void make_msg(long msg[], int n, int i)
+{
+    int j;
+    for (j = 0; j < n; j++) {
+        msg[j] = i % (j + 5);
+    }
+} 
+
+
+/* print_msg -- print the content of msg of length n to stdout */
+/**/
+void print_msg(long msg[], int n)
+{
+    int i;
+    for (i = 0; i < n; i++) {
+        printf(" %li", msg[i]);
+    }
+}
+
+
+/* cmp_msg -- compare two messages of length n */
+/**/
+int cmp_msg(long msg[], long msg2[], int n, int i)
+{
+    int j;
+    for (j = 0; j < n; j++) {
+        if (msg[j] != msg2[j]) {
+            printf("Received message %d doesn't match sent message\n", i);
+            printf("in: "); print_msg(msg, n); printf("\n");
+            printf("out:"); print_msg(msg2, n); printf("\n");
+            return FALSE;
+        }
+    }
+    return TRUE;
+}
+
+
+int main()
+{
+    int msg_len;
+    for (msg_len = 4; msg_len < 100; msg_len += 5) {
+        PmQueue *queue = Pm_QueueCreate(100, msg_len * sizeof(long));
+        int i;
+        long msg[100];
+        long msg2[100];
+
+	printf("msg_len = %d\n", msg_len);
+        if (!queue) {
+            printf("Could not allocate queue\n");
+            return 1;
+        }
+    
+        /* insert/remove 1000 messages */
+        printf("test 1\n");
+        for (i = 0; i < 1357; i++) {
+            make_msg(msg, msg_len, i);
+            if (Pm_Enqueue(queue, msg)) {
+                printf("Pm_Enqueue error\n");
+                return 1;
+            }
+            if (Pm_Dequeue(queue, msg2) != 1) {
+                printf("Pm_Dequeue error\n");
+                return 1;
+            }
+            if (!cmp_msg(msg, msg2, msg_len, i)) {
+                return 1;
+            }
+        }
+    
+        /* make full */
+        printf("test 2\n");
+        for (i = 0; i < 100; i++) {
+            make_msg(msg, msg_len, i);
+            if (Pm_Enqueue(queue, msg)) {
+                printf("Pm_Enqueue error\n");
+                return 1;
+            }
+        }
+    
+        /* alternately remove and insert */
+        for (i = 100; i < 1234; i++) {
+            make_msg(msg, msg_len, i - 100); /* what we expect */
+            if (Pm_Dequeue(queue, msg2) != 1) {
+                printf("Pm_Dequeue error\n");
+                return 1;
+            }
+            if (!cmp_msg(msg, msg2, msg_len, i)) {
+                return 1;
+            }
+            make_msg(msg, msg_len, i);
+            if (Pm_Enqueue(queue, msg)) {
+                printf("Pm_Enqueue error\n");
+                return 1;
+            }
+        }
+    
+        /* remove all */
+        while (!Pm_QueueEmpty(queue)) {
+            make_msg(msg, msg_len, i - 100); /* what we expect */
+            if (Pm_Dequeue(queue, msg2) != 1) {
+                printf("Pm_Dequeue error\n");
+                return 1;
+            }
+            if (!cmp_msg(msg, msg2, msg_len, i)) {
+                return 1;
+            }
+            i++;
+        }
+        if (i != 1334) {
+            printf("Message count error\n");
+	    return 1;
+        }
+    
+        /* now test overflow */
+        printf("test 3\n");
+        for (i = 0; i < 110; i++) {
+            make_msg(msg, msg_len, i);
+            if (Pm_Enqueue(queue, msg) == pmBufferOverflow) {
+	        break; /* this is supposed to execute after 100 messages */
+            }
+        }
+        for (i = 0; i < 100; i++) {
+            make_msg(msg, msg_len, i);
+            if (Pm_Dequeue(queue, msg2) != 1) {
+                printf("Pm_Dequeue error\n");
+		return 1;
+            }
+            if (!cmp_msg(msg, msg2, msg_len, i)) {
+                return 1;
+            }
+        }
+	/* we should detect overflow after removing 100 messages */
+        if (Pm_Dequeue(queue, msg2) != pmBufferOverflow) {
+            printf("Pm_Dequeue overflow expected\n");
+	    return 1;
+        }
+    
+	/* after overflow is detected (and cleared), sender can
+	 * send again
+	 */
+        /* see if function is restored, also test peek */
+        printf("test 4\n");
+        for (i = 0; i < 1357; i++) {
+            long *peek;
+            make_msg(msg, msg_len, i);
+            if (Pm_Enqueue(queue, msg)) {
+                printf("Pm_Enqueue error\n");
+                return 1;
+            }
+            peek = (long *) Pm_QueuePeek(queue);
+            if (!cmp_msg(msg, peek, msg_len, i)) {
+	        return 1;
+            }
+            if (Pm_Dequeue(queue, msg2) != 1) {
+                printf("Pm_Dequeue error\n");
+	        return 1;
+            }
+            if (!cmp_msg(msg, msg2, msg_len, i)) {
+	        return 1;
+            }
+        }
+        Pm_QueueDestroy(queue);
+    }
+    return 0;
+}
diff --git a/pd/portmidi/pm_test/qtest.vcproj b/pd/portmidi/pm_test/qtest.vcproj
new file mode 100755
index 000000000..83fa04a04
--- /dev/null
+++ b/pd/portmidi/pm_test/qtest.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="qtest"
+	ProjectGUID="{2204E68C-5C1F-440E-8CE6-7E273D4F6AD1}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="qtest.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/qtest.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\qtest.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/qtest.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\qtest.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="qtest.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/qtest.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\qtest.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/qtest.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\qtest.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\qtest.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/sysex.c b/pd/portmidi/pm_test/sysex.c
new file mode 100755
index 000000000..627a3dfa9
--- /dev/null
+++ b/pd/portmidi/pm_test/sysex.c
@@ -0,0 +1,528 @@
+/* sysex.c -- example program showing how to send and receive sysex
+    messages
+
+   Messages are stored in a file using 2-digit hexadecimal numbers,
+   one per byte, separated by blanks, with up to 32 numbers per line:
+   F0 14 A7 4B ...
+
+ */
+
+#include "stdio.h"
+#include "stdlib.h"
+#include "assert.h"
+#include "portmidi.h"
+#include "porttime.h"
+#include "string.h"
+#ifdef WIN32
+// need to get declaration for Sleep()
+#include "windows.h"
+#else
+#include <unistd.h>
+#define Sleep(n) usleep(n * 1000)
+#endif
+
+#define MIDI_SYSEX 0xf0
+#define MIDI_EOX 0xf7
+
+#define STRING_MAX 80
+
+#ifndef true
+#define true 1
+#define false 0
+#endif
+
+int latency = 0;
+
+/* read a number from console */
+/**/
+int get_number(char *prompt)
+{
+    char line[STRING_MAX];
+    int n = 0, i;
+    printf(prompt);
+    while (n != 1) {
+        n = scanf("%d", &i);
+        fgets(line, STRING_MAX, stdin);
+
+    }
+    return i;
+}
+
+
+/* loopback test -- send/rcv from 2 to 1000 bytes of random midi data */
+/**/
+void loopback_test()
+{
+    int outp;
+    int inp;
+    PmStream *midi_in;
+    PmStream *midi_out;
+    unsigned char msg[1024];
+    char line[80];
+    int32_t len;
+    int i;
+    int data;
+    PmEvent event;
+    int shift;
+    long total_bytes = 0;
+    int32_t begin_time;
+
+    Pt_Start(1, 0, 0);
+    
+    printf("Connect a midi cable from an output port to an input port.\n");
+    printf("This test will send random data via sysex message from output\n");
+    printf("to input and check that the correct data was received.\n");
+    outp = get_number("Type output device number: ");
+    /* Open output with 1ms latency -- when latency is non-zero, the Win32
+       implementation supports sending sysex messages incrementally in a 
+       series of buffers. This is nicer than allocating a big buffer for the
+       message, and it also seems to work better. Either way works.
+     */
+    while ((latency = get_number(
+                     "Latency in milliseconds (0 to send data immediatedly,\n"
+                     "  >0 to send timestamped messages): ")) < 0);
+    Pm_OpenOutput(&midi_out, outp, NULL, 0, NULL, NULL, latency);
+    inp = get_number("Type input device number: ");
+    /* since we are going to send and then receive, make sure the input buffer
+       is large enough for the entire message */
+    Pm_OpenInput(&midi_in, inp, NULL, 512, NULL, NULL);
+
+    srand((unsigned int) Pt_Time()); /* seed for random numbers */
+
+    begin_time = Pt_Time();
+    while (1) {
+        PmError count;
+        int32_t start_time;
+        int error_position = -1; /* 0; -1; -1 for continuous */ 
+        int expected = 0;
+        int actual = 0;
+        /* this modification will run until an error is detected */
+        /* set error_position above to 0 for interactive, -1 for */
+        /* continuous */
+        if (error_position >= 0) {
+            printf("Type return to send message, q to quit: ");
+            fgets(line, STRING_MAX, stdin);
+            if (line[0] == 'q') goto cleanup;
+        }
+
+        /* compose the message */
+        len = rand() % 998 + 2; /* len only counts data bytes */
+        msg[0] = (char) MIDI_SYSEX; /* start of SYSEX message */
+        /* data bytes go from 1 to len */
+        for (i = 0; i < len; i++) {
+/* pick whether data is sequential or random... (docs say random) */
+#define DATA_EXPR (i+1)
+// #define DATA_EXPR rand()
+            msg[i + 1] = DATA_EXPR & 0x7f; /* MIDI data */
+        }
+        /* final EOX goes in len+1, total of len+2 bytes in msg */
+        msg[len + 1] = (char) MIDI_EOX;
+
+        /* sanity check: before we send, there should be no queued data */
+        count = Pm_Read(midi_in, &event, 1);
+
+        if (count != 0) {
+            printf("Before sending anything, a MIDI message was found in\n");
+            printf("the input buffer. Please try again.\n");
+            break;
+		}
+
+        /* send the message */
+        printf("Sending %d byte sysex message.\n", len + 2);
+        Pm_WriteSysEx(midi_out, 0, msg);
+
+        /* receive the message and compare to msg[] */
+        data = 0;
+        shift = 0;
+        i = 0;
+        start_time = Pt_Time();
+        error_position = -1;
+        /* allow up to 2 seconds for transmission */
+        while (data != MIDI_EOX && start_time + 2000 > Pt_Time()) {
+            count = Pm_Read(midi_in, &event, 1);
+            if (count == 0) {
+                Sleep(1); /* be nice: give some CPU time to the system */
+                continue; /* continue polling for input */
+            }
+            
+            /* printf("read %lx ", event.message);
+               fflush(stdout); */
+            
+            /* compare 4 bytes of data until you reach an eox */
+            for (shift = 0; shift < 32 && (data != MIDI_EOX); shift += 8) {
+                data = (event.message >> shift) & 0xFF;
+                if (data != msg[i] && error_position < 0) {
+                    error_position = i;
+                    expected = msg[i];
+                    actual = data;
+                }
+                i++;
+            }
+        }
+        if (error_position >= 0) {
+            printf("Error at byte %d: sent %x recd %x.\n", error_position, 
+                   expected, actual);
+            break;
+        } else if (i != len + 2) {
+            printf("Error: byte %d not received.\n", i);
+            break;
+        } else {
+            int seconds = (Pt_Time() - begin_time) / 1000;
+	    if (seconds == 0) seconds = 1;
+            printf("Correctly received %d byte sysex message.\n", i);
+	    total_bytes += i;
+	    printf("Cummulative bytes/sec: %d\n", total_bytes / seconds);
+        }
+    }
+cleanup:
+    Pm_Close(midi_out);
+    Pm_Close(midi_in);
+    return;
+}
+
+
+/* send_multiple test -- send many sysex messages */
+/**/
+void send_multiple_test()
+{
+    int outp;
+    int length;
+    int num_msgs;
+    PmStream *midi_out;
+    unsigned char msg[1024];
+    int i;
+    PtTimestamp start_time;
+    PtTimestamp stop_time;
+
+    Pt_Start(1, 0, 0);
+    
+    printf("This is for performance testing. You should be sending to this\n");
+    printf("program running the receive multiple test. Do NOT send to\n");
+    printf("a synthesizer or you risk reprogramming it\n");
+    outp = get_number("Type output device number: ");
+    while ((latency = get_number(
+                     "Latency in milliseconds (0 to send data immediatedly,\n"
+                     "  >0 to send timestamped messages): ")) < 0);
+    Pm_OpenOutput(&midi_out, outp, NULL, 0, NULL, NULL, latency);
+    while ((length = get_number("Message length (7 - 1024): ")) < 7 ||
+           length > 1024) ;
+    while ((num_msgs = get_number("Number of messages: ")) < 1);
+    /* latency, length, and num_msgs should now all be valid */
+    /* compose the message except for sequence number in first 5 bytes */
+    msg[0] = (char) MIDI_SYSEX;
+    for (i = 6; i < length - 1; i++) {
+        msg[i] = i % 128; /* this is just filler */
+    }
+    msg[length - 1] = (char) MIDI_EOX;
+
+    start_time = Pt_Time();
+    /* send the messages */
+    for (i = num_msgs; i > 0; i--) {
+        /* insert sequence number into first 5 data bytes */
+        /* sequence counts down to zero */
+        int j;
+        int count = i;
+        /* 7 bits of message count i goes into each data byte */
+        for (j = 1; j <= 5; j++) {
+            msg[j] = count & 127;
+            count >>= 7;
+        }
+        /* send the message */
+        Pm_WriteSysEx(midi_out, 0, msg);
+    }
+    stop_time = Pt_Time();
+    Pm_Close(midi_out);
+    return;
+}
+
+#define MAX_MSG_LEN 1024
+static unsigned char receive_msg[MAX_MSG_LEN];
+static int receive_msg_index;
+static int receive_msg_length;
+static int receive_msg_count;
+static int receive_msg_error;
+static int receive_msg_messages;
+static PmStream *receive_msg_midi_in;
+static int receive_poll_running;
+
+/* receive_poll -- callback function to check for midi input */
+/**/
+void receive_poll(PtTimestamp timestamp, void *userData)
+{
+    PmError count;
+    PmEvent event;
+    int shift;
+    int data = 0;
+    int i;
+    
+    if (!receive_poll_running) return; /* wait until midi device is opened */
+    shift = 0;
+    while (data != MIDI_EOX) {
+        count = Pm_Read(receive_msg_midi_in, &event, 1);
+        if (count == 0) return;
+
+        /* compare 4 bytes of data until you reach an eox */
+        for (shift = 0; shift < 32 && (data != MIDI_EOX); shift += 8) {
+            receive_msg[receive_msg_index++] = data = 
+                (event.message >> shift) & 0xFF;
+            if (receive_msg_index >= MAX_MSG_LEN) {
+                printf("error: incoming sysex too long\n");
+                goto error;
+            }
+        }
+    }
+    /* check the message */
+    if (receive_msg_length == 0) {
+        receive_msg_length = receive_msg_index;
+    }
+    if (receive_msg_length != receive_msg_index) {
+        printf("error: incoming sysex wrong length\n");
+        goto error;
+    }
+    if (receive_msg[0] != MIDI_SYSEX) {
+        printf("error: incoming sysex missing status byte\n");
+        goto error;
+    }
+    /* get and check the count */
+    count = 0;
+    for (i = 0; i < 5; i++) {
+        count += receive_msg[i + 1] << (7 * i);
+    }
+    if (receive_msg_count == -1) {
+        receive_msg_count = count;
+        receive_msg_messages = count;
+    }
+    if (receive_msg_count != count) {
+        printf("error: incoming sysex has wrong count\n");
+        goto error;
+    }
+    for (i = 6; i < receive_msg_index - 1; i++) {
+        if (receive_msg[i] != i % 128) {
+            printf("error: incoming sysex has bad data\n");
+            goto error;
+        }
+    }
+    if (receive_msg[receive_msg_length - 1] != MIDI_EOX) goto error;
+    receive_msg_index = 0; /* get ready for next message */
+    receive_msg_count--;
+    return;
+ error:
+    receive_msg_error = 1;
+    return;
+}
+
+
+/* receive_multiple_test -- send/rcv from 2 to 1000 bytes of random midi data */
+/**/
+void receive_multiple_test()
+{
+    PmError err;
+    int inp;
+    
+    printf("This test expects to receive data sent by the send_multiple test\n");
+    printf("The test will check that correct data is received.\n");
+
+    /* Important: start PortTime first -- if it is not started first, it will
+       be started by PortMidi, and then our attempt to open again will fail */
+    receive_poll_running = false;
+    if ((err = Pt_Start(1, receive_poll, 0))) {
+        printf("PortTime error code: %d\n", err);
+        goto cleanup;
+    }
+    inp = get_number("Type input device number: ");
+    Pm_OpenInput(&receive_msg_midi_in, inp, NULL, 512, NULL, NULL);
+    receive_msg_index = 0;
+    receive_msg_length = 0;
+    receive_msg_count = -1;
+    receive_msg_error = 0;
+    receive_poll_running = true;
+    while ((!receive_msg_error) && (receive_msg_count != 0)) {
+#ifdef WIN32
+        Sleep(1000);
+#else
+        sleep(1); /* block and wait */
+#endif
+    }
+    if (receive_msg_error) {
+        printf("Receive_multiple test encountered an error\n");
+    } else {
+        printf("Receive_multiple test successfully received %d sysex messages\n", 
+               receive_msg_messages);
+    }
+cleanup:
+    receive_poll_running = false;
+    Pm_Close(receive_msg_midi_in);
+    Pt_Stop();
+    return;
+}
+
+
+#define is_real_time_msg(msg) ((0xF0 & Pm_MessageStatus(msg)) == 0xF8)
+
+
+void receive_sysex()
+{
+    char line[80];
+    FILE *f;
+    PmStream *midi;
+    int shift = 0;
+    int data = 0;
+    int bytes_on_line = 0;
+    PmEvent msg;
+
+    /* determine which output device to use */
+    int i = get_number("Type input device number: ");
+
+    /* open input device */
+    Pm_OpenInput(&midi, i, NULL, 512, NULL, NULL);
+    printf("Midi Input opened, type file for sysex data: ");
+
+    /* open file */
+    fgets(line, STRING_MAX, stdin);
+    /* remove the newline character */
+    if (strlen(line) > 0) line[strlen(line) - 1] = 0;
+    f = fopen(line, "w");
+    if (!f) {
+        printf("Could not open %s\n", line);
+        Pm_Close(midi);
+        return;
+    }
+
+    printf("Ready to receive a sysex message\n");
+
+    /* read data and write to file */
+    while (data != MIDI_EOX) {
+        PmError count;
+        count = Pm_Read(midi, &msg, 1);
+        /* CAUTION: this causes busy waiting. It would be better to 
+           be in a polling loop to avoid being compute bound. PortMidi
+           does not support a blocking read since this is so seldom
+           useful.
+         */
+        if (count == 0) continue;
+        /* ignore real-time messages */
+        if (is_real_time_msg(Pm_MessageStatus(msg.message))) continue;
+
+        /* write 4 bytes of data until you reach an eox */
+        for (shift = 0; shift < 32 && (data != MIDI_EOX); shift += 8) {
+            data = (msg.message >> shift) & 0xFF;
+            /* if this is a status byte that's not MIDI_EOX, the sysex
+               message is incomplete and there is no more sysex data */
+            if (data & 0x80 && data != MIDI_EOX) break;
+            fprintf(f, "%2x ", data);
+            if (++bytes_on_line >= 16) {
+                fprintf(f, "\n");
+                bytes_on_line = 0;
+            }
+        }
+    }
+    fclose(f);
+    Pm_Close(midi);
+}
+
+
+void send_sysex()
+{
+    char line[80];
+    FILE *f;
+    PmStream *midi;
+    int data;
+    int shift = 0;
+    PmEvent msg;
+
+	/* determine which output device to use */
+    int i = get_number("Type output device number: ");
+    while ((latency = get_number(
+                     "Latency in milliseconds (0 to send data immediatedly,\n"
+                     "  >0 to send timestamped messages): ")) < 0);
+
+    msg.timestamp = 0; /* no need for timestamp */
+
+	/* open output device */
+    Pm_OpenOutput(&midi, i, NULL, 0, NULL, NULL, latency);
+	printf("Midi Output opened, type file with sysex data: ");
+
+    /* open file */
+    fgets(line, STRING_MAX, stdin);
+    /* remove the newline character */
+    if (strlen(line) > 0) line[strlen(line) - 1] = 0;
+    f = fopen(line, "r");
+    if (!f) {
+        printf("Could not open %s\n", line);
+        Pm_Close(midi);
+        return;
+    }
+
+    /* read file and send data */
+    msg.message = 0;
+    while (1) {
+        /* get next byte from file */
+
+        if (fscanf(f, "%x", &data) == 1) {
+            /* printf("read %x, ", data); */
+            /* OR byte into message at proper offset */
+            msg.message |= (data << shift);
+            shift += 8;
+        }
+        /* send the message if it's full (shift == 32) or if we are at end */
+        if (shift == 32 || data == MIDI_EOX) {
+            /* this will send sysex data 4 bytes at a time -- it would
+               be much more efficient to send multiple PmEvents at once
+               but this method is simpler. See Pm_WriteSysEx for a more
+               efficient code example.
+             */
+            Pm_Write(midi, &msg, 1);
+            msg.message = 0;
+            shift = 0;
+        }
+        if (data == MIDI_EOX) { /* end of message */
+            fclose(f);
+            Pm_Close(midi);
+            return;
+        }
+    }
+}
+
+
+int main()
+{
+    int i;
+    char line[80];
+    
+    /* list device information */
+    for (i = 0; i < Pm_CountDevices(); i++) {
+        const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+        printf("%d: %s, %s", i, info->interf, info->name);
+        if (info->input) printf(" (input)");
+        if (info->output) printf(" (output)");
+        printf("\n");
+    }
+    while (1) {
+        printf("Type r to receive sysex, s to send,"
+               " l for loopback test, m to send multiple,"
+               " n to receive multiple, q to quit: ");
+        fgets(line, STRING_MAX, stdin);
+        switch (line[0]) {
+          case 'r':
+            receive_sysex();
+            break;
+          case 's':
+            send_sysex();
+            break;
+          case 'l':
+            loopback_test();
+            break;
+          case 'm':
+            send_multiple_test();
+            break;
+          case 'n':
+            receive_multiple_test();
+            break;
+          case 'q':
+            exit(0);
+          default:
+            break;
+        }
+    }
+    return 0;
+}
diff --git a/pd/portmidi/pm_test/sysex.vcproj b/pd/portmidi/pm_test/sysex.vcproj
new file mode 100755
index 000000000..d5bfd97b4
--- /dev/null
+++ b/pd/portmidi/pm_test/sysex.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="sysex"
+	ProjectGUID="{71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="sysex.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/sysex.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\sysex.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/sysex.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\sysex.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="sysex.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/sysex.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\sysex.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/sysex.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\sysex.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\sysex.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/test.c b/pd/portmidi/pm_test/test.c
new file mode 100755
index 000000000..03d6331ad
--- /dev/null
+++ b/pd/portmidi/pm_test/test.c
@@ -0,0 +1,489 @@
+#include "portmidi.h"
+#include "porttime.h"
+#include "stdlib.h"
+#include "stdio.h"
+#include "string.h"
+#include "assert.h"
+
+#define INPUT_BUFFER_SIZE 100
+#define OUTPUT_BUFFER_SIZE 0
+#define DRIVER_INFO NULL
+#define TIME_PROC ((int32_t (*)(void *)) Pt_Time)
+#define TIME_INFO NULL
+#define TIME_START Pt_Start(1, 0, 0) /* timer started w/millisecond accuracy */
+
+#define STRING_MAX 80 /* used for console input */
+
+int32_t latency = 0;
+
+/* crash the program to test whether midi ports are closed */
+/**/
+void doSomethingReallyStupid() {
+	int * tmp = NULL;
+	*tmp = 5;
+}
+
+
+/* exit the program without any explicit cleanup */
+/**/
+void doSomethingStupid() {
+	assert(0);
+}
+
+
+/* read a number from console */
+/**/
+int get_number(char *prompt)
+{
+    char line[STRING_MAX];
+    int n = 0, i;
+    printf(prompt);
+    while (n != 1) {
+        n = scanf("%d", &i);
+        fgets(line, STRING_MAX, stdin);
+
+    }
+    return i;
+}
+
+
+/*
+ * the somethingStupid parameter can be set to simulate a program crash.
+ * We want PortMidi to close Midi ports automatically in the event of a
+ * crash because Windows does not (and this may cause an OS crash)
+ */
+void main_test_input(unsigned int somethingStupid) {
+    PmStream * midi;
+    PmError status, length;
+    PmEvent buffer[1];
+    int num = 10;
+    int i = get_number("Type input number: ");
+    /* It is recommended to start timer before Midi; otherwise, PortMidi may
+       start the timer with its (default) parameters
+     */
+    TIME_START;
+
+    /* open input device */
+    Pm_OpenInput(&midi, 
+                 i,
+                 DRIVER_INFO, 
+                 INPUT_BUFFER_SIZE, 
+                 TIME_PROC, 
+                 TIME_INFO);
+
+    printf("Midi Input opened. Reading %d Midi messages...\n", num);
+    Pm_SetFilter(midi, PM_FILT_ACTIVE | PM_FILT_CLOCK | PM_FILT_SYSEX);
+    /* empty the buffer after setting filter, just in case anything
+       got through */
+    while (Pm_Poll(midi)) {
+        Pm_Read(midi, buffer, 1);
+    }
+    /* now start paying attention to messages */
+    i = 0; /* count messages as they arrive */
+    while (i < num) {
+        status = Pm_Poll(midi);
+        if (status == TRUE) {
+            length = Pm_Read(midi,buffer, 1);
+            if (length > 0) {
+                printf("Got message %d: time %ld, %2lx %2lx %2lx\n",
+                       i,
+                       (long) buffer[0].timestamp,
+                       (long) Pm_MessageStatus(buffer[0].message),
+                       (long) Pm_MessageData1(buffer[0].message),
+                       (long) Pm_MessageData2(buffer[0].message));
+                i++;
+            } else {
+                assert(0);
+            }
+        }
+        /* simulate crash if somethingStupid is 1 or 2 */
+        if ((i > (num/2)) && (somethingStupid == 1)) {
+            doSomethingStupid();
+        } else if ((i > (num/2)) && (somethingStupid == 2)) {
+            doSomethingReallyStupid();
+        }
+    }
+
+    /* close device (this not explicitly needed in most implementations) */
+    printf("ready to close...");
+
+    Pm_Close(midi);
+    printf("done closing...");
+}
+
+
+
+void main_test_output() {
+    PmStream * midi;
+	char line[80];
+    int32_t off_time;
+    int chord[] = { 60, 67, 76, 83, 90 };
+    #define chord_size 5 
+    PmEvent buffer[chord_size];
+    PmTimestamp timestamp;
+
+    /* determine which output device to use */
+    int i = get_number("Type output number: ");
+
+    /* It is recommended to start timer before PortMidi */
+    TIME_START;
+
+    /* open output device -- since PortMidi avoids opening a timer
+       when latency is zero, we will pass in a NULL timer pointer
+       for that case. If PortMidi tries to access the time_proc,
+       we will crash, so this test will tell us something. */
+    Pm_OpenOutput(&midi, 
+                  i, 
+                  DRIVER_INFO,
+                  OUTPUT_BUFFER_SIZE, 
+                  (latency == 0 ? NULL : TIME_PROC),
+                  (latency == 0 ? NULL : TIME_INFO), 
+                  latency);
+    printf("Midi Output opened with %ld ms latency.\n", (long) latency);
+
+    /* output note on/off w/latency offset; hold until user prompts */
+    printf("ready to send program 1 change... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+    /* if we were writing midi for immediate output, we could always use
+       timestamps of zero, but since we may be writing with latency, we
+       will explicitly set the timestamp to "now" by getting the time.
+       The source of timestamps should always correspond to the TIME_PROC
+       and TIME_INFO parameters used in Pm_OpenOutput(). */
+    buffer[0].timestamp = TIME_PROC(TIME_INFO);
+    /* Send a program change to increase the chances we will hear notes */
+    /* Program 0 is usually a piano, but you can change it here: */
+#define PROGRAM 0
+    buffer[0].message = Pm_Message(0xC0, PROGRAM, 0);
+    Pm_Write(midi, buffer, 1);
+
+    printf("ready to note-on... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+    buffer[0].timestamp = TIME_PROC(TIME_INFO);
+    buffer[0].message = Pm_Message(0x90, 60, 100);
+    Pm_Write(midi, buffer, 1);
+    printf("ready to note-off... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+    buffer[0].timestamp = TIME_PROC(TIME_INFO);
+    buffer[0].message = Pm_Message(0x90, 60, 0);
+    Pm_Write(midi, buffer, 1);
+
+    /* output short note on/off w/latency offset; hold until user prompts */
+    printf("ready to note-on (short form)... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+    Pm_WriteShort(midi, TIME_PROC(TIME_INFO),
+                  Pm_Message(0x90, 60, 100));
+    printf("ready to note-off (short form)... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+    Pm_WriteShort(midi, TIME_PROC(TIME_INFO),
+                  Pm_Message(0x90, 60, 0));
+
+    /* output several note on/offs to test timing. 
+       Should be 1s between notes */
+    printf("chord will arpeggiate if latency > 0\n");
+    printf("ready to chord-on/chord-off... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+    timestamp = TIME_PROC(TIME_INFO);
+    for (i = 0; i < chord_size; i++) {
+        buffer[i].timestamp = timestamp + 1000 * i;
+        buffer[i].message = Pm_Message(0x90, chord[i], 100);
+    }
+    Pm_Write(midi, buffer, chord_size);
+
+    off_time = timestamp + 1000 + chord_size * 1000; 
+    while (TIME_PROC(TIME_INFO) < off_time) 
+		/* busy wait */;
+    for (i = 0; i < chord_size; i++) {
+        buffer[i].timestamp = timestamp + 1000 * i;
+        buffer[i].message = Pm_Message(0x90, chord[i], 0);
+    }
+    Pm_Write(midi, buffer, chord_size);    
+
+    /* close device (this not explicitly needed in most implementations) */
+    printf("ready to close and terminate... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+	
+    Pm_Close(midi);
+    Pm_Terminate();
+    printf("done closing and terminating...\n");
+}
+
+
+void main_test_both()
+{
+    int i = 0;
+    int in, out;
+    PmStream * midi, * midiOut;
+    PmEvent buffer[1];
+    PmError status, length;
+    int num = 10;
+    
+    in = get_number("Type input number: ");
+    out = get_number("Type output number: ");
+
+    /* In is recommended to start timer before PortMidi */
+    TIME_START;
+
+    Pm_OpenOutput(&midiOut, 
+                  out, 
+                  DRIVER_INFO,
+                  OUTPUT_BUFFER_SIZE, 
+                  TIME_PROC,
+                  TIME_INFO, 
+                  latency);
+    printf("Midi Output opened with %ld ms latency.\n", (long) latency);
+    /* open input device */
+    Pm_OpenInput(&midi, 
+                 in,
+                 DRIVER_INFO, 
+                 INPUT_BUFFER_SIZE, 
+                 TIME_PROC, 
+                 TIME_INFO);
+    printf("Midi Input opened. Reading %d Midi messages...\n",num);
+    Pm_SetFilter(midi, PM_FILT_ACTIVE | PM_FILT_CLOCK);
+    /* empty the buffer after setting filter, just in case anything
+       got through */
+    while (Pm_Poll(midi)) {
+        Pm_Read(midi, buffer, 1);
+    }
+    i = 0;
+    while (i < num) {
+        status = Pm_Poll(midi);
+        if (status == TRUE) {
+            length = Pm_Read(midi,buffer,1);
+            if (length > 0) {
+                Pm_Write(midiOut, buffer, 1);
+                printf("Got message %d: time %ld, %2lx %2lx %2lx\n",
+                       i,
+                       (long) buffer[0].timestamp,
+                       (long) Pm_MessageStatus(buffer[0].message),
+                       (long) Pm_MessageData1(buffer[0].message),
+                       (long) Pm_MessageData2(buffer[0].message));
+                i++;
+            } else {
+                assert(0);
+            }
+        }
+    }
+
+    /* close midi devices */
+    Pm_Close(midi);
+    Pm_Close(midiOut);
+    Pm_Terminate(); 
+}
+
+
+/* main_test_stream exercises windows winmm API's stream mode */
+/*    The winmm stream mode is used for latency>0, and sends
+   timestamped messages. The timestamps are relative (delta) 
+   times, whereas PortMidi times are absolute. Since peculiar
+   things happen when messages are not always sent in advance,
+   this function allows us to exercise the system and test it.
+ */
+void main_test_stream() {
+    PmStream * midi;
+	char line[80];
+    PmEvent buffer[16];
+
+	/* determine which output device to use */
+    int i = get_number("Type output number: ");
+
+	latency = 500; /* ignore LATENCY for this test and
+				      fix the latency at 500ms */
+
+    /* It is recommended to start timer before PortMidi */
+    TIME_START;
+
+	/* open output device */
+    Pm_OpenOutput(&midi, 
+                  i, 
+                  DRIVER_INFO,
+                  OUTPUT_BUFFER_SIZE, 
+                  TIME_PROC,
+                  TIME_INFO, 
+                  latency);
+    printf("Midi Output opened with %ld ms latency.\n", (long) latency);
+
+    /* output note on/off w/latency offset; hold until user prompts */
+    printf("ready to send output... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+
+    /* if we were writing midi for immediate output, we could always use
+       timestamps of zero, but since we may be writing with latency, we
+       will explicitly set the timestamp to "now" by getting the time.
+       The source of timestamps should always correspond to the TIME_PROC
+       and TIME_INFO parameters used in Pm_OpenOutput(). */
+    buffer[0].timestamp = TIME_PROC(TIME_INFO);
+    buffer[0].message = Pm_Message(0xC0, 0, 0);
+	buffer[1].timestamp = buffer[0].timestamp;
+	buffer[1].message = Pm_Message(0x90, 60, 100);
+	buffer[2].timestamp = buffer[0].timestamp + 1000;
+	buffer[2].message = Pm_Message(0x90, 62, 100);
+	buffer[3].timestamp = buffer[0].timestamp + 2000;
+	buffer[3].message = Pm_Message(0x90, 64, 100);
+	buffer[4].timestamp = buffer[0].timestamp + 3000;
+	buffer[4].message = Pm_Message(0x90, 66, 100);
+	buffer[5].timestamp = buffer[0].timestamp + 4000;
+	buffer[5].message = Pm_Message(0x90, 60, 0);
+	buffer[6].timestamp = buffer[0].timestamp + 4000;
+	buffer[6].message = Pm_Message(0x90, 62, 0);
+	buffer[7].timestamp = buffer[0].timestamp + 4000;
+	buffer[7].message = Pm_Message(0x90, 64, 0);
+	buffer[8].timestamp = buffer[0].timestamp + 4000;
+	buffer[8].message = Pm_Message(0x90, 66, 0);
+
+    Pm_Write(midi, buffer, 9);
+#ifdef SEND8
+	/* Now, we're ready for the real test.
+	   Play 4 notes at now, now+500, now+1000, and now+1500
+	   Then wait until now+2000.
+	   Play 4 more notes as before.
+	   We should hear 8 evenly spaced notes. */
+	now = TIME_PROC(TIME_INFO);
+	for (i = 0; i < 4; i++) {
+		buffer[i * 2].timestamp = now + (i * 500);
+		buffer[i * 2].message = Pm_Message(0x90, 60, 100);
+		buffer[i * 2 + 1].timestamp = now + 250 + (i * 500);
+		buffer[i * 2 + 1].message = Pm_Message(0x90, 60, 0);
+	}
+    Pm_Write(midi, buffer, 8);
+
+    while (Pt_Time() < now + 2500) 
+		/* busy wait */;
+	/* now we are 500 ms behind schedule, but since the latency
+	   is 500, the delay should not be audible */
+	now += 2000;
+	for (i = 0; i < 4; i++) {
+		buffer[i * 2].timestamp = now + (i * 500);
+		buffer[i * 2].message = Pm_Message(0x90, 60, 100);
+		buffer[i * 2 + 1].timestamp = now + 250 + (i * 500);
+		buffer[i * 2 + 1].message = Pm_Message(0x90, 60, 0);
+	}
+    Pm_Write(midi, buffer, 8);
+#endif
+    /* close device (this not explicitly needed in most implementations) */
+    printf("ready to close and terminate... (type RETURN):");
+    fgets(line, STRING_MAX, stdin);
+	
+    Pm_Close(midi);
+    Pm_Terminate();
+    printf("done closing and terminating...\n");
+}
+
+
+void show_usage()
+{
+    printf("Usage: test [-h] [-l latency-in-ms]\n");
+    exit(0);
+}
+
+int main(int argc, char *argv[])
+{
+    int default_in;
+    int default_out;
+    int i = 0, n = 0;
+    char line[STRING_MAX];
+    int test_input = 0, test_output = 0, test_both = 0, somethingStupid = 0;
+    int stream_test = 0;
+    int latency_valid = FALSE;
+    
+    if (sizeof(void *) == 8) 
+        printf("Apparently this is a 64-bit machine.\n");
+    else if (sizeof(void *) == 4) 
+        printf ("Apparently this is a 32-bit machine.\n");
+    
+    for (i = 1; i < argc; i++) {
+        if (strcmp(argv[i], "-h") == 0) {
+            show_usage();
+        } else if (strcmp(argv[i], "-l") == 0 && (i + 1 < argc)) {
+            i = i + 1;
+            latency = atoi(argv[i]);
+            printf("Latency will be %ld\n", (long) latency);
+            latency_valid = TRUE;
+        } else {
+            show_usage();
+        }
+    }
+
+    while (!latency_valid) {
+        int lat; // declared int to match "%d"
+        printf("Latency in ms: ");
+        if (scanf("%d", &lat) == 1) {
+            latency = (int32_t) lat; // coerce from "%d" to known size
+	    latency_valid = TRUE;
+        }
+    }
+
+    /* determine what type of test to run */
+    printf("begin portMidi test...\n");
+    printf("%s%s%s%s%s",
+           "enter your choice...\n    1: test input\n",
+           "    2: test input (fail w/assert)\n",
+           "    3: test input (fail w/NULL assign)\n",
+           "    4: test output\n    5: test both\n",
+           "    6: stream test\n");
+    while (n != 1) {
+        n = scanf("%d", &i);
+        fgets(line, STRING_MAX, stdin);
+        switch(i) {
+        case 1: 
+            test_input = 1;
+            break;
+        case 2: 
+            test_input = 1;
+            somethingStupid = 1;
+            break;
+        case 3: 
+            test_input = 1;
+            somethingStupid = 2;
+            break;
+        case 4: 
+            test_output = 1;
+            break;
+        case 5:
+            test_both = 1;
+            break;
+		case 6:
+			stream_test = 1;
+			break;
+        default:
+            printf("got %d (invalid input)\n", n);
+            break;
+        }
+    }
+    
+    /* list device information */
+    default_in = Pm_GetDefaultInputDeviceID();
+    default_out = Pm_GetDefaultOutputDeviceID();
+    for (i = 0; i < Pm_CountDevices(); i++) {
+        char *deflt;
+        const PmDeviceInfo *info = Pm_GetDeviceInfo(i);
+        if (((test_input  | test_both) & info->input) |
+            ((test_output | test_both | stream_test) & info->output)) {
+            printf("%d: %s, %s", i, info->interf, info->name);
+            if (info->input) {
+                deflt = (i == default_in ? "default " : "");
+                printf(" (%sinput)", deflt);
+            }
+            if (info->output) {
+                deflt = (i == default_out ? "default " : "");
+                printf(" (%soutput)", deflt);
+            }
+            printf("\n");
+        }
+    }
+    
+    /* run test */
+    if (stream_test) {
+        main_test_stream();
+    } else if (test_input) {
+        main_test_input(somethingStupid);
+    } else if (test_output) {
+        main_test_output();
+    } else if (test_both) {
+        main_test_both();
+    }
+    
+    printf("finished portMidi test...type ENTER to quit...");
+    fgets(line, STRING_MAX, stdin);
+    return 0;
+}
diff --git a/pd/portmidi/pm_test/test.vcproj b/pd/portmidi/pm_test/test.vcproj
new file mode 100755
index 000000000..95d7f4b93
--- /dev/null
+++ b/pd/portmidi/pm_test/test.vcproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="test"
+	ProjectGUID="{0BEACB8B-4058-41A4-A9DE-1B1FB650B21A}"
+	Keyword="Win32Proj">
+	<Platforms>
+		<Platform
+			Name="Win32"/>
+	</Platforms>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="Debug"
+			IntermediateDirectory="test.dir\Debug"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				BasicRuntimeChecks="3"
+				CompileAs="1"
+				DebugInformationFormat="3"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="0"
+				Optimization="0"
+				RuntimeLibrary="1"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				AssemblerListingLocation="Debug"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Debug/test.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,_DEBUG,PM_CHECK_ERRORS=1,DEBUG,CMAKE_INTDIR=\&quot;Debug\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386 /debug"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Debug\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Debug\test.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="2"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Debug/test.pdb"
+				GenerateDebugInformation="TRUE"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Debug\test.lib"/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="Release"
+			IntermediateDirectory="test.dir\Release"
+			ConfigurationType="1"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="FALSE"
+			CharacterSet="2">
+			<Tool
+				Name="VCCLCompilerTool"
+				AdditionalOptions=" /Zm1000"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				CompileAs="1"
+				ExceptionHandling="0"
+				InlineFunctionExpansion="2"
+				Optimization="2"
+				RuntimeLibrary="0"
+				WarningLevel="3"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				AssemblerListingLocation="Release"
+				ObjectFile="$(IntDir)\"
+				ProgramDataBaseFileName="../pm_test/Release/test.pdb"
+/>
+			<Tool
+				Name="VCCustomBuildTool"/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				AdditionalIncludeDirectories="..\pm_common;..\porttime;"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"/>
+			<Tool
+				Name="VCMIDLTool"
+				PreprocessorDefinitions="WIN32,_WINDOWS,NDEBUG,CMAKE_INTDIR=\&quot;Release\&quot;"
+				MkTypLibCompatible="FALSE"
+				TargetEnvironment="1"
+				GenerateStublessProxies="TRUE"
+				TypeLibraryName="$(InputName).tlb"
+				OutputDirectory="$(IntDir)"
+				HeaderFileName="$(InputName).h"
+				DLLDataFileName=""
+				InterfaceIdentifierFileName="$(InputName)_i.c"
+				ProxyFileName="$(InputName)_p.c"/>
+			<Tool
+				Name="VCPreBuildEventTool"/>
+			<Tool
+				Name="VCPreLinkEventTool"/>
+			<Tool
+				Name="VCPostBuildEventTool"/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions=" /STACK:10000000 /machine:I386"
+				AdditionalDependencies="$(NOINHERIT) kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib  ..\Release\portmidi_s.lib winmm.lib "
+				OutputFile="..\pm_test\Release\test.exe"
+				Version="0.0"
+				GenerateManifest="TRUE"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories=""
+				ProgramDataBaseFile="../pm_test/Release/test.pdb"
+				SubSystem="1"
+				ImportLibrary="..\pm_test\Release\test.lib"/>
+		</Configuration>
+	</Configurations>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="">
+			<File
+				RelativePath="..\pm_test\test.c">
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/pm_test/txdata.syx b/pd/portmidi/pm_test/txdata.syx
new file mode 100755
index 000000000..1e06e5a6e
--- /dev/null
+++ b/pd/portmidi/pm_test/txdata.syx
@@ -0,0 +1,257 @@
+20  0 1d  4  c  6  0 34  1 4d  4  d 1f  7  3  6 
+ c 5e  4 4d  d  b 18  5  3  6  0 3d  1 4a 16 18 
+1f  8  3  6  d  0  1 63  4 13 3a 23  0  0  0  2 
+ c  2  4  0 63 32  0  0  0 32  0 47 72 61 6e 64 
+50 69 61 6e 6f 63 63 63 32 32 32  0  0  0  0  0 
+10  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  9  9  f  c 27  2 35 37 10 1f  4  3  4 
+ d 19  4 56  5 16 1f  f  8  d  c  0 43 60  4  e 
+1f  c  3  7  e  0 43 63  5 10 3c 14  8  2 1b 56 
+ 5  2  4  0 63 32  0  0  0 32  0 4c 6f 54 69 6e 
+65 38 31 5a 20 63 63 63 32 32 32  0 7f  0  1  0 
+18  0  1  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  e  f  e  9  0  3 43 2d  e 1f  f  5  7 
+ f 16 43 5a  0  0 1f 12  6  8  d  0  3 63  4  0 
+1f 12  6  8  f  0  2 63  4  6 34 14  0  1  2 4e 
+18  2  4  0 63 32  0 32  0 32  0 44 79 6e 6f 6d 
+69 74 65 45 50 63 63 63 32 32 32  0 70  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  b  1  b  8 18 40 5f  a  e 1f 1f  0  a 
+ f  0 40 5f  4  0 1f 1f  0  a  f  0 40 63  5  6 
+1f 1f  0  a  f  0 40 5f  0  8 1f 20  0  3  0 5a 
+18  4  4  0 63 32 32  0  0 32  0 50 65 72 63 4f 
+72 67 61 6e 20 63 63 63 32 32 32  0  0  0  0  0 
+ 1  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  b  7  f  9  0  4 49 13 13 1f  8  7  5 
+ e  0  2 58  0  c 1f  6  4  6  f 23  3 46 10  a 
+1f  7  8  c  d  0  2 63  8  b  2 1c  0  0  0 52 
+18  4  4  0 63 32  0 32  0 32  0 54 68 69 6e 20 
+43 6c 61 76 20 63 63 63 32 32 32  0 70  0 20  0 
+10  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  c  0  6  1  a  4 50 20  e 1f  c  0  6 
+ 1  a  4 50 1f  8 1f  b  9  5  e  0  2 63  5  e 
+1f  b  9  5  e  0  3 63  4  8  4 1a  0  0  0 52 
+1d  2  4  0 63 32  0 32  0 32  0 42 72 69 74 65 
+43 65 6c 73 74 63 63 63 32 32 32  0 20  0 26  0 
+ 1  0  8  4  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  f 1f  4  8  f  0 3a 51  4  b  e 1f  0  8 
+ f  0 22 4b  4  3  f 1a  b  8  d  0 3b 36  9  3 
+12 1f  0  8  f  0 22 5d  4  b 3a 1e 19  5  0 52 
+18  4  4  0 63 32  0  0  0 32  0 54 72 75 6d 70 
+65 74 38 31 5a 63 63 63 32 32 32  0  0  0 50  0 
+51  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  c  5  0  8  0  0  2 4a  4  b  f 1f  0  8 
+ f  0  2 3f  4  3 1f  f  0  8  0 23  3 44  b  3 
+10 1f  0  9  f  0  2 5e  4  c 3a 1f 19  7  0 52 
+18  4  4  0 63 32  0  0  0 32  0 46 6c 75 67 65 
+6c 68 6f 72 6e 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 10 1f  0  8  f  0 42 4a  0  3 11 1f  0  8 
+ f  a 43 51  0  3 11  9  0  8  d  0 42 2b 16  6 
+10 1f  0  9  f  0 42 63  4  b 3a 1e  9  9  0 5a 
+24  4  4  0 63 32 31  0  0 32  0 52 61 73 70 41 
+6c 74 6f 20 20 63 63 63 32 32 32  0 10  0 20  0 
+54  0 20  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 10  9  2  6  d  0 41 3e  4 15  c  b  2  3 
+ e  0 41 4f  4 12  c  e  2  8  d  0 42 4b  a 1c 
+ d  b  1  9  e  0  3 63  a 14  0 23  f  2 1b 5e 
+18  4  5  0 63 28 50 32  0 32  0 48 61 72 6d 6f 
+6e 69 63 61 20 63 63 63 32 32 32  0 50 10 50  0 
+50  0 10  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1c  2  0  4  e 63  0 4e  4  3  d  5  0  6 
+ e 63  1 56  a  8 12  7  0  6  9 63  2 47 1b  e 
+ a  a  0  5  f  0  1 63  4  b 32 1a  8  d  0 52 
+ c  4  4  0 63 32  0  0  0 32  0 44 6f 75 62 6c 
+65 42 61 73 73 63 63 63 32 32 32  0 10  0  0  0 
+ 3  0  0  5  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  b  4  0  4  f 14  2 49  9  6  a  7  0  4 
+ f 14  2 51  a  0  8 1f  0  5  f  0  1 63  9  6 
+ a 1f  0  5  f  0  1 63  a  0 3c 1f  6  9  0 52 
+ 5  4  4  0 63 32  0  0  0 32  0 48 69 53 74 72 
+69 6e 67 20 31 63 63 63 32 32 32  0  2  0 30  0 
+32  0 10  5  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 10 13  f  4  a  0  3 3b 14 14 1f  e  8  7 
+ 9  0  2 42  5  e 18 13  d  9  c  0  2 3c 13  8 
+1f 11  7  4  f  0 42 63  4 10 3a 1b  0  0  0 52 
+1d  4  4  0 63 32  0  0  0 32  0 48 61 72 70 20 
+20 20 20 20 20 63 63 63 32 32 32  8  0  0 21  0 
+ 0  0  8  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  6  6  4  f  0 40 48  5  0  c  8  7  5 
+ f  5  0 52  4  0  f  7  3  7  e  8  3 63  4  6 
+ f  8  4  5  f  0  3 63  4  6 7c 1f  0  6  0 4a 
+11  2  4  0 63 32  0  0  0 32  0 46 61 6e 66 61 
+72 54 70 74 73 63 63 63 32 32 32  6  1  0 38  0 
+ 8  0 48  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  d  b  0  1  c  0  2 2c 3d  3  d  7  0  1 
+ c  0  2 1f 3c  3  d 1f  0  5  f  0  2 63  5  6 
+ d 1f  0  5  f  0  2 63  4  0 3c 63  0 2f  0 53 
+11  4  4  0 63 32  0  0  0 32  0 42 72 65 61 74 
+68 4f 72 67 6e 63 63 63 32 32 32  4 30  5 50  0 
+11  0 18  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  9  0  6  0 27  2 51 19  b 1c  6  0  8 
+ 0 37  2 47  a  3 1f  a  0  9  0 3d  2 4d  a  e 
+1f 12  8  8  f  0  3 61  4  b 28 1f  0  3  0 52 
+ c  3  4  0 63 32  1 32  0 32  0 4e 79 6c 6f 6e 
+47 75 69 74 20 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  e  e  f  f  0  3 48 2d  6 1f  f  4  f 
+ f 25  3 5b  0  0 1f 12  6  c  e 1c  3 55  0 10 
+1f 13  7  8  e  6  4 62  4  e 3b 14  0  0  0 42 
+18  2  4  0 63 32  0 32  0 32  0 47 75 69 74 61 
+72 20 23 31 20 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f 19  8  a  3  0  3 63 10 18 1f  c  5  b 
+ 5  0  3 52  0  b 1f 19  6  b  5  0  3 63  a 16 
+1f  f 11  9  7  0  4 63  4  3 3a 14  0  0  0 42 
+18  2  4  0 63 32  0 32  0 32  0 46 75 6e 6b 79 
+20 50 69 63 6b 63 63 63 32 32 32  0 30  0  0  0 
+ 0  0  0  7  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  1  0  8  4  0  3 3d  a 1e 1f  1  0  8 
+ 0  0  0 43  0 10 1f  9  6  8  c 1b  7 46 1c 1e 
+1f  9  0  9  9  0  1 63  4  3 3a 1c  0  0  0 52 
+ c  4  5  0 63 4b  0  0  0 32  0 45 6c 65 63 42 
+61 73 73 20 31 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  f  f  e  9  0  3 46 1d 16 1f  f  5  e 
+ e  d  3 63  0  b 1f 13  6  5  d 1c  3 63  0  0 
+1f 13  6  8  f  0  4 63  4  6 3b 1f  0  0  0 42 
+ c  4  4  0 63 32  0 32  0 32  0 53 79 6e 46 75 
+6e 6b 42 61 73 63 63 63 32 32 32  d 6c  0  0  0 
+70  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f 10  7  8  3  0  3 4f  4  3 1f  9  0  8 
+ 0  0  1 4a  0  b 1f 11  0  8  0  0  1 47  4  8 
+1f  9  0  8  0  0  0 63  0  b 39 19  0  7  0 52 
+ c  2  4  0 63 32  0 32  0 32  0 4c 61 74 65 6c 
+79 42 61 73 73 63 63 63 32 32 32  2  0  0  0  0 
+40  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 13 12  0  9  d 22  0 51  0  b 1f 14  0  5 
+ 8 24 40 5c  0  3 1f 11  0  6  c 2c  0 53  9  0 
+10 1f  0  b  f  0  0 5c  a  e 3a 22 11  e 1e 5e 
+18  7  4  0 63 32  0 32  0 32  0 53 79 6e 63 20 
+4c 65 61 64 20 63 63 63 32 32 32  0 70  0 40  0 
+ 2  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 13 1e  0  9  e  0  0 63 3f  b 1f 14  0  5 
+ e 24  1 51  4  3 1f 14  0  f  1  0 41 4d  8  3 
+ f 1f  0  b  f  0  2 63  4  b 3b 20 11 12 33 56 
+18  4  4  0 63 37  e  0  0 32  0 4a 61 7a 7a 20 
+46 6c 75 74 65 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 15 13  d  3  d 1e  2 50 18  e 15 14  9  4 
+ c 1e  2 56 11  8 1b 1f  f  7  f  0  1 63  4  6 
+1a 1f  e  6  f  0  2 63  4  0 7c  b  0  8  0 62 
+18  4  4  0 63 32  0  0  0 32  0 4a 61 76 61 20 
+4a 69 76 65 20 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  0  0  4  f  0 40 63 3c  0  b  8  7  7 
+ f  5  0 63  4  6  f  5  3  7  f  8  0 3b  5  6 
+ e  8  4  5  f  0  3 63  3  0 7e 1d  6  f  0 4a 
+11  0  4  0 63 32  0  0  0 32  0 42 61 61 64 42 
+72 65 61 74 68 63 63 63 32 32 32  6 30  0 38  0 
+ 1  0 46  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f  0  0  4  f  0 40 47 2f  0  e  8  7  7 
+ f  5  0 4c  0  6 13 1c  d  c  6  8  0 63  5  6 
+14 11  d  b  0  0  3 63  4  0 7a 10  0 51  0 68 
+17  0  4  0 63 32  0  0  0 32  0 56 6f 63 61 6c 
+4e 75 74 73 20 63 63 63 32 32 32  6 30  0 30  0 
+ 1  0 10  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f 1f  0  5  f  0  0 41 32  3 1f 14 10  5 
+ 5  1  2 63  7  3 1f  b 12  8  f  0  1 63  c  3 
+1f 1f  f  8  f  0  1 63  4  3 39 23  0  0  0 62 
+18  7  4  0 63 32  0  0  0 32  0 57 61 74 65 72 
+47 6c 61 73 73 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  7  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 16  2  0  4  6  9  1 4f  8  0 19  e  1  4 
+ 0 20  1 43 19  0 1f 12 10  6  7  0  0 54 3d  3 
+16  d  6  6  2 1e  3 61  8  e 3a 20  1 14  0 42 
+ c  2  4  2 63 63 63  0  0 32  0 46 75 7a 7a 79 
+20 4b 6f 74 6f 63 63 63 32 32 32  0  0  0  0  b 
+50  0  0  5  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1c  8  0  3  e  0  1 55 12  3 1c  7  0  1 
+ e 2e  1 58 27  b  e  4  0  2  a  0  2 63  4  a 
+ d  9  0  2  c  1  2 63 10  b  4 54  0 47  0 53 
+18  7  4  0 63 32  0  0  0 32  0 42 72 74 68 62 
+65 6c 6c 73 20 63 63 63 32 32 32  0  4  0 40  0 
+40  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1a  4  1  1  b 16  0 47  5  3 15  e  0  1 
+ d  0  0 4c  5 16 1c  6  4  2  7  0  0 63  4 16 
+18 18  3  1  e  0  0 5e  4 10 24  7  0  4  0 62 
+24  4  4  0 63 32  0  0  0 32  0 54 75 62 65 20 
+42 65 6c 6c 73 63 63 63 32 32 32  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f 1f 13  3  0  0  0 5f 3d  6 1f 12 13  2 
+ 0  0  1 52  5  2 1f 14 13  3  0  0  1 56 28  5 
+1e  b 13  f  9  0  0 63  6  3 3b 63  0 63  0 73 
+23  7  4  0 63 32  0  0  0 32  0 4e 6f 69 73 65 
+20 53 68 6f 74 63 63 63 32 32 32  8  0  0  0  8 
+ 0  0  0  6  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 1f 16  0  3  7  0  1 50  0  3 1f 18  3  3 
+ 3 22  0 63  0 14 1d  7  6  3  6  0  1 3c  8  3 
+1f  5  7  3  0  0  1 63  4 1b 39 23  0  8  0 42 
+18  4  4  0 63 32  0  0  0 32  0 48 61 6e 64 20 
+44 72 75 6d 20 63 63 63 32 32 32  0  1  0  3  0 
+ 1  0  1  3  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 
+ 0  0 7d f7 
\ No newline at end of file
diff --git a/pd/portmidi/pm_win/README_WIN.txt b/pd/portmidi/pm_win/README_WIN.txt
old mode 100644
new mode 100755
index 3fe5ee417..b161bb274
--- a/pd/portmidi/pm_win/README_WIN.txt
+++ b/pd/portmidi/pm_win/README_WIN.txt
@@ -1,19 +1,23 @@
 File: PortMidi Win32 Readme
 Author: Belinda Thom, June 16 2002
-Revised by: Roger Dannenberg, June 2002, May 2004
+Revised by: Roger Dannenberg, June 2002, May 2004, June 2007, 
+            Umpei Kurokawa, June 2007
+            Roger Dannenberg Sep 2009
+
+Contents:
+        Using Portmidi
+        To Install Portmidi
+        To Compile Portmidi
+        About Cmake
+        Using other versions of Visual C++
+        To Create Your Own Portmidi Client Application
+        
+
 
 =============================================================================
 USING PORTMIDI:
 =============================================================================
 
-PortMidi has been created using a DLL because the Win32 MMedia API doesn't 
-handle midiInput properly in the debugger. Specifically, it doesn't clean up
-after itself if the user (i.e. you, a PortMidi application) hasn't explicitly
-closed all open midi input devices. This lack of cleanup can lead to much
-pain and agony, including the blue-screen-of-death. This situation becomes
-increasingly unacceptable when you are debugging your code, so a portMidi DLL
-seemed to be the most elegant solution.
-
 Using Microsoft Visual C++ project files (provided with PortMidi), there
 are two configurations of the PortMidi library. The Debug version is 
 intended for debugging, especially in a console application. The Debug
@@ -33,14 +37,14 @@ is both optimized and lacking the debugging printout code of the Debug
 version.
 
 Read the portmidi.h file for PortMidi API details on using the PortMidi API.
-See <...>\pm_dll_test\test.c or <...>\multithread\test.c for usage examples.
+See <...>\pm_test\test.c and other files in pm_test for usage examples.
 
 =============================================================================
 TO INSTALL PORTMIDI:
 =============================================================================
-1)  download portmidi.zip
+1)  get current source from the portmedia project at SourceForge.net
 
-2)  unzip portmidi.zip into directory: <...>\portmidi
+2)  copy source into directory: <...>\portmidi
 
 =============================================================================
 TO COMPILE PORTMIDI:
@@ -48,58 +52,104 @@ TO COMPILE PORTMIDI:
 
 3)  cd to or open the portmidi directory
 
-4)  start or click on the portmidi.dsw workspace
-
+4)  start or click on the portmidi.sln workspace (note, all Visual Studio
+    files are built by CMake. If you need a different version or have
+    problems with paths, try rebuilding the Visual Studio project files
+    using CMake -- See "Using other versions of visual C++" below.)
+	
 5)  the following projects exist within this workspace:
-    - portmidi (the PortMidi library)
-	- pm_dll (the dll library used to close midi ports on program exit)
-	- porttime (a small portable library implementing timer facilities)
-	- test (simple midi I/O testing)
-	- multithread (an example illustrating low-latency MIDI processing
-            using a dedicated low-latency thread)
-	- sysex (simple sysex message I/O testing)
-	- latency (uses porttime to measure system latency)
-
-6)  verify that all project settings are for Win32 Debug release:
-	- type Alt-F7
-	- highlight all three projects in left part of Project Settings window; 
-	- "Settings For" should say "Win32 Debug"
-
-7)  use Build->Batch Build ... to build everything in the project
-
-8)  The settings for these projects were distributed in the zip file, so
+    - portmidi-static, portmidi-dynamic (versions of the PortMidi library)
+    - test (simple midi I/O testing)
+    - midithread (an example illustrating low-latency MIDI processing
+        using a dedicated low-latency thread)
+    - sysex (simple sysex message I/O testing)
+    - latency (uses porttime to measure system latency)
+    - midithru (an example illustrating software MIDI THRU)
+    - qtest (a test of the new multicore-safe queue implementation)
+    - mm  (allows monitoring of midi messages)
+    - pmjni (a dll to provide an interface to PortMidi for Java)
+
+6)  set the Java SDK path using one of two methods:
+    Method 1: open portmidi/CMakeLists.txt with CMake, configure, and 
+        generate -- this should find the Java SDK path and update your
+            solution and project files
+    Method 2: (does not require CMake):
+        - open the pmjni project properties
+        - visit Configuration Properties, C/C++, General
+        - find Additional Include Directories property and open the editor (...)
+        - at the end of the list, you will find two paths mentioning Java
+        - these are absolute paths to the Java SDK; you'll need to install the
+          Java SDK (from Sun) and update these directories in order to build
+          this project.
+        - similarly, the Linker->Input->Additional Dependencies list has a
+          path to the jvm.lib file, which needs to be correct(ed).
+
+6)  use Build->Batch Build ... to build everything in the project. If a 
+    build fails, try building again. There seem to be some missing 
+    dependencies, so you may have to "ALL_BUILD" several times before
+    everything builds successfully.
+	
+7)  The settings for these projects were distributed in the zip file, so
     compile should just work.
 
-9)  IMPORTANT! PortMidi uses a DLL, pm_dll.dll, but there is no simple way
-    to set up projects to use pm_dll. THEREFORE, you need to copy DLLs
-    as follows (you can do this with <...>\portmidi\pm_win\copy-dll.bat):
-        copy <...>\portmidi\pm_win\Debug\pm_dll.dll to:
-            <...>\portmidi\pm_test\latencyDebug\pm_dll.dll
-            <...>\portmidi\pm_test\midithreadDebug\pm_dll.dll
-            <...>\portmidi\pm_test\sysexDebug\pm_dll.dll
-            <...>\portmidi\pm_test\testDebug\pm_dll.dll
-            <...>\portmidi\pm_test\midithruDebug\pm_dll.dll
-        and copy <...>\portmidi\pm_win\Release\pm_dll.dll to:
-            <...>\portmidi\pm_test\latencyRelease\pm_dll.dll
-            <...>\portmidi\pm_test\midithreadRelease\pm_dll.dll
-            <...>\portmidi\pm_test\sysexRelease\pm_dll.dll
-            <...>\portmidi\pm_test\testRelease\pm_dll.dll
-            <...>\portmidi\pm_test\midithruRelease\pm_dll.dll
-    each time you rebuild the pm_dll project, these copies must be redone!
-
-    Since Windows will look in the executable directory for DLLs, we 
-    recommend that you always install a copy of pm_dll.dll (either the
-    debug version or the release version) in the same directory as the
-    application using PortMidi. The release DLL is about 40KB. This will 
-    ensure that the application uses the correct DLL.
-
-10) run test project; use the menu that shows up from the command prompt to
+8)  run test project; use the menu that shows up from the command prompt to
     test that portMidi works on your system. tests include: 
 		- verify midi output works
 		- verify midi input works
-		- verify midi input w/midi thru works
 
-11) run other projects if you wish: sysex, latency, midithread, mm, qtest
+9) run other projects if you wish: sysex, latency, midithread, mm, 
+    qtest, midithru
+
+10) compile the java code:
+    - cd pm_java
+    - make.bat
+        + If there is a problem running javac, note that you must have
+          a path to javac.exe on your PATH environment variable. Edit
+          your path (in Vista) using Control Panel > User Accounts > 
+          User Accounts > Change my environment variables; then select
+          Path and click Edit... After changing, you will have to 
+          restart the command window to see any effect.
+        + In Vista, you may get a warning about running 
+          UpdateRsrcJavaExe.exe. This is called by make.bat, and you
+          should allow the program to run.
+        + Note that make.bat does not build pmjni\jportmidi_JPortMidiApi.h
+          because it is included in the distribution. You can rebuild it 
+          from sources as follows:
+              cd pm_java
+              javah jportmidi.JPortMidiApi
+              move jportmidi_JPortMidiApi pmjni\jportmidi_JPortMidiApi.h
+       
+11) you might wish to move pm_java/win32 to another location; run the
+    pmdefaults.exe program from the (entire) win32 directory to use 
+    PmDefaults. This program let's you select default input/output 
+    midi devices for PortMidi applications.
+
+============================================================================
+ABOUT CMAKE
+============================================================================
+
+cmake was used to generate .vcproj files. cmake embeds absolute paths
+into .vcproj files, which makes the files non-portable to other systems.
+To work around this problem, pm_win\clean_up_vcproj.bat can be used to 
+replace absolute paths with relative paths. To use it, you will need to
+install gawk and set your search path to allow you to execute gawk, e.g. 
+my path includes "C:\Program Files\GnuWin32\bin;". You will also need to
+edit pm_win\clean_up_vcproj.awk, replacing C:\Users\rbd\portmidi with
+whatever absolute path cmake uses in your vcproj files.
+
+This is not a general or robust fix, but it seems to work with the 
+vcproj files currently created by CMake.
+
+============================================================================
+USING OTHER VERSIONS OF VISUAL C++
+============================================================================
+
+You can use cmake to make Visual Studio solution and project files.
+If you do not want to use the provided Version 9 project files, install
+cmake, run it, set the "Where is the source code" box to your portmidi
+directory, and click on Configure. A menu will allow you to choose the
+Visual Studio project version you want. Click Configure once again, then
+Generate, and you should be all set to open portmidi.sln.
 
 ============================================================================
 TO CREATE YOUR OWN PORTMIDI CLIENT APPLICATION:
@@ -119,43 +169,35 @@ The easiest way is to start a new project w/in the portMidi workspace:
       in the next step)
 	- Click OK
 	- Select "An Empty Project" and click Finish
-
+	
+	In Visual C++ 2005 Express Edition, 
+	- File->New->Projects
+	- Location: <...>\portmidi\<yourProjectName>
+	- select Add to solution
+	- select CLR Empty project in CLR
+	- select Win32 Console Application in Win32
+	- select Empty project in General
+	
 2) Now this project will be the active project. Make it explicitly depend
    on PortMidi dll:
 	- Project->Dependencies
 	- Click pm_dll
 
-3) Important! in order to be able to use portMidi DLL from your new project
-   and set breakpoints,	copy following files from <...>\pm_dll\Debug into 
-   <...>\<yourProjectName>\Debug directory:
-		pm_dll.lib
-		pm_dll.dll
-    each time you rebuild pm_dll, these copies must be redone!
-
-4) add whatever files you wish to add to your new project, using portMidi
+3) add whatever files you wish to add to your new project, using portMidi
    calls as desired (see USING PORTMIDI at top of this readme)
 
-5) when you include portMidi files, do so like this:
-	- #include "..\pm_dll\portmidi.h"
+4) when you include portMidi files, do so like this:
+	- #include "..\pm_common\portmidi.h"
 	- etc.
 
-6) build and run your project
+5) build and run your project
 
 ============================================================================
 DESIGN NOTES
 ============================================================================
 
-The DLL is used so that PortMidi can (usually) close open devices when the
-program terminates. Failure to close input devices under WinNT, Win2K, and
-probably later systems causes the OS to crash.
-
-This is accomplished with a .LIB/.DLL pair, linking to the .LIB
-in order to access functions in the .DLL. 
-
-PortMidi for Win32 exists as a simple library,
+PortMidi for Win32 exists as a simple static library,
 with Win32-specific code in pmwin.c and MM-specific code in pmwinmm.c.
-pmwin.c uses a DLL in pmdll.c to call Pm_Terminate() when the program
-exits to make sure that all MIDI ports are closed.
 
 Orderly cleanup after errors are encountered is based on a fixed order of
 steps and state changes to reflect each step. Here's the order:
@@ -171,10 +213,8 @@ To open input:
         set descriptor field of PmInternal structure
         - open device
         set handle field of midiwinmm_type structure
-        - allocate buffer 1 for sysex
-        buffer is added to input port
-        - allocate buffer 2 for sysex
-        buffer is added to input port
+        - allocate buffers
+        - start device
         - return
     - return
 
@@ -287,5 +327,15 @@ part of PortMidi is allowed to directly copy sysex bytes to
 "fill_base[*fill_offset_ptr++]" until *fill_offset_ptr reaches
 fill_length. See the code for details.
 
+-----------
+
+Additional notes on using VS 2005 (maybe this is obsolete now?):
+
+1) Make sure "Configuration: All Configurations" is selected in all of the following Properties modifications!
+
+2) In my case the project defaulted to compiling all .c files with the C++ compiler, which was disastrous. I had to go to set Properties for each file, to wit: Expand Configuration Properties, Expand C/C++, Select Advanced, set the Compile As popup to Compile as C Code (/TC). (For better or worse, the project I inherited has a bunch of .c files that rely on C++ features, so I couldn't reliably set this the project properties level.)
+
+3) While you're there, make sure that the C/C++ -> General -> "Compile with Common Language Runtime support" is set to "No Common Language Runtime support" (the C compiler *can't* support CLR, but VS won't do anything useful like automatically set the two options to match)-.
+
+4) I never got VS precompiled header thing to work sensibly, so I took the path of least resistance and turned PCH's off for all my files. Properties -> Configuration Properties -> C/C++ -> Precompiled Headers -> Create/Use Precompiled Header popup set to "Not Using Precompiled Headers". The compiler is reasonably fast even if it has to parse all the header files, so unless someone wants to explain VS's PCHs to me, the hell with it, I say.
 
-  
\ No newline at end of file
diff --git a/pd/portmidi/pm_win/clean_cmake.bat b/pd/portmidi/pm_win/clean_cmake.bat
new file mode 100644
index 000000000..6bf4b68e0
--- /dev/null
+++ b/pd/portmidi/pm_win/clean_cmake.bat
@@ -0,0 +1,6 @@
+del /Q ..\CMakeFiles
+del /Q ..\CMakeCache.txt
+del /Q ..\pm_test\CMakeFiles
+del /Q ..\pm_common\CMakeFiles
+del /Q ..\pm_dylib\CMakeFiles
+
diff --git a/pd/portmidi/pm_win/clean_up_vcproj.awk b/pd/portmidi/pm_win/clean_up_vcproj.awk
new file mode 100644
index 000000000..a3eadfcb8
--- /dev/null
+++ b/pd/portmidi/pm_win/clean_up_vcproj.awk
@@ -0,0 +1,70 @@
+# gawk script to convert CMake-generated Visual Studio projects into
+# stand-alone project files
+#
+# Roger Dannenberg, October 2009
+#
+# the result uses relative path names (so you can install the project on 
+# any machine and use it)
+#
+# NOTE: to run this, you must assign base_relative to the relative path
+# from the vcproj file to portmidi, e.g. base_relative=.. or base_relative=.
+
+BEGIN {
+    state = "normal";
+    #=================IMPORTANT====================
+    # change the following path to the path in which
+    # the CMakeLists.txt file resides:
+    base_path = "C:\\\\Users\\\\rbd\\\\portmedia\\\\portmidi";
+    #==============================================
+
+    base_path_2 = base_path;
+    gsub("\\\\\\\\", "/", base_path_2)
+    cmake_stuff = 0; # flag to print <file> ... </file> text
+}
+# this case removes CMake phases from project
+state == "cmakelists" {
+    # print "IN CMAKELISTS " 
+    file_text = file_text "\n" $0 # collect the <file> ... </file> section
+    if (index($0, "CMakeLists.txt") > 0) { 
+        cmake_stuff = 1 # remember to delete this <file> ... </file> section
+    }
+
+    if (index($0, "</File>") > 0) { 
+        state = "normal";
+        if (cmake_stuff == 0) {
+            gsub(base_path, base_relative, file_text)
+            gsub(base_path_2, base_relative, file_text)
+            print file_text;
+        }
+        cmake_stuff = 0;
+    };
+    next
+}
+
+# this is the normal case, not in buildPhases list
+state == "normal" {
+    # print "NOT IN BUILD PHASES"
+    # take out all the absolute paths
+    gsub(base_path, base_relative, $0); 
+    gsub(base_path_2, base_relative, $0); 
+    # special processing for <file> ... </file> text:
+    if ($0 ~ "<File$") {
+        file_text = $0;
+        cmake_stuff = 0; # innocent (keep text) until proven guilty
+        state = "cmakelists";
+        next # do not print this line
+    };
+    # THIS CODE WOULD ALLOW portmidi-static and portmidi-dynamic IN
+    # pm_commmon. I DECIDED TO TRY PUTTING THEM IN SEPARATE DIRECTORIES
+    # INSTEAD.
+    # Use static libraries for everything except portmidi-dynamic
+    #if (($0 ~ "RuntimeLibrary=") && (base_relative ~ "dynamic")) {
+    #    if ($0 ~ 2) {
+    #        $0 = "\t\t\t\tRuntimeLibrary=\"0\"";
+    #    } else if ($0 ~ 3) {
+    #        $0 = "\t\t\t\tRuntimeLibrary=\"1\"";
+    #    }
+    print $0;
+    next
+}
+
diff --git a/pd/portmidi/pm_win/clean_up_vcproj.bat b/pd/portmidi/pm_win/clean_up_vcproj.bat
new file mode 100644
index 000000000..1919246d7
--- /dev/null
+++ b/pd/portmidi/pm_win/clean_up_vcproj.bat
@@ -0,0 +1,76 @@
+@echo off
+rem Start this program in portmidi\pm_win
+cd ..\pm_common
+
+rename portmidi-static.vcproj portmidi-static.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. portmidi-static.vcproj-cmake > portmidi-static.vcproj
+del portmidi-static.vcproj-cmake
+echo portmidi-static
+
+rename pmjni.vcproj pmjni.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. pmjni.vcproj-cmake > pmjni.vcproj
+del pmjni.vcproj-cmake
+echo pmjni
+
+cd ../pm_dylib
+
+rename portmidi-dynamic.vcproj portmidi-dynamic.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. portmidi-dynamic.vcproj-cmake > portmidi-dynamic.vcproj
+del portmidi-dynamic.vcproj-cmake
+echo portmidi-dynamic
+
+cd ..\pm_test
+
+rename latency.vcproj latency.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. latency.vcproj-cmake > latency.vcproj
+del latency.vcproj-cmake
+echo latency
+
+rename midiclock.vcproj midiclock.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. midiclock.vcproj-cmake > midiclock.vcproj
+del midiclock.vcproj-cmake
+echo midiclock
+
+rename midithread.vcproj midithread.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. midithread.vcproj-cmake > midithread.vcproj
+del midithread.vcproj-cmake
+echo midithread
+
+rename midithru.vcproj midithru.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. midithru.vcproj-cmake > midithru.vcproj
+del midithru.vcproj-cmake
+echo midithru
+
+rename mm.vcproj mm.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. mm.vcproj-cmake > mm.vcproj
+del mm.vcproj-cmake
+echo mm
+
+rename qtest.vcproj qtest.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. qtest.vcproj-cmake > qtest.vcproj
+del qtest.vcproj-cmake
+echo qtest
+
+rename sysex.vcproj sysex.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. sysex.vcproj-cmake > sysex.vcproj
+del sysex.vcproj-cmake
+echo sysex
+
+rename test.vcproj test.vcproj-cmake
+gawk -f ..\pm_win\clean_up_vcproj.awk -v base_relative=.. test.vcproj-cmake > test.vcproj
+del test.vcproj-cmake
+
+cd ..
+echo test
+
+rename ALL_BUILD.vcproj ALL_BUILD.vcproj-cmake
+gawk -f pm_win\clean_up_vcproj.awk -v base_relative=. ALL_BUILD.vcproj-cmake > ALL_BUILD.vcproj
+del ALL_BUILD.vcproj-cmake
+echo ALL_BUILD
+
+rename ZERO_CHECK.vcproj ZERO_CHECK.vcproj-cmake
+gawk -f pm_win\clean_up_vcproj.awk -v base_relative=. ZERO_CHECK.vcproj-cmake > ZERO_CHECK.vcproj
+del ZERO_CHECK.vcproj-cmake
+echo ZERO_CHECK
+
+cd pm_win
diff --git a/pd/portmidi/pm_win/copy-dll.bat b/pd/portmidi/pm_win/copy-dll.bat
deleted file mode 100644
index 7c55fff3d..000000000
--- a/pd/portmidi/pm_win/copy-dll.bat
+++ /dev/null
@@ -1,17 +0,0 @@
-copy Debug\pm_dll.dll ..\pm_test\testDebug\pm_dll.dll
-copy Debug\pm_dll.dll ..\pm_test\sysexDebug\pm_dll.dll
-copy Debug\pm_dll.dll ..\pm_test\midithreadDebug\pm_dll.dll
-copy Debug\pm_dll.dll ..\pm_test\latencyDebug\pm_dll.dll
-copy Debug\pm_dll.dll ..\pm_test\midithruDebug\pm_dll.dll
-copy Debug\pm_dll.dll ..\pm_test\qtestDebug\pm_dll.dll
-copy Debug\pm_dll.dll ..\pm_test\mmDebug\pm_dll.dll
-
-copy Release\pm_dll.dll ..\pm_test\testRelease\pm_dll.dll
-copy Release\pm_dll.dll ..\pm_test\sysexRelease\pm_dll.dll
-copy Release\pm_dll.dll ..\pm_test\midithreadRelease\pm_dll.dll
-copy Release\pm_dll.dll ..\pm_test\latencyRelease\pm_dll.dll
-copy Release\pm_dll.dll ..\pm_test\midithruRelease\pm_dll.dll
-copy Release\pm_dll.dll ..\pm_test\qtestRelease\pm_dll.dll
-copy Release\pm_dll.dll ..\pm_test\mmRelease\pm_dll.dll
-
-
diff --git a/pd/portmidi/pm_win/debugging_dlls.txt b/pd/portmidi/pm_win/debugging_dlls.txt
old mode 100644
new mode 100755
diff --git a/pd/portmidi/pm_win/pm_dll.dsp b/pd/portmidi/pm_win/pm_dll.dsp
deleted file mode 100644
index 77218ccb1..000000000
--- a/pd/portmidi/pm_win/pm_dll.dsp
+++ /dev/null
@@ -1,107 +0,0 @@
-# Microsoft Developer Studio Project File - Name="pm_dll" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=pm_dll - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE 
-!MESSAGE NMAKE /f "pm_dll.mak".
-!MESSAGE 
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE 
-!MESSAGE NMAKE /f "pm_dll.mak" CFG="pm_dll - Win32 Debug"
-!MESSAGE 
-!MESSAGE Possible choices for configuration are:
-!MESSAGE 
-!MESSAGE "pm_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "pm_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE 
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF  "$(CFG)" == "pm_dll - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PM_DLL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PM_DLL_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "NDEBUG"
-# ADD RSC /l 0x409 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-
-!ELSEIF  "$(CFG)" == "pm_dll - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 1
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "PM_DLL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "pm_common" /D "_WINDOWS" /D "_USRDLL" /D "PM_DLL_EXPORTS" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "USE_DLL_FOR_CLEANUP" /FR /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x409 /d "_DEBUG"
-# ADD RSC /l 0x409 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-
-!ENDIF 
-
-# Begin Target
-
-# Name "pm_dll - Win32 Release"
-# Name "pm_dll - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=.\pmdll.c
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=.\pmdll.h
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/pd/portmidi/pm_win/pmdll.c b/pd/portmidi/pm_win/pmdll.c
deleted file mode 100644
index c3acba33e..000000000
--- a/pd/portmidi/pm_win/pmdll.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
-====================================================================
-DLL to perform action when program shuts down
-====================================================================
-*/
-
-#include "windows.h"
-#include "pmdll.h"
-
-static close_fn_ptr_type close_function = NULL;
-
-
-DLL_EXPORT pm_set_close_function(close_fn_ptr_type close_fn_ptr)
-{
-    close_function = close_fn_ptr;
-}
-
-
-static void Initialize( void ) {
-    return;
-}
-
-static void Terminate( void ) {
-    if (close_function) {
-        (*close_function)();
-    }
-}
-
-
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, //DLL module handle
-					DWORD fdwReason,	//for calling function
-					LPVOID lbpvReserved)//reserved
-{
-	switch(fdwReason) {
-		case DLL_PROCESS_ATTACH:
-			/* when DLL starts, run this */
-			Initialize();
-			break;
-		case DLL_PROCESS_DETACH:
-			/* when DLL ends, this run (note: verified this	run */
-			Terminate();
-			break;
-		default:
-			break;
-	}
-	return TRUE;
-}
-
-
diff --git a/pd/portmidi/pm_win/pmdll.h b/pd/portmidi/pm_win/pmdll.h
deleted file mode 100644
index e5ad1c5bd..000000000
--- a/pd/portmidi/pm_win/pmdll.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#define DLL_EXPORT __declspec( dllexport )
-
-typedef void (*close_fn_ptr_type)();
-
-DLL_EXPORT pm_set_close_function(close_fn_ptr_type close_fn_ptr);
diff --git a/pd/portmidi/pm_win/pmwin.c b/pd/portmidi/pm_win/pmwin.c
old mode 100644
new mode 100755
index 716b68fa5..5b4dec63f
--- a/pd/portmidi/pm_win/pmwin.c
+++ b/pd/portmidi/pm_win/pmwin.c
@@ -9,6 +9,7 @@
    be separate from the main portmidi.c file because it is system
    dependent, and it is separate from, say, pmwinmm.c, because it
    might need to register devices for winmm, directx, and others.
+
  */
 
 #include "stdlib.h"
@@ -16,12 +17,10 @@
 #include "pmutil.h"
 #include "pminternal.h"
 #include "pmwinmm.h"
-#ifdef USE_DLL_FOR_CLEANUP
-#include "pmdll.h" /* used to close ports on exit */
-#endif
 #ifdef DEBUG
 #include "stdio.h"
 #endif
+#include <windows.h>
 
 /* pm_exit is called when the program exits.
    It calls pm_term to make sure PortMidi is properly closed.
@@ -45,20 +44,9 @@ static void pm_exit(void) {
 /* pm_init is the windows-dependent initialization.*/
 void pm_init(void)
 {
-#ifdef USE_DLL_FOR_CLEANUP
-    /* we were hoping a DLL could offer more robust cleanup after errors,
-       but the DLL does not seem to run after crashes. Thus, the atexit()
-       mechanism is just as powerful, and simpler to implement.
-     */
-    pm_set_close_function(pm_exit);
-#ifdef DEBUG
-    printf("registered pm_term with cleanup DLL\n");
-#endif
-#else
     atexit(pm_exit);
 #ifdef DEBUG
     printf("registered pm_exit with atexit()\n");
-#endif
 #endif
     pm_winmm_init();
     /* initialize other APIs (DirectX?) here */
@@ -70,37 +58,77 @@ void pm_term(void) {
 }
 
 
-PmDeviceID Pm_GetDefaultInputDeviceID() {
-    /* This routine should check the environment and the registry
-       as specified in portmidi.h, but for now, it just returns
-       the first device of the proper input/output flavor.
-     */
-    int i;
+static PmDeviceID pm_get_default_device_id(int is_input, char *key) {
+    HKEY hkey;
+#define PATTERN_MAX 256
+    char pattern[PATTERN_MAX];
+    long pattern_max = PATTERN_MAX;
+    DWORD dwType;
+    /* Find first input or device -- this is the default. */
+    PmDeviceID id = pmNoDevice;
+    int i, j;
     Pm_Initialize(); /* make sure descriptors exist! */
     for (i = 0; i < pm_descriptor_index; i++) {
-        if (descriptors[i].pub.input) {
-            return i;
+        if (descriptors[i].pub.input == is_input) {
+            id = i;
+            break;
         }
     }
-    return pmNoDevice;
+    /* Look in registry for a default device name pattern. */
+    if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software", 0, KEY_READ, &hkey) != 
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegOpenKeyEx(hkey, "JavaSoft", 0, KEY_READ, &hkey) !=
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegOpenKeyEx(hkey, "Prefs", 0, KEY_READ, &hkey) !=
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegOpenKeyEx(hkey, "/Port/Midi", 0, KEY_READ, &hkey) !=
+        ERROR_SUCCESS) {
+        return id;
+    }
+    if (RegQueryValueEx(hkey, key, NULL, &dwType, pattern, &pattern_max) != 
+	ERROR_SUCCESS) {
+        return id;
+    }
+
+    /* decode pattern: upper case encoded with "/" prefix */
+    i = j = 0;
+    while (pattern[i]) {
+        if (pattern[i] == '/' && pattern[i + 1]) {
+            pattern[j++] = toupper(pattern[++i]);
+	} else {
+            pattern[j++] = tolower(pattern[i]);
+	}
+        i++;
+    }
+    pattern[j] = 0; /* end of string */
+
+    /* now pattern is the string from the registry; search for match */
+    i = pm_find_default_device(pattern, is_input);
+    if (i != pmNoDevice) {
+        id = i;
+    }
+    return id;
 }
 
+
+PmDeviceID Pm_GetDefaultInputDeviceID() {
+    return pm_get_default_device_id(TRUE, 
+           "/P/M_/R/E/C/O/M/M/E/N/D/E/D_/I/N/P/U/T_/D/E/V/I/C/E");
+}
+
+
 PmDeviceID Pm_GetDefaultOutputDeviceID() {
-    /* This routine should check the environment and the registry
-       as specified in portmidi.h, but for now, it just returns
-       the first device of the proper input/output flavor.
-     */
-    int i;
-    Pm_Initialize(); /* make sure descriptors exist! */
-    for (i = 0; i < pm_descriptor_index; i++) {
-        if (descriptors[i].pub.output) {
-            return i;
-        }
-    }
-    return pmNoDevice;
-    return 0;
+  return pm_get_default_device_id(FALSE,
+          "/P/M_/R/E/C/O/M/M/E/N/D/E/D_/O/U/T/P/U/T_/D/E/V/I/C/E");
 }
 
+
 #include "stdio.h" 
 
 void *pm_alloc(size_t s) {
@@ -112,3 +140,4 @@ void pm_free(void *ptr) {
     free(ptr); 
 }
 
+
diff --git a/pd/portmidi/pm_win/pmwinmm.c b/pd/portmidi/pm_win/pmwinmm.c
old mode 100644
new mode 100755
index 395b1134c..ab66f80dc
--- a/pd/portmidi/pm_win/pmwinmm.c
+++ b/pd/portmidi/pm_win/pmwinmm.c
@@ -1,24 +1,28 @@
 /* pmwinmm.c -- system specific definitions */
 
-/* without this define, InitializeCriticalSectionAndSpinCount is undefined */
-/* this version level means "Windows 2000 and higher" */
-#define _WIN32_WINNT 0x0500
+#ifdef _MSC_VER
+ #pragma warning(disable: 4133) // stop warnings about implicit typecasts
+#endif
+
+#ifndef _WIN32_WINNT
+    /* without this define, InitializeCriticalSectionAndSpinCount is 
+     * undefined. This version level means "Windows 2000 and higher" 
+     */
+    #define _WIN32_WINNT 0x0500
+#endif
 
 #include "windows.h"
 #include "mmsystem.h"
 #include "portmidi.h"
-#ifdef NEWBUFFER
 #include "pmutil.h"
-#endif
 #include "pminternal.h"
 #include "pmwinmm.h"
-#include "string.h"
+#include <string.h>
 #include "porttime.h"
 
 /* asserts used to verify portMidi code logic is sound; later may want
     something more graceful */
 #include <assert.h>
-#define DEBUG 1
 #ifdef DEBUG
 /* this printf stuff really important for debugging client app w/host errors.
     probably want to do something else besides read/write from/to console
@@ -39,9 +43,11 @@ static void CALLBACK winmm_in_callback(HMIDIIN hMidiIn,
 static void CALLBACK winmm_streamout_callback(HMIDIOUT hmo, UINT wMsg,
                                               DWORD dwInstance, DWORD dwParam1, 
                                               DWORD dwParam2);
+#ifdef USE_SYSEX_BUFFERS
 static void CALLBACK winmm_out_callback(HMIDIOUT hmo, UINT wMsg,
                                         DWORD dwInstance, DWORD dwParam1, 
                                         DWORD dwParam2);
+#endif
 
 extern pm_fns_node pm_winmm_in_dictionary;
 extern pm_fns_node pm_winmm_out_dictionary;
@@ -158,8 +164,8 @@ static void pm_winmm_general_inputs()
     UINT i;
     WORD wRtn;
     midi_num_inputs = midiInGetNumDevs();
-    midi_in_caps = pm_alloc(sizeof(MIDIINCAPS) * midi_num_inputs);
-
+    midi_in_caps = (MIDIINCAPS *) pm_alloc(sizeof(MIDIINCAPS) * 
+                                           midi_num_inputs);
     if (midi_in_caps == NULL) {
         /* if you can't open a particular system-level midi interface
          * (such as winmm), we just consider that system or API to be
@@ -575,11 +581,12 @@ static PmError winmm_in_open(PmInternal *midi, void *driverInfo)
      */
     InitializeCriticalSectionAndSpinCount(&m->lock, 4000);
     /* open device */
-    pm_hosterror = midiInOpen(&(m->handle.in),  /* input device handle */
-                              dwDevice,  /* device ID */
-                              (DWORD) winmm_in_callback,  /* callback address */
-                              (DWORD) midi,  /* callback instance data */
-                              CALLBACK_FUNCTION); /* callback is a procedure */
+    pm_hosterror = midiInOpen(
+	    &(m->handle.in),  /* input device handle */
+	    dwDevice,  /* device ID */
+	    (DWORD_PTR) winmm_in_callback,  /* callback address */
+	    (DWORD_PTR) midi,  /* callback instance data */
+	    CALLBACK_FUNCTION); /* callback is a procedure */
     if (pm_hosterror) goto free_descriptor;
 
     if (num_input_buffers < MIN_INPUT_BUFFERS)
@@ -668,22 +675,29 @@ static void FAR PASCAL winmm_in_callback(
     PmInternal *midi = (PmInternal *) dwInstance;
     midiwinmm_type m = (midiwinmm_type) midi->descriptor;
 
-    /* if this callback is reentered with data, we're in trouble. It's hard
-     * to imagine that Microsoft would allow callbacks to be reentrant --
-     * isn't the model that this is like a hardware interrupt? -- but I've
-     * seen reentrant behavior using a debugger, so it happens.
+    /* NOTE: we do not just EnterCriticalSection() here because an
+     * MIM_CLOSE message arrives when the port is closed, but then
+     * the m->lock has been destroyed.
      */
-    EnterCriticalSection(&m->lock);
 
     switch (wMsg) {
     case MIM_DATA: {
+        /* if this callback is reentered with data, we're in trouble. 
+         * It's hard to imagine that Microsoft would allow callbacks 
+         * to be reentrant -- isn't the model that this is like a 
+         * hardware interrupt? -- but I've seen reentrant behavior 
+         * using a debugger, so it happens.
+         */
+        long new_driver_time;
+        EnterCriticalSection(&m->lock);
+
         /* dwParam1 is MIDI data received, packed into DWORD w/ 1st byte of
                 message LOB;
            dwParam2 is time message received by input device driver, specified
             in [ms] from when midiInStart called.
            each message is expanded to include the status byte */
 
-        long new_driver_time = dwParam2;
+        new_driver_time = dwParam2;
 
         if ((dwParam1 & 0x80) == 0) {
             /* not a status byte -- ignore it. This happened running the
@@ -699,13 +713,16 @@ static void FAR PASCAL winmm_in_callback(
             event.message = dwParam1;
             pm_read_short(midi, &event);
         }
+        LeaveCriticalSection(&m->lock);
         break;
     }
     case MIM_LONGDATA: {
         MIDIHDR *lpMidiHdr = (MIDIHDR *) dwParam1;
-        unsigned char *data = lpMidiHdr->lpData;
+        unsigned char *data = (unsigned char *) lpMidiHdr->lpData;
         unsigned int processed = 0;
         int remaining = lpMidiHdr->dwBytesRecorded;
+
+        EnterCriticalSection(&m->lock);
         /* printf("midi_in_callback -- lpMidiHdr %x, %d bytes, %2x...\n", 
                 lpMidiHdr, lpMidiHdr->dwBytesRecorded, *data); */
         if (midi->time_proc)
@@ -718,56 +735,30 @@ static void FAR PASCAL winmm_in_callback(
             remaining -= amt;
             processed += amt;
         }
-#ifdef DELETE_THIS
-        unsigned int i = 0;
-        long size = sizeof(MIDIHDR) + lpMidiHdr->dwBufferLength;
-
-        while (i < lpMidiHdr->dwBytesRecorded) {
-            /* optimization: if message_count == 0, we are on an (output)
-             * message boundary so we can transfer data directly to the
-             * queue
-             */
-            PmEvent event;
-            if (midi->sysex_message_count == 0 &&
-                !midi->flush &&
-                i <= lpMidiHdr->dwBytesRecorded - 4 &&
-                ((event.message = (((long) data[0]) | 
-                        (((long) data[1]) << 8) | (((long) data[2]) << 16) |
-                        (((long) data[3]) << 24))) &
-                 0x80808080) == 0) { /* all data, no status */
-                event.timestamp = dwParam2;
-                if (Pm_Enqueue(midi->queue, &event) == pmBufferOverflow) {
-                    midi->flush = TRUE;
-                }
-                i += 4;
-                data += 4;
-            /* non-optimized: process one byte at a time. This is used to 
-             * handle any embedded SYSEX or EOX bytes and to finish */
-            } else {
-                pm_read_byte(midi, *data, dwParam2);
-                data++;
-                i++;
-            }
-        }
-#endif
+
         /* when a device is closed, the pending MIM_LONGDATA buffers are
            returned to this callback with dwBytesRecorded == 0. In this
            case, we do not want to send them back to the interface (if
            we do, the interface will not close, and Windows OS may hang). */
         if (lpMidiHdr->dwBytesRecorded > 0) {
+            MMRESULT rslt;
             lpMidiHdr->dwBytesRecorded = 0;
             lpMidiHdr->dwFlags = 0;
+			
             /* note: no error checking -- can this actually fail? */
-            assert(midiInPrepareHeader(hMidiIn, lpMidiHdr, 
-                        sizeof(MIDIHDR)) == MMSYSERR_NOERROR);
+            rslt = midiInPrepareHeader(hMidiIn, lpMidiHdr, sizeof(MIDIHDR));
+            assert(rslt == MMSYSERR_NOERROR);
             /* note: I don't think this can fail except possibly for
              * MMSYSERR_NOMEM, but the pain of reporting this
              * unlikely but probably catastrophic error does not seem
              * worth it.
              */
-            assert(midiInAddBuffer(hMidiIn, lpMidiHdr, 
-                        sizeof(MIDIHDR)) == MMSYSERR_NOERROR);
+            rslt = midiInAddBuffer(hMidiIn, lpMidiHdr, sizeof(MIDIHDR));
+            assert(rslt == MMSYSERR_NOERROR);
+            LeaveCriticalSection(&m->lock);
         } else {
+            midiInUnprepareHeader(hMidiIn,lpMidiHdr,sizeof(MIDIHDR));
+            LeaveCriticalSection(&m->lock);
             pm_free(lpMidiHdr);
         }
         break;
@@ -785,7 +776,6 @@ static void FAR PASCAL winmm_in_callback(
     default:
         break;
     }
-    LeaveCriticalSection(&m->lock);
 }
 
 /*
@@ -874,20 +864,22 @@ static PmError winmm_out_open(PmInternal *midi, void *driverInfo)
     /* open device */
     if (midi->latency == 0) {
         /* use simple midi out calls */
-        pm_hosterror = midiOutOpen((LPHMIDIOUT) & m->handle.out,  /* device Handle */
-                                   dwDevice,  /* device ID  */
-                                   /* note: same callback fn as for StreamOpen: */
-                                   (DWORD) winmm_streamout_callback, /* callback fn */
-                                   (DWORD) midi,  /* callback instance data */
-                                   CALLBACK_FUNCTION); /* callback type */
+        pm_hosterror = midiOutOpen(
+                (LPHMIDIOUT) & m->handle.out,  /* device Handle */
+		dwDevice,  /* device ID  */
+		/* note: same callback fn as for StreamOpen: */
+		(DWORD_PTR) winmm_streamout_callback, /* callback fn */
+		(DWORD_PTR) midi,  /* callback instance data */
+		CALLBACK_FUNCTION); /* callback type */
     } else {
         /* use stream-based midi output (schedulable in future) */
-        pm_hosterror = midiStreamOpen(&m->handle.stream,  /* device Handle */
-                                      (LPUINT) & dwDevice,  /* device ID pointer */
-                                      1,  /* reserved, must be 1 */
-                                      (DWORD) winmm_streamout_callback,
-                                      (DWORD) midi,  /* callback instance data */
-                                      CALLBACK_FUNCTION);
+        pm_hosterror = midiStreamOpen(
+	        &m->handle.stream,  /* device Handle */
+		(LPUINT) & dwDevice,  /* device ID pointer */
+		1,  /* reserved, must be 1 */
+		(DWORD_PTR) winmm_streamout_callback,
+		(DWORD_PTR) midi,  /* callback instance data */
+		CALLBACK_FUNCTION);
     }
     if (pm_hosterror != MMSYSERR_NOERROR) {
         goto free_descriptor;
@@ -1215,7 +1207,7 @@ static PmError winmm_write_byte(PmInternal *midi, unsigned char byte,
     if (!hdr) {
         m->hdr = hdr = get_free_output_buffer(midi);
         assert(hdr);
-        midi->fill_base = m->hdr->lpData;
+        midi->fill_base = (unsigned char *) m->hdr->lpData;
         midi->fill_offset_ptr = &(hdr->dwBytesRecorded);
         /* when buffer fills, Pm_WriteSysEx will revert to calling
          * pmwin_write_byte, which expect to have space, so leave
@@ -1319,11 +1311,15 @@ static void CALLBACK winmm_out_callback(HMIDIOUT hmo, UINT wMsg,
        buffers are free, so we need to do something to flag empty buffers if
        we leave them prepared
      */
+    /*
     printf("out_callback: hdr %x, wMsg %x, MOM_DONE %x\n", 
            hdr, wMsg, MOM_DONE);
-    if (wMsg == MOM_DONE)
-    assert(midiOutUnprepareHeader(m->handle.out, hdr,
-                        sizeof(MIDIHDR)) == MMSYSERR_NOERROR);
+    */
+    if (wMsg == MOM_DONE) {
+        MMRESULT ret = midiOutUnprepareHeader(m->handle.out, hdr, 
+                                              sizeof(MIDIHDR));
+        assert(ret == MMSYSERR_NOERROR);
+    }
     /* notify waiting sender that a buffer is available */
     err = SetEvent(m->buffer_signal);
     assert(err); /* false -> error */
@@ -1345,8 +1341,9 @@ static void CALLBACK winmm_streamout_callback(HMIDIOUT hmo, UINT wMsg,
     /* printf("streamout_callback: hdr %x, wMsg %x, MOM_DONE %x\n", 
            hdr, wMsg, MOM_DONE); */
     if (wMsg == MOM_DONE) {
-        assert(midiOutUnprepareHeader(m->handle.out, hdr, 
-                    sizeof(MIDIHDR)) == MMSYSERR_NOERROR);
+        MMRESULT ret = midiOutUnprepareHeader(m->handle.out, hdr, 
+                                              sizeof(MIDIHDR));
+        assert(ret == MMSYSERR_NOERROR);
     }
     /* signal client in case it is blocked waiting for buffer */
     err = SetEvent(m->buffer_signal);
diff --git a/pd/portmidi/pm_win/pmwinmm.h b/pd/portmidi/pm_win/pmwinmm.h
old mode 100644
new mode 100755
diff --git a/pd/portmidi/pm_win/static.cmake b/pd/portmidi/pm_win/static.cmake
new file mode 100644
index 000000000..583b713f0
--- /dev/null
+++ b/pd/portmidi/pm_win/static.cmake
@@ -0,0 +1,16 @@
+# static.cmake -- change flags to link with static runtime libraries
+
+if(MSVC)
+  foreach(flag_var
+    CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
+    CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
+    CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
+    CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
+    if(${flag_var} MATCHES "/MD")
+      string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+    endif(${flag_var} MATCHES "/MD")
+  endforeach(flag_var)
+ 
+  message(STATUS 
+    "Note: overriding CMAKE_*_FLAGS_* to use Visual C static multithread library")
+endif(MSVC)
diff --git a/pd/portmidi/portmidi.sln b/pd/portmidi/portmidi.sln
new file mode 100755
index 000000000..d33fe7fa6
--- /dev/null
+++ b/pd/portmidi/portmidi.sln
@@ -0,0 +1,147 @@
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ALL_BUILD", ".\ALL_BUILD.vcproj", "{E1C2664B-91BB-4D4F-868C-433164F81101}"
+	ProjectSection(ProjectDependencies) = postProject
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+		{41D78CBF-B04B-4561-BA4A-AC238C40633D} = {41D78CBF-B04B-4561-BA4A-AC238C40633D}
+		{9B448D22-EC7E-4BD8-A552-B268D843CC3C} = {9B448D22-EC7E-4BD8-A552-B268D843CC3C}
+		{EED7440D-04E3-4948-92DB-C85B4ADB1D82} = {EED7440D-04E3-4948-92DB-C85B4ADB1D82}
+		{80193DD1-2C02-4A4C-BDF8-49623AD6F556} = {80193DD1-2C02-4A4C-BDF8-49623AD6F556}
+		{EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF} = {EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF}
+		{87B548BD-F5CE-4D1F-9181-390966AC5855} = {87B548BD-F5CE-4D1F-9181-390966AC5855}
+		{7283FAD1-7415-4061-A19A-FF5C7BCE9306} = {7283FAD1-7415-4061-A19A-FF5C7BCE9306}
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{2204E68C-5C1F-440E-8CE6-7E273D4F6AD1} = {2204E68C-5C1F-440E-8CE6-7E273D4F6AD1}
+		{71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD} = {71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD}
+		{0BEACB8B-4058-41A4-A9DE-1B1FB650B21A} = {0BEACB8B-4058-41A4-A9DE-1B1FB650B21A}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZERO_CHECK", ".\ZERO_CHECK.vcproj", "{28779535-7541-4FF5-AC12-FAFD66E894EC}"
+	ProjectSection(ProjectDependencies) = postProject
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "latency", "pm_test\latency.vcproj", "{41D78CBF-B04B-4561-BA4A-AC238C40633D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midiclock", "pm_test\midiclock.vcproj", "{9B448D22-EC7E-4BD8-A552-B268D843CC3C}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midithread", "pm_test\midithread.vcproj", "{EED7440D-04E3-4948-92DB-C85B4ADB1D82}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "midithru", "pm_test\midithru.vcproj", "{80193DD1-2C02-4A4C-BDF8-49623AD6F556}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mm", "pm_test\mm.vcproj", "{EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pmjni", "pm_common\pmjni.vcproj", "{87B548BD-F5CE-4D1F-9181-390966AC5855}"
+	ProjectSection(ProjectDependencies) = postProject
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portmidi-dynamic", "pm_dylib\portmidi-dynamic.vcproj", "{7283FAD1-7415-4061-A19A-FF5C7BCE9306}"
+	ProjectSection(ProjectDependencies) = postProject
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "portmidi-static", "pm_common\portmidi-static.vcproj", "{2985D5DA-D91E-44E0-924B-E612B6AA33F6}"
+	ProjectSection(ProjectDependencies) = postProject
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qtest", "pm_test\qtest.vcproj", "{2204E68C-5C1F-440E-8CE6-7E273D4F6AD1}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sysex", "pm_test\sysex.vcproj", "{71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test", "pm_test\test.vcproj", "{0BEACB8B-4058-41A4-A9DE-1B1FB650B21A}"
+	ProjectSection(ProjectDependencies) = postProject
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6} = {2985D5DA-D91E-44E0-924B-E612B6AA33F6}
+		{28779535-7541-4FF5-AC12-FAFD66E894EC} = {28779535-7541-4FF5-AC12-FAFD66E894EC}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{E1C2664B-91BB-4D4F-868C-433164F81101}.Debug|Win32.ActiveCfg = Debug|Win32
+		{E1C2664B-91BB-4D4F-868C-433164F81101}.Release|Win32.ActiveCfg = Release|Win32
+		{28779535-7541-4FF5-AC12-FAFD66E894EC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{28779535-7541-4FF5-AC12-FAFD66E894EC}.Debug|Win32.Build.0 = Debug|Win32
+		{28779535-7541-4FF5-AC12-FAFD66E894EC}.Release|Win32.ActiveCfg = Release|Win32
+		{28779535-7541-4FF5-AC12-FAFD66E894EC}.Release|Win32.Build.0 = Release|Win32
+		{41D78CBF-B04B-4561-BA4A-AC238C40633D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{41D78CBF-B04B-4561-BA4A-AC238C40633D}.Debug|Win32.Build.0 = Debug|Win32
+		{41D78CBF-B04B-4561-BA4A-AC238C40633D}.Release|Win32.ActiveCfg = Release|Win32
+		{41D78CBF-B04B-4561-BA4A-AC238C40633D}.Release|Win32.Build.0 = Release|Win32
+		{9B448D22-EC7E-4BD8-A552-B268D843CC3C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9B448D22-EC7E-4BD8-A552-B268D843CC3C}.Debug|Win32.Build.0 = Debug|Win32
+		{9B448D22-EC7E-4BD8-A552-B268D843CC3C}.Release|Win32.ActiveCfg = Release|Win32
+		{9B448D22-EC7E-4BD8-A552-B268D843CC3C}.Release|Win32.Build.0 = Release|Win32
+		{EED7440D-04E3-4948-92DB-C85B4ADB1D82}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EED7440D-04E3-4948-92DB-C85B4ADB1D82}.Debug|Win32.Build.0 = Debug|Win32
+		{EED7440D-04E3-4948-92DB-C85B4ADB1D82}.Release|Win32.ActiveCfg = Release|Win32
+		{EED7440D-04E3-4948-92DB-C85B4ADB1D82}.Release|Win32.Build.0 = Release|Win32
+		{80193DD1-2C02-4A4C-BDF8-49623AD6F556}.Debug|Win32.ActiveCfg = Debug|Win32
+		{80193DD1-2C02-4A4C-BDF8-49623AD6F556}.Debug|Win32.Build.0 = Debug|Win32
+		{80193DD1-2C02-4A4C-BDF8-49623AD6F556}.Release|Win32.ActiveCfg = Release|Win32
+		{80193DD1-2C02-4A4C-BDF8-49623AD6F556}.Release|Win32.Build.0 = Release|Win32
+		{EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF}.Debug|Win32.Build.0 = Debug|Win32
+		{EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF}.Release|Win32.ActiveCfg = Release|Win32
+		{EAADABB5-83D6-4669-98F8-6CDBE6AFD2BF}.Release|Win32.Build.0 = Release|Win32
+		{87B548BD-F5CE-4D1F-9181-390966AC5855}.Debug|Win32.ActiveCfg = Debug|Win32
+		{87B548BD-F5CE-4D1F-9181-390966AC5855}.Debug|Win32.Build.0 = Debug|Win32
+		{87B548BD-F5CE-4D1F-9181-390966AC5855}.Release|Win32.ActiveCfg = Release|Win32
+		{87B548BD-F5CE-4D1F-9181-390966AC5855}.Release|Win32.Build.0 = Release|Win32
+		{7283FAD1-7415-4061-A19A-FF5C7BCE9306}.Debug|Win32.ActiveCfg = Debug|Win32
+		{7283FAD1-7415-4061-A19A-FF5C7BCE9306}.Debug|Win32.Build.0 = Debug|Win32
+		{7283FAD1-7415-4061-A19A-FF5C7BCE9306}.Release|Win32.ActiveCfg = Release|Win32
+		{7283FAD1-7415-4061-A19A-FF5C7BCE9306}.Release|Win32.Build.0 = Release|Win32
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6}.Debug|Win32.Build.0 = Debug|Win32
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6}.Release|Win32.ActiveCfg = Release|Win32
+		{2985D5DA-D91E-44E0-924B-E612B6AA33F6}.Release|Win32.Build.0 = Release|Win32
+		{2204E68C-5C1F-440E-8CE6-7E273D4F6AD1}.Debug|Win32.ActiveCfg = Debug|Win32
+		{2204E68C-5C1F-440E-8CE6-7E273D4F6AD1}.Debug|Win32.Build.0 = Debug|Win32
+		{2204E68C-5C1F-440E-8CE6-7E273D4F6AD1}.Release|Win32.ActiveCfg = Release|Win32
+		{2204E68C-5C1F-440E-8CE6-7E273D4F6AD1}.Release|Win32.Build.0 = Release|Win32
+		{71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD}.Debug|Win32.ActiveCfg = Debug|Win32
+		{71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD}.Debug|Win32.Build.0 = Debug|Win32
+		{71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD}.Release|Win32.ActiveCfg = Release|Win32
+		{71B9BC6E-7B40-4FBC-BC7F-4372AF03D0FD}.Release|Win32.Build.0 = Release|Win32
+		{0BEACB8B-4058-41A4-A9DE-1B1FB650B21A}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0BEACB8B-4058-41A4-A9DE-1B1FB650B21A}.Debug|Win32.Build.0 = Debug|Win32
+		{0BEACB8B-4058-41A4-A9DE-1B1FB650B21A}.Release|Win32.ActiveCfg = Release|Win32
+		{0BEACB8B-4058-41A4-A9DE-1B1FB650B21A}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+	EndGlobalSection
+	GlobalSection(ExtensibilityAddIns) = postSolution
+	EndGlobalSection
+EndGlobal
diff --git a/pd/portmidi/portmidi_cdt.zip b/pd/portmidi/portmidi_cdt.zip
new file mode 100644
index 0000000000000000000000000000000000000000..eaa2d7970cb8700ffb3b5579f128cbda2108a82c
GIT binary patch
literal 210271
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
YV}*sH)S{u`qdwS}XlM%js4ukt0VG0eF8}}l

literal 0
HcmV?d00001

diff --git a/pd/portmidi/portmusic_logo.png b/pd/portmidi/portmusic_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..17a063a6ab93ce6976acf0de8fad8c30f23e7394
GIT binary patch
literal 753
zcmV<N0uKF&P)<h;3K|Lk000e1NJLTq003A30018d0{{R3R2KTu00004XF*Lt006JZ
zHwB960000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUyFi=cXMa<01
ziHV7^v9XMd(PwMS*x2bA8Z|~pv?nT=b%gO%RaLvY<bja+005Z)00960{{hm`J^%m$
zM@d9MRCwCVmWz_4APhx$CA<Xw|8MsusI89OU9;0uyHtrt<KgBeGGqELHPe^dHh$QC
z4mKn`nNNeQb=uok;LK^s`2lv$y7G>zs>>TI)OFA&*bc|zi<H@Dy|Y?S+#4|Wm?Js`
z8#inj#aPQ^T(QK%V6Rfhmg0=<*t+zIx7``g`%^HhA)EyasRiBv1|JQ}F2g#RDHs)m
zZ_VmdCu<2Cm!}@H-nuGwb}(s}R)lI#MRJ8{$rhE>DEU#Qhkd3v=|kwN$IzhQLP!rW
z1R_{tWV$$lc$u3S6s@}HD{$lqCJA}i`Es|0MHTju_%SONuZkzXJWZZzU9>D_@juEQ
zQ1hmwi+KvpU8-2S?|;PS!n}e5Wb@yg70m9{CoLtse;}Vcgan-O=fP_sPcTKaK<D+|
z*D*p2L;84u`4(@%A#raHaBbSo<k-A)tq#I(7jX6d2Ao+>pc8md0;obEKzPgh)S@SV
z!w3SFNx6oX;Oag)f|c9T89V^ST_oa$2Z^CZj0jiLHFEiu5Q|t5WVJtlr{JDXV2@=g
z8ZXLY-K_9)lN}seBsc-ExHRexM%KiK2Y2__>r#w0fDK%e?sQO$cm!NG;}wjYaSBTg
zS8&DF_h7FU?cgD?MS$r9PMi;4^vPo>D`-hAY~WatJlRl_i!>quBX}4uU?e4K4i%iY
zlySNNOLgIm`B-Q2HZVAnSzVGyz|hc6$y@dV^Xp$}s&p9FbM4Y~$sAq}p}pQdd{)H#
j|NJNP55T|F{s=Gt?@5G_w9tJQ00000NkvXXu0mjfb!S&6

literal 0
HcmV?d00001

diff --git a/pd/portmidi/porttime/porttime-VC8.vcproj b/pd/portmidi/porttime/porttime-VC8.vcproj
new file mode 100644
index 000000000..3a5cef474
--- /dev/null
+++ b/pd/portmidi/porttime/porttime-VC8.vcproj
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="porttime"
+	ProjectGUID="{338224B8-D575-408D-BACF-95C557B429BE}"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory=".\Release"
+			IntermediateDirectory=".\Release"
+			ConfigurationType="4"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\Release/porttime.pch"
+				AssemblerListingLocation=".\Release/"
+				ObjectFile=".\Release/"
+				ProgramDataBaseFileName=".\Release/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile=".\Release\porttime.lib"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Release/porttime.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory=".\Debug"
+			IntermediateDirectory=".\Debug"
+			ConfigurationType="4"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="_LIB;WIN32;_DEBUG"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="1"
+				PrecompiledHeaderFile=".\Debug/porttime.pch"
+				AssemblerListingLocation=".\Debug/"
+				ObjectFile=".\Debug/"
+				ProgramDataBaseFileName=".\Debug/"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile=".\Debug\porttime.lib"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\Debug/porttime.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+			>
+			<File
+				RelativePath="porttime.c"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+			<File
+				RelativePath="ptwinmm.c"
+				>
+				<FileConfiguration
+					Name="Release|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+				<FileConfiguration
+					Name="Debug|Win32"
+					>
+					<Tool
+						Name="VCCLCompilerTool"
+						PreprocessorDefinitions=""
+					/>
+				</FileConfiguration>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl"
+			>
+			<File
+				RelativePath="porttime.h"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/porttime/porttime.c b/pd/portmidi/porttime/porttime.c
old mode 100644
new mode 100755
diff --git a/pd/portmidi/porttime/porttime.dsp b/pd/portmidi/porttime/porttime.dsp
old mode 100644
new mode 100755
diff --git a/pd/portmidi/porttime/porttime.h b/pd/portmidi/porttime/porttime.h
old mode 100644
new mode 100755
index 029ea7779..ff22de9d5
--- a/pd/portmidi/porttime/porttime.h
+++ b/pd/portmidi/porttime/porttime.h
@@ -1,36 +1,92 @@
-/* porttime.h -- portable interface to millisecond timer */
-
-/* CHANGE LOG FOR PORTTIME
-  10-Jun-03 Mark Nelson & RBD
-    boost priority of timer thread in ptlinux.c implementation
- */
-
-/* Should there be a way to choose the source of time here? */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-typedef enum {
-    ptNoError = 0,
-    ptHostError = -10000,
-    ptAlreadyStarted,
-    ptAlreadyStopped,
-    ptInsufficientMemory
-} PtError;
-
-
-typedef long PtTimestamp;
-
-typedef void (PtCallback)( PtTimestamp timestamp, void *userData );
-
-
-PtError Pt_Start(int resolution, PtCallback *callback, void *userData);
-PtError Pt_Stop();
-int Pt_Started();
-PtTimestamp Pt_Time();
-
-#ifdef __cplusplus
-}
-#endif
+/* porttime.h -- portable interface to millisecond timer */
+
+/* CHANGE LOG FOR PORTTIME
+  10-Jun-03 Mark Nelson & RBD
+    boost priority of timer thread in ptlinux.c implementation
+ */
+
+/* Should there be a way to choose the source of time here? */
+
+#ifdef WIN32
+#ifndef INT32_DEFINED
+// rather than having users install a special .h file for windows, 
+// just put the required definitions inline here. portmidi.h uses
+// these too, so the definitions are (unfortunately) duplicated there
+typedef int int32_t;
+typedef unsigned int uint32_t;
+#define INT32_DEFINED
+#endif
+#else
+#include <stdint.h> // needed for int32_t
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef PMEXPORT
+#ifdef _WINDLL
+#define PMEXPORT __declspec(dllexport)
+#else
+#define PMEXPORT 
+#endif
+#endif
+
+typedef enum {
+    ptNoError = 0,         /* success */
+    ptHostError = -10000,  /* a system-specific error occurred */
+    ptAlreadyStarted,      /* cannot start timer because it is already started */
+    ptAlreadyStopped,      /* cannot stop timer because it is already stopped */
+    ptInsufficientMemory   /* memory could not be allocated */
+} PtError;
+
+
+typedef int32_t PtTimestamp;
+
+typedef void (PtCallback)( PtTimestamp timestamp, void *userData );
+
+/*
+    Pt_Start() starts a real-time service.
+
+    resolution is the timer resolution in ms. The time will advance every
+    resolution ms.
+
+    callback is a function pointer to be called every resolution ms.
+
+    userData is passed to callback as a parameter.
+
+    return value:
+    Upon success, returns ptNoError. See PtError for other values.
+*/
+PMEXPORT PtError Pt_Start(int resolution, PtCallback *callback, void *userData);
+
+/*
+    Pt_Stop() stops the timer.
+
+    return value:
+    Upon success, returns ptNoError. See PtError for other values.
+*/
+PMEXPORT PtError Pt_Stop();
+
+/*
+    Pt_Started() returns true iff the timer is running.
+*/
+PMEXPORT int Pt_Started();
+
+/* 
+    Pt_Time() returns the current time in ms.
+*/
+PMEXPORT PtTimestamp Pt_Time();
+
+/*
+    Pt_Sleep() pauses, allowing other threads to run.
+
+    duration is the length of the pause in ms. The true duration 
+    of the pause may be rounded to the nearest or next clock tick
+    as determined by resolution in Pt_Start().
+*/
+PMEXPORT void Pt_Sleep(int32_t duration);
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/pd/portmidi/porttime/porttime.vcproj b/pd/portmidi/porttime/porttime.vcproj
new file mode 100755
index 000000000..374ee5094
--- /dev/null
+++ b/pd/portmidi/porttime/porttime.vcproj
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="9.00"
+	Name="PortTime"
+	ProjectGUID="{338224B8-D575-408D-BACF-95C557B429BE}"
+	TargetFrameworkVersion="131072"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="2"
+				InlineFunctionExpansion="1"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				StringPooling="true"
+				RuntimeLibrary="0"
+				EnableFunctionLevelLinking="true"
+				PrecompiledHeaderFile=".\$(OutDir)\porttime.pch"
+				AssemblerListingLocation=".\$(OutDir)\"
+				ObjectFile=".\$(OutDir)\"
+				ProgramDataBaseFileName=".\$(OutDir)\"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="NDEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile=".\$(OutDir)\porttime.lib"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\$(OutDir)\porttime.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+			UseOfMFC="0"
+			ATLMinimizesCRunTimeLibraryUsage="false"
+			CharacterSet="2"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="_LIB;WIN32;_DEBUG"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				PrecompiledHeaderFile=".\$(OutDir)\porttime.pch"
+				AssemblerListingLocation=".\$(OutDir)\"
+				ObjectFile=".\$(OutDir)\"
+				ProgramDataBaseFileName=".\$(OutDir)\"
+				WarningLevel="3"
+				SuppressStartupBanner="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+				PreprocessorDefinitions="_DEBUG"
+				Culture="1033"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile=".\$(OutDir)\porttime.lib"
+				SuppressStartupBanner="true"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+				SuppressStartupBanner="true"
+				OutputFile=".\$(OutDir)\porttime.bsc"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<File
+			RelativePath=".\porttime.c"
+			>
+		</File>
+		<File
+			RelativePath=".\porttime.h"
+			>
+		</File>
+		<File
+			RelativePath=".\ptwinmm.c"
+			>
+		</File>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>
diff --git a/pd/portmidi/porttime/ptlinux.c b/pd/portmidi/porttime/ptlinux.c
old mode 100644
new mode 100755
index 468575aa3..077402f54
--- a/pd/portmidi/porttime/ptlinux.c
+++ b/pd/portmidi/porttime/ptlinux.c
@@ -40,6 +40,7 @@ CHANGE LOG
 static int time_started_flag = FALSE;
 static struct timeb time_offset = {0, 0, 0, 0};
 static pthread_t pt_thread_pid;
+static int pt_thread_created = FALSE;
 
 /* note that this is static data -- we only need one copy */
 typedef struct {
@@ -59,7 +60,7 @@ static void *Pt_CallbackProc(void *p)
     /* printf("pt_callback_proc_id %d, id %d\n", pt_callback_proc_id,
            parameters->id); */
     if (geteuid() == 0) setpriority(PRIO_PROCESS, 0, -20);
-	while (pt_callback_proc_id == parameters->id) {
+    while (pt_callback_proc_id == parameters->id) {
         /* wait for a multiple of resolution ms */
         struct timeval timeout;
         int delay = mytime++ * parameters->resolution - Pt_Time();
@@ -91,6 +92,7 @@ PtError Pt_Start(int resolution, PtCallback *callback, void *userData)
         res = pthread_create(&pt_thread_pid, NULL, 
                              Pt_CallbackProc, parms);
         if (res != 0) return ptHostError;
+        pt_thread_created = TRUE;
     }
     time_started_flag = TRUE;
     return ptNoError;
@@ -101,7 +103,10 @@ PtError Pt_Stop()
 {
     /* printf("Pt_Stop called\n"); */
     pt_callback_proc_id++;
-    pthread_join(pt_thread_pid, NULL);
+    if (pt_thread_created) {
+        pthread_join(pt_thread_pid, NULL);
+        pt_thread_created = FALSE;
+    }
     time_started_flag = FALSE;
     return ptNoError;
 }
@@ -124,4 +129,10 @@ PtTimestamp Pt_Time()
 }
 
 
+void Pt_Sleep(int32_t duration)
+{
+    usleep(duration * 1000);
+}
+
+
 
diff --git a/pd/portmidi/porttime/ptmacosx_cf.c b/pd/portmidi/porttime/ptmacosx_cf.c
old mode 100644
new mode 100755
index c0c22a32e..a174c864e
--- a/pd/portmidi/porttime/ptmacosx_cf.c
+++ b/pd/portmidi/porttime/ptmacosx_cf.c
@@ -133,3 +133,8 @@ PtTimestamp Pt_Time()
     return (PtTimestamp) ((now - startTime) * 1000.0);
 }
 
+
+void Pt_Sleep(int32_t duration)
+{
+    usleep(duration * 1000);
+}
diff --git a/pd/portmidi/porttime/ptmacosx_mach.c b/pd/portmidi/porttime/ptmacosx_mach.c
old mode 100644
new mode 100755
index 37d4318b7..753f5832e
--- a/pd/portmidi/porttime/ptmacosx_mach.c
+++ b/pd/portmidi/porttime/ptmacosx_mach.c
@@ -8,6 +8,7 @@
 #import <mach/mach_error.h>
 #import <mach/mach_time.h>
 #import <mach/clock.h>
+#include <unistd.h>
 
 #include "porttime.h"
 #include "sys/time.h"
@@ -62,7 +63,7 @@ static void *Pt_CallbackProc(void *p)
         /* wait for a multiple of resolution ms */
         UInt64 wait_time;
         int delay = mytime++ * parameters->resolution - Pt_Time();
-	long timestamp;
+	PtTimestamp timestamp;
         if (delay < 0) delay = 0;
         wait_time = AudioConvertNanosToHostTime((UInt64)delay * NSEC_PER_MSEC);
         wait_time += AudioGetCurrentHostTime();
@@ -103,6 +104,7 @@ PtError Pt_Stop()
 {
     /* printf("Pt_Stop called\n"); */
     pt_callback_proc_id++;
+    pthread_join(pt_thread_pid, NULL);
     time_started_flag = FALSE;
     return ptNoError;
 }
@@ -122,3 +124,8 @@ PtTimestamp Pt_Time()
     return (PtTimestamp)(nsec_time / NSEC_PER_MSEC);
 }
 
+
+void Pt_Sleep(int32_t duration)
+{
+    usleep(duration * 1000);
+}
diff --git a/pd/portmidi/porttime/ptwinmm.c b/pd/portmidi/porttime/ptwinmm.c
old mode 100644
new mode 100755
index bbfebb0ec..52046592c
--- a/pd/portmidi/porttime/ptwinmm.c
+++ b/pd/portmidi/porttime/ptwinmm.c
@@ -14,14 +14,14 @@ static long time_resolution;
 static MMRESULT timer_id;
 static PtCallback *time_callback;
 
-void CALLBACK winmm_time_callback(UINT uID, UINT uMsg, DWORD dwUser, 
-                                  DWORD dw1, DWORD dw2)
+void CALLBACK winmm_time_callback(UINT uID, UINT uMsg, DWORD_PTR dwUser, 
+                                  DWORD_PTR dw1, DWORD_PTR dw2)
 {
     (*time_callback)(Pt_Time(), (void *) dwUser);
 }
  
 
-PtError Pt_Start(int resolution, PtCallback *callback, void *userData)
+PMEXPORT PtError Pt_Start(int resolution, PtCallback *callback, void *userData)
 {
     if (time_started_flag) return ptAlreadyStarted;
     timeBeginPeriod(resolution);
@@ -31,14 +31,14 @@ PtError Pt_Start(int resolution, PtCallback *callback, void *userData)
     time_callback = callback;
     if (callback) {
         timer_id = timeSetEvent(resolution, 1, winmm_time_callback, 
-            (DWORD) userData, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
+            (DWORD_PTR) userData, TIME_PERIODIC | TIME_CALLBACK_FUNCTION);
         if (!timer_id) return ptHostError;
     }
     return ptNoError;
 }
 
 
-PtError Pt_Stop()
+PMEXPORT PtError Pt_Stop()
 {
     if (!time_started_flag) return ptAlreadyStopped;
     if (time_callback && timer_id) {
@@ -52,14 +52,19 @@ PtError Pt_Stop()
 }
 
 
-int Pt_Started()
+PMEXPORT int Pt_Started()
 {
     return time_started_flag;
 }
 
 
-PtTimestamp Pt_Time()
+PMEXPORT PtTimestamp Pt_Time()
 {
     return timeGetTime() - time_offset;
 }
 
+
+PMEXPORT void Pt_Sleep(int32_t duration)
+{
+    Sleep(duration);
+}
-- 
GitLab