pax_global_header00006660000000000000000000000064143052636100014512gustar00rootroot0000000000000052 comment=68c3f8e74f7b21e2a46ed97d5edce2a40d13e24b pd-lyonpotpourri-3.0.1/000077500000000000000000000000001430526361000150615ustar00rootroot00000000000000pd-lyonpotpourri-3.0.1/CHANGELOG.txt000066400000000000000000000015701430526361000171140ustar00rootroot00000000000000Version 3.0.1 Updated function~ with some methods that could be helpful for amp simulation algorithms: tanh, arctan, and abs which implements the formula y = x / (abs(x) + 1). Also added a chebyshev method for classic waveshaping. Updated the following externals to use Pd memory functions: expflam~, shoehorn~, convolver~, buffet~ ,byplay~~, clean_selector~,chopper~~, byplay~~, clean_selector~, convolver~, dmach~, dynss~, epluribus~, flanjah~, granola~, kbuffer~, npan~, phasemod~, player~, pulser~, rotapan~, samm~, sarec~, sel~, shoehorn~, splitbank~, splitspec~, squash~, vdb~, vdp~, granulesf~, granule~, markov~, mask~, quadpan~ Version 3.0 Code updated from earlier 2.0 version (originally designed in 2005) for compatibility with modern Pd. Help files updated. Shared functions renamed to (hopefully) avoid name clashes. Ported oracular processing object chameleon~. pd-lyonpotpourri-3.0.1/INSTALLATION.txt000066400000000000000000000007261430526361000175300ustar00rootroot00000000000000This distribution comes with binaries for both OSX (10.9) and Linux (Ubuntu 64-bit). To install, move folders “lyonpotpourri-externals” and “lyonpotpourri-helpfiles” to a location within your Pd search path. If the shipped externals work with your computer hardware, you are good to go. Otherwise, you will need to recompile the externals by typing “make” in a Terminal window. If on OSX, you need to have the developer tools installed in order to run Make. pd-lyonpotpourri-3.0.1/LICENSE.txt000066400000000000000000000020671430526361000167110ustar00rootroot00000000000000LyonPotpourri for Pd Copyright (c) 2007-2021 Eric Lyon 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. pd-lyonpotpourri-3.0.1/MSPd.h000066400000000000000000000027161430526361000160430ustar00rootroot00000000000000#include #include #include #include #include #include #ifndef LPP_VERSION # define LPP_VERSION "3.0" #endif #ifndef LPP_COMPILE_DATE # define LPP_COMPILE_DATE __DATE__ #endif #define LPP_ANNOUNCEMENT "-< LyonPotpourri "LPP_VERSION " >- | " #define LPP_VERSION4PD "LyonPotpourri " LPP_VERSION " for Pd" #define lpp_version(objectname) post("%s: version %s compiled %s",objectname,LPP_VERSION4PDLPP_COMPILE_DATE); // #define LYONPOTPOURRI_MSG "--" #define NO_FREE_FUNCTION 0 /* because Max and Pd have different ideas of what A_FLOAT is, use t_floatarg to force consistency. Otherwise functions that look good will fail on some hardware. Also note that Pd messages cannot accept arguments of type A_LONG. */ #include "m_pd.h" // #define t_floatarg float #define t_double double #define atom_getsymarg atom_getsymbolarg #ifndef PIOVERTWO #define PIOVERTWO 1.5707963268 #endif #ifndef TWOPI #define TWOPI 6.2831853072 #endif #ifndef PI #define PI 3.14159265358979 #endif /*** MSP helper functions **/ void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); // #define potpourri_announce(objname) post("( %s )\t%s",objname,LYONPOTPOURRI_MSG) // #define potpourri_announce(objname) post("%s ( %s )",LYONPOTPOURRI_MSG,objname) #define potpourri_announce(objname) post("%s ( %s )",LPP_ANNOUNCEMENT,objname) pd-lyonpotpourri-3.0.1/Makefile000066400000000000000000000044441430526361000165270ustar00rootroot00000000000000# Makefile to build the 'lyonpotpourri' library for Pure Data. # Needs Makefile.pdlibbuilder as helper makefile for platform-dependent build # settings and rules. # library name lib.name = lyonpotpourri # sources for the objectclasses class.sources = \ adsr~.c \ buffet~.c \ bvplay~.c \ chameleon~.c \ channel~.c \ chopper~.c \ clean_selector~.c \ click~.c \ click2bang~.c \ click2float~.c \ clickhold~.c \ distortion~.c \ dmach~.c \ expflam~.c \ flanjah~.c \ function~.c \ granola~.c \ granulesf~.c \ granule~.c \ kbuffer~.c \ killdc~.c \ magfreq_analysis~.c \ markov~.c \ mask~.c \ oscil~.c \ phasemod~.c \ player~.c \ pulser~.c \ rtrig~.c \ samm~.c \ sigseq~.c \ vdb~.c \ vdp~.c \ waveshape~.c \ epluribus~.c \ dynss~.c \ counter~.c \ latch~.c \ sarec~.c \ convolver~.c \ npan~.c \ shoehorn~.c \ rotapan~.c \ sel~.c \ squash~.c \ windowvec~.c \ cartopol~.c \ poltocar~.c \ arrayfilt~.c \ splitspec~.c \ stutter~.c \ vecdex~.c \ quadpan~.c \ splitbank~.c \ $(empty) bashfest~.class.sources = \ bashfest~.c \ bashfest_dsp.c \ bashfest_helper.c \ ellipse.c \ $(empty) ## sources for the shared library # fft.c :?: convert.c convolver~.c leanunconvert.c splitbank~.c # fft4.c :?: buffet~.c convolver~.c magfreq_analysis~.c splitbank~.c # fold.c : buffet~.c magfreq_analysis~.c splitbank~.c !squash~.c # convert.c : buffet~.c magfreq_analysis~.c !splitbank~.c # makewindows.c : buffet~.c magfreq_analysis~.c splitbank~.c !squash~.c # power_of_two.c: magfreq_analysis~.c # from_msp.c: adsr~.c bashfest~.c buffet~.c counter~.c stutter~.c vdp~.c shared.sources = \ convert.c \ fft.c \ fft4.c \ fold.c \ makewindows.c \ power_of_two.c \ from_msp.c \ $(empty) unused_shared_sources = \ PenroseRand.c \ PenroseOscil.c \ bloscbank.c \ overlapadd.c \ leanconvert.c \ leanunconvert.c \ unconvert.c \ $(empty) # extra files datafiles = \ $(wildcard *.pd) \ CHANGELOG.txt \ LICENSE.txt \ README.txt \ sfplay~.pd \ lyonpotpourri-meta.pd \ $(empty) # extra dirs datadirs = sound \ $(empty) ############################################################################################## # include the actual build-system PDLIBBUILDER_DIR=pd-lib-builder include $(PDLIBBUILDER_DIR)/Makefile.pdlibbuilder pd-lyonpotpourri-3.0.1/PenroseOscil.c000066400000000000000000000013501430526361000176310ustar00rootroot00000000000000#include #include "PenroseOscil.h" float frequencyToIncrement( float samplingRate, float frequency, int bufferLength ) { return (frequency / samplingRate) * (float) bufferLength; } void makeSineBuffer( float *buffer, int bufferLength ) { int i; float myTwoPi = 8. * atan(1.); for ( i=0; i <= bufferLength; i++ ) *(buffer+i) = sin( myTwoPi * ((float) i / (float) bufferLength) ); return; } float bufferOscil( float *phase, float increment, float *buffer, int bufferLength ) { float sample; while ( *phase > bufferLength ) *phase -= bufferLength; while ( *phase < 0. ) *phase += bufferLength; sample = *( buffer + (int) (*phase) ); *phase += increment; return sample; } pd-lyonpotpourri-3.0.1/PenroseOscil.h000066400000000000000000000004241430526361000176370ustar00rootroot00000000000000 float frequencyToIncrement( float samplingRate, float frequency, int bufferLength ); void makeSineBuffer( float *buffer, int bufferLength ); float bufferOscil( float *phase, float increment, float *buffer, int bufferLength ); pd-lyonpotpourri-3.0.1/PenroseRand.c000066400000000000000000000004121430526361000174420ustar00rootroot00000000000000#include "PenroseRand.h" float rrand(int *seed) { int i = ((*seed = *seed * 1103515245 + 12345)>>16) & 077777; return((float)i/16384. - 1.); } float prand(int *seed) { int i = ((*seed = *seed * 1103515245 + 12345)>>16) & 077777; return((float)i/32768.); } pd-lyonpotpourri-3.0.1/PenroseRand.h000066400000000000000000000000611430526361000174470ustar00rootroot00000000000000 float rrand(int *seed); float prand(int *seed); pd-lyonpotpourri-3.0.1/README.md000066400000000000000000000105441430526361000163440ustar00rootroot00000000000000# LyonPotpourri 3.0 LyonPotpourri is a collection of externals developed for the creation and performance of computer music. The externals were originally developed for Max/MSP, and then extended into hybrid code that could compile for both Max/MSP and Pd. As of version 3.0, the code bases of Max/MSP and Pd have diverged to such an extent that I decided to split the LyonPotpourri code into separate Pd and Max/MSP versions. The Pd platform tends toward minimalism. Therefore, it is particularly advantageous for Pd users to become adept at designing their own externals. It is hoped that in addition to the utility of specific externals in this collection, the source code will be helpful for computer musicians who wish to learn how to write their own externals. For further guidance on that subject, please see my book “Designing Audio Objects for Max/MSP and Pd.” LyonPotpourri is Copyright Eric Lyon, 1999-2022, and is covered under the MIT license. Please see the accompanying License file for details. **Object Listing** - adsr~ a simple ADSR envelope that can be click triggered - arrayfilt~ fft-based filtering by drawing into an array - bashfest~ a click driven buffer player with randomized DSP - buffet~ provides operations on a stored buffer - bvplay~ selective playback from a stored buffer with enveloping and increment control - cartopol~ convert a spectral frame from cartesian to polar form - chameleon~ an oracular sound processor - channel~ access to a precise address in the signal vector - chopper~ munging loop playback from a buffer - clean_selector~ like selector~ but crossfades when switching channels - click~ converts a bang to a click - click2bang~ converts a signal click to a bang message - click2float~ translates a signal click to a float message - clickhold~ sample and hold a click - convolver~ non-real-time convolution with impulses of arbitrary size - distortion~ lookup function distortion - dmach~ pattern based sample accurate drum machine prototype - epluribus~ combine several signal inputs to a single output based on min or max sample value - expflam~ converts a click to an exponential flam click pattern - flanjah~ simple flanger - function~ write various functions into an array - granola~ granular pitch scaling - granule~ granular synthesis module reading from a stored waveform in a buffer - granulesf~ granular synthesis module reading from a soundfile in a buffer - kbuffer~ low sampling rate buffer to capture gestures - killdc~ DC block filter - latch~ sustain an incoming click with sample-accurate timing - magfreq_analysis~ transforms a time domain signal to a magnitude/frequency spectrum - markov~ implements a first order Markov chain - mask~ a click driven pattern sequencer - npan~ power-panning to an arbitrary number of output channels - oscil~ oscillator with flexible waveform specification - phasemod~ phase modulated waveform - player~ click driven buffer player that can sustain multiple iterations - poltocar~ convert spectral frame from polar to complex representation - pulser~ pulse wave generated by additive synthesis - quadpan~ pan an incoming sound within a quadraphonic plane - rotapan~ rotate an array of input channels to the same number of output channels - rtrig~ generates random click triggers - samm~ sample accurate multiple metronomes, with click signal articulation - sarec~ sample accurate recording - sel~ sample-accurate implementation of the sel algorithm - shoehorn~ collapse from a larger number to a smaller number of audio channels - sigseq~ signal level numerical sequencer - splitbank~ - split an incoming sound into complementary, independently tunable spectra - splitspec~ split an incoming sound into complementary spectra - squash~ implementation of a compression algorithm by Christopher Penrose - stutter~ stuttering playback from an array - vdb~ a delay line using an array for storage (no vector limit on feedback delaytime) - vdp~ a simple, self-contained delay unit - vecdex~ outputs the sample index within the current signal vector - waveshape~ a Chebychev function lookup waveshaper - windowvec~ apply a Hann window to the input signal vector This release of LyonPotpourri was updated with assistance in coding, testing, and building from @Lucarda, @porres, and @umlaeute. Eric Lyon ericlyon@vt.edu School of Performing Arts | Music Institute for Creativity, Arts, and Technology Virginia Tech March 16, 2021 pd-lyonpotpourri-3.0.1/README.txt000066400000000000000000000102331430526361000165560ustar00rootroot00000000000000Welcome to LyonPotpourri, version 3.0 (64-bit version). http://disis.music.vt.edu/eric/LyonSoftware/Pd/LyonPotpourri/ LyonPotpourri is a collection of externals developed for the creation and performance of computer music. The externals were originally developed for Max/MSP, and then extended into hybrid code that could compile for both Max/MSP and Pd. As of version 3.0, the code bases of Max/MSP and Pd have diverged to such an extent that I decided to split the LyonPotpourri code into separate Pd and Max/MSP versions. The Pd platform tends toward minimalism. Therefore, it is particularly advantageous for Pd users to become adept at designing their own externals. It is hoped that in addition to the utility of specific externals in this collection, the source code will be helpful for computer musicians who wish to learn how to write their own externals. For further guidance on that subject, please see my book “Designing Audio Objects for Max/MSP and Pd.” LyonPotpourri 3.0 is Copyright Eric Lyon, 2007-2013, and is covered under the MIT license. Please see the accompanying License file for details. Object Listing: - adsr~ a simple ADSR envelope that can be click triggered - arrayfilt~ fft-based filtering by drawing into an array - bashfest~ a click driven buffer player with randomized DSP - buffet~ provides operations on a stored buffer - bvplay~ selective playback from a stored buffer with enveloping and increment control - cartopol~ convert a spectral frame from cartesian to polar form - channel~ access to a precise address in the signal vector - chopper~ munging loop playback from a buffer - clean_selector~ like selector~ but crossfades when switching channels - click~ converts a bang to a click - click2float~ translates a signal click to a float message - clickhold~ sample and hold a click - convolver~ non-real-time convolution with impulses of arbitrary size - distortion~ lookup function distortion - dmach~ pattern based sample accurate drum machine prototype - expflam~ converts a click to an exponential flam click pattern - flanjah~ simple flanger - function~ write various functions into an array - granola~ granular pitch scaling - granulesf~ granular synthesis module reading from a soundfile in a buffer - granule~ granular synthesis module reading from a stored waveform in a buffer - kbuffer~ low sampling rate buffer to capture gestures - killdc~ DC block filter - latch~ sustain an incoming click with sample-accurate timing - magfreq_analysis~ transforms a time domain signal to a magnitude/frequency spectrum - markov~ implements a first order Markov chain - mask~ a click driven pattern sequencer - npan~ power-panning to an arbitrary number of output channels - oscil~ oscillator with flexible waveform specification - phasemod~ phase modulated waveform - player~ click driven buffer player that can sustain multiple iterations - poltocar~ convert spectral frame from polar to complex representation - pulser~ pulse wave generated by additive synthesis - quadpan~ pan an incoming sound within a quadraphonic plane - rotapan~ rotate an array of input channels to the same number of output channels - rtrig~ generates random click triggers - samm~ sample accurate multiple metronomes, with click signal articulation - sarec~ sample accurate recording - sel~ sample-accurate implementation of the sel algorithm - shoehorn~ collapse from a larger number to a smaller number of audio channels - sigseq~ signal level numerical sequencer - splitbank~ - split an incoming sound into complementary, independently tunable spectra - splitspec~ split an incoming sound into complementary spectra - squash~ implementation of a compression algorithm by Chris Penrose - stutter~ stuttering playback from an array - vdb~ a delay line using an array for storage (no vector limit on feedback delaytime) - vdp~ a simple, self-contained delay unit - vecdex~ outputs the sample index within the current signal vector - waveshape~ a Chebychev function lookup waveshaper - windowvec~ apply a Hann window to the input signal vector Best wishes for the success of your creative projects and explorations! Eric Lyon ericlyon@vt.edu Department of Music Institute for Creativity, Arts, and Technology Virginia Tech pd-lyonpotpourri-3.0.1/Updates.txt000066400000000000000000000000651430526361000172300ustar00rootroot00000000000000Updates to LyonPotpourri 3.0 12.22.2013 Nothing yet!pd-lyonpotpourri-3.0.1/adsr~-help.pd000066400000000000000000000051131430526361000174630ustar00rootroot00000000000000#N canvas 600 60 623 641 12; #X msg 56 204 bang; #X obj 38 165 osc~ 400; #X obj 38 390 *~; #X msg 153 228 10 50 50 50; #X msg 160 253 100 50 100 500; #X obj 153 206 loadbang; #N canvas 600 60 673 325 individual-adsr-elements 0; #X obj 62 244 outlet; #X msg 62 158 set_a \$1; #X msg 135 159 set_d \$1; #X msg 210 158 set_s \$1; #X msg 283 159 set_r \$1; #X msg 353 159 set_gain1 \$1; #X msg 451 160 set_gain2 \$1; #X obj 353 110 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -242048 -1 -1 2900 1; #X obj 451 109 vsl 15 30 0 1 0 0 empty empty empty 0 -8 0 8 -242048 -1 -1 2030 1; #X obj 62 106 vsl 15 30 1 100 0 0 empty empty empty 0 -8 0 8 -242048 -1 -1 1435 1; #X obj 135 110 vsl 15 30 10 100 0 0 empty empty empty 0 -8 0 8 -242048 -1 -1 1289 1; #X obj 210 107 vsl 15 30 50 500 0 0 empty empty empty 0 -8 0 8 -242048 -1 -1 967 1; #X obj 283 109 vsl 15 30 50 1000 0 0 empty empty empty 0 -8 0 8 -242048 -1 -1 458 1; #X msg 62 40 50 50 200 200 1 0.7; #X obj 62 64 unpack f f f f f f; #X obj 62 16 loadbang; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 5 0; #X connect 8 0 6 0; #X connect 9 0 1 0; #X connect 10 0 2 0; #X connect 11 0 3 0; #X connect 12 0 4 0; #X connect 13 0 14 0; #X connect 14 0 9 0; #X connect 14 1 10 0; #X connect 14 2 11 0; #X connect 14 3 12 0; #X connect 14 4 7 0; #X connect 14 5 8 0; #X connect 15 0 13 0; #X restore 178 280 pd individual-adsr-elements; #X text 51 185 trigger ADSR; #X obj 29 9 lpp-icon adsr~; #X text 245 231 ADSR data as list; #X obj 38 416 lpp-meters; #X obj 56 365 lyonpotpourri/adsr~; #X text 266 252 softer envelope; #X text 247 40 - ADSR envelope triggered by signal clicks or bangs ; #N canvas 600 60 893 602 click-trigger 0; #X text 236 120 slow click metronome; #X obj 56 126 lyonpotpourri/samm~ 40 1; #X obj 56 184 *~; #X obj 56 257 outlet~; #X obj 112 84 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 135 81 gate sample-accurate metronome; #X obj 112 51 inlet; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 4 0 2 1; #X connect 6 0 4 0; #X restore 271 328 pd click-trigger; #X obj 271 302 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 35 111 An ADSR envelope with the capability for sample-accurate timing.; #X text 256 464 see also:; #X obj 236 481 cnv 15 100 20 empty empty lyonpotpourri/samm~ 20 12 0 14 -262144 -1 0; #X connect 0 0 11 0; #X connect 1 0 2 0; #X connect 2 0 10 0; #X connect 2 0 10 1; #X connect 3 0 11 0; #X connect 4 0 11 0; #X connect 5 0 3 0; #X connect 6 0 11 0; #X connect 11 0 2 1; #X connect 14 0 11 0; #X connect 15 0 14 0; pd-lyonpotpourri-3.0.1/adsr~.c000066400000000000000000000177721430526361000163720ustar00rootroot00000000000000#include "MSPd.h" static t_class *adsr_class; #define OBJECT_NAME "adsr~" typedef struct _adsr { t_object x_obj; float x_f; // Variables Here float a; float d; float s; float r; int ebreak1; int ebreak2; int ebreak3; int asamps; int dsamps; int ssamps; int rsamps; int asamps_last; int dsamps_last; int ssamps_last; int rsamps_last; float tempo; float egain1; float egain2; int tempomode; int beat_subdiv; int tsamps; int counter; float srate; short manual_override; float click_gain; // input click sets volume too short mute; } t_adsr; static void *adsr_new(t_symbol *s, int argc, t_atom *argv); static t_int *adsr_perform(t_int *w); static void adsr_dsp(t_adsr *x, t_signal **sp); //static void adsr_assist(t_adsr *x, void *b, long m, long a, char *s); static void adsr_bang(t_adsr *x); //static void adsr_manual_override(t_adsr *x, t_floatarg toggle); static void adsr_list (t_adsr *x, t_atom *msg, int argc, t_atom *argv); //static void adsr_tempomode(t_adsr *x, t_atom *msg, int argc, t_atom *argv); static void adsr_set_a(t_adsr *x, t_floatarg f); static void adsr_set_d(t_adsr *x, t_floatarg f); static void adsr_set_s(t_adsr *x, t_floatarg f); static void adsr_set_r(t_adsr *x, t_floatarg f); static void adsr_set_gain1(t_adsr *x, t_floatarg f); static void adsr_set_gain2(t_adsr *x, t_floatarg f); // static void set_tempo(t_adsr *x, t_floatarg f); static void adsr_mute(t_adsr *x, t_floatarg f); //void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); //void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); void adsr_tilde_setup(void) { adsr_class = class_new(gensym("adsr~"), (t_newmethod)adsr_new, 0,sizeof(t_adsr), 0,A_GIMME,0); CLASS_MAINSIGNALIN(adsr_class, t_adsr, x_f); class_addmethod(adsr_class,(t_method)adsr_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(adsr_class,(t_method)adsr_mute,gensym("mute"),A_FLOAT,0); class_addmethod(adsr_class,(t_method)adsr_list,gensym("list"),A_GIMME,0); class_addmethod(adsr_class,(t_method)adsr_set_a,gensym("set_a"),A_FLOAT,0); class_addmethod(adsr_class,(t_method)adsr_set_d,gensym("set_d"),A_FLOAT,0); class_addmethod(adsr_class,(t_method)adsr_set_s,gensym("set_s"),A_FLOAT,0); class_addmethod(adsr_class,(t_method)adsr_set_r,gensym("set_r"),A_FLOAT,0); class_addmethod(adsr_class,(t_method)adsr_set_gain1,gensym("set_gain1"),A_FLOAT,0); class_addmethod(adsr_class,(t_method)adsr_set_gain2,gensym("set_gain2"),A_FLOAT,0); class_addbang(adsr_class,(t_method)adsr_bang); potpourri_announce(OBJECT_NAME); } void adsr_mute(t_adsr *x, t_floatarg f) { x->mute = (short)f; } void adsr_set_gain1(t_adsr *x, t_floatarg f) { x->egain1 = f; return; } void adsr_set_gain2(t_adsr *x, t_floatarg f) { x->egain2 = f; return; } void adsr_bang(t_adsr *x) { x->counter = 0; return; } void adsr_set_a(t_adsr *x, t_floatarg f) { f /= 1000.0; x->a = f; x->asamps = x->a * x->srate; if( x->tempomode) { x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); if( x->rsamps < 0 ) { x->rsamps = 0; } } else { x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; } x->ebreak1 = x->asamps; x->ebreak2 = x->asamps+x->dsamps; x->ebreak3 = x->asamps+x->dsamps+x->ssamps; return ; } void adsr_set_d(t_adsr *x, t_floatarg f) { f /= 1000.0 ; x->d = f; x->dsamps = x->d * x->srate; if( x->tempomode) { x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); if( x->rsamps < 0 ) { x->rsamps = 0; } } else { x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; } x->ebreak2 = x->asamps+x->dsamps; x->ebreak3 = x->asamps+x->dsamps+x->ssamps; return ; } void adsr_set_s(t_adsr *x, t_floatarg f) { f /= 1000.0; x->s = f; x->ssamps = x->s * x->srate; if( x->tempomode) { x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); if( x->rsamps < 0 ) { x->rsamps = 0; } } else { x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; } x->ebreak3 = x->asamps+x->dsamps+x->ssamps; return ; } void adsr_set_r(t_adsr *x, t_floatarg f) { f /= 1000.0; if( x->tempomode) { return; } else { x->r = f; x->rsamps = x->r * x->srate; x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; } return ; } void adsr_list (t_adsr *x, t_atom *msg, int argc, t_atom *argv) { (void)msg; // make compiler happy x->rsamps = x->tsamps - (x->asamps+x->dsamps+x->ssamps); if( x->rsamps < 0 ) x->rsamps = 0; x->a = (atom_getfloatarg(0,argc,argv)) * .001; x->d = (atom_getfloatarg(1,argc,argv)) * .001; x->s = (atom_getfloatarg(2,argc,argv)) * .001; x->r = (atom_getfloatarg(3,argc,argv)) * .001; x->asamps = x->a * x->srate; x->dsamps = x->d * x->srate; x->ssamps = x->s * x->srate; x->rsamps = x->r * x->srate; x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; x->ebreak1 = x->asamps; x->ebreak2 = x->asamps+x->dsamps; x->ebreak3 = x->asamps+x->dsamps+x->ssamps; } static void *adsr_new(t_symbol *s, int argc, t_atom *argv) { t_adsr *x = (t_adsr *)pd_new(adsr_class); (void)s; // make compiler happy outlet_new(&x->x_obj, gensym("signal")); x->srate = sys_getsr(); if(!x->srate) { pd_error(0, "zero sampling rate, setting to 44100"); x->srate = 44100; } x->a = 10; x->d = 50; x->s = 100; x->r = 100; x->egain1 = .7; x->egain2 = .1; atom_arg_getfloat(&x->a,0,argc,argv); atom_arg_getfloat(&x->d,1,argc,argv); atom_arg_getfloat(&x->s,2,argc,argv); atom_arg_getfloat(&x->r,3,argc,argv); atom_arg_getfloat(&x->egain1,4,argc,argv); atom_arg_getfloat(&x->egain2,5,argc,argv); x->a *= .001; x->d *= .001; x->s *= .001; x->r *= .001; x->asamps = x->a * x->srate; x->dsamps = x->d * x->srate; x->ssamps = x->s * x->srate; x->rsamps = x->r * x->srate; x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; x->ebreak1 = x->asamps; x->ebreak2 = x->asamps+x->dsamps; x->ebreak3 = x->asamps+x->dsamps+x->ssamps; x->counter = 0; x->click_gain = 0.0; x->mute = 0; return x; } t_int *adsr_perform(t_int *w) { t_adsr *x = (t_adsr *) (w[1]); t_float *in = (t_float *)(w[2]); t_float *out = (t_float *)(w[3]); int n = (int) w[4]; int tsamps = x->tsamps; int counter = x->counter; int ebreak1 = x->ebreak1; int ebreak2 = x->ebreak2; int ebreak3 = x->ebreak3; float egain1 = x->egain1; float egain2 = x->egain2; int asamps = x->asamps; int dsamps = x->dsamps; int ssamps = x->ssamps; int rsamps = x->rsamps; // short manual_override = x->manual_override; float click_gain = x->click_gain; float etmp; float env_val; float input_val; /*********************************************/ if(x->mute) { while(n--) *out++ = 0.0; return w+5; } while(n--) { input_val = *in++; if(input_val) { click_gain = input_val; counter = 0; } if( counter < ebreak1 ) { env_val = (float) counter / (float) asamps; } else if (counter < ebreak2) { etmp = (float) (counter - ebreak1) / (float) dsamps; env_val = (1.0 - etmp) + (egain1 * etmp); } else if (counter < ebreak3) { etmp = (float) (counter - ebreak2) / (float) ssamps; env_val = (egain1 * (1.0 - etmp)) + (egain2 * etmp); } else if( counter < tsamps ) { env_val = ((float)(tsamps-counter)/(float)rsamps) * egain2 ; } else { env_val = 0.0; } if(click_gain && env_val && (click_gain != 1.0) ) { env_val *= click_gain; } *out++ = env_val; if(counter < tsamps) counter++; } x->counter = counter; x->click_gain = click_gain; return (w+5); } void adsr_dsp(t_adsr *x, t_signal **sp) { if(x->srate != sp[0]->s_sr ) { x->srate = sp[0]->s_sr; x->asamps = x->a * x->srate; x->dsamps = x->d * x->srate; x->ssamps = x->s * x->srate; x->rsamps = x->r * x->srate; x->tsamps = x->asamps+x->dsamps+x->ssamps+x->rsamps; x->ebreak1 = x->asamps; x->ebreak2 = x->asamps+x->dsamps; x->ebreak3 = x->asamps+x->dsamps+x->ssamps; x->counter = 0; } dsp_add(adsr_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/arrayfilt~-help.pd000066400000000000000000000150251430526361000205320ustar00rootroot00000000000000#N canvas 600 60 582 459 12; #X obj 26 157 noise~; #N canvas 227 201 1229 589 array-fft-block 0; #X obj 65 55 inlet~; #X obj 65 419 outlet~; #X obj 65 125 rfft~, f 6; #X obj 68 483 block~ 1024 8; #X obj 65 320 rifft~; #X obj 65 351 *~ 0; #X obj 381 195 *; #X msg 333 117 1 1024 8; #X obj 333 148 unpack f f f; #X obj 333 227 /; #X floatatom 333 259 12 0 0 0 - - -; #X text 414 260 rescale factor; #X obj 333 86 loadbang; #N canvas 600 60 450 278 (subpatch) 0; #X array arrayfilt1 513 float 3; #A 0 0.95 0.935714 0.914285 0.257143 0.257143 0.257143 0.257143 0.521429 0.502381 0.483334 0.464286 0.421428 0.378571 0.358928 0.339285 0.319642 0.299999 0.285713 0.282142 0.27857 0.271428 0.264285 0.259999 0.255713 0.251427 0.978572 0.971429 0.971429 0.971429 0.978572 0.233332 0.22857 0.22857 0.22857 0.22857 0.226189 0.223808 0.221427 0.271428 0.571429 0.487301 0.481745 0.47619 0.828571 0.828571 0.830952 0.833333 0.835714 0.8375 0.839286 0.841071 0.842857 0.842857 0.642857 0.135714 0.421427 0.414284 0.585714 0.192857 0.421428 0.478571 0.948215 0.944048 0.939882 0.935715 0.930436 0.925157 0.919877 0.914598 0.909318 0.904038 0.0642857 0.0642857 0.0642857 0.0642857 0.0642857 0.0642857 0.0642857 0.0642857 0.0642857 0.0625 0.0607142 0.0589285 0.0571428 0.0571428 0.0571428 0.0571428 0.0571428 0.0571428 0.0857144 0.0738096 0.0690476 0.0642857 0.0571428 0.0571428 0.638096 0.647619 0.657143 0.671429 0.700001 0.942857 0.95 0.953571 0.957143 0.959524 0.961905 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.964286 0.535712 0.50714 0.492854 0.464283 0.414282 0.378568 0.397616 0.416663 0.435711 0.454997 0.474283 0.493568 0.512854 0.53214 0.321425 0.349996 0.371425 0.392854 0.407139 0.421425 0.435711 0.449997 0.464283 0.481426 0.498569 0.515711 0.532854 0.549997 0.572319 0.594641 0.616962 0.639284 0.661605 0.683927 0.706249 0.72857 0.742856 0.757142 0.778571 0.778571 0.779464 0.780357 0.78125 0.782143 0.783036 0.783929 0.784821 0.785714 0.786813 0.787912 0.789011 0.79011 0.791209 0.792308 0.793407 0.794505 0.795604 0.796703 0.797802 0.798901 0.8 0.801429 0.802857 0.804286 0.805714 0.821429 0.821429 0.814286 0.814286 0.814286 0.183928 0.182142 0.180357 0.178571 0.178571 0.178571 0.178571 0.367859 0.378573 0.384288 0.390002 0.395716 0.401431 0.407145 0.414288 0.421431 0.428574 0.435717 0.442859 0.450002 0.457145 0.464288 0.471431 0.478574 0.485717 0.490479 0.495241 0.500003 0.504765 0.509527 0.514288 0.528574 0.535717 0.550003 0.553574 0.557146 0.564289 0.571432 0.571432 0.571432 0.564289 0.535717 0.514288 0.489288 0.464288 0.392859 0.34643 0.300001 0.253573 0.207144 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0285714 0.0290476 0.0295238 0.03 0.0304762 0.0309524 0.0314286 0.0319048 0.032381 0.0328572 0.0333334 0.0338096 0.0342858 0.0347619 0.0352381 0.0357143 0.0357143 0.0357143 0.0357143 0.0357143 0.0357143 0.0357143 0.0357143 0.0357143 0.0363637 0.037013 0.0376624 0.0383117 0.0389611 0.0396105 0.0402598 0.0409092 0.0415585 0.0422079 0.0428572 0.0464287 0.0500001 0.0500001 0.0500001 0.0500001 0.0500001 0.0500001 0.0500001 0.0500001 0.0517859 0.0535716 0.0553573 0.057143 0.0607145 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0642859 0.0660717 0.0678574 0.0696431 0.0714288 0.0726193 0.0738098 0.0750003 0.0761908 0.0773813 0.0785717 0.0785717 0.0785717 0.0785717 0.0785717 0.0785717 0.0785717 0.0785717 0.0785717 0.0797622 0.0809527 0.0821432 0.0833337 0.0845242 0.0857146 0.086364 0.0870133 0.0876627 0.088312 0.0889614 0.0896108 0.0902601 0.0909095 0.0915588 0.0922082 0.0928575 0.0935069 0.0941562 0.0948056 0.095455 0.0961043 0.0967537 0.097403 0.0980524 0.0987017 0.0993511 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 0.0928575 1 1; #X coords 0 1 513 0 400 140 1 0 0; #X restore 525 133 graph; #X msg 428 432 \; arrayfilt1 const 0; #X obj 796 467 tabwrite arrayfilt1; #X msg 796 387 1 \$1; #X obj 796 424 unpack f f; #X floatatom 796 348 5 0 0 0 - - -; #X text 833 347 set a range of bin gains to 1; #X text 570 438 zero out array; #X text 934 214 draw into array to change filter properties; #X text 563 476 flat response; #X msg 427 469 \; arrayfilt1 const 1; #X text 69 455 set FFT size to 1024 \, with an overlap of 8; #X obj 65 214 lyonpotpourri/arrayfilt~ arrayfilt1; #X obj 65 87 lyonpotpourri/windowvec~; #X obj 65 160 lyonpotpourri/cartopol~; #X obj 65 277 lyonpotpourri/poltocar~; #X obj 65 386 lyonpotpourri/windowvec~; #X text 644 101 Size the filter to (FFT size / 2) + 1 \, in this case 513; #X connect 0 0 26 0; #X connect 2 0 27 0; #X connect 2 1 27 1; #X connect 4 0 5 0; #X connect 5 0 29 0; #X connect 6 0 9 1; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 8 1 6 0; #X connect 8 2 6 1; #X connect 9 0 10 0; #X connect 10 0 5 1; #X connect 12 0 7 0; #X connect 16 0 17 0; #X connect 17 0 15 0; #X connect 17 1 15 1; #X connect 18 0 16 0; #X connect 25 0 28 0; #X connect 25 1 28 1; #X connect 26 0 2 0; #X connect 27 0 25 0; #X connect 27 1 25 1; #X connect 28 0 4 0; #X connect 28 1 4 1; #X connect 29 0 1 0; #X restore 26 189 pd array-fft-block; #X text 163 187 A demonstration of using fft primitives with a simple external that operates on bin magnitudes; #X obj 26 229 lpp-meters; #X obj 27 16 lpp-icon arrayfilt~; #X text 27 112 [arrayfilt~] filters a sound with the contents of an array \, so that filters can be drawn by hand; #X text 246 52 - use an array as a magnitude spectrum filter; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 1 0 3 1; pd-lyonpotpourri-3.0.1/arrayfilt~.c000066400000000000000000000045431430526361000174260ustar00rootroot00000000000000#include "MSPd.h" static t_class *arrayfilt_class; #define OBJECT_NAME "arrayfilt~" typedef struct _arrayfilt { t_object x_obj; t_float x_f; t_word *a_samples; int a_frames; t_symbol *arrayname; } t_arrayfilt; static void *arrayfilt_new(t_symbol *msg, int argc, t_atom *argv); static void arrayfilt_dsp(t_arrayfilt *x, t_signal **sp); static void arrayfilt_setarray(t_arrayfilt *x); void arrayfilt_tilde_setup(void) { arrayfilt_class = class_new(gensym("arrayfilt~"), (t_newmethod)arrayfilt_new, 0, sizeof(t_arrayfilt),0,A_GIMME,0); CLASS_MAINSIGNALIN(arrayfilt_class, t_arrayfilt, x_f); class_addmethod(arrayfilt_class, (t_method)arrayfilt_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *arrayfilt_new(t_symbol *msg, int argc, t_atom *argv) { t_arrayfilt *x = (t_arrayfilt *)pd_new(arrayfilt_class); // t_symbol *arrayname; inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->arrayname = atom_getsymbolarg(0, argc, argv); arrayfilt_setarray(x); return x; } void arrayfilt_setarray(t_arrayfilt *x) { t_garray *a; t_symbol *arrayname = x->arrayname; if (!(a = (t_garray *)pd_findbyclass(arrayname, garray_class))) { if (*arrayname->s_name) pd_error(x, "arrayflt~: %s: no such array", arrayname->s_name); } else { garray_usedindsp(a); if (!garray_getfloatwords(a, &x->a_frames, &x->a_samples)) { pd_error(x, "%s: bad template for player~", arrayname->s_name); } } } t_int *arrayfilt_perform(t_int *w) { int i; t_arrayfilt *x = (t_arrayfilt *) w[1]; t_float *mag_in = (t_float *) w[2]; t_float *phase_in = (t_float *) w[3]; t_float *mag_out = (t_float *) w[4]; t_float *phase_out = (t_float *) w[5]; t_float mag, phase; t_word *a_samples = x->a_samples; int a_frames = x->a_frames; int n = (int) w[6]; int N2 = n / 2; arrayfilt_setarray(x); if(a_frames < N2+1) { goto exit; } for(i = 0; i < N2 + 1; i++) { mag = mag_in[i]; phase = phase_in[i]; mag_out[i] = mag * a_samples[i].w_float; phase_out[i] = phase; } exit: return (w + 7); } void arrayfilt_dsp(t_arrayfilt *x, t_signal **sp) { dsp_add(arrayfilt_perform,6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/bashfest.h000066400000000000000000000155471430526361000170450ustar00rootroot00000000000000#include "MSPd.h" #include "ugens.h" #include /* calling codes for DSP modules */ #define TRANSPOSE 0 #define RINGMOD 1 #define FLANGE 2 #define BUTTER 3 #define TRUNCATE 4 #define SWEEPRESON 5 #define COMB 6 #define SLIDECOMB 7 #define REVERB1 8 #define ELLIPSE 9 #define COMPDIST 10 #define FEED1 11 #define RETRO 12 #define FLAM1 13 #define FLAM2 14 #define EXPFLAM 15 #define COMB4 16 #define RINGFEED 17 #define RESONADSR 18 #define STV 19 ////// #define ROOT2 (1.4142135623730950488) #define PI2 (6.2831853071795862319959) // #define BUFFER_SIZE (1<<15) #define LOPASS 0 #define HIPASS 1 #define BANDPASS 2 #define COMBFADE (.04 ) #define MAXFILTER 12 /*must be at least as big as see below */ #define ELLIPSE_FILTER_COUNT 11 /*actual number of filters*/ #define MAX_COEF 48 #define MY_MAX 2147483647.0 /* for rand() */ /*data types */ typedef struct { float *data;//contains cycle data int len;//length of array int p;//position pointer } t_cycle; typedef struct { long phase; // current phase in frames double phasef; // current phase in frames float gain; // gain for this note float gainL;// left gain float gainR;// right gain short status;// status of this event slot float *workbuffer;//sample processing space (both input and output) float *inbuf;//pointer to input part of workbuffer float *outbuf;//pointer to output part of workbuffer int in_start;// location in workbuffer to read from input int out_start;// location in workbuffer to write output int sample_frames;//actual size in frames of sample, which changes if it gets bigger int countdown;//latency counter before we actually start sending out samples int out_channels; //number of channels per frame of output short completed;//did the defer call do its thing? } t_event; typedef struct _bashfest { t_object x_obj; float x_f; float sr; // sampling rate t_symbol *wavename; // name of waveform buffer short hosed; // buffers are bad float fadeout; // fadeout time in sample frames (if truncation) float sync; // input from groove sync signal float increment; // read increment int most_recent_event; // position in array where last note was initiated long b_nchans; // channels of buffer long b_valid; // state of buffer long b_frames; // number of frames in sample buffer t_word *b_samples; // pointer samples in buffer int overlap_max; // max number of simultaneous plays t_event *events; //note attacks int active_events; // how many currently activated notes? int buf_samps;//total samples in workbuffer int halfbuffer;//buf_samps / 2 int buf_frames;// number of sample frames in workbuffer int latency_samples;// amount of samples to count down before playing sample float *params; // parameter list float *odds;// odds for each process happening int max_process_per_note;//what it says int min_process_per_note;//ditto int new_slot;//position for newest note float new_gain;//recently assigned gain short verbose;//toggle Max window error reporting float work_buffer_size;// size in ms of work buffers t_cycle tcycle;//contains an optional transposition cycle short block_dsp;//flag to turn off all dsp and play straight from MSP buffer short sound_lock;//keep current processed sound in buffer short grab;//flag to copy immediate processed buffer into MSP buffer char sound_name[256]; float *trigger_vec;//stores incoming trigger vectors int vs;//Max/MSP vector size /* stuff for bashfest DSP */ float *sinewave; int sinelen; short mute; float maxdelay; float *delayline1; float *delayline2; LSTRUCT *eel; // for ellipse processor float *mini_delay[4]; // small delay lines for allpass filter float max_mini_delay ; float *transfer_function; int tf_len; // length of transfer function float *feedfunc1; float *feedfunc2; float *feedfunc3; float *feedfunc4; int feedfunclen; int flamfunc1len; float *flamfunc1; CMIXCOMB *combies; CMIXADSR *adsr; float max_comb_lpt; float *reverb_ellipse_data; float **ellipse_data; float *dcflt; CMIXOSC oscar; CMIXRESON resies[2]; } t_bashfest; /*function prototypes*/ void lpp_putsine (float *arr, int len); float lpp_boundrand(float min, float max); void lpp_mycombset(float loopt,float rvt,int init,float *a,float srate); float lpp_mycomb(float samp,float *a); void lpp_setweights(float *a, int len); void lpp_delset2(float *a,int *l,float xmax, float srate); void lpp_delput2(float x,float *a,int *l); float lpp_dliget2(float *a,float dwait,int *l,float srate); void lpp_butterLopass( float *in, float *out, float cutoff, int frames, int channels, float srate); void lpp_butterBandpass(float *in, float *out, float center, float bandwidth, int frames,int channels, float srate); void lpp_butterHipass(float *in, float *out, float cutoff, int frames,int channels, float srate); void lpp_butset(float *a); void lpp_lobut(float *a, float cutoff,float SR); void lpp_hibut(float *a, float cutoff, float SR); void lpp_bpbut(float *a, float formant, float bandwidth, float SR); void lpp_butter_filter(float *in,float *out,float *a, int frames, int channels, int channel); void lpp_rsnset2(float cf,float bw,float scl,float xinit,float *a,float srate); float lpp_reson(float x,float *a); void lpp_ellipset(float *list, LSTRUCT *eel, int *nsects, float *xnorm); float lpp_ellipse(float x, LSTRUCT *eel, int nsects, float xnorm); float lpp_allpass(float samp,float *a); void lpp_init_reverb_data(float *a); void lpp_init_ellipse_data(float **a); void lpp_setExpFlamFunc(float *arr, int flen, float v1,float v2,float alpha); void lpp_setflamfunc1(float *arr, int flen); void lpp_funcgen1(float *outArray, int outlen, float duration, float outMin, float outMax, float speed1, float speed2, float gain1, float gain2, float *phs1, float *phs2, float *sine, int sinelen); void lpp_normtab(float *inarr,float *outarr, float min, float max, int len); float lpp_mapp(float in,float imin,float imax,float omin,float omax); float lpp_oscil(float amp,float si,float *farray,int len,float *phs); void lpp_set_dcflt(float *a); void lpp_set_distortion_table(float *arr, float cut, float max, int len); float lpp_dlookup(float samp,float *arr,int len); void lpp_do_compdist(float *in,float *out,int sampFrames,int nchans,int channel, float cutoff,float maxmult,int lookupflag,float *table,int range,float bufMaxamp); float lpp_getmaxamp(float *arr, int len); void lpp_buildadsr(CMIXADSR *a); /*bashfest dsp functions */ void lpp_feed1(float *inbuf, float *outbuf, int in_frames, int out_frames,int channels, float *functab1, float *functab2,float *functab3,float *functab4,int funclen, float duration, float maxDelay, t_bashfest *x); void lpp_reverb1me(float *in, float *out, int inFrames, int out_frames, int nchans, int channel, float revtime, float dry, t_bashfest *x); void lpp_killdc( float *inbuf, int in_frames, int channels, t_bashfest *x); pd-lyonpotpourri-3.0.1/bashfest_dsp.c000066400000000000000000001361201430526361000176750ustar00rootroot00000000000000#include "bashfest.h" void lpp_transpose(t_bashfest *x, int slot, int *pcount) { float *inbuf; float *outbuf; int i; int iphs = 0; int ip2; float m1, m2; float phs = 0; int out_frames; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; float *params = x->params; // float srate = x->sr; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; int buf_frames = x->buf_frames; float tfac; ++(*pcount); tfac = params[ (*pcount)++ ]; // out_start MUST BE SET WITH RESPECT TO in_start out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; // fprintf(stderr,"TRANSPOSE: in %d out %d\n", w->in_start, w->out_start); out_frames = (float) in_frames / tfac ; if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } for( i = 0; i < out_frames * channels; i += channels ) { iphs = phs; m2 = phs - iphs; m1 = 1. - m2; if( channels == 1 ) { *outbuf++ = inbuf[iphs] * m1 + inbuf[ iphs + 1] * m2 ; } else if( channels == 2 ) { ip2 = iphs * 2; *outbuf++ = inbuf[ip2] * m1 + inbuf[ ip2 + 2] * m2 ; *outbuf++ = inbuf[ip2 + 1] * m1 + inbuf[ ip2 + 3] * m2 ; } phs += tfac ; } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_ringmod(t_bashfest *x, int slot, int *pcount) { float *sinewave = x->sinewave; float *inbuf, *outbuf; int sinelen = x->sinelen; int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; float *params = x->params; float srate = x->sr; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; // int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; int i; float phase = 0.0; float si; float rmodFreq; ++(*pcount); rmodFreq = params[(*pcount)++]; // fprintf(stderr,"-*-*- EXECUTING RINGMOD -*-*-\n"); out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; si = ((float) sinelen / srate) * rmodFreq ; // inbuf = inbuf + in_start ; for(i = 0; i < frames*channels; i += channels ) { *outbuf++ = *inbuf++ * sinewave[(int)phase]; if( channels == 2 ) { *outbuf++ = *inbuf++ * sinewave[(int)phase]; } phase += si; while( phase > sinelen ) phase -= sinelen; } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_retrograde(t_bashfest *x, int slot, int *pcount) { int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; // float *params = x->params; // float srate = x->sr; int i ; int swap1, swap2; float tmpsamp; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; memcpy(outbuf, inbuf, in_frames * channels * sizeof(float) ); if( channels == 1 ) { for(i = 0; i < (frames/2) ; i++ ) { swap2 = (frames - 1 - i); tmpsamp = outbuf[i]; outbuf[i] = outbuf[swap2]; outbuf[swap2] = tmpsamp; } } /* this would also work for mono, but we'll save a few multiplies */ else { for(i = 0; i < (frames/2) ; i++ ) { swap1 = i * channels ; swap2 = (frames - 1 - i) * channels; tmpsamp = outbuf[swap1]; outbuf[swap1] = outbuf[swap2]; outbuf[swap2] = tmpsamp; ++swap1; ++swap2; tmpsamp = outbuf[swap1]; outbuf[swap1] = outbuf[swap2]; outbuf[swap2] = tmpsamp; } } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_comber(t_bashfest *x, int slot, int *pcount) { int channels = x->events[slot].out_channels; float *params = x->params; float srate = x->sr; float *delayline1 = x->delayline1; float *delayline2 = x->delayline2; float max_delay = x->maxdelay ; int buf_frames = x->buf_frames; int out_frames ; float overhang, revtime, delay ; int i; int fade_frames; float fadegain; int fadestart; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; /******************************/ ++(*pcount); delay = params[(*pcount)++]; revtime = params[(*pcount)++]; overhang = params[(*pcount)++]; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; if( delay <= 0.0 ) { pd_error(0, "comber got bad delay value\n"); return; } if( delay > max_delay ) { delay = max_delay ; } if( overhang < COMBFADE ) overhang = COMBFADE; out_frames = in_frames + overhang * srate ; if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } //combsamps = delay * srate + 20 ; lpp_mycombset(delay,revtime,0,delayline1,srate); if( channels == 2 ) lpp_mycombset(delay,revtime,0,delayline2,srate); // ADD IN ORIGINAL SIGNAL for( i = 0; i < in_frames*channels; i += channels) { *outbuf++ += lpp_mycomb(*inbuf++, delayline1); if( channels == 2 ) { *outbuf++ += lpp_mycomb(*inbuf++,delayline2); } } for( i = in_frames * channels; i < out_frames*channels; i += channels) { *outbuf++ = lpp_mycomb( 0.0 , delayline1); if( channels == 2 ) { *outbuf++ = lpp_mycomb( 0.0 , delayline2); } } fade_frames = COMBFADE * srate; fadestart = (out_frames - fade_frames) * channels ; for( i = 0; i < fade_frames * channels; i += channels ) { fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; *(inbuf + fadestart + i) *= fadegain; if(channels == 2) { *(inbuf + fadestart + i + 1) *= fadegain; } } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_flange(t_bashfest *x, int slot, int *pcount) { int i; float si; float mindel, maxdel; float fac1, fac2; int dv1[2], dv2[2]; /* cmix bookkeeping */ float delsamp1, delsamp2 ; float delay_time; // float dliget2(); float speed, feedback, phase, minres, maxres; float hangover ; int hangframes ; // float *inbuf = x->events[slot].workbuffer; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; // int buflen = x->buf_samps; float *params = x->params; float srate = x->sr; // int in_start = x->events[slot].in_start; float *delayline1 = x->delayline1; float *delayline2 = x->delayline2; float max_delay = x->maxdelay ; float *sinewave = x->sinewave; int sinelen = x->sinelen ; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); minres = params[(*pcount)++]; maxres = params[(*pcount)++]; speed = params[(*pcount)++]; feedback = params[(*pcount)++]; phase = params[(*pcount)++]; hangover = feedback * 0.25 ; // maybe log relation hangframes = srate * hangover ; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; if( minres <= 0. || maxres <= 0. ) { pd_error(0, "flange: got zero frequency resonances as input"); return; } mindel = 1.0/maxres; maxdel = 1.0/minres; if( maxdel > max_delay ) { maxdel = max_delay; pd_error(0, "flange: too large delay time shortened"); } lpp_delset2(delayline1, dv1, maxdel,srate); if( channels == 2 ) { lpp_delset2(delayline2, dv2, maxdel,srate); } si = ((float) sinelen/srate) * speed ; if( phase > 1.0 ) { phase = 0; pd_error(0, "flange: given > 1 initial phase"); } delsamp1 = delsamp2 = 0; phase *= sinelen; fac2 = .5 * (maxdel - mindel) ; fac1 = mindel + fac2; for(i = 0; i < in_frames*channels; i += channels ) { /* homemade oscillator */ delay_time = fac1 + fac2 * sinewave[(int) phase]; if( delay_time < .00001 ) { delay_time = .00001; } phase += si; while( phase > sinelen ) phase -= sinelen; lpp_delput2( *inbuf + delsamp1*feedback, delayline1, dv1); delsamp1 = lpp_dliget2(delayline1, delay_time, dv1,srate); *outbuf++ = (*inbuf++ + delsamp1) ; if( channels == 2 ) { lpp_delput2( *inbuf+delsamp2*feedback, delayline2, dv2); delsamp2 = lpp_dliget2(delayline2, delay_time, dv2,srate); *outbuf++ = (*inbuf++ + delsamp2) ; } } /* NOW DO HANGOVER */ for(i = 0; i < hangframes*channels; i += channels ) { delay_time = fac1 + fac2 * sinewave[ (int) phase ]; if( delay_time < .00001 ) { delay_time = .00001; } phase += si; while( phase > sinelen ) phase -= sinelen; lpp_delput2( delsamp1*feedback, delayline1, dv1); delsamp1 = lpp_dliget2(delayline1, delay_time, dv1,srate); *outbuf++ = delsamp1 ; if( channels == 2 ) { lpp_delput2( delsamp2*feedback, delayline2, dv2); delsamp2 = lpp_dliget2(delayline2, delay_time, dv2,srate); *outbuf++ = delsamp2 ; } } x->events[slot].sample_frames += hangframes; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_butterme(t_bashfest *x, int slot, int *pcount) { int ftype; float cutoff, cf, bw; int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; float *params = x->params; float srate = x->sr; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; // int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); ftype = params[(*pcount)++]; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; if(ftype == HIPASS) { cutoff = params[(*pcount)++]; lpp_butterHipass(inbuf, outbuf, cutoff, frames, channels, srate); } else if(ftype == LOPASS) { cutoff = params[(*pcount)++]; lpp_butterLopass(inbuf, outbuf, cutoff, frames, channels, srate); } else if(ftype == BANDPASS) { cf = params[(*pcount)++]; bw = params[(*pcount)++]; lpp_butterBandpass(inbuf, outbuf, cf, bw, frames, channels, srate); } else { pd_error(0, "%d not a valid Butterworth filter",ftype); return; } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_truncateme(t_bashfest *x, int slot, int *pcount) { float shortdur ; int out_frames; int i; float fadegain ; int fade_frames; int fadestart; float fadeout; int channels = x->events[slot].out_channels; float *params = x->params; float srate = x->sr; float *inbuf, *outbuf; int in_start; int out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); shortdur = params[ (*pcount)++ ]; fadeout = params[ (*pcount)++ ]; fade_frames = fadeout * srate ; out_frames = shortdur * srate ; if( out_frames >= in_frames ) { // pd_error(0, "truncation requesting >= original duration, no truncation"); return; } in_start = x->events[slot].in_start; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; if( fade_frames <= 0 ) { pd_error(0, "truncation with 0 length fade!"); return; } if( fade_frames > out_frames ) { pd_error(0, "truncation requested fadeout > new duration, adjusting..."); fade_frames = out_frames; } memcpy(outbuf, inbuf, in_frames * sizeof(float) ); fadestart = (out_frames - fade_frames) * channels ; for( i = 0; i < fade_frames * channels; i += channels ) { fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; outbuf[fadestart + i] *= fadegain; if( channels == 2 ) { outbuf[ fadestart + i + 1] *= fadegain; } } x->events[slot].sample_frames = out_frames ; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } // Pd only - not reentrant - appears that sine wave gets screwed up ??? void lpp_sweepreson(t_bashfest *x, int slot, int *pcount) { int i; float bwfac; float minfreq, maxfreq, speed, phase; float q1[5], q2[5]; float cf, bw; float si; float fac1, fac2; // float inmax, outmax, rescale ; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; float *params = x->params; float srate = x->sr; float *sinewave = x->sinewave; int sinelen = x->sinelen ; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); minfreq = params[(*pcount)++]; maxfreq = params[(*pcount)++]; bwfac = params[(*pcount)++]; speed = params[(*pcount)++]; phase = params[(*pcount)++]; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; si = ((float) sinelen / srate) * speed ; if( phase > 1.0 ) { phase = 0; pd_error(0, "sweepreson: given > 1 initial phase"); } phase *= sinelen; fac2 = .5 * (maxfreq - minfreq) ; fac1 = minfreq + fac2; cf = fac1 + fac2 * sinewave[(int) phase]; bw = bwfac * cf; lpp_rsnset2( cf, bw, 2.0, 0.0, q1, srate ); if( channels == 2 ) { lpp_rsnset2( cf, bw, 2.0, 0.0, q2, srate ); } for(i = 0; i < in_frames; i++ ) { // homemade oscillator phase += si; while( phase >= sinelen ) phase -= sinelen; fac2 = .5 * (maxfreq - minfreq) ; fac1 = minfreq + fac2; cf = fac1 + fac2 * sinewave[(int) phase]; bw = bwfac * cf; if(cf < 10 || cf > 8000 || bw < 1 || srate < 100) { post("danger values, cf %f bw %f sr %f",cf, bw, srate); } lpp_rsnset2( cf, bw, 2.0, 1.0, q1, srate ); // clicks stop if we don't apply filter above, and if attacks come too fast *outbuf++ = lpp_reson(*inbuf++, q1); if( channels == 2 ) { // rsnset2( cf, bw, 2.0, 1.0, q2, srate ); *outbuf++ = lpp_reson(*inbuf++, q2); } } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_slidecomb(t_bashfest *x, int slot, int *pcount) { float overhang, feedback, delay1, delay2; int i; int fade_frames; float fadegain; int fadestart; int dv1[2], dv2[2]; /* cmix bookkeeping */ float delsamp1 = 0, delsamp2 = 0; float m1, m2; float delay_time; int out_frames ; int channels = x->events[slot].out_channels; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; // float *sinewave = x->sinewave; // int sinelen = x->sinelen ; float max_delay = x->maxdelay; float *delayline1 = x->delayline1; float *delayline2 = x->delayline2; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); delay1 = params[(*pcount)++]; delay2 = params[(*pcount)++]; feedback = params[(*pcount)++]; overhang = params[(*pcount)++]; // post("del1 %f del2 %f srate %f",delay1,delay2, srate); out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; if( overhang < COMBFADE ) overhang = COMBFADE; out_frames = in_frames + overhang * srate ; if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } lpp_delset2(delayline1, dv1, max_delay, srate); if( channels == 2 ) { lpp_delset2(delayline2, dv2, max_delay, srate); } for( i = 0; i < in_frames*channels; i += channels) { m2 = (float) i / (float) (out_frames * channels) ; m1 = 1. - m2; delay_time = delay1 * m1 + delay2 * m2 ; lpp_delput2(*inbuf +delsamp1*feedback, delayline1, dv1); delsamp1 = lpp_dliget2(delayline1, delay_time, dv1, srate); *outbuf++ = *inbuf++ + delsamp1; if( channels == 2 ) { lpp_delput2( *inbuf + delsamp2*feedback, delayline2, dv2); delsamp2 = lpp_dliget2(delayline2, delay_time, dv2, srate); *outbuf++ = *inbuf++ + delsamp2 ; } } for( i = in_frames * channels; i < out_frames*channels; i += channels) { m2 = (float) i / (float) (out_frames * channels) ; m1 = 1. - m2; delay_time = delay1 * m1 + delay2 * m2 ; lpp_delput2( delsamp1*feedback, delayline1, dv1); *outbuf++ = delsamp1 = lpp_dliget2( delayline1, delay_time, dv1, srate ); if( channels == 2 ) { lpp_delput2( delsamp2*feedback, delayline2, dv2); *outbuf++ = delsamp2 = lpp_dliget2( delayline2, delay_time, dv2, srate ); } } fade_frames = COMBFADE * srate; fadestart = (out_frames - fade_frames) * channels ; for( i = 0; i < fade_frames * channels; i += channels ) { fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; *(outbuf + fadestart + i) *= fadegain; if( channels == 2 ) { *(outbuf + fadestart + i + 1) *= fadegain; } } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } // still a crash whore in Pd: void lpp_reverb1(t_bashfest *x, int slot, int *pcount) { float revtime, overhang; int channel_to_compute; float drygain; int out_frames; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); revtime = params[(*pcount)++]; if( revtime >= 1. ) { pd_error(0, "reverb1 does not like feedback values over 1."); revtime = .99 ; } overhang = params[(*pcount)++]; drygain = params[(*pcount)++]; out_frames = in_frames + srate * overhang; if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { lpp_reverb1me( inbuf, outbuf, in_frames, out_frames, channels, channel_to_compute, revtime, drygain, x); } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_ellipseme(t_bashfest *x, int slot, int *pcount) { int i,j; int nsects; float xnorm; int filtercode ; float *fltdata; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; // int buf_frames = x->buf_frames; float *params = x->params; // float srate = x->sr; float **flts = x->ellipse_data; LSTRUCT *eel = x->eel; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); filtercode = params[(*pcount)++]; if( filtercode >= ELLIPSE_FILTER_COUNT ) { pd_error(0, "there is no %d ellipse data",filtercode); return; }; fltdata = flts[ filtercode ]; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; for( j = 0; j < channels; j++) { lpp_ellipset(fltdata,eel,&nsects,&xnorm); for( i = j; i < in_frames * channels ; i += channels ) { outbuf[i] = lpp_ellipse(inbuf[i], eel, nsects,xnorm); } } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_feed1me(t_bashfest *x, int slot, int *pcount) { // int i; float mindelay, maxdelay, speed1, speed2; float phz1 = .13, phz2 = .251; float dur; float minfeedback = .1, maxfeedback = .7; float desired_dur; float overhang; /* main variables */ // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; int out_frames; /* process specific */ int flen = x->feedfunclen ; float *func1 = x->feedfunc1; float *func2 = x->feedfunc2; float *func3 = x->feedfunc3; float *func4 = x->feedfunc4; float my_max_delay = x->max_mini_delay; float *sinewave = x->sinewave; int sinelen = x->sinelen ; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); mindelay = params[ (*pcount)++ ]; maxdelay = params[ (*pcount)++ ]; speed1 = params[ (*pcount)++ ]; speed2 = params[ (*pcount)++ ]; overhang = params[ (*pcount)++ ]; if( maxdelay > my_max_delay ) { pd_error(0, "feed1: too high max delay, adjusted"); maxdelay = my_max_delay ; } dur = in_frames / srate ; desired_dur = dur + overhang; out_frames = srate * desired_dur ; if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; lpp_funcgen1( func1, flen, desired_dur, mindelay, maxdelay, speed1, speed2, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); phz1 /= (float) flen; phz2 /= (float) flen; lpp_funcgen1( func2, flen, desired_dur, mindelay*.5, maxdelay*2.0, speed1*1.25, speed2*.75, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); phz1 /= (float) flen; phz2 /= (float) flen; lpp_funcgen1( func3, flen, desired_dur, minfeedback, maxfeedback, speed1*.35, speed2*1.25, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); phz1 /= (float) flen; phz2 /= (float) flen; lpp_funcgen1( func4,flen, desired_dur, minfeedback, maxfeedback, speed1*.55, speed2*2.25, 1.0, 1.0, &phz1, &phz2, sinewave, sinelen); lpp_feed1( inbuf, outbuf, in_frames, out_frames, channels, func1, func2, func3, func4, flen, dur, my_max_delay, x); x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_flam1(t_bashfest *x, int slot, int *pcount) { // int channel_to_compute; int attacks; float gain2; float gainatten; float delay; float gain = 1.0; int i, j, k, delaysamps, delayoffset = 0; // float inputmax; int delay_frames; /* main variables */ float *inbuf; float *outbuf; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; int buflen = x->buf_samps; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int out_frames; int halfbuffer = x->halfbuffer; /* process specific */ ++(*pcount); attacks = params[(*pcount)++]; gain2 = params[(*pcount)++]; gainatten = params[(*pcount)++]; delay = params[(*pcount)++]; if( attacks <= 1 ) { pd_error(0, "flam1: too few attacks: %d",attacks); return; } out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; delay_frames = srate * delay + 0.5; delaysamps = channels * delay_frames; out_frames = in_frames + (srate * delay * (float) (attacks - 1)); if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } for( i = 0; i < out_frames * channels; i++ ) { outbuf[i] = 0.0 ; } for(i = 0; i < attacks; i++ ) { if(in_frames + delay_frames * i >= out_frames) { // pd_error(0, "breaking at attack %d",i); break; } for(j = 0; j < in_frames * channels; j += channels ) { for( k = 0; k < channels; k++ ) { outbuf[j + k + delayoffset] += *(inbuf +j + k) * gain; } } delayoffset += delaysamps; if( i == 0 ) { gain = gain2; } else { gain *= gainatten; } } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_flam2(t_bashfest *x, int slot, int *pcount) { // int channel_to_compute; int attacks; float gain2; float gainatten; float delay1,delay2; float gain = 1.0; int i, j, k, delaysamps, delayoffset = 0; int f_endpoint; // float inputmax, outputmax, rescale; int delay_frames; float now = 0.0; int findex; float inval; float curdelay; /* main variables */ float *inbuf; float *outbuf; int out_frames; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; int buflen = x->buf_samps; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int halfbuffer = x->halfbuffer; float *flamfunc1 = x->flamfunc1; int flamfunclen = x->flamfunc1len; /* process specific */ ++(*pcount); attacks = params[(*pcount)++]; gain2 = params[(*pcount)++]; gainatten = params[(*pcount)++]; delay1 = params[(*pcount)++]; delay2 = params[(*pcount)++]; if( attacks <= 1 ) { pd_error(0, "flam2: received too few attacks: %d",attacks); return; } out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; for( i = 0; i < attacks - 1; i++ ) { findex = ((float)i/(float)attacks) * (float)flamfunclen ; inval = flamfunc1[findex]; curdelay = lpp_mapp(inval, 0., 1., delay2, delay1); now += curdelay; } out_frames = in_frames + (srate * now); if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } for( i = 0; i < out_frames * channels; i++ ) { outbuf[i] = 0.0 ; } f_endpoint = in_frames; // first time delay_offset is zero for( i = 0; i < attacks; i++ ) { findex = ((float)i/(float)attacks) * (float)flamfunclen ; inval = flamfunc1[findex]; curdelay = lpp_mapp(inval, 0., 1., delay2, delay1); delay_frames = srate * curdelay + 0.5; delaysamps = delay_frames * channels; if(f_endpoint >= out_frames) { // pd_error(0, "flam2: breaking at attack %d",i); break; } for(j = 0; j < in_frames * channels; j += channels ) { for( k = 0; k < channels; k++ ) { outbuf[j + k + delayoffset] += *(inbuf + j + k) * gain; } } delayoffset += delaysamps; f_endpoint = in_frames + delayoffset/channels; if( i == 0 ) { gain = gain2; } else { gain *= gainatten; } } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_expflam(t_bashfest *x, int slot, int *pcount) { int attacks; float gain2; float gainatten; float delay1,delay2; float gain = 1.0; int i, j, k, delaysamps, delayoffset = 0, f_endpoint; // float inputmax, outputmax, rescale; int delay_frames; float now = 0.0; // int findex; // float inval; float curdelay; float slope; /* main variables */ float *inbuf; float *outbuf; int out_frames; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; int buflen = x->buf_samps; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int halfbuffer = x->halfbuffer; float *expfunc = x->feedfunc1; // int funclen = x->feedfunclen; /* process specific */ ++(*pcount); attacks = params[(*pcount)++]; gain2 = params[(*pcount)++]; gainatten = params[(*pcount)++]; delay1 = params[(*pcount)++]; delay2 = params[(*pcount)++]; slope = params[(*pcount)++]; if( attacks <= 1 ) { pd_error(0, "expflam: received too few attacks: %d",attacks); return; } out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; lpp_setExpFlamFunc(expfunc, attacks, delay1, delay2, slope); for( i = 0; i < attacks - 1; i++ ) { now += expfunc[i]; } out_frames = in_frames + (srate * now); if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } for( i = 0; i < out_frames * channels; i++ ) { outbuf[i] = 0.0 ; } f_endpoint = in_frames; for( i = 0; i < attacks; i++ ) { curdelay = expfunc[i]; delay_frames = srate * curdelay + 0.5; delaysamps = delay_frames * channels; if(f_endpoint >= out_frames) { // pd_error(0, "expflam: breaking at attack %d",i); break; } for(j = 0; j < in_frames * channels; j += channels ) { for( k = 0; k < channels; k++ ) { outbuf[j + k + delayoffset] += *(inbuf + j + k) * gain; } } delayoffset += delaysamps; f_endpoint = in_frames + delayoffset/channels; if( i == 0 ) { gain = gain2; } else { gain *= gainatten; } } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_comb4(t_bashfest *x, int slot, int *pcount) { float overhang, revtime ; int i, j, k; int fadeFrames; float fadegain; int fadestart; float input_sample; float rez; /* main variables */ int out_frames; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; /* process specific */ CMIXCOMB *combies = x->combies; float maxloop = x->max_comb_lpt; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; for( j = 0; j < 4; j++ ) { rez = params[(*pcount)++] ; if( rez == 0.0) { pd_error(0, "comb4: 0 resonance frequency not allowed"); return; } if( 1./rez > maxloop ) { pd_error(0, "comb4: %f is too long loop",1./rez); return; } combies[j].lpt = 1. / rez ; } revtime = params[(*pcount)++]; overhang = params[(*pcount)++]; if( overhang < COMBFADE ) overhang = COMBFADE; out_frames = in_frames + overhang * srate; if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } for( j = 0; j < 4; j++ ) { lpp_mycombset( combies[j].lpt, revtime, 0, combies[j].arr, srate); } inbuf = x->events[slot].workbuffer + in_start; for( j = 0; j < channels; j++ ) { for( i = 0; i < in_frames * channels; i += channels ) { input_sample = *(inbuf + i + j) ; // we can move inside loop *(outbuf + i + j ) = 0.0; // comment out to leave original sound into it for( k = 0; k < 4; k++ ) { *(outbuf + i + j) += lpp_mycomb(input_sample, combies[k].arr); } } } for( i = in_frames * channels; i < out_frames * channels; i += channels ) { for( j = 0; j < channels; j++ ) { *(outbuf + i + j) = 0.0; for( k = 0; k < 4; k++ ) { *(outbuf +i+j) += lpp_mycomb(0.0,combies[k].arr); } } } fadeFrames = COMBFADE * srate; // ok - this is just the fadeout fadestart = (out_frames - fadeFrames) * channels ; for( i = 0; i < fadeFrames * channels; i += channels ) { fadegain = 1.0 - (float) i / (float) (fadeFrames * channels) ; *(outbuf + fadestart + i) *= fadegain; if( channels == 2 ) { *(outbuf + fadestart + i + 1) *= fadegain; } } lpp_killdc(outbuf, out_frames, channels, x); x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_compdist(t_bashfest *x, int slot, int *pcount) { float cutoff, maxmult; int lookupflag; int channel_to_compute; float maxamp; /* main variables */ // int out_frames; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; // int buf_frames = x->buf_frames; float *params = x->params; // float srate = x->sr; /* function specific */ int range = x->tf_len; float *table = x->transfer_function; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); cutoff = params[(*pcount)++]; maxmult = params[(*pcount)++]; lookupflag = params[(*pcount)++]; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; maxamp = lpp_getmaxamp(inbuf, in_frames*channels) ; if(lookupflag) { lpp_set_distortion_table(table, cutoff, maxmult, range); } for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { lpp_do_compdist(inbuf, outbuf, in_frames, channels, channel_to_compute, cutoff, maxmult, lookupflag, table, range, maxamp); } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_ringfeed(t_bashfest *x, int slot, int *pcount) { float overhang; int i, j; int fade_frames; float fadegain; int fadestart; float input_sample; float rez ; /* main variables */ int out_frames; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; /* function specific */ float *sinewave = x->sinewave; int sinelen = x->sinelen ; CMIXCOMB *combies = x->combies; CMIXRESON *resies = x->resies; CMIXOSC oscar = x->oscar; float maxloop = x->max_comb_lpt; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; oscar.func = sinewave; oscar.len = sinelen; oscar.si = params[(*pcount)++] * ((float)oscar.len / srate); oscar.phs = 0; rez = params[(*pcount)++] ; if( rez > 0 ) combies[0].lpt = 1. / rez ; else pd_error(0, "zero comb resonance is bad luck"); if(combies[0].lpt > maxloop) pd_error(0, "ringfeed does not appreciate looptimes as large as %f",combies[0].lpt); combies[0].rvbt = params[(*pcount)++] ; if(combies[0].rvbt >= 1.0) { pd_error(0, "ringfeed dislikes feedback values >= 1"); combies[0].rvbt = .99 ; } resies[0].cf = params[(*pcount)++]; resies[0].bw = resies[0].cf * params[(*pcount)++]; overhang = params[(*pcount)++] ; inbuf = x->events[slot].workbuffer + in_start; for( i = 0; i < channels ; i++ ) { lpp_mycombset( combies[0].lpt, combies[0].rvbt, 0, combies[i].arr,srate); lpp_rsnset2(resies[0].cf, resies[0].bw, RESON_NO_SCL, 0., resies[i].q, srate); } /* MINIMUM OVERHANG */ if( overhang < COMBFADE ) overhang = COMBFADE; out_frames = in_frames + overhang * srate ; if( out_frames > buf_frames / 2 ) { out_frames = buf_frames / 2 ; } /* INPUT LOOP */ for( i = 0; i < in_frames * channels; i += channels ) { for( j = 0; j < channels; j++ ) { input_sample = *(inbuf + i + j ) ; input_sample *= lpp_oscil(1.0, oscar.si, oscar.func, oscar.len, &oscar.phs); input_sample += lpp_mycomb(input_sample, combies[j].arr); *(outbuf +i+j) = lpp_reson(input_sample, resies[j].q); } } /* COMB TAILS */ for( i = in_frames * channels; i < out_frames * channels; i += channels ) { for( j = 0; j < channels; j++ ) { *(outbuf +i+j) = lpp_reson(lpp_mycomb( 0.0, combies[j].arr), resies[j].q ); } } /* FADE OUT ON MIX */ fade_frames = COMBFADE * srate; fadestart = (out_frames - fade_frames) * channels ; for( i = 0; i < fade_frames * channels; i += channels ) { fadegain = 1.0 - (float) i / (float) (fade_frames * channels) ; *(outbuf + fadestart + i) *= fadegain; if( channels == 2 ) { *(outbuf + fadestart + i + 1) *= fadegain; } } x->events[slot].sample_frames = out_frames; x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_resonadsr(t_bashfest *x, int slot, int *pcount) { int i; float bwfac; float q1[5], q2[5]; float cf, bw; float si; float notedur; float phase = 0.; // int j = 0; /* main variables */ // int out_frames; // int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; // int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; /* function specific */ CMIXADSR *a = x->adsr; int funclen = a->len; float *adsrfunc = a->func; ++(*pcount); a->a = params[(*pcount)++]; a->d = params[(*pcount)++]; a->r = params[(*pcount)++]; a->v1 = params[(*pcount)++]; a->v2 = params[(*pcount)++]; a->v3 = params[(*pcount)++]; a->v4 = params[(*pcount)++]; bwfac = params[(*pcount)++]; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; notedur = (float) in_frames / srate ; a->s = notedur - (a->a+a->d+a->r); if( a->s <= 0.0 ) { a->a=a->d=a->s=a->r= notedur/ 4. ; } lpp_buildadsr(a); si = ((float) funclen / srate) / notedur ; phase = 0; lpp_rsnset2(adsrfunc[(int)phase], adsrfunc[(int) phase]*bwfac, 2.0, 0.0, q1, srate); if( channels == 2 ) { lpp_rsnset2( adsrfunc[(int)phase], adsrfunc[(int) phase]*bwfac, 2.0, 0.0, q2, srate ); } for(i = 0; i < in_frames*channels; i += channels ) { phase += si; if( phase > funclen - 1) phase = funclen - 1; /* stop at end of function */ cf = adsrfunc[ (int) phase ]; bw = bwfac * cf ; lpp_rsnset2( cf, bw, 2.0, 1.0, q1, srate ); outbuf[i] = lpp_reson(inbuf[i], q1); if( channels == 2 ) { lpp_rsnset2( cf, bw, 2.0, 1.0, q2, srate ); outbuf[i+1] = lpp_reson(inbuf[i+1], q2); } } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; } void lpp_stv(t_bashfest *x, int slot, int *pcount) { int i,j; /* main variables */ // int out_frames; int frames = x->events[slot].sample_frames; int channels = x->events[slot].out_channels; // int buf_frames = x->buf_frames; float *params = x->params; float srate = x->sr; /* function specific */ float *sinewave = x->sinewave; int sinelen = x->sinelen ; float *delayline1 = x->delayline1; float *delayline2 = x->delayline2; float max_delay = x->maxdelay ; CMIXOSC osc1, osc2; // put into main object structure float mindel, maxdel; float fac1, fac2; int dv1[2], dv2[2]; /* cmix bookkeeping */ float delay_time; float speed1, speed2, depth ; // float max; float *inbuf, *outbuf; int in_start = x->events[slot].in_start; int out_start = x->events[slot].out_start; // int in_frames = x->events[slot].sample_frames; int buflen = x->buf_samps; int halfbuffer = x->halfbuffer; ++(*pcount); speed1 = params[(*pcount)++]; speed2 = params[(*pcount)++]; depth = params[(*pcount)++]; out_start = (in_start + halfbuffer) % buflen ; inbuf = x->events[slot].workbuffer + in_start; outbuf = x->events[slot].workbuffer + out_start; mindel = .001; maxdel = depth; if( maxdel > max_delay ) { maxdel = max_delay; } lpp_delset2(delayline1, dv1, max_delay,srate); lpp_delset2(delayline2, dv2, max_delay,srate); fac2 = .5 * (maxdel - mindel) ; fac1 = mindel + fac2; osc1.func = sinewave; osc1.len = sinelen; osc1.si = ((float) sinelen / srate ) * speed1 ; osc1.phs = 0; osc1.amp = fac2; osc2.func = sinewave; osc2.len = sinelen; osc2.si = ((float) sinelen / srate ) * speed2 ; osc2.phs = 0; osc2.amp = fac2; if( channels == 1 ) { for(i = 0, j = 0; i < frames; i++, j+=2 ) { delay_time = fac1 + lpp_oscil(osc1.amp, osc1.si, osc1.func, osc1.len, &osc1.phs); lpp_delput2( inbuf[i], delayline1, dv1); outbuf[j] = lpp_dliget2(delayline1, delay_time, dv1,srate); delay_time = fac1 + lpp_oscil(osc2.amp, osc2.si, osc2.func, osc2.len, &osc2.phs); lpp_delput2( inbuf[i], delayline2, dv2); outbuf[j + 1] = lpp_dliget2(delayline2, delay_time, dv2,srate); } } else if( channels == 2 ) { for(i = 0; i < frames*2; i += 2 ) { delay_time = fac1 + lpp_oscil(osc1.amp, osc1.si, osc1.func, osc1.len, &osc1.phs); lpp_delput2( inbuf[i], delayline1, dv1); outbuf[i] = lpp_dliget2(delayline1, delay_time, dv1,srate); delay_time = fac1 + lpp_oscil(osc2.amp, osc2.si, osc2.func, osc2.len, &osc2.phs); lpp_delput2( inbuf[i + 1], delayline2, dv2); outbuf[i + 1] = lpp_dliget2(delayline2, delay_time, dv2,srate); } } x->events[slot].out_start = in_start; x->events[slot].in_start = (x->events[slot].out_start + halfbuffer) % buflen ; x->events[slot].out_channels = 2; // we are now stereo, regardless of what we were before } pd-lyonpotpourri-3.0.1/bashfest_helper.c000066400000000000000000000372571430526361000204010ustar00rootroot00000000000000#include "bashfest.h" #include "stdlib.h" void lpp_putsine (float *arr, int len); float lpp_boundrand(float min, float max); void lpp_putsine (float *arr, int len) { int i; double twopi; twopi = 8.0 * atan2(1.,1.); for ( i = 0; i < len ; i++) { *(arr + i) = sin( twopi * i / len); } } float lpp_boundrand(float min, float max) { return min + (max-min) * ((float)rand()/MY_MAX); } void lpp_mycombset(float loopt,float rvt,int init,float *a,float srate) { int j; a[0] = (3.0 + (loopt * srate + .5)); a[1] = rvt; if(!init) { for(j=3; j<(int)*a; j++) a[j] = 0; a[2] = 3; } } float lpp_mycomb(float samp,float *a) { float temp,*aptr; if ( a[2] >= (int) a[0]) a[2] = 3; aptr = a + (int)a[2]; a[2]++; temp = *aptr; *aptr = *aptr * a[1] + samp; return(temp); } void lpp_setweights(float *a, int len) { float sum = 0.0; int i; for(i=0;i= *(l+1)) *l -= *(l+1); } float lpp_dliget2(float *a,float wait,int *l,float srate) { /* get interpolated value from delay line, wait seconds old */ register int im1; float x = wait * srate; register int i = x; float frac = x - i; i = *l - i; im1 = i - 1; if(i <= 0) { if(i < 0) i += *(l+1); if(i < 0) return(0.); if(im1 < 0) im1 += *(l+1); } return(*(a+i) + frac * (*(a+im1) - *(a+i))); } void lpp_butterLopass( float *in, float *out, float cutoff, int frames, int channels, float srate) { int channel_to_compute; float data[8]; for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { lpp_butset( data ); lpp_lobut(data, cutoff, srate); lpp_butter_filter( in, out, data, frames, channels, channel_to_compute); } } void lpp_butterBandpass(float *in, float *out, float center, float bandwidth, int frames,int channels, float srate) { int channel_to_compute; float data[8]; for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { lpp_butset( data ); lpp_bpbut(data, center, bandwidth, srate); lpp_butter_filter( in, out, data, frames, channels, channel_to_compute); } } void lpp_butterHipass(float *in, float *out, float cutoff, int frames,int channels, float srate) { int channel_to_compute; float data[8]; for( channel_to_compute = 0; channel_to_compute < channels; channel_to_compute++) { lpp_butset( data ); lpp_hibut(data, cutoff, srate); lpp_butter_filter( in, out, data, frames, channels, channel_to_compute); } } void lpp_butset(float *a) { a[6] = a[7] = 0.0; } void lpp_lobut(float *a, float cutoff,float SR) { register float c; c = 1.0 / tan( PI * cutoff / SR); a[1] = 1.0 / ( 1.0 + ROOT2 * c + c * c); a[2] = a[1] + a[1]; a[3] = a[1]; a[4] = 2.0 * ( 1.0 - c*c) * a[1]; a[5] = ( 1.0 - ROOT2 * c + c * c) * a[1]; } void lpp_hibut(float *a, float cutoff, float SR) { register float c; c = tan( PI * cutoff / SR); a[1] = 1.0 / ( 1.0 + ROOT2 * c + c * c); a[2] = -2.0 * a[1]; a[3] = a[1]; a[4] = 2.0 * ( c*c - 1.0) * a[1]; a[5] = ( 1.0 - ROOT2 * c + c * c) * a[1]; } void lpp_bpbut(float *a, float formant, float bandwidth,float SR) { register float c, d; c = 1.0 / tan( PI * bandwidth / SR); d = 2.0 * cos( 2.0 * PI * formant / SR); a[1] = 1.0 / ( 1.0 + c); a[2] = 0.0; a[3] = -a[1]; a[4] = - c * d * a[1]; a[5] = ( c - 1.0) * a[1]; } /* in array can == out array */ void lpp_butter_filter(float *in,float *out,float *a, int frames, int channels, int channel) { int i; float t ,y ; for( i = channel ; i < frames * channels; i+= channels ) { t = *(in + i) - a[4] * a[6] - a[5] * a[7]; y = t * a[1] + a[2] * a[6] + a[3] * a[7]; a[7] = a[6]; a[6] = t; *(out + i) = y; } } void lpp_rsnset2(float cf,float bw,float scl,float xinit,float *a,float srate) { // double exp(),cos(),sqrt(); float c,temp; if(!xinit) { a[4] = 0; a[3] = 0; } a[2] = exp(-PI2 * bw/srate); temp = 1. - a[2]; c = a[2] + 1; a[1] = 4. * a[2]/c * cos(PI2 * cf/srate); if(scl < 0) a[0] = 1; if(scl) a[0] = sqrt(temp/c*(c*c-a[1]*a[1])); if(!scl) a[0] = temp*sqrt(1.-a[1]*a[1]/(4.*a[2])); } float lpp_reson(float x,float *a) { float temp; temp = *a * x + *(a+1) * *(a+3) - *(a+2) * *(a+4); *(a+4) = *(a+3); *(a+3) = temp; return(temp); } float lpp_allpass(float samp,float *a) { float temp,*aptr; if ( a[STARTM1] >= (int) a[0]) a[STARTM1] = START; aptr = a + (int)a[STARTM1]; a[STARTM1] ++; temp = *aptr; *aptr = *aptr * a[1] + samp; return(temp - a[1] * *aptr); } void lpp_init_reverb_data(float *a) { a[0] = 2; a[1] = -0.61043329; a[2] = -1.4582246; a[3] = 1; a[4] = 0.75887003; a[5] = 1; a[6] = -0.6922953; a[7] = 0; a[8] = 0; a[9] = 0.035888535; } void lpp_reverb1me(float *in, float *out, int inFrames, int out_frames, int nchans, int channel, float revtime, float dry, t_bashfest *x) { float dels[4];// stick into main structure float **alpo = x->mini_delay ; float a1,a2,a3,a4; int i; // int alsmp ; float *fltdata = x->reverb_ellipse_data; int nsects; float xnorm; LSTRUCT *eel = x->eel; float wet; // float max; float srate = x->sr; // float max_del = x->max_mini_delay ; wet = cos(1.570796 * dry); dry = sin(1.570796 * dry); /* combset uses reverb time , mycombset uses feedback */ for( i = 0; i < 4; i++ ) { dels[i] = lpp_boundrand(.005, .1 ); if(dels[i] < .005 || dels[i] > 0.1) { post("reverb1: bad random delay time: %f",dels[i]); dels[i] = .05; } lpp_mycombset(dels[i], revtime, 0, alpo[i], srate); } lpp_ellipset(fltdata,eel,&nsects,&xnorm); for( i = channel ; i < inFrames * nchans; i += nchans ) { a1 = lpp_allpass(in[i], alpo[0]); a2 = lpp_allpass(in[i], alpo[1]); a3 = lpp_allpass(in[i], alpo[2]); a4 = lpp_allpass(in[i], alpo[3]); out[i] = in[i] * dry + lpp_ellipse((a1+a2+a3+a4), eel, nsects,xnorm) * wet; } for( i = channel + inFrames * nchans; i < out_frames * nchans; i += nchans ) { a1 = lpp_allpass(0.0, alpo[0]); a2 = lpp_allpass(0.0, alpo[1]); a3 = lpp_allpass(0.0, alpo[2]); a4 = lpp_allpass(0.0, alpo[3]); out[i] = lpp_ellipse((a1+a2+a3+a4), eel, nsects,xnorm) * wet; } } void lpp_feed1(float *inbuf, float *outbuf, int in_frames, int out_frames,int channels, float *functab1, float *functab2,float *functab3,float *functab4,int funclen, float duration, float maxDelay, t_bashfest *x) { int i; float srate = x->sr; float *delayLine1a = x->mini_delay[0]; float *delayLine2a = x->mini_delay[1]; float *delayLine1b = x->mini_delay[2]; float *delayLine2b = x->mini_delay[3]; int dv1a[2], dv2a[2]; /* cmix bookkeeping */ int dv1b[2], dv2b[2]; /* cmix bookkeeping */ float delsamp1a=0, delsamp2a=0 ; float delsamp1b=0, delsamp2b=0 ; float delay1, delay2, feedback1, feedback2; float funcSi, funcPhs; float putsamp; /***************************/ funcPhs = 0.; // read once during note funcSi = ((float) funclen / srate) / duration ; lpp_delset2(delayLine1a, dv1a, maxDelay,srate); lpp_delset2(delayLine2a, dv2a, maxDelay,srate); if( channels == 2 ) { lpp_delset2(delayLine1b, dv1b, maxDelay,srate); lpp_delset2(delayLine2b, dv2b, maxDelay,srate); } for(i = 0; i < out_frames*channels; i += channels ) { // buffer loop delay1 = functab1[ (int) funcPhs ]; delay2 = functab2[ (int) funcPhs ]; feedback1 = functab3[ (int) funcPhs ]; feedback2 = functab4[ (int) funcPhs ]; funcPhs += funcSi; if( funcPhs >= (float) funclen ) funcPhs = 0; putsamp = i < in_frames * channels ? inbuf[i] + delsamp1a*feedback1 : 0.0; outbuf[i] = putsamp; // zero instead ?? lpp_delput2( putsamp, delayLine1a, dv1a); delsamp1a = lpp_dliget2(delayLine1a, delay1, dv1a,srate); putsamp = delsamp1a+delsamp2a*feedback2 ; lpp_delput2( putsamp, delayLine2a, dv2a); delsamp2a = lpp_dliget2(delayLine2a, delay2, dv2a, srate); outbuf[i] += delsamp2a; if( channels == 2 ) { putsamp = i < in_frames * channels ? inbuf[i+1] + delsamp1a*feedback1 : 0.0; outbuf[i+1] = putsamp; lpp_delput2( putsamp, delayLine1b, dv1b); delsamp1b = lpp_dliget2(delayLine1b, delay1, dv1b, srate); putsamp = delsamp1b+delsamp2b*feedback2; lpp_delput2( putsamp, delayLine2b, dv2b); delsamp2b = lpp_dliget2(delayLine2b, delay2, dv2b, srate); outbuf[i+1] += delsamp2b; } } } void lpp_setflamfunc1(float *arr, int flen) { int i; float x; for ( i = 0; i < flen; i++) { x = (float)i / (float) flen ; *(arr + i) = ((x - 1) / (x + 1)) * -1. ; } } void lpp_setExpFlamFunc(float *arr, int flen, float v1,float v2,float alpha) { int i; if( alpha == 0 ) alpha = .00000001 ; for ( i = 0; i < flen; i++) { *(arr + i) = v1 + (v2-v1) * ((1-exp((float)i*alpha/((float)flen-1.)))/(1-exp(alpha))); } } void lpp_funcgen1(float *outArray, int outlen, float duration, float outMin, float outMax, float speed1, float speed2, float gain1, float gain2, float *phs1, float *phs2, float *sine, int sinelen) { float si1, si2; float localSR; int i; localSR = duration * (float) outlen ; *phs1 *= (float) sinelen; *phs2 *= (float) sinelen; si1 = ((float)sinelen/localSR) * speed1; si2 = ((float)sinelen/localSR) * speed2; for( i = 0; i < outlen; i++ ) { *(outArray + i) = lpp_oscil(gain1, si1, sine, sinelen, phs1) ; *(outArray + i) += lpp_oscil(gain2, si2, sine, sinelen, phs2) ; } lpp_normtab( outArray, outArray, outMin, outMax, outlen); } void lpp_normtab(float *inarr,float *outarr, float min, float max, int len) { int i; float imin=9999999999., imax=-9999999999.; for(i = 0; i < len ; i++) { if( imin > inarr[i] ) imin = inarr[i]; if( imax < inarr[i] ) imax = inarr[i]; } for(i = 0; i < len; i++ ) outarr[i] = lpp_mapp(inarr[i], imin, imax, min, max); } float lpp_mapp(float in,float imin,float imax,float omin,float omax) { if( imax == 0.0 ) { return 0.0 ; } return( omin+((omax-omin)*((in-imin)/(imax-imin))) ); } float lpp_oscil(float amp,float si,float *farray,int len,float *phs) { register int i = *phs; *phs += si; while(*phs >= len) *phs -= len; return(*(farray+i) * amp); } void lpp_killdc( float *inbuf, int in_frames, int channels, t_bashfest *x) { int i,j=1; LSTRUCT *eel = x->eel; int nsects; float xnorm; float *dcflt = x->dcflt; /* float dcflt[64] = {3, -1.9999924 , -1.9992482 , 1.0000000 , .99928019 , -1.9999956 , -1.9964080 , 1.0000000 , .99645999 , -1.9999994 , -1.9805074 , 1.0000000 , .98069401 , .98817413E+00};*/ for( j = 0; j < channels; j++) { lpp_ellipset(dcflt,eel,&nsects,&xnorm); for( i = j; i < in_frames * channels ; i += channels ) { inbuf[i] = lpp_ellipse(inbuf[i], eel, nsects,xnorm); } } } void lpp_set_dcflt(float *a) { a[0] = 3; a[1] = -1.9999924; a[2] = -1.9992482; a[3] = 1; a[4] = 0.99928019; a[5] = -1.9999956; a[6] = -1.996408; a[7] = 1; a[8] = 0.99645999; a[9] = -1.9999994; a[10] = -1.9805074; a[11] = 1; a[12] = 0.98069401; a[13] = 0.98817413; } void lpp_set_distortion_table(float *arr, float cut, float max, int len) { int i, len2; float samp; len2 = len>>1 ; for( i = len2; i < len; i++ ) { samp = (float)(i - len2) / (float) len2 ; if( samp > cut ) samp = lpp_mapp( samp, cut, 1.0, cut, max ); *(arr + i) = samp; } for( i = 0; i < len2; i++ ) *(arr + i) = - *(arr + len - (i+1)); } float lpp_dlookup(float samp,float *arr,int len) { return arr[(int) (((samp+1.0)/2.0) * (float) len)]; } void lpp_do_compdist(float *in,float *out,int sampFrames,int nchans,int channel, float cutoff,float maxmult,int lookupflag,float *table,int range,float bufMaxamp) { int i; float rectsamp; for( i = channel ; i < sampFrames * nchans; i+= nchans ) { if( lookupflag) { *(out + i) = lpp_dlookup( *(in + i)/bufMaxamp, table, range ); } else { rectsamp = fabs( *(in + i) ) / bufMaxamp; if( rectsamp > cutoff ) { *(in + i) = *(out + i) * lpp_mapp( rectsamp, cutoff, 1.0, cutoff, maxmult); } } } } float lpp_getmaxamp(float *arr, int len) { int i; float max = 0; for(i = 0; i < len; i++ ) { if( fabs(arr[i]) > max ) max = fabs(arr[i]); } return max; } void lpp_buildadsr(CMIXADSR *a) { float A = a->a; float D = a->d; float S = a->s; float R = a->r; float f1 = a->v1; float f2 = a->v2; float f3 = a->v3; float f4 = a->v4; int funclen = a->len; float *func = a->func; float total; int ipoint = 0; int i; int segs[4]; float m1,m2; total = A + D + S + R ; segs[0] = (A/total) * funclen; segs[1] = (D/total) * funclen; segs[2] = (S/total) * funclen; segs[3] = funclen - (segs[0]+segs[1]+segs[2]); if( f1 > 20000. || f1 < -20000. ) { f1 = 250.0; } if( f2 > 20000. || f2 < -20000. ) { f2 = 1250.0; } if( f3 > 20000. || f3 < -20000. ) { f3 = 950.0; } if( f4 > 20000. || f4 < -20000. ) { f4 = f1; } if( segs[0] <= 0 || segs[1] <= 0 || segs[2] <= 0 || segs[3] <= 0 ) { for( i = 0; i < 4; i++ ) { segs[i] = funclen / 4; } } for( i = 0 ; i < segs[0]; i++ ) { m1 = 1.-(float)i/(float)(segs[0]); m2 = 1. - m1; *(func +i ) = f1 * m1 + f2 * m2; } ipoint = i; for( i = 0 ; i < segs[1]; i++ ) { m1 = 1.-(float)i/(float)(segs[1]); m2 = 1. - m1; *(func + i + ipoint) = f2 * m1 + f3 * m2; } ipoint += i; for( i = 0 ; i < segs[2]; i++ ) { m1 = 1.-(float)i/(float)(segs[2]); m2 = 1. - m1; *(func + i + ipoint) = f3; } ipoint += i; for( i = 0 ; i < segs[3]; i++ ) { m1 = 1.-(float)i/(float)(segs[3]); m2 = 1. - m1; *(func + ipoint + i) = f3 * m1 + f4 * m2; } ipoint += i; } pd-lyonpotpourri-3.0.1/bashfest~-help.pd000066400000000000000000000220301430526361000203260ustar00rootroot00000000000000#N canvas 600 60 767 631 12; #N canvas 0 22 450 300 (subpatch) 0; #X array bashdrum 16884 float 2; #X coords 0 1 16884 -1 60 20 1; #X restore 63 500 graph; #N canvas 600 60 638 373 load-samples 0; #X obj 41 107 soundfiler; #X msg 41 39 bang; #X obj 41 65 openpanel; #X obj 158 26 loadbang; #X msg 41 87 read -resize \$1 bashdrum; #X obj 156 132 loadbang; #X msg 148 203 read -resize lyonpotpourri/sound/KR55SNAR.aiff snare ; #X msg 111 161 read -resize lyonpotpourri/sound/hi_c_12b.aiff hihat ; #X msg 157 52 read -resize lyonpotpourri/sound/kick_11d.aiff bashdrum ; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 3 0 8 0; #X connect 4 0 0 0; #X connect 5 0 7 0; #X connect 5 0 6 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X connect 8 0 0 0; #X restore 432 229 pd load-samples; #N canvas 525 461 578 432 hatter 0; #X obj 274 72 sig~ 1; #X obj 74 19 inlet~; #X floatatom 149 244 10 0 0 0 - - -; #X text 233 277 compensate for bashfest latency; #X floatatom 120 320 5 0 0 0 - - -; #X obj 74 347 *~ 0.15; #X obj 74 98 lyonpotpourri/player~ hihat 1; #X obj 74 381 throw~ \$0-bashfest-output; #X msg 392 164 16384; #X obj 392 190 /; #X obj 392 138 t b b; #X obj 392 84 loadbang; #X obj 392 113 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 392 213 * 1000; #X obj 463 166 samplerate~; #X obj 74 47 lyonpotpourri/mask~ 1 0.7 0.7 0.7 1 0 0.5 0.6 1 0.7 1 0 1 0.7 0 0, f 67; #X obj 74 273 lyonpotpourri/vdp~ 500; #X obj 123 298 hsl 90 8 0 0.5 0 0 empty empty empty -2 -8 0 10 -261820 -1 -1 0 1; #X connect 0 0 6 1; #X connect 1 0 15 0; #X connect 2 0 16 1; #X connect 4 0 5 1; #X connect 5 0 7 0; #X connect 6 0 16 0; #X connect 8 0 9 0; #X connect 9 0 13 0; #X connect 10 0 8 0; #X connect 10 1 14 0; #X connect 11 0 12 0; #X connect 12 0 10 0; #X connect 13 0 2 0; #X connect 14 0 9 1; #X connect 15 0 6 0; #X connect 16 0 5 0; #X connect 17 0 4 0; #X restore 111 320 pd hatter; #N canvas 0 22 450 300 (subpatch) 0; #X array hihat 9097 float 2; #X coords 0 1 9097 -1 60 20 1; #X restore 63 426 graph; #N canvas 0 23 462 312 metronome-control 0; #X floatatom 52 88 5 0 0 0 - - -; #X msg 51 112 tempo \$1; #X msg 127 59 120; #X msg 51 55 60; #X msg 138 114 pause; #X msg 190 114 resume; #X obj 81 150 outlet; #X msg 92 56 140; #X connect 0 0 1 0; #X connect 1 0 6 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 7 0 0 0; #X restore 185 192 pd metronome-control; #N canvas 441 423 622 472 processor-control 0; #X obj 91 288 outlet; #N canvas 301 93 1087 672 set-processor-odds 0; #X obj 135 576 outlet; #X msg 440 194 setodds 0 0 0 0 0 1; #X text 591 193 sweepreson; #X msg 439 340 setodds 0 0 0 0 0 0 0 0 0 0 0 1; #X msg 436 505 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; #X msg 439 471 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; #X msg 436 533 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; #X text 756 533 resonadsr; #X msg 435 559 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; #X text 516 75 transpose; #X msg 441 78 setodds 1; #X text 533 99 ringmod; #X msg 442 100 setodds 0 1; #X text 566 169 truncate; #X msg 441 169 setodds 0 0 0 0 1; #X msg 441 263 setodds 0 0 0 0 0 0 0 0 1; #X msg 135 199 flatodds; #X text 410 32 Processors by position in list. Any list combination will select a set of processors in specified weighting for random selection. ; #X text 541 123 flange; #X msg 440 124 setodds 0 0 1; #X text 562 145 butterworth filters; #X msg 442 144 setodds 0 0 0 1; #X msg 442 216 setodds 0 0 0 0 0 0 1; #X text 593 215 comb; #X text 613 238 slidecomb; #X msg 441 239 setodds 0 0 0 0 0 0 0 1; #X text 634 263 reverb; #X msg 440 289 setodds 0 0 0 0 0 0 0 0 0 1; #X text 638 292 elliptical filters; #X msg 440 315 setodds 0 0 0 0 0 0 0 0 0 0 1; #X text 656 317 distortion/compression; #X text 663 337 feedback; #X msg 438 367 setodds 0 0 0 0 0 0 0 0 0 0 0 0 1; #X text 672 366 reverse; #X msg 438 391 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 1; #X text 697 390 flam1; #X msg 438 415 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; #X text 712 415 flam2; #X msg 438 441 setodds 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1; #X text 719 443 expflam; #X text 736 466 comb4; #X text 748 503 ringmod/feedback; #X text 770 559 stereo vdelay; #X msg 17 100 setodds 0.25 0.5 1 0 0 1 0.2 0 0 1 1 0.1 0.1 0 0 0.3 ; #X msg 30 125 setodds 1 1 1 1 1 1 1 1 0 1 1 0 1 0.2 0.2 0.2 1 1 1 1 ; #X text 40 80 a couple distributions; #X text 83 165 make every processor have an equal chance of being chosen: , f 32; #X connect 1 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 8 0 0 0; #X connect 10 0 0 0; #X connect 12 0 0 0; #X connect 14 0 0 0; #X connect 15 0 0 0; #X connect 16 0 0 0; #X connect 19 0 0 0; #X connect 21 0 0 0; #X connect 22 0 0 0; #X connect 25 0 0 0; #X connect 27 0 0 0; #X connect 29 0 0 0; #X connect 32 0 0 0; #X connect 34 0 0 0; #X connect 36 0 0 0; #X connect 38 0 0 0; #X connect 43 0 0 0; #X connect 44 0 0 0; #X restore 166 181 pd set-processor-odds; #N canvas 0 23 729 325 efficiency 0; #X msg 53 138 mute \$1; #X obj 53 45 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 ; #X msg 168 119 block_dsp \$1; #X obj 168 89 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 168 207 outlet; #X text 195 83 turn off [bashfest~] DSP to hear the sound currently in the array \, without added processing; #X text 74 39 turn off the [bashfest~] object and save CPU cycles; #X connect 0 0 4 0; #X connect 1 0 0 0; #X connect 2 0 4 0; #X connect 3 0 2 0; #X restore 276 247 pd efficiency; #N canvas 415 474 457 294 process-amount 0; #X obj 78 207 outlet; #N canvas 680 241 454 304 setodds 0; #X msg 124 131 minimum_process \$1; #X obj 158 91 unpack f f; #X msg 294 131 maximum_process \$1; #X obj 125 163 outlet; #X obj 159 58 inlet; #X connect 0 0 3 0; #X connect 1 0 0 0; #X connect 1 1 2 0; #X connect 2 0 3 0; #X connect 4 0 1 0; #X restore 79 165 pd setodds; #X msg 79 130 0 1; #X msg 36 130 0 0; #X msg 120 131 1 1; #X msg 156 131 1 2; #X msg 194 131 2 4; #X obj 120 94 loadbang; #X msg 234 133 4 8; #X text 230 112 lots of DSP; #X text 23 109 no DSP; #X text 23 19 set the minimum and maximum number of processor units per event. More processing results in cooler sounds \, but could also overtax your CPU.; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 4 0 1 0; #X connect 5 0 1 0; #X connect 6 0 1 0; #X connect 7 0 4 0; #X connect 8 0 1 0; #X restore 237 217 pd process-amount; #X msg 91 61 grab; #X text 89 26 replace original sound with whatever processed version is currently in the array; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X restore 32 193 pd processor-control; #N canvas 0 22 450 300 (subpatch) 0; #X array snare 9284 float 2; #X coords 0 1 9284 -1 60 20 1; #X restore 63 463 graph; #N canvas 46 411 513 413 bassdrum 0; #X obj 256 109 sig~ 1; #X obj 35 7 inlet~; #X msg 325 171 16384; #X obj 325 197 /; #X obj 325 121 t b b; #X floatatom 110 240 10 0 0 0 - - -; #X obj 325 67 loadbang; #X obj 325 96 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 202 268 compensate for bashfest latency; #X floatatom 74 314 5 0 0 0 - - -; #X obj 325 220 * 1000; #X obj 35 337 *~ 0.4; #X obj 77 298 hsl 90 8 0 0.5 0 0 empty empty empty -2 -8 0 10 -261820 -1 -1 0 1; #X obj 35 147 lyonpotpourri/player~ bashdrum 1; #X obj 35 361 throw~ \$0-bashfest-output; #X obj 357 149 samplerate~; #X obj 35 31 lyonpotpourri/mask~ 1 0 1 1 1 0 0 0 1 0 0 0 1 0 1 0; #X obj 35 270 lyonpotpourri/vdp~ 500; #X connect 0 0 13 1; #X connect 1 0 16 0; #X connect 2 0 3 0; #X connect 3 0 10 0; #X connect 4 0 2 0; #X connect 4 1 15 0; #X connect 5 0 17 1; #X connect 6 0 7 0; #X connect 7 0 4 0; #X connect 9 0 11 1; #X connect 10 0 5 0; #X connect 11 0 14 0; #X connect 12 0 9 0; #X connect 13 0 17 0; #X connect 15 0 3 1; #X connect 16 0 13 0; #X connect 17 0 11 0; #X restore 25 320 pd bassdrum; #X text 493 296 args: array \, maxdur \, latency \, voices; #X obj 185 297 lyonpotpourri/bashfest~ snare 2000 16384 12; #X obj 185 232 lyonpotpourri/samm~ 120 4; #X obj 185 258 lyonpotpourri/mask~ 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 ; #X obj 24 20 lpp-icon bashfest~; #X obj 185 398 lpp-meters; #X obj 192 343 catch~ \$0-bashfest-output; #X text 25 123 Sample-accurate playback from a buffer \, with click triggers. Random DSP is applied to each note. [bashfest~] is triggered by clicks in its inlet.; #X text 370 443 see also:; #X obj 350 460 cnv 15 100 20 empty empty lyonpotpourri/player~ 20 12 0 14 -262144 -1 0; #N canvas 0 23 835 590 read-the-paper 0; #X msg 84 101 browse https://www.researchgate.net/publication/255628929_A_Sample_Accurate_Triggering_System_for_Pd_and_MaxMSP ; #X obj 84 165 pdcontrol; #X obj 84 44 inlet; #X connect 0 0 1 0; #X connect 2 0 0 0; #X restore 371 552 pd read-the-paper; #X obj 371 523 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 392 526 read a paper about my sample-accurate externals; #X text 251 50 - a click triggered soundfile player with random DSP. , f 74; #X connect 4 0 10 0; #X connect 5 0 9 0; #X connect 9 0 13 0; #X connect 9 1 13 1; #X connect 10 0 2 0; #X connect 10 0 7 0; #X connect 10 0 11 0; #X connect 11 0 9 0; #X connect 14 0 13 0; #X connect 14 0 13 1; #X connect 19 0 18 0; pd-lyonpotpourri-3.0.1/bashfest~.c000066400000000000000000001366641430526361000172420ustar00rootroot00000000000000#include "MSPd.h" #include "bashfest.h" #include /* THIS IS PROBABLY THE LIMITING FACTOR FOR LARGE BUFFER SIZES SO, MAKE THIS A PARAMETER, -OR- BUFFER THE INPUT TRIGGER ITSELF!!! */ #define DEFAULT_MAX_OVERLAP (8) // number of overlapping instances allowed #define ACTIVE 0 #define INACTIVE 1 #define MAX_VEC 2048 #define DEFAULT_BUFFER_SIZE 4000.0 // 4 second default buffer size * 2 #define DEFAULT_LATENCY 8192 //latency in samples after a trigger for note to start #define MAX_PARAMETERS 2048 #define PROCESS_COUNT 20 #define CYCLE_MAX 1024 #define OBJECT_NAME "bashfest~" static t_class *bashfest_class; static void *bashfest_new(t_symbol *msg, int argc, t_atom *argv); static t_int *bashfest_perform_hosed(t_int *w); static void bashfest_dsp(t_bashfest *x, t_signal **sp); static void bashfest_dsp_free(t_bashfest *x); static int bashfest_set_parameters(t_bashfest *x,float *params); static t_int *bashfest_perform(t_int *w); static void bashfest_deploy_dsp(t_bashfest *x); static void bashfest_copy_to_MSP_buffer(t_bashfest *x, int slot); /*user messages*/ static void bashfest_stop(t_bashfest *x); static void bashfest_info(t_bashfest *x); static void bashfest_mute(t_bashfest *x, t_floatarg t); static void bashfest_maximum_process(t_bashfest *x, t_floatarg n); static void bashfest_minimum_process(t_bashfest *x, t_floatarg n); static void bashfest_setbuf(t_bashfest *x, t_symbol *wavename); static void bashfest_flatodds(t_bashfest *x); static void bashfest_killproc(t_bashfest *x, long p); static void bashfest_soloproc(t_bashfest *x, long p); static void bashfest_latency(t_bashfest *x, long n); static void bashfest_verbose(t_bashfest *x, long t); static void bashfest_block_dsp(t_bashfest *x, t_floatarg t); static void bashfest_gozero(t_bashfest *x); static void bashfest_grab(t_bashfest *x); static void bashfest_setodds(t_bashfest *x,t_symbol *msg, int argc, t_atom *argv); static void bashfest_tcycle(t_bashfest *x,t_symbol *msg, int argc, t_atom *argv); /* function code */ void lpp_killdc( float *inbuf, int in_frames, int channels, t_bashfest *x); void lpp_ringmod(t_bashfest *x, int slot, int *pcount); void lpp_retrograde(t_bashfest *x, int slot, int *pcount); void lpp_comber(t_bashfest *x, int slot, int *pcount); void lpp_transpose(t_bashfest *x, int slot, int *pcount); void lpp_flange(t_bashfest *x, int slot, int *pcount); void lpp_butterme(t_bashfest *x, int slot, int *pcount); void lpp_truncateme(t_bashfest *x, int slot, int *pcount); void lpp_sweepreson(t_bashfest *x, int slot, int *pcount); void lpp_slidecomb(t_bashfest *x, int slot, int *pcount); void lpp_reverb1(t_bashfest *x, int slot, int *pcount); void lpp_ellipseme(t_bashfest *x, int slot, int *pcount); void lpp_feed1me(t_bashfest *x, int slot, int *pcount); void lpp_flam1(t_bashfest *x, int slot, int *pcount); void lpp_flam2(t_bashfest *x, int slot, int *pcount); void lpp_expflam(t_bashfest *x, int slot, int *pcount); void lpp_comb4(t_bashfest *x, int slot, int *pcount); void lpp_ringfeed(t_bashfest *x, int slot, int *pcount); void lpp_resonadsr(t_bashfest *x, int slot, int *pcount); void lpp_stv(t_bashfest *x, int slot, int *pcount); void lpp_compdist(t_bashfest *x, int slot, int *pcount); void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); void bashfest_tilde_setup(void) { bashfest_class = class_new(gensym("bashfest~"),(t_newmethod)bashfest_new,(t_method)bashfest_dsp_free, sizeof(t_bashfest), 0, A_GIMME,0); CLASS_MAINSIGNALIN(bashfest_class,t_bashfest, x_f ); class_addmethod(bashfest_class,(t_method)bashfest_dsp,gensym("dsp"),A_CANT,0); class_addmethod(bashfest_class,(t_method)bashfest_setbuf,gensym("setbuf"),A_SYMBOL,0); class_addmethod(bashfest_class,(t_method)bashfest_stop,gensym("stop"),0); class_addmethod(bashfest_class,(t_method)bashfest_flatodds,gensym("flatodds"),0); class_addmethod(bashfest_class,(t_method)bashfest_soloproc,gensym("soloproc"),A_FLOAT,0); class_addmethod(bashfest_class,(t_method)bashfest_killproc,gensym("killproc"),A_FLOAT,0); class_addmethod(bashfest_class,(t_method)bashfest_latency,gensym("latency"),A_FLOAT,0); class_addmethod(bashfest_class,(t_method)bashfest_mute,gensym("mute"),A_FLOAT,0); class_addmethod(bashfest_class,(t_method)bashfest_verbose,gensym("verbose"),A_FLOAT,0); class_addmethod(bashfest_class,(t_method)bashfest_setodds,gensym("setodds"),A_GIMME,0); class_addmethod(bashfest_class,(t_method)bashfest_tcycle,gensym("tcycle"),A_GIMME,0); class_addmethod(bashfest_class,(t_method)bashfest_gozero,gensym("gozero"),0); class_addmethod(bashfest_class,(t_method)bashfest_grab,gensym("grab"),0); class_addmethod(bashfest_class,(t_method)bashfest_maximum_process,gensym("maximum_process"),A_FLOAT,0); class_addmethod(bashfest_class,(t_method)bashfest_minimum_process,gensym("minimum_process"),A_FLOAT,0); class_addmethod(bashfest_class,(t_method)bashfest_block_dsp,gensym("block_dsp"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void bashfest_block_dsp(t_bashfest *x, t_floatarg t) { x->block_dsp = (short)t; } void bashfest_maximum_process(t_bashfest *x, t_floatarg n) { if(n < 0) { pd_error(0, "illegal val to maximum_process"); return; } x->max_process_per_note = (int)n; } void bashfest_minimum_process(t_bashfest *x, t_floatarg n) { if(n < 0) { pd_error(0, "illegal val to minimum_process"); return; } x->min_process_per_note = (int)n; } void bashfest_verbose(t_bashfest *x, long t) { x->verbose = t; } void bashfest_latency(t_bashfest *x, long n) { if(n < x->vs) { pd_error(0, "latency cannot be less than %d",x->vs); return; } /* if(n > x->latency_samples) { x->trigger_buffer = (float *) realloc(x->trigger_buffer, n * sizeof(float)); } x->tb_inpt = 0; x->tb_outpt = x->latency_samples - x->vs;*/ x->latency_samples = n; } void bashfest_stop(t_bashfest *x) { int i; for(i = 0; i < x->overlap_max; i++) { x->events[i].status = INACTIVE; } } void bashfest_mute(t_bashfest *x, t_floatarg t) { x->mute = (short)t; } void bashfest_grab(t_bashfest *x) { x->grab = 1; } void bashfest_tcycle(t_bashfest *x,t_symbol *msg, int argc, t_atom *argv) { t_cycle tcycle = x->tcycle; int i; float data=1.0; if(argc < 1) { pd_error(0, "no data for tcycle!"); return; } else if(argc > CYCLE_MAX) { pd_error(0, "%d is the maximum size tcycle",CYCLE_MAX); return; } x->tcycle.len = argc; x->tcycle.p = 0; for(i=0;itcycle.p = 0; } void bashfest_setodds(t_bashfest *x,t_symbol *msg, int argc, t_atom *argv) { int i; if(argc > PROCESS_COUNT) { pd_error(0, "there are only %d processes",PROCESS_COUNT); return; } for(i=0;iodds[i] = 0.0; } for(i=0;iodds[i] = atom_getfloatarg(i,argc,argv); } lpp_setweights(x->odds,PROCESS_COUNT); } void bashfest_soloproc(t_bashfest *x, long p) { int i; if(p < 0 || p >= PROCESS_COUNT) { pd_error(0, "bad %ld",p); } for(i=0;iodds[i] = 0.0; } x->odds[p] = 1.0; lpp_setweights(x->odds,PROCESS_COUNT); } void bashfest_killproc(t_bashfest *x, long p) { int i; if(p < 0 || p >= PROCESS_COUNT) { pd_error(0, "bad %ld",p); } for(i=0;iodds[i] = 1.0; } x->odds[p] = 0.0; lpp_setweights(x->odds,PROCESS_COUNT); } void bashfest_flatodds(t_bashfest *x) { int i; for(i=0;iodds[i] = 1.0; } lpp_setweights(x->odds,PROCESS_COUNT); } void *bashfest_new(t_symbol *msg, int argc, t_atom *argv) { t_bashfest *x = (t_bashfest *)pd_new(bashfest_class); // outlet_new(&x->x_obj, gensym("signal")); int i; long membytes = 0; float tmpfloat; srand(time(0)); x->sr = sys_getsr(); x->vs = sys_getblksize(); if(! x->sr) x->sr = 44100; x->work_buffer_size = DEFAULT_BUFFER_SIZE; // x->latency_samples = DEFAULT_LATENCY; // x->overlap_max = DEFAULT_MAX_OVERLAP; /* argument list: buffer name, work buffer duration, latency in samples, number of overlaps */ x->wavename = &s_; atom_arg_getsym(&x->wavename,0,argc,argv); atom_arg_getfloat(&x->work_buffer_size,1,argc,argv); tmpfloat = DEFAULT_LATENCY; atom_arg_getfloat(&tmpfloat,2,argc,argv); x->latency_samples = tmpfloat; tmpfloat = DEFAULT_MAX_OVERLAP; atom_arg_getfloat(&tmpfloat,3,argc,argv); x->overlap_max = tmpfloat; outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->sinelen = 8192; x->verbose = 0; x->most_recent_event = 0; x->active_events = 0; x->increment = 1.0; x->block_dsp = 0; x->grab = 0; /* x->tb_inpt = 0; if(x->latency_samples < x->vs) { x->latency_samples = x->vs;//might need x->vs * 2 here pd_error(0, "latency forced to %d samples",x->vs); } x->tb_outpt = x->latency_samples - x->vs; */ /* buffer contains space for both input and output, thus factor of 2 */ x->buf_frames = 2 * x->work_buffer_size * .001 * x->sr; x->buf_samps = x->buf_frames * 2; x->halfbuffer = x->buf_samps / 2; x->maxdelay = 1.0; // in seconds /*memory allocation */ x->events = (t_event *) t_getbytes(x->overlap_max * sizeof(t_event)); x->trigger_vec = (float *) t_getbytes(MAX_VEC * sizeof(float)); x->sinewave = t_getbytes(x->sinelen * sizeof(float)); x->params = t_getbytes(MAX_PARAMETERS * sizeof(float)); x->odds = t_getbytes(64 * sizeof(float)); // x->trigger_buffer = calloc(x->latency_samples, sizeof(float)); for(i=0;i<64;i++) x->odds[i] = 0; lpp_putsine(x->sinewave, x->sinelen); for(i=0;ioverlap_max;i++) { x->events[i].workbuffer = (float *) t_getbytes(x->buf_samps * sizeof(float)); } x->delayline1 = (float *) t_getbytes(x->maxdelay * x->sr * sizeof(float)); x->delayline2 = (float *) t_getbytes(x->maxdelay * x->sr * sizeof(float)); x->max_mini_delay = .25; x->eel = (LSTRUCT *) t_getbytes(MAXSECTS * sizeof(LSTRUCT)); for( i = 0; i < 4 ; i++ ) { x->mini_delay[i] = (float *) t_getbytes(((int)(x->sr * x->max_mini_delay) + 1) * sizeof(float)); } x->reverb_ellipse_data = (float *) t_getbytes(16 * sizeof(float)); x->ellipse_data = (float **) t_getbytes(MAXFILTER * sizeof(float *)); for(i=0;iellipse_data[i] = (float *) t_getbytes(MAX_COEF * sizeof(float)); } x->tf_len = 1; x->tf_len <<= 16; x->transfer_function = (float *) t_getbytes(x->tf_len * sizeof(float) ); x->feedfunclen = 8192 ; x->feedfunc1 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); x->feedfunc2 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); x->feedfunc3 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); x->feedfunc4 = (float *) t_getbytes( x->feedfunclen * sizeof(float) ); x->flamfunc1len = 8192 ; x->flamfunc1 = (float *) t_getbytes( x->flamfunc1len * sizeof(float)); lpp_setflamfunc1(x->flamfunc1,x->flamfunc1len); x->max_comb_lpt = 0.15 ;// watch out here x->combies = (CMIXCOMB *) t_getbytes(4 * sizeof(CMIXCOMB)); for( i = 0; i < 4; i++ ) { x->combies[i].len = x->sr * x->max_comb_lpt + 2; x->combies[i].arr = (float *) t_getbytes(x->combies[i].len * sizeof(float)); } x->adsr = (CMIXADSR *) t_getbytes(1 * sizeof(CMIXADSR)); x->adsr->len = 32768 ; x->adsr->func = (float *) t_getbytes(x->adsr->len * sizeof(float) ); x->dcflt = (float *) t_getbytes(16 * sizeof(float)); x->tcycle.data = (float *) t_getbytes(CYCLE_MAX * sizeof(float)); x->tcycle.len = 0; for(i=0;ioverlap_max;i++) { x->events[i].phasef = x->events[i].phase = 0.0; } membytes = x->overlap_max * sizeof(t_event); membytes += x->sinelen * sizeof(float); membytes += MAX_PARAMETERS * sizeof(float); membytes += 64 * sizeof(float); membytes += x->buf_samps * sizeof(float) * x->overlap_max; membytes += x->maxdelay * x->sr * sizeof(float) * 2; membytes += MAXSECTS * sizeof(LSTRUCT); membytes += ((int)(x->sr * x->max_mini_delay) + 1) * sizeof(float) * 4; membytes += 16 * sizeof(float); membytes += MAXFILTER * sizeof(float *); membytes += MAX_COEF * sizeof(float) * MAXFILTER; membytes += x->tf_len * sizeof(float); membytes += x->feedfunclen * sizeof(float) * 4; membytes += x->flamfunc1len * sizeof(float); membytes += 4 * sizeof(CMIXCOMB); membytes += x->combies[0].len * sizeof(float) * 4; membytes += sizeof(CMIXADSR); membytes += x->adsr->len * sizeof(float); membytes += 16 * sizeof(float); membytes += CYCLE_MAX * sizeof(float); // post("total memory for this bashfest %.2f MBytes",(float)membytes/1000000.); /* be sure to finish clearing memory */ lpp_set_dcflt(x->dcflt); lpp_init_reverb_data(x->reverb_ellipse_data); lpp_init_ellipse_data(x->ellipse_data); for(i=0;iodds[i] = 1; } x->max_process_per_note = 2; lpp_setweights(x->odds,PROCESS_COUNT); x->mute = 0; for(i = 0; i < x->overlap_max; i++) { x->events[i].status = INACTIVE; } return x; } void bashfest_setbuf(t_bashfest *x, t_symbol *wavename) { t_garray *a; x->hosed = 0; x->b_frames = 0; x->b_nchans = 1; x->b_valid = 0; int b_frames; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "bashfest~: %s: no such array", wavename->s_name); x->b_samples = 0; x->hosed = 1; } else if (!garray_getfloatwords(a, &b_frames, &x->b_samples)) { pd_error(x, "%s: bad array for bashfest~", wavename->s_name); x->b_samples = 0; x->hosed = 1; } else { x->b_frames = (long)b_frames; // post("%d frames in buffer %s",x->b_frames, wavename->s_name); garray_usedindsp(a); x->b_valid = 1; } } t_int *bashfest_perform_hosed(t_int *w) { // t_bashfest *x = (t_bashfest *) (w[1]); // float *trigger = (t_float *)(w[2]); float *outchanL = (t_float *)(w[3]); float *outchanR = (t_float *)(w[4]); int n = (int) w[5]; // try bzero // while(n--) *outchanL++ = *outchanR++ = 0.0; memset((char *)outchanL, 0, sizeof(float) * n); memset((char *)outchanR, 0, sizeof(float) * n); return(w+6); } /* modified for dsp turnoff*/ t_int *bashfest_perform(t_int *w) { t_bashfest *x = (t_bashfest *) (w[1]); float *t_vec = (t_float *)(w[2]); float *outchanL = (t_float *)(w[3]); float *outchanR = (t_float *)(w[4]); int n = (int) w[5]; t_word *b_samples; long b_nchans; // long b_valid; long b_frames; t_event *events = x->events; // int active_events = x->active_events; float increment = x->increment; int overlap_max = x->overlap_max; int iphase; int flimit; short insert_success; int new_insert; int i,j,k; t_cycle tcycle = x->tcycle; float gain; // short bail; float frac; float samp1, samp2; float maxphase; int theft_candidate; int out_channels; float *processed_drum; char *sound_name = x->sound_name; int latency_samples = x->latency_samples; float *trigger_vec = x->trigger_vec; for(i = 0; i < n; i++) trigger_vec[i] = t_vec[i]; if(x->mute || x->hosed) { while(n--) { *outchanL++ = *outchanR++ = 0.0; } return(w+6); } bashfest_setbuf(x, x->wavename); if(! x->b_valid) { while(n--) { *outchanL++ = *outchanR++ = 0.0; } return(w+6); } b_samples = x->b_samples; b_frames = x->b_frames; b_nchans = 1; // for Pd if(x->block_dsp) { /* computation savings if processing is blocked */ /* preliminary transposition will be set here */ if(tcycle.len > 0) { increment = tcycle.data[tcycle.p]; // post("position %d, increment %f",tcycle.p,increment ); } else { increment = 1.0; //error("increment default, len is zero"); } // initial cleaning for(i=0; i 0) { --events[i].countdown; } else { iphase = events[i].phasef; frac = events[i].phasef - iphase; if(increment > 0) { if(iphase == flimit || increment == 1.0) { outchanL[j] += b_samples[iphase].w_float * gain; outchanR[j] += b_samples[iphase].w_float * gain; } else { samp1 = b_samples[iphase].w_float; samp2 = b_samples[iphase+1].w_float; samp1 = gain * (samp1 + frac * (samp2-samp1)); outchanL[j] += samp1; outchanR[j] += samp1; } } else { /*negative increment case (currently unused but might be useful)*/ if(iphase == 0.0 || increment == -1.0 ) { outchanL[j] += b_samples[iphase].w_float * gain; outchanR[j] += b_samples[iphase].w_float * gain; } else { samp2 = b_samples[iphase].w_float; samp1 = b_samples[iphase-1].w_float; samp1 = gain * (samp1 + frac * (samp2-samp1)); outchanL[j] += samp1; outchanR[j] += samp1; } } events[i].phasef += increment; if( events[i].phasef < 0.0 || events[i].phasef >= b_frames) { events[i].status = INACTIVE; events[i].phasef = 0; // post("valid exit mono note"); break; } } } } else if(b_nchans == 2) { /* for(j = 0; j < n; j++) { if(events[i].countdown > 0) { --events[i].countdown; } else { iphase = events[i].phasef; frac = events[i].phasef - iphase; iphase *= 2; if(increment > 0) { if(iphase == flimit || increment == 1.0) { outchanL[j] += b_samples[iphase] * gain; outchanR[j] += b_samples[iphase+1] * gain; } else { samp1 = b_samples[iphase]; samp2 = b_samples[iphase+2]; outchanL[j] += gain * (samp1 + frac * (samp2-samp1)); samp1 = b_samples[iphase+1]; samp2 = b_samples[iphase+3]; outchanR[j] += gain * (samp1 + frac * (samp2-samp1)); } } else { if(iphase == 0.0 || increment == -1.0 ) { outchanL[j] += b_samples[iphase] * gain; outchanR[j] += b_samples[iphase+1] * gain; } else { samp2 = b_samples[iphase]; samp1 = b_samples[iphase-2]; outchanL[j] += gain * (samp1 + frac * (samp2-samp1)); samp2 = b_samples[iphase+1]; samp1 = b_samples[iphase-1]; outchanR[j] += gain * (samp1 + frac * (samp2-samp1)); } } events[i].phasef += increment; if( events[i].phasef < 0.0 || events[i].phasef >= b_frames) { events[i].status = INACTIVE; break; } } }*/ } } } for(i=0; i 0) { events[j].phasef = 0.0; } else { events[j].phasef = b_frames - 1; } insert_success = 1; new_insert = j; break; } } if(!insert_success){ // steal a note maxphase = 0; theft_candidate = 0; for(k = 0; k < overlap_max; k++) { if(events[k].phasef > maxphase) { maxphase = events[k].phasef; theft_candidate = k; } } new_insert = theft_candidate; events[new_insert].gain = gain; if(increment > 0) { events[new_insert].phasef = 0.0; } else { events[new_insert].phasef = b_frames - 1; } insert_success = 1; post("stealing a note at %d for buffer %s", new_insert, sound_name); } events[new_insert].countdown = latency_samples; events[new_insert].status = ACTIVE; x->new_slot = new_insert; x->new_gain = gain; // post("new note at slot %d",new_insert); if(tcycle.len > 0) { increment = tcycle.data[tcycle.p++]; if(tcycle.p >= tcycle.len) { tcycle.p = 0; } x->tcycle.p = tcycle.p; } else { increment = 1.0; } for(k=i; k 0) { --events[new_insert].countdown; } else { if(b_nchans == 1) { iphase = events[new_insert].phasef; frac = events[new_insert].phasef - iphase; if(iphase < 0 || iphase >= b_frames) { pd_error(0, "aborting on phase %f",events[new_insert].phasef); break; } if(increment > 0) { if(iphase == flimit || increment == 1.0) { outchanL[k] += b_samples[iphase].w_float * gain; outchanR[k] += b_samples[iphase].w_float * gain; } else { samp1 = b_samples[iphase].w_float; samp2 = b_samples[iphase+1].w_float; samp1 = gain * (samp1 + frac * (samp2-samp1)); outchanL[k] += samp1; outchanR[k] += samp1; } } else { /*negative increment case (currently unused but might be useful)*/ if(iphase == 0.0 || increment == -1.0 ) { outchanL[k] += b_samples[iphase].w_float * gain; outchanR[k] += b_samples[iphase].w_float * gain; } else { samp2 = b_samples[iphase].w_float; samp1 = b_samples[iphase-2].w_float; samp1 = gain * (samp1 + frac * (samp2-samp1)); outchanL[k] += samp1; outchanR[k] += samp1; } } events[new_insert].phasef += increment; if( events[new_insert].phasef < 0.0 || events[new_insert].phasef >= b_frames) { events[new_insert].status = INACTIVE; break; } } else if(b_nchans == 2) { /* iphase = events[new_insert].phasef; frac = events[new_insert].phasef - iphase; iphase *= 2; if(increment > 0) { if(iphase == flimit || increment == 1.0) { outchanL[k] += b_samples[iphase] * gain; outchanR[k] += b_samples[iphase+1] * gain; } else { samp1 = b_samples[iphase]; samp2 = b_samples[iphase+2]; outchanL[k] += gain * (samp1 + frac * (samp2-samp1)); samp1 = b_samples[iphase+1]; samp2 = b_samples[iphase+3]; outchanR[k] += gain * (samp1 + frac * (samp2-samp1)); } } else { if(iphase == 0.0 || increment == -1.0 ) { outchanL[k] += b_samples[iphase] * gain; outchanR[k] += b_samples[iphase+1] * gain; } else { samp2 = b_samples[iphase]; samp1 = b_samples[iphase-2]; outchanL[k] += gain * (samp1 + frac * (samp2-samp1)); samp2 = b_samples[iphase+1]; samp1 = b_samples[iphase-1]; outchanR[k] += gain * (samp1 + frac * (samp2-samp1)); } } events[new_insert].phasef += increment; if( events[new_insert].phasef < 0.0 || events[new_insert].phasef >= b_frames) { events[new_insert].status = INACTIVE; break; } */ } } } } } x->increment = increment; /* x->tb_inpt = tb_inpt; x->tb_outpt = tb_outpt;*/ return(w+6); /* end of block_dsp contingecy code */ } /* main body of bashfest processing */ for(i=0; igrab) { x->grab = 0; // if too slow, defend with defer_low() bashfest_copy_to_MSP_buffer(x,i); } if(events[i].countdown > 0) { --events[i].countdown; } else { if(out_channels == 1) { outchanL[j] += processed_drum[events[i].phase] * events[i].gainL; outchanR[j] += processed_drum[events[i].phase] * events[i].gainR; } else if(out_channels == 2) { iphase = events[i].phase * 2; outchanL[j] += processed_drum[iphase] * events[i].gainL; outchanR[j] += processed_drum[iphase+1] * events[i].gainR; } events[i].phase++; if(events[i].phase >= events[i].sample_frames) { events[i].status = INACTIVE; break; } } } } } /* now check for initiation click. If found, add to list. If necessary, steal a note */ for(i=0; i maxphase) { maxphase = events[k].phase; theft_candidate = k; } } if(x->verbose) { post("stealing note at slot %d", theft_candidate); } post("stealing a note at %d for buffer %s", theft_candidate, sound_name); new_insert = theft_candidate; events[new_insert].gain = gain; insert_success = 1; } events[new_insert].countdown = x->latency_samples; x->new_slot = new_insert; x->new_gain = gain; bashfest_deploy_dsp(x); /* now begin output from the new note */ out_channels = events[new_insert].out_channels; processed_drum = events[new_insert].workbuffer + events[new_insert].in_start; /* processed_drum = events[new_insert].workbuffer; */ for(j = i; j < n; j++) { if(events[new_insert].countdown > 0) { --events[new_insert].countdown; } else{ iphase = events[new_insert].phase; if(x->grab) { x->grab = 0; // if too slow, defend with defer_low() bashfest_copy_to_MSP_buffer(x,i); } if(out_channels == 1) { outchanL[j] += processed_drum[iphase] * events[new_insert].gainL; outchanR[j] += processed_drum[iphase] * events[new_insert].gainR; } else if(out_channels == 2) { iphase = events[i].phase * 2; outchanL[j] += processed_drum[iphase] * events[new_insert].gainL; outchanR[j] += processed_drum[iphase+1] * events[new_insert].gainR; } events[new_insert].phase++; if(events[new_insert].phase >= events[new_insert].sample_frames) { events[new_insert].status = INACTIVE; break; } } } } } return (w+6); } void bashfest_copy_to_MSP_buffer(t_bashfest *x, int slot) { int i; //,j; t_event *events = x->events; long b_nchans = x->b_nchans; long b_frames = x->b_frames; t_word *b_samples = x->b_samples; float *processed_drum; processed_drum = events[slot].workbuffer + events[slot].in_start; if(events[slot].out_channels == b_nchans) { if(b_nchans == 1) { for(i=0;ib_samples; long b_nchans = x->b_nchans; long b_frames = x->b_frames; t_event *events = x->events; float pan; int i; //,j; float *params = x->params; int pcount; int buf_samps = x->buf_samps; int curarg = 0; float maxamp; float rescale; float *inbuf; int slot = x->new_slot; float gain = x->new_gain; events[slot].completed = 1;// for testing only if(b_nchans <1 || b_nchans > 2) { pd_error(0, "illegal channels in buffer:%ld",b_nchans); return; x->hosed = 1; } if(b_frames > x->buf_frames / 2) { pd_error(0, "sample in buffer %s is to large for work buffer",x->sound_name); return; x->hosed = 1; } pan = lpp_boundrand(0.1, 0.9); events[slot].gainL = cos(PIOVERTWO * pan) * gain; events[slot].gainR = sin(PIOVERTWO * pan) * gain; events[slot].phase = 0; events[slot].status = ACTIVE; /* if(x->verbose) post("initiating note at slot %d, gain %f, pan %f,inchans %d",slot,gain,pan,b_nchans); */ if(x->sound_lock) { return;// of course should finally copy good stuff to MSP buffer } events[slot].out_channels = b_nchans; events[slot].sample_frames = b_frames; for(i=0; ihalfbuffer; pcount = bashfest_set_parameters(x, params); while(curarg < pcount) { if(params[curarg] == TRANSPOSE) { lpp_transpose(x, slot, &curarg); } else if(params[curarg] == RINGMOD) { lpp_ringmod(x, slot, &curarg); } else if(params[curarg] == RETRO) { lpp_retrograde(x, slot, &curarg); } else if(params[curarg] == COMB) { lpp_comber(x, slot, &curarg); } else if(params[curarg] == FLANGE) { lpp_flange(x, slot, &curarg); } else if(params[curarg] == BUTTER) { lpp_butterme(x, slot, &curarg); } else if(params[curarg] == TRUNCATE) { lpp_truncateme(x, slot, &curarg); } else if(params[curarg] == SWEEPRESON) { lpp_sweepreson(x, slot, &curarg); } else if(params[curarg] == SLIDECOMB) { lpp_slidecomb(x, slot, &curarg); } else if(params[curarg] == REVERB1) { lpp_reverb1(x, slot, &curarg); } else if(params[curarg] == ELLIPSE) { lpp_ellipseme(x, slot, &curarg); } else if(params[curarg] == FEED1) { lpp_feed1me(x, slot, &curarg); } else if(params[curarg] == FLAM1) { lpp_flam1(x, slot, &curarg); } else if(params[curarg] == FLAM2) { lpp_flam2(x, slot, &curarg); } else if(params[curarg] == EXPFLAM) { lpp_expflam(x, slot, &curarg); } else if(params[curarg] == COMB4) { lpp_comb4(x, slot, &curarg); } else if(params[curarg] == COMPDIST) { lpp_compdist(x, slot, &curarg); } else if(params[curarg] == RINGFEED) { lpp_ringfeed(x, slot, &curarg); } else if(params[curarg] == RESONADSR) { lpp_resonadsr(x, slot, &curarg); } else if(params[curarg] == STV) { lpp_stv(x, slot, &curarg); } else { pd_error(0, "deploy missing branch"); } } maxamp = 0.0; inbuf = events[slot].workbuffer + events[slot].in_start; b_nchans = events[slot].out_channels; b_frames = events[slot].sample_frames; for(i=0; i< b_frames * b_nchans; i++) { if(maxamp < fabs(inbuf[i])) { maxamp = fabs(inbuf[i]); } } if(maxamp>0) { rescale = 1.0/maxamp; for(i=0; i< b_frames * b_nchans; i++) { inbuf[i] *= rescale; } } else{ if(x->verbose) pd_error(0, "zero maxamp detected"); } if(events[slot].countdown <= 0) pd_error(0, "deploy_dsp: failed to conclude in time; need more latency"); } int bashfest_set_parameters(t_bashfest *x,float *params) { float rval; int pcount = 0; int events; int i, j; int type; float cf;//, bw; float *odds = x->odds; int maxproc = x->max_process_per_note; int minproc = x->min_process_per_note; float tval; t_cycle tcycle = x->tcycle; /* preliminary transposition will be set here */ if(tcycle.len > 0) { params[pcount++] = TRANSPOSE; params[pcount++] = tcycle.data[tcycle.p++]; if(tcycle.p >= tcycle.len) { tcycle.p = 0; } x->tcycle.p = tcycle.p; } if(maxproc <= 0) { return pcount; } events = minproc + rand() % (1+(maxproc-minproc)); for(i = 0; i < events; i++) { rval = lpp_boundrand(0.0,1.0); j = 0; while(rval > odds[j]) { j++; } if(j == RETRO) { params[pcount++] = RETRO; } else if(j == COMB) { params[pcount++] = COMB; params[pcount++] = lpp_boundrand(.001,.035);// delaytime params[pcount++] = lpp_boundrand(.25,.98);//feedback params[pcount++] = lpp_boundrand(.05,.5);//hangtime } else if(j == RINGMOD) { params[pcount++] = RINGMOD; params[pcount++] = lpp_boundrand(100.0,2000.0); //need a log version } else if(j == TRANSPOSE) { params[pcount++] = TRANSPOSE; params[pcount++] = lpp_boundrand(0.25,3.0); } else if(j == FLANGE) { params[pcount++] = FLANGE; params[pcount++] = lpp_boundrand(100.0,400.0); params[pcount++] = lpp_boundrand(600.0,4000.0); params[pcount++] = lpp_boundrand(0.1,2.0); params[pcount++] = lpp_boundrand(0.1,0.95); params[pcount++] = lpp_boundrand(0.0,0.9); } else if(j == BUTTER) { params[pcount++] = BUTTER; type = rand() % 3; params[pcount++] = type; cf = lpp_boundrand(70.0,3000.0); params[pcount++] = cf; if(type == BANDPASS) { params[pcount++] = cf * lpp_boundrand(0.05,0.6); } } else if(j == TRUNCATE) { params[pcount++] = TRUNCATE; params[pcount++] = lpp_boundrand(.05,.15); params[pcount++] = lpp_boundrand(.01,.05); } else if(j == SWEEPRESON) { params[pcount++] = SWEEPRESON; params[pcount++] = lpp_boundrand(100.0,300.0); params[pcount++] = lpp_boundrand(600.0,6000.0); params[pcount++] = lpp_boundrand(0.01,0.2); params[pcount++] = lpp_boundrand(0.05,2.0); params[pcount++] = lpp_boundrand(0.0,1.0); } else if(j == SLIDECOMB) { params[pcount++] = SLIDECOMB; params[pcount++] = lpp_boundrand(.001,.03); params[pcount++] = lpp_boundrand(.001,.03); params[pcount++] = lpp_boundrand(0.05,0.95); params[pcount++] = lpp_boundrand(0.05,0.5); } else if(j == REVERB1) { params[pcount++] = REVERB1; params[pcount++] = lpp_boundrand(0.25,0.99); params[pcount++] = lpp_boundrand(0.1,1.0); params[pcount++] = lpp_boundrand(0.2,0.8); } else if(j == ELLIPSE) { params[pcount++] = ELLIPSE; params[pcount++] = rand() % ELLIPSE_FILTER_COUNT; } else if(j == FEED1) { params[pcount++] = FEED1; tval = lpp_boundrand(.001,0.1); params[pcount++] = tval; params[pcount++] = lpp_boundrand(tval,0.1); tval = lpp_boundrand(.01,0.5); params[pcount++] = tval; params[pcount++] = lpp_boundrand(tval,0.5); params[pcount++] = lpp_boundrand(.05,1.0); } else if(j == FLAM1) { params[pcount++] = FLAM1; params[pcount++] = 4 + (rand() % 20); params[pcount++] = lpp_boundrand(0.3,0.8); params[pcount++] = lpp_boundrand(0.5,1.2); params[pcount++] = lpp_boundrand(.025,0.15); } else if(j == FLAM2) { params[pcount++] = FLAM2; params[pcount++] = 4 + (rand() % 20); params[pcount++] = lpp_boundrand(0.1,0.9); params[pcount++] = lpp_boundrand(0.2,1.2); params[pcount++] = lpp_boundrand(.025,0.15); params[pcount++] = lpp_boundrand(.025,0.15); } else if(j == EXPFLAM) { params[pcount++] = EXPFLAM; params[pcount++] = 4 + (rand() % 20); params[pcount++] = lpp_boundrand(0.1,0.9); params[pcount++] = lpp_boundrand(0.2,1.2); params[pcount++] = lpp_boundrand(.025,0.15); params[pcount++] = lpp_boundrand(.025,0.15); params[pcount++] = lpp_boundrand(-5.0,5.0); } else if(j == COMB4) { params[pcount++] = COMB4; params[pcount++] = lpp_boundrand(100.0,900.0); params[pcount++] = lpp_boundrand(100.0,900.0); params[pcount++] = lpp_boundrand(100.0,900.0); params[pcount++] = lpp_boundrand(100.0,900.0); tval = lpp_boundrand(.5,0.99); params[pcount++] = tval; params[pcount++] = tval; } else if(j == COMPDIST) { params[pcount++] = COMPDIST; params[pcount++] = tval = lpp_boundrand(.01,.25); params[pcount++] = lpp_boundrand(tval,.9); params[pcount++] = 1; } else if(j == RINGFEED) { params[pcount++] = RINGFEED; params[pcount++] = lpp_boundrand(90.0,1500.0); params[pcount++] = lpp_boundrand(90.0,1500.0); params[pcount++] = lpp_boundrand(0.2,0.95); params[pcount++] = lpp_boundrand(90.0,1500.0); params[pcount++] = lpp_boundrand(.01,.4); params[pcount++] = lpp_boundrand(.05,1.0); } else if(j == RESONADSR) { params[pcount++] = RESONADSR; params[pcount++] = lpp_boundrand(.01,.1); params[pcount++] = lpp_boundrand(.01,.05); params[pcount++] = lpp_boundrand(.05,.5); params[pcount++] = lpp_boundrand(150.0,4000.0); params[pcount++] = lpp_boundrand(150.0,4000.0); params[pcount++] = lpp_boundrand(150.0,4000.0); params[pcount++] = lpp_boundrand(150.0,4000.0); params[pcount++] = lpp_boundrand(.03,.7); } else if(j == STV) { params[pcount++] = STV; params[pcount++] = lpp_boundrand(.025,0.5); params[pcount++] = lpp_boundrand(.025,0.5); params[pcount++] = lpp_boundrand(.001,.01); } else { pd_error(0, "could not find a process for %d",j); return 0; } } return pcount; } void bashfest_dsp_free(t_bashfest *x) { int i; t_freebytes(x->sinewave, x->sinelen * sizeof(float)); t_freebytes(x->params, MAX_PARAMETERS * sizeof(float)); t_freebytes(x->odds, 64 * sizeof(float)); t_freebytes(x->delayline1, x->maxdelay * x->sr * sizeof(float)); t_freebytes(x->delayline2, x->maxdelay * x->sr * sizeof(float)); for(i=0;ioverlap_max;i++) { t_freebytes(x->events[i].workbuffer, x->buf_samps * sizeof(float)); } t_freebytes(x->events, x->overlap_max * sizeof(t_event)); t_freebytes(x->eel,MAXSECTS * sizeof(LSTRUCT)); for( i = 0; i < 4 ; i++ ) { t_freebytes(x->mini_delay[i], ((int)(x->sr * x->max_mini_delay) + 1) * sizeof(float)); } t_freebytes(x->reverb_ellipse_data, 16 * sizeof(float)); for(i=0;iellipse_data[i], MAX_COEF * sizeof(float)); } t_freebytes(x->ellipse_data, MAXFILTER * sizeof(float *)); t_freebytes(x->transfer_function,x->tf_len * sizeof(float)); t_freebytes(x->feedfunc1, x->feedfunclen * sizeof(float)); t_freebytes(x->feedfunc2, x->feedfunclen * sizeof(float)); t_freebytes(x->feedfunc3, x->feedfunclen * sizeof(float)); t_freebytes(x->feedfunc4, x->feedfunclen * sizeof(float)); t_freebytes(x->flamfunc1, x->flamfunc1len * sizeof(float)); for( i = 0; i < 4; i++ ) { t_freebytes(x->combies[i].arr, x->combies[i].len * sizeof(float)); } t_freebytes(x->combies,4 * sizeof(CMIXCOMB)); t_freebytes(x->adsr->func, x->adsr->len * sizeof(float)); t_freebytes(x->adsr,sizeof(CMIXADSR)); t_freebytes(x->tcycle.data,CYCLE_MAX * sizeof(float)); t_freebytes(x->trigger_vec, MAX_VEC * sizeof(float)); } void bashfest_dsp(t_bashfest *x, t_signal **sp) { bashfest_setbuf(x, x->wavename); if( x->hosed ) { pd_error(0, "bashfest~ needs a valid buffer"); } /* if vector size changes, we also need to deal, thanks to the trigger buffer inter-delay */ if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; if(!x->sr) { post("warning: zero sampling rate!"); x->sr = 44100; } } if(x->b_frames <= 0) { post("empty buffer, hosing down"); x->hosed = 1; } if(x->hosed) { dsp_add(bashfest_perform_hosed, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } else { dsp_add(bashfest_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } } pd-lyonpotpourri-3.0.1/bloscbank.c000066400000000000000000000014751430526361000171720ustar00rootroot00000000000000 #include "fftease.h" void bloscbank( float *S, float *O, int D, float iD, float *lf, float *la, float *index, float *tab, int len, float synt, int lo, int hi ) { int amp,freq,chan, i; float a,ainc,f,finc,address; for ( chan = lo; chan < hi; chan++ ) { freq = ( amp = ( chan << 1 ) ) + 1; if ( S[amp] > synt ) { finc = ( S[freq] - ( f = lf[chan] ) )* iD; ainc = ( S[amp] - ( a = la[chan] ) )* iD; address = index[chan]; for ( i = 0; i < D ; i++ ) { O[i] += a*tab[ (int) address ]; address += f; while ( address >= len ) address -= len; while ( address < 0 ) address += len; a += ainc; f += finc; } lf[chan] = S[freq]; la[chan] = S[amp]; index[chan] = address; } } } pd-lyonpotpourri-3.0.1/buffet~-help.pd000066400000000000000000000134731430526361000200150ustar00rootroot00000000000000#N canvas 600 60 776 545 12; #N canvas 0 22 450 300 (subpatch) 0; #X array dopey 62079 float 2; #X coords 0 1 62079 -1 100 70 1 0 0; #X restore 29 300 graph; #N canvas 600 60 538 388 load-samples 0; #X obj 36 151 soundfiler; #X msg 36 83 bang; #X obj 36 109 openpanel; #X obj 144 37 loadbang; #X msg 36 131 read -resize \$1 dopey; #X obj 117 17 inlet; #X msg 117 64 read -resize sound/voice.wav dopey; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 3 0 6 0; #X connect 4 0 0 0; #X connect 5 0 6 0; #X connect 6 0 0 0; #X restore 153 289 pd load-samples; #X obj 156 397 bng 15 100 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X floatatom 398 376 5 0 0 0 rms_report - -; #N canvas 0 22 450 300 (subpatch) 0; #X array soapy 22050 float 2; #X coords 0 1 22050 -1 100 70 1; #X restore 29 398 graph; #N canvas 171 294 544 498 processing 0; #X obj 44 402 s buffet-msgs; #X msg 203 208 reverse; #X msg 171 150 normalize 0.95; #X msg 173 176 killdc; #X text 43 34 Destructive Buffer Edits; #X msg 182 386 autoredraw \$1; #X obj 182 364 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X text 199 363 turn off if redraw hurts performance; #X msg 182 345 1; #X obj 182 329 loadbang; #X msg 43 67 fadein 100; #X msg 89 92 fadeout 500; #X msg 112 121 rotatetozero 300; #X msg 221 247 erase 300 460; #X msg 223 285 internal_fadeout 500 800; #X msg 251 309 internal_fadein 200 500; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 5 0 0 0; #X connect 6 0 5 0; #X connect 8 0 6 0; #X connect 9 0 8 0; #X connect 10 0 0 0; #X connect 11 0 0 0; #X connect 12 0 0 0; #X connect 13 0 0 0; #X connect 14 0 0 0; #X connect 15 0 0 0; #X coords 0 0 1 1 85 60 0; #X restore 30 202 pd processing; #X obj 156 323 r buffet-msgs; #N canvas 574 418 647 284 copying 0; #X text 47 19 clear receiver (optional); #X obj 49 236 s buffet-msgs; #X msg 151 51 normalize 1; #X msg 48 39 erase 0 500; #X msg 49 112 copy_to_buffer soapy 0 500; #X msg 62 135 copy_to_buffer soapy 500 1000; #X msg 154 181 copy_to_buffer soapy 300 1200; #X obj 48 80 lyonpotpourri/buffet~ soapy 100 200; #X text 239 49 normalize array contents; #X text 241 113 copy specified time range (ms) to a destination array ; #X text 150 163 out of range copying requests are truncated; #X connect 2 0 7 0; #X connect 3 0 7 0; #X connect 4 0 1 0; #X connect 5 0 1 0; #X connect 6 0 1 0; #X restore 31 175 pd copying; #X text 175 398 operation completion indicator; #N canvas 339 361 470 320 analysis 0; #X obj 65 188 s buffet-msgs; #X text 67 48 get rms reading from a specified segment of buffer; #X msg 120 145 pevents 50 0.05; #X text 116 122 look for percussive events; #X msg 65 72 rmschunk 200 300; #X connect 2 0 0 0; #X connect 4 0 0 0; #X restore 30 254 pd analysis; #X obj 277 448 print; #X msg 153 257 bang; #N canvas 34 269 705 565 scrambler 0; #X obj 57 356 s buffet-msgs; #X msg 57 153 minswap \$1; #X floatatom 57 123 5 0 0 0 - - -; #X floatatom 146 123 5 0 0 0 - - -; #X msg 146 153 maxswap \$1; #X floatatom 145 223 5 0 0 0 - - -; #X msg 145 269 overlap \$1; #X msg 145 194 30; #X msg 236 269 retroblock; #X msg 326 269 swap; #X msg 172 335 specswap 0 1000 250; #X obj 57 57 t b b b; #X obj 57 28 loadbang; #X text 184 223 fade time for tapering swap blocks (20 ms. by default) ; #X msg 200 499 autoredraw \$1; #X obj 200 473 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X msg 200 442 1; #X obj 200 418 loadbang; #X obj 326 141 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 326 164 metro 250; #X msg 57 94 100; #X msg 146 94 200; #X obj 237 158 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 236 181 metro 500; #X text 217 472 turn off autoredraw if redraw hurts performance; #X text 198 96 set minimum and maximum swap times in ms.; #X text 165 26 Destructive rearrangement of array; #X text 365 272 swap two pieces of the array; #X text 177 357 specify which parts of buffer to exchange. arguments are skip1 \, skip2 and duration. In this example the first 250 ms block of the buffer is swapped with the 250 ms block beginning 1000 ms into the array; #X text 239 247 reverse a piece of the array; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 4 0; #X connect 4 0 0 0; #X connect 5 0 6 0; #X connect 6 0 0 0; #X connect 7 0 5 0; #X connect 8 0 0 0; #X connect 9 0 0 0; #X connect 10 0 0 0; #X connect 11 0 20 0; #X connect 11 1 21 0; #X connect 11 2 7 0; #X connect 12 0 11 0; #X connect 14 0 0 0; #X connect 15 0 14 0; #X connect 16 0 15 0; #X connect 17 0 16 0; #X connect 18 0 19 0; #X connect 19 0 9 0; #X connect 20 0 2 0; #X connect 21 0 3 0; #X connect 22 0 23 0; #X connect 23 0 8 0; #X restore 30 228 pd scrambler; #N canvas 0 23 532 325 playback-controls 0; #X msg 18 31 bang; #X text 56 31 retrigger; #X msg 178 141 pause; #X msg 240 143 resume; #X msg 299 144 stop; #X obj 18 238 outlet~; #X obj 299 218 outlet; #X msg 334 191 static_increment 1; #X obj 334 166 loadbang; #X obj 18 59 lyonpotpourri/click~; #X obj 18 198 lyonpotpourri/samm~ 40 1; #X connect 0 0 9 0; #X connect 2 0 10 0; #X connect 3 0 10 0; #X connect 4 0 6 0; #X connect 7 0 6 0; #X connect 8 0 7 0; #X connect 9 0 10 0; #X connect 10 0 5 0; #X restore 495 147 pd playback-controls; #X obj 495 237 lpp-meters; #X obj 25 14 lpp-icon buffet~; #X text 126 231 reload original sample after scrambling \, if desired ; #X text 327 448 list of estimated onsets in array's sample (time in ms.); #X text 28 114 [buffet~] provides a variety of irreversible transformations to the contents of an array \, along with some useful analysis of its contents.; #X obj 156 350 lyonpotpourri/buffet~ dopey 100 300; #X obj 495 191 lyonpotpourri/player~ dopey 1; #X text 250 45 - Perform operations on the contents of a Pd array; #X connect 6 0 19 0; #X connect 11 0 1 0; #X connect 13 0 20 0; #X connect 13 0 20 1; #X connect 13 1 20 0; #X connect 19 0 2 0; #X connect 19 1 10 0; #X connect 19 2 3 0; #X connect 20 0 14 0; #X connect 20 0 14 1; pd-lyonpotpourri-3.0.1/buffet~.c000066400000000000000000002052301430526361000167000ustar00rootroot00000000000000#include "MSPd.h" #include "fftease.h" // adapted for Pd #define CUSHION_FRAMES (128) // pad for grabbing #define MAX_CHANNELS (2) #define MAX_RMS_BUFFER (0.250) #define MIN_RMS_BUFFER (.001) #define MAX_EVENTS (1024) #define MAX_RMS_FRAMES (32768) #define OBJECT_NAME "buffet~" static t_class *buffet_class; typedef struct { t_word *b_samples; int b_valid; int b_nchans; int b_frames; } t_guffer; // stuff we care about from garrays and buffers typedef struct _buffet { t_object x_obj; float x_f; t_symbol *wavename; // name of waveform buffer t_guffer *wavebuf; // holds waveform samples t_guffer *destbuf; // for copying to another buffer float sr; // sampling rate short hosed; // buffers are bad float minframes; // minimum replacement block in sample frames float maxframes; // maximum replacement block in sample frames long storage_maxframes; // maxframe limit that current memory can handle float *storage; //temporary memory to store replacement block (set to maxframes * channels) long storage_bytes; // amount of currently allocated memory float fade; // fadein/fadeout time in sample frames float sync; // input from groove sync signal long swapframes; // number of frames in swap block long r1startframe; //start frame for block 1 long r2startframe; // start frame for block 2 float dc_coef; // filter coefficient float dc_gain; // normalization factor short initialized; // first time or not float *rmsbuf;// for onset analysis float rmschunk; // store lowest rms value in buffer void *list; // for start/end list void *bang; // completion bang void *floater; // outputs noise floor t_atom *listdata;// to report est. start/stop times of events in buffer float *analbuf; // contain overall envelope float *onset; // contain attack times for percussive evaluations short autoredraw; // to kill redraw if it impacts performance } t_buffet; static void buffet_setbuf(t_buffet *x, t_symbol *wavename); static void *buffet_new(t_symbol *msg, int argc, t_atom *argv); static t_int *buffet_perform(t_int *w); static void buffet_dsp(t_buffet *x, t_signal **sp); static float buffet_boundrand(float min, float max); static void buffet_assist (t_buffet *x, void *b, long msg, long arg, char *dst); static void buffet_dsp_free(t_buffet *x); static void buffet_swap(t_buffet *x); static void buffet_specswap(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_retroblock(t_buffet *x); static void buffet_nakedswap(t_buffet *x); static void buffet_overlap(t_buffet *x, t_floatarg f); static void buffet_minswap(t_buffet *x, t_floatarg f); static void buffet_maxswap(t_buffet *x, t_floatarg f); static void buffet_nosync_setswap(t_buffet *x); static void buffet_info(t_buffet *x); static void buffet_killdc(t_buffet *x); static void buffet_rmschunk(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_fadein(t_buffet *x, t_floatarg f); static void buffet_fadeout(t_buffet *x, t_floatarg f); static void buffet_internal_fadein(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_internal_fadeout(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_dc_gain(t_buffet *x, t_floatarg f); static void buffet_dc_coef(t_buffet *x, t_floatarg f); static void buffet_normalize(t_buffet *x, t_floatarg f); static void buffet_rotatetozero(t_buffet *x, t_floatarg f); static void buffet_autoredraw(t_buffet *x, t_floatarg f); static void buffet_erase(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_events(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_pevents(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_detect_onsets(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_detect_subband_onsets(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static void buffet_copy_to_buffer(t_buffet *x, t_symbol *msg, int argc, t_atom *argv); static int buffet_setdestbuf(t_buffet *x, t_symbol *wavename); static void buffet_init(t_buffet *x, short initialized); static void buffet_reverse(t_buffet *x); static void buffet_redraw(t_buffet *x); static void buffet_redraw_named(t_buffet *x, t_symbol *arrayname); static void buffet_update(t_buffet *x); void buffet_tilde_setup(void) { buffet_class = class_new(gensym("buffet~"),(t_newmethod)buffet_new,(t_method)buffet_dsp_free, sizeof(t_buffet), 0, A_GIMME,0); CLASS_MAINSIGNALIN(buffet_class,t_buffet, x_f ); class_addmethod(buffet_class,(t_method)buffet_dsp,gensym("dsp"),A_CANT,0); class_addmethod(buffet_class,(t_method)buffet_swap,gensym("swap"),0); class_addmethod(buffet_class,(t_method)buffet_specswap,gensym("specswap"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_events,gensym("events"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_pevents,gensym("pevents"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_detect_onsets,gensym("detect_onsets"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_detect_subband_onsets,gensym("detect_subband_onsets"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_retroblock,gensym("retroblock"),0); class_addmethod(buffet_class,(t_method)buffet_minswap,gensym("minswap"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_maxswap,gensym("maxswap"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_fadein,gensym("fadein"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_fadeout,gensym("fadeout"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_overlap,gensym("overlap"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_dc_gain,gensym("dc_gain"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_dc_coef,gensym("dc_coef"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_normalize,gensym("normalize"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_rotatetozero,gensym("rotatetozero"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_autoredraw,gensym("autoredraw"),A_FLOAT,0); class_addmethod(buffet_class,(t_method)buffet_killdc,gensym("killdc"),0); class_addmethod(buffet_class,(t_method)buffet_nakedswap,gensym("nakedswap"),0); class_addmethod(buffet_class,(t_method)buffet_rmschunk,gensym("rmschunk"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_erase,gensym("erase"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_copy_to_buffer,gensym("copy_to_buffer"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_internal_fadein,gensym("internal_fadein"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_internal_fadeout,gensym("internal_fadeout"),A_GIMME,0); class_addmethod(buffet_class,(t_method)buffet_setbuf,gensym("setbuf"),A_SYMBOL,0); class_addmethod(buffet_class,(t_method)buffet_reverse,gensym("reverse"),0); class_addmethod(buffet_class,(t_method)buffet_info,gensym("info"),0); potpourri_announce(OBJECT_NAME); } void buffet_info(t_buffet *x) { long totalframes; buffet_setbuf(x, x->wavename); if( x->hosed ) { pd_error(0, "buffet~ needs a valid buffer"); return; } if( ! x->sr) { pd_error(0, "zero sample rate!"); return; } totalframes = x->wavebuf->b_frames; post("minswap: %f, maxswap: %f", 1000. * x->minframes / x->sr, 1000. * x->maxframes / x->sr); post("buffer size: %f", 1000. * totalframes / x->sr); } void buffet_overlap(t_buffet *x, t_floatarg f) { if( f < 0.01 ) { pd_error(0, "minimum fade time is 0.01 milliseconds"); return; } x->fade = f * .001 * x->sr; } void buffet_events(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { t_word *b_samples; int b_nchans; int b_frames; t_atom *listdata = x->listdata; float bufsize; float onthresh; float offthresh; long bufsamps; long aframes; // frames to analyze float tadv; long i,j; float meansq; float rmsval; long bindex; float ipos; short activated = 0; float realtime = 0.0; int event_count = 0; float buffer_duration; buffet_setbuf(x, x->wavename); b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; // duration in ms. buffer_duration = 1000.0 * (float)b_frames / x->sr; bufsize = .001 * atom_getfloatarg(0,argc,argv); if(bufsize > MAX_RMS_BUFFER) { bufsize = MAX_RMS_BUFFER; post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MAX_RMS_BUFFER * 1000.0); } else if(bufsize < MIN_RMS_BUFFER) { bufsize = MIN_RMS_BUFFER; post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MIN_RMS_BUFFER * 1000.0); } onthresh = atom_getfloatarg(1,argc,argv); offthresh = atom_getfloatarg(2,argc,argv); bufsamps = x->sr * bufsize; bufsamps = bufsize * x->sr; tadv = (float)bufsamps / x->sr; // post("actual window size: %f",tadv); aframes = (long) ( (float) b_frames / (float)bufsamps ) - 1; if(aframes < 2) { pd_error(0, "%s: this buffer is too short to analyze",OBJECT_NAME); return; } // post("analyzing %d frames",aframes); for(i = 0; i < aframes; i++) { meansq = 0.0; ipos = b_nchans * i * bufsamps; /* only analyze first channel */ for(j = 0; j < bufsamps; j+= b_nchans) { bindex = ipos + j; meansq += b_samples[bindex].w_float * b_samples[bindex].w_float; } meansq /= (float) bufsamps; rmsval = sqrt(meansq); realtime += tadv; if(rmsval > onthresh && ! activated) { activated = 1; // post("event %d starts at %f",event_count+1, realtime); if(event_count >= MAX_EVENTS) { pd_error(0, "%s: exceeded maximum of %d events",OBJECT_NAME, MAX_EVENTS); break; } SETFLOAT(listdata+(event_count*2), realtime * 1000.0); } else if( rmsval < offthresh && activated ) { activated = 0; // post("event %d ends at %f",event_count, realtime); SETFLOAT(listdata+((event_count*2) + 1), realtime * 1000.0); ++event_count; } } if(activated) { post("%s: missed the end of the last event; setting to end of buffer",OBJECT_NAME); SETFLOAT(listdata+((event_count*2) + 1), buffer_duration); ++event_count; } outlet_list(x->list, 0, event_count * 2, listdata); } void buffet_pevents(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { t_word *b_samples; int b_nchans; int b_frames; t_atom *listdata = x->listdata; float bufsize; //float onthresh; //float offthresh; float diffthresh; long bufsamps; long aframes; // frames to analyze float tadv; //long current_frame = 0; long i,j; float meansq; float rmsval; long bindex; float ipos; //short activated = 0; float realtime = 0.0; int event_count = 0; // float buffer_duration; float mindiff, maxdiff, absdiff,rmsdiff; float *analbuf = x->analbuf; float *onset = x->onset; //float endtime; buffet_setbuf(x, x->wavename); b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; // duration in ms. // buffer_duration = 1000.0 * (float)b_frames / x->sr; bufsize = .001 * atom_getfloatarg(0,argc,argv); if(bufsize > MAX_RMS_BUFFER) { bufsize = MAX_RMS_BUFFER; post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MAX_RMS_BUFFER * 1000.0); } else if(bufsize < MIN_RMS_BUFFER) { bufsize = MIN_RMS_BUFFER; post("%s: setting analysis buffer to maximum: %f",OBJECT_NAME, MIN_RMS_BUFFER * 1000.0); } diffthresh = atom_getfloatarg(1,argc,argv); bufsamps = x->sr * bufsize; bufsamps = bufsize * x->sr; tadv = (float)bufsamps / x->sr; aframes = (long) ( (float) b_frames / (float)bufsamps ); if(aframes < 2) { pd_error(0, "%s: this buffer is too short to analyze",OBJECT_NAME); return; } if(aframes > MAX_RMS_FRAMES) { post("too many frames: try a larger buffer size"); return; } analbuf[0] = 0; // for first comparison for(i = 1; i < aframes; i++) { meansq = 0.0; ipos = b_nchans * i * bufsamps; /* only analyze first channel */ for(j = 0; j < bufsamps; j+= b_nchans) { bindex = ipos + j; meansq += b_samples[bindex].w_float * b_samples[bindex].w_float; } meansq /= (float) bufsamps; analbuf[i] = rmsval = sqrt(meansq); realtime += tadv; } realtime = 0; mindiff = 9999.; maxdiff = 0.0; /* LPF - use elsewhere? for(i = 1; i < aframes; i++ ) { analbuf[i] = (analbuf[i] + analbuf[i-1]) * 0.5; } */ // look for big changes in direction for(i = 1; i < aframes; i++ ) { rmsdiff = analbuf[i] - analbuf[i-1]; absdiff = fabs(rmsdiff); if(absdiff > maxdiff) maxdiff = absdiff; if(absdiff < mindiff) mindiff = absdiff; if( rmsdiff > diffthresh ) { // new onset[event_count] = (realtime + bufsize) * 1000.0; if(onset[event_count] < 0) onset[event_count] = 0; ++event_count; // post("rt %f diff %f",realtime * 1000.0,rmsdiff); } realtime += tadv; } // post("mindiff %f maxdiff %f",mindiff,maxdiff); if(event_count == 0) { post("%s: no events found",OBJECT_NAME); } for(i = 0; i < event_count; i++) { SETFLOAT(listdata + i, onset[i]); } outlet_list(x->list, 0, event_count, listdata); } void buffet_internal_fadeout(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { long fadeframes; long totalframes; int i,j,k; float env; t_word *b_samples; long b_nchans; long startframe; long endframe; if( ! x->sr) { pd_error(0, "zero sample rate!"); return; } buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if(argc < 2) { post("%s: internal_fadeout requires start and end times",OBJECT_NAME); return; } startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); if(startframe < 0 || endframe > totalframes || endframe <= startframe) { pd_error(0, "%s: bad frame boundaries to internal_fadeout: %ld and %ld",OBJECT_NAME,startframe, endframe); return; } fadeframes = endframe - startframe; for(i = (endframe-1) * b_nchans , k = 0; k < fadeframes ; i -= b_nchans, k++ ) { env = (float) k / (float) fadeframes; for(j = 0; j < b_nchans; j++) { b_samples[i + j].w_float *= env; } } buffet_update(x); } void buffet_internal_fadein(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { long fadeframes; long totalframes; int i,j,k; float env; t_word *b_samples; long b_nchans; long startframe; long endframe; if( ! x->sr) { pd_error(0, "zero sample rate!"); return; } buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if(argc < 2) { post("%s: internal_fadeout requires start and end times",OBJECT_NAME); return; } startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); if(startframe < 0 || endframe > totalframes || endframe <= startframe) { pd_error(0, "%s: bad frame boundaries to internal_fadein: %ld and %ld",OBJECT_NAME,startframe, endframe); return; } fadeframes = endframe - startframe; for(i = startframe * b_nchans , k = 0; k < fadeframes ; i += b_nchans, k++ ) { env = (float) k / (float) fadeframes; for(j = 0; j < b_nchans; j++) { b_samples[i + j].w_float *= env; } } buffet_update(x); } void buffet_reverse(t_buffet *x) { int i,j; // float env; t_word *b_samples; long b_nchans; long b_frames; float tmpsamp; long lenm1; buffet_setbuf(x, x->wavename); if(!x->wavebuf->b_valid) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; lenm1 = (b_frames - 1) * b_nchans; for( i = 0; i < (b_frames * b_nchans) / 2; i += b_nchans) { for(j = 0; j < b_nchans; j++) { tmpsamp = b_samples[(lenm1 - i) + j].w_float; b_samples[(lenm1 - i) + j].w_float = b_samples[i + j].w_float; b_samples[i + j].w_float = tmpsamp; } } buffet_update(x); } void buffet_update(t_buffet *x) { outlet_bang(x->bang); if(x->autoredraw) { buffet_redraw(x); } } void buffet_redraw_named(t_buffet *x, t_symbol *arrayname) { t_garray *a; if (!(a = (t_garray *)pd_findbyclass(arrayname, garray_class))) { if (*arrayname->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, arrayname->s_name); } else { garray_redraw(a); } } void buffet_redraw(t_buffet *x) { t_garray *a; if (!(a = (t_garray *)pd_findbyclass(x->wavename, garray_class))) { if (*x->wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, x->wavename->s_name); x->wavebuf->b_valid = 0; } else { garray_redraw(a); } } void buffet_copy_to_buffer(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { t_symbol *destname; t_word *b_samples; long b_nchans; long b_frames; t_word *b_dest_samples; long b_dest_nchans; long b_dest_frames; long startframe; long endframe; long chunkframes; float fadein,fadeout; int fadeframes; // totalframes; float env; int i,j,k; buffet_setbuf(x, x->wavename); b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; destname = atom_getsymbolarg(0,argc,argv); if(! buffet_setdestbuf(x, destname)) { post("%s: could not find buffer %s",OBJECT_NAME,destname->s_name); return; } b_dest_samples = x->destbuf->b_samples; b_dest_nchans = x->destbuf->b_nchans; b_dest_frames = x->destbuf->b_frames; startframe = atom_getfloatarg(1,argc,argv) * .001 * x->sr; endframe = atom_getfloatarg(2,argc,argv) * .001 * x->sr; chunkframes = endframe - startframe; if(chunkframes <= 0) { return; } if(b_nchans != b_dest_nchans) { pd_error(0, "%s: channel mismatch with buffer %s",OBJECT_NAME, destname->s_name); return; } if(b_dest_frames < chunkframes ) { // post("%s: %s is too small, truncating copy region",OBJECT_NAME, destname->s_name); chunkframes = b_dest_frames; } if(startframe < 0 || endframe >= b_frames) { pd_error(0, "%s: bad frame range for source buffer: %ld %ld",OBJECT_NAME, startframe,endframe); return; } /* first clean out destination */ for(i = 0; i < b_dest_frames; i++) { b_dest_samples[i].w_float = 0.0; } // memset((char *)b_dest_samples, 0, b_dest_frames * b_dest_nchans * sizeof(float)); /* now copy segment */ for(i = 0; i < chunkframes; i++) { b_dest_samples[i].w_float = b_samples[i+startframe].w_float; } /* memcpy(b_dest_samples, b_samples + (startframe * b_nchans), chunkframes * b_nchans * sizeof(float) ); */ if(argc == 5) { // post("enveloping"); fadein = atom_getfloatarg(3,argc,argv); fadeout = atom_getfloatarg(4,argc,argv); if(fadein > 0) { // post("fading in"); fadeframes = fadein * .001 * x->sr; if( fadeframes > b_dest_frames) { pd_error(0, "%s: fadein is too long",OBJECT_NAME); return; } for(i = 0 , k = 0; k < fadeframes ; i += b_dest_nchans, k++ ) { env = (float) k / (float) fadeframes; for(j = 0; j < b_dest_nchans; j++) { b_dest_samples[i + j].w_float *= env; } } } if(fadeout > 0) { // post("fading out"); // totalframes = chunkframes; fadeframes = fadeout * .001 * x->sr; startframe = chunkframes - fadeframes; endframe = chunkframes; // endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); // stays the same if(startframe < 0) { pd_error(0, "%s: bad frame boundaries to internal_fadeout: %ld and %ld", OBJECT_NAME,startframe, endframe); return; } // fadeframes = endframe - startframe; // we already know this for(i = (chunkframes-1) * b_dest_nchans , k = 0; k < fadeframes ; i -= b_dest_nchans, k++ ) { env = (float) k / (float) fadeframes; for(j = 0; j < b_dest_nchans; j++) { b_dest_samples[i + j].w_float *= env; } } } } buffet_redraw_named(x, destname); outlet_bang(x->bang); } int buffet_setdestbuf(t_buffet *x, t_symbol *wavename) { t_garray *a; int b_frames; t_word *b_samples; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); x->destbuf->b_valid = 0; } else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); x->destbuf->b_valid = 0; } else { x->destbuf->b_valid = 1; x->destbuf->b_frames = (long)b_frames; x->destbuf->b_nchans = 1; x->destbuf->b_samples = b_samples; garray_usedindsp(a); } /*We added this in linux - better check that it works */ return x->destbuf->b_valid; } void buffet_rmschunk(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { t_word *b_samples; long b_nchans; long b_frames; long bufsamps; long i; float meansq; float rmsval; long bindex; // float buffer_duration; long startframe; long endframe; buffet_setbuf(x, x->wavename); b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; // duration in ms. // buffer_duration = 1000.0 * (float)b_frames / x->sr; startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); if(startframe < 0 || startframe >= b_frames - 1) { pd_error(0, "%s: naughty start frame: %ld",OBJECT_NAME,startframe); return; } if(endframe < 2 || endframe >= b_frames) { pd_error(0, "%s: naughty start frame: %ld",OBJECT_NAME,startframe); return; } bufsamps = (endframe - startframe); // post("analyzing %d samples",bufsamps); if(!bufsamps) { // post("%s: start and end are identical!",OBJECT_NAME); // post("instantaneous sample value [ch 1 only]: %f", b_samples[startframe*b_nchans]); return; } meansq = 0.0; for(i = startframe; i < endframe; i++) { bindex = b_nchans * i; /* only analyze first channel */ meansq += b_samples[bindex].w_float * b_samples[bindex].w_float; } meansq /= (float) bufsamps; rmsval = sqrt(meansq); x->rmschunk = rmsval; outlet_float(x->floater, (double)x->rmschunk); } void buffet_dc_gain(t_buffet *x, t_floatarg f) { x->dc_gain = f; } void buffet_dc_coef(t_buffet *x, t_floatarg f) { x->dc_coef = f; } void buffet_autoredraw(t_buffet *x, t_floatarg f) { x->autoredraw = (short)f; } void buffet_minswap(t_buffet *x, t_floatarg f) { if(f < 2.0 * 1000.0 * x->fade / x->sr) { pd_error(0, "minimum must be at least twice fade time which is %f", 1000. * x->fade / x->sr); return; } x->minframes = f * .001 * x->sr; // post("min set to %f samples",x->minframes); } void buffet_maxswap(t_buffet *x, t_floatarg f) { long oldmem; // long framelimit; long newframes; newframes = f * .001 * x->sr; if(newframes <= x->minframes) { pd_error(0, "max blocksize must exceed minimum blocksize, which is %f", 1000. * x->minframes/ x->sr); } if(newframes > x->storage_maxframes ) { // post("extending memory"); oldmem = x->storage_bytes; // post("old memory %d", oldmem); x->storage_maxframes = newframes; x->storage_bytes = (x->storage_maxframes + 1) * 2 * sizeof(float); // post("new memory %d", x->storage_bytes); x->storage = (float *) resizebytes((char *)x->storage, oldmem, x->storage_bytes); } x->maxframes = newframes; } void buffet_erase(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { t_word *b_samples; long b_nchans; long b_frames; long startframe, endframe; //int slab; //int offset; int i; if(argc < 2) { post("%s: erase requires start and end times",OBJECT_NAME); return; } buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); if(startframe < 0) { startframe = 0; } if(endframe > b_frames - 1) { endframe = b_frames - 1; } if(startframe >= b_frames - 1) { pd_error(0, "%s: naughty start frame: %ld",OBJECT_NAME,startframe); return; } if(endframe < 2 || endframe <= startframe) { pd_error(0, "%s: naughty end frame: %ld",OBJECT_NAME,endframe); return; } for(i = startframe * b_nchans; i < endframe * b_nchans; i++) { b_samples[i].w_float = 0.0; } buffet_update(x); } void buffet_rotatetozero(t_buffet *x, t_floatarg f) { int i; float target = (float) f; long shiftframes = (long) (target * 0.001 * x->sr); t_word *b_samples; long b_nchans; long b_frames; float *tmpmem; buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; if(shiftframes <= 0 || shiftframes >= b_frames) { pd_error(0, "%s: shift target %f is out of range",OBJECT_NAME,target); return; } tmpmem = (float *) getbytes(shiftframes * b_nchans * sizeof(float)); /* copy shift block to tmp */ for(i = 0; i < shiftframes; i++) { tmpmem[i] = b_samples[i].w_float; } /* now shift the rest to the top */ for(i = 0; i < b_frames - shiftframes; i++) { b_samples[i].w_float =b_samples[i+shiftframes].w_float; } /* finally copy tmp to the tail */ for(i = 0; i < shiftframes; i++) { b_samples[(b_frames - shiftframes)+i].w_float = tmpmem[i]; } freebytes(tmpmem, shiftframes * b_nchans * sizeof(float)); buffet_update(x); } void buffet_normalize(t_buffet *x, t_floatarg f) { float target = (float) f; t_word *b_samples; long b_nchans; long b_frames; long i; float maxamp = 0.0; float amptest; float rescale; if(target <= 0.0) { pd_error(0, "%s: normalize target %f is too low",OBJECT_NAME,target); return; } buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; for(i = 0; i < b_frames * b_nchans; i++) { amptest = fabs(b_samples[i].w_float); if(maxamp < amptest) maxamp = amptest; } if(maxamp < .000000001) { post("%s: amplitude zero or too low to normalize in \"%s\"",OBJECT_NAME,x->wavename->s_name); return; } rescale = target / maxamp; if(rescale > .99 && rescale < 1.01) { post("%s: \"%s\" already normalized to %f",OBJECT_NAME,x->wavename->s_name,target); } else { for(i = 0; i < b_frames * b_nchans; i++) { b_samples[i].w_float *= rescale; } } buffet_update(x); } void buffet_fadein(t_buffet *x, t_floatarg f) { long fadeframes; long totalframes; int i,j,k; float env; t_word *b_samples; long b_nchans; if( ! x->sr) { pd_error(0, "zero sample rate!"); return; } fadeframes = f * .001 * x->sr; //post("fading in %d frames",fadeframes); buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if( fadeframes > totalframes) { pd_error(0, "fadein is too long"); return; } for(i = 0, k = 0;i < fadeframes * b_nchans; i += b_nchans, k++ ) { env = (float) k / (float) fadeframes; for(j = 0; j < b_nchans; j++) { b_samples[i + j].w_float *= env; } } buffet_update(x); } void buffet_fadeout(t_buffet *x, t_floatarg f) { long fadeframes; long totalframes; int i,j,k; float env; t_word *b_samples; long b_nchans; if( ! x->sr) { pd_error(0, "zero sample rate!"); return; } fadeframes = f * .001 * x->sr; buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if( fadeframes > totalframes) { pd_error(0, "%s: fadein is too long",OBJECT_NAME); return; } for(i = (totalframes-1) * b_nchans , k = 0; k < fadeframes ; i -= b_nchans, k++ ) { env = (float) k / (float) fadeframes; for(j = 0; j < b_nchans; j++) { b_samples[i + j].w_float *= env; } } buffet_update(x); } void buffet_killdc(t_buffet *x) { // long fadeframes; long totalframes; int i,j; t_word *b_samples; long b_nchans; float dc_coef = x->dc_coef; float a0[MAX_CHANNELS]; float a1[MAX_CHANNELS]; float b0[MAX_CHANNELS]; float b1[MAX_CHANNELS]; buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if(b_nchans > MAX_CHANNELS) { pd_error(0, "buffer has too many channels"); return; } for(j = 0; j < b_nchans; j++) { a0[j] = a1[j] = b0[j] = b1[j] = 0.0; } for(i = 0; i < totalframes * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { a0[j] = b_samples[i + j].w_float; b0[j] = a0[j] - a1[j] + dc_coef * b1[j]; b_samples[i + j].w_float = b0[j]; b1[j] = b0[j]; a1[j] = a0[j]; } } buffet_update(x); } void *buffet_new(t_symbol *msg, int argc, t_atom *argv) { srand(clock()); t_buffet *x = (t_buffet *)pd_new(buffet_class); x->bang = outlet_new(&x->x_obj, gensym("bang")); x->list = outlet_new(&x->x_obj, gensym("list")); x->floater = outlet_new(&x->x_obj, gensym("float")); x->sr = sys_getsr(); if(! x->sr ) x->sr = 44100; x->minframes = 0; x->maxframes = 0; if(argc < 1) { pd_error(0, "%s: you must provide a valid buffer name",OBJECT_NAME); x->wavename = &s_; } atom_arg_getsym(&x->wavename,0,argc,argv); atom_arg_getfloat(&x->minframes,1,argc,argv); atom_arg_getfloat(&x->maxframes,2,argc,argv); if(!x->minframes) x->minframes = 100; if(!x->maxframes) x->maxframes = x->minframes + 10; buffet_init(x,0); return x; } void buffet_init(t_buffet *x, short initialized) { if(x->minframes <= 0) x->minframes = 250; if(x->maxframes <= 0) x->maxframes = 1000; if(!initialized) { x->minframes *= .001 * x->sr; x->storage_maxframes = x->maxframes *= .001 * x->sr; x->fade = .001 * 20 * x->sr; // 20 ms fadetime to start x->storage_bytes = (x->maxframes + 1) * 2 * sizeof(float); // stereo storage frames x->storage = (float *) getbytes(x->storage_bytes); x->dc_coef = .995; // for dc blocker x->dc_gain = 4.0; x->autoredraw = 1; x->rmsbuf = (float *) getbytes(MAX_RMS_BUFFER * x->sr * sizeof(float)); memset((char *)x->rmsbuf, 0, MAX_RMS_BUFFER * x->sr * sizeof(float)); x->listdata = (t_atom *)getbytes(MAX_EVENTS * sizeof(t_atom));// lots of events x->analbuf = (float *) getbytes(MAX_RMS_FRAMES * sizeof(float)); memset((char *)x->analbuf, 0, MAX_RMS_FRAMES * sizeof(float)); x->onset = (float *) getbytes(MAX_EVENTS * sizeof(float)); x->wavebuf = (t_guffer *) getbytes(1 * sizeof(t_guffer)); x->destbuf = (t_guffer *) getbytes(1 * sizeof(t_guffer)); } else { x->minframes *= .001 * x->sr; x->storage_maxframes = x->maxframes *= .001 * x->sr; x->fade = .001 * 20 * x->sr; // 20 ms fadetime to start x->storage_bytes = (x->maxframes + 1) * 2 * sizeof(float); // stereo storage frames x->storage = (float *) resizebytes((char *)x->storage_bytes,0,x->storage_bytes); x->rmsbuf = (float *)resizebytes((char *)x->rmsbuf,0,MAX_RMS_BUFFER * x->sr * sizeof(float)); memset((char *)x->rmsbuf, 0, MAX_RMS_BUFFER * x->sr * sizeof(float)); } } void buffet_nosync_setswap(t_buffet *x) { long totalframes = x->wavebuf->b_frames; float minframes = x->minframes; float maxframes = x->maxframes; long swapframes = x->swapframes; long r1startframe = x->r1startframe; long r2startframe = x->r2startframe; long r1endframe; long r2endframe; long region1; long region2; swapframes = buffet_boundrand(minframes, maxframes); r1startframe = buffet_boundrand(0.0, (float)(totalframes-swapframes)); r1endframe = r1startframe + swapframes; region1 = r1startframe; region2 = totalframes - r1endframe; if(swapframes > region1) { r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); } else if(swapframes > region2) { r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); } else { // either region ok if(buffet_boundrand(0.0,1.0) > 0.5) { r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); } else { r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); } } r2endframe = r2startframe + swapframes; if(r2startframe < 0 || r1startframe < 0) { pd_error(0, "start frame less than zero!"); return; } if(r2endframe >= totalframes || r1endframe >= totalframes) { pd_error(0, "end frame reads beyond buffer!"); return; } x->swapframes = swapframes; x->r1startframe = r1startframe; x->r2startframe = r2startframe; outlet_bang(x->bang); } void buffet_swap(t_buffet *x) { float maxframes = x->maxframes; float fade = x->fade; long totalframes; long swapframes; long start_sample1; long start_sample2; float *storage = x->storage; t_word *b_samples; float mix_sample; float fadein_gain; float fadeout_gain; float fadephase; long b_nchans; int i,j,k; buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if(totalframes < maxframes * 2 + 1) { pd_error(0, "buffer must contain at least twice as many samples as the maximum swap size"); return; } if(b_nchans > 2) { pd_error(0, "buffet~ only accepts mono or stereo buffers"); return; } buffet_nosync_setswap(x); start_sample1 = x->r1startframe * b_nchans; start_sample2 = x->r2startframe * b_nchans; swapframes = x->swapframes; // store block1 samples for(i = 0; i < swapframes * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { storage[i+j] = b_samples[start_sample1 + i + j].w_float; } } // swap block2 into block1 location, fadein for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++) { fadephase = ((float)k / (float) fade) * PIOVERTWO; fadein_gain = sin(fadephase); fadeout_gain = cos(fadephase); for(j = 0; j < b_nchans; j++) { mix_sample = fadein_gain * b_samples[start_sample2 + i + j].w_float + fadeout_gain * b_samples[start_sample1 + i + j].w_float; b_samples[start_sample1 + i + j].w_float = mix_sample; } } // middle part, pure swap for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { b_samples[start_sample1 + i + j].w_float = b_samples[start_sample2 + i + j].w_float; } } // fade out for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++) { fadephase = ((float)k / (float) fade) * PIOVERTWO; fadein_gain = sin(fadephase); fadeout_gain = cos(fadephase); for(j = 0; j < b_nchans; j++) { mix_sample = fadeout_gain * b_samples[start_sample2 + i + j].w_float + fadein_gain * b_samples[start_sample1 + i + j].w_float; b_samples[start_sample1 + i + j].w_float = mix_sample; } } // now mix stored block1 into block2 location // swap block2 into block1 location, fadein for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++) { fadein_gain = (float)k / (float) fade; fadeout_gain = 1.0 - fadein_gain; for(j = 0; j < b_nchans; j++) { mix_sample = fadein_gain * storage[i + j] + fadeout_gain * b_samples[start_sample2 + i + j].w_float; b_samples[start_sample2 + i + j].w_float = mix_sample; } } // middle part, pure swap for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { b_samples[start_sample2 + i + j].w_float = storage[i + j]; } } // fade out for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++) { fadein_gain = (float)k / (float) fade; fadeout_gain = 1.0 - fadein_gain; for(j = 0; j < b_nchans; j++) { mix_sample = fadeout_gain * storage[i + j] + fadein_gain * b_samples[start_sample2 + i + j].w_float; b_samples[start_sample2 + i + j].w_float = mix_sample; } } buffet_update(x); } void buffet_specswap(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { // float minframes = x->minframes; float maxframes = x->maxframes; float fade = x->fade; long totalframes; long swapframes; long r1startframe; long r1endframe; long r2startframe; long r2endframe; long region1; long region2; long start_sample1; long start_sample2; float *storage = x->storage; t_word *b_samples; float mix_sample; float fadein_gain; float fadeout_gain; float fadephase; long b_nchans; int i,j,k; buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if(totalframes < maxframes * 2 + 1) { pd_error(0, "buffer must contain at least twice as many samples as the maximum swap size"); return; } if(b_nchans > 2) { pd_error(0, "buffet~ only accepts mono or stereo buffers"); return; } r1startframe = x->sr * .001 * atom_getfloatarg(0,argc,argv); r2startframe = x->sr * .001 * atom_getfloatarg(1,argc,argv); swapframes = x->sr * .001 * atom_getfloatarg(2,argc,argv); if( r1startframe < 0 || r1startframe >= totalframes) { pd_error(0, "bad first skip time"); return; } if( r2startframe < 0 || r2startframe >= totalframes) { pd_error(0, "bad second skip time"); return; } // post("start1 %d start2 %d swaps %d",r1startframe,r2startframe,swapframes ); r1endframe = r1startframe + swapframes; r2endframe = r2startframe + swapframes; region1 = r1startframe; region2 = totalframes - r1endframe; /* post("min: %.0f, max: %.0f, total: %d, swap: %d",minframes, maxframes,totalframes, swapframes); post("r1st %d, r1end %d, region1 %d, region2 %d",r1startframe, r1endframe, region1, region2); */ if(swapframes > x->storage_maxframes) { pd_error(0, "swapsize %ld is larger than %ld; reset maximum swap.", swapframes,x->storage_maxframes ); return; } if(r1endframe >= totalframes) { pd_error(0, "block 1 reads beyond buffer!"); return; } if(r2endframe >= totalframes) { pd_error(0, "block 2 reads beyond buffer!"); return; } // store block1 samples start_sample1 = r1startframe * b_nchans; start_sample2 = r2startframe * b_nchans; for(i = 0; i < swapframes * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { storage[i+j] = b_samples[start_sample1 + i + j].w_float; } } // swap block2 into block1 location, fadein for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++) { fadephase = ((float)k / (float) fade) * PIOVERTWO; fadein_gain = sin(fadephase); fadeout_gain = cos(fadephase); for(j = 0; j < b_nchans; j++) { mix_sample = fadein_gain * b_samples[start_sample2 + i + j].w_float + fadeout_gain * b_samples[start_sample1 + i + j].w_float; b_samples[start_sample1 + i + j].w_float = mix_sample; } } // middle part, pure swap for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { b_samples[start_sample1 + i + j].w_float = b_samples[start_sample2 + i + j].w_float; } } // fade out for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++) { fadephase = ((float)k / (float) fade) * PIOVERTWO; fadein_gain = sin(fadephase); fadeout_gain = cos(fadephase); for(j = 0; j < b_nchans; j++) { mix_sample = fadeout_gain * b_samples[start_sample2 + i + j].w_float + fadein_gain * b_samples[start_sample1 + i + j].w_float; b_samples[start_sample1 + i + j].w_float = mix_sample; } } // now mix stored block1 into block2 location // swap block2 into block1 location, fadein for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++) { fadein_gain = (float)k / (float) fade; fadeout_gain = 1.0 - fadein_gain; for(j = 0; j < b_nchans; j++) { mix_sample = fadein_gain * storage[i + j] + fadeout_gain * b_samples[start_sample2 + i + j].w_float; b_samples[start_sample2 + i + j].w_float = mix_sample; } } // middle part, pure swap for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { b_samples[start_sample2 + i + j].w_float = storage[i + j]; } } // fade out for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++) { fadein_gain = (float)k / (float) fade; fadeout_gain = 1.0 - fadein_gain; for(j = 0; j < b_nchans; j++) { mix_sample = fadeout_gain * storage[i + j] + fadein_gain * b_samples[start_sample2 + i + j].w_float; b_samples[start_sample2 + i + j].w_float = mix_sample; } } buffet_update(x); } void buffet_retroblock(t_buffet *x) { float minframes = x->minframes; float maxframes = x->maxframes; float fade = x->fade; long totalframes; long swapframes; long r1startframe; long r1endframe; long start_sample1; float *storage = x->storage; t_word *b_samples; float mix_sample; float fadein_gain; float fadeout_gain; // float fadephase; long ub1, lb1; long ub2, lb2; long block1size,block2size; long b_nchans; long syncframe; int i,j,k; buffet_setbuf(x, x->wavename); if(x->hosed) { return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if(totalframes < maxframes * b_nchans + 1) { pd_error(0, "buffer must contain at least twice as many samples as the maximum swap size"); return; } if(b_nchans > 2) { pd_error(0, "buffet~ only accepts mono or stereo buffers"); return; } syncframe = x->sync * totalframes; swapframes = buffet_boundrand(minframes, maxframes); if(x->sync <= 0.0 ){ // either no sync signal or it is zero r1startframe = buffet_boundrand(0.0, (float)(totalframes-swapframes)); r1endframe = r1startframe + swapframes; } else { // avoid swapping where we are playing from buffer lb1 = 0; ub1 = syncframe - CUSHION_FRAMES; // could be reading buffer backwards lb2 = ub1 + CUSHION_FRAMES; ub2 = totalframes - 1; block1size = ub1 - lb1; block2size = ub2 - lb2; if(block1size < maxframes && block2size < maxframes ) { pd_error(0, "could not reverse block"); return; } if(block1size >= maxframes && block2size >= maxframes) { if(buffet_boundrand(0.0,1.0) > 0.5) { r1startframe = buffet_boundrand(0.0, (float)(ub1-swapframes)); } else { r1startframe = buffet_boundrand((float)lb2, (float)(ub2-swapframes)); } } else if(block1size < maxframes) { r1startframe = buffet_boundrand((float)lb2, (float)(ub2-swapframes)); } else { r1startframe = buffet_boundrand(0.0, (float)(ub1-swapframes)); } r1endframe = r1startframe + swapframes; } if(r1endframe >= totalframes) { pd_error(0, "%s: retro beyond bounds",OBJECT_NAME); return; } // store block1 samples start_sample1 = r1startframe * b_nchans; // start_sample2 = r2startframe * b_nchans; // store block in reversed order for(k = 0, i = (swapframes-1) * b_nchans; i > 0; i -= b_nchans, k += b_nchans) { for(j = 0; j < b_nchans; j++) { storage[i+j] = b_samples[start_sample1 + k + j].w_float; } } // swap block2 into block1 location, fadein for(i = 0, k = 0; i < fade * b_nchans; i += b_nchans, k++) { fadein_gain = (float)k / (float) fade; fadeout_gain = 1.0 - fadein_gain; for(j = 0; j < b_nchans; j++) { mix_sample = fadein_gain * storage[i + j] + fadeout_gain * b_samples[start_sample1 + i + j].w_float; b_samples[start_sample1 + i + j].w_float = mix_sample; } } // middle part, pure swap for(i = fade * b_nchans; i < (swapframes-fade) * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { b_samples[start_sample1 + i + j].w_float = storage[i + j]; } } // fade out for(i = (swapframes-fade) * b_nchans, k = 0; i < swapframes * b_nchans; i += b_nchans, k++) { fadein_gain = (float)k / (float) fade; fadeout_gain = 1.0 - fadein_gain; for(j = 0; j < b_nchans; j++) { mix_sample = fadeout_gain * storage[i + j] + fadein_gain * b_samples[start_sample1 + i + j].w_float; b_samples[start_sample1 + i + j].w_float = mix_sample; } } buffet_update(x); } // clicky version void buffet_nakedswap(t_buffet *x) { //long long minframes = x->minframes; long maxframes = x->maxframes; long totalframes; long swapframes; long r1startframe; long r1endframe; long r2startframe; long r2endframe; long region1; long region2; long start_sample1; long start_sample2; float *storage = x->storage; t_word *b_samples; long b_nchans; int i,j; buffet_setbuf(x, x->wavename); b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; totalframes = x->wavebuf->b_frames; if(totalframes < maxframes * 2 + 1) { pd_error(0, "buffer must contain at least twice as many samples as the maximum swap size"); return; } if(b_nchans != 2) { pd_error(0, "buffet~ only accepts stereo buffers"); return; } swapframes = buffet_boundrand((float)minframes, (float)maxframes); r1startframe = buffet_boundrand(0.0, (float)(totalframes-swapframes)); r1endframe = r1startframe + swapframes; region1 = r1startframe; region2 = totalframes - r1endframe; if(swapframes > region1) { r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); } else if(swapframes > region2) { r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); } else { if(buffet_boundrand(0.0,1.0) > 0.5) { r2startframe = buffet_boundrand(0.0,(float)(r1startframe-swapframes)); } else { r2startframe = buffet_boundrand((float)r1endframe,(float)(totalframes-swapframes)); } } r2endframe = r2startframe + swapframes; if(r2startframe < 0 || r1startframe < 0) { pd_error(0, "start frame less than zero!"); return; } if(r2endframe >= totalframes || r1endframe >= totalframes) { pd_error(0, "end frame reads beyond buffer!"); return; } // Now swap the samples. For now no cross fade start_sample1 = r1startframe * b_nchans; start_sample2 = r2startframe * b_nchans; for(i = 0; i < swapframes * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { storage[i+j] = b_samples[start_sample1 + i + j].w_float; } } // swap block1 into block2 for(i = 0; i < swapframes * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { b_samples[start_sample1 + i + j].w_float = b_samples[start_sample2 + i + j].w_float; } } // swap stored block into block1 for(i = 0; i < swapframes * b_nchans; i += b_nchans) { for(j = 0; j < b_nchans; j++) { b_samples[start_sample2 + i + j].w_float = storage[i + j]; } } buffet_update(x); } void buffet_setbuf(t_buffet *x, t_symbol *wavename) { t_garray *a; int b_frames; t_word *b_samples; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); x->wavebuf->b_samples = 0; x->wavebuf->b_valid = 0; } else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); x->wavebuf->b_valid = 0; } else { x->wavebuf->b_valid = 1; x->wavebuf->b_frames = b_frames; x->wavebuf->b_nchans = 1; x->wavebuf->b_samples = b_samples; garray_usedindsp(a); } } t_int *buffet_perform(t_int *w) { t_buffet *x = (t_buffet *) (w[1]); float *sync = (t_float *)(w[2]); int n = (int) w[3]; while(n--) { x->sync = *sync++; } return (w+4); } float buffet_boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); } void buffet_detect_onsets(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { t_word *b_samples; long b_nchans; long b_frames; t_atom *listdata = x->listdata; long startframe; long currentframe; long endframe; long sample_frames; long fft_frames; int R = x->sr; int N = 1024; int N2 = N / 2; int Nw = N; int Nw2 = Nw / 2; int D = N / 2; int i,j,k,m; // float sb1,sb2,sb3,sb4,energy=0,lastenergy; float freqcenter=0; float tmp; float fave; // freq average short first = 1; float dsum; short suppress = 0; float suppressrt = 0; float rt, rtadv; int inCount; float *Wanal; float *Wsyn; float *input; float *Hwin; float *buffer; float *channel; float *output; float *input_vec; float *specdiff; float *freqdiff; float *hfc; float *freqs, *amps; float lastfreqs[5]; float fdiffs[5]; float *onsets; float **loveboat; float *c_lastphase_in; float *c_lastphase_out; float c_fundamental; float c_factor_in; float *trigland; int *bitshuffle; int topanalbin; float threshold; int bytesize; int MAX_ONSETS = 2048; int onset_count = 0; buffet_setbuf(x, x->wavename); if( x->hosed ) { pd_error(0, "buffet~ needs a valid buffer"); return; } if(argc < 4) { post("%s: detect_onsets requires start and end times,threshold and FFTsize",OBJECT_NAME); return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); threshold = atom_getfloatarg(2,argc,argv); N = atom_getfloatarg(3,argc,argv); N2 = N / 2; Nw = N; Nw2 = Nw / 2; D = N / 2; sample_frames = endframe - startframe; fft_frames = sample_frames / D; c_fundamental = (float)R / (float)N; inCount = -Nw; c_factor_in = (float)R/((float)D * TWOPI); rt = startframe * 1000.0 / x->sr; rtadv = 1000. * (float)D/(float)R; post("we will analyze %d FFT frames",fft_frames); Wanal = (float *) getbytes(Nw * sizeof(float)); Wsyn = (float *) getbytes(Nw * sizeof(float)); Hwin = (float *) getbytes(Nw * sizeof(float)); input = (float *) getbytes(Nw * sizeof(float) ); output = (float *) getbytes(Nw * sizeof(float) ); buffer = (float *) getbytes(N * sizeof(float)); channel = (float *) getbytes((N+2) * sizeof(float) ); bitshuffle = (int *) getbytes(N * 2 * sizeof(int)); bytesize = N * 2 * sizeof(float); // post("allocing %d bytes to trigland",N * 2 * sizeof(float)); trigland = (float *) getbytes(N * 2 * sizeof(float)); // post("cleaning %d bytes in trigland",N * 2 * sizeof(float)); c_lastphase_in = (float *) getbytes((N2+1) * sizeof(float)); c_lastphase_out = (float *) getbytes((N2+1) * sizeof(float)); input_vec = (float *) getbytes(D * sizeof(float)); onsets = (float *) getbytes(MAX_ONSETS * sizeof(float)); specdiff = (float *) getbytes(fft_frames * sizeof(float)); freqdiff = (float *) getbytes(fft_frames * sizeof(float)); hfc = (float *) getbytes(fft_frames * sizeof(float)); loveboat = (float **) getbytes(fft_frames * sizeof(float *)); freqs = (float *) getbytes(N * sizeof(float)); amps = (float *) getbytes(N * sizeof(float)); for(i = 0; i < fft_frames; i++) { loveboat[i] = (float *) getbytes((N+2) * sizeof(float)); if(loveboat[i] == NULL) { pd_error(0, "memory error"); return; } // memset((char *)loveboat[i],0,(N+2)*sizeof(float)); } memset((char *)trigland,0, N * 2 * sizeof(float)); memset((char *)input,0,Nw * sizeof(float)); memset((char *)output,0,Nw * sizeof(float)); memset((char *)c_lastphase_in,0,(N2+1) * sizeof(float)); memset((char *)c_lastphase_out,0,(N2+1) * sizeof(float)); memset((char *)bitshuffle,0, 2 * N * sizeof(int)); lpp_makewindows(Hwin, Wanal, Wsyn, Nw, N, D); lpp_init_rdft(N, bitshuffle, trigland); currentframe = startframe; for(k = 0; k < fft_frames; k++) { for(j = 0; j < D; j++) { input_vec[j] = b_samples[(currentframe + j) * b_nchans].w_float;// only read first channel } currentframe += D; for ( j = 0 ; j < Nw - D ; j++ ) { input[j] = input[j+D]; } for (i = 0, j = Nw - D; j < Nw; j++, i++) { input[j] = input_vec[i]; } lpp_fold(input, Wanal, Nw, buffer, N, inCount); lpp_rdft(N, 1, buffer, bitshuffle, trigland); lpp_convert(buffer, loveboat[k], N2, c_lastphase_in, c_fundamental, c_factor_in); } topanalbin = 11000.0 / c_fundamental; // post("top bin %d",topanalbin); for(j = 0; j < 5; j++) lastfreqs[j] = 0; for(i = 0, k = 1; i < fft_frames - 1; i++, k++) { for(j = 0; j < 5; j++) lastfreqs[j] = freqs[j]; for(j = 2, m = 0; j < topanalbin * 2; j += 2, m++){ // skip lowest bin freqcenter += fabs(loveboat[i][j]) * fabs(loveboat[i][j+1]); amps[m] = fabs(loveboat[i][j]); freqs[m] = loveboat[i][j+1]; } /* swap top freqs to the top - but note there is a problem if some lower partials vacillate over which is the weakest since it will swap places and generate spurious change of frequency info. */ for(j = 0; j < topanalbin-1; j++) { for(m = j + 1 ; m < topanalbin; m++) { if(amps[m]> amps[j]) { tmp = amps[j]; amps[j] = amps[m]; amps[m] = tmp; tmp = freqs[j]; freqs[j] = freqs[m]; freqs[m] = tmp; } } } if(first) { first = 0; for(j = 0; j < 5; j++) { lastfreqs[j] = freqs[j]; } } for(j = 0; j < 5; j++) { fave = (lastfreqs[j] + freqs[j]) * 0.5; if(fave > 0) fdiffs[j] = fabs(lastfreqs[j] - freqs[j])/fave; else fdiffs[j] = 0; } dsum = fdiffs[0] + .5 * fdiffs[1] + .25 * fdiffs[2] + .125 * fdiffs[3] + .0625 * fdiffs[4]; if(dsum > threshold && ! suppress) { suppress = 1; suppressrt = 0; onsets[onset_count++] = rt; /* post("%.2f: f1 %.2f d1 %.2f f2 %.2f d2 %.2f f3 %.2f d3 %.2f f4 %.2f d4 %.2f f5 %.2f d5 %.2f, dsum: %f", rt, freqs[0],fdiffs[0], freqs[1],fdiffs[1], freqs[2],fdiffs[2], freqs[3],fdiffs[3], freqs[4],fdiffs[4], dsum); */ } else { suppressrt += rtadv; if(suppressrt > 100){ // 100 ms latency suppress = 0; } } rt += rtadv; } post("%s: %d onsets detected",OBJECT_NAME,onset_count); for(i = 0; i < onset_count; i++) { SETFLOAT(listdata + i, onsets[i]); } outlet_list(x->list, 0, onset_count, listdata); outlet_bang(x->bang); // free memory at end of routine } void buffet_detect_subband_onsets(t_buffet *x, t_symbol *msg, int argc, t_atom *argv) { t_word *b_samples; long b_nchans; long b_frames; long startframe; long currentframe; long endframe; long sample_frames; long fft_frames; int R = x->sr; int N = 1024; int N2 = N / 2; int Nw = N; int Nw2 = Nw / 2; int D = N / 2; int i,j,k,l; int minbin,maxbin; float rt, rtadv; int inCount; float *Wanal; float *Wsyn; float *input; float *Hwin; float *buffer; // float *channel; float *output; float *input_vec; // float *specdiff; // float *freqdiff; float *hfc; float *freqs, *amps; float subband_energy[5]; float subband_freqdiff[5]; int subband_bincuts[6]; float *onsets; float **loveboat; float *c_lastphase_in; float *c_lastphase_out; float c_fundamental; float c_factor_in; float *trigland; int *bitshuffle; float threshold; int MAX_ONSETS = 2048; buffet_setbuf(x, x->wavename); if( x->hosed ) { pd_error(0, "buffet~ needs a valid buffer"); return; } if(argc < 4) { post("%s: detect_onsets requires start and end times,threshold and FFTsize",OBJECT_NAME); return; } b_samples = x->wavebuf->b_samples; b_nchans = x->wavebuf->b_nchans; b_frames = x->wavebuf->b_frames; startframe = .001 * x->sr * atom_getfloatarg(0,argc,argv); endframe = .001 * x->sr * atom_getfloatarg(1,argc,argv); threshold = atom_getfloatarg(2,argc,argv); N = atom_getfloatarg(3,argc,argv); N2 = N / 2; Nw = N; Nw2 = Nw / 2; D = N / 2; if(!endframe) endframe = b_frames; sample_frames = endframe - startframe; fft_frames = sample_frames / D; c_fundamental = (float)R / (float)N; inCount = -Nw; c_factor_in = (float)R/((float)D * TWOPI); rt = startframe * 1000.0 / x->sr; rtadv = 1000. * (float)D/(float)R; post("we will analyze %d FFT frames",fft_frames); subband_bincuts[0] = 1; subband_bincuts[1] = (int) (500.0 / c_fundamental); subband_bincuts[2] = (int) (1000.0 / c_fundamental); subband_bincuts[3] = (int) (2000.0 / c_fundamental); subband_bincuts[4] = (int) (4000.0 / c_fundamental); subband_bincuts[5] = (int) (8000.0 / c_fundamental); Wanal = (float *) getbytes(Nw * sizeof(float)); Wsyn = (float *) getbytes(Nw * sizeof(float)); Hwin = (float *) getbytes(Nw * sizeof(float)); input = (float *) getbytes(Nw * sizeof(float) ); output = (float *) getbytes(Nw * sizeof(float) ); buffer = (float *) getbytes(N * sizeof(float)); // channel = (float *) getbytes((N+2) * sizeof(float) ); bitshuffle = (int *) getbytes(N * 2 * sizeof(int)); trigland = (float *) getbytes(N * 2 * sizeof(float)); c_lastphase_in = (float *) getbytes((N2+1) * sizeof(float)); c_lastphase_out = (float *) getbytes((N2+1) * sizeof(float)); input_vec = (float *) getbytes(D * sizeof(float)); onsets = (float *) getbytes(MAX_ONSETS * sizeof(float)); // specdiff = (float *) getbytes(fft_frames * sizeof(float)); // freqdiff = (float *) getbytes(fft_frames * sizeof(float)); hfc = (float *) getbytes(fft_frames * sizeof(float)); loveboat = (float **) getbytes(fft_frames * sizeof(float *)); freqs = (float *) getbytes(N * sizeof(float)); amps = (float *) getbytes(N * sizeof(float)); for(i = 0; i < fft_frames; i++) { loveboat[i] = (float *) getbytes((N+2) * sizeof(float)); if(loveboat[i] == NULL) { pd_error(0, "memory error"); return; } // memset((char *)loveboat[i],0,(N+2)*sizeof(float)); } /* memset((char *)trigland,0, N * 2 * sizeof(float)); memset((char *)input,0,Nw * sizeof(float)); memset((char *)output,0,Nw * sizeof(float)); memset((char *)c_lastphase_in,0,(N2+1) * sizeof(float)); memset((char *)c_lastphase_out,0,(N2+1) * sizeof(float)); memset((char *)bitshuffle,0, 2 * N * sizeof(int)); */ lpp_makewindows(Hwin, Wanal, Wsyn, Nw, N, D); lpp_init_rdft(N, bitshuffle, trigland); currentframe = startframe; for(k= 0; k < 5; k++) { minbin = subband_bincuts[k]; maxbin = subband_bincuts[k+1]; post("%d: minbin %d maxbin %d",k, minbin,maxbin); } for(k = 0; k < fft_frames; k++) { for(j = 0; j < D; j++) { input_vec[j] = b_samples[(currentframe + j) * b_nchans].w_float;// only read first channel } currentframe += D; for ( j = 0 ; j < Nw - D ; j++ ) { input[j] = input[j+D]; } for (i = 0, j = Nw - D; j < Nw; j++, i++) { input[j] = input_vec[i]; } lpp_fold(input, Wanal, Nw, buffer, N, inCount); lpp_rdft(N, 1, buffer, bitshuffle, trigland); lpp_convert(buffer, loveboat[k], N2, c_lastphase_in, c_fundamental, c_factor_in); } rt = rtadv; for(i = 0, j = 1; i < fft_frames - 1; i++, j++) { for(k= 0; k < 5; k++) { minbin = subband_bincuts[k]; maxbin = subband_bincuts[k+1]; subband_energy[k] = 0; subband_freqdiff[k] = 0; /* maxamp = 0; for(l = minbin * 2; l < maxbin * 2; l += 2) { } */ for(l = minbin * 2; l < maxbin * 2; l += 2) { // subband_energy[k] += (loveboat[j][l] * loveboat[j][l]) - (loveboat[i][l] * loveboat[i][l]); subband_freqdiff[k] += (fabs(loveboat[j][l+1] - loveboat[i][l+1])/loveboat[i][l+1]) * loveboat[j][l] * loveboat[j][l] ;// scale by energy } } /* post("rt: %.2f sb1 %f sb2 %f sb3 %f sb4 %f sb5 %f", rt, subband_energy[0],subband_energy[1],subband_energy[2],subband_energy[3],subband_energy[4] ); */ post("rt:%f fb1 %f fb2 %f fb3 %f fb4 %f fb5 %f", rt, subband_freqdiff[0],subband_freqdiff[1],subband_freqdiff[2],subband_freqdiff[3],subband_freqdiff[4] ); /* post("%.2f: f1 %.2f d1 %.2f f2 %.2f d2 %.2f f3 %.2f d3 %.2f f4 %.2f d4 %.2f f5 %.2f d5 %.2f, dsum: %f", rt, freqs[0],fdiffs[0], freqs[1],fdiffs[1], freqs[2],fdiffs[2], freqs[3],fdiffs[3], freqs[4],fdiffs[4], dsum); */ rt += rtadv; } /* post("%s: %d onsets detected",OBJECT_NAME,onset_count); for(i = 0; i < onset_count; i++) { SETFLOAT(listdata + i, onsets[i]); } outlet_list(x->list, 0, onset_count, listdata); outlet_bang(x->bang); */ // free memory at end of routine } void buffet_dsp_free(t_buffet *x) { freebytes(x->storage,0); freebytes(x->listdata,0); freebytes(x->rmsbuf,0); freebytes(x->analbuf,0); freebytes(x->onset,0); freebytes(x->wavebuf,0); freebytes(x->destbuf,0); } void buffet_dsp(t_buffet *x, t_signal **sp) { buffet_setbuf(x, x->wavename); if( x->hosed ) { pd_error(0, "buffet~ needs a valid buffer"); return; } if( x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; if(!x->sr) { post("%s: warning: zero sampling rate!",OBJECT_NAME); x->sr = 44100; } buffet_init(x,1); } dsp_add(buffet_perform, 3, x, sp[0]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/bvplay~-help.pd000066400000000000000000000034441430526361000200340ustar00rootroot00000000000000#N canvas 600 60 673 608 12; #N canvas 348 477 724 547 load-a-sound 0; #X obj 49 245 soundfiler; #X obj 49 119 openpanel; #X obj 49 92 inlet; #X msg 49 142 read -resize \$1 bvplay-demo-array; #X obj 307 107 loadbang; #X msg 307 143 read -resize sound/voice.wav bvplay-demo-array; #X connect 1 0 3 0; #X connect 2 0 1 0; #X connect 3 0 0 0; #X connect 4 0 5 0; #X connect 5 0 0 0; #X restore 219 425 pd load-a-sound; #X obj 219 396 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #N canvas 0 22 450 300 (subpatch) 0; #X array bvplay-demo-array 62079 float 2; #X coords 0 1 62079 -1 100 70 1 0 0; #X restore 210 502 graph; #X text 371 344 args: name \, chans \, taper; #X msg 42 232 taper \$1; #X floatatom 42 211 5 5 250 0 - #0-bvplay-taper -; #X text 107 231 set fadein/fadeout for each note; #X text 185 264 example notes; #X msg 67 264 0 500 1.2 1; #X msg 88 284 900 1000 -0.5 1; #X text 238 397 <- first load in a sound (recommend at least 5 secs) or use default sound loaded if you prefer; #X obj 42 387 lpp-meters; #X obj 39 28 lpp-icon bvplay~; #X text 262 56 - enveloped array playback; #X obj 42 348 lyonpotpourri/bvplay~ bvplay-demo-array 1 30; #X text 39 130 Send note statements to [bvplay~] in list format: [skip duration increment amplitude]. [bvplay~] will omit overlapped notes \, but multiple units can be used for polyphony., f 52; #X text 211 288 negative increments ok; #N canvas 155 117 450 300 init 0; #X obj 41 42 loadbang; #X msg 41 138 \; \$1 100; #X obj 41 105 symbol \$0-bvplay-taper; #X obj 41 75 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X connect 0 0 3 0; #X connect 2 0 1 0; #X connect 3 0 2 0; #X restore 219 451 pd init; #X connect 1 0 0 0; #X connect 4 0 14 0; #X connect 5 0 4 0; #X connect 8 0 14 0; #X connect 9 0 14 0; #X connect 14 0 11 0; #X connect 14 0 11 1; pd-lyonpotpourri-3.0.1/bvplay~.c000066400000000000000000000164511430526361000167270ustar00rootroot00000000000000#include "MSPd.h" static t_class *bvplay_class; #define OBJECT_NAME "bvplay~" typedef struct { t_word *b_samples; long b_valid; long b_nchans; long b_frames; } t_guffer; // stuff we care about from garrays and buffers typedef struct _bvplay { t_object x_obj; float x_f; t_symbol *sfname; // name of soundfile t_guffer *wavebuf; // store needed buffer or garray data long object_chans; // number of channels for a given instantiation float taper_dur; int R; int framesize; float *notedata; int active; float buffer_duration; int taper_frames; float amp; int start_frame; int note_frames; int end_frame; float increment; float findex; int index ; short verbose; short mute; } t_bvplay; static t_int *bvplay_perform_mono(t_int *w); static t_int *bvplay_perform_stereo(t_int *w); static void bvplay_dsp(t_bvplay *x, t_signal **sp); static void bvplay_set(t_bvplay *x, t_symbol *s); static void *bvplay_new(t_symbol *s, t_floatarg taperdur); static void bvplay_notelist(t_bvplay *x, t_symbol *msg, int argc, t_atom *argv ); static void bvplay_verbose(t_bvplay *x, t_floatarg t); static void bvplay_mute(t_bvplay *x, t_floatarg t); static void bvplay_taper(t_bvplay *x, t_floatarg t); static void bvplay_dsp_free(t_bvplay *x); void bvplay_tilde_setup(void) { bvplay_class = class_new(gensym("bvplay~"),(t_newmethod)bvplay_new, (t_method)bvplay_dsp_free, sizeof(t_bvplay), 0, A_SYMBOL, A_FLOAT,0); CLASS_MAINSIGNALIN(bvplay_class,t_bvplay, x_f); class_addmethod(bvplay_class,(t_method)bvplay_dsp,gensym("dsp"),A_CANT,0); class_addmethod(bvplay_class,(t_method)bvplay_notelist,gensym("list"),A_GIMME,0); class_addmethod(bvplay_class,(t_method)bvplay_verbose,gensym("verbose"),A_FLOAT,0); class_addmethod(bvplay_class,(t_method)bvplay_mute,gensym("mute"),A_FLOAT,0); class_addmethod(bvplay_class,(t_method)bvplay_taper,gensym("taper"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void bvplay_taper(t_bvplay *x, t_floatarg t) { if(t>0) { x->taper_dur = (float)t/1000.0; x->taper_frames = x->R * x->taper_dur; } } void bvplay_mute(t_bvplay *x, t_floatarg f) { x->mute = (short)f; } void bvplay_verbose(t_bvplay *x, t_floatarg f) { x->verbose = (short)f; } void bvplay_notelist(t_bvplay *x, t_symbol *msg, int argc, t_atom *argv) { if( x->active ) { if( x->verbose ) pd_error(0, "object still playing - cannot add note!"); return; } bvplay_set(x, x->sfname); if(! x->wavebuf->b_valid) { post("%s: no valid buffer yet",OBJECT_NAME); return; } // read note data if( argc != 4 ) { if( x->verbose ) { post("improper note data"); post("notelist parameters: skiptime, duration, increment, amplitude"); } } x->notedata[0] = atom_getfloatarg(0,argc,argv) / 1000.0; x->notedata[1] = atom_getfloatarg(1,argc,argv) / 1000.0; x->notedata[2] = atom_getfloatarg(2,argc,argv); x->notedata[3] = atom_getfloatarg(3,argc,argv); x->start_frame = x->notedata[0] * x->R; x->increment = x->notedata[2]; x->index = x->findex = x->start_frame; if( x->increment == 0.0 ) { if( x->verbose ) post("zero increment!"); return; } x->note_frames = x->notedata[1] * x->increment * x->R; x->end_frame = x->start_frame + x->note_frames; x->amp = x->notedata[3]; if( x->start_frame < 0 || x->start_frame >= x->wavebuf->b_frames) { if( x->verbose ) post("%s: bad start time",OBJECT_NAME); return; } if( x->end_frame < 0 || x->end_frame >= x->wavebuf->b_frames) { if( x->verbose ) post("%s: bad end time",OBJECT_NAME); return; } x->active = 1; } t_int *bvplay_perform_mono(t_int *w) { t_bvplay *x = (t_bvplay *)(w[1]); t_float *out = (t_float *)(w[2]); int n = (int) w[3]; t_word *tab; long iindex = x->index; float findex = x->findex; int end_frame = x->end_frame; float increment = x->increment; int start_frame = x->start_frame; int taper_frames = x->taper_frames; float noteamp = x->amp; float frac, amp; /**********************/ bvplay_set(x,x->sfname); if(!x->wavebuf->b_valid) { post("invalid buffer"); memset(out, 0, sizeof(float) * n); return (w+4); } tab = x->wavebuf->b_samples; if(x->active) { while(n--) { // post("index: %d endframe %d", iindex, end_frame); if((increment > 0 && iindex < end_frame) || (increment < 0 && iindex > end_frame)) { // envelope if( increment > 0 ) { if( findex < start_frame + taper_frames ) { amp = noteamp * ((findex - (float) start_frame) / (float) taper_frames ); } else if ( findex > end_frame - taper_frames) { amp = noteamp * (((float)end_frame - findex) / (float) taper_frames); } else { amp = noteamp; } } else { // negative increment case if( findex > start_frame - taper_frames ) { amp = noteamp * ( (start_frame - findex) / taper_frames ); } else if ( findex < end_frame + taper_frames) { amp = noteamp * (( findex - end_frame ) / taper_frames) ; } else { amp = noteamp; } } frac = findex - iindex ; *out++ = amp * (tab[iindex].w_float + frac * (tab[iindex + 1].w_float - tab[iindex].w_float)); findex += increment; iindex = findex ; } else { *out++ = 0; x->active = 0; } } } else{ while(n--) { *out++ = 0; } } x->index = iindex; x->findex = findex; return (w+4); } void bvplay_set(t_bvplay *x, t_symbol *wavename) { t_garray *a; int b_frames; t_word *b_samples; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); x->wavebuf->b_valid = 0; } else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); x->wavebuf->b_valid = 0; } else { x->wavebuf->b_valid = 1; x->wavebuf->b_frames = b_frames; x->wavebuf->b_nchans = 1; x->wavebuf->b_samples = b_samples; garray_usedindsp(a); } } void *bvplay_new(t_symbol *s, t_floatarg taperdur) { int ichan = 1; t_bvplay *x = (t_bvplay *)pd_new(bvplay_class); outlet_new(&x->x_obj, gensym("signal")); x->object_chans = ichan; taperdur /= 1000.0; // convert to seconds if(taperdur <= 0) taperdur = .005; x->sfname = s; x->R = sys_getsr(); if(! x->R) { pd_error(0, "zero sampling rate - set to 44100"); x->R = 44100; } x->notedata = (float *) getbytes(4 * sizeof(float)); x->wavebuf = (t_guffer *) getbytes(1 * sizeof(t_guffer)); x->taper_dur = taperdur; x->taper_frames = x->R * x->taper_dur; x->buffer_duration = 0.0 ; x->framesize = 0; x->active = 0; x->verbose = 0; x->mute = 0; // post("channels %f, taper duration %.4f, taperframes %d", chan, taperdur, x->taper_frames ); // post("arguments: channels, taper_duration(secs.)"); return x; } void bvplay_dsp_free(t_bvplay *x) { freebytes(x->notedata, 4 * sizeof(float)); freebytes(x->wavebuf, 1 * sizeof(t_guffer)); } void bvplay_dsp(t_bvplay *x, t_signal **sp) { bvplay_set(x,x->sfname); if(x->R != sp[0]->s_sr) { x->R = sp[0]->s_sr; x->taper_frames = x->R * x->taper_dur; } dsp_add(bvplay_perform_mono, 3, x, sp[0]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/cartopol~-help.pd000066400000000000000000000027421430526361000203620ustar00rootroot00000000000000#N canvas 600 60 525 503 12; #N canvas 91 32 1073 583 basic-fft 0; #X obj 225 66 inlet~; #X obj 225 341 outlet~; #X obj 225 136 rfft~; #X obj 94 403 block~ 1024 8; #X obj 225 245 rifft~; #X obj 225 275 *~ 0; #X obj 719 178 *; #X msg 671 100 1 1024 8; #X obj 671 131 unpack f f f; #X obj 671 210 /; #X floatatom 671 242 12 0 0 0 - - -; #X text 757 243 rescale factor; #X obj 671 69 loadbang; #X text 11 179 Any processing would go here ->; #X text 208 407 sets FFT size and overlap; #X obj 225 179 lyonpotpourri/cartopol~; #X obj 225 215 lyonpotpourri/poltocar~; #X obj 225 98 lyonpotpourri/windowvec~; #X obj 225 308 lyonpotpourri/windowvec~; #X connect 0 0 17 0; #X connect 2 0 15 0; #X connect 2 1 15 1; #X connect 4 0 5 0; #X connect 5 0 18 0; #X connect 6 0 9 1; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 8 1 6 0; #X connect 8 2 6 1; #X connect 9 0 10 0; #X connect 10 0 5 1; #X connect 12 0 7 0; #X connect 15 0 16 0; #X connect 15 1 16 1; #X connect 16 0 4 0; #X connect 16 1 4 1; #X connect 17 0 2 0; #X connect 18 0 1 0; #X restore 38 241 pd basic-fft; #X obj 38 214 osc~ 440; #X floatatom 38 191 5 0 0 0 - - -; #X text 136 241 <- look here; #X obj 42 21 lpp-icon cartopol~; #X text 39 135 [cartopol~] converts Pd-style [rfft~] frames to polar form. This help file demonstrates the structure of Max pfft~-style FFT processing for Pd.; #X obj 38 272 lpp-meters; #X text 262 53 - Cartesian to polar conversion; #X connect 0 0 6 0; #X connect 0 0 6 1; #X connect 1 0 0 0; #X connect 2 0 1 0; pd-lyonpotpourri-3.0.1/cartopol~.c000066400000000000000000000032351430526361000172510ustar00rootroot00000000000000#include "MSPd.h" static t_class *cartopol_class; /* Pd version of cartopol~ */ #define OBJECT_NAME "cartopol~" typedef struct _cartopol { t_object x_obj; t_float x_f; } t_cartopol; static void *cartopol_new(t_symbol *msg, int argc, t_atom *argv); //static void cartopol_free(t_cartopol *x); static void cartopol_dsp(t_cartopol *x, t_signal **sp); void cartopol_tilde_setup(void) { cartopol_class = class_new(gensym("cartopol~"), (t_newmethod)cartopol_new, 0, sizeof(t_cartopol),0,A_GIMME,0); CLASS_MAINSIGNALIN(cartopol_class, t_cartopol, x_f); class_addmethod(cartopol_class, (t_method)cartopol_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *cartopol_new(t_symbol *msg, int argc, t_atom *argv) { t_cartopol *x = (t_cartopol *)pd_new(cartopol_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); return x; } t_int *cartopol_perform(t_int *w) { int i; t_float *real_in = (t_float *) w[2]; t_float *imag_in = (t_float *) w[3]; t_float *mag_out = (t_float *) w[4]; t_float *phase_out = (t_float *) w[5]; t_float imag, real; int n = (int) w[6]; // obj, func, 1 inlet int N2 = n/2; for(i = 0; i < N2 + 1; i++) { real = (i == N2 ? real_in[1] : real_in[i]); imag = (i == 0 || i == N2 ? 0.0 : imag_in[i]); mag_out[i] = hypot(real,imag); phase_out[i] = -atan2(imag,real); } return (w + 7); } void cartopol_dsp(t_cartopol *x, t_signal **sp) { dsp_add(cartopol_perform,6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/chameleon_pd.h000066400000000000000000000165411430526361000176570ustar00rootroot00000000000000#include "MSPd.h" #include "ugens_pd.h" /* calling codes for DSP modules */ #define BENDY 0 #define RINGMOD 1 #define FLANGE 2 #define BUTTER 3 #define TRUNCATE 4 #define SWEEPRESON 5 #define COMB 6 #define SLIDECOMB 7 #define REVERB1 8 #define ELLIPSE 9 #define COMPDIST 10 #define FEED1 11 #define BITCRUSH 12 #define FLAM1 13 #define SLIDEFLAM 14 #define RINGMOD4 15 #define COMB4 16 #define RINGFEED 17 #define RESONADSR 18 #define STV 19 ////// #define ROOT2 (1.4142135623730950488) #define PI2 (6.2831853071795862319959) #define LOPASS 0 #define HIPASS 1 #define BANDPASS 2 #define COMBFADE (.04 ) #define MAXFILTER 12 /*must be at least as big as see below */ #define ELLIPSE_FILTER_COUNT 11 /*actual number of filters*/ #define MAX_COEF 48 #define MY_MAX 2147483647.0 /* for rand() */ /* maximum number of each DSP unit possible for each pattern (costs significant MBs of memory) */ // #define MAX_DSP_UNITS 12 #define MAX_SLIDECOMB_DELAY 0.05 #define MAX_SLIDEFLAM_DELAY 0.5 #define MAX_MINI_DELAY 0.25 #define FEEDFUNCLEN 8192 #define TONECOMB_MAX_DELAY 0.02 #define BENDY_MINSEG 0.025 #define BENDY_MAXSEG 0.2 #define BENDY_MAXDEL 0.25 #define FLAM1_MAX_DELAY 2.0 #define STV_MAX_DELAY 0.011 /*data types */ typedef struct _flange_unit { double *flange_dl1; double *flange_dl2; int *dv1; // cmix bookkeeping int *dv2; double phase; } t_flange_unit; typedef struct _butterworth_unit { int ftype; double cutoff; double cf; double bw; double *data1; // two filters double *data2; } t_butterworth_unit; typedef struct _truncate_unit { long counter; long state; long segsamples; } t_truncate_unit; typedef struct _sweepreson_unit { double minfreq; double maxfreq; double bwfac; double speed; double phase; double *q1; // 5 elements double *q2; } t_sweepreson_unit; typedef struct _slidecomb_unit { double *delayline1; double *delayline2; double start_delay; double end_delay; double feedback; long sample_length; long counter; int *dv1; // 2 elements int *dv2; } t_slidecomb_unit; typedef struct _reverb1_unit { double *dels; // allocate 4x double **alpo1; double **alpo2; double xnorm; LSTRUCT *eel1, *eel2; double wet; double dry; double revtime; int nsects; } t_reverb1_unit; typedef struct _ellipseme_unit { LSTRUCT *eel1, *eel2; double xnorm; int nsects; int filtercode; } t_ellipseme_unit; typedef struct _feed1_unit { double *func1; double *func2; double *func3; double *func4; double mindelay; double maxdelay; double speed1; double speed2; double *delayLine1a; double *delayLine2a; double *delayLine1b; double *delayLine2b; int *dv1a, *dv2a; int *dv1b, *dv2b; double funcPhs; double duration; } t_feed1_unit; typedef struct _flam1_unit { double *delayline1; double *delayline2; double dt; long sample_length; long counter; int *dv1; int *dv2; } t_flam1_unit; typedef struct _slideflam_unit { double *delayline1; double *delayline2; double dt1,dt2; double feedback; long sample_length; long counter; int *dv1; int *dv2; } t_slideflam_unit; typedef struct _comb4_unit { double **combs1; double **combs2; double revtime; } t_comb4_unit; typedef struct _resonfeed_unit { double *res1q; double *res2q; double osc1phs; double osc2phs; double osc1si; double osc2si; double *comb1arr; double *comb2arr; } t_resonfeed_unit; typedef struct _resonadsr_unit { double *q1; double *q2; double phs; double si; double bwfac; CMIXADSR *adsr; } t_resonadsr_unit; typedef struct _stv_unit { double osc1phs; double osc2phs; double osc1si; double osc2si; double *delayline1; double *delayline2; int *dv1; int *dv2; double osc1amp; double osc2amp; double fac1; double fac2; } t_stv_unit; typedef struct _bendy_unit { double val1; double val2; long counter; long segment_samples; double min_delay; double max_delay; double min_speed; double max_speed; double *delayline1; double *delayline2; int *dv1; int *dv2; } t_bendy_unit; typedef struct _slot { long pcount; double *params; } t_slot; typedef struct _chameleon { t_object x_obj; float x_f; float sr; // sampling rate long vs;//Max/MSP vector size long vecsize; // Max signal vector size long pcount; // number of parameters double *params; // parameter list double fadeout; // fadeout time in sample frames (if truncation) t_double *chan1buf; // work vector buffer inside of perform routine t_double *chan2buf; // work vector buffer inside of perform routine float *odds;// odds for each process happening int max_process_per_note;//what it says int min_process_per_note;//ditto int new_slot;//position for newest note double new_gain;//recently assigned gain short verbose;//toggle Max window error reporting void *listo; t_atom *data; // data array to send to list outlet char sound_name[256]; double *distortion_function; int distortion_length; int set_parameters_flag; int recall_parameters_flag; t_slot *slots; long recall_slot; // slot to be recalled long stored_slot_count; // number of presets currently stored /* stuff for chameleon DSP */ double *sinewave; int sinelen; short mute; double maxdelay; double **comb_delay_pool1; double **comb_delay_pool2; double *delayline1; // delay lines for comber double *delayline2; double *ringmod_phases; // store phase of ringmod units double *ringmod4_phases; // store phase of ringmod4 units long max_dsp_units; // set once on initialization to determine maximum number of per-process units long membytes; // store the additional memory allocated for the current object t_flange_unit *flange_units; // all DSP elements for flanging t_butterworth_unit *butterworth_units;// all DSP elements for butterworth filters t_truncate_unit *truncate_units;// all DSP elements for truncate t_sweepreson_unit *sweepreson_units; t_slidecomb_unit *slidecomb_units; t_reverb1_unit *reverb1_units; t_ellipseme_unit *ellipseme_units; t_feed1_unit *feed1_units; t_flam1_unit *flam1_units; t_comb4_unit *comb4_units; t_resonfeed_unit *resonfeed_units; t_resonadsr_unit *resonadsr_units; t_stv_unit *stv_units; t_bendy_unit *bendy_units; t_slideflam_unit *slideflam_units; int *flange_dv1; // CMIX bookkeeping int *flange_dv2; double flange_phase; // maintain phase for flange oscillator double max_flangedelay; // constant to allocate memory for flange DDLs LSTRUCT *eel; // for ellipse processor double *mini_delay[4]; // small delay lines for allpass filter double max_mini_delay ; double *transfer_function; int tf_len; // length of transfer function double *feedfunc1; double *feedfunc2; double *feedfunc3; double *feedfunc4; int feedfunclen; int flamfunc1len; double *flamfunc1; CMIXADSR *adsr; double max_comb_lpt; double *reverb_ellipse_data; double **ellipse_data; double *dcflt; CMIXOSC oscar; CMIXRESON resies[2]; double *ratios; // = {9.0/8.0,4.0/3.0, 5.0/4.0, 6.0/5.0, 1.5}; double *bitcrush_factors; } t_chameleon; pd-lyonpotpourri-3.0.1/chameleon~-help.pd000066400000000000000000000133641430526361000204740ustar00rootroot00000000000000#N canvas 490 23 554 761 12; #X obj 118 309 lyonpotpourri/sfplay~; #X obj 43 481 clip~ -1 1; #X obj 200 481 clip~ -1 1; #X msg 43 226 set_parameters; #X obj 43 508 lyonpotpourri/killdc~; #X obj 200 508 lyonpotpourri/killdc~; #X obj 72 272 r chameleon-msgs; #X obj 43 422 lyonpotpourri/chameleon~ 5; #X obj 43 541 lpp-meters; #X obj 222 449 s chameleon_list_output; #N canvas 472 87 702 552 parameters 0; #X msg 29 52 memory; #X obj 29 322 s chameleon-msgs; #X obj 75 163 loadbang; #X obj 75 192 t b b; #X text 26 32 print memory usage of current object; #X text 166 206 set minimum and maximum number of DSP units in a preset ; #X text 119 56 Tweak the parameters of the currently recalled preset. (Presets have to be saved and recalled before they can be tweaked. Parameter is the maximum percentage of deviation. 1 would give you a lot of tweakage \, 0 would do nothing.; #X msg 51 113 tweak_parameters 0.25; #X msg 212 241 maximum_process 5; #X msg 75 242 minimum_process 2; #X connect 0 0 1 0; #X connect 2 0 3 0; #X connect 3 0 9 0; #X connect 3 1 8 0; #X connect 7 0 1 0; #X connect 8 0 1 0; #X connect 9 0 1 0; #X restore 214 650 pd parameters; #X text 151 226 build a new preset; #X obj 118 370 *~ 0.2; #N canvas 600 60 952 1035 presets 0; #X obj 43 292 s chameleon-msgs; #X msg 83 429 report; #X msg 518 353 recall \$1; #X obj 518 329 hradio 15 1 0 12 empty \$0-chameleon-recall empty 0 -8 0 10 -262144 -1 -1 1; #X obj 518 383 s chameleon-msgs; #X msg 43 93 loadslot 0 16 5 0 259.629 2963.46 0.0209678 0.4213 0.112665 2 375.919 1439.92 1.84536 0.150092 0 9 0 6 \, loadslot 1 18 18 0 0.0626298 0.0230214 0.169591 2483.16 1258.91 3634.72 1632.05 0.590078 1.00359 0 0 0.143127 0.202857 12 0 5.49939 \, loadslot 3 7 12 0 6.05593 6 0.292207 0.570513 0 \, loadslot 4 8 8 0 0.692802 0.790209 0.075524 0.0816523 0.0995016 0.0842145 \, loadslot 5 10 7 0 0.0152374 0.0460467 0.910523 1 6 0.143513 0.910296 0 \, loadslot 6 10 16 0 169.581 0.00589688 0.00524167 0.00436806 0.00349444 12 0 4.21324 \, loadslot 7 20 8 0 0.904818 0.436313 0.0736592 0.088248 0.016765 0.037959 8 1 0.853694 0.540883 0.00684244 0.0416407 0.061529 0.053036 13 0 1 0.180581; #X obj 601 223 s chameleon-msgs; #X obj 80 626 list prepend set; #X obj 80 650 list trim; #X msg 80 675; #X obj 80 597 r chameleon_list_output; #X obj 601 97 hradio 15 1 0 12 empty empty empty 0 -8 0 10 -262144 -1 -1 1; #X msg 601 177 store \$1; #X floatatom 601 125 5 0 0 0 - - -; #X obj 566 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 43 64 load a set of previously stored presets; #X obj 83 455 s chameleon-msgs; #X obj 677 166 pipe 50; #X obj 677 194 s \$0-chameleon-recall; #X text 512 69 store presets(up to a maximum of 1024 presets); #X text 139 427 print all stored preset to right outlet; #X text 76 569 receive presets from the [chameleon~] object; #X obj 525 509 s chameleon-msgs; #X msg 525 471 clear_presets; #X text 522 446 clear all presets from memory; #X text 515 292 recall stored presets (several presets are loaded into this help file at startup); #X connect 1 0 16 0; #X connect 2 0 4 0; #X connect 3 0 2 0; #X connect 5 0 0 0; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 10 0 7 0; #X connect 11 0 13 0; #X connect 12 0 6 0; #X connect 13 0 12 0; #X connect 13 0 14 0; #X connect 13 0 17 0; #X connect 17 0 18 0; #X connect 23 0 22 0; #X restore 214 676 pd presets; #X text 172 370 give chameleon~ some headroom; #X text 239 415 arg: maximum number of available DSP units for each processor class, f 34; #N canvas 346 210 574 535 init 0; #X obj 45 43 loadbang; #X obj 45 431 s chameleon-msgs; #X msg 45 82 loadslot 0 16 5 0 259.629 2963.46 0.0209678 0.4213 0.112665 2 375.919 1439.92 1.84536 0.150092 0 9 0 6 \, loadslot 1 18 18 0 0.0626298 0.0230214 0.169591 2483.16 1258.91 3634.72 1632.05 0.590078 1.00359 0 0 0.143127 0.202857 12 0 5.49939 \, loadslot 2 41 2 119.001 2018.89 1.83557 0.53865 0 17 0 1207.45 395.569 314.106 526.047 0.00103215 0.649252 17 1 758.24 108.013 1409.56 1402.07 0.000904088 0.496969 2 115.973 1844.27 1.50614 0.421446 1 16 0 281.26 0.00355543 0.00296286 0.00237029 0.00197524 7 0 0.0354027 0.0266411 0.915858 0 \, loadslot 3 7 12 0 6.05593 6 0.292207 0.570513 0 \, loadslot 4 13 19 0 0.422654 0.143101 0.0082256 8 0 0.405741 0.325825 0.0598449 0.0936056 0.0751705 0.031125 \, loadslot 5 10 7 0 0.0152374 0.0460467 0.910523 1 6 0.143513 0.910296 0 \, loadslot 6 10 16 0 169.581 0.00589688 0.00524167 0.00436806 0.00349444 12 0 4.21324 \, loadslot 7 20 8 0 0.904818 0.436313 0.0736592 0.088248 0.016765 0.037959 8 1 0.853694 0.540883 0.00684244 0.0416407 0.061529 0.053036 13 0 1 0.180581 \, loadslot 8 27 1 1292.57 0 4 0 4 1 17 0 1065.53 101.401 756.868 1464.26 0.0068224 0.309282 2 229.745 3572.17 0.323868 0.343158 0 14 0 0.0395813 0.218369 0.742894 3 \, loadslot 9 17 6 0.0821833 0.590456 0 5 0 142.096 3519.37 0.0590339 0.902002 0.191758 14 0 0.0131103 0.427776 0.840846 3 \, loadslot 10 14 6 0.0887328 0.955496 0 0 0 0.105169 0.160305 14 0 0.0339135 0.420492 0.704503 0 \, loadslot 11 11 14 0 0.0146311 0.422262 0.80129 1 19 0 0.224832 0.346194 0.0088003; #X connect 0 0 2 0; #X connect 2 0 1 0; #X restore 214 622 pd init; #X text 262 48 - Oracular sound processor; #X obj 33 17 lpp-icon chameleon~; #X text 29 112 [chameleon~] is an oracular sound processor. It randomly assembles DSP processing from an internal bank of DSP units. This is a good processor to try when you're not sure what you want - it may surprise you. [chameleon~] can generate a wide range of amplitudes and frequencies irrespective of its input \, so we protect the output here with both a [clip~] and a [killdc~] object.; #X connect 0 0 12 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 7 0; #X connect 4 0 8 0; #X connect 5 0 8 1; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 7 1 2 0; #X connect 7 2 9 0; #X connect 12 0 7 0; #X connect 12 0 7 1; pd-lyonpotpourri-3.0.1/chameleon~.c000066400000000000000000004712201430526361000173640ustar00rootroot00000000000000#import "MSPd.h" #include "chameleon_pd.h" #include "stdlib.h" /* Pure Data version of chameleon */ /* maximum number of parameters for each pattern */ #define MAX_PARAMETERS 1024 /* maximum number of patterns that a chameleon~ can store */ #define MAX_SLOTS 512 /* number of currently coded DSP processes */ #define PROCESS_COUNT 20 /* turn on for debug print messages*/ #define DEBUG_CHAMELEON (0) #define OBJECT_NAME "chameleon~" static t_class *chameleon_class; static void *chameleon_new(t_symbol *msg, short argc, t_atom *argv); t_int *chameleon_perform_hosed(t_int *w); //static void chameleon_dsp(t_chameleon *x, t_signal **sp, short *count); static void chameleon_dsp(t_chameleon *x, t_signal **sp); static void chameleon_assist (t_chameleon *x, void *b, long msg, long arg, char *dst); static void chameleon_dsp_free(t_chameleon *x); static void chameleon_set_parameters(t_chameleon *x); static t_int *chameleon_perform(t_int *w); static void chameleon_copy_to_MSP_buffer(t_chameleon *x, int slot); static void chameleon_clear_presets(t_chameleon *x); /*user messages*/ static void chameleon_info(t_chameleon *x); static void chameleon_dblclick(t_chameleon *x); static void chameleon_mute(t_chameleon *x, t_floatarg t); static void chameleon_maximum_process(t_chameleon *x, t_floatarg n); static void chameleon_minimum_process(t_chameleon *x, t_floatarg n); static void chameleon_setbuf(t_chameleon *x, t_symbol *wavename); static void attach_buffer(t_chameleon *x); static void chameleon_flatodds(t_chameleon *x); static void chameleon_randodds(t_chameleon *x); static void chameleon_killproc(t_chameleon *x, t_floatarg p); static void chameleon_soloproc(t_chameleon *x, t_floatarg p); static void chameleon_verbose(t_chameleon *x, t_floatarg t); static void chameleon_block_dsp(t_chameleon *x, t_floatarg t); static void chameleon_gozero(t_chameleon *x); static void chameleon_grab(t_chameleon *x); static void chameleon_setodds(t_chameleon *x,t_symbol *msg, short argc, t_atom *argv); static void chameleon_tcycle(t_chameleon *x,t_symbol *msg, short argc, t_atom *argv); static void chameleon_version(t_chameleon *x); static void chameleon_dsp64(t_chameleon *x, t_object *dsp64, short *count, double samplerate, long maxvectorsize, long flags); static void chameleon_store(t_chameleon *x, t_floatarg t); static void chameleon_recall(t_chameleon *x, t_floatarg t); static void chameleon_recall_parameters_exec(t_chameleon *x); static void chameleon_loadslot(t_chameleon *x,t_symbol *msg, short argc, t_atom *argv); static void chameleon_memory(t_chameleon *x); ; /* CMIX function code */ static void killdc( double *inbuf, int in_frames, int channels, t_chameleon *x); static void ringmod(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void ringmod4(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void retrograde(t_chameleon *x, int slot, int *pcount); static void comber(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void flange(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void butterme(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void sweepreson(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void truncateme(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void slidecomb(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void reverb1(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void ellipseme(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void feed1me(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void flam1(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void flam2(t_chameleon *x, int slot, int *pcount); static void comb4(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void ringfeed(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void resonchameleon(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void stv(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void compdist(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void bendy(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void slideflam(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void bitcrush(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void chameleon_set_parameters_exec(t_chameleon *x); static void chameleon_print_parameters(t_chameleon *x); static void chameleon_report(t_chameleon *x); /* static void chameleon_perform64(t_chameleon *x, t_object *dsp64, double **ins, long numins, double **outs,long numouts, long vectorsize, long flags, void *userparam); */ static t_int *chameleon_perform(t_int *w); static void chameleon_tweak_parameters(t_chameleon *x, t_floatarg t); static void clip(double *x, double min, double max); /* Chameleon DSP utility prototypes - moved to local file here */ /*function prototypes*/ static void putsine (double *arr, long len); static float boundrand(float min, float max); static void mycombset(double loopt,double rvt,int init,double *a,double srate); static double mycomb(double samp,double *a); static void setweights(float *a, int len); static void delset2(double *a,int *l,double xmax, double srate); static void delset3(double *a,int *l,double xmax,double srate, double alloc_max); static void delput2(double x,double *a,int *l); static double dliget2(double *a,double dwait,int *l,double srate); static void lobut(double *a, double cutoff,double SR); static void hibut(double *a, double cutoff, double SR); static void bpbut(double *a, double formant, double bandwidth, double SR); static void butter_filter(double *buf, double *a, long frames); void rsnset2(double cf,double bw,double scl,double xinit,double *a,double srate); static double reson(double x,double *a); static void resonadsr(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2); static void ellipset(double *list, LSTRUCT *eel, int *nsects, double *xnorm); static double ellipse(double x, LSTRUCT *eel, int nsects, double xnorm); static double allpass(double samp,double *a); static void init_reverb_data(double *a); static void init_ellipse_data(double **a); static void killdc( double *inbuf, int in_frames, int channels, t_chameleon *x); // static void setExpFlamFunc(float *arr, int flen, float v1,float v2,float alpha); static void setflamfunc1(double *arr, int flen); static void funcgen1(double *outArray, int outlen, double duration, double outMin, double outMax, double speed1, double speed2, double gain1, double gain2, double *phs1, double *phs2, double *sine, int sinelen); static void normtab(double *inarr,double *outarr, double min, double max, int len); static double mapp(double insamp,double imin,double imax,double omin,double omax); static double oscil(double amp,double si,double *farray,int len,double *phs); static void set_dcflt(double *a); static void set_distortion_table(double *arr, double cut, double max, int len); static double dlookup(double samp,double *arr,int len); static void do_compdist(double *in,double *out,int sampFrames,int nchans,int channel, double cutoff,double maxmult,int lookupflag,double *table,int range,double bufMaxamp); static double getmaxamp(double *arr, int len); static void buildadsr(CMIXADSR *a); /*chameleon dsp functions */ static void feed1(double *inbuf, double *outbuf, int in_frames, int out_frames,int channels, double *functab1, double *functab2,double *functab3,double *functab4,int funclen, double duration, double maxDelay, t_chameleon *x); static void reverb1me(double *in, double *out, int inFrames, int out_frames, int nchans, int channel, double revtime, double dry, t_chameleon *x); // static void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); /* Main Pure Data code */ void chameleon_tilde_setup(void) { chameleon_class = class_new(gensym("chameleon~"),(t_newmethod)chameleon_new,(t_method)chameleon_dsp_free, sizeof(t_chameleon), 0, A_GIMME,0); CLASS_MAINSIGNALIN(chameleon_class,t_chameleon, x_f); class_addmethod(chameleon_class,(t_method)chameleon_dsp,gensym("dsp"),A_CANT,0); class_addmethod(chameleon_class,(t_method)chameleon_flatodds,gensym("flatodds"), 0); class_addmethod(chameleon_class,(t_method)chameleon_randodds,gensym("randodds"), 0); class_addmethod(chameleon_class,(t_method)chameleon_memory,gensym("memory"), 0); class_addmethod(chameleon_class,(t_method)chameleon_soloproc,gensym("soloproc"), A_FLOAT, 0); class_addmethod(chameleon_class,(t_method)chameleon_killproc,gensym("killproc"), A_FLOAT, 0); class_addmethod(chameleon_class,(t_method)chameleon_store,gensym("store"), A_FLOAT, 0); class_addmethod(chameleon_class,(t_method)chameleon_recall,gensym("recall"), A_FLOAT, 0); class_addmethod(chameleon_class,(t_method)chameleon_setodds,gensym("setodds"), A_GIMME, 0); class_addmethod(chameleon_class,(t_method)chameleon_loadslot,gensym("loadslot"), A_GIMME, 0); class_addmethod(chameleon_class,(t_method)chameleon_set_parameters,gensym("set_parameters"), 0); class_addmethod(chameleon_class,(t_method)chameleon_tweak_parameters,gensym("tweak_parameters"), A_FLOAT, 0); class_addmethod(chameleon_class,(t_method)chameleon_maximum_process,gensym("maximum_process"), A_FLOAT, 0); class_addmethod(chameleon_class,(t_method)chameleon_minimum_process,gensym("minimum_process"), A_FLOAT, 0); class_addmethod(chameleon_class,(t_method)chameleon_print_parameters,gensym("print_parameters"), 0); class_addmethod(chameleon_class,(t_method)chameleon_report,gensym("report"), 0); class_addmethod(chameleon_class,(t_method)chameleon_clear_presets,gensym("clear_presets"), 0); potpourri_announce(OBJECT_NAME); } void chameleon_print_parameters(t_chameleon *x){ int i; post("loadslot 9999 %d",x->pcount); for(i = 0; i < x->pcount; i++){ post("%f",x->params[i]); } } void chameleon_clear_presets(t_chameleon *x){ int i; for(i = 0; i < MAX_SLOTS; i++){ x->slots[i].pcount = 0; } x->stored_slot_count = 0; } void chameleon_report(t_chameleon *x){ t_atom *data = x->data; t_symbol *loadslot = gensym("loadslot"); t_symbol *comma = gensym(","); t_slot *slots = x->slots; // t_atom atom_comma; long stored_slot_count = x->stored_slot_count; long slots_printed = 0; int data_index = 0; int i,j; for(i = 0; i < MAX_SLOTS; i++){ if( slots[i].pcount > 0 ){ SETSYMBOL(data+data_index, loadslot); data_index++; SETFLOAT(data+data_index, (float)i); data_index++; SETFLOAT(data+data_index, (float)slots[i].pcount); data_index++; for(j = 0; j < slots[i].pcount; j++){ SETFLOAT(data+data_index, slots[i].params[j]); data_index++; } if( slots_printed < (stored_slot_count - 1)){ (data+data_index)->a_type = A_COMMA; (data+data_index)->a_w.w_index = 0; data_index++; } slots_printed++; } } outlet_list(x->listo, 0, data_index, data); } void chameleon_maximum_process(t_chameleon *x, t_floatarg n) { if(n < 0){ pd_error(0, "chameleon~: illegal val to maximum_process"); return; } x->max_process_per_note = (int)n; } void chameleon_minimum_process(t_chameleon *x, t_floatarg n) { if(n < 0){ pd_error(0, "chameleon~: illegal val to minimum_process"); return; } x->min_process_per_note = (int)n; } void chameleon_setodds(t_chameleon *x,t_symbol *msg, short argc, t_atom *argv) { int i; if(argc > PROCESS_COUNT){ pd_error(0, "chameleon~: there are only %d processes",PROCESS_COUNT); return; } for(i=0;iodds[i] = 0.0; } for(i=0;iodds[i] = atom_getfloatarg(i,argc,argv); } setweights(x->odds,PROCESS_COUNT); } void chameleon_soloproc(t_chameleon *x, t_floatarg fp) { int i; int p = (int) fp; if(p < 0 || p >= PROCESS_COUNT){ pd_error(0, "chameleon~: bad %d",p); } for(i=0;iodds[i] = 0.0; } x->odds[p] = 1.0; setweights(x->odds,PROCESS_COUNT); } void chameleon_store(t_chameleon *x, t_floatarg fp) { long slotnum = (long) fp; int i; if( (slotnum < 0) || (slotnum >= MAX_SLOTS)){ pd_error(x, "%ld is not a valid slot number", slotnum); return; } // we're good, store the data // post("storing %d pieces of data at slot %d", x->pcount, slotnum); x->slots[slotnum].pcount = x->pcount; for(i = 0; i < x->pcount; i++){ x->slots[slotnum].params[i] = x->params[i]; } x->stored_slot_count += 1; } void chameleon_loadslot(t_chameleon *x,t_symbol *msg, short argc, t_atom *argv) { int i; t_float f_arg; int slot, pcount; atom_arg_getfloat(&f_arg,0,argc, argv); slot = (int) f_arg; atom_arg_getfloat(&f_arg,1,argc, argv); pcount = (int) f_arg; // post("args are pcount: %d and slot: %d", pcount, slot); post("chameleon~: loaded slot %d", slot); if(argc < pcount + 2){ pd_error(x, "wrong number of arguments to loadslot. Should be %d, got %d", pcount, argc); } for(i = 0; i < pcount; i++){ // atom_arg_getfloat( &x->slots[slot].params[i], 2 + i, argc, argv); x->slots[slot].params[i] = atom_getfloatarg(2 + i, argc, argv); // post("data %d: %f", i, x->slots[slot].params[i]); } x->slots[slot].pcount = pcount; x->stored_slot_count += 1; } void chameleon_recall(t_chameleon *x, t_floatarg fp) { long slotnum = (long) fp; if( (slotnum < 0) || (slotnum >= MAX_SLOTS)){ pd_error(x, "%ld is not a valid slot number", slotnum); return; } // post("preparing to recall slot %d", slotnum); x->recall_slot = slotnum; x->recall_parameters_flag = 1; } void chameleon_killproc(t_chameleon *x, t_floatarg fp) { int i; int p = (int) fp; if(p < 0 || p >= PROCESS_COUNT){ pd_error(0, "chameleon~: bad %d",p); } for(i=0;iodds[i] = 1.0; } x->odds[p] = 0.0; setweights(x->odds,PROCESS_COUNT); } void chameleon_flatodds(t_chameleon *x) { int i; for(i=0;iodds[i] = 1.0; } setweights(x->odds,PROCESS_COUNT); } void chameleon_randodds(t_chameleon *x) { int i; for(i=0;iodds[i] = boundrand(0.0,1.0); } setweights(x->odds,PROCESS_COUNT); } void *chameleon_new(t_symbol *msg, short argc, t_atom *argv) { t_chameleon *x = (t_chameleon *)pd_new(chameleon_class); int i,j; t_float aLong; long max_dsp_units; long membytes = 0; srand((unsigned int)time(0)); x->sr = sys_getsr(); x->vs = sys_getblksize(); // post("chameleon init: sr = %f, vs = %d", x->sr, x->vs); if(! x->sr){ x->sr = 48000; } // one additional signal inlet inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); // two signal outlets outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); // create list outlet x->listo = outlet_new(&x->x_obj, gensym("list")); max_dsp_units = 3; // default value if(argc > 0){ atom_arg_getfloat(&aLong, 0, argc, argv); if(aLong > 0){ max_dsp_units = (long)aLong; } } x->max_dsp_units = max_dsp_units; // post("max dsp units: %d", x->max_dsp_units); x->sinelen = 65536; x->verbose = 0; x->stored_slot_count = 0; x->chan1buf = NULL; x->chan2buf = NULL; // OK HERE x->maxdelay = 1.0; // in seconds x->max_flangedelay = 0.1; // in seconds // memory allocation x->data = (t_atom *) getbytes(1024 * sizeof(t_atom)); // need to clean it membytes += 1024 * sizeof(t_atom); x->sinewave = (double *) getbytes( (x->sinelen + 1) * sizeof(double)); membytes += (x->sinelen + 1) * sizeof(double); x->params = (double *) getbytes(MAX_PARAMETERS * sizeof(double)); membytes += MAX_PARAMETERS * sizeof(double); x->odds = (float *) getbytes(64 * sizeof(float)); x->distortion_length = 32768; x->distortion_function = (double *) getbytes(x->distortion_length * sizeof(double)); membytes += x->distortion_length * sizeof(double); set_distortion_table(x->distortion_function, 0.1, 0.5, x->distortion_length); putsine(x->sinewave, x->sinelen); x->comb_delay_pool1 = (double **) getbytes(max_dsp_units * sizeof(double *)); x->comb_delay_pool2 = (double **) getbytes(max_dsp_units * sizeof(double *)); membytes += 2 * max_dsp_units * sizeof(double *); // might want to allow for sample rate change by putting this code into a re-init section for(i = 0; i < max_dsp_units; i++){ x->comb_delay_pool1[i] = (double *) getbytes( ((x->maxdelay * x->sr) + 2) * sizeof(double)); x->comb_delay_pool2[i] = (double *) getbytes( ((x->maxdelay * x->sr) + 2) * sizeof(double)); membytes += 2 * ((x->maxdelay * x->sr) + 2) * sizeof(double); } // RINGMOD x->ringmod_phases = (double *) getbytes(max_dsp_units * sizeof(double)); membytes += max_dsp_units * sizeof(double); // RINGMOD4 x->ringmod4_phases = (double *) getbytes(max_dsp_units * sizeof(double)); membytes += max_dsp_units * sizeof(double); // FLANGE x->flange_units = (t_flange_unit *) getbytes(max_dsp_units * sizeof(t_flange_unit)); for(i = 0; i < max_dsp_units; i++){ x->flange_units[i].flange_dl1 = (double *) getbytes(((x->maxdelay * x->sr) + 2) * sizeof(double)); membytes += ((x->maxdelay * x->sr) + 2) * sizeof(double); x->flange_units[i].flange_dl2 = (double *) getbytes(((x->maxdelay * x->sr) + 2) * sizeof(double)); membytes += ((x->maxdelay * x->sr) + 2) * sizeof(double); x->flange_units[i].dv1 = (int *) getbytes(2 * sizeof(int)); x->flange_units[i].dv2 = (int *) getbytes(2 * sizeof(int)); membytes += 4 * sizeof(int); x->flange_units[i].phase = 0.0; delset2(x->flange_units[i].flange_dl1, x->flange_units[i].dv1, x->max_flangedelay,x->sr); delset2(x->flange_units[i].flange_dl2, x->flange_units[i].dv2, x->max_flangedelay,x->sr); } // BUTTERWORTH x->butterworth_units = (t_butterworth_unit *) getbytes(max_dsp_units * sizeof(t_butterworth_unit)); for(i = 0; i < max_dsp_units; i++){ x->butterworth_units[i].data1 = (double *) getbytes(8 * sizeof(double)); x->butterworth_units[i].data2 = (double *) getbytes(8 * sizeof(double)); membytes += 16 * sizeof(double); } // TRUNCATE x->truncate_units = (t_truncate_unit *) getbytes(max_dsp_units * sizeof(t_truncate_unit)); membytes += max_dsp_units * sizeof(t_truncate_unit); // SWEEPRESON x->sweepreson_units = (t_sweepreson_unit *) getbytes(max_dsp_units * sizeof(t_sweepreson_unit)); membytes += max_dsp_units * sizeof(t_sweepreson_unit); for(i = 0; i < max_dsp_units; i++){ x->sweepreson_units[i].q1 = (double *) getbytes(5 * sizeof(double)); x->sweepreson_units[i].q2 = (double *) getbytes(5 * sizeof(double)); membytes += 10 * sizeof(double); } // SLIDECOMB x->slidecomb_units = (t_slidecomb_unit *) getbytes(max_dsp_units * sizeof(t_slidecomb_unit)); membytes += max_dsp_units * sizeof(t_slidecomb_unit); for(i = 0; i < max_dsp_units; i++){ x->slidecomb_units[i].dv1 = (int *) getbytes(2 * sizeof(int)); x->slidecomb_units[i].dv2 = (int *) getbytes(2 * sizeof(int)); membytes += 4 * sizeof(int); x->slidecomb_units[i].delayline1 = (double *) getbytes( (2 + (MAX_SLIDECOMB_DELAY * x->sr)) * sizeof(double)); x->slidecomb_units[i].delayline2 = (double *) getbytes( (2 + (MAX_SLIDECOMB_DELAY * x->sr)) * sizeof(double)); membytes += 2 * (2 + (MAX_SLIDECOMB_DELAY * x->sr)) * sizeof(double); delset2(x->slidecomb_units[i].delayline1, x->slidecomb_units[i].dv1, MAX_SLIDECOMB_DELAY, x->sr); delset2(x->slidecomb_units[i].delayline2, x->slidecomb_units[i].dv2, MAX_SLIDECOMB_DELAY, x->sr); } // REVERB1 x->reverb1_units = (t_reverb1_unit *) getbytes(max_dsp_units * sizeof(t_reverb1_unit)); membytes += max_dsp_units * sizeof(t_reverb1_unit); for(i = 0; i < max_dsp_units; i++){ x->reverb1_units[i].dels = (double *) getbytes(4 * sizeof(double)); x->reverb1_units[i].eel1 = (LSTRUCT *) getbytes(MAXSECTS * sizeof(LSTRUCT)); x->reverb1_units[i].eel2 = (LSTRUCT *) getbytes(MAXSECTS * sizeof(LSTRUCT)); x->reverb1_units[i].alpo1 = (double **) getbytes(4 * sizeof(double *)); membytes += 2 * MAXSECTS * sizeof(LSTRUCT); membytes += 8 * sizeof(double *); for(j = 0; j < 4 ; j++ ){ x->reverb1_units[i].alpo1[j] = (double *) getbytes(((int)(x->sr * MAX_MINI_DELAY) + 1) * sizeof(double)); membytes += ((int)(x->sr * MAX_MINI_DELAY) + 1) * sizeof(double); } x->reverb1_units[i].alpo2 = (double **) getbytes(4 * sizeof(double *)); for(j = 0; j < 4 ; j++ ){ x->reverb1_units[i].alpo2[j] = (double *) getbytes(((int)(x->sr * MAX_MINI_DELAY) + 1) * sizeof(double)); membytes += ((int)(x->sr * MAX_MINI_DELAY) + 1) * sizeof(double); } } x->reverb_ellipse_data = (double *) getbytes(16 * sizeof(double)); membytes += 16 * sizeof(double); // ELLIPSEME x->ellipseme_units = (t_ellipseme_unit *) getbytes(max_dsp_units * sizeof(t_ellipseme_unit)); for(i = 0; i < max_dsp_units; i++){ x->ellipseme_units[i].eel1 = (LSTRUCT *) getbytes(MAXSECTS * sizeof(LSTRUCT)); x->ellipseme_units[i].eel2 = (LSTRUCT *) getbytes(MAXSECTS * sizeof(LSTRUCT)); membytes += 2 * MAXSECTS * sizeof(LSTRUCT); } x->ellipse_data = (double **) getbytes(MAXFILTER * sizeof(double *)); membytes += MAXFILTER * sizeof(double *); for(i=0;iellipse_data[i] = (double *) getbytes(MAX_COEF * sizeof(double)); membytes += MAX_COEF * sizeof(double); } // FEED1 x->feed1_units = (t_feed1_unit *) getbytes(max_dsp_units * sizeof(t_feed1_unit)); membytes += max_dsp_units * sizeof(t_feed1_unit); x->feedfunclen = 8192; for(i = 0; i < max_dsp_units; i++){ x->feed1_units[i].func1 = (double *)getbytes(2 * FEEDFUNCLEN * sizeof(double)); // doubling size, just in case x->feed1_units[i].func2 = (double *)getbytes(2 * FEEDFUNCLEN * sizeof(double)); x->feed1_units[i].func3 = (double *)getbytes(2 * FEEDFUNCLEN * sizeof(double)); x->feed1_units[i].func4 = (double *)getbytes(2 * FEEDFUNCLEN * sizeof(double)); membytes += 8 * FEEDFUNCLEN * sizeof(double); x->feed1_units[i].delayLine1a = (double *) getbytes(((int)(x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); x->feed1_units[i].delayLine2a = (double *) getbytes(((int)(x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); x->feed1_units[i].delayLine1b = (double *) getbytes(((int)(x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); x->feed1_units[i].delayLine2b = (double *) getbytes(((int)(x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); membytes += 4 * ((int)(x->sr * MAX_MINI_DELAY) + 5) * sizeof(double); x->feed1_units[i].dv1a = (int *) getbytes(2 * sizeof(int)); x->feed1_units[i].dv2a = (int *) getbytes(2 * sizeof(int)); x->feed1_units[i].dv1b = (int *) getbytes(2 * sizeof(int)); x->feed1_units[i].dv2b = (int *) getbytes(2 * sizeof(int)); membytes += 8 * sizeof(int); } // BITCRUSH x->bitcrush_factors = (double *) getbytes(max_dsp_units * sizeof(double)); membytes += max_dsp_units * sizeof(double); // FLAM1 x->flam1_units = (t_flam1_unit *) getbytes(max_dsp_units * sizeof(t_flam1_unit)); membytes += max_dsp_units * sizeof(t_flam1_unit); for(i = 0; i < max_dsp_units; i++){ x->flam1_units[i].delayline1 = (double *) getbytes(((int)(x->sr * FLAM1_MAX_DELAY) + 5) * sizeof(double)); x->flam1_units[i].delayline2 = (double *) getbytes(((int)(x->sr * FLAM1_MAX_DELAY) + 5) * sizeof(double)); membytes += 2 * ((int)(x->sr * FLAM1_MAX_DELAY) + 5) * sizeof(double); x->flam1_units[i].dv1 = (int *) getbytes(2 * sizeof(int)); x->flam1_units[i].dv2 = (int *) getbytes(2 * sizeof(int)); membytes += 4 * sizeof(int); } // COMB4 x->comb4_units = (t_comb4_unit *) getbytes(max_dsp_units * sizeof(t_comb4_unit)); membytes += max_dsp_units * sizeof(t_comb4_unit); for(i = 0; i < max_dsp_units; i++){ x->comb4_units[i].combs1 = (double **)getbytes(4 * sizeof(double *)); x->comb4_units[i].combs2 = (double **)getbytes(4 * sizeof(double *)); membytes += 8 * sizeof(double *); for(j = 0; j < 4; j++){ x->comb4_units[i].combs1[j] = (double *)getbytes( (5 + TONECOMB_MAX_DELAY * x->sr) * sizeof(double)); x->comb4_units[i].combs2[j] = (double *)getbytes( (5 + TONECOMB_MAX_DELAY * x->sr) * sizeof(double)); membytes += 2 * (5 + TONECOMB_MAX_DELAY * x->sr) * sizeof(double); } } // RESONFEED x->resonfeed_units = (t_resonfeed_unit *) getbytes(max_dsp_units * sizeof(t_resonfeed_unit)); membytes += max_dsp_units * sizeof(t_resonfeed_unit); for(i = 0; i < max_dsp_units; i++){ x->resonfeed_units[i].res1q = (double *)getbytes(5 * sizeof(double)); x->resonfeed_units[i].res2q = (double *)getbytes(5 * sizeof(double)); membytes += 10 * sizeof(double); x->resonfeed_units[i].comb1arr = (double *)getbytes(TONECOMB_MAX_DELAY * x->sr * sizeof(double)); x->resonfeed_units[i].comb2arr = (double *)getbytes(TONECOMB_MAX_DELAY * x->sr * sizeof(double)); membytes += 2 * TONECOMB_MAX_DELAY * x->sr * sizeof(double); } // RESONADSR x->resonadsr_units = (t_resonadsr_unit *) getbytes(max_dsp_units * sizeof(t_resonadsr_unit)); membytes += max_dsp_units * sizeof(t_resonadsr_unit); for(i = 0; i < max_dsp_units; i++){ x->resonadsr_units[i].q1 = (double *)getbytes(5 * sizeof(double)); x->resonadsr_units[i].q2 = (double *)getbytes(5 * sizeof(double)); membytes += 10 * sizeof(double); x->resonadsr_units[i].adsr = (CMIXADSR *)getbytes(sizeof(CMIXADSR)); membytes += sizeof(CMIXADSR); x->resonadsr_units[i].adsr->func = (double *)getbytes(8192 * sizeof(double)); membytes += 8192 * sizeof(float); x->resonadsr_units[i].adsr->len = 8192; } // STV x->stv_units = (t_stv_unit *) getbytes(max_dsp_units * sizeof(t_stv_unit)); membytes += max_dsp_units * sizeof(t_stv_unit); for(i = 0; i < max_dsp_units; i++){ x->stv_units[i].delayline1 = (double *) getbytes(((int)(x->sr * STV_MAX_DELAY) + 5) * sizeof(double)); x->stv_units[i].delayline2 = (double *) getbytes(((int)(x->sr * STV_MAX_DELAY) + 5) * sizeof(double)); membytes += 2 * ((int)(x->sr * STV_MAX_DELAY) + 5) * sizeof(double); x->stv_units[i].dv1 = (int *) getbytes(2 * sizeof(int)); x->stv_units[i].dv2 = (int *) getbytes(2 * sizeof(int)); membytes += 4 * sizeof(int); } // BENDY x->bendy_units = (t_bendy_unit *) getbytes(max_dsp_units * sizeof(t_bendy_unit)); membytes += max_dsp_units * sizeof(t_bendy_unit); for(i = 0; i < max_dsp_units; i++){ x->bendy_units[i].delayline1 = (double *) getbytes(((int)(x->sr * BENDY_MAXDEL) + 5) * sizeof(double)); x->bendy_units[i].delayline2 = (double *) getbytes(((int)(x->sr * BENDY_MAXDEL) + 5) * sizeof(double)); membytes += 2 * ((int)(x->sr * BENDY_MAXDEL) + 5) * sizeof(double); x->bendy_units[i].dv1 = (int *) getbytes(8 * sizeof(int)); x->bendy_units[i].dv2 = (int *) getbytes(8 * sizeof(int)); membytes += 4 * sizeof(int); x->bendy_units[i].val1 = boundrand(0.01, BENDY_MAXDEL); x->bendy_units[i].val2 = boundrand(0.01, BENDY_MAXDEL); x->bendy_units[i].counter = 0; } // SLIDEFLAM x->slideflam_units = (t_slideflam_unit *) getbytes(max_dsp_units * sizeof(t_slideflam_unit)); membytes += max_dsp_units * sizeof(t_slideflam_unit); for(i = 0; i < max_dsp_units; i++){ x->slideflam_units[i].dv1 = (int *) getbytes(2 * sizeof(int)); x->slideflam_units[i].dv2 = (int *) getbytes(2 * sizeof(int)); membytes += 4 * sizeof(int); x->slideflam_units[i].delayline1 = (double *) getbytes( (10 + (MAX_SLIDEFLAM_DELAY * x->sr)) * sizeof(double)); x->slideflam_units[i].delayline2 = (double *) getbytes( (10 + (MAX_SLIDEFLAM_DELAY * x->sr)) * sizeof(double)); membytes += 2 * (10 + (MAX_SLIDEFLAM_DELAY * x->sr)) * sizeof(double); delset2(x->slideflam_units[i].delayline1, x->slideflam_units[i].dv1, MAX_SLIDEFLAM_DELAY, x->sr); delset2(x->slideflam_units[i].delayline2, x->slideflam_units[i].dv2, MAX_SLIDEFLAM_DELAY, x->sr); } x->tf_len = 1; x->tf_len <<= 16; setflamfunc1(x->flamfunc1,x->flamfunc1len); x->max_comb_lpt = 0.15 ;// watch out here x->adsr = (CMIXADSR *) getbytes(1 * sizeof(CMIXADSR)); membytes += sizeof(CMIXADSR); x->adsr->len = 32768; x->adsr->func = (double *) getbytes(x->adsr->len * sizeof(double)); membytes += x->adsr->len * sizeof(double); x->dcflt = (double *) getbytes(16 * sizeof(double)); membytes += 16 * sizeof(double); // allocate memory to store random patterns x->slots = (t_slot *) getbytes( MAX_SLOTS * sizeof(t_slot) ); membytes += MAX_SLOTS * sizeof(t_slot); for(i = 0; i < MAX_SLOTS; i++){ x->slots[i].params = (double *) getbytes( MAX_PARAMETERS * sizeof(double)); membytes += MAX_PARAMETERS * sizeof(double); } /* be sure to finish clearing memory */ set_dcflt(x->dcflt); // WE NEED THIS FILTER! init_reverb_data(x->reverb_ellipse_data); init_ellipse_data(x->ellipse_data); for(i=0;iodds[i] = 1; } x->min_process_per_note = 1; x->max_process_per_note = 1; setweights(x->odds,PROCESS_COUNT); x->ratios = (double *) getbytes(5 * sizeof(double)); membytes += 5 * sizeof(double); x->ratios[0] = 9.0/8.0; x->ratios[1] = 4.0/3.0; x->ratios[2] = 5.0/4.0; x->ratios[3] = 6.0/5.0; x->ratios[4] = 3.0/2.0; x->membytes = membytes; chameleon_set_parameters(x); return x; } void chameleon_memory(t_chameleon *x) { post("Memory allocation for this instance of chameleon~ is %.2f MBytes",(float)x->membytes/1000000.0); } void chameleon_dsp_free(t_chameleon *x) { int i,j; long max_dsp_units = x->max_dsp_units; freebytes(x->data,1024 * sizeof(t_atom)); freebytes(x->sinewave,(x->sinelen + 1) * sizeof(double)); freebytes(x->params,MAX_PARAMETERS * sizeof(double)); freebytes(x->odds,64 * sizeof(float)); // free combs for(i= 0; i < max_dsp_units; i++){ freebytes( x->comb_delay_pool1[i],((x->maxdelay * x->sr) + 2) * sizeof(double)); freebytes( x->comb_delay_pool2[i],((x->maxdelay * x->sr) + 2) * sizeof(double)); } freebytes(x->comb_delay_pool1,max_dsp_units * sizeof(double *)); freebytes(x->comb_delay_pool2,max_dsp_units * sizeof(double *)); freebytes(x->eel, MAXSECTS * sizeof(LSTRUCT)); // free ringmod freebytes(x->ringmod_phases, max_dsp_units * sizeof(double)); // free ringmod4 freebytes(x->ringmod4_phases, max_dsp_units * sizeof(double)); // free flange for(i = 0; i < max_dsp_units; i++){ freebytes(x->flange_units[i].flange_dl1,((x->maxdelay * x->sr) + 2) * sizeof(double)); freebytes(x->flange_units[i].flange_dl2,((x->maxdelay * x->sr) + 2) * sizeof(double)); freebytes(x->flange_units[i].dv1, 2 * sizeof(int)); freebytes(x->flange_units[i].dv2, 2 * sizeof(int)); } freebytes(x->flange_units, max_dsp_units * sizeof(t_flange_unit)); // free butterworth for(i = 0; i < max_dsp_units; i++){ freebytes(x->butterworth_units[i].data1, 8 * sizeof(double)); freebytes(x->butterworth_units[i].data2, 8 * sizeof(double)); } freebytes(x->butterworth_units,max_dsp_units * sizeof(t_butterworth_unit)); // free truncate freebytes(x->truncate_units,max_dsp_units * sizeof(t_truncate_unit)); // free sweepreson for(i = 0; i < max_dsp_units; i++){ freebytes( x->sweepreson_units[i].q1,5 * sizeof(double)); freebytes( x->sweepreson_units[i].q2,5 * sizeof(double)); } freebytes(x->sweepreson_units,max_dsp_units * sizeof(t_sweepreson_unit)); // free ellipse freebytes(x->reverb_ellipse_data,16 * sizeof(double)); for(i=0;iellipse_data[i],MAX_COEF * sizeof(double)); } freebytes(x->ellipse_data, MAXFILTER * sizeof(double *)); // free bendy for(i = 0; i < max_dsp_units; i++){ freebytes(x->bendy_units[i].delayline1, ((int)(x->sr * BENDY_MAXDEL) + 5) * sizeof(double)); freebytes(x->bendy_units[i].delayline2, ((int)(x->sr * BENDY_MAXDEL) + 5) * sizeof(double)); freebytes(x->bendy_units[i].dv1,8 * sizeof(int)); freebytes(x->bendy_units[i].dv2,8 * sizeof(int)); } freebytes(x->bendy_units,max_dsp_units * sizeof(t_bendy_unit)); // free slidecomb for(i = 0; i < max_dsp_units; i++){ freebytes(x->slidecomb_units[i].delayline1,(2 + (MAX_SLIDECOMB_DELAY * x->sr)) * sizeof(double)); freebytes(x->slidecomb_units[i].delayline2,(2 + (MAX_SLIDECOMB_DELAY * x->sr)) * sizeof(double)); freebytes(x->slidecomb_units[i].dv1,2 * sizeof(int)); freebytes(x->slidecomb_units[i].dv2,2 * sizeof(int)); } freebytes(x->slidecomb_units, max_dsp_units * sizeof(t_slidecomb_unit)); // free reverb for(i = 0; i < max_dsp_units; i++){ for(j = 0; j < 4 ; j++ ){ freebytes(x->reverb1_units[i].alpo1[j], ((int)(x->sr * MAX_MINI_DELAY) + 1) * sizeof(double)); } freebytes(x->reverb1_units[i].alpo1,4 * sizeof(double *)); for(j = 0; j < 4 ; j++ ){ freebytes(x->reverb1_units[i].alpo2[j],((int)(x->sr * MAX_MINI_DELAY) + 1) * sizeof(double)); } freebytes(x->reverb1_units[i].alpo2,4 * sizeof(double *)); freebytes(x->reverb1_units[i].dels,4 * sizeof(double)); freebytes(x->reverb1_units[i].eel1,MAXSECTS * sizeof(LSTRUCT)); freebytes(x->reverb1_units[i].eel2,MAXSECTS * sizeof(LSTRUCT)); } /* ANOMALY - this free statement is a crasher: freebytes(x->reverb_ellipse_data,16 * sizeof(double)); */ freebytes(x->reverb1_units,max_dsp_units * sizeof(t_reverb1_unit)); // free feed1 for(i = 0; i < max_dsp_units; i++){ freebytes(x->feed1_units[i].func1,2 * FEEDFUNCLEN * sizeof(double)); freebytes(x->feed1_units[i].func2,2 * FEEDFUNCLEN * sizeof(double)); freebytes(x->feed1_units[i].func3,2 * FEEDFUNCLEN * sizeof(double)); freebytes(x->feed1_units[i].func4,2 * FEEDFUNCLEN * sizeof(double)); freebytes(x->feed1_units[i].delayLine1a,(int)((x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); freebytes(x->feed1_units[i].delayLine2a,(int)((x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); freebytes(x->feed1_units[i].delayLine1b,(int)((x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); freebytes(x->feed1_units[i].delayLine2b,(int)((x->sr * MAX_MINI_DELAY) + 5) * sizeof(double)); freebytes(x->feed1_units[i].dv1a,2 * sizeof(int)); freebytes(x->feed1_units[i].dv2a,2 * sizeof(int)); freebytes(x->feed1_units[i].dv1b,2 * sizeof(int)); freebytes(x->feed1_units[i].dv2b,2 * sizeof(int)); } freebytes(x->feed1_units,max_dsp_units * sizeof(t_feed1_unit)); // free bitcrush freebytes(x->bitcrush_factors,max_dsp_units * sizeof(double)); // free flam1 for(i = 0; i < max_dsp_units; i++){ freebytes(x->flam1_units[i].delayline1,((int)(x->sr * FLAM1_MAX_DELAY) + 5) * sizeof(double)); freebytes(x->flam1_units[i].delayline2,((int)(x->sr * FLAM1_MAX_DELAY) + 5) * sizeof(double)); freebytes(x->flam1_units[i].dv1, 2 * sizeof(int)); freebytes(x->flam1_units[i].dv2, 2 * sizeof(int)); } freebytes(x->flam1_units,max_dsp_units * sizeof(t_flam1_unit)); // free comb4 for(i = 0; i < max_dsp_units; i++){ for(j = 0; j < 4; j++){ freebytes(x->comb4_units[i].combs1[j],(5 + TONECOMB_MAX_DELAY * x->sr) * sizeof(double) ); freebytes(x->comb4_units[i].combs2[j],(5 + TONECOMB_MAX_DELAY * x->sr) * sizeof(double)); } freebytes(x->comb4_units[i].combs1,4 * sizeof(double *)); freebytes(x->comb4_units[i].combs2,4 * sizeof(double *)); } freebytes(x->comb4_units, max_dsp_units * sizeof(t_comb4_unit)); // free resonfeed for(i = 0; i < max_dsp_units; i++){ freebytes(x->resonfeed_units[i].res1q,5 * sizeof(double)); freebytes(x->resonfeed_units[i].res2q,5 * sizeof(double)); freebytes(x->resonfeed_units[i].comb1arr,TONECOMB_MAX_DELAY * x->sr * sizeof(double)); freebytes(x->resonfeed_units[i].comb2arr,TONECOMB_MAX_DELAY * x->sr * sizeof(double)); } freebytes(x->resonfeed_units,max_dsp_units * sizeof(t_resonfeed_unit)); // free resonadsr for(i = 0; i < max_dsp_units; i++){ freebytes(x->resonadsr_units[i].q1,5 * sizeof(double)); freebytes(x->resonadsr_units[i].q2,5 * sizeof(double)); freebytes(x->resonadsr_units[i].adsr,sizeof(CMIXADSR)); freebytes(x->resonadsr_units[i].adsr->func,8192 * sizeof(double)); } freebytes(x->resonadsr_units,max_dsp_units * sizeof(t_resonadsr_unit)); // free stv for(i = 0; i < max_dsp_units; i++){ freebytes(x->stv_units[i].delayline1,((int)(x->sr * STV_MAX_DELAY) + 5) * sizeof(double)); freebytes(x->stv_units[i].delayline2,((int)(x->sr * STV_MAX_DELAY) + 5) * sizeof(double)); freebytes(x->stv_units[i].dv1,2 * sizeof(int)); freebytes(x->stv_units[i].dv2,2 * sizeof(int)); } freebytes(x->stv_units,max_dsp_units * sizeof(t_stv_unit)); // free slideflam for(i = 0; i < max_dsp_units; i++){ freebytes(x->slideflam_units[i].delayline1,(10 + (MAX_SLIDEFLAM_DELAY * x->sr)) * sizeof(double)); freebytes(x->slideflam_units[i].delayline2,(10 + (MAX_SLIDEFLAM_DELAY * x->sr)) * sizeof(double)); freebytes(x->slideflam_units[i].dv1,2 * sizeof(int)); freebytes(x->slideflam_units[i].dv2,2 * sizeof(int)); } freebytes(x->slideflam_units,max_dsp_units * sizeof(t_slideflam_unit)); // free a few other misc items freebytes( x->adsr,sizeof(CMIXADSR)); freebytes(x->adsr->func,x->adsr->len * sizeof(double)); freebytes(x->dcflt,16 * sizeof(double)); // free slot memory for(i = 0; i < MAX_SLOTS; i++){ freebytes(x->slots[i].params, MAX_PARAMETERS * sizeof(double)); } freebytes(x->slots, MAX_SLOTS * sizeof(t_slot)); } /* void chameleon_perform64(t_chameleon *x, t_object *dsp64, double **ins, long numins, double **outs,long numouts, long n, long flags, void *userparam) */ t_int *chameleon_perform(t_int *w) { t_chameleon *x = (t_chameleon *) (w[1]); t_float *OGchan1 = (t_float *) (w[2]); t_float *OGchan2 = (t_float *) (w[3]); t_float *outchanL = (t_float *) (w[4]); t_float *outchanR = (t_float *) (w[5]); int n = (int) w[6]; long i; long pcount; double *params; long curarg; t_double *chan1, *chan2; if( x->set_parameters_flag == 1){ chameleon_set_parameters_exec(x); } else if(x->recall_parameters_flag == 1) { chameleon_recall_parameters_exec(x); } /* NOTE: operating directly on the input vectors resulted in those vectors (dry signal) being replaced by processed signal. We need to copy to local arrays to avoid signal contamination. */ if( x->chan1buf == NULL){ // post("allocated vector inside perform routine"); x->chan1buf = (t_double *) getbytes(sizeof(t_double) * n); x->chan2buf = (t_double *) getbytes(sizeof(t_double) * n); } chan1 = x->chan1buf; chan2 = x->chan2buf; /* Copy input vectors to work vectors (chan1 & chan2). Also, promote single-precision floats from Pure Data to double precision for Chameleon processing. */ for(i = 0; i < n; i++){ chan1[i] = (double)OGchan1[i]; chan2[i] = (double)OGchan2[i]; } pcount = x->pcount; params = x->params; curarg = 0; while(curarg < pcount){ if(params[curarg] == BENDY){ bendy(x, &curarg, chan1, chan2); } else if(params[curarg] == RINGMOD){ ringmod(x, &curarg, chan1, chan2); } else if(params[curarg] == BITCRUSH){ bitcrush(x, &curarg, chan1, chan2); } else if(params[curarg] == COMB){ comber(x, &curarg, chan1, chan2); } else if(params[curarg] == FLANGE){ flange(x, &curarg, chan1, chan2); } else if(params[curarg] == BUTTER){ butterme(x, &curarg, chan1, chan2); } else if(params[curarg] == TRUNCATE){ truncateme(x, &curarg, chan1, chan2); } else if(params[curarg] == SWEEPRESON){ sweepreson(x, &curarg, chan1, chan2); } else if(params[curarg] == SLIDECOMB){ slidecomb(x, &curarg, chan1, chan2); } else if(params[curarg] == REVERB1){ reverb1(x, &curarg, chan1, chan2); } else if(params[curarg] == ELLIPSE){ ellipseme(x, &curarg, chan1, chan2); } else if(params[curarg] == FEED1){ feed1me(x, &curarg, chan1, chan2); } else if(params[curarg] == FLAM1){ flam1(x, &curarg, chan1, chan2); } else if(params[curarg] == SLIDEFLAM){ slideflam(x, &curarg, chan1, chan2); } else if(params[curarg] == RINGMOD4){ ringmod4(x,&curarg,chan1,chan2); } else if(params[curarg] == COMB4){ comb4(x, &curarg, chan1, chan2); } else if(params[curarg] == COMPDIST){ compdist(x, &curarg, chan1, chan2); } else if(params[curarg] == RINGFEED){ ringfeed(x, &curarg, chan1, chan2); } else if(params[curarg] == RESONADSR){ resonadsr(x, &curarg, chan1, chan2); } else if(params[curarg] == STV){ stv(x, &curarg, chan1, chan2); } else { pd_error(0, "chameleon~: programming error - deploy missing branch for %ld", curarg); goto panic; } } // HERE GOES THE OUTPUT. Downgrade Chameleon doubles to Pd single-precision floats for(i = 0; i < n; i++){ outchanL[i] = (float) chan1[i]; outchanR[i] = (float) chan2[i]; } panic: ; return w + 7; } void chameleon_set_parameters(t_chameleon *x){ x->set_parameters_flag = 1; } void clip(double *x, double min, double max){ if(*x < min){ *x = min; } else if (*x > max){ *x = max; } } void chameleon_tweak_parameters(t_chameleon *x, t_floatarg tdev){ int i, j; int ftype; double cf, bw;//, bw; double delay, revtime; double *params = x->params; long pcount = x->pcount; int comb_dl_count = 0; // where in the comb pool to grab memory int flange_count = 0; int truncate_count = 0; int butterworth_count = 0; int sweepreson_count = 0; int slidecomb_count = 0; int reverb1_count = 0; int ellipseme_count = 0; int feed1_count = 0; int flam1_count = 0; int comb4_count = 0; int ringfeed_count = 0; int bendy_count = 0; int ringmod_count = 0; int ringmod4_count = 0; int slideflam_count = 0; int bitcrush_count = 0; int resonadsr_count = 0; int stv_count = 0; double raw_wet; double sr = x->sr; double *dels; double **alpo1, **alpo2; double speed1, speed2, mindelay, maxdelay, duration; double basefreq; double rvt = boundrand(0.1,0.98); double lpt; double notedur, sust; double phz1, phz2, minfeedback = 0.1, maxfeedback = 0.7; long slotnum = x->recall_slot; double *rparams; // parameter set to recall long rpcount; // number of parameters to read long slot_pcount; double multmin, multmax, tmp; tmp = tdev; clip(&tmp, 0.001, 0.5); tdev = tmp; multmin = 1.0 - tdev; multmax = 1.0 + tdev; /* Now iterate through the recall, but with no setting of memory */ slot_pcount = x->slots[slotnum].pcount; if( slot_pcount <= 0){ // post("Aborting reload of slot %d", slotnum); return; } rparams = x->slots[slotnum].params; pcount = 0; rpcount = 0; while( rpcount < slot_pcount ){ j = rparams[rpcount++]; if(j == COMB){ params[pcount++] = COMB; delay = rparams[rpcount++] * boundrand(multmin, multmax); clip(&delay, 0.01, 0.35); params[pcount++] = delay; revtime = rparams[rpcount++] * boundrand(multmin, multmax); clip(&revtime,0.5,0.98); params[pcount++] = revtime; params[pcount++] = comb_dl_count = rparams[rpcount++]; // Possible Bug Here??? mycombset(delay,revtime,0,x->comb_delay_pool1[comb_dl_count],x->sr); mycombset(delay,revtime,0,x->comb_delay_pool2[comb_dl_count],x->sr); } else if(j == RINGMOD) { // post("Added RINGMOD unit"); params[pcount++] = RINGMOD; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 40.0, 3000.0 ); params[pcount++] = tmp; params[pcount++] = ringmod_count = rparams[rpcount++]; } else if(j == RINGMOD4) { // post("Added RINGMOD4 unit"); params[pcount++] = RINGMOD4; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 40.0, 3000.0 ); params[pcount++] = tmp; params[pcount++] = ringmod4_count = rparams[rpcount++]; } else if(j == BENDY){ params[pcount++] = BENDY; params[pcount++] = bendy_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.01, BENDY_MAXDEL); params[pcount++] = x->bendy_units[bendy_count].val1 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.01, BENDY_MAXDEL); params[pcount++] = x->bendy_units[bendy_count].val2 = tmp; // danger here x->bendy_units[bendy_count].counter = 0; delset2(x->bendy_units[bendy_count].delayline1, x->bendy_units[bendy_count].dv1, x->bendy_units[bendy_count].val1,x->sr); delset2(x->bendy_units[bendy_count].delayline2, x->bendy_units[bendy_count].dv2, x->bendy_units[bendy_count].val2,x->sr); } else if(j == FLANGE){ params[pcount++] = FLANGE; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 80.0, 400.0); params[pcount++] = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 600.0, 4000.0); params[pcount++] = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.1, 2.0); params[pcount++] = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.1, 0.95); params[pcount++] = tmp; params[pcount++] = flange_count = rparams[rpcount++]; } else if(j == BUTTER){ /* params[pcount++] = cf = boundrand(70.0,3000.0); params[pcount++] = bw = cf * boundrand(0.05,0.6); */ params[pcount++] = BUTTER; params[pcount++] = ftype = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 70.0, 3000.0); params[pcount++] = cf = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.05, 0.6); params[pcount++] = bw = tmp; params[pcount++] = butterworth_count = rparams[rpcount++]; if( ftype == LOPASS) { lobut(x->butterworth_units[butterworth_count].data1, cf, sr); lobut(x->butterworth_units[butterworth_count].data2, cf, sr); } else if (ftype == HIPASS){ hibut(x->butterworth_units[butterworth_count].data1, cf, sr); hibut(x->butterworth_units[butterworth_count].data2, cf, sr); } else if(ftype == BANDPASS){ bpbut(x->butterworth_units[butterworth_count].data1, cf, bw, sr); bpbut(x->butterworth_units[butterworth_count].data2, cf, bw, sr); x->butterworth_units[butterworth_count].bw = bw; } x->butterworth_units[butterworth_count].cf = cf; x->butterworth_units[butterworth_count].ftype = ftype; } else if(j == TRUNCATE){ // nothing to change here params[pcount++] = TRUNCATE; params[pcount++] = truncate_count = rparams[rpcount++]; /* x->truncate_units[truncate_count].counter = 0; x->truncate_units[truncate_count].state = 0; x->truncate_units[truncate_count].segsamples = 1; */ } else if(j == SWEEPRESON){ params[pcount++] = SWEEPRESON; params[pcount++] = sweepreson_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 100.0, 300.0); params[pcount++] = x->sweepreson_units[sweepreson_count].minfreq = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 600.0, 6000.0); params[pcount++] = x->sweepreson_units[sweepreson_count].maxfreq = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.01, 0.2); params[pcount++] = x->sweepreson_units[sweepreson_count].bwfac = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.05, 2.0); params[pcount++] = x->sweepreson_units[sweepreson_count].speed = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.0, 0.5); params[pcount++] = x->sweepreson_units[sweepreson_count].phase = tmp; x->sweepreson_units[sweepreson_count].q1[3] = 0; x->sweepreson_units[sweepreson_count].q1[4] = 0; x->sweepreson_units[sweepreson_count].q2[3] = 0; x->sweepreson_units[sweepreson_count].q2[4] = 0; } else if(j == SLIDECOMB){ params[pcount++] = SLIDECOMB; params[pcount++] = slidecomb_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.001,MAX_SLIDECOMB_DELAY * 0.95); params[pcount++] = x->slidecomb_units[slidecomb_count].start_delay = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.001,MAX_SLIDECOMB_DELAY * 0.95); params[pcount++] = x->slidecomb_units[slidecomb_count].end_delay = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.7,0.99); params[pcount++] = x->slidecomb_units[slidecomb_count].feedback = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.1,2.0); params[pcount++] = x->slidecomb_units[slidecomb_count].sample_length = tmp; // scale length to SR x->slidecomb_units[slidecomb_count].sample_length *= x->sr; x->slidecomb_units[slidecomb_count].counter = 0; delset2(x->slidecomb_units[slidecomb_count].delayline1,x->slidecomb_units[slidecomb_count].dv1,MAX_SLIDECOMB_DELAY, x->sr); delset2(x->slidecomb_units[slidecomb_count].delayline2,x->slidecomb_units[slidecomb_count].dv2,MAX_SLIDECOMB_DELAY, x->sr); } else if(j == REVERB1){ params[pcount++] = REVERB1; params[pcount++] = reverb1_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.25,0.99); params[pcount++] = revtime = x->reverb1_units[reverb1_count].revtime = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.2,0.8); params[pcount++] = raw_wet = tmp; x->reverb1_units[reverb1_count].wet = sin(1.570796 * raw_wet); x->reverb1_units[reverb1_count].dry = cos(1.570796 * raw_wet); dels = x->reverb1_units[reverb1_count].dels; for(i = 0; i < 4; i++){ tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.005, 0.1); params[pcount++] = dels[i] = tmp; } alpo1 = x->reverb1_units[reverb1_count].alpo1; alpo2 = x->reverb1_units[reverb1_count].alpo2; for( i = 0; i < 4; i++ ){ if(dels[i] < .005 || dels[i] > 0.1) { pd_error((t_object *)x,"reverb1: bad random delay time: %f",dels[i]); dels[i] = .05; } // could be dangerous! mycombset(dels[i], revtime, 0, alpo1[i], x->sr); mycombset(dels[i], revtime, 0, alpo2[i], x->sr); } } else if(j == ELLIPSE){ // nothing to change here params[pcount++] = ELLIPSE; params[pcount++] = ellipseme_count = rparams[rpcount++]; params[pcount++] = x->ellipseme_units[ellipseme_count].filtercode = rparams[rpcount++]; if( x->ellipseme_units[ellipseme_count].filtercode >= ELLIPSE_FILTER_COUNT ){ pd_error(0, "chameleon~: there is no %d ellipse data",x->ellipseme_units[ellipseme_count].filtercode); return; }; } else if(j == FEED1){ params[pcount++] = FEED1; params[pcount++] = feed1_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.001, 0.1); params[pcount++] = mindelay = x->feed1_units[feed1_count].mindelay = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, mindelay, 0.1); params[pcount++] = maxdelay = x->feed1_units[feed1_count].maxdelay = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.01, 0.5); params[pcount++] = speed1 = x->feed1_units[feed1_count].speed1 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, speed1, 0.5); params[pcount++] = speed2 = x->feed1_units[feed1_count].speed2 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.05, 1.0); params[pcount++] = duration = x->feed1_units[feed1_count].duration = tmp; funcgen1(x->feed1_units[feed1_count].func1, FEEDFUNCLEN,duration, mindelay,maxdelay, speed1, speed2, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func2, FEEDFUNCLEN,duration, mindelay * 0.5,maxdelay * 2.0, speed1 * 1.25, speed2 * 0.75, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func3, FEEDFUNCLEN,duration, minfeedback, maxfeedback, speed1*.35, speed2*1.25, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func4, FEEDFUNCLEN,duration, minfeedback, maxfeedback, speed1*.55, speed2*2.25, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); } else if(j == BITCRUSH){ params[pcount++] = BITCRUSH; params[pcount++] = bitcrush_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 2.0, 8.0); params[pcount++] = x->bitcrush_factors[bitcrush_count] = tmp; } else if(j == FLAM1){ params[pcount++] = FLAM1; params[pcount++] = flam1_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); // not yet scaled to SR clip(&tmp, 1.0, 4.0); params[pcount++] = x->flam1_units[flam1_count].sample_length = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.08, 0.2); params[pcount++] = x->flam1_units[flam1_count].dt = tmp; x->flam1_units[flam1_count].counter = 0; // scale to SR x->flam1_units[flam1_count].sample_length *= x->sr; delset2(x->flam1_units[flam1_count].delayline1, x->flam1_units[flam1_count].dv1, MAX_MINI_DELAY, x->sr); delset2(x->flam1_units[flam1_count].delayline2, x->flam1_units[flam1_count].dv2, MAX_MINI_DELAY, x->sr); } else if(j == SLIDEFLAM){ double sf_del1, sf_del2; params[pcount++] = SLIDEFLAM; params[pcount++] = slideflam_count = rparams[rpcount++]; sf_del1 = rparams[rpcount++] * boundrand(multmin, multmax); sf_del2 = rparams[rpcount++] * boundrand(multmin, multmax); if( sf_del2 > sf_del1 ){ clip(&sf_del1, 0.01, 0.05); clip(&sf_del2, 0.1,MAX_SLIDEFLAM_DELAY * 0.95); } else { clip(&sf_del2, 0.01, 0.05); clip(&sf_del1, 0.1,MAX_SLIDEFLAM_DELAY * 0.95); } params[pcount++] = x->slideflam_units[slideflam_count].dt1 = sf_del1; params[pcount++] = x->slideflam_units[slideflam_count].dt2 = sf_del2; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.7, 0.99); params[pcount++] = x->slideflam_units[slideflam_count].feedback = tmp; params[pcount++] = x->slideflam_units[slideflam_count].sample_length = rparams[rpcount++] * boundrand(multmin, multmax); // not yet scaled to SR x->slideflam_units[slideflam_count].counter = 0; // scale to SR x->slideflam_units[slideflam_count].sample_length *= x->sr; delset2(x->slideflam_units[slideflam_count].delayline1,x->slideflam_units[slideflam_count].dv1,MAX_SLIDEFLAM_DELAY, x->sr); delset2(x->slideflam_units[slideflam_count].delayline2,x->slideflam_units[slideflam_count].dv2,MAX_SLIDEFLAM_DELAY, x->sr); } else if(j == COMB4){ params[pcount++] = COMB4; params[pcount++] = comb4_count = rparams[rpcount++]; rvt = 0.99; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 100.0,400.0); params[pcount++] = basefreq = tmp; // post("comb4: count: %d, basefreq: %f",comb4_count, basefreq); for( i = 0; i < 4; i++ ){ tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.0001,0.05); params[pcount++] = lpt = tmp; // dangerous ? mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs1[i], x->sr); mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs2[i], x->sr); } } else if(j == COMPDIST){ /* nothing to change */ params[pcount++] = COMPDIST; } else if(j == RINGFEED){ params[pcount++] = RINGFEED; params[pcount++] = ringfeed_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 90.0, 1500.0); params[pcount++] = cf = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.02 * cf, 0.4 * cf); params[pcount++] = bw = tmp; rsnset2(cf, bw, RESON_NO_SCL, 0., x->resonfeed_units[ringfeed_count].res1q, x->sr); rsnset2(cf, bw, RESON_NO_SCL, 0., x->resonfeed_units[ringfeed_count].res2q, x->sr); x->resonfeed_units[ringfeed_count].osc1phs = 0.0; x->resonfeed_units[ringfeed_count].osc2phs = 0.0; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 90.0, 1500.0); params[pcount++] = x->resonfeed_units[ringfeed_count].osc1si = tmp; // not yet scaled to SR tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 90.0, 1500.0); params[pcount++] = x->resonfeed_units[ringfeed_count].osc2si = tmp; // not yet scaled to SR tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 1.0/1500.0, 1.0/90.0); params[pcount++] = lpt = tmp; tmp = rparams[rpcount++]; clip(&tmp, 0.01, 0.8); params[pcount++] = rvt = tmp; // scale to SR x->resonfeed_units[ringfeed_count].osc1si *= ((double)x->sinelen / x->sr); x->resonfeed_units[ringfeed_count].osc2si *= ((double)x->sinelen / x->sr); // dangerous ? mycombset(lpt, rvt, 0, x->resonfeed_units[ringfeed_count].comb1arr, x->sr); mycombset(lpt, rvt, 0, x->resonfeed_units[ringfeed_count].comb2arr, x->sr); } else if(j == RESONADSR){ params[pcount++] = RESONADSR; params[pcount++] = resonadsr_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.01, 0.1); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->a = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.01, 0.05); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->d = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.05, 0.5); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->r = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 150.0, 4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v1 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 150.0, 4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v2 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 150.0, 4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v3 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 150.0, 4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v4 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.03,0.7); params[pcount++] = x->resonadsr_units[resonadsr_count].bwfac = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); params[pcount++] = notedur = tmp; clip(&tmp, 0.7,1.2); x->resonadsr_units[resonadsr_count].phs = 0.0; sust = notedur - (x->resonadsr_units[resonadsr_count].adsr->a + x->resonadsr_units[resonadsr_count].adsr->d + x->resonadsr_units[resonadsr_count].adsr->r); x->resonadsr_units[resonadsr_count].adsr->s = sust; buildadsr(x->resonadsr_units[resonadsr_count].adsr); x->resonadsr_units[resonadsr_count].si = ((double)x->resonadsr_units[resonadsr_count].adsr->len / x->sr) / notedur; } else if(j == STV){ params[pcount++] = STV; params[pcount++] = stv_count = rparams[rpcount++]; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.025,0.5); params[pcount++] = speed1 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.025,0.5); params[pcount++] = speed2 = tmp; tmp = rparams[rpcount++] * boundrand(multmin, multmax); clip(&tmp, 0.001,0.01); params[pcount++] = maxdelay = tmp; x->stv_units[stv_count].osc1phs = 0.0; x->stv_units[stv_count].osc2phs = 0.0; x->stv_units[stv_count].fac2 = 0.5 * (maxdelay - 0.001); x->stv_units[stv_count].fac1 = 0.001 + x->stv_units[stv_count].fac2; x->stv_units[stv_count].osc1si = ((double)x->sinelen / x->sr) * speed1; x->stv_units[stv_count].osc2si = ((double)x->sinelen / x->sr) * speed2; delset2(x->stv_units[stv_count].delayline1, x->stv_units[stv_count].dv1, maxdelay, x->sr); delset2(x->stv_units[stv_count].delayline2, x->stv_units[stv_count].dv2, maxdelay, x->sr); } else { pd_error(0, "el.chameleon~: could not find a process for %d",j); } } x->pcount = pcount; } void chameleon_recall_parameters_exec(t_chameleon *x) { int i, j; int ftype; double cf, bw;//, bw; double delay, revtime; double *params = x->params; long pcount = x->pcount; int comb_dl_count = 0; // where in the comb pool to grab memory int flange_count = 0; int truncate_count = 0; int butterworth_count = 0; int sweepreson_count = 0; int slidecomb_count = 0; int reverb1_count = 0; int ellipseme_count = 0; int feed1_count = 0; int flam1_count = 0; int comb4_count = 0; int ringfeed_count = 0; int bendy_count = 0; int ringmod_count = 0; int ringmod4_count = 0; int slideflam_count = 0; int bitcrush_count = 0; int resonadsr_count = 0; int stv_count = 0; double raw_wet; double sr = x->sr; double *dels; double **alpo1, **alpo2; double *fltdata; double xnorm; int nsects; LSTRUCT *eel1, *eel2; double speed1, speed2, mindelay, maxdelay, duration; double basefreq; double rvt = boundrand(0.1,0.98); double lpt; double notedur, sust; double phz1, phz2, minfeedback = 0.1, maxfeedback = 0.7; long slotnum = x->recall_slot; double *rparams; // parameter set to recall long rpcount; // number of parameters to read long slot_pcount; if(x->recall_parameters_flag == 1 ){ x->recall_parameters_flag = 0; } else { return; } slot_pcount = x->slots[slotnum].pcount; if( slot_pcount <= 0){ // post("Aborting reload of slot %d", slotnum); return; } rparams = x->slots[slotnum].params; pcount = 0; rpcount = 0; // read the pattern here // post("loading %d parameters", slot_pcount); while( rpcount < slot_pcount ){ j = rparams[rpcount++]; if(j == COMB){ // post("Added COMB unit"); params[pcount++] = COMB; params[pcount++] = delay = rparams[rpcount++]; params[pcount++] = revtime = rparams[rpcount++]; params[pcount++] = comb_dl_count = rparams[rpcount++]; // Possible Bug Here??? mycombset(delay,revtime,0,x->comb_delay_pool1[comb_dl_count],x->sr); mycombset(delay,revtime,0,x->comb_delay_pool2[comb_dl_count],x->sr); } else if(j == RINGMOD) { // post("Added RINGMOD unit"); params[pcount++] = RINGMOD; params[pcount++] = rparams[rpcount++]; //need a log version params[pcount++] = ringmod_count = rparams[rpcount++]; x->ringmod_phases[ringmod_count] = 0.0; } else if(j == RINGMOD4) { // post("Added RINGMOD4 unit"); params[pcount++] = RINGMOD4; params[pcount++] = rparams[rpcount++]; params[pcount++] = ringmod4_count = rparams[rpcount++]; x->ringmod4_phases[ringmod4_count] = 0.0; } else if(j == BENDY){ // post("Added BENDY unit"); params[pcount++] = BENDY; params[pcount++] = bendy_count = rparams[rpcount++]; params[pcount++] = x->bendy_units[bendy_count].val1 = rparams[rpcount++]; params[pcount++] = x->bendy_units[bendy_count].val2 = rparams[rpcount++]; x->bendy_units[bendy_count].counter = 0; delset2(x->bendy_units[bendy_count].delayline1, x->bendy_units[bendy_count].dv1, x->bendy_units[bendy_count].val1,x->sr); delset2(x->bendy_units[bendy_count].delayline2, x->bendy_units[bendy_count].dv2, x->bendy_units[bendy_count].val2,x->sr); } else if(j == FLANGE){ // post("Added FLANGE unit"); params[pcount++] = FLANGE; params[pcount++] = rparams[rpcount++]; params[pcount++] = rparams[rpcount++]; params[pcount++] = rparams[rpcount++]; params[pcount++] = rparams[rpcount++]; params[pcount++] = flange_count = rparams[rpcount++]; x->flange_units[flange_count].phase = boundrand(0.0,0.5) * (double)x->sinelen / x->sr; // maybe should have stored this too } else if(j == BUTTER){ // post("Added BUTTER unit"); params[pcount++] = BUTTER; params[pcount++] = ftype = rparams[rpcount++]; params[pcount++] = cf = rparams[rpcount++]; params[pcount++] = bw = rparams[rpcount++]; params[pcount++] = butterworth_count = rparams[rpcount++]; if( ftype == LOPASS) { lobut(x->butterworth_units[butterworth_count].data1, cf, sr); lobut(x->butterworth_units[butterworth_count].data2, cf, sr); } else if (ftype == HIPASS){ hibut(x->butterworth_units[butterworth_count].data1, cf, sr); hibut(x->butterworth_units[butterworth_count].data2, cf, sr); } else if(ftype == BANDPASS){ bpbut(x->butterworth_units[butterworth_count].data1, cf, bw, sr); bpbut(x->butterworth_units[butterworth_count].data2, cf, bw, sr); x->butterworth_units[butterworth_count].bw = bw; } x->butterworth_units[butterworth_count].cf = cf; x->butterworth_units[butterworth_count].ftype = ftype; } else if(j == TRUNCATE){ //post("Added TRUNCATE unit"); params[pcount++] = TRUNCATE; params[pcount++] = truncate_count = rparams[rpcount++]; x->truncate_units[truncate_count].counter = 0; x->truncate_units[truncate_count].state = 0; x->truncate_units[truncate_count].segsamples = 1; } else if(j == SWEEPRESON){ // post("Added SWEEPRESON unit"); params[pcount++] = SWEEPRESON; params[pcount++] = sweepreson_count = rparams[rpcount++]; params[pcount++] = x->sweepreson_units[sweepreson_count].minfreq = rparams[rpcount++]; params[pcount++] = x->sweepreson_units[sweepreson_count].maxfreq = rparams[rpcount++]; params[pcount++] = x->sweepreson_units[sweepreson_count].bwfac = rparams[rpcount++]; params[pcount++] = x->sweepreson_units[sweepreson_count].speed = rparams[rpcount++]; params[pcount++] = x->sweepreson_units[sweepreson_count].phase = rparams[rpcount++]; x->sweepreson_units[sweepreson_count].q1[3] = 0; x->sweepreson_units[sweepreson_count].q1[4] = 0; x->sweepreson_units[sweepreson_count].q2[3] = 0; x->sweepreson_units[sweepreson_count].q2[4] = 0; } else if(j == SLIDECOMB){ // post("Added SLIDECOMB unit"); params[pcount++] = SLIDECOMB; params[pcount++] = slidecomb_count = rparams[rpcount++]; params[pcount++] = x->slidecomb_units[slidecomb_count].start_delay = rparams[rpcount++]; params[pcount++] = x->slidecomb_units[slidecomb_count].end_delay = rparams[rpcount++]; params[pcount++] = x->slidecomb_units[slidecomb_count].feedback = rparams[rpcount++]; params[pcount++] = x->slidecomb_units[slidecomb_count].sample_length = rparams[rpcount++]; // scale length to SR x->slidecomb_units[slidecomb_count].sample_length *= x->sr; x->slidecomb_units[slidecomb_count].counter = 0; delset2(x->slidecomb_units[slidecomb_count].delayline1,x->slidecomb_units[slidecomb_count].dv1,MAX_SLIDECOMB_DELAY, x->sr); delset2(x->slidecomb_units[slidecomb_count].delayline2,x->slidecomb_units[slidecomb_count].dv2,MAX_SLIDECOMB_DELAY, x->sr); } else if(j == REVERB1){ // post("Added REVERB1 unit"); params[pcount++] = REVERB1; params[pcount++] = reverb1_count = rparams[rpcount++]; params[pcount++] = revtime = x->reverb1_units[reverb1_count].revtime = rparams[rpcount++]; params[pcount++] = raw_wet = rparams[rpcount++]; x->reverb1_units[reverb1_count].wet = sin(1.570796 * raw_wet); x->reverb1_units[reverb1_count].dry = cos(1.570796 * raw_wet); dels = x->reverb1_units[reverb1_count].dels; for(i = 0; i < 4; i++){ params[pcount++] = dels[i] = rparams[rpcount++]; } alpo1 = x->reverb1_units[reverb1_count].alpo1; alpo2 = x->reverb1_units[reverb1_count].alpo2; for( i = 0; i < 4; i++ ){ if(dels[i] < .005 || dels[i] > 0.1) { post("reverb1: bad random delay time: %f",dels[i]); dels[i] = .05; } mycombset(dels[i], revtime, 0, alpo1[i], x->sr); mycombset(dels[i], revtime, 0, alpo2[i], x->sr); } ellipset(x->reverb_ellipse_data,x->reverb1_units[reverb1_count].eel1,&x->reverb1_units[reverb1_count].nsects,&x->reverb1_units[reverb1_count].xnorm); ellipset(x->reverb_ellipse_data,x->reverb1_units[reverb1_count].eel2,&x->reverb1_units[reverb1_count].nsects,&x->reverb1_units[reverb1_count].xnorm); // reverb1_count = (reverb1_count + 1) % max_dsp_units; } else if(j == ELLIPSE){ // post("Added ELLIPSE unit"); params[pcount++] = ELLIPSE; params[pcount++] = ellipseme_count = rparams[rpcount++]; params[pcount++] = x->ellipseme_units[ellipseme_count].filtercode = rparams[rpcount++]; if( x->ellipseme_units[ellipseme_count].filtercode >= ELLIPSE_FILTER_COUNT ){ pd_error(0, "there is no %d ellipse data",x->ellipseme_units[ellipseme_count].filtercode); return; }; fltdata = x->ellipse_data [x->ellipseme_units[ellipseme_count].filtercode]; eel1 = x->ellipseme_units[ellipseme_count].eel1; eel2 = x->ellipseme_units[ellipseme_count].eel2; ellipset(fltdata,eel1,&nsects,&xnorm); ellipset(fltdata,eel2,&nsects,&xnorm); x->ellipseme_units[ellipseme_count].nsects = nsects; x->ellipseme_units[ellipseme_count].xnorm = xnorm; // ellipseme_count = (ellipseme_count + 1) % max_dsp_units; } else if(j == FEED1){ // post("Added FEED1 unit"); params[pcount++] = FEED1; params[pcount++] = feed1_count = rparams[rpcount++]; params[pcount++] = mindelay = x->feed1_units[feed1_count].mindelay = rparams[rpcount++]; params[pcount++] = maxdelay = x->feed1_units[feed1_count].maxdelay = rparams[rpcount++]; params[pcount++] = speed1 = x->feed1_units[feed1_count].speed1 = rparams[rpcount++]; params[pcount++] = speed2 = x->feed1_units[feed1_count].speed2 = rparams[rpcount++]; params[pcount++] = duration = x->feed1_units[feed1_count].duration = rparams[rpcount++]; funcgen1(x->feed1_units[feed1_count].func1, FEEDFUNCLEN,duration, mindelay,maxdelay, speed1, speed2, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func2, FEEDFUNCLEN,duration, mindelay * 0.5,maxdelay * 2.0, speed1 * 1.25, speed2 * 0.75, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func3, FEEDFUNCLEN,duration, minfeedback, maxfeedback, speed1*.35, speed2*1.25, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func4, FEEDFUNCLEN,duration, minfeedback, maxfeedback, speed1*.55, speed2*2.25, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); delset2(x->feed1_units[feed1_count].delayLine1a, x->feed1_units[feed1_count].dv1a, MAX_MINI_DELAY, x->sr); delset2(x->feed1_units[feed1_count].delayLine2a, x->feed1_units[feed1_count].dv2a, MAX_MINI_DELAY, x->sr); delset2(x->feed1_units[feed1_count].delayLine1b, x->feed1_units[feed1_count].dv1b, MAX_MINI_DELAY, x->sr); delset2(x->feed1_units[feed1_count].delayLine2b, x->feed1_units[feed1_count].dv2b, MAX_MINI_DELAY, x->sr); // feed1_count = (feed1_count + 1) % max_dsp_units; } else if(j == BITCRUSH){ // post("Added BITCRUSH unit"); params[pcount++] = BITCRUSH; params[pcount++] = bitcrush_count = rparams[rpcount++]; params[pcount++] = x->bitcrush_factors[bitcrush_count] = rparams[rpcount++]; // bitcrush_count = (bitcrush_count + 1) % max_dsp_units; } else if(j == FLAM1){ params[pcount++] = FLAM1; params[pcount++] = flam1_count = rparams[rpcount++]; params[pcount++] = x->flam1_units[flam1_count].sample_length = rparams[rpcount++]; // not yet scaled to SR params[pcount++] = x->flam1_units[flam1_count].dt = rparams[rpcount++]; x->flam1_units[flam1_count].counter = 0; // scale to SR x->flam1_units[flam1_count].sample_length *= x->sr; delset2(x->flam1_units[flam1_count].delayline1, x->flam1_units[flam1_count].dv1, MAX_MINI_DELAY, x->sr); delset2(x->flam1_units[flam1_count].delayline2, x->flam1_units[flam1_count].dv2, MAX_MINI_DELAY, x->sr); // flam1_count = (flam1_count + 1) % max_dsp_units; } else if(j == SLIDEFLAM){ // post("Added SLIDEFLAM unit"); params[pcount++] = SLIDEFLAM; params[pcount++] = slideflam_count = rparams[rpcount++]; params[pcount++] = x->slideflam_units[slideflam_count].dt1 = rparams[rpcount++]; params[pcount++] = x->slideflam_units[slideflam_count].dt2 = rparams[rpcount++]; params[pcount++] = x->slideflam_units[slideflam_count].feedback = rparams[rpcount++]; params[pcount++] = x->slideflam_units[slideflam_count].sample_length = rparams[rpcount++]; // not yet scaled to SR x->slideflam_units[slideflam_count].counter = 0; // scale to SR x->slideflam_units[slideflam_count].sample_length *= x->sr; delset2(x->slideflam_units[slideflam_count].delayline1,x->slideflam_units[slideflam_count].dv1,MAX_SLIDEFLAM_DELAY, x->sr); delset2(x->slideflam_units[slideflam_count].delayline2,x->slideflam_units[slideflam_count].dv2,MAX_SLIDEFLAM_DELAY, x->sr); // slideflam_count = (slideflam_count + 1) % max_dsp_units; } else if(j == COMB4){ // post("Added COMB4 unit"); params[pcount++] = COMB4; params[pcount++] = comb4_count = rparams[rpcount++]; rvt = 0.99; params[pcount++] = basefreq = rparams[rpcount++]; // post("comb4: count: %d, basefreq: %f",comb4_count, basefreq); for( i = 0; i < 4; i++ ){ params[pcount++] = lpt = rparams[rpcount++]; // post("comb4: lpt: %f",lpt); mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs1[i], x->sr); mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs2[i], x->sr); } } else if(j == COMPDIST){ // post("Added COMPDIST unit"); params[pcount++] = COMPDIST; } else if(j == RINGFEED){ // post("Added RINGFEED unit"); params[pcount++] = RINGFEED; params[pcount++] = ringfeed_count = rparams[rpcount++]; params[pcount++] = cf = rparams[rpcount++]; params[pcount++] = bw = rparams[rpcount++]; rsnset2(cf, bw, RESON_NO_SCL, 0., x->resonfeed_units[ringfeed_count].res1q, x->sr); rsnset2(cf, bw, RESON_NO_SCL, 0., x->resonfeed_units[ringfeed_count].res2q, x->sr); x->resonfeed_units[ringfeed_count].osc1phs = 0.0; x->resonfeed_units[ringfeed_count].osc2phs = 0.0; params[pcount++] = x->resonfeed_units[ringfeed_count].osc1si = rparams[rpcount++]; // not yet scaled to SR params[pcount++] = x->resonfeed_units[ringfeed_count].osc2si = rparams[rpcount++]; // not yet scaled to SR params[pcount++] = lpt = rparams[rpcount++]; params[pcount++] = rvt = rparams[rpcount++]; // scale to SR x->resonfeed_units[ringfeed_count].osc1si *= ((double)x->sinelen / x->sr); x->resonfeed_units[ringfeed_count].osc2si *= ((double)x->sinelen / x->sr); mycombset(lpt, rvt, 0, x->resonfeed_units[ringfeed_count].comb1arr, x->sr); mycombset(lpt, rvt, 0, x->resonfeed_units[ringfeed_count].comb2arr, x->sr); // is this line superfluous? // ringfeed_count = (ringfeed_count + 1) % max_dsp_units; } else if(j == RESONADSR){ // post("Added RESONADSR unit"); params[pcount++] = RESONADSR; params[pcount++] = resonadsr_count = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->a = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->d = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->r = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v1 = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v2 = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v3 = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v4 = rparams[rpcount++]; params[pcount++] = x->resonadsr_units[resonadsr_count].bwfac = rparams[rpcount++]; params[pcount++] = notedur = rparams[rpcount++]; x->resonadsr_units[resonadsr_count].phs = 0.0; sust = notedur - (x->resonadsr_units[resonadsr_count].adsr->a + x->resonadsr_units[resonadsr_count].adsr->d + x->resonadsr_units[resonadsr_count].adsr->r); x->resonadsr_units[resonadsr_count].adsr->s = sust; buildadsr(x->resonadsr_units[resonadsr_count].adsr); x->resonadsr_units[resonadsr_count].si = ((double)x->resonadsr_units[resonadsr_count].adsr->len / x->sr) / notedur; // resonadsr_count = (resonadsr_count + 1) % max_dsp_units; } else if(j == STV){ // post("Added STV unit"); params[pcount++] = STV; params[pcount++] = stv_count = rparams[rpcount++]; params[pcount++] = speed1 = rparams[rpcount++]; params[pcount++] = speed2 = rparams[rpcount++]; params[pcount++] = maxdelay = rparams[rpcount++]; x->stv_units[stv_count].osc1phs = 0.0; x->stv_units[stv_count].osc2phs = 0.0; x->stv_units[stv_count].fac2 = 0.5 * (maxdelay - 0.001); x->stv_units[stv_count].fac1 = 0.001 + x->stv_units[stv_count].fac2; x->stv_units[stv_count].osc1si = ((double)x->sinelen / x->sr) * speed1; x->stv_units[stv_count].osc2si = ((double)x->sinelen / x->sr) * speed2; delset2(x->stv_units[stv_count].delayline1, x->stv_units[stv_count].dv1, maxdelay, x->sr); delset2(x->stv_units[stv_count].delayline2, x->stv_units[stv_count].dv2, maxdelay, x->sr); // stv_count = (stv_count + 1) % max_dsp_units; } else { pd_error(0, "el.chameleon~: could not find a process for %d",j); } } // events = floor( boundrand( (float)minproc, (float) maxproc) ); x->pcount = pcount; } void chameleon_set_parameters_exec(t_chameleon *x) { long max_dsp_units = x->max_dsp_units; float rval; int events; int i, j; int ftype; double cf, bw;//, bw; float *odds = x->odds; int maxproc = x->max_process_per_note; int minproc = x->min_process_per_note; double delay, revtime; double *params = x->params; long pcount = x->pcount; int comb_dl_count = 0; // where in the comb pool to grab memory int flange_count = 0; int truncate_count = 0; int butterworth_count = 0; int sweepreson_count = 0; int slidecomb_count = 0; int reverb1_count = 0; int ellipseme_count = 0; int feed1_count = 0; int flam1_count = 0; int comb4_count = 0; int ringfeed_count = 0; int bendy_count = 0; int ringmod_count = 0; int ringmod4_count = 0; int slideflam_count = 0; int bitcrush_count = 0; int resonadsr_count = 0; int stv_count = 0; double raw_wet; double sr = x->sr; double *dels; double **alpo1, **alpo2; double *fltdata; double xnorm; int nsects; LSTRUCT *eel1, *eel2; double speed1, speed2, mindelay, maxdelay, duration; double basefreq; double *ratios = x->ratios; double rvt = boundrand(0.1,0.98); double lpt; int dex; double notedur, sust; double phz1, phz2, minfeedback = 0.1, maxfeedback = 0.7; if(x->set_parameters_flag == 0){ return; } else { x->set_parameters_flag = 0; } if(maxproc <= 0){ return; } events = floor( boundrand( (float)minproc, (float) maxproc) ); pcount = 0; if( DEBUG_CHAMELEON ){ post("*** EVENT LIST ***"); } for(i = 0; i < events; i++){ rval = boundrand(0.0,1.0); j = 0; while(rval > odds[j]){ j++; } if( DEBUG_CHAMELEON ){ post("event: %d", j); } if(j == COMB){ params[pcount++] = COMB; params[pcount++] = delay = boundrand(0.01,0.35); params[pcount++] = revtime = boundrand(0.5,0.98); params[pcount++] = comb_dl_count; mycombset(delay,revtime,0,x->comb_delay_pool1[comb_dl_count],x->sr); mycombset(delay,revtime,0,x->comb_delay_pool2[comb_dl_count],x->sr); ++comb_dl_count; if( comb_dl_count >= max_dsp_units){ comb_dl_count = 0; } } else if(j == RINGMOD) { params[pcount++] = RINGMOD; params[pcount++] = boundrand(100.0,2000.0); //need a log version params[pcount++] = ringmod_count; x->ringmod_phases[ringmod_count] = 0.0; ringmod4_count = (ringmod_count + 1) % max_dsp_units; } else if(j == RINGMOD4) { params[pcount++] = RINGMOD4; params[pcount++] = boundrand(100.0,2000.0); //need a log version params[pcount++] = ringmod4_count; x->ringmod4_phases[ringmod4_count] = 0.0; ringmod4_count = (ringmod4_count + 1) % max_dsp_units; } else if(j == BENDY){ params[pcount++] = BENDY; params[pcount++] = bendy_count; params[pcount++] = x->bendy_units[bendy_count].val1 = boundrand(0.01, BENDY_MAXDEL); params[pcount++] = x->bendy_units[bendy_count].val2 = boundrand(0.01, BENDY_MAXDEL); x->bendy_units[bendy_count].counter = 0; delset3(x->bendy_units[bendy_count].delayline1, x->bendy_units[bendy_count].dv1, x->bendy_units[bendy_count].val1,x->sr, BENDY_MAXDEL); delset3(x->bendy_units[bendy_count].delayline2, x->bendy_units[bendy_count].dv2, x->bendy_units[bendy_count].val2,x->sr, BENDY_MAXDEL); bendy_count = (bendy_count + 1) % max_dsp_units; } else if(j == FLANGE){ params[pcount++] = FLANGE; params[pcount++] = boundrand(80.0,400.0); params[pcount++] = boundrand(600.0,4000.0); params[pcount++] = boundrand(0.1,2.0); params[pcount++] = boundrand(0.1,0.95); params[pcount++] = flange_count; x->flange_units[flange_count].phase = boundrand(0.0,0.5) * (double)x->sinelen / x->sr; flange_count = (flange_count + 1) % max_dsp_units; /* ++flange_count; if( flange_count >= max_dsp_units){ flange_count = 0; }*/ } else if(j == BUTTER){ params[pcount++] = BUTTER; params[pcount++] = ftype = rand() % 3; params[pcount++] = cf = boundrand(70.0,3000.0); params[pcount++] = bw = cf * boundrand(0.05,0.6); params[pcount++] = butterworth_count; if( ftype == LOPASS) { lobut(x->butterworth_units[butterworth_count].data1, cf, sr); lobut(x->butterworth_units[butterworth_count].data2, cf, sr); } else if (ftype == HIPASS){ hibut(x->butterworth_units[butterworth_count].data1, cf, sr); hibut(x->butterworth_units[butterworth_count].data2, cf, sr); } else if(ftype == BANDPASS){ bpbut(x->butterworth_units[butterworth_count].data1, cf, bw, sr); bpbut(x->butterworth_units[butterworth_count].data2, cf, bw, sr); x->butterworth_units[butterworth_count].bw = bw; } x->butterworth_units[butterworth_count].cf = cf; x->butterworth_units[butterworth_count].ftype = ftype; butterworth_count = (butterworth_count + 1) % max_dsp_units; } else if(j == TRUNCATE){ params[pcount++] = TRUNCATE; params[pcount++] = truncate_count; x->truncate_units[truncate_count].counter = 0; x->truncate_units[truncate_count].state = 0; x->truncate_units[truncate_count].segsamples = 1; truncate_count = (truncate_count + 1) % max_dsp_units; } else if(j == SWEEPRESON){ params[pcount++] = SWEEPRESON; params[pcount++] = sweepreson_count; params[pcount++] = x->sweepreson_units[sweepreson_count].minfreq = boundrand(100.0,300.0); params[pcount++] = x->sweepreson_units[sweepreson_count].maxfreq = boundrand(600.0,6000.0); params[pcount++] = x->sweepreson_units[sweepreson_count].bwfac = boundrand(0.01,0.2); params[pcount++] = x->sweepreson_units[sweepreson_count].speed = boundrand(0.05,2.0); params[pcount++] = x->sweepreson_units[sweepreson_count].phase = boundrand(0.0,0.5); // scale phase to SR x->sweepreson_units[sweepreson_count].phase *= ((double)x->sinelen / x->sr); sweepreson_count = (sweepreson_count + 1) % max_dsp_units; } else if(j == SLIDECOMB){ params[pcount++] = SLIDECOMB; params[pcount++] = slidecomb_count; params[pcount++] = x->slidecomb_units[slidecomb_count].start_delay = boundrand(0.001,MAX_SLIDECOMB_DELAY * 0.95); params[pcount++] = x->slidecomb_units[slidecomb_count].end_delay = boundrand(0.001,MAX_SLIDECOMB_DELAY * 0.95); params[pcount++] = x->slidecomb_units[slidecomb_count].feedback = boundrand(0.7,0.99); params[pcount++] = x->slidecomb_units[slidecomb_count].sample_length = boundrand(0.1,2.0); // scale length to SR x->slidecomb_units[slidecomb_count].sample_length *= x->sr; x->slidecomb_units[slidecomb_count].counter = 0; delset2(x->slidecomb_units[slidecomb_count].delayline1,x->slidecomb_units[slidecomb_count].dv1,MAX_SLIDECOMB_DELAY, x->sr); delset2(x->slidecomb_units[slidecomb_count].delayline2,x->slidecomb_units[slidecomb_count].dv2,MAX_SLIDECOMB_DELAY, x->sr); slidecomb_count = (slidecomb_count + 1) % max_dsp_units; } else if(j == REVERB1){ params[pcount++] = REVERB1; params[pcount++] = reverb1_count; params[pcount++] = revtime = x->reverb1_units[reverb1_count].revtime = boundrand(0.25,0.99); params[pcount++] = raw_wet = boundrand(0.2,0.8); x->reverb1_units[reverb1_count].wet = sin(1.570796 * raw_wet); x->reverb1_units[reverb1_count].dry = cos(1.570796 * raw_wet); dels = x->reverb1_units[reverb1_count].dels; for(i = 0; i < 4; i++){ params[pcount++] = dels[i] = boundrand(.005, .1 ); } alpo1 = x->reverb1_units[reverb1_count].alpo1; alpo2 = x->reverb1_units[reverb1_count].alpo2; for( i = 0; i < 4; i++ ){ // dels[i] = boundrand(.005, .1 ); if(dels[i] < .005 || dels[i] > 0.1) { post("reverb1: bad random delay time: %f",dels[i]); dels[i] = .05; } mycombset(dels[i], revtime, 0, alpo1[i], x->sr); mycombset(dels[i], revtime, 0, alpo2[i], x->sr); } ellipset(x->reverb_ellipse_data,x->reverb1_units[reverb1_count].eel1,&x->reverb1_units[reverb1_count].nsects,&x->reverb1_units[reverb1_count].xnorm); ellipset(x->reverb_ellipse_data,x->reverb1_units[reverb1_count].eel2,&x->reverb1_units[reverb1_count].nsects,&x->reverb1_units[reverb1_count].xnorm); reverb1_count = (reverb1_count + 1) % max_dsp_units; } else if(j == ELLIPSE){ params[pcount++] = ELLIPSE; params[pcount++] = ellipseme_count; params[pcount++] = x->ellipseme_units[ellipseme_count].filtercode = rand() % ELLIPSE_FILTER_COUNT; if( x->ellipseme_units[ellipseme_count].filtercode >= ELLIPSE_FILTER_COUNT ){ pd_error(0, "there is no %d ellipse data",x->ellipseme_units[ellipseme_count].filtercode); return; }; fltdata = x->ellipse_data [x->ellipseme_units[ellipseme_count].filtercode]; eel1 = x->ellipseme_units[ellipseme_count].eel1; eel2 = x->ellipseme_units[ellipseme_count].eel2; ellipset(fltdata,eel1,&nsects,&xnorm); ellipset(fltdata,eel2,&nsects,&xnorm); x->ellipseme_units[ellipseme_count].nsects = nsects; x->ellipseme_units[ellipseme_count].xnorm = xnorm; ellipseme_count = (ellipseme_count + 1) % max_dsp_units; } else if(j == FEED1){ params[pcount++] = FEED1; params[pcount++] = feed1_count; params[pcount++] = mindelay = x->feed1_units[feed1_count].mindelay = boundrand(.001,0.1); params[pcount++] = maxdelay = x->feed1_units[feed1_count].maxdelay = boundrand(mindelay,0.1); params[pcount++] = speed1 = x->feed1_units[feed1_count].speed1 = boundrand(.01,0.5); params[pcount++] = speed2 = x->feed1_units[feed1_count].speed2 = boundrand(speed1,0.5); params[pcount++] = duration = x->feed1_units[feed1_count].duration = boundrand(.05,1.0); funcgen1(x->feed1_units[feed1_count].func1, FEEDFUNCLEN,duration, mindelay,maxdelay, speed1, speed2, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func2, FEEDFUNCLEN,duration, mindelay * 0.5,maxdelay * 2.0, speed1 * 1.25, speed2 * 0.75, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func3, FEEDFUNCLEN,duration, minfeedback, maxfeedback, speed1*.35, speed2*1.25, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); phz1 /= (double) FEEDFUNCLEN; phz2 /= (double) FEEDFUNCLEN; funcgen1(x->feed1_units[feed1_count].func4, FEEDFUNCLEN,duration, minfeedback, maxfeedback, speed1*.55, speed2*2.25, 1.0, 1.0,&phz1, &phz2, x->sinewave, x->sinelen); delset2(x->feed1_units[feed1_count].delayLine1a, x->feed1_units[feed1_count].dv1a, MAX_MINI_DELAY, x->sr); delset2(x->feed1_units[feed1_count].delayLine2a, x->feed1_units[feed1_count].dv2a, MAX_MINI_DELAY, x->sr); delset2(x->feed1_units[feed1_count].delayLine1b, x->feed1_units[feed1_count].dv1b, MAX_MINI_DELAY, x->sr); delset2(x->feed1_units[feed1_count].delayLine2b, x->feed1_units[feed1_count].dv2b, MAX_MINI_DELAY, x->sr); feed1_count = (feed1_count + 1) % max_dsp_units; } else if(j == BITCRUSH){ params[pcount++] = BITCRUSH; params[pcount++] = bitcrush_count; params[pcount++] = x->bitcrush_factors[bitcrush_count] = boundrand(2.0,8.0); bitcrush_count = (bitcrush_count + 1) % max_dsp_units; } else if(j == FLAM1){ params[pcount++] = FLAM1; params[pcount++] = flam1_count; params[pcount++] = x->flam1_units[flam1_count].sample_length = boundrand(1.0,4.0); // not yet scaled to SR params[pcount++] = x->flam1_units[flam1_count].dt = boundrand(0.08, 0.2); x->flam1_units[flam1_count].counter = 0; // scale to SR x->flam1_units[flam1_count].sample_length *= x->sr; delset2(x->flam1_units[flam1_count].delayline1, x->flam1_units[flam1_count].dv1, MAX_MINI_DELAY, x->sr); delset2(x->flam1_units[flam1_count].delayline2, x->flam1_units[flam1_count].dv2, MAX_MINI_DELAY, x->sr); flam1_count = (flam1_count + 1) % max_dsp_units; } else if(j == SLIDEFLAM){ params[pcount++] = SLIDEFLAM; params[pcount++] = slideflam_count; if( boundrand(0.0,1.0) > 0.1 ){ params[pcount++] = x->slideflam_units[slideflam_count].dt1 = boundrand(0.01,0.05); params[pcount++] = x->slideflam_units[slideflam_count].dt2 = boundrand(0.1,MAX_SLIDEFLAM_DELAY * 0.95); } else { params[pcount++] = x->slideflam_units[slideflam_count].dt1 = boundrand(0.1,MAX_SLIDEFLAM_DELAY * 0.95); params[pcount++] = x->slideflam_units[slideflam_count].dt2 = boundrand(0.01,0.05); } params[pcount++] = x->slideflam_units[slideflam_count].feedback = boundrand(0.7,0.99); params[pcount++] = x->slideflam_units[slideflam_count].sample_length = boundrand(0.25,4.0); // not yet scaled to SR x->slideflam_units[slideflam_count].counter = 0; // scale to SR x->slideflam_units[slideflam_count].sample_length *= x->sr; delset2(x->slideflam_units[slideflam_count].delayline1,x->slideflam_units[slideflam_count].dv1,MAX_SLIDEFLAM_DELAY, x->sr); delset2(x->slideflam_units[slideflam_count].delayline2,x->slideflam_units[slideflam_count].dv2,MAX_SLIDEFLAM_DELAY, x->sr); slideflam_count = (slideflam_count + 1) % max_dsp_units; } else if(j == COMB4){ params[pcount++] = COMB4; params[pcount++] = comb4_count; rvt = 0.99; params[pcount++] = basefreq = boundrand(100.0,400.0); for( i = 0; i < 4; i++ ){ dex = (int)floor( boundrand(0.0, 4.0)); lpt = 1. / basefreq; if( dex > 4) { dex = 4; }; basefreq *= ratios[dex]; params[pcount++] = lpt; mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs1[i], x->sr); mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs2[i], x->sr); } comb4_count = (comb4_count + 1) % max_dsp_units; } else if(j == COMPDIST){ params[pcount++] = COMPDIST; } else if(j == RINGFEED){ params[pcount++] = RINGFEED; params[pcount++] = ringfeed_count; params[pcount++] = cf = boundrand(90.0,1500.0); params[pcount++] = bw = boundrand(0.02,0.4) * cf; rsnset2(cf, bw, RESON_NO_SCL, 0., x->resonfeed_units[ringfeed_count].res1q, x->sr); rsnset2(cf, bw, RESON_NO_SCL, 0., x->resonfeed_units[ringfeed_count].res2q, x->sr); x->resonfeed_units[ringfeed_count].osc1phs = 0.0; x->resonfeed_units[ringfeed_count].osc2phs = 0.0; params[pcount++] = x->resonfeed_units[ringfeed_count].osc1si = boundrand(90.0,1500.0); // not yet scaled to SR params[pcount++] = x->resonfeed_units[ringfeed_count].osc2si = boundrand(90.0,1500.0); // not yet scaled to SR params[pcount++] = lpt = 1.0 / boundrand(90.0,1500.0); params[pcount++] = rvt = boundrand(.01,.8); // scale to SR x->resonfeed_units[ringfeed_count].osc1si *= ((double)x->sinelen / x->sr); x->resonfeed_units[ringfeed_count].osc2si *= ((double)x->sinelen / x->sr); mycombset(lpt, rvt, 0, x->resonfeed_units[ringfeed_count].comb1arr, x->sr); mycombset(lpt, rvt, 0, x->resonfeed_units[ringfeed_count].comb2arr, x->sr); ringfeed_count = (ringfeed_count + 1) % max_dsp_units; } else if(j == RESONADSR){ params[pcount++] = RESONADSR; params[pcount++] = resonadsr_count; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->a = boundrand(0.01,0.1); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->d = boundrand(0.01,0.05); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->r = boundrand(0.05,0.5); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v1 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v2 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v3 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v4 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].bwfac = boundrand(0.03,0.7); params[pcount++] = notedur = boundrand(0.7, 1.2); x->resonadsr_units[resonadsr_count].phs = 0.0; sust = notedur - (x->resonadsr_units[resonadsr_count].adsr->a + x->resonadsr_units[resonadsr_count].adsr->d + x->resonadsr_units[resonadsr_count].adsr->r); x->resonadsr_units[resonadsr_count].adsr->s = sust; buildadsr(x->resonadsr_units[resonadsr_count].adsr); x->resonadsr_units[resonadsr_count].si = ((double)x->resonadsr_units[resonadsr_count].adsr->len / x->sr) / notedur; resonadsr_count = (resonadsr_count + 1) % max_dsp_units; } else if(j == STV){ params[pcount++] = STV; params[pcount++] = stv_count; params[pcount++] = speed1 = boundrand(0.025,0.5); params[pcount++] = speed2 = boundrand(0.025,0.5); params[pcount++] = maxdelay = boundrand(0.001,0.01); x->stv_units[stv_count].osc1phs = 0.0; x->stv_units[stv_count].osc2phs = 0.0; x->stv_units[stv_count].fac2 = 0.5 * (maxdelay - 0.001); x->stv_units[stv_count].fac1 = 0.001 + x->stv_units[stv_count].fac2; x->stv_units[stv_count].osc1si = ((double)x->sinelen / x->sr) * speed1; x->stv_units[stv_count].osc2si = ((double)x->sinelen / x->sr) * speed2; delset2(x->stv_units[stv_count].delayline1, x->stv_units[stv_count].dv1, maxdelay, x->sr); delset2(x->stv_units[stv_count].delayline2, x->stv_units[stv_count].dv2, maxdelay, x->sr); stv_count = (stv_count + 1) % max_dsp_units; } else { pd_error(0, "el.chameleon~: could not find a process for %d",j); } } x->pcount = pcount; } //void chameleon_dsp64(t_chameleon *x, t_object *dsp64, short *count, double samplerate, long maxvectorsize, long flags) void chameleon_dsp(t_chameleon *x, t_signal **sp) { float samplerate; x->vs = sp[0]->s_n; samplerate = sys_getsr(); // post("chameleon - dsp blocksize %d, and sample rate %f", x->vs, samplerate); // need more comprehensive reinitialization if sr changes if(x->sr != samplerate){ x->sr = samplerate; x->delayline1 = (double *)getbytes(((x->maxdelay * x->sr) + 2) * sizeof(double)); x->delayline2 = (double *)getbytes(((x->maxdelay * x->sr) + 2) * sizeof(double)); } //object_method(dsp64, gensym("dsp_add64"),x,chameleon_perform64,0,NULL); dsp_add(chameleon_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, (t_int)sp[0]->s_n); } // MaxMSP code, not needed void chameleon_assist (t_chameleon *x, void *b, long msg, long arg, char *dst) { if (msg==1) { switch (arg) { case 0: sprintf(dst,"(signal) Channel 1 Input"); break; case 1: sprintf(dst,"(signal) Channel 2 Input"); break; } } else if (msg==2) { switch(arg){ case 0: sprintf(dst,"(signal) Channel 1 Output"); break; case 1: sprintf(dst,"(signal) Channel 2 Output"); break; case 2: sprintf(dst,"(list) Data Bank of Stored Settings"); break; } } } /* Code from ellipse.c */ double ellipse(double x, LSTRUCT *eel, int nsects, double xnorm) { register int m; double op; for(m=0;m MAXSECTS) { pd_error(0, "sorry, only configured for %d sections",MAXSECTS); return; } i=1; for(m=0;m<*nsects;m++) { eel[m].c0 = list[i++]; eel[m].c1 = list[i++]; eel[m].c2 = list[i++]; eel[m].c3 = list[i++]; eel[m].ps0 = eel[m].ps1 = eel[m].ps2 = eel[m].ps3 = 0; } *xnorm = list[i]; } /*set biquad coefficients one time*/ void init_ellipse_data(double **a) { /* 0: hipass at 200 */ a[0][0] = 4; a[0][1] = 1.5156562; a[0][2] = -1.9958239; a[0][3] = 1; a[0][4] = 0.9965234; a[0][5] = -1.9996996; a[0][6] = 0.97229244; a[0][7] = 1; a[0][8] = 0.89313463; a[0][9] = 1.8828678; a[0][10] = -1.9561138; a[0][11] = 1; a[0][12] = 0.95845959; a[0][13] = -1.9999342; a[0][14] = -0.065893592; a[0][15] = 1; a[0][16] = 0.39565826; a[0][17] = 0.26225143; /* 1: hipass at 500 */ a[1][0] = 3; a[1][1] = -1.9950633; a[1][2] = -1.9910746; a[1][3] = 1; a[1][4] = 0.99729187; a[1][5] = -1.9964182; a[1][6] = -1.9742933; a[1][7] = 1; a[1][8] = 0.98250468; a[1][9] = -1.999304; a[1][10] = -1.8149534; a[1][11] = 1; a[1][12] = 0.84353385; a[1][13] = 0.90419364; /* 2: bandpass 280 - 700 */ a[2][0] = 4; a[2][1] = -1.9989934; a[2][2] = -1.9946771; a[2][3] = 1; a[2][4] = 0.99626146; a[2][5] = -1.9843098; a[2][6] = -1.9807532; a[2][7] = 1; a[2][8] = 0.99066977; a[2][9] = -1.9996779; a[2][10] = -1.9795816; a[2][11] = 1; a[2][12] = 0.9820447; a[2][13] = -1.9513627; a[2][14] = -1.965153; a[2][15] = 1; a[2][16] = 0.97142923; a[2][17] = 0.013949928; /* 3: lopass at 500 */ a[3][0] = 3; a[3][1] = -1.9922858; a[3][2] = -1.9903447; a[3][3] = 1; a[3][4] = 0.99525722; a[3][5] = -1.9849712; a[3][6] = -1.9765264; a[3][7] = 1; a[3][8] = 0.97923558; a[3][9] = 1; a[3][10] = -0.98180316; a[3][11] = 0; a[3][12] = 0; a[3][13] = 0.0014021298; /* 4: lopass at 2K */ a[4][0] = 3; a[4][1] = -1.9170388; a[4][2] = -1.9264647; a[4][3] = 1; a[4][4] = 0.99064223; a[4][5] = -1.8850187; a[4][6] = -1.9092573; a[4][7] = 1; a[4][8] = 0.95627234; a[4][9] = -1.4613313; a[4][10] = -1.8821271; a[4][11] = 0.99999996; a[4][12] = 0.89422169; a[4][13] = 0.0071020706; /* 5: f1,f2,f3= 400.0 900.0 2500. ripple= 1.000 db= 40.00 */ a[5][0] = 4; a[5][1] = -1.9594111; a[5][2] = -1.9900446; a[5][3] = 1; a[5][4] = 0.9932218; a[5][5] = -1.9986938; a[5][6] = -1.967975; a[5][7] = 1; a[5][8] = 0.98456911; a[5][9] = -1.8436241; a[5][10] = -1.9696535; a[5][11] = 1; a[5][12] = 0.9745592; a[5][13] = -1.9996708; a[5][14] = -1.9523041; a[5][15] = 1; a[5][16] = 0.96284515; a[5][17] = 0.0027629927; /* 6: hipass at 500 */ a[6][0] = 3; a[6][1] = -1.9950633; a[6][2] = -1.9910746; a[6][3] = 1; a[6][4] = 0.99729187; a[6][5] = -1.9964182; a[6][6] = -1.9742933; a[6][7] = 1; a[6][8] = 0.98250468; a[6][9] = -1.999304; a[6][10] = -1.8149534; a[6][11] = 1; a[6][12] = 0.84353385; a[6][13] = 0.90419364; /* 7: bandpass 1000-4000-6000 */ a[7][0] = 4; a[7][1] = -1.9924766; a[7][2] = -1.9573893; a[7][3] = 1; a[7][4] = 0.97714717; a[7][5] = -1.2471186; a[7][6] = -1.6082873; a[7][7] = 1; a[7][8] = 0.91482231; a[7][9] = -1.9983103; a[7][10] = -1.8512918; a[7][11] = 1; a[7][12] = 0.88910013; a[7][13] = 0.033335148; a[7][14] = -1.6413378; a[7][15] = 0.99999998; a[7][16] = 0.78964041; a[7][17] = 0.0087452226; /* 8: hipass 4000-10000 */ a[8][0] = 1; a[8][1] = -1.9896868; a[8][2] = -1.3953066; a[8][3] = 1; a[8][4] = 0.58943112; a[8][5] = 0.74811328; /* 9: bandpass 500-2500-3500 */ a[9][0] = 6; a[9][1] = -1.9975736; a[9][2] = -1.9902167; a[9][3] = 1; a[9][4] = 0.99529287; a[9][5] = -1.7460823; a[9][6] = -1.853476; a[9][7] = 1; a[9][8] = 0.97721553; a[9][9] = -1.9984481; a[9][10] = -1.9737545; a[9][11] = 1; a[9][12] = 0.98056598; a[9][13] = -1.6166383; a[9][14] = -1.8408836; a[9][15] = 0.99999999; a[9][16] = 0.93097271; a[9][17] = -1.9997426; a[9][18] = -1.9320458; a[9][19] = 1; a[9][20] = 0.94629262; a[9][21] = -0.44018748; a[9][22] = -1.8664352; a[9][23] = 0.99999993; a[9][24] = 0.90871633; a[9][25] = 0.00044746789; /* 10: bp-300-400-2500-70dB */ a[10][0] = 8; a[10][1] = -1.7823256; a[10][2] = -1.9938863; a[10][3] = 1; a[10][4] = 0.99712611; a[10][5] = -1.9981713; a[10][6] = -1.8579881; a[10][7] = 1; a[10][8] = 0.9825214; a[10][9] = -1.7151492; a[10][10] = -1.9844167; a[10][11] = 1; a[10][12] = 0.9884184; a[10][13] = -1.9986272; a[10][14] = -1.8447412; a[10][15] = 1; a[10][16] = 0.94374559; a[10][17] = -1.3382862; a[10][18] = -1.9602273; a[10][19] = 1; a[10][20] = 0.96717992; a[10][21] = -1.9994689; a[10][22] = -1.8529558; a[10][23] = 1; a[10][24] = 0.90889168; a[10][25] = 1; a[10][26] = -1.903171; a[10][27] = 0; a[10][28] = 0.92280038; a[10][29] = -1; a[10][30] = 0; a[10][31] = 0; a[10][32] = 0; a[10][33] = 0.00022546378; } /* Code from chameleon_helper.c */ void putsine (double *arr, long len) { long i; double twopi; twopi = 8.0 * atan2(1.,1.); for ( i = 0; i < len ; i++) { *(arr + i) = sin(twopi * i / len); } } float boundrand(float min, float max) { return min + (max-min) * ((float)rand()/MY_MAX); } void mycombset(double loopt,double rvt,int init,double *a,double srate) { int j; a[0] = (3.0 + (loopt * srate + .5)); a[1] = rvt; if(!init) { for(j=3; j<(int)*a; j++) { a[j] = 0; } a[2] = 3; } } double mycomb(double samp,double *a) { double temp,*aptr; if ( a[2] >= (int) a[0]) a[2] = 3; aptr = a + (int)a[2]; a[2]++; temp = *aptr; *aptr = *aptr * a[1] + samp; return(temp); } void setweights(float *a, int len) { float sum = 0.0; int i; for(i=0;islidecomb_units[i].delayline1, x->slidecomb_units[i].dv1, MAX_SLIDECOMB_DELAY, x->sr); void delset2(double *a,int *l,double xmax, double srate) { /* delay initialization. a is address of float array, l is size-2 int * array for bookkeeping variables, xmax, is maximum expected delay */ int i; *l = 0; // *(l+1) = (int)(xmax * srate + .5); // attempted protection: *(l+1) = (int)(xmax * srate + .5) - 1; for(i = 0; i < *(l+1); i++) *(a+i) = 0; } void delset3(double *a,int *l,double xmax,double srate, double alloc_max) { /* delay initialization. a is address of float array, l is size-2 int * array for bookkeeping variables, xmax, is maximum expected delay */ int i; if( xmax > alloc_max ) { post("chameleon~ delset3 error: %d is too big, compared to %d. Resetting delay length.", xmax, alloc_max ); xmax = alloc_max; } l[0] = 0; l[1] = (int)(xmax * srate + .5) - 1; for(i = 0; i < l[1]; i++) *(a+i) = 0; } void delput2(double x,double *a,int *l) { /* put value in delay line. See delset. x is float */ if( ((*l) >= 0) && ((*l) < *(l+1)) ){ *(a + (*l)++) = x; } while(*(l) >= *(l+1)){ *l -= *(l+1); } } double dliget2(double *a,double wait,int *l,double srate) { /* get interpolated value from delay line, wait seconds old */ int im1; double x = wait * srate; int i = x; double frac = x - i; // this could be the bug i = *l - i; im1 = i - 1; if(i <= 0) { if(i < 0) i += *(l+1); if(i < 0) return(0.); if(im1 < 0) im1 += *(l+1); } return(*(a+i) + frac * (*(a+im1) - *(a+i))); } void butset(float *a) { a[6] = a[7] = 0.0; } void lobut(double *a, double cutoff, double SR) { register float c; c = 1.0 / tan( PI * cutoff / SR); a[1] = 1.0 / ( 1.0 + ROOT2 * c + c * c); a[2] = a[1] + a[1]; a[3] = a[1]; a[4] = 2.0 * ( 1.0 - c*c) * a[1]; a[5] = ( 1.0 - ROOT2 * c + c * c) * a[1]; a[6] = a[7] = 0.0; } void hibut(double *a, double cutoff, double SR) { register float c; c = tan( PI * cutoff / SR); a[1] = 1.0 / ( 1.0 + ROOT2 * c + c * c); a[2] = -2.0 * a[1]; a[3] = a[1]; a[4] = 2.0 * ( c*c - 1.0) * a[1]; a[5] = ( 1.0 - ROOT2 * c + c * c) * a[1]; a[6] = a[7] = 0.0; } void bpbut(double *a, double formant, double bandwidth, double SR) { register float c, d; c = 1.0 / tan( PI * bandwidth / SR); d = 2.0 * cos( 2.0 * PI * formant / SR); a[1] = 1.0 / ( 1.0 + c); a[2] = 0.0; a[3] = -a[1]; a[4] = - c * d * a[1]; a[5] = ( c - 1.0) * a[1]; a[6] = a[7] = 0.0; } /* in array can == out array */ void butter_filter(double *buf, double *a, long frames) { int i; double t,y; for(i = 0 ; i < frames; i++) { t = *(buf + i) - a[4] * a[6] - a[5] * a[7]; y = t * a[1] + a[2] * a[6] + a[3] * a[7]; a[7] = a[6]; a[6] = t; *(buf + i) = y; } } void rsnset2(double cf,double bw,double scl,double xinit,double *a,double srate) { double c,temp; if(!xinit) { a[4] = 0; a[3] = 0; } a[2] = exp(-PI2 * bw/srate); temp = 1. - a[2]; c = a[2] + 1; a[1] = 4. * a[2]/c * cos(PI2 * cf/srate); if(scl < 0) a[0] = 1; if(scl) a[0] = sqrt(temp/c*(c*c-a[1]*a[1])); if(!scl) a[0] = temp*sqrt(1.-a[1]*a[1]/(4.*a[2])); } double reson(double x,double *a) { double temp; temp = *a * x + *(a+1) * *(a+3) - *(a+2) * *(a+4); *(a+4) = *(a+3); *(a+3) = temp; return(temp); } double allpass(double samp,double *a) { double temp,*aptr; if ( a[STARTM1] >= (int) a[0]) a[STARTM1] = START; aptr = a + (int)a[STARTM1]; a[STARTM1] ++; temp = *aptr; *aptr = *aptr * a[1] + samp; return(temp - a[1] * *aptr); } void init_reverb_data(double *a) { a[0] = 2; a[1] = -0.61043329; a[2] = -1.4582246; a[3] = 1; a[4] = 0.75887003; a[5] = 1; a[6] = -0.6922953; a[7] = 0; a[8] = 0; a[9] = 0.035888535; } void setflamfunc1(double *arr, int flen) { int i; double x; for ( i = 0; i < flen; i++){ x = (double)i / (double) flen ; *(arr + i) = ((x - 1) / (x + 1)) * -1. ; } } void setExpFlamFunc(float *arr, int flen, float v1,float v2,float alpha) { int i; // double exp(); if( alpha == 0 ) alpha = .00000001 ; for ( i = 0; i < flen; i++){ *(arr + i) = v1 + (v2-v1) * ((1-exp((float)i*alpha/((float)flen-1.)))/(1-exp(alpha))); } } void funcgen1(double *outArray, int outlen, double duration, double outMin, double outMax, double speed1, double speed2, double gain1, double gain2, double *phs1, double *phs2, double *sine, int sinelen) { double si1, si2; double localSR; int i; // distrust all of these parameters! localSR = duration * (double) outlen ; *phs1 *= (double) sinelen; *phs2 *= (double) sinelen; si1 = ((double)sinelen/localSR) * speed1; si2 = ((double)sinelen/localSR) * speed2; // crash situation - maybe outArray is too short... for( i = 0; i < outlen; i++ ){ *(outArray + i) = oscil(gain1, si1, sine, sinelen, phs1) ; // this is a crasher *(outArray + i) += oscil(gain2, si2, sine, sinelen, phs2) ; } normtab( outArray, outArray, outMin, outMax, outlen); } void normtab(double *inarr,double *outarr, double min, double max, int len) { int i; float imin=9999999999., imax=-9999999999.; for(i = 0; i < len ; i++){ if( imin > inarr[i] ) imin = inarr[i]; if( imax < inarr[i] ) imax = inarr[i]; } for(i = 0; i < len; i++ ) outarr[i] = mapp(inarr[i], imin, imax, min, max); } double mapp(double in,double imin,double imax,double omin,double omax) { if( imax == 0.0 ) { return 0.0 ; } else if(imax == imin){ return imin; } return( omin+((omax-omin)*((in-imin)/(imax-imin))) ); } double oscil(double amp,double si,double *farray,int len,double *phs) { register int i = *phs; *phs += si; while(*phs >= len){ *phs -= len; } while(*phs < 0.){ *phs += len; } if(i < 0){ i = 0; } else if(i >= len){ i = len - 1; } return(*(farray+i) * amp); } void set_dcflt(double *a) { a[0] = 3; a[1] = -1.9999924; a[2] = -1.9992482; a[3] = 1; a[4] = 0.99928019; a[5] = -1.9999956; a[6] = -1.996408; a[7] = 1; a[8] = 0.99645999; a[9] = -1.9999994; a[10] = -1.9805074; a[11] = 1; a[12] = 0.98069401; a[13] = 0.98817413; } void set_distortion_table(double *arr, double cut, double max, int len) { int i, j, len2; double samp; len2 = len / 2; // len>>1 ; // clean array; for(i = 0; i < len; i++){ arr[i] = 0.0; } // first half for( i = len2; i < len; i++ ){ samp = (double)(i - len2) / (double) len2 ; if( samp > cut ){ samp = mapp( samp, cut, 1.0, cut, max ); } arr[i] = samp; } for( i = len2 - 1, j = len2; i > 0; i--, j++ ) arr[i] = arr[j] * -1.0; } double dlookup(double samp,double *arr,int len) { double raw = (samp + 1.0) / 2.0; double scaled = raw * (double) len; int index = floor(scaled); if( index > len - 1) { index = len - 1; } else if( index < 0 ){ index = 0; } return arr[index]; } void do_compdist(double *in,double *out,int sampFrames,int nchans,int channel, double cutoff,double maxmult,int lookupflag,double *table,int range,double bufMaxamp) { int i; float rectsamp; for( i = channel ; i < sampFrames * nchans; i+= nchans ) { if( lookupflag){ *(out + i) = dlookup( *(in + i)/bufMaxamp, table, range ); } else { rectsamp = fabs( *(in + i) ) / bufMaxamp; if( rectsamp > cutoff ){ *(in + i) = *(out + i) * mapp( rectsamp, cutoff, 1.0, cutoff, maxmult); } } } } double getmaxamp(double *arr, int len) { int i; double max = 0; for(i = 0; i < len; i++ ){ if( fabs(arr[i]) > max ) max = fabs(arr[i]); } return max; } void buildadsr(CMIXADSR *a) { double A = a->a; double D = a->d; double S = a->s; double R = a->r; double f1 = a->v1; double f2 = a->v2; double f3 = a->v3; double f4 = a->v4; int funclen = a->len; double *func = a->func; double total; int ipoint = 0; int i; int segs[4]; double m1,m2; total = A + D + S + R ; segs[0] = (A/total) * funclen; segs[1] = (D/total) * funclen; segs[2] = (S/total) * funclen; segs[3] = funclen - (segs[0]+segs[1]+segs[2]); if( f1 > 20000. || f1 < -20000. ){ f1 = 250.0; } if( f2 > 20000. || f2 < -20000. ){ f2 = 1250.0; } if( f3 > 20000. || f3 < -20000. ){ f3 = 950.0; } if( f4 > 20000. || f4 < -20000. ){ f4 = f1; } if( segs[0] <= 0 || segs[1] <= 0 || segs[2] <= 0 || segs[3] <= 0 ){ for( i = 0; i < 4; i++ ){ segs[i] = funclen / 4; } } for( i = 0 ; i < segs[0]; i++ ){ m1 = 1.-(float)i/(float)(segs[0]); m2 = 1. - m1; *(func +i ) = f1 * m1 + f2 * m2; } ipoint = i; for( i = 0 ; i < segs[1]; i++ ){ m1 = 1.-(float)i/(float)(segs[1]); m2 = 1. - m1; *(func + i + ipoint) = f2 * m1 + f3 * m2; } ipoint += i; for( i = 0 ; i < segs[2]; i++ ){ m1 = 1.-(float)i/(float)(segs[2]); m2 = 1. - m1; *(func + i + ipoint) = f3; } ipoint += i; for( i = 0 ; i < segs[3]; i++ ){ m1 = 1.-(float)i/(float)(segs[3]); m2 = 1. - m1; *(func + ipoint + i) = f3 * m1 + f4 * m2; } ipoint += i; } /* Code from chameleon_dsp.c */ void ringmod(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double *sinewave = x->sinewave; int sinelen = x->sinelen; double *params = x->params; float srate = x->sr; long vs = x->vs; int i; double phase = 0.0; long iphase; double si; double rmodFreq; int ringmod_count; ++(*pcount); rmodFreq = params[(*pcount)++]; ringmod_count = params[(*pcount)++]; phase = x->ringmod_phases[ringmod_count]; si = ((double) sinelen / srate) * rmodFreq; for(i = 0; i < vs; i++ ){ iphase = (long) phase; buf1[i] = buf1[i] * sinewave[iphase]; buf2[i] = buf2[i] * sinewave[iphase]; phase += si; while( phase > sinelen ){ phase -= sinelen; } } x->ringmod_phases[ringmod_count] = phase; } void ringmod4(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double *sinewave = x->sinewave; int sinelen = x->sinelen; double *params = x->params; float srate = x->sr; long vs = x->vs; int i; double phase = 0.0; long iphase; double si; double rmodFreq; int ringmod_count; ++(*pcount); rmodFreq = params[(*pcount)++]; ringmod_count =params[(*pcount)++]; phase = x->ringmod4_phases[ringmod_count]; si = ((double) sinelen / srate) * rmodFreq; // ((a*a *b) - (a*b*b)) for(i = 0; i < vs; i++ ){ iphase = (long) phase; buf1[i] = (buf1[i] * buf1[i] * sinewave[iphase]) - (buf1[i] * sinewave[iphase] * sinewave[iphase]); buf2[i] = (buf2[i] * buf2[i] * sinewave[iphase]) - (buf2[i] * sinewave[iphase] * sinewave[iphase]); phase += si; while( phase > sinelen ){ phase -= sinelen; } } x->ringmod_phases[ringmod_count] = phase; } void comber(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double *delayline1; double *delayline2; double delay, revtime; long vs = x->vs; int i; int comb_dl_count; double *params = x->params; /******************************/ ++(*pcount); delay = params[(*pcount)++]; revtime = params[(*pcount)++]; comb_dl_count = params[(*pcount)++]; delayline1 = x->comb_delay_pool1[comb_dl_count]; delayline2 = x->comb_delay_pool2[comb_dl_count]; // ADD IN ORIGINAL SIGNAL for( i = 0; i < vs; i++){ buf1[i] += mycomb(buf1[i], delayline1); buf2[i] += mycomb(buf2[i], delayline2); } } void flange(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; double si; double mindel, maxdel; double fac1, fac2; double delsamp1, delsamp2; double delay_time; double speed, feedback, minres, maxres; double *params = x->params; double srate = x->sr; long vs = x->vs; double *flange_dl1; double *flange_dl2; double max_delay = x->max_flangedelay; double *sinewave = x->sinewave; int sinelen = x->sinelen; int *dv1 = x->flange_dv1; int *dv2 = x->flange_dv2; double phase = x->flange_phase; int flange_count; ++(*pcount); minres = params[(*pcount)++]; maxres = params[(*pcount)++]; speed = params[(*pcount)++]; feedback = params[(*pcount)++]; flange_count = params[(*pcount)++]; flange_dl1 = x->flange_units[flange_count].flange_dl1; flange_dl2 = x->flange_units[flange_count].flange_dl2; dv1 = x->flange_units[flange_count].dv1; dv2 = x->flange_units[flange_count].dv2; phase = x->flange_units[flange_count].phase; if( minres <= 0. || maxres <= 0. ){ pd_error(0, "flange: got zero frequency resonances as input"); return; } mindel = 1.0/maxres; maxdel = 1.0/minres; // added safety if( maxdel > max_delay * 0.99 ){ maxdel = max_delay * 0.99; pd_error(0, "flange: excessive delay time shortened"); } si = ((double)sinelen/srate) * speed; delsamp1 = delsamp2 = 0; fac2 = .5 * (maxdel - mindel); fac1 = mindel + fac2; for(i = 0; i < vs; i++ ){ /* homemade oscillator */ delay_time = fac1 + fac2 * sinewave[(int) phase]; if( delay_time < .00001 ){ delay_time = .00001; } else if(delay_time >= maxdel) { delay_time = maxdel; } phase += si; while( phase > sinelen ){ phase -= sinelen; } delput2(buf1[i] + delsamp1 * feedback, flange_dl1, dv1); delsamp1 = dliget2(flange_dl1, delay_time, dv1, srate); buf1[i] += delsamp1; delput2(buf2[i] + delsamp2 * feedback, flange_dl2, dv2); delsamp2 = dliget2(flange_dl2, delay_time, dv2, srate); buf2[i] += delsamp2; } x->flange_units[flange_count].phase = phase; } void butterme(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double *params = x->params; int butterworth_count; double *data1, *data2; long vs = x->vs; int ftype; double bw, cf; ++(*pcount); ftype = params[(*pcount)++]; cf = params[(*pcount)++]; bw = params[(*pcount)++]; butterworth_count = params[(*pcount)++]; data1 = x->butterworth_units[butterworth_count].data1; data2 = x->butterworth_units[butterworth_count].data2; butter_filter(buf1, data1, vs); butter_filter(buf2, data2, vs); } void bitcrush(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double *params = x->params; int bitcrush_count; double bitcrush_factor; long vs = x->vs; int i; ++(*pcount); bitcrush_count = params[(*pcount)++]; bitcrush_factor = params[(*pcount)++]; bitcrush_factor = x->bitcrush_factors[bitcrush_count]; for(i = 0; i < vs; i++){ buf1[i] = floor(buf1[i] * bitcrush_factor) / bitcrush_factor; buf2[i] = floor(buf2[i] * bitcrush_factor) / bitcrush_factor; } } void truncateme(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double *params = x->params; double env_gain; int truncate_count; long vs = x->vs; int i; long counter; long state; long segsamples; double samp1, samp2; ++(*pcount); truncate_count = params[(*pcount)++]; counter = x->truncate_units[truncate_count].counter; state = x->truncate_units[truncate_count].state; segsamples = x->truncate_units[truncate_count].segsamples; for(i = 0; i < vs; i++){ samp1 = buf1[i]; samp2 = buf2[i]; counter++; if( (state == 0) || (state == 1) || (state == 2) ){ buf1[i] = 0.05; // changed so not totally silent buf2[i] = 0.05; } else if( state == 3 ){ env_gain = (double)counter / (double)segsamples; buf1[i] = samp1 * env_gain; buf2[i] = samp2 * env_gain; } /* else if( (state == 4) || (state == 5) || (state == 6) ) { just output unprocessed sound } */ else if( state == 7 ){ env_gain = 1.0 - ((double)counter / (double)segsamples); buf1[i] = samp1 * env_gain; buf2[i] = samp2 * env_gain; } if( counter >= segsamples ){ if( state == 0){ segsamples = x->sr * boundrand(0.1, 2.0); // silence } else if( (state == 2) || (state == 6) ){ segsamples = x->sr * 0.05; // transition } else if(state == 4){ segsamples = x->sr * boundrand(1.0, 7.0); // sustain } else if( (state == 1 || (state == 3) || (state == 5) || (state == 7)) ){ segsamples = 1; // single sample transition to next state } counter = 0; state = (state + 1) % 8; } } x->truncate_units[truncate_count].state = state; x->truncate_units[truncate_count].segsamples = segsamples; x->truncate_units[truncate_count].counter = counter; // update count } void sweepreson(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; double *params = x->params; double bwfac; double minfreq, maxfreq, speed, phase; double *q1, *q2; double cf, bw; double si; double fac1, fac2; double srate = x->sr; long vs = x->vs; double *sinewave = x->sinewave; int sinelen = x->sinelen ; long sweepreson_count; ++(*pcount); sweepreson_count = params[(*pcount)++]; // note swapped location minfreq = params[(*pcount)++]; maxfreq = params[(*pcount)++]; bwfac = params[(*pcount)++]; speed = params[(*pcount)++]; phase = params[(*pcount)++]; // cannot use this, phase is reentrant minfreq = x->sweepreson_units[sweepreson_count].minfreq; maxfreq = x->sweepreson_units[sweepreson_count].maxfreq; bwfac = x->sweepreson_units[sweepreson_count].bwfac; speed = x->sweepreson_units[sweepreson_count].speed; phase = x->sweepreson_units[sweepreson_count].phase; q1 = x->sweepreson_units[sweepreson_count].q1; q2 = x->sweepreson_units[sweepreson_count].q2; si = ((double) sinelen / srate) * speed; fac2 = .5 * (maxfreq - minfreq) ; fac1 = minfreq + fac2; cf = fac1 + fac2 * sinewave[(int) phase]; bw = bwfac * cf; for(i = 0; i < vs; i++ ){ phase += si; while( phase >= sinelen ){ phase -= sinelen; } fac2 = .5 * (maxfreq - minfreq) ; fac1 = minfreq + fac2; if( phase < 0.0 || phase > sinelen - 1){ phase = 0; // post("sweepreson - sine phase out of bounds"); } cf = fac1 + fac2 * sinewave[(int) phase]; bw = bwfac * cf; if(cf < 10 || cf > 8000 || bw < 1 || srate < 100){ post("sweepreson - danger values, cf %f bw %f sr %f",cf, bw, srate); } // void rsnset2(double cf,double bw,double scl,double xinit,double *a,double srate) rsnset2( cf, bw, 2.0, 1.0, q1, srate ); rsnset2( cf, bw, 2.0, 1.0, q2, srate ); buf1[i] = reson(buf1[i], q1); buf2[i] = reson(buf2[i], q2); } x->sweepreson_units[sweepreson_count].phase = phase; } void slidecomb(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double feedback, delay1, delay2; int i; int *dv1, *dv2; /* cmix bookkeeping */ double delsamp1 = 0, delsamp2 = 0; double m1, m2; double delay_time; double *params = x->params; double srate = x->sr; double *delayline1; double *delayline2; int slidecomb_count; long vs = x->vs; long sample_length; long counter; ++(*pcount); slidecomb_count = params[(*pcount)++]; delay1 = params[(*pcount)++]; delay2 = params[(*pcount)++]; feedback = params[(*pcount)++]; sample_length = params[(*pcount)++]; delay1 = x->slidecomb_units[slidecomb_count].start_delay; delay2 = x->slidecomb_units[slidecomb_count].end_delay; sample_length = x->slidecomb_units[slidecomb_count].sample_length; counter = x->slidecomb_units[slidecomb_count].counter; feedback = x->slidecomb_units[slidecomb_count].feedback; dv1 = x->slidecomb_units[slidecomb_count].dv1; dv2 = x->slidecomb_units[slidecomb_count].dv2; delayline1 = x->slidecomb_units[slidecomb_count].delayline1; delayline2 = x->slidecomb_units[slidecomb_count].delayline2; for( i = 0; i < vs; i++){ if(counter < sample_length){ m2 = (double)counter / (double)sample_length; m1 = 1. - m2; delay_time = delay1 * m1 + delay2 * m2; counter++; } else { // implement switchback here double tmp; // post("swapping out slidecomb"); counter = 0; tmp = x->slidecomb_units[slidecomb_count].start_delay; delay1 = x->slidecomb_units[slidecomb_count].start_delay = x->slidecomb_units[slidecomb_count].end_delay; delay2 = x->slidecomb_units[slidecomb_count].end_delay = tmp; // delay_time = delay2; } if(delay_time > MAX_SLIDECOMB_DELAY){ delay_time = MAX_SLIDECOMB_DELAY; } else if(delay_time < 0.0){ delay_time = 0.0; } delput2(buf1[i] + (delsamp1 * feedback), delayline1, dv1); delsamp1 = dliget2(delayline1, delay_time, dv1, srate); buf1[i] = delsamp1; delput2(buf2[i] + delsamp2*feedback, delayline2, dv2); delsamp2 = dliget2(delayline2, delay_time, dv2, srate); buf2[i] = delsamp2; } x->slidecomb_units[slidecomb_count].dv1 = dv1; x->slidecomb_units[slidecomb_count].dv2 = dv2; x->slidecomb_units[slidecomb_count].counter = counter; } void slideflam(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { double feedback, delay1, delay2; int i; int *dv1, *dv2; /* cmix bookkeeping */ double delsamp1 = 0, delsamp2 = 0; double m1, m2; double delay_time; double *params = x->params; double srate = x->sr; double *delayline1; double *delayline2; int slideflam_count; long vs = x->vs; long sample_length; long counter; ++(*pcount); slideflam_count = params[(*pcount)++]; delay1 = params[(*pcount)++]; delay2 = params[(*pcount)++]; feedback = params[(*pcount)++]; sample_length = params[(*pcount)++]; /* params[pcount++] = SLIDEFLAM; params[pcount++] = slideflam_count; if( boundrand(0.0,1.0) > 0.1 ){ params[pcount++] = x->slideflam_units[slideflam_count].dt1 = boundrand(0.01,0.05); params[pcount++] = x->slideflam_units[slideflam_count].dt2 = boundrand(0.1,MAX_SLIDEFLAM_DELAY * 0.95); } else { params[pcount++] = x->slideflam_units[slideflam_count].dt1 = boundrand(0.1,MAX_SLIDEFLAM_DELAY * 0.95); params[pcount++] = x->slideflam_units[slideflam_count].dt2 = boundrand(0.01,0.05); } params[pcount++] = x->slideflam_units[slideflam_count].feedback = boundrand(0.7,0.99); params[pcount++] = x->slideflam_units[slideflam_count].sample_length = boundrand(0.25,4.0) * x->sr; */ delay1 = x->slideflam_units[slideflam_count].dt1; delay2 = x->slideflam_units[slideflam_count].dt2; sample_length = x->slideflam_units[slideflam_count].sample_length; counter = x->slideflam_units[slideflam_count].counter; feedback = x->slideflam_units[slideflam_count].feedback; dv1 = x->slideflam_units[slideflam_count].dv1; dv2 = x->slideflam_units[slideflam_count].dv2; delayline1 = x->slideflam_units[slideflam_count].delayline1; delayline2 = x->slideflam_units[slideflam_count].delayline2; for( i = 0; i < vs; i++){ if(counter < sample_length){ m2 = (double)counter / (double)sample_length; m1 = 1. - m2; delay_time = delay1 * m1 + delay2 * m2; counter++; } else { double tmp; counter = 0; // delay_time = delay2; counter = 0; tmp = x->slideflam_units[slideflam_count].dt1; delay1 = x->slideflam_units[slideflam_count].dt1 = x->slideflam_units[slideflam_count].dt2; delay2 = x->slideflam_units[slideflam_count].dt2 = tmp; } if( (delay_time < 0.0) || (delay_time >= MAX_SLIDEFLAM_DELAY) ){ if(DEBUG_CHAMELEON){ post("chameleon~: bad delay time: %f\n", delay_time); } delay_time = MAX_SLIDEFLAM_DELAY; } delput2(buf1[i] + (delsamp1 * feedback), delayline1, dv1); delsamp1 = dliget2(delayline1, delay_time, dv1, srate); buf1[i] = delsamp1; delput2(buf2[i] + delsamp2*feedback, delayline2, dv2); delsamp2 = dliget2(delayline2, delay_time, dv2, srate); buf2[i] = delsamp2; } x->slideflam_units[slideflam_count].dv1 = dv1; x->slideflam_units[slideflam_count].dv2 = dv2; x->slideflam_units[slideflam_count].counter = counter; } void bendy(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { // double feedback, delay1, delay2; int i; int *dv1, *dv2; /* cmix bookkeeping */ double delsamp1 = 0, delsamp2 = 0; double delay_time; double *params = x->params; double srate = x->sr; double *delayline1; double *delayline2; int bendy_count; long vs = x->vs; long counter; long segment_samples; double frak; double val1, val2; double segdur; ++(*pcount); bendy_count = params[(*pcount)++]; val1 = params[(*pcount)++]; val2 = params[(*pcount)++]; counter = x->bendy_units[bendy_count].counter; val1 = x->bendy_units[bendy_count].val1; val2 = x->bendy_units[bendy_count].val2; dv1 = x->bendy_units[bendy_count].dv1; dv2 = x->bendy_units[bendy_count].dv2; delayline1 = x->bendy_units[bendy_count].delayline1; delayline2 = x->bendy_units[bendy_count].delayline2; segment_samples = x->bendy_units[bendy_count].segment_samples; for( i = 0; i < vs; i++){ if(counter <= 0){ val1 = val2; val2 = boundrand(0.01,BENDY_MAXDEL); segdur = boundrand(BENDY_MINSEG, BENDY_MAXSEG); counter = (long) (segdur * srate); segment_samples = counter; // post("v1 %f v2 %f segsamps %d\n", val1,val2, segment_samples); } frak = 1.0 - ((double)counter / (double) segment_samples); delay_time = val2 + (frak * (val1 - val2)); if(delay_time > BENDY_MAXDEL){ delay_time = BENDY_MAXDEL; } else if(delay_time < 0.0){ delay_time = 0.0; } delput2(buf1[i], delayline1, dv1); // this is a crasher delsamp1 = dliget2(delayline1, delay_time, dv1, srate); buf1[i] = delsamp1; delput2(buf2[i], delayline2, dv2); delsamp2 = dliget2(delayline2, delay_time, dv2, srate); buf2[i] = delsamp2; counter--; } x->bendy_units[bendy_count].counter = counter; x->bendy_units[bendy_count].val1 = val1; x->bendy_units[bendy_count].val2 = val2; x->bendy_units[bendy_count].dv1 = dv1; x->bendy_units[bendy_count].dv2 = dv2; x->bendy_units[bendy_count].segment_samples = segment_samples; } void reverb1(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { float revtime; double *params = x->params; long vs = x->vs; int reverb1_count; double wet, dry, raw_wet; double a1,a2,a3,a4; double **alpo1, **alpo2; int nsects; double xnorm; LSTRUCT *eel1, *eel2; double *dels; int i; ++(*pcount); reverb1_count = params[(*pcount)++]; revtime = params[(*pcount)++]; raw_wet = params[(*pcount)++]; wet = sin(1.570796 * raw_wet); dry = cos(1.570796 * raw_wet); dels = x->reverb1_units[reverb1_count].dels; for(i = 0; i < 4; i++){ dels[i] = params[(*pcount)++]; } wet = x->reverb1_units[reverb1_count].wet; dry = x->reverb1_units[reverb1_count].dry; revtime = x->reverb1_units[reverb1_count].revtime; alpo1 = x->reverb1_units[reverb1_count].alpo1; alpo2 = x->reverb1_units[reverb1_count].alpo2; nsects = x->reverb1_units[reverb1_count].nsects; xnorm = x->reverb1_units[reverb1_count].xnorm; eel1 = x->reverb1_units[reverb1_count].eel1; eel2 = x->reverb1_units[reverb1_count].eel2; if( revtime >= 1. ){ pd_error(0, "reverb1 does not like feedback values over 1."); revtime = .99 ; } for( i = 0 ; i < vs; i++){ a1 = allpass(buf1[i], alpo1[0]); a2 = allpass(buf1[i], alpo1[1]); a3 = allpass(buf1[i], alpo1[2]); a4 = allpass(buf1[i], alpo1[3]); buf1[i] = (buf1[i] * dry) + (ellipse((a1+a2+a3+a4), eel1, nsects,xnorm) * wet); a1 = allpass(buf2[i], alpo2[0]); a2 = allpass(buf2[i], alpo2[1]); a3 = allpass(buf2[i], alpo2[2]); a4 = allpass(buf2[i], alpo2[3]); buf2[i] = (buf2[i] * dry) + (ellipse((a1+a2+a3+a4), eel2, nsects,xnorm) * wet); } } void ellipseme(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; int nsects; double xnorm; int ellipseme_count; double *params = x->params; long vs = x->vs; int filtercode; LSTRUCT *eel1, *eel2; ++(*pcount); ellipseme_count = params[(*pcount)++]; filtercode = params[(*pcount)++]; eel1 = x->ellipseme_units[ellipseme_count].eel1; eel2 = x->ellipseme_units[ellipseme_count].eel2; nsects = x->ellipseme_units[ellipseme_count].nsects; xnorm = x->ellipseme_units[ellipseme_count].xnorm; for( i = 0; i < vs; i++){ buf1[i] = ellipse(buf1[i], eel1, nsects, xnorm); buf2[i] = ellipse(buf2[i], eel2, nsects, xnorm); } } void feed1me(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; int feed1_count; double *params = x->params; long vs = x->vs; double mindelay, maxdelay, speed1, speed2; double srate = x->sr; double *func1; double *func2; double *func3; double *func4; double *delayLine1a; double *delayLine2a; double *delayLine1b; double *delayLine2b; int *dv1a, *dv2a; /* cmix bookkeeping */ int *dv1b, *dv2b; /* cmix bookkeeping */ double delsamp1a=0, delsamp2a=0 ; double delsamp1b=0, delsamp2b=0 ; double delay1, delay2, feedback1, feedback2; double funcSi, funcPhs; double putsamp; double duration; long ddl_func_len = (long) (x->sr * MAX_MINI_DELAY); ++(*pcount); feed1_count = params[(*pcount)++]; mindelay = params[(*pcount)++]; maxdelay = params[(*pcount)++]; speed1 = params[(*pcount)++]; speed2 = params[(*pcount)++]; duration = params[(*pcount)++]; func1 = x->feed1_units[feed1_count].func1; func2 = x->feed1_units[feed1_count].func2; func3 = x->feed1_units[feed1_count].func3; func4 = x->feed1_units[feed1_count].func4; delayLine1a = x->feed1_units[feed1_count].delayLine1a; delayLine2a = x->feed1_units[feed1_count].delayLine2a; delayLine1b = x->feed1_units[feed1_count].delayLine1b; delayLine2b = x->feed1_units[feed1_count].delayLine2b; dv1a = x->feed1_units[feed1_count].dv1a; dv2a = x->feed1_units[feed1_count].dv2a; dv1b = x->feed1_units[feed1_count].dv1b; dv2b = x->feed1_units[feed1_count].dv2b; mindelay = x->feed1_units[feed1_count].mindelay; maxdelay = x->feed1_units[feed1_count].maxdelay; speed1 = x->feed1_units[feed1_count].speed1; speed2 = x->feed1_units[feed1_count].speed2; duration = x->feed1_units[feed1_count].duration; if( maxdelay > MAX_MINI_DELAY ){ pd_error(0, "feed1: too high max delay, adjusted"); maxdelay = MAX_MINI_DELAY; } funcSi = ((double) FEEDFUNCLEN / srate) / duration; funcPhs = x->feed1_units[feed1_count].funcPhs; for(i = 0; i < vs; i++){ delay1 = func1[ (int) funcPhs ]; delay2 = func2[ (int) funcPhs ]; if(delay1 < 0.0){ delay1 = 0.0; } else if (delay1 > ddl_func_len){ delay1 = ddl_func_len - 1; } if(delay2 < 0.0){ delay2 = 0.0; } else if (delay2 > ddl_func_len){ delay2 = ddl_func_len - 1; } feedback1 = func3[ (int) funcPhs ]; feedback2 = func4[ (int) funcPhs ]; funcPhs += funcSi; if( funcPhs >= (double) FEEDFUNCLEN ){ funcPhs = 0.0; } buf1[i] = buf1[i] + delsamp1a * feedback1; delput2( putsamp, delayLine1a, dv1a); delsamp1a = dliget2(delayLine1a, delay1, dv1a, srate); putsamp = delsamp1a + (delsamp2a * feedback2); delput2( putsamp, delayLine2a, dv2a); delsamp2a = dliget2(delayLine2a, delay2, dv2a, srate); buf1[i] += delsamp2a; putsamp = buf2[i] + delsamp1b * feedback1; buf2[i] = putsamp; // zero instead ?? delput2( putsamp, delayLine1b, dv1b); delsamp1b = dliget2(delayLine1b, delay1, dv1b,srate); putsamp = delsamp1b + (delsamp2b * feedback2); delput2( putsamp, delayLine2b, dv2b); delsamp2b = dliget2(delayLine2b, delay2, dv2b, srate); buf2[i] += delsamp2b; } x->feed1_units[feed1_count].funcPhs = funcPhs; } void flam1(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; int flam1_count; int *dv1, *dv2; double *delayline1, *delayline2, delaytime; long counter, sample_length; double *params = x->params; double srate = x->sr; long vs = x->vs; double feedback; double delsamp1 = 0, delsamp2 = 0; ++(*pcount); flam1_count = params[(*pcount)++]; sample_length = params[(*pcount)++]; delaytime = params[(*pcount)++]; delaytime = x->flam1_units[flam1_count].dt; sample_length = x->flam1_units[flam1_count].sample_length; counter = x->flam1_units[flam1_count].counter; dv1 = x->flam1_units[flam1_count].dv1; dv2 = x->flam1_units[flam1_count].dv2; delayline1 = x->flam1_units[flam1_count].delayline1; delayline2 = x->flam1_units[flam1_count].delayline2; if(delaytime >= FLAM1_MAX_DELAY){ delaytime = FLAM1_MAX_DELAY * 0.99; } else if(delaytime < 0.0){ delaytime = 0.0; } for( i = 0; i < vs; i++){ if( counter < sample_length ){ feedback = 1.0 - ((double)counter / (double)sample_length); delput2(buf1[i] + (delsamp1 * feedback), delayline1, dv1); delsamp1 = dliget2(delayline1, delaytime, dv1, srate); buf1[i] += delsamp1; delput2(buf2[i] + delsamp2*feedback, delayline2, dv2); delsamp2 = dliget2(delayline2, delaytime, dv2, srate); buf2[i] += delsamp2; } counter++; if( counter >= sample_length){ counter = 0; } } x->flam1_units[flam1_count].counter = counter; } void comb4(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i, j; double insamp; double *params = x->params; long vs = x->vs; int comb4_count; double basefreq; int dex; // throwaway ++(*pcount); comb4_count = params[(*pcount)++]; basefreq = params[(*pcount)++]; for(i = 0; i < 4; i++){ dex = params[(*pcount)++]; } /* params[pcount++] = COMB4; params[pcount++] = comb4_count; rvt = 0.99; params[pcount++] = basefreq = boundrand(100.0,400.0); for( i = 0; i < 4; i++ ){ dex = (int)floor( boundrand(0.0, 4.0)); lpt = 1. / basefreq; if( dex > 4) { dex = 4; }; params[pcount++] = dex; basefreq *= ratios[dex]; mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs1[i], x->sr); mycombset(lpt, rvt, 0, x->comb4_units[comb4_count].combs2[i], x->sr); } */ for(i = 0; i < vs; i++){ insamp = buf1[i]; buf1[i] = 0.0; for(j = 0; j < 4; j++){ buf1[i] += mycomb(insamp, x->comb4_units[comb4_count].combs1[j]) * 0.25; } insamp = buf2[i]; buf2[i] = 0.0; for(j = 0; j < 4; j++){ buf2[i] += mycomb(insamp, x->comb4_units[comb4_count].combs2[j]) * 0.25; } } } void compdist(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; // double *params = x->params; long vs = x->vs; double *distortion_function = x->distortion_function; int distortion_length = x->distortion_length; // double insamp; ++(*pcount); for(i = 0; i < vs; i++){ buf1[i] = dlookup(buf1[i], distortion_function, distortion_length); buf2[i] = dlookup(buf2[i], distortion_function, distortion_length); } } void ringfeed(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; //, k; /* main variables */ double *params = x->params; long vs = x->vs; /*function specific*/ int ringfeed_count; double si1, si2, osc1phs, osc2phs; double rescale = 1.5; double cf, bw, lpt, rvt; ++(*pcount); ringfeed_count = params[(*pcount)++]; cf = params[(*pcount)++]; bw = params[(*pcount)++]; si1 = params[(*pcount)++]; si2 = params[(*pcount)++]; lpt = params[(*pcount)++]; rvt = params[(*pcount)++]; /* params[pcount++] = RINGFEED; params[pcount++] = ringfeed_count; params[pcount++] = cf = boundrand(90.0,1500.0); params[pcount++] = bw = boundrand(0.02,0.4) * cf; params[pcount++] = x->resonfeed_units[ringfeed_count].osc1si = boundrand(90.0,1500.0) * ((double)x->sinelen / x->sr); params[pcount++] = x->resonfeed_units[ringfeed_count].osc2si = boundrand(90.0,1500.0) * ((double)x->sinelen / x->sr); params[pcount++] = lpt = 1.0 / boundrand(90.0,1500.0); params[pcount++] = rvt = boundrand(.01,.8); */ si1 = x->resonfeed_units[ringfeed_count].osc1si; si2 = x->resonfeed_units[ringfeed_count].osc2si; osc1phs = x->resonfeed_units[ringfeed_count].osc1phs; osc2phs = x->resonfeed_units[ringfeed_count].osc2phs; for(i = 0; i < vs; i++){ buf1[i] *= oscil(1.0, si1, x->sinewave, x->sinelen, &osc1phs); buf1[i] += mycomb(buf1[i], x->resonfeed_units[ringfeed_count].comb1arr); buf1[i] = reson(buf1[i], x->resonfeed_units[ringfeed_count].res1q) * rescale; buf2[i] *= oscil(1.0, si2,x->sinewave, x->sinelen, &osc2phs); buf2[i] += mycomb(buf2[i], x->resonfeed_units[ringfeed_count].comb2arr); buf2[i] = reson(buf2[i], x->resonfeed_units[ringfeed_count].res2q) * rescale; } x->resonfeed_units[ringfeed_count].osc1phs = osc1phs; x->resonfeed_units[ringfeed_count].osc2phs = osc2phs; } void resonadsr(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; float bwfac; double *q1, *q2; float cf, bw; float si; double phase; double *params = x->params; float srate = x->sr; long vs = x->vs; int resonadsr_count; double a,d,r,v1,v2,v3,v4,notedur; /*function specific*/ int funclen; double *adsrfunc; ++(*pcount); resonadsr_count = params[(*pcount)++]; a = params[(*pcount)++]; d = params[(*pcount)++]; r = params[(*pcount)++]; v1 = params[(*pcount)++]; v2 = params[(*pcount)++]; v3 = params[(*pcount)++]; v4 = params[(*pcount)++]; bwfac = params[(*pcount)++]; notedur = params[(*pcount)++]; /* params[pcount++] = RESONADSR; params[pcount++] = resonadsr_count; params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->a = boundrand(.01,.1); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->d = boundrand(.01,.05); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->r = boundrand(.05,.5); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v1 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v2 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v3 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].adsr->v4 = boundrand(150.0,4000.0); params[pcount++] = x->resonadsr_units[resonadsr_count].bwfac = boundrand(.03,.7); params[pcount++] = notedur = boundrand(0.7, 1.2); x->resonadsr_units[resonadsr_count].phs = 0.0; */ q1 = x->resonadsr_units[resonadsr_count].q1; q2 = x->resonadsr_units[resonadsr_count].q2; phase = x->resonadsr_units[resonadsr_count].phs; adsrfunc = x->resonadsr_units[resonadsr_count].adsr->func; funclen = x->resonadsr_units[resonadsr_count].adsr->len; si = x->resonadsr_units[resonadsr_count].si; bwfac = x->resonadsr_units[resonadsr_count].bwfac; for(i = 0; i < vs; i++){ cf = adsrfunc[ (int) phase ]; bw = bwfac * cf; phase += si; // this could be DANGEROUS: if( phase > funclen - 1){ phase = funclen - 1; } rsnset2( cf, bw, 2.0, 1.0, q1, srate ); rsnset2( cf, bw, 2.0, 1.0, q2, srate ); buf1[i] = reson(buf1[i], q1); buf2[i] = reson(buf2[i], q2); } } void stv(t_chameleon *x, long *pcount, t_double *buf1, t_double *buf2) { int i; /* main variables */ double *params = x->params; float srate = x->sr; long vs = x->vs; int stv_count; /*function specific*/ double *sinewave = x->sinewave; int sinelen = x->sinelen ; double *delayline1; double *delayline2; double fac1, fac2; int *dv1, *dv2; /* cmix bookkeeping */ double delay_time; double si1, si2, speed1, speed2, maxdelay; double osc1phs, osc2phs; ++(*pcount); stv_count = params[(*pcount)++]; speed1 = params[(*pcount)++]; speed2 = params[(*pcount)++]; maxdelay = params[(*pcount)++]; dv1 = x->stv_units[stv_count].dv1; dv2 = x->stv_units[stv_count].dv2; delayline1 = x->stv_units[stv_count].delayline1; delayline2 = x->stv_units[stv_count].delayline2; si1 = x->stv_units[stv_count].osc1si; si2 = x->stv_units[stv_count].osc2si; osc1phs = x->stv_units[stv_count].osc1phs; osc2phs = x->stv_units[stv_count].osc2phs; fac1 = x->stv_units[stv_count].fac1; fac2 = x->stv_units[stv_count].fac2; for(i = 0; i < vs; i++){ delay_time = fac1 + oscil(fac2, si1, sinewave, sinelen, &osc1phs); if(delay_time < 0.0){ delay_time = 0.0; } else if( delay_time > STV_MAX_DELAY){ delay_time = STV_MAX_DELAY; } delput2( buf1[i], delayline1, dv1); buf1[i] = dliget2(delayline1, delay_time, dv1,srate); delay_time = fac1 + oscil(fac2, si2, sinewave, sinelen, &osc2phs); if(delay_time < 0.0){ delay_time = 0.0; } else if( delay_time > STV_MAX_DELAY){ delay_time = STV_MAX_DELAY; } delput2( buf2[i], delayline2, dv2); buf2[i] = dliget2(delayline2, delay_time, dv2,srate); } x->stv_units[stv_count].osc1phs = osc1phs; x->stv_units[stv_count].osc2phs = osc2phs; x->stv_units[stv_count].dv1 = dv1; x->stv_units[stv_count].dv2 = dv2; } pd-lyonpotpourri-3.0.1/channel~-help.pd000066400000000000000000000037161430526361000201510ustar00rootroot00000000000000#N canvas 600 60 641 760 12; #X floatatom 37 714 5 0 0 0 - - -; #X obj 37 684 snapshot~; #X obj 37 275 / 64; #X floatatom 37 300 5 0 0 0 - - -; #X obj 37 453 osc~; #X obj 37 564 sqrt~; #X obj 37 527 *~; #X obj 87 527 *~; #X msg 204 542 channel \$1; #X floatatom 204 518 5 0 0 0 - - -; #X obj 37 478 rfft~; #X obj 130 678 metro 250; #X floatatom 62 339 5 0 0 0 - - -; #X text 106 337 harmonic to synthesize; #X msg 204 245 2; #X obj 172 167 loadbang; #X text 247 516 index to monitor; #X obj 130 625 loadbang; #X msg 130 649 1; #X text 248 501 signal vector; #X obj 38 18 lpp-icon channel~; #X text 34 122 [channel~] - utility to probe a specific position within a signal vector. Useful for examining FFT data.; #X obj 37 591 lyonpotpourri/channel~ 1; #X obj 37 222 samplerate~; #X floatatom 37 253 5 0 0 0 - - -; #X obj 172 190 t b b; #X msg 349 659 \; pd dsp \$1; #X obj 349 631 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 81 275 assume vector size of 64 samples; #X floatatom 37 420 5 0 0 0 - - -; #X obj 37 386 * 1; #X obj 62 361 t b f; #X text 76 301 FFT fundantal frequency of analysis; #X text 218 588 arg: initial vector index to probe; #X text 263 49 - probe a fixed index within a signal vector; #X text 78 423 manually change this to see what happens when the frequency does not exactly match a harmonic of the analysis frequency; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 30 0; #X connect 4 0 10 0; #X connect 5 0 22 0; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 8 0 22 0; #X connect 9 0 8 0; #X connect 10 0 6 0; #X connect 10 0 6 1; #X connect 10 1 7 1; #X connect 10 1 7 0; #X connect 11 0 1 0; #X connect 12 0 31 0; #X connect 14 0 12 0; #X connect 14 0 9 0; #X connect 15 0 25 0; #X connect 17 0 18 0; #X connect 18 0 11 0; #X connect 22 0 1 0; #X connect 23 0 24 0; #X connect 24 0 2 0; #X connect 25 0 23 0; #X connect 25 1 14 0; #X connect 27 0 26 0; #X connect 29 0 4 0; #X connect 30 0 29 0; #X connect 31 0 30 0; #X connect 31 1 30 1; pd-lyonpotpourri-3.0.1/channel~.c000066400000000000000000000035011430526361000170320ustar00rootroot00000000000000#include "MSPd.h" static t_class *channel_class; typedef struct _channel { t_object x_obj; float x_f; void *float_outlet; int channel; } t_channel; #define OBJECT_NAME "channel~" static void *channel_new(t_symbol *s, int argc, t_atom *argv); static t_int *channel_perform(t_int *w); static void channel_dsp(t_channel *x, t_signal **sp); static void channel_channel(t_channel *x, t_floatarg chan) ; //static void channel_int(t_channel *x, long chan) ; #define NO_FREE_FUNCTION 0 void channel_tilde_setup(void) { channel_class = class_new(gensym("channel~"), (t_newmethod)channel_new, NO_FREE_FUNCTION,sizeof(t_channel), 0,A_GIMME,0); CLASS_MAINSIGNALIN(channel_class, t_channel, x_f); class_addmethod(channel_class, (t_method)channel_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(channel_class,(t_method)channel_channel,gensym("channel"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void channel_channel(t_channel *x, t_floatarg chan) { if(chan >= 0) x->channel = (int) chan; } void channel_int(t_channel *x, long chan) { if(chan >= 0) x->channel = (int) chan; } void *channel_new(t_symbol *s, int argc, t_atom *argv) { t_channel *x = (t_channel *)pd_new(channel_class); outlet_new(&x->x_obj, gensym("signal")); x->channel = (int)atom_getfloatarg(0,argc,argv); return (x); } t_int *channel_perform(t_int *w) { t_channel *x = (t_channel *) (w[1]); t_float *in_vec = (t_float *)(w[2]); t_float *out_vec = (t_float *)(w[3]); int n = (int) w[4]; int channel = x->channel; float value; if(channel < 0 || channel > n) { return w + 5; } value = in_vec[channel]; while( n-- ) { *out_vec++ = value; } return w + 5; } void channel_dsp(t_channel *x, t_signal **sp) { dsp_add(channel_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/chopper~-help.pd000066400000000000000000000137431430526361000202020ustar00rootroot00000000000000#N canvas 600 60 826 590 12; #N canvas 0 22 450 300 (subpatch) 0; #X array sound1 62079 float 2; #X coords 0 1 62079 -1 100 70 1; #X restore 402 311 graph; #N canvas 292 428 828 406 load-soundfile 0; #X obj 185 263 soundfiler; #X msg 184 189 bang; #X obj 184 215 openpanel; #X msg 184 237 read -resize \$1 sound1; #X obj 95 121 loadbang; #X msg 95 146 read -resize sound/voice.wav sound1; #X text 353 235 <- use a fairly long and varied sound here; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 0 0; #X connect 4 0 5 0; #X connect 5 0 0 0; #X restore 221 236 pd load-soundfile; #X obj 45 169 r chopper.demo.msgs; #X obj 273 169 r chopper.demo.msgs; #X obj 45 229 lpp-meters; #X obj 40 17 lpp-icon chopper~; #X text 264 49 - an algorithmic array chopper; #N canvas 633 279 754 935 basic_controls 0; #X msg 49 106 force_new; #X msg 198 132 lockme \$1; #X obj 198 94 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1 ; #X floatatom 200 173 5 0 0 0 - minincr -; #X floatatom 316 171 5 0 0 0 - maxincr -; #X floatatom 329 228 5 0 0 0 - minseg -; #X floatatom 432 228 5 0 0 0 - maxseg -; #X msg 329 249 set_minseg \$1; #X msg 432 249 set_maxseg \$1; #X msg 316 192 set_maxincr \$1; #X msg 200 194 set_minincr \$1; #X obj 28 602 hsl 128 15 0.1 0.9999 0 0 minincr minincr-init minincr -2 -6 0 8 -252672 -1 -1 5645 1; #X obj 28 633 hsl 128 15 1.0001 10 0 0 maxincr maxincr-init maxincr -2 -6 0 8 -252672 -1 -1 1411 1; #N canvas 0 23 470 320 init 0; #X obj 27 150 s minincr-init; #X msg 27 123 0.5; #X obj 134 149 s maxincr-init; #X msg 134 122 2; #X obj 27 4 loadbang; #X obj 245 147 s minseg-init; #X obj 352 146 s maxseg-init; #X msg 245 120 100; #X obj 323 91 s fixed-incr-init; #X msg 323 64 1; #X msg 352 119 2000; #X connect 1 0 0 0; #X connect 3 0 2 0; #X connect 4 0 3 0; #X connect 4 0 1 0; #X connect 4 0 7 0; #X connect 4 0 10 0; #X connect 4 0 9 0; #X connect 7 0 5 0; #X connect 9 0 8 0; #X connect 10 0 6 0; #X restore 275 51 pd init; #X obj 28 664 hsl 128 15 3 300 0 0 minseg minseg-init minseg -2 -6 0 8 -252672 -1 -1 4148 1; #X obj 28 695 hsl 128 15 20 2000 0 0 maxseg maxseg-init maxseg -2 -6 0 8 -252672 -1 -1 12700 1; #X msg 362 444 fixed_increment \$1; #X obj 49 8 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1; #X obj 49 53 metro 120000; #X obj 365 358 hsl 50 10 0.1 5 0 0 empty empty empty -2 -8 0 10 -174016 -1 -1 0 1; #X floatatom 362 414 5 0 0 0 - - -; #X obj 433 357 r fixed-incr-init; #X obj 316 363 t b; #X msg 316 384 0; #X obj 49 517 s chopper.demo.msgs; #X text 25 568 individual parametric controls for new loops; #X text 408 416 set all loops to the same increment; #X text 228 101 lock current loop; #X text 54 87 force a new loop; #X text 87 17 new loop every 2 minutes; #X connect 0 0 24 0; #X connect 1 0 24 0; #X connect 2 0 1 0; #X connect 3 0 10 0; #X connect 4 0 9 0; #X connect 5 0 7 0; #X connect 6 0 8 0; #X connect 7 0 24 0; #X connect 8 0 24 0; #X connect 9 0 22 0; #X connect 9 0 24 0; #X connect 10 0 22 0; #X connect 10 0 24 0; #X connect 16 0 24 0; #X connect 17 0 18 0; #X connect 18 0 0 0; #X connect 19 0 20 0; #X connect 20 0 16 0; #X connect 21 0 20 0; #X connect 22 0 23 0; #X connect 23 0 20 0; #X restore 221 262 pd basic_controls; #N canvas 480 42 490 355 deviations 0; #X msg 48 244 rdur \$1; #X floatatom 48 220 5 0 0 0 - rdur -; #X obj 49 102 hsl 128 15 0 1 0 0 rdur rdur-init rdur -2 -6 0 8 -252672 -1 -1 0 1; #X obj 49 134 hsl 128 15 0 1 0 0 rinc rinc-init rinc -2 -6 0 8 -252672 -1 -1 0 1; #X floatatom 112 220 5 0 0 0 - rinc -; #X msg 112 244 rinc \$1; #X floatatom 180 220 5 0 0 0 - jitter -; #X msg 180 244 jitter \$1; #X obj 49 166 hsl 128 15 0 1 0 0 jitter jitter-init jitter -2 -6 0 8 -252672 -1 -1 0 1; #X obj 48 297 s chopper.demo.msgs; #X text 43 51 Parametric controls to deviate a locked loop; #X text 189 101 factor to vary loop duration; #X text 189 130 factor to vary loop increment; #X text 189 159 factor to vary loop start time; #X connect 0 0 9 0; #X connect 1 0 0 0; #X connect 4 0 5 0; #X connect 5 0 9 0; #X connect 6 0 7 0; #X connect 7 0 9 0; #X restore 221 314 pd deviations; #N canvas 0 23 490 340 refinements 0; #X obj 38 29 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1 ; #X msg 38 74 adjust_inverse \$1; #X msg 95 123 taper \$1; #X floatatom 95 100 5 0 0 0 - taper-dur -; #X obj 57 217 hsl 128 15 1 100 0 0 taper-dur taper-dur-init taper-dur -2 -6 0 8 -252672 -1 -1 0 1; #X text 78 29 maintains loop duration; #X text 77 43 under increment change; #X obj 38 149 s chopper.demo.msgs; #X text 145 101 fadein and fadeout time for loops (ms); #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 7 0; #X connect 3 0 2 0; #X restore 221 340 pd refinements; #N canvas 0 23 462 312 system 0; #X obj 38 29 tgl 30 0 empty empty empty 0 -6 0 8 -257985 -1 -1 0 1 ; #X msg 38 74 mute \$1; #X msg 111 122 seed 6331; #X obj 38 155 s chopper.demo.msgs; #X text 110 105 set random seed (might be helpful for stereo); #X text 100 76 mute object; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 2 0 3 0; #X restore 221 366 pd system; #N canvas 600 60 748 448 store_loops 0; #X msg 200 211 show_loop; #X msg 208 294 set_loop 1000 25000 1.62; #X obj 39 338 s chopper.demo.msgs; #X msg 39 51 store_loop 0; #X msg 79 113 store_loop 1; #X msg 98 144 recall_loop 1; #X msg 59 73 recall_loop 0; #X text 141 53 store loop at location 0; #X text 168 78 recall that loop; #X text 181 113 store loop at location 1; #X text 202 145 recall that loop; #X text 204 259 use numbers that come from show_loop: [start (in samples) \, duration (in samples) \, increment]; #X text 274 216 show current loop values; #X text 42 12 1024 storage locations available; #X connect 0 0 2 0; #X connect 1 0 2 0; #X connect 3 0 2 0; #X connect 4 0 2 0; #X connect 5 0 2 0; #X connect 6 0 2 0; #X restore 221 288 pd store_loops; #X text 482 194 arg: name of array holding sound file; #X text 41 116 This object plays random segments from an array with optional looping.; #X obj 45 192 lyonpotpourri/chopper~ sound1; #X obj 273 192 lyonpotpourri/chopper~ sound1; #X connect 2 0 14 0; #X connect 3 0 15 0; #X connect 14 0 4 0; #X connect 15 0 4 1; pd-lyonpotpourri-3.0.1/chopper~.c000066400000000000000000000617371430526361000171010ustar00rootroot00000000000000#include "MSPd.h" static t_class *chopper_class; #define MAXSTORE 1024 #define OBJECT_NAME "chopper~" typedef struct _chopper { t_object x_obj; float x_f; t_symbol *l_sym; long l_chan; float increment; double fbindex; float buffer_duration; float minseg; float maxseg; float segdur; float minincr; float maxincr; int loop_samps; int samps_to_go ; int loop_start; int bindex ; int taper_samps; int loop_min_samps; int loop_max_samps; float R; float ldev; float st_dev ; int lock_loop; int force_new_loop; int framesize; short mute; short disabled; int setup_chans; int *stored_starts; int *stored_samps; float *stored_increments; short preempt; short loop_engaged; short data_recalled; short initialize_loop; short fixed_increment_on; float fixed_increment; float retro_odds; float fade_level; int transp_loop_samps; float taper_duration; short lock_terminated; int preempt_samps; int preempt_count; short recalling_loop; float jitter_factor; float rdur_factor; float rinc_factor; short increment_adjusts_loop ; short loop_adjust_inverse; long b_frames; long b_nchans; t_word *b_samples; } t_chopper; //static t_int *chopper_perform_stereo(t_int *w); //static t_int *choppermono_perform(t_int *w); //static t_int *chopper_perform_stereo_nointerpol(t_int *w); //static t_int *chopper_perform_mono(t_int *w); static t_int *chopper_pd_perform(t_int *w); static void chopper_dsp(t_chopper *x, t_signal **sp); static void chopper_set(t_chopper *x, t_symbol *s); static void chopper_mute(t_chopper *x, t_floatarg toggle); static void chopper_increment_adjust(t_chopper *x, t_floatarg toggle); static void chopper_adjust_inverse(t_chopper *x, t_floatarg toggle); static void *chopper_new(t_symbol *msg, int argc, t_atom *argv); //static void chopper_in1(t_chopper *x, long n); static void chopper_set_minincr(t_chopper *x, t_floatarg n); static void chopper_set_maxincr(t_chopper *x, t_floatarg n); static void chopper_set_minseg(t_chopper *x, t_floatarg n); static void chopper_set_maxseg(t_chopper *x, t_floatarg n); static void chopper_taper(t_chopper *x, t_floatarg f); static void chopper_fixed_increment(t_chopper *x, t_floatarg f); static void chopper_lockme(t_chopper *x, t_floatarg n); static void chopper_force_new(t_chopper *x); static float chopper_boundrand(float min, float max); //static void chopper_assist(t_chopper *x, void *b, long m, long a, char *s); //static void chopper_dblclick(t_chopper *x); static void chopper_show_loop(t_chopper *x); static void chopper_set_loop(t_chopper *x, t_symbol *msg, int argc, t_atom *argv); static void chopper_randloop( t_chopper *x); static void chopper_store_loop(t_chopper *x, t_floatarg loop_bindex); static void chopper_recall_loop(t_chopper *x, t_floatarg loop_bindex); static void chopper_free(t_chopper *x) ; static void chopper_retro_odds(t_chopper *x, t_floatarg f); static void chopper_jitter(t_chopper *x, t_floatarg f); static void chopper_jitterme(t_chopper *x); static void chopper_rdur(t_chopper *x, t_floatarg f); static void chopper_rdurme(t_chopper *x); static void chopper_rinc(t_chopper *x, t_floatarg f); static void chopper_rincme(t_chopper *x); static void chopper_adjust_inverse(t_chopper *x, t_floatarg toggle); //static t_int *chopper_performtest(t_int *w); static void chopper_init(t_chopper *x, short initialized); static void chopper_seed(t_chopper *x, t_floatarg seed); static void chopper_testrand(t_chopper *x); t_symbol *ps_buffer; void chopper_testrand(t_chopper *x) { float rval = chopper_boundrand(0.0, 1.0); post("random btwn 0.0 1.0: %f",rval); } void chopper_mute(t_chopper *x, t_floatarg toggle) { x->mute = (short) toggle; } void chopper_seed(t_chopper *x, t_floatarg seed) { srand((long)seed); } void chopper_tilde_setup(void) { chopper_class = class_new(gensym("chopper~"), (t_newmethod)chopper_new, (t_method)chopper_free ,sizeof(t_chopper), 0,A_GIMME,0); CLASS_MAINSIGNALIN(chopper_class, t_chopper, x_f); class_addmethod(chopper_class,(t_method)chopper_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(chopper_class,(t_method)chopper_mute,gensym("mute"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_taper,gensym("taper"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_fixed_increment,gensym("fixed_increment"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_retro_odds,gensym("retro_odds"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_show_loop,gensym("show_loop"),0); class_addmethod(chopper_class,(t_method)chopper_set_loop,gensym("set_loop"),A_GIMME,0); class_addmethod(chopper_class,(t_method)chopper_store_loop,gensym("store_loop"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_recall_loop,gensym("recall_loop"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_increment_adjust,gensym("increment_adjust"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_adjust_inverse,gensym("adjust_inverse"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_jitter,gensym("jitter"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_rdur,gensym("rdur"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_rinc,gensym("rinc"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_set_minincr,gensym("set_minincr"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_set_maxincr,gensym("set_maxincr"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_set_minseg,gensym("set_minseg"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_set_maxseg,gensym("set_maxseg"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_lockme,gensym("lockme"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_force_new,gensym("force_new"),0); class_addmethod(chopper_class,(t_method)chopper_seed,gensym("seed"),A_FLOAT,0); class_addmethod(chopper_class,(t_method)chopper_testrand,gensym("testrand"),0); potpourri_announce(OBJECT_NAME); } void chopper_increment_adjust(t_chopper *x, t_floatarg toggle) { x->increment_adjusts_loop = (short)toggle; } void chopper_adjust_inverse(t_chopper *x, t_floatarg toggle) { x->loop_adjust_inverse = (short)toggle; } void chopper_fixed_increment(t_chopper *x, t_floatarg f) { float new_samps = 0; float rectf; x->fixed_increment = f; if( f ) { x->fixed_increment_on = 1; } else { x->fixed_increment_on = 0; } rectf = fabs(f); if( x->lock_loop && rectf > 0.0 ) { if( x->loop_adjust_inverse ) { new_samps = (float) x->loop_samps * rectf ; } else { new_samps = (float) x->loop_samps / rectf ; } if( f > 0 ) { if( x->loop_start + new_samps >= x->framesize ) { return; } else { x->increment = x->fixed_increment; } } else { if( x->loop_start - new_samps < 0) { return; } else { x->increment = x->fixed_increment; } } } if( x->increment_adjusts_loop ) { x->transp_loop_samps = new_samps; } } void chopper_jitter(t_chopper *x, t_floatarg f) { f *= 0.1; // scale down a bit if( f >= 0. && f <= 1.0 ) x->jitter_factor = f; } void chopper_rdur(t_chopper *x, t_floatarg f) { if( f >= 0. && f <= 1.0 ) x->rdur_factor = f; } void chopper_rinc(t_chopper *x, t_floatarg f) { // f *= 0.1; // scale down a bit if( f >= 0. && f <= 1.0 ) x->rinc_factor = f; } void chopper_retro_odds(t_chopper *x, t_floatarg f) { if( f < 0 ) f = 0; if( f > 1 ) f = 1; x->retro_odds = f; } void chopper_show_loop(t_chopper *x) { post("start: %d, samps: %d, increment: %f", x->loop_start, x->transp_loop_samps, x->increment); post("minloop %f, maxloop %f", x->minseg, x->maxseg); } void chopper_store_loop(t_chopper *x, t_floatarg f) { int loop_bindex = (int) f; if( loop_bindex < 0 || loop_bindex >= MAXSTORE ) { pd_error((t_object *)x,"index %d out of range", loop_bindex); return; } x->stored_starts[ loop_bindex ] = x->loop_start; x->stored_samps[ loop_bindex ] = x->transp_loop_samps; x->stored_increments[ loop_bindex ] = x->increment; /* post("storing loop %d: %d %d %f",loop_bindex, x->stored_starts[ loop_bindex ],x->stored_samps[ loop_bindex ], x->stored_increments[ loop_bindex ] ); */ } void chopper_recall_loop(t_chopper *x, t_floatarg f) { // bug warning: recall preceding store will crash program // need to add warning int loop_bindex = (int) f; if( loop_bindex < 0 || loop_bindex >= MAXSTORE ) { pd_error(0, "bindex %d out of range", loop_bindex); return; } if( ! x->stored_samps[ loop_bindex ] ) { pd_error(0, "no loop stored at position %d!", loop_bindex); return; } x->loop_start = x->stored_starts[ loop_bindex ]; x->samps_to_go = x->transp_loop_samps = x->stored_samps[ loop_bindex ]; if( x->loop_min_samps > x->transp_loop_samps ) x->loop_min_samps = x->transp_loop_samps ; if( x->loop_max_samps < x->transp_loop_samps ) x->loop_max_samps = x->transp_loop_samps ; x->increment = x->stored_increments[ loop_bindex ]; x->preempt_count = x->preempt_samps; // post("preempt samps:%d", x->preempt_count); x->recalling_loop = 1; // x->data_recalled = 1; } void chopper_set_loop(t_chopper *x, t_symbol *msg, int argc, t_atom *argv) { if( argc < 3 ) { pd_error(0, "format: start samples increment"); return; } x->loop_start = atom_getintarg(0,argc,argv); x->loop_samps = atom_getintarg(1,argc,argv); x->increment = atom_getfloatarg(2,argc,argv); x->data_recalled = 1; x->samps_to_go = x->loop_samps; x->fbindex = x->bindex = x->loop_start; // post("loop set to: st %d samps %d incr %f", x->loop_start, x->loop_samps,x->increment); } void chopper_taper(t_chopper *x, t_floatarg f) { f /= 1000.0; if( f > 0 ) { x->taper_samps = (float) x->R * f ; } if( x->taper_samps < 2 ) x->taper_samps = 2; } void *chopper_new(t_symbol *msg, int argc, t_atom *argv) { t_chopper *x = (t_chopper *)pd_new(chopper_class); outlet_new(&x->x_obj, gensym("signal")); x->R = sys_getsr(); x->l_sym = atom_getsymbolarg(0,argc,argv); chopper_init(x,0); return (x); } void chopper_init(t_chopper *x, short initialized) { if(!initialized) { srand(time(0)); if(!x->R) { pd_error(0, "zero sampling rate - set to 44100"); x->R = 44100; } x->minseg = 0.1; x->maxseg = 0.8 ; x->minincr = 0.5 ; x->maxincr = 2.0 ; x->data_recalled = 0; x->segdur = 0; x->bindex = 0 ; x->taper_duration /= 1000.0; if( x->taper_duration < .0001 || x->taper_duration > 10.0 ) x->taper_duration = .0001; x->increment_adjusts_loop = 0; x->taper_samps = x->R * x->taper_duration; if(x->taper_samps < 2) x->taper_samps = 2; x->preempt_samps = 5; x->loop_adjust_inverse = 0; x->preempt = 1; x->recalling_loop = 0; x->ldev = 0; x->lock_loop = 0; x->buffer_duration = 0.0 ; x->st_dev = 0.0; x->framesize = 0; x->force_new_loop = 0; x->mute = 0; x->disabled = 1; x->initialize_loop = 1; x->loop_engaged = 0; x->fixed_increment_on = 0; x->retro_odds = 0.5; x->fade_level = 1.0; x->lock_terminated = 0; x->stored_starts = getbytes(MAXSTORE * sizeof(int)); x->stored_samps = getbytes(MAXSTORE * sizeof(int)); x->stored_increments = getbytes(MAXSTORE * sizeof(int)); } else { x->taper_samps = x->R * x->taper_duration; if(x->taper_samps < 2) x->taper_samps = 2; } } void chopper_free(t_chopper *x) { freebytes(x->stored_increments, MAXSTORE * sizeof(int)); freebytes(x->stored_samps, MAXSTORE * sizeof(int)); freebytes(x->stored_starts, MAXSTORE * sizeof(int)); } void chopper_jitterme(t_chopper *x) { float new_start; float jitter_factor = x->jitter_factor; new_start = (1.0 + chopper_boundrand(-jitter_factor, jitter_factor) ) * (float) x->loop_start ; if( new_start < 0 ) { // pd_error(0, "jitter loop %d out of range", new_start); new_start = 0; } else if( new_start + x->transp_loop_samps >= x->framesize ) { // pd_error(0, "jitter loop %d out of range", new_start); new_start = x->framesize - x->transp_loop_samps ; } if( new_start >= 0 ) x->loop_start = new_start; } void chopper_rdurme(t_chopper *x) { float new_dur; float rdur_factor = x->rdur_factor; new_dur = (1.0 + chopper_boundrand( -rdur_factor, rdur_factor)) * (float) x->transp_loop_samps; if( new_dur > x->loop_max_samps ) new_dur = x->loop_max_samps; if( new_dur < x->loop_min_samps ) new_dur = x->loop_min_samps; x->transp_loop_samps = new_dur; } void chopper_rincme(t_chopper *x ) { float new_inc = 0; // int count = 0; int new_samps; float rinc_factor = x->rinc_factor; /* test generate a new increment */ new_inc = (1.0 + chopper_boundrand( 0.0, rinc_factor)) ; if( chopper_boundrand(0.0,1.0) > 0.5 ) { new_inc = 1.0 / new_inc; } // test for transgression // post("increment adjust:%d",x->increment_adjusts_loop); if( fabs(new_inc * x->increment) < x->minincr ) { new_inc = x->minincr / fabs(x->increment) ; // now when we multiply - increment is set to minincr } else if ( fabs(new_inc * x->increment) > x->maxincr ) { new_inc = x->maxincr / fabs(x->increment) ; // now when we multiply - increment is set to maxincr } if(x->increment_adjusts_loop) { new_samps = (float) x->transp_loop_samps / new_inc ; } else { new_samps = x->transp_loop_samps; } new_inc *= x->increment ; if( x->increment > 0 ) { if( x->loop_start + new_samps >= x->framesize ) { new_samps = (x->framesize - 1) - x->loop_start ; } } else { if( x->loop_start - new_samps < 0) { new_samps = x->loop_start + 1; } } x->transp_loop_samps = new_samps; x->increment = new_inc; } void chopper_randloop( t_chopper *x ) { int framesize = x->b_frames;//test // long bindex = x->fbindex; float segdur = x->segdur; int loop_start = x->loop_start; int loop_samps = x->loop_samps; int transp_loop_samps = x->transp_loop_samps; int samps_to_go = x->samps_to_go; float increment = x->increment; // int taper_samps = x->taper_samps ; // float taper_duration = x->taper_duration; float minincr = x->minincr; float maxincr = x->maxincr; float minseg = x->minseg; float maxseg = x->maxseg; float buffer_duration = x->buffer_duration; float R = x->R; float fixed_increment = x->fixed_increment; short fixed_increment_on = x->fixed_increment_on; float retro_odds = x->retro_odds; if(fixed_increment_on) { increment = fixed_increment; } else { increment = chopper_boundrand(minincr,maxincr); } segdur = chopper_boundrand( minseg, maxseg ); loop_samps = segdur * R * increment; // total samples in segment // post("rand: segdur %f R %f increment %f lsamps %d",segdur,R,increment,loop_samps); transp_loop_samps = segdur * R ; // actual count of samples to play back samps_to_go = transp_loop_samps; if( loop_samps >= framesize ) { loop_samps = framesize - 1; loop_start = 0; } else { // post("rand: bufdur %f segdur %f",buffer_duration, segdur); loop_start = R * chopper_boundrand( 0.0, buffer_duration - segdur ); if( loop_start + loop_samps >= framesize ) { loop_start = framesize - loop_samps; if( loop_start < 0 ) { loop_start = 0; pd_error(0, "negative starttime"); } } } if( chopper_boundrand(0.0,1.0) < retro_odds ) { increment *= -1.0 ; loop_start += (loop_samps - 1); } // post("randset: lstart %d lsamps %d incr %f segdur %f",loop_start,loop_samps,increment,segdur); x->samps_to_go = samps_to_go; x->fbindex = x->bindex = loop_start; x->loop_start = loop_start; x->loop_samps = loop_samps; x->transp_loop_samps = transp_loop_samps; x->increment = increment; x->segdur = segdur; } t_int *chopper_pd_perform(t_int *w) { int bindex; float sample1, m1, m2; t_chopper *x = (t_chopper *)(w[1]); t_float *out1 = (t_float *)(w[2]); int n = (int) w[3]; /*********************************************/ t_word *tab = x->b_samples; long b_frames = x->b_frames; long nc = x->b_nchans; float segdur = x->segdur; int taper_samps = x->taper_samps ; float taper_duration = x->taper_duration; float minseg = x->minseg; float maxseg = x->maxseg; int lock_loop = x->lock_loop; int force_new_loop = x->force_new_loop; float R = x->R; short initialize_loop = x->initialize_loop; float fade_level = x->fade_level; short preempt = x->preempt; int preempt_count = x->preempt_count; int preempt_samps = x->preempt_samps; short recalling_loop = x->recalling_loop; float preempt_gain; float jitter_factor = x->jitter_factor; float rdur_factor = x->rdur_factor; float rinc_factor = x->rinc_factor; if(x->mute) { while(n--) { *out1++ = 0.0; } return (w+4); } /* SAFETY CHECKS */ if( b_frames <= 0 || nc != 1) { x->disabled = 1; } if(x->mute || x->disabled) { while(n--) { *out1++ = 0.0; } return (w+4); } if(x->framesize != b_frames) { x->framesize = b_frames ; x->buffer_duration = (float) b_frames / R ; initialize_loop = 1; } else if(x->buffer_duration <= 0.0) { /* THIS WILL HAPPEN THE FIRST TIME */ x->framesize = b_frames ; x->buffer_duration = (float) b_frames / R ; initialize_loop = 1; // post("initializing from perform method"); } if(maxseg > x->buffer_duration) { maxseg = x->buffer_duration ; } if(minseg < 2. * taper_duration) minseg = taper_duration; /* SET INITIAL SEGMENT */ bindex = x->fbindex; if(initialize_loop){ /* FIRST TIME ONLY */ chopper_randloop(x); bindex = x->fbindex; initialize_loop = 0; } while(n--) { if( lock_loop ) { if ( recalling_loop ) { bindex = x->fbindex ; x->fbindex += x->increment; --preempt_count; preempt_gain = fade_level * ((float) preempt_count / (float) preempt_samps); *out1++ = tab[bindex].w_float * preempt_gain; if( preempt_count <= 0) { bindex = x->fbindex = x->loop_start; recalling_loop = 0; } } else if(force_new_loop) { if( bindex < 0 || bindex >= b_frames ) { x->fbindex = bindex = b_frames/2; // start in the middle } // should switch to < if( preempt && preempt_samps > x->samps_to_go ){ /* PREEMPT FADE */ --preempt_count; preempt_gain = fade_level * ( (float) preempt_count / (float) preempt_samps ); bindex = x->fbindex ; x->fbindex += x->increment; *out1++ = tab[ bindex ].w_float * preempt_gain; if(! preempt_count) { chopper_randloop(x); bindex = x->fbindex; force_new_loop = 0; } } else { /* IMMEDIATE FORCE NEW LOOP AFTER PREEMPT FADE */ chopper_randloop(x); force_new_loop = 0; bindex = x->fbindex ; // bindex2 = bindex << 1; x->fbindex += x->increment; --(x->samps_to_go); if( x->samps_to_go <= 0 ) { x->fbindex = x->loop_start; bindex = x->fbindex; x->samps_to_go = x->transp_loop_samps; } if( x->samps_to_go > x->transp_loop_samps - taper_samps ) { fade_level = (float)(x->transp_loop_samps - x->samps_to_go)/(float)taper_samps ; *out1++ = tab[bindex].w_float * fade_level; } else if( x->samps_to_go < taper_samps ) { fade_level = (float)(x->samps_to_go)/(float)taper_samps; *out1++ = tab[bindex].w_float * fade_level; } else { fade_level = 1.0; *out1++ = tab[bindex].w_float; } } } /* REGULAR PLAYBACK */ else { if( bindex < 0 || bindex >= b_frames ) { // pd_error(0, "lock_loop: bindex %d is out of range", bindex); x->fbindex = bindex = b_frames / 2; } bindex = floor( (double) x->fbindex ); m2 = x->fbindex - bindex ; m1 = 1.0 - m2; // bindex2 = bindex << 1; x->fbindex += x->increment; --(x->samps_to_go); if( x->samps_to_go <= 0 ) { if( rdur_factor ) { chopper_rdurme( x ); } if( jitter_factor ) { chopper_jitterme( x ); } if( rinc_factor ) { chopper_rincme( x ); } x->fbindex = x->loop_start; // x->fbindex -= x->transp_loop_samps; bindex = x->fbindex; x->samps_to_go = x->transp_loop_samps; } if( bindex >= b_frames ) { sample1 = tab[bindex].w_float; } else { sample1 = m1 * tab[bindex].w_float + m2 * tab[bindex + 1].w_float; } if( x->samps_to_go > x->transp_loop_samps - taper_samps ) { fade_level = (float)(x->transp_loop_samps - x->samps_to_go)/(float)taper_samps ; *out1++ = sample1 * fade_level; } else if( x->samps_to_go < taper_samps ) { fade_level = (float)(x->samps_to_go)/(float)taper_samps; *out1++ = sample1 * fade_level; } else { fade_level = 1.0; *out1++ = sample1; } } } /* END OF LOCK LOOP */ /* RECALL STORED LOOP */ else if (recalling_loop) { bindex = x->fbindex ; x->fbindex += x->increment; --preempt_count; preempt_gain = fade_level * ( (float) preempt_count / (float) preempt_samps ); *out1++ = tab[bindex].w_float * preempt_gain; if( preempt_count <= 0) { x->fbindex = x->loop_start; bindex = x->fbindex; recalling_loop = 0; } } else { if( force_new_loop ) { /* FORCE LOOP CODE : MUST PREEMPT */ force_new_loop = 0; /* NEED CODE HERE*/ } else { /* NORMAL OPERATION */ fade_level = 1.0; /* default level */ if( bindex < 0 || bindex >= b_frames ) { // pd_error(0, "force loop: bindex %d is out of range", bindex); /* post("frames:%d start:%d, samps2go:%d, tloopsamps:%d, increment:%f", x->framesize, bindex, x->samps_to_go, x->transp_loop_samps, x->increment);*/ chopper_randloop(x); bindex = x->fbindex; } bindex = x->fbindex ; x->fbindex += x->increment; if( x->samps_to_go > x->transp_loop_samps - taper_samps ) { fade_level = (float)(x->transp_loop_samps - x->samps_to_go)/(float)taper_samps ; *out1++ = tab[bindex].w_float * fade_level; } else if(x->samps_to_go < taper_samps) { fade_level = (float)(x->samps_to_go)/(float)taper_samps; *out1++ = tab[bindex].w_float * fade_level; } else { fade_level = 1.0; *out1++ = tab[bindex].w_float; } --(x->samps_to_go); if( x->samps_to_go <= 0 ) { chopper_randloop( x ); bindex = x->fbindex; } } } } x->recalling_loop = recalling_loop; x->fade_level = fade_level; x->initialize_loop = initialize_loop; x->maxseg = maxseg; x->minseg = minseg; x->segdur = segdur; x->force_new_loop = force_new_loop; return (w+4); } void chopper_force_new(t_chopper *x) { x->preempt_count = x->preempt_samps; x->force_new_loop = 1; } void chopper_lockme(t_chopper *x, t_floatarg n) { x->lock_loop = (short) n; // post("lock loop set to %d from %f",x->lock_loop,n); } //set min time for loop void chopper_set_minincr(t_chopper *x, t_floatarg n) { // post("set minincr to %f", n); if( n < .005 ) { n = .005; } x->minincr = n ; } // set deviation factor void chopper_set_maxseg(t_chopper *x, t_floatarg n) { n /= 1000.0 ; // convert to seconds if( n > 120. ) n = 120.; //post("set maxseg to %f", n); x->maxseg = n; x->loop_max_samps = x->maxseg * x->R; } void chopper_set_minseg(t_chopper *x, t_floatarg n) { n /= 1000.0 ; // convert to seconds if( n < 0.03 ) n = 0.03; //post("set minseg to %f", n); x->minseg = n; x->loop_min_samps = x->minseg * x->R; } // set max time for loop void chopper_set_maxincr(t_chopper *x, t_floatarg n) { if( n > 4 ) { n = 4; } //post("set maxincr to %f", n); x->maxincr = n ; } void chopper_set(t_chopper *x, t_symbol *wavename) { int frames; t_garray *a; x->disabled = 0; x->b_frames = 0; x->b_nchans = 1; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "chopper~: %s: no such array", wavename->s_name); x->b_samples = 0; x->disabled = 1; } else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { pd_error(x, "%s: bad template for chopper~", wavename->s_name); x->b_samples = 0; x->disabled = 1; } else { x->b_frames = frames; // post("%d frames in buffer",x->b_frames); garray_usedindsp(a); } } void chopper_dsp(t_chopper *x, t_signal **sp) { chopper_set(x,x->l_sym); if(x->R != sp[0]->s_sr) { x->R = sp[0]->s_sr; chopper_init(x,1); } if(x->disabled) { return; } dsp_add(chopper_pd_perform, 3, x, sp[0]->s_vec, (t_int)sp[0]->s_n); } float chopper_boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/(float)RAND_MAX); } pd-lyonpotpourri-3.0.1/clean_selector~-help.pd000066400000000000000000000016251430526361000215200ustar00rootroot00000000000000#N canvas 600 60 662 626 12; #X msg 141 230 channel \$1; #X floatatom 141 200 5 0 0 0 - - -; #X obj 156 266 osc~ 440; #X obj 221 267 osc~ 777; #X obj 302 267 noise~; #X obj 383 265 osc~ 899; #X msg 47 227 fadetime \$1; #X msg 47 199 20; #X msg 173 165 1; #X msg 207 165 2; #X msg 239 166 3; #X text 271 166 select channel; #X text 43 179 set fadetime; #X msg 92 199 1000; #X msg 141 166 0; #X obj 141 308 lyonpotpourri/clean_selector~ 4 250; #X obj 108 384 lpp-meters; #X obj 37 24 lpp-icon clean_selector~; #X text 267 55 - Cross fade between multiple sources; #X text 405 308 args: inputs \, fadetime; #X connect 0 0 15 0; #X connect 1 0 0 0; #X connect 2 0 15 0; #X connect 3 0 15 1; #X connect 4 0 15 2; #X connect 5 0 15 3; #X connect 6 0 15 0; #X connect 7 0 6 0; #X connect 8 0 1 0; #X connect 9 0 1 0; #X connect 10 0 1 0; #X connect 13 0 6 0; #X connect 14 0 1 0; #X connect 15 0 16 0; #X connect 15 0 16 1; pd-lyonpotpourri-3.0.1/clean_selector~.c000066400000000000000000000143031430526361000204060ustar00rootroot00000000000000#include "MSPd.h" #define MAX_CHANS (64) #define CS_LINEAR (0) #define CS_POWER (1) static t_class *clean_selector_class; typedef struct _clean_selector { t_object x_obj; float x_f; // Variables Here short input_chans; short active_chan; short last_chan; int samps_to_fade; int fadesamps; float fadetime; float pi_over_two; short fadetype; short *connected_list; float **bulk ; // array to point to all input audio channels float sr; float vs; int inlet_count; } t_clean_selector; #define OBJECT_NAME "clean_selector~" static void *clean_selector_new(t_symbol *s, int argc, t_atom *argv); static t_int *clean_selector_perform(t_int *w); static void clean_selector_dsp(t_clean_selector *x, t_signal **sp); // static void clean_selector_float(t_clean_selector *x, t_float f); static void clean_selector_fadetime(t_clean_selector *x, t_floatarg f); static void clean_selector_channel(t_clean_selector *x, t_floatarg i); static void clean_selector_dsp_free(t_clean_selector *x); void clean_selector_tilde_setup(void) { clean_selector_class = class_new(gensym("clean_selector~"), (t_newmethod)clean_selector_new, (t_method)clean_selector_dsp_free,sizeof(t_clean_selector), 0,A_GIMME,0); CLASS_MAINSIGNALIN(clean_selector_class, t_clean_selector, x_f); class_addmethod(clean_selector_class,(t_method)clean_selector_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(clean_selector_class,(t_method)clean_selector_fadetime,gensym("fadetime"),A_FLOAT,0); class_addmethod(clean_selector_class,(t_method)clean_selector_channel,gensym("channel"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void *clean_selector_new(t_symbol *s, int argc, t_atom *argv) { int i; t_clean_selector *x; x = (t_clean_selector *)pd_new(clean_selector_class); x->fadetime = 0.05; x->inlet_count = 8; if(argc >= 1) { x->inlet_count = (int)atom_getfloatarg(0,argc,argv); if(x->inlet_count < 2 || x->inlet_count > MAX_CHANS) { pd_error(0, "%s: %d is illegal number of inlets",OBJECT_NAME,x->inlet_count); return (void *) NULL; } } if(argc >= 2) { x->fadetime = atom_getfloatarg(1,argc,argv) / 1000.0; } // post("argc %d inlet count %d fadetime %f",argc, x->inlet_count, x->fadetime); for(i=0; i< x->inlet_count - 1; i++){// create 16 inlets in total inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); } outlet_new(&x->x_obj, gensym("signal")); x->sr = sys_getsr(); if(!x->sr) { x->sr = 44100.0; pd_error(0, "zero sampling rate - set to 44100"); } x->fadetype = CS_POWER; x->pi_over_two = 1.57079632679; if(x->fadetime <= 0.0) x->fadetime = .05; x->fadesamps = x->fadetime * x->sr; x->connected_list = (short *) t_getbytes(MAX_CHANS * sizeof(short)); for(i=0;i<16;i++) { x->connected_list[i] = 0; } x->active_chan = x->last_chan = 0; x->bulk = (t_float **) t_getbytes(16 * sizeof(t_float *)); x->samps_to_fade = 0; return (x); } void clean_selector_dsp_free(t_clean_selector *x) { t_freebytes(x->bulk, 16 * sizeof(t_float *)); } void clean_selector_fadetime(t_clean_selector *x, t_floatarg f) { float fades = (float)f / 1000.0; if( fades < .0001 || fades > 1000.0 ) { pd_error(0, "fade time is constrained to 0.1 - 1000000, but you wanted %f",f ); return; } x->fadetime = fades; x->fadesamps = x->sr * x->fadetime; x->samps_to_fade = 0; } t_int *clean_selector_perform(t_int *w) { t_clean_selector *x = (t_clean_selector *) (w[1]); int i; int n; t_float *out; int fadesamps = x->fadesamps; short active_chan = x->active_chan; short last_chan = x->last_chan; int samps_to_fade = x->samps_to_fade; float m1, m2; float **bulk = x->bulk; float pi_over_two = x->pi_over_two; short fadetype = x->fadetype; float phase; int inlet_count = x->inlet_count; for ( i = 0; i < inlet_count; i++ ) { bulk[i] = (t_float *)(w[2 + i]); } out = (t_float *)(w[inlet_count + 2]); n = (int) w[inlet_count + 3]; /********************************************/ if ( active_chan >= 0 ) { while( n-- ) { if ( samps_to_fade >= 0 ) { if( fadetype == CS_POWER ) { phase = pi_over_two * (1.0 - (samps_to_fade / (float) fadesamps)) ; m1 = sin( phase ); m2 = cos( phase ); --samps_to_fade; *out++ = (*(bulk[active_chan])++ * m1) + (*(bulk[last_chan])++ * m2); } } else { *out++ = *(bulk[active_chan])++; } } } else { while( n-- ) { *out++ = 0.0; } } x->samps_to_fade = samps_to_fade; return (w + (inlet_count + 4)); } void clean_selector_dsp(t_clean_selector *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count; pointer_count = x->inlet_count + 3; // all inlets, 1 outlet, object pointer and vec-samps sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; x->fadesamps = x->fadetime * x->sr; x->samps_to_fade = 0; } dsp_addv(clean_selector_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec, pointer_count * sizeof(t_int *)); for (i = 0; i < MAX_CHANS; i++) { x->connected_list[i] = 1; } } void clean_selector_channel(t_clean_selector *x, t_floatarg i) // Look at int at inlets { int chan = i; if(chan < 0 || chan > x->inlet_count - 1) { post("%s: channel %d out of range",OBJECT_NAME, chan); return; } if(chan != x->active_chan) { x->last_chan = x->active_chan; x->active_chan = chan; x->samps_to_fade = x->fadesamps; if( x->active_chan < 0) x->active_chan = 0; if( x->active_chan > MAX_CHANS - 1) { x->active_chan = MAX_CHANS - 1; } if(! x->connected_list[chan]) { // do it anyway - it's user-stupidity /* post("warning: channel %d not connected",chan); x->active_chan = 1; */ } } } pd-lyonpotpourri-3.0.1/click2bang~-help.pd000066400000000000000000000010051430526361000205250ustar00rootroot00000000000000#N canvas 606 166 470 303 12; #X obj 26 203 bng 40 100 50 0 empty empty empty 17 7 0 10 -216994 -1 -1; #X obj 26 165 lyonpotpourri/click2bang~; #X obj 26 131 lyonpotpourri/samm~ 60 1; #X text 247 49 - Convert click to a bang; #X obj 24 20 lpp-icon click2bang~; #X text 206 133 send out 1 click per second; #X msg 121 248 \; pd dsp \$1; #X obj 121 224 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 145 221 DACs must be on for this to work; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 7 0 6 0; pd-lyonpotpourri-3.0.1/click2bang~.c000066400000000000000000000027611430526361000174300ustar00rootroot00000000000000#include "MSPd.h" #define OBJECT_NAME "click2bang~" static t_class *click2bang_class; typedef struct _click2bang { t_object x_obj; float x_f; void *bang; void *clock; } t_click2bang; static void *click2bang_new(void); static t_int *click2bang_perform(t_int *w); static void click2bang_dsp(t_click2bang *x, t_signal **sp); static void click2bang_tick(t_click2bang *x) ; static void click2bang_free(t_click2bang *x); void click2bang_tilde_setup(void) { click2bang_class = class_new(gensym("click2bang~"), (t_newmethod)click2bang_new,(t_method)click2bang_free, sizeof(t_click2bang), 0,0); CLASS_MAINSIGNALIN(click2bang_class, t_click2bang, x_f); class_addmethod(click2bang_class, (t_method)click2bang_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void click2bang_free(t_click2bang *x) { clock_free(x->clock); } void click2bang_tick(t_click2bang *x) { outlet_bang(x->bang); } void *click2bang_new(void) { t_click2bang *x = (t_click2bang *)pd_new(click2bang_class); x->bang = outlet_new(&x->x_obj, gensym("bang")); x->clock = clock_new(x,(void *)click2bang_tick); return x; } t_int *click2bang_perform(t_int *w) { t_click2bang *x = (t_click2bang *) (w[1]); t_float *in_vec = (t_float *)(w[2]); int n = (int) w[3]; while( n-- ) { if(*in_vec++) clock_delay(x->clock, 0); } return (w+4); } void click2bang_dsp(t_click2bang *x, t_signal **sp) { dsp_add(click2bang_perform, 3, x, sp[0]->s_vec,(t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/click2float~-help.pd000066400000000000000000000007671430526361000207410ustar00rootroot00000000000000#N canvas 600 60 473 363 12; #X floatatom 25 246 5 0 0 0 - - -; #X obj 25 212 lyonpotpourri/click2float~; #X obj 25 146 lyonpotpourri/samm~ 120 1; #X obj 25 178 lyonpotpourri/mask~ 2 4 6.333 8; #X text 248 47 - convert a click to a float; #X obj 24 19 lpp-icon click2float~; #X msg 26 309 \; pd dsp \$1; #X obj 26 284 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 53 287 DACs must be on for this to work; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 1 0; #X connect 7 0 6 0; pd-lyonpotpourri-3.0.1/click2float~.c000066400000000000000000000031551430526361000176240ustar00rootroot00000000000000#include "MSPd.h" static t_class *click2float_class; typedef struct _click2float { t_object x_obj; float x_f; void *float_outlet; void *clock; double float_value; } t_click2float; #define OBJECT_NAME "click2float~" static void *click2float_new(void); static t_int *click2float_perform(t_int *w); static void click2float_dsp(t_click2float *x, t_signal **sp); static void click2float_tick(t_click2float *x) ; static void click2float_free(t_click2float *x); void click2float_tilde_setup(void) { click2float_class = class_new(gensym("click2float~"), (t_newmethod)click2float_new, (t_method)click2float_free,sizeof(t_click2float), 0,0); CLASS_MAINSIGNALIN(click2float_class, t_click2float, x_f); class_addmethod(click2float_class, (t_method)click2float_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void click2float_tick(t_click2float *x) { outlet_float(x->float_outlet,x->float_value); } void *click2float_new(void) { t_click2float *x = (t_click2float *)pd_new(click2float_class); x->float_outlet = outlet_new(&x->x_obj, gensym("float")); x->clock = clock_new(x,(void *)click2float_tick); return x; } t_int *click2float_perform(t_int *w) { t_click2float *x = (t_click2float *) (w[1]); t_float *in_vec = (t_float *)(w[2]); int n = (int) w[3]; while( n-- ) { if(*in_vec) { x->float_value = *in_vec; clock_delay(x->clock, 0); } in_vec++; } return (w+4); } void click2float_free(t_click2float *x) { clock_free(x->clock); } void click2float_dsp(t_click2float *x, t_signal **sp) { dsp_add(click2float_perform, 3, x, sp[0]->s_vec,(t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/clickhold~-help.pd000066400000000000000000000010631430526361000204660ustar00rootroot00000000000000#N canvas 600 60 625 490 12; #X obj 45 195 osc~; #X obj 45 126 lyonpotpourri/samm~ 120 1; #X obj 45 149 lyonpotpourri/mask~ 440 550 660 880; #X obj 45 172 lyonpotpourri/clickhold~; #X obj 45 247 lpp-meters; #X obj 41 16 lpp-icon clickhold~; #X text 269 44 - convert a click to sustained signal; #X text 229 128 sample-accurate clock at 120 BPM; #X text 297 148 loop through sequence; #X text 220 175 sustain clicks for continuous control of oscillator frequency; #X connect 0 0 4 0; #X connect 0 0 4 1; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 0 0; pd-lyonpotpourri-3.0.1/clickhold~.c000066400000000000000000000025421430526361000173620ustar00rootroot00000000000000#include "MSPd.h" static t_class *clickhold_class; #define OBJECT_NAME "clickhold~" typedef struct _clickhold { t_object x_obj; float x_f; float hold_value; } t_clickhold; static void *clickhold_new(void); static t_int *clickhold_perform(t_int *w); static void clickhold_dsp(t_clickhold *x, t_signal **sp); void clickhold_tilde_setup(void) { clickhold_class = class_new(gensym("clickhold~"), (t_newmethod)clickhold_new, NO_FREE_FUNCTION,sizeof(t_clickhold), 0,0); CLASS_MAINSIGNALIN(clickhold_class, t_clickhold, x_f); class_addmethod(clickhold_class, (t_method)clickhold_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *clickhold_new(void) { t_clickhold *x = (t_clickhold *)pd_new(clickhold_class); outlet_new(&x->x_obj, gensym("signal")); x->hold_value = 0; return x; } t_int *clickhold_perform(t_int *w) { t_clickhold *x = (t_clickhold *) (w[1]); t_float *in_vec = (t_float *)(w[2]); t_float *out_vec = (t_float *)(w[3]); int n = (int) w[4]; float hold_value = x->hold_value; while( n-- ) { if(*in_vec) { hold_value = *in_vec; } in_vec++; *out_vec++ = hold_value; } x->hold_value = hold_value; return (w+5); } void clickhold_dsp(t_clickhold *x, t_signal **sp) { dsp_add(clickhold_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/click~-help.pd000066400000000000000000000017731430526361000176270ustar00rootroot00000000000000#N canvas 600 60 592 447 12; #N canvas 0 22 450 300 (subpatch) 0; #X array click-array 8 float 2; #X coords 0 1 8 -1 140 70 1; #X restore 227 172 graph; #X obj 78 321 tabwrite~ click-array; #X obj 43 176 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 101 292 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 61 176 record click; #X msg 78 228 set 0.333; #X text 121 293 clear array; #X msg 154 227 set 1; #X text 34 116 click~ - convert a bang into a click. the default value is 1 but the click can be set to any value except zero.; #X text 75 209 set click value; #X obj 78 259 lyonpotpourri/click~; #X msg 77 381 \; pd dsp \$1; #X obj 77 353 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 101 352 DACs must be on for this to work; #X obj 34 12 lpp-icon click~; #X text 262 42 - bang to single-sample click converter; #X connect 2 0 1 0; #X connect 2 0 10 0; #X connect 3 0 1 0; #X connect 5 0 10 0; #X connect 7 0 10 0; #X connect 10 0 1 0; #X connect 12 0 11 0; pd-lyonpotpourri-3.0.1/click~.c000066400000000000000000000033441430526361000165140ustar00rootroot00000000000000#include "MSPd.h" static t_class *click_class; typedef struct _click { t_object x_obj; float x_f; void *float_outlet; float float_value; long status; } t_click; #define OBJECT_NAME "click~" static void *click_new(t_symbol *s, int argc, t_atom *argv); static void click_bang(t_click *x); static t_int *click_perform(t_int *w); static void click_dsp(t_click *x, t_signal **sp); static void click_set(t_click *x, t_floatarg f); #define NO_FREE_FUNCTION 0 void click_tilde_setup(void) { click_class = class_new(gensym("click~"), (t_newmethod)click_new, NO_FREE_FUNCTION,sizeof(t_click), 0,A_GIMME,0); CLASS_MAINSIGNALIN(click_class, t_click, x_f); class_addmethod(click_class, (t_method)click_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(click_class, (t_method)click_bang, gensym("bang"), 0); class_addmethod(click_class, (t_method)click_set, gensym("set"), A_FLOAT, 0); potpourri_announce(OBJECT_NAME); } void click_bang(t_click *x) { x->status = 1; } void click_set(t_click *x, t_floatarg f) { x->float_value = f; } void *click_new(t_symbol *s, int argc, t_atom *argv) { t_click *x = (t_click *)pd_new(click_class); x->float_outlet = outlet_new(&x->x_obj, gensym("signal")); x->float_value = 1.0; x->status = 0; return x; } t_int *click_perform(t_int *w) { t_click *x = (t_click *) (w[1]); t_float *output = (t_float *)(w[2]); int n = (int) w[3]; int i; if(x->status) { x->status = 0; output[0] = x->float_value; for(i = 1; i < n; i++) { output[i] = 0.0; } } else { for(i = 0; i < n; i++) { output[i] = 0.0; } } return w+4; } void click_dsp(t_click *x, t_signal **sp) { dsp_add(click_perform, 3, x, sp[0]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/collect.pl000077500000000000000000000002361430526361000170470ustar00rootroot00000000000000if (! -e "lyonpotpourri"){ mkdir("lyonpotpourri"); } while(<*>){ chomp; if(/darwin$/ | /liblyonpotpourri.dylib/){ `mv $_ lyonpotpourri`; } } pd-lyonpotpourri-3.0.1/convert.c000066400000000000000000000026511430526361000167110ustar00rootroot00000000000000#include "fftease.h" /* S is a spectrum in rfft format, i.e., it contains N real values arranged as real followed by imaginary values, except for first two values, which are real parts of 0 and Nyquist frequencies; convert first changes these into N/2+1 PAIRS of magnitude and phase values to be stored in output array C; the phases are then unwrapped and successive phase differences are used to compute estimates of the instantaneous frequencies for each phase vocoder analysis channel; decimation rate D and sampling rate R are used to render these frequency values directly in Hz. */ void lpp_convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ) { float phase, phasediff; int real, imag, amp,freq; float a, b; int i; /* float myTWOPI, myPI; */ /* double sin(), cos(), atan(), hypot();*/ /* myTWOPI = 8.*atan(1.); myPI = 4.*atan(1.); */ for ( i = 0; i <= N2; i++ ) { imag = freq = ( real = amp = i<<1 ) + 1; a = ( i == N2 ? S[1] : S[real] ); b = ( i == 0 || i == N2 ? 0. : S[imag] ); C[amp] = hypot( a, b ); if ( C[amp] == 0. ) phasediff = 0.; else { phasediff = ( phase = -atan2( b, a ) ) - lastphase[i]; lastphase[i] = phase; while ( phasediff > PI ) phasediff -= TWOPI; while ( phasediff < -PI ) phasediff += TWOPI; } C[freq] = phasediff*factor + i*fundamental; } } pd-lyonpotpourri-3.0.1/convolver~-help.pd000066400000000000000000000110121430526361000205420ustar00rootroot00000000000000#N canvas 455 62 802 761 12; #N canvas 0 22 450 300 (subpatch) 0; #X array cdemo_impulse 220500 float 2; #X coords 0 1 220500 -1 200 100 1 0 0; #X restore 32 134 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array cdemo_source 62079 float 2; #X coords 0 1 62079 -1 200 100 1 0 0; #X restore 32 253 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array cdemo_dest 661500 float 2; #X coords 0 1 661500 -1 200 100 1 0 0; #X restore 32 372 graph; #X obj 280 342 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 280 289 r convo_demo_msg; #X msg 39 714 convolve; #X obj 535 449 tabplay~ cdemo_dest; #X obj 535 425 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 36 495 bang; #X obj 39 735 s convo_demo_msg; #X text 299 343 operation completion bang; #X msg 36 567 bang; #X text 34 627 ... or build a synthetic impulse; #N canvas 600 60 450 300 sound-source 0; #X obj 104 88 soundfiler; #X obj 104 52 openpanel; #X msg 104 70 read -resize \$1 cdemo_source; #X obj 104 34 inlet; #X connect 1 0 2 0; #X connect 2 0 0 0; #X connect 3 0 1 0; #X restore 36 519 pd sound-source; #X obj 280 319 lyonpotpourri/convolver~ cdemo_source cdemo_impulse cdemo_dest, f 62; #X obj 30 19 lpp-icon convolver~; #X text 247 46 - non-real-time convolution; #N canvas 600 60 1141 484 build_synthetic_impulse 0; #X obj 121 403 s convo_demo_msg; #X msg 121 142 noiseimp \$1; #X floatatom 121 94 5 0 0 0 - - -; #X msg 209 356 spikeimp \$1; #X floatatom 209 328 5 0 0 0 - - -; #X obj 735 421 array size cdemo_impulse; #X obj 735 376 *; #X obj 825 318 samplerate~; #X floatatom 826 344 5 0 0 0 - - -; #X obj 735 216 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 735 322 20; #X msg 923 318 \; cdemo_impulse const 0; #X obj 735 266 t b b b; #X text 579 323 new length in seconds:; #X text 767 217 resize impulse array length; #X text 214 120 parameter is slope (negative values produce convex impulse shapes \; positive slopes produce concave impulse shapes. Larger values give more extreme results.); #X text 262 287 parameter is density of spikes per second \; slope is fixed; #X text 184 85 produce a smooth \, decaying \, white noise impulse ; #X msg 121 55 -3; #X msg 160 293 50; #X msg 209 293 6; #X text 157 248 produce a spiky impulse \, which may sound more like lots of echos \, rather than reverberation; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 0 0; #X connect 4 0 3 0; #X connect 6 0 5 0; #X connect 7 0 8 0; #X connect 8 0 6 1; #X connect 9 0 12 0; #X connect 10 0 6 0; #X connect 12 0 10 0; #X connect 12 1 7 0; #X connect 12 2 11 0; #X connect 18 0 2 0; #X connect 19 0 4 0; #X connect 20 0 4 0; #X restore 37 652 pd build_synthetic_impulse; #X obj 535 567 lpp-meters; #X text 77 496 1 find a soundfile to convolve (or use pre-loaded default) ; #X text 75 568 2 find an impulse response (or use generated default) ; #X text 37 694 3 perform convolution; #X text 554 425 4 play convolution result; #N canvas 600 60 588 436 init 0; #X obj 25 68 soundfiler; #X obj 25 25 loadbang; #X obj 26 167 s convo_demo_msg; #X msg 26 143 noiseimp -5; #X obj 26 118 loadbang; #X msg 25 46 read -resize sound/voice.wav cdemo_source; #X text 94 120 generate default impulse; #X text 96 27 default sound source to reverberate; #X obj 305 366 array size cdemo_impulse; #X obj 305 215 loadbang; #X obj 305 251 t b b; #X msg 305 287 5; #X obj 305 330 *; #X obj 354 277 samplerate~; #X floatatom 354 306 5 0 0 0 - - -; #X text 300 180 default to a 5-second impulse; #X obj 68 223 loadbang; #X obj 68 259 t b b; #X obj 68 338 *; #X obj 117 285 samplerate~; #X floatatom 117 314 5 0 0 0 - - -; #X obj 68 374 array size cdemo_dest; #X msg 68 295 15; #X text 39 204 allocate space for the reverb; #X connect 1 0 5 0; #X connect 3 0 2 0; #X connect 4 0 3 0; #X connect 5 0 0 0; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 10 1 13 0; #X connect 11 0 12 0; #X connect 12 0 8 0; #X connect 13 0 14 0; #X connect 14 0 12 1; #X connect 16 0 17 0; #X connect 17 0 22 0; #X connect 17 1 19 0; #X connect 18 0 21 0; #X connect 19 0 20 0; #X connect 20 0 18 1; #X connect 22 0 18 0; #X restore 279 378 pd init; #X obj 535 480 lyonpotpourri/killdc~; #N canvas 600 60 373 220 impulse-source 0; #X obj 48 133 soundfiler; #X obj 48 77 openpanel; #X msg 48 105 read -resize \$1 cdemo_impulse; #X obj 48 49 inlet; #X connect 1 0 2 0; #X connect 2 0 0 0; #X connect 3 0 1 0; #X restore 36 595 pd impulse-source; #X connect 4 0 14 0; #X connect 5 0 9 0; #X connect 6 0 24 0; #X connect 7 0 6 0; #X connect 8 0 13 0; #X connect 11 0 25 0; #X connect 14 0 3 0; #X connect 24 0 18 0; #X connect 24 0 18 1; pd-lyonpotpourri-3.0.1/convolver~.c000066400000000000000000000705161430526361000174510ustar00rootroot00000000000000#include "m_pd.h" #include "fftease.h" #include "MSPd.h" #define OBJECT_NAME "convolver~" #define DENORM_WANT_FIX 1 #define COMPILE_DATE "9.4.22" #define OBJECT_VERSION "2.03" #define FIX_DENORM_FLOAT(v) (v=(fabs(v) < 0.000001 ? 0.f : (v))) static t_class *convolver_class; #define CBUF_SIZE 32768 #define NCMAX 52428800 typedef struct _buffy { t_word *b_samples; long b_frames; long b_nchans; long b_valid; t_garray *b; t_symbol *myname; } t_buffy; typedef struct _convolver { t_object x_obj; float x_f; t_buffy *impulse; // impulse buffer t_buffy *source; // source buffer t_buffy *dest; // output buffer void *bang; // completion bang float sr; // convolution stuff float *tbuf; float *sbuf; float *filt; long N; long N2; long last_N; // for fast fft float mult; float *trigland; int *bitshuffle; short static_memory; // flag to avoid dynamic memory manipulation } t_convolver; static float boundrand(float min, float max); static void convolver_setbuf(t_buffy *trybuf); static void *convolver_new(t_symbol *msg, int argc, t_atom *argv); static t_int *convolver_perform(t_int *w); static void convolver_dsp_free(t_convolver *x); static void convolver_attach_buffers(t_convolver *x) ; static void convolver_spikeimp(t_convolver *x, t_floatarg density); static void convolver_convolve(t_convolver *x); static void convolver_convolvechans(t_convolver *x, t_symbol *msg, int argc, t_atom *argv); static void convolver_noiseimp(t_convolver *x, t_floatarg curve); static void rfft( float *x, int N, int forward ); static void cfft( float *x, int NC, int forward ); static void rdft(int n, int isgn, float *a, int *ip, float *w); static void bitreverse( float *x, int N ); static void init_rdft(int n, int *ip, float *w); static void convolver_static_memory(t_convolver *x, t_floatarg toggle); void convolver_tilde_setup(void) { convolver_class = class_new(gensym("convolver~"), (t_newmethod)convolver_new, (t_method)convolver_dsp_free,sizeof(t_convolver), 0,A_GIMME,0); CLASS_MAINSIGNALIN(convolver_class, t_convolver, x_f); class_addmethod(convolver_class,(t_method)convolver_spikeimp,gensym("spikeimp"), A_FLOAT, 0); class_addmethod(convolver_class,(t_method)convolver_noiseimp, gensym("noiseimp"),A_FLOAT, 0); class_addmethod(convolver_class,(t_method)convolver_convolve, gensym("convolve"),0); class_addmethod(convolver_class,(t_method)convolver_static_memory, gensym("static_memory"),A_FLOAT, 0); potpourri_announce(OBJECT_NAME); } void convolver_static_memory(t_convolver *x, t_floatarg toggle) { long memcount = 0; float *tbuf = x->tbuf; float *sbuf = x->sbuf; float *filt = x->filt; int *bitshuffle = x->bitshuffle; float *trigland = x->trigland; t_buffy *impulse = x->impulse; long N, N2; x->static_memory = (short) toggle; if( x->static_memory ) { convolver_attach_buffers( x ); for( N2 = 2; N2 < NCMAX; N2 *= 2) { if( N2 >= impulse->b_frames ) { // post("%s: Exceeded Impulse Maximum: %d",OBJECT_NAME, NCMAX); break; } } N = 2 * N2; post("%s: memory is now static - do not reload your impulse buffer",OBJECT_NAME); if ((sbuf = (float *) getbytes((N+2) * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory", OBJECT_NAME); memcount += (N+2) * sizeof(float); if ((tbuf = (float *) getbytes(N2 * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); memcount += (N2) * sizeof(float); if ((filt = (float *) getbytes((N+2) * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); memcount += (N+2) * sizeof(float); if( (bitshuffle = (int *) getbytes((N*2) * sizeof(int))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); memcount += (N2) * sizeof(float); if( (trigland = (float *) getbytes((N*2) * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); memcount += (N2) * sizeof(float); post("%s: allocated %f Megabytes for %s", OBJECT_NAME, (float)memcount / 1000000.0, impulse->myname->s_name); x->N = N; x->N2 = N2; } } /* void convolver_seed(t_convolver *x, t_floatarg seed) { (void)x; srand((long)seed); } */ void convolver_convolve(t_convolver *x) { int i; t_symbol *mymsg; short myargc = 3; t_atom data[3]; mymsg = (t_symbol *) getbytes(1 * sizeof(t_symbol)); convolver_attach_buffers( x ); if(x->source->b_nchans == x->impulse->b_nchans && x->impulse->b_nchans == x->dest->b_nchans) { //post("case 1"); for(i = 0; i < x->source->b_nchans; i++) { SETFLOAT(data, i+1); // source SETFLOAT(data+1, i+1); // impulse SETFLOAT(data+2, i+1); // destination convolver_convolvechans(x, mymsg, myargc, data); } } else if(x->source->b_nchans == 1 && x->impulse->b_nchans == x->dest->b_nchans) { //post("case 2"); for(i = 0; i < x->impulse->b_nchans; i++) { SETFLOAT(data, 1); // source SETFLOAT(data+1, i+1); // impulse SETFLOAT(data+2, i+1); // destination convolver_convolvechans(x, mymsg, myargc, data); } } else if(x->impulse->b_nchans == 1 && x->source->b_nchans == x->dest->b_nchans) { //post("case 3"); for(i = 0; i < x->impulse->b_nchans; i++) { SETFLOAT(data, i+1); // source SETFLOAT(data+1, 1); // impulse SETFLOAT(data+2, i+1); // destination convolver_convolvechans(x, mymsg, myargc, data); } } else { post("%s: \"convolve\" is not smart enough to figure out what you want to do. Try \"convolvechans\"",OBJECT_NAME); post("source chans: %d, impulse chans: %d, dest chans: %d",x->source->b_nchans, x->impulse->b_nchans, x->dest->b_nchans ); } outlet_bang(x->bang); } void convolver_convolvechans(t_convolver *x, t_symbol *msg, int argc, t_atom *argv) { float *tbuf = x->tbuf; float *sbuf = x->sbuf; float *filt = x->filt; long N = x->N; long N2 = x->N2; long i, j, ip, ip1; long ifr_cnt = 0, ofr_cnt = 0; int target_frames = 2; short copacetic; // loop enabler float a,b,temp,max=0.0,gain=1.0; //,thresh=.0000000001,fmag; int readframes, writeframes; t_buffy *impulse = x->impulse; t_buffy *source = x->source; t_buffy *dest = x->dest; int *bitshuffle = x->bitshuffle; float *trigland = x->trigland; long source_chan, impulse_chan, dest_chan; float rescale = 0.5 / (float) N; (void)msg; // t_atom newsize; convolver_attach_buffers( x ); source_chan = atom_getfloatarg(0,argc,argv); impulse_chan = atom_getfloatarg(1,argc,argv); dest_chan = atom_getfloatarg(2,argc,argv); // post("chans %d %d %d", source_chan, impulse_chan, dest_chan); if( source_chan <= 0 || impulse_chan <= 0 || dest_chan <= 0) { pd_error(0, "%s: channels are counted starting from 1",OBJECT_NAME); return; } if( source_chan > source->b_nchans ) { pd_error(0, "%s: source channel %ld out of range", OBJECT_NAME, source_chan); return; } if( impulse_chan > impulse->b_nchans ) { pd_error(0, "%s: impulse channel %ld out of range", OBJECT_NAME, impulse_chan); return; } if( dest_chan > dest->b_nchans ) { pd_error(0, "%s: dest channel %ld out of range", OBJECT_NAME, dest_chan); return; } --source_chan; --impulse_chan; --dest_chan; //inframes = source->b_frames; //outframes = dest->b_frames; // initialization routine (move out and only do once) for( N2 = 2; N2 < NCMAX; N2 *= 2) { if( N2 >= impulse->b_frames ) break; } N = 2 * N2; // be more careful with memory // also be sure to clear destination buffer // post("size of N for convolution is %d", N); if(! x->static_memory ) { if ((sbuf = (float *) getbytes((N+2) * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory", OBJECT_NAME); if ((tbuf = (float *) getbytes(N2 * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); if ((filt = (float *) getbytes((N+2) * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); if( (bitshuffle = (int *) getbytes((N*2) * sizeof(int))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); if( (trigland = (float *) getbytes((N*2) * sizeof(float))) == NULL) pd_error(0, "%s: insufficient memory",OBJECT_NAME); } x->mult = 1. / (float) N; x->last_N = N; init_rdft(N, bitshuffle, trigland); for(i = 0, j = 0; i < impulse->b_frames; i+= impulse->b_nchans, j++) { filt[j] = impulse->b_samples[i + impulse_chan].w_float; } rdft( N, 1, filt, bitshuffle, trigland ); for (i=0; i <= N; i += 2) { a = filt[i]; b = filt[i + 1]; temp = a*a + b*b; if (temp > max) max = temp; } if (max != 0.) { max = gain/(sqrt(max)); } else { pd_error(0, "%s: impulse response is all zeros",OBJECT_NAME); return; } // make normalization optional for (i=0; i< N+2; i++) filt[i] *= max; ifr_cnt = ofr_cnt = 0; if(source->b_frames - ifr_cnt >= N2) readframes = N2; else readframes = source->b_frames - ifr_cnt; // read desired channel from multichannel source buffer into sbuf for(i = 0, j = ifr_cnt * dest->b_nchans; i < readframes; i++, ifr_cnt++, j += source->b_nchans) sbuf[i] = source->b_samples[j + source_chan].w_float; // zero pad source buffer for (i = readframes; ib_frames + impulse->b_frames ) { target_frames *= 2; } //post("src frames + imp frames %d dest frames %d",source->b_frames + impulse->b_frames, dest->b_frames); if( dest->b_frames < target_frames) { //SETFLOAT(&newsize, (float) target_frames); // typedmess((void *) x->dest->b, gensym("sizeinsamps"),1, &newsize); garray_resize(x->dest->b,(float)target_frames ); post("%s: destination buffer was too small and has been resized",OBJECT_NAME); convolver_attach_buffers( x ); } while(copacetic && ofr_cnt < ifr_cnt + N2) { // post("ofr %d ifr %d, N %d",ofr_cnt, ifr_cnt, N); // convolve source buffer with filter buffer rdft( N, 1, sbuf, bitshuffle, trigland ); for (i=0; i<=N2; i++) { ip = 2*i; ip1 = ip + 1; a = sbuf[ip] * filt[ip] - sbuf[ip1] * filt[ip1]; b = sbuf[ip] * filt[ip1] + sbuf[ip1] * filt[ip]; sbuf[ip] = a; sbuf[ip1] = b; } // inverse fft rdft( N, -1, sbuf, bitshuffle, trigland ); //accumulate to output buffer // denormals fix is in for (i=0; ib_frames - ofr_cnt >= N2) writeframes = N2; else { writeframes = source->b_frames - ofr_cnt; // post("cutting off with N2 %d dest frames - ofr %d", N2, dest->b_frames - ofr_cnt ); copacetic = 0; // reached end of dest buffer } //shift samples to desired channel of multichannel output buffer for(i = 0, j = ofr_cnt * dest->b_nchans; i < writeframes; i++, ofr_cnt++, j += dest->b_nchans) dest->b_samples[j + dest_chan].w_float = tbuf[i]; // shift over remaining convolved samples for (i=0; ib_frames - ifr_cnt >= N2) readframes = N2; else { readframes = source->b_frames - ifr_cnt; } // arbitrary input channel read for(i = 0, j = ifr_cnt * source->b_nchans; i < readframes; i++, ifr_cnt++, j += source->b_nchans) sbuf[i] = source->b_samples[j + source_chan].w_float; // zero pad for (i = readframes; ib_frames; i++, j += dest->b_nchans) { if(max < fabs(dest->b_samples[j + dest_chan].w_float) ) max = fabs(dest->b_samples[j + dest_chan].w_float); } if(max <= 0.0) { post("convolvesf: zero output"); return; } rescale = 1.0 / max; // post("max: %f, second rescale: %f", max, rescale); for(i = 0, j = 0; i < dest->b_frames; i++, j+= dest->b_nchans) { dest->b_samples[j + dest_chan].w_float *= rescale; } // FAILED BY HERE // post("rescale done"); // return; if(! x->static_memory ) { freebytes(sbuf,(N+2) * sizeof(float)); freebytes(tbuf,N2 * sizeof(float)); freebytes(filt,(N+2) * sizeof(float)); freebytes(bitshuffle,(N*2) * sizeof(int)); freebytes(trigland,(N*2) * sizeof(float)); } else { x->N = N; x->N2 = N2; } outlet_bang(x->bang); garray_redraw(x->dest->b); } void convolver_noiseimp(t_convolver *x, t_floatarg curve) { long b_frames; t_word *b_samples; float sr = x->sr; int i; int count; // int position; float guess; float level = 1.0, endLevel = 0.001; float grow, a1, a2, b1; if(fabs(curve) < 0.001) { curve = 0.001; } // let's be current convolver_attach_buffers(x); //b_nchans = x->impulse->b_nchans; b_frames = x->impulse->b_frames; b_samples = x->impulse->b_samples; // chan test if( sr == 0. ) { pd_error(0, "zero sample rate"); return; } // zero out buffer //dur = (float) b_frames / sr; count = b_frames; if(b_frames < 20) { post("impulse buffer too small!"); return; } // memset((char *)b_samples, 0, b_nchans * b_frames * sizeof(float)); // return; level = 1.0; endLevel = 0.001; grow = exp(curve / (count - 1) ); a1 = (endLevel - level) / (1.0 - exp(curve)); a2 = level + a1; b1 = a1; for( i = 0; i < b_frames; i++ ) { guess = boundrand(-1.0, 1.0); //gain = 1. - guess; b1 = b1 * grow; level = a2 - b1; b_samples[i].w_float = level * guess; } garray_redraw(x->impulse->b); outlet_bang(x->bang); } void convolver_spikeimp(t_convolver *x, t_floatarg density) { long b_nchans; long b_frames; t_word *b_samples; float sr = x->sr; int i, j; int count; int position; float gain, guess; float dur; // let's be current convolver_attach_buffers(x); b_nchans = x->impulse->b_nchans; b_frames = x->impulse->b_frames; b_samples = x->impulse->b_samples; // chan test if( sr == 0. ) { pd_error(0, "zero sample rate"); return; } // zero out buffer dur = (float) b_frames / sr; count = density * dur; // memset((char *)b_samples, 0, b_nchans * b_frames * sizeof(float)); // assume mono forever for(i = 0; i < b_frames; i++){ b_samples[i].w_float = 0.0; } // return; for( j = 0; j < b_nchans; j++ ) { for( i = 0; i < count; i++ ) { guess = boundrand(0., 1.); gain = 1. - guess; gain = gain * gain; if( boundrand(0.0,1.0) > 0.5 ) { gain = gain * -1.0; // randomly invert signs to remove DC } position = (int) (dur * guess * guess * sr) * b_nchans + j; if( position >= b_frames * b_nchans ) { pd_error(0, "%d exceeds %ld",position, b_frames * b_nchans); } else{ b_samples[ position ].w_float = gain; } } } garray_redraw(x->impulse->b); outlet_bang(x->bang); } float boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); } void *convolver_new(t_symbol *msg, int argc, t_atom *argv) { t_convolver *x = (t_convolver *)pd_new(convolver_class); (void)msg; x->bang = outlet_new(&x->x_obj, gensym("bang")); srand(time(0)); //need "seed" message x->impulse = (t_buffy *)getbytes(sizeof(t_buffy)); x->source = (t_buffy *)getbytes(sizeof(t_buffy)); x->dest = (t_buffy *)getbytes(sizeof(t_buffy)); x->static_memory = 0; // default names x->impulse->myname = gensym("impulse_buf"); x->source->myname = gensym("source_buf"); x->dest->myname = gensym("dest_buf"); x->last_N = -1; x->source->myname = atom_getsymbolarg(0,argc,argv); x->impulse->myname = atom_getsymbolarg(1,argc,argv); x->dest->myname = atom_getsymbolarg(2,argc,argv); x->sr = sys_getsr(); return x; } void convolver_attach_buffers(t_convolver *x) { convolver_setbuf(x->source); convolver_setbuf(x->impulse); convolver_setbuf(x->dest); } void convolver_setbuf(t_buffy *trybuf) { t_garray *a; int b_frames; /* load up sample array */ if (!(a = (t_garray *)pd_findbyclass(trybuf->myname, garray_class))) { if (*trybuf->myname->s_name) pd_error(0, "%s: %s: no such array", OBJECT_NAME, trybuf->myname->s_name); } else if (!garray_getfloatwords(a, &b_frames, &trybuf->b_samples)) { // possible crash worry? pd_error(0, "%s: bad template for %s", trybuf->myname->s_name,OBJECT_NAME); trybuf->b_valid = 0; } else { trybuf->b_frames = b_frames; trybuf->b_nchans = 1; // Pd buffers are always mono (so far) trybuf->b = a; // link to array garray_usedindsp(a); } } /* t_int *convolver_perform(t_int *w) { return w + 4; // maybe we don't need this guy at all } */ void convolver_dsp_free(t_convolver *x) { int N = x->N; int N2 = x->N2; freebytes(x->impulse, sizeof(t_buffy)); freebytes(x->source, sizeof(t_buffy)); freebytes(x->dest, sizeof(t_buffy)); if( x->static_memory ) { freebytes(x->sbuf, (N+2) * sizeof(float)); freebytes(x->tbuf, N2 * sizeof(float)); freebytes(x->filt, (N+2) * sizeof(float)); freebytes(x->bitshuffle, (N*2) * sizeof(int)); freebytes(x->trigland, (N*2) * sizeof(float)); // outlet_bang(x->bang); } } /* void convolver_dsp(t_convolver *x, t_signal **sp, short *count) { // never actually do anything here } */ // old FFT stuff, soon to be replaced void cfft( float *x, int NC, int forward ) { float wr,wi, wpr,wpi, theta, scale; int mmax, ND, m, i,j, delta; // void bitreverse(); ND = NC<<1; bitreverse( x, ND ); for ( mmax = 2; mmax < ND; mmax = delta ) { delta = mmax<<1; theta = TWOPI/( forward? mmax : -mmax ); wpr = -2.*pow( sin( 0.5*theta ), 2. ); wpi = sin( theta ); wr = 1.; wi = 0.; for ( m = 0; m < mmax; m += 2 ) { register float rtemp, itemp; for ( i = m; i < ND; i += delta ) { j = i + mmax; rtemp = wr*x[j] - wi*x[j+1]; itemp = wr*x[j+1] + wi*x[j]; x[j] = x[i] - rtemp; x[j+1] = x[i+1] - itemp; x[i] += rtemp; x[i+1] += itemp; } wr = (rtemp = wr)*wpr - wi*wpi + wr; wi = wi*wpr + rtemp*wpi + wi; } } /* scale output */ scale = forward ? 1./ND : 2.; { register float *xi=x, *xe=x+ND; while ( xi < xe ) *xi++ *= scale; } } /* bitreverse places float array x containing N/2 complex values into bit-reversed order */ void bitreverse( float *x, int N ) { float rtemp,itemp; int i,j, m; for ( i = j = 0; i < N; i += 2, j += m ) { if ( j > i ) { rtemp = x[j]; itemp = x[j+1]; /* complex exchange */ x[j] = x[i]; x[j+1] = x[i+1]; x[i] = rtemp; x[i+1] = itemp; } for ( m = N>>1; m >= 2 && j >= m; m >>= 1 ) j -= m; } } void init_rdft(int n, int *ip, float *w) { int nw, nc; // void makewt(int nw, int *ip, float *w); // void makect(int nc, int *ip, float *c); nw = n >> 2; lpp_makewt(nw, ip, w); nc = n >> 2; lpp_makect(nc, ip, w + nw); return; } void rdft(int n, int isgn, float *a, int *ip, float *w) { int j, nw, nc; float xi; // void bitrv2(int n, int *ip, float *a), // cftsub(int n, float *a, float *w), // rftsub(int n, float *a, int nc, float *c); nw = ip[0]; nc = ip[1]; if (isgn < 0) { a[1] = 0.5 * (a[1] - a[0]); a[0] += a[1]; for (j = 3; j <= n - 1; j += 2) { a[j] = -a[j]; } if (n > 4) { lpp_rftsub(n, a, nc, w + nw); lpp_bitrv2(n, ip + 2, a); } lpp_cftsub(n, a, w); for (j = 1; j <= n - 1; j += 2) { a[j] = -a[j]; } } else { if (n > 4) { lpp_bitrv2(n, ip + 2, a); } lpp_cftsub(n, a, w); if (n > 4) { lpp_rftsub(n, a, nc, w + nw); } xi = a[0] - a[1]; a[0] += a[1]; a[1] = xi; } } void bitrv2(int n, int *ip, float *a) { int j, jj1, k, k1, l, m, m2; float xr, xi; ip[0] = 0; l = n; m = 1; while ((m << 2) < l) { l >>= 1; for (j = 0; j <= m - 1; j++) { ip[m + j] = ip[j] + l; } m <<= 1; } if ((m << 2) > l) { for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { jj1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[jj1]; xi = a[jj1 + 1]; a[jj1] = a[k1]; a[jj1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } else { m2 = m << 1; for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { jj1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[jj1]; xi = a[jj1 + 1]; a[jj1] = a[k1]; a[jj1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; jj1 += m2; k1 += m2; xr = a[jj1]; xi = a[jj1 + 1]; a[jj1] = a[k1]; a[jj1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } } void cftsub(int n, float *a, float *w) { int j, jj1, j2, j3, k, k1, ks, l, m; float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; l = 2; while ((l << 1) < n) { m = l << 2; for (j = 0; j <= l - 2; j += 2) { jj1 = j + l; j2 = jj1 + l; j3 = j2 + l; x0r = a[j] + a[jj1]; x0i = a[j + 1] + a[jj1 + 1]; x1r = a[j] - a[jj1]; x1i = a[j + 1] - a[jj1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i - x2i; a[jj1] = x1r - x3i; a[jj1 + 1] = x1i + x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i - x3r; } if (m < n) { wk1r = w[2]; for (j = m; j <= l + m - 2; j += 2) { jj1 = j + l; j2 = jj1 + l; j3 = j2 + l; x0r = a[j] + a[jj1]; x0i = a[j + 1] + a[jj1 + 1]; x1r = a[j] - a[jj1]; x1i = a[j + 1] - a[jj1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x2i - x0i; a[j2 + 1] = x0r - x2r; x0r = x1r - x3i; x0i = x1i + x3r; a[jj1] = wk1r * (x0r - x0i); a[jj1 + 1] = wk1r * (x0r + x0i); x0r = x3i + x1r; x0i = x3r - x1i; a[j3] = wk1r * (x0i - x0r); a[j3 + 1] = wk1r * (x0i + x0r); } k1 = 1; ks = -1; for (k = (m << 1); k <= n - m; k += m) { k1++; ks = -ks; wk1r = w[k1 << 1]; wk1i = w[(k1 << 1) + 1]; wk2r = ks * w[k1]; wk2i = w[k1 + ks]; wk3r = wk1r - 2 * wk2i * wk1i; wk3i = 2 * wk2i * wk1r - wk1i; for (j = k; j <= l + k - 2; j += 2) { jj1 = j + l; j2 = jj1 + l; j3 = j2 + l; x0r = a[j] + a[jj1]; x0i = a[j + 1] + a[jj1 + 1]; x1r = a[j] - a[jj1]; x1i = a[j + 1] - a[jj1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; x0r -= x2r; x0i -= x2i; a[j2] = wk2r * x0r - wk2i * x0i; a[j2 + 1] = wk2r * x0i + wk2i * x0r; x0r = x1r - x3i; x0i = x1i + x3r; a[jj1] = wk1r * x0r - wk1i * x0i; a[jj1 + 1] = wk1r * x0i + wk1i * x0r; x0r = x1r + x3i; x0i = x1i - x3r; a[j3] = wk3r * x0r - wk3i * x0i; a[j3 + 1] = wk3r * x0i + wk3i * x0r; } } } l = m; } if (l < n) { for (j = 0; j <= l - 2; j += 2) { jj1 = j + l; x0r = a[j] - a[jj1]; x0i = a[j + 1] - a[jj1 + 1]; a[j] += a[jj1]; a[j + 1] += a[jj1 + 1]; a[jj1] = x0r; a[jj1 + 1] = x0i; } } } void rftsub(int n, float *a, int nc, float *c) { int j, k, kk, ks; float wkr, wki, xr, xi, yr, yi; ks = (nc << 2) / n; kk = 0; for (k = (n >> 1) - 2; k >= 2; k -= 2) { j = n - k; kk += ks; wkr = 0.5 - c[kk]; wki = c[nc - kk]; xr = a[k] - a[j]; xi = a[k + 1] + a[j + 1]; yr = wkr * xr - wki * xi; yi = wkr * xi + wki * xr; a[k] -= yr; a[k + 1] -= yi; a[j] += yr; a[j + 1] -= yi; } } void makewt(int nw, int *ip, float *w) { // void bitrv2(int n, int *ip, float *a); int nwh, j; float delta, x, y; ip[0] = nw; ip[1] = 1; if (nw > 2) { nwh = nw >> 1; delta = atan(1.0) / nwh; w[0] = 1; w[1] = 0; w[nwh] = cos(delta * nwh); w[nwh + 1] = w[nwh]; for (j = 2; j <= nwh - 2; j += 2) { x = cos(delta * j); y = sin(delta * j); w[j] = x; w[j + 1] = y; w[nw - j] = y; w[nw - j + 1] = x; } bitrv2(nw, ip + 2, w); } } void makect(int nc, int *ip, float *c) { int nch, j; float delta; ip[1] = nc; if (nc > 1) { nch = nc >> 1; delta = atan(1.0) / nch; c[0] = 0.5; c[nch] = 0.5 * cos(delta * nch); for (j = 1; j <= nch - 1; j++) { c[j] = 0.5 * cos(delta * j); c[nc - j] = 0.5 * sin(delta * j); } } } pd-lyonpotpourri-3.0.1/counter~-help.pd000066400000000000000000000020261430526361000202110ustar00rootroot00000000000000#N canvas 600 60 486 409 12; #X floatatom 38 244 5 0 0 0 - - -; #N canvas 600 60 450 300 messages 0; #X obj 86 215 s counter.msgs; #X msg 87 118 minmax 20 30; #X msg 217 120 direction \$1; #X msg 218 58 1; #X msg 262 84 -1; #X text 248 58 forward; #X text 291 83 backward; #X msg 191 174 setnext 25; #X text 76 99 reset boundaries; #X text 269 174 set next value; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 2 0; #X connect 4 0 2 0; #X connect 7 0 0 0; #X restore 131 240 pd messages; #X obj 46 154 r counter.msgs; #X text 238 185 args: minimum \, maximum; #X text 216 241 <- more here; #X obj 38 208 lyonpotpourri/click2float~; #X obj 36 14 lpp-icon counter~; #X text 263 43 - click-driven counter; #X msg 40 317 \; pd dsp \$1; #X obj 40 291 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 58 292 DACs must be on for this to work; #X obj 38 122 lyonpotpourri/samm~ 60 2; #X obj 38 183 lyonpotpourri/counter~ 1 10; #X connect 2 0 12 0; #X connect 5 0 0 0; #X connect 9 0 8 0; #X connect 11 0 12 0; #X connect 12 0 5 0; pd-lyonpotpourri-3.0.1/counter~.c000066400000000000000000000055731430526361000171140ustar00rootroot00000000000000#include "MSPd.h" static t_class *counter_class; #define OBJECT_NAME "counter~" #define COUNTER_UP (1) #define COUNTER_DOWN (-1) typedef struct _counter { t_object x_obj; float x_f; long current; long min; long max; short direction; } t_counter; static void *counter_new(t_symbol *s, int argc, t_atom *argv); static t_int *counter_perform(t_int *w); static void counter_dsp(t_counter *x, t_signal **sp); static void counter_setnext(t_counter *x, t_floatarg val); static void counter_direction(t_counter *x, t_floatarg d); static void counter_minmax(t_counter *x, t_floatarg min, t_floatarg max); static void counter_version(t_counter *x); void counter_tilde_setup(void) { t_class *c; c = class_new(gensym("counter~"), (t_newmethod)counter_new,0,sizeof(t_counter), 0,A_GIMME,0); CLASS_MAINSIGNALIN(c, t_counter, x_f); class_addmethod(c, (t_method)counter_minmax,gensym("minmax"),A_FLOAT,A_FLOAT,0); class_addmethod(c, (t_method)counter_direction,gensym("direction"),A_FLOAT,0); class_addmethod(c, (t_method)counter_setnext,gensym("setnext"),A_FLOAT,0); class_addmethod(c, (t_method)counter_dsp, gensym("dsp"), A_CANT, 0); counter_class = c; potpourri_announce(OBJECT_NAME); } void counter_setnext(t_counter *x, t_floatarg val) { if( val < x->min || val > x->max) return; x->current = (long) val; } void counter_direction(t_counter *x, t_floatarg d) { if( (d != COUNTER_UP) && (d != COUNTER_DOWN) ) return; x->direction = (short) d; } void counter_minmax(t_counter *x, t_floatarg min, t_floatarg max) { if(min < 1) { return; } if(min >= max) { return; } x->min = min; x->max = max; } void *counter_new(t_symbol *s, int argc, t_atom *argv) { float farg; t_counter *x = (t_counter *)pd_new(counter_class); (void)s; outlet_new(&x->x_obj, gensym("signal")); x->direction = COUNTER_UP; farg = 1.0; atom_arg_getfloat(&farg,0,argc,argv); x->min = farg; farg = 10.0; atom_arg_getfloat(&farg,1,argc,argv); x->max = farg; if(x->min <= 1) x->min = 1; if(x->max <= x->min) x->max = 10; return x; } t_int *counter_perform(t_int *w) { t_counter *x = (t_counter *) (w[1]); t_float *in_vec = (t_float *)(w[2]); t_float *out_vec = (t_float *)(w[3]); int n = (int) w[4]; int i; long min = x->min; long max = x->max; long current = x->current; short direction = x->direction; for(i = 0; i < n; i++) { if(in_vec[i]) { out_vec[i] = current; current = current + direction; if( direction == COUNTER_UP ) { if( current > max ) { current = min; } } else if( direction == COUNTER_DOWN ) { if( current < min ) { current = max; } } } else { out_vec[i] = 0.0; } } x->current = current; return w + 5; } void counter_dsp(t_counter *x, t_signal **sp) { dsp_add(counter_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, sp[0]->s_n); } pd-lyonpotpourri-3.0.1/distortion~-help.pd000066400000000000000000000022471430526361000207350ustar00rootroot00000000000000#N canvas 600 60 649 602 12; #X floatatom 135 247 5 0 0 2 knee knee -; #X floatatom 221 247 5 0 0 2 cut cut -; #X obj 49 239 osc~ 270; #X floatatom 49 217 5 50 10000 0 - - -; #X obj 228 385 hsl 128 15 0.001 0.4 0 0 knee knee-input knee -2 -6 0 8 -259157 -1 -1 1560 1; #X obj 227 417 hsl 128 15 0.01 1 0 0 cut cut-input cut -2 -6 0 8 -259157 -1 -1 1796 1; #X obj 49 318 lop~ 8000; #X obj 49 281 lyonpotpourri/distortion~; #X obj 49 378 lpp-meters; #X obj 46 26 lpp-icon distortion~; #X text 274 53 - linear transfer function distortion; #N canvas 0 23 180 162 init 0; #X obj 2 23 loadbang; #X msg 58 64 0.15; #X msg 3 58 0.05; #X obj 3 108 s knee-input; #X obj 34 89 s cut-input; #X connect 0 0 1 0; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 3 0; #X restore 224 447 pd init; #X text 43 139 [distortion~] creates an internal transfer function to shape the wave. "knee" is where the transfer function starts to bend and "cut" is the clipping point. The transfer function is linearly interpolated from the bend point to the cut point., f 79; #X connect 0 0 7 1; #X connect 1 0 7 2; #X connect 2 0 7 0; #X connect 3 0 2 0; #X connect 6 0 8 0; #X connect 6 0 8 1; #X connect 7 0 6 0; pd-lyonpotpourri-3.0.1/distortion~.c000066400000000000000000000117101430526361000176210ustar00rootroot00000000000000#include "MSPd.h" static t_class *distortion_class; #define OBJECT_NAME "distortion~" typedef struct _distortion { t_object x_obj; float x_f; float knee; float cut; float rescale ; short mute ; short case1; } t_distortion; static void *distortion_new(t_floatarg knee, t_floatarg cut); static t_int *distortion1_perform(t_int *w); static t_int *distortion2_perform(t_int *w); static t_int *distortion3_perform(t_int *w); static void distortion_dsp(t_distortion *x, t_signal **sp); static void distortion_float(t_distortion *x, double f); static void distortion_mute(t_distortion *x, t_floatarg f); // no freeing function needed void distortion_tilde_setup(void) { distortion_class = class_new(gensym("distortion~"), (t_newmethod)distortion_new, 0,sizeof(t_distortion), 0,A_DEFFLOAT,A_DEFFLOAT,0); CLASS_MAINSIGNALIN(distortion_class, t_distortion, x_f); class_addmethod(distortion_class,(t_method)distortion_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(distortion_class,(t_method)distortion_mute,gensym("mute"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void *distortion_new(t_floatarg knee, t_floatarg cut) { t_distortion *x = (t_distortion *)pd_new(distortion_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); if( knee >= cut || knee <= 0 || cut <= 0 ) { // post("setting defaults"); x->knee = .1; x->cut = .3 ; } else { x->knee = knee; x->cut = cut; // post("User defined values: knee %f cut %f", knee, cut); } x->rescale = 1.0 / x->cut ; x->mute = 0; return x; } // use when neither signal is connected t_int *distortion1_perform(t_int *w) { float rectified_sample, in_sample; t_distortion *x = (t_distortion *) (w[1]); float *in = (t_float *)(w[2]); float *out = (t_float *)(w[5]); int n = (int)(w[6]); float knee = x->knee; float cut = x->cut; float rescale = x->rescale; if( x->mute ) { while( n-- ) { *out++ = 0; } return (w+7); } while (n--) { in_sample = *in++; rectified_sample = fabs( in_sample ); if( rectified_sample < knee ) { *out++ = in_sample; } else { if( in_sample > 0.0 ) { *out++ = rescale * (knee + (rectified_sample - knee) * (cut - knee)); } else { *out++ = rescale * (-(knee + (rectified_sample - knee) * (cut - knee))); } } } return (w+7); } // use when both signals are connected t_int *distortion2_perform(t_int *w) { float rectified_sample, in_sample; t_distortion *x = (t_distortion *) (w[1]); float *in = (t_float *)(w[2]); float *data1 = (t_float *)(w[3]); float *data2 = (t_float *)(w[4]); float *out = (t_float *)(w[5]); int n = (int)(w[6]); // double fabs(); float knee = x->knee; float cut = x->cut; float rescale = x->rescale; if( x->mute ) { while( n-- ) { *out++ = 0; } return (w+7); } while (n--) { in_sample = *in++; knee = *data1++; cut = *data2++; if( cut > 0.000001 ) rescale = 1.0 / cut; else rescale = 1.0; rectified_sample = fabs( in_sample ); if( rectified_sample < knee ) { *out++ = in_sample; } else { if( in_sample > 0.0 ) { *out++ = rescale * (knee + (rectified_sample - knee) * (cut - knee)); } else { *out++ = rescale * (-(knee + (rectified_sample - knee) * (cut - knee))); } } } x->knee = knee; x->cut = cut; x->rescale = rescale; return (w+7); } t_int *distortion3_perform(t_int *w) { float rectified_sample, in_sample; t_distortion *x = (t_distortion *) (w[1]); float *in = (t_float *)(w[2]); float *data1 = (t_float *)(w[3]); float *data2 = (t_float *)(w[4]); float *out = (t_float *)(w[5]); int n = (int)(w[6]); // double fabs(); float knee = x->knee; float cut = x->cut; float rescale = x->rescale; short case1 = x->case1; if( x->mute ) { while( n-- ) { *out++ = 0; } return (w+7); } while (n--) { // first case, knee is connected, otherwise cut is connected in_sample = *in++; if( case1 ) { knee = *data1++; } else { cut = *data2++; } if( cut > 0.000001 ) rescale = 1.0 / cut; else rescale = 1.0; rectified_sample = fabs( in_sample ); if( rectified_sample < knee ) { *out++ = in_sample; } else { if( in_sample > 0.0 ) { *out++ = rescale * (knee + (rectified_sample - knee) * (cut - knee)); } else { *out++ = rescale * (-(knee + (rectified_sample - knee) * (cut - knee))); } } } x->knee = knee; x->cut = cut; x->rescale = rescale; return (w+7); } void distortion_mute(t_distortion *x, t_floatarg f) { x->mute = f; } void distortion_dsp(t_distortion *x, t_signal **sp) { dsp_add(distortion2_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec,(t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/dmach~-help.pd000066400000000000000000001124511430526361000176120ustar00rootroot00000000000000#N canvas 373 75 691 625 12; #X obj 281 255 click2bang~; #X obj 281 278 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 52 159 r dmach-msgs; #N canvas 476 235 592 383 operation 0; #X obj 29 285 s dmach-msgs; #X msg 69 40 arm 1; #X msg 89 70 mute 0; #X msg 28 15 show 1; #X msg 115 149 tempo \$1; #X floatatom 115 128 5 0 0 0 - - -; #X msg 115 106 60; #X msg 155 105 134; #X text 171 130 change the tempo; #X text 114 39 prepare to play ptn 1; #X text 137 67 now play it; #X text 78 18 show sequence data; #X msg 105 257 instant_recall \$1; #X obj 105 233 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 125 206 by default patterns are recalled in rhythm at the end of the last pattern. Setting instant_recall to 1 means you can instantly loop or play a sequence.; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 12 0 0 0; #X connect 13 0 12 0; #X restore 321 407 pd operation; #X obj 203 545 s bassgain; #X obj 313 231 s raw-dmach-data; #N canvas 600 60 746 410 saved-patterns 0; #X obj 130 229 r raw-dmach-data; #X msg 130 105 listraw; #X obj 130 141 s dmach-msgs; #N canvas 758 132 636 491 saved 0; #X msg 10 54 readraw 0 4 0 4 1 1 0 1 0.8 1.49998 1 1 1.99997 1 0.8 3.49995 1 7 1 1 0 0.7 1 0.499993 1 0.8333 0.999986 1 1.111 1.74995 1 1.111 2.49997 1 1.333 2.99996 0.666 1.653 3.49995 2 9 1 1 0.499993 0.7 1 0.749964 1 1 1.49998 0.7 1 1.74995 1 1 2.49997 0.7 1 2.74999 0.5 1 3.24998 1 1 3.49995 0.7 1 3.74997 3 2 1 1 0.999986 1 1 2.99996 5 4 1 1.05 0 1 1.05 0.999986 1 1 1.99997 1 0.9 2.99996; #X obj 10 158 s dmach-msgs; #X connect 0 0 1 0; #X restore 356 50 pd saved; #X obj 130 309 print; #X text 196 107 report current pattern to list outlet; #X msg 403 447 68 23 20 16 53 18 14 32 5 58 50 8 33 28 3 29 52 62 70 35 13 48 42 69 26 12 37 39 17 0; #X obj 403 397 list prepend set; #X obj 403 421 list trim; #N canvas 600 60 920 579 capture-pattern-for-reuse 0; #X msg 30 131 readraw 5 4 1 6 1 0.8333 0 1 1 0.999975 0.7 0.8333 1.49996 1 1.25 2.49998 1 1 2.99997 0.7 1.11 3.49996 2 10 1 1.1 0 0.7 0.8 0.399999 0.7 0.8 0.799999 0.7 0.8 1.2 0.7 0.8 1.6 1 1 2 0.7 0.8 2.4 0.7 0.8 2.8 1 1.2 3.19999 0.7 0.8 3.59999 3 2 1 1 0.999975 1 1 3.49996 4 4 1 80 0 1 100 0.999975 1 110 2 1 120 2.99997 6 4 1 1 0 0.7 1 0.999975 0.7 1 2 0.7 1 2.99997 7 13 1 1 0 0.5 1 0.249994 0.7 1 0.499987 1 1 0.999975 0.5 1 1.24997 0.7 1 1.49996 1 1 2 0.5 1 2.24999 0.7 1 2.49998 0.9 1 2.74998 1 1 2.99997 0.7 1 3.49996 0.7 1 3.75 8 3 1 1 0.999975 1 1 2.49998 0.8 1 3.49996; #X obj 30 68 list prepend set; #X obj 30 92 list trim; #X obj 30 40 r raw-dmach-data; #X text 132 88 use generated list to read in a pattern; #X connect 1 0 2 0; #X connect 2 0 0 0; #X connect 3 0 1 0; #X restore 129 178 pd capture-pattern-for-reuse; #X obj 130 276 spigot; #X obj 208 256 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 229 254 see pattern in Pd window if you like; #X connect 0 0 10 0; #X connect 1 0 2 0; #X connect 7 0 8 0; #X connect 8 0 6 0; #X connect 10 0 4 0; #X connect 11 0 10 1; #X restore 321 461 pd saved-patterns; #X obj 206 520 hsl 64 12 0 2 0 0 empty s_bassgain empty -2 -8 0 10 -261756 -1 -1 3150 1; #N canvas 515 23 653 793 pattern-tutorial 0; #X text 31 19 You can build up patterns 1 line at a time. Here's how. ; #X text 16 62 1 make sure the sequencer is off; #X obj 31 116 s dmach-msgs; #X msg 31 91 nosequence; #X text 21 149 2 Define the bar. First number is the bar number. Second number is the quarternote count. 4 would be 4/4. 3 would be 3/4. 3.5 would be 7/8. Since you can use any fraction you like there is considerable time flexibility.; #X msg 26 213 store 5 4; #X text 103 215 put a 4/4 into bar number 5; #X obj 26 241 s dmach-msgs; #X text 27 285 3 Write your bass drum part - 4 on the floor in this case.; #X msg 34 324 slotamps 5 6 4 1 0.7 0.7 0.7; #X obj 34 349 s dmach-msgs; #X obj 38 496 s dmach-msgs; #X msg 38 471 slotamps 5 3 8 0 0 1 0 0 0 0 1; #X obj 38 598 s dmach-msgs; #X msg 38 564 slotamps 5 7 16 1 0.5 0.7 0 1 0.5 0.7 0 1 0.5 0.7 0.9 1 0 0.7 0.7; #X obj 42 690 s dmach-msgs; #X text 38 629 6 Now we'll add a line with pitch variation. First we write the rhythm.; #X text 44 721 Here's the interval pattern:; #X obj 38 786 s dmach-msgs; #X text 132 783 after the bar number and slot \, we give one transposition value for each attack; #X obj 40 903 s dmach-msgs; #X msg 40 878 slotamps 5 2 10 1 0.7 0.7 0.7 0.7 1 0.7 0.7 1 0.7; #X msg 38 761 slotincrs 5 1 0.8333 1 0.8333 1.25 1 1.11; #X msg 42 665 slotamps 5 1 8 1 0 1 0.7 0 1 1 0.7; #X text 42 933 8 We'll emphasize the pattern with transposition; #X obj 45 982 s dmach-msgs; #X obj 49 1061 s dmach-msgs; #X msg 49 1036 slotamps 5 8 8 0 0 1 0 0 1 0 0.8; #X obj 52 1195 s dmach-msgs; #X obj 220 1115 t b b; #X obj 220 1089 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 36 444 4 Now let's add a snare part.; #X text 35 378 The arguments are: bar number \, slot number (in this patch slot 6 is driving a bass drum) \, bar subdivision (this must be an integer) and an attack pattern with numbers corresponding to amplitude (zero of course is a rest).; #X text 38 847 7 Let's add some quintuplet cymbals.; #X text 43 1005 9 A couple claps.; #X text 45 1089 10 Finally a bass line.; #X text 164 1186 Note the order of messaging. A slotamps message sets all its increments to 1 so the slotincrs message must come after it. ; #X text 36 528 5 Add the hihat fill.; #X msg 44 957 slotincrs 5 2 1.1 0.8 0.8 0.8 0.8 1 0.8 0.8 1.2 0.8; #X text 47 1252 If you want to effect more complex subdivisions of the bar \, read my paper for instructions on how to do that.; #X msg 285 1143 slotamps 5 4 4 1 1 1 1; #X msg 52 1142 slotincrs 5 4 80 100 110 120; #X connect 3 0 2 0; #X connect 5 0 7 0; #X connect 9 0 10 0; #X connect 12 0 11 0; #X connect 14 0 13 0; #X connect 21 0 20 0; #X connect 22 0 18 0; #X connect 23 0 15 0; #X connect 27 0 26 0; #X connect 29 0 41 0; #X connect 29 1 40 0; #X connect 30 0 29 0; #X connect 38 0 25 0; #X connect 40 0 28 0; #X connect 41 0 28 0; #X restore 321 489 pd pattern-tutorial; #X text 304 276 pattern downbeat; #N canvas 600 60 677 330 playback 0; #X obj 10 285 s dmach-msgs; #X msg 218 97 recall \$1; #X msg 218 41 0; #X msg 256 41 1; #X msg 300 97 nosequence; #X msg 299 41 2; #X msg 335 41 3; #X msg 373 41 4; #X msg 195 193 loopsequence 0 0 0 1 0 0 1 1 2 2 2 2 3 0 0 0 0 3 3 4 2 2 3 4 4 4 1 4 3 3 3; #X obj 195 148 loadbang; #X msg 10 203 playsequence 3 4 3 4; #X text 10 175 play one time only; #X text 337 73 select a stored pattern; #X text 283 170 loop a pattern sequence; #X obj 217 122 s dmach-msgs; #X obj 218 73 t f b; #X text 214 227 another sequence; #X text 378 98 this turns off sequencer mode; #X msg 196 242 loopsequence 1 1 1 3 1 1 4 6 4 6 6 3 4 1 1 1 6 6 6 6 6 6 6 6 6; #X obj 195 169 delay 100; #X msg 406 41 5; #X msg 439 41 6; #X connect 1 0 14 0; #X connect 2 0 15 0; #X connect 3 0 15 0; #X connect 4 0 14 0; #X connect 5 0 15 0; #X connect 6 0 15 0; #X connect 7 0 15 0; #X connect 8 0 0 0; #X connect 9 0 19 0; #X connect 10 0 0 0; #X connect 15 0 1 0; #X connect 15 1 4 0; #X connect 18 0 0 0; #X connect 19 0 8 0; #X connect 20 0 15 0; #X connect 21 0 15 0; #X restore 321 353 pd playback; #N canvas 600 60 500 279 stored-patterns 0; #N canvas 600 60 1033 649 pat0 0; #X obj 92 588 s dmach-msgs; #X msg 210 111 store 0 4; #X msg 15 188 slotamps 0 0 8 1 0 0 1 1 0 0 1; #X msg 14 164 slotincrs 0 0 1 0.8 1 0.8; #X msg 268 151 slotamps 0 2 16 0 0 1 0.7 0 0 1 0.7 0 0 1 0.7 0 0.5 1 0.7; #X msg 252 211 slotamps 0 3 4 0 1 0 1; #X obj 15 142 t b b; #X obj 86 54 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 339 289 t b b; #X msg 341 344 slotamps 0 1 16 1 0 0.7 0 1 0 0 1 0 0 1 0 1 0 0.666 ; #X msg 339 325 slotincrs 0 1 1 1 0.8333 1.111 1.111 1.333 1.653; #X msg 238 454 slotamps 0 4 8 1 0 0 1 1 0 0 1; #X msg 231 432 slotincrs 0 4 60 222 66.6 88.65; #X msg 179 491 slotamps 0 5 4 1 1 1 1; #X msg 155 511 slotincrs 0 5 1.05 1.05 1 0.9; #X msg 424 225 slotamps 0 3 16 0 0 0 0 1 1 0 1 1 0 0.5 0.7 0.9 1 1 1; #X obj 162 435 t b b; #X obj 145 55 loadbang; #X obj 221 372 t b b; #X obj 67 84 t b b b b b b; #X text 444 210 snare rush; #X text 263 194 normal snare; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 3 0; #X connect 6 1 2 0; #X connect 7 0 19 0; #X connect 8 0 10 0; #X connect 8 1 9 0; #X connect 9 0 0 0; #X connect 10 0 0 0; #X connect 11 0 0 0; #X connect 12 0 0 0; #X connect 13 0 0 0; #X connect 14 0 0 0; #X connect 15 0 0 0; #X connect 16 0 14 0; #X connect 16 1 13 0; #X connect 17 0 7 0; #X connect 18 0 12 0; #X connect 18 1 11 0; #X connect 19 0 6 0; #X connect 19 1 5 0; #X connect 19 1 16 0; #X connect 19 2 4 0; #X connect 19 3 8 0; #X connect 19 4 18 0; #X connect 19 5 1 0; #X restore 20 30 pd pat0; #N canvas 551 229 733 551 pat1 0; #X msg 165 57 store 1 3.5; #X obj 178 229 s dmach-msgs; #X msg 373 203 slotamps 1 3 14 0 0 0 0 1 0 0 0 0 0 1 1 1 0; #X msg 405 290 slotamps 1 7 14 1 1 1 1 1 0 0 0 1 0 1 0 1 0; #X msg 450 339 slotamps 1 2 7 0 0 0 1 0 0 0; #X msg 341 153 slotamps 1 6 7 1 0 0 1 0 0.6 0; #X msg 264 73 slotincrs 1 6 1 0.9 0.6; #X msg 5 448 slotamps 1 4 14 1 0 0 1 1 1 1 0 1 1 1 1 1 0; #X msg 6 427 slotincrs 1 4 80 90 300 120 600 70 111 131 210 60; #X msg 398 249 slotamps 1 8 7 0 1 0.7 0 1 0.7 0; #X msg 272 92 slotamps 1 1 0 0 0 1 0 1 0 1; #X obj 148 401 t b b; #X obj 278 46 t b b; #X obj 140 22 t b b b b b b b b b; #X obj 93 27 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 53 0 loadbang; #X msg 424 392 slotamps 1 8 7 1 1 1 0 0 0 0; #X connect 0 0 1 0; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 4 0 1 0; #X connect 5 0 1 0; #X connect 6 0 1 0; #X connect 7 0 1 0; #X connect 8 0 1 0; #X connect 9 0 1 0; #X connect 10 0 1 0; #X connect 11 0 8 0; #X connect 11 1 7 0; #X connect 12 0 6 0; #X connect 12 1 10 0; #X connect 13 0 11 0; #X connect 13 1 16 0; #X connect 13 2 4 0; #X connect 13 3 3 0; #X connect 13 4 9 0; #X connect 13 5 2 0; #X connect 13 6 5 0; #X connect 13 7 12 0; #X connect 13 8 0 0; #X connect 14 0 13 0; #X connect 15 0 14 0; #X connect 16 0 1 0; #X restore 20 55 pd pat1; #N canvas 85 193 1049 665 pat2 0; #X obj 92 588 s dmach-msgs; #X obj 15 142 t b b; #X obj 86 54 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 339 289 t b b; #X obj 162 435 t b b; #X obj 145 55 loadbang; #X obj 221 372 t b b; #X text 444 210 snare rush; #X text 263 194 normal snare; #X msg 210 111 store 2 4; #X msg 268 151 slotamps 2 2 16 0 0 1 0.7 0 0 1 0.7 0 0 1 0.7 0 0.5 1 0.7; #X msg 245 249 slotamps 2 3 4 0 1 0 1; #X msg 424 225 slotamps 2 3 16 0 0 0 0 1 1 0 1 1 0 0.5 0.7 0.9 1 1 1; #X msg 339 325 slotincrs 2 1 1 1 0.8333 1.111 1.111 1.333 1.653; #X msg 341 345 slotamps 2 1 16 1 0 0.7 0 1 0 0 1 0 0 1 0 1 0 0.666 ; #X msg 15 188 slotamps 2 0 8 1 0 0 1 1 0 0 1; #X msg 14 164 slotincrs 2 0 1 0.8 1 0.8; #X obj 67 84 t b b b b b b b b; #X msg 142 521 slotincrs 2 6 1.05 1.05 0.9 1 0.8; #X msg 177 492 slotamps 2 6 16 1 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0; #X msg 532 470 slotamps 2 8 16 1 0.9 0.8 0.6 1 0.9 0.8 0.6 1 0.9 0.8 0.6 1 0.9 0.8 0.6; #X msg 283 455 slotamps 2 4 2 1 1; #X msg 229 431 slotincrs 2 4 555 597; #X connect 1 0 16 0; #X connect 1 1 15 0; #X connect 2 0 17 0; #X connect 3 0 13 0; #X connect 3 1 14 0; #X connect 4 0 18 0; #X connect 4 1 19 0; #X connect 5 0 2 0; #X connect 6 0 22 0; #X connect 6 1 21 0; #X connect 9 0 0 0; #X connect 10 0 0 0; #X connect 11 0 0 0; #X connect 12 0 0 0; #X connect 13 0 0 0; #X connect 14 0 0 0; #X connect 15 0 0 0; #X connect 16 0 0 0; #X connect 17 0 1 0; #X connect 17 1 4 0; #X connect 17 2 10 0; #X connect 17 3 3 0; #X connect 17 4 6 0; #X connect 17 5 11 0; #X connect 17 6 20 0; #X connect 17 7 9 0; #X connect 18 0 0 0; #X connect 19 0 0 0; #X connect 20 0 0 0; #X connect 21 0 0 0; #X connect 22 0 0 0; #X restore 20 80 pd pat2; #N canvas 368 153 785 643 pat3 0; #X obj 154 226 s dmach-msgs; #X msg 177 120 store 3 3; #X msg 338 153 slotamps 3 0 9 1 0 0.7 1 0 0.7 1 0 0; #X msg 398 213 slotamps 3 8 9 0 1 0.5 0 1 0.5 0 0.5 1; #X msg 399 249 slotincrs 3 8 0.7 0.7 0.7 0.7 0.7 0.6; #X msg 347 323 slotamps 3 7 18 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 ; #X msg 414 356 slotamps 3 2 3 1 1 1; #X msg 264 423 slotamps 3 4 9 1 1 1 1 1 1 1 1 1; #X msg 272 466 slotincrs 3 4 89 111 127 76 140 222 997 560 56; #X obj 250 60 t b b b b b b; #X obj 374 189 t b b; #X obj 304 375 t b b; #X obj 221 53 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 124 63 loadbang; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X connect 8 0 0 0; #X connect 9 0 11 0; #X connect 9 1 6 0; #X connect 9 2 5 0; #X connect 9 3 10 0; #X connect 9 4 2 0; #X connect 9 5 1 0; #X connect 10 0 4 0; #X connect 10 1 3 0; #X connect 11 0 8 0; #X connect 11 1 7 0; #X connect 12 0 9 0; #X connect 13 0 12 0; #X restore 20 105 pd pat3; #N canvas 383 180 805 663 pat4 0; #X obj 134 585 s dmach-msgs; #X msg 177 119 store 4 3.33333; #X msg 361 513 slotamps 4 4 10 1 1 1 1 1 1 1 1 1 1; #X msg 338 153 slotamps 4 0 10 1 0 0.7 1 0 0.7 1 0 1 0; #X msg 385 243 slotamps 4 8 10 0 1 0.5 0 1 0.5 0 0.5 1 1; #X msg 355 221 slotincrs 4 8 0.7 0.7 0.7 0.7 0.7 0.6 0.55; #X msg 347 322 slotamps 4 7 20 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 1 0 1 1; #X msg 420 356 slotamps 4 2 10 1 0 0 1 0 0 1 0 0 1 0 1 0; #X msg 337 490 slotincrs 4 4 89 111 127 76 140 222 997 560 333 1444 ; #X obj 359 189 t b b; #X obj 349 459 t b b; #X obj 184 43 t b b b b b b; #X text 314 111 A bar with 10 triplets (hard to notate!); #X obj 135 56 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 110 25 loadbang; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X connect 8 0 0 0; #X connect 9 0 5 0; #X connect 9 1 4 0; #X connect 10 0 8 0; #X connect 10 1 2 0; #X connect 11 0 10 0; #X connect 11 1 7 0; #X connect 11 2 6 0; #X connect 11 3 9 0; #X connect 11 4 3 0; #X connect 11 5 1 0; #X connect 13 0 11 0; #X connect 14 0 13 0; #X restore 20 130 pd pat4; #X text 11 12 pattern assembly; #X obj 164 184 s dmach-msgs; #N canvas 328 128 821 601 pat6 0; #X obj -9 526 s dmach-msgs; #X msg 571 34 store 6 3.25; #X msg 37 76 slotamps 6 0 13 1 0 0 0 1 0 0 1 0 0 1 0 0; #X msg 31 221 slotamps 6 2 13 1 0 0 0 1 0 0 1 0 0 1 0 0; #X msg 108 30 slotamps 6 6 13 1 0 0 0 0 0 0 0 0 1 0 1 0; #X msg 35 366 slotamps 6 1 13 1 0 1 0 0 0 1 0 0 0 1 0 0; #X msg 30 337 slotincrs 6 1 0.5 1.5 2 1; #X msg 118 493 slotamps 6 4 13 1 0.7 0.7 0.7 1 0.5 0.5 1 0.5 0.5 1 0.5 0.5; #X msg 143 457 slotincrs 6 4 80 160 320 640 160 320 640 80 160 320 160 320 640; #X msg 156 140 slotamps 6 3 13 0 0 1 1 0 0 0 1 0 1 0 0 1.5; #X msg 67 259 slotamps 6 7 13 0 0 1 1 0 1 1 0 1 1 0 1 1.3; #X msg 149 191 slotamps 6 5 13 0 0 0 0 1 0 0 0 0 0 0 0 1.2; #X msg 424 264 slotamps 6 8 13 0 0 0 0 1 0 0 0 0 0 0 0 1.2; #X msg 405 242 slotincrs 6 8 1 1.06; #X obj 22 -51 loadbang; #X obj 246 424 t b b; #X obj 138 304 t b b; #X obj 414 219 t b b; #X text 573 9 13/16 bar; #X obj 24 -12 t b b b b b b b b b b; #X obj 108 -48 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X connect 8 0 0 0; #X connect 9 0 0 0; #X connect 10 0 0 0; #X connect 11 0 0 0; #X connect 12 0 0 0; #X connect 13 0 0 0; #X connect 14 0 19 0; #X connect 15 0 8 0; #X connect 15 1 7 0; #X connect 16 0 6 0; #X connect 16 1 5 0; #X connect 17 0 13 0; #X connect 17 1 12 0; #X connect 19 0 15 0; #X connect 19 1 16 0; #X connect 19 2 10 0; #X connect 19 3 3 0; #X connect 19 4 17 0; #X connect 19 5 11 0; #X connect 19 6 9 0; #X connect 19 7 4 0; #X connect 19 8 2 0; #X connect 19 9 1 0; #X connect 20 0 19 0; #X restore 20 180 pd pat6; #X msg 219 134 printraw 5; #N canvas 600 60 628 384 pat5 0; #X obj 16 249 s dmach-msgs; #X obj 16 49 loadbang; #X msg 16 89 readraw 5 4 1 6 1 0.8333 0 1 1 0.999975 0.7 0.8333 1.49996 1 1.25 2.49998 1 1 2.99997 0.7 1.11 3.49996 2 10 1 1.1 0 0.7 0.8 0.399999 0.7 0.8 0.799999 0.7 0.8 1.2 0.7 0.8 1.6 1 1 2 0.7 0.8 2.4 0.7 0.8 2.8 1 1.2 3.19999 0.7 0.8 3.59999 3 2 1 1 0.999975 1 1 3.49996 4 4 1 80 0 1 100 0.999975 1 110 2 1 120 2.99997 6 4 1 1 0 0.7 1 0.999975 0.7 1 2 0.7 1 2.99997 7 13 1 1 0 0.5 1 0.249994 0.7 1 0.499987 1 1 0.999975 0.5 1 1.24997 0.7 1 1.49996 1 1 2 0.5 1 2.24999 0.7 1 2.49998 0.9 1 2.74998 1 1 2.99997 0.7 1 3.49996 0.7 1 3.75 8 3 1 1 0.999975 1 1 2.49998 0.8 1 3.49996; #X connect 1 0 2 0; #X connect 2 0 0 0; #X restore 20 155 pd pat5; #X text 192 114 show all attacks for ptn 5; #X msg 164 85 listraw 5; #X text 159 58 send ptn 5 to list outlet for possible reuse; #X connect 8 0 6 0; #X connect 11 0 6 0; #X restore 321 380 pd stored-patterns; #N canvas 252 329 436 361 playback-adjustments 0; #X obj 291 272 s dmach-msgs; #X obj 67 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 91 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 115 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 139 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 162 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 43 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X obj 74 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X obj 106 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X obj 137 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X obj 169 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X msg 44 173 1; #X obj 200 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X obj 186 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 232 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X obj 263 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #X obj 295 40 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -215152 -1 -1 0 1; #N canvas 19 93 1162 506 adjust-gains__________________________ 0; #X obj 81 215 outlet; #X obj 83 71 inlet; #X floatatom 82 128 5 0 0 0 - - -; #X msg 82 156 gain 0 \$1; #X obj 169 67 inlet; #X floatatom 168 124 5 0 0 0 - - -; #X obj 258 67 inlet; #X floatatom 257 124 5 0 0 0 - - -; #X obj 352 68 inlet; #X floatatom 351 125 5 0 0 0 - - -; #X obj 447 71 inlet; #X floatatom 446 128 5 0 0 0 - - -; #X msg 168 152 gain 1 \$1; #X msg 257 152 gain 2 \$1; #X msg 351 153 gain 3 \$1; #X msg 446 156 gain 4 \$1; #X obj 532 72 inlet; #X floatatom 531 129 5 0 0 0 - - -; #X msg 532 157 gain 5 \$1; #X obj 531 103 smap 0 4; #X obj 626 74 inlet; #X floatatom 625 131 5 0 0 0 - - -; #X obj 625 105 smap 0 4; #X msg 626 159 gain 6 \$1; #X obj 704 75 inlet; #X floatatom 703 132 5 0 0 0 - - -; #X obj 703 106 smap 0 4; #X msg 704 159 gain 7 \$1; #X obj 788 77 inlet; #X floatatom 787 134 5 0 0 0 - - -; #X obj 787 108 smap 0 4; #X msg 788 161 gain 8 \$1; #X obj 888 78 inlet; #X obj 447 102 smap 0 4; #X obj 352 99 smap 0 4; #X obj 258 98 smap 0 4; #X obj 169 98 smap 0 4; #X obj 83 102 smap 0 4; #X connect 1 0 37 0; #X connect 2 0 3 0; #X connect 3 0 0 0; #X connect 4 0 36 0; #X connect 5 0 12 0; #X connect 6 0 35 0; #X connect 7 0 13 0; #X connect 8 0 34 0; #X connect 9 0 14 0; #X connect 10 0 33 0; #X connect 11 0 15 0; #X connect 12 0 0 0; #X connect 13 0 0 0; #X connect 14 0 0 0; #X connect 15 0 0 0; #X connect 16 0 19 0; #X connect 17 0 18 0; #X connect 18 0 0 0; #X connect 19 0 17 0; #X connect 20 0 22 0; #X connect 21 0 23 0; #X connect 22 0 21 0; #X connect 23 0 0 0; #X connect 24 0 26 0; #X connect 25 0 27 0; #X connect 26 0 25 0; #X connect 27 0 0 0; #X connect 28 0 30 0; #X connect 29 0 31 0; #X connect 30 0 29 0; #X connect 31 0 0 0; #X connect 32 0 29 0; #X connect 32 0 25 0; #X connect 32 0 21 0; #X connect 32 0 17 0; #X connect 32 0 11 0; #X connect 32 0 9 0; #X connect 32 0 7 0; #X connect 32 0 5 0; #X connect 32 0 2 0; #X connect 33 0 11 0; #X connect 34 0 9 0; #X connect 35 0 7 0; #X connect 36 0 5 0; #X connect 37 0 2 0; #X restore 43 106 pd adjust-gains__________________________; #X msg 327 54 1; #X obj 42 133 s dmach-msgs; #X obj 44 300 s dmach-msgs; #N canvas 241 125 1002 464 gates 0; #X obj 96 342 outlet; #X obj 136 58 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 134 99 muteslot 1 \$1; #X obj 238 65 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 237 99 muteslot 2 \$1; #X obj 34 56 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 ; #X msg 33 97 muteslot 0 \$1; #X obj 343 64 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 447 64 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 547 63 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 342 98 muteslot 3 \$1; #X msg 445 98 muteslot 4 \$1; #X msg 546 97 muteslot 5 \$1; #X obj 561 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 665 176 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 765 175 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 560 209 muteslot 6 \$1; #X msg 663 210 muteslot 7 \$1; #X msg 764 209 muteslot 8 \$1; #X text 247 363 turn slots on or off; #X connect 1 0 2 0; #X connect 2 0 0 0; #X connect 3 0 4 0; #X connect 4 0 0 0; #X connect 5 0 6 0; #X connect 6 0 0 0; #X connect 7 0 10 0; #X connect 8 0 11 0; #X connect 9 0 12 0; #X connect 10 0 0 0; #X connect 11 0 0 0; #X connect 12 0 0 0; #X connect 13 0 16 0; #X connect 14 0 17 0; #X connect 15 0 18 0; #X connect 16 0 0 0; #X connect 17 0 0 0; #X connect 18 0 0 0; #X restore 291 242 pd gates; #X obj 210 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 234 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #X obj 258 201 vsl 10 55 0 127 0 0 empty empty empty 0 -9 0 10 -93493 -1 -1 0 1; #N canvas 0 156 1248 402 transposers_________________ 0; #X obj 49 49 inlet; #N canvas 600 60 458 308 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 49 80 pd zmap; #X floatatom 48 106 5 0 0 0 - - -; #X msg 48 134 transpose 0 \$1; #X obj 47 180 outlet; #X obj 168 48 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 168 79 pd zmap; #X floatatom 167 105 5 0 0 0 - - -; #X obj 284 46 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 284 77 pd zmap; #X floatatom 283 103 5 0 0 0 - - -; #X obj 394 48 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 394 79 pd zmap; #X floatatom 393 105 5 0 0 0 - - -; #X obj 509 49 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 509 80 pd zmap; #X floatatom 509 106 5 0 0 0 - - -; #X msg 167 133 transpose 1 \$1; #X msg 283 131 transpose 2 \$1; #X msg 393 133 transpose 3 \$1; #X msg 509 134 transpose 4 \$1; #X obj 3 47 inlet; #X obj 622 48 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 622 79 pd zmap; #X floatatom 622 105 5 0 0 0 - - -; #X msg 622 134 transpose 5 \$1; #X obj 732 48 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 732 79 pd zmap; #X floatatom 732 105 5 0 0 0 - - -; #X obj 846 54 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 846 85 pd zmap; #X floatatom 846 111 5 0 0 0 - - -; #X obj 967 52 inlet; #N canvas 600 60 454 304 zmap 0; #X obj 56 34 inlet; #X obj 56 60 / 127; #X msg 139 43 0.5; #X msg 181 43 1.5; #X obj 138 78 - 0; #X obj 140 20 t b b; #X floatatom 96 111 5 0 0 0 - - -; #X obj 56 131 *; #X obj 56 160 +; #X floatatom 103 142 5 0 0 0 - - -; #X obj 56 187 outlet; #X obj 140 -1 loadbang; #X connect 0 0 1 0; #X connect 1 0 7 0; #X connect 2 0 4 1; #X connect 2 0 9 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 5 0 2 0; #X connect 5 1 3 0; #X connect 6 0 7 1; #X connect 7 0 8 0; #X connect 8 0 10 0; #X connect 9 0 8 1; #X connect 11 0 5 0; #X restore 967 83 pd zmap; #X floatatom 967 109 5 0 0 0 - - -; #X msg 732 134 transpose 6 \$1; #X msg 846 140 transpose 7 \$1; #X msg 967 138 transpose 8 \$1; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 5 0 6 0; #X connect 6 0 7 0; #X connect 7 0 17 0; #X connect 8 0 9 0; #X connect 9 0 10 0; #X connect 10 0 18 0; #X connect 11 0 12 0; #X connect 12 0 13 0; #X connect 13 0 19 0; #X connect 14 0 15 0; #X connect 15 0 16 0; #X connect 16 0 20 0; #X connect 17 0 4 0; #X connect 18 0 4 0; #X connect 19 0 4 0; #X connect 20 0 4 0; #X connect 21 0 2 0; #X connect 21 0 7 0; #X connect 21 0 10 0; #X connect 21 0 13 0; #X connect 21 0 16 0; #X connect 21 0 24 0; #X connect 22 0 23 0; #X connect 23 0 24 0; #X connect 24 0 25 0; #X connect 25 0 4 0; #X connect 26 0 27 0; #X connect 27 0 28 0; #X connect 28 0 35 0; #X connect 29 0 30 0; #X connect 30 0 31 0; #X connect 31 0 36 0; #X connect 32 0 33 0; #X connect 33 0 34 0; #X connect 34 0 37 0; #X connect 35 0 4 0; #X connect 36 0 4 0; #X connect 37 0 4 0; #X restore 44 272 pd transposers_________________; #X connect 1 0 25 1; #X connect 2 0 25 2; #X connect 3 0 25 3; #X connect 4 0 25 4; #X connect 5 0 25 5; #X connect 6 0 17 0; #X connect 7 0 17 1; #X connect 8 0 17 2; #X connect 9 0 17 3; #X connect 10 0 17 4; #X connect 11 0 25 0; #X connect 12 0 17 5; #X connect 13 0 25 6; #X connect 14 0 17 6; #X connect 15 0 17 7; #X connect 16 0 17 8; #X connect 17 0 19 0; #X connect 18 0 17 9; #X connect 21 0 0 0; #X connect 22 0 25 7; #X connect 23 0 25 8; #X connect 24 0 25 9; #X connect 25 0 20 0; #X restore 321 434 pd playback-adjustments; #X text 312 187 args: tempo \, voices; #X obj 52 186 lyonpotpourri/dmach~ 134 9, f 35; #N canvas 0 23 1005 631 read-the-paper 0; #X msg 30 112 browse http://disis.music.vt.edu/eric/LyonPapers/SampleAccurate-Lyon-ICMC2006.pdf , f 81; #X obj 30 138 pdcontrol; #X obj 44 56 inlet; #X connect 0 0 1 0; #X connect 2 0 0 0; #X restore 322 547 pd read-the-paper; #X obj 322 522 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 52 380 lpp-meters; #N canvas 16 184 1268 473 playback____________________ 0; #X obj 9 52 inlet~; #X obj 75 52 inlet~; #X obj 143 52 inlet~; #X obj 209 52 inlet~; #X obj 273 52 inlet~; #X obj 339 52 inlet~; #X obj 404 52 inlet~; #X obj 470 52 inlet~; #X obj 537 52 inlet~; #X obj 603 52 inlet~; #X obj 117 381 outlet~; #N canvas 509 23 580 591 bass-synth 0; #X obj 304 369 *~; #X obj 127 544 outlet~; #X obj 117 18 inlet~; #X obj 183 20 inlet~; #X obj 128 513 *~ 0; #X floatatom 347 387 5 0 0 0 - - -; #X obj 273 243 +~ 1400; #X obj 273 222 *~ 1000; #X obj 272 201 osc~ 0.25; #X obj 278 422 vcf~ 4; #X obj 349 422 r bassgain; #X floatatom 350 445 5 0 0 0 - - -; #X floatatom 311 285 5 0 0 0 - - -; #X floatatom 375 285 5 0 0 0 - - -; #X obj 358 49 osc~ 5; #X obj 346 80 *~ 0.005; #X obj 305 95 +~; #X obj 285 61 sig~ 1; #X obj 56 76 *~; #N canvas 0 22 462 312 init 0; #X obj 97 195 outlet; #X obj 106 221 outlet; #X obj 158 231 outlet; #X obj 137 137 unpack f f; #X obj 149 29 loadbang; #X msg 83 147 4; #X msg 149 109 0.025 0.05; #X msg 205 194 10 30 600 100; #X obj 209 235 outlet; #X connect 3 0 1 0; #X connect 3 1 2 0; #X connect 4 0 6 0; #X connect 4 0 5 0; #X connect 4 0 7 0; #X connect 5 0 0 0; #X connect 6 0 3 0; #X connect 7 0 8 0; #X restore 352 247 pd init; #X obj 230 60 *~ 0.5; #X floatatom 90 378 5 0 0 0 - - -; #X floatatom 154 378 5 0 0 0 - - -; #N canvas 0 22 466 316 init 0; #X obj 106 221 outlet; #X obj 158 231 outlet; #X obj 137 137 unpack f f; #X obj 149 29 loadbang; #X msg 149 109 0.1 0.3; #X connect 2 0 0 0; #X connect 2 1 1 0; #X connect 3 0 4 0; #X connect 4 0 2 0; #X restore 131 340 pd init; #X obj 121 483 lop~ 3000; #X floatatom 233 515 5 0 0 0 - - -; #X obj 24 448 osc~; #X obj 94 313 *~ 0.5; #X msg 150 293 0.666; #X obj 27 482 *~ 0.2; #X msg 103 262 0.5; #X msg 144 261 0.25; #X obj 316 499 loadbang; #X msg 316 520 1; #X obj 315 544 s s_bassgain; #X obj 225 176 lyonpotpourri/oscil~ 440 8192 buzz 16; #X obj 52 131 lyonpotpourri/oscil~ 440 8192 square 4; #X obj 408 355 lyonpotpourri/adsr~; #X obj 247 334 lyonpotpourri/distortion~ 0.1 0.2; #X obj 118 462 lyonpotpourri/distortion~; #X connect 0 0 9 0; #X connect 2 0 37 0; #X connect 3 0 18 0; #X connect 3 0 20 0; #X connect 4 0 1 0; #X connect 5 0 9 2; #X connect 6 0 9 1; #X connect 7 0 6 0; #X connect 8 0 7 0; #X connect 9 0 39 0; #X connect 10 0 11 0; #X connect 11 0 4 1; #X connect 12 0 38 1; #X connect 13 0 38 2; #X connect 14 0 15 0; #X connect 15 0 16 1; #X connect 16 0 18 1; #X connect 17 0 16 0; #X connect 18 0 27 0; #X connect 18 0 36 0; #X connect 19 0 5 0; #X connect 19 1 12 0; #X connect 19 2 13 0; #X connect 19 3 37 0; #X connect 20 0 35 0; #X connect 21 0 39 1; #X connect 22 0 39 2; #X connect 23 0 21 0; #X connect 23 1 22 0; #X connect 24 0 4 0; #X connect 25 0 24 1; #X connect 26 0 29 0; #X connect 27 0 26 0; #X connect 28 0 27 1; #X connect 29 0 4 0; #X connect 30 0 27 1; #X connect 31 0 27 1; #X connect 32 0 33 0; #X connect 33 0 34 0; #X connect 35 0 38 0; #X connect 36 0 38 0; #X connect 37 0 0 1; #X connect 38 0 0 0; #X connect 39 0 24 0; #X restore 238 224 pd bass-synth; #N canvas 215 196 532 615 load-waveforms 0; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach1 21988 float 2; #X coords 0 1 21988 -1 30 20 1; #X restore 100 20 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach2 25652 float 2; #X coords 0 1 25652 -1 30 20 1; #X restore 100 60 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach3 11171 float 2; #X coords 0 1 11171 -1 30 20 1; #X restore 181 20 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach4 9284 float 2; #X coords 0 1 9284 -1 30 20 1; #X restore 181 60 graph; #X obj 18 408 soundfiler; #X obj 14 77 loadbang; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach5 42964 float 2; #X coords 0 1 42964 -1 30 20 1; #X restore 252 22 graph; #X obj 14 103 t b b b b b b b b; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach6 44614 float 2; #X coords 0 1 44614 -1 30 20 1; #X restore 253 61 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach7 9097 float 2; #X coords 0 1 9097 -1 30 20 1; #X restore 317 23 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array dmach8 10741 float 2; #X coords 0 1 10741 -1 30 20 1; #X restore 319 59 graph; #X obj 32 50 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X msg 165 137 read -resize sound/BT0AADA.aiff dmach1; #X msg 196 156 read -resize sound/trickhit.aif dmach2; #X msg 229 176 read -resize sound/hi_o_15g.aiff dmach3; #X msg 240 202 read -resize sound/KR55SNAR.aiff dmach4; #X msg 255 240 read -resize sound/soda-bd.aif dmach5; #X msg 267 282 read -resize sound/BD0010.aif dmach6; #X msg 257 338 read -resize sound/hi_c_12b.aiff dmach7; #X msg 262 358 read -resize sound/CP.aif dmach8; #X connect 5 0 7 0; #X connect 7 0 12 0; #X connect 7 1 13 0; #X connect 7 2 14 0; #X connect 7 3 15 0; #X connect 7 4 16 0; #X connect 7 5 17 0; #X connect 7 6 18 0; #X connect 7 7 19 0; #X connect 11 0 7 0; #X connect 12 0 4 0; #X connect 13 0 4 0; #X connect 14 0 4 0; #X connect 15 0 4 0; #X connect 16 0 4 0; #X connect 17 0 4 0; #X connect 18 0 4 0; #X connect 19 0 4 0; #X restore 940 21 pd load-waveforms; #X msg 113 18 static_increment 1; #X obj 113 -2 loadbang; #X obj 694 51 inlet~; #X obj 760 51 inlet~; #X obj 826 51 inlet~; #X obj 892 51 inlet~; #X obj 959 50 inlet~; #X obj 1025 50 inlet~; #X obj 1085 49 inlet~; #X obj 1151 49 inlet~; #X obj 1051 312 snapshot~; #X obj 1090 278 metro 150; #X msg 1090 252 1; #X floatatom 1051 344 5 0 0 0 - - -; #N canvas 172 230 208 286 assignments 0; #X text 41 123 4 bassline; #X text 41 25 0 bassdrum; #X text 41 48 1 trick hit; #X text 41 73 2 open hihat; #X text 41 98 3 snare drum; #X text 41 148 5 soda bd; #X text 41 173 6 808 bd; #X text 41 198 7 closed hihat; #X text 41 223 8 claps; #X restore 471 407 pd assignments; #X f 26; #X obj 700 344 lyonpotpourri/player~ dmach8; #X obj 551 302 lyonpotpourri/player~ dmach7; #X obj 461 272 lyonpotpourri/player~ dmach6; #X obj 363 240 lyonpotpourri/player~ dmach5; #X obj 81 195 lyonpotpourri/player~ dmach4; #X obj 56 168 lyonpotpourri/player~ dmach3; #X obj 43 144 lyonpotpourri/player~ dmach2; #X obj 10 122 lyonpotpourri/player~ dmach1; #X connect 0 0 35 0; #X connect 1 0 35 1; #X connect 2 0 34 0; #X connect 3 0 34 1; #X connect 4 0 33 0; #X connect 5 0 33 1; #X connect 6 0 32 0; #X connect 7 0 32 1; #X connect 8 0 11 0; #X connect 9 0 11 1; #X connect 11 0 10 0; #X connect 13 0 28 0; #X connect 13 0 29 0; #X connect 13 0 30 0; #X connect 13 0 31 0; #X connect 13 0 32 0; #X connect 13 0 33 0; #X connect 13 0 34 0; #X connect 13 0 35 0; #X connect 14 0 13 0; #X connect 15 0 31 0; #X connect 16 0 31 1; #X connect 17 0 30 0; #X connect 18 0 30 1; #X connect 19 0 29 0; #X connect 20 0 29 1; #X connect 21 0 28 0; #X connect 22 0 23 0; #X connect 22 0 28 1; #X connect 23 0 26 0; #X connect 24 0 23 0; #X connect 25 0 24 0; #X connect 28 0 10 0; #X connect 29 0 10 0; #X connect 30 0 10 0; #X connect 31 0 10 0; #X connect 32 0 10 0; #X connect 33 0 10 0; #X connect 34 0 10 0; #X connect 35 0 10 0; #X restore 52 319 pd playback____________________; #X obj 47 24 lpp-icon dmach~; #X text 271 52 - freeform drum pattern programming; #X text 48 121 [dmach~] coordinates click triggers and increment signals for pattern-based sequencing., f 91; #X text 412 352 <= look here first; #X text 341 520 <= read the paper for more information; #X connect 0 0 1 0; #X connect 2 0 14 0; #X connect 7 0 4 0; #X connect 14 0 18 0; #X connect 14 1 18 1; #X connect 14 2 18 2; #X connect 14 3 18 3; #X connect 14 4 18 4; #X connect 14 5 18 5; #X connect 14 6 18 6; #X connect 14 7 18 7; #X connect 14 8 18 8; #X connect 14 9 18 9; #X connect 14 10 18 10; #X connect 14 11 18 11; #X connect 14 12 18 12; #X connect 14 13 18 13; #X connect 14 14 18 14; #X connect 14 15 18 15; #X connect 14 16 18 16; #X connect 14 17 18 17; #X connect 14 18 0 0; #X connect 14 19 5 0; #X connect 16 0 15 0; #X connect 18 0 17 0; #X connect 18 0 17 1; pd-lyonpotpourri-3.0.1/dmach~.c000066400000000000000000001067011430526361000165040ustar00rootroot00000000000000#include "MSPd.h" #define MAX_ATTACKS (512) #define MAX_PATTERNS (1024) #define OBJECT_NAME "dmach~" static t_class *dmach_class; typedef struct { float trigger_point; float increment; float amplitude; } t_attack; typedef struct { short active; // flag for if this drum slot is used in current pattern int attack_count; // number of attacks in this pattern int adex; // index to current attack t_attack *attacks; // array containing attack data } t_drumline; typedef struct { float beats; // how many beats in this pattern float dsamps; //duration of pattern in samples t_drumline *drumlines; } t_pattern; typedef struct _dmach { t_object x_obj; float x_f; short mute; // global mute float clocker; // global sample counter clock float tempo; float tempo_factor; // multiplier to get actual beat duration t_pattern *patterns; // contains all drum patterns short *stored_patterns;// which locations contain a pattern float *gtranspose;// transpose factor for each individual drum slot float *gains; // gain factor for each individual drum slot float *current_increment;// maintains increment for sustained output int this_pattern; // number of current pattern int next_pattern; // number of pattern to call at end of current pattern float global_gain; float global_transpose; float sr; int drum_count; // number of drum slots to instantiate int outlet_count; // number of outlets on object short virgin; // no patterns stored - turn off performance /* sequencer */ short playsequence; // flag to play through a stored sequence once short loopsequence; // flag to loop repeatedly through sequence int *sequence; // contains the sequence of bars to play int sequence_length; // how many bars are stored in sequence int seqptr; // keep track of current sequencer position float zeroalias; // use this to send a coded "zero" message (i.e. bar number is zero) t_atom *listdata; // for list output void *listraw_outlet;// send a list short clickincr; //flag that click increment is on (i.e. no sample and hold) short *attackpattern; // holds full attack sequence including zeros (for list output) int attackpattern_count;// how many ticks in attack pattern t_attack *tmpatks; // hold local copy of new slot pattern short *connected; // list of vector connections short *muted; // state of each slot short instant_recall; // flag that pattern gets loaded immediately (loops only) } t_dmach; static void dmach_store(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void *dmach_new(t_symbol *s, int argc, t_atom *argv); static t_int *dmach_perform(t_int *w); static void dmach_mute(t_dmach *x, t_floatarg toggle); static void dmach_dsp(t_dmach *x, t_signal **sp); static void dmach_dsp_free(t_dmach *x); static void dmach_init_pattern(t_dmach *x, int pnum); static void dmach_show(t_dmach *x, t_floatarg fn); static void dmach_tempo(t_dmach *x, t_floatarg new_tempo); static void dmach_recall(t_dmach *x, t_floatarg pnf); static void dmach_transpose(t_dmach *x, t_floatarg slotf, t_floatarg new_transpose_factor); static void dmach_gain(t_dmach *x, t_floatarg slotf, t_floatarg new_gain_factor); static void dmach_arm(t_dmach *x, t_floatarg pnf); static void dmach_playsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_slotamps(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_printraw(t_dmach *x, t_floatarg fn); static void dmach_readraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_slotincrs(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_loopsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_muteslot(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_slotampsfull(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_nosequence(t_dmach *x); static void dmach_copypattern(t_dmach *x, t_floatarg pn1, t_floatarg pn2); static void dmach_listraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv); static void dmach_clickincr(t_dmach *x, t_floatarg toggle); static void dmach_instant_recall(t_dmach *x, t_floatarg toggle); void dmach_tilde_setup(void) { dmach_class = class_new(gensym("dmach~"), (t_newmethod)dmach_new, (t_method)dmach_dsp_free,sizeof(t_dmach), 0,A_GIMME,0); CLASS_MAINSIGNALIN(dmach_class, t_dmach, x_f); class_addmethod(dmach_class,(t_method)dmach_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(dmach_class,(t_method)dmach_mute,gensym("mute"),A_FLOAT,0); class_addmethod(dmach_class,(t_method)dmach_show,gensym("show"),A_FLOAT,0); class_addmethod(dmach_class,(t_method)dmach_tempo,gensym("tempo"),A_FLOAT,0); class_addmethod(dmach_class,(t_method)dmach_store,gensym("store"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_recall,gensym("recall"),A_FLOAT,0); class_addmethod(dmach_class,(t_method)dmach_transpose,gensym("transpose"),A_FLOAT,A_FLOAT, 0); class_addmethod(dmach_class,(t_method)dmach_gain,gensym("gain"),A_FLOAT,A_FLOAT, 0); class_addmethod(dmach_class,(t_method)dmach_printraw,gensym("printraw"),A_FLOAT,0); class_addmethod(dmach_class,(t_method)dmach_arm,gensym("arm"),A_FLOAT,0); class_addmethod(dmach_class,(t_method)dmach_readraw,gensym("readraw"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_listraw,gensym("listraw"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_playsequence,gensym("playsequence"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_slotamps,gensym("slotamps"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_slotampsfull,gensym("slotampsfull"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_slotincrs,gensym("slotincrs"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_loopsequence,gensym("loopsequence"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_muteslot,gensym("muteslot"),A_GIMME,0); class_addmethod(dmach_class,(t_method)dmach_nosequence,gensym("nosequence"),0); class_addmethod(dmach_class,(t_method)dmach_copypattern,gensym("copypattern"),A_FLOAT,A_FLOAT, 0); class_addmethod(dmach_class,(t_method)dmach_clickincr,gensym("clickincr"),A_FLOAT,0); class_addmethod(dmach_class,(t_method)dmach_instant_recall,gensym("instant_recall"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void dmach_muteslot(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int slot; int drum_count = x->drum_count; short mutestate; if(argc < 2) { post("muteslot: pattern number, slot number"); return; } slot = (int)atom_getfloatarg(0,argc,argv); mutestate = (short)atom_getfloatarg(1,argc,argv); if(slot < 0 || slot > drum_count - 1) { pd_error(0, "muteslot: illegal slot index: %d",slot); return; } x->muted[slot] = mutestate; } void dmach_nosequence(t_dmach *x) { x->playsequence = 0; x->loopsequence = 0; } void dmach_playsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int i; int pnum; if(argc < 1) { pd_error(0, "%s: zero length sequence",OBJECT_NAME); return; } /* need safety check here */ for(i = 0; i < argc; i++) { pnum = (int) atom_getfloatarg(i,argc,argv); if(! x->stored_patterns[pnum]) { pd_error(0, "%d is not currently stored",pnum); return; } } for(i = 0; i < argc; i++) { x->sequence[i] = (int) atom_getfloatarg(i,argc,argv); } // if(x->instant_recall) { x->this_pattern = x->sequence[0]; x->clocker = x->patterns[x->this_pattern].dsamps; } else { x->next_pattern = x->sequence[0]; } x->mute = 0; x->playsequence = 1; x->loopsequence = 0; x->sequence_length = argc; x->seqptr = 0; } void dmach_loopsequence(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int i; int pnum; if(argc < 1) { pd_error(0, "%s: zero length sequence",OBJECT_NAME); return; } for(i = 0; i < argc; i++) { pnum = (int) atom_getfloatarg(i,argc,argv); if(! x->stored_patterns[pnum]) { pd_error(0, "%d is not currently stored",pnum); return; } } for(i = 0; i < argc; i++) { x->sequence[i] = (int) atom_getfloatarg(i,argc,argv); } if(x->instant_recall) { x->this_pattern = x->sequence[0]; x->clocker = x->patterns[x->this_pattern].dsamps; } else { x->next_pattern = x->sequence[0]; } x->mute = 0; x->playsequence = 1; x->loopsequence = 1; x->sequence_length = argc; x->seqptr = 0; } void dmach_gain(t_dmach *x, t_floatarg slotf, t_floatarg new_gain_factor) { int slot = slotf; // float ratio; // float gain_factor; // short *stored_patterns = x->stored_patterns; float *gains = x->gains; // t_pattern *p = x->patterns; int drum_count = x->drum_count; // int i,j,k; if(slot < 0 || slot > drum_count - 1) { pd_error(0, "illegal slot index: %d",slot); return; } /* if(new_gain_factor <= 0) { pd_error(0, "illegal gain factor %f", new_gain_factor); return; } */ // gain_factor = gains[slot]; // ratio = new_gain_factor / gain_factor; gains[slot] = new_gain_factor; } void dmach_transpose(t_dmach *x, t_floatarg slotf, t_floatarg new_transpose_factor) { int slot = slotf; float *gtranspose = x->gtranspose; int drum_count = x->drum_count; if(slot < 0 || slot > drum_count - 1) { pd_error(0, "%s: transpose given illegal slot index: %d",OBJECT_NAME, slot); return; } if(new_transpose_factor == 0) { pd_error(0, "illegal transpose factor %f", new_transpose_factor); return; } gtranspose[slot] = new_transpose_factor; } void dmach_recall(t_dmach *x, t_floatarg pnf) { int pnum = pnf; /* post("requested recall of %d, ignored",pnum); return;*/ if(pnum < 0) { pd_error(0, "requested index is less than zero"); return; } if(pnum >= MAX_PATTERNS) { pd_error(0, "requested index is greater than the maximum of %d",MAX_PATTERNS-1); return; } if(! x->stored_patterns[pnum]) { pd_error(0, "%d is not currently stored",pnum); return; } // x->this_pattern = x->next_pattern = pnum; x->mute = 0; x->next_pattern = pnum; } void dmach_arm(t_dmach *x, t_floatarg pnf) { int pnum = pnf; int i; t_pattern *p = x->patterns; if(pnum < 0) { pd_error(0, "requested index is less than zero"); return; } if(pnum > MAX_PATTERNS) { pd_error(0, "%s: requested index is greater than the maximum of %d",OBJECT_NAME,MAX_PATTERNS-1); return; } if(! x->stored_patterns[pnum]) { pd_error(0, "%s: %d is not currently stored",OBJECT_NAME,pnum); return; } x->mute = 1; x->clocker = 0; x->next_pattern = x->this_pattern = pnum; for(i = 0; i < x->drum_count; i++){ /* reset pointers */ p[x->this_pattern].drumlines[i].adex = 0; } } void dmach_tempo(t_dmach *x, t_floatarg new_tempo) { float ratio; int i, j, k; short *stored_patterns = x->stored_patterns; t_pattern *p = x->patterns; int drum_count = x->drum_count; float sr = x->sr; float tempo_factor = x->tempo_factor; if(new_tempo <= 0.0) { pd_error(0, "tempo must be greater than zero, but was %f",new_tempo); return; } ratio = x->tempo / new_tempo; x->clocker *= ratio; x->tempo = new_tempo; tempo_factor = (60.0/new_tempo); for(i = 0; i < MAX_PATTERNS; i++) { if(stored_patterns[i]) { p[i].dsamps = p[i].beats * tempo_factor * sr; for(j = 0; j < drum_count; j++) { if(p[i].drumlines[j].active) { for(k = 0; k < p[i].drumlines[j].attack_count; k++) { p[i].drumlines[j].attacks[k].trigger_point *= ratio; } } } } } x->tempo_factor = tempo_factor; } void dmach_show(t_dmach *x, t_floatarg fn) { int i,j; int pnum = (int) fn; t_pattern *p = x->patterns; t_attack *ptr; int drum_count = x->drum_count; if(pnum < 0 || pnum > MAX_PATTERNS-1) { pd_error(0, "illegal pattern number: %d",pnum); return; } if(! x->stored_patterns[pnum]) { pd_error(0, "%d is not currently stored",pnum); return; } post("showing pattern %d",pnum); /* need to check if pattern is valid */ for(j = 0; j < drum_count; j++) { if(p[pnum].drumlines[j].active) { post("*** drum line for slot %d ***",j); ptr = p[pnum].drumlines[j].attacks; post("there are %d attacks",p[pnum].drumlines[j].attack_count); for(i = 0; i < p[pnum].drumlines[j].attack_count; i++) { post("amp: %f, transp: %f, trigger: %f", ptr->amplitude, ptr->increment, ptr->trigger_point); ptr++; } } } } void dmach_printraw(t_dmach *x, t_floatarg fn) { int i,j; int pnum = (int) fn; t_pattern *p = x->patterns; t_attack *ptr; int drum_count = x->drum_count; float normalized_trigger; float tempo_factor = x->tempo_factor; float sr = x->sr; if(pnum < 0 || pnum > MAX_PATTERNS-1) { pd_error(0, "illegal pattern number: %d",pnum); return; } if(! x->stored_patterns[pnum]) { pd_error(0, "%d is not currently stored",pnum); return; } if(!tempo_factor) { pd_error(0, "tempo factor is zero!"); return; } post("readraw %d %f",pnum, p[pnum].beats); for(j = 0; j < drum_count; j++) { if(p[pnum].drumlines[j].active) { ptr = p[pnum].drumlines[j].attacks; post("%d %d",j, p[pnum].drumlines[j].attack_count); for(i = 0; i < p[pnum].drumlines[j].attack_count; i++) { /* scale attack times to factor out sample rate and tempo */ normalized_trigger = ptr->trigger_point / (tempo_factor * sr); post("%f %f %f", ptr->amplitude, ptr->increment, normalized_trigger); ptr++; } } } } void dmach_listraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int i,j; int pnum; t_pattern *p = x->patterns; t_attack *ptr; int drum_count = x->drum_count; float normalized_trigger; float tempo_factor = x->tempo_factor; float sr = x->sr; int ldex = 0; t_atom *listdata = x->listdata; if(argc < 1) { pnum = x->this_pattern; } else { pnum = (int) atom_getfloatarg(0,argc,argv); } if(pnum < 0 || pnum > MAX_PATTERNS-1) { pd_error(0, "illegal pattern number: %d",pnum); return; } if(! x->stored_patterns[pnum]) { pd_error(0, "%d is not currently stored",pnum); return; } if(!tempo_factor) { pd_error(0, "tempo factor is zero!"); return; } /* note: format of MACROS requires that ldex be incremented outside of call. Also note that traditional indexing A[x] cannot be used; instead must use A+x format. */ SETSYMBOL(listdata + ldex, gensym("readraw")); ++ldex; SETFLOAT(listdata + ldex, (float)pnum); ++ldex; SETFLOAT(listdata + ldex, p[pnum].beats); ++ldex; for(j = 0; j < drum_count; j++) { if(p[pnum].drumlines[j].active) { ptr = p[pnum].drumlines[j].attacks; SETFLOAT(listdata + ldex, (float)j); ++ldex; SETFLOAT(listdata + ldex, (float)(p[pnum].drumlines[j].attack_count)); ++ldex; for(i = 0; i < p[pnum].drumlines[j].attack_count; i++) { normalized_trigger = ptr->trigger_point / (tempo_factor * sr); SETFLOAT(listdata + ldex, ptr->amplitude); ++ldex; SETFLOAT(listdata + ldex, ptr->increment); ++ldex; SETFLOAT(listdata + ldex, normalized_trigger); ++ldex; ptr++; } } } outlet_list(x->listraw_outlet,0,ldex,listdata); } void dmach_copypattern(t_dmach *x, t_floatarg pn1, t_floatarg pn2) { int i,j; int pnum_from = (int) pn1; int pnum_to = (int) pn2; t_pattern *p = x->patterns; t_attack *ptr_from, *ptr_to; int drum_count = x->drum_count; if(pnum_from < 0 || pnum_from > MAX_PATTERNS-1) { pd_error(0, "illegal source pattern number: %d",pnum_from); return; } if(pnum_to < 0 || pnum_to > MAX_PATTERNS-1) { pd_error(0, "illegal dest pattern number: %d",pnum_to); return; } if(pnum_from == pnum_to) { pd_error(0, "source and dest patterns are the same"); return; } if(! x->stored_patterns[pnum_from]) { pd_error(0, "%d is not currently stored",pnum_from); return; } dmach_init_pattern(x,pnum_to); // post("readraw %d %f %f",pnum, p[pnum].beats, p[pnum].dsamps); p[pnum_to].beats = p[pnum_from].beats; p[pnum_to].dsamps = p[pnum_from].dsamps; for(j = 0; j < drum_count; j++) { p[pnum_to].drumlines[j].active = p[pnum_from].drumlines[j].active; if(p[pnum_from].drumlines[j].active) { ptr_from = p[pnum_from].drumlines[j].attacks; ptr_to = p[pnum_to].drumlines[j].attacks; p[pnum_to].drumlines[j].attack_count = p[pnum_from].drumlines[j].attack_count; for(i = 0; i < p[pnum_from].drumlines[j].attack_count; i++) { ptr_to->amplitude = ptr_from->amplitude; ptr_to->increment = ptr_from->increment; ptr_to->trigger_point = ptr_from->trigger_point; ptr_from++; ptr_to++; } } } x->stored_patterns[pnum_to] = 1;// assert that a legal pattern is now stored there } void dmach_readraw(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int i; int pnum; int pdex = 0; int slot; t_pattern *p = x->patterns; t_attack *ptr; // int drum_count = x->drum_count; float tempo_factor = x->tempo_factor; float sr = x->sr; short mutein; mutein = x->mute; x->mute = 1; pnum = (int) atom_getfloatarg(pdex++,argc,argv); if(pnum < 0 || pnum > MAX_PATTERNS-1) { pd_error(0, "%s: illegal pattern number: %d",OBJECT_NAME,pnum); return; } if(! x->stored_patterns[pnum]) { x->stored_patterns[pnum] = 1; // means there's something there now dmach_init_pattern(x,pnum); post("readraw: loading pattern %d",pnum); } else { post("readraw: reloading pattern %d",pnum); } p[pnum].beats = atom_getfloatarg(pdex++,argc,argv); // p[pnum].dsamps = atom_getfloatarg(pdex++,argc,argv); p[pnum].dsamps = p[pnum].beats * tempo_factor * sr; // post("dsamps calculated to be %f", p[pnum].dsamps); while(pdex < argc) { slot = (int) atom_getfloatarg(pdex++,argc,argv); p[pnum].drumlines[slot].active = 1; p[pnum].drumlines[slot].attack_count = (int) atom_getfloatarg(pdex++,argc,argv); p[pnum].drumlines[slot].adex = 0; ptr = p[pnum].drumlines[slot].attacks; for(i = 0; i < p[pnum].drumlines[slot].attack_count; i++) { ptr->amplitude = atom_getfloatarg(pdex++,argc,argv); ptr->increment = atom_getfloatarg(pdex++,argc,argv); ptr->trigger_point = (sr * tempo_factor) * atom_getfloatarg(pdex++,argc,argv); ptr++; } } x->this_pattern = x->next_pattern = pnum; x->virgin = 0; x->mute = mutein; } void dmach_slotamps(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int pdex,i; int slot = 0; float beatseg; // float tmpbeats; float subdiv; float beat_samps; float tempo_factor; int attack_count; int local_attacks; float trigger_point; float val; int pnum; t_pattern *p = x->patterns; float tempo = x->tempo; float sr = x->sr; t_attack *tmpatks = x->tmpatks; pdex = 0; pnum = atom_getfloatarg(pdex++,argc,argv); /* post("skipping slotamps for %d",pnum); return;*/ if(pnum < 0 || pnum > MAX_PATTERNS - 1) { pd_error(0, "%s: invalid pattern number: %d",OBJECT_NAME,pnum); return; } if(!x->stored_patterns[pnum]) { pd_error(0, "%s: no pattern found at location : %d",OBJECT_NAME,pnum); return; } slot = (int) atom_getfloatarg(pdex++,argc,argv); if(slot < 0 || slot >= x->drum_count) { post("%s: %d is an illegal slot",OBJECT_NAME,slot); return; } // post("filling slotamps %d for %d",slot, pnum); if(tempo <= 0) { tempo = 60; pd_error(0, "zero tempo found"); } tempo_factor = (60.0/tempo); beatseg = p[pnum].beats; // less general but we're going for ease here subdiv = atom_getfloatarg(pdex++,argc,argv); beat_samps = (beatseg/subdiv) * tempo_factor * sr; trigger_point = 0; attack_count = 0; /* read attack cycle and store any non-zero attacks */ local_attacks = 0; // clean me memset((void *)tmpatks, 0, MAX_ATTACKS * sizeof(t_attack) ); for(i = 0; i < subdiv; i++) { val = atom_getfloatarg(pdex++,argc,argv); if(val) { tmpatks[local_attacks].amplitude = val; // force to integer sample point tmpatks[local_attacks].trigger_point = (int)trigger_point; ++local_attacks; } trigger_point += beat_samps; } /* initialize with increment of 1.0 for each non-zero amplitude attack. */ for(i = 0; i < local_attacks; i++) { if(tmpatks[i].amplitude) { tmpatks[i].increment = 1.0; } else { tmpatks[i].increment = 0.0; } } p[pnum].drumlines[slot].active = 0; memcpy((void *)p[pnum].drumlines[slot].attacks,(void *)tmpatks, MAX_ATTACKS * sizeof(t_attack)); p[pnum].drumlines[slot].attack_count = local_attacks; p[pnum].drumlines[slot].adex = 0; p[pnum].drumlines[slot].active = 1; x->this_pattern = x->next_pattern = pnum; // set pattern to what we're working on } /* more general version */ void dmach_slotampsfull(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int pdex,i; int slot = 0; float beatseg; float tmpbeats; float subdiv; float beat_samps; float tempo_factor; int attack_count; int local_attacks; float trigger_point; float val; int pnum; t_pattern *p = x->patterns; float tempo = x->tempo; float sr = x->sr; if(argc > MAX_ATTACKS + 1) { post("%s: %d is too long an atk message",OBJECT_NAME,argc); return; } pdex = 0; pnum = atom_getfloatarg(pdex++,argc,argv); if(pnum < 0 || pnum > MAX_PATTERNS - 1) { pd_error(0, "%s: invalid pattern number: %d",OBJECT_NAME,pnum); return; } if(!x->stored_patterns[pnum]) { pd_error(0, "%s: no pattern found at location : %d",OBJECT_NAME,pnum); return; } x->this_pattern = x->next_pattern = pnum; // set current pattern to what we're working on slot = (int) atom_getfloatarg(pdex++,argc,argv); p[pnum].drumlines[slot].active = 1; tempo_factor = (60.0/tempo); tmpbeats = p[pnum].beats; trigger_point = 0; attack_count = 0; while(tmpbeats > 0) { local_attacks = 0; beatseg = atom_getfloatarg(pdex++,argc,argv); subdiv = atom_getfloatarg(pdex++,argc,argv); beat_samps = (beatseg/subdiv) * tempo_factor * sr; /* read attack cycle and store any non-zero attacks */ local_attacks = 0; for(i = 0; i < subdiv; i++) { val = atom_getfloatarg(pdex++,argc,argv); if(val) { p[pnum].drumlines[slot].attacks[attack_count + local_attacks].amplitude = val; /* force to integer sample point (couldn't get round() to work) */ p[pnum].drumlines[slot].attacks[attack_count + local_attacks].trigger_point = (int)trigger_point; ++local_attacks; } trigger_point += beat_samps; } for(i = 0; i < local_attacks; i++) { p[pnum].drumlines[slot].attacks[i + attack_count].increment = 1.0; } tmpbeats -= beatseg; attack_count += local_attacks; } p[pnum].drumlines[slot].attack_count = attack_count; } void dmach_slotincrs(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int pdex,i; int slot = 0; int local_attacks; int pnum; t_pattern *p = x->patterns; if(argc > MAX_ATTACKS + 1) { post("%s: %d is too long a slotincrs message",OBJECT_NAME,argc); return; } pdex = 0; pnum = (int) atom_getfloatarg(pdex++,argc,argv); slot = (int) atom_getfloatarg(pdex++,argc,argv); if(slot < 0 || slot >= x->drum_count) { post("%s: %d is an illegal slot",OBJECT_NAME,slot); return; } local_attacks = p[pnum].drumlines[slot].attack_count; if(argc != local_attacks + 2) { // post("rejected slotincrs with %d local atks, argc = %d",local_attacks, argc - 2); return; } // post("%d local atks, argc = %d",local_attacks, argc); if(pnum < 0 || pnum >= MAX_PATTERNS) { pd_error(0, "%s: slotincrs sent invalid pattern number: %d",OBJECT_NAME,pnum); return; } if(!x->stored_patterns[pnum]) { pd_error(0, "%s: slotincrs: no pattern found at location : %d",OBJECT_NAME,pnum); return; } // post("filling slotincr for slot %d pnum %d",slot, pnum); for(i = 0; i < local_attacks; i++) { p[pnum].drumlines[slot].attacks[i].increment = atom_getfloatarg(pdex++,argc,argv); } x->this_pattern = x->next_pattern = pnum; // set current pattern to what we're working on // x->mute = mutein; } void dmach_store(t_dmach *x, t_symbol *s, int argc, t_atom *argv) { int pdex,i; int slot = 0; float beatseg; float tmpbeats; float subdiv; float beat_samps; float tempo_factor = x->tempo_factor; int attack_count; int local_attacks; float trigger_point; float val; int pnum; t_pattern *p = x->patterns; float tempo = x->tempo; float sr = x->sr; pnum = atom_getfloatarg(0,argc,argv); if(pnum < 0 || pnum > MAX_PATTERNS - 1) { pd_error(0, "invalid pattern number: %d",pnum); return; } // post("%d arguments to \"store\" at pattern %d",argc,pnum); dmach_init_pattern(x,pnum); p[pnum].beats = atom_getfloatarg(1,argc,argv); if(p[pnum].beats <= 0) { post("illegal beats at pnum %d: %f",pnum,p[pnum].beats); p[pnum].beats = 4; } if(tempo <= 0) { pd_error(0, "zero tempo in store msg"); tempo = 60; } tempo_factor = (60.0/tempo); p[pnum].dsamps = p[pnum].beats * tempo_factor * sr; pdex = 2; // post("%f beats %f samps in this pattern",p[pnum].beats,p[pnum].dsamps ); while(pdex < argc) { slot = atom_getfloatarg(pdex++,argc,argv); p[pnum].drumlines[slot].active = 1; tmpbeats = p[pnum].beats; trigger_point = 0; attack_count = 0; while(tmpbeats > 0) { local_attacks = 0; beatseg = atom_getfloatarg(pdex++,argc,argv); subdiv = atom_getfloatarg(pdex++,argc,argv); beat_samps = (beatseg/subdiv) * tempo_factor * sr; /* read attack cycle and store any non-zero attacks */ for(i = 0; i < subdiv; i++) { val = atom_getfloatarg(pdex++,argc,argv); if(val) { p[pnum].drumlines[slot].attacks[attack_count + local_attacks].amplitude = val; /* force to integer sample point (couldn't get round() to work) */ p[pnum].drumlines[slot].attacks[attack_count + local_attacks].trigger_point = (int)trigger_point; ++local_attacks; } trigger_point += beat_samps; } /* we now know number of attacks and read that many transpose factors */ for(i = 0; i < local_attacks; i++) { p[pnum].drumlines[slot].attacks[i + attack_count].increment = atom_getfloatarg(pdex++,argc,argv); } tmpbeats -= beatseg; attack_count += local_attacks; } p[pnum].drumlines[slot].attack_count = attack_count; // post("%d attacks in slot %d for pattern %d",attack_count, slot, pnum); } // new - set internal pointer to start of array p[pnum].drumlines[slot].adex = 0; // set current pattern to this (to avoid crash if pnum 0 is uninitialized) x->this_pattern = x->next_pattern = pnum; x->virgin = 0; // now at least one pattern is stored x->stored_patterns[pnum] = 1; // means there's something there now x->tempo_factor = tempo_factor;//restore this value // post("pattern stored at %d with %f beats",pnum,p[pnum].beats); } void dmach_init_pattern(t_dmach *x, int pnum) { int i; int drum_count = x->drum_count; t_pattern *p = x->patterns; if(pnum < 0 || pnum >= MAX_PATTERNS) { pd_error(0, "invalid pattern number: %d",pnum); return; } if( x->stored_patterns[pnum] ) { // post("replacing pattern stored at %d",pnum); } if(p[pnum].drumlines == NULL) { p[pnum].drumlines = (t_drumline *)getbytes(drum_count * sizeof(t_drumline)); } // possible memory leak for(i = 0; i < drum_count; i++) { p[pnum].drumlines[i].attacks = (t_attack *)getbytes(MAX_ATTACKS * sizeof(t_attack)); p[pnum].drumlines[i].adex = 0; p[pnum].drumlines[i].active = 0; p[pnum].drumlines[i].attack_count = 0; } } void dmach_dsp_free( t_dmach *x ) { /* p[pnum].drumlines = (t_drumline *)getbytes(drum_count * sizeof(t_drumline)); */ /* need some freeing action here! */ freebytes(x->patterns,MAX_PATTERNS * sizeof(t_pattern)); freebytes(x->stored_patterns,MAX_PATTERNS * sizeof(short)); freebytes(x->current_increment,x->drum_count * sizeof(float)); freebytes(x->gtranspose,x->drum_count * sizeof(float)); freebytes(x->gains,x->drum_count * sizeof(float)); freebytes(x->sequence,1024 * sizeof(int)); freebytes(x->listdata,1024 * sizeof(t_atom)); freebytes(x->connected,1024 * sizeof(short)); freebytes(x->tmpatks,MAX_ATTACKS * sizeof(t_attack)); freebytes(x->muted,x->drum_count * sizeof(short)); } void dmach_mute(t_dmach *x, t_floatarg toggle) { x->mute = (short)toggle; } void dmach_instant_recall(t_dmach *x, t_floatarg toggle) { x->instant_recall = (short)toggle; } void dmach_clickincr(t_dmach *x, t_floatarg toggle) { x->clickincr = (short)toggle; } void *dmach_new(t_symbol *s, int argc, t_atom *argv) { int i; t_dmach *x; x = (t_dmach *)pd_new(dmach_class); if(argc >= 1) x->tempo = atom_getfloatarg(0,argc,argv); else x->tempo = 120; if(argc >= 2) x->drum_count = atom_getfloatarg(1,argc,argv); else x->drum_count = 8; x->outlet_count = x->drum_count * 2 + 1; // one extra for pattern start click for(i = 0; i < x->outlet_count; i++) { outlet_new(&x->x_obj, gensym("signal")); } x->listraw_outlet = outlet_new(&x->x_obj, gensym("list")); x->patterns = (t_pattern *) getbytes(MAX_PATTERNS * sizeof(t_pattern)); x->stored_patterns = (short *) getbytes(MAX_PATTERNS * sizeof(short)); x->current_increment = (float *) getbytes(x->drum_count * sizeof(float)); // for sample + hold of increment x->gtranspose = (float *) getbytes(x->drum_count * sizeof(float)); x->gains = (float *) getbytes(x->drum_count * sizeof(float)); x->sequence = (int *) getbytes(1024 * sizeof(int)); x->listdata = (t_atom *) getbytes(1024 * sizeof(t_atom)); x->connected = (short *) getbytes(1024 * sizeof(short)); x->tmpatks = (t_attack *)getbytes(MAX_ATTACKS * sizeof(t_attack)); x->muted = (short *)getbytes(x->drum_count * sizeof(short)); // by default mute is off on each slot x->seqptr = 0; x->sequence_length = 0; x->playsequence = 0; x->loopsequence = 0; x->zeroalias = -1.0; x->clickincr = 0; x->instant_recall = 0; if(x->tempo <= 0 || x->tempo > 6666) x->tempo = 60.0; // post("initial tempo is %f",x->tempo); for(i = 0; i < MAX_PATTERNS; i++) { x->patterns[i].drumlines = NULL; x->stored_patterns[i] = 0; } x->this_pattern = x->next_pattern = 0; x->mute = 0; x->clocker = 0; x->sr = sys_getsr(); x->tempo_factor = 60.0 / x->tempo ; for(i = 0; i < x->drum_count; i++) { x->gains[i] = 1.0; x->gtranspose[i] = 1.0; x->current_increment[i] = 1.0; } // safety - init memory for all drum patterns for(i = 0; i < MAX_PATTERNS; i++) { dmach_init_pattern(x,i); } x->virgin = 1; return (x); } t_int *dmach_perform(t_int *w) { int i,j; t_float *trig_outlet, *incr_outlet; t_dmach *x = (t_dmach *) w[1]; int outlet_count = x->outlet_count; // t_float *in_sync = (t_float *) w[2]; // input for sync trigger (not implemented yet) t_float *sync = (t_float *) w[outlet_count + 2]; int n = (int) w[outlet_count + 3]; int this_pattern = x->this_pattern; int next_pattern = x->next_pattern; t_pattern *p = x->patterns; float *current_increment = x->current_increment; float clocker = x->clocker; float dsamps = p[this_pattern].dsamps; int drum_count = x->drum_count; int adex; /* sequence stuff */ int *sequence = x->sequence; short playsequence = x->playsequence; short loopsequence = x->loopsequence; short clickincr = x->clickincr; int seqptr = x->seqptr; int sequence_length = x->sequence_length; short *connected = x->connected; short *muted = x->muted; float *gtranspose = x->gtranspose; float *gains = x->gains; /* clean pnum click outlet */ memset((void *)sync, 0, n * sizeof(float)); if( x->mute || x->virgin ) { for(i = 0; i < drum_count; i++) { if(connected[i * 2 + 1]) { // post("cleaning outlet pair %d", i); trig_outlet = (t_float *) w[i * 2 + 3]; memset((void *)trig_outlet, 0, n * sizeof(float)); } } return w + (outlet_count + 4); } /* pre-clean all connected trigger vectors */ for(i = 0; i < drum_count; i++) { if(connected[i * 2 + 1]) { trig_outlet = (t_float *) w[i * 2 + 3]; memset((void *)trig_outlet, 0, n * sizeof(float)); } } for(j = 0; j < n; j++) { if(clocker >= dsamps){ // ready for next pattern now clocker -= dsamps; /* this is the pattern sequencer */ if(playsequence) { if (seqptr >= sequence_length) { if(loopsequence) { seqptr = 0; } else { /* this is fine, the playthrough has concluded and we now mute external */ x->mute = 1; goto escape; } } this_pattern = sequence[seqptr++]; } /* we do this if we're not pattern sequencing: */ else if(next_pattern != this_pattern) { this_pattern = next_pattern; } for(i = 0; i < drum_count; i++){ /* reset pointers */ p[this_pattern].drumlines[i].adex = 0; } /* send current bar number if in sequence. Note kludge for if bar is 0. We cannot send a 0 click so we alias it to something else. */ if(playsequence) { if(this_pattern) { sync[j] = this_pattern; } else { sync[j] = x->zeroalias; } } else{ sync[j] = 1; /* send a sync click */ } } else { sync[j] = 0; } for(i = 0; i < drum_count; i++) { // float locamp; if(p[this_pattern].drumlines[i].active && ! muted[i]) { trig_outlet = (t_float *) w[i * 2 + 3]; incr_outlet = (t_float *) w[i * 2 + 4]; adex = p[this_pattern].drumlines[i].adex; // overflow danger ??? if((int)clocker == (int)p[this_pattern].drumlines[i].attacks[adex].trigger_point) { current_increment[i] = p[this_pattern].drumlines[i].attacks[adex].increment * gtranspose[i]; /* put sync click into sample j of the output vector */ trig_outlet[j] = p[this_pattern].drumlines[i].attacks[adex].amplitude * gains[i]; ++adex; p[this_pattern].drumlines[i].adex = adex; incr_outlet[j] = current_increment[i]; /* post("t: sample %d, slot %d, amp: %f, incr: %f", (int)clocker, i, locamp, current_increment[i]); */ } else { trig_outlet[j] = 0; // not sure we need these assignments ?? if(clickincr) { incr_outlet[j] = 0; } else { incr_outlet[j] = current_increment[i]; // samp + hold the increment to outlet } } } } ++clocker; } escape: x->clocker = clocker; x->this_pattern = this_pattern; x->seqptr = seqptr; return w + (outlet_count + 4); } void dmach_dsp(t_dmach *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count; if(x->virgin) { post("%s: no patterns are stored",OBJECT_NAME); // return; } if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; /* still need to adjust every stored pattern dsamps variable */ } pointer_count = x->outlet_count + 3; // all outlets, 1 inlet, object and s_n // post("pointer count %d", pointer_count); // copy vector to be safe for(i = 0; i < pointer_count - 2; i++) { x->connected[i] = 1; } sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } dsp_addv(dmach_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec,pointer_count * sizeof(t_int *)); } pd-lyonpotpourri-3.0.1/dynss~-help.pd000066400000000000000000000053121430526361000176730ustar00rootroot00000000000000#N canvas 600 60 595 639 12; #X msg 96 288 devx \$1; #X obj 273 321 hsl 70 12 0 1 0 0 dynss-devx dynss-devx-in devx -2 -8 0 10 -261682 -1 -1 0 1; #X floatatom 96 264 5 0 0 0 - dynss-devx -; #X obj 273 346 hsl 70 12 0 1 0 0 dynss-devy dynss-devy-in devy -2 -8 0 10 -261682 -1 -1 0 1; #X floatatom 157 263 5 0 0 0 - dynss-devy -; #X msg 157 287 devy \$1; #X msg 37 287 freq \$1; #X obj 273 296 hsl 70 12 50 600 0 0 dynss-freq dynss-freq-in frequency -2 -8 0 10 -261682 -1 -1 0 1; #X floatatom 37 264 5 0 0 0 - dynss-freq -; #X obj 123 325 r dynss.messages; #X obj 36 352 lyonpotpourri/dynss~; #X obj 36 405 lpp-meters; #X obj 22 19 lpp-icon dynss~; #X text 247 45 - dynamic stochastic synthesis (after Xenakis); #N canvas 0 23 643 365 learn 0; #X obj 54 201 pdcontrol; #X msg 54 139 browse https://www.gold.ac.uk/media/documents-by-section/departments/music/09.2-Sergio-Luque.pdf ; #X obj 54 96 inlet; #X connect 1 0 0 0; #X connect 2 0 1 0; #X restore 186 516 pd learn; #X obj 186 486 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 18 110 dynss~ - dynamic stochastic synthesis as described by Iannis Xenakis in "Formalized Music." A waveform is generated by linearly connecting breakpoints randomly generated respecting amplitude (y) and distance between points (x). The dynamic aspect results from deviating the random points on each iteration of the waveform \, with the amount of deviation in both directions subject to parametric control. In this model \, the frequency stays constant \, but the timbre varies constantly \, and usually noisily.; #X text 207 483 <= learn more about dynamic stochastic synthesis here ; #X text 340 448 <= more info here; #N canvas 444 109 686 335 waveform-settings 0; #X msg 135 112 new_wave; #X msg 162 149 new_amps; #X msg 239 183 printwave; #X obj 107 225 s dynss.messages; #X msg 107 73 pointcount \$1; #X msg 107 36 4; #X msg 147 38 15; #X text 309 184 print the breakpoints to the Pd window; #X text 201 113 generate a new waveform; #X text 228 150 generate new amplitudes \, but keep the y-values; #X msg 189 39 30; #X text 214 74 set the number of breakpoints in the waveform. More breakpoints usually results in a brighter spectrum; #X msg 109 292 \; dynss-devx-in bang \; dynss-devy-in bang; #X text 104 259 The waveform will be static after generation. To restore the deviation settings \, click below:; #X connect 0 0 3 0; #X connect 1 0 3 0; #X connect 2 0 3 0; #X connect 4 0 3 0; #X connect 5 0 4 0; #X connect 6 0 4 0; #X connect 10 0 4 0; #X restore 186 448 pd waveform-settings; #X connect 0 0 10 0; #X connect 2 0 0 0; #X connect 4 0 5 0; #X connect 5 0 10 0; #X connect 6 0 10 0; #X connect 8 0 6 0; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 10 0 11 1; #X connect 15 0 14 0; pd-lyonpotpourri-3.0.1/dynss~.c000066400000000000000000000223561430526361000165730ustar00rootroot00000000000000#include "MSPd.h" static t_class *dynss_class; #define MAXPOINTS (64) #define OBJECT_NAME "dynss~" #define COMPILE_DATE "9.02.07" #define OBJECT_VERSION "2.01" //pd version typedef struct _dynss { t_object x_obj; t_float x_f; long point_count; // how many points in waveform (including beginning and end point) t_double freq; // frequency long counter; // count samples long period_samples; // how many samples in a period float srate; // sampling rate long current_point; // which point are we on t_double *values; long *point_breaks; t_double *norm_breaks; t_double *xdevs; t_double *ydevs; t_double devscale_x; t_double devscale_y; } t_dynss; static void *dynss_new(void); static t_int *dynss_perform(t_int *w); static void dynss_dsp(t_dynss *x, t_signal **sp); static void version(void); static float boundrand(float min, float max); static void dynss_init(t_dynss *x,short initialized); static void dynss_devx(t_dynss *x, t_floatarg f); static void dynss_devy(t_dynss *x, t_floatarg f); static void dynss_freq(t_dynss *x, t_floatarg f); static void dynss_printwave(t_dynss *x); static void dynss_new_wave(t_dynss *x); static void dynss_pointcount(t_dynss *x, t_floatarg f); static void dynss_new_amps(t_dynss *x); static void dynss_dsp_free(t_dynss *x); void dynss_tilde_setup(void) { t_class *c; c = class_new(gensym("dynss~"), (t_newmethod)dynss_new, (t_method)dynss_dsp_free, sizeof(t_dynss), 0,0); CLASS_MAINSIGNALIN(c,t_dynss,x_f); class_addmethod(c,(t_method)dynss_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(c,(t_method)version,gensym("version"),0); class_addmethod(c,(t_method)dynss_devx,gensym("devx"),A_FLOAT,0); class_addmethod(c,(t_method)dynss_devy,gensym("devy"),A_FLOAT,0); class_addmethod(c,(t_method)dynss_freq,gensym("freq"),A_FLOAT,0); class_addmethod(c,(t_method)dynss_printwave,gensym("printwave"),0); class_addmethod(c,(t_method)dynss_new_wave,gensym("new_wave"),0); class_addmethod(c,(t_method)dynss_new_amps,gensym("new_amps"),0); class_addmethod(c,(t_method)dynss_pointcount,gensym("pointcount"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); dynss_class = c; } static void dynss_dsp_free(t_dynss *x){ freebytes(x->values,(MAXPOINTS + 2) * sizeof(t_double)); freebytes(x->point_breaks,(MAXPOINTS + 2) * sizeof(long)); freebytes(x->norm_breaks,(MAXPOINTS + 2) * sizeof(t_double)); freebytes(x->xdevs,(MAXPOINTS + 2) * sizeof(t_double)); freebytes(x->ydevs,(MAXPOINTS + 2) * sizeof(t_double)); } void dynss_pointcount(t_dynss *x, t_floatarg f) { if(f >= 2 && f <= MAXPOINTS ) { x->point_count = (long) f; dynss_init(x,0); } } void dynss_freq(t_dynss *x, t_floatarg f) { x->freq = fabs(f); } void dynss_devx(t_dynss *x, t_floatarg f) { x->devscale_x = f; } void dynss_devy(t_dynss *x, t_floatarg f) { x->devscale_y = f; } void version(void) { post("%s version %s, compiled %s",OBJECT_NAME, OBJECT_VERSION, COMPILE_DATE); } void dynss_printwave(t_dynss *x) { int i; for(i = 0; i < x->point_count; i++) { post("point %d break %d norm break %f value %f",i, x->point_breaks[i], x->norm_breaks[i], x->values[i]); } } void dynss_new_wave(t_dynss *x) { dynss_init(x,0); } void dynss_new_amps(t_dynss *x) { int i; for(i = 1; i < x->point_count - 1; i++) { x->values[i] = boundrand(-0.95, 0.95); } } void *dynss_new(void) { t_dynss *x = (t_dynss *)pd_new(dynss_class); outlet_new(&x->x_obj, gensym("signal")); x->srate = sys_getsr(); x->point_count = 6; // including fixed start and endpoint, so just 4 dynamic points x->values = (t_double *) getbytes((MAXPOINTS + 2) * sizeof(t_double)); x->point_breaks = (long *) getbytes((MAXPOINTS + 2) * sizeof(long)); x->norm_breaks = (t_double *) getbytes((MAXPOINTS + 2) * sizeof(t_double)); x->xdevs = (t_double *) getbytes((MAXPOINTS + 2) * sizeof(t_double)); x->ydevs = (t_double *) getbytes((MAXPOINTS + 2) * sizeof(t_double)); if(! x->srate ) { x->srate = 44100; post("sr autoset to 44100"); } x->freq = 100.0; srand(time(0)); dynss_init(x,0); return (x); } float boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); } void dynss_init(t_dynss *x,short initialized) { int i,j; float findex; long point_count = x->point_count; t_double *values = x->values; t_double *norm_breaks = x->norm_breaks; long *point_breaks = x->point_breaks; t_double *ydevs = x->ydevs; t_double *xdevs =x->xdevs; if(!initialized) { x->period_samples = (long)(x->srate / x->freq); x->counter = 0; x->current_point = 0; x->devscale_x = 0.0; // no evolution by default x->devscale_y = 0.0; // post("there are %d samples per period, srate %f freq %f", x->period_samples, x->srate, x->freq); norm_breaks[0] = 0.0; norm_breaks[point_count - 1] = 1.0; values[0] = values[point_count - 1] = 0.0; for(i = 1; i < point_count - 1; i++) { values[i] = boundrand(-1.0, 1.0); norm_breaks[i] = boundrand(0.05,0.95); } // now sort into order (insertion sort) for(i = 1; i < point_count; i++) { findex = norm_breaks[i]; j = i; while( j > 0 && norm_breaks[j-1] > findex) { norm_breaks[j] = norm_breaks[j-1]; j = j - 1; } norm_breaks[j] = findex; } // now generate sample break points; for(i = 0; i < point_count; i++) { point_breaks[i] = (long) ( (float)x->period_samples * norm_breaks[i] ); // post("%i %f %f",point_breaks[i], norm_breaks[i], values[i]); } // set y deviation maxes for(i = 0; i < point_count; i++) { ydevs[i] = boundrand(0.0,0.99); xdevs[i] = boundrand(0.0,0.99); // post("rands: %f %f",ydevs[i],xdevs[i]); } } else { } } t_int *dynss_perform(t_int *w) { //int i, j, k; // float outval; int i,j; float findex1,findex2; t_dynss *x = (t_dynss *) (w[1]); // t_float *inlet = (t_float *) (w[2]); t_float *outlet = (t_float *) (w[3]); int n = (int) w[4]; t_double *values = x->values; t_double *norm_breaks = x->norm_breaks; long *point_breaks = x->point_breaks; t_double *ydevs = x->ydevs; t_double *xdevs = x->xdevs; long counter = x->counter; long period_samples = x->period_samples; long current_point = x->current_point; long point_count = x->point_count; float sample; float frak; float dev, newval; long segsamps; while(n--) { if( counter == point_breaks[current_point + 1]) { sample = values[current_point + 1]; ++current_point; if(current_point > point_count - 1) { current_point = 0; counter = 0; } } else { segsamps = point_breaks[current_point + 1] - point_breaks[current_point]; if( segsamps <= 1) { frak = 0.0; } else { frak = (float)(counter - point_breaks[current_point]) / (float)segsamps; //post("frak %f counter %d point break %d diff %d",frak, counter, point_breaks[current_point],counter - point_breaks[current_point] ); if( frak < 0.0 || frak > 1.0 ) { post("bad fraction: %f",frak); post("current point: %d", current_point); post("segsamps %d counter %d current break %d next break %d", segsamps, counter, point_breaks[current_point], point_breaks[current_point + 1]); } } if(current_point < 0 || current_point > point_count - 1) { post("ERROR: dss had bad current point!"); sample = 0; } else { sample = values[current_point] + (values[current_point+1] - values[current_point]) * frak; } } ++counter; if(counter >= period_samples) { counter = 0; current_point = 0; if( x->freq > 0.0 ) { period_samples = x->srate / x->freq; } // nudge waveform for(i = 1; i < point_count - 1; i++) { dev = boundrand(-1.0,1.0) * ydevs[i] * x->devscale_y; newval = values[i] + dev; // clip newval = newval > 0.95 ? 0.95 : newval; newval = newval < -0.95 ? -0.95 : newval; values[i] = newval; } for(i = 1; i < point_count - 1; i++) { dev = boundrand(-1.0,1.0) * xdevs[i] * x->devscale_x; newval = norm_breaks[i] + dev; // clip newval = newval < 0.05 ? 0.05 : newval; newval = newval > 0.95 ? 0.95: newval; norm_breaks[i] = newval; /* if(norm_breaks[i] < norm_breaks[i-1]) { norm_breaks[i] = norm_breaks[i-1] + 0.03; // disallow point jumps for now } */ } // now sort them for(i = 1; i < point_count; i++) { findex1 = norm_breaks[i]; findex2 = values[i]; j = i; while( j > 0 && norm_breaks[j-1] > findex1) { norm_breaks[j] = norm_breaks[j-1]; values[j] = values[j-1]; j = j - 1; } norm_breaks[j] = findex1; values[j] = findex2; } // now generate sample breaks for(i = 0; i < point_count; i++) { point_breaks[i] = (long) ( (float)period_samples * norm_breaks[i] ); } } *outlet++ = sample; } x->counter = counter; x->current_point = current_point; x->period_samples = period_samples; return (w + 5); } void dynss_dsp(t_dynss *x, t_signal **sp) { if(x->srate != sp[0]->s_sr) { x->srate = sp[0]->s_sr; } dsp_add(dynss_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec,sp[0]->s_n); } pd-lyonpotpourri-3.0.1/ellipse.c000066400000000000000000000130211430526361000166570ustar00rootroot00000000000000#include "bashfest.h" float lpp_ellipse(float x, LSTRUCT *eel, int nsects, float xnorm) { register int m; float op; for(m=0;m MAXSECTS) { pd_error(0, "sorry, only configured for %d sections",MAXSECTS); return; } i=1; for(m=0;m<*nsects;m++) { eel[m].c0 = list[i++]; eel[m].c1 = list[i++]; eel[m].c2 = list[i++]; eel[m].c3 = list[i++]; eel[m].ps0 = eel[m].ps1 = eel[m].ps2 = eel[m].ps3 = 0; } *xnorm = list[i]; } /*set biquad coefficients one time*/ void lpp_init_ellipse_data(float **a) { /* 0: hipass at 200 */ a[0][0] = 4; a[0][1] = 1.5156562; a[0][2] = -1.9958239; a[0][3] = 1; a[0][4] = 0.9965234; a[0][5] = -1.9996996; a[0][6] = 0.97229244; a[0][7] = 1; a[0][8] = 0.89313463; a[0][9] = 1.8828678; a[0][10] = -1.9561138; a[0][11] = 1; a[0][12] = 0.95845959; a[0][13] = -1.9999342; a[0][14] = -0.065893592; a[0][15] = 1; a[0][16] = 0.39565826; a[0][17] = 0.26225143; /* 1: hipass at 500 */ a[1][0] = 3; a[1][1] = -1.9950633; a[1][2] = -1.9910746; a[1][3] = 1; a[1][4] = 0.99729187; a[1][5] = -1.9964182; a[1][6] = -1.9742933; a[1][7] = 1; a[1][8] = 0.98250468; a[1][9] = -1.999304; a[1][10] = -1.8149534; a[1][11] = 1; a[1][12] = 0.84353385; a[1][13] = 0.90419364; /* 2: bandpass 280 - 700 */ a[2][0] = 4; a[2][1] = -1.9989934; a[2][2] = -1.9946771; a[2][3] = 1; a[2][4] = 0.99626146; a[2][5] = -1.9843098; a[2][6] = -1.9807532; a[2][7] = 1; a[2][8] = 0.99066977; a[2][9] = -1.9996779; a[2][10] = -1.9795816; a[2][11] = 1; a[2][12] = 0.9820447; a[2][13] = -1.9513627; a[2][14] = -1.965153; a[2][15] = 1; a[2][16] = 0.97142923; a[2][17] = 0.013949928; /* 3: lopass at 500 */ a[3][0] = 3; a[3][1] = -1.9922858; a[3][2] = -1.9903447; a[3][3] = 1; a[3][4] = 0.99525722; a[3][5] = -1.9849712; a[3][6] = -1.9765264; a[3][7] = 1; a[3][8] = 0.97923558; a[3][9] = 1; a[3][10] = -0.98180316; a[3][11] = 0; a[3][12] = 0; a[3][13] = 0.0014021298; /* 4: lopass at 2K */ a[4][0] = 3; a[4][1] = -1.9170388; a[4][2] = -1.9264647; a[4][3] = 1; a[4][4] = 0.99064223; a[4][5] = -1.8850187; a[4][6] = -1.9092573; a[4][7] = 1; a[4][8] = 0.95627234; a[4][9] = -1.4613313; a[4][10] = -1.8821271; a[4][11] = 0.99999996; a[4][12] = 0.89422169; a[4][13] = 0.0071020706; /* 5: f1,f2,f3= 400.0 900.0 2500. ripple= 1.000 db= 40.00 */ a[5][0] = 4; a[5][1] = -1.9594111; a[5][2] = -1.9900446; a[5][3] = 1; a[5][4] = 0.9932218; a[5][5] = -1.9986938; a[5][6] = -1.967975; a[5][7] = 1; a[5][8] = 0.98456911; a[5][9] = -1.8436241; a[5][10] = -1.9696535; a[5][11] = 1; a[5][12] = 0.9745592; a[5][13] = -1.9996708; a[5][14] = -1.9523041; a[5][15] = 1; a[5][16] = 0.96284515; a[5][17] = 0.0027629927; /* 6: hipass at 500 */ a[6][0] = 3; a[6][1] = -1.9950633; a[6][2] = -1.9910746; a[6][3] = 1; a[6][4] = 0.99729187; a[6][5] = -1.9964182; a[6][6] = -1.9742933; a[6][7] = 1; a[6][8] = 0.98250468; a[6][9] = -1.999304; a[6][10] = -1.8149534; a[6][11] = 1; a[6][12] = 0.84353385; a[6][13] = 0.90419364; /* 7: bandpass 1000-4000-6000 */ a[7][0] = 4; a[7][1] = -1.9924766; a[7][2] = -1.9573893; a[7][3] = 1; a[7][4] = 0.97714717; a[7][5] = -1.2471186; a[7][6] = -1.6082873; a[7][7] = 1; a[7][8] = 0.91482231; a[7][9] = -1.9983103; a[7][10] = -1.8512918; a[7][11] = 1; a[7][12] = 0.88910013; a[7][13] = 0.033335148; a[7][14] = -1.6413378; a[7][15] = 0.99999998; a[7][16] = 0.78964041; a[7][17] = 0.0087452226; /* 8: hipass 4000-10000 */ a[8][0] = 1; a[8][1] = -1.9896868; a[8][2] = -1.3953066; a[8][3] = 1; a[8][4] = 0.58943112; a[8][5] = 0.74811328; /* 9: bandpass 500-2500-3500 */ a[9][0] = 6; a[9][1] = -1.9975736; a[9][2] = -1.9902167; a[9][3] = 1; a[9][4] = 0.99529287; a[9][5] = -1.7460823; a[9][6] = -1.853476; a[9][7] = 1; a[9][8] = 0.97721553; a[9][9] = -1.9984481; a[9][10] = -1.9737545; a[9][11] = 1; a[9][12] = 0.98056598; a[9][13] = -1.6166383; a[9][14] = -1.8408836; a[9][15] = 0.99999999; a[9][16] = 0.93097271; a[9][17] = -1.9997426; a[9][18] = -1.9320458; a[9][19] = 1; a[9][20] = 0.94629262; a[9][21] = -0.44018748; a[9][22] = -1.8664352; a[9][23] = 0.99999993; a[9][24] = 0.90871633; a[9][25] = 0.00044746789; /* 10: bp-300-400-2500-70dB */ a[10][0] = 8; a[10][1] = -1.7823256; a[10][2] = -1.9938863; a[10][3] = 1; a[10][4] = 0.99712611; a[10][5] = -1.9981713; a[10][6] = -1.8579881; a[10][7] = 1; a[10][8] = 0.9825214; a[10][9] = -1.7151492; a[10][10] = -1.9844167; a[10][11] = 1; a[10][12] = 0.9884184; a[10][13] = -1.9986272; a[10][14] = -1.8447412; a[10][15] = 1; a[10][16] = 0.94374559; a[10][17] = -1.3382862; a[10][18] = -1.9602273; a[10][19] = 1; a[10][20] = 0.96717992; a[10][21] = -1.9994689; a[10][22] = -1.8529558; a[10][23] = 1; a[10][24] = 0.90889168; a[10][25] = 1; a[10][26] = -1.903171; a[10][27] = 0; a[10][28] = 0.92280038; a[10][29] = -1; a[10][30] = 0; a[10][31] = 0; a[10][32] = 0; a[10][33] = 0.00022546378; } pd-lyonpotpourri-3.0.1/epluribus~-help.pd000066400000000000000000000027521430526361000205520ustar00rootroot00000000000000#N canvas 600 60 571 697 12; #X obj 39 179 phasor~ 620; #X obj 128 258 phasor~ 620.77; #X floatatom 218 458 5 0 0 0 - - -; #X text 262 455 selected channel; #X obj 218 337 phasor~ 600.9; #X obj 39 390 lyonpotpourri/epluribus~ 3; #X obj 218 425 lyonpotpourri/click2float~; #X obj 39 202 lyonpotpourri/killdc~; #X obj 218 360 lyonpotpourri/killdc~; #X obj 128 281 lyonpotpourri/killdc~; #X obj 39 477 lpp-meters; #X obj 22 17 lpp-icon epluribus~; #X text 253 44 - waveform combiner; #X text 236 389 arg: number of input signals to combine; #X floatatom 39 151 5 0 0 0 - #0-f1 -; #X floatatom 128 233 5 0 0 0 - #0-f2 -; #X floatatom 218 313 5 0 0 0 - #0-f3 -; #N canvas 0 23 385 386 try-different-frequency-combos 0; #X obj 48 166 unpack f f f; #X msg 133 97 620 620.77 600.9; #X msg 169 122 60 439 1953; #X obj 48 251 s \$0-f1; #X obj 88 227 s \$0-f2; #X obj 129 197 s \$0-f3; #X msg 94 70 149 300.11 300.328; #X msg 48 39 200 225 253.125; #X connect 0 0 3 0; #X connect 0 1 4 0; #X connect 0 2 5 0; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X restore 197 613 pd try-different-frequency-combos; #X text 25 112 [epluribus~] selects the highest absolute-valued sample from all its inputs \, on a per-sample basis; #X connect 0 0 7 0; #X connect 1 0 9 0; #X connect 4 0 8 0; #X connect 5 0 10 0; #X connect 5 0 10 1; #X connect 5 1 6 0; #X connect 6 0 2 0; #X connect 7 0 5 0; #X connect 8 0 5 2; #X connect 9 0 5 1; #X connect 14 0 0 0; #X connect 15 0 1 0; #X connect 16 0 4 0; pd-lyonpotpourri-3.0.1/epluribus~.c000066400000000000000000000075011430526361000174400ustar00rootroot00000000000000#include "MSPd.h" static t_class *epluribus_class; #define MAXBEATS (256) #define OBJECT_NAME "epluribus~" #define COMPILE_DATE "5.3.08" #define OBJECT_VERSION "2.0" typedef struct _epluribus { t_object x_obj; float x_f; int incount; // how many inlets (must be at least 2) short inverse; // flag to look for minimum instead } t_epluribus; static void *epluribus_new(t_symbol *msg, int argc, t_atom *argv); static t_int *epluribus_perform(t_int *w); static void epluribus_dsp(t_epluribus *x, t_signal **sp); static void epluribus_inverse(t_epluribus *x, t_floatarg tog); void epluribus_tilde_setup(void) { t_class *c; c = class_new(gensym("epluribus~"), (t_newmethod)epluribus_new, 0,sizeof(t_epluribus), 0,A_GIMME,0); CLASS_MAINSIGNALIN(c, t_epluribus, x_f); class_addmethod(c, (t_method)epluribus_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(c, (t_method)epluribus_inverse, gensym("inverse"),A_FLOAT, 0); epluribus_class = c; potpourri_announce(OBJECT_NAME); } void epluribus_inverse(t_epluribus *x, t_floatarg tog) { x->inverse = (short) tog; } void *epluribus_new(t_symbol *msg, int argc, t_atom *argv) { t_epluribus *x; int i; x = (t_epluribus *)pd_new(epluribus_class); x->incount = (int) atom_getfloatarg(0,argc,argv); for(i = 0; i < x->incount - 1; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); if(x->incount < 2 || x->incount > 256 ) { pd_error(0, "%s: there must be between 2 and 256 input vectors", OBJECT_NAME); return (NULL); } x->inverse = 0; // by default don't do inverse behaviour return (x); } t_int *epluribus_perform(t_int *w) { int i,j,k; t_epluribus *x = (t_epluribus *) (w[1]); t_float *inlet; t_float *outlet; t_float *selection; int n; t_float maxamp = 0.0; t_float maxout = 0.0; int maxloc; int incount = x->incount; int next_pointer = incount + 5; outlet = (t_float *) w[incount + 2]; selection = (t_float *) w[incount + 3]; n = (int) w[incount + 4]; if( x->inverse ) { for(k = 0; k < n; k ++ ) { maxamp = 99999999.0; maxloc = 0; for(i = 0, j=2; i < incount ; i++, j++) { inlet = (t_float *) (w[j]); if( maxamp > fabs( inlet[k] ) ) { maxamp = fabs( inlet[k] ); maxout = inlet[k]; // don't actually change signal maxloc = i + 1; // record location of max amp } } outlet[k] = maxout; selection[k] = maxloc; } } else { for(k = 0; k < n; k ++ ) { maxamp = 0.0; maxloc = 0; for(i = 0, j=2; i < incount ; i++, j++) { inlet = (t_float *) (w[j]); if( maxamp < fabs( inlet[k] ) ) { maxamp = fabs( inlet[k] ); maxout = inlet[k]; // don't actually change signal maxloc = i + 1; // record location of max amp } } outlet[k] = maxout; selection[k] = maxloc; } } return w + next_pointer; } void epluribus_dsp(t_epluribus *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count; if( x->incount < 2 || x->incount > 256 ) { post("bad vector count"); return; } pointer_count = x->incount + 4; // all metros, plus 2 outlets, plus the object pointer, plus N sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } dsp_addv(epluribus_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec, pointer_count * sizeof(t_int *)); } pd-lyonpotpourri-3.0.1/expflam~-help.pd000066400000000000000000000111451430526361000201700ustar00rootroot00000000000000#N canvas 512 30 683 761 12; #N canvas 600 60 522 372 load-samples 0; #X obj 41 107 soundfiler; #X msg 41 39 bang; #X obj 41 65 openpanel; #X obj 154 29 loadbang; #X msg 41 87 read -resize \$1 expflam-drum; #X msg 154 54 read -resize sound/kick_11d.aiff expflam-drum; #X connect 1 0 2 0; #X connect 2 0 4 0; #X connect 3 0 5 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X restore 241 656 pd load-samples; #N canvas 0 22 450 300 (subpatch) 0; #X array expflam-drum 16884 float 2; #X coords 0 1 16884 -1 100 70 1; #X restore 240 540 graph; #X obj 102 428 loadbang; #X obj 45 265 r expflam-msg; #N canvas 461 254 635 324 expflam-controls 0; #X msg 25 198 bypass \$1; #X obj 25 173 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 24 281 s expflam-msg; #X msg 151 264 setflam \$1 \$2 \$3 \$4 \$5; #X floatatom 150 184 5 0 0 0 - - -; #X floatatom 190 185 5 0 0 0 - - -; #X floatatom 231 185 5 0 0 0 - - -; #X floatatom 271 186 5 0 0 0 - - -; #X floatatom 312 186 5 0 0 0 - - -; #N canvas 600 60 454 304 pak 0; #X obj 63 60 inlet; #X obj 65 150 pack f f f f f; #X obj 112 59 inlet; #X obj 110 85 t b f; #X obj 167 54 inlet; #X obj 165 80 t b f; #X obj 216 53 inlet; #X obj 214 79 t b f; #X obj 267 53 inlet; #X obj 265 79 t b f; #X obj 68 184 outlet; #X connect 0 0 1 0; #X connect 1 0 10 0; #X connect 2 0 3 0; #X connect 3 0 1 0; #X connect 3 1 1 1; #X connect 4 0 5 0; #X connect 5 0 1 0; #X connect 5 1 1 2; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 7 1 1 3; #X connect 8 0 9 0; #X connect 9 0 1 0; #X connect 9 1 1 4; #X restore 151 225 pd pak; #X obj 370 39 hsl 115 15 20 90 0 0 empty \$0-start-delay start-delay -2 -8 0 10 -162854 -1 -1 1899 1; #X obj 370 69 hsl 115 15 50 150 0 0 empty \$0-end-delay end-delay -2 -8 0 10 -162854 -1 -1 8550 1; #X obj 371 101 hsl 115 15 3 32 0 0 empty \$0-attack-count attack-count -2 -8 0 10 -162854 -1 -1 6290 1; #X obj 231 160 int; #X obj 371 138 hsl 115 15 -6 6 0 0 empty \$0-slope slope -2 -8 0 10 -162854 -1 -1 11400 1; #X obj 371 171 hsl 115 15 0.05 0.99 0 0 empty \$0-attenuation attenuation -2 -8 0 10 -162854 -1 -1 11194 1; #X obj 74 111 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 74 136 flamall \$1; #X text 95 113 flam everything; #X text 41 169 flam nothing; #X connect 0 0 2 0; #X connect 1 0 0 0; #X connect 3 0 2 0; #X connect 4 0 9 0; #X connect 5 0 9 1; #X connect 6 0 9 2; #X connect 7 0 9 3; #X connect 8 0 9 4; #X connect 9 0 3 0; #X connect 10 0 4 0; #X connect 11 0 5 0; #X connect 12 0 13 0; #X connect 13 0 6 0; #X connect 14 0 7 0; #X connect 15 0 8 0; #X connect 16 0 17 0; #X connect 17 0 2 0; #X restore 241 631 pd expflam-controls; #X msg 102 453 static_increment 0; #X obj 241 430 sig~ 1; #X floatatom 242 411 5 0 0 0 - - -; #X obj 245 393 hsl 64 12 0.5 2.5 0 0 empty empty increment -2 -8 0 10 -244920 -1 -1 0 1; #X text 198 259 flam gate signal - flams only occur where a 1 in gate aligns with the attack pattern below; #X text 242 332 attack pattern; #X msg 190 205 tempo \$1; #X floatatom 190 186 5 20 200 0 - #0-tempo -; #X obj 190 299 lyonpotpourri/mask~ 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ; #X obj 76 349 lyonpotpourri/mask~ 1 0.5 0.5 0.5 1 0 0.5 0.5 1 0.5 1 0 0 0.5 1 0.125, f 70; #X obj 76 520 lpp-meters; #X obj 18 28 lpp-icon expflam~; #X obj 190 228 lyonpotpourri/samm~ 98 4; #N canvas 186 165 987 380 init 0; #X obj 19 163 symbol \$0-start-delay; #X obj 19 30 loadbang; #X obj 19 63 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 180 163 symbol \$0-end-delay; #X obj 327 163 symbol \$0-attack-count; #X obj 497 163 symbol \$0-slope; #X obj 629 163 symbol \$0-attenuation; #X obj 793 163 symbol \$0-tempo; #X obj 19 231 pack s s s s s s; #X msg 19 274 \; \$1 31.66 \; \$2 125 \; \$3 19 \; \$4 6 \; \$5 0.973 \$6 70; #X obj 19 87 t b b b b b b; #X connect 0 0 8 0; #X connect 1 0 2 0; #X connect 2 0 10 0; #X connect 3 0 8 1; #X connect 4 0 8 2; #X connect 5 0 8 3; #X connect 6 0 8 4; #X connect 7 0 8 5; #X connect 8 0 9 0; #X connect 10 0 0 0; #X connect 10 1 3 0; #X connect 10 2 4 0; #X connect 10 3 5 0; #X connect 10 4 6 0; #X connect 10 5 7 0; #X restore 241 681 pd init; #X text 238 55 - insert non-linear click attacks into a click attack stream; #X text 20 133 [expflam~] replaces a click trigger with a sequence of triggers to create a flam., f 83; #X obj 76 482 lyonpotpourri/player~ expflam-drum 1 16; #X obj 76 383 lyonpotpourri/expflam~; #X connect 2 0 5 0; #X connect 3 0 22 0; #X connect 5 0 21 0; #X connect 6 0 21 1; #X connect 7 0 6 0; #X connect 8 0 7 0; #X connect 11 0 17 0; #X connect 12 0 11 0; #X connect 13 0 22 1; #X connect 14 0 22 0; #X connect 17 0 13 0; #X connect 17 0 14 0; #X connect 21 0 15 1; #X connect 21 0 15 0; #X connect 22 0 21 0; pd-lyonpotpourri-3.0.1/expflam~.c000066400000000000000000000165631430526361000170720ustar00rootroot00000000000000#include "MSPd.h" static t_class *expflam_class; #define OBJECT_NAME "expflam~" #define MAXFLAMS (64) #define MAXATTACKS (128) #define STOPGAIN (.001) typedef struct { int attack_count; // number of triggers per flam event float *attack_times; // trigger times in seconds int *attack_points; // trigger times in samples int fdex; // current flam float gainatten; // attenuation factor float amp; // current amp int atks;// number of attacks per flam long counter; // internal clock short active; // flag that flam is turned on } t_flam; typedef struct _expflam { t_object x_obj; float x_f; t_flam *flams; // contain flams float start_delay; // initial flam delay float end_delay;// end delay float atten; // attenuation factor float slope;// slope of curve int atks;// number of attacks per flam float sr; float *trigvec; // hold input vector (to protect from memory sharing) float *bypvec; // ditto for flamgate vector short flamall; // flag to put a flam on everything short bypass; // flag to copy input to output without flam short flamgate_connected; // flag that a flamgate logical signal is connected to inlet 2 } t_expflam; static void *expflam_new(void); static t_int *expflam_perform(t_int *w); static void expflam_dsp(t_expflam *x, t_signal **sp); static void expflam_setflam(t_expflam *x, t_symbol *msg, int argc, t_atom *argv); static void expflam_free(t_expflam *x); // static void expflam_assist(t_expflam *x, void *b, long msg, long arg, char *dst); static void expflam_flamall(t_expflam *x, t_floatarg tog); static void expflam_bypass(t_expflam *x, t_floatarg tog); void expflam_tilde_setup(void) { expflam_class = class_new(gensym("expflam~"),(t_newmethod)expflam_new, (t_method)expflam_free, sizeof(t_expflam), 0, 0); CLASS_MAINSIGNALIN(expflam_class,t_expflam, x_f ); class_addmethod(expflam_class,(t_method)expflam_dsp,gensym("dsp"),A_CANT,0); class_addmethod(expflam_class,(t_method)expflam_setflam,gensym("setflam"),A_GIMME,0); class_addmethod(expflam_class,(t_method)expflam_flamall,gensym("flamall"),A_FLOAT,0); class_addmethod(expflam_class,(t_method)expflam_bypass,gensym("bypass"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void expflam_flamall(t_expflam *x, t_floatarg tog) { x->flamall = (short) tog; } void expflam_bypass(t_expflam *x, t_floatarg tog) { x->bypass = (short) tog; } /* void expflam_assist(t_expflam *x, void *b, long msg, long arg, char *dst) { if (msg==1) { switch (arg) { case 0: sprintf(dst,"(signal) Trigger Click"); break; case 1: sprintf(dst,"(signal) Flam Gate"); break; } } else if (msg==2) { sprintf(dst,"(signal) Flam Clicks"); } } */ void *expflam_new(void) { int i; t_expflam *x = (t_expflam *)pd_new(expflam_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->flams = (t_flam *) getbytes(MAXFLAMS * sizeof(t_flam)); for(i = 0; i < MAXFLAMS; i++) { x->flams[i].attack_times = (float *) getbytes(MAXATTACKS * sizeof(float)); x->flams[i].attack_points = (int *) getbytes(MAXATTACKS * sizeof(int)); } x->trigvec = (float *) getbytes(8192 * sizeof(float)); // maximum vector size x->bypvec = (float *) getbytes(8192 * sizeof(float)); // maximum vector size x->sr = sys_getsr(); x->start_delay = .025; x->end_delay = 0.1; x->slope = -3.0; x->atks = 8; x->atten = 0.8; x->bypass = 0; x->flamall = 0; return x; } void expflam_setflam(t_expflam *x, t_symbol *msg, int argc, t_atom *argv) { if( argc != 5 ) { pd_error(0, "%s: setflam format: startdelay enddelay attacks slope gainatten",OBJECT_NAME); return; } x->start_delay = atom_getfloatarg(0,argc,argv) * 0.001; x->end_delay = atom_getfloatarg(1,argc,argv) * 0.001; x->atks = (int) atom_getfloatarg(2,argc,argv); x->slope = atom_getfloatarg(3,argc,argv); x->atten = atom_getfloatarg(4,argc,argv); if(x->slope == 0) x->slope = .0001; if(x->start_delay <= 0) x->start_delay = .00001; if(x->end_delay <= 0) x->end_delay = .00001; if(x->atks < 2) x->atks = 2; if(x->atks > MAXATTACKS) { post("%s: exceeded maximum of %d attacks",OBJECT_NAME, MAXATTACKS); x->atks = MAXATTACKS; } } void expflam_free(t_expflam *x) { int i; freebytes(x->trigvec, 8192 * sizeof(float)); freebytes(x->bypvec, 8192 * sizeof(float)); for(i = 0; i < MAXFLAMS; i++) { freebytes(x->flams[i].attack_times, MAXATTACKS * sizeof(float)); freebytes(x->flams[i].attack_points, MAXATTACKS * sizeof(int)); } freebytes(x->flams, MAXFLAMS * sizeof(t_flam)); } t_int *expflam_perform(t_int *w) { int i,j,k; t_expflam *x = (t_expflam *) (w[1]); float *in_vec = (t_float *)(w[2]); float *in2_vec = (t_float *)(w[3]); float *out_vec = (t_float *)(w[4]); int n = (int) w[5]; float *trigvec = x->trigvec; float *flamgate_vec = x->bypvec; t_flam *flams = x->flams; int atks = x->atks; float atten = x->atten; float slope = x->slope; float start_delay = x->start_delay; float end_delay = x->end_delay; float sr = x->sr; short flamgate_connected = x->flamgate_connected; short flamall = x->flamall; /* in flamgate mode copy input to output and return */ if(x->bypass) { memcpy( (void *)out_vec, (void *)in_vec, n * sizeof(float) ); return (w+6); } /* copy input vectors */ memcpy( (void *)flamgate_vec, (void *)in2_vec, n * sizeof(float) );// the order of these mcopies matters memcpy( (void *)trigvec, (void *)in_vec, n * sizeof(float) ); memcpy( (void *)out_vec, (void *)in_vec, n * sizeof(float) );// copy triggers to output for a start /* look for activation triggers */ for(i = 0; i < n; i++) { if(trigvec[i] && (flamgate_vec[i] || ! flamgate_connected || flamall ) ) { // post("triggered with t %f and flamgate %f",trigvec[i],flamgate_vec[i]); j = 0; while(flams[j].active && j < MAXFLAMS) { ++j; } if(j >= MAXFLAMS) { post("too many flams"); } else { // post("inserting flam at location %d",j); flams[j].active = 1; flams[j].attack_times[0] = 0.0; flams[j].attack_points[0] = i; flams[j].gainatten = atten; flams[j].amp = trigvec[i]; flams[j].counter = 0; flams[j].fdex = 0; flams[j].atks = atks; for(k = 1; k < atks; k++) { flams[j].attack_times[k] = start_delay + (end_delay - start_delay) * ((1.0 - exp((float)k * slope/((float)atks-1.0)))/(1.0-exp(slope))); flams[j].attack_times[k] += flams[j].attack_times[k - 1]; flams[j].attack_points[k] = flams[j].attack_times[k] * sr + i; } } } } /* now iterate through active flams */ for( i = 0; i < n; i++) { for(j = 0; j < MAXFLAMS; j++) { if(flams[j].active) { if(flams[j].counter >= flams[j].attack_points[flams[j].fdex]) { out_vec[i] += flams[j].amp; flams[j].amp *= flams[j].gainatten; if( flams[j].amp <= STOPGAIN ) { flams[j].active = 0; } flams[j].fdex++; if(flams[j].fdex >= flams[j].atks) { flams[j].active = 0; } } flams[j].counter++; } } } return w+6; } void expflam_dsp(t_expflam *x, t_signal **sp) { x->flamgate_connected = 1; dsp_add(expflam_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n ); } pd-lyonpotpourri-3.0.1/fft.c000066400000000000000000000071261430526361000160120ustar00rootroot00000000000000#include "fftease.h" /* If forward is true, rfft replaces 2*N real data points in x with N complex values representing the positive frequency half of their Fourier spectrum, with x[1] replaced with the real part of the Nyquist frequency value. If forward is false, rfft expects x to contain a positive frequency spectrum arranged as before, and replaces it with 2*N real values. N MUST be a power of 2. */ void lpp_rfft( float *x, int N, int forward ) { float c1,c2, h1r,h1i, h2r,h2i, wr,wi, wpr,wpi, temp, theta; float xr,xi; int i, i1,i2,i3,i4, N2p1; static int first = 1; /*float PI, TWOPI;*/ // void cfft(); if ( first ) { first = 0; } theta = PI/N; wr = 1.; wi = 0.; c1 = 0.5; if ( forward ) { c2 = -0.5; lpp_cfft( x, N, forward ); xr = x[0]; xi = x[1]; } else { c2 = 0.5; theta = -theta; xr = x[1]; xi = 0.; x[1] = 0.; } wpr = -2.*pow( sin( 0.5*theta ), 2. ); wpi = sin( theta ); N2p1 = (N<<1) + 1; for ( i = 0; i <= N>>1; i++ ) { i1 = i<<1; i2 = i1 + 1; i3 = N2p1 - i2; i4 = i3 + 1; if ( i == 0 ) { h1r = c1*(x[i1] + xr ); h1i = c1*(x[i2] - xi ); h2r = -c2*(x[i2] + xi ); h2i = c2*(x[i1] - xr ); x[i1] = h1r + wr*h2r - wi*h2i; x[i2] = h1i + wr*h2i + wi*h2r; xr = h1r - wr*h2r + wi*h2i; xi = -h1i + wr*h2i + wi*h2r; } else { h1r = c1*(x[i1] + x[i3] ); h1i = c1*(x[i2] - x[i4] ); h2r = -c2*(x[i2] + x[i4] ); h2i = c2*(x[i1] - x[i3] ); x[i1] = h1r + wr*h2r - wi*h2i; x[i2] = h1i + wr*h2i + wi*h2r; x[i3] = h1r - wr*h2r + wi*h2i; x[i4] = -h1i + wr*h2i + wi*h2r; } wr = (temp = wr)*wpr - wi*wpi + wr; wi = wi*wpr + temp*wpi + wi; } if ( forward ) x[1] = xr; else lpp_cfft( x, N, forward ); } /* cfft replaces float array x containing NC complex values (2*NC float values alternating real, imagininary, etc.) by its Fourier transform if forward is true, or by its inverse Fourier transform if forward is false, using a recursive Fast Fourier transform method due to Danielson and Lanczos. NC MUST be a power of 2. */ void lpp_cfft( float *x, int NC, int forward ) { float wr,wi, wpr,wpi, theta, scale; int mmax, ND, m, i,j, delta; // void bitreverse(); ND = NC<<1; lpp_bitreverse( x, ND ); for ( mmax = 2; mmax < ND; mmax = delta ) { delta = mmax<<1; theta = TWOPI/( forward? mmax : -mmax ); wpr = -2.*pow( sin( 0.5*theta ), 2. ); wpi = sin( theta ); wr = 1.; wi = 0.; for ( m = 0; m < mmax; m += 2 ) { register float rtemp, itemp; for ( i = m; i < ND; i += delta ) { j = i + mmax; rtemp = wr*x[j] - wi*x[j+1]; itemp = wr*x[j+1] + wi*x[j]; x[j] = x[i] - rtemp; x[j+1] = x[i+1] - itemp; x[i] += rtemp; x[i+1] += itemp; } wr = (rtemp = wr)*wpr - wi*wpi + wr; wi = wi*wpr + rtemp*wpi + wi; } } /* scale output */ scale = forward ? 1./ND : 2.; { register float *xi=x, *xe=x+ND; while ( xi < xe ) *xi++ *= scale; } } /* bitreverse places float array x containing N/2 complex values into bit-reversed order */ void lpp_bitreverse( float *x, int N ) { float rtemp,itemp; int i,j, m; for ( i = j = 0; i < N; i += 2, j += m ) { if ( j > i ) { rtemp = x[j]; itemp = x[j+1]; /* complex exchange */ x[j] = x[i]; x[j+1] = x[i+1]; x[i] = rtemp; x[i+1] = itemp; } for ( m = N>>1; m >= 2 && j >= m; m >>= 1 ) j -= m; } } pd-lyonpotpourri-3.0.1/fft4.c000066400000000000000000000145221430526361000160740ustar00rootroot00000000000000#include #include "fftease.h" void lpp_init_rdft(int n, int *ip, float *w) { int nw, nc; void makewt(int nw, int *ip, float *w); void makect(int nc, int *ip, float *c); nw = n >> 2; makewt(nw, ip, w); nc = n >> 2; makect(nc, ip, w + nw); return; } void lpp_rdft(int n, int isgn, float *a, int *ip, float *w) { int j, nw, nc; float xi; /* void bitrv2(int n, int *ip, float *a), cftsub(int n, float *a, float *w), rftsub(int n, float *a, int nc, float *c); */ nw = ip[0]; nc = ip[1]; if (isgn < 0) { a[1] = 0.5 * (a[1] - a[0]); a[0] += a[1]; for (j = 3; j <= n - 1; j += 2) { a[j] = -a[j]; } if (n > 4) { lpp_rftsub(n, a, nc, w + nw); lpp_bitrv2(n, ip + 2, a); } lpp_cftsub(n, a, w); for (j = 1; j <= n - 1; j += 2) { a[j] = -a[j]; } } else { if (n > 4) { lpp_bitrv2(n, ip + 2, a); } lpp_cftsub(n, a, w); if (n > 4) { lpp_rftsub(n, a, nc, w + nw); } xi = a[0] - a[1]; a[0] += a[1]; a[1] = xi; } } void lpp_bitrv2(int n, int *ip, float *a) { int j, j1, k, k1, l, m, m2; float xr, xi; ip[0] = 0; l = n; m = 1; while ((m << 2) < l) { l >>= 1; for (j = 0; j <= m - 1; j++) { ip[m + j] = ip[j] + l; } m <<= 1; } if ((m << 2) > l) { for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } else { m2 = m << 1; for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 += m2; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } } void lpp_cftsub(int n, float *a, float *w) { int j, j1, j2, j3, k, k1, ks, l, m; float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; l = 2; while ((l << 1) < n) { m = l << 2; for (j = 0; j <= l - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i - x2i; a[j1] = x1r - x3i; a[j1 + 1] = x1i + x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i - x3r; } if (m < n) { wk1r = w[2]; for (j = m; j <= l + m - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x2i - x0i; a[j2 + 1] = x0r - x2r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * (x0r - x0i); a[j1 + 1] = wk1r * (x0r + x0i); x0r = x3i + x1r; x0i = x3r - x1i; a[j3] = wk1r * (x0i - x0r); a[j3 + 1] = wk1r * (x0i + x0r); } k1 = 1; ks = -1; for (k = (m << 1); k <= n - m; k += m) { k1++; ks = -ks; wk1r = w[k1 << 1]; wk1i = w[(k1 << 1) + 1]; wk2r = ks * w[k1]; wk2i = w[k1 + ks]; wk3r = wk1r - 2 * wk2i * wk1i; wk3i = 2 * wk2i * wk1r - wk1i; for (j = k; j <= l + k - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; x0r -= x2r; x0i -= x2i; a[j2] = wk2r * x0r - wk2i * x0i; a[j2 + 1] = wk2r * x0i + wk2i * x0r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * x0r - wk1i * x0i; a[j1 + 1] = wk1r * x0i + wk1i * x0r; x0r = x1r + x3i; x0i = x1i - x3r; a[j3] = wk3r * x0r - wk3i * x0i; a[j3 + 1] = wk3r * x0i + wk3i * x0r; } } } l = m; } if (l < n) { for (j = 0; j <= l - 2; j += 2) { j1 = j + l; x0r = a[j] - a[j1]; x0i = a[j + 1] - a[j1 + 1]; a[j] += a[j1]; a[j + 1] += a[j1 + 1]; a[j1] = x0r; a[j1 + 1] = x0i; } } } void lpp_rftsub(int n, float *a, int nc, float *c) { int j, k, kk, ks; float wkr, wki, xr, xi, yr, yi; ks = (nc << 2) / n; kk = 0; for (k = (n >> 1) - 2; k >= 2; k -= 2) { j = n - k; kk += ks; wkr = 0.5 - c[kk]; wki = c[nc - kk]; xr = a[k] - a[j]; xi = a[k + 1] + a[j + 1]; yr = wkr * xr - wki * xi; yi = wkr * xi + wki * xr; a[k] -= yr; a[k + 1] -= yi; a[j] += yr; a[j + 1] -= yi; } } void lpp_makewt(int nw, int *ip, float *w) { // void bitrv2(int n, int *ip, float *a); int nwh, j; float delta, x, y; ip[0] = nw; ip[1] = 1; if (nw > 2) { nwh = nw >> 1; delta = atan(1.0) / nwh; w[0] = 1; w[1] = 0; w[nwh] = cos(delta * nwh); w[nwh + 1] = w[nwh]; for (j = 2; j <= nwh - 2; j += 2) { x = cos(delta * j); y = sin(delta * j); w[j] = x; w[j + 1] = y; w[nw - j] = y; w[nw - j + 1] = x; } lpp_bitrv2(nw, ip + 2, w); } } void lpp_makect(int nc, int *ip, float *c) { int nch, j; float delta; ip[1] = nc; if (nc > 1) { nch = nc >> 1; delta = atan(1.0) / nch; c[0] = 0.5; c[nch] = 0.5 * cos(delta * nch); for (j = 1; j <= nch - 1; j++) { c[j] = 0.5 * cos(delta * j); c[nc - j] = 0.5 * sin(delta * j); } } } pd-lyonpotpourri-3.0.1/fftease.h000066400000000000000000000042001430526361000166430ustar00rootroot00000000000000#include #include #include #include /* The new improved fftease.h */ #define getbytes t_getbytes #define freebytes t_freebytes #define resizebytes t_resizebytes #define FFTEASE_ANNOUNCEMENT "- a member of FFTease 2.52" #ifndef PI #define PI 3.141592653589793115997963468544185161590576171875 #endif #ifndef TWOPI #define TWOPI 6.28318530717958623199592693708837032318115234375 #endif #define MAX_N (1073741824) #define MAX_N2 (MAX_N/2) #define MAX_Nw (MAX_N * 4) void lpp_convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ); void lpp_unconvert( float *C, float *S, int N2, float *lastphase, float fundamental, float factor ); void lpp_rfft( float *x, int N, int forward ); void lpp_cfft( float *x, int NC, int forward ); void lpp_bitreverse( float *x, int N ); void lpp_fold( float *I, float *W, int Nw, float *O, int N, int n ); void lpp_init_rdft(int n, int *ip, float *w); void lpp_rdft(int n, int isgn, float *a, int *ip, float *w); void lpp_bitrv2(int n, int *ip, float *a); void lpp_cftsub(int n, float *a, float *w); void lpp_rftsub(int n, float *a, int nc, float *c); void lpp_makewt(int nw, int *ip, float *w); void lpp_makect(int nc, int *ip, float *c); void lpp_leanconvert( float *S, float *C, int N2 ); void lpp_leanunconvert( float *C, float *S, int N2 ); void lpp_makewindows( float *H, float *A, float *S, int Nw, int N, int I ); void lpp_makehamming( float *H, float *A, float *S, int Nw, int N, int I,int odd ); void lpp_makehanning( float *H, float *A, float *S, int Nw, int N, int I,int odd ); void lpp_overlapadd( float *I, int N, float *W, float *O, int Nw, int n ); void lpp_bloscbank( float *S, float *O, int D, float iD, float *lf, float *la, float *bindex, float *tab, int len, float synt, int lo, int hi ); float lpp_randf( float min, float max ); int lpp_randi( int min, int max ); int lpp_power_of_two(int test); //void freebytes2(void *fatso, size_t nbytes); //void *getbytes2(size_t nbytes); //void *resizebytes2(void *old, size_t oldsize, size_t newsize); void lpp_limit_fftsize(int *N, int *Nw, char *OBJECT_NAME); /* THE FUNCTIONS */ pd-lyonpotpourri-3.0.1/flanjah~-help.pd000066400000000000000000000033621430526361000201410ustar00rootroot00000000000000#N canvas 618 59 492 674 12; #X obj 48 218 phasor~ 350; #X obj 146 180 tgl 15 0 empty \$0-protect empty 0 -6 0 8 -262144 -1 -1 1 1; #X floatatom 183 248 5 -0.5 0.5 2 feedback feedback -; #X floatatom 221 287 5 0 0 2 speed1 speed1 -; #X floatatom 259 319 5 0 0 2 speed2 speed2 -; #X floatatom 297 349 5 0 1 2 depth depth -; #X msg 146 207 protect \$1; #X obj 312 425 hsl 128 15 -0.5 0.5 0 0 feedback feedback-in feedback -2 -6 0 8 -167887 -1 -1 889 1; #X obj 312 454 hsl 128 15 0 4 0 0 speed1 speed1-in speed1 -2 -6 0 8 -167887 -1 -1 1048 1; #X obj 312 483 hsl 128 15 0 4 0 0 speed2 speed2-in speed2 -2 -6 0 8 -167887 -1 -1 794 1; #X obj 312 511 hsl 128 15 0 1 0 0 depth depth-in depth -2 -6 0 8 -167887 -1 -1 190 1; #X text 167 177 protect from dangerous feedback; #X floatatom 48 196 5 0 0 0 - - -; #X obj 146 373 lyonpotpourri/flanjah~; #X obj 48 243 -~ 0.5; #X obj 146 417 lpp-meters; #X obj 41 14 lpp-icon flanjah~; #X text 266 42 - A simple flanger; #X text 43 113 flanger with two recirculating delays; #N canvas 339 464 462 269 init 0; #X msg 172 66 0.33; #X msg 187 87 0.25; #X obj 207 22 loadbang; #X obj 37 62 s feedback-in; #X obj 37 82 s speed1-in; #X obj 37 102 s speed2-in; #X obj 37 122 s depth-in; #X msg 207 108 0.015; #X msg 163 46 -0.43; #X obj 272 77 symbol \$0-protect; #X msg 272 109 \; \$1 1; #X connect 0 0 4 0; #X connect 1 0 5 0; #X connect 2 0 8 0; #X connect 2 0 0 0; #X connect 2 0 1 0; #X connect 2 0 7 0; #X connect 2 0 9 0; #X connect 7 0 6 0; #X connect 8 0 3 0; #X connect 9 0 10 0; #X restore 299 585 pd init; #X connect 0 0 14 0; #X connect 1 0 6 0; #X connect 2 0 13 1; #X connect 3 0 13 2; #X connect 4 0 13 3; #X connect 5 0 13 4; #X connect 6 0 13 0; #X connect 12 0 0 0; #X connect 13 0 15 0; #X connect 13 0 15 1; #X connect 14 0 13 0; pd-lyonpotpourri-3.0.1/flanjah~.c000066400000000000000000000204111430526361000170240ustar00rootroot00000000000000#include "MSPd.h" /* pointless comment */ #define F_LEN 65536 static t_class *flanjah_class; #define OBJECT_NAME "flanjah~" typedef struct _flanjah { t_object x_obj; float x_f; // float *sinetab; float si_factor; float osc1_phs; float osc1_si; float si1; float osc2_phs; float osc2_si; float si2; // float speed1; float speed2; float feedback; float maxdel; float depth; // float *ddl1 ; int ddl1_len; int ddl1_phs; float *ddl2 ; int ddl2_len; int ddl2_phs; // float tap1; float tap2; // int feedback_connected; int speed1_connected; int speed2_connected; int depth_connected; short connected[8]; int feedback_protect; short mute; float sr; } t_flanjah; t_int *flanjah_perform(t_int *w); static void flanjah_protect(t_flanjah *x, t_floatarg state); static void flanjah_mute(t_flanjah *x, t_floatarg state); static void flanjah_dsp(t_flanjah *x, t_signal **sp); static void *flanjah_new(t_symbol *s, int argc, t_atom *argv); static void flanjah_dsp_free( t_flanjah *x ); static void flanjah_report( t_flanjah *x ); static void flanjah_float(t_flanjah *x, double f); static void flanjah_init(t_flanjah *x,short initialized); void flanjah_tilde_setup(void) { flanjah_class = class_new(gensym("flanjah~"), (t_newmethod)flanjah_new, (t_method)flanjah_dsp_free,sizeof(t_flanjah), 0,A_GIMME,0); CLASS_MAINSIGNALIN(flanjah_class, t_flanjah, x_f); class_addmethod(flanjah_class,(t_method)flanjah_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(flanjah_class,(t_method)flanjah_mute,gensym("mute"),A_FLOAT,0); class_addmethod(flanjah_class,(t_method)flanjah_protect,gensym("protect"),A_FLOAT,0); class_addmethod(flanjah_class,(t_method)flanjah_report,gensym("report"),0); potpourri_announce(OBJECT_NAME); } void flanjah_report( t_flanjah *x ) { post("feedback: %f", x->feedback); post("depth: %f", x->depth); post("si1: %f", x->osc1_si); post("si2: %f", x->osc2_si); post("speed1: %f", x->speed1); post("speed2: %f", x->speed2); post("phase1: %f", x->osc1_phs); post("phase2: %f", x->osc2_phs); } void flanjah_dsp_free( t_flanjah *x ) { freebytes(x->sinetab, F_LEN * sizeof(float)); freebytes(x->ddl1, (x->ddl1_len + 2) * sizeof(float)); freebytes(x->ddl2, (x->ddl2_len + 2) * sizeof(float)); } t_int *flanjah_perform(t_int *w) { t_flanjah *x = (t_flanjah *)(w[1]); t_float *in1 = (t_float *)(w[2]); t_float *feedback_vec = (t_float *)(w[3]); t_float *speed1_vec = (t_float *)(w[4]); t_float *speed2_vec = (t_float *)(w[5]); t_float *depth_vec = (t_float *)(w[6]); t_float *out1 = (t_float *)(w[7]); int n = (int) w[8]; float fdelay1, fdelay2; int idelay1, idelay2; float insamp1;//, insamp2; float frac; int index1, index2; float m1, m2; // float osc2_phs = x->osc2_phs; int ddl2_len = x->ddl2_len; float osc2_si = x->osc2_si; float *ddl2 = x->ddl2; int ddl2_phs = x->ddl2_phs; float *ddl1 = x->ddl1; float *sinetab = x->sinetab; int ddl1_phs = x->ddl1_phs; int ddl1_len = x->ddl1_len; float osc1_phs = x->osc1_phs; float osc1_si = x->osc1_si; float tap1 = x->tap1; float tap2 = x->tap2; float feedback = x->feedback; int feedback_connected = x->feedback_connected; int speed1_connected = x->speed1_connected; int speed2_connected = x->speed2_connected; int depth_connected = x->depth_connected; float si_factor = x->si_factor; int feedback_protect = x->feedback_protect; float depth_factor = x->depth; /**********************/ if( x->mute ) { while( n-- ) { *out1++ = 0.0; } return (w+9); } while( n-- ) { // Pull Data off Signal buffers insamp1 = *in1++; if( feedback_connected ) { feedback = *feedback_vec++; } if( feedback_protect ) { if( feedback > 0.425) { feedback = 0.425; } if( feedback < -0.425 ) feedback = -0.425; } if( speed1_connected ) { osc1_si = *speed1_vec++ * si_factor; } if( speed2_connected ) { osc2_si = *speed2_vec++ * si_factor; } if( depth_connected ) { depth_factor = *depth_vec++; } if( depth_factor < .0001 ) { depth_factor = .0001; } if( depth_factor > 1. ) { depth_factor = 1.; } fdelay1 = sinetab[ (int) osc1_phs ] * (float) ddl1_len * depth_factor; fdelay2 = sinetab[ (int) osc2_phs ] * (float) ddl2_len * depth_factor; // DSP Proper idelay1 = fdelay1; osc1_phs += osc1_si; while( osc1_phs >= F_LEN ) osc1_phs -= F_LEN; while( osc1_phs < 0 ) osc1_phs += F_LEN; idelay2 = fdelay2; osc2_phs += osc2_si; while( osc2_phs >= F_LEN ) osc2_phs -= F_LEN; while( osc1_phs < 0 ) osc2_phs += F_LEN; ddl1[ ddl1_phs++ ] = insamp1 + feedback * (tap1+tap2); ddl1_phs = ddl1_phs % ddl1_len; // linear interpolated lookup index1 = (ddl1_phs + idelay1) % ddl1_len; index2 = (index1 + 1) % ddl1_len ; frac = fdelay1 - idelay1 ; m1 = 1. - frac; m2 = frac; tap1 = m1 * ddl1[ index1 ] + m2 * ddl1[ index2 ]; ddl2[ ddl2_phs++ ] = tap1; ddl2_phs = ddl2_phs % ddl2_len; index1 = (ddl2_phs + idelay2) % ddl2_len; index2 = (index1 + 1) % ddl2_len ; frac = fdelay2 - idelay2 ; m1 = 1. - frac; m2 = frac; tap2 = m1 * ddl2[ index1 ] + m2 * ddl2[ index2 ]; *out1++ = (insamp1+tap2) * 0.2; /// } x->ddl1_phs = ddl1_phs; x->osc1_phs = osc1_phs; x->ddl2_phs = ddl2_phs; x->osc2_phs = osc2_phs; x->tap1 = tap1; x->tap2 = tap2; // DSP CONFIG return (w+9); } // void lop_dsp(t_lop *x, t_signal **sp, short *count) void flanjah_dsp(t_flanjah *x, t_signal **sp) { x->feedback_connected = 1; x->speed1_connected = 1; x->speed2_connected = 1; x->depth_connected = 1; if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; flanjah_init(x,1); } dsp_add(flanjah_perform, 8, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec, sp[5]->s_vec, (t_int)sp[0]->s_n); } void flanjah_mute(t_flanjah *x, t_floatarg state) { x->mute = state; } void flanjah_protect(t_flanjah *x, t_floatarg state) { x->feedback_protect = state; // post("feedback proctection set to %d",x->feedback_protect); } void flanjah_init(t_flanjah *x,short initialized) { int i; if( x->maxdel < .0001 ) { x->maxdel = .0001; pd_error(0, "below minimum of 0.01 ms"); } if( x->maxdel > 360000. ) { x->maxdel = 360000.; pd_error(0, "above maximum of 360 seconds"); } x->si_factor = (float)F_LEN / x->sr; x->ddl1_len = x->maxdel * x->sr ; x->ddl1_phs = 0; x->ddl2_len = x->maxdel * x->sr ; x->ddl2_phs = 0; x->osc1_si = x->si_factor * x->speed1; x->osc1_phs = 0; x->osc2_si = x->si_factor * x->speed2; x->osc2_phs = 0; x->tap1 = x->tap2 = 0; if(!initialized) { x->ddl1 = (float *) getbytes((x->ddl1_len + 2) * sizeof(float)); x->ddl2 = (float *) getbytes((x->ddl2_len + 2) * sizeof(float)); x->sinetab = (float *) getbytes(F_LEN * sizeof(float)); for( i = 0; i < F_LEN ; i++ ) { x->sinetab[i] = 0.51 - 0.47 * cos( TWOPI * (float) i / (float) F_LEN); } } else { x->ddl1 = (float *) realloc(x->ddl1,(x->ddl1_len + 2) * sizeof(float)); x->ddl2 = (float *) realloc(x->ddl2,(x->ddl2_len + 2) * sizeof(float)); } } void *flanjah_new(t_symbol *s, int argc, t_atom *argv) { t_flanjah *x = (t_flanjah *)pd_new(flanjah_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->sr = sys_getsr(); if(!x->sr) { pd_error(0, "zero sampling rate - set to 44100"); x->sr = 44100; } // SET DEFAULTS x->maxdel = .05; // in seconds x->feedback = 0.7; x->speed1 = 0.136; x->speed2 = 0.183; x->feedback_protect = 1; x->depth = 1.0; if( argc > 0 ) x->maxdel = atom_getfloatarg(0,argc,argv)/1000.0; if( argc > 1 ) x->feedback = atom_getfloatarg(1,argc,argv); if( argc > 2 ) x->speed1 = atom_getfloatarg(2,argc,argv); if( argc > 3 ) x->speed2 = atom_getfloatarg(3,argc,argv); if( argc > 4 ) x->depth = atom_getfloatarg(4,argc,argv); flanjah_init(x,0); return (x); } pd-lyonpotpourri-3.0.1/fold.c000066400000000000000000000007451430526361000161570ustar00rootroot00000000000000#include "fftease.h" /* * multiply current input I by window W (both of length Nw); * using modulus arithmetic, fold and rotate windowed input * into output array O of (FFT) length N according to current * input time n */ void lpp_fold( float *I, float *W, int Nw, float *O, int N, int n ) { int i; for ( i = 0; i < N; i++ ) O[i] = 0.; while ( n < 0 ) n += N; n %= N; for ( i = 0; i < Nw; i++ ) { O[n] += I[i]*W[i]; if ( ++n == N ) n = 0; } } pd-lyonpotpourri-3.0.1/from_msp.c000066400000000000000000000004401430526361000170450ustar00rootroot00000000000000 #include "MSPd.h" void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av) { if (c&&ac&&av&&(idxwavename); b_samples = x->b_samples; b_frames = x->b_frames; if(b_frames == 0) { return; } for(i=0;ib_frames = 0; x->b_nchans = 1; if (!(a = (t_garray *)pd_findbyclass(x->wavename, garray_class))) { if (*x->wavename->s_name) pd_error(x, "function~: %s: no such array", x->wavename->s_name); } else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { pd_error(x, "%s: bad template for function~", x->wavename->s_name); } else { x->b_frames = frames; garray_usedindsp(a); for(i = 0; i < frames; i++) { post("%d: %f",i, x->b_samples[i].w_float); } } } void function_gaussian(t_function *x) { int i; long b_frames; t_word *b_samples; t_float arg, xarg,in; if(!x->b_frames) { post("* zero length function!"); return; } function_setbuf(x, x->wavename); b_frames = x->b_frames; b_samples = x->b_samples; arg = 12.0 / (t_float)b_frames; xarg = 1.0; in = -6.0; for(i=0;inormalize = (short)f; } void function_clear(t_function *x) { int i; long b_frames = x->b_frames; t_word *b_samples = x->b_samples; function_setbuf(x, x->wavename); b_frames = x->b_frames; b_samples = x->b_samples; for(i=0;ib_frames; t_word *b_samples = x->b_samples; t_float downgain = 0.33; function_setbuf(x, x->wavename); al = (t_float) b_frames * atom_getfloatarg(0,argc,argv); dl = (t_float) b_frames * atom_getfloatarg(1,argc,argv); rl = (t_float) b_frames * atom_getfloatarg(2,argc,argv); downgain = atom_getfloatarg(3,argc,argv); if(downgain <= 0) downgain = 0.333; if(al+dl+rl >= b_frames) { post("atk and dk and release are too long"); return; } sl = b_frames - (al+dl+rl); for(i=0;iwavename); b_samples = x->b_samples; b_frames = x->b_frames; half_frames = b_frames / 2; factor = (t_float)atom_getfloatarg(0,argc,argv); for(i = 0; i < b_frames; i++){ exp = ((i - half_frames) / (t_float)b_frames) * factor; val = (pow(e, exp * 2.0) - 1) / (pow(e, exp * 2.0) + 1); b_samples[i].w_float = val; } function_redraw(x); } void function_arctan(t_function *x, t_symbol *msg, int argc, t_atom *argv) { int i; long b_frames; long half_frames; t_word *b_samples; t_float factor, look, val, peak, rescale; function_setbuf(x, x->wavename); b_samples = x->b_samples; b_frames = x->b_frames; half_frames = b_frames / 2; factor = (t_float)atom_getfloatarg(0,argc,argv); for(i = 0; i < b_frames; i++){ look = ((i - half_frames) / (t_float)b_frames) * factor; val = atan(look); b_samples[i].w_float = val; } // normalize peak = 0.0; for(i = 0; i < b_frames; i++){ if(peak < fabsf(b_samples[i].w_float)){ peak = fabsf(b_samples[i].w_float); } } if(peak > 0.0){ rescale = 1.0/peak; for(i = 0; i < b_frames; i++){ b_samples[i].w_float *= rescale; } } function_redraw(x); } void function_abs(t_function *x, t_symbol *msg, int argc, t_atom *argv) { int i; long b_frames; long half_frames; t_word *b_samples; t_float factor, look, val; function_setbuf(x, x->wavename); b_samples = x->b_samples; b_frames = x->b_frames; half_frames = b_frames / 2; factor = (t_float)atom_getfloatarg(0,argc,argv); for(i = 0; i < b_frames; i++){ look = ((i - half_frames) / (t_float)b_frames) * factor; val = look/(fabsf(look) + 1); b_samples[i].w_float = val; } function_redraw(x); } void function_chebyshev(t_function *x, t_symbol *msg, int argc, t_atom *argv) { int i,j; long b_frames; // long half_frames; long hcount = 0; t_word *b_samples; t_float mult, point, min, max; t_float factor; t_float e = 2.718281828459; t_float exp, val; function_setbuf(x, x->wavename); b_samples = x->b_samples; b_frames = x->b_frames; // half_frames = b_frames / 2; factor = (t_float)atom_getfloatarg(0,argc,argv); // zero out function for(i = 0; i < b_frames; i++){ b_samples[i].w_float = 0.0; } // build function for (i = 0; i < argc; i++) { mult = (t_float)atom_getfloatarg(i,argc,argv); if( mult > 0.0){ for(j = 0; j < b_frames; j++){ point = -1.0 + (2.0 * ((t_float) j / (t_float) b_frames)); b_samples[j].w_float += mult * cos((t_float)i * acos(point)); } } } min = 10000; max = -10000; for(j = 0; j < b_frames; j++) { if(min > b_samples[j].w_float){ min = b_samples[j].w_float; } if(max < b_samples[j].w_float){ max = b_samples[j].w_float; } } for(j = 0; j < b_frames; j++) { b_samples[j].w_float = -1.0 + ((b_samples[j].w_float - min)/(max - min)) * 2.0; } function_redraw(x); } void function_adenv(t_function *x, t_symbol *msg, int argc, t_atom *argv) { int i,j; int al, dl, rl; long b_frames; t_word *b_samples; t_float downgain = 0.33; function_setbuf(x, x->wavename); b_samples = x->b_samples; b_frames = x->b_frames; al = (t_float) b_frames * atom_getfloatarg(0,argc,argv); dl = (t_float) b_frames * atom_getfloatarg(1,argc,argv); downgain = atom_getfloatarg(2,argc,argv); if(downgain <= 0) downgain = 0.333; if(al+dl >= b_frames) { post("atk and dk are too long"); return; } rl = b_frames - (al+dl); for(i=0;iwavename); b_samples = x->b_samples; b_frames = x->b_frames; if(frac <= 0 || frac >= 1) { post("* attack time must range from 0.0 - 1.0, rather than %f",frac); } al = b_frames * frac; dl = b_frames - al; for(i=0;iwavename); b_samples = x->b_samples; b_frames = x->b_frames; amp = atom_getfloatarg(0,argc,argv); // post("harmonic: 0, weight: %.12f", (float)amp); for(i=0;inormalize) { maxamp = 0; for(i=0;ix_obj, gensym("signal")); x->wavename = atom_getsymbolarg(0,argc,argv); x->normalize = 1; return x; } void function_setbuf(t_function *x, t_symbol *wavename) { int frames; t_garray *a; x->b_frames = 0; x->b_nchans = 1; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "function~: %s: no such array", wavename->s_name); } else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { pd_error(x, "%s: bad template for function~", wavename->s_name); } else { x->b_frames = frames; garray_usedindsp(a); } } void function_redraw(t_function *x) { t_garray *a; if (!(a = (t_garray *)pd_findbyclass(x->wavename, garray_class))) { if (*x->wavename->s_name) pd_error(x, "function~: %s: no such array", x->wavename->s_name); } else { garray_redraw(a); } } void function_dsp(t_function *x, t_signal **sp) { } pd-lyonpotpourri-3.0.1/granola~-help.pd000066400000000000000000000020361430526361000201560ustar00rootroot00000000000000#N canvas 600 60 486 507 12; #X obj 92 198 phasor~ 450; #X floatatom 271 199 5 0 0 2 - g-transpose -; #X obj 274 177 hsl 128 15 0.1 3 0 0 g-transpose granola-transpose-in transposition_factor -2 -6 0 10 -4075 -1 -1 3941 1; #X obj 21 194 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X msg 21 226 mute \$1; #X obj 92 298 lpp-meters; #X obj 16 10 lpp-icon granola~; #X obj 92 257 lyonpotpourri/granola~ 100; #X obj 92 229 lyonpotpourri/killdc~; #N canvas 600 60 191 186 init 0; #X msg 3 111 1; #X obj 3 88 loadbang; #X obj 3 133 s granola-transpose-in; #X obj 3 63 s granola-gain-in; #X obj 3 18 loadbang; #X msg 3 41 0.05; #X connect 0 0 2 0; #X connect 1 0 0 0; #X connect 4 0 5 0; #X connect 5 0 3 0; #X restore 255 314 pd init; #X text 281 258 arg: grain size (ms); #X text 234 36 - a granular pitch transposer; #X text 15 107 Overlapped grains provide the capability for transposition without FFT analysis/resynthesis.; #X connect 0 0 8 0; #X connect 1 0 7 1; #X connect 3 0 4 0; #X connect 4 0 7 0; #X connect 7 0 5 0; #X connect 8 0 7 0; pd-lyonpotpourri-3.0.1/granola~.c000066400000000000000000000177471430526361000170660ustar00rootroot00000000000000#include "MSPd.h" static t_class *granola_class; #define OBJECT_NAME "granola~" typedef struct _granola { t_object x_obj; float x_f; float *gbuf; long grainsamps; long grainsamps_old; long buflen; // length of buffer long buflen_old; int maxgrainsamps; // set maximum delay in ms. float grain_duration; // user grain duration in seconds float sr; float *grainenv; long gpt1; // grain pointer 1 long gpt2; // grain pointer 2 long gpt3; // grain pointer 3 float phs1; // phase 1 float phs2; // phase 2 float phs3; // phase 3 float incr; long curdel; short mute_me; short iconnect; } t_granola; static void *granola_new(t_floatarg val); // static t_int *offset_perform(t_int *w); static t_int *granola_perform(t_int *w); static void granola_dsp(t_granola *x, t_signal **sp); static void granola_mute(t_granola *x, t_floatarg toggle); // static void granola_float(t_granola *x, double f ) ; static void granola_dsp_free(t_granola *x); static void granola_size(t_granola *x, t_floatarg newsize); static void granola_clear(t_granola *x); static void granola_init(t_granola *x); void granola_tilde_setup(void) { granola_class = class_new(gensym("granola~"), (t_newmethod)granola_new, (t_method)granola_dsp_free ,sizeof(t_granola), 0,A_FLOAT,0); CLASS_MAINSIGNALIN(granola_class, t_granola, x_f); class_addmethod(granola_class,(t_method)granola_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(granola_class,(t_method)granola_clear,gensym("clear"),0); class_addmethod(granola_class,(t_method)granola_mute,gensym("mute"),A_FLOAT,0); class_addmethod(granola_class,(t_method)granola_size,gensym("size"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } /* void granola_float(t_granola *x, double f) { x->incr = f; } */ void granola_dsp_free(t_granola *x) { freebytes(x->gbuf,x->buflen * sizeof(float)); freebytes(x->grainenv,x->grainsamps * sizeof(float)); } void granola_mute(t_granola *x, t_floatarg toggle) { x->mute_me = (short)toggle; } void granola_clear(t_granola *x) { memset((char *)x->gbuf, 0, x->buflen); } void granola_size(t_granola *x, t_floatarg newsize) { int newsamps, i; newsamps = newsize * 0.001 * sys_getsr(); if( newsamps >= x->maxgrainsamps ) { pd_error(0, "granola~: specified size over preset maximum, no action taken"); return; } if( newsamps < 8 ) { pd_error(0, "granola~: grainsize too small"); return; } x->grainsamps_old = x->grainsamps; x->buflen_old = x->buflen; x->grainsamps = newsamps; // will use for shrinkage x->buflen = x->grainsamps * 4; for(i = 0; i < x->grainsamps; i++ ) { x->grainenv[i] = .5 + (-.5 * cos( TWOPI * ((float)i/(float)x->grainsamps) ) ); } x->gpt1 = 0; x->gpt2 = x->grainsamps / 3.; x->gpt3 = 2. * x->grainsamps / 3.; x->phs1 = 0; x->phs2 = x->grainsamps / 3. ; x->phs3 = 2. * x->grainsamps / 3. ; x->curdel = 0; } void *granola_new(t_floatarg val) { t_granola *x = (t_granola *)pd_new(granola_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); // INITIALIZATIONS x->sr = sys_getsr(); x->grain_duration = val * 0.001; // convert to seconds x->gbuf = NULL; x->grainenv = NULL; granola_init(x); return x; } void granola_init(t_granola *x) { int i; if(x->sr == 0) { post("granola~: dodging zero sampling rate!"); return; } x->grainsamps = x->grain_duration * x->sr; if(x->grainsamps <= 5 || x->grainsamps > 4410000) { x->grainsamps = 2048; post( "granola~: grainsize autoset to %d samples, rather than user-specified length %.0f", x->grainsamps, x->grain_duration * x->sr); } x->maxgrainsamps = x->grainsamps; // will use for shrinkage x->buflen = x->grainsamps * 4; // first time only if(x->gbuf == NULL) { x->gbuf = (float *) getbytes(x->buflen * sizeof(float)); x->grainenv = (float *) getbytes(x->grainsamps * sizeof(float)); x->incr = .5; x->mute_me = 0; } // or realloc if necessary // *resizebytes(void *x, size_t oldsize, size_t newsize); else { x->gbuf = (float *) resizebytes(x->gbuf, x->buflen_old * sizeof(float), x->buflen * sizeof(float)); x->grainenv = (float *) resizebytes(x->grainenv, x->grainsamps_old * sizeof(float), x->grainsamps * sizeof(float)); } for(i = 0; i < x->grainsamps; i++ ) { x->grainenv[i] = .5 + (-.5 * cos(TWOPI * ((float)i/(float)x->grainsamps))); } x->gpt1 = 0; x->gpt2 = x->grainsamps / 3.; x->gpt3 = 2. * x->grainsamps / 3.; x->phs1 = 0; x->phs2 = x->grainsamps / 3. ; x->phs3 = 2. * x->grainsamps / 3. ; x->curdel = 0; } t_int *granola_perform(t_int *w) { float outsamp ; int iphs_a, iphs_b; float frac; /****/ t_granola *x = (t_granola *) (w[1]); t_float *in = (t_float *)(w[2]); t_float *increment = (t_float *)(w[3]); t_float *out = (t_float *)(w[4]); int n = (int)(w[5]); long gpt1 = x->gpt1; long gpt2 = x->gpt2; long gpt3 = x->gpt3; float phs1 = x->phs1; float phs2 = x->phs2; float phs3 = x->phs3; long curdel = x->curdel; long buflen = x->buflen; long grainsamps = x->grainsamps; float *grainenv = x->grainenv; float *gbuf = x->gbuf; float incr = x->incr; if( x->mute_me ) { while( n-- ) { *out++ = 0.0; } return (w+6); } while (n--) { x->incr = *increment++; if( x->incr <= 0. ) { x->incr = .5 ; } if( curdel >= buflen ) { curdel = 0 ; } gbuf[ curdel ] = *in++; // grain 1 iphs_a = floor( phs1 ); iphs_b = iphs_a + 1; frac = phs1 - iphs_a; while( iphs_a >= buflen ) { iphs_a -= buflen; } while( iphs_b >= buflen ) { iphs_b -= buflen; } outsamp = (gbuf[ iphs_a ] + frac * ( gbuf[ iphs_b ] - gbuf[ iphs_a ])) * grainenv[ gpt1++ ]; if( gpt1 >= grainsamps ) { gpt1 = 0; phs1 = curdel; } phs1 += incr; while( phs1 >= buflen ) { phs1 -= buflen; } // now add second grain iphs_a = floor( phs2 ); iphs_b = iphs_a + 1; frac = phs2 - iphs_a; while( iphs_a >= buflen ) { iphs_a -= buflen; } while( iphs_b >= buflen ) { iphs_b -= buflen; } outsamp += (gbuf[ iphs_a ] + frac * ( gbuf[ iphs_b ] - gbuf[ iphs_a ])) * grainenv[ gpt2++ ]; if( gpt2 >= grainsamps ) { gpt2 = 0; phs2 = curdel ; } phs2 += incr ; while( phs2 >= buflen ) { phs2 -= buflen ; } // now add third grain iphs_a = floor( phs3 ); iphs_b = iphs_a + 1; frac = phs3 - iphs_a; while( iphs_a >= buflen ) { iphs_a -= buflen; } while( iphs_b >= buflen ) { iphs_b -= buflen; } outsamp += (gbuf[ iphs_a ] + frac * ( gbuf[ iphs_b ] - gbuf[ iphs_a ])) * grainenv[ gpt3++ ]; if( gpt3 >= grainsamps ) { gpt3 = 0; phs3 = curdel ; } phs3 += incr ; while( phs3 >= buflen ) { phs3 -= buflen ; } ++curdel; *out++ = outsamp; /* output may well need to attenuated */ } x->phs1 = phs1; x->phs2 = phs2; x->phs3 = phs3; x->gpt1 = gpt1; x->gpt2 = gpt2; x->gpt3 = gpt3; x->curdel = curdel; return (w+6); } void granola_dsp(t_granola *x, t_signal **sp) { dsp_add(granola_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/granulesf~-help.pd000066400000000000000000011301161430526361000205230ustar00rootroot00000000000000#N canvas 428 54 830 702 12; #N canvas 0 22 450 300 (subpatch) 0; #X array gsf_window 32768 float 3; #A 0 0 9.19179e-009 3.67671e-008 8.27261e-008 1.47069e-007 2.29795e-007 3.30904e-007 4.50397e-007 5.88274e-007 7.44534e-007 9.19178e-007 1.11221e-006 1.32362e-006 1.55341e-006 1.80159e-006 2.06815e-006 2.3531e-006 2.65642e-006 2.97814e-006 3.31823e-006 3.67671e-006 4.05357e-006 4.44882e-006 4.86245e-006 5.29446e-006 5.74485e-006 6.21363e-006 6.7008e-006 7.20634e-006 7.73027e-006 8.27258e-006 8.83328e-006 9.41236e-006 1.00098e-005 1.06257e-005 1.12599e-005 1.19125e-005 1.25835e-005 1.32729e-005 1.39806e-005 1.47068e-005 1.54513e-005 1.62142e-005 1.69955e-005 1.77952e-005 1.86132e-005 1.94497e-005 2.03045e-005 2.11777e-005 2.20693e-005 2.29793e-005 2.39076e-005 2.48544e-005 2.58195e-005 2.6803e-005 2.78049e-005 2.88252e-005 2.98638e-005 3.09208e-005 3.19963e-005 3.30901e-005 3.42022e-005 3.53328e-005 3.64818e-005 3.76491e-005 3.88348e-005 4.00389e-005 4.12614e-005 4.25022e-005 4.37615e-005 4.50391e-005 4.63351e-005 4.76495e-005 4.89822e-005 5.03334e-005 5.17029e-005 5.30908e-005 5.44971e-005 5.59218e-005 5.73648e-005 5.88263e-005 6.03061e-005 6.18043e-005 6.33209e-005 6.48558e-005 6.64092e-005 6.79809e-005 6.9571e-005 7.11795e-005 7.28064e-005 7.44516e-005 7.61152e-005 7.77973e-005 7.94976e-005 8.12164e-005 8.29536e-005 8.47091e-005 8.6483e-005 8.82753e-005 9.0086e-005 9.1915e-005 9.37625e-005 9.56283e-005 9.75125e-005 9.94151e-005 0.000101336 0.000103275 0.000105233 0.000107209 0.000109204 0.000111216 0.000113248 0.000115297 0.000117365 0.000119452 0.000121556 0.00012368 0.000125821 0.000127981 0.000130159 0.000132356 0.000134571 0.000136804 0.000139056 0.000141326 0.000143615 0.000145922 0.000148247 0.000150591 0.000152953 0.000155333 0.000157732 0.000160149 0.000162585 0.000165039 0.000167511 0.000170002 0.000172511 0.000175038 0.000177584 0.000180148 0.000182731 0.000185332 0.000187951 0.000190589 0.000193245 0.000195919 0.000198612 0.000201323 0.000204053 0.000206801 0.000209567 0.000212352 0.000215155 0.000217977 0.000220816 0.000223675 0.000226551 0.000229446 0.00023236 0.000235291 0.000238241 0.00024121 0.000244197 0.000247202 0.000250225 0.000253267 0.000256328 0.000259407 0.000262504 0.000265619 0.000268753 0.000271905 0.000275076 0.000278265 0.000281472 0.000284698 0.000287942 0.000291204 0.000294485 0.000297784 0.000301102 0.000304438 0.000307792 0.000311165 0.000314556 0.000317965 0.000321393 0.000324839 0.000328304 0.000331787 0.000335288 0.000338808 0.000342346 0.000345902 0.000349477 0.00035307 0.000356682 0.000360311 0.00036396 0.000367626 0.000371311 0.000375015 0.000378736 0.000382477 0.000386235 0.000390012 0.000393807 0.000397621 0.000401453 0.000405303 0.000409172 0.000413059 0.000416964 0.000420888 0.00042483 0.000428791 0.00043277 0.000436767 0.000440782 0.000444816 0.000448869 0.00045294 0.000457029 0.000461136 0.000465262 0.000469406 0.000473569 0.00047775 0.000481949 0.000486167 0.000490403 0.000494657 0.00049893 0.000503221 0.00050753 0.000511858 0.000516205 0.000520569 0.000524952 0.000529353 0.000533773 0.000538211 0.000542668 0.000547142 0.000551635 0.000556147 0.000560677 0.000565225 0.000569792 0.000574377 0.00057898 0.000583602 0.000588242 0.0005929 0.000597577 0.000602272 0.000606985 0.000611717 0.000616467 0.000621236 0.000626023 0.000630828 0.000635652 0.000640494 0.000645354 0.000650233 0.00065513 0.000660046 0.000664979 0.000669931 0.000674902 0.000679891 0.000684898 0.000689924 0.000694968 0.00070003 0.000705111 0.00071021 0.000715327 0.000720463 0.000725617 0.000730789 0.00073598 0.000741189 0.000746417 0.000751663 0.000756927 0.00076221 0.000767511 0.00077283 0.000778168 0.000783524 0.000788898 0.000794291 0.000799702 0.000805131 0.000810579 0.000816045 0.00082153 0.000827033 0.000832554 0.000838093 0.000843651 0.000849228 0.000854822 0.000860435 0.000866066 0.000871716 0.000877384 0.000883071 0.000888775 0.000894498 0.00090024 0.000906 0.000911778 0.000917574 0.000923389 0.000929222 0.000935074 0.000940944 0.000946832 0.000952738 0.000958663 0.000964607 0.000970568 0.000976548 0.000982546 0.000988563 0.000994598 0.00100065 0.00100672 0.00101281 0.00101892 0.00102505 0.00103119 0.00103736 0.00104354 0.00104974 0.00105596 0.00106219 0.00106845 0.00107472 0.00108101 0.00108732 0.00109365 0.0011 0.00110637 0.00111275 0.00111915 0.00112557 0.00113201 0.00113847 0.00114494 0.00115144 0.00115795 0.00116448 0.00117103 0.00117759 0.00118418 0.00119078 0.0011974 0.00120404 0.0012107 0.00121738 0.00122408 0.00123079 0.00123752 0.00124427 0.00125104 0.00125783 0.00126463 0.00127146 0.0012783 0.00128516 0.00129204 0.00129894 0.00130585 0.00131278 0.00131974 0.00132671 0.0013337 0.0013407 0.00134773 0.00135477 0.00136183 0.00136891 0.00137601 0.00138313 0.00139027 0.00139742 0.00140459 0.00141178 0.00141899 0.00142622 0.00143346 0.00144073 0.00144801 0.00145531 0.00146263 0.00146996 0.00147732 0.00148469 0.00149209 0.0014995 0.00150693 0.00151437 0.00152184 0.00152932 0.00153682 0.00154434 0.00155188 0.00155944 0.00156701 0.00157461 0.00158222 0.00158985 0.0015975 0.00160517 0.00161285 0.00162055 0.00162828 0.00163602 0.00164378 0.00165155 0.00165935 0.00166716 0.00167499 0.00168284 0.00169071 0.0016986 0.0017065 0.00171443 0.00172237 0.00173033 0.00173831 0.0017463 0.00175432 0.00176235 0.0017704 0.00177847 0.00178656 0.00179467 0.00180279 0.00181094 0.0018191 0.00182728 0.00183548 0.00184369 0.00185193 0.00186018 0.00186845 0.00187674 0.00188505 0.00189338 0.00190172 0.00191009 0.00191847 0.00192687 0.00193528 0.00194372 0.00195218 0.00196065 0.00196914 0.00197765 0.00198618 0.00199472 0.00200329 0.00201187 0.00202047 0.00202909 0.00203773 0.00204639 0.00205506 0.00206375 0.00207246 0.00208119 0.00208994 0.00209871 0.00210749 0.00211629 0.00212511 0.00213395 0.00214281 0.00215169 0.00216058 0.00216949 0.00217842 0.00218737 0.00219634 0.00220532 0.00221433 0.00222335 0.00223239 0.00224145 0.00225053 0.00225962 0.00226874 0.00227787 0.00228702 0.00229619 0.00230537 0.00231458 0.0023238 0.00233304 0.0023423 0.00235158 0.00236088 0.00237019 0.00237953 0.00238888 0.00239825 0.00240764 0.00241704 0.00242647 0.00243591 0.00244537 0.00245485 0.00246435 0.00247387 0.0024834 0.00249295 0.00250252 0.00251211 0.00252172 0.00253135 0.00254099 0.00255065 0.00256033 0.00257003 0.00257975 0.00258949 0.00259924 0.00260901 0.0026188 0.00262861 0.00263844 0.00264828 0.00265815 0.00266803 0.00267793 0.00268785 0.00269779 0.00270774 0.00271771 0.00272771 0.00273772 0.00274774 0.00275779 0.00276786 0.00277794 0.00278804 0.00279816 0.0028083 0.00281845 0.00282863 0.00283882 0.00284903 0.00285926 0.00286951 0.00287978 0.00289006 0.00290036 0.00291068 0.00292102 0.00293138 0.00294175 0.00295215 0.00296256 0.00297299 0.00298344 0.00299391 0.00300439 0.00301489 0.00302542 0.00303596 0.00304651 0.00305709 0.00306769 0.0030783 0.00308893 0.00309958 0.00311025 0.00312093 0.00313164 0.00314236 0.0031531 0.00316386 0.00317464 0.00318544 0.00319625 0.00320708 0.00321793 0.0032288 0.00323969 0.00325059 0.00326152 0.00327246 0.00328342 0.0032944 0.00330539 0.00331641 0.00332744 0.00333849 0.00334956 0.00336065 0.00337176 0.00338288 0.00339403 0.00340519 0.00341637 0.00342756 0.00343878 0.00345001 0.00346127 0.00347254 0.00348382 0.00349513 0.00350646 0.0035178 0.00352916 0.00354054 0.00355194 0.00356336 0.00357479 0.00358625 0.00359772 0.00360921 0.00362071 0.00363224 0.00364379 0.00365535 0.00366693 0.00367853 0.00369015 0.00370178 0.00371343 0.00372511 0.0037368 0.00374851 0.00376023 0.00377198 0.00378374 0.00379552 0.00380732 0.00381914 0.00383098 0.00384283 0.0038547 0.0038666 0.0038785 0.00389043 0.00390238 0.00391434 0.00392632 0.00393832 0.00395034 0.00396238 0.00397444 0.00398651 0.0039986 0.00401071 0.00402284 0.00403499 0.00404715 0.00405933 0.00407153 0.00408375 0.00409599 0.00410825 0.00412052 0.00413281 0.00414512 0.00415745 0.0041698 0.00418216 0.00419455 0.00420695 0.00421937 0.00423181 0.00424426 0.00425674 0.00426923 0.00428174 0.00429427 0.00430682 0.00431938 0.00433197 0.00434457 0.00435719 0.00436983 0.00438249 0.00439516 0.00440785 0.00442057 0.0044333 0.00444604 0.00445881 0.00447159 0.0044844 0.00449722 0.00451006 0.00452291 0.00453579 0.00454868 0.00456159 0.00457452 0.00458747 0.00460044 0.00461342 0.00462643 0.00463945 0.00465249 0.00466554 0.00467862 0.00469171 0.00470483 0.00471796 0.00473111 0.00474427 0.00475746 0.00477066 0.00478388 0.00479712 0.00481038 0.00482366 0.00483695 0.00485026 0.00486359 0.00487694 0.00489031 0.0049037 0.0049171 0.00493052 0.00494396 0.00495742 0.00497089 0.00498439 0.0049979 0.00501143 0.00502498 0.00503855 0.00505214 0.00506574 0.00507936 0.005093 0.00510666 0.00512034 0.00513403 0.00514774 0.00516147 0.00517522 0.00518899 0.00520278 0.00521658 0.0052304 0.00524424 0.0052581 0.00527198 0.00528587 0.00529979 0.00531372 0.00532767 0.00534163 0.00535562 0.00536962 0.00538365 0.00539769 0.00541175 0.00542582 0.00543992 0.00545403 0.00546816 0.00548231 0.00549648 0.00551066 0.00552487 0.00553909 0.00555333 0.00556759 0.00558187 0.00559616 0.00561047 0.0056248 0.00563915 0.00565352 0.00566791 0.00568231 0.00569673 0.00571117 0.00572563 0.00574011 0.0057546 0.00576912 0.00578365 0.0057982 0.00581276 0.00582735 0.00584195 0.00585658 0.00587122 0.00588587 0.00590055 0.00591525 0.00592996 0.00594469 0.00595944 0.00597421 0.00598899 0.0060038 0.00601862 0.00603346 0.00604832 0.00606319 0.00607809 0.006093 0.00610793 0.00612288 0.00613785 0.00615283 0.00616783 0.00618286 0.0061979 0.00621295 0.00622803 0.00624312 0.00625824 0.00627337 0.00628851 0.00630368 0.00631887 0.00633407 0.00634929 0.00636453 0.00637979 0.00639506 0.00641036 0.00642567 0.006441 0.00645635 0.00647171 0.0064871 0.0065025 0.00651792 0.00653336 0.00654882 0.00656429 0.00657979 0.0065953 0.00661083 0.00662638 0.00664194 0.00665753 0.00667313 0.00668875 0.00670439 0.00672004 0.00673572 0.00675141 0.00676712 0.00678285 0.0067986 0.00681437 0.00683015 0.00684595 0.00686177 0.00687761 0.00689347 0.00690934 0.00692523 0.00694114 0.00695707 0.00697302 0.00698898 0.00700497 0.00702097 0.00703699 0.00705302 0.00706908 0.00708515 0.00710125 0.00711736 0.00713348 0.00714963 0.00716579 0.00718198 0.00719818 0.0072144 0.00723063 0.00724689 0.00726316 0.00727945 0.00729576 0.00731209 0.00732843 0.0073448 0.00736118 0.00737758 0.007394 0.00741043 0.00742689 0.00744336 0.00745985 0.00747636 0.00749288 0.00750943 0.00752599 0.00754257 0.00755917 0.00757579 0.00759242 0.00760908 0.00762575 0.00764244 0.00765915 0.00767587 0.00769262 0.00770938 0.00772616 0.00774296 0.00775977 0.00777661 0.00779346 0.00781033 0.00782722 0.00784412 0.00786105 0.00787799 0.00789495 0.00791193 0.00792893 0.00794595 0.00796298 0.00798003 0.0079971 0.00801419 0.00803129 0.00804842 0.00806556 0.00808272 0.0080999 0.00811709 0.00813431 0.00815154 0.00816879 0.00818606 0.00820335 0.00822065 0.00823797 0.00825531 0.00827267 0.00829005 0.00830744 0.00832486 0.00834229 0.00835974 0.00837721 0.00839469 0.0084122 0.00842972 0.00844726 0.00846481 0.00848239 0.00849998 0.0085176 0.00853523 0.00855287 0.00857054 0.00858822 0.00860593 0.00862365 0.00864139 0.00865914 0.00867692 0.00869471 0.00871252 0.00873035 0.0087482 0.00876606 0.00878394 0.00880184 0.00881976 0.0088377 0.00885566 0.00887363 0.00889162 0.00890963 0.00892766 0.0089457 0.00896377 0.00898185 0.00899995 0.00901807 0.0090362 0.00905436 0.00907253 0.00909072 0.00910892 0.00912715 0.00914539; #A 1000 0.00916366 0.00918194 0.00920023 0.00921855 0.00923689 0.00925524 0.00927361 0.009292 0.0093104 0.00932883 0.00934727 0.00936573 0.00938421 0.00940271 0.00942122 0.00943975 0.0094583 0.00947687 0.00949546 0.00951406 0.00953269 0.00955133 0.00956999 0.00958866 0.00960736 0.00962607 0.0096448 0.00966355 0.00968232 0.00970111 0.00971991 0.00973873 0.00975757 0.00977643 0.0097953 0.0098142 0.00983311 0.00985204 0.00987098 0.00988995 0.00990893 0.00992793 0.00994695 0.00996599 0.00998505 0.0100041 0.0100232 0.0100423 0.0100614 0.0100806 0.0100998 0.0101189 0.0101381 0.0101574 0.0101766 0.0101958 0.0102151 0.0102344 0.0102537 0.010273 0.0102924 0.0103117 0.0103311 0.0103505 0.0103699 0.0103894 0.0104088 0.0104283 0.0104478 0.0104673 0.0104868 0.0105064 0.0105259 0.0105455 0.0105651 0.0105847 0.0106043 0.010624 0.0106436 0.0106633 0.010683 0.0107028 0.0107225 0.0107423 0.010762 0.0107818 0.0108016 0.0108215 0.0108413 0.0108612 0.0108811 0.010901 0.0109209 0.0109408 0.0109608 0.0109808 0.0110007 0.0110208 0.0110408 0.0110608 0.0110809 0.011101 0.0111211 0.0111412 0.0111613 0.0111815 0.0112016 0.0112218 0.011242 0.0112623 0.0112825 0.0113028 0.011323 0.0113433 0.0113637 0.011384 0.0114043 0.0114247 0.0114451 0.0114655 0.0114859 0.0115064 0.0115268 0.0115473 0.0115678 0.0115883 0.0116088 0.0116294 0.01165 0.0116705 0.0116911 0.0117118 0.0117324 0.0117531 0.0117737 0.0117944 0.0118151 0.0118359 0.0118566 0.0118774 0.0118982 0.011919 0.0119398 0.0119606 0.0119815 0.0120023 0.0120232 0.0120441 0.0120651 0.012086 0.012107 0.0121279 0.0121489 0.0121699 0.012191 0.012212 0.0122331 0.0122542 0.0122753 0.0122964 0.0123176 0.0123387 0.0123599 0.0123811 0.0124023 0.0124235 0.0124448 0.012466 0.0124873 0.0125086 0.0125299 0.0125513 0.0125726 0.012594 0.0126154 0.0126368 0.0126582 0.0126797 0.0127012 0.0127226 0.0127441 0.0127657 0.0127872 0.0128087 0.0128303 0.0128519 0.0128735 0.0128951 0.0129168 0.0129384 0.0129601 0.0129818 0.0130035 0.0130253 0.013047 0.0130688 0.0130906 0.0131124 0.0131342 0.013156 0.0131779 0.0131998 0.0132216 0.0132436 0.0132655 0.0132874 0.0133094 0.0133314 0.0133534 0.0133754 0.0133974 0.0134195 0.0134416 0.0134636 0.0134858 0.0135079 0.01353 0.0135522 0.0135744 0.0135966 0.0136188 0.013641 0.0136633 0.0136855 0.0137078 0.0137301 0.0137524 0.0137748 0.0137971 0.0138195 0.0138419 0.0138643 0.0138868 0.0139092 0.0139317 0.0139541 0.0139766 0.0139992 0.0140217 0.0140443 0.0140668 0.0140894 0.014112 0.0141347 0.0141573 0.01418 0.0142026 0.0142253 0.0142481 0.0142708 0.0142935 0.0143163 0.0143391 0.0143619 0.0143847 0.0144076 0.0144304 0.0144533 0.0144762 0.0144991 0.014522 0.014545 0.0145679 0.0145909 0.0146139 0.0146369 0.01466 0.014683 0.0147061 0.0147292 0.0147523 0.0147754 0.0147986 0.0148217 0.0148449 0.0148681 0.0148913 0.0149146 0.0149378 0.0149611 0.0149844 0.0150077 0.015031 0.0150543 0.0150777 0.0151011 0.0151245 0.0151479 0.0151713 0.0151948 0.0152182 0.0152417 0.0152652 0.0152887 0.0153123 0.0153358 0.0153594 0.015383 0.0154066 0.0154302 0.0154538 0.0154775 0.0155012 0.0155249 0.0155486 0.0155723 0.0155961 0.0156198 0.0156436 0.0156674 0.0156913 0.0157151 0.015739 0.0157628 0.0157867 0.0158106 0.0158346 0.0158585 0.0158825 0.0159064 0.0159304 0.0159545 0.0159785 0.0160026 0.0160266 0.0160507 0.0160748 0.0160989 0.0161231 0.0161472 0.0161714 0.0161956 0.0162198 0.0162441 0.0162683 0.0162926 0.0163169 0.0163412 0.0163655 0.0163898 0.0164142 0.0164385 0.0164629 0.0164873 0.0165118 0.0165362 0.0165607 0.0165851 0.0166096 0.0166342 0.0166587 0.0166832 0.0167078 0.0167324 0.016757 0.0167816 0.0168063 0.0168309 0.0168556 0.0168803 0.016905 0.0169297 0.0169545 0.0169792 0.017004 0.0170288 0.0170536 0.0170785 0.0171033 0.0171282 0.0171531 0.017178 0.0172029 0.0172278 0.0172528 0.0172778 0.0173028 0.0173278 0.0173528 0.0173779 0.0174029 0.017428 0.0174531 0.0174782 0.0175034 0.0175285 0.0175537 0.0175789 0.0176041 0.0176293 0.0176546 0.0176798 0.0177051 0.0177304 0.0177557 0.017781 0.0178064 0.0178318 0.0178571 0.0178825 0.017908 0.0179334 0.0179589 0.0179843 0.0180098 0.0180353 0.0180609 0.0180864 0.018112 0.0181375 0.0181631 0.0181888 0.0182144 0.01824 0.0182657 0.0182914 0.0183171 0.0183428 0.0183686 0.0183943 0.0184201 0.0184459 0.0184717 0.0184975 0.0185234 0.0185492 0.0185751 0.018601 0.0186269 0.0186529 0.0186788 0.0187048 0.0187308 0.0187568 0.0187828 0.0188088 0.0188349 0.018861 0.0188871 0.0189132 0.0189393 0.0189654 0.0189916 0.0190178 0.019044 0.0190702 0.0190964 0.0191227 0.019149 0.0191753 0.0192016 0.0192279 0.0192542 0.0192806 0.019307 0.0193333 0.0193598 0.0193862 0.0194126 0.0194391 0.0194656 0.0194921 0.0195186 0.0195451 0.0195717 0.0195983 0.0196248 0.0196514 0.0196781 0.0197047 0.0197314 0.019758 0.0197847 0.0198115 0.0198382 0.0198649 0.0198917 0.0199185 0.0199453 0.0199721 0.0199989 0.0200258 0.0200527 0.0200795 0.0201064 0.0201334 0.0201603 0.0201873 0.0202142 0.0202412 0.0202682 0.0202953 0.0203223 0.0203494 0.0203765 0.0204036 0.0204307 0.0204578 0.020485 0.0205121 0.0205393 0.0205665 0.0205938 0.020621 0.0206483 0.0206755 0.0207028 0.0207301 0.0207575 0.0207848 0.0208122 0.0208396 0.020867 0.0208944 0.0209218 0.0209493 0.0209767 0.0210042 0.0210317 0.0210593 0.0210868 0.0211144 0.0211419 0.0211695 0.0211971 0.0212248 0.0212524 0.0212801 0.0213077 0.0213354 0.0213632 0.0213909 0.0214186 0.0214464 0.0214742 0.021502 0.0215298 0.0215577 0.0215855 0.0216134 0.0216413 0.0216692 0.0216971 0.0217251 0.021753 0.021781 0.021809 0.021837 0.0218651 0.0218931 0.0219212 0.0219493 0.0219774 0.0220055 0.0220336 0.0220618 0.02209 0.0221182 0.0221464 0.0221746 0.0222028 0.0222311 0.0222594 0.0222877 0.022316 0.0223443 0.0223727 0.022401 0.0224294 0.0224578 0.0224862 0.0225147 0.0225431 0.0225716 0.0226001 0.0226286 0.0226571 0.0226857 0.0227142 0.0227428 0.0227714 0.0228 0.0228286 0.0228573 0.022886 0.0229146 0.0229433 0.0229721 0.0230008 0.0230295 0.0230583 0.0230871 0.0231159 0.0231447 0.0231736 0.0232024 0.0232313 0.0232602 0.0232891 0.023318 0.023347 0.0233759 0.0234049 0.0234339 0.0234629 0.023492 0.023521 0.0235501 0.0235792 0.0236083 0.0236374 0.0236665 0.0236957 0.0237249 0.0237541 0.0237833 0.0238125 0.0238417 0.023871 0.0239003 0.0239296 0.0239589 0.0239882 0.0240176 0.0240469 0.0240763 0.0241057 0.0241351 0.0241646 0.024194 0.0242235 0.024253 0.0242825 0.024312 0.0243416 0.0243711 0.0244007 0.0244303 0.0244599 0.0244895 0.0245192 0.0245488 0.0245785 0.0246082 0.0246379 0.0246677 0.0246974 0.0247272 0.024757 0.0247868 0.0248166 0.0248464 0.0248763 0.0249062 0.024936 0.024966 0.0249959 0.0250258 0.0250558 0.0250858 0.0251158 0.0251458 0.0251758 0.0252058 0.0252359 0.025266 0.0252961 0.0253262 0.0253563 0.0253865 0.0254167 0.0254469 0.0254771 0.0255073 0.0255375 0.0255678 0.0255981 0.0256283 0.0256587 0.025689 0.0257193 0.0257497 0.0257801 0.0258105 0.0258409 0.0258713 0.0259018 0.0259322 0.0259627 0.0259932 0.0260237 0.0260543 0.0260848 0.0261154 0.026146 0.0261766 0.0262072 0.0262378 0.0262685 0.0262992 0.0263299 0.0263606 0.0263913 0.0264221 0.0264528 0.0264836 0.0265144 0.0265452 0.026576 0.0266069 0.0266378 0.0266686 0.0266995 0.0267305 0.0267614 0.0267924 0.0268233 0.0268543 0.0268853 0.0269163 0.0269474 0.0269784 0.0270095 0.0270406 0.0270717 0.0271028 0.027134 0.0271652 0.0271963 0.0272275 0.0272588 0.02729 0.0273212 0.0273525 0.0273838 0.0274151 0.0274464 0.0274777 0.0275091 0.0275405 0.0275719 0.0276033 0.0276347 0.0276661 0.0276976 0.0277291 0.0277606 0.0277921 0.0278236 0.0278551 0.0278867 0.0279183 0.0279499 0.0279815 0.0280131 0.0280448 0.0280764 0.0281081 0.0281398 0.0281715 0.0282033 0.028235 0.0282668 0.0282986 0.0283304 0.0283622 0.028394 0.0284259 0.0284578 0.0284897 0.0285216 0.0285535 0.0285855 0.0286174 0.0286494 0.0286814 0.0287134 0.0287454 0.0287775 0.0288095 0.0288416 0.0288737 0.0289058 0.028938 0.0289701 0.0290023 0.0290345 0.0290667 0.0290989 0.0291311 0.0291634 0.0291957 0.029228 0.0292603 0.0292926 0.0293249 0.0293573 0.0293897 0.0294221 0.0294545 0.0294869 0.0295194 0.0295518 0.0295843 0.0296168 0.0296493 0.0296818 0.0297144 0.029747 0.0297795 0.0298122 0.0298448 0.0298774 0.0299101 0.0299427 0.0299754 0.0300081 0.0300408 0.0300736 0.0301063 0.0301391 0.0301719 0.0302047 0.0302375 0.0302704 0.0303032 0.0303361 0.030369 0.0304019 0.0304349 0.0304678 0.0305008 0.0305338 0.0305668 0.0305998 0.0306328 0.0306659 0.0306989 0.030732 0.0307651 0.0307982 0.0308314 0.0308645 0.0308977 0.0309309 0.0309641 0.0309973 0.0310306 0.0310638 0.0310971 0.0311304 0.0311637 0.031197 0.0312304 0.0312637 0.0312971 0.0313305 0.0313639 0.0313973 0.0314308 0.0314642 0.0314977 0.0315312 0.0315647 0.0315983 0.0316318 0.0316654 0.031699 0.0317326 0.0317662 0.0317998 0.0318335 0.0318672 0.0319009 0.0319346 0.0319683 0.032002 0.0320358 0.0320696 0.0321033 0.0321372 0.032171 0.0322048 0.0322387 0.0322726 0.0323065 0.0323404 0.0323743 0.0324082 0.0324422 0.0324762 0.0325102 0.0325442 0.0325782 0.0326123 0.0326464 0.0326804 0.0327145 0.0327487 0.0327828 0.0328169 0.0328511 0.0328853 0.0329195 0.0329537 0.032988 0.0330222 0.0330565 0.0330908 0.0331251 0.0331594 0.0331938 0.0332281 0.0332625 0.0332969 0.0333313 0.0333657 0.0334002 0.0334346 0.0334691 0.0335036 0.0335381 0.0335726 0.0336072 0.0336418 0.0336763 0.0337109 0.0337456 0.0337802 0.0338148 0.0338495 0.0338842 0.0339189 0.0339536 0.0339883 0.0340231 0.0340579 0.0340927 0.0341275 0.0341623 0.0341971 0.034232 0.0342668 0.0343017 0.0343366 0.0343716 0.0344065 0.0344415 0.0344764 0.0345114 0.0345464 0.0345815 0.0346165 0.0346516 0.0346867 0.0347218 0.0347569 0.034792 0.0348271 0.0348623 0.0348975 0.0349327 0.0349679 0.0350031 0.0350384 0.0350736 0.0351089 0.0351442 0.0351796 0.0352149 0.0352502 0.0352856 0.035321 0.0353564 0.0353918 0.0354273 0.0354627 0.0354982 0.0355337 0.0355692 0.0356047 0.0356402 0.0356758 0.0357114 0.035747 0.0357826 0.0358182 0.0358538 0.0358895 0.0359252 0.0359609 0.0359966 0.0360323 0.036068 0.0361038 0.0361396 0.0361754 0.0362112 0.036247 0.0362829; #A 2000 0.0363187 0.0363546 0.0363905 0.0364264 0.0364624 0.0364983 0.0365343 0.0365703 0.0366063 0.0366423 0.0366783 0.0367144 0.0367504 0.0367865 0.0368226 0.0368587 0.0368949 0.036931 0.0369672 0.0370034 0.0370396 0.0370758 0.0371121 0.0371483 0.0371846 0.0372209 0.0372572 0.0372935 0.0373298 0.0373662 0.0374026 0.037439 0.0374754 0.0375118 0.0375482 0.0375847 0.0376212 0.0376577 0.0376942 0.0377307 0.0377673 0.0378038 0.0378404 0.037877 0.0379136 0.0379502 0.0379869 0.0380236 0.0380602 0.0380969 0.0381336 0.0381704 0.0382071 0.0382439 0.0382807 0.0383175 0.0383543 0.0383911 0.038428 0.0384648 0.0385017 0.0385386 0.0385755 0.0386125 0.0386494 0.0386864 0.0387234 0.0387604 0.0387974 0.0388345 0.0388715 0.0389086 0.0389457 0.0389828 0.0390199 0.039057 0.0390942 0.0391314 0.0391686 0.0392058 0.039243 0.0392802 0.0393175 0.0393548 0.039392 0.0394294 0.0394667 0.039504 0.0395414 0.0395788 0.0396161 0.0396536 0.039691 0.0397284 0.0397659 0.0398034 0.0398409 0.0398784 0.0399159 0.0399534 0.039991 0.0400286 0.0400662 0.0401038 0.0401414 0.0401791 0.0402167 0.0402544 0.0402921 0.0403298 0.0403676 0.0404053 0.0404431 0.0404809 0.0405187 0.0405565 0.0405943 0.0406322 0.04067 0.0407079 0.0407458 0.0407837 0.0408217 0.0408596 0.0408976 0.0409356 0.0409736 0.0410116 0.0410496 0.0410877 0.0411257 0.0411638 0.0412019 0.04124 0.0412782 0.0413163 0.0413545 0.0413927 0.0414309 0.0414691 0.0415074 0.0415456 0.0415839 0.0416222 0.0416605 0.0416988 0.0417371 0.0417755 0.0418139 0.0418522 0.0418907 0.0419291 0.0419675 0.042006 0.0420444 0.0420829 0.0421214 0.04216 0.0421985 0.0422371 0.0422756 0.0423142 0.0423528 0.0423915 0.0424301 0.0424688 0.0425074 0.0425461 0.0425848 0.0426236 0.0426623 0.0427011 0.0427398 0.0427786 0.0428175 0.0428563 0.0428951 0.042934 0.0429729 0.0430118 0.0430507 0.0430896 0.0431285 0.0431675 0.0432065 0.0432455 0.0432845 0.0433235 0.0433626 0.0434016 0.0434407 0.0434798 0.0435189 0.043558 0.0435972 0.0436363 0.0436755 0.0437147 0.0437539 0.0437932 0.0438324 0.0438717 0.043911 0.0439502 0.0439896 0.0440289 0.0440682 0.0441076 0.044147 0.0441864 0.0442258 0.0442652 0.0443047 0.0443441 0.0443836 0.0444231 0.0444626 0.0445022 0.0445417 0.0445813 0.0446209 0.0446605 0.0447001 0.0447397 0.0447794 0.044819 0.0448587 0.0448984 0.0449381 0.0449778 0.0450176 0.0450574 0.0450971 0.0451369 0.0451768 0.0452166 0.0452564 0.0452963 0.0453362 0.0453761 0.045416 0.0454559 0.0454959 0.0455359 0.0455758 0.0456158 0.0456559 0.0456959 0.0457359 0.045776 0.0458161 0.0458562 0.0458963 0.0459364 0.0459766 0.0460168 0.0460569 0.0460971 0.0461374 0.0461776 0.0462178 0.0462581 0.0462984 0.0463387 0.046379 0.0464193 0.0464597 0.0465001 0.0465404 0.0465808 0.0466213 0.0466617 0.0467021 0.0467426 0.0467831 0.0468236 0.0468641 0.0469046 0.0469452 0.0469858 0.0470264 0.047067 0.0471076 0.0471482 0.0471889 0.0472295 0.0472702 0.0473109 0.0473516 0.0473924 0.0474331 0.0474739 0.0475147 0.0475555 0.0475963 0.0476371 0.047678 0.0477188 0.0477597 0.0478006 0.0478415 0.0478825 0.0479234 0.0479644 0.0480054 0.0480464 0.0480874 0.0481284 0.0481695 0.0482105 0.0482516 0.0482927 0.0483338 0.0483749 0.0484161 0.0484573 0.0484984 0.0485396 0.0485809 0.0486221 0.0486633 0.0487046 0.0487459 0.0487872 0.0488285 0.0488698 0.0489112 0.0489525 0.0489939 0.0490353 0.0490767 0.0491182 0.0491596 0.0492011 0.0492426 0.0492841 0.0493256 0.0493671 0.0494087 0.0494502 0.0494918 0.0495334 0.049575 0.0496166 0.0496583 0.0496999 0.0497416 0.0497833 0.049825 0.0498668 0.0499085 0.0499503 0.0499921 0.0500338 0.0500757 0.0501175 0.0501593 0.0502012 0.0502431 0.050285 0.0503269 0.0503688 0.0504108 0.0504527 0.0504947 0.0505367 0.0505787 0.0506207 0.0506628 0.0507048 0.0507469 0.050789 0.0508311 0.0508732 0.0509154 0.0509575 0.0509997 0.0510419 0.0510841 0.0511263 0.0511686 0.0512108 0.0512531 0.0512954 0.0513377 0.05138 0.0514224 0.0514647 0.0515071 0.0515495 0.0515919 0.0516343 0.0516768 0.0517192 0.0517617 0.0518042 0.0518467 0.0518892 0.0519318 0.0519743 0.0520169 0.0520595 0.0521021 0.0521447 0.0521873 0.05223 0.0522727 0.0523153 0.052358 0.0524008 0.0524435 0.0524862 0.052529 0.0525718 0.0526146 0.0526574 0.0527003 0.0527431 0.052786 0.0528289 0.0528718 0.0529147 0.0529576 0.0530006 0.0530435 0.0530865 0.0531295 0.0531725 0.0532156 0.0532586 0.0533017 0.0533448 0.0533879 0.053431 0.0534741 0.0535172 0.0535604 0.0536036 0.0536468 0.05369 0.0537332 0.0537765 0.0538197 0.053863 0.0539063 0.0539496 0.0539929 0.0540363 0.0540796 0.054123 0.0541664 0.0542098 0.0542533 0.0542967 0.0543402 0.0543836 0.0544271 0.0544706 0.0545142 0.0545577 0.0546012 0.0546448 0.0546884 0.054732 0.0547756 0.0548193 0.0548629 0.0549066 0.0549503 0.054994 0.0550377 0.0550815 0.0551252 0.055169 0.0552128 0.0552566 0.0553004 0.0553442 0.0553881 0.0554319 0.0554758 0.0555197 0.0555636 0.0556076 0.0556515 0.0556955 0.0557395 0.0557835 0.0558275 0.0558715 0.0559156 0.0559596 0.0560037 0.0560478 0.0560919 0.056136 0.0561802 0.0562243 0.0562685 0.0563127 0.0563569 0.0564012 0.0564454 0.0564897 0.0565339 0.0565782 0.0566225 0.0566669 0.0567112 0.0567556 0.0567999 0.0568443 0.0568887 0.0569332 0.0569776 0.0570221 0.0570665 0.057111 0.0571555 0.0572 0.0572446 0.0572891 0.0573337 0.0573783 0.0574229 0.0574675 0.0575121 0.0575568 0.0576015 0.0576461 0.0576908 0.0577355 0.0577803 0.057825 0.0578698 0.0579146 0.0579594 0.0580042 0.058049 0.0580939 0.0581387 0.0581836 0.0582285 0.0582734 0.0583183 0.0583633 0.0584082 0.0584532 0.0584982 0.0585432 0.0585882 0.0586333 0.0586783 0.0587234 0.0587685 0.0588136 0.0588587 0.0589039 0.058949 0.0589942 0.0590394 0.0590846 0.0591298 0.059175 0.0592203 0.0592655 0.0593108 0.0593561 0.0594014 0.0594468 0.0594921 0.0595375 0.0595829 0.0596283 0.0596737 0.0597191 0.0597646 0.05981 0.0598555 0.059901 0.0599465 0.059992 0.0600376 0.0600831 0.0601287 0.0601743 0.0602199 0.0602655 0.0603112 0.0603568 0.0604025 0.0604482 0.0604939 0.0605396 0.0605853 0.0606311 0.0606769 0.0607227 0.0607685 0.0608143 0.0608601 0.060906 0.0609518 0.0609977 0.0610436 0.0610895 0.0611354 0.0611814 0.0612274 0.0612733 0.0613193 0.0613653 0.0614114 0.0614574 0.0615035 0.0615495 0.0615956 0.0616417 0.0616879 0.061734 0.0617802 0.0618263 0.0618725 0.0619187 0.061965 0.0620112 0.0620574 0.0621037 0.06215 0.0621963 0.0622426 0.0622889 0.0623353 0.0623817 0.062428 0.0624744 0.0625209 0.0625673 0.0626137 0.0626602 0.0627067 0.0627532 0.0627997 0.0628462 0.0628927 0.0629393 0.0629859 0.0630325 0.0630791 0.0631257 0.0631723 0.063219 0.0632657 0.0633124 0.0633591 0.0634058 0.0634525 0.0634993 0.063546 0.0635928 0.0636396 0.0636864 0.0637333 0.0637801 0.063827 0.0638738 0.0639207 0.0639677 0.0640146 0.0640615 0.0641085 0.0641555 0.0642025 0.0642495 0.0642965 0.0643435 0.0643906 0.0644377 0.0644847 0.0645318 0.064579 0.0646261 0.0646733 0.0647204 0.0647676 0.0648148 0.064862 0.0649093 0.0649565 0.0650038 0.065051 0.0650983 0.0651457 0.065193 0.0652403 0.0652877 0.0653351 0.0653825 0.0654299 0.0654773 0.0655247 0.0655722 0.0656197 0.0656671 0.0657146 0.0657622 0.0658097 0.0658573 0.0659048 0.0659524 0.066 0.0660476 0.0660953 0.0661429 0.0661906 0.0662382 0.0662859 0.0663337 0.0663814 0.0664291 0.0664769 0.0665247 0.0665724 0.0666203 0.0666681 0.0667159 0.0667638 0.0668116 0.0668595 0.0669074 0.0669553 0.0670033 0.0670512 0.0670992 0.0671472 0.0671952 0.0672432 0.0672912 0.0673393 0.0673873 0.0674354 0.0674835 0.0675316 0.0675797 0.0676279 0.067676 0.0677242 0.0677724 0.0678206 0.0678688 0.067917 0.0679653 0.0680136 0.0680619 0.0681102 0.0681585 0.0682068 0.0682551 0.0683035 0.0683519 0.0684003 0.0684487 0.0684971 0.0685456 0.068594 0.0686425 0.068691 0.0687395 0.068788 0.0688366 0.0688851 0.0689337 0.0689823 0.0690309 0.0690795 0.0691281 0.0691768 0.0692254 0.0692741 0.0693228 0.0693715 0.0694202 0.069469 0.0695178 0.0695665 0.0696153 0.0696641 0.069713 0.0697618 0.0698106 0.0698595 0.0699084 0.0699573 0.0700062 0.0700552 0.0701041 0.0701531 0.0702021 0.070251 0.0703001 0.0703491 0.0703981 0.0704472 0.0704963 0.0705454 0.0705945 0.0706436 0.0706927 0.0707419 0.0707911 0.0708402 0.0708895 0.0709387 0.0709879 0.0710372 0.0710864 0.0711357 0.071185 0.0712343 0.0712836 0.071333 0.0713823 0.0714317 0.0714811 0.0715305 0.0715799 0.0716294 0.0716788 0.0717283 0.0717778 0.0718273 0.0718768 0.0719263 0.0719759 0.0720254 0.072075 0.0721246 0.0721742 0.0722239 0.0722735 0.0723232 0.0723728 0.0724225 0.0724722 0.072522 0.0725717 0.0726214 0.0726712 0.072721 0.0727708 0.0728206 0.0728705 0.0729203 0.0729702 0.07302 0.0730699 0.0731198 0.0731698 0.0732197 0.0732697 0.0733197 0.0733696 0.0734196 0.0734697 0.0735197 0.0735698 0.0736198 0.0736699 0.07372 0.0737701 0.0738202 0.0738704 0.0739205 0.0739707 0.0740209 0.0740711 0.0741213 0.0741716 0.0742218 0.0742721 0.0743224 0.0743727 0.074423 0.0744734 0.0745237 0.0745741 0.0746244 0.0746748 0.0747253 0.0747757 0.0748261 0.0748766 0.0749271 0.0749776 0.0750281 0.0750786 0.0751291 0.0751797 0.0752302 0.0752808 0.0753314 0.075382 0.0754327 0.0754833 0.075534 0.0755847 0.0756353 0.0756861 0.0757368 0.0757875 0.0758383 0.075889 0.0759398 0.0759906 0.0760414 0.0760923 0.0761431 0.076194 0.0762449 0.0762958 0.0763467 0.0763976 0.0764486 0.0764995 0.0765505 0.0766015 0.0766525 0.0767035 0.0767545 0.0768056 0.0768567 0.0769077 0.0769588 0.0770099 0.0770611 0.0771122 0.0771634 0.0772146 0.0772657 0.0773169 0.0773682 0.0774194 0.0774707 0.0775219 0.0775732 0.0776245 0.0776758 0.0777272 0.0777785 0.0778299 0.0778812 0.0779326 0.077984 0.0780355 0.0780869 0.0781384 0.0781898 0.0782413 0.0782928 0.0783443 0.0783959 0.0784474 0.078499 0.0785506 0.0786022 0.0786538 0.0787054 0.078757 0.0788087 0.0788604 0.0789121 0.0789638 0.0790155 0.0790672 0.079119 0.0791707 0.0792225 0.0792743 0.0793261 0.0793779 0.0794298 0.0794816 0.0795335 0.0795854 0.0796373 0.0796892 0.0797412 0.0797931 0.0798451 0.0798971 0.0799491 0.0800011 0.0800531 0.0801051 0.0801572 0.0802093 0.0802614 0.0803135 0.0803656 0.0804177; #A 3000 0.0804699 0.080522 0.0805742 0.0806264 0.0806786 0.0807309 0.0807831 0.0808354 0.0808876 0.0809399 0.0809922 0.0810446 0.0810969 0.0811493 0.0812016 0.081254 0.0813064 0.0813588 0.0814112 0.0814637 0.0815161 0.0815686 0.0816211 0.0816736 0.0817261 0.0817787 0.0818312 0.0818838 0.0819364 0.081989 0.0820416 0.0820942 0.0821469 0.0821995 0.0822522 0.0823049 0.0823576 0.0824103 0.082463 0.0825158 0.0825686 0.0826213 0.0826741 0.082727 0.0827798 0.0828326 0.0828855 0.0829384 0.0829912 0.0830442 0.0830971 0.08315 0.083203 0.0832559 0.0833089 0.0833619 0.0834149 0.0834679 0.083521 0.083574 0.0836271 0.0836802 0.0837333 0.0837864 0.0838396 0.0838927 0.0839459 0.0839991 0.0840523 0.0841055 0.0841587 0.0842119 0.0842652 0.0843185 0.0843718 0.0844251 0.0844784 0.0845317 0.0845851 0.0846384 0.0846918 0.0847452 0.0847986 0.084852 0.0849055 0.0849589 0.0850124 0.0850659 0.0851194 0.0851729 0.0852264 0.08528 0.0853335 0.0853871 0.0854407 0.0854943 0.0855479 0.0856016 0.0856552 0.0857089 0.0857626 0.0858163 0.08587 0.0859237 0.0859775 0.0860312 0.086085 0.0861388 0.0861926 0.0862464 0.0863003 0.0863541 0.086408 0.0864619 0.0865158 0.0865697 0.0866236 0.0866776 0.0867315 0.0867855 0.0868395 0.0868935 0.0869475 0.0870015 0.0870556 0.0871096 0.0871637 0.0872178 0.0872719 0.087326 0.0873802 0.0874343 0.0874885 0.0875427 0.0875969 0.0876511 0.0877054 0.0877596 0.0878139 0.0878681 0.0879224 0.0879767 0.0880311 0.0880854 0.0881397 0.0881941 0.0882485 0.0883029 0.0883573 0.0884117 0.0884662 0.0885206 0.0885751 0.0886296 0.0886841 0.0887386 0.0887932 0.0888477 0.0889023 0.0889568 0.0890114 0.0890661 0.0891207 0.0891753 0.08923 0.0892846 0.0893393 0.089394 0.0894487 0.0895035 0.0895582 0.089613 0.0896678 0.0897225 0.0897774 0.0898322 0.089887 0.0899419 0.0899967 0.0900516 0.0901065 0.0901614 0.0902163 0.0902713 0.0903262 0.0903812 0.0904362 0.0904912 0.0905462 0.0906013 0.0906563 0.0907114 0.0907664 0.0908215 0.0908766 0.0909318 0.0909869 0.091042 0.0910972 0.0911524 0.0912076 0.0912628 0.091318 0.0913733 0.0914285 0.0914838 0.0915391 0.0915944 0.0916497 0.091705 0.0917604 0.0918158 0.0918711 0.0919265 0.0919819 0.0920374 0.0920928 0.0921482 0.0922037 0.0922592 0.0923147 0.0923702 0.0924257 0.0924813 0.0925368 0.0925924 0.092648 0.0927036 0.0927592 0.0928148 0.0928705 0.0929262 0.0929818 0.0930375 0.0930932 0.093149 0.0932047 0.0932604 0.0933162 0.093372 0.0934278 0.0934836 0.0935394 0.0935953 0.0936511 0.093707 0.0937629 0.0938188 0.0938747 0.0939306 0.0939866 0.0940425 0.0940985 0.0941545 0.0942105 0.0942665 0.0943226 0.0943786 0.0944347 0.0944908 0.0945469 0.094603 0.0946591 0.0947152 0.0947714 0.0948276 0.0948838 0.09494 0.0949962 0.0950524 0.0951086 0.0951649 0.0952212 0.0952775 0.0953338 0.0953901 0.0954464 0.0955028 0.0955591 0.0956155 0.0956719 0.0957283 0.0957847 0.0958412 0.0958976 0.0959541 0.0960106 0.0960671 0.0961236 0.0961801 0.0962367 0.0962932 0.0963498 0.0964064 0.096463 0.0965196 0.0965762 0.0966329 0.0966895 0.0967462 0.0968029 0.0968596 0.0969163 0.0969731 0.0970298 0.0970866 0.0971433 0.0972001 0.097257 0.0973138 0.0973706 0.0974275 0.0974843 0.0975412 0.0975981 0.097655 0.097712 0.0977689 0.0978259 0.0978828 0.0979398 0.0979968 0.0980538 0.0981109 0.0981679 0.098225 0.098282 0.0983391 0.0983962 0.0984534 0.0985105 0.0985676 0.0986248 0.098682 0.0987392 0.0987964 0.0988536 0.0989108 0.0989681 0.0990254 0.0990826 0.0991399 0.0991972 0.0992546 0.0993119 0.0993693 0.0994266 0.099484 0.0995414 0.0995988 0.0996563 0.0997137 0.0997712 0.0998286 0.0998861 0.0999436 0.100001 0.100059 0.100116 0.100174 0.100231 0.100289 0.100347 0.100404 0.100462 0.100519 0.100577 0.100635 0.100693 0.10075 0.100808 0.100866 0.100923 0.100981 0.101039 0.101097 0.101155 0.101212 0.10127 0.101328 0.101386 0.101444 0.101502 0.10156 0.101618 0.101676 0.101733 0.101791 0.101849 0.101907 0.101965 0.102024 0.102082 0.10214 0.102198 0.102256 0.102314 0.102372 0.10243 0.102488 0.102546 0.102605 0.102663 0.102721 0.102779 0.102837 0.102896 0.102954 0.103012 0.103071 0.103129 0.103187 0.103246 0.103304 0.103362 0.103421 0.103479 0.103537 0.103596 0.103654 0.103713 0.103771 0.10383 0.103888 0.103947 0.104005 0.104064 0.104122 0.104181 0.104239 0.104298 0.104357 0.104415 0.104474 0.104533 0.104591 0.10465 0.104709 0.104767 0.104826 0.104885 0.104944 0.105002 0.105061 0.10512 0.105179 0.105238 0.105297 0.105355 0.105414 0.105473 0.105532 0.105591 0.10565 0.105709 0.105768 0.105827 0.105886 0.105945 0.106004 0.106063 0.106122 0.106181 0.10624 0.106299 0.106358 0.106417 0.106476 0.106536 0.106595 0.106654 0.106713 0.106772 0.106832 0.106891 0.10695 0.107009 0.107069 0.107128 0.107187 0.107247 0.107306 0.107365 0.107425 0.107484 0.107543 0.107603 0.107662 0.107722 0.107781 0.107841 0.1079 0.10796 0.108019 0.108079 0.108138 0.108198 0.108257 0.108317 0.108376 0.108436 0.108496 0.108555 0.108615 0.108675 0.108734 0.108794 0.108854 0.108914 0.108973 0.109033 0.109093 0.109153 0.109212 0.109272 0.109332 0.109392 0.109452 0.109512 0.109571 0.109631 0.109691 0.109751 0.109811 0.109871 0.109931 0.109991 0.110051 0.110111 0.110171 0.110231 0.110291 0.110351 0.110411 0.110472 0.110532 0.110592 0.110652 0.110712 0.110772 0.110832 0.110893 0.110953 0.111013 0.111073 0.111134 0.111194 0.111254 0.111314 0.111375 0.111435 0.111495 0.111556 0.111616 0.111677 0.111737 0.111797 0.111858 0.111918 0.111979 0.112039 0.1121 0.11216 0.112221 0.112281 0.112342 0.112402 0.112463 0.112523 0.112584 0.112645 0.112705 0.112766 0.112827 0.112887 0.112948 0.113009 0.113069 0.11313 0.113191 0.113252 0.113312 0.113373 0.113434 0.113495 0.113556 0.113616 0.113677 0.113738 0.113799 0.11386 0.113921 0.113982 0.114043 0.114104 0.114165 0.114226 0.114287 0.114348 0.114409 0.11447 0.114531 0.114592 0.114653 0.114714 0.114775 0.114836 0.114897 0.114959 0.11502 0.115081 0.115142 0.115203 0.115265 0.115326 0.115387 0.115448 0.11551 0.115571 0.115632 0.115694 0.115755 0.115816 0.115878 0.115939 0.116 0.116062 0.116123 0.116185 0.116246 0.116308 0.116369 0.116431 0.116492 0.116554 0.116615 0.116677 0.116738 0.1168 0.116861 0.116923 0.116985 0.117046 0.117108 0.11717 0.117231 0.117293 0.117355 0.117416 0.117478 0.11754 0.117602 0.117663 0.117725 0.117787 0.117849 0.117911 0.117972 0.118034 0.118096 0.118158 0.11822 0.118282 0.118344 0.118406 0.118468 0.11853 0.118592 0.118654 0.118716 0.118778 0.11884 0.118902 0.118964 0.119026 0.119088 0.11915 0.119212 0.119274 0.119337 0.119399 0.119461 0.119523 0.119585 0.119648 0.11971 0.119772 0.119834 0.119897 0.119959 0.120021 0.120084 0.120146 0.120208 0.120271 0.120333 0.120395 0.120458 0.12052 0.120583 0.120645 0.120708 0.12077 0.120833 0.120895 0.120958 0.12102 0.121083 0.121145 0.121208 0.12127 0.121333 0.121396 0.121458 0.121521 0.121584 0.121646 0.121709 0.121772 0.121834 0.121897 0.12196 0.122022 0.122085 0.122148 0.122211 0.122274 0.122336 0.122399 0.122462 0.122525 0.122588 0.122651 0.122714 0.122777 0.12284 0.122903 0.122965 0.123028 0.123091 0.123154 0.123217 0.12328 0.123344 0.123407 0.12347 0.123533 0.123596 0.123659 0.123722 0.123785 0.123848 0.123912 0.123975 0.124038 0.124101 0.124164 0.124228 0.124291 0.124354 0.124417 0.124481 0.124544 0.124607 0.124671 0.124734 0.124797 0.124861 0.124924 0.124988 0.125051 0.125114 0.125178 0.125241 0.125305 0.125368 0.125432 0.125495 0.125559 0.125622 0.125686 0.12575 0.125813 0.125877 0.12594 0.126004 0.126068 0.126131 0.126195 0.126259 0.126322 0.126386 0.12645 0.126513 0.126577 0.126641 0.126705 0.126769 0.126832 0.126896 0.12696 0.127024 0.127088 0.127152 0.127215 0.127279 0.127343 0.127407 0.127471 0.127535 0.127599 0.127663 0.127727 0.127791 0.127855 0.127919 0.127983 0.128047 0.128111 0.128175 0.128239 0.128304 0.128368 0.128432 0.128496 0.12856 0.128624 0.128689 0.128753 0.128817 0.128881 0.128946 0.12901 0.129074 0.129138 0.129203 0.129267 0.129331 0.129396 0.12946 0.129524 0.129589 0.129653 0.129718 0.129782 0.129847 0.129911 0.129975 0.13004 0.130104 0.130169 0.130233 0.130298 0.130363 0.130427 0.130492 0.130556 0.130621 0.130686 0.13075 0.130815 0.13088 0.130944 0.131009 0.131074 0.131138 0.131203 0.131268 0.131333 0.131397 0.131462 0.131527 0.131592 0.131657 0.131721 0.131786 0.131851 0.131916 0.131981 0.132046 0.132111 0.132176 0.132241 0.132306 0.132371 0.132436 0.132501 0.132566 0.132631 0.132696 0.132761 0.132826 0.132891 0.132956 0.133021 0.133086 0.133151 0.133216 0.133282 0.133347 0.133412 0.133477 0.133542 0.133608 0.133673 0.133738 0.133803 0.133869 0.133934 0.133999 0.134065 0.13413 0.134195 0.134261 0.134326 0.134391 0.134457 0.134522 0.134588 0.134653 0.134719 0.134784 0.13485 0.134915 0.134981 0.135046 0.135112 0.135177 0.135243 0.135308 0.135374 0.13544 0.135505 0.135571 0.135636 0.135702 0.135768 0.135833 0.135899 0.135965 0.136031 0.136096 0.136162 0.136228 0.136294 0.136359 0.136425 0.136491 0.136557 0.136623 0.136689 0.136755 0.13682 0.136886 0.136952 0.137018 0.137084 0.13715 0.137216 0.137282 0.137348 0.137414 0.13748 0.137546 0.137612 0.137678 0.137744 0.13781 0.137876 0.137943 0.138009 0.138075 0.138141 0.138207 0.138273 0.13834 0.138406 0.138472 0.138538 0.138604 0.138671 0.138737 0.138803 0.13887 0.138936 0.139002 0.139069 0.139135 0.139201 0.139268 0.139334 0.1394 0.139467 0.139533 0.1396 0.139666 0.139733 0.139799 0.139866 0.139932; #A 4000 0.139999 0.140065 0.140132 0.140198 0.140265 0.140332 0.140398 0.140465 0.140531 0.140598 0.140665 0.140731 0.140798 0.140865 0.140932 0.140998 0.141065 0.141132 0.141199 0.141265 0.141332 0.141399 0.141466 0.141533 0.141599 0.141666 0.141733 0.1418 0.141867 0.141934 0.142001 0.142068 0.142135 0.142202 0.142269 0.142336 0.142403 0.14247 0.142537 0.142604 0.142671 0.142738 0.142805 0.142872 0.142939 0.143006 0.143073 0.14314 0.143208 0.143275 0.143342 0.143409 0.143476 0.143544 0.143611 0.143678 0.143745 0.143813 0.14388 0.143947 0.144015 0.144082 0.144149 0.144217 0.144284 0.144351 0.144419 0.144486 0.144554 0.144621 0.144688 0.144756 0.144823 0.144891 0.144958 0.145026 0.145093 0.145161 0.145228 0.145296 0.145364 0.145431 0.145499 0.145566 0.145634 0.145702 0.145769 0.145837 0.145905 0.145972 0.14604 0.146108 0.146176 0.146243 0.146311 0.146379 0.146447 0.146514 0.146582 0.14665 0.146718 0.146786 0.146854 0.146921 0.146989 0.147057 0.147125 0.147193 0.147261 0.147329 0.147397 0.147465 0.147533 0.147601 0.147669 0.147737 0.147805 0.147873 0.147941 0.148009 0.148077 0.148145 0.148214 0.148282 0.14835 0.148418 0.148486 0.148554 0.148623 0.148691 0.148759 0.148827 0.148896 0.148964 0.149032 0.1491 0.149169 0.149237 0.149305 0.149374 0.149442 0.14951 0.149579 0.149647 0.149716 0.149784 0.149852 0.149921 0.149989 0.150058 0.150126 0.150195 0.150263 0.150332 0.1504 0.150469 0.150538 0.150606 0.150675 0.150743 0.150812 0.150881 0.150949 0.151018 0.151086 0.151155 0.151224 0.151293 0.151361 0.15143 0.151499 0.151567 0.151636 0.151705 0.151774 0.151843 0.151911 0.15198 0.152049 0.152118 0.152187 0.152256 0.152325 0.152394 0.152462 0.152531 0.1526 0.152669 0.152738 0.152807 0.152876 0.152945 0.153014 0.153083 0.153152 0.153221 0.15329 0.15336 0.153429 0.153498 0.153567 0.153636 0.153705 0.153774 0.153844 0.153913 0.153982 0.154051 0.15412 0.15419 0.154259 0.154328 0.154397 0.154467 0.154536 0.154605 0.154675 0.154744 0.154813 0.154883 0.154952 0.155021 0.155091 0.15516 0.15523 0.155299 0.155369 0.155438 0.155508 0.155577 0.155647 0.155716 0.155786 0.155855 0.155925 0.155994 0.156064 0.156133 0.156203 0.156273 0.156342 0.156412 0.156482 0.156551 0.156621 0.156691 0.15676 0.15683 0.1569 0.15697 0.157039 0.157109 0.157179 0.157249 0.157319 0.157388 0.157458 0.157528 0.157598 0.157668 0.157738 0.157808 0.157877 0.157947 0.158017 0.158087 0.158157 0.158227 0.158297 0.158367 0.158437 0.158507 0.158577 0.158647 0.158717 0.158787 0.158857 0.158928 0.158998 0.159068 0.159138 0.159208 0.159278 0.159348 0.159419 0.159489 0.159559 0.159629 0.159699 0.15977 0.15984 0.15991 0.159981 0.160051 0.160121 0.160192 0.160262 0.160332 0.160403 0.160473 0.160543 0.160614 0.160684 0.160755 0.160825 0.160895 0.160966 0.161036 0.161107 0.161177 0.161248 0.161318 0.161389 0.161459 0.16153 0.161601 0.161671 0.161742 0.161812 0.161883 0.161954 0.162024 0.162095 0.162166 0.162236 0.162307 0.162378 0.162448 0.162519 0.16259 0.162661 0.162731 0.162802 0.162873 0.162944 0.163015 0.163086 0.163156 0.163227 0.163298 0.163369 0.16344 0.163511 0.163582 0.163653 0.163724 0.163795 0.163865 0.163936 0.164007 0.164078 0.164149 0.164221 0.164292 0.164363 0.164434 0.164505 0.164576 0.164647 0.164718 0.164789 0.16486 0.164932 0.165003 0.165074 0.165145 0.165216 0.165287 0.165359 0.16543 0.165501 0.165572 0.165644 0.165715 0.165786 0.165858 0.165929 0.166 0.166072 0.166143 0.166214 0.166286 0.166357 0.166429 0.1665 0.166571 0.166643 0.166714 0.166786 0.166857 0.166929 0.167 0.167072 0.167143 0.167215 0.167287 0.167358 0.16743 0.167501 0.167573 0.167645 0.167716 0.167788 0.167859 0.167931 0.168003 0.168074 0.168146 0.168218 0.16829 0.168361 0.168433 0.168505 0.168577 0.168648 0.16872 0.168792 0.168864 0.168936 0.169008 0.169079 0.169151 0.169223 0.169295 0.169367 0.169439 0.169511 0.169583 0.169655 0.169727 0.169799 0.169871 0.169943 0.170015 0.170087 0.170159 0.170231 0.170303 0.170375 0.170447 0.170519 0.170591 0.170664 0.170736 0.170808 0.17088 0.170952 0.171024 0.171097 0.171169 0.171241 0.171313 0.171386 0.171458 0.17153 0.171602 0.171675 0.171747 0.171819 0.171892 0.171964 0.172036 0.172109 0.172181 0.172254 0.172326 0.172398 0.172471 0.172543 0.172616 0.172688 0.172761 0.172833 0.172906 0.172978 0.173051 0.173123 0.173196 0.173268 0.173341 0.173414 0.173486 0.173559 0.173631 0.173704 0.173777 0.173849 0.173922 0.173995 0.174067 0.17414 0.174213 0.174286 0.174358 0.174431 0.174504 0.174577 0.174649 0.174722 0.174795 0.174868 0.174941 0.175014 0.175086 0.175159 0.175232 0.175305 0.175378 0.175451 0.175524 0.175597 0.17567 0.175743 0.175816 0.175889 0.175962 0.176035 0.176108 0.176181 0.176254 0.176327 0.1764 0.176473 0.176546 0.176619 0.176693 0.176766 0.176839 0.176912 0.176985 0.177058 0.177132 0.177205 0.177278 0.177351 0.177424 0.177498 0.177571 0.177644 0.177718 0.177791 0.177864 0.177938 0.178011 0.178084 0.178158 0.178231 0.178304 0.178378 0.178451 0.178525 0.178598 0.178671 0.178745 0.178818 0.178892 0.178965 0.179039 0.179112 0.179186 0.179259 0.179333 0.179407 0.17948 0.179554 0.179627 0.179701 0.179775 0.179848 0.179922 0.179996 0.180069 0.180143 0.180217 0.18029 0.180364 0.180438 0.180512 0.180585 0.180659 0.180733 0.180807 0.18088 0.180954 0.181028 0.181102 0.181176 0.18125 0.181323 0.181397 0.181471 0.181545 0.181619 0.181693 0.181767 0.181841 0.181915 0.181989 0.182063 0.182137 0.182211 0.182285 0.182359 0.182433 0.182507 0.182581 0.182655 0.182729 0.182803 0.182877 0.182952 0.183026 0.1831 0.183174 0.183248 0.183322 0.183397 0.183471 0.183545 0.183619 0.183694 0.183768 0.183842 0.183916 0.183991 0.184065 0.184139 0.184214 0.184288 0.184362 0.184437 0.184511 0.184585 0.18466 0.184734 0.184809 0.184883 0.184957 0.185032 0.185106 0.185181 0.185255 0.18533 0.185404 0.185479 0.185553 0.185628 0.185703 0.185777 0.185852 0.185926 0.186001 0.186076 0.18615 0.186225 0.186299 0.186374 0.186449 0.186523 0.186598 0.186673 0.186748 0.186822 0.186897 0.186972 0.187047 0.187121 0.187196 0.187271 0.187346 0.187421 0.187495 0.18757 0.187645 0.18772 0.187795 0.18787 0.187945 0.18802 0.188094 0.188169 0.188244 0.188319 0.188394 0.188469 0.188544 0.188619 0.188694 0.188769 0.188844 0.188919 0.188995 0.18907 0.189145 0.18922 0.189295 0.18937 0.189445 0.18952 0.189595 0.189671 0.189746 0.189821 0.189896 0.189971 0.190047 0.190122 0.190197 0.190272 0.190348 0.190423 0.190498 0.190573 0.190649 0.190724 0.190799 0.190875 0.19095 0.191026 0.191101 0.191176 0.191252 0.191327 0.191403 0.191478 0.191553 0.191629 0.191704 0.19178 0.191855 0.191931 0.192006 0.192082 0.192158 0.192233 0.192309 0.192384 0.19246 0.192535 0.192611 0.192687 0.192762 0.192838 0.192914 0.192989 0.193065 0.193141 0.193216 0.193292 0.193368 0.193443 0.193519 0.193595 0.193671 0.193747 0.193822 0.193898 0.193974 0.19405 0.194126 0.194201 0.194277 0.194353 0.194429 0.194505 0.194581 0.194657 0.194733 0.194809 0.194885 0.194961 0.195036 0.195112 0.195188 0.195264 0.19534 0.195416 0.195493 0.195569 0.195645 0.195721 0.195797 0.195873 0.195949 0.196025 0.196101 0.196177 0.196254 0.19633 0.196406 0.196482 0.196558 0.196634 0.196711 0.196787 0.196863 0.196939 0.197016 0.197092 0.197168 0.197244 0.197321 0.197397 0.197473 0.19755 0.197626 0.197702 0.197779 0.197855 0.197932 0.198008 0.198084 0.198161 0.198237 0.198314 0.19839 0.198467 0.198543 0.19862 0.198696 0.198773 0.198849 0.198926 0.199002 0.199079 0.199155 0.199232 0.199309 0.199385 0.199462 0.199538 0.199615 0.199692 0.199768 0.199845 0.199922 0.199998 0.200075 0.200152 0.200229 0.200305 0.200382 0.200459 0.200536 0.200612 0.200689 0.200766 0.200843 0.20092 0.200996 0.201073 0.20115 0.201227 0.201304 0.201381 0.201458 0.201535 0.201612 0.201688 0.201765 0.201842 0.201919 0.201996 0.202073 0.20215 0.202227 0.202304 0.202381 0.202458 0.202536 0.202613 0.20269 0.202767 0.202844 0.202921 0.202998 0.203075 0.203152 0.20323 0.203307 0.203384 0.203461 0.203538 0.203615 0.203693 0.20377 0.203847 0.203924 0.204002 0.204079 0.204156 0.204234 0.204311 0.204388 0.204465 0.204543 0.20462 0.204698 0.204775 0.204852 0.20493 0.205007 0.205084 0.205162 0.205239 0.205317 0.205394 0.205472 0.205549 0.205627 0.205704 0.205782 0.205859 0.205937 0.206014 0.206092 0.206169 0.206247 0.206325 0.206402 0.20648 0.206557 0.206635 0.206713 0.20679 0.206868 0.206946 0.207023 0.207101 0.207179 0.207256 0.207334 0.207412 0.20749 0.207567 0.207645 0.207723 0.207801 0.207879 0.207956 0.208034 0.208112 0.20819 0.208268 0.208346 0.208424 0.208501 0.208579 0.208657 0.208735 0.208813 0.208891 0.208969 0.209047 0.209125 0.209203 0.209281 0.209359 0.209437 0.209515 0.209593 0.209671 0.209749 0.209827 0.209905 0.209983 0.210061 0.21014 0.210218 0.210296 0.210374 0.210452 0.21053 0.210608 0.210687 0.210765 0.210843 0.210921 0.211 0.211078 0.211156 0.211234 0.211313 0.211391 0.211469 0.211547 0.211626 0.211704 0.211782 0.211861 0.211939 0.212018 0.212096 0.212174 0.212253 0.212331 0.21241 0.212488 0.212566 0.212645; #A 5000 0.212723 0.212802 0.21288 0.212959 0.213037 0.213116 0.213194 0.213273 0.213351 0.21343 0.213509 0.213587 0.213666 0.213744 0.213823 0.213902 0.21398 0.214059 0.214137 0.214216 0.214295 0.214374 0.214452 0.214531 0.21461 0.214688 0.214767 0.214846 0.214925 0.215003 0.215082 0.215161 0.21524 0.215319 0.215397 0.215476 0.215555 0.215634 0.215713 0.215792 0.215871 0.215949 0.216028 0.216107 0.216186 0.216265 0.216344 0.216423 0.216502 0.216581 0.21666 0.216739 0.216818 0.216897 0.216976 0.217055 0.217134 0.217213 0.217292 0.217371 0.21745 0.21753 0.217609 0.217688 0.217767 0.217846 0.217925 0.218004 0.218084 0.218163 0.218242 0.218321 0.2184 0.21848 0.218559 0.218638 0.218717 0.218797 0.218876 0.218955 0.219034 0.219114 0.219193 0.219272 0.219352 0.219431 0.21951 0.21959 0.219669 0.219749 0.219828 0.219907 0.219987 0.220066 0.220146 0.220225 0.220305 0.220384 0.220464 0.220543 0.220623 0.220702 0.220782 0.220861 0.220941 0.22102 0.2211 0.221179 0.221259 0.221339 0.221418 0.221498 0.221577 0.221657 0.221737 0.221816 0.221896 0.221976 0.222055 0.222135 0.222215 0.222295 0.222374 0.222454 0.222534 0.222614 0.222693 0.222773 0.222853 0.222933 0.223013 0.223092 0.223172 0.223252 0.223332 0.223412 0.223492 0.223572 0.223651 0.223731 0.223811 0.223891 0.223971 0.224051 0.224131 0.224211 0.224291 0.224371 0.224451 0.224531 0.224611 0.224691 0.224771 0.224851 0.224931 0.225011 0.225091 0.225171 0.225251 0.225332 0.225412 0.225492 0.225572 0.225652 0.225732 0.225812 0.225893 0.225973 0.226053 0.226133 0.226213 0.226294 0.226374 0.226454 0.226534 0.226615 0.226695 0.226775 0.226856 0.226936 0.227016 0.227096 0.227177 0.227257 0.227338 0.227418 0.227498 0.227579 0.227659 0.227739 0.22782 0.2279 0.227981 0.228061 0.228142 0.228222 0.228303 0.228383 0.228464 0.228544 0.228625 0.228705 0.228786 0.228866 0.228947 0.229027 0.229108 0.229189 0.229269 0.22935 0.22943 0.229511 0.229592 0.229672 0.229753 0.229834 0.229914 0.229995 0.230076 0.230156 0.230237 0.230318 0.230399 0.230479 0.23056 0.230641 0.230722 0.230802 0.230883 0.230964 0.231045 0.231126 0.231206 0.231287 0.231368 0.231449 0.23153 0.231611 0.231692 0.231773 0.231854 0.231934 0.232015 0.232096 0.232177 0.232258 0.232339 0.23242 0.232501 0.232582 0.232663 0.232744 0.232825 0.232906 0.232987 0.233068 0.233149 0.233231 0.233312 0.233393 0.233474 0.233555 0.233636 0.233717 0.233798 0.23388 0.233961 0.234042 0.234123 0.234204 0.234286 0.234367 0.234448 0.234529 0.23461 0.234692 0.234773 0.234854 0.234936 0.235017 0.235098 0.235179 0.235261 0.235342 0.235424 0.235505 0.235586 0.235668 0.235749 0.23583 0.235912 0.235993 0.236075 0.236156 0.236238 0.236319 0.2364 0.236482 0.236563 0.236645 0.236726 0.236808 0.236889 0.236971 0.237052 0.237134 0.237216 0.237297 0.237379 0.23746 0.237542 0.237624 0.237705 0.237787 0.237868 0.23795 0.238032 0.238113 0.238195 0.238277 0.238358 0.23844 0.238522 0.238604 0.238685 0.238767 0.238849 0.238931 0.239012 0.239094 0.239176 0.239258 0.23934 0.239421 0.239503 0.239585 0.239667 0.239749 0.239831 0.239912 0.239994 0.240076 0.240158 0.24024 0.240322 0.240404 0.240486 0.240568 0.24065 0.240732 0.240814 0.240896 0.240978 0.24106 0.241142 0.241224 0.241306 0.241388 0.24147 0.241552 0.241634 0.241716 0.241798 0.24188 0.241963 0.242045 0.242127 0.242209 0.242291 0.242373 0.242455 0.242538 0.24262 0.242702 0.242784 0.242866 0.242949 0.243031 0.243113 0.243195 0.243278 0.24336 0.243442 0.243524 0.243607 0.243689 0.243771 0.243854 0.243936 0.244018 0.244101 0.244183 0.244266 0.244348 0.24443 0.244513 0.244595 0.244678 0.24476 0.244842 0.244925 0.245007 0.24509 0.245172 0.245255 0.245337 0.24542 0.245502 0.245585 0.245667 0.24575 0.245833 0.245915 0.245998 0.24608 0.246163 0.246246 0.246328 0.246411 0.246493 0.246576 0.246659 0.246741 0.246824 0.246907 0.246989 0.247072 0.247155 0.247237 0.24732 0.247403 0.247486 0.247568 0.247651 0.247734 0.247817 0.2479 0.247982 0.248065 0.248148 0.248231 0.248314 0.248396 0.248479 0.248562 0.248645 0.248728 0.248811 0.248894 0.248977 0.24906 0.249143 0.249225 0.249308 0.249391 0.249474 0.249557 0.24964 0.249723 0.249806 0.249889 0.249972 0.250055 0.250138 0.250221 0.250304 0.250388 0.250471 0.250554 0.250637 0.25072 0.250803 0.250886 0.250969 0.251052 0.251136 0.251219 0.251302 0.251385 0.251468 0.251551 0.251635 0.251718 0.251801 0.251884 0.251968 0.252051 0.252134 0.252217 0.252301 0.252384 0.252467 0.252551 0.252634 0.252717 0.2528 0.252884 0.252967 0.253051 0.253134 0.253217 0.253301 0.253384 0.253468 0.253551 0.253634 0.253718 0.253801 0.253885 0.253968 0.254052 0.254135 0.254219 0.254302 0.254386 0.254469 0.254553 0.254636 0.25472 0.254803 0.254887 0.25497 0.255054 0.255138 0.255221 0.255305 0.255388 0.255472 0.255556 0.255639 0.255723 0.255807 0.25589 0.255974 0.256058 0.256141 0.256225 0.256309 0.256392 0.256476 0.25656 0.256644 0.256727 0.256811 0.256895 0.256979 0.257062 0.257146 0.25723 0.257314 0.257398 0.257482 0.257565 0.257649 0.257733 0.257817 0.257901 0.257985 0.258069 0.258153 0.258236 0.25832 0.258404 0.258488 0.258572 0.258656 0.25874 0.258824 0.258908 0.258992 0.259076 0.25916 0.259244 0.259328 0.259412 0.259496 0.25958 0.259664 0.259748 0.259833 0.259917 0.260001 0.260085 0.260169 0.260253 0.260337 0.260421 0.260506 0.26059 0.260674 0.260758 0.260842 0.260926 0.261011 0.261095 0.261179 0.261263 0.261348 0.261432 0.261516 0.2616 0.261685 0.261769 0.261853 0.261938 0.262022 0.262106 0.262191 0.262275 0.262359 0.262444 0.262528 0.262612 0.262697 0.262781 0.262865 0.26295 0.263034 0.263119 0.263203 0.263288 0.263372 0.263457 0.263541 0.263625 0.26371 0.263794 0.263879 0.263963 0.264048 0.264133 0.264217 0.264302 0.264386 0.264471 0.264555 0.26464 0.264724 0.264809 0.264894 0.264978 0.265063 0.265148 0.265232 0.265317 0.265402 0.265486 0.265571 0.265656 0.26574 0.265825 0.26591 0.265994 0.266079 0.266164 0.266249 0.266333 0.266418 0.266503 0.266588 0.266672 0.266757 0.266842 0.266927 0.267012 0.267097 0.267181 0.267266 0.267351 0.267436 0.267521 0.267606 0.267691 0.267776 0.26786 0.267945 0.26803 0.268115 0.2682 0.268285 0.26837 0.268455 0.26854 0.268625 0.26871 0.268795 0.26888 0.268965 0.26905 0.269135 0.26922 0.269305 0.26939 0.269475 0.26956 0.269646 0.269731 0.269816 0.269901 0.269986 0.270071 0.270156 0.270241 0.270327 0.270412 0.270497 0.270582 0.270667 0.270752 0.270838 0.270923 0.271008 0.271093 0.271179 0.271264 0.271349 0.271434 0.27152 0.271605 0.27169 0.271776 0.271861 0.271946 0.272031 0.272117 0.272202 0.272287 0.272373 0.272458 0.272544 0.272629 0.272714 0.2728 0.272885 0.272971 0.273056 0.273141 0.273227 0.273312 0.273398 0.273483 0.273569 0.273654 0.27374 0.273825 0.273911 0.273996 0.274082 0.274167 0.274253 0.274338 0.274424 0.27451 0.274595 0.274681 0.274766 0.274852 0.274937 0.275023 0.275109 0.275194 0.27528 0.275366 0.275451 0.275537 0.275623 0.275708 0.275794 0.27588 0.275965 0.276051 0.276137 0.276223 0.276308 0.276394 0.27648 0.276566 0.276651 0.276737 0.276823 0.276909 0.276995 0.27708 0.277166 0.277252 0.277338 0.277424 0.27751 0.277595 0.277681 0.277767 0.277853 0.277939 0.278025 0.278111 0.278197 0.278283 0.278369 0.278454 0.27854 0.278626 0.278712 0.278798 0.278884 0.27897 0.279056 0.279142 0.279228 0.279314 0.2794 0.279486 0.279572 0.279659 0.279745 0.279831 0.279917 0.280003 0.280089 0.280175 0.280261 0.280347 0.280433 0.28052 0.280606 0.280692 0.280778 0.280864 0.28095 0.281037 0.281123 0.281209 0.281295 0.281381 0.281468 0.281554 0.28164 0.281726 0.281813 0.281899 0.281985 0.282071 0.282158 0.282244 0.28233 0.282417 0.282503 0.282589 0.282676 0.282762 0.282848 0.282935 0.283021 0.283107 0.283194 0.28328 0.283367 0.283453 0.28354 0.283626 0.283712 0.283799 0.283885 0.283972 0.284058 0.284145 0.284231 0.284318 0.284404 0.284491 0.284577 0.284664 0.28475 0.284837 0.284923 0.28501 0.285096 0.285183 0.28527 0.285356 0.285443 0.285529 0.285616 0.285703 0.285789 0.285876 0.285962 0.286049 0.286136 0.286222 0.286309 0.286396 0.286482 0.286569 0.286656 0.286743 0.286829 0.286916 0.287003 0.28709 0.287176 0.287263 0.28735 0.287437 0.287523 0.28761 0.287697 0.287784 0.287871 0.287957 0.288044 0.288131 0.288218 0.288305 0.288392 0.288478 0.288565 0.288652 0.288739 0.288826 0.288913 0.289 0.289087 0.289174 0.289261 0.289348 0.289435 0.289522 0.289608 0.289695 0.289782 0.289869 0.289956 0.290043 0.29013 0.290217 0.290305 0.290392 0.290479 0.290566 0.290653 0.29074 0.290827 0.290914 0.291001 0.291088 0.291175 0.291262 0.29135 0.291437 0.291524 0.291611 0.291698 0.291785 0.291872 0.29196 0.292047 0.292134 0.292221 0.292308 0.292396 0.292483 0.29257 0.292657 0.292744 0.292832 0.292919 0.293006 0.293094 0.293181 0.293268 0.293355 0.293443 0.29353 0.293617 0.293705 0.293792 0.293879 0.293967 0.294054 0.294141 0.294229 0.294316 0.294404 0.294491 0.294578 0.294666 0.294753 0.294841 0.294928 0.295016 0.295103 0.29519 0.295278 0.295365 0.295453 0.29554 0.295628 0.295715 0.295803 0.29589; #A 6000 0.295978 0.296065 0.296153 0.296241 0.296328 0.296416 0.296503 0.296591 0.296678 0.296766 0.296854 0.296941 0.297029 0.297116 0.297204 0.297292 0.297379 0.297467 0.297555 0.297642 0.29773 0.297818 0.297905 0.297993 0.298081 0.298168 0.298256 0.298344 0.298432 0.298519 0.298607 0.298695 0.298783 0.29887 0.298958 0.299046 0.299134 0.299222 0.299309 0.299397 0.299485 0.299573 0.299661 0.299749 0.299836 0.299924 0.300012 0.3001 0.300188 0.300276 0.300364 0.300452 0.300539 0.300627 0.300715 0.300803 0.300891 0.300979 0.301067 0.301155 0.301243 0.301331 0.301419 0.301507 0.301595 0.301683 0.301771 0.301859 0.301947 0.302035 0.302123 0.302211 0.302299 0.302387 0.302475 0.302563 0.302652 0.30274 0.302828 0.302916 0.303004 0.303092 0.30318 0.303268 0.303357 0.303445 0.303533 0.303621 0.303709 0.303797 0.303886 0.303974 0.304062 0.30415 0.304238 0.304327 0.304415 0.304503 0.304591 0.30468 0.304768 0.304856 0.304944 0.305033 0.305121 0.305209 0.305298 0.305386 0.305474 0.305562 0.305651 0.305739 0.305827 0.305916 0.306004 0.306093 0.306181 0.306269 0.306358 0.306446 0.306534 0.306623 0.306711 0.3068 0.306888 0.306977 0.307065 0.307154 0.307242 0.30733 0.307419 0.307507 0.307596 0.307684 0.307773 0.307861 0.30795 0.308038 0.308127 0.308215 0.308304 0.308393 0.308481 0.30857 0.308658 0.308747 0.308835 0.308924 0.309013 0.309101 0.30919 0.309278 0.309367 0.309456 0.309544 0.309633 0.309722 0.30981 0.309899 0.309988 0.310076 0.310165 0.310254 0.310342 0.310431 0.31052 0.310609 0.310697 0.310786 0.310875 0.310964 0.311052 0.311141 0.31123 0.311319 0.311408 0.311496 0.311585 0.311674 0.311763 0.311852 0.31194 0.312029 0.312118 0.312207 0.312296 0.312385 0.312474 0.312562 0.312651 0.31274 0.312829 0.312918 0.313007 0.313096 0.313185 0.313274 0.313363 0.313452 0.313541 0.313629 0.313718 0.313807 0.313896 0.313985 0.314074 0.314163 0.314252 0.314341 0.31443 0.314519 0.314608 0.314698 0.314787 0.314876 0.314965 0.315054 0.315143 0.315232 0.315321 0.31541 0.315499 0.315588 0.315677 0.315767 0.315856 0.315945 0.316034 0.316123 0.316212 0.316301 0.316391 0.31648 0.316569 0.316658 0.316747 0.316837 0.316926 0.317015 0.317104 0.317194 0.317283 0.317372 0.317461 0.317551 0.31764 0.317729 0.317818 0.317908 0.317997 0.318086 0.318175 0.318265 0.318354 0.318443 0.318533 0.318622 0.318711 0.318801 0.31889 0.31898 0.319069 0.319158 0.319248 0.319337 0.319427 0.319516 0.319605 0.319695 0.319784 0.319874 0.319963 0.320052 0.320142 0.320231 0.320321 0.32041 0.3205 0.320589 0.320679 0.320768 0.320858 0.320947 0.321037 0.321126 0.321216 0.321305 0.321395 0.321485 0.321574 0.321664 0.321753 0.321843 0.321932 0.322022 0.322112 0.322201 0.322291 0.32238 0.32247 0.32256 0.322649 0.322739 0.322829 0.322918 0.323008 0.323098 0.323187 0.323277 0.323367 0.323456 0.323546 0.323636 0.323725 0.323815 0.323905 0.323995 0.324084 0.324174 0.324264 0.324354 0.324443 0.324533 0.324623 0.324713 0.324803 0.324892 0.324982 0.325072 0.325162 0.325252 0.325341 0.325431 0.325521 0.325611 0.325701 0.325791 0.325881 0.32597 0.32606 0.32615 0.32624 0.32633 0.32642 0.32651 0.3266 0.32669 0.32678 0.32687 0.326959 0.327049 0.327139 0.327229 0.327319 0.327409 0.327499 0.327589 0.327679 0.327769 0.327859 0.327949 0.328039 0.328129 0.328219 0.328309 0.328399 0.32849 0.32858 0.32867 0.32876 0.32885 0.32894 0.32903 0.32912 0.32921 0.3293 0.32939 0.329481 0.329571 0.329661 0.329751 0.329841 0.329931 0.330021 0.330112 0.330202 0.330292 0.330382 0.330472 0.330562 0.330653 0.330743 0.330833 0.330923 0.331014 0.331104 0.331194 0.331284 0.331375 0.331465 0.331555 0.331645 0.331736 0.331826 0.331916 0.332006 0.332097 0.332187 0.332277 0.332368 0.332458 0.332548 0.332639 0.332729 0.332819 0.33291 0.333 0.333091 0.333181 0.333271 0.333362 0.333452 0.333542 0.333633 0.333723 0.333814 0.333904 0.333995 0.334085 0.334175 0.334266 0.334356 0.334447 0.334537 0.334628 0.334718 0.334809 0.334899 0.33499 0.33508 0.335171 0.335261 0.335352 0.335442 0.335533 0.335623 0.335714 0.335805 0.335895 0.335986 0.336076 0.336167 0.336257 0.336348 0.336439 0.336529 0.33662 0.33671 0.336801 0.336892 0.336982 0.337073 0.337164 0.337254 0.337345 0.337436 0.337526 0.337617 0.337708 0.337798 0.337889 0.33798 0.33807 0.338161 0.338252 0.338342 0.338433 0.338524 0.338615 0.338705 0.338796 0.338887 0.338978 0.339068 0.339159 0.33925 0.339341 0.339432 0.339522 0.339613 0.339704 0.339795 0.339886 0.339976 0.340067 0.340158 0.340249 0.34034 0.340431 0.340522 0.340612 0.340703 0.340794 0.340885 0.340976 0.341067 0.341158 0.341249 0.34134 0.341431 0.341521 0.341612 0.341703 0.341794 0.341885 0.341976 0.342067 0.342158 0.342249 0.34234 0.342431 0.342522 0.342613 0.342704 0.342795 0.342886 0.342977 0.343068 0.343159 0.34325 0.343341 0.343432 0.343523 0.343614 0.343705 0.343797 0.343888 0.343979 0.34407 0.344161 0.344252 0.344343 0.344434 0.344525 0.344616 0.344708 0.344799 0.34489 0.344981 0.345072 0.345163 0.345254 0.345346 0.345437 0.345528 0.345619 0.34571 0.345802 0.345893 0.345984 0.346075 0.346166 0.346258 0.346349 0.34644 0.346531 0.346623 0.346714 0.346805 0.346896 0.346988 0.347079 0.34717 0.347261 0.347353 0.347444 0.347535 0.347627 0.347718 0.347809 0.347901 0.347992 0.348083 0.348175 0.348266 0.348357 0.348449 0.34854 0.348631 0.348723 0.348814 0.348906 0.348997 0.349088 0.34918 0.349271 0.349363 0.349454 0.349546 0.349637 0.349728 0.34982 0.349911 0.350003 0.350094 0.350186 0.350277 0.350369 0.35046 0.350552 0.350643 0.350735 0.350826 0.350918 0.351009 0.351101 0.351192 0.351284 0.351375 0.351467 0.351558 0.35165 0.351741 0.351833 0.351925 0.352016 0.352108 0.352199 0.352291 0.352382 0.352474 0.352566 0.352657 0.352749 0.352841 0.352932 0.353024 0.353115 0.353207 0.353299 0.35339 0.353482 0.353574 0.353665 0.353757 0.353849 0.35394 0.354032 0.354124 0.354216 0.354307 0.354399 0.354491 0.354582 0.354674 0.354766 0.354858 0.354949 0.355041 0.355133 0.355225 0.355316 0.355408 0.3555 0.355592 0.355684 0.355775 0.355867 0.355959 0.356051 0.356143 0.356234 0.356326 0.356418 0.35651 0.356602 0.356694 0.356785 0.356877 0.356969 0.357061 0.357153 0.357245 0.357337 0.357429 0.357521 0.357612 0.357704 0.357796 0.357888 0.35798 0.358072 0.358164 0.358256 0.358348 0.35844 0.358532 0.358624 0.358716 0.358808 0.3589 0.358992 0.359084 0.359176 0.359268 0.35936 0.359452 0.359544 0.359636 0.359728 0.35982 0.359912 0.360004 0.360096 0.360188 0.36028 0.360372 0.360464 0.360556 0.360648 0.36074 0.360832 0.360924 0.361016 0.361109 0.361201 0.361293 0.361385 0.361477 0.361569 0.361661 0.361753 0.361845 0.361938 0.36203 0.362122 0.362214 0.362306 0.362398 0.362491 0.362583 0.362675 0.362767 0.362859 0.362952 0.363044 0.363136 0.363228 0.36332 0.363413 0.363505 0.363597 0.363689 0.363782 0.363874 0.363966 0.364058 0.364151 0.364243 0.364335 0.364427 0.36452 0.364612 0.364704 0.364797 0.364889 0.364981 0.365074 0.365166 0.365258 0.36535 0.365443 0.365535 0.365627 0.36572 0.365812 0.365905 0.365997 0.366089 0.366182 0.366274 0.366366 0.366459 0.366551 0.366644 0.366736 0.366828 0.366921 0.367013 0.367106 0.367198 0.367291 0.367383 0.367475 0.367568 0.36766 0.367753 0.367845 0.367938 0.36803 0.368123 0.368215 0.368308 0.3684 0.368493 0.368585 0.368678 0.36877 0.368863 0.368955 0.369048 0.36914 0.369233 0.369325 0.369418 0.36951 0.369603 0.369695 0.369788 0.369881 0.369973 0.370066 0.370158 0.370251 0.370344 0.370436 0.370529 0.370621 0.370714 0.370807 0.370899 0.370992 0.371084 0.371177 0.37127 0.371362 0.371455 0.371548 0.37164 0.371733 0.371826 0.371918 0.372011 0.372104 0.372196 0.372289 0.372382 0.372474 0.372567 0.37266 0.372753 0.372845 0.372938 0.373031 0.373123 0.373216 0.373309 0.373402 0.373494 0.373587 0.37368 0.373773 0.373866 0.373958 0.374051 0.374144 0.374237 0.374329 0.374422 0.374515 0.374608 0.374701 0.374793 0.374886 0.374979 0.375072 0.375165 0.375258 0.375351 0.375443 0.375536 0.375629 0.375722 0.375815 0.375908 0.376001 0.376093 0.376186 0.376279 0.376372 0.376465 0.376558 0.376651 0.376744 0.376837 0.37693 0.377022 0.377115 0.377208 0.377301 0.377394 0.377487 0.37758 0.377673 0.377766 0.377859 0.377952 0.378045 0.378138 0.378231 0.378324 0.378417 0.37851 0.378603 0.378696 0.378789 0.378882 0.378975 0.379068 0.379161 0.379254 0.379347 0.37944 0.379533 0.379626 0.379719 0.379812 0.379905 0.379998 0.380092 0.380185 0.380278 0.380371 0.380464 0.380557 0.38065 0.380743 0.380836 0.380929 0.381023 0.381116 0.381209 0.381302 0.381395 0.381488 0.381581 0.381674 0.381768 0.381861 0.381954 0.382047 0.38214 0.382233 0.382327 0.38242 0.382513 0.382606 0.382699 0.382793 0.382886 0.382979 0.383072 0.383165 0.383259 0.383352 0.383445 0.383538 0.383632 0.383725 0.383818 0.383911 0.384005 0.384098 0.384191 0.384284 0.384378 0.384471 0.384564 0.384658 0.384751 0.384844 0.384937 0.385031 0.385124 0.385217 0.385311 0.385404 0.385497 0.385591 0.385684 0.385777 0.385871 0.385964 0.386057 0.386151 0.386244 0.386337 0.386431 0.386524 0.386617; #A 7000 0.386711 0.386804 0.386898 0.386991 0.387084 0.387178 0.387271 0.387365 0.387458 0.387551 0.387645 0.387738 0.387832 0.387925 0.388019 0.388112 0.388205 0.388299 0.388392 0.388486 0.388579 0.388673 0.388766 0.38886 0.388953 0.389047 0.38914 0.389234 0.389327 0.389421 0.389514 0.389608 0.389701 0.389795 0.389888 0.389982 0.390075 0.390169 0.390262 0.390356 0.390449 0.390543 0.390636 0.39073 0.390824 0.390917 0.391011 0.391104 0.391198 0.391291 0.391385 0.391479 0.391572 0.391666 0.391759 0.391853 0.391947 0.39204 0.392134 0.392227 0.392321 0.392415 0.392508 0.392602 0.392696 0.392789 0.392883 0.392977 0.39307 0.393164 0.393257 0.393351 0.393445 0.393539 0.393632 0.393726 0.39382 0.393913 0.394007 0.394101 0.394194 0.394288 0.394382 0.394475 0.394569 0.394663 0.394757 0.39485 0.394944 0.395038 0.395132 0.395225 0.395319 0.395413 0.395507 0.3956 0.395694 0.395788 0.395882 0.395975 0.396069 0.396163 0.396257 0.396351 0.396444 0.396538 0.396632 0.396726 0.39682 0.396913 0.397007 0.397101 0.397195 0.397289 0.397382 0.397476 0.39757 0.397664 0.397758 0.397852 0.397946 0.398039 0.398133 0.398227 0.398321 0.398415 0.398509 0.398603 0.398696 0.39879 0.398884 0.398978 0.399072 0.399166 0.39926 0.399354 0.399448 0.399542 0.399636 0.399729 0.399823 0.399917 0.400011 0.400105 0.400199 0.400293 0.400387 0.400481 0.400575 0.400669 0.400763 0.400857 0.400951 0.401045 0.401139 0.401233 0.401327 0.401421 0.401515 0.401609 0.401703 0.401797 0.401891 0.401985 0.402079 0.402173 0.402267 0.402361 0.402455 0.402549 0.402643 0.402737 0.402831 0.402925 0.403019 0.403113 0.403207 0.403301 0.403395 0.403489 0.403583 0.403678 0.403772 0.403866 0.40396 0.404054 0.404148 0.404242 0.404336 0.40443 0.404524 0.404619 0.404713 0.404807 0.404901 0.404995 0.405089 0.405183 0.405277 0.405372 0.405466 0.40556 0.405654 0.405748 0.405842 0.405936 0.406031 0.406125 0.406219 0.406313 0.406407 0.406501 0.406596 0.40669 0.406784 0.406878 0.406972 0.407067 0.407161 0.407255 0.407349 0.407443 0.407538 0.407632 0.407726 0.40782 0.407915 0.408009 0.408103 0.408197 0.408292 0.408386 0.40848 0.408574 0.408669 0.408763 0.408857 0.408951 0.409046 0.40914 0.409234 0.409328 0.409423 0.409517 0.409611 0.409706 0.4098 0.409894 0.409989 0.410083 0.410177 0.410271 0.410366 0.41046 0.410554 0.410649 0.410743 0.410837 0.410932 0.411026 0.41112 0.411215 0.411309 0.411404 0.411498 0.411592 0.411687 0.411781 0.411875 0.41197 0.412064 0.412158 0.412253 0.412347 0.412442 0.412536 0.41263 0.412725 0.412819 0.412914 0.413008 0.413102 0.413197 0.413291 0.413386 0.41348 0.413575 0.413669 0.413763 0.413858 0.413952 0.414047 0.414141 0.414236 0.41433 0.414425 0.414519 0.414614 0.414708 0.414802 0.414897 0.414991 0.415086 0.41518 0.415275 0.415369 0.415464 0.415558 0.415653 0.415747 0.415842 0.415936 0.416031 0.416125 0.41622 0.416314 0.416409 0.416503 0.416598 0.416693 0.416787 0.416882 0.416976 0.417071 0.417165 0.41726 0.417354 0.417449 0.417543 0.417638 0.417733 0.417827 0.417922 0.418016 0.418111 0.418205 0.4183 0.418395 0.418489 0.418584 0.418678 0.418773 0.418868 0.418962 0.419057 0.419151 0.419246 0.419341 0.419435 0.41953 0.419625 0.419719 0.419814 0.419908 0.420003 0.420098 0.420192 0.420287 0.420382 0.420476 0.420571 0.420666 0.42076 0.420855 0.42095 0.421044 0.421139 0.421234 0.421328 0.421423 0.421518 0.421612 0.421707 0.421802 0.421896 0.421991 0.422086 0.422181 0.422275 0.42237 0.422465 0.422559 0.422654 0.422749 0.422844 0.422938 0.423033 0.423128 0.423222 0.423317 0.423412 0.423507 0.423601 0.423696 0.423791 0.423886 0.42398 0.424075 0.42417 0.424265 0.424359 0.424454 0.424549 0.424644 0.424739 0.424833 0.424928 0.425023 0.425118 0.425213 0.425307 0.425402 0.425497 0.425592 0.425687 0.425781 0.425876 0.425971 0.426066 0.426161 0.426255 0.42635 0.426445 0.42654 0.426635 0.42673 0.426824 0.426919 0.427014 0.427109 0.427204 0.427299 0.427394 0.427488 0.427583 0.427678 0.427773 0.427868 0.427963 0.428058 0.428152 0.428247 0.428342 0.428437 0.428532 0.428627 0.428722 0.428817 0.428912 0.429006 0.429101 0.429196 0.429291 0.429386 0.429481 0.429576 0.429671 0.429766 0.429861 0.429956 0.430051 0.430146 0.43024 0.430335 0.43043 0.430525 0.43062 0.430715 0.43081 0.430905 0.431 0.431095 0.43119 0.431285 0.43138 0.431475 0.43157 0.431665 0.43176 0.431855 0.43195 0.432045 0.43214 0.432235 0.43233 0.432425 0.43252 0.432615 0.43271 0.432805 0.4329 0.432995 0.43309 0.433185 0.43328 0.433375 0.43347 0.433565 0.43366 0.433755 0.43385 0.433945 0.43404 0.434135 0.43423 0.434325 0.43442 0.434515 0.43461 0.434705 0.4348 0.434895 0.43499 0.435085 0.435181 0.435276 0.435371 0.435466 0.435561 0.435656 0.435751 0.435846 0.435941 0.436036 0.436131 0.436226 0.436321 0.436417 0.436512 0.436607 0.436702 0.436797 0.436892 0.436987 0.437082 0.437177 0.437273 0.437368 0.437463 0.437558 0.437653 0.437748 0.437843 0.437938 0.438034 0.438129 0.438224 0.438319 0.438414 0.438509 0.438604 0.4387 0.438795 0.43889 0.438985 0.43908 0.439175 0.43927 0.439366 0.439461 0.439556 0.439651 0.439746 0.439841 0.439937 0.440032 0.440127 0.440222 0.440317 0.440413 0.440508 0.440603 0.440698 0.440793 0.440889 0.440984 0.441079 0.441174 0.441269 0.441365 0.44146 0.441555 0.44165 0.441745 0.441841 0.441936 0.442031 0.442126 0.442222 0.442317 0.442412 0.442507 0.442603 0.442698 0.442793 0.442888 0.442984 0.443079 0.443174 0.443269 0.443365 0.44346 0.443555 0.44365 0.443746 0.443841 0.443936 0.444031 0.444127 0.444222 0.444317 0.444412 0.444508 0.444603 0.444698 0.444794 0.444889 0.444984 0.445079 0.445175 0.44527 0.445365 0.445461 0.445556 0.445651 0.445747 0.445842 0.445937 0.446033 0.446128 0.446223 0.446318 0.446414 0.446509 0.446604 0.4467 0.446795 0.44689 0.446986 0.447081 0.447176 0.447272 0.447367 0.447462 0.447558 0.447653 0.447748 0.447844 0.447939 0.448035 0.44813 0.448225 0.448321 0.448416 0.448511 0.448607 0.448702 0.448797 0.448893 0.448988 0.449084 0.449179 0.449274 0.44937 0.449465 0.44956 0.449656 0.449751 0.449847 0.449942 0.450037 0.450133 0.450228 0.450324 0.450419 0.450514 0.45061 0.450705 0.450801 0.450896 0.450991 0.451087 0.451182 0.451278 0.451373 0.451469 0.451564 0.451659 0.451755 0.45185 0.451946 0.452041 0.452137 0.452232 0.452327 0.452423 0.452518 0.452614 0.452709 0.452805 0.4529 0.452995 0.453091 0.453186 0.453282 0.453377 0.453473 0.453568 0.453664 0.453759 0.453855 0.45395 0.454046 0.454141 0.454236 0.454332 0.454427 0.454523 0.454618 0.454714 0.454809 0.454905 0.455 0.455096 0.455191 0.455287 0.455382 0.455478 0.455573 0.455669 0.455764 0.45586 0.455955 0.456051 0.456146 0.456242 0.456337 0.456433 0.456528 0.456624 0.456719 0.456815 0.45691 0.457006 0.457101 0.457197 0.457292 0.457388 0.457483 0.457579 0.457675 0.45777 0.457866 0.457961 0.458057 0.458152 0.458248 0.458343 0.458439 0.458534 0.45863 0.458725 0.458821 0.458917 0.459012 0.459108 0.459203 0.459299 0.459394 0.45949 0.459585 0.459681 0.459777 0.459872 0.459968 0.460063 0.460159 0.460254 0.46035 0.460445 0.460541 0.460637 0.460732 0.460828 0.460923 0.461019 0.461115 0.46121 0.461306 0.461401 0.461497 0.461592 0.461688 0.461784 0.461879 0.461975 0.46207 0.462166 0.462262 0.462357 0.462453 0.462548 0.462644 0.46274 0.462835 0.462931 0.463026 0.463122 0.463218 0.463313 0.463409 0.463505 0.4636 0.463696 0.463791 0.463887 0.463983 0.464078 0.464174 0.46427 0.464365 0.464461 0.464556 0.464652 0.464748 0.464843 0.464939 0.465035 0.46513 0.465226 0.465322 0.465417 0.465513 0.465608 0.465704 0.4658 0.465895 0.465991 0.466087 0.466182 0.466278 0.466374 0.466469 0.466565 0.466661 0.466756 0.466852 0.466948 0.467043 0.467139 0.467235 0.46733 0.467426 0.467522 0.467617 0.467713 0.467809 0.467904 0.468 0.468096 0.468191 0.468287 0.468383 0.468478 0.468574 0.46867 0.468765 0.468861 0.468957 0.469053 0.469148 0.469244 0.46934 0.469435 0.469531 0.469627 0.469722 0.469818 0.469914 0.47001 0.470105 0.470201 0.470297 0.470392 0.470488 0.470584 0.470679 0.470775 0.470871 0.470967 0.471062 0.471158 0.471254 0.471349 0.471445 0.471541 0.471637 0.471732 0.471828 0.471924 0.472019 0.472115 0.472211 0.472307 0.472402 0.472498 0.472594 0.47269 0.472785 0.472881 0.472977 0.473072 0.473168 0.473264 0.47336 0.473455 0.473551 0.473647 0.473743 0.473838 0.473934 0.47403 0.474126 0.474221 0.474317 0.474413 0.474509 0.474604 0.4747 0.474796 0.474892 0.474987 0.475083 0.475179 0.475275 0.47537 0.475466 0.475562 0.475658 0.475753 0.475849 0.475945 0.476041 0.476137 0.476232 0.476328 0.476424 0.47652 0.476615 0.476711 0.476807 0.476903 0.476998 0.477094 0.47719 0.477286 0.477381 0.477477 0.477573 0.477669 0.477765 0.47786 0.477956 0.478052 0.478148 0.478244 0.478339 0.478435 0.478531 0.478627 0.478722 0.478818 0.478914 0.47901 0.479106 0.479201 0.479297 0.479393 0.479489 0.479585 0.47968 0.479776 0.479872 0.479968 0.480064 0.480159 0.480255 0.480351 0.480447 0.480543 0.480638 0.480734 0.48083 0.480926 0.481022 0.481117 0.481213 0.481309 0.481405 0.481501 ; #A 8000 0.481596 0.481692 0.481788 0.481884 0.48198 0.482075 0.482171 0.482267 0.482363 0.482459 0.482554 0.48265 0.482746 0.482842 0.482938 0.483034 0.483129 0.483225 0.483321 0.483417 0.483513 0.483609 0.483704 0.4838 0.483896 0.483992 0.484088 0.484183 0.484279 0.484375 0.484471 0.484567 0.484663 0.484758 0.484854 0.48495 0.485046 0.485142 0.485238 0.485333 0.485429 0.485525 0.485621 0.485717 0.485813 0.485908 0.486004 0.4861 0.486196 0.486292 0.486388 0.486483 0.486579 0.486675 0.486771 0.486867 0.486963 0.487058 0.487154 0.48725 0.487346 0.487442 0.487538 0.487634 0.487729 0.487825 0.487921 0.488017 0.488113 0.488209 0.488304 0.4884 0.488496 0.488592 0.488688 0.488784 0.48888 0.488975 0.489071 0.489167 0.489263 0.489359 0.489455 0.489551 0.489646 0.489742 0.489838 0.489934 0.49003 0.490126 0.490222 0.490317 0.490413 0.490509 0.490605 0.490701 0.490797 0.490892 0.490988 0.491084 0.49118 0.491276 0.491372 0.491468 0.491563 0.491659 0.491755 0.491851 0.491947 0.492043 0.492139 0.492235 0.49233 0.492426 0.492522 0.492618 0.492714 0.49281 0.492906 0.493001 0.493097 0.493193 0.493289 0.493385 0.493481 0.493577 0.493672 0.493768 0.493864 0.49396 0.494056 0.494152 0.494248 0.494344 0.494439 0.494535 0.494631 0.494727 0.494823 0.494919 0.495015 0.495111 0.495206 0.495302 0.495398 0.495494 0.49559 0.495686 0.495782 0.495877 0.495973 0.496069 0.496165 0.496261 0.496357 0.496453 0.496549 0.496644 0.49674 0.496836 0.496932 0.497028 0.497124 0.49722 0.497316 0.497411 0.497507 0.497603 0.497699 0.497795 0.497891 0.497987 0.498083 0.498178 0.498274 0.49837 0.498466 0.498562 0.498658 0.498754 0.49885 0.498945 0.499041 0.499137 0.499233 0.499329 0.499425 0.499521 0.499617 0.499712 0.499808 0.499904 0.5 0.500096 0.500192 0.500288 0.500383 0.500479 0.500575 0.500671 0.500767 0.500863 0.500959 0.501055 0.50115 0.501246 0.501342 0.501438 0.501534 0.50163 0.501726 0.501822 0.501917 0.502013 0.502109 0.502205 0.502301 0.502397 0.502493 0.502589 0.502684 0.50278 0.502876 0.502972 0.503068 0.503164 0.50326 0.503356 0.503451 0.503547 0.503643 0.503739 0.503835 0.503931 0.504027 0.504123 0.504218 0.504314 0.50441 0.504506 0.504602 0.504698 0.504794 0.504889 0.504985 0.505081 0.505177 0.505273 0.505369 0.505465 0.505561 0.505656 0.505752 0.505848 0.505944 0.50604 0.506136 0.506232 0.506328 0.506423 0.506519 0.506615 0.506711 0.506807 0.506903 0.506999 0.507094 0.50719 0.507286 0.507382 0.507478 0.507574 0.50767 0.507765 0.507861 0.507957 0.508053 0.508149 0.508245 0.508341 0.508437 0.508532 0.508628 0.508724 0.50882 0.508916 0.509012 0.509108 0.509203 0.509299 0.509395 0.509491 0.509587 0.509683 0.509778 0.509874 0.50997 0.510066 0.510162 0.510258 0.510354 0.510449 0.510545 0.510641 0.510737 0.510833 0.510929 0.511025 0.51112 0.511216 0.511312 0.511408 0.511504 0.5116 0.511696 0.511791 0.511887 0.511983 0.512079 0.512175 0.512271 0.512366 0.512462 0.512558 0.512654 0.51275 0.512846 0.512942 0.513037 0.513133 0.513229 0.513325 0.513421 0.513517 0.513612 0.513708 0.513804 0.5139 0.513996 0.514092 0.514187 0.514283 0.514379 0.514475 0.514571 0.514667 0.514762 0.514858 0.514954 0.51505 0.515146 0.515242 0.515337 0.515433 0.515529 0.515625 0.515721 0.515817 0.515912 0.516008 0.516104 0.5162 0.516296 0.516391 0.516487 0.516583 0.516679 0.516775 0.516871 0.516966 0.517062 0.517158 0.517254 0.51735 0.517446 0.517541 0.517637 0.517733 0.517829 0.517925 0.51802 0.518116 0.518212 0.518308 0.518404 0.518499 0.518595 0.518691 0.518787 0.518883 0.518978 0.519074 0.51917 0.519266 0.519362 0.519457 0.519553 0.519649 0.519745 0.519841 0.519936 0.520032 0.520128 0.520224 0.52032 0.520415 0.520511 0.520607 0.520703 0.520799 0.520894 0.52099 0.521086 0.521182 0.521278 0.521373 0.521469 0.521565 0.521661 0.521756 0.521852 0.521948 0.522044 0.52214 0.522235 0.522331 0.522427 0.522523 0.522618 0.522714 0.52281 0.522906 0.523002 0.523097 0.523193 0.523289 0.523385 0.52348 0.523576 0.523672 0.523768 0.523863 0.523959 0.524055 0.524151 0.524247 0.524342 0.524438 0.524534 0.52463 0.524725 0.524821 0.524917 0.525013 0.525108 0.525204 0.5253 0.525396 0.525491 0.525587 0.525683 0.525779 0.525874 0.52597 0.526066 0.526162 0.526257 0.526353 0.526449 0.526545 0.52664 0.526736 0.526832 0.526928 0.527023 0.527119 0.527215 0.52731 0.527406 0.527502 0.527598 0.527693 0.527789 0.527885 0.527981 0.528076 0.528172 0.528268 0.528363 0.528459 0.528555 0.528651 0.528746 0.528842 0.528938 0.529033 0.529129 0.529225 0.529321 0.529416 0.529512 0.529608 0.529703 0.529799 0.529895 0.52999 0.530086 0.530182 0.530278 0.530373 0.530469 0.530565 0.53066 0.530756 0.530852 0.530947 0.531043 0.531139 0.531235 0.53133 0.531426 0.531522 0.531617 0.531713 0.531809 0.531904 0.532 0.532096 0.532191 0.532287 0.532383 0.532478 0.532574 0.53267 0.532765 0.532861 0.532957 0.533052 0.533148 0.533244 0.533339 0.533435 0.533531 0.533626 0.533722 0.533818 0.533913 0.534009 0.534105 0.5342 0.534296 0.534392 0.534487 0.534583 0.534678 0.534774 0.53487 0.534965 0.535061 0.535157 0.535252 0.535348 0.535444 0.535539 0.535635 0.53573 0.535826 0.535922 0.536017 0.536113 0.536209 0.536304 0.5364 0.536495 0.536591 0.536687 0.536782 0.536878 0.536974 0.537069 0.537165 0.53726 0.537356 0.537452 0.537547 0.537643 0.537738 0.537834 0.53793 0.538025 0.538121 0.538216 0.538312 0.538408 0.538503 0.538599 0.538694 0.53879 0.538885 0.538981 0.539077 0.539172 0.539268 0.539363 0.539459 0.539554 0.53965 0.539746 0.539841 0.539937 0.540032 0.540128 0.540223 0.540319 0.540415 0.54051 0.540606 0.540701 0.540797 0.540892 0.540988 0.541084 0.541179 0.541275 0.54137 0.541466 0.541561 0.541657 0.541752 0.541848 0.541943 0.542039 0.542134 0.54223 0.542325 0.542421 0.542517 0.542612 0.542708 0.542803 0.542899 0.542994 0.54309 0.543185 0.543281 0.543376 0.543472 0.543567 0.543663 0.543758 0.543854 0.543949 0.544045 0.54414 0.544236 0.544331 0.544427 0.544522 0.544618 0.544713 0.544809 0.544904 0.545 0.545095 0.545191 0.545286 0.545382 0.545477 0.545573 0.545668 0.545764 0.545859 0.545954 0.54605 0.546145 0.546241 0.546336 0.546432 0.546527 0.546623 0.546718 0.546814 0.546909 0.547005 0.5471 0.547195 0.547291 0.547386 0.547482 0.547577 0.547673 0.547768 0.547863 0.547959 0.548054 0.54815 0.548245 0.548341 0.548436 0.548531 0.548627 0.548722 0.548818 0.548913 0.549009 0.549104 0.549199 0.549295 0.54939 0.549486 0.549581 0.549676 0.549772 0.549867 0.549963 0.550058 0.550153 0.550249 0.550344 0.55044 0.550535 0.55063 0.550726 0.550821 0.550916 0.551012 0.551107 0.551203 0.551298 0.551393 0.551489 0.551584 0.551679 0.551775 0.55187 0.551965 0.552061 0.552156 0.552252 0.552347 0.552442 0.552538 0.552633 0.552728 0.552824 0.552919 0.553014 0.55311 0.553205 0.5533 0.553396 0.553491 0.553586 0.553682 0.553777 0.553872 0.553967 0.554063 0.554158 0.554253 0.554349 0.554444 0.554539 0.554635 0.55473 0.554825 0.55492 0.555016 0.555111 0.555206 0.555302 0.555397 0.555492 0.555588 0.555683 0.555778 0.555873 0.555969 0.556064 0.556159 0.556254 0.55635 0.556445 0.55654 0.556635 0.556731 0.556826 0.556921 0.557016 0.557112 0.557207 0.557302 0.557397 0.557493 0.557588 0.557683 0.557778 0.557874 0.557969 0.558064 0.558159 0.558255 0.55835 0.558445 0.55854 0.558635 0.558731 0.558826 0.558921 0.559016 0.559111 0.559207 0.559302 0.559397 0.559492 0.559587 0.559683 0.559778 0.559873 0.559968 0.560063 0.560159 0.560254 0.560349 0.560444 0.560539 0.560634 0.56073 0.560825 0.56092 0.561015 0.56111 0.561205 0.561301 0.561396 0.561491 0.561586 0.561681 0.561776 0.561871 0.561966 0.562062 0.562157 0.562252 0.562347 0.562442 0.562537 0.562632 0.562728 0.562823 0.562918 0.563013 0.563108 0.563203 0.563298 0.563393 0.563488 0.563583 0.563679 0.563774 0.563869 0.563964 0.564059 0.564154 0.564249 0.564344 0.564439 0.564534 0.564629 0.564724 0.56482 0.564915 0.56501 0.565105 0.5652 0.565295 0.56539 0.565485 0.56558 0.565675 0.56577 0.565865 0.56596 0.566055 0.56615 0.566245 0.56634 0.566435 0.56653 0.566625 0.56672 0.566815 0.56691 0.567005 0.5671 0.567195 0.56729 0.567385 0.56748 0.567575 0.56767 0.567765 0.56786 0.567955 0.56805 0.568145 0.56824 0.568335 0.56843 0.568525 0.56862 0.568715 0.56881 0.568905 0.569 0.569095 0.56919 0.569285 0.56938 0.569475 0.56957 0.569665 0.56976 0.569854 0.569949 0.570044 0.570139 0.570234 0.570329 0.570424 0.570519 0.570614 0.570709 0.570804 0.570899 0.570993 0.571088 0.571183 0.571278 0.571373 0.571468 0.571563 0.571658 0.571753 0.571847 0.571942 0.572037 0.572132 0.572227 0.572322 0.572417 0.572512 0.572606 0.572701 0.572796 0.572891 0.572986 0.573081 0.573176 0.57327 0.573365 0.57346 0.573555 0.57365 0.573745 0.573839 0.573934 0.574029 0.574124 0.574219 0.574313 0.574408 0.574503 0.574598 0.574693 0.574787 0.574882 0.574977 0.575072 0.575167 0.575261 0.575356 0.575451 0.575546 0.57564 0.575735 0.57583 0.575925 0.57602 0.576114 0.576209 0.576304 0.576399 0.576493 0.576588 0.576683 0.576778 0.576872 0.576967 0.577062 ; #A 9000 0.577156 0.577251 0.577346 0.577441 0.577535 0.57763 0.577725 0.577819 0.577914 0.578009 0.578104 0.578198 0.578293 0.578388 0.578482 0.578577 0.578672 0.578766 0.578861 0.578956 0.57905 0.579145 0.57924 0.579334 0.579429 0.579524 0.579618 0.579713 0.579808 0.579902 0.579997 0.580092 0.580186 0.580281 0.580375 0.58047 0.580565 0.580659 0.580754 0.580849 0.580943 0.581038 0.581132 0.581227 0.581322 0.581416 0.581511 0.581605 0.5817 0.581795 0.581889 0.581984 0.582078 0.582173 0.582267 0.582362 0.582457 0.582551 0.582646 0.58274 0.582835 0.582929 0.583024 0.583118 0.583213 0.583308 0.583402 0.583497 0.583591 0.583686 0.58378 0.583875 0.583969 0.584064 0.584158 0.584253 0.584347 0.584442 0.584536 0.584631 0.584725 0.58482 0.584914 0.585009 0.585103 0.585198 0.585292 0.585386 0.585481 0.585575 0.58567 0.585764 0.585859 0.585953 0.586048 0.586142 0.586237 0.586331 0.586425 0.58652 0.586614 0.586709 0.586803 0.586898 0.586992 0.587086 0.587181 0.587275 0.58737 0.587464 0.587558 0.587653 0.587747 0.587842 0.587936 0.58803 0.588125 0.588219 0.588313 0.588408 0.588502 0.588596 0.588691 0.588785 0.58888 0.588974 0.589068 0.589163 0.589257 0.589351 0.589446 0.58954 0.589634 0.589729 0.589823 0.589917 0.590011 0.590106 0.5902 0.590294 0.590389 0.590483 0.590577 0.590672 0.590766 0.59086 0.590954 0.591049 0.591143 0.591237 0.591331 0.591426 0.59152 0.591614 0.591708 0.591803 0.591897 0.591991 0.592085 0.59218 0.592274 0.592368 0.592462 0.592557 0.592651 0.592745 0.592839 0.592933 0.593028 0.593122 0.593216 0.59331 0.593404 0.593499 0.593593 0.593687 0.593781 0.593875 0.593969 0.594064 0.594158 0.594252 0.594346 0.59444 0.594534 0.594628 0.594723 0.594817 0.594911 0.595005 0.595099 0.595193 0.595287 0.595381 0.595476 0.59557 0.595664 0.595758 0.595852 0.595946 0.59604 0.596134 0.596228 0.596322 0.596417 0.596511 0.596605 0.596699 0.596793 0.596887 0.596981 0.597075 0.597169 0.597263 0.597357 0.597451 0.597545 0.597639 0.597733 0.597827 0.597921 0.598015 0.598109 0.598203 0.598297 0.598391 0.598485 0.598579 0.598673 0.598767 0.598861 0.598955 0.599049 0.599143 0.599237 0.599331 0.599425 0.599519 0.599613 0.599707 0.599801 0.599895 0.599989 0.600083 0.600177 0.600271 0.600365 0.600458 0.600552 0.600646 0.60074 0.600834 0.600928 0.601022 0.601116 0.60121 0.601304 0.601397 0.601491 0.601585 0.601679 0.601773 0.601867 0.601961 0.602054 0.602148 0.602242 0.602336 0.60243 0.602524 0.602618 0.602711 0.602805 0.602899 0.602993 0.603087 0.60318 0.603274 0.603368 0.603462 0.603556 0.603649 0.603743 0.603837 0.603931 0.604025 0.604118 0.604212 0.604306 0.6044 0.604493 0.604587 0.604681 0.604775 0.604868 0.604962 0.605056 0.60515 0.605243 0.605337 0.605431 0.605525 0.605618 0.605712 0.605806 0.605899 0.605993 0.606087 0.60618 0.606274 0.606368 0.606461 0.606555 0.606649 0.606743 0.606836 0.60693 0.607023 0.607117 0.607211 0.607304 0.607398 0.607492 0.607585 0.607679 0.607773 0.607866 0.60796 0.608053 0.608147 0.608241 0.608334 0.608428 0.608521 0.608615 0.608709 0.608802 0.608896 0.608989 0.609083 0.609176 0.60927 0.609363 0.609457 0.609551 0.609644 0.609738 0.609831 0.609925 0.610018 0.610112 0.610205 0.610299 0.610392 0.610486 0.610579 0.610673 0.610766 0.61086 0.610953 0.611047 0.61114 0.611234 0.611327 0.611421 0.611514 0.611608 0.611701 0.611795 0.611888 0.611981 0.612075 0.612168 0.612262 0.612355 0.612449 0.612542 0.612635 0.612729 0.612822 0.612916 0.613009 0.613102 0.613196 0.613289 0.613383 0.613476 0.613569 0.613663 0.613756 0.613849 0.613943 0.614036 0.614129 0.614223 0.614316 0.614409 0.614503 0.614596 0.614689 0.614783 0.614876 0.614969 0.615063 0.615156 0.615249 0.615342 0.615436 0.615529 0.615622 0.615716 0.615809 0.615902 0.615995 0.616089 0.616182 0.616275 0.616368 0.616462 0.616555 0.616648 0.616741 0.616835 0.616928 0.617021 0.617114 0.617207 0.617301 0.617394 0.617487 0.61758 0.617673 0.617767 0.61786 0.617953 0.618046 0.618139 0.618232 0.618326 0.618419 0.618512 0.618605 0.618698 0.618791 0.618884 0.618977 0.619071 0.619164 0.619257 0.61935 0.619443 0.619536 0.619629 0.619722 0.619815 0.619908 0.620001 0.620095 0.620188 0.620281 0.620374 0.620467 0.62056 0.620653 0.620746 0.620839 0.620932 0.621025 0.621118 0.621211 0.621304 0.621397 0.62149 0.621583 0.621676 0.621769 0.621862 0.621955 0.622048 0.622141 0.622234 0.622327 0.62242 0.622513 0.622606 0.622699 0.622792 0.622885 0.622978 0.62307 0.623163 0.623256 0.623349 0.623442 0.623535 0.623628 0.623721 0.623814 0.623907 0.623999 0.624092 0.624185 0.624278 0.624371 0.624464 0.624557 0.62465 0.624742 0.624835 0.624928 0.625021 0.625114 0.625207 0.625299 0.625392 0.625485 0.625578 0.625671 0.625763 0.625856 0.625949 0.626042 0.626134 0.626227 0.62632 0.626413 0.626505 0.626598 0.626691 0.626784 0.626876 0.626969 0.627062 0.627155 0.627247 0.62734 0.627433 0.627526 0.627618 0.627711 0.627804 0.627896 0.627989 0.628082 0.628174 0.628267 0.62836 0.628452 0.628545 0.628638 0.62873 0.628823 0.628916 0.629008 0.629101 0.629193 0.629286 0.629379 0.629471 0.629564 0.629656 0.629749 0.629842 0.629934 0.630027 0.630119 0.630212 0.630305 0.630397 0.63049 0.630582 0.630675 0.630767 0.63086 0.630952 0.631045 0.631137 0.63123 0.631322 0.631415 0.631507 0.6316 0.631692 0.631785 0.631877 0.63197 0.632062 0.632155 0.632247 0.63234 0.632432 0.632525 0.632617 0.632709 0.632802 0.632894 0.632987 0.633079 0.633172 0.633264 0.633356 0.633449 0.633541 0.633634 0.633726 0.633818 0.633911 0.634003 0.634095 0.634188 0.63428 0.634372 0.634465 0.634557 0.63465 0.634742 0.634834 0.634926 0.635019 0.635111 0.635203 0.635296 0.635388 0.63548 0.635573 0.635665 0.635757 0.635849 0.635942 0.636034 0.636126 0.636218 0.636311 0.636403 0.636495 0.636587 0.63668 0.636772 0.636864 0.636956 0.637048 0.637141 0.637233 0.637325 0.637417 0.637509 0.637602 0.637694 0.637786 0.637878 0.63797 0.638062 0.638155 0.638247 0.638339 0.638431 0.638523 0.638615 0.638707 0.638799 0.638891 0.638984 0.639076 0.639168 0.63926 0.639352 0.639444 0.639536 0.639628 0.63972 0.639812 0.639904 0.639996 0.640088 0.64018 0.640272 0.640364 0.640456 0.640548 0.64064 0.640732 0.640824 0.640916 0.641008 0.6411 0.641192 0.641284 0.641376 0.641468 0.64156 0.641652 0.641744 0.641836 0.641928 0.64202 0.642112 0.642204 0.642296 0.642388 0.642479 0.642571 0.642663 0.642755 0.642847 0.642939 0.643031 0.643123 0.643215 0.643306 0.643398 0.64349 0.643582 0.643674 0.643766 0.643857 0.643949 0.644041 0.644133 0.644225 0.644316 0.644408 0.6445 0.644592 0.644684 0.644775 0.644867 0.644959 0.645051 0.645142 0.645234 0.645326 0.645418 0.645509 0.645601 0.645693 0.645784 0.645876 0.645968 0.64606 0.646151 0.646243 0.646335 0.646426 0.646518 0.64661 0.646701 0.646793 0.646885 0.646976 0.647068 0.647159 0.647251 0.647343 0.647434 0.647526 0.647618 0.647709 0.647801 0.647892 0.647984 0.648075 0.648167 0.648259 0.64835 0.648442 0.648533 0.648625 0.648716 0.648808 0.648899 0.648991 0.649082 0.649174 0.649265 0.649357 0.649448 0.64954 0.649631 0.649723 0.649814 0.649906 0.649997 0.650089 0.65018 0.650272 0.650363 0.650455 0.650546 0.650637 0.650729 0.65082 0.650912 0.651003 0.651094 0.651186 0.651277 0.651368 0.65146 0.651551 0.651643 0.651734 0.651825 0.651917 0.652008 0.652099 0.652191 0.652282 0.652373 0.652465 0.652556 0.652647 0.652739 0.65283 0.652921 0.653012 0.653104 0.653195 0.653286 0.653377 0.653469 0.65356 0.653651 0.653742 0.653834 0.653925 0.654016 0.654107 0.654198 0.65429 0.654381 0.654472 0.654563 0.654654 0.654746 0.654837 0.654928 0.655019 0.65511 0.655201 0.655292 0.655384 0.655475 0.655566 0.655657 0.655748 0.655839 0.65593 0.656021 0.656112 0.656204 0.656295 0.656386 0.656477 0.656568 0.656659 0.65675 0.656841 0.656932 0.657023 0.657114 0.657205 0.657296 0.657387 0.657478 0.657569 0.65766 0.657751 0.657842 0.657933 0.658024 0.658115 0.658206 0.658297 0.658388 0.658479 0.65857 0.65866 0.658751 0.658842 0.658933 0.659024 0.659115 0.659206 0.659297 0.659388 0.659478 0.659569 0.65966 0.659751 0.659842 0.659933 0.660024 0.660114 0.660205 0.660296 0.660387 0.660478 0.660568 0.660659 0.66075 0.660841 0.660932 0.661022 0.661113 0.661204 0.661295 0.661385 0.661476 0.661567 0.661658 0.661748 0.661839 0.66193 0.66202 0.662111 0.662202 0.662292 0.662383 0.662474 0.662564 0.662655 0.662746 0.662836 0.662927 0.663018 0.663108 0.663199 0.66329 0.66338 0.663471 0.663561 0.663652 0.663743 0.663833 0.663924 0.664014 0.664105 0.664195 0.664286 0.664377 0.664467 0.664558 0.664648 0.664739 0.664829 0.66492 0.66501 0.665101 0.665191 0.665282 0.665372 0.665463 0.665553 0.665644 0.665734 0.665825 0.665915 0.666005 0.666096 0.666186 0.666277 0.666367 0.666458 0.666548 0.666638 0.666729 0.666819 0.666909 0.667 0.66709 0.667181 0.667271 0.667361 0.667452 0.667542 0.667632 0.667723 0.667813 0.667903 0.667993 0.668084 0.668174 0.668264 0.668355 0.668445 0.668535 0.668625 0.668716 0.668806 0.668896 0.668986 0.669077 0.669167 0.669257 0.669347 0.669438 0.669528 0.669618 0.669708 0.669798; #A 10000 0.669888 0.669979 0.670069 0.670159 0.670249 0.670339 0.670429 0.670519 0.67061 0.6707 0.67079 0.67088 0.67097 0.67106 0.67115 0.67124 0.67133 0.67142 0.67151 0.671601 0.671691 0.671781 0.671871 0.671961 0.672051 0.672141 0.672231 0.672321 0.672411 0.672501 0.672591 0.672681 0.672771 0.672861 0.672951 0.673041 0.673131 0.67322 0.67331 0.6734 0.67349 0.67358 0.67367 0.67376 0.67385 0.67394 0.67403 0.674119 0.674209 0.674299 0.674389 0.674479 0.674569 0.674659 0.674748 0.674838 0.674928 0.675018 0.675108 0.675197 0.675287 0.675377 0.675467 0.675557 0.675646 0.675736 0.675826 0.675916 0.676005 0.676095 0.676185 0.676275 0.676364 0.676454 0.676544 0.676633 0.676723 0.676813 0.676902 0.676992 0.677082 0.677171 0.677261 0.677351 0.67744 0.67753 0.67762 0.677709 0.677799 0.677888 0.677978 0.678068 0.678157 0.678247 0.678336 0.678426 0.678515 0.678605 0.678695 0.678784 0.678874 0.678963 0.679053 0.679142 0.679232 0.679321 0.679411 0.6795 0.67959 0.679679 0.679769 0.679858 0.679947 0.680037 0.680126 0.680216 0.680305 0.680395 0.680484 0.680574 0.680663 0.680752 0.680842 0.680931 0.68102 0.68111 0.681199 0.681289 0.681378 0.681467 0.681557 0.681646 0.681735 0.681825 0.681914 0.682003 0.682092 0.682182 0.682271 0.68236 0.68245 0.682539 0.682628 0.682717 0.682806 0.682896 0.682985 0.683074 0.683163 0.683253 0.683342 0.683431 0.68352 0.683609 0.683699 0.683788 0.683877 0.683966 0.684055 0.684144 0.684233 0.684323 0.684412 0.684501 0.68459 0.684679 0.684768 0.684857 0.684946 0.685035 0.685124 0.685213 0.685302 0.685391 0.685481 0.68557 0.685659 0.685748 0.685837 0.685926 0.686015 0.686104 0.686193 0.686282 0.686371 0.686459 0.686548 0.686637 0.686726 0.686815 0.686904 0.686993 0.687082 0.687171 0.68726 0.687349 0.687438 0.687527 0.687615 0.687704 0.687793 0.687882 0.687971 0.68806 0.688148 0.688237 0.688326 0.688415 0.688504 0.688592 0.688681 0.68877 0.688859 0.688948 0.689036 0.689125 0.689214 0.689303 0.689391 0.68948 0.689569 0.689658 0.689746 0.689835 0.689924 0.690012 0.690101 0.69019 0.690278 0.690367 0.690456 0.690544 0.690633 0.690722 0.69081 0.690899 0.690987 0.691076 0.691165 0.691253 0.691342 0.69143 0.691519 0.691607 0.691696 0.691785 0.691873 0.691962 0.69205 0.692139 0.692227 0.692316 0.692404 0.692493 0.692581 0.69267 0.692758 0.692846 0.692935 0.693023 0.693112 0.6932 0.693289 0.693377 0.693466 0.693554 0.693642 0.693731 0.693819 0.693907 0.693996 0.694084 0.694173 0.694261 0.694349 0.694438 0.694526 0.694614 0.694703 0.694791 0.694879 0.694967 0.695056 0.695144 0.695232 0.69532 0.695409 0.695497 0.695585 0.695673 0.695762 0.69585 0.695938 0.696026 0.696114 0.696203 0.696291 0.696379 0.696467 0.696555 0.696643 0.696732 0.69682 0.696908 0.696996 0.697084 0.697172 0.69726 0.697348 0.697437 0.697525 0.697613 0.697701 0.697789 0.697877 0.697965 0.698053 0.698141 0.698229 0.698317 0.698405 0.698493 0.698581 0.698669 0.698757 0.698845 0.698933 0.699021 0.699109 0.699197 0.699285 0.699373 0.699461 0.699548 0.699636 0.699724 0.699812 0.6999 0.699988 0.700076 0.700164 0.700251 0.700339 0.700427 0.700515 0.700603 0.700691 0.700778 0.700866 0.700954 0.701042 0.70113 0.701217 0.701305 0.701393 0.701481 0.701568 0.701656 0.701744 0.701832 0.701919 0.702007 0.702095 0.702182 0.70227 0.702358 0.702445 0.702533 0.702621 0.702708 0.702796 0.702884 0.702971 0.703059 0.703146 0.703234 0.703322 0.703409 0.703497 0.703584 0.703672 0.703759 0.703847 0.703935 0.704022 0.70411 0.704197 0.704285 0.704372 0.70446 0.704547 0.704635 0.704722 0.70481 0.704897 0.704984 0.705072 0.705159 0.705247 0.705334 0.705422 0.705509 0.705596 0.705684 0.705771 0.705859 0.705946 0.706033 0.706121 0.706208 0.706295 0.706383 0.70647 0.706557 0.706645 0.706732 0.706819 0.706906 0.706994 0.707081 0.707168 0.707255 0.707343 0.70743 0.707517 0.707604 0.707692 0.707779 0.707866 0.707953 0.70804 0.708128 0.708215 0.708302 0.708389 0.708476 0.708563 0.708651 0.708738 0.708825 0.708912 0.708999 0.709086 0.709173 0.70926 0.709347 0.709434 0.709521 0.709608 0.709695 0.709783 0.70987 0.709957 0.710044 0.710131 0.710218 0.710305 0.710392 0.710478 0.710565 0.710652 0.710739 0.710826 0.710913 0.711 0.711087 0.711174 0.711261 0.711348 0.711435 0.711522 0.711608 0.711695 0.711782 0.711869 0.711956 0.712043 0.712129 0.712216 0.712303 0.71239 0.712477 0.712563 0.71265 0.712737 0.712824 0.71291 0.712997 0.713084 0.713171 0.713257 0.713344 0.713431 0.713517 0.713604 0.713691 0.713778 0.713864 0.713951 0.714038 0.714124 0.714211 0.714297 0.714384 0.714471 0.714557 0.714644 0.71473 0.714817 0.714904 0.71499 0.715077 0.715163 0.71525 0.715336 0.715423 0.715509 0.715596 0.715682 0.715769 0.715855 0.715942 0.716028 0.716115 0.716201 0.716288 0.716374 0.71646 0.716547 0.716633 0.71672 0.716806 0.716892 0.716979 0.717065 0.717152 0.717238 0.717324 0.717411 0.717497 0.717583 0.71767 0.717756 0.717842 0.717929 0.718015 0.718101 0.718187 0.718274 0.71836 0.718446 0.718532 0.718619 0.718705 0.718791 0.718877 0.718963 0.71905 0.719136 0.719222 0.719308 0.719394 0.71948 0.719567 0.719653 0.719739 0.719825 0.719911 0.719997 0.720083 0.720169 0.720255 0.720341 0.720428 0.720514 0.7206 0.720686 0.720772 0.720858 0.720944 0.72103 0.721116 0.721202 0.721288 0.721374 0.72146 0.721546 0.721631 0.721717 0.721803 0.721889 0.721975 0.722061 0.722147 0.722233 0.722319 0.722405 0.72249 0.722576 0.722662 0.722748 0.722834 0.72292 0.723005 0.723091 0.723177 0.723263 0.723349 0.723434 0.72352 0.723606 0.723692 0.723777 0.723863 0.723949 0.724035 0.72412 0.724206 0.724292 0.724377 0.724463 0.724549 0.724634 0.72472 0.724806 0.724891 0.724977 0.725063 0.725148 0.725234 0.725319 0.725405 0.725491 0.725576 0.725662 0.725747 0.725833 0.725918 0.726004 0.726089 0.726175 0.72626 0.726346 0.726431 0.726517 0.726602 0.726688 0.726773 0.726859 0.726944 0.727029 0.727115 0.7272 0.727286 0.727371 0.727456 0.727542 0.727627 0.727713 0.727798 0.727883 0.727969 0.728054 0.728139 0.728225 0.72831 0.728395 0.72848 0.728566 0.728651 0.728736 0.728821 0.728907 0.728992 0.729077 0.729162 0.729248 0.729333 0.729418 0.729503 0.729588 0.729673 0.729759 0.729844 0.729929 0.730014 0.730099 0.730184 0.730269 0.730354 0.73044 0.730525 0.73061 0.730695 0.73078 0.730865 0.73095 0.731035 0.73112 0.731205 0.73129 0.731375 0.73146 0.731545 0.73163 0.731715 0.7318 0.731885 0.73197 0.732055 0.73214 0.732224 0.732309 0.732394 0.732479 0.732564 0.732649 0.732734 0.732819 0.732903 0.732988 0.733073 0.733158 0.733243 0.733328 0.733412 0.733497 0.733582 0.733667 0.733751 0.733836 0.733921 0.734006 0.73409 0.734175 0.73426 0.734344 0.734429 0.734514 0.734598 0.734683 0.734768 0.734852 0.734937 0.735022 0.735106 0.735191 0.735276 0.73536 0.735445 0.735529 0.735614 0.735698 0.735783 0.735867 0.735952 0.736037 0.736121 0.736206 0.73629 0.736374 0.736459 0.736543 0.736628 0.736712 0.736797 0.736881 0.736966 0.73705 0.737135 0.737219 0.737303 0.737388 0.737472 0.737556 0.737641 0.737725 0.737809 0.737894 0.737978 0.738062 0.738147 0.738231 0.738315 0.7384 0.738484 0.738568 0.738652 0.738737 0.738821 0.738905 0.738989 0.739074 0.739158 0.739242 0.739326 0.73941 0.739494 0.739579 0.739663 0.739747 0.739831 0.739915 0.739999 0.740083 0.740167 0.740252 0.740336 0.74042 0.740504 0.740588 0.740672 0.740756 0.74084 0.740924 0.741008 0.741092 0.741176 0.74126 0.741344 0.741428 0.741512 0.741596 0.74168 0.741764 0.741847 0.741931 0.742015 0.742099 0.742183 0.742267 0.742351 0.742435 0.742518 0.742602 0.742686 0.74277 0.742854 0.742938 0.743021 0.743105 0.743189 0.743273 0.743356 0.74344 0.743524 0.743608 0.743691 0.743775 0.743859 0.743942 0.744026 0.74411 0.744193 0.744277 0.744361 0.744444 0.744528 0.744612 0.744695 0.744779 0.744862 0.744946 0.74503 0.745113 0.745197 0.74528 0.745364 0.745447 0.745531 0.745614 0.745698 0.745781 0.745865 0.745948 0.746032 0.746115 0.746199 0.746282 0.746366 0.746449 0.746532 0.746616 0.746699 0.746783 0.746866 0.746949 0.747033 0.747116 0.747199 0.747283 0.747366 0.747449 0.747533 0.747616 0.747699 0.747783 0.747866 0.747949 0.748032 0.748116 0.748199 0.748282 0.748365 0.748449 0.748532 0.748615 0.748698 0.748781 0.748864 0.748948 0.749031 0.749114 0.749197 0.74928 0.749363 0.749446 0.749529 0.749612 0.749695 0.749779 0.749862 0.749945 0.750028 0.750111 0.750194 0.750277 0.75036 0.750443 0.750526 0.750609 0.750692 0.750775 0.750857 0.75094 0.751023 0.751106 0.751189 0.751272 0.751355 0.751438 0.751521 0.751603 0.751686 0.751769 0.751852 0.751935 0.752018 0.7521 0.752183 0.752266 0.752349 0.752432 0.752514 0.752597 0.75268 0.752762 0.752845 0.752928 0.753011 0.753093 0.753176 0.753259 0.753341 0.753424 0.753507 0.753589 0.753672 0.753754 0.753837 0.75392 0.754002 0.754085 0.754167 0.75425 0.754333 0.754415 0.754498 0.75458 0.754663 0.754745 0.754828 0.75491 0.754993 0.755075 0.755158 0.75524 0.755322 0.755405 0.755487 0.75557 0.755652 0.755734 0.755817 0.755899 0.755982 0.756064 0.756146 0.756229 0.756311; #A 11000 0.756393 0.756476 0.756558 0.75664 0.756722 0.756805 0.756887 0.756969 0.757051 0.757134 0.757216 0.757298 0.75738 0.757462 0.757545 0.757627 0.757709 0.757791 0.757873 0.757955 0.758038 0.75812 0.758202 0.758284 0.758366 0.758448 0.75853 0.758612 0.758694 0.758776 0.758858 0.75894 0.759022 0.759104 0.759186 0.759268 0.75935 0.759432 0.759514 0.759596 0.759678 0.75976 0.759842 0.759924 0.760006 0.760088 0.760169 0.760251 0.760333 0.760415 0.760497 0.760579 0.76066 0.760742 0.760824 0.760906 0.760988 0.761069 0.761151 0.761233 0.761315 0.761396 0.761478 0.76156 0.761642 0.761723 0.761805 0.761887 0.761968 0.76205 0.762132 0.762213 0.762295 0.762376 0.762458 0.76254 0.762621 0.762703 0.762784 0.762866 0.762947 0.763029 0.763111 0.763192 0.763274 0.763355 0.763437 0.763518 0.7636 0.763681 0.763762 0.763844 0.763925 0.764007 0.764088 0.76417 0.764251 0.764332 0.764414 0.764495 0.764576 0.764658 0.764739 0.764821 0.764902 0.764983 0.765064 0.765146 0.765227 0.765308 0.76539 0.765471 0.765552 0.765633 0.765714 0.765796 0.765877 0.765958 0.766039 0.76612 0.766202 0.766283 0.766364 0.766445 0.766526 0.766607 0.766688 0.766769 0.76685 0.766932 0.767013 0.767094 0.767175 0.767256 0.767337 0.767418 0.767499 0.76758 0.767661 0.767742 0.767823 0.767904 0.767985 0.768066 0.768147 0.768227 0.768308 0.768389 0.76847 0.768551 0.768632 0.768713 0.768794 0.768874 0.768955 0.769036 0.769117 0.769198 0.769278 0.769359 0.76944 0.769521 0.769601 0.769682 0.769763 0.769844 0.769924 0.770005 0.770086 0.770166 0.770247 0.770328 0.770408 0.770489 0.77057 0.77065 0.770731 0.770811 0.770892 0.770973 0.771053 0.771134 0.771214 0.771295 0.771375 0.771456 0.771536 0.771617 0.771697 0.771778 0.771858 0.771939 0.772019 0.7721 0.77218 0.772261 0.772341 0.772421 0.772502 0.772582 0.772663 0.772743 0.772823 0.772904 0.772984 0.773064 0.773144 0.773225 0.773305 0.773385 0.773466 0.773546 0.773626 0.773706 0.773787 0.773867 0.773947 0.774027 0.774107 0.774188 0.774268 0.774348 0.774428 0.774508 0.774588 0.774668 0.774749 0.774829 0.774909 0.774989 0.775069 0.775149 0.775229 0.775309 0.775389 0.775469 0.775549 0.775629 0.775709 0.775789 0.775869 0.775949 0.776029 0.776109 0.776189 0.776269 0.776349 0.776428 0.776508 0.776588 0.776668 0.776748 0.776828 0.776908 0.776987 0.777067 0.777147 0.777227 0.777307 0.777386 0.777466 0.777546 0.777626 0.777705 0.777785 0.777865 0.777945 0.778024 0.778104 0.778184 0.778263 0.778343 0.778423 0.778502 0.778582 0.778661 0.778741 0.778821 0.7789 0.77898 0.779059 0.779139 0.779218 0.779298 0.779377 0.779457 0.779536 0.779616 0.779695 0.779775 0.779854 0.779934 0.780013 0.780093 0.780172 0.780251 0.780331 0.78041 0.78049 0.780569 0.780648 0.780728 0.780807 0.780886 0.780966 0.781045 0.781124 0.781203 0.781283 0.781362 0.781441 0.78152 0.7816 0.781679 0.781758 0.781837 0.781916 0.781996 0.782075 0.782154 0.782233 0.782312 0.782391 0.78247 0.78255 0.782629 0.782708 0.782787 0.782866 0.782945 0.783024 0.783103 0.783182 0.783261 0.78334 0.783419 0.783498 0.783577 0.783656 0.783735 0.783814 0.783893 0.783972 0.784051 0.78413 0.784208 0.784287 0.784366 0.784445 0.784524 0.784603 0.784681 0.78476 0.784839 0.784918 0.784997 0.785075 0.785154 0.785233 0.785312 0.78539 0.785469 0.785548 0.785626 0.785705 0.785784 0.785863 0.785941 0.78602 0.786098 0.786177 0.786256 0.786334 0.786413 0.786491 0.78657 0.786649 0.786727 0.786806 0.786884 0.786963 0.787041 0.78712 0.787198 0.787277 0.787355 0.787434 0.787512 0.78759 0.787669 0.787747 0.787826 0.787904 0.787982 0.788061 0.788139 0.788218 0.788296 0.788374 0.788453 0.788531 0.788609 0.788687 0.788766 0.788844 0.788922 0.789 0.789079 0.789157 0.789235 0.789313 0.789392 0.78947 0.789548 0.789626 0.789704 0.789782 0.78986 0.789939 0.790017 0.790095 0.790173 0.790251 0.790329 0.790407 0.790485 0.790563 0.790641 0.790719 0.790797 0.790875 0.790953 0.791031 0.791109 0.791187 0.791265 0.791343 0.791421 0.791499 0.791576 0.791654 0.791732 0.79181 0.791888 0.791966 0.792044 0.792121 0.792199 0.792277 0.792355 0.792433 0.79251 0.792588 0.792666 0.792744 0.792821 0.792899 0.792977 0.793054 0.793132 0.79321 0.793287 0.793365 0.793443 0.79352 0.793598 0.793675 0.793753 0.793831 0.793908 0.793986 0.794063 0.794141 0.794218 0.794296 0.794373 0.794451 0.794528 0.794606 0.794683 0.794761 0.794838 0.794915 0.794993 0.79507 0.795148 0.795225 0.795303 0.79538 0.795457 0.795535 0.795612 0.795689 0.795766 0.795844 0.795921 0.795998 0.796076 0.796153 0.79623 0.796307 0.796385 0.796462 0.796539 0.796616 0.796693 0.796771 0.796848 0.796925 0.797002 0.797079 0.797156 0.797233 0.79731 0.797387 0.797464 0.797542 0.797619 0.797696 0.797773 0.79785 0.797927 0.798004 0.798081 0.798158 0.798235 0.798311 0.798388 0.798465 0.798542 0.798619 0.798696 0.798773 0.79885 0.798927 0.799004 0.79908 0.799157 0.799234 0.799311 0.799388 0.799464 0.799541 0.799618 0.799695 0.799771 0.799848 0.799925 0.800002 0.800078 0.800155 0.800232 0.800308 0.800385 0.800462 0.800538 0.800615 0.800691 0.800768 0.800845 0.800921 0.800998 0.801074 0.801151 0.801227 0.801304 0.80138 0.801457 0.801533 0.80161 0.801686 0.801763 0.801839 0.801916 0.801992 0.802068 0.802145 0.802221 0.802298 0.802374 0.80245 0.802527 0.802603 0.802679 0.802756 0.802832 0.802908 0.802984 0.803061 0.803137 0.803213 0.803289 0.803366 0.803442 0.803518 0.803594 0.80367 0.803746 0.803823 0.803899 0.803975 0.804051 0.804127 0.804203 0.804279 0.804355 0.804431 0.804507 0.804583 0.80466 0.804736 0.804812 0.804888 0.804964 0.80504 0.805115 0.805191 0.805267 0.805343 0.805419 0.805495 0.805571 0.805647 0.805723 0.805799 0.805874 0.80595 0.806026 0.806102 0.806178 0.806253 0.806329 0.806405 0.806481 0.806557 0.806632 0.806708 0.806784 0.806859 0.806935 0.807011 0.807086 0.807162 0.807238 0.807313 0.807389 0.807465 0.80754 0.807616 0.807691 0.807767 0.807842 0.807918 0.807994 0.808069 0.808145 0.80822 0.808296 0.808371 0.808447 0.808522 0.808597 0.808673 0.808748 0.808824 0.808899 0.808974 0.80905 0.809125 0.809201 0.809276 0.809351 0.809426 0.809502 0.809577 0.809652 0.809728 0.809803 0.809878 0.809953 0.810029 0.810104 0.810179 0.810254 0.810329 0.810405 0.81048 0.810555 0.81063 0.810705 0.81078 0.810855 0.81093 0.811005 0.811081 0.811156 0.811231 0.811306 0.811381 0.811456 0.811531 0.811606 0.811681 0.811756 0.811831 0.811906 0.81198 0.812055 0.81213 0.812205 0.81228 0.812355 0.81243 0.812505 0.812579 0.812654 0.812729 0.812804 0.812879 0.812953 0.813028 0.813103 0.813178 0.813252 0.813327 0.813402 0.813477 0.813551 0.813626 0.813701 0.813775 0.81385 0.813924 0.813999 0.814074 0.814148 0.814223 0.814297 0.814372 0.814447 0.814521 0.814596 0.81467 0.814745 0.814819 0.814894 0.814968 0.815042 0.815117 0.815191 0.815266 0.81534 0.815415 0.815489 0.815563 0.815638 0.815712 0.815786 0.815861 0.815935 0.816009 0.816084 0.816158 0.816232 0.816306 0.816381 0.816455 0.816529 0.816603 0.816678 0.816752 0.816826 0.8169 0.816974 0.817048 0.817123 0.817197 0.817271 0.817345 0.817419 0.817493 0.817567 0.817641 0.817715 0.817789 0.817863 0.817937 0.818011 0.818085 0.818159 0.818233 0.818307 0.818381 0.818455 0.818529 0.818603 0.818677 0.81875 0.818824 0.818898 0.818972 0.819046 0.81912 0.819193 0.819267 0.819341 0.819415 0.819488 0.819562 0.819636 0.81971 0.819783 0.819857 0.819931 0.820004 0.820078 0.820152 0.820225 0.820299 0.820373 0.820446 0.82052 0.820593 0.820667 0.820741 0.820814 0.820888 0.820961 0.821035 0.821108 0.821182 0.821255 0.821329 0.821402 0.821475 0.821549 0.821622 0.821696 0.821769 0.821842 0.821916 0.821989 0.822062 0.822136 0.822209 0.822282 0.822356 0.822429 0.822502 0.822576 0.822649 0.822722 0.822795 0.822868 0.822942 0.823015 0.823088 0.823161 0.823234 0.823307 0.823381 0.823454 0.823527 0.8236 0.823673 0.823746 0.823819 0.823892 0.823965 0.824038 0.824111 0.824184 0.824257 0.82433 0.824403 0.824476 0.824549 0.824622 0.824695 0.824768 0.824841 0.824914 0.824986 0.825059 0.825132 0.825205 0.825278 0.825351 0.825423 0.825496 0.825569 0.825642 0.825714 0.825787 0.82586 0.825933 0.826005 0.826078 0.826151 0.826223 0.826296 0.826369 0.826441 0.826514 0.826586 0.826659 0.826732 0.826804 0.826877 0.826949 0.827022 0.827094 0.827167 0.827239 0.827312 0.827384 0.827457 0.827529 0.827602 0.827674 0.827746 0.827819 0.827891 0.827964 0.828036 0.828108 0.828181 0.828253 0.828325 0.828398 0.82847 0.828542 0.828614 0.828687 0.828759 0.828831 0.828903 0.828976 0.829048 0.82912 0.829192 0.829264 0.829336 0.829409 0.829481 0.829553 0.829625 0.829697 0.829769 0.829841 0.829913 0.829985 0.830057 0.830129 0.830201 0.830273 0.830345 0.830417 0.830489 0.830561 0.830633 0.830705 0.830777 0.830849 0.830921 0.830992 0.831064 0.831136 0.831208 0.83128 0.831352 0.831423 0.831495 0.831567 0.831639 0.83171 0.831782 0.831854 0.831926 0.831997 0.832069 0.832141 0.832212 0.832284 0.832355 0.832427 0.832499 0.83257 0.832642 0.832713 0.832785 0.832857 0.832928 0.833 0.833071 0.833143 0.833214 0.833286 0.833357 0.833429; #A 12000 0.8335 0.833571 0.833643 0.833714 0.833786 0.833857 0.833928 0.834 0.834071 0.834142 0.834214 0.834285 0.834356 0.834428 0.834499 0.83457 0.834641 0.834713 0.834784 0.834855 0.834926 0.834997 0.835068 0.83514 0.835211 0.835282 0.835353 0.835424 0.835495 0.835566 0.835637 0.835708 0.835779 0.835851 0.835922 0.835993 0.836064 0.836134 0.836205 0.836276 0.836347 0.836418 0.836489 0.83656 0.836631 0.836702 0.836773 0.836844 0.836914 0.836985 0.837056 0.837127 0.837198 0.837269 0.837339 0.83741 0.837481 0.837552 0.837622 0.837693 0.837764 0.837834 0.837905 0.837976 0.838046 0.838117 0.838188 0.838258 0.838329 0.838399 0.83847 0.838541 0.838611 0.838682 0.838752 0.838823 0.838893 0.838964 0.839034 0.839105 0.839175 0.839245 0.839316 0.839386 0.839457 0.839527 0.839597 0.839668 0.839738 0.839809 0.839879 0.839949 0.840019 0.84009 0.84016 0.84023 0.840301 0.840371 0.840441 0.840511 0.840581 0.840652 0.840722 0.840792 0.840862 0.840932 0.841002 0.841072 0.841143 0.841213 0.841283 0.841353 0.841423 0.841493 0.841563 0.841633 0.841703 0.841773 0.841843 0.841913 0.841983 0.842053 0.842123 0.842192 0.842262 0.842332 0.842402 0.842472 0.842542 0.842612 0.842681 0.842751 0.842821 0.842891 0.842961 0.84303 0.8431 0.84317 0.84324 0.843309 0.843379 0.843449 0.843518 0.843588 0.843658 0.843727 0.843797 0.843867 0.843936 0.844006 0.844075 0.844145 0.844214 0.844284 0.844353 0.844423 0.844492 0.844562 0.844631 0.844701 0.84477 0.84484 0.844909 0.844979 0.845048 0.845117 0.845187 0.845256 0.845325 0.845395 0.845464 0.845533 0.845603 0.845672 0.845741 0.84581 0.84588 0.845949 0.846018 0.846087 0.846156 0.846226 0.846295 0.846364 0.846433 0.846502 0.846571 0.84664 0.846709 0.846779 0.846848 0.846917 0.846986 0.847055 0.847124 0.847193 0.847262 0.847331 0.8474 0.847469 0.847538 0.847606 0.847675 0.847744 0.847813 0.847882 0.847951 0.84802 0.848089 0.848157 0.848226 0.848295 0.848364 0.848433 0.848501 0.84857 0.848639 0.848707 0.848776 0.848845 0.848914 0.848982 0.849051 0.849119 0.849188 0.849257 0.849325 0.849394 0.849463 0.849531 0.8496 0.849668 0.849737 0.849805 0.849874 0.849942 0.850011 0.850079 0.850148 0.850216 0.850284 0.850353 0.850421 0.85049 0.850558 0.850626 0.850695 0.850763 0.850831 0.8509 0.850968 0.851036 0.851104 0.851173 0.851241 0.851309 0.851377 0.851446 0.851514 0.851582 0.85165 0.851718 0.851786 0.851855 0.851923 0.851991 0.852059 0.852127 0.852195 0.852263 0.852331 0.852399 0.852467 0.852535 0.852603 0.852671 0.852739 0.852807 0.852875 0.852943 0.853011 0.853079 0.853146 0.853214 0.853282 0.85335 0.853418 0.853486 0.853553 0.853621 0.853689 0.853757 0.853824 0.853892 0.85396 0.854028 0.854095 0.854163 0.854231 0.854298 0.854366 0.854434 0.854501 0.854569 0.854636 0.854704 0.854772 0.854839 0.854907 0.854974 0.855042 0.855109 0.855177 0.855244 0.855312 0.855379 0.855447 0.855514 0.855581 0.855649 0.855716 0.855783 0.855851 0.855918 0.855986 0.856053 0.85612 0.856187 0.856255 0.856322 0.856389 0.856456 0.856524 0.856591 0.856658 0.856725 0.856792 0.85686 0.856927 0.856994 0.857061 0.857128 0.857195 0.857262 0.857329 0.857396 0.857463 0.85753 0.857597 0.857664 0.857731 0.857798 0.857865 0.857932 0.857999 0.858066 0.858133 0.8582 0.858267 0.858334 0.858401 0.858467 0.858534 0.858601 0.858668 0.858735 0.858801 0.858868 0.858935 0.859002 0.859069 0.859135 0.859202 0.859269 0.859335 0.859402 0.859469 0.859535 0.859602 0.859668 0.859735 0.859802 0.859868 0.859935 0.860001 0.860068 0.860134 0.860201 0.860267 0.860334 0.8604 0.860467 0.860533 0.8606 0.860666 0.860732 0.860799 0.860865 0.860931 0.860998 0.861064 0.86113 0.861197 0.861263 0.861329 0.861396 0.861462 0.861528 0.861594 0.86166 0.861727 0.861793 0.861859 0.861925 0.861991 0.862057 0.862124 0.86219 0.862256 0.862322 0.862388 0.862454 0.86252 0.862586 0.862652 0.862718 0.862784 0.86285 0.862916 0.862982 0.863048 0.863114 0.86318 0.863245 0.863311 0.863377 0.863443 0.863509 0.863575 0.863641 0.863706 0.863772 0.863838 0.863904 0.863969 0.864035 0.864101 0.864166 0.864232 0.864298 0.864364 0.864429 0.864495 0.86456 0.864626 0.864692 0.864757 0.864823 0.864888 0.864954 0.865019 0.865085 0.86515 0.865216 0.865281 0.865347 0.865412 0.865478 0.865543 0.865609 0.865674 0.865739 0.865805 0.86587 0.865935 0.866001 0.866066 0.866131 0.866197 0.866262 0.866327 0.866392 0.866458 0.866523 0.866588 0.866653 0.866718 0.866784 0.866849 0.866914 0.866979 0.867044 0.867109 0.867174 0.867239 0.867304 0.867369 0.867434 0.867499 0.867564 0.867629 0.867694 0.867759 0.867824 0.867889 0.867954 0.868019 0.868084 0.868149 0.868214 0.868279 0.868343 0.868408 0.868473 0.868538 0.868603 0.868667 0.868732 0.868797 0.868862 0.868926 0.868991 0.869056 0.86912 0.869185 0.86925 0.869314 0.869379 0.869444 0.869508 0.869573 0.869637 0.869702 0.869767 0.869831 0.869896 0.86996 0.870025 0.870089 0.870153 0.870218 0.870282 0.870347 0.870411 0.870476 0.87054 0.870604 0.870669 0.870733 0.870797 0.870862 0.870926 0.87099 0.871054 0.871119 0.871183 0.871247 0.871311 0.871376 0.87144 0.871504 0.871568 0.871632 0.871696 0.871761 0.871825 0.871889 0.871953 0.872017 0.872081 0.872145 0.872209 0.872273 0.872337 0.872401 0.872465 0.872529 0.872593 0.872657 0.872721 0.872785 0.872848 0.872912 0.872976 0.87304 0.873104 0.873168 0.873231 0.873295 0.873359 0.873423 0.873487 0.87355 0.873614 0.873678 0.873741 0.873805 0.873869 0.873932 0.873996 0.87406 0.874123 0.874187 0.87425 0.874314 0.874378 0.874441 0.874505 0.874568 0.874632 0.874695 0.874759 0.874822 0.874886 0.874949 0.875012 0.875076 0.875139 0.875203 0.875266 0.875329 0.875393 0.875456 0.875519 0.875583 0.875646 0.875709 0.875772 0.875836 0.875899 0.875962 0.876025 0.876088 0.876152 0.876215 0.876278 0.876341 0.876404 0.876467 0.87653 0.876593 0.876656 0.87672 0.876783 0.876846 0.876909 0.876972 0.877035 0.877097 0.87716 0.877223 0.877286 0.877349 0.877412 0.877475 0.877538 0.877601 0.877664 0.877726 0.877789 0.877852 0.877915 0.877977 0.87804 0.878103 0.878166 0.878228 0.878291 0.878354 0.878416 0.878479 0.878542 0.878604 0.878667 0.87873 0.878792 0.878855 0.878917 0.87898 0.879042 0.879105 0.879167 0.87923 0.879292 0.879355 0.879417 0.87948 0.879542 0.879605 0.879667 0.879729 0.879792 0.879854 0.879916 0.879979 0.880041 0.880103 0.880166 0.880228 0.88029 0.880352 0.880415 0.880477 0.880539 0.880601 0.880663 0.880726 0.880788 0.88085 0.880912 0.880974 0.881036 0.881098 0.88116 0.881222 0.881284 0.881346 0.881408 0.88147 0.881532 0.881594 0.881656 0.881718 0.88178 0.881842 0.881904 0.881966 0.882028 0.882089 0.882151 0.882213 0.882275 0.882337 0.882398 0.88246 0.882522 0.882584 0.882645 0.882707 0.882769 0.88283 0.882892 0.882954 0.883015 0.883077 0.883139 0.8832 0.883262 0.883323 0.883385 0.883446 0.883508 0.883569 0.883631 0.883692 0.883754 0.883815 0.883877 0.883938 0.884 0.884061 0.884122 0.884184 0.884245 0.884306 0.884368 0.884429 0.88449 0.884552 0.884613 0.884674 0.884735 0.884797 0.884858 0.884919 0.88498 0.885041 0.885103 0.885164 0.885225 0.885286 0.885347 0.885408 0.885469 0.88553 0.885591 0.885652 0.885713 0.885774 0.885835 0.885896 0.885957 0.886018 0.886079 0.88614 0.886201 0.886262 0.886323 0.886384 0.886444 0.886505 0.886566 0.886627 0.886688 0.886748 0.886809 0.88687 0.886931 0.886991 0.887052 0.887113 0.887173 0.887234 0.887295 0.887355 0.887416 0.887477 0.887537 0.887598 0.887658 0.887719 0.887779 0.88784 0.8879 0.887961 0.888021 0.888082 0.888142 0.888203 0.888263 0.888323 0.888384 0.888444 0.888505 0.888565 0.888625 0.888686 0.888746 0.888806 0.888866 0.888927 0.888987 0.889047 0.889107 0.889168 0.889228 0.889288 0.889348 0.889408 0.889468 0.889529 0.889589 0.889649 0.889709 0.889769 0.889829 0.889889 0.889949 0.890009 0.890069 0.890129 0.890189 0.890249 0.890309 0.890369 0.890429 0.890488 0.890548 0.890608 0.890668 0.890728 0.890788 0.890847 0.890907 0.890967 0.891027 0.891086 0.891146 0.891206 0.891266 0.891325 0.891385 0.891445 0.891504 0.891564 0.891623 0.891683 0.891743 0.891802 0.891862 0.891921 0.891981 0.89204 0.8921 0.892159 0.892219 0.892278 0.892338 0.892397 0.892457 0.892516 0.892575 0.892635 0.892694 0.892753 0.892813 0.892872 0.892931 0.892991 0.89305 0.893109 0.893168 0.893228 0.893287 0.893346 0.893405 0.893464 0.893524 0.893583 0.893642 0.893701 0.89376 0.893819 0.893878 0.893937 0.893996 0.894055 0.894114 0.894173 0.894232 0.894291 0.89435 0.894409 0.894468 0.894527 0.894586 0.894645 0.894704 0.894762 0.894821 0.89488 0.894939 0.894998 0.895056 0.895115 0.895174 0.895233 0.895291 0.89535 0.895409 0.895467 0.895526 0.895585 0.895643 0.895702 0.895761 0.895819 0.895878 0.895936 0.895995 0.896053 0.896112 0.89617 0.896229 0.896287 0.896346 0.896404 0.896463 0.896521 0.896579 0.896638 0.896696 0.896755 0.896813 0.896871 0.896929 0.896988 0.897046 0.897104 0.897163 0.897221 0.897279 0.897337 0.897395 0.897454 0.897512 0.89757 0.897628 0.897686 0.897744 0.897802 0.89786 0.897918 0.897977 0.898035 0.898093 0.898151 0.898209 0.898266 0.898324; #A 13000 0.898382 0.89844 0.898498 0.898556 0.898614 0.898672 0.89873 0.898788 0.898845 0.898903 0.898961 0.899019 0.899077 0.899134 0.899192 0.89925 0.899307 0.899365 0.899423 0.899481 0.899538 0.899596 0.899653 0.899711 0.899769 0.899826 0.899884 0.899941 0.899999 0.900056 0.900114 0.900171 0.900229 0.900286 0.900344 0.900401 0.900459 0.900516 0.900573 0.900631 0.900688 0.900745 0.900803 0.90086 0.900917 0.900975 0.901032 0.901089 0.901146 0.901204 0.901261 0.901318 0.901375 0.901432 0.901489 0.901547 0.901604 0.901661 0.901718 0.901775 0.901832 0.901889 0.901946 0.902003 0.90206 0.902117 0.902174 0.902231 0.902288 0.902345 0.902402 0.902459 0.902516 0.902573 0.902629 0.902686 0.902743 0.9028 0.902857 0.902913 0.90297 0.903027 0.903084 0.90314 0.903197 0.903254 0.90331 0.903367 0.903424 0.90348 0.903537 0.903594 0.90365 0.903707 0.903763 0.90382 0.903876 0.903933 0.903989 0.904046 0.904102 0.904159 0.904215 0.904272 0.904328 0.904384 0.904441 0.904497 0.904554 0.90461 0.904666 0.904723 0.904779 0.904835 0.904891 0.904948 0.905004 0.90506 0.905116 0.905172 0.905229 0.905285 0.905341 0.905397 0.905453 0.905509 0.905565 0.905621 0.905677 0.905733 0.905789 0.905845 0.905901 0.905957 0.906013 0.906069 0.906125 0.906181 0.906237 0.906293 0.906349 0.906405 0.906461 0.906516 0.906572 0.906628 0.906684 0.90674 0.906795 0.906851 0.906907 0.906962 0.907018 0.907074 0.90713 0.907185 0.907241 0.907296 0.907352 0.907408 0.907463 0.907519 0.907574 0.90763 0.907685 0.907741 0.907796 0.907852 0.907907 0.907963 0.908018 0.908073 0.908129 0.908184 0.90824 0.908295 0.90835 0.908406 0.908461 0.908516 0.908571 0.908627 0.908682 0.908737 0.908792 0.908848 0.908903 0.908958 0.909013 0.909068 0.909123 0.909178 0.909234 0.909289 0.909344 0.909399 0.909454 0.909509 0.909564 0.909619 0.909674 0.909729 0.909784 0.909839 0.909894 0.909948 0.910003 0.910058 0.910113 0.910168 0.910223 0.910277 0.910332 0.910387 0.910442 0.910497 0.910551 0.910606 0.910661 0.910715 0.91077 0.910825 0.910879 0.910934 0.910989 0.911043 0.911098 0.911152 0.911207 0.911261 0.911316 0.91137 0.911425 0.911479 0.911534 0.911588 0.911643 0.911697 0.911752 0.911806 0.91186 0.911915 0.911969 0.912023 0.912078 0.912132 0.912186 0.91224 0.912295 0.912349 0.912403 0.912457 0.912511 0.912566 0.91262 0.912674 0.912728 0.912782 0.912836 0.91289 0.912944 0.912998 0.913052 0.913107 0.913161 0.913215 0.913269 0.913322 0.913376 0.91343 0.913484 0.913538 0.913592 0.913646 0.9137 0.913754 0.913807 0.913861 0.913915 0.913969 0.914023 0.914076 0.91413 0.914184 0.914237 0.914291 0.914345 0.914398 0.914452 0.914506 0.914559 0.914613 0.914666 0.91472 0.914774 0.914827 0.914881 0.914934 0.914988 0.915041 0.915095 0.915148 0.915201 0.915255 0.915308 0.915362 0.915415 0.915468 0.915522 0.915575 0.915628 0.915682 0.915735 0.915788 0.915841 0.915895 0.915948 0.916001 0.916054 0.916107 0.91616 0.916214 0.916267 0.91632 0.916373 0.916426 0.916479 0.916532 0.916585 0.916638 0.916691 0.916744 0.916797 0.91685 0.916903 0.916956 0.917009 0.917062 0.917114 0.917167 0.91722 0.917273 0.917326 0.917379 0.917431 0.917484 0.917537 0.91759 0.917642 0.917695 0.917748 0.9178 0.917853 0.917906 0.917958 0.918011 0.918064 0.918116 0.918169 0.918221 0.918274 0.918326 0.918379 0.918431 0.918484 0.918536 0.918589 0.918641 0.918694 0.918746 0.918798 0.918851 0.918903 0.918955 0.919008 0.91906 0.919112 0.919165 0.919217 0.919269 0.919321 0.919374 0.919426 0.919478 0.91953 0.919582 0.919634 0.919687 0.919739 0.919791 0.919843 0.919895 0.919947 0.919999 0.920051 0.920103 0.920155 0.920207 0.920259 0.920311 0.920363 0.920415 0.920466 0.920518 0.92057 0.920622 0.920674 0.920726 0.920777 0.920829 0.920881 0.920933 0.920985 0.921036 0.921088 0.92114 0.921191 0.921243 0.921295 0.921346 0.921398 0.921449 0.921501 0.921553 0.921604 0.921656 0.921707 0.921759 0.92181 0.921862 0.921913 0.921965 0.922016 0.922067 0.922119 0.92217 0.922221 0.922273 0.922324 0.922376 0.922427 0.922478 0.922529 0.922581 0.922632 0.922683 0.922734 0.922785 0.922837 0.922888 0.922939 0.92299 0.923041 0.923092 0.923143 0.923194 0.923245 0.923297 0.923348 0.923399 0.92345 0.9235 0.923551 0.923602 0.923653 0.923704 0.923755 0.923806 0.923857 0.923908 0.923959 0.924009 0.92406 0.924111 0.924162 0.924212 0.924263 0.924314 0.924365 0.924415 0.924466 0.924517 0.924567 0.924618 0.924669 0.924719 0.92477 0.92482 0.924871 0.924921 0.924972 0.925022 0.925073 0.925123 0.925174 0.925224 0.925275 0.925325 0.925376 0.925426 0.925476 0.925527 0.925577 0.925627 0.925678 0.925728 0.925778 0.925828 0.925879 0.925929 0.925979 0.926029 0.926079 0.92613 0.92618 0.92623 0.92628 0.92633 0.92638 0.92643 0.92648 0.92653 0.92658 0.92663 0.92668 0.92673 0.92678 0.92683 0.92688 0.92693 0.92698 0.92703 0.92708 0.92713 0.927179 0.927229 0.927279 0.927329 0.927379 0.927428 0.927478 0.927528 0.927577 0.927627 0.927677 0.927727 0.927776 0.927826 0.927875 0.927925 0.927975 0.928024 0.928074 0.928123 0.928173 0.928222 0.928272 0.928321 0.928371 0.92842 0.928469 0.928519 0.928568 0.928618 0.928667 0.928716 0.928766 0.928815 0.928864 0.928914 0.928963 0.929012 0.929061 0.929111 0.92916 0.929209 0.929258 0.929307 0.929356 0.929406 0.929455 0.929504 0.929553 0.929602 0.929651 0.9297 0.929749 0.929798 0.929847 0.929896 0.929945 0.929994 0.930043 0.930092 0.93014 0.930189 0.930238 0.930287 0.930336 0.930385 0.930433 0.930482 0.930531 0.93058 0.930628 0.930677 0.930726 0.930775 0.930823 0.930872 0.930921 0.930969 0.931018 0.931066 0.931115 0.931163 0.931212 0.931261 0.931309 0.931358 0.931406 0.931454 0.931503 0.931551 0.9316 0.931648 0.931696 0.931745 0.931793 0.931842 0.93189 0.931938 0.931986 0.932035 0.932083 0.932131 0.932179 0.932228 0.932276 0.932324 0.932372 0.93242 0.932468 0.932517 0.932565 0.932613 0.932661 0.932709 0.932757 0.932805 0.932853 0.932901 0.932949 0.932997 0.933045 0.933093 0.93314 0.933188 0.933236 0.933284 0.933332 0.93338 0.933428 0.933475 0.933523 0.933571 0.933619 0.933666 0.933714 0.933762 0.933809 0.933857 0.933905 0.933952 0.934 0.934048 0.934095 0.934143 0.93419 0.934238 0.934285 0.934333 0.93438 0.934428 0.934475 0.934523 0.93457 0.934618 0.934665 0.934712 0.93476 0.934807 0.934854 0.934902 0.934949 0.934996 0.935044 0.935091 0.935138 0.935185 0.935232 0.93528 0.935327 0.935374 0.935421 0.935468 0.935515 0.935562 0.935609 0.935656 0.935704 0.935751 0.935798 0.935845 0.935892 0.935938 0.935985 0.936032 0.936079 0.936126 0.936173 0.93622 0.936267 0.936314 0.93636 0.936407 0.936454 0.936501 0.936548 0.936594 0.936641 0.936688 0.936734 0.936781 0.936828 0.936874 0.936921 0.936968 0.937014 0.937061 0.937107 0.937154 0.9372 0.937247 0.937293 0.93734 0.937386 0.937433 0.937479 0.937526 0.937572 0.937618 0.937665 0.937711 0.937757 0.937804 0.93785 0.937896 0.937943 0.937989 0.938035 0.938081 0.938127 0.938174 0.93822 0.938266 0.938312 0.938358 0.938404 0.93845 0.938497 0.938543 0.938589 0.938635 0.938681 0.938727 0.938773 0.938819 0.938865 0.93891 0.938956 0.939002 0.939048 0.939094 0.93914 0.939186 0.939232 0.939277 0.939323 0.939369 0.939415 0.93946 0.939506 0.939552 0.939597 0.939643 0.939689 0.939734 0.93978 0.939826 0.939871 0.939917 0.939962 0.940008 0.940054 0.940099 0.940144 0.94019 0.940235 0.940281 0.940326 0.940372 0.940417 0.940463 0.940508 0.940553 0.940599 0.940644 0.940689 0.940734 0.94078 0.940825 0.94087 0.940915 0.940961 0.941006 0.941051 0.941096 0.941141 0.941186 0.941231 0.941277 0.941322 0.941367 0.941412 0.941457 0.941502 0.941547 0.941592 0.941637 0.941682 0.941727 0.941772 0.941816 0.941861 0.941906 0.941951 0.941996 0.942041 0.942085 0.94213 0.942175 0.94222 0.942264 0.942309 0.942354 0.942399 0.942443 0.942488 0.942532 0.942577 0.942622 0.942666 0.942711 0.942755 0.9428 0.942845 0.942889 0.942933 0.942978 0.943022 0.943067 0.943111 0.943156 0.9432 0.943244 0.943289 0.943333 0.943377 0.943422 0.943466 0.94351 0.943555 0.943599 0.943643 0.943687 0.943731 0.943776 0.94382 0.943864 0.943908 0.943952 0.943996 0.94404 0.944084 0.944129 0.944173 0.944217 0.944261 0.944305 0.944348 0.944392 0.944436 0.94448 0.944524 0.944568 0.944612 0.944656 0.9447 0.944743 0.944787 0.944831 0.944875 0.944919 0.944962 0.945006 0.94505 0.945093 0.945137 0.945181 0.945224 0.945268 0.945312 0.945355 0.945399 0.945442 0.945486 0.945529 0.945573 0.945616 0.94566 0.945703 0.945747 0.94579 0.945834 0.945877 0.94592 0.945964 0.946007 0.94605 0.946094 0.946137 0.94618 0.946224 0.946267 0.94631 0.946353 0.946396 0.94644 0.946483 0.946526 0.946569 0.946612 0.946655 0.946698 0.946741 0.946784 0.946827 0.946871 0.946913 0.946956 0.946999 0.947042 0.947085 0.947128 0.947171 0.947214 0.947257 0.9473 0.947343 0.947385 0.947428 0.947471 0.947514 0.947556 0.947599 0.947642 0.947685 0.947727 0.94777 0.947813 0.947855 0.947898 0.947941 0.947983 0.948026 0.948068 0.948111 0.948153 0.948196 0.948238 0.948281 0.948323 0.948366 0.948408 0.948451 0.948493 0.948535 0.948578 0.94862; #A 14000 0.948662 0.948705 0.948747 0.948789 0.948831 0.948874 0.948916 0.948958 0.949 0.949042 0.949085 0.949127 0.949169 0.949211 0.949253 0.949295 0.949337 0.949379 0.949421 0.949463 0.949505 0.949547 0.949589 0.949631 0.949673 0.949715 0.949757 0.949799 0.949841 0.949883 0.949924 0.949966 0.950008 0.95005 0.950091 0.950133 0.950175 0.950217 0.950258 0.9503 0.950342 0.950383 0.950425 0.950467 0.950508 0.95055 0.950591 0.950633 0.950674 0.950716 0.950757 0.950799 0.95084 0.950882 0.950923 0.950965 0.951006 0.951047 0.951089 0.95113 0.951172 0.951213 0.951254 0.951295 0.951337 0.951378 0.951419 0.95146 0.951502 0.951543 0.951584 0.951625 0.951666 0.951707 0.951748 0.951789 0.951831 0.951872 0.951913 0.951954 0.951995 0.952036 0.952077 0.952118 0.952158 0.952199 0.95224 0.952281 0.952322 0.952363 0.952404 0.952445 0.952485 0.952526 0.952567 0.952608 0.952648 0.952689 0.95273 0.95277 0.952811 0.952852 0.952892 0.952933 0.952974 0.953014 0.953055 0.953095 0.953136 0.953176 0.953217 0.953257 0.953298 0.953338 0.953379 0.953419 0.95346 0.9535 0.95354 0.953581 0.953621 0.953661 0.953702 0.953742 0.953782 0.953822 0.953863 0.953903 0.953943 0.953983 0.954023 0.954064 0.954104 0.954144 0.954184 0.954224 0.954264 0.954304 0.954344 0.954384 0.954424 0.954464 0.954504 0.954544 0.954584 0.954624 0.954664 0.954704 0.954744 0.954783 0.954823 0.954863 0.954903 0.954943 0.954982 0.955022 0.955062 0.955102 0.955141 0.955181 0.955221 0.95526 0.9553 0.95534 0.955379 0.955419 0.955458 0.955498 0.955537 0.955577 0.955616 0.955656 0.955695 0.955735 0.955774 0.955814 0.955853 0.955892 0.955932 0.955971 0.95601 0.95605 0.956089 0.956128 0.956168 0.956207 0.956246 0.956285 0.956324 0.956364 0.956403 0.956442 0.956481 0.95652 0.956559 0.956598 0.956637 0.956676 0.956716 0.956755 0.956794 0.956833 0.956871 0.95691 0.956949 0.956988 0.957027 0.957066 0.957105 0.957144 0.957183 0.957221 0.95726 0.957299 0.957338 0.957376 0.957415 0.957454 0.957493 0.957531 0.95757 0.957609 0.957647 0.957686 0.957724 0.957763 0.957801 0.95784 0.957879 0.957917 0.957956 0.957994 0.958032 0.958071 0.958109 0.958148 0.958186 0.958225 0.958263 0.958301 0.95834 0.958378 0.958416 0.958454 0.958493 0.958531 0.958569 0.958607 0.958646 0.958684 0.958722 0.95876 0.958798 0.958836 0.958874 0.958912 0.95895 0.958988 0.959026 0.959064 0.959102 0.95914 0.959178 0.959216 0.959254 0.959292 0.95933 0.959368 0.959406 0.959444 0.959481 0.959519 0.959557 0.959595 0.959632 0.95967 0.959708 0.959746 0.959783 0.959821 0.959859 0.959896 0.959934 0.959971 0.960009 0.960047 0.960084 0.960122 0.960159 0.960197 0.960234 0.960272 0.960309 0.960346 0.960384 0.960421 0.960459 0.960496 0.960533 0.960571 0.960608 0.960645 0.960683 0.96072 0.960757 0.960794 0.960831 0.960869 0.960906 0.960943 0.96098 0.961017 0.961054 0.961091 0.961128 0.961166 0.961203 0.96124 0.961277 0.961314 0.961351 0.961388 0.961424 0.961461 0.961498 0.961535 0.961572 0.961609 0.961646 0.961682 0.961719 0.961756 0.961793 0.96183 0.961866 0.961903 0.96194 0.961976 0.962013 0.96205 0.962086 0.962123 0.96216 0.962196 0.962233 0.962269 0.962306 0.962342 0.962379 0.962415 0.962452 0.962488 0.962525 0.962561 0.962597 0.962634 0.96267 0.962707 0.962743 0.962779 0.962815 0.962852 0.962888 0.962924 0.96296 0.962997 0.963033 0.963069 0.963105 0.963141 0.963177 0.963214 0.96325 0.963286 0.963322 0.963358 0.963394 0.96343 0.963466 0.963502 0.963538 0.963574 0.963609 0.963645 0.963681 0.963717 0.963753 0.963789 0.963825 0.96386 0.963896 0.963932 0.963968 0.964003 0.964039 0.964075 0.96411 0.964146 0.964182 0.964217 0.964253 0.964289 0.964324 0.96436 0.964395 0.964431 0.964466 0.964502 0.964537 0.964573 0.964608 0.964644 0.964679 0.964714 0.96475 0.964785 0.96482 0.964856 0.964891 0.964926 0.964962 0.964997 0.965032 0.965067 0.965102 0.965138 0.965173 0.965208 0.965243 0.965278 0.965313 0.965348 0.965383 0.965419 0.965454 0.965489 0.965524 0.965559 0.965594 0.965628 0.965663 0.965698 0.965733 0.965768 0.965803 0.965838 0.965873 0.965907 0.965942 0.965977 0.966012 0.966046 0.966081 0.966116 0.966151 0.966185 0.96622 0.966254 0.966289 0.966324 0.966358 0.966393 0.966427 0.966462 0.966496 0.966531 0.966565 0.9666 0.966634 0.966669 0.966703 0.966738 0.966772 0.966806 0.966841 0.966875 0.966909 0.966944 0.966978 0.967012 0.967046 0.96708 0.967115 0.967149 0.967183 0.967217 0.967251 0.967285 0.96732 0.967354 0.967388 0.967422 0.967456 0.96749 0.967524 0.967558 0.967592 0.967626 0.96766 0.967694 0.967727 0.967761 0.967795 0.967829 0.967863 0.967897 0.96793 0.967964 0.967998 0.968032 0.968065 0.968099 0.968133 0.968167 0.9682 0.968234 0.968267 0.968301 0.968335 0.968368 0.968402 0.968435 0.968469 0.968502 0.968536 0.968569 0.968603 0.968636 0.96867 0.968703 0.968736 0.96877 0.968803 0.968836 0.96887 0.968903 0.968936 0.968969 0.969003 0.969036 0.969069 0.969102 0.969135 0.969169 0.969202 0.969235 0.969268 0.969301 0.969334 0.969367 0.9694 0.969433 0.969466 0.969499 0.969532 0.969565 0.969598 0.969631 0.969664 0.969697 0.96973 0.969762 0.969795 0.969828 0.969861 0.969894 0.969926 0.969959 0.969992 0.970025 0.970057 0.97009 0.970123 0.970155 0.970188 0.97022 0.970253 0.970286 0.970318 0.970351 0.970383 0.970416 0.970448 0.970481 0.970513 0.970546 0.970578 0.97061 0.970643 0.970675 0.970707 0.97074 0.970772 0.970804 0.970837 0.970869 0.970901 0.970933 0.970966 0.970998 0.97103 0.971062 0.971094 0.971126 0.971158 0.97119 0.971223 0.971255 0.971287 0.971319 0.971351 0.971383 0.971415 0.971447 0.971478 0.97151 0.971542 0.971574 0.971606 0.971638 0.97167 0.971701 0.971733 0.971765 0.971797 0.971828 0.97186 0.971892 0.971924 0.971955 0.971987 0.972019 0.97205 0.972082 0.972113 0.972145 0.972176 0.972208 0.972239 0.972271 0.972302 0.972334 0.972365 0.972397 0.972428 0.97246 0.972491 0.972522 0.972554 0.972585 0.972616 0.972647 0.972679 0.97271 0.972741 0.972772 0.972804 0.972835 0.972866 0.972897 0.972928 0.972959 0.97299 0.973022 0.973053 0.973084 0.973115 0.973146 0.973177 0.973208 0.973239 0.97327 0.9733 0.973331 0.973362 0.973393 0.973424 0.973455 0.973486 0.973516 0.973547 0.973578 0.973609 0.973639 0.97367 0.973701 0.973732 0.973762 0.973793 0.973823 0.973854 0.973885 0.973915 0.973946 0.973976 0.974007 0.974037 0.974068 0.974098 0.974129 0.974159 0.97419 0.97422 0.97425 0.974281 0.974311 0.974341 0.974372 0.974402 0.974432 0.974462 0.974493 0.974523 0.974553 0.974583 0.974613 0.974644 0.974674 0.974704 0.974734 0.974764 0.974794 0.974824 0.974854 0.974884 0.974914 0.974944 0.974974 0.975004 0.975034 0.975064 0.975094 0.975124 0.975154 0.975183 0.975213 0.975243 0.975273 0.975303 0.975332 0.975362 0.975392 0.975421 0.975451 0.975481 0.97551 0.97554 0.97557 0.975599 0.975629 0.975658 0.975688 0.975717 0.975747 0.975776 0.975806 0.975835 0.975865 0.975894 0.975924 0.975953 0.975982 0.976012 0.976041 0.97607 0.9761 0.976129 0.976158 0.976188 0.976217 0.976246 0.976275 0.976304 0.976333 0.976363 0.976392 0.976421 0.97645 0.976479 0.976508 0.976537 0.976566 0.976595 0.976624 0.976653 0.976682 0.976711 0.97674 0.976769 0.976798 0.976826 0.976855 0.976884 0.976913 0.976942 0.97697 0.976999 0.977028 0.977057 0.977085 0.977114 0.977143 0.977171 0.9772 0.977229 0.977257 0.977286 0.977314 0.977343 0.977371 0.9774 0.977428 0.977457 0.977485 0.977514 0.977542 0.977571 0.977599 0.977627 0.977656 0.977684 0.977712 0.977741 0.977769 0.977797 0.977825 0.977854 0.977882 0.97791 0.977938 0.977966 0.977995 0.978023 0.978051 0.978079 0.978107 0.978135 0.978163 0.978191 0.978219 0.978247 0.978275 0.978303 0.978331 0.978359 0.978387 0.978414 0.978442 0.97847 0.978498 0.978526 0.978554 0.978581 0.978609 0.978637 0.978665 0.978692 0.97872 0.978748 0.978775 0.978803 0.97883 0.978858 0.978886 0.978913 0.978941 0.978968 0.978996 0.979023 0.979051 0.979078 0.979106 0.979133 0.97916 0.979188 0.979215 0.979243 0.97927 0.979297 0.979324 0.979352 0.979379 0.979406 0.979433 0.979461 0.979488 0.979515 0.979542 0.979569 0.979596 0.979624 0.979651 0.979678 0.979705 0.979732 0.979759 0.979786 0.979813 0.97984 0.979867 0.979894 0.97992 0.979947 0.979974 0.980001 0.980028 0.980055 0.980081 0.980108 0.980135 0.980162 0.980189 0.980215 0.980242 0.980269 0.980295 0.980322 0.980349 0.980375 0.980402 0.980428 0.980455 0.980481 0.980508 0.980534 0.980561 0.980587 0.980614 0.98064 0.980667 0.980693 0.980719 0.980746 0.980772 0.980798 0.980825 0.980851 0.980877 0.980904 0.98093 0.980956 0.980982 0.981008 0.981035 0.981061 0.981087 0.981113 0.981139 0.981165 0.981191 0.981217 0.981243 0.981269 0.981295 0.981321 0.981347 0.981373 0.981399 0.981425 0.981451 0.981477 0.981502 0.981528 0.981554 0.98158 0.981606 0.981631 0.981657 0.981683 0.981709 0.981734 0.98176 0.981786 0.981811 0.981837 0.981862 0.981888 0.981914 0.981939 0.981965 0.98199 0.982016 0.982041 0.982067 0.982092 0.982117 0.982143 0.982168 0.982194 0.982219 0.982244 0.98227 0.982295 0.98232 0.982345 0.982371 0.982396 0.982421 0.982446 0.982471; #A 15000 0.982497 0.982522 0.982547 0.982572 0.982597 0.982622 0.982647 0.982672 0.982697 0.982722 0.982747 0.982772 0.982797 0.982822 0.982847 0.982872 0.982897 0.982922 0.982946 0.982971 0.982996 0.983021 0.983046 0.98307 0.983095 0.98312 0.983144 0.983169 0.983194 0.983218 0.983243 0.983268 0.983292 0.983317 0.983341 0.983366 0.98339 0.983415 0.983439 0.983464 0.983488 0.983513 0.983537 0.983561 0.983586 0.98361 0.983635 0.983659 0.983683 0.983707 0.983732 0.983756 0.98378 0.983804 0.983829 0.983853 0.983877 0.983901 0.983925 0.983949 0.983973 0.983997 0.984021 0.984046 0.98407 0.984094 0.984118 0.984141 0.984165 0.984189 0.984213 0.984237 0.984261 0.984285 0.984309 0.984333 0.984356 0.98438 0.984404 0.984428 0.984451 0.984475 0.984499 0.984523 0.984546 0.98457 0.984593 0.984617 0.984641 0.984664 0.984688 0.984711 0.984735 0.984758 0.984782 0.984805 0.984829 0.984852 0.984876 0.984899 0.984922 0.984946 0.984969 0.984992 0.985016 0.985039 0.985062 0.985085 0.985109 0.985132 0.985155 0.985178 0.985201 0.985225 0.985248 0.985271 0.985294 0.985317 0.98534 0.985363 0.985386 0.985409 0.985432 0.985455 0.985478 0.985501 0.985524 0.985547 0.98557 0.985592 0.985615 0.985638 0.985661 0.985684 0.985706 0.985729 0.985752 0.985775 0.985797 0.98582 0.985843 0.985865 0.985888 0.985911 0.985933 0.985956 0.985978 0.986001 0.986023 0.986046 0.986068 0.986091 0.986113 0.986136 0.986158 0.98618 0.986203 0.986225 0.986248 0.98627 0.986292 0.986314 0.986337 0.986359 0.986381 0.986403 0.986426 0.986448 0.98647 0.986492 0.986514 0.986536 0.986558 0.98658 0.986603 0.986625 0.986647 0.986669 0.986691 0.986713 0.986735 0.986756 0.986778 0.9868 0.986822 0.986844 0.986866 0.986888 0.986909 0.986931 0.986953 0.986975 0.986996 0.987018 0.98704 0.987062 0.987083 0.987105 0.987126 0.987148 0.98717 0.987191 0.987213 0.987234 0.987256 0.987277 0.987299 0.98732 0.987342 0.987363 0.987385 0.987406 0.987427 0.987449 0.98747 0.987491 0.987513 0.987534 0.987555 0.987576 0.987598 0.987619 0.98764 0.987661 0.987682 0.987704 0.987725 0.987746 0.987767 0.987788 0.987809 0.98783 0.987851 0.987872 0.987893 0.987914 0.987935 0.987956 0.987977 0.987998 0.988019 0.988039 0.98806 0.988081 0.988102 0.988123 0.988143 0.988164 0.988185 0.988206 0.988226 0.988247 0.988268 0.988288 0.988309 0.988329 0.98835 0.988371 0.988391 0.988412 0.988432 0.988453 0.988473 0.988494 0.988514 0.988535 0.988555 0.988575 0.988596 0.988616 0.988636 0.988657 0.988677 0.988697 0.988717 0.988738 0.988758 0.988778 0.988798 0.988819 0.988839 0.988859 0.988879 0.988899 0.988919 0.988939 0.988959 0.988979 0.988999 0.989019 0.989039 0.989059 0.989079 0.989099 0.989119 0.989139 0.989159 0.989179 0.989198 0.989218 0.989238 0.989258 0.989277 0.989297 0.989317 0.989337 0.989356 0.989376 0.989396 0.989415 0.989435 0.989455 0.989474 0.989494 0.989513 0.989533 0.989552 0.989572 0.989591 0.989611 0.98963 0.989649 0.989669 0.989688 0.989708 0.989727 0.989746 0.989766 0.989785 0.989804 0.989823 0.989843 0.989862 0.989881 0.9899 0.989919 0.989939 0.989958 0.989977 0.989996 0.990015 0.990034 0.990053 0.990072 0.990091 0.99011 0.990129 0.990148 0.990167 0.990186 0.990205 0.990224 0.990242 0.990261 0.99028 0.990299 0.990318 0.990336 0.990355 0.990374 0.990393 0.990411 0.99043 0.990449 0.990467 0.990486 0.990505 0.990523 0.990542 0.99056 0.990579 0.990597 0.990616 0.990634 0.990653 0.990671 0.99069 0.990708 0.990726 0.990745 0.990763 0.990781 0.9908 0.990818 0.990836 0.990855 0.990873 0.990891 0.990909 0.990927 0.990946 0.990964 0.990982 0.991 0.991018 0.991036 0.991054 0.991072 0.99109 0.991108 0.991126 0.991144 0.991162 0.99118 0.991198 0.991216 0.991234 0.991252 0.99127 0.991287 0.991305 0.991323 0.991341 0.991359 0.991376 0.991394 0.991412 0.991429 0.991447 0.991465 0.991482 0.9915 0.991518 0.991535 0.991553 0.99157 0.991588 0.991605 0.991623 0.99164 0.991658 0.991675 0.991693 0.99171 0.991727 0.991745 0.991762 0.991779 0.991797 0.991814 0.991831 0.991848 0.991866 0.991883 0.9919 0.991917 0.991934 0.991952 0.991969 0.991986 0.992003 0.99202 0.992037 0.992054 0.992071 0.992088 0.992105 0.992122 0.992139 0.992156 0.992173 0.99219 0.992207 0.992223 0.99224 0.992257 0.992274 0.992291 0.992307 0.992324 0.992341 0.992358 0.992374 0.992391 0.992408 0.992424 0.992441 0.992457 0.992474 0.992491 0.992507 0.992524 0.99254 0.992557 0.992573 0.99259 0.992606 0.992622 0.992639 0.992655 0.992672 0.992688 0.992704 0.992721 0.992737 0.992753 0.992769 0.992786 0.992802 0.992818 0.992834 0.99285 0.992867 0.992883 0.992899 0.992915 0.992931 0.992947 0.992963 0.992979 0.992995 0.993011 0.993027 0.993043 0.993059 0.993075 0.993091 0.993107 0.993122 0.993138 0.993154 0.99317 0.993186 0.993201 0.993217 0.993233 0.993249 0.993264 0.99328 0.993296 0.993311 0.993327 0.993342 0.993358 0.993374 0.993389 0.993405 0.99342 0.993436 0.993451 0.993467 0.993482 0.993497 0.993513 0.993528 0.993544 0.993559 0.993574 0.99359 0.993605 0.99362 0.993635 0.993651 0.993666 0.993681 0.993696 0.993711 0.993727 0.993742 0.993757 0.993772 0.993787 0.993802 0.993817 0.993832 0.993847 0.993862 0.993877 0.993892 0.993907 0.993922 0.993937 0.993952 0.993967 0.993981 0.993996 0.994011 0.994026 0.994041 0.994055 0.99407 0.994085 0.994099 0.994114 0.994129 0.994143 0.994158 0.994173 0.994187 0.994202 0.994216 0.994231 0.994245 0.99426 0.994274 0.994289 0.994303 0.994318 0.994332 0.994346 0.994361 0.994375 0.99439 0.994404 0.994418 0.994432 0.994447 0.994461 0.994475 0.994489 0.994503 0.994518 0.994532 0.994546 0.99456 0.994574 0.994588 0.994602 0.994616 0.99463 0.994644 0.994658 0.994672 0.994686 0.9947 0.994714 0.994728 0.994742 0.994756 0.99477 0.994783 0.994797 0.994811 0.994825 0.994839 0.994852 0.994866 0.99488 0.994893 0.994907 0.994921 0.994934 0.994948 0.994961 0.994975 0.994989 0.995002 0.995016 0.995029 0.995043 0.995056 0.99507 0.995083 0.995096 0.99511 0.995123 0.995136 0.99515 0.995163 0.995176 0.99519 0.995203 0.995216 0.995229 0.995243 0.995256 0.995269 0.995282 0.995295 0.995308 0.995321 0.995334 0.995347 0.995361 0.995374 0.995387 0.9954 0.995413 0.995425 0.995438 0.995451 0.995464 0.995477 0.99549 0.995503 0.995516 0.995528 0.995541 0.995554 0.995567 0.995579 0.995592 0.995605 0.995618 0.99563 0.995643 0.995655 0.995668 0.995681 0.995693 0.995706 0.995718 0.995731 0.995743 0.995756 0.995768 0.995781 0.995793 0.995805 0.995818 0.99583 0.995843 0.995855 0.995867 0.995879 0.995892 0.995904 0.995916 0.995928 0.995941 0.995953 0.995965 0.995977 0.995989 0.996001 0.996013 0.996026 0.996038 0.99605 0.996062 0.996074 0.996086 0.996098 0.99611 0.996121 0.996133 0.996145 0.996157 0.996169 0.996181 0.996193 0.996204 0.996216 0.996228 0.99624 0.996252 0.996263 0.996275 0.996287 0.996298 0.99631 0.996321 0.996333 0.996345 0.996356 0.996368 0.996379 0.996391 0.996402 0.996414 0.996425 0.996437 0.996448 0.996459 0.996471 0.996482 0.996494 0.996505 0.996516 0.996527 0.996539 0.99655 0.996561 0.996572 0.996584 0.996595 0.996606 0.996617 0.996628 0.996639 0.99665 0.996661 0.996673 0.996684 0.996695 0.996706 0.996717 0.996728 0.996738 0.996749 0.99676 0.996771 0.996782 0.996793 0.996804 0.996815 0.996825 0.996836 0.996847 0.996858 0.996868 0.996879 0.99689 0.9969 0.996911 0.996922 0.996932 0.996943 0.996953 0.996964 0.996975 0.996985 0.996996 0.997006 0.997017 0.997027 0.997037 0.997048 0.997058 0.997069 0.997079 0.997089 0.9971 0.99711 0.99712 0.997131 0.997141 0.997151 0.997161 0.997171 0.997182 0.997192 0.997202 0.997212 0.997222 0.997232 0.997242 0.997252 0.997262 0.997272 0.997282 0.997292 0.997302 0.997312 0.997322 0.997332 0.997342 0.997352 0.997362 0.997371 0.997381 0.997391 0.997401 0.997411 0.99742 0.99743 0.99744 0.997449 0.997459 0.997469 0.997478 0.997488 0.997497 0.997507 0.997517 0.997526 0.997536 0.997545 0.997555 0.997564 0.997574 0.997583 0.997592 0.997602 0.997611 0.99762 0.99763 0.997639 0.997648 0.997658 0.997667 0.997676 0.997685 0.997695 0.997704 0.997713 0.997722 0.997731 0.99774 0.997749 0.997759 0.997768 0.997777 0.997786 0.997795 0.997804 0.997813 0.997822 0.997831 0.997839 0.997848 0.997857 0.997866 0.997875 0.997884 0.997892 0.997901 0.99791 0.997919 0.997928 0.997936 0.997945 0.997954 0.997962 0.997971 0.99798 0.997988 0.997997 0.998005 0.998014 0.998022 0.998031 0.998039 0.998048 0.998056 0.998065 0.998073 0.998082 0.99809 0.998098 0.998107 0.998115 0.998123 0.998132 0.99814 0.998148 0.998156 0.998165 0.998173 0.998181 0.998189 0.998197 0.998205 0.998213 0.998222 0.99823 0.998238 0.998246 0.998254 0.998262 0.99827 0.998278 0.998286 0.998294 0.998301 0.998309 0.998317 0.998325 0.998333 0.998341 0.998348 0.998356 0.998364 0.998372 0.998379 0.998387 0.998395 0.998402 0.99841 0.998418 0.998425 0.998433 0.998441 0.998448 0.998456 0.998463 0.998471 0.998478 0.998486 0.998493 0.998501 0.998508 0.998515 0.998523 0.99853 0.998537 0.998545 0.998552 0.998559 0.998567 0.998574 0.998581 0.998588 0.998595 0.998603 0.99861 0.998617 0.998624 0.998631 0.998638; #A 16000 0.998645 0.998652 0.998659 0.998666 0.998673 0.99868 0.998687 0.998694 0.998701 0.998708 0.998715 0.998722 0.998729 0.998735 0.998742 0.998749 0.998756 0.998762 0.998769 0.998776 0.998783 0.998789 0.998796 0.998803 0.998809 0.998816 0.998822 0.998829 0.998836 0.998842 0.998849 0.998855 0.998862 0.998868 0.998874 0.998881 0.998887 0.998894 0.9989 0.998906 0.998913 0.998919 0.998925 0.998932 0.998938 0.998944 0.99895 0.998956 0.998963 0.998969 0.998975 0.998981 0.998987 0.998993 0.998999 0.999005 0.999011 0.999017 0.999023 0.999029 0.999035 0.999041 0.999047 0.999053 0.999059 0.999065 0.999071 0.999077 0.999082 0.999088 0.999094 0.9991 0.999106 0.999111 0.999117 0.999123 0.999128 0.999134 0.99914 0.999145 0.999151 0.999156 0.999162 0.999167 0.999173 0.999178 0.999184 0.999189 0.999195 0.9992 0.999206 0.999211 0.999216 0.999222 0.999227 0.999232 0.999238 0.999243 0.999248 0.999254 0.999259 0.999264 0.999269 0.999274 0.99928 0.999285 0.99929 0.999295 0.9993 0.999305 0.99931 0.999315 0.99932 0.999325 0.99933 0.999335 0.99934 0.999345 0.99935 0.999355 0.999359 0.999364 0.999369 0.999374 0.999379 0.999384 0.999388 0.999393 0.999398 0.999402 0.999407 0.999412 0.999416 0.999421 0.999426 0.99943 0.999435 0.999439 0.999444 0.999448 0.999453 0.999457 0.999462 0.999466 0.999471 0.999475 0.999479 0.999484 0.999488 0.999492 0.999497 0.999501 0.999505 0.99951 0.999514 0.999518 0.999522 0.999526 0.999531 0.999535 0.999539 0.999543 0.999547 0.999551 0.999555 0.999559 0.999563 0.999567 0.999571 0.999575 0.999579 0.999583 0.999587 0.999591 0.999595 0.999599 0.999602 0.999606 0.99961 0.999614 0.999618 0.999621 0.999625 0.999629 0.999632 0.999636 0.99964 0.999643 0.999647 0.999651 0.999654 0.999658 0.999661 0.999665 0.999668 0.999672 0.999675 0.999679 0.999682 0.999685 0.999689 0.999692 0.999696 0.999699 0.999702 0.999705 0.999709 0.999712 0.999715 0.999719 0.999722 0.999725 0.999728 0.999731 0.999734 0.999738 0.999741 0.999744 0.999747 0.99975 0.999753 0.999756 0.999759 0.999762 0.999765 0.999768 0.999771 0.999773 0.999776 0.999779 0.999782 0.999785 0.999788 0.99979 0.999793 0.999796 0.999799 0.999801 0.999804 0.999807 0.999809 0.999812 0.999815 0.999817 0.99982 0.999822 0.999825 0.999828 0.99983 0.999833 0.999835 0.999837 0.99984 0.999842 0.999845 0.999847 0.999849 0.999852 0.999854 0.999856 0.999859 0.999861 0.999863 0.999865 0.999868 0.99987 0.999872 0.999874 0.999876 0.999878 0.999881 0.999883 0.999885 0.999887 0.999889 0.999891 0.999893 0.999895 0.999897 0.999899 0.999901 0.999902 0.999904 0.999906 0.999908 0.99991 0.999912 0.999914 0.999915 0.999917 0.999919 0.99992 0.999922 0.999924 0.999926 0.999927 0.999929 0.99993 0.999932 0.999934 0.999935 0.999937 0.999938 0.99994 0.999941 0.999943 0.999944 0.999946 0.999947 0.999948 0.99995 0.999951 0.999952 0.999954 0.999955 0.999956 0.999958 0.999959 0.99996 0.999961 0.999962 0.999964 0.999965 0.999966 0.999967 0.999968 0.999969 0.99997 0.999971 0.999972 0.999973 0.999974 0.999975 0.999976 0.999977 0.999978 0.999979 0.99998 0.999981 0.999981 0.999982 0.999983 0.999984 0.999985 0.999985 0.999986 0.999987 0.999987 0.999988 0.999989 0.999989 0.99999 0.999991 0.999991 0.999992 0.999992 0.999993 0.999993 0.999994 0.999994 0.999995 0.999995 0.999996 0.999996 0.999996 0.999997 0.999997 0.999997 0.999998 0.999998 0.999998 0.999998 0.999999 0.999999 0.999999 0.999999 0.999999 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.999999 0.999999 0.999999 0.999999 0.999999 0.999998 0.999998 0.999998 0.999998 0.999997 0.999997 0.999997 0.999996 0.999996 0.999996 0.999995 0.999995 0.999994 0.999994 0.999993 0.999993 0.999992 0.999992 0.999991 0.999991 0.99999 0.999989 0.999989 0.999988 0.999987 0.999987 0.999986 0.999985 0.999985 0.999984 0.999983 0.999982 0.999981 0.999981 0.99998 0.999979 0.999978 0.999977 0.999976 0.999975 0.999974 0.999973 0.999972 0.999971 0.99997 0.999969 0.999968 0.999967 0.999966 0.999965 0.999964 0.999962 0.999961 0.99996 0.999959 0.999958 0.999956 0.999955 0.999954 0.999952 0.999951 0.99995 0.999948 0.999947 0.999946 0.999944 0.999943 0.999941 0.99994 0.999938 0.999937 0.999935 0.999934 0.999932 0.99993 0.999929 0.999927 0.999926 0.999924 0.999922 0.99992 0.999919 0.999917 0.999915 0.999914 0.999912 0.99991 0.999908 0.999906 0.999904 0.999902 0.999901 0.999899 0.999897 0.999895 0.999893 0.999891 0.999889 0.999887 0.999885 0.999883 0.999881 0.999878 0.999876 0.999874 0.999872 0.99987 0.999868 0.999865 0.999863 0.999861 0.999859 0.999856 0.999854 0.999852 0.999849 0.999847 0.999845 0.999842 0.99984 0.999837 0.999835 0.999833 0.99983 0.999828 0.999825 0.999822 0.99982 0.999817 0.999815 0.999812 0.999809 0.999807 0.999804 0.999801 0.999799 0.999796 0.999793 0.99979 0.999788 0.999785 0.999782 0.999779 0.999776 0.999773 0.999771 0.999768 0.999765 0.999762 0.999759 0.999756 0.999753 0.99975 0.999747 0.999744 0.999741 0.999738 0.999734 0.999731 0.999728 0.999725 0.999722 0.999719 0.999715 0.999712 0.999709 0.999705 0.999702 0.999699 0.999696 0.999692 0.999689 0.999685 0.999682 0.999679 0.999675 0.999672 0.999668 0.999665 0.999661 0.999658 0.999654 0.999651 0.999647 0.999643 0.99964 0.999636 0.999632 0.999629 0.999625 0.999621 0.999618 0.999614 0.99961 0.999606 0.999602 0.999599 0.999595 0.999591 0.999587 0.999583 0.999579 0.999575 0.999571 0.999567 0.999563 0.999559 0.999555 0.999551 0.999547 0.999543 0.999539 0.999535 0.999531 0.999526 0.999522 0.999518 0.999514 0.99951 0.999505 0.999501 0.999497 0.999492 0.999488 0.999484 0.999479 0.999475 0.999471 0.999466 0.999462 0.999457 0.999453 0.999448 0.999444 0.999439 0.999435 0.99943 0.999426 0.999421 0.999416 0.999412 0.999407 0.999402 0.999398 0.999393 0.999388 0.999384 0.999379 0.999374 0.999369 0.999364 0.999359 0.999355 0.99935 0.999345 0.99934 0.999335 0.99933 0.999325 0.99932 0.999315 0.99931 0.999305 0.9993 0.999295 0.99929 0.999285 0.99928 0.999274 0.999269 0.999264 0.999259 0.999254 0.999248 0.999243 0.999238 0.999232 0.999227 0.999222 0.999216 0.999211 0.999206 0.9992 0.999195 0.999189 0.999184 0.999178 0.999173 0.999167 0.999162 0.999156 0.999151 0.999145 0.99914 0.999134 0.999128 0.999123 0.999117 0.999111 0.999106 0.9991 0.999094 0.999088 0.999082 0.999077 0.999071 0.999065 0.999059 0.999053 0.999047 0.999041 0.999035 0.999029 0.999023 0.999017 0.999011 0.999005 0.998999 0.998993 0.998987 0.998981 0.998975 0.998969 0.998963 0.998956 0.99895 0.998944 0.998938 0.998932 0.998925 0.998919 0.998913 0.998906 0.9989 0.998894 0.998887 0.998881 0.998874 0.998868 0.998862 0.998855 0.998849 0.998842 0.998836 0.998829 0.998822 0.998816 0.998809 0.998803 0.998796 0.998789 0.998783 0.998776 0.998769 0.998762 0.998756 0.998749 0.998742 0.998735 0.998729 0.998722 0.998715 0.998708 0.998701 0.998694 0.998687 0.99868 0.998673 0.998666 0.998659 0.998652 0.998645 0.998638 0.998631 0.998624 0.998617 0.99861 0.998603 0.998595 0.998588 0.998581 0.998574 0.998567 0.998559 0.998552 0.998545 0.998537 0.99853 0.998523 0.998515 0.998508 0.998501 0.998493 0.998486 0.998478 0.998471 0.998463 0.998456 0.998448 0.998441 0.998433 0.998425 0.998418 0.99841 0.998402 0.998395 0.998387 0.998379 0.998372 0.998364 0.998356 0.998348 0.998341 0.998333 0.998325 0.998317 0.998309 0.998301 0.998294 0.998286 0.998278 0.99827 0.998262 0.998254 0.998246 0.998238 0.99823 0.998222 0.998213 0.998205 0.998197 0.998189 0.998181 0.998173 0.998165 0.998156 0.998148 0.99814 0.998132 0.998123 0.998115 0.998107 0.998098 0.99809 0.998082 0.998073 0.998065 0.998056 0.998048 0.998039 0.998031 0.998022 0.998014 0.998005 0.997997 0.997988 0.99798 0.997971 0.997962 0.997954 0.997945 0.997936 0.997928 0.997919 0.99791 0.997901 0.997892 0.997884 0.997875 0.997866 0.997857 0.997848 0.997839 0.997831 0.997822 0.997813 0.997804 0.997795 0.997786 0.997777 0.997768 0.997759 0.997749 0.99774 0.997731 0.997722 0.997713 0.997704 0.997695 0.997685 0.997676 0.997667 0.997658 0.997648 0.997639 0.99763 0.99762 0.997611 0.997602 0.997592 0.997583 0.997574 0.997564 0.997555 0.997545 0.997536 0.997526 0.997517 0.997507 0.997497 0.997488 0.997478 0.997469 0.997459 0.997449 0.99744 0.99743 0.99742 0.997411 0.997401 0.997391 0.997381 0.997371 0.997362 0.997352 0.997342 0.997332 0.997322 0.997312 0.997302 0.997292 0.997282 0.997272 0.997262 0.997252 0.997242 0.997232 0.997222 0.997212 0.997202 0.997192 0.997182 0.997171 0.997161 0.997151 0.997141 0.997131 0.99712 0.99711 0.9971 0.997089 0.997079 0.997069 0.997058 0.997048 0.997037 0.997027 0.997017 0.997006 0.996996 0.996985 0.996975 0.996964 0.996953 0.996943 0.996932 0.996922 0.996911 0.9969 0.99689 0.996879 0.996868 0.996858 0.996847 0.996836 0.996825 0.996815 0.996804 0.996793 0.996782 0.996771 0.99676 0.996749 0.996738 0.996728 0.996717 0.996706 0.996695 0.996684 0.996673 0.996661 0.99665 0.996639 0.996628 0.996617 0.996606 0.996595 0.996584 0.996572 0.996561 0.99655 0.996539 0.996527; #A 17000 0.996516 0.996505 0.996494 0.996482 0.996471 0.996459 0.996448 0.996437 0.996425 0.996414 0.996402 0.996391 0.996379 0.996368 0.996356 0.996345 0.996333 0.996321 0.99631 0.996298 0.996287 0.996275 0.996263 0.996252 0.99624 0.996228 0.996216 0.996204 0.996193 0.996181 0.996169 0.996157 0.996145 0.996133 0.996121 0.99611 0.996098 0.996086 0.996074 0.996062 0.99605 0.996038 0.996026 0.996013 0.996001 0.995989 0.995977 0.995965 0.995953 0.995941 0.995928 0.995916 0.995904 0.995892 0.995879 0.995867 0.995855 0.995843 0.99583 0.995818 0.995805 0.995793 0.995781 0.995768 0.995756 0.995743 0.995731 0.995718 0.995706 0.995693 0.995681 0.995668 0.995655 0.995643 0.99563 0.995618 0.995605 0.995592 0.995579 0.995567 0.995554 0.995541 0.995528 0.995516 0.995503 0.99549 0.995477 0.995464 0.995451 0.995438 0.995425 0.995413 0.9954 0.995387 0.995374 0.995361 0.995347 0.995334 0.995321 0.995308 0.995295 0.995282 0.995269 0.995256 0.995243 0.995229 0.995216 0.995203 0.99519 0.995176 0.995163 0.99515 0.995136 0.995123 0.99511 0.995096 0.995083 0.99507 0.995056 0.995043 0.995029 0.995016 0.995002 0.994989 0.994975 0.994961 0.994948 0.994934 0.994921 0.994907 0.994893 0.99488 0.994866 0.994852 0.994839 0.994825 0.994811 0.994797 0.994783 0.99477 0.994756 0.994742 0.994728 0.994714 0.9947 0.994686 0.994672 0.994658 0.994644 0.99463 0.994616 0.994602 0.994588 0.994574 0.99456 0.994546 0.994532 0.994518 0.994503 0.994489 0.994475 0.994461 0.994447 0.994432 0.994418 0.994404 0.99439 0.994375 0.994361 0.994346 0.994332 0.994318 0.994303 0.994289 0.994274 0.99426 0.994245 0.994231 0.994216 0.994202 0.994187 0.994173 0.994158 0.994143 0.994129 0.994114 0.994099 0.994085 0.99407 0.994055 0.994041 0.994026 0.994011 0.993996 0.993981 0.993967 0.993952 0.993937 0.993922 0.993907 0.993892 0.993877 0.993862 0.993847 0.993832 0.993817 0.993802 0.993787 0.993772 0.993757 0.993742 0.993727 0.993711 0.993696 0.993681 0.993666 0.993651 0.993635 0.99362 0.993605 0.99359 0.993574 0.993559 0.993544 0.993528 0.993513 0.993497 0.993482 0.993467 0.993451 0.993436 0.99342 0.993405 0.993389 0.993374 0.993358 0.993342 0.993327 0.993311 0.993296 0.99328 0.993264 0.993249 0.993233 0.993217 0.993201 0.993186 0.99317 0.993154 0.993138 0.993122 0.993107 0.993091 0.993075 0.993059 0.993043 0.993027 0.993011 0.992995 0.992979 0.992963 0.992947 0.992931 0.992915 0.992899 0.992883 0.992867 0.99285 0.992834 0.992818 0.992802 0.992786 0.992769 0.992753 0.992737 0.992721 0.992704 0.992688 0.992672 0.992655 0.992639 0.992622 0.992606 0.99259 0.992573 0.992557 0.99254 0.992524 0.992507 0.992491 0.992474 0.992457 0.992441 0.992424 0.992408 0.992391 0.992374 0.992358 0.992341 0.992324 0.992307 0.992291 0.992274 0.992257 0.99224 0.992223 0.992207 0.99219 0.992173 0.992156 0.992139 0.992122 0.992105 0.992088 0.992071 0.992054 0.992037 0.99202 0.992003 0.991986 0.991969 0.991952 0.991934 0.991917 0.9919 0.991883 0.991866 0.991848 0.991831 0.991814 0.991797 0.991779 0.991762 0.991745 0.991727 0.99171 0.991693 0.991675 0.991658 0.99164 0.991623 0.991605 0.991588 0.99157 0.991553 0.991535 0.991518 0.9915 0.991482 0.991465 0.991447 0.991429 0.991412 0.991394 0.991376 0.991359 0.991341 0.991323 0.991305 0.991287 0.99127 0.991252 0.991234 0.991216 0.991198 0.99118 0.991162 0.991144 0.991126 0.991108 0.99109 0.991072 0.991054 0.991036 0.991018 0.991 0.990982 0.990964 0.990946 0.990927 0.990909 0.990891 0.990873 0.990855 0.990836 0.990818 0.9908 0.990781 0.990763 0.990745 0.990726 0.990708 0.99069 0.990671 0.990653 0.990634 0.990616 0.990597 0.990579 0.99056 0.990542 0.990523 0.990505 0.990486 0.990467 0.990449 0.99043 0.990411 0.990393 0.990374 0.990355 0.990336 0.990318 0.990299 0.99028 0.990261 0.990242 0.990224 0.990205 0.990186 0.990167 0.990148 0.990129 0.99011 0.990091 0.990072 0.990053 0.990034 0.990015 0.989996 0.989977 0.989958 0.989939 0.989919 0.9899 0.989881 0.989862 0.989843 0.989823 0.989804 0.989785 0.989766 0.989746 0.989727 0.989708 0.989688 0.989669 0.989649 0.98963 0.989611 0.989591 0.989572 0.989552 0.989533 0.989513 0.989494 0.989474 0.989455 0.989435 0.989415 0.989396 0.989376 0.989356 0.989337 0.989317 0.989297 0.989277 0.989258 0.989238 0.989218 0.989198 0.989179 0.989159 0.989139 0.989119 0.989099 0.989079 0.989059 0.989039 0.989019 0.988999 0.988979 0.988959 0.988939 0.988919 0.988899 0.988879 0.988859 0.988839 0.988819 0.988798 0.988778 0.988758 0.988738 0.988717 0.988697 0.988677 0.988657 0.988636 0.988616 0.988596 0.988575 0.988555 0.988535 0.988514 0.988494 0.988473 0.988453 0.988432 0.988412 0.988391 0.988371 0.98835 0.988329 0.988309 0.988288 0.988268 0.988247 0.988226 0.988206 0.988185 0.988164 0.988143 0.988123 0.988102 0.988081 0.98806 0.988039 0.988019 0.987998 0.987977 0.987956 0.987935 0.987914 0.987893 0.987872 0.987851 0.98783 0.987809 0.987788 0.987767 0.987746 0.987725 0.987704 0.987682 0.987661 0.98764 0.987619 0.987598 0.987576 0.987555 0.987534 0.987513 0.987491 0.98747 0.987449 0.987427 0.987406 0.987385 0.987363 0.987342 0.98732 0.987299 0.987277 0.987256 0.987234 0.987213 0.987191 0.98717 0.987148 0.987126 0.987105 0.987083 0.987062 0.98704 0.987018 0.986996 0.986975 0.986953 0.986931 0.986909 0.986888 0.986866 0.986844 0.986822 0.9868 0.986778 0.986756 0.986735 0.986713 0.986691 0.986669 0.986647 0.986625 0.986603 0.98658 0.986558 0.986536 0.986514 0.986492 0.98647 0.986448 0.986426 0.986403 0.986381 0.986359 0.986337 0.986314 0.986292 0.98627 0.986248 0.986225 0.986203 0.98618 0.986158 0.986136 0.986113 0.986091 0.986068 0.986046 0.986023 0.986001 0.985978 0.985956 0.985933 0.985911 0.985888 0.985865 0.985843 0.98582 0.985797 0.985775 0.985752 0.985729 0.985706 0.985684 0.985661 0.985638 0.985615 0.985592 0.98557 0.985547 0.985524 0.985501 0.985478 0.985455 0.985432 0.985409 0.985386 0.985363 0.98534 0.985317 0.985294 0.985271 0.985248 0.985225 0.985201 0.985178 0.985155 0.985132 0.985109 0.985085 0.985062 0.985039 0.985016 0.984992 0.984969 0.984946 0.984922 0.984899 0.984876 0.984852 0.984829 0.984805 0.984782 0.984758 0.984735 0.984711 0.984688 0.984664 0.984641 0.984617 0.984593 0.98457 0.984546 0.984523 0.984499 0.984475 0.984451 0.984428 0.984404 0.98438 0.984356 0.984333 0.984309 0.984285 0.984261 0.984237 0.984213 0.984189 0.984165 0.984141 0.984118 0.984094 0.98407 0.984046 0.984021 0.983997 0.983973 0.983949 0.983925 0.983901 0.983877 0.983853 0.983829 0.983804 0.98378 0.983756 0.983732 0.983707 0.983683 0.983659 0.983635 0.98361 0.983586 0.983561 0.983537 0.983513 0.983488 0.983464 0.983439 0.983415 0.98339 0.983366 0.983341 0.983317 0.983292 0.983268 0.983243 0.983218 0.983194 0.983169 0.983144 0.98312 0.983095 0.98307 0.983046 0.983021 0.982996 0.982971 0.982946 0.982922 0.982897 0.982872 0.982847 0.982822 0.982797 0.982772 0.982747 0.982722 0.982697 0.982672 0.982647 0.982622 0.982597 0.982572 0.982547 0.982522 0.982497 0.982471 0.982446 0.982421 0.982396 0.982371 0.982345 0.98232 0.982295 0.98227 0.982244 0.982219 0.982194 0.982168 0.982143 0.982117 0.982092 0.982067 0.982041 0.982016 0.98199 0.981965 0.981939 0.981914 0.981888 0.981862 0.981837 0.981811 0.981786 0.98176 0.981734 0.981709 0.981683 0.981657 0.981631 0.981606 0.98158 0.981554 0.981528 0.981502 0.981477 0.981451 0.981425 0.981399 0.981373 0.981347 0.981321 0.981295 0.981269 0.981243 0.981217 0.981191 0.981165 0.981139 0.981113 0.981087 0.981061 0.981035 0.981008 0.980982 0.980956 0.98093 0.980904 0.980877 0.980851 0.980825 0.980798 0.980772 0.980746 0.980719 0.980693 0.980667 0.98064 0.980614 0.980587 0.980561 0.980534 0.980508 0.980481 0.980455 0.980428 0.980402 0.980375 0.980349 0.980322 0.980295 0.980269 0.980242 0.980215 0.980189 0.980162 0.980135 0.980108 0.980081 0.980055 0.980028 0.980001 0.979974 0.979947 0.97992 0.979894 0.979867 0.97984 0.979813 0.979786 0.979759 0.979732 0.979705 0.979678 0.979651 0.979624 0.979596 0.979569 0.979542 0.979515 0.979488 0.979461 0.979433 0.979406 0.979379 0.979352 0.979324 0.979297 0.97927 0.979243 0.979215 0.979188 0.97916 0.979133 0.979106 0.979078 0.979051 0.979023 0.978996 0.978968 0.978941 0.978913 0.978886 0.978858 0.97883 0.978803 0.978775 0.978748 0.97872 0.978692 0.978665 0.978637 0.978609 0.978581 0.978554 0.978526 0.978498 0.97847 0.978442 0.978414 0.978387 0.978359 0.978331 0.978303 0.978275 0.978247 0.978219 0.978191 0.978163 0.978135 0.978107 0.978079 0.978051 0.978023 0.977995 0.977966 0.977938 0.97791 0.977882 0.977854 0.977825 0.977797 0.977769 0.977741 0.977712 0.977684 0.977656 0.977627 0.977599 0.977571 0.977542 0.977514 0.977485 0.977457 0.977428 0.9774 0.977371 0.977343 0.977314 0.977286 0.977257 0.977229 0.9772 0.977171 0.977143 0.977114 0.977085 0.977057 0.977028 0.976999 0.97697 0.976942 0.976913 0.976884 0.976855 0.976826 0.976798 0.976769 0.97674 0.976711 0.976682 0.976653 0.976624 0.976595 0.976566 0.976537 0.976508 0.976479 0.97645 0.976421 0.976392 0.976363 0.976333 0.976304 0.976275 0.976246 0.976217; #A 18000 0.976188 0.976158 0.976129 0.9761 0.97607 0.976041 0.976012 0.975982 0.975953 0.975924 0.975894 0.975865 0.975835 0.975806 0.975776 0.975747 0.975717 0.975688 0.975658 0.975629 0.975599 0.97557 0.97554 0.97551 0.975481 0.975451 0.975421 0.975392 0.975362 0.975332 0.975303 0.975273 0.975243 0.975213 0.975183 0.975154 0.975124 0.975094 0.975064 0.975034 0.975004 0.974974 0.974944 0.974914 0.974884 0.974854 0.974824 0.974794 0.974764 0.974734 0.974704 0.974674 0.974644 0.974613 0.974583 0.974553 0.974523 0.974493 0.974462 0.974432 0.974402 0.974372 0.974341 0.974311 0.974281 0.97425 0.97422 0.97419 0.974159 0.974129 0.974098 0.974068 0.974037 0.974007 0.973976 0.973946 0.973915 0.973885 0.973854 0.973823 0.973793 0.973762 0.973732 0.973701 0.97367 0.973639 0.973609 0.973578 0.973547 0.973516 0.973486 0.973455 0.973424 0.973393 0.973362 0.973331 0.9733 0.97327 0.973239 0.973208 0.973177 0.973146 0.973115 0.973084 0.973053 0.973022 0.97299 0.972959 0.972928 0.972897 0.972866 0.972835 0.972804 0.972772 0.972741 0.97271 0.972679 0.972647 0.972616 0.972585 0.972554 0.972522 0.972491 0.97246 0.972428 0.972397 0.972365 0.972334 0.972302 0.972271 0.972239 0.972208 0.972176 0.972145 0.972113 0.972082 0.97205 0.972019 0.971987 0.971955 0.971924 0.971892 0.97186 0.971828 0.971797 0.971765 0.971733 0.971701 0.97167 0.971638 0.971606 0.971574 0.971542 0.97151 0.971478 0.971447 0.971415 0.971383 0.971351 0.971319 0.971287 0.971255 0.971223 0.97119 0.971158 0.971126 0.971094 0.971062 0.97103 0.970998 0.970966 0.970933 0.970901 0.970869 0.970837 0.970804 0.970772 0.97074 0.970707 0.970675 0.970643 0.97061 0.970578 0.970546 0.970513 0.970481 0.970448 0.970416 0.970383 0.970351 0.970318 0.970286 0.970253 0.97022 0.970188 0.970155 0.970123 0.97009 0.970057 0.970025 0.969992 0.969959 0.969926 0.969894 0.969861 0.969828 0.969795 0.969762 0.96973 0.969697 0.969664 0.969631 0.969598 0.969565 0.969532 0.969499 0.969466 0.969433 0.9694 0.969367 0.969334 0.969301 0.969268 0.969235 0.969202 0.969169 0.969135 0.969102 0.969069 0.969036 0.969003 0.968969 0.968936 0.968903 0.96887 0.968836 0.968803 0.96877 0.968736 0.968703 0.96867 0.968636 0.968603 0.968569 0.968536 0.968502 0.968469 0.968435 0.968402 0.968368 0.968335 0.968301 0.968267 0.968234 0.9682 0.968167 0.968133 0.968099 0.968065 0.968032 0.967998 0.967964 0.96793 0.967897 0.967863 0.967829 0.967795 0.967761 0.967727 0.967694 0.96766 0.967626 0.967592 0.967558 0.967524 0.96749 0.967456 0.967422 0.967388 0.967354 0.96732 0.967285 0.967251 0.967217 0.967183 0.967149 0.967115 0.96708 0.967046 0.967012 0.966978 0.966944 0.966909 0.966875 0.966841 0.966806 0.966772 0.966738 0.966703 0.966669 0.966634 0.9666 0.966565 0.966531 0.966496 0.966462 0.966427 0.966393 0.966358 0.966324 0.966289 0.966254 0.96622 0.966185 0.966151 0.966116 0.966081 0.966046 0.966012 0.965977 0.965942 0.965907 0.965873 0.965838 0.965803 0.965768 0.965733 0.965698 0.965663 0.965628 0.965594 0.965559 0.965524 0.965489 0.965454 0.965419 0.965383 0.965348 0.965313 0.965278 0.965243 0.965208 0.965173 0.965138 0.965102 0.965067 0.965032 0.964997 0.964962 0.964926 0.964891 0.964856 0.96482 0.964785 0.96475 0.964714 0.964679 0.964644 0.964608 0.964573 0.964537 0.964502 0.964466 0.964431 0.964395 0.96436 0.964324 0.964289 0.964253 0.964217 0.964182 0.964146 0.96411 0.964075 0.964039 0.964003 0.963968 0.963932 0.963896 0.96386 0.963825 0.963789 0.963753 0.963717 0.963681 0.963645 0.963609 0.963574 0.963538 0.963502 0.963466 0.96343 0.963394 0.963358 0.963322 0.963286 0.96325 0.963214 0.963177 0.963141 0.963105 0.963069 0.963033 0.962997 0.96296 0.962924 0.962888 0.962852 0.962815 0.962779 0.962743 0.962707 0.96267 0.962634 0.962597 0.962561 0.962525 0.962488 0.962452 0.962415 0.962379 0.962342 0.962306 0.962269 0.962233 0.962196 0.96216 0.962123 0.962086 0.96205 0.962013 0.961976 0.96194 0.961903 0.961866 0.96183 0.961793 0.961756 0.961719 0.961682 0.961646 0.961609 0.961572 0.961535 0.961498 0.961461 0.961424 0.961388 0.961351 0.961314 0.961277 0.96124 0.961203 0.961166 0.961128 0.961091 0.961054 0.961017 0.96098 0.960943 0.960906 0.960869 0.960831 0.960794 0.960757 0.96072 0.960683 0.960645 0.960608 0.960571 0.960533 0.960496 0.960459 0.960421 0.960384 0.960346 0.960309 0.960272 0.960234 0.960197 0.960159 0.960122 0.960084 0.960047 0.960009 0.959971 0.959934 0.959896 0.959859 0.959821 0.959783 0.959746 0.959708 0.95967 0.959632 0.959595 0.959557 0.959519 0.959481 0.959444 0.959406 0.959368 0.95933 0.959292 0.959254 0.959216 0.959178 0.95914 0.959102 0.959064 0.959026 0.958988 0.95895 0.958912 0.958874 0.958836 0.958798 0.95876 0.958722 0.958684 0.958646 0.958607 0.958569 0.958531 0.958493 0.958454 0.958416 0.958378 0.95834 0.958301 0.958263 0.958225 0.958186 0.958148 0.958109 0.958071 0.958032 0.957994 0.957956 0.957917 0.957879 0.95784 0.957801 0.957763 0.957724 0.957686 0.957647 0.957609 0.95757 0.957531 0.957493 0.957454 0.957415 0.957376 0.957338 0.957299 0.95726 0.957221 0.957183 0.957144 0.957105 0.957066 0.957027 0.956988 0.956949 0.95691 0.956871 0.956833 0.956794 0.956755 0.956716 0.956676 0.956637 0.956598 0.956559 0.95652 0.956481 0.956442 0.956403 0.956364 0.956324 0.956285 0.956246 0.956207 0.956168 0.956128 0.956089 0.95605 0.95601 0.955971 0.955932 0.955892 0.955853 0.955814 0.955774 0.955735 0.955695 0.955656 0.955616 0.955577 0.955537 0.955498 0.955458 0.955419 0.955379 0.95534 0.9553 0.95526 0.955221 0.955181 0.955141 0.955102 0.955062 0.955022 0.954982 0.954943 0.954903 0.954863 0.954823 0.954783 0.954744 0.954704 0.954664 0.954624 0.954584 0.954544 0.954504 0.954464 0.954424 0.954384 0.954344 0.954304 0.954264 0.954224 0.954184 0.954144 0.954104 0.954064 0.954023 0.953983 0.953943 0.953903 0.953863 0.953822 0.953782 0.953742 0.953702 0.953661 0.953621 0.953581 0.95354 0.9535 0.95346 0.953419 0.953379 0.953338 0.953298 0.953257 0.953217 0.953176 0.953136 0.953095 0.953055 0.953014 0.952974 0.952933 0.952892 0.952852 0.952811 0.95277 0.95273 0.952689 0.952648 0.952608 0.952567 0.952526 0.952485 0.952445 0.952404 0.952363 0.952322 0.952281 0.95224 0.952199 0.952158 0.952118 0.952077 0.952036 0.951995 0.951954 0.951913 0.951872 0.951831 0.951789 0.951748 0.951707 0.951666 0.951625 0.951584 0.951543 0.951502 0.95146 0.951419 0.951378 0.951337 0.951295 0.951254 0.951213 0.951172 0.95113 0.951089 0.951047 0.951006 0.950965 0.950923 0.950882 0.95084 0.950799 0.950757 0.950716 0.950674 0.950633 0.950591 0.95055 0.950508 0.950467 0.950425 0.950383 0.950342 0.9503 0.950258 0.950217 0.950175 0.950133 0.950091 0.95005 0.950008 0.949966 0.949924 0.949883 0.949841 0.949799 0.949757 0.949715 0.949673 0.949631 0.949589 0.949547 0.949505 0.949463 0.949421 0.949379 0.949337 0.949295 0.949253 0.949211 0.949169 0.949127 0.949085 0.949042 0.949 0.948958 0.948916 0.948874 0.948831 0.948789 0.948747 0.948705 0.948662 0.94862 0.948578 0.948535 0.948493 0.948451 0.948408 0.948366 0.948323 0.948281 0.948238 0.948196 0.948153 0.948111 0.948068 0.948026 0.947983 0.947941 0.947898 0.947855 0.947813 0.94777 0.947727 0.947685 0.947642 0.947599 0.947556 0.947514 0.947471 0.947428 0.947385 0.947343 0.9473 0.947257 0.947214 0.947171 0.947128 0.947085 0.947042 0.946999 0.946956 0.946913 0.946871 0.946827 0.946784 0.946741 0.946698 0.946655 0.946612 0.946569 0.946526 0.946483 0.94644 0.946396 0.946353 0.94631 0.946267 0.946224 0.94618 0.946137 0.946094 0.94605 0.946007 0.945964 0.94592 0.945877 0.945834 0.94579 0.945747 0.945703 0.94566 0.945616 0.945573 0.945529 0.945486 0.945442 0.945399 0.945355 0.945312 0.945268 0.945224 0.945181 0.945137 0.945093 0.94505 0.945006 0.944962 0.944919 0.944875 0.944831 0.944787 0.944743 0.9447 0.944656 0.944612 0.944568 0.944524 0.94448 0.944436 0.944392 0.944348 0.944305 0.944261 0.944217 0.944173 0.944129 0.944084 0.94404 0.943996 0.943952 0.943908 0.943864 0.94382 0.943776 0.943731 0.943687 0.943643 0.943599 0.943555 0.94351 0.943466 0.943422 0.943377 0.943333 0.943289 0.943244 0.9432 0.943156 0.943111 0.943067 0.943022 0.942978 0.942933 0.942889 0.942845 0.9428 0.942755 0.942711 0.942666 0.942622 0.942577 0.942532 0.942488 0.942443 0.942399 0.942354 0.942309 0.942264 0.94222 0.942175 0.94213 0.942085 0.942041 0.941996 0.941951 0.941906 0.941861 0.941816 0.941772 0.941727 0.941682 0.941637 0.941592 0.941547 0.941502 0.941457 0.941412 0.941367 0.941322 0.941277 0.941231 0.941186 0.941141 0.941096 0.941051 0.941006 0.940961 0.940915 0.94087 0.940825 0.94078 0.940734 0.940689 0.940644 0.940599 0.940553 0.940508 0.940463 0.940417 0.940372 0.940326 0.940281 0.940235 0.94019 0.940144 0.940099 0.940054 0.940008 0.939962 0.939917 0.939871 0.939826 0.93978 0.939734 0.939689 0.939643 0.939597 0.939552 0.939506 0.93946 0.939415 0.939369 0.939323 0.939277 0.939232 0.939186 0.93914 0.939094 0.939048 0.939002 0.938956 0.93891 0.938865 0.938819 0.938773 0.938727 0.938681 0.938635 0.938589 0.938543 0.938497 0.93845; #A 19000 0.938404 0.938358 0.938312 0.938266 0.93822 0.938174 0.938127 0.938081 0.938035 0.937989 0.937943 0.937896 0.93785 0.937804 0.937757 0.937711 0.937665 0.937618 0.937572 0.937526 0.937479 0.937433 0.937386 0.93734 0.937293 0.937247 0.9372 0.937154 0.937107 0.937061 0.937014 0.936968 0.936921 0.936874 0.936828 0.936781 0.936734 0.936688 0.936641 0.936594 0.936548 0.936501 0.936454 0.936407 0.93636 0.936314 0.936267 0.93622 0.936173 0.936126 0.936079 0.936032 0.935985 0.935938 0.935892 0.935845 0.935798 0.935751 0.935704 0.935656 0.935609 0.935562 0.935515 0.935468 0.935421 0.935374 0.935327 0.93528 0.935232 0.935185 0.935138 0.935091 0.935044 0.934996 0.934949 0.934902 0.934854 0.934807 0.93476 0.934712 0.934665 0.934618 0.93457 0.934523 0.934475 0.934428 0.93438 0.934333 0.934285 0.934238 0.93419 0.934143 0.934095 0.934048 0.934 0.933952 0.933905 0.933857 0.933809 0.933762 0.933714 0.933666 0.933619 0.933571 0.933523 0.933475 0.933428 0.93338 0.933332 0.933284 0.933236 0.933188 0.93314 0.933093 0.933045 0.932997 0.932949 0.932901 0.932853 0.932805 0.932757 0.932709 0.932661 0.932613 0.932565 0.932517 0.932468 0.93242 0.932372 0.932324 0.932276 0.932228 0.932179 0.932131 0.932083 0.932035 0.931986 0.931938 0.93189 0.931842 0.931793 0.931745 0.931696 0.931648 0.9316 0.931551 0.931503 0.931454 0.931406 0.931358 0.931309 0.931261 0.931212 0.931163 0.931115 0.931066 0.931018 0.930969 0.930921 0.930872 0.930823 0.930775 0.930726 0.930677 0.930628 0.93058 0.930531 0.930482 0.930433 0.930385 0.930336 0.930287 0.930238 0.930189 0.93014 0.930092 0.930043 0.929994 0.929945 0.929896 0.929847 0.929798 0.929749 0.9297 0.929651 0.929602 0.929553 0.929504 0.929455 0.929406 0.929356 0.929307 0.929258 0.929209 0.92916 0.929111 0.929061 0.929012 0.928963 0.928914 0.928864 0.928815 0.928766 0.928716 0.928667 0.928618 0.928568 0.928519 0.928469 0.92842 0.928371 0.928321 0.928272 0.928222 0.928173 0.928123 0.928074 0.928024 0.927975 0.927925 0.927875 0.927826 0.927776 0.927727 0.927677 0.927627 0.927577 0.927528 0.927478 0.927428 0.927379 0.927329 0.927279 0.927229 0.927179 0.92713 0.92708 0.92703 0.92698 0.92693 0.92688 0.92683 0.92678 0.92673 0.92668 0.92663 0.92658 0.92653 0.92648 0.92643 0.92638 0.92633 0.92628 0.92623 0.92618 0.92613 0.926079 0.926029 0.925979 0.925929 0.925879 0.925828 0.925778 0.925728 0.925678 0.925627 0.925577 0.925527 0.925476 0.925426 0.925376 0.925325 0.925275 0.925224 0.925174 0.925123 0.925073 0.925022 0.924972 0.924921 0.924871 0.92482 0.92477 0.924719 0.924669 0.924618 0.924567 0.924517 0.924466 0.924415 0.924365 0.924314 0.924263 0.924212 0.924162 0.924111 0.92406 0.924009 0.923959 0.923908 0.923857 0.923806 0.923755 0.923704 0.923653 0.923602 0.923551 0.9235 0.92345 0.923399 0.923348 0.923297 0.923245 0.923194 0.923143 0.923092 0.923041 0.92299 0.922939 0.922888 0.922837 0.922785 0.922734 0.922683 0.922632 0.922581 0.922529 0.922478 0.922427 0.922376 0.922324 0.922273 0.922221 0.92217 0.922119 0.922067 0.922016 0.921965 0.921913 0.921862 0.92181 0.921759 0.921707 0.921656 0.921604 0.921553 0.921501 0.921449 0.921398 0.921346 0.921295 0.921243 0.921191 0.92114 0.921088 0.921036 0.920985 0.920933 0.920881 0.920829 0.920777 0.920726 0.920674 0.920622 0.92057 0.920518 0.920466 0.920415 0.920363 0.920311 0.920259 0.920207 0.920155 0.920103 0.920051 0.919999 0.919947 0.919895 0.919843 0.919791 0.919739 0.919687 0.919634 0.919582 0.91953 0.919478 0.919426 0.919374 0.919321 0.919269 0.919217 0.919165 0.919112 0.91906 0.919008 0.918955 0.918903 0.918851 0.918798 0.918746 0.918694 0.918641 0.918589 0.918536 0.918484 0.918431 0.918379 0.918326 0.918274 0.918221 0.918169 0.918116 0.918064 0.918011 0.917958 0.917906 0.917853 0.9178 0.917748 0.917695 0.917642 0.91759 0.917537 0.917484 0.917431 0.917379 0.917326 0.917273 0.91722 0.917167 0.917114 0.917062 0.917009 0.916956 0.916903 0.91685 0.916797 0.916744 0.916691 0.916638 0.916585 0.916532 0.916479 0.916426 0.916373 0.91632 0.916267 0.916214 0.91616 0.916107 0.916054 0.916001 0.915948 0.915895 0.915841 0.915788 0.915735 0.915682 0.915628 0.915575 0.915522 0.915468 0.915415 0.915362 0.915308 0.915255 0.915201 0.915148 0.915095 0.915041 0.914988 0.914934 0.914881 0.914827 0.914774 0.91472 0.914666 0.914613 0.914559 0.914506 0.914452 0.914398 0.914345 0.914291 0.914237 0.914184 0.91413 0.914076 0.914023 0.913969 0.913915 0.913861 0.913807 0.913754 0.9137 0.913646 0.913592 0.913538 0.913484 0.91343 0.913376 0.913322 0.913269 0.913215 0.913161 0.913107 0.913052 0.912998 0.912944 0.91289 0.912836 0.912782 0.912728 0.912674 0.91262 0.912566 0.912511 0.912457 0.912403 0.912349 0.912295 0.91224 0.912186 0.912132 0.912078 0.912023 0.911969 0.911915 0.91186 0.911806 0.911752 0.911697 0.911643 0.911588 0.911534 0.911479 0.911425 0.91137 0.911316 0.911261 0.911207 0.911152 0.911098 0.911043 0.910989 0.910934 0.910879 0.910825 0.91077 0.910715 0.910661 0.910606 0.910551 0.910497 0.910442 0.910387 0.910332 0.910277 0.910223 0.910168 0.910113 0.910058 0.910003 0.909948 0.909894 0.909839 0.909784 0.909729 0.909674 0.909619 0.909564 0.909509 0.909454 0.909399 0.909344 0.909289 0.909234 0.909178 0.909123 0.909068 0.909013 0.908958 0.908903 0.908848 0.908792 0.908737 0.908682 0.908627 0.908571 0.908516 0.908461 0.908406 0.90835 0.908295 0.90824 0.908184 0.908129 0.908073 0.908018 0.907963 0.907907 0.907852 0.907796 0.907741 0.907685 0.90763 0.907574 0.907519 0.907463 0.907408 0.907352 0.907296 0.907241 0.907185 0.90713 0.907074 0.907018 0.906962 0.906907 0.906851 0.906795 0.90674 0.906684 0.906628 0.906572 0.906516 0.906461 0.906405 0.906349 0.906293 0.906237 0.906181 0.906125 0.906069 0.906013 0.905957 0.905901 0.905845 0.905789 0.905733 0.905677 0.905621 0.905565 0.905509 0.905453 0.905397 0.905341 0.905285 0.905229 0.905172 0.905116 0.90506 0.905004 0.904948 0.904891 0.904835 0.904779 0.904723 0.904666 0.90461 0.904554 0.904497 0.904441 0.904384 0.904328 0.904272 0.904215 0.904159 0.904102 0.904046 0.903989 0.903933 0.903876 0.90382 0.903763 0.903707 0.90365 0.903594 0.903537 0.90348 0.903424 0.903367 0.90331 0.903254 0.903197 0.90314 0.903084 0.903027 0.90297 0.902913 0.902857 0.9028 0.902743 0.902686 0.902629 0.902573 0.902516 0.902459 0.902402 0.902345 0.902288 0.902231 0.902174 0.902117 0.90206 0.902003 0.901946 0.901889 0.901832 0.901775 0.901718 0.901661 0.901604 0.901547 0.901489 0.901432 0.901375 0.901318 0.901261 0.901204 0.901146 0.901089 0.901032 0.900975 0.900917 0.90086 0.900803 0.900745 0.900688 0.900631 0.900573 0.900516 0.900459 0.900401 0.900344 0.900286 0.900229 0.900171 0.900114 0.900056 0.899999 0.899941 0.899884 0.899826 0.899769 0.899711 0.899653 0.899596 0.899538 0.899481 0.899423 0.899365 0.899307 0.89925 0.899192 0.899134 0.899077 0.899019 0.898961 0.898903 0.898845 0.898788 0.89873 0.898672 0.898614 0.898556 0.898498 0.89844 0.898382 0.898324 0.898266 0.898209 0.898151 0.898093 0.898035 0.897977 0.897918 0.89786 0.897802 0.897744 0.897686 0.897628 0.89757 0.897512 0.897454 0.897395 0.897337 0.897279 0.897221 0.897163 0.897104 0.897046 0.896988 0.896929 0.896871 0.896813 0.896755 0.896696 0.896638 0.896579 0.896521 0.896463 0.896404 0.896346 0.896287 0.896229 0.89617 0.896112 0.896053 0.895995 0.895936 0.895878 0.895819 0.895761 0.895702 0.895643 0.895585 0.895526 0.895467 0.895409 0.89535 0.895291 0.895233 0.895174 0.895115 0.895056 0.894998 0.894939 0.89488 0.894821 0.894762 0.894704 0.894645 0.894586 0.894527 0.894468 0.894409 0.89435 0.894291 0.894232 0.894173 0.894114 0.894055 0.893996 0.893937 0.893878 0.893819 0.89376 0.893701 0.893642 0.893583 0.893524 0.893464 0.893405 0.893346 0.893287 0.893228 0.893168 0.893109 0.89305 0.892991 0.892931 0.892872 0.892813 0.892753 0.892694 0.892635 0.892575 0.892516 0.892457 0.892397 0.892338 0.892278 0.892219 0.892159 0.8921 0.89204 0.891981 0.891921 0.891862 0.891802 0.891743 0.891683 0.891623 0.891564 0.891504 0.891445 0.891385 0.891325 0.891266 0.891206 0.891146 0.891086 0.891027 0.890967 0.890907 0.890847 0.890788 0.890728 0.890668 0.890608 0.890548 0.890488 0.890429 0.890369 0.890309 0.890249 0.890189 0.890129 0.890069 0.890009 0.889949 0.889889 0.889829 0.889769 0.889709 0.889649 0.889589 0.889529 0.889468 0.889408 0.889348 0.889288 0.889228 0.889168 0.889107 0.889047 0.888987 0.888927 0.888866 0.888806 0.888746 0.888686 0.888625 0.888565 0.888505 0.888444 0.888384 0.888323 0.888263 0.888203 0.888142 0.888082 0.888021 0.887961 0.8879 0.88784 0.887779 0.887719 0.887658 0.887598 0.887537 0.887477 0.887416 0.887355 0.887295 0.887234 0.887173 0.887113 0.887052 0.886991 0.886931 0.88687 0.886809 0.886748 0.886688 0.886627 0.886566 0.886505 0.886444 0.886384 0.886323 0.886262 0.886201 0.88614 0.886079 0.886018 0.885957 0.885896 0.885835 0.885774 0.885713 0.885652 0.885591 0.88553 0.885469 0.885408 0.885347 0.885286 0.885225 0.885164 0.885103 0.885041 0.88498 0.884919 0.884858 0.884797 0.884735 0.884674 0.884613; #A 20000 0.884552 0.88449 0.884429 0.884368 0.884306 0.884245 0.884184 0.884122 0.884061 0.884 0.883938 0.883877 0.883815 0.883754 0.883692 0.883631 0.883569 0.883508 0.883446 0.883385 0.883323 0.883262 0.8832 0.883139 0.883077 0.883015 0.882954 0.882892 0.88283 0.882769 0.882707 0.882645 0.882584 0.882522 0.88246 0.882398 0.882337 0.882275 0.882213 0.882151 0.882089 0.882028 0.881966 0.881904 0.881842 0.88178 0.881718 0.881656 0.881594 0.881532 0.88147 0.881408 0.881346 0.881284 0.881222 0.88116 0.881098 0.881036 0.880974 0.880912 0.88085 0.880788 0.880726 0.880663 0.880601 0.880539 0.880477 0.880415 0.880352 0.88029 0.880228 0.880166 0.880103 0.880041 0.879979 0.879916 0.879854 0.879792 0.879729 0.879667 0.879605 0.879542 0.87948 0.879417 0.879355 0.879292 0.87923 0.879167 0.879105 0.879042 0.87898 0.878917 0.878855 0.878792 0.87873 0.878667 0.878604 0.878542 0.878479 0.878416 0.878354 0.878291 0.878228 0.878166 0.878103 0.87804 0.877977 0.877915 0.877852 0.877789 0.877726 0.877664 0.877601 0.877538 0.877475 0.877412 0.877349 0.877286 0.877223 0.87716 0.877097 0.877035 0.876972 0.876909 0.876846 0.876783 0.87672 0.876656 0.876593 0.87653 0.876467 0.876404 0.876341 0.876278 0.876215 0.876152 0.876088 0.876025 0.875962 0.875899 0.875836 0.875772 0.875709 0.875646 0.875583 0.875519 0.875456 0.875393 0.875329 0.875266 0.875203 0.875139 0.875076 0.875012 0.874949 0.874886 0.874822 0.874759 0.874695 0.874632 0.874568 0.874505 0.874441 0.874378 0.874314 0.87425 0.874187 0.874123 0.87406 0.873996 0.873932 0.873869 0.873805 0.873741 0.873678 0.873614 0.87355 0.873487 0.873423 0.873359 0.873295 0.873231 0.873168 0.873104 0.87304 0.872976 0.872912 0.872848 0.872785 0.872721 0.872657 0.872593 0.872529 0.872465 0.872401 0.872337 0.872273 0.872209 0.872145 0.872081 0.872017 0.871953 0.871889 0.871825 0.871761 0.871696 0.871632 0.871568 0.871504 0.87144 0.871376 0.871311 0.871247 0.871183 0.871119 0.871054 0.87099 0.870926 0.870862 0.870797 0.870733 0.870669 0.870604 0.87054 0.870476 0.870411 0.870347 0.870282 0.870218 0.870153 0.870089 0.870025 0.86996 0.869896 0.869831 0.869767 0.869702 0.869637 0.869573 0.869508 0.869444 0.869379 0.869314 0.86925 0.869185 0.86912 0.869056 0.868991 0.868926 0.868862 0.868797 0.868732 0.868667 0.868603 0.868538 0.868473 0.868408 0.868343 0.868279 0.868214 0.868149 0.868084 0.868019 0.867954 0.867889 0.867824 0.867759 0.867694 0.867629 0.867564 0.867499 0.867434 0.867369 0.867304 0.867239 0.867174 0.867109 0.867044 0.866979 0.866914 0.866849 0.866784 0.866718 0.866653 0.866588 0.866523 0.866458 0.866392 0.866327 0.866262 0.866197 0.866131 0.866066 0.866001 0.865935 0.86587 0.865805 0.865739 0.865674 0.865609 0.865543 0.865478 0.865412 0.865347 0.865281 0.865216 0.86515 0.865085 0.865019 0.864954 0.864888 0.864823 0.864757 0.864692 0.864626 0.86456 0.864495 0.864429 0.864364 0.864298 0.864232 0.864166 0.864101 0.864035 0.863969 0.863904 0.863838 0.863772 0.863706 0.863641 0.863575 0.863509 0.863443 0.863377 0.863311 0.863245 0.86318 0.863114 0.863048 0.862982 0.862916 0.86285 0.862784 0.862718 0.862652 0.862586 0.86252 0.862454 0.862388 0.862322 0.862256 0.86219 0.862124 0.862057 0.861991 0.861925 0.861859 0.861793 0.861727 0.86166 0.861594 0.861528 0.861462 0.861396 0.861329 0.861263 0.861197 0.86113 0.861064 0.860998 0.860931 0.860865 0.860799 0.860732 0.860666 0.8606 0.860533 0.860467 0.8604 0.860334 0.860267 0.860201 0.860134 0.860068 0.860001 0.859935 0.859868 0.859802 0.859735 0.859668 0.859602 0.859535 0.859469 0.859402 0.859335 0.859269 0.859202 0.859135 0.859069 0.859002 0.858935 0.858868 0.858801 0.858735 0.858668 0.858601 0.858534 0.858467 0.858401 0.858334 0.858267 0.8582 0.858133 0.858066 0.857999 0.857932 0.857865 0.857798 0.857731 0.857664 0.857597 0.85753 0.857463 0.857396 0.857329 0.857262 0.857195 0.857128 0.857061 0.856994 0.856927 0.85686 0.856792 0.856725 0.856658 0.856591 0.856524 0.856456 0.856389 0.856322 0.856255 0.856187 0.85612 0.856053 0.855986 0.855918 0.855851 0.855783 0.855716 0.855649 0.855581 0.855514 0.855447 0.855379 0.855312 0.855244 0.855177 0.855109 0.855042 0.854974 0.854907 0.854839 0.854772 0.854704 0.854636 0.854569 0.854501 0.854434 0.854366 0.854298 0.854231 0.854163 0.854095 0.854028 0.85396 0.853892 0.853824 0.853757 0.853689 0.853621 0.853553 0.853486 0.853418 0.85335 0.853282 0.853214 0.853146 0.853079 0.853011 0.852943 0.852875 0.852807 0.852739 0.852671 0.852603 0.852535 0.852467 0.852399 0.852331 0.852263 0.852195 0.852127 0.852059 0.851991 0.851923 0.851855 0.851786 0.851718 0.85165 0.851582 0.851514 0.851446 0.851377 0.851309 0.851241 0.851173 0.851104 0.851036 0.850968 0.8509 0.850831 0.850763 0.850695 0.850626 0.850558 0.85049 0.850421 0.850353 0.850284 0.850216 0.850148 0.850079 0.850011 0.849942 0.849874 0.849805 0.849737 0.849668 0.8496 0.849531 0.849463 0.849394 0.849325 0.849257 0.849188 0.849119 0.849051 0.848982 0.848914 0.848845 0.848776 0.848707 0.848639 0.84857 0.848501 0.848433 0.848364 0.848295 0.848226 0.848157 0.848089 0.84802 0.847951 0.847882 0.847813 0.847744 0.847675 0.847606 0.847538 0.847469 0.8474 0.847331 0.847262 0.847193 0.847124 0.847055 0.846986 0.846917 0.846848 0.846779 0.846709 0.84664 0.846571 0.846502 0.846433 0.846364 0.846295 0.846226 0.846156 0.846087 0.846018 0.845949 0.84588 0.84581 0.845741 0.845672 0.845603 0.845533 0.845464 0.845395 0.845325 0.845256 0.845187 0.845117 0.845048 0.844979 0.844909 0.84484 0.84477 0.844701 0.844631 0.844562 0.844492 0.844423 0.844353 0.844284 0.844214 0.844145 0.844075 0.844006 0.843936 0.843867 0.843797 0.843727 0.843658 0.843588 0.843518 0.843449 0.843379 0.843309 0.84324 0.84317 0.8431 0.84303 0.842961 0.842891 0.842821 0.842751 0.842681 0.842612 0.842542 0.842472 0.842402 0.842332 0.842262 0.842192 0.842123 0.842053 0.841983 0.841913 0.841843 0.841773 0.841703 0.841633 0.841563 0.841493 0.841423 0.841353 0.841283 0.841213 0.841143 0.841072 0.841002 0.840932 0.840862 0.840792 0.840722 0.840652 0.840581 0.840511 0.840441 0.840371 0.840301 0.84023 0.84016 0.84009 0.840019 0.839949 0.839879 0.839809 0.839738 0.839668 0.839597 0.839527 0.839457 0.839386 0.839316 0.839245 0.839175 0.839105 0.839034 0.838964 0.838893 0.838823 0.838752 0.838682 0.838611 0.838541 0.83847 0.838399 0.838329 0.838258 0.838188 0.838117 0.838046 0.837976 0.837905 0.837834 0.837764 0.837693 0.837622 0.837552 0.837481 0.83741 0.837339 0.837269 0.837198 0.837127 0.837056 0.836985 0.836914 0.836844 0.836773 0.836702 0.836631 0.83656 0.836489 0.836418 0.836347 0.836276 0.836205 0.836134 0.836064 0.835993 0.835922 0.835851 0.835779 0.835708 0.835637 0.835566 0.835495 0.835424 0.835353 0.835282 0.835211 0.83514 0.835068 0.834997 0.834926 0.834855 0.834784 0.834713 0.834641 0.83457 0.834499 0.834428 0.834356 0.834285 0.834214 0.834142 0.834071 0.834 0.833928 0.833857 0.833786 0.833714 0.833643 0.833571 0.8335 0.833429 0.833357 0.833286 0.833214 0.833143 0.833071 0.833 0.832928 0.832857 0.832785 0.832713 0.832642 0.83257 0.832499 0.832427 0.832355 0.832284 0.832212 0.832141 0.832069 0.831997 0.831926 0.831854 0.831782 0.83171 0.831639 0.831567 0.831495 0.831423 0.831352 0.83128 0.831208 0.831136 0.831064 0.830992 0.830921 0.830849 0.830777 0.830705 0.830633 0.830561 0.830489 0.830417 0.830345 0.830273 0.830201 0.830129 0.830057 0.829985 0.829913 0.829841 0.829769 0.829697 0.829625 0.829553 0.829481 0.829409 0.829336 0.829264 0.829192 0.82912 0.829048 0.828976 0.828903 0.828831 0.828759 0.828687 0.828614 0.828542 0.82847 0.828398 0.828325 0.828253 0.828181 0.828108 0.828036 0.827964 0.827891 0.827819 0.827746 0.827674 0.827602 0.827529 0.827457 0.827384 0.827312 0.827239 0.827167 0.827094 0.827022 0.826949 0.826877 0.826804 0.826732 0.826659 0.826586 0.826514 0.826441 0.826369 0.826296 0.826223 0.826151 0.826078 0.826005 0.825933 0.82586 0.825787 0.825714 0.825642 0.825569 0.825496 0.825423 0.825351 0.825278 0.825205 0.825132 0.825059 0.824986 0.824914 0.824841 0.824768 0.824695 0.824622 0.824549 0.824476 0.824403 0.82433 0.824257 0.824184 0.824111 0.824038 0.823965 0.823892 0.823819 0.823746 0.823673 0.8236 0.823527 0.823454 0.823381 0.823307 0.823234 0.823161 0.823088 0.823015 0.822942 0.822868 0.822795 0.822722 0.822649 0.822576 0.822502 0.822429 0.822356 0.822282 0.822209 0.822136 0.822062 0.821989 0.821916 0.821842 0.821769 0.821696 0.821622 0.821549 0.821475 0.821402 0.821329 0.821255 0.821182 0.821108 0.821035 0.820961 0.820888 0.820814 0.820741 0.820667 0.820593 0.82052 0.820446 0.820373 0.820299 0.820225 0.820152 0.820078 0.820004 0.819931 0.819857 0.819783 0.81971 0.819636 0.819562 0.819488 0.819415 0.819341 0.819267 0.819193 0.81912 0.819046 0.818972 0.818898 0.818824 0.81875 0.818677 0.818603 0.818529 0.818455 0.818381 0.818307 0.818233 0.818159 0.818085 0.818011 0.817937 0.817863 0.817789 0.817715 0.817641 0.817567 0.817493 0.817419 0.817345 0.817271 0.817197 0.817123 0.817048 0.816974 0.8169 0.816826 0.816752 0.816678; #A 21000 0.816603 0.816529 0.816455 0.816381 0.816306 0.816232 0.816158 0.816084 0.816009 0.815935 0.815861 0.815786 0.815712 0.815638 0.815563 0.815489 0.815415 0.81534 0.815266 0.815191 0.815117 0.815042 0.814968 0.814894 0.814819 0.814745 0.81467 0.814596 0.814521 0.814447 0.814372 0.814297 0.814223 0.814148 0.814074 0.813999 0.813924 0.81385 0.813775 0.813701 0.813626 0.813551 0.813477 0.813402 0.813327 0.813252 0.813178 0.813103 0.813028 0.812953 0.812879 0.812804 0.812729 0.812654 0.812579 0.812505 0.81243 0.812355 0.81228 0.812205 0.81213 0.812055 0.81198 0.811906 0.811831 0.811756 0.811681 0.811606 0.811531 0.811456 0.811381 0.811306 0.811231 0.811156 0.811081 0.811005 0.81093 0.810855 0.81078 0.810705 0.81063 0.810555 0.81048 0.810405 0.810329 0.810254 0.810179 0.810104 0.810029 0.809953 0.809878 0.809803 0.809728 0.809652 0.809577 0.809502 0.809426 0.809351 0.809276 0.809201 0.809125 0.80905 0.808974 0.808899 0.808824 0.808748 0.808673 0.808597 0.808522 0.808447 0.808371 0.808296 0.80822 0.808145 0.808069 0.807994 0.807918 0.807842 0.807767 0.807691 0.807616 0.80754 0.807465 0.807389 0.807313 0.807238 0.807162 0.807086 0.807011 0.806935 0.806859 0.806784 0.806708 0.806632 0.806557 0.806481 0.806405 0.806329 0.806253 0.806178 0.806102 0.806026 0.80595 0.805874 0.805799 0.805723 0.805647 0.805571 0.805495 0.805419 0.805343 0.805267 0.805191 0.805115 0.80504 0.804964 0.804888 0.804812 0.804736 0.80466 0.804583 0.804507 0.804431 0.804355 0.804279 0.804203 0.804127 0.804051 0.803975 0.803899 0.803823 0.803746 0.80367 0.803594 0.803518 0.803442 0.803366 0.803289 0.803213 0.803137 0.803061 0.802984 0.802908 0.802832 0.802756 0.802679 0.802603 0.802527 0.80245 0.802374 0.802298 0.802221 0.802145 0.802068 0.801992 0.801916 0.801839 0.801763 0.801686 0.80161 0.801533 0.801457 0.80138 0.801304 0.801227 0.801151 0.801074 0.800998 0.800921 0.800845 0.800768 0.800691 0.800615 0.800538 0.800462 0.800385 0.800308 0.800232 0.800155 0.800078 0.800002 0.799925 0.799848 0.799771 0.799695 0.799618 0.799541 0.799464 0.799388 0.799311 0.799234 0.799157 0.79908 0.799004 0.798927 0.79885 0.798773 0.798696 0.798619 0.798542 0.798465 0.798388 0.798311 0.798235 0.798158 0.798081 0.798004 0.797927 0.79785 0.797773 0.797696 0.797619 0.797542 0.797464 0.797387 0.79731 0.797233 0.797156 0.797079 0.797002 0.796925 0.796848 0.796771 0.796693 0.796616 0.796539 0.796462 0.796385 0.796307 0.79623 0.796153 0.796076 0.795998 0.795921 0.795844 0.795766 0.795689 0.795612 0.795535 0.795457 0.79538 0.795303 0.795225 0.795148 0.79507 0.794993 0.794915 0.794838 0.794761 0.794683 0.794606 0.794528 0.794451 0.794373 0.794296 0.794218 0.794141 0.794063 0.793986 0.793908 0.793831 0.793753 0.793675 0.793598 0.79352 0.793443 0.793365 0.793287 0.79321 0.793132 0.793054 0.792977 0.792899 0.792821 0.792744 0.792666 0.792588 0.79251 0.792433 0.792355 0.792277 0.792199 0.792121 0.792044 0.791966 0.791888 0.79181 0.791732 0.791654 0.791576 0.791499 0.791421 0.791343 0.791265 0.791187 0.791109 0.791031 0.790953 0.790875 0.790797 0.790719 0.790641 0.790563 0.790485 0.790407 0.790329 0.790251 0.790173 0.790095 0.790017 0.789939 0.78986 0.789782 0.789704 0.789626 0.789548 0.78947 0.789392 0.789313 0.789235 0.789157 0.789079 0.789 0.788922 0.788844 0.788766 0.788687 0.788609 0.788531 0.788453 0.788374 0.788296 0.788218 0.788139 0.788061 0.787982 0.787904 0.787826 0.787747 0.787669 0.78759 0.787512 0.787434 0.787355 0.787277 0.787198 0.78712 0.787041 0.786963 0.786884 0.786806 0.786727 0.786649 0.78657 0.786491 0.786413 0.786334 0.786256 0.786177 0.786098 0.78602 0.785941 0.785863 0.785784 0.785705 0.785626 0.785548 0.785469 0.78539 0.785312 0.785233 0.785154 0.785075 0.784997 0.784918 0.784839 0.78476 0.784681 0.784603 0.784524 0.784445 0.784366 0.784287 0.784208 0.78413 0.784051 0.783972 0.783893 0.783814 0.783735 0.783656 0.783577 0.783498 0.783419 0.78334 0.783261 0.783182 0.783103 0.783024 0.782945 0.782866 0.782787 0.782708 0.782629 0.78255 0.78247 0.782391 0.782312 0.782233 0.782154 0.782075 0.781996 0.781916 0.781837 0.781758 0.781679 0.7816 0.78152 0.781441 0.781362 0.781283 0.781203 0.781124 0.781045 0.780966 0.780886 0.780807 0.780728 0.780648 0.780569 0.78049 0.78041 0.780331 0.780251 0.780172 0.780093 0.780013 0.779934 0.779854 0.779775 0.779695 0.779616 0.779536 0.779457 0.779377 0.779298 0.779218 0.779139 0.779059 0.77898 0.7789 0.778821 0.778741 0.778661 0.778582 0.778502 0.778423 0.778343 0.778263 0.778184 0.778104 0.778024 0.777945 0.777865 0.777785 0.777705 0.777626 0.777546 0.777466 0.777386 0.777307 0.777227 0.777147 0.777067 0.776987 0.776908 0.776828 0.776748 0.776668 0.776588 0.776508 0.776428 0.776349 0.776269 0.776189 0.776109 0.776029 0.775949 0.775869 0.775789 0.775709 0.775629 0.775549 0.775469 0.775389 0.775309 0.775229 0.775149 0.775069 0.774989 0.774909 0.774829 0.774749 0.774668 0.774588 0.774508 0.774428 0.774348 0.774268 0.774188 0.774107 0.774027 0.773947 0.773867 0.773787 0.773706 0.773626 0.773546 0.773466 0.773385 0.773305 0.773225 0.773144 0.773064 0.772984 0.772904 0.772823 0.772743 0.772663 0.772582 0.772502 0.772421 0.772341 0.772261 0.77218 0.7721 0.772019 0.771939 0.771858 0.771778 0.771697 0.771617 0.771536 0.771456 0.771375 0.771295 0.771214 0.771134 0.771053 0.770973 0.770892 0.770811 0.770731 0.77065 0.77057 0.770489 0.770408 0.770328 0.770247 0.770166 0.770086 0.770005 0.769924 0.769844 0.769763 0.769682 0.769601 0.769521 0.76944 0.769359 0.769278 0.769198 0.769117 0.769036 0.768955 0.768874 0.768794 0.768713 0.768632 0.768551 0.76847 0.768389 0.768308 0.768227 0.768147 0.768066 0.767985 0.767904 0.767823 0.767742 0.767661 0.76758 0.767499 0.767418 0.767337 0.767256 0.767175 0.767094 0.767013 0.766932 0.76685 0.766769 0.766688 0.766607 0.766526 0.766445 0.766364 0.766283 0.766202 0.76612 0.766039 0.765958 0.765877 0.765796 0.765714 0.765633 0.765552 0.765471 0.76539 0.765308 0.765227 0.765146 0.765064 0.764983 0.764902 0.764821 0.764739 0.764658 0.764576 0.764495 0.764414 0.764332 0.764251 0.76417 0.764088 0.764007 0.763925 0.763844 0.763762 0.763681 0.7636 0.763518 0.763437 0.763355 0.763274 0.763192 0.763111 0.763029 0.762947 0.762866 0.762784 0.762703 0.762621 0.76254 0.762458 0.762376 0.762295 0.762213 0.762132 0.76205 0.761968 0.761887 0.761805 0.761723 0.761642 0.76156 0.761478 0.761396 0.761315 0.761233 0.761151 0.761069 0.760988 0.760906 0.760824 0.760742 0.76066 0.760579 0.760497 0.760415 0.760333 0.760251 0.760169 0.760088 0.760006 0.759924 0.759842 0.75976 0.759678 0.759596 0.759514 0.759432 0.75935 0.759268 0.759186 0.759104 0.759022 0.75894 0.758858 0.758776 0.758694 0.758612 0.75853 0.758448 0.758366 0.758284 0.758202 0.75812 0.758038 0.757955 0.757873 0.757791 0.757709 0.757627 0.757545 0.757462 0.75738 0.757298 0.757216 0.757134 0.757051 0.756969 0.756887 0.756805 0.756722 0.75664 0.756558 0.756476 0.756393 0.756311 0.756229 0.756146 0.756064 0.755982 0.755899 0.755817 0.755734 0.755652 0.75557 0.755487 0.755405 0.755322 0.75524 0.755158 0.755075 0.754993 0.75491 0.754828 0.754745 0.754663 0.75458 0.754498 0.754415 0.754333 0.75425 0.754167 0.754085 0.754002 0.75392 0.753837 0.753754 0.753672 0.753589 0.753507 0.753424 0.753341 0.753259 0.753176 0.753093 0.753011 0.752928 0.752845 0.752762 0.75268 0.752597 0.752514 0.752432 0.752349 0.752266 0.752183 0.7521 0.752018 0.751935 0.751852 0.751769 0.751686 0.751603 0.751521 0.751438 0.751355 0.751272 0.751189 0.751106 0.751023 0.75094 0.750857 0.750775 0.750692 0.750609 0.750526 0.750443 0.75036 0.750277 0.750194 0.750111 0.750028 0.749945 0.749862 0.749779 0.749695 0.749612 0.749529 0.749446 0.749363 0.74928 0.749197 0.749114 0.749031 0.748948 0.748864 0.748781 0.748698 0.748615 0.748532 0.748449 0.748365 0.748282 0.748199 0.748116 0.748032 0.747949 0.747866 0.747783 0.747699 0.747616 0.747533 0.747449 0.747366 0.747283 0.747199 0.747116 0.747033 0.746949 0.746866 0.746783 0.746699 0.746616 0.746532 0.746449 0.746366 0.746282 0.746199 0.746115 0.746032 0.745948 0.745865 0.745781 0.745698 0.745614 0.745531 0.745447 0.745364 0.74528 0.745197 0.745113 0.74503 0.744946 0.744862 0.744779 0.744695 0.744612 0.744528 0.744444 0.744361 0.744277 0.744193 0.74411 0.744026 0.743942 0.743859 0.743775 0.743691 0.743608 0.743524 0.74344 0.743356 0.743273 0.743189 0.743105 0.743021 0.742938 0.742854 0.74277 0.742686 0.742602 0.742518 0.742435 0.742351 0.742267 0.742183 0.742099 0.742015 0.741931 0.741847 0.741764 0.74168 0.741596 0.741512 0.741428 0.741344 0.74126 0.741176 0.741092 0.741008 0.740924 0.74084 0.740756 0.740672 0.740588 0.740504 0.74042 0.740336 0.740252 0.740167 0.740083 0.739999 0.739915 0.739831 0.739747 0.739663 0.739579 0.739494 0.73941 0.739326 0.739242 0.739158 0.739074 0.738989 0.738905 0.738821 0.738737 0.738652 0.738568 0.738484 0.7384 0.738315 0.738231 0.738147 0.738062 0.737978 0.737894 0.737809 0.737725 0.737641 0.737556 0.737472 0.737388 0.737303 0.737219 0.737135; #A 22000 0.73705 0.736966 0.736881 0.736797 0.736712 0.736628 0.736543 0.736459 0.736374 0.73629 0.736206 0.736121 0.736037 0.735952 0.735867 0.735783 0.735698 0.735614 0.735529 0.735445 0.73536 0.735276 0.735191 0.735106 0.735022 0.734937 0.734852 0.734768 0.734683 0.734598 0.734514 0.734429 0.734344 0.73426 0.734175 0.73409 0.734006 0.733921 0.733836 0.733751 0.733667 0.733582 0.733497 0.733412 0.733328 0.733243 0.733158 0.733073 0.732988 0.732903 0.732819 0.732734 0.732649 0.732564 0.732479 0.732394 0.732309 0.732224 0.73214 0.732055 0.73197 0.731885 0.7318 0.731715 0.73163 0.731545 0.73146 0.731375 0.73129 0.731205 0.73112 0.731035 0.73095 0.730865 0.73078 0.730695 0.73061 0.730525 0.73044 0.730354 0.730269 0.730184 0.730099 0.730014 0.729929 0.729844 0.729759 0.729673 0.729588 0.729503 0.729418 0.729333 0.729248 0.729162 0.729077 0.728992 0.728907 0.728821 0.728736 0.728651 0.728566 0.72848 0.728395 0.72831 0.728225 0.728139 0.728054 0.727969 0.727883 0.727798 0.727713 0.727627 0.727542 0.727456 0.727371 0.727286 0.7272 0.727115 0.727029 0.726944 0.726859 0.726773 0.726688 0.726602 0.726517 0.726431 0.726346 0.72626 0.726175 0.726089 0.726004 0.725918 0.725833 0.725747 0.725662 0.725576 0.725491 0.725405 0.725319 0.725234 0.725148 0.725063 0.724977 0.724891 0.724806 0.72472 0.724634 0.724549 0.724463 0.724377 0.724292 0.724206 0.72412 0.724035 0.723949 0.723863 0.723777 0.723692 0.723606 0.72352 0.723434 0.723349 0.723263 0.723177 0.723091 0.723005 0.72292 0.722834 0.722748 0.722662 0.722576 0.72249 0.722405 0.722319 0.722233 0.722147 0.722061 0.721975 0.721889 0.721803 0.721717 0.721631 0.721546 0.72146 0.721374 0.721288 0.721202 0.721116 0.72103 0.720944 0.720858 0.720772 0.720686 0.7206 0.720514 0.720428 0.720341 0.720255 0.720169 0.720083 0.719997 0.719911 0.719825 0.719739 0.719653 0.719567 0.71948 0.719394 0.719308 0.719222 0.719136 0.71905 0.718963 0.718877 0.718791 0.718705 0.718619 0.718532 0.718446 0.71836 0.718274 0.718187 0.718101 0.718015 0.717929 0.717842 0.717756 0.71767 0.717583 0.717497 0.717411 0.717324 0.717238 0.717152 0.717065 0.716979 0.716892 0.716806 0.71672 0.716633 0.716547 0.71646 0.716374 0.716288 0.716201 0.716115 0.716028 0.715942 0.715855 0.715769 0.715682 0.715596 0.715509 0.715423 0.715336 0.71525 0.715163 0.715077 0.71499 0.714904 0.714817 0.71473 0.714644 0.714557 0.714471 0.714384 0.714297 0.714211 0.714124 0.714038 0.713951 0.713864 0.713778 0.713691 0.713604 0.713517 0.713431 0.713344 0.713257 0.713171 0.713084 0.712997 0.71291 0.712824 0.712737 0.71265 0.712563 0.712477 0.71239 0.712303 0.712216 0.712129 0.712043 0.711956 0.711869 0.711782 0.711695 0.711608 0.711522 0.711435 0.711348 0.711261 0.711174 0.711087 0.711 0.710913 0.710826 0.710739 0.710652 0.710565 0.710478 0.710392 0.710305 0.710218 0.710131 0.710044 0.709957 0.70987 0.709783 0.709695 0.709608 0.709521 0.709434 0.709347 0.70926 0.709173 0.709086 0.708999 0.708912 0.708825 0.708738 0.708651 0.708563 0.708476 0.708389 0.708302 0.708215 0.708128 0.70804 0.707953 0.707866 0.707779 0.707692 0.707604 0.707517 0.70743 0.707343 0.707255 0.707168 0.707081 0.706994 0.706906 0.706819 0.706732 0.706645 0.706557 0.70647 0.706383 0.706295 0.706208 0.706121 0.706033 0.705946 0.705859 0.705771 0.705684 0.705596 0.705509 0.705422 0.705334 0.705247 0.705159 0.705072 0.704984 0.704897 0.70481 0.704722 0.704635 0.704547 0.70446 0.704372 0.704285 0.704197 0.70411 0.704022 0.703935 0.703847 0.703759 0.703672 0.703584 0.703497 0.703409 0.703322 0.703234 0.703146 0.703059 0.702971 0.702884 0.702796 0.702708 0.702621 0.702533 0.702445 0.702358 0.70227 0.702182 0.702095 0.702007 0.701919 0.701832 0.701744 0.701656 0.701568 0.701481 0.701393 0.701305 0.701217 0.70113 0.701042 0.700954 0.700866 0.700778 0.700691 0.700603 0.700515 0.700427 0.700339 0.700251 0.700164 0.700076 0.699988 0.6999 0.699812 0.699724 0.699636 0.699548 0.699461 0.699373 0.699285 0.699197 0.699109 0.699021 0.698933 0.698845 0.698757 0.698669 0.698581 0.698493 0.698405 0.698317 0.698229 0.698141 0.698053 0.697965 0.697877 0.697789 0.697701 0.697613 0.697525 0.697437 0.697348 0.69726 0.697172 0.697084 0.696996 0.696908 0.69682 0.696732 0.696643 0.696555 0.696467 0.696379 0.696291 0.696203 0.696114 0.696026 0.695938 0.69585 0.695762 0.695673 0.695585 0.695497 0.695409 0.69532 0.695232 0.695144 0.695056 0.694967 0.694879 0.694791 0.694703 0.694614 0.694526 0.694438 0.694349 0.694261 0.694173 0.694084 0.693996 0.693907 0.693819 0.693731 0.693642 0.693554 0.693466 0.693377 0.693289 0.6932 0.693112 0.693023 0.692935 0.692846 0.692758 0.69267 0.692581 0.692493 0.692404 0.692316 0.692227 0.692139 0.69205 0.691962 0.691873 0.691785 0.691696 0.691607 0.691519 0.69143 0.691342 0.691253 0.691165 0.691076 0.690987 0.690899 0.69081 0.690722 0.690633 0.690544 0.690456 0.690367 0.690278 0.69019 0.690101 0.690012 0.689924 0.689835 0.689746 0.689658 0.689569 0.68948 0.689391 0.689303 0.689214 0.689125 0.689036 0.688948 0.688859 0.68877 0.688681 0.688592 0.688504 0.688415 0.688326 0.688237 0.688148 0.68806 0.687971 0.687882 0.687793 0.687704 0.687615 0.687527 0.687438 0.687349 0.68726 0.687171 0.687082 0.686993 0.686904 0.686815 0.686726 0.686637 0.686548 0.686459 0.686371 0.686282 0.686193 0.686104 0.686015 0.685926 0.685837 0.685748 0.685659 0.68557 0.685481 0.685391 0.685302 0.685213 0.685124 0.685035 0.684946 0.684857 0.684768 0.684679 0.68459 0.684501 0.684412 0.684323 0.684233 0.684144 0.684055 0.683966 0.683877 0.683788 0.683699 0.683609 0.68352 0.683431 0.683342 0.683253 0.683163 0.683074 0.682985 0.682896 0.682806 0.682717 0.682628 0.682539 0.68245 0.68236 0.682271 0.682182 0.682092 0.682003 0.681914 0.681825 0.681735 0.681646 0.681557 0.681467 0.681378 0.681289 0.681199 0.68111 0.68102 0.680931 0.680842 0.680752 0.680663 0.680574 0.680484 0.680395 0.680305 0.680216 0.680126 0.680037 0.679947 0.679858 0.679769 0.679679 0.67959 0.6795 0.679411 0.679321 0.679232 0.679142 0.679053 0.678963 0.678874 0.678784 0.678695 0.678605 0.678515 0.678426 0.678336 0.678247 0.678157 0.678068 0.677978 0.677888 0.677799 0.677709 0.67762 0.67753 0.67744 0.677351 0.677261 0.677171 0.677082 0.676992 0.676902 0.676813 0.676723 0.676633 0.676544 0.676454 0.676364 0.676275 0.676185 0.676095 0.676005 0.675916 0.675826 0.675736 0.675646 0.675557 0.675467 0.675377 0.675287 0.675197 0.675108 0.675018 0.674928 0.674838 0.674748 0.674659 0.674569 0.674479 0.674389 0.674299 0.674209 0.674119 0.67403 0.67394 0.67385 0.67376 0.67367 0.67358 0.67349 0.6734 0.67331 0.67322 0.673131 0.673041 0.672951 0.672861 0.672771 0.672681 0.672591 0.672501 0.672411 0.672321 0.672231 0.672141 0.672051 0.671961 0.671871 0.671781 0.671691 0.671601 0.67151 0.67142 0.67133 0.67124 0.67115 0.67106 0.67097 0.67088 0.67079 0.6707 0.67061 0.670519 0.670429 0.670339 0.670249 0.670159 0.670069 0.669979 0.669888 0.669798 0.669708 0.669618 0.669528 0.669438 0.669347 0.669257 0.669167 0.669077 0.668986 0.668896 0.668806 0.668716 0.668625 0.668535 0.668445 0.668355 0.668264 0.668174 0.668084 0.667993 0.667903 0.667813 0.667723 0.667632 0.667542 0.667452 0.667361 0.667271 0.667181 0.66709 0.667 0.666909 0.666819 0.666729 0.666638 0.666548 0.666458 0.666367 0.666277 0.666186 0.666096 0.666005 0.665915 0.665825 0.665734 0.665644 0.665553 0.665463 0.665372 0.665282 0.665191 0.665101 0.66501 0.66492 0.664829 0.664739 0.664648 0.664558 0.664467 0.664377 0.664286 0.664195 0.664105 0.664014 0.663924 0.663833 0.663743 0.663652 0.663561 0.663471 0.66338 0.66329 0.663199 0.663108 0.663018 0.662927 0.662836 0.662746 0.662655 0.662564 0.662474 0.662383 0.662292 0.662202 0.662111 0.66202 0.66193 0.661839 0.661748 0.661658 0.661567 0.661476 0.661385 0.661295 0.661204 0.661113 0.661022 0.660932 0.660841 0.66075 0.660659 0.660568 0.660478 0.660387 0.660296 0.660205 0.660114 0.660024 0.659933 0.659842 0.659751 0.65966 0.659569 0.659478 0.659388 0.659297 0.659206 0.659115 0.659024 0.658933 0.658842 0.658751 0.65866 0.65857 0.658479 0.658388 0.658297 0.658206 0.658115 0.658024 0.657933 0.657842 0.657751 0.65766 0.657569 0.657478 0.657387 0.657296 0.657205 0.657114 0.657023 0.656932 0.656841 0.65675 0.656659 0.656568 0.656477 0.656386 0.656295 0.656204 0.656112 0.656021 0.65593 0.655839 0.655748 0.655657 0.655566 0.655475 0.655384 0.655292 0.655201 0.65511 0.655019 0.654928 0.654837 0.654746 0.654654 0.654563 0.654472 0.654381 0.65429 0.654198 0.654107 0.654016 0.653925 0.653834 0.653742 0.653651 0.65356 0.653469 0.653377 0.653286 0.653195 0.653104 0.653012 0.652921 0.65283 0.652739 0.652647 0.652556 0.652465 0.652373 0.652282 0.652191 0.652099 0.652008 0.651917 0.651825 0.651734 0.651643 0.651551 0.65146 0.651368 0.651277 0.651186 0.651094 0.651003 0.650912 0.65082 0.650729 0.650637 0.650546 0.650455 0.650363 0.650272 0.65018 0.650089 0.649997 0.649906 0.649814 0.649723 0.649631 0.64954 0.649448 0.649357 0.649265 0.649174 0.649082 0.648991 0.648899; #A 23000 0.648808 0.648716 0.648625 0.648533 0.648442 0.64835 0.648259 0.648167 0.648075 0.647984 0.647892 0.647801 0.647709 0.647618 0.647526 0.647434 0.647343 0.647251 0.647159 0.647068 0.646976 0.646885 0.646793 0.646701 0.64661 0.646518 0.646426 0.646335 0.646243 0.646151 0.64606 0.645968 0.645876 0.645784 0.645693 0.645601 0.645509 0.645418 0.645326 0.645234 0.645142 0.645051 0.644959 0.644867 0.644775 0.644684 0.644592 0.6445 0.644408 0.644316 0.644225 0.644133 0.644041 0.643949 0.643857 0.643766 0.643674 0.643582 0.64349 0.643398 0.643306 0.643215 0.643123 0.643031 0.642939 0.642847 0.642755 0.642663 0.642571 0.642479 0.642388 0.642296 0.642204 0.642112 0.64202 0.641928 0.641836 0.641744 0.641652 0.64156 0.641468 0.641376 0.641284 0.641192 0.6411 0.641008 0.640916 0.640824 0.640732 0.64064 0.640548 0.640456 0.640364 0.640272 0.64018 0.640088 0.639996 0.639904 0.639812 0.63972 0.639628 0.639536 0.639444 0.639352 0.63926 0.639168 0.639076 0.638984 0.638891 0.638799 0.638707 0.638615 0.638523 0.638431 0.638339 0.638247 0.638155 0.638062 0.63797 0.637878 0.637786 0.637694 0.637602 0.637509 0.637417 0.637325 0.637233 0.637141 0.637048 0.636956 0.636864 0.636772 0.63668 0.636587 0.636495 0.636403 0.636311 0.636218 0.636126 0.636034 0.635942 0.635849 0.635757 0.635665 0.635573 0.63548 0.635388 0.635296 0.635203 0.635111 0.635019 0.634926 0.634834 0.634742 0.63465 0.634557 0.634465 0.634372 0.63428 0.634188 0.634095 0.634003 0.633911 0.633818 0.633726 0.633634 0.633541 0.633449 0.633356 0.633264 0.633172 0.633079 0.632987 0.632894 0.632802 0.632709 0.632617 0.632525 0.632432 0.63234 0.632247 0.632155 0.632062 0.63197 0.631877 0.631785 0.631692 0.6316 0.631507 0.631415 0.631322 0.63123 0.631137 0.631045 0.630952 0.63086 0.630767 0.630675 0.630582 0.63049 0.630397 0.630305 0.630212 0.630119 0.630027 0.629934 0.629842 0.629749 0.629656 0.629564 0.629471 0.629379 0.629286 0.629193 0.629101 0.629008 0.628916 0.628823 0.62873 0.628638 0.628545 0.628452 0.62836 0.628267 0.628174 0.628082 0.627989 0.627896 0.627804 0.627711 0.627618 0.627526 0.627433 0.62734 0.627247 0.627155 0.627062 0.626969 0.626876 0.626784 0.626691 0.626598 0.626505 0.626413 0.62632 0.626227 0.626134 0.626042 0.625949 0.625856 0.625763 0.625671 0.625578 0.625485 0.625392 0.625299 0.625207 0.625114 0.625021 0.624928 0.624835 0.624742 0.62465 0.624557 0.624464 0.624371 0.624278 0.624185 0.624092 0.623999 0.623907 0.623814 0.623721 0.623628 0.623535 0.623442 0.623349 0.623256 0.623163 0.62307 0.622978 0.622885 0.622792 0.622699 0.622606 0.622513 0.62242 0.622327 0.622234 0.622141 0.622048 0.621955 0.621862 0.621769 0.621676 0.621583 0.62149 0.621397 0.621304 0.621211 0.621118 0.621025 0.620932 0.620839 0.620746 0.620653 0.62056 0.620467 0.620374 0.620281 0.620188 0.620095 0.620001 0.619908 0.619815 0.619722 0.619629 0.619536 0.619443 0.61935 0.619257 0.619164 0.619071 0.618977 0.618884 0.618791 0.618698 0.618605 0.618512 0.618419 0.618326 0.618232 0.618139 0.618046 0.617953 0.61786 0.617767 0.617673 0.61758 0.617487 0.617394 0.617301 0.617207 0.617114 0.617021 0.616928 0.616835 0.616741 0.616648 0.616555 0.616462 0.616368 0.616275 0.616182 0.616089 0.615995 0.615902 0.615809 0.615716 0.615622 0.615529 0.615436 0.615342 0.615249 0.615156 0.615063 0.614969 0.614876 0.614783 0.614689 0.614596 0.614503 0.614409 0.614316 0.614223 0.614129 0.614036 0.613943 0.613849 0.613756 0.613663 0.613569 0.613476 0.613383 0.613289 0.613196 0.613102 0.613009 0.612916 0.612822 0.612729 0.612635 0.612542 0.612449 0.612355 0.612262 0.612168 0.612075 0.611981 0.611888 0.611795 0.611701 0.611608 0.611514 0.611421 0.611327 0.611234 0.61114 0.611047 0.610953 0.61086 0.610766 0.610673 0.610579 0.610486 0.610392 0.610299 0.610205 0.610112 0.610018 0.609925 0.609831 0.609738 0.609644 0.609551 0.609457 0.609363 0.60927 0.609176 0.609083 0.608989 0.608896 0.608802 0.608709 0.608615 0.608521 0.608428 0.608334 0.608241 0.608147 0.608053 0.60796 0.607866 0.607773 0.607679 0.607585 0.607492 0.607398 0.607304 0.607211 0.607117 0.607023 0.60693 0.606836 0.606743 0.606649 0.606555 0.606461 0.606368 0.606274 0.60618 0.606087 0.605993 0.605899 0.605806 0.605712 0.605618 0.605525 0.605431 0.605337 0.605243 0.60515 0.605056 0.604962 0.604868 0.604775 0.604681 0.604587 0.604493 0.6044 0.604306 0.604212 0.604118 0.604025 0.603931 0.603837 0.603743 0.603649 0.603556 0.603462 0.603368 0.603274 0.60318 0.603087 0.602993 0.602899 0.602805 0.602711 0.602618 0.602524 0.60243 0.602336 0.602242 0.602148 0.602054 0.601961 0.601867 0.601773 0.601679 0.601585 0.601491 0.601397 0.601304 0.60121 0.601116 0.601022 0.600928 0.600834 0.60074 0.600646 0.600552 0.600458 0.600365 0.600271 0.600177 0.600083 0.599989 0.599895 0.599801 0.599707 0.599613 0.599519 0.599425 0.599331 0.599237 0.599143 0.599049 0.598955 0.598861 0.598767 0.598673 0.598579 0.598485 0.598391 0.598297 0.598203 0.598109 0.598015 0.597921 0.597827 0.597733 0.597639 0.597545 0.597451 0.597357 0.597263 0.597169 0.597075 0.596981 0.596887 0.596793 0.596699 0.596605 0.596511 0.596417 0.596322 0.596228 0.596134 0.59604 0.595946 0.595852 0.595758 0.595664 0.59557 0.595476 0.595381 0.595287 0.595193 0.595099 0.595005 0.594911 0.594817 0.594723 0.594628 0.594534 0.59444 0.594346 0.594252 0.594158 0.594064 0.593969 0.593875 0.593781 0.593687 0.593593 0.593499 0.593404 0.59331 0.593216 0.593122 0.593028 0.592933 0.592839 0.592745 0.592651 0.592557 0.592462 0.592368 0.592274 0.59218 0.592085 0.591991 0.591897 0.591803 0.591708 0.591614 0.59152 0.591426 0.591331 0.591237 0.591143 0.591049 0.590954 0.59086 0.590766 0.590672 0.590577 0.590483 0.590389 0.590294 0.5902 0.590106 0.590011 0.589917 0.589823 0.589729 0.589634 0.58954 0.589446 0.589351 0.589257 0.589163 0.589068 0.588974 0.58888 0.588785 0.588691 0.588596 0.588502 0.588408 0.588313 0.588219 0.588125 0.58803 0.587936 0.587842 0.587747 0.587653 0.587558 0.587464 0.58737 0.587275 0.587181 0.587086 0.586992 0.586898 0.586803 0.586709 0.586614 0.58652 0.586425 0.586331 0.586237 0.586142 0.586048 0.585953 0.585859 0.585764 0.58567 0.585575 0.585481 0.585386 0.585292 0.585198 0.585103 0.585009 0.584914 0.58482 0.584725 0.584631 0.584536 0.584442 0.584347 0.584253 0.584158 0.584064 0.583969 0.583875 0.58378 0.583686 0.583591 0.583497 0.583402 0.583308 0.583213 0.583118 0.583024 0.582929 0.582835 0.58274 0.582646 0.582551 0.582457 0.582362 0.582267 0.582173 0.582078 0.581984 0.581889 0.581795 0.5817 0.581605 0.581511 0.581416 0.581322 0.581227 0.581132 0.581038 0.580943 0.580849 0.580754 0.580659 0.580565 0.58047 0.580375 0.580281 0.580186 0.580092 0.579997 0.579902 0.579808 0.579713 0.579618 0.579524 0.579429 0.579334 0.57924 0.579145 0.57905 0.578956 0.578861 0.578766 0.578672 0.578577 0.578482 0.578388 0.578293 0.578198 0.578104 0.578009 0.577914 0.577819 0.577725 0.57763 0.577535 0.577441 0.577346 0.577251 0.577156 0.577062 0.576967 0.576872 0.576778 0.576683 0.576588 0.576493 0.576399 0.576304 0.576209 0.576114 0.57602 0.575925 0.57583 0.575735 0.57564 0.575546 0.575451 0.575356 0.575261 0.575167 0.575072 0.574977 0.574882 0.574787 0.574693 0.574598 0.574503 0.574408 0.574313 0.574219 0.574124 0.574029 0.573934 0.573839 0.573745 0.57365 0.573555 0.57346 0.573365 0.57327 0.573176 0.573081 0.572986 0.572891 0.572796 0.572701 0.572606 0.572512 0.572417 0.572322 0.572227 0.572132 0.572037 0.571942 0.571847 0.571753 0.571658 0.571563 0.571468 0.571373 0.571278 0.571183 0.571088 0.570993 0.570899 0.570804 0.570709 0.570614 0.570519 0.570424 0.570329 0.570234 0.570139 0.570044 0.569949 0.569854 0.56976 0.569665 0.56957 0.569475 0.56938 0.569285 0.56919 0.569095 0.569 0.568905 0.56881 0.568715 0.56862 0.568525 0.56843 0.568335 0.56824 0.568145 0.56805 0.567955 0.56786 0.567765 0.56767 0.567575 0.56748 0.567385 0.56729 0.567195 0.5671 0.567005 0.56691 0.566815 0.56672 0.566625 0.56653 0.566435 0.56634 0.566245 0.56615 0.566055 0.56596 0.565865 0.56577 0.565675 0.56558 0.565485 0.56539 0.565295 0.5652 0.565105 0.56501 0.564915 0.56482 0.564724 0.564629 0.564534 0.564439 0.564344 0.564249 0.564154 0.564059 0.563964 0.563869 0.563774 0.563679 0.563583 0.563488 0.563393 0.563298 0.563203 0.563108 0.563013 0.562918 0.562823 0.562728 0.562632 0.562537 0.562442 0.562347 0.562252 0.562157 0.562062 0.561966 0.561871 0.561776 0.561681 0.561586 0.561491 0.561396 0.561301 0.561205 0.56111 0.561015 0.56092 0.560825 0.56073 0.560634 0.560539 0.560444 0.560349 0.560254 0.560159 0.560063 0.559968 0.559873 0.559778 0.559683 0.559587 0.559492 0.559397 0.559302 0.559207 0.559111 0.559016 0.558921 0.558826 0.558731 0.558635 0.55854 0.558445 0.55835 0.558255 0.558159 0.558064 0.557969 0.557874 0.557778 0.557683 0.557588 0.557493 0.557397 0.557302 0.557207 0.557112 0.557016 0.556921 0.556826 0.556731 0.556635 0.55654 0.556445 0.55635 0.556254 0.556159 0.556064 0.555969 0.555873 0.555778 0.555683 0.555588 0.555492 0.555397 0.555302 0.555206 ; #A 24000 0.555111 0.555016 0.55492 0.554825 0.55473 0.554635 0.554539 0.554444 0.554349 0.554253 0.554158 0.554063 0.553967 0.553872 0.553777 0.553682 0.553586 0.553491 0.553396 0.5533 0.553205 0.55311 0.553014 0.552919 0.552824 0.552728 0.552633 0.552538 0.552442 0.552347 0.552252 0.552156 0.552061 0.551965 0.55187 0.551775 0.551679 0.551584 0.551489 0.551393 0.551298 0.551203 0.551107 0.551012 0.550916 0.550821 0.550726 0.55063 0.550535 0.55044 0.550344 0.550249 0.550153 0.550058 0.549963 0.549867 0.549772 0.549676 0.549581 0.549486 0.54939 0.549295 0.549199 0.549104 0.549009 0.548913 0.548818 0.548722 0.548627 0.548531 0.548436 0.548341 0.548245 0.54815 0.548054 0.547959 0.547863 0.547768 0.547673 0.547577 0.547482 0.547386 0.547291 0.547195 0.5471 0.547005 0.546909 0.546814 0.546718 0.546623 0.546527 0.546432 0.546336 0.546241 0.546145 0.54605 0.545954 0.545859 0.545764 0.545668 0.545573 0.545477 0.545382 0.545286 0.545191 0.545095 0.545 0.544904 0.544809 0.544713 0.544618 0.544522 0.544427 0.544331 0.544236 0.54414 0.544045 0.543949 0.543854 0.543758 0.543663 0.543567 0.543472 0.543376 0.543281 0.543185 0.54309 0.542994 0.542899 0.542803 0.542708 0.542612 0.542517 0.542421 0.542325 0.54223 0.542134 0.542039 0.541943 0.541848 0.541752 0.541657 0.541561 0.541466 0.54137 0.541275 0.541179 0.541084 0.540988 0.540892 0.540797 0.540701 0.540606 0.54051 0.540415 0.540319 0.540223 0.540128 0.540032 0.539937 0.539841 0.539746 0.53965 0.539554 0.539459 0.539363 0.539268 0.539172 0.539077 0.538981 0.538885 0.53879 0.538694 0.538599 0.538503 0.538408 0.538312 0.538216 0.538121 0.538025 0.53793 0.537834 0.537738 0.537643 0.537547 0.537452 0.537356 0.53726 0.537165 0.537069 0.536974 0.536878 0.536782 0.536687 0.536591 0.536495 0.5364 0.536304 0.536209 0.536113 0.536017 0.535922 0.535826 0.53573 0.535635 0.535539 0.535444 0.535348 0.535252 0.535157 0.535061 0.534965 0.53487 0.534774 0.534678 0.534583 0.534487 0.534392 0.534296 0.5342 0.534105 0.534009 0.533913 0.533818 0.533722 0.533626 0.533531 0.533435 0.533339 0.533244 0.533148 0.533052 0.532957 0.532861 0.532765 0.53267 0.532574 0.532478 0.532383 0.532287 0.532191 0.532096 0.532 0.531904 0.531809 0.531713 0.531617 0.531522 0.531426 0.53133 0.531235 0.531139 0.531043 0.530947 0.530852 0.530756 0.53066 0.530565 0.530469 0.530373 0.530278 0.530182 0.530086 0.52999 0.529895 0.529799 0.529703 0.529608 0.529512 0.529416 0.529321 0.529225 0.529129 0.529033 0.528938 0.528842 0.528746 0.528651 0.528555 0.528459 0.528363 0.528268 0.528172 0.528076 0.527981 0.527885 0.527789 0.527693 0.527598 0.527502 0.527406 0.52731 0.527215 0.527119 0.527023 0.526928 0.526832 0.526736 0.52664 0.526545 0.526449 0.526353 0.526257 0.526162 0.526066 0.52597 0.525874 0.525779 0.525683 0.525587 0.525491 0.525396 0.5253 0.525204 0.525108 0.525013 0.524917 0.524821 0.524725 0.52463 0.524534 0.524438 0.524342 0.524247 0.524151 0.524055 0.523959 0.523863 0.523768 0.523672 0.523576 0.52348 0.523385 0.523289 0.523193 0.523097 0.523002 0.522906 0.52281 0.522714 0.522618 0.522523 0.522427 0.522331 0.522235 0.52214 0.522044 0.521948 0.521852 0.521756 0.521661 0.521565 0.521469 0.521373 0.521278 0.521182 0.521086 0.52099 0.520894 0.520799 0.520703 0.520607 0.520511 0.520415 0.52032 0.520224 0.520128 0.520032 0.519936 0.519841 0.519745 0.519649 0.519553 0.519457 0.519362 0.519266 0.51917 0.519074 0.518978 0.518883 0.518787 0.518691 0.518595 0.518499 0.518404 0.518308 0.518212 0.518116 0.51802 0.517925 0.517829 0.517733 0.517637 0.517541 0.517446 0.51735 0.517254 0.517158 0.517062 0.516966 0.516871 0.516775 0.516679 0.516583 0.516487 0.516391 0.516296 0.5162 0.516104 0.516008 0.515912 0.515817 0.515721 0.515625 0.515529 0.515433 0.515337 0.515242 0.515146 0.51505 0.514954 0.514858 0.514762 0.514667 0.514571 0.514475 0.514379 0.514283 0.514187 0.514092 0.513996 0.5139 0.513804 0.513708 0.513612 0.513517 0.513421 0.513325 0.513229 0.513133 0.513037 0.512942 0.512846 0.51275 0.512654 0.512558 0.512462 0.512366 0.512271 0.512175 0.512079 0.511983 0.511887 0.511791 0.511696 0.5116 0.511504 0.511408 0.511312 0.511216 0.51112 0.511025 0.510929 0.510833 0.510737 0.510641 0.510545 0.510449 0.510354 0.510258 0.510162 0.510066 0.50997 0.509874 0.509778 0.509683 0.509587 0.509491 0.509395 0.509299 0.509203 0.509108 0.509012 0.508916 0.50882 0.508724 0.508628 0.508532 0.508437 0.508341 0.508245 0.508149 0.508053 0.507957 0.507861 0.507765 0.50767 0.507574 0.507478 0.507382 0.507286 0.50719 0.507094 0.506999 0.506903 0.506807 0.506711 0.506615 0.506519 0.506423 0.506328 0.506232 0.506136 0.50604 0.505944 0.505848 0.505752 0.505656 0.505561 0.505465 0.505369 0.505273 0.505177 0.505081 0.504985 0.504889 0.504794 0.504698 0.504602 0.504506 0.50441 0.504314 0.504218 0.504123 0.504027 0.503931 0.503835 0.503739 0.503643 0.503547 0.503451 0.503356 0.50326 0.503164 0.503068 0.502972 0.502876 0.50278 0.502684 0.502589 0.502493 0.502397 0.502301 0.502205 0.502109 0.502013 0.501917 0.501822 0.501726 0.50163 0.501534 0.501438 0.501342 0.501246 0.50115 0.501055 0.500959 0.500863 0.500767 0.500671 0.500575 0.500479 0.500383 0.500288 0.500192 0.500096 0.5 0.499904 0.499808 0.499712 0.499617 0.499521 0.499425 0.499329 0.499233 0.499137 0.499041 0.498945 0.49885 0.498754 0.498658 0.498562 0.498466 0.49837 0.498274 0.498178 0.498083 0.497987 0.497891 0.497795 0.497699 0.497603 0.497507 0.497411 0.497316 0.49722 0.497124 0.497028 0.496932 0.496836 0.49674 0.496644 0.496549 0.496453 0.496357 0.496261 0.496165 0.496069 0.495973 0.495877 0.495782 0.495686 0.49559 0.495494 0.495398 0.495302 0.495206 0.495111 0.495015 0.494919 0.494823 0.494727 0.494631 0.494535 0.494439 0.494344 0.494248 0.494152 0.494056 0.49396 0.493864 0.493768 0.493672 0.493577 0.493481 0.493385 0.493289 0.493193 0.493097 0.493001 0.492906 0.49281 0.492714 0.492618 0.492522 0.492426 0.49233 0.492235 0.492139 0.492043 0.491947 0.491851 0.491755 0.491659 0.491563 0.491468 0.491372 0.491276 0.49118 0.491084 0.490988 0.490892 0.490797 0.490701 0.490605 0.490509 0.490413 0.490317 0.490222 0.490126 0.49003 0.489934 0.489838 0.489742 0.489646 0.489551 0.489455 0.489359 0.489263 0.489167 0.489071 0.488975 0.48888 0.488784 0.488688 0.488592 0.488496 0.4884 0.488304 0.488209 0.488113 0.488017 0.487921 0.487825 0.487729 0.487634 0.487538 0.487442 0.487346 0.48725 0.487154 0.487058 0.486963 0.486867 0.486771 0.486675 0.486579 0.486483 0.486388 0.486292 0.486196 0.4861 0.486004 0.485908 0.485813 0.485717 0.485621 0.485525 0.485429 0.485333 0.485238 0.485142 0.485046 0.48495 0.484854 0.484758 0.484663 0.484567 0.484471 0.484375 0.484279 0.484183 0.484088 0.483992 0.483896 0.4838 0.483704 0.483609 0.483513 0.483417 0.483321 0.483225 0.483129 0.483034 0.482938 0.482842 0.482746 0.48265 0.482554 0.482459 0.482363 0.482267 0.482171 0.482075 0.48198 0.481884 0.481788 0.481692 0.481596 0.481501 0.481405 0.481309 0.481213 0.481117 0.481022 0.480926 0.48083 0.480734 0.480638 0.480543 0.480447 0.480351 0.480255 0.480159 0.480064 0.479968 0.479872 0.479776 0.47968 0.479585 0.479489 0.479393 0.479297 0.479201 0.479106 0.47901 0.478914 0.478818 0.478722 0.478627 0.478531 0.478435 0.478339 0.478244 0.478148 0.478052 0.477956 0.47786 0.477765 0.477669 0.477573 0.477477 0.477381 0.477286 0.47719 0.477094 0.476998 0.476903 0.476807 0.476711 0.476615 0.47652 0.476424 0.476328 0.476232 0.476137 0.476041 0.475945 0.475849 0.475753 0.475658 0.475562 0.475466 0.47537 0.475275 0.475179 0.475083 0.474987 0.474892 0.474796 0.4747 0.474604 0.474509 0.474413 0.474317 0.474221 0.474126 0.47403 0.473934 0.473838 0.473743 0.473647 0.473551 0.473455 0.47336 0.473264 0.473168 0.473072 0.472977 0.472881 0.472785 0.47269 0.472594 0.472498 0.472402 0.472307 0.472211 0.472115 0.472019 0.471924 0.471828 0.471732 0.471637 0.471541 0.471445 0.471349 0.471254 0.471158 0.471062 0.470967 0.470871 0.470775 0.470679 0.470584 0.470488 0.470392 0.470297 0.470201 0.470105 0.47001 0.469914 0.469818 0.469722 0.469627 0.469531 0.469435 0.46934 0.469244 0.469148 0.469053 0.468957 0.468861 0.468765 0.46867 0.468574 0.468478 0.468383 0.468287 0.468191 0.468096 0.468 0.467904 0.467809 0.467713 0.467617 0.467522 0.467426 0.46733 0.467235 0.467139 0.467043 0.466948 0.466852 0.466756 0.466661 0.466565 0.466469 0.466374 0.466278 0.466182 0.466087 0.465991 0.465895 0.4658 0.465704 0.465608 0.465513 0.465417 0.465322 0.465226 0.46513 0.465035 0.464939 0.464843 0.464748 0.464652 0.464556 0.464461 0.464365 0.46427 0.464174 0.464078 0.463983 0.463887 0.463791 0.463696 0.4636 0.463505 0.463409 0.463313 0.463218 0.463122 0.463026 0.462931 0.462835 0.46274 0.462644 0.462548 0.462453 0.462357 0.462262 0.462166 0.46207 0.461975 0.461879 0.461784 0.461688 0.461592 0.461497 0.461401 0.461306 0.46121 0.461115 0.461019 0.460923 0.460828 0.460732 0.460637 0.460541 0.460445 0.46035 0.460254 0.460159 0.460063 0.459968 0.459872 0.459777 0.459681 0.459585 0.45949; #A 25000 0.459394 0.459299 0.459203 0.459108 0.459012 0.458917 0.458821 0.458725 0.45863 0.458534 0.458439 0.458343 0.458248 0.458152 0.458057 0.457961 0.457866 0.45777 0.457675 0.457579 0.457483 0.457388 0.457292 0.457197 0.457101 0.457006 0.45691 0.456815 0.456719 0.456624 0.456528 0.456433 0.456337 0.456242 0.456146 0.456051 0.455955 0.45586 0.455764 0.455669 0.455573 0.455478 0.455382 0.455287 0.455191 0.455096 0.455 0.454905 0.454809 0.454714 0.454618 0.454523 0.454427 0.454332 0.454236 0.454141 0.454046 0.45395 0.453855 0.453759 0.453664 0.453568 0.453473 0.453377 0.453282 0.453186 0.453091 0.452995 0.4529 0.452805 0.452709 0.452614 0.452518 0.452423 0.452327 0.452232 0.452137 0.452041 0.451946 0.45185 0.451755 0.451659 0.451564 0.451469 0.451373 0.451278 0.451182 0.451087 0.450991 0.450896 0.450801 0.450705 0.45061 0.450514 0.450419 0.450324 0.450228 0.450133 0.450037 0.449942 0.449847 0.449751 0.449656 0.44956 0.449465 0.44937 0.449274 0.449179 0.449084 0.448988 0.448893 0.448797 0.448702 0.448607 0.448511 0.448416 0.448321 0.448225 0.44813 0.448035 0.447939 0.447844 0.447748 0.447653 0.447558 0.447462 0.447367 0.447272 0.447176 0.447081 0.446986 0.44689 0.446795 0.4467 0.446604 0.446509 0.446414 0.446318 0.446223 0.446128 0.446033 0.445937 0.445842 0.445747 0.445651 0.445556 0.445461 0.445365 0.44527 0.445175 0.445079 0.444984 0.444889 0.444794 0.444698 0.444603 0.444508 0.444412 0.444317 0.444222 0.444127 0.444031 0.443936 0.443841 0.443746 0.44365 0.443555 0.44346 0.443365 0.443269 0.443174 0.443079 0.442984 0.442888 0.442793 0.442698 0.442603 0.442507 0.442412 0.442317 0.442222 0.442126 0.442031 0.441936 0.441841 0.441745 0.44165 0.441555 0.44146 0.441365 0.441269 0.441174 0.441079 0.440984 0.440889 0.440793 0.440698 0.440603 0.440508 0.440413 0.440317 0.440222 0.440127 0.440032 0.439937 0.439841 0.439746 0.439651 0.439556 0.439461 0.439366 0.43927 0.439175 0.43908 0.438985 0.43889 0.438795 0.4387 0.438604 0.438509 0.438414 0.438319 0.438224 0.438129 0.438034 0.437938 0.437843 0.437748 0.437653 0.437558 0.437463 0.437368 0.437273 0.437177 0.437082 0.436987 0.436892 0.436797 0.436702 0.436607 0.436512 0.436417 0.436321 0.436226 0.436131 0.436036 0.435941 0.435846 0.435751 0.435656 0.435561 0.435466 0.435371 0.435276 0.435181 0.435085 0.43499 0.434895 0.4348 0.434705 0.43461 0.434515 0.43442 0.434325 0.43423 0.434135 0.43404 0.433945 0.43385 0.433755 0.43366 0.433565 0.43347 0.433375 0.43328 0.433185 0.43309 0.432995 0.4329 0.432805 0.43271 0.432615 0.43252 0.432425 0.43233 0.432235 0.43214 0.432045 0.43195 0.431855 0.43176 0.431665 0.43157 0.431475 0.43138 0.431285 0.43119 0.431095 0.431 0.430905 0.43081 0.430715 0.43062 0.430525 0.43043 0.430335 0.43024 0.430146 0.430051 0.429956 0.429861 0.429766 0.429671 0.429576 0.429481 0.429386 0.429291 0.429196 0.429101 0.429006 0.428912 0.428817 0.428722 0.428627 0.428532 0.428437 0.428342 0.428247 0.428152 0.428058 0.427963 0.427868 0.427773 0.427678 0.427583 0.427488 0.427394 0.427299 0.427204 0.427109 0.427014 0.426919 0.426824 0.42673 0.426635 0.42654 0.426445 0.42635 0.426255 0.426161 0.426066 0.425971 0.425876 0.425781 0.425687 0.425592 0.425497 0.425402 0.425307 0.425213 0.425118 0.425023 0.424928 0.424833 0.424739 0.424644 0.424549 0.424454 0.424359 0.424265 0.42417 0.424075 0.42398 0.423886 0.423791 0.423696 0.423601 0.423507 0.423412 0.423317 0.423222 0.423128 0.423033 0.422938 0.422844 0.422749 0.422654 0.422559 0.422465 0.42237 0.422275 0.422181 0.422086 0.421991 0.421896 0.421802 0.421707 0.421612 0.421518 0.421423 0.421328 0.421234 0.421139 0.421044 0.42095 0.420855 0.42076 0.420666 0.420571 0.420476 0.420382 0.420287 0.420192 0.420098 0.420003 0.419908 0.419814 0.419719 0.419625 0.41953 0.419435 0.419341 0.419246 0.419151 0.419057 0.418962 0.418868 0.418773 0.418678 0.418584 0.418489 0.418395 0.4183 0.418205 0.418111 0.418016 0.417922 0.417827 0.417733 0.417638 0.417543 0.417449 0.417354 0.41726 0.417165 0.417071 0.416976 0.416882 0.416787 0.416693 0.416598 0.416503 0.416409 0.416314 0.41622 0.416125 0.416031 0.415936 0.415842 0.415747 0.415653 0.415558 0.415464 0.415369 0.415275 0.41518 0.415086 0.414991 0.414897 0.414802 0.414708 0.414614 0.414519 0.414425 0.41433 0.414236 0.414141 0.414047 0.413952 0.413858 0.413763 0.413669 0.413575 0.41348 0.413386 0.413291 0.413197 0.413102 0.413008 0.412914 0.412819 0.412725 0.41263 0.412536 0.412442 0.412347 0.412253 0.412158 0.412064 0.41197 0.411875 0.411781 0.411687 0.411592 0.411498 0.411404 0.411309 0.411215 0.41112 0.411026 0.410932 0.410837 0.410743 0.410649 0.410554 0.41046 0.410366 0.410271 0.410177 0.410083 0.409989 0.409894 0.4098 0.409706 0.409611 0.409517 0.409423 0.409328 0.409234 0.40914 0.409046 0.408951 0.408857 0.408763 0.408669 0.408574 0.40848 0.408386 0.408292 0.408197 0.408103 0.408009 0.407915 0.40782 0.407726 0.407632 0.407538 0.407443 0.407349 0.407255 0.407161 0.407067 0.406972 0.406878 0.406784 0.40669 0.406596 0.406501 0.406407 0.406313 0.406219 0.406125 0.406031 0.405936 0.405842 0.405748 0.405654 0.40556 0.405466 0.405372 0.405277 0.405183 0.405089 0.404995 0.404901 0.404807 0.404713 0.404619 0.404524 0.40443 0.404336 0.404242 0.404148 0.404054 0.40396 0.403866 0.403772 0.403678 0.403583 0.403489 0.403395 0.403301 0.403207 0.403113 0.403019 0.402925 0.402831 0.402737 0.402643 0.402549 0.402455 0.402361 0.402267 0.402173 0.402079 0.401985 0.401891 0.401797 0.401703 0.401609 0.401515 0.401421 0.401327 0.401233 0.401139 0.401045 0.400951 0.400857 0.400763 0.400669 0.400575 0.400481 0.400387 0.400293 0.400199 0.400105 0.400011 0.399917 0.399823 0.399729 0.399636 0.399542 0.399448 0.399354 0.39926 0.399166 0.399072 0.398978 0.398884 0.39879 0.398696 0.398603 0.398509 0.398415 0.398321 0.398227 0.398133 0.398039 0.397946 0.397852 0.397758 0.397664 0.39757 0.397476 0.397382 0.397289 0.397195 0.397101 0.397007 0.396913 0.39682 0.396726 0.396632 0.396538 0.396444 0.396351 0.396257 0.396163 0.396069 0.395975 0.395882 0.395788 0.395694 0.3956 0.395507 0.395413 0.395319 0.395225 0.395132 0.395038 0.394944 0.39485 0.394757 0.394663 0.394569 0.394475 0.394382 0.394288 0.394194 0.394101 0.394007 0.393913 0.39382 0.393726 0.393632 0.393539 0.393445 0.393351 0.393257 0.393164 0.39307 0.392977 0.392883 0.392789 0.392696 0.392602 0.392508 0.392415 0.392321 0.392227 0.392134 0.39204 0.391947 0.391853 0.391759 0.391666 0.391572 0.391479 0.391385 0.391291 0.391198 0.391104 0.391011 0.390917 0.390824 0.39073 0.390636 0.390543 0.390449 0.390356 0.390262 0.390169 0.390075 0.389982 0.389888 0.389795 0.389701 0.389608 0.389514 0.389421 0.389327 0.389234 0.38914 0.389047 0.388953 0.38886 0.388766 0.388673 0.388579 0.388486 0.388392 0.388299 0.388205 0.388112 0.388019 0.387925 0.387832 0.387738 0.387645 0.387551 0.387458 0.387365 0.387271 0.387178 0.387084 0.386991 0.386898 0.386804 0.386711 0.386617 0.386524 0.386431 0.386337 0.386244 0.386151 0.386057 0.385964 0.385871 0.385777 0.385684 0.385591 0.385497 0.385404 0.385311 0.385217 0.385124 0.385031 0.384937 0.384844 0.384751 0.384658 0.384564 0.384471 0.384378 0.384284 0.384191 0.384098 0.384005 0.383911 0.383818 0.383725 0.383632 0.383538 0.383445 0.383352 0.383259 0.383165 0.383072 0.382979 0.382886 0.382793 0.382699 0.382606 0.382513 0.38242 0.382327 0.382233 0.38214 0.382047 0.381954 0.381861 0.381768 0.381674 0.381581 0.381488 0.381395 0.381302 0.381209 0.381116 0.381023 0.380929 0.380836 0.380743 0.38065 0.380557 0.380464 0.380371 0.380278 0.380185 0.380092 0.379998 0.379905 0.379812 0.379719 0.379626 0.379533 0.37944 0.379347 0.379254 0.379161 0.379068 0.378975 0.378882 0.378789 0.378696 0.378603 0.37851 0.378417 0.378324 0.378231 0.378138 0.378045 0.377952 0.377859 0.377766 0.377673 0.37758 0.377487 0.377394 0.377301 0.377208 0.377115 0.377022 0.37693 0.376837 0.376744 0.376651 0.376558 0.376465 0.376372 0.376279 0.376186 0.376093 0.376001 0.375908 0.375815 0.375722 0.375629 0.375536 0.375443 0.375351 0.375258 0.375165 0.375072 0.374979 0.374886 0.374793 0.374701 0.374608 0.374515 0.374422 0.374329 0.374237 0.374144 0.374051 0.373958 0.373866 0.373773 0.37368 0.373587 0.373494 0.373402 0.373309 0.373216 0.373123 0.373031 0.372938 0.372845 0.372753 0.37266 0.372567 0.372474 0.372382 0.372289 0.372196 0.372104 0.372011 0.371918 0.371826 0.371733 0.37164 0.371548 0.371455 0.371362 0.37127 0.371177 0.371084 0.370992 0.370899 0.370807 0.370714 0.370621 0.370529 0.370436 0.370344 0.370251 0.370158 0.370066 0.369973 0.369881 0.369788 0.369695 0.369603 0.36951 0.369418 0.369325 0.369233 0.36914 0.369048 0.368955 0.368863 0.36877 0.368678 0.368585 0.368493 0.3684 0.368308 0.368215 0.368123 0.36803 0.367938 0.367845 0.367753 0.36766 0.367568 0.367475 0.367383 0.367291 0.367198 0.367106 0.367013 0.366921 0.366828 0.366736 0.366644 0.366551 0.366459 0.366366 0.366274 0.366182 0.366089 0.365997 0.365905 0.365812 0.36572 0.365627 0.365535 0.365443 0.36535 0.365258 ; #A 26000 0.365166 0.365074 0.364981 0.364889 0.364797 0.364704 0.364612 0.36452 0.364427 0.364335 0.364243 0.364151 0.364058 0.363966 0.363874 0.363782 0.363689 0.363597 0.363505 0.363413 0.36332 0.363228 0.363136 0.363044 0.362952 0.362859 0.362767 0.362675 0.362583 0.362491 0.362398 0.362306 0.362214 0.362122 0.36203 0.361938 0.361845 0.361753 0.361661 0.361569 0.361477 0.361385 0.361293 0.361201 0.361109 0.361016 0.360924 0.360832 0.36074 0.360648 0.360556 0.360464 0.360372 0.36028 0.360188 0.360096 0.360004 0.359912 0.35982 0.359728 0.359636 0.359544 0.359452 0.35936 0.359268 0.359176 0.359084 0.358992 0.3589 0.358808 0.358716 0.358624 0.358532 0.35844 0.358348 0.358256 0.358164 0.358072 0.35798 0.357888 0.357796 0.357704 0.357612 0.357521 0.357429 0.357337 0.357245 0.357153 0.357061 0.356969 0.356877 0.356785 0.356694 0.356602 0.35651 0.356418 0.356326 0.356234 0.356143 0.356051 0.355959 0.355867 0.355775 0.355684 0.355592 0.3555 0.355408 0.355316 0.355225 0.355133 0.355041 0.354949 0.354858 0.354766 0.354674 0.354582 0.354491 0.354399 0.354307 0.354216 0.354124 0.354032 0.35394 0.353849 0.353757 0.353665 0.353574 0.353482 0.35339 0.353299 0.353207 0.353115 0.353024 0.352932 0.352841 0.352749 0.352657 0.352566 0.352474 0.352382 0.352291 0.352199 0.352108 0.352016 0.351925 0.351833 0.351741 0.35165 0.351558 0.351467 0.351375 0.351284 0.351192 0.351101 0.351009 0.350918 0.350826 0.350735 0.350643 0.350552 0.35046 0.350369 0.350277 0.350186 0.350094 0.350003 0.349911 0.34982 0.349728 0.349637 0.349546 0.349454 0.349363 0.349271 0.34918 0.349088 0.348997 0.348906 0.348814 0.348723 0.348631 0.34854 0.348449 0.348357 0.348266 0.348175 0.348083 0.347992 0.347901 0.347809 0.347718 0.347627 0.347535 0.347444 0.347353 0.347261 0.34717 0.347079 0.346988 0.346896 0.346805 0.346714 0.346623 0.346531 0.34644 0.346349 0.346258 0.346166 0.346075 0.345984 0.345893 0.345802 0.34571 0.345619 0.345528 0.345437 0.345346 0.345254 0.345163 0.345072 0.344981 0.34489 0.344799 0.344708 0.344616 0.344525 0.344434 0.344343 0.344252 0.344161 0.34407 0.343979 0.343888 0.343797 0.343705 0.343614 0.343523 0.343432 0.343341 0.34325 0.343159 0.343068 0.342977 0.342886 0.342795 0.342704 0.342613 0.342522 0.342431 0.34234 0.342249 0.342158 0.342067 0.341976 0.341885 0.341794 0.341703 0.341612 0.341521 0.341431 0.34134 0.341249 0.341158 0.341067 0.340976 0.340885 0.340794 0.340703 0.340612 0.340522 0.340431 0.34034 0.340249 0.340158 0.340067 0.339976 0.339886 0.339795 0.339704 0.339613 0.339522 0.339432 0.339341 0.33925 0.339159 0.339068 0.338978 0.338887 0.338796 0.338705 0.338615 0.338524 0.338433 0.338342 0.338252 0.338161 0.33807 0.33798 0.337889 0.337798 0.337708 0.337617 0.337526 0.337436 0.337345 0.337254 0.337164 0.337073 0.336982 0.336892 0.336801 0.33671 0.33662 0.336529 0.336439 0.336348 0.336257 0.336167 0.336076 0.335986 0.335895 0.335805 0.335714 0.335623 0.335533 0.335442 0.335352 0.335261 0.335171 0.33508 0.33499 0.334899 0.334809 0.334718 0.334628 0.334537 0.334447 0.334356 0.334266 0.334175 0.334085 0.333995 0.333904 0.333814 0.333723 0.333633 0.333542 0.333452 0.333362 0.333271 0.333181 0.333091 0.333 0.33291 0.332819 0.332729 0.332639 0.332548 0.332458 0.332368 0.332277 0.332187 0.332097 0.332006 0.331916 0.331826 0.331736 0.331645 0.331555 0.331465 0.331375 0.331284 0.331194 0.331104 0.331014 0.330923 0.330833 0.330743 0.330653 0.330562 0.330472 0.330382 0.330292 0.330202 0.330112 0.330021 0.329931 0.329841 0.329751 0.329661 0.329571 0.329481 0.32939 0.3293 0.32921 0.32912 0.32903 0.32894 0.32885 0.32876 0.32867 0.32858 0.32849 0.328399 0.328309 0.328219 0.328129 0.328039 0.327949 0.327859 0.327769 0.327679 0.327589 0.327499 0.327409 0.327319 0.327229 0.327139 0.327049 0.326959 0.32687 0.32678 0.32669 0.3266 0.32651 0.32642 0.32633 0.32624 0.32615 0.32606 0.32597 0.325881 0.325791 0.325701 0.325611 0.325521 0.325431 0.325341 0.325252 0.325162 0.325072 0.324982 0.324892 0.324803 0.324713 0.324623 0.324533 0.324443 0.324354 0.324264 0.324174 0.324084 0.323995 0.323905 0.323815 0.323725 0.323636 0.323546 0.323456 0.323367 0.323277 0.323187 0.323098 0.323008 0.322918 0.322829 0.322739 0.322649 0.32256 0.32247 0.32238 0.322291 0.322201 0.322112 0.322022 0.321932 0.321843 0.321753 0.321664 0.321574 0.321485 0.321395 0.321305 0.321216 0.321126 0.321037 0.320947 0.320858 0.320768 0.320679 0.320589 0.3205 0.32041 0.320321 0.320231 0.320142 0.320052 0.319963 0.319874 0.319784 0.319695 0.319605 0.319516 0.319427 0.319337 0.319248 0.319158 0.319069 0.31898 0.31889 0.318801 0.318711 0.318622 0.318533 0.318443 0.318354 0.318265 0.318175 0.318086 0.317997 0.317908 0.317818 0.317729 0.31764 0.317551 0.317461 0.317372 0.317283 0.317194 0.317104 0.317015 0.316926 0.316837 0.316747 0.316658 0.316569 0.31648 0.316391 0.316301 0.316212 0.316123 0.316034 0.315945 0.315856 0.315767 0.315677 0.315588 0.315499 0.31541 0.315321 0.315232 0.315143 0.315054 0.314965 0.314876 0.314787 0.314698 0.314608 0.314519 0.31443 0.314341 0.314252 0.314163 0.314074 0.313985 0.313896 0.313807 0.313718 0.313629 0.313541 0.313452 0.313363 0.313274 0.313185 0.313096 0.313007 0.312918 0.312829 0.31274 0.312651 0.312562 0.312474 0.312385 0.312296 0.312207 0.312118 0.312029 0.31194 0.311852 0.311763 0.311674 0.311585 0.311496 0.311408 0.311319 0.31123 0.311141 0.311052 0.310964 0.310875 0.310786 0.310697 0.310609 0.31052 0.310431 0.310342 0.310254 0.310165 0.310076 0.309988 0.309899 0.30981 0.309722 0.309633 0.309544 0.309456 0.309367 0.309278 0.30919 0.309101 0.309013 0.308924 0.308835 0.308747 0.308658 0.30857 0.308481 0.308393 0.308304 0.308215 0.308127 0.308038 0.30795 0.307861 0.307773 0.307684 0.307596 0.307507 0.307419 0.30733 0.307242 0.307154 0.307065 0.306977 0.306888 0.3068 0.306711 0.306623 0.306534 0.306446 0.306358 0.306269 0.306181 0.306093 0.306004 0.305916 0.305827 0.305739 0.305651 0.305562 0.305474 0.305386 0.305298 0.305209 0.305121 0.305033 0.304944 0.304856 0.304768 0.30468 0.304591 0.304503 0.304415 0.304327 0.304238 0.30415 0.304062 0.303974 0.303886 0.303797 0.303709 0.303621 0.303533 0.303445 0.303357 0.303268 0.30318 0.303092 0.303004 0.302916 0.302828 0.30274 0.302652 0.302563 0.302475 0.302387 0.302299 0.302211 0.302123 0.302035 0.301947 0.301859 0.301771 0.301683 0.301595 0.301507 0.301419 0.301331 0.301243 0.301155 0.301067 0.300979 0.300891 0.300803 0.300715 0.300627 0.300539 0.300452 0.300364 0.300276 0.300188 0.3001 0.300012 0.299924 0.299836 0.299749 0.299661 0.299573 0.299485 0.299397 0.299309 0.299222 0.299134 0.299046 0.298958 0.29887 0.298783 0.298695 0.298607 0.298519 0.298432 0.298344 0.298256 0.298168 0.298081 0.297993 0.297905 0.297818 0.29773 0.297642 0.297555 0.297467 0.297379 0.297292 0.297204 0.297116 0.297029 0.296941 0.296854 0.296766 0.296678 0.296591 0.296503 0.296416 0.296328 0.296241 0.296153 0.296065 0.295978 0.29589 0.295803 0.295715 0.295628 0.29554 0.295453 0.295365 0.295278 0.29519 0.295103 0.295016 0.294928 0.294841 0.294753 0.294666 0.294578 0.294491 0.294404 0.294316 0.294229 0.294141 0.294054 0.293967 0.293879 0.293792 0.293705 0.293617 0.29353 0.293443 0.293355 0.293268 0.293181 0.293094 0.293006 0.292919 0.292832 0.292744 0.292657 0.29257 0.292483 0.292396 0.292308 0.292221 0.292134 0.292047 0.29196 0.291872 0.291785 0.291698 0.291611 0.291524 0.291437 0.29135 0.291262 0.291175 0.291088 0.291001 0.290914 0.290827 0.29074 0.290653 0.290566 0.290479 0.290392 0.290305 0.290217 0.29013 0.290043 0.289956 0.289869 0.289782 0.289695 0.289608 0.289522 0.289435 0.289348 0.289261 0.289174 0.289087 0.289 0.288913 0.288826 0.288739 0.288652 0.288565 0.288478 0.288392 0.288305 0.288218 0.288131 0.288044 0.287957 0.287871 0.287784 0.287697 0.28761 0.287523 0.287437 0.28735 0.287263 0.287176 0.28709 0.287003 0.286916 0.286829 0.286743 0.286656 0.286569 0.286482 0.286396 0.286309 0.286222 0.286136 0.286049 0.285962 0.285876 0.285789 0.285703 0.285616 0.285529 0.285443 0.285356 0.28527 0.285183 0.285096 0.28501 0.284923 0.284837 0.28475 0.284664 0.284577 0.284491 0.284404 0.284318 0.284231 0.284145 0.284058 0.283972 0.283885 0.283799 0.283712 0.283626 0.28354 0.283453 0.283367 0.28328 0.283194 0.283107 0.283021 0.282935 0.282848 0.282762 0.282676 0.282589 0.282503 0.282417 0.28233 0.282244 0.282158 0.282071 0.281985 0.281899 0.281813 0.281726 0.28164 0.281554 0.281468 0.281381 0.281295 0.281209 0.281123 0.281037 0.28095 0.280864 0.280778 0.280692 0.280606 0.28052 0.280433 0.280347 0.280261 0.280175 0.280089 0.280003 0.279917 0.279831 0.279745 0.279659 0.279572 0.279486 0.2794 0.279314 0.279228 0.279142 0.279056 0.27897 0.278884 0.278798 0.278712 0.278626 0.27854 0.278454 0.278369 0.278283 0.278197 0.278111 0.278025 0.277939 0.277853 0.277767 0.277681 0.277595 0.27751 0.277424 0.277338 0.277252 0.277166 0.27708 0.276995 0.276909 0.276823 0.276737 0.276651 0.276566 0.27648 0.276394 0.276308 0.276223 0.276137 0.276051 0.275965; #A 27000 0.27588 0.275794 0.275708 0.275623 0.275537 0.275451 0.275366 0.27528 0.275194 0.275109 0.275023 0.274937 0.274852 0.274766 0.274681 0.274595 0.27451 0.274424 0.274338 0.274253 0.274167 0.274082 0.273996 0.273911 0.273825 0.27374 0.273654 0.273569 0.273483 0.273398 0.273312 0.273227 0.273141 0.273056 0.272971 0.272885 0.2728 0.272714 0.272629 0.272544 0.272458 0.272373 0.272287 0.272202 0.272117 0.272031 0.271946 0.271861 0.271776 0.27169 0.271605 0.27152 0.271434 0.271349 0.271264 0.271179 0.271093 0.271008 0.270923 0.270838 0.270752 0.270667 0.270582 0.270497 0.270412 0.270327 0.270241 0.270156 0.270071 0.269986 0.269901 0.269816 0.269731 0.269646 0.26956 0.269475 0.26939 0.269305 0.26922 0.269135 0.26905 0.268965 0.26888 0.268795 0.26871 0.268625 0.26854 0.268455 0.26837 0.268285 0.2682 0.268115 0.26803 0.267945 0.26786 0.267776 0.267691 0.267606 0.267521 0.267436 0.267351 0.267266 0.267181 0.267097 0.267012 0.266927 0.266842 0.266757 0.266672 0.266588 0.266503 0.266418 0.266333 0.266249 0.266164 0.266079 0.265994 0.26591 0.265825 0.26574 0.265656 0.265571 0.265486 0.265402 0.265317 0.265232 0.265148 0.265063 0.264978 0.264894 0.264809 0.264724 0.26464 0.264555 0.264471 0.264386 0.264302 0.264217 0.264133 0.264048 0.263963 0.263879 0.263794 0.26371 0.263625 0.263541 0.263457 0.263372 0.263288 0.263203 0.263119 0.263034 0.26295 0.262865 0.262781 0.262697 0.262612 0.262528 0.262444 0.262359 0.262275 0.262191 0.262106 0.262022 0.261938 0.261853 0.261769 0.261685 0.2616 0.261516 0.261432 0.261348 0.261263 0.261179 0.261095 0.261011 0.260926 0.260842 0.260758 0.260674 0.26059 0.260506 0.260421 0.260337 0.260253 0.260169 0.260085 0.260001 0.259917 0.259833 0.259748 0.259664 0.25958 0.259496 0.259412 0.259328 0.259244 0.25916 0.259076 0.258992 0.258908 0.258824 0.25874 0.258656 0.258572 0.258488 0.258404 0.25832 0.258236 0.258153 0.258069 0.257985 0.257901 0.257817 0.257733 0.257649 0.257565 0.257482 0.257398 0.257314 0.25723 0.257146 0.257062 0.256979 0.256895 0.256811 0.256727 0.256644 0.25656 0.256476 0.256392 0.256309 0.256225 0.256141 0.256058 0.255974 0.25589 0.255807 0.255723 0.255639 0.255556 0.255472 0.255388 0.255305 0.255221 0.255138 0.255054 0.25497 0.254887 0.254803 0.25472 0.254636 0.254553 0.254469 0.254386 0.254302 0.254219 0.254135 0.254052 0.253968 0.253885 0.253801 0.253718 0.253634 0.253551 0.253468 0.253384 0.253301 0.253217 0.253134 0.253051 0.252967 0.252884 0.2528 0.252717 0.252634 0.252551 0.252467 0.252384 0.252301 0.252217 0.252134 0.252051 0.251968 0.251884 0.251801 0.251718 0.251635 0.251551 0.251468 0.251385 0.251302 0.251219 0.251136 0.251052 0.250969 0.250886 0.250803 0.25072 0.250637 0.250554 0.250471 0.250388 0.250304 0.250221 0.250138 0.250055 0.249972 0.249889 0.249806 0.249723 0.24964 0.249557 0.249474 0.249391 0.249308 0.249225 0.249143 0.24906 0.248977 0.248894 0.248811 0.248728 0.248645 0.248562 0.248479 0.248396 0.248314 0.248231 0.248148 0.248065 0.247982 0.2479 0.247817 0.247734 0.247651 0.247568 0.247486 0.247403 0.24732 0.247237 0.247155 0.247072 0.246989 0.246907 0.246824 0.246741 0.246659 0.246576 0.246493 0.246411 0.246328 0.246246 0.246163 0.24608 0.245998 0.245915 0.245833 0.24575 0.245667 0.245585 0.245502 0.24542 0.245337 0.245255 0.245172 0.24509 0.245007 0.244925 0.244842 0.24476 0.244678 0.244595 0.244513 0.24443 0.244348 0.244266 0.244183 0.244101 0.244018 0.243936 0.243854 0.243771 0.243689 0.243607 0.243524 0.243442 0.24336 0.243278 0.243195 0.243113 0.243031 0.242949 0.242866 0.242784 0.242702 0.24262 0.242538 0.242455 0.242373 0.242291 0.242209 0.242127 0.242045 0.241963 0.24188 0.241798 0.241716 0.241634 0.241552 0.24147 0.241388 0.241306 0.241224 0.241142 0.24106 0.240978 0.240896 0.240814 0.240732 0.24065 0.240568 0.240486 0.240404 0.240322 0.24024 0.240158 0.240076 0.239994 0.239912 0.239831 0.239749 0.239667 0.239585 0.239503 0.239421 0.23934 0.239258 0.239176 0.239094 0.239012 0.238931 0.238849 0.238767 0.238685 0.238604 0.238522 0.23844 0.238358 0.238277 0.238195 0.238113 0.238032 0.23795 0.237868 0.237787 0.237705 0.237624 0.237542 0.23746 0.237379 0.237297 0.237216 0.237134 0.237052 0.236971 0.236889 0.236808 0.236726 0.236645 0.236563 0.236482 0.2364 0.236319 0.236238 0.236156 0.236075 0.235993 0.235912 0.23583 0.235749 0.235668 0.235586 0.235505 0.235424 0.235342 0.235261 0.235179 0.235098 0.235017 0.234936 0.234854 0.234773 0.234692 0.23461 0.234529 0.234448 0.234367 0.234286 0.234204 0.234123 0.234042 0.233961 0.23388 0.233798 0.233717 0.233636 0.233555 0.233474 0.233393 0.233312 0.233231 0.233149 0.233068 0.232987 0.232906 0.232825 0.232744 0.232663 0.232582 0.232501 0.23242 0.232339 0.232258 0.232177 0.232096 0.232015 0.231934 0.231854 0.231773 0.231692 0.231611 0.23153 0.231449 0.231368 0.231287 0.231206 0.231126 0.231045 0.230964 0.230883 0.230802 0.230722 0.230641 0.23056 0.230479 0.230399 0.230318 0.230237 0.230156 0.230076 0.229995 0.229914 0.229834 0.229753 0.229672 0.229592 0.229511 0.22943 0.22935 0.229269 0.229189 0.229108 0.229027 0.228947 0.228866 0.228786 0.228705 0.228625 0.228544 0.228464 0.228383 0.228303 0.228222 0.228142 0.228061 0.227981 0.2279 0.22782 0.227739 0.227659 0.227579 0.227498 0.227418 0.227338 0.227257 0.227177 0.227096 0.227016 0.226936 0.226856 0.226775 0.226695 0.226615 0.226534 0.226454 0.226374 0.226294 0.226213 0.226133 0.226053 0.225973 0.225893 0.225812 0.225732 0.225652 0.225572 0.225492 0.225412 0.225332 0.225251 0.225171 0.225091 0.225011 0.224931 0.224851 0.224771 0.224691 0.224611 0.224531 0.224451 0.224371 0.224291 0.224211 0.224131 0.224051 0.223971 0.223891 0.223811 0.223731 0.223651 0.223572 0.223492 0.223412 0.223332 0.223252 0.223172 0.223092 0.223013 0.222933 0.222853 0.222773 0.222693 0.222614 0.222534 0.222454 0.222374 0.222295 0.222215 0.222135 0.222055 0.221976 0.221896 0.221816 0.221737 0.221657 0.221577 0.221498 0.221418 0.221339 0.221259 0.221179 0.2211 0.22102 0.220941 0.220861 0.220782 0.220702 0.220623 0.220543 0.220464 0.220384 0.220305 0.220225 0.220146 0.220066 0.219987 0.219907 0.219828 0.219749 0.219669 0.21959 0.21951 0.219431 0.219352 0.219272 0.219193 0.219114 0.219034 0.218955 0.218876 0.218797 0.218717 0.218638 0.218559 0.21848 0.2184 0.218321 0.218242 0.218163 0.218084 0.218004 0.217925 0.217846 0.217767 0.217688 0.217609 0.21753 0.21745 0.217371 0.217292 0.217213 0.217134 0.217055 0.216976 0.216897 0.216818 0.216739 0.21666 0.216581 0.216502 0.216423 0.216344 0.216265 0.216186 0.216107 0.216028 0.215949 0.215871 0.215792 0.215713 0.215634 0.215555 0.215476 0.215397 0.215319 0.21524 0.215161 0.215082 0.215003 0.214925 0.214846 0.214767 0.214688 0.21461 0.214531 0.214452 0.214374 0.214295 0.214216 0.214137 0.214059 0.21398 0.213902 0.213823 0.213744 0.213666 0.213587 0.213509 0.21343 0.213351 0.213273 0.213194 0.213116 0.213037 0.212959 0.21288 0.212802 0.212723 0.212645 0.212566 0.212488 0.21241 0.212331 0.212253 0.212174 0.212096 0.212018 0.211939 0.211861 0.211782 0.211704 0.211626 0.211547 0.211469 0.211391 0.211313 0.211234 0.211156 0.211078 0.211 0.210921 0.210843 0.210765 0.210687 0.210608 0.21053 0.210452 0.210374 0.210296 0.210218 0.21014 0.210061 0.209983 0.209905 0.209827 0.209749 0.209671 0.209593 0.209515 0.209437 0.209359 0.209281 0.209203 0.209125 0.209047 0.208969 0.208891 0.208813 0.208735 0.208657 0.208579 0.208501 0.208424 0.208346 0.208268 0.20819 0.208112 0.208034 0.207956 0.207879 0.207801 0.207723 0.207645 0.207567 0.20749 0.207412 0.207334 0.207256 0.207179 0.207101 0.207023 0.206946 0.206868 0.20679 0.206713 0.206635 0.206557 0.20648 0.206402 0.206325 0.206247 0.206169 0.206092 0.206014 0.205937 0.205859 0.205782 0.205704 0.205627 0.205549 0.205472 0.205394 0.205317 0.205239 0.205162 0.205084 0.205007 0.20493 0.204852 0.204775 0.204698 0.20462 0.204543 0.204465 0.204388 0.204311 0.204234 0.204156 0.204079 0.204002 0.203924 0.203847 0.20377 0.203693 0.203615 0.203538 0.203461 0.203384 0.203307 0.20323 0.203152 0.203075 0.202998 0.202921 0.202844 0.202767 0.20269 0.202613 0.202536 0.202458 0.202381 0.202304 0.202227 0.20215 0.202073 0.201996 0.201919 0.201842 0.201765 0.201688 0.201612 0.201535 0.201458 0.201381 0.201304 0.201227 0.20115 0.201073 0.200996 0.20092 0.200843 0.200766 0.200689 0.200612 0.200536 0.200459 0.200382 0.200305 0.200229 0.200152 0.200075 0.199998 0.199922 0.199845 0.199768 0.199692 0.199615 0.199538 0.199462 0.199385 0.199309 0.199232 0.199155 0.199079 0.199002 0.198926 0.198849 0.198773 0.198696 0.19862 0.198543 0.198467 0.19839 0.198314 0.198237 0.198161 0.198084 0.198008 0.197932 0.197855 0.197779 0.197702 0.197626 0.19755 0.197473 0.197397 0.197321 0.197244 0.197168 0.197092 0.197016 0.196939 0.196863 0.196787 0.196711 0.196634 0.196558 0.196482 0.196406 0.19633 0.196254 0.196177 0.196101 0.196025 0.195949 0.195873 0.195797 0.195721 0.195645 0.195569 0.195493 0.195416 0.19534 0.195264 0.195188 0.195112 0.195036 0.194961 0.194885; #A 28000 0.194809 0.194733 0.194657 0.194581 0.194505 0.194429 0.194353 0.194277 0.194201 0.194126 0.19405 0.193974 0.193898 0.193822 0.193747 0.193671 0.193595 0.193519 0.193443 0.193368 0.193292 0.193216 0.193141 0.193065 0.192989 0.192914 0.192838 0.192762 0.192687 0.192611 0.192535 0.19246 0.192384 0.192309 0.192233 0.192158 0.192082 0.192006 0.191931 0.191855 0.19178 0.191704 0.191629 0.191553 0.191478 0.191403 0.191327 0.191252 0.191176 0.191101 0.191026 0.19095 0.190875 0.190799 0.190724 0.190649 0.190573 0.190498 0.190423 0.190348 0.190272 0.190197 0.190122 0.190047 0.189971 0.189896 0.189821 0.189746 0.189671 0.189595 0.18952 0.189445 0.18937 0.189295 0.18922 0.189145 0.18907 0.188995 0.188919 0.188844 0.188769 0.188694 0.188619 0.188544 0.188469 0.188394 0.188319 0.188244 0.188169 0.188094 0.18802 0.187945 0.18787 0.187795 0.18772 0.187645 0.18757 0.187495 0.187421 0.187346 0.187271 0.187196 0.187121 0.187047 0.186972 0.186897 0.186822 0.186748 0.186673 0.186598 0.186523 0.186449 0.186374 0.186299 0.186225 0.18615 0.186076 0.186001 0.185926 0.185852 0.185777 0.185703 0.185628 0.185553 0.185479 0.185404 0.18533 0.185255 0.185181 0.185106 0.185032 0.184957 0.184883 0.184809 0.184734 0.18466 0.184585 0.184511 0.184437 0.184362 0.184288 0.184214 0.184139 0.184065 0.183991 0.183916 0.183842 0.183768 0.183694 0.183619 0.183545 0.183471 0.183397 0.183322 0.183248 0.183174 0.1831 0.183026 0.182952 0.182877 0.182803 0.182729 0.182655 0.182581 0.182507 0.182433 0.182359 0.182285 0.182211 0.182137 0.182063 0.181989 0.181915 0.181841 0.181767 0.181693 0.181619 0.181545 0.181471 0.181397 0.181323 0.18125 0.181176 0.181102 0.181028 0.180954 0.18088 0.180807 0.180733 0.180659 0.180585 0.180512 0.180438 0.180364 0.18029 0.180217 0.180143 0.180069 0.179996 0.179922 0.179848 0.179775 0.179701 0.179627 0.179554 0.17948 0.179407 0.179333 0.179259 0.179186 0.179112 0.179039 0.178965 0.178892 0.178818 0.178745 0.178671 0.178598 0.178525 0.178451 0.178378 0.178304 0.178231 0.178158 0.178084 0.178011 0.177938 0.177864 0.177791 0.177718 0.177644 0.177571 0.177498 0.177424 0.177351 0.177278 0.177205 0.177132 0.177058 0.176985 0.176912 0.176839 0.176766 0.176693 0.176619 0.176546 0.176473 0.1764 0.176327 0.176254 0.176181 0.176108 0.176035 0.175962 0.175889 0.175816 0.175743 0.17567 0.175597 0.175524 0.175451 0.175378 0.175305 0.175232 0.175159 0.175086 0.175014 0.174941 0.174868 0.174795 0.174722 0.174649 0.174577 0.174504 0.174431 0.174358 0.174286 0.174213 0.17414 0.174067 0.173995 0.173922 0.173849 0.173777 0.173704 0.173631 0.173559 0.173486 0.173414 0.173341 0.173268 0.173196 0.173123 0.173051 0.172978 0.172906 0.172833 0.172761 0.172688 0.172616 0.172543 0.172471 0.172398 0.172326 0.172254 0.172181 0.172109 0.172036 0.171964 0.171892 0.171819 0.171747 0.171675 0.171602 0.17153 0.171458 0.171386 0.171313 0.171241 0.171169 0.171097 0.171024 0.170952 0.17088 0.170808 0.170736 0.170664 0.170591 0.170519 0.170447 0.170375 0.170303 0.170231 0.170159 0.170087 0.170015 0.169943 0.169871 0.169799 0.169727 0.169655 0.169583 0.169511 0.169439 0.169367 0.169295 0.169223 0.169151 0.169079 0.169008 0.168936 0.168864 0.168792 0.16872 0.168648 0.168577 0.168505 0.168433 0.168361 0.16829 0.168218 0.168146 0.168074 0.168003 0.167931 0.167859 0.167788 0.167716 0.167645 0.167573 0.167501 0.16743 0.167358 0.167287 0.167215 0.167143 0.167072 0.167 0.166929 0.166857 0.166786 0.166714 0.166643 0.166571 0.1665 0.166429 0.166357 0.166286 0.166214 0.166143 0.166072 0.166 0.165929 0.165858 0.165786 0.165715 0.165644 0.165572 0.165501 0.16543 0.165359 0.165287 0.165216 0.165145 0.165074 0.165003 0.164932 0.16486 0.164789 0.164718 0.164647 0.164576 0.164505 0.164434 0.164363 0.164292 0.164221 0.164149 0.164078 0.164007 0.163936 0.163865 0.163795 0.163724 0.163653 0.163582 0.163511 0.16344 0.163369 0.163298 0.163227 0.163156 0.163086 0.163015 0.162944 0.162873 0.162802 0.162731 0.162661 0.16259 0.162519 0.162448 0.162378 0.162307 0.162236 0.162166 0.162095 0.162024 0.161954 0.161883 0.161812 0.161742 0.161671 0.161601 0.16153 0.161459 0.161389 0.161318 0.161248 0.161177 0.161107 0.161036 0.160966 0.160895 0.160825 0.160755 0.160684 0.160614 0.160543 0.160473 0.160403 0.160332 0.160262 0.160192 0.160121 0.160051 0.159981 0.15991 0.15984 0.15977 0.159699 0.159629 0.159559 0.159489 0.159419 0.159348 0.159278 0.159208 0.159138 0.159068 0.158998 0.158928 0.158857 0.158787 0.158717 0.158647 0.158577 0.158507 0.158437 0.158367 0.158297 0.158227 0.158157 0.158087 0.158017 0.157947 0.157877 0.157808 0.157738 0.157668 0.157598 0.157528 0.157458 0.157388 0.157319 0.157249 0.157179 0.157109 0.157039 0.15697 0.1569 0.15683 0.15676 0.156691 0.156621 0.156551 0.156482 0.156412 0.156342 0.156273 0.156203 0.156133 0.156064 0.155994 0.155925 0.155855 0.155786 0.155716 0.155647 0.155577 0.155508 0.155438 0.155369 0.155299 0.15523 0.15516 0.155091 0.155021 0.154952 0.154883 0.154813 0.154744 0.154675 0.154605 0.154536 0.154467 0.154397 0.154328 0.154259 0.15419 0.15412 0.154051 0.153982 0.153913 0.153844 0.153774 0.153705 0.153636 0.153567 0.153498 0.153429 0.15336 0.15329 0.153221 0.153152 0.153083 0.153014 0.152945 0.152876 0.152807 0.152738 0.152669 0.1526 0.152531 0.152462 0.152394 0.152325 0.152256 0.152187 0.152118 0.152049 0.15198 0.151911 0.151843 0.151774 0.151705 0.151636 0.151567 0.151499 0.15143 0.151361 0.151293 0.151224 0.151155 0.151086 0.151018 0.150949 0.150881 0.150812 0.150743 0.150675 0.150606 0.150538 0.150469 0.1504 0.150332 0.150263 0.150195 0.150126 0.150058 0.149989 0.149921 0.149852 0.149784 0.149716 0.149647 0.149579 0.14951 0.149442 0.149374 0.149305 0.149237 0.149169 0.1491 0.149032 0.148964 0.148896 0.148827 0.148759 0.148691 0.148623 0.148554 0.148486 0.148418 0.14835 0.148282 0.148214 0.148145 0.148077 0.148009 0.147941 0.147873 0.147805 0.147737 0.147669 0.147601 0.147533 0.147465 0.147397 0.147329 0.147261 0.147193 0.147125 0.147057 0.146989 0.146921 0.146854 0.146786 0.146718 0.14665 0.146582 0.146514 0.146447 0.146379 0.146311 0.146243 0.146176 0.146108 0.14604 0.145972 0.145905 0.145837 0.145769 0.145702 0.145634 0.145566 0.145499 0.145431 0.145364 0.145296 0.145228 0.145161 0.145093 0.145026 0.144958 0.144891 0.144823 0.144756 0.144688 0.144621 0.144554 0.144486 0.144419 0.144351 0.144284 0.144217 0.144149 0.144082 0.144015 0.143947 0.14388 0.143813 0.143745 0.143678 0.143611 0.143544 0.143476 0.143409 0.143342 0.143275 0.143208 0.14314 0.143073 0.143006 0.142939 0.142872 0.142805 0.142738 0.142671 0.142604 0.142537 0.14247 0.142403 0.142336 0.142269 0.142202 0.142135 0.142068 0.142001 0.141934 0.141867 0.1418 0.141733 0.141666 0.141599 0.141533 0.141466 0.141399 0.141332 0.141265 0.141199 0.141132 0.141065 0.140998 0.140932 0.140865 0.140798 0.140731 0.140665 0.140598 0.140531 0.140465 0.140398 0.140332 0.140265 0.140198 0.140132 0.140065 0.139999 0.139932 0.139866 0.139799 0.139733 0.139666 0.1396 0.139533 0.139467 0.1394 0.139334 0.139268 0.139201 0.139135 0.139069 0.139002 0.138936 0.13887 0.138803 0.138737 0.138671 0.138604 0.138538 0.138472 0.138406 0.13834 0.138273 0.138207 0.138141 0.138075 0.138009 0.137943 0.137876 0.13781 0.137744 0.137678 0.137612 0.137546 0.13748 0.137414 0.137348 0.137282 0.137216 0.13715 0.137084 0.137018 0.136952 0.136886 0.13682 0.136755 0.136689 0.136623 0.136557 0.136491 0.136425 0.136359 0.136294 0.136228 0.136162 0.136096 0.136031 0.135965 0.135899 0.135833 0.135768 0.135702 0.135636 0.135571 0.135505 0.13544 0.135374 0.135308 0.135243 0.135177 0.135112 0.135046 0.134981 0.134915 0.13485 0.134784 0.134719 0.134653 0.134588 0.134522 0.134457 0.134391 0.134326 0.134261 0.134195 0.13413 0.134065 0.133999 0.133934 0.133869 0.133803 0.133738 0.133673 0.133608 0.133542 0.133477 0.133412 0.133347 0.133282 0.133216 0.133151 0.133086 0.133021 0.132956 0.132891 0.132826 0.132761 0.132696 0.132631 0.132566 0.132501 0.132436 0.132371 0.132306 0.132241 0.132176 0.132111 0.132046 0.131981 0.131916 0.131851 0.131786 0.131721 0.131657 0.131592 0.131527 0.131462 0.131397 0.131333 0.131268 0.131203 0.131138 0.131074 0.131009 0.130944 0.13088 0.130815 0.13075 0.130686 0.130621 0.130556 0.130492 0.130427 0.130363 0.130298 0.130233 0.130169 0.130104 0.13004 0.129975 0.129911 0.129847 0.129782 0.129718 0.129653 0.129589 0.129524 0.12946 0.129396 0.129331 0.129267 0.129203 0.129138 0.129074 0.12901 0.128946 0.128881 0.128817 0.128753 0.128689 0.128624 0.12856 0.128496 0.128432 0.128368 0.128304 0.128239 0.128175 0.128111 0.128047 0.127983 0.127919 0.127855 0.127791 0.127727 0.127663 0.127599 0.127535 0.127471 0.127407 0.127343 0.127279 0.127215 0.127152 0.127088 0.127024 0.12696 0.126896 0.126832 0.126769 0.126705 0.126641 0.126577 0.126513 0.12645 0.126386 0.126322 0.126259 0.126195 0.126131 0.126068 0.126004 0.12594 0.125877 0.125813 0.12575 0.125686 0.125622 0.125559 0.125495 0.125432 0.125368 0.125305 0.125241 0.125178 0.125114 0.125051 0.124988; #A 29000 0.124924 0.124861 0.124797 0.124734 0.124671 0.124607 0.124544 0.124481 0.124417 0.124354 0.124291 0.124228 0.124164 0.124101 0.124038 0.123975 0.123912 0.123848 0.123785 0.123722 0.123659 0.123596 0.123533 0.12347 0.123407 0.123344 0.12328 0.123217 0.123154 0.123091 0.123028 0.122965 0.122903 0.12284 0.122777 0.122714 0.122651 0.122588 0.122525 0.122462 0.122399 0.122336 0.122274 0.122211 0.122148 0.122085 0.122022 0.12196 0.121897 0.121834 0.121772 0.121709 0.121646 0.121584 0.121521 0.121458 0.121396 0.121333 0.12127 0.121208 0.121145 0.121083 0.12102 0.120958 0.120895 0.120833 0.12077 0.120708 0.120645 0.120583 0.12052 0.120458 0.120395 0.120333 0.120271 0.120208 0.120146 0.120084 0.120021 0.119959 0.119897 0.119834 0.119772 0.11971 0.119648 0.119585 0.119523 0.119461 0.119399 0.119337 0.119274 0.119212 0.11915 0.119088 0.119026 0.118964 0.118902 0.11884 0.118778 0.118716 0.118654 0.118592 0.11853 0.118468 0.118406 0.118344 0.118282 0.11822 0.118158 0.118096 0.118034 0.117972 0.117911 0.117849 0.117787 0.117725 0.117663 0.117602 0.11754 0.117478 0.117416 0.117355 0.117293 0.117231 0.11717 0.117108 0.117046 0.116985 0.116923 0.116861 0.1168 0.116738 0.116677 0.116615 0.116554 0.116492 0.116431 0.116369 0.116308 0.116246 0.116185 0.116123 0.116062 0.116 0.115939 0.115878 0.115816 0.115755 0.115694 0.115632 0.115571 0.11551 0.115448 0.115387 0.115326 0.115265 0.115203 0.115142 0.115081 0.11502 0.114959 0.114897 0.114836 0.114775 0.114714 0.114653 0.114592 0.114531 0.11447 0.114409 0.114348 0.114287 0.114226 0.114165 0.114104 0.114043 0.113982 0.113921 0.11386 0.113799 0.113738 0.113677 0.113616 0.113556 0.113495 0.113434 0.113373 0.113312 0.113252 0.113191 0.11313 0.113069 0.113009 0.112948 0.112887 0.112827 0.112766 0.112705 0.112645 0.112584 0.112523 0.112463 0.112402 0.112342 0.112281 0.112221 0.11216 0.1121 0.112039 0.111979 0.111918 0.111858 0.111797 0.111737 0.111677 0.111616 0.111556 0.111495 0.111435 0.111375 0.111314 0.111254 0.111194 0.111134 0.111073 0.111013 0.110953 0.110893 0.110832 0.110772 0.110712 0.110652 0.110592 0.110532 0.110472 0.110411 0.110351 0.110291 0.110231 0.110171 0.110111 0.110051 0.109991 0.109931 0.109871 0.109811 0.109751 0.109691 0.109631 0.109571 0.109512 0.109452 0.109392 0.109332 0.109272 0.109212 0.109153 0.109093 0.109033 0.108973 0.108914 0.108854 0.108794 0.108734 0.108675 0.108615 0.108555 0.108496 0.108436 0.108376 0.108317 0.108257 0.108198 0.108138 0.108079 0.108019 0.10796 0.1079 0.107841 0.107781 0.107722 0.107662 0.107603 0.107543 0.107484 0.107425 0.107365 0.107306 0.107247 0.107187 0.107128 0.107069 0.107009 0.10695 0.106891 0.106832 0.106772 0.106713 0.106654 0.106595 0.106536 0.106476 0.106417 0.106358 0.106299 0.10624 0.106181 0.106122 0.106063 0.106004 0.105945 0.105886 0.105827 0.105768 0.105709 0.10565 0.105591 0.105532 0.105473 0.105414 0.105355 0.105297 0.105238 0.105179 0.10512 0.105061 0.105002 0.104944 0.104885 0.104826 0.104767 0.104709 0.10465 0.104591 0.104533 0.104474 0.104415 0.104357 0.104298 0.104239 0.104181 0.104122 0.104064 0.104005 0.103947 0.103888 0.10383 0.103771 0.103713 0.103654 0.103596 0.103537 0.103479 0.103421 0.103362 0.103304 0.103246 0.103187 0.103129 0.103071 0.103012 0.102954 0.102896 0.102837 0.102779 0.102721 0.102663 0.102605 0.102546 0.102488 0.10243 0.102372 0.102314 0.102256 0.102198 0.10214 0.102082 0.102024 0.101965 0.101907 0.101849 0.101791 0.101733 0.101676 0.101618 0.10156 0.101502 0.101444 0.101386 0.101328 0.10127 0.101212 0.101155 0.101097 0.101039 0.100981 0.100923 0.100866 0.100808 0.10075 0.100693 0.100635 0.100577 0.100519 0.100462 0.100404 0.100347 0.100289 0.100231 0.100174 0.100116 0.100059 0.100001 0.0999436 0.0998861 0.0998286 0.0997712 0.0997137 0.0996563 0.0995988 0.0995414 0.099484 0.0994266 0.0993693 0.0993119 0.0992546 0.0991972 0.0991399 0.0990826 0.0990254 0.0989681 0.0989108 0.0988536 0.0987964 0.0987392 0.098682 0.0986248 0.0985676 0.0985105 0.0984534 0.0983962 0.0983391 0.098282 0.098225 0.0981679 0.0981109 0.0980538 0.0979968 0.0979398 0.0978828 0.0978259 0.0977689 0.097712 0.097655 0.0975981 0.0975412 0.0974843 0.0974275 0.0973706 0.0973138 0.097257 0.0972001 0.0971433 0.0970866 0.0970298 0.0969731 0.0969163 0.0968596 0.0968029 0.0967462 0.0966895 0.0966329 0.0965762 0.0965196 0.096463 0.0964064 0.0963498 0.0962932 0.0962367 0.0961801 0.0961236 0.0960671 0.0960106 0.0959541 0.0958976 0.0958412 0.0957847 0.0957283 0.0956719 0.0956155 0.0955591 0.0955028 0.0954464 0.0953901 0.0953338 0.0952775 0.0952212 0.0951649 0.0951086 0.0950524 0.0949962 0.09494 0.0948838 0.0948276 0.0947714 0.0947152 0.0946591 0.094603 0.0945469 0.0944908 0.0944347 0.0943786 0.0943226 0.0942665 0.0942105 0.0941545 0.0940985 0.0940425 0.0939866 0.0939306 0.0938747 0.0938188 0.0937629 0.093707 0.0936511 0.0935953 0.0935394 0.0934836 0.0934278 0.093372 0.0933162 0.0932604 0.0932047 0.093149 0.0930932 0.0930375 0.0929818 0.0929262 0.0928705 0.0928148 0.0927592 0.0927036 0.092648 0.0925924 0.0925368 0.0924813 0.0924257 0.0923702 0.0923147 0.0922592 0.0922037 0.0921482 0.0920928 0.0920374 0.0919819 0.0919265 0.0918711 0.0918158 0.0917604 0.091705 0.0916497 0.0915944 0.0915391 0.0914838 0.0914285 0.0913733 0.091318 0.0912628 0.0912076 0.0911524 0.0910972 0.091042 0.0909869 0.0909318 0.0908766 0.0908215 0.0907664 0.0907114 0.0906563 0.0906013 0.0905462 0.0904912 0.0904362 0.0903812 0.0903262 0.0902713 0.0902163 0.0901614 0.0901065 0.0900516 0.0899967 0.0899419 0.089887 0.0898322 0.0897774 0.0897225 0.0896678 0.089613 0.0895582 0.0895035 0.0894487 0.089394 0.0893393 0.0892846 0.08923 0.0891753 0.0891207 0.0890661 0.0890114 0.0889568 0.0889023 0.0888477 0.0887932 0.0887386 0.0886841 0.0886296 0.0885751 0.0885206 0.0884662 0.0884117 0.0883573 0.0883029 0.0882485 0.0881941 0.0881397 0.0880854 0.0880311 0.0879767 0.0879224 0.0878681 0.0878139 0.0877596 0.0877054 0.0876511 0.0875969 0.0875427 0.0874885 0.0874343 0.0873802 0.087326 0.0872719 0.0872178 0.0871637 0.0871096 0.0870556 0.0870015 0.0869475 0.0868935 0.0868395 0.0867855 0.0867315 0.0866776 0.0866236 0.0865697 0.0865158 0.0864619 0.086408 0.0863541 0.0863003 0.0862464 0.0861926 0.0861388 0.086085 0.0860312 0.0859775 0.0859237 0.08587 0.0858163 0.0857626 0.0857089 0.0856552 0.0856016 0.0855479 0.0854943 0.0854407 0.0853871 0.0853335 0.08528 0.0852264 0.0851729 0.0851194 0.0850659 0.0850124 0.0849589 0.0849055 0.084852 0.0847986 0.0847452 0.0846918 0.0846384 0.0845851 0.0845317 0.0844784 0.0844251 0.0843718 0.0843185 0.0842652 0.0842119 0.0841587 0.0841055 0.0840523 0.0839991 0.0839459 0.0838927 0.0838396 0.0837864 0.0837333 0.0836802 0.0836271 0.083574 0.083521 0.0834679 0.0834149 0.0833619 0.0833089 0.0832559 0.083203 0.08315 0.0830971 0.0830442 0.0829912 0.0829384 0.0828855 0.0828326 0.0827798 0.082727 0.0826741 0.0826213 0.0825686 0.0825158 0.082463 0.0824103 0.0823576 0.0823049 0.0822522 0.0821995 0.0821469 0.0820942 0.0820416 0.081989 0.0819364 0.0818838 0.0818312 0.0817787 0.0817261 0.0816736 0.0816211 0.0815686 0.0815161 0.0814637 0.0814112 0.0813588 0.0813064 0.081254 0.0812016 0.0811493 0.0810969 0.0810446 0.0809922 0.0809399 0.0808876 0.0808354 0.0807831 0.0807309 0.0806786 0.0806264 0.0805742 0.080522 0.0804699 0.0804177 0.0803656 0.0803135 0.0802614 0.0802093 0.0801572 0.0801051 0.0800531 0.0800011 0.0799491 0.0798971 0.0798451 0.0797931 0.0797412 0.0796892 0.0796373 0.0795854 0.0795335 0.0794816 0.0794298 0.0793779 0.0793261 0.0792743 0.0792225 0.0791707 0.079119 0.0790672 0.0790155 0.0789638 0.0789121 0.0788604 0.0788087 0.078757 0.0787054 0.0786538 0.0786022 0.0785506 0.078499 0.0784474 0.0783959 0.0783443 0.0782928 0.0782413 0.0781898 0.0781384 0.0780869 0.0780355 0.077984 0.0779326 0.0778812 0.0778299 0.0777785 0.0777272 0.0776758 0.0776245 0.0775732 0.0775219 0.0774707 0.0774194 0.0773682 0.0773169 0.0772657 0.0772146 0.0771634 0.0771122 0.0770611 0.0770099 0.0769588 0.0769077 0.0768567 0.0768056 0.0767545 0.0767035 0.0766525 0.0766015 0.0765505 0.0764995 0.0764486 0.0763976 0.0763467 0.0762958 0.0762449 0.076194 0.0761431 0.0760923 0.0760414 0.0759906 0.0759398 0.075889 0.0758383 0.0757875 0.0757368 0.0756861 0.0756353 0.0755847 0.075534 0.0754833 0.0754327 0.075382 0.0753314 0.0752808 0.0752302 0.0751797 0.0751291 0.0750786 0.0750281 0.0749776 0.0749271 0.0748766 0.0748261 0.0747757 0.0747253 0.0746748 0.0746244 0.0745741 0.0745237 0.0744734 0.074423 0.0743727 0.0743224 0.0742721 0.0742218 0.0741716 0.0741213 0.0740711 0.0740209 0.0739707 0.0739205 0.0738704 0.0738202 0.0737701 0.07372 0.0736699 0.0736198 0.0735698 0.0735197 0.0734697 0.0734196 0.0733696 0.0733197 0.0732697 0.0732197 0.0731698 0.0731198 0.0730699 0.07302 0.0729702 0.0729203 0.0728705 0.0728206 0.0727708 0.072721 0.0726712 0.0726214 0.0725717 0.072522 0.0724722 0.0724225 0.0723728 0.0723232 0.0722735 0.0722239 0.0721742 0.0721246 0.072075 0.0720254 0.0719759 0.0719263 0.0718768 0.0718273 0.0717778 0.0717283 0.0716788 0.0716294 0.0715799 0.0715305 0.0714811 0.0714317 0.0713823 0.071333 0.0712836 0.0712343 0.071185 0.0711357 0.0710864 0.0710372 0.0709879 0.0709387 0.0708895 0.0708402 0.0707911 0.0707419 0.0706927 0.0706436 0.0705945 0.0705454 0.0704963 0.0704472 0.0703981 0.0703491 0.0703001 0.070251 0.0702021 0.0701531 0.0701041 0.0700552 0.0700062 0.0699573 0.0699084 0.0698595 0.0698106 0.0697618 0.069713 0.0696641 0.0696153 0.0695665 0.0695178 0.069469 0.0694202 0.0693715 0.0693228 0.0692741 0.0692254 0.0691768 0.0691281 0.0690795 0.0690309 0.0689823 0.0689337 0.0688851 0.0688366; #A 30000 0.068788 0.0687395 0.068691 0.0686425 0.068594 0.0685456 0.0684971 0.0684487 0.0684003 0.0683519 0.0683035 0.0682551 0.0682068 0.0681585 0.0681102 0.0680619 0.0680136 0.0679653 0.067917 0.0678688 0.0678206 0.0677724 0.0677242 0.067676 0.0676279 0.0675797 0.0675316 0.0674835 0.0674354 0.0673873 0.0673393 0.0672912 0.0672432 0.0671952 0.0671472 0.0670992 0.0670512 0.0670033 0.0669553 0.0669074 0.0668595 0.0668116 0.0667638 0.0667159 0.0666681 0.0666203 0.0665724 0.0665247 0.0664769 0.0664291 0.0663814 0.0663337 0.0662859 0.0662382 0.0661906 0.0661429 0.0660953 0.0660476 0.066 0.0659524 0.0659048 0.0658573 0.0658097 0.0657622 0.0657146 0.0656671 0.0656197 0.0655722 0.0655247 0.0654773 0.0654299 0.0653825 0.0653351 0.0652877 0.0652403 0.065193 0.0651457 0.0650983 0.065051 0.0650038 0.0649565 0.0649093 0.064862 0.0648148 0.0647676 0.0647204 0.0646733 0.0646261 0.064579 0.0645318 0.0644847 0.0644377 0.0643906 0.0643435 0.0642965 0.0642495 0.0642025 0.0641555 0.0641085 0.0640615 0.0640146 0.0639677 0.0639207 0.0638738 0.063827 0.0637801 0.0637333 0.0636864 0.0636396 0.0635928 0.063546 0.0634993 0.0634525 0.0634058 0.0633591 0.0633124 0.0632657 0.063219 0.0631723 0.0631257 0.0630791 0.0630325 0.0629859 0.0629393 0.0628927 0.0628462 0.0627997 0.0627532 0.0627067 0.0626602 0.0626137 0.0625673 0.0625209 0.0624744 0.062428 0.0623817 0.0623353 0.0622889 0.0622426 0.0621963 0.06215 0.0621037 0.0620574 0.0620112 0.061965 0.0619187 0.0618725 0.0618263 0.0617802 0.061734 0.0616879 0.0616417 0.0615956 0.0615495 0.0615035 0.0614574 0.0614114 0.0613653 0.0613193 0.0612733 0.0612274 0.0611814 0.0611354 0.0610895 0.0610436 0.0609977 0.0609518 0.060906 0.0608601 0.0608143 0.0607685 0.0607227 0.0606769 0.0606311 0.0605853 0.0605396 0.0604939 0.0604482 0.0604025 0.0603568 0.0603112 0.0602655 0.0602199 0.0601743 0.0601287 0.0600831 0.0600376 0.059992 0.0599465 0.059901 0.0598555 0.05981 0.0597646 0.0597191 0.0596737 0.0596283 0.0595829 0.0595375 0.0594921 0.0594468 0.0594014 0.0593561 0.0593108 0.0592655 0.0592203 0.059175 0.0591298 0.0590846 0.0590394 0.0589942 0.058949 0.0589039 0.0588587 0.0588136 0.0587685 0.0587234 0.0586783 0.0586333 0.0585882 0.0585432 0.0584982 0.0584532 0.0584082 0.0583633 0.0583183 0.0582734 0.0582285 0.0581836 0.0581387 0.0580939 0.058049 0.0580042 0.0579594 0.0579146 0.0578698 0.057825 0.0577803 0.0577355 0.0576908 0.0576461 0.0576015 0.0575568 0.0575121 0.0574675 0.0574229 0.0573783 0.0573337 0.0572891 0.0572446 0.0572 0.0571555 0.057111 0.0570665 0.0570221 0.0569776 0.0569332 0.0568887 0.0568443 0.0567999 0.0567556 0.0567112 0.0566669 0.0566225 0.0565782 0.0565339 0.0564897 0.0564454 0.0564012 0.0563569 0.0563127 0.0562685 0.0562243 0.0561802 0.056136 0.0560919 0.0560478 0.0560037 0.0559596 0.0559156 0.0558715 0.0558275 0.0557835 0.0557395 0.0556955 0.0556515 0.0556076 0.0555636 0.0555197 0.0554758 0.0554319 0.0553881 0.0553442 0.0553004 0.0552566 0.0552128 0.055169 0.0551252 0.0550815 0.0550377 0.054994 0.0549503 0.0549066 0.0548629 0.0548193 0.0547756 0.054732 0.0546884 0.0546448 0.0546012 0.0545577 0.0545142 0.0544706 0.0544271 0.0543836 0.0543402 0.0542967 0.0542533 0.0542098 0.0541664 0.054123 0.0540796 0.0540363 0.0539929 0.0539496 0.0539063 0.053863 0.0538197 0.0537765 0.0537332 0.05369 0.0536468 0.0536036 0.0535604 0.0535172 0.0534741 0.053431 0.0533879 0.0533448 0.0533017 0.0532586 0.0532156 0.0531725 0.0531295 0.0530865 0.0530435 0.0530006 0.0529576 0.0529147 0.0528718 0.0528289 0.052786 0.0527431 0.0527003 0.0526574 0.0526146 0.0525718 0.052529 0.0524862 0.0524435 0.0524008 0.052358 0.0523153 0.0522727 0.05223 0.0521873 0.0521447 0.0521021 0.0520595 0.0520169 0.0519743 0.0519318 0.0518892 0.0518467 0.0518042 0.0517617 0.0517192 0.0516768 0.0516343 0.0515919 0.0515495 0.0515071 0.0514647 0.0514224 0.05138 0.0513377 0.0512954 0.0512531 0.0512108 0.0511686 0.0511263 0.0510841 0.0510419 0.0509997 0.0509575 0.0509154 0.0508732 0.0508311 0.050789 0.0507469 0.0507048 0.0506628 0.0506207 0.0505787 0.0505367 0.0504947 0.0504527 0.0504108 0.0503688 0.0503269 0.050285 0.0502431 0.0502012 0.0501593 0.0501175 0.0500757 0.0500338 0.0499921 0.0499503 0.0499085 0.0498668 0.049825 0.0497833 0.0497416 0.0496999 0.0496583 0.0496166 0.049575 0.0495334 0.0494918 0.0494502 0.0494087 0.0493671 0.0493256 0.0492841 0.0492426 0.0492011 0.0491596 0.0491182 0.0490767 0.0490353 0.0489939 0.0489525 0.0489112 0.0488698 0.0488285 0.0487872 0.0487459 0.0487046 0.0486633 0.0486221 0.0485809 0.0485396 0.0484984 0.0484573 0.0484161 0.0483749 0.0483338 0.0482927 0.0482516 0.0482105 0.0481695 0.0481284 0.0480874 0.0480464 0.0480054 0.0479644 0.0479234 0.0478825 0.0478415 0.0478006 0.0477597 0.0477188 0.047678 0.0476371 0.0475963 0.0475555 0.0475147 0.0474739 0.0474331 0.0473924 0.0473516 0.0473109 0.0472702 0.0472295 0.0471889 0.0471482 0.0471076 0.047067 0.0470264 0.0469858 0.0469452 0.0469046 0.0468641 0.0468236 0.0467831 0.0467426 0.0467021 0.0466617 0.0466213 0.0465808 0.0465404 0.0465001 0.0464597 0.0464193 0.046379 0.0463387 0.0462984 0.0462581 0.0462178 0.0461776 0.0461374 0.0460971 0.0460569 0.0460168 0.0459766 0.0459364 0.0458963 0.0458562 0.0458161 0.045776 0.0457359 0.0456959 0.0456559 0.0456158 0.0455758 0.0455359 0.0454959 0.0454559 0.045416 0.0453761 0.0453362 0.0452963 0.0452564 0.0452166 0.0451768 0.0451369 0.0450971 0.0450574 0.0450176 0.0449778 0.0449381 0.0448984 0.0448587 0.044819 0.0447794 0.0447397 0.0447001 0.0446605 0.0446209 0.0445813 0.0445417 0.0445022 0.0444626 0.0444231 0.0443836 0.0443441 0.0443047 0.0442652 0.0442258 0.0441864 0.044147 0.0441076 0.0440682 0.0440289 0.0439896 0.0439502 0.043911 0.0438717 0.0438324 0.0437932 0.0437539 0.0437147 0.0436755 0.0436363 0.0435972 0.043558 0.0435189 0.0434798 0.0434407 0.0434016 0.0433626 0.0433235 0.0432845 0.0432455 0.0432065 0.0431675 0.0431285 0.0430896 0.0430507 0.0430118 0.0429729 0.042934 0.0428951 0.0428563 0.0428175 0.0427786 0.0427398 0.0427011 0.0426623 0.0426236 0.0425848 0.0425461 0.0425074 0.0424688 0.0424301 0.0423915 0.0423528 0.0423142 0.0422756 0.0422371 0.0421985 0.04216 0.0421214 0.0420829 0.0420444 0.042006 0.0419675 0.0419291 0.0418907 0.0418522 0.0418139 0.0417755 0.0417371 0.0416988 0.0416605 0.0416222 0.0415839 0.0415456 0.0415074 0.0414691 0.0414309 0.0413927 0.0413545 0.0413163 0.0412782 0.04124 0.0412019 0.0411638 0.0411257 0.0410877 0.0410496 0.0410116 0.0409736 0.0409356 0.0408976 0.0408596 0.0408217 0.0407837 0.0407458 0.0407079 0.04067 0.0406322 0.0405943 0.0405565 0.0405187 0.0404809 0.0404431 0.0404053 0.0403676 0.0403298 0.0402921 0.0402544 0.0402167 0.0401791 0.0401414 0.0401038 0.0400662 0.0400286 0.039991 0.0399534 0.0399159 0.0398784 0.0398409 0.0398034 0.0397659 0.0397284 0.039691 0.0396536 0.0396161 0.0395788 0.0395414 0.039504 0.0394667 0.0394294 0.039392 0.0393548 0.0393175 0.0392802 0.039243 0.0392058 0.0391686 0.0391314 0.0390942 0.039057 0.0390199 0.0389828 0.0389457 0.0389086 0.0388715 0.0388345 0.0387974 0.0387604 0.0387234 0.0386864 0.0386494 0.0386125 0.0385755 0.0385386 0.0385017 0.0384648 0.038428 0.0383911 0.0383543 0.0383175 0.0382807 0.0382439 0.0382071 0.0381704 0.0381336 0.0380969 0.0380602 0.0380236 0.0379869 0.0379502 0.0379136 0.037877 0.0378404 0.0378038 0.0377673 0.0377307 0.0376942 0.0376577 0.0376212 0.0375847 0.0375482 0.0375118 0.0374754 0.037439 0.0374026 0.0373662 0.0373298 0.0372935 0.0372572 0.0372209 0.0371846 0.0371483 0.0371121 0.0370758 0.0370396 0.0370034 0.0369672 0.036931 0.0368949 0.0368587 0.0368226 0.0367865 0.0367504 0.0367144 0.0366783 0.0366423 0.0366063 0.0365703 0.0365343 0.0364983 0.0364624 0.0364264 0.0363905 0.0363546 0.0363187 0.0362829 0.036247 0.0362112 0.0361754 0.0361396 0.0361038 0.036068 0.0360323 0.0359966 0.0359609 0.0359252 0.0358895 0.0358538 0.0358182 0.0357826 0.035747 0.0357114 0.0356758 0.0356402 0.0356047 0.0355692 0.0355337 0.0354982 0.0354627 0.0354273 0.0353918 0.0353564 0.035321 0.0352856 0.0352502 0.0352149 0.0351796 0.0351442 0.0351089 0.0350736 0.0350384 0.0350031 0.0349679 0.0349327 0.0348975 0.0348623 0.0348271 0.034792 0.0347569 0.0347218 0.0346867 0.0346516 0.0346165 0.0345815 0.0345464 0.0345114 0.0344764 0.0344415 0.0344065 0.0343716 0.0343366 0.0343017 0.0342668 0.034232 0.0341971 0.0341623 0.0341275 0.0340927 0.0340579 0.0340231 0.0339883 0.0339536 0.0339189 0.0338842 0.0338495 0.0338148 0.0337802 0.0337456 0.0337109 0.0336763 0.0336418 0.0336072 0.0335726 0.0335381 0.0335036 0.0334691 0.0334346 0.0334002 0.0333657 0.0333313 0.0332969 0.0332625 0.0332281 0.0331938 0.0331594 0.0331251 0.0330908 0.0330565 0.0330222 0.032988 0.0329537 0.0329195 0.0328853 0.0328511 0.0328169 0.0327828 0.0327487 0.0327145 0.0326804 0.0326464 0.0326123 0.0325782 0.0325442 0.0325102 0.0324762 0.0324422 0.0324082 0.0323743 0.0323404 0.0323065 0.0322726 0.0322387 0.0322048 0.032171 0.0321372 0.0321033 0.0320696 0.0320358 0.032002 0.0319683 0.0319346 0.0319009 0.0318672 0.0318335 0.0317998 0.0317662 0.0317326 0.031699 0.0316654 0.0316318 0.0315983 0.0315647 0.0315312 0.0314977 0.0314642 0.0314308 0.0313973 0.0313639 0.0313305 0.0312971 0.0312637 0.0312304 0.031197 0.0311637 0.0311304 0.0310971 0.0310638 0.0310306 0.0309973 0.0309641 0.0309309 0.0308977 0.0308645 0.0308314 0.0307982 0.0307651 0.030732 0.0306989 0.0306659 0.0306328 0.0305998 0.0305668 0.0305338 0.0305008 0.0304678 0.0304349 0.0304019 0.030369 0.0303361 0.0303032 0.0302704 0.0302375 0.0302047 0.0301719 0.0301391 0.0301063 0.0300736 0.0300408 0.0300081 0.0299754 0.0299427 0.0299101 0.0298774 0.0298448 0.0298122 0.0297795 0.029747 0.0297144 0.0296818 0.0296493 0.0296168 0.0295843 0.0295518 0.0295194 0.0294869 0.0294545 0.0294221 0.0293897 0.0293573 0.0293249 0.0292926 0.0292603 0.029228 0.0291957 0.0291634 0.0291311 0.0290989 0.0290667 0.0290345 0.0290023 0.0289701 0.028938 0.0289058 0.0288737 0.0288416 0.0288095 0.0287775 0.0287454 0.0287134 0.0286814 0.0286494 0.0286174 0.0285855 0.0285535 0.0285216 0.0284897; #A 31000 0.0284578 0.0284259 0.028394 0.0283622 0.0283304 0.0282986 0.0282668 0.028235 0.0282033 0.0281715 0.0281398 0.0281081 0.0280764 0.0280448 0.0280131 0.0279815 0.0279499 0.0279183 0.0278867 0.0278551 0.0278236 0.0277921 0.0277606 0.0277291 0.0276976 0.0276661 0.0276347 0.0276033 0.0275719 0.0275405 0.0275091 0.0274777 0.0274464 0.0274151 0.0273838 0.0273525 0.0273212 0.02729 0.0272588 0.0272275 0.0271963 0.0271652 0.027134 0.0271028 0.0270717 0.0270406 0.0270095 0.0269784 0.0269474 0.0269163 0.0268853 0.0268543 0.0268233 0.0267924 0.0267614 0.0267305 0.0266995 0.0266686 0.0266378 0.0266069 0.026576 0.0265452 0.0265144 0.0264836 0.0264528 0.0264221 0.0263913 0.0263606 0.0263299 0.0262992 0.0262685 0.0262378 0.0262072 0.0261766 0.026146 0.0261154 0.0260848 0.0260543 0.0260237 0.0259932 0.0259627 0.0259322 0.0259018 0.0258713 0.0258409 0.0258105 0.0257801 0.0257497 0.0257193 0.025689 0.0256587 0.0256283 0.0255981 0.0255678 0.0255375 0.0255073 0.0254771 0.0254469 0.0254167 0.0253865 0.0253563 0.0253262 0.0252961 0.025266 0.0252359 0.0252058 0.0251758 0.0251458 0.0251158 0.0250858 0.0250558 0.0250258 0.0249959 0.024966 0.024936 0.0249062 0.0248763 0.0248464 0.0248166 0.0247868 0.024757 0.0247272 0.0246974 0.0246677 0.0246379 0.0246082 0.0245785 0.0245488 0.0245192 0.0244895 0.0244599 0.0244303 0.0244007 0.0243711 0.0243416 0.024312 0.0242825 0.024253 0.0242235 0.024194 0.0241646 0.0241351 0.0241057 0.0240763 0.0240469 0.0240176 0.0239882 0.0239589 0.0239296 0.0239003 0.023871 0.0238417 0.0238125 0.0237833 0.0237541 0.0237249 0.0236957 0.0236665 0.0236374 0.0236083 0.0235792 0.0235501 0.023521 0.023492 0.0234629 0.0234339 0.0234049 0.0233759 0.023347 0.023318 0.0232891 0.0232602 0.0232313 0.0232024 0.0231736 0.0231447 0.0231159 0.0230871 0.0230583 0.0230295 0.0230008 0.0229721 0.0229433 0.0229146 0.022886 0.0228573 0.0228286 0.0228 0.0227714 0.0227428 0.0227142 0.0226857 0.0226571 0.0226286 0.0226001 0.0225716 0.0225431 0.0225147 0.0224862 0.0224578 0.0224294 0.022401 0.0223727 0.0223443 0.022316 0.0222877 0.0222594 0.0222311 0.0222028 0.0221746 0.0221464 0.0221182 0.02209 0.0220618 0.0220336 0.0220055 0.0219774 0.0219493 0.0219212 0.0218931 0.0218651 0.021837 0.021809 0.021781 0.021753 0.0217251 0.0216971 0.0216692 0.0216413 0.0216134 0.0215855 0.0215577 0.0215298 0.021502 0.0214742 0.0214464 0.0214186 0.0213909 0.0213632 0.0213354 0.0213077 0.0212801 0.0212524 0.0212248 0.0211971 0.0211695 0.0211419 0.0211144 0.0210868 0.0210593 0.0210317 0.0210042 0.0209767 0.0209493 0.0209218 0.0208944 0.020867 0.0208396 0.0208122 0.0207848 0.0207575 0.0207301 0.0207028 0.0206755 0.0206483 0.020621 0.0205938 0.0205665 0.0205393 0.0205121 0.020485 0.0204578 0.0204307 0.0204036 0.0203765 0.0203494 0.0203223 0.0202953 0.0202682 0.0202412 0.0202142 0.0201873 0.0201603 0.0201334 0.0201064 0.0200795 0.0200527 0.0200258 0.0199989 0.0199721 0.0199453 0.0199185 0.0198917 0.0198649 0.0198382 0.0198115 0.0197847 0.019758 0.0197314 0.0197047 0.0196781 0.0196514 0.0196248 0.0195983 0.0195717 0.0195451 0.0195186 0.0194921 0.0194656 0.0194391 0.0194126 0.0193862 0.0193598 0.0193333 0.019307 0.0192806 0.0192542 0.0192279 0.0192016 0.0191753 0.019149 0.0191227 0.0190964 0.0190702 0.019044 0.0190178 0.0189916 0.0189654 0.0189393 0.0189132 0.0188871 0.018861 0.0188349 0.0188088 0.0187828 0.0187568 0.0187308 0.0187048 0.0186788 0.0186529 0.0186269 0.018601 0.0185751 0.0185492 0.0185234 0.0184975 0.0184717 0.0184459 0.0184201 0.0183943 0.0183686 0.0183428 0.0183171 0.0182914 0.0182657 0.01824 0.0182144 0.0181888 0.0181631 0.0181375 0.018112 0.0180864 0.0180609 0.0180353 0.0180098 0.0179843 0.0179589 0.0179334 0.017908 0.0178825 0.0178571 0.0178318 0.0178064 0.017781 0.0177557 0.0177304 0.0177051 0.0176798 0.0176546 0.0176293 0.0176041 0.0175789 0.0175537 0.0175285 0.0175034 0.0174782 0.0174531 0.017428 0.0174029 0.0173779 0.0173528 0.0173278 0.0173028 0.0172778 0.0172528 0.0172278 0.0172029 0.017178 0.0171531 0.0171282 0.0171033 0.0170785 0.0170536 0.0170288 0.017004 0.0169792 0.0169545 0.0169297 0.016905 0.0168803 0.0168556 0.0168309 0.0168063 0.0167816 0.016757 0.0167324 0.0167078 0.0166832 0.0166587 0.0166342 0.0166096 0.0165851 0.0165607 0.0165362 0.0165118 0.0164873 0.0164629 0.0164385 0.0164142 0.0163898 0.0163655 0.0163412 0.0163169 0.0162926 0.0162683 0.0162441 0.0162198 0.0161956 0.0161714 0.0161472 0.0161231 0.0160989 0.0160748 0.0160507 0.0160266 0.0160026 0.0159785 0.0159545 0.0159304 0.0159064 0.0158825 0.0158585 0.0158346 0.0158106 0.0157867 0.0157628 0.015739 0.0157151 0.0156913 0.0156674 0.0156436 0.0156198 0.0155961 0.0155723 0.0155486 0.0155249 0.0155012 0.0154775 0.0154538 0.0154302 0.0154066 0.015383 0.0153594 0.0153358 0.0153123 0.0152887 0.0152652 0.0152417 0.0152182 0.0151948 0.0151713 0.0151479 0.0151245 0.0151011 0.0150777 0.0150543 0.015031 0.0150077 0.0149844 0.0149611 0.0149378 0.0149146 0.0148913 0.0148681 0.0148449 0.0148217 0.0147986 0.0147754 0.0147523 0.0147292 0.0147061 0.014683 0.01466 0.0146369 0.0146139 0.0145909 0.0145679 0.014545 0.014522 0.0144991 0.0144762 0.0144533 0.0144304 0.0144076 0.0143847 0.0143619 0.0143391 0.0143163 0.0142935 0.0142708 0.0142481 0.0142253 0.0142026 0.01418 0.0141573 0.0141347 0.014112 0.0140894 0.0140668 0.0140443 0.0140217 0.0139992 0.0139766 0.0139541 0.0139317 0.0139092 0.0138868 0.0138643 0.0138419 0.0138195 0.0137971 0.0137748 0.0137524 0.0137301 0.0137078 0.0136855 0.0136633 0.013641 0.0136188 0.0135966 0.0135744 0.0135522 0.01353 0.0135079 0.0134858 0.0134636 0.0134416 0.0134195 0.0133974 0.0133754 0.0133534 0.0133314 0.0133094 0.0132874 0.0132655 0.0132436 0.0132216 0.0131998 0.0131779 0.013156 0.0131342 0.0131124 0.0130906 0.0130688 0.013047 0.0130253 0.0130035 0.0129818 0.0129601 0.0129384 0.0129168 0.0128951 0.0128735 0.0128519 0.0128303 0.0128087 0.0127872 0.0127657 0.0127441 0.0127226 0.0127012 0.0126797 0.0126582 0.0126368 0.0126154 0.012594 0.0125726 0.0125513 0.0125299 0.0125086 0.0124873 0.012466 0.0124448 0.0124235 0.0124023 0.0123811 0.0123599 0.0123387 0.0123176 0.0122964 0.0122753 0.0122542 0.0122331 0.012212 0.012191 0.0121699 0.0121489 0.0121279 0.012107 0.012086 0.0120651 0.0120441 0.0120232 0.0120023 0.0119815 0.0119606 0.0119398 0.011919 0.0118982 0.0118774 0.0118566 0.0118359 0.0118151 0.0117944 0.0117737 0.0117531 0.0117324 0.0117118 0.0116911 0.0116705 0.01165 0.0116294 0.0116088 0.0115883 0.0115678 0.0115473 0.0115268 0.0115064 0.0114859 0.0114655 0.0114451 0.0114247 0.0114043 0.011384 0.0113637 0.0113433 0.011323 0.0113028 0.0112825 0.0112623 0.011242 0.0112218 0.0112016 0.0111815 0.0111613 0.0111412 0.0111211 0.011101 0.0110809 0.0110608 0.0110408 0.0110208 0.0110007 0.0109808 0.0109608 0.0109408 0.0109209 0.010901 0.0108811 0.0108612 0.0108413 0.0108215 0.0108016 0.0107818 0.010762 0.0107423 0.0107225 0.0107028 0.010683 0.0106633 0.0106436 0.010624 0.0106043 0.0105847 0.0105651 0.0105455 0.0105259 0.0105064 0.0104868 0.0104673 0.0104478 0.0104283 0.0104088 0.0103894 0.0103699 0.0103505 0.0103311 0.0103117 0.0102924 0.010273 0.0102537 0.0102344 0.0102151 0.0101958 0.0101766 0.0101574 0.0101381 0.0101189 0.0100998 0.0100806 0.0100614 0.0100423 0.0100232 0.0100041 0.00998505 0.00996599 0.00994695 0.00992793 0.00990893 0.00988995 0.00987098 0.00985204 0.00983311 0.0098142 0.0097953 0.00977643 0.00975757 0.00973873 0.00971991 0.00970111 0.00968232 0.00966355 0.0096448 0.00962607 0.00960736 0.00958866 0.00956999 0.00955133 0.00953269 0.00951406 0.00949546 0.00947687 0.0094583 0.00943975 0.00942122 0.00940271 0.00938421 0.00936573 0.00934727 0.00932883 0.0093104 0.009292 0.00927361 0.00925524 0.00923689 0.00921855 0.00920023 0.00918194 0.00916366 0.00914539 0.00912715 0.00910892 0.00909072 0.00907253 0.00905436 0.0090362 0.00901807 0.00899995 0.00898185 0.00896377 0.0089457 0.00892766 0.00890963 0.00889162 0.00887363 0.00885566 0.0088377 0.00881976 0.00880184 0.00878394 0.00876606 0.0087482 0.00873035 0.00871252 0.00869471 0.00867692 0.00865914 0.00864139 0.00862365 0.00860593 0.00858822 0.00857054 0.00855287 0.00853523 0.0085176 0.00849998 0.00848239 0.00846481 0.00844726 0.00842972 0.0084122 0.00839469 0.00837721 0.00835974 0.00834229 0.00832486 0.00830744 0.00829005 0.00827267 0.00825531 0.00823797 0.00822065 0.00820335 0.00818606 0.00816879 0.00815154 0.00813431 0.00811709 0.0080999 0.00808272 0.00806556 0.00804842 0.00803129 0.00801419 0.0079971 0.00798003 0.00796298 0.00794595 0.00792893 0.00791193 0.00789495 0.00787799 0.00786105 0.00784412 0.00782722 0.00781033 0.00779346 0.00777661 0.00775977 0.00774296 0.00772616 0.00770938 0.00769262 0.00767587 0.00765915 0.00764244 0.00762575 0.00760908 0.00759242 0.00757579 0.00755917 0.00754257 0.00752599 0.00750943 0.00749288 0.00747636 0.00745985 0.00744336 0.00742689 0.00741043 0.007394 0.00737758 0.00736118 0.0073448 0.00732843 0.00731209 0.00729576 0.00727945 0.00726316 0.00724689 0.00723063 0.0072144 0.00719818 0.00718198 0.00716579 0.00714963 0.00713348 0.00711736 0.00710125 0.00708515 0.00706908 0.00705302 0.00703699 0.00702097 0.00700497 0.00698898 0.00697302 0.00695707 0.00694114 0.00692523 0.00690934 0.00689347 0.00687761 0.00686177 0.00684595 0.00683015 0.00681437 0.0067986 0.00678285 0.00676712 0.00675141 0.00673572 0.00672004 0.00670439 0.00668875 0.00667313 0.00665753 0.00664194 0.00662638 0.00661083 0.0065953 0.00657979 0.00656429 0.00654882 0.00653336 0.00651792 0.0065025 0.0064871 0.00647171 0.00645635 0.006441 0.00642567 0.00641036 0.00639506 0.00637979 0.00636453 0.00634929 0.00633407 0.00631887 0.00630368 0.00628851 0.00627337 0.00625824 0.00624312 0.00622803 0.00621295 0.0061979 0.00618286 0.00616783 0.00615283 0.00613785 0.00612288 0.00610793 0.006093 0.00607809 0.00606319 0.00604832 0.00603346 0.00601862 0.0060038 0.00598899 0.00597421 0.00595944 0.00594469 0.00592996 0.00591525 0.00590055 0.00588587 0.00587122 0.00585658 0.00584195 0.00582735 0.00581276 0.0057982 0.00578365 0.00576912 0.0057546 0.00574011 0.00572563 0.00571117 0.00569673 0.00568231 0.00566791 0.00565352 0.00563915 0.0056248 0.00561047 0.00559616 0.00558187 0.00556759 0.00555333 0.00553909 0.00552487 0.00551066 0.00549648 0.00548231 0.00546816 0.00545403 0.00543992 0.00542582; #A 32000 0.00541175 0.00539769 0.00538365 0.00536962 0.00535562 0.00534163 0.00532767 0.00531372 0.00529979 0.00528587 0.00527198 0.0052581 0.00524424 0.0052304 0.00521658 0.00520278 0.00518899 0.00517522 0.00516147 0.00514774 0.00513403 0.00512034 0.00510666 0.005093 0.00507936 0.00506574 0.00505214 0.00503855 0.00502498 0.00501143 0.0049979 0.00498439 0.00497089 0.00495742 0.00494396 0.00493052 0.0049171 0.0049037 0.00489031 0.00487694 0.00486359 0.00485026 0.00483695 0.00482366 0.00481038 0.00479712 0.00478388 0.00477066 0.00475746 0.00474427 0.00473111 0.00471796 0.00470483 0.00469171 0.00467862 0.00466554 0.00465249 0.00463945 0.00462643 0.00461342 0.00460044 0.00458747 0.00457452 0.00456159 0.00454868 0.00453579 0.00452291 0.00451006 0.00449722 0.0044844 0.00447159 0.00445881 0.00444604 0.0044333 0.00442057 0.00440785 0.00439516 0.00438249 0.00436983 0.00435719 0.00434457 0.00433197 0.00431938 0.00430682 0.00429427 0.00428174 0.00426923 0.00425674 0.00424426 0.00423181 0.00421937 0.00420695 0.00419455 0.00418216 0.0041698 0.00415745 0.00414512 0.00413281 0.00412052 0.00410825 0.00409599 0.00408375 0.00407153 0.00405933 0.00404715 0.00403499 0.00402284 0.00401071 0.0039986 0.00398651 0.00397444 0.00396238 0.00395034 0.00393832 0.00392632 0.00391434 0.00390238 0.00389043 0.0038785 0.0038666 0.0038547 0.00384283 0.00383098 0.00381914 0.00380732 0.00379552 0.00378374 0.00377198 0.00376023 0.00374851 0.0037368 0.00372511 0.00371343 0.00370178 0.00369015 0.00367853 0.00366693 0.00365535 0.00364379 0.00363224 0.00362071 0.00360921 0.00359772 0.00358625 0.00357479 0.00356336 0.00355194 0.00354054 0.00352916 0.0035178 0.00350646 0.00349513 0.00348382 0.00347254 0.00346127 0.00345001 0.00343878 0.00342756 0.00341637 0.00340519 0.00339403 0.00338288 0.00337176 0.00336065 0.00334956 0.00333849 0.00332744 0.00331641 0.00330539 0.0032944 0.00328342 0.00327246 0.00326152 0.00325059 0.00323969 0.0032288 0.00321793 0.00320708 0.00319625 0.00318544 0.00317464 0.00316386 0.0031531 0.00314236 0.00313164 0.00312093 0.00311025 0.00309958 0.00308893 0.0030783 0.00306769 0.00305709 0.00304651 0.00303596 0.00302542 0.00301489 0.00300439 0.00299391 0.00298344 0.00297299 0.00296256 0.00295215 0.00294175 0.00293138 0.00292102 0.00291068 0.00290036 0.00289006 0.00287978 0.00286951 0.00285926 0.00284903 0.00283882 0.00282863 0.00281845 0.0028083 0.00279816 0.00278804 0.00277794 0.00276786 0.00275779 0.00274774 0.00273772 0.00272771 0.00271771 0.00270774 0.00269779 0.00268785 0.00267793 0.00266803 0.00265815 0.00264828 0.00263844 0.00262861 0.0026188 0.00260901 0.00259924 0.00258949 0.00257975 0.00257003 0.00256033 0.00255065 0.00254099 0.00253135 0.00252172 0.00251211 0.00250252 0.00249295 0.0024834 0.00247387 0.00246435 0.00245485 0.00244537 0.00243591 0.00242647 0.00241704 0.00240764 0.00239825 0.00238888 0.00237953 0.00237019 0.00236088 0.00235158 0.0023423 0.00233304 0.0023238 0.00231458 0.00230537 0.00229619 0.00228702 0.00227787 0.00226874 0.00225962 0.00225053 0.00224145 0.00223239 0.00222335 0.00221433 0.00220532 0.00219634 0.00218737 0.00217842 0.00216949 0.00216058 0.00215169 0.00214281 0.00213395 0.00212511 0.00211629 0.00210749 0.00209871 0.00208994 0.00208119 0.00207246 0.00206375 0.00205506 0.00204639 0.00203773 0.00202909 0.00202047 0.00201187 0.00200329 0.00199472 0.00198618 0.00197765 0.00196914 0.00196065 0.00195218 0.00194372 0.00193528 0.00192687 0.00191847 0.00191009 0.00190172 0.00189338 0.00188505 0.00187674 0.00186845 0.00186018 0.00185193 0.00184369 0.00183548 0.00182728 0.0018191 0.00181094 0.00180279 0.00179467 0.00178656 0.00177847 0.0017704 0.00176235 0.00175432 0.0017463 0.00173831 0.00173033 0.00172237 0.00171443 0.0017065 0.0016986 0.00169071 0.00168284 0.00167499 0.00166716 0.00165935 0.00165155 0.00164378 0.00163602 0.00162828 0.00162055 0.00161285 0.00160517 0.0015975 0.00158985 0.00158222 0.00157461 0.00156701 0.00155944 0.00155188 0.00154434 0.00153682 0.00152932 0.00152184 0.00151437 0.00150693 0.0014995 0.00149209 0.00148469 0.00147732 0.00146996 0.00146263 0.00145531 0.00144801 0.00144073 0.00143346 0.00142622 0.00141899 0.00141178 0.00140459 0.00139742 0.00139027 0.00138313 0.00137601 0.00136891 0.00136183 0.00135477 0.00134773 0.0013407 0.0013337 0.00132671 0.00131974 0.00131278 0.00130585 0.00129894 0.00129204 0.00128516 0.0012783 0.00127146 0.00126463 0.00125783 0.00125104 0.00124427 0.00123752 0.00123079 0.00122408 0.00121738 0.0012107 0.00120404 0.0011974 0.00119078 0.00118418 0.00117759 0.00117103 0.00116448 0.00115795 0.00115144 0.00114494 0.00113847 0.00113201 0.00112557 0.00111915 0.00111275 0.00110637 0.0011 0.00109365 0.00108732 0.00108101 0.00107472 0.00106845 0.00106219 0.00105596 0.00104974 0.00104354 0.00103736 0.00103119 0.00102505 0.00101892 0.00101281 0.00100672 0.00100065 0.000994598 0.000988563 0.000982546 0.000976548 0.000970568 0.000964607 0.000958663 0.000952738 0.000946832 0.000940944 0.000935074 0.000929222 0.000923389 0.000917574 0.000911778 0.000906 0.00090024 0.000894498 0.000888775 0.000883071 0.000877384 0.000871716 0.000866066 0.000860435 0.000854822 0.000849228 0.000843651 0.000838093 0.000832554 0.000827033 0.00082153 0.000816045 0.000810579 0.000805131 0.000799702 0.000794291 0.000788898 0.000783524 0.000778168 0.00077283 0.000767511 0.00076221 0.000756927 0.000751663 0.000746417 0.000741189 0.00073598 0.000730789 0.000725617 0.000720463 0.000715327 0.00071021 0.000705111 0.00070003 0.000694968 0.000689924 0.000684898 0.000679891 0.000674902 0.000669931 0.000664979 0.000660046 0.00065513 0.000650233 0.000645354 0.000640494 0.000635652 0.000630828 0.000626023 0.000621236 0.000616467 0.000611717 0.000606985 0.000602272 0.000597577 0.0005929 0.000588242 0.000583602 0.00057898 0.000574377 0.000569792 0.000565225 0.000560677 0.000556147 0.000551635 0.000547142 0.000542668 0.000538211 0.000533773 0.000529353 0.000524952 0.000520569 0.000516205 0.000511858 0.00050753 0.000503221 0.00049893 0.000494657 0.000490403 0.000486167 0.000481949 0.00047775 0.000473569 0.000469406 0.000465262 0.000461136 0.000457029 0.00045294 0.000448869 0.000444816 0.000440782 0.000436767 0.00043277 0.000428791 0.00042483 0.000420888 0.000416964 0.000413059 0.000409172 0.000405303 0.000401453 0.000397621 0.000393807 0.000390012 0.000386235 0.000382477 0.000378736 0.000375015 0.000371311 0.000367626 0.00036396 0.000360311 0.000356682 0.00035307 0.000349477 0.000345902 0.000342346 0.000338808 0.000335288 0.000331787 0.000328304 0.000324839 0.000321393 0.000317965 0.000314556 0.000311165 0.000307792 0.000304438 0.000301102 0.000297784 0.000294485 0.000291204 0.000287942 0.000284698 0.000281472 0.000278265 0.000275076 0.000271905 0.000268753 0.000265619 0.000262504 0.000259407 0.000256328 0.000253267 0.000250225 0.000247202 0.000244197 0.00024121 0.000238241 0.000235291 0.00023236 0.000229446 0.000226551 0.000223675 0.000220816 0.000217977 0.000215155 0.000212352 0.000209567 0.000206801 0.000204053 0.000201323 0.000198612 0.000195919 0.000193245 0.000190589 0.000187951 0.000185332 0.000182731 0.000180148 0.000177584 0.000175038 0.000172511 0.000170002 0.000167511 0.000165039 0.000162585 0.000160149 0.000157732 0.000155333 0.000152953 0.000150591 0.000148247 0.000145922 0.000143615 0.000141326 0.000139056 0.000136804 0.000134571 0.000132356 0.000130159 0.000127981 0.000125821 0.00012368 0.000121556 0.000119452 0.000117365 0.000115297 0.000113248 0.000111216 0.000109204 0.000107209 0.000105233 0.000103275 0.000101336 9.94151e-005 9.75125e-005 9.56283e-005 9.37625e-005 9.1915e-005 9.0086e-005 8.82753e-005 8.6483e-005 8.47091e-005 8.29536e-005 8.12164e-005 7.94976e-005 7.77973e-005 7.61152e-005 7.44516e-005 7.28064e-005 7.11795e-005 6.9571e-005 6.79809e-005 6.64092e-005 6.48558e-005 6.33209e-005 6.18043e-005 6.03061e-005 5.88263e-005 5.73648e-005 5.59218e-005 5.44971e-005 5.30908e-005 5.17029e-005 5.03334e-005 4.89822e-005 4.76495e-005 4.63351e-005 4.50391e-005 4.37615e-005 4.25022e-005 4.12614e-005 4.00389e-005 3.88348e-005 3.76491e-005 3.64818e-005 3.53328e-005 3.42022e-005 3.30901e-005 3.19963e-005 3.09208e-005 2.98638e-005 2.88252e-005 2.78049e-005 2.6803e-005 2.58195e-005 2.48544e-005 2.39076e-005 2.29793e-005 2.20693e-005 2.11777e-005 2.03045e-005 1.94497e-005 1.86132e-005 1.77952e-005 1.69955e-005 1.62142e-005 1.54513e-005 1.47068e-005 1.39806e-005 1.32729e-005 1.25835e-005 1.19125e-005 1.12599e-005 1.06257e-005 1.00098e-005 9.41236e-006 8.83328e-006 8.27258e-006 7.73027e-006 7.20634e-006 6.7008e-006 6.21363e-006 5.74485e-006 5.29446e-006 4.86245e-006 4.44882e-006 4.05357e-006 3.67671e-006 3.31823e-006 2.97814e-006 2.65642e-006 2.3531e-006 2.06815e-006 1.80159e-006 1.55341e-006 1.32362e-006 1.11221e-006 9.19178e-007 7.44534e-007 5.88274e-007 4.50397e-007 3.30904e-007 2.29795e-007 1.47069e-007 8.27261e-008 3.67671e-008 9.19178e-009; #X coords 0 1 32767 -1 200 140 1; #X restore 483 82 graph; #X msg 36 187 rcos; #N canvas 92 488 581 367 sprayclouds 0; #X obj 9 231 outlet; #X msg 9 153 spray; #X obj 118 108 metro 1000; #X obj 118 87 tgl 15 0 empty dac-toggle empty 0 -6 0 8 -262144 -1 -1 0 1; #X floatatom 9 65 5 0 0 0 - - -; #X msg 118 155 pitchspray; #X msg 9 32 1; #X obj 9 12 loadbang; #X msg 47 33 2; #X text 77 35 <- select cloud method (1=spray \, 2=pitchspray); #X text 199 108 <- time interval is the cloud horizon (also latency) ; #X text 198 158 <- either of these triggers a "cloud" of grains; #N canvas 600 60 458 308 select-method 0; #X obj 64 35 inlet; #X obj 138 25 inlet; #X obj 26 13 loadbang; #X obj 138 223 spigot; #X obj 193 224 spigot; #X obj 230 188 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X obj 175 185 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X obj 64 132 unpack f f; #X obj 64 65 sel 1 2; #X msg 64 102 1 0; #X msg 97 102 0 1; #X obj 138 255 outlet; #X obj 193 254 outlet; #X connect 0 0 8 0; #X connect 1 0 3 0; #X connect 1 0 4 0; #X connect 2 0 9 0; #X connect 3 0 11 0; #X connect 4 0 12 0; #X connect 5 0 4 1; #X connect 6 0 3 1; #X connect 7 0 6 0; #X connect 7 1 5 0; #X connect 8 0 9 0; #X connect 8 1 10 0; #X connect 9 0 7 0; #X connect 10 0 7 0; #X restore 9 131 pd select-method; #X obj 118 54 inlet; #X connect 1 0 0 0; #X connect 2 0 12 1; #X connect 3 0 2 0; #X connect 4 0 12 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 7 0 6 0; #X connect 8 0 4 0; #X connect 12 0 1 0; #X connect 12 1 5 0; #X connect 13 0 3 0; #X restore 36 266 pd sprayclouds; #N canvas 0 22 450 300 (subpatch) 0; #X array gsf_wavetable 6.43566e+006 float 2; #X coords 0 1 6.43566e+006 -1 200 140 1; #X restore 483 222 graph; #N canvas 181 44 551 550 grist 0; #X obj 87 481 outlet; #X msg 86 91 grist 25 1000 0.25 3 0.1 0.9 0.1 0.9 50 200; #X msg 98 124 grist 2 1000 0.25 2 0.1 0.9 0.1 0.9 4000 8000; #X text 15 41 args: events horizon min_incr max_incr minpan maxpan minamp maxamp mindur maxdur; #X msg 211 439 events \$1; #X floatatom 211 416 5 0 0 0 - - -; #X text 255 417 directly set events per "cloud"; #X msg 108 152 grist 5 1000 1 1 0.1 0.9 0.1 0.9 1000 2000; #X msg 120 193 grist 8 1000 0.25 3 0.1 0.9 1 1 200 200; #X msg 133 222 grist 1 1000 1 1 0.1 0.9 0.1 0.9 1000 1000; #X msg 148 250 grist 200 1000 0.2 4 0.1 0.9 0.1 0.9 50 80; #X obj 86 71 loadbang; #X msg 161 277 grist 150 1000 0.2 4 0.1 0.9 0.1 0.9 150 250; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 7 0 0 0; #X connect 8 0 0 0; #X connect 9 0 0 0; #X connect 10 0 0 0; #X connect 11 0 1 0; #X connect 12 0 0 0; #X restore 51 285 pd grist; #X obj 36 161 loadbang; #N canvas 0 23 498 348 scales 0; #X obj 110 246 outlet; #X text 66 43 these get used when you drive with "pitchspray"; #X msg 38 94 setscale 1 1.25 1.5 2; #X msg 157 156 setscale 0.5 1 2; #X obj 38 70 loadbang; #X msg 104 116 setscale 1 1.25 1.33333 1.5 1.875 2; #X msg 264 220 setscale 1 1.06 1.09; #X msg 257 185 setscale 1 1.5 2.25; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 2 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X restore 62 304 pd scales; #N canvas 287 23 749 761 more-messages 0; #X obj 40 615 outlet; #X msg 40 49 nopan \$1; #X obj 40 25 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X text 59 26 turn off panning effect; #X obj 70 79 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X msg 70 103 interpolate \$1; #X text 89 80 set interpolation (on by default); #X obj 139 223 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X msg 139 247 steady \$1; #X text 158 224 set steady rhythm; #X obj 102 144 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X msg 102 168 interpolate_envelope \$1; #X text 121 145 set envelope interpolation (off by default); #X floatatom 147 280 5 0 0 0 - - -; #X msg 147 302 retro_odds \$1; #X text 186 280 odds for backwards grain (0-1); #X floatatom 222 324 5 0 0 0 - - -; #X msg 222 346 transpose \$1; #X text 255 382 reseed random generator; #X msg 216 402 seed \$1; #X floatatom 216 384 5 0 0 0 - - -; #X floatatom 229 428 5 0 0 0 - - -; #X msg 229 446 pitchdev \$1; #X text 268 426 detune factor for "pitchspray"; #X msg 220 491 grain 3300 -1 1 0.2 15000; #X text 219 476 specify a single grain directly:; #X text 218 509 args: dur \, incr \, amp \, pan \, skip; #X msg 218 541 info; #X obj 345 309 hsl 128 15 0.1 2 0 0 empty empty transpose -2 -6 0 8 -81528 -1 -1 0 1; #X text 260 324 comment; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 4 0 5 0; #X connect 5 0 0 0; #X connect 7 0 8 0; #X connect 8 0 0 0; #X connect 10 0 11 0; #X connect 11 0 0 0; #X connect 13 0 14 0; #X connect 14 0 0 0; #X connect 16 0 17 0; #X connect 17 0 0 0; #X connect 19 0 0 0; #X connect 20 0 19 0; #X connect 21 0 22 0; #X connect 22 0 0 0; #X connect 24 0 0 0; #X connect 27 0 0 0; #X connect 28 0 16 0; #X restore 75 331 pd more-messages; #X text 36 106 granulesf~ creates granular textures by mixing together enveloped grains taken from a soundfile stored in an array.; #X msg 92 187 adrenv 0.05 0.1 0.3 1; #X obj 199 537 soundfiler; #X obj 199 486 openpanel; #X msg 199 462 bang; #X msg 199 509 read -resize \$1 gsf_wavetable; #X text 132 167 grain envelope; #X obj 36 387 lyonpotpourri/granulesf~ gsf_wavetable gsf_window; #X obj 36 210 lyonpotpourri/function~ gsf_window; #X obj 36 457 lpp-meters; #X text 239 461 <= load your sound here - it should be at least 20 seconds long, f 69; #X obj 33 16 lpp-icon granulesf~; #X obj 36 239 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 57 238 <= turn on grains; #X text 147 266 <= triggering; #X text 136 306 <= optional tunings; #X text 114 285 <= parameters; #X text 195 332 <= etc.; #X text 264 45 - sound file granulator; #X connect 1 0 16 0; #X connect 2 0 15 0; #X connect 4 0 15 0; #X connect 5 0 1 0; #X connect 6 0 15 0; #X connect 7 0 15 0; #X connect 9 0 16 0; #X connect 11 0 13 0; #X connect 12 0 11 0; #X connect 13 0 10 0; #X connect 15 0 17 0; #X connect 15 1 17 1; #X connect 20 0 2 0; pd-lyonpotpourri-3.0.1/granulesf~.c000066400000000000000000001027021430526361000174130ustar00rootroot00000000000000#include "MSPd.h" #define MAXGRAINS (512) // just for present to get lower overhead #define MAXSCALE (8192) #define OBJECT_NAME "granulesf~" static t_class *granulesf_class; typedef struct { float amplitude; float panL; float panR; long delay; // samples to wait until event starts long duration;// length in samples of event float phase; // phase for frequency oscillator float ephase; // phase for envelope float si; // sampling increment for frequency float esi; // sampling increment for envelope float endframe;//boundary frame (extremes are 0 or size-1); approach depends on sign of si short active;//status of this slot (inactives are available for new grains) } t_grain; typedef struct { t_word *b_samples; long b_frames; long b_nchans;//not needed here } t_pdbuffer; typedef struct _granulesf { t_object x_obj; float x_f; t_pdbuffer *wavebuf; // holds waveform samples t_pdbuffer *windowbuf; // holds window samples t_symbol *wavename; // name of waveform buffer t_symbol *windowname; // name of window buffer float sr; // sampling rate short mute; short hosed; // buffers are bad /* Global grain data*/ long events; // number of events in a block long horizon; // length of block for random events float min_incr; // minimum frequency for a grain float max_incr; // maximum frequency for a grain float minpan; // minimum pan for a grain float maxpan; // maximum pan for a grain float minamp; // minimum amplitude for a grain float maxamp; // maximum amplitude for a grain float mindur; // minimum duration for a grain float maxdur; // maximum duration for a grain t_grain *grains; // stores grain data float *pitchscale; // contains a frequency grid for pitch constraint int pitchsteps; // number of members in scale float transpose; // factor for scaling all pitches float pitch_deviation; // factor to adjust scaled pitches short steady; // toggles pulsed rhythmic activity float lowblock_increment; //lowest allowed frequency float highblock_increment;// highest allowed frequency float mindur_ms;//store duration in ms float maxdur_ms;//ditto float horizon_ms;//ditto short constrain_scale;//flag to only use bounded portion of scale rather than all of it short nopan;//stereo channels go straight out, mono goes to center long minskip;//minimum inskip in samples (default = zero) long maxskip;//maximum inskip in samples (default = maximum possible given dur/increment of note) long b_nchans;//channels in buffer (always 1 for Pd, at least today) long b_frames;//frames in waveform buffer float retro_odds;//odds to play sample backwards short interpolate;//flag to interpolate samples - on by default short interpolate_envelope;//flag to interpolate envelope } t_granulesf; static void granulesf_setbuf(t_granulesf *x, t_symbol *wavename, t_symbol *windowname); static void *granulesf_new(t_symbol *msg, int argc, t_atom *argv); static t_int *granulesf_perform(t_int *w); static t_int *granulesf_perform_no_interpolation(t_int *w); static t_int *granulesf_performhose(t_int *w); static void granulesf_dsp(t_granulesf *x, t_signal **sp); static void granulesf_reload(t_granulesf *x); static void granulesf_spray(t_granulesf *x); static void granulesf_pitchspray(t_granulesf *x); static void granulesf_transpose(t_granulesf *x, t_floatarg t); static void granulesf_pitchdev(t_granulesf *x, t_floatarg d); static void granulesf_lowblock(t_granulesf *x, t_floatarg f); static void granulesf_highblock(t_granulesf *x, t_floatarg f); static void granulesf_events(t_granulesf *x, t_floatarg e); static float granulesf_boundrand(float min, float max); static void *granulesf_grist(t_granulesf *x, t_symbol *msg, int argc, t_atom *argv); static void *granulesf_grain(t_granulesf *x, t_symbol *msg, int argc, t_atom *argv); static void *granulesf_setscale(t_granulesf *x, t_symbol *msg, int argc, t_atom *argv); static void granulesf_info(t_granulesf *x); static void granulesf_mute(t_granulesf *x, t_floatarg toggle); static void granulesf_steady(t_granulesf *x, t_floatarg toggle); static void granulesf_constrain_scale(t_granulesf *x, t_floatarg toggle); static void granulesf_dsp_free(t_granulesf *x); static void granulesf_init(t_granulesf *x,short initialized); static void granulesf_constrain(int *index_min, int *index_max, float min_incr, float max_incr, float *scale, int steps); static void granulesf_interpolate(t_granulesf *x, t_floatarg toggle); static void granulesf_nopan(t_granulesf *x, t_floatarg toggle); static void granulesf_retro_odds(t_granulesf *x, t_floatarg o); static void granulesf_seed(t_granulesf *x, t_floatarg seed); static void granulesf_interpolate_envelope(t_granulesf *x, t_floatarg toggle); void granulesf_tilde_setup(void) { granulesf_class = class_new(gensym("granulesf~"), (t_newmethod)granulesf_new, (t_method)granulesf_dsp_free,sizeof(t_granulesf), 0,A_GIMME,0); CLASS_MAINSIGNALIN(granulesf_class, t_granulesf, x_f); class_addmethod(granulesf_class,(t_method)granulesf_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(granulesf_class,(t_method)granulesf_mute,gensym("mute"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_setbuf,gensym("setbuf"),A_DEFSYM,A_DEFSYM,0); class_addmethod(granulesf_class,(t_method)granulesf_spray,gensym("spray"),0); class_addmethod(granulesf_class,(t_method)granulesf_info,gensym("info"),0); class_addmethod(granulesf_class,(t_method)granulesf_pitchspray,gensym("pitchspray"),0); class_addmethod(granulesf_class,(t_method)granulesf_transpose,gensym("transpose"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_events,gensym("events"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_pitchdev,gensym("pitchdev"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_lowblock,gensym("lowblock"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_highblock,gensym("highblock"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_steady,gensym("steady"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_constrain_scale,gensym("constrain_scale"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_grist,gensym("grist"),A_GIMME,0); class_addmethod(granulesf_class,(t_method)granulesf_grain,gensym("grain"),A_GIMME,0); class_addmethod(granulesf_class,(t_method)granulesf_setscale,gensym("setscale"),A_GIMME,0); class_addmethod(granulesf_class,(t_method)granulesf_interpolate,gensym("interpolate"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_nopan,gensym("nopan"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_retro_odds,gensym("retro_odds"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_seed,gensym("seed"),A_FLOAT,0); class_addmethod(granulesf_class,(t_method)granulesf_interpolate_envelope,gensym("interpolate_envelope"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void granulesf_interpolate_envelope(t_granulesf *x, t_floatarg toggle) { x->interpolate_envelope = toggle; } void granulesf_seed(t_granulesf *x, t_floatarg seed) { srand((long)seed); } void granulesf_retro_odds(t_granulesf *x, t_floatarg o) { if(o < 0 || o > 1) { pd_error(0, "retro odds must be within [0.0 - 1.0]"); return; } x->retro_odds = 0; } void granulesf_interpolate(t_granulesf *x, t_floatarg toggle) { x->interpolate = toggle; post("toggle DACs to change interpolation status"); } void granulesf_nopan(t_granulesf *x, t_floatarg toggle) { x->nopan = toggle; } void granulesf_constrain_scale(t_granulesf *x, t_floatarg toggle) { x->constrain_scale = toggle; } void granulesf_lowblock(t_granulesf *x, t_floatarg f) { if(f > 0) { x->lowblock_increment = f; } } void granulesf_highblock(t_granulesf *x, t_floatarg f) { if(f > 0) { x->highblock_increment = f; } } void granulesf_pitchdev(t_granulesf *x, t_floatarg d) { if(d < 0 ) { pd_error(0, "pitch deviation must be positive"); return; } x->pitch_deviation = d; } void granulesf_mute(t_granulesf *x, t_floatarg toggle) { x->mute = toggle; } void granulesf_steady(t_granulesf *x, t_floatarg toggle) { x->steady = toggle; } void granulesf_events(t_granulesf *x, t_floatarg e) { if( e <= 0 ) { post("events must be positive!"); return; } x->events = e; } void granulesf_transpose(t_granulesf *x, t_floatarg t) { if( t <= 0 ) { pd_error(0, "transpose factor must be greater than zero!"); return; } x->transpose = t; } void *granulesf_setscale(t_granulesf *x, t_symbol *msg, int argc, t_atom *argv) { int i; float *pitchscale = x->pitchscale; if( argc >= MAXSCALE ) { pd_error(0, "%d is the maximum size scale", MAXSCALE); return 0; } if( argc < 2 ) { pd_error(0, "there must be at least 2 members in scale"); return 0; } for(i=0; i < argc; i++) { pitchscale[i] = atom_getfloatarg(i,argc,argv); } x->pitchsteps = argc; return 0; } void granulesf_constrain(int *index_min, int *index_max, float min_incr, float max_incr, float *scale, int steps) { int imax = steps - 1; int imin = 0; while(scale[imin] < min_incr && imin < imax) { ++imin; } if(imin == imax) { post("could not constrain minimum index - your grist parameters are out of range for this scale"); *index_min = 0; *index_max = steps - 1; return; } while(scale[imax] > max_incr && imax > 0) { --imax; } if(imax < 1 || imax <= imin) { post("could not constrain maximum index - your grist parameters are out of range for this scale"); *index_min = 0; *index_max = steps - 1; return; } *index_min = imin; *index_max = imax; } void granulesf_pitchspray(t_granulesf *x) { int i,j; long grainframes; long b_frames = x->wavebuf->b_frames; long eframes = x->windowbuf->b_frames; long minskip = x->minskip; long maxskip = x->maxskip; float retro_odds = x->retro_odds; long horizon = x->horizon; // length of block for random events float mindur = x->mindur; float maxdur = x->maxdur; float min_incr = x->min_incr; // minimum frequency for a grain float max_incr = x->max_incr; // maximum frequency for a grain float minpan = x->minpan; // minimum pan for a grain float maxpan = x->maxpan; // maximum pan for a grain float minamp = x->minamp; // minimum amplitude for a grain float maxamp = x->maxamp; // maximum amplitude for a grain float transpose = x->transpose; // pitch scalar float lowblock_increment = x->lowblock_increment; float highblock_increment = x->highblock_increment; short steady = x->steady; float pitch_deviation = x->pitch_deviation; float pdev = 0; float pdev_invert = 0; // float pscale; float pan; int index_min, index_max; int steps = x->pitchsteps; float *scale = x->pitchscale; int windex; short inserted = 0; short constrain_scale = x->constrain_scale; t_grain *grains = x->grains; float tmp; if( steps < 2 ) { pd_error(0, "scale is undefined"); return; } if( pitch_deviation ) { pdev = 1.0 + pitch_deviation; pdev_invert = 1.0 / pdev; } for( i = 0; i < x->events; i++ ) { inserted = 0; for(j = 0; j < MAXGRAINS; j++ ) { if(!grains[j].active) { if(steady) { grains[j].delay = (float)(i * horizon) / (float) x->events ; } else { grains[j].delay = granulesf_boundrand(0.0,(float) horizon); } grains[j].duration = (long) granulesf_boundrand(mindur, maxdur); grains[j].phase = 0.0; grains[j].ephase = 0.0; pan = granulesf_boundrand(minpan, maxpan); grains[j].amplitude = granulesf_boundrand(minamp, maxamp); grains[j].panL = grains[j].amplitude * cos(pan * PIOVERTWO); grains[j].panR = grains[j].amplitude * sin(pan * PIOVERTWO); grains[j].amplitude *= .707;//used directly only for "nopan" if(constrain_scale) { granulesf_constrain(&index_min,&index_max,min_incr, max_incr, scale, steps); windex = (int) granulesf_boundrand((float)index_min, (float)index_max); } else { windex = (int) granulesf_boundrand(0.0, (float)(steps)); } grains[j].si = transpose * scale[windex]; // post("windex %d scale[w] %f transpose %f si %f",windex, scale[windex], transpose, grains[j].si ); grainframes = grains[j].duration * grains[j].si; grains[j].esi = (float) eframes / (float) grains[j].duration; if( pitch_deviation ) { grains[j].si *= granulesf_boundrand(pdev_invert,pdev); } // post("new si: %f", grains[j].si); /* must add this code to spray, and also do for high frequencies */ if(lowblock_increment > 0.0) { if(grains[j].si < lowblock_increment) { post("lowblock: aborted grain with %f frequency",grains[j].si); grains[j].active = 0; // abort grain goto nextgrain; } } if(highblock_increment > 0.0) { if(grains[j].si > highblock_increment) { post("highblock: aborted grain with %f frequency, greater than %f", grains[j].si, highblock_increment); grains[j].active = 0; // abort grain goto nextgrain; } } /* set skip time into sample */ if(grainframes >= b_frames ) { pd_error(0, "grain size %.0ld is too long for buffer which is %ld",grainframes, b_frames); grains[j].active = 0; goto nextgrain; } if(minskip > b_frames - grainframes){//bad minskip pd_error(0, "minskip time is illegal"); grains[j].phase = 0.0; grains[j].endframe = grainframes - 1; } else { if(maxskip > b_frames - grainframes) { grains[j].phase = granulesf_boundrand((float)minskip, (float) (b_frames - grainframes)); //post("1. minskip %d maxskip %d",minskip,b_frames - grainframes); } else { grains[j].phase = granulesf_boundrand((float)minskip, (float)maxskip); //post("2. minskip %d maxskip %d",minskip,maxskip); } grains[j].endframe = grains[j].phase + grainframes - 1; } if( granulesf_boundrand(0.0,1.0) < retro_odds){//go backwards - make sure to test both boundaries grains[j].si *= -1.0; tmp = grains[j].phase; grains[j].phase = grains[j].endframe; grains[j].endframe = tmp; } /*post("grain: grainframes %d phase %f endframe %f amp %f", grainframes, grains[j].phase, grains[j].endframe, grains[j].amplitude);*/ grains[j].active = 1; inserted = 1; goto nextgrain; } } if(!inserted) { pd_error(0, "could not insert grain with increment %f",grains[j].si); return; } nextgrain: ; } } void granulesf_spray(t_granulesf *x) { int i,j; long grainframes; long eframes = x->windowbuf->b_frames; long b_frames = x->wavebuf->b_frames; // long b_nchans = x->wavebuf->b_nchans; // float sr = x->sr; long horizon = x->horizon; // length of block for random events float mindur = x->mindur; float maxdur = x->maxdur; float min_incr = x->min_incr; // minimum incr for a grain (must be positive!) float max_incr = x->max_incr; // maximum incr for a grain (must be positive!) float minpan = x->minpan; // minimum pan for a grain float maxpan = x->maxpan; // maximum pan for a grain float minamp = x->minamp; // minimum amplitude for a grain float maxamp = x->maxamp; // maximum amplitude for a grain float transpose = x->transpose; // pitch scalar long minskip = x->minskip; long maxskip = x->maxskip; short steady = x->steady; float retro_odds = x->retro_odds; float pan; t_grain *grains = x->grains; short inserted; float tmp; for( i = 0; i < x->events; i++ ) { inserted = 0; for(j = 0; j < MAXGRAINS; j++ ) { if(!grains[j].active) { grains[j].active = 1; if(steady) { grains[j].delay = (float)(i * horizon) / (float) x->events ; } else { grains[j].delay = granulesf_boundrand(0.0,(float) horizon); } grains[j].duration = (long) granulesf_boundrand(mindur, maxdur);//frames for this grain grains[j].ephase = 0.0; pan = granulesf_boundrand(minpan, maxpan); grains[j].amplitude = granulesf_boundrand(minamp, maxamp); grains[j].panL = grains[j].amplitude * cos(pan * PIOVERTWO); grains[j].panR = grains[j].amplitude * sin(pan * PIOVERTWO); grains[j].amplitude *= .707;//used directly only for "nopan" grains[j].si = transpose * granulesf_boundrand(min_incr, max_incr); grainframes = grains[j].duration * grains[j].si;//frames to be read from buffer // grains[j].esi = (float) eframes / (float) grainframes; grains[j].esi = (float) eframes / (float) grains[j].duration; if(grainframes >= b_frames ) { pd_error(0, "grain size %.0ld is too long for buffer which is %ld",grainframes, b_frames); grains[j].active = 0; goto nextgrain; } if(minskip > b_frames - grainframes){//bad minskip pd_error(0, "minskip time is illegal"); grains[j].phase = 0.0; grains[j].endframe = grainframes - 1; } else { if(maxskip > b_frames - grainframes) { grains[j].phase = granulesf_boundrand((float)minskip, (float) (b_frames - grainframes)); //post("1. minskip %d maxskip %d",minskip,b_frames - grainframes); } else { grains[j].phase = granulesf_boundrand((float)minskip, (float)maxskip); //post("2. minskip %d maxskip %d",minskip,maxskip); } grains[j].endframe = grains[j].phase + grainframes - 1; } if( granulesf_boundrand(0.0,1.0) < retro_odds){//go backwards - make sure to test both boundaries grains[j].si *= -1.0; tmp = grains[j].phase; grains[j].phase = grains[j].endframe; grains[j].endframe = tmp; } inserted = 1; /* post("startframe %f endframe %f increment %f e-incr %f grainframes %d bframes %d", grains[j].phase,grains[j].endframe,grains[j].si,grains[j].esi,grainframes, b_frames);*/ goto nextgrain; } } if(! inserted) { pd_error(0, "granulesf~: could not insert grain"); return; } nextgrain: ; } } void *granulesf_grain(t_granulesf *x, t_symbol *msg, int argc, t_atom *argv) { short inserted; int j; float duration, incr, amplitude, pan; t_grain *grains; long eframes; long frames; float sr; float skip; grains = x->grains; eframes = x->windowbuf->b_frames; frames = x->wavebuf->b_frames; sr = x->sr; if(argc < 5) { pd_error(0, "grain takes 5 arguments, not %d",argc); post("duration increment amplitude pan skip(in ms)"); return 0; } duration = atom_getintarg(0,argc,argv); incr = atom_getfloatarg(1,argc,argv); // in ms amplitude = atom_getfloatarg(2,argc,argv); pan = atom_getfloatarg(3,argc,argv); skip = atom_getfloatarg(4,argc,argv) * .001 * sr; if(skip < 0) { pd_error(0, "negative skip is illegal"); return 0; } if(skip >= frames) { pd_error(0, "skip exceeds length of buffer"); return 0; } if(incr == 0.0) { pd_error(0, "zero increment prohibited"); return 0; } if(duration <= 0.0) { pd_error(0, "illegal duration:%f",duration); return 0; } if(pan < 0.0 || pan > 1.0) { pd_error(0, "illegal pan:%f",pan); return 0; } inserted = 0; for(j = 0; j < MAXGRAINS; j++ ) { if(!grains[j].active) { grains[j].delay = 0.0;// immediate deployment grains[j].duration = (long) (.001 * x->sr * duration); grains[j].phase = skip; grains[j].ephase = 0.0; grains[j].amplitude = amplitude * .707; grains[j].panL = amplitude * cos(pan * PIOVERTWO); grains[j].panR = amplitude * sin(pan * PIOVERTWO); grains[j].esi = (float)eframes / (float)grains[j].duration; grains[j].si = incr; grains[j].active = 1; return 0; } } pd_error(0, "could not insert grain"); return 0; } float granulesf_boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); } void *granulesf_new(t_symbol *msg, int argc, t_atom *argv) { t_granulesf *x = (t_granulesf *)pd_new(granulesf_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->wavebuf = (t_pdbuffer*)getbytes(sizeof(t_pdbuffer)); x->windowbuf = (t_pdbuffer*)getbytes(sizeof(t_pdbuffer)); srand(time(0)); //need "seed" message x->pitchscale = (float *) getbytes(MAXSCALE * sizeof(float)); x->grains = (t_grain *) getbytes(MAXGRAINS * sizeof(t_grain)); // default names x->wavename = gensym("waveform"); x->windowname = gensym("window"); // apparently Pd lacks this Max/MSP bug x->wavename = atom_getsymbolarg(0,argc,argv); x->windowname = atom_getsymbolarg(1,argc,argv); x->sr = sys_getsr(); if(! x->sr ) x->sr = 44100; granulesf_init(x,0); return (x); } void granulesf_init(t_granulesf *x,short initialized) { int i; if(!initialized) { x->pitchsteps = 0; // we could predefine a 12t scale x->mute = 0; x->steady = 0; x->events = 1; // set to 10 LATER x->horizon_ms = 1000; x->min_incr = 0.5; x->max_incr = 2.0; x->minpan = .1; x->maxpan = .9; x->minamp = .1; x->maxamp = 1.0; x->mindur_ms = 150; x->maxdur_ms = 750; x->transpose = 1.0; x->pitch_deviation = 0.0; x->lowblock_increment = 0.0; // by default we do not block any increments x->highblock_increment = 0.0; // ditto x->constrain_scale = 0; x->retro_odds = 0.5;// after testing, set this to zero x->maxskip = -1;//flag to reset in setbuf SHOULD BE -1 x->nopan = 0;//panning is on by default x->interpolate = 1; x->interpolate_envelope = 0; } x->horizon = x->horizon_ms * .001 * x->sr; x->mindur = x->mindur_ms * .001 * x->sr; x->maxdur = x->maxdur_ms * .001 * x->sr; for( i = 0; i < MAXGRAINS; i++ ){ // this is what we test for a legal place to insert grain x->grains[i].active = 0; } } void granulesf_info(t_granulesf *x) { int tcount = 0; t_grain *grains = x->grains; // long eframes = x->windowbuf->b_frames; int i; for(i = 0; i < MAXGRAINS; i++ ) { if(grains[i].active) ++tcount; } post("%d active grains", tcount); post("wavename %s", x->wavename->s_name); post("windowname %s", x->windowname->s_name); post("sample size: %d",x->wavebuf->b_frames); } void *granulesf_grist(t_granulesf *x, t_symbol *msg, int argc, t_atom *argv) { if(argc < 10 ) { pd_error(0, "grist takes 10 arguments:"); post("events horizon min_incr max_incr minpan maxpan minamp maxamp mindur maxdur"); return 0; } x->events = atom_getintarg(0,argc,argv); x->horizon_ms = atom_getfloatarg(1,argc,argv); x->min_incr = atom_getfloatarg(2,argc,argv); x->max_incr = atom_getfloatarg(3,argc,argv); x->minpan = atom_getfloatarg(4,argc,argv); x->maxpan = atom_getfloatarg(5,argc,argv); x->minamp = atom_getfloatarg(6,argc,argv); x->maxamp = atom_getfloatarg(7,argc,argv); x->mindur_ms = atom_getfloatarg(8,argc,argv); x->maxdur_ms = atom_getfloatarg(9,argc,argv); x->mindur = .001 * x->sr * x->mindur_ms ; x->maxdur = .001 * x->sr * x->maxdur_ms; x->horizon = .001 * x->sr * x->horizon_ms; if(x->min_incr < 0) { x->min_incr *= -1.0; } if(x->max_incr < 0) { x->max_incr *= -1.0; } if(x->minpan < 0.0) { x->minpan = 0.0; } if(x->maxpan > 1.0) { x->maxpan = 1.0; } if(x->events < 0) { x->events = 0; } return 0; } void granulesf_reload(t_granulesf *x) { granulesf_setbuf(x, x->wavename, x->windowname); } void granulesf_setbuf(t_granulesf *x, t_symbol *wavename, t_symbol *windowname) { t_garray *a; int frames; x->hosed = 0; x->wavebuf->b_frames = 0; x->windowbuf->b_frames = 0; x->wavebuf->b_nchans = 1;//unused, should kill x->windowbuf->b_nchans = 1; //unused, should kill x->b_nchans = 1; /* load up sample array */ if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "granulesf~: %s: no such array", wavename->s_name); x->hosed = 1; } else if (!garray_getfloatwords(a, &frames, &x->wavebuf->b_samples)) { pd_error(x, "%s: bad template for granulesf~", wavename->s_name); x->hosed = 1; } else { x->wavebuf->b_frames = frames; x->b_nchans = 1; // Pd buffers are always mono (so far) garray_usedindsp(a); } /* load up envelope array*/ if (!(a = (t_garray *)pd_findbyclass(windowname, garray_class))) { if (*wavename->s_name) pd_error(x, "granulesf~: %s: no such array", windowname->s_name); x->hosed = 1; } else if (!garray_getfloatwords(a, &frames, &x->windowbuf->b_samples)) { pd_error(x, "%s: bad template for granulesf~", windowname->s_name); x->hosed = 1; } else { x->windowbuf->b_frames = frames; garray_usedindsp(a); } x->maxskip = x->wavebuf->b_frames - 1; } t_int *granulesf_performhose(t_int *w) { // t_granulesf *x = (t_granulesf *) (w[1]); float *outputL = (t_float *)(w[3]); float *outputR = (t_float *)(w[4]); int n = (int) w[5]; while(n--) *outputL++ = *outputR++ = 0; return (w+6); } t_int *granulesf_perform_no_interpolation(t_int *w) { t_granulesf *x = (t_granulesf *) (w[1]); // float *in = (t_float *)(w[2]); // ignoring input float *outputL = (t_float *)(w[3]); float *outputR = (t_float *)(w[4]); int n = (int) w[5]; t_pdbuffer *wavebuf = x->wavebuf; t_pdbuffer *windowbuf = x->windowbuf; t_word *wavetable = wavebuf->b_samples; t_word *window = windowbuf->b_samples; t_grain *grains = x->grains; long b_nchans = x->b_nchans; long b_frames = wavebuf->b_frames; short nopan = x->nopan; float sample1, sample2; float envelope; float amplitude; float panL, panR; float si; float esi; float phase; float ephase; long delay; long eframes = windowbuf->b_frames; long current_index; int i,j; /* grain parameters */ if( x->mute ) { while(n--) *outputL++ = *outputR++ = 0; return (w+6); } // pre-clean buffer for( i = 0; i < n; i++ ) { outputL[i] = outputR[i] = 0; } for (j=0; j 0 ) { --delay; } if( delay <= 0 && ephase < eframes) { envelope = amplitude * window[(int)ephase].w_float;// interpolate please! if(b_nchans == 1) { sample1 = wavetable[(int)phase].w_float; sample1 *= envelope; if(nopan) { sample1 *= amplitude; // center it outputL[i] += sample1; outputR[i] += sample1; } else { outputL[i] += panL * sample1; outputR[i] += panR * sample1; } } else if(b_nchans == 2) { if(phase < 0 || phase >= b_frames) { pd_error(0, "phase %f is out of bounds",phase); goto nextgrain; } current_index = (long)(phase * 2.0); sample1 = wavetable[current_index].w_float; sample2 = wavetable[current_index+1].w_float; sample1 *= envelope; sample2 *= envelope; if(nopan) { outputL[i] += sample1 * amplitude; outputR[i] += sample2 * amplitude; } else { outputL[i] += panL * sample1; outputR[i] += panR * sample2; } } /*this will be gritty so be sure to interpolate both envelope and sample-lookup */ phase += si; if(phase < 0 || phase >= b_frames) { pd_error(0, "phase %f out of bounds",phase); grains[j].active = 0; goto nextgrain; } ephase += esi; if( ephase >= eframes ) { grains[j].active = 0; goto nextgrain; // must escape loop now } } } grains[j].phase = phase; grains[j].ephase = ephase; grains[j].delay = delay; nextgrain: ; } return (w+6); } t_int *granulesf_perform(t_int *w) { t_granulesf *x = (t_granulesf *) (w[1]); // float *in = (t_float *)(w[2]); // ignoring input float *outputL = (t_float *)(w[3]); float *outputR = (t_float *)(w[4]); int n = (int) w[5]; t_pdbuffer *wavebuf = x->wavebuf; t_pdbuffer *windowbuf = x->windowbuf; t_word *wavetable = wavebuf->b_samples; t_word *window = windowbuf->b_samples; t_grain *grains = x->grains; long b_nchans = x->b_nchans; long b_frames = wavebuf->b_frames; short nopan = x->nopan; short interpolate_envelope = x->interpolate_envelope; float sample1, sample2; float envelope; float amplitude; float panL, panR; float si; float esi; float phase; float ephase; long delay; long eframes = windowbuf->b_frames; long current_index; float tsmp1, tsmp2; float frac; int i,j; if( x->mute ) { while(n--) *outputL++ = *outputR++ = 0; return (w+6); } // pre-clean buffer for( i = 0; i < n; i++ ) { outputL[i] = outputR[i] = 0; } for (j=0; j 0 ) { --delay; } if( delay <= 0 && ephase < eframes) { if(interpolate_envelope) { current_index = floor((double)ephase); frac = ephase - current_index; if(current_index == 0 || current_index == eframes - 1 || frac == 0.0){// boundary conditions envelope = window[current_index].w_float; } else { tsmp1 = window[current_index].w_float; tsmp2 = window[current_index + 1].w_float; envelope = tsmp1 + frac * (tsmp2 - tsmp1); } } else { // envelope = amplitude * window[(int)ephase]; envelope = window[(int)ephase].w_float;// amplitude built into panL and panR } if(b_nchans == 1) { if(phase < 0 || phase >= b_frames) { pd_error(0, "phase %f is out of bounds",phase); goto nextgrain; } current_index = floor((double)phase); frac = phase - current_index; if(current_index == 0 || current_index == b_frames - 1 || frac == 0.0){// boundary conditions sample1 = wavetable[current_index].w_float; } else { tsmp1 = wavetable[current_index].w_float; tsmp2 = wavetable[current_index + 1].w_float; sample1 = tsmp1 + frac * (tsmp2 - tsmp1); } sample1 *= envelope; if(nopan) { sample1 *= amplitude; // center it /* accumulate grain samples into output buffer */ outputL[i] += sample1; outputR[i] += sample1; } else { outputL[i] += panL * sample1; outputR[i] += panR * sample1; } } else if(b_nchans == 2) { if(phase < 0 || phase >= b_frames) { pd_error(0, "phase %f is out of bounds",phase); goto nextgrain; } current_index = floor((double)phase); frac = phase - current_index; current_index <<= 1;// double it if(current_index == 0 || current_index == b_frames - 1 || frac == 0.0) { sample1 = wavetable[current_index].w_float; sample2 = wavetable[current_index+1].w_float; } else { tsmp1 = wavetable[current_index].w_float; tsmp2 = wavetable[current_index + 2].w_float; sample1 = tsmp1 + frac * (tsmp2 - tsmp1); tsmp1 = wavetable[current_index + 1].w_float; tsmp2 = wavetable[current_index + 3].w_float; sample2 = tsmp1 + frac * (tsmp2 - tsmp1); } sample1 *= envelope; sample2 *= envelope; if(nopan) { outputL[i] += sample1 * amplitude; outputR[i] += sample2 * amplitude; } else { outputL[i] += panL * sample1; outputR[i] += panR * sample2; } } phase += si; if(phase < 0 || phase >= b_frames) { pd_error(0, "phase %f out of bounds",phase); grains[j].active = 0; goto nextgrain; } ephase += esi; if( ephase >= eframes ) { grains[j].active = 0; goto nextgrain; // must escape loop now } } } grains[j].phase = phase; grains[j].ephase = ephase; grains[j].delay = delay; nextgrain: ; } return (w+6); } void granulesf_dsp_free(t_granulesf *x) { freebytes(x->grains, MAXGRAINS * sizeof(t_grain)); freebytes(x->pitchscale, MAXSCALE * sizeof(float)); } void granulesf_dsp(t_granulesf *x, t_signal **sp) { granulesf_reload(x); if( x->hosed ) { post("You need some valid buffers"); dsp_add(granulesf_performhose, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); return; } if( x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; if( !x->sr ) { post("warning: zero sampling rate!"); x->sr = 44100; } granulesf_init(x,1); } if(x->interpolate) { dsp_add(granulesf_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } else { dsp_add(granulesf_perform_no_interpolation, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } } pd-lyonpotpourri-3.0.1/granule~-help.pd000066400000000000000000004755241430526361000202100ustar00rootroot00000000000000#N canvas 600 60 547 734 12; #N canvas 0 22 450 300 (subpatch) 0; #X array waveform 8192 float 3; #A 0 0 0.00262835 0.00525669 0.00788498 0.0105132 0.0131414 0.0157695 0.0183974 0.0210252 0.0236529 0.0262804 0.0289077 0.0315348 0.0341617 0.0367883 0.0394147 0.0420408 0.0446666 0.047292 0.0499172 0.0525419 0.0551663 0.0577903 0.0604139 0.063037 0.0656597 0.0682819 0.0709036 0.0735248 0.0761455 0.0787656 0.0813852 0.0840042 0.0866226 0.0892403 0.0918574 0.0944739 0.0970896 0.0997047 0.102319 0.104933 0.107546 0.110158 0.112769 0.115379 0.117989 0.120598 0.123206 0.125813 0.128419 0.131024 0.133629 0.136232 0.138834 0.141436 0.144036 0.146635 0.149234 0.151831 0.154427 0.157022 0.159616 0.162208 0.1648 0.16739 0.169979 0.172567 0.175154 0.177739 0.180323 0.182906 0.185488 0.188068 0.190647 0.193224 0.195801 0.198375 0.200948 0.20352 0.206091 0.20866 0.211227 0.213793 0.216357 0.21892 0.221481 0.224041 0.226599 0.229155 0.23171 0.234263 0.236814 0.239364 0.241912 0.244458 0.247003 0.249546 0.252086 0.254626 0.257163 0.259698 0.262232 0.264764 0.267293 0.269821 0.272347 0.274871 0.277393 0.279913 0.282432 0.284948 0.287462 0.289973 0.292483 0.294991 0.297497 0.3 0.302502 0.305001 0.307498 0.309993 0.312485 0.314976 0.317464 0.319949 0.322433 0.324914 0.327393 0.32987 0.332344 0.334816 0.337285 0.339752 0.342217 0.344679 0.347139 0.349596 0.35205 0.354503 0.356952 0.359399 0.361844 0.364286 0.366725 0.369162 0.371596 0.374027 0.376456 0.378882 0.381306 0.383726 0.386144 0.388559 0.390972 0.393381 0.395788 0.398192 0.400593 0.402991 0.405387 0.407779 0.410169 0.412555 0.414939 0.41732 0.419698 0.422072 0.424444 0.426813 0.429179 0.431541 0.433901 0.436257 0.438611 0.440961 0.443308 0.445652 0.447993 0.45033 0.452665 0.454996 0.457324 0.459649 0.46197 0.464288 0.466603 0.468915 0.471223 0.473528 0.475829 0.478127 0.480422 0.482713 0.485001 0.487285 0.489566 0.491844 0.494118 0.496388 0.498655 0.500919 0.503179 0.505435 0.507688 0.509937 0.512182 0.514424 0.516662 0.518897 0.521128 0.523355 0.525578 0.527798 0.530014 0.532226 0.534435 0.53664 0.53884 0.541038 0.543231 0.54542 0.547606 0.549788 0.551965 0.554139 0.556309 0.558475 0.560637 0.562796 0.56495 0.5671 0.569246 0.571388 0.573526 0.575661 0.577791 0.579917 0.582038 0.584156 0.58627 0.588379 0.590485 0.592586 0.594683 0.596776 0.598864 0.600949 0.603029 0.605105 0.607176 0.609244 0.611307 0.613366 0.61542 0.61747 0.619516 0.621558 0.623595 0.625627 0.627656 0.62968 0.631699 0.633714 0.635725 0.637731 0.639733 0.64173 0.643723 0.645711 0.647694 0.649673 0.651648 0.653618 0.655583 0.657544 0.6595 0.661452 0.663399 0.665341 0.667279 0.669212 0.67114 0.673064 0.674983 0.676897 0.678806 0.680711 0.682611 0.684506 0.686396 0.688282 0.690163 0.692039 0.69391 0.695776 0.697638 0.699494 0.701346 0.703193 0.705035 0.706872 0.708704 0.710531 0.712353 0.714171 0.715983 0.71779 0.719593 0.72139 0.723182 0.72497 0.726752 0.728529 0.730301 0.732068 0.73383 0.735587 0.737339 0.739086 0.740827 0.742564 0.744295 0.746021 0.747742 0.749458 0.751168 0.752874 0.754574 0.756269 0.757959 0.759643 0.761322 0.762996 0.764665 0.766328 0.767986 0.769639 0.771287 0.772929 0.774566 0.776197 0.777823 0.779444 0.78106 0.78267 0.784274 0.785873 0.787467 0.789056 0.790639 0.792216 0.793788 0.795355 0.796916 0.798472 0.800022 0.801567 0.803106 0.80464 0.806168 0.807691 0.809208 0.810719 0.812225 0.813726 0.81522 0.81671 0.818194 0.819672 0.821144 0.822611 0.824072 0.825528 0.826978 0.828422 0.829861 0.831294 0.832721 0.834143 0.835559 0.836969 0.838374 0.839773 0.841166 0.842553 0.843935 0.845311 0.846681 0.848045 0.849404 0.850757 0.852104 0.853445 0.854781 0.85611 0.857434 0.858752 0.860065 0.861371 0.862672 0.863966 0.865255 0.866538 0.867815 0.869087 0.870352 0.871612 0.872865 0.874113 0.875355 0.876591 0.877821 0.879045 0.880263 0.881475 0.882682 0.883882 0.885076 0.886265 0.887447 0.888624 0.889794 0.890959 0.892117 0.89327 0.894416 0.895557 0.896691 0.89782 0.898942 0.900059 0.901169 0.902274 0.903372 0.904464 0.90555 0.906631 0.907705 0.908773 0.909835 0.910891 0.911941 0.912984 0.914022 0.915054 0.916079 0.917098 0.918112 0.919119 0.92012 0.921115 0.922103 0.923086 0.924063 0.925033 0.925997 0.926955 0.927907 0.928853 0.929792 0.930726 0.931653 0.932574 0.933489 0.934398 0.935301 0.936197 0.937087 0.937971 0.938849 0.939721 0.940586 0.941446 0.942298 0.943145 0.943986 0.94482 0.945648 0.94647 0.947286 0.948096 0.948899 0.949696 0.950487 0.951271 0.95205 0.952822 0.953588 0.954347 0.955101 0.955848 0.956589 0.957323 0.958052 0.958774 0.95949 0.960199 0.960903 0.9616 0.962291 0.962975 0.963653 0.964325 0.964991 0.965651 0.966304 0.966951 0.967591 0.968226 0.968854 0.969476 0.970091 0.9707 0.971303 0.9719 0.97249 0.973074 0.973652 0.974224 0.974789 0.975348 0.975901 0.976447 0.976987 0.977521 0.978049 0.97857 0.979085 0.979593 0.980096 0.980592 0.981081 0.981565 0.982042 0.982513 0.982978 0.983436 0.983888 0.984334 0.984773 0.985206 0.985633 0.986054 0.986468 0.986876 0.987278 0.987674 0.988063 0.988446 0.988822 0.989193 0.989557 0.989915 0.990266 0.990612 0.990951 0.991283 0.99161 0.99193 0.992244 0.992552 0.992853 0.993148 0.993437 0.99372 0.993996 0.994266 0.99453 0.994787 0.995039 0.995284 0.995523 0.995755 0.995982 0.996202 0.996416 0.996624 0.996825 0.99702 0.997209 0.997392 0.997569 0.997739 0.997903 0.998061 0.998213 0.998358 0.998497 0.998631 0.998758 0.998878 0.998993 0.999101 0.999203 0.999299 0.999389 0.999473 0.99955 0.999622 0.999687 0.999746 0.999798 0.999845 0.999886 0.99992 0.999948 0.99997 0.999986 0.999996 1 0.999998 0.999989 0.999974 0.999954 0.999927 0.999894 0.999855 0.99981 0.999759 0.999701 0.999638 0.999569 0.999493 0.999412 0.999324 0.99923 0.999131 0.999025 0.998913 0.998795 0.998672 0.998542 0.998406 0.998264 0.998116 0.997962 0.997802 0.997636 0.997465 0.997287 0.997103 0.996913 0.996717 0.996516 0.996308 0.996094 0.995875 0.995649 0.995418 0.995181 0.994938 0.994688 0.994433 0.994172 0.993906 0.993633 0.993354 0.99307 0.99278 0.992483 0.992182 0.991874 0.99156 0.99124 0.990915 0.990584 0.990247 0.989904 0.989555 0.989201 0.988841 0.988475 0.988103 0.987726 0.987343 0.986954 0.986559 0.986158 0.985752 0.98534 0.984923 0.9845 0.98407 0.983636 0.983195 0.982749 0.982298 0.98184 0.981377 0.980909 0.980434 0.979954 0.979469 0.978978 0.978481 0.977979 0.977471 0.976957 0.976438 0.975913 0.975383 0.974847 0.974306 0.973759 0.973207 0.972649 0.972086 0.971517 0.970942 0.970363 0.969777 0.969187 0.96859 0.967989 0.967382 0.966769 0.966151 0.965528 0.964899 0.964265 0.963625 0.962981 0.962331 0.961675 0.961014 0.960348 0.959676 0.958999 0.958317 0.957629 0.956937 0.956239 0.955535 0.954827 0.954113 0.953394 0.952669 0.95194 0.951205 0.950465 0.94972 0.94897 0.948214 0.947454 0.946688 0.945917 0.945141 0.944359 0.943573 0.942782 0.941985 0.941184 0.940377 0.939565 0.938749 0.937927 0.9371 0.936268 0.935431 0.934589 0.933743 0.932891 0.932034 0.931172 0.930306 0.929434 0.928558 0.927676 0.92679 0.925898 0.925002 0.924101 0.923196 0.922285 0.921369 0.920449 0.919524 0.918594 0.917659 0.91672 0.915775 0.914826 0.913873 0.912914 0.911951 0.910983 0.91001 0.909033 0.908051 0.907064 0.906073 0.905077 0.904076 0.903071 0.902061 0.901047 0.900028 0.899004 0.897976 0.896943 0.895906 0.894864 0.893818 0.892767 0.891712 0.890652 0.889588 0.888519 0.887446 0.886369 0.885287 0.8842 0.883109 0.882014 0.880915 0.879811 0.878703 0.87759 0.876473 0.875352 0.874227 0.873097 0.871963 0.870825 0.869682 0.868536 0.867385 0.86623 0.86507 0.863907 0.862739 0.861567 0.860391 0.859211 0.858027 0.856839 0.855646 0.85445 0.853249 0.852045 0.850836 0.849623 0.848406 0.847186 0.845961 0.844732 0.8435 0.842263 0.841023 0.839778 0.83853 0.837278 0.836022 0.834762 0.833498 0.83223 0.830959 0.829683 0.828404 0.827121 0.825835 0.824544 0.82325 0.821952 0.82065 0.819345 0.818036 0.816723 0.815407 0.814087 0.812763 0.811436 0.810105 0.80877 0.807432 0.80609 0.804745 0.803396 0.802044 0.800688 0.799329 0.797966 0.796599 0.79523 0.793856 0.79248 0.7911 0.789716 0.788329 0.786939 0.785545 0.784148 0.782748 0.781344 0.779937 0.778527 0.777114 0.775697 0.774277 0.772853 0.771427 0.769997 0.768564 0.767128 0.765689 0.764246 0.762801 0.761352 0.7599 0.758445 0.756987 0.755526 0.754062 0.752595 0.751125 0.749652 0.748175 0.746696 0.745214 0.743729 0.742241 0.74075 0.739256 0.737759 0.73626 0.734757 0.733252 0.731744 0.730233 0.728719 0.727202 0.725683 0.724161 0.722636 0.721108 0.719578 0.718045 0.716509 0.71497 0.713429 0.711885 0.710339 0.70879 0.707238 0.705684 0.704127 0.702568 0.701006 0.699442 0.697875 0.696305 0.694733 0.693159 0.691582 0.690003 0.688421 0.686837 0.68525 0.683661 0.68207 0.680476 0.67888 0.677282 0.675681 0.674078 0.672473 0.670866 0.669256 0.667644 0.66603 0.664413 0.662795 0.661174 0.659551 0.657926 0.656299 0.65467 0.653038 0.651405 0.649769 0.648131 0.646492 0.64485 0.643206 0.64156 0.639913 0.638263 0.636611 0.634958 0.633302 0.631645 0.629985 0.628324 0.626661 0.624996 0.62333 0.621661 0.619991 0.618318 0.616645; #A 1000 0.614969 0.613291 0.611612 0.609931 0.608249 0.606565 0.604879 0.603191 0.601502 0.599811 0.598118 0.596424 0.594729 0.593032 0.591333 0.589632 0.587931 0.586227 0.584522 0.582816 0.581108 0.579399 0.577689 0.575977 0.574263 0.572548 0.570832 0.569114 0.567395 0.565675 0.563954 0.562231 0.560507 0.558781 0.557055 0.555327 0.553597 0.551867 0.550136 0.548403 0.546669 0.544934 0.543198 0.54146 0.539722 0.537983 0.536242 0.5345 0.532758 0.531014 0.529269 0.527523 0.525777 0.524029 0.52228 0.520531 0.51878 0.517029 0.515276 0.513523 0.511769 0.510014 0.508258 0.506502 0.504744 0.502986 0.501227 0.499467 0.497707 0.495946 0.494184 0.492421 0.490658 0.488893 0.487129 0.485363 0.483597 0.481831 0.480063 0.478296 0.476527 0.474758 0.472989 0.471218 0.469448 0.467677 0.465905 0.464133 0.462361 0.460588 0.458814 0.45704 0.455266 0.453491 0.451716 0.449941 0.448165 0.446389 0.444613 0.442836 0.441059 0.439282 0.437504 0.435727 0.433949 0.43217 0.430392 0.428613 0.426835 0.425056 0.423276 0.421497 0.419718 0.417938 0.416159 0.414379 0.4126 0.41082 0.40904 0.40726 0.40548 0.4037 0.401921 0.400141 0.398361 0.396581 0.394802 0.393022 0.391243 0.389464 0.387684 0.385905 0.384127 0.382348 0.380569 0.378791 0.377013 0.375235 0.373457 0.37168 0.369903 0.368126 0.36635 0.364573 0.362797 0.361022 0.359247 0.357472 0.355697 0.353923 0.352149 0.350376 0.348603 0.346831 0.345059 0.343287 0.341516 0.339746 0.337976 0.336206 0.334437 0.332669 0.330901 0.329134 0.327367 0.325601 0.323835 0.32207 0.320306 0.318543 0.31678 0.315018 0.313256 0.311495 0.309735 0.307976 0.306217 0.304459 0.302702 0.300946 0.29919 0.297435 0.295682 0.293928 0.292176 0.290425 0.288674 0.286925 0.285176 0.283428 0.281681 0.279935 0.27819 0.276446 0.274703 0.272961 0.27122 0.26948 0.267741 0.266003 0.264266 0.26253 0.260795 0.259061 0.257328 0.255597 0.253866 0.252137 0.250409 0.248682 0.246956 0.245231 0.243507 0.241785 0.240064 0.238344 0.236625 0.234908 0.233192 0.231477 0.229764 0.228051 0.22634 0.224631 0.222922 0.221215 0.21951 0.217806 0.216103 0.214401 0.212701 0.211003 0.209305 0.20761 0.205915 0.204222 0.202531 0.200841 0.199153 0.197466 0.19578 0.194096 0.192414 0.190733 0.189054 0.187376 0.1857 0.184026 0.182353 0.180682 0.179012 0.177344 0.175678 0.174013 0.17235 0.170689 0.169029 0.167371 0.165715 0.16406 0.162408 0.160757 0.159107 0.15746 0.155814 0.15417 0.152528 0.150888 0.149249 0.147613 0.145978 0.144345 0.142714 0.141084 0.139457 0.137831 0.136208 0.134586 0.132966 0.131349 0.129733 0.128119 0.126507 0.124897 0.123289 0.121683 0.120079 0.118477 0.116877 0.115279 0.113683 0.112089 0.110497 0.108908 0.10732 0.105734 0.104151 0.10257 0.10099 0.0994133 0.0978384 0.0962655 0.0946948 0.0931263 0.09156 0.0899959 0.0884339 0.0868741 0.0853167 0.0837613 0.0822082 0.0806573 0.0791087 0.0775624 0.0760183 0.0744765 0.0729369 0.0713997 0.0698647 0.0683321 0.0668018 0.0652738 0.0637482 0.0622248 0.0607039 0.0591853 0.0576691 0.0561552 0.0546438 0.0531347 0.051628 0.0501238 0.048622 0.0471225 0.0456256 0.0441311 0.042639 0.0411494 0.0396622 0.0381776 0.0366955 0.0352158 0.0337386 0.0322639 0.0307917 0.0293221 0.0278551 0.0263905 0.0249285 0.023469 0.0220122 0.0205579 0.0191061 0.017657 0.0162105 0.0147665 0.0133252 0.0118865 0.0104504 0.00901694 0.00758613 0.00615794 0.0047324 0.00330959 0.00188943 0.000471896 -0.000942935 -0.00235506 -0.00376449 -0.00517121 -0.0065752 -0.00797649 -0.00937508 -0.0107709 -0.012164 -0.0135544 -0.014942 -0.0163268 -0.0177089 -0.0190882 -0.0204647 -0.0218384 -0.0232094 -0.0245775 -0.0259429 -0.0273054 -0.0286651 -0.0300219 -0.031376 -0.0327272 -0.0340756 -0.0354211 -0.0367637 -0.0381035 -0.0394404 -0.0407745 -0.0421056 -0.0434339 -0.0447593 -0.0460818 -0.0474013 -0.048718 -0.0500317 -0.0513425 -0.0526504 -0.0539554 -0.0552574 -0.0565565 -0.0578526 -0.0591457 -0.0604359 -0.0617231 -0.0630074 -0.0642887 -0.0655669 -0.0668423 -0.0681145 -0.0693838 -0.0706501 -0.0719134 -0.0731737 -0.0744309 -0.0756851 -0.0769363 -0.0781844 -0.0794295 -0.0806716 -0.0819105 -0.0831465 -0.0843793 -0.0856091 -0.0868359 -0.0880596 -0.0892801 -0.0904976 -0.091712 -0.0929233 -0.0941315 -0.0953366 -0.0965386 -0.0977375 -0.0989332 -0.100126 -0.101315 -0.102502 -0.103685 -0.104865 -0.106042 -0.107216 -0.108386 -0.109554 -0.110718 -0.111879 -0.113037 -0.114192 -0.115344 -0.116492 -0.117638 -0.11878 -0.119919 -0.121054 -0.122187 -0.123316 -0.124442 -0.125565 -0.126685 -0.127801 -0.128914 -0.130024 -0.131131 -0.132235 -0.133335 -0.134432 -0.135526 -0.136616 -0.137704 -0.138788 -0.139869 -0.140946 -0.142021 -0.143092 -0.144159 -0.145224 -0.146285 -0.147343 -0.148398 -0.149449 -0.150497 -0.151542 -0.152583 -0.153622 -0.154657 -0.155688 -0.156717 -0.157742 -0.158763 -0.159782 -0.160797 -0.161809 -0.162817 -0.163822 -0.164824 -0.165823 -0.166818 -0.16781 -0.168798 -0.169783 -0.170765 -0.171744 -0.172719 -0.173691 -0.17466 -0.175625 -0.176586 -0.177545 -0.1785 -0.179452 -0.1804 -0.181345 -0.182287 -0.183226 -0.184161 -0.185092 -0.18602 -0.186945 -0.187867 -0.188785 -0.1897 -0.190611 -0.19152 -0.192424 -0.193326 -0.194224 -0.195118 -0.196009 -0.196897 -0.197782 -0.198663 -0.199541 -0.200415 -0.201286 -0.202153 -0.203018 -0.203878 -0.204736 -0.20559 -0.20644 -0.207288 -0.208131 -0.208972 -0.209809 -0.210643 -0.211473 -0.2123 -0.213123 -0.213943 -0.21476 -0.215573 -0.216383 -0.21719 -0.217993 -0.218793 -0.219589 -0.220382 -0.221172 -0.221958 -0.222741 -0.22352 -0.224296 -0.225069 -0.225838 -0.226604 -0.227366 -0.228125 -0.228881 -0.229633 -0.230382 -0.231127 -0.231869 -0.232608 -0.233343 -0.234075 -0.234804 -0.235529 -0.23625 -0.236969 -0.237684 -0.238395 -0.239103 -0.239808 -0.240509 -0.241207 -0.241902 -0.242593 -0.243281 -0.243965 -0.244647 -0.245324 -0.245998 -0.246669 -0.247337 -0.248001 -0.248662 -0.249319 -0.249973 -0.250624 -0.251271 -0.251915 -0.252556 -0.253193 -0.253827 -0.254457 -0.255085 -0.255708 -0.256329 -0.256946 -0.257559 -0.25817 -0.258777 -0.25938 -0.25998 -0.260577 -0.261171 -0.261761 -0.262348 -0.262932 -0.263512 -0.264089 -0.264662 -0.265232 -0.265799 -0.266363 -0.266923 -0.26748 -0.268033 -0.268583 -0.26913 -0.269674 -0.270214 -0.270751 -0.271285 -0.271815 -0.272342 -0.272866 -0.273386 -0.273903 -0.274417 -0.274928 -0.275435 -0.275939 -0.276439 -0.276937 -0.277431 -0.277922 -0.278409 -0.278893 -0.279374 -0.279852 -0.280326 -0.280798 -0.281265 -0.28173 -0.282191 -0.28265 -0.283105 -0.283556 -0.284005 -0.28445 -0.284892 -0.28533 -0.285766 -0.286198 -0.286627 -0.287053 -0.287475 -0.287895 -0.288311 -0.288724 -0.289133 -0.28954 -0.289943 -0.290343 -0.29074 -0.291134 -0.291524 -0.291912 -0.292296 -0.292677 -0.293055 -0.293429 -0.293801 -0.294169 -0.294534 -0.294896 -0.295255 -0.295611 -0.295963 -0.296313 -0.296659 -0.297002 -0.297342 -0.297679 -0.298013 -0.298344 -0.298671 -0.298996 -0.299317 -0.299635 -0.29995 -0.300262 -0.300571 -0.300877 -0.30118 -0.30148 -0.301776 -0.30207 -0.30236 -0.302648 -0.302932 -0.303214 -0.303492 -0.303767 -0.304039 -0.304308 -0.304575 -0.304838 -0.305098 -0.305355 -0.305609 -0.30586 -0.306108 -0.306353 -0.306595 -0.306834 -0.30707 -0.307303 -0.307533 -0.307761 -0.307985 -0.308206 -0.308424 -0.308639 -0.308852 -0.309061 -0.309268 -0.309471 -0.309672 -0.309869 -0.310064 -0.310256 -0.310445 -0.310631 -0.310814 -0.310994 -0.311172 -0.311346 -0.311518 -0.311686 -0.311852 -0.312015 -0.312175 -0.312333 -0.312487 -0.312639 -0.312787 -0.312933 -0.313076 -0.313216 -0.313354 -0.313488 -0.31362 -0.313749 -0.313875 -0.313999 -0.314119 -0.314237 -0.314352 -0.314465 -0.314574 -0.314681 -0.314785 -0.314886 -0.314985 -0.31508 -0.315173 -0.315264 -0.315351 -0.315436 -0.315518 -0.315598 -0.315675 -0.315749 -0.31582 -0.315889 -0.315955 -0.316018 -0.316079 -0.316137 -0.316192 -0.316245 -0.316295 -0.316342 -0.316387 -0.316429 -0.316469 -0.316506 -0.31654 -0.316572 -0.316601 -0.316628 -0.316651 -0.316673 -0.316692 -0.316708 -0.316722 -0.316733 -0.316741 -0.316747 -0.316751 -0.316752 -0.31675 -0.316746 -0.31674 -0.316731 -0.316719 -0.316705 -0.316688 -0.316669 -0.316648 -0.316624 -0.316597 -0.316568 -0.316537 -0.316503 -0.316467 -0.316428 -0.316387 -0.316344 -0.316298 -0.316249 -0.316199 -0.316146 -0.31609 -0.316032 -0.315972 -0.315909 -0.315844 -0.315777 -0.315707 -0.315635 -0.315561 -0.315484 -0.315405 -0.315323 -0.31524 -0.315154 -0.315065 -0.314975 -0.314882 -0.314787 -0.314689 -0.31459 -0.314488 -0.314384 -0.314277 -0.314168 -0.314057 -0.313944 -0.313829 -0.313711 -0.313592 -0.313469 -0.313345 -0.313219 -0.31309 -0.31296 -0.312827 -0.312692 -0.312554 -0.312415 -0.312274 -0.31213 -0.311984 -0.311836 -0.311686 -0.311534 -0.31138 -0.311224 -0.311065 -0.310905 -0.310742 -0.310577 -0.310411 -0.310242 -0.310071 -0.309898 -0.309724 -0.309547 -0.309368 -0.309187 -0.309004 -0.308819 -0.308632 -0.308443 -0.308252 -0.308059 -0.307865 -0.307668 -0.307469 -0.307268 -0.307066 -0.306861 -0.306655 -0.306446 -0.306236 -0.306024 -0.30581 -0.305593 -0.305376 -0.305156 -0.304934 -0.304711 -0.304485 -0.304258 -0.304029 -0.303798 -0.303565 -0.303331 -0.303095 -0.302856 -0.302617 -0.302375 -0.302131 -0.301886 -0.301639 -0.30139 -0.301139 -0.300887 -0.300633 -0.300377 -0.300119 -0.29986 -0.299599 -0.299336 -0.299072 -0.298806 -0.298538 -0.298268 -0.297997 -0.297724 -0.29745 -0.297174 -0.296896 -0.296616 -0.296335 -0.296052 -0.295768 -0.295482 -0.295194 -0.294905 -0.294614 -0.294322 -0.294028 -0.293733 -0.293436 -0.293137 -0.292837 -0.292535 -0.292232 -0.291927 -0.291621 -0.291313 -0.291003 -0.290693 -0.29038 -0.290066 -0.289751 -0.289434 -0.289116 -0.288796 -0.288475 -0.288153 -0.287829 -0.287503 -0.287176 -0.286848 -0.286518 -0.286187 -0.285854 -0.28552 -0.285185 -0.284848 -0.28451 -0.284171 -0.28383 -0.283488 -0.283145 -0.2828 -0.282454 -0.282106; #A 2000 -0.281757 -0.281407 -0.281056 -0.280703 -0.280349 -0.279994 -0.279637 -0.27928 -0.278921 -0.27856 -0.278199 -0.277836 -0.277472 -0.277107 -0.27674 -0.276372 -0.276004 -0.275633 -0.275262 -0.27489 -0.274516 -0.274141 -0.273765 -0.273388 -0.27301 -0.27263 -0.27225 -0.271868 -0.271485 -0.271101 -0.270716 -0.27033 -0.269943 -0.269555 -0.269165 -0.268775 -0.268383 -0.26799 -0.267597 -0.267202 -0.266806 -0.266409 -0.266012 -0.265613 -0.265213 -0.264812 -0.26441 -0.264007 -0.263603 -0.263199 -0.262793 -0.262386 -0.261978 -0.261569 -0.26116 -0.260749 -0.260338 -0.259925 -0.259512 -0.259097 -0.258682 -0.258266 -0.257849 -0.257431 -0.257012 -0.256593 -0.256172 -0.255751 -0.255329 -0.254905 -0.254481 -0.254057 -0.253631 -0.253205 -0.252777 -0.252349 -0.25192 -0.251491 -0.25106 -0.250629 -0.250197 -0.249764 -0.249331 -0.248896 -0.248461 -0.248025 -0.247589 -0.247151 -0.246714 -0.246275 -0.245835 -0.245395 -0.244954 -0.244513 -0.24407 -0.243627 -0.243184 -0.242739 -0.242294 -0.241849 -0.241403 -0.240956 -0.240508 -0.24006 -0.239611 -0.239162 -0.238712 -0.238261 -0.23781 -0.237358 -0.236905 -0.236452 -0.235999 -0.235544 -0.23509 -0.234634 -0.234178 -0.233722 -0.233265 -0.232807 -0.232349 -0.231891 -0.231432 -0.230972 -0.230512 -0.230051 -0.22959 -0.229129 -0.228667 -0.228204 -0.227741 -0.227278 -0.226814 -0.226349 -0.225884 -0.225419 -0.224954 -0.224487 -0.224021 -0.223554 -0.223086 -0.222619 -0.22215 -0.221682 -0.221213 -0.220744 -0.220274 -0.219804 -0.219333 -0.218862 -0.218391 -0.21792 -0.217448 -0.216975 -0.216503 -0.21603 -0.215557 -0.215083 -0.214609 -0.214135 -0.213661 -0.213186 -0.212711 -0.212236 -0.21176 -0.211284 -0.210808 -0.210332 -0.209855 -0.209378 -0.208901 -0.208424 -0.207946 -0.207469 -0.206991 -0.206512 -0.206034 -0.205555 -0.205076 -0.204597 -0.204118 -0.203639 -0.203159 -0.202679 -0.202199 -0.201719 -0.201239 -0.200758 -0.200278 -0.199797 -0.199316 -0.198835 -0.198354 -0.197873 -0.197391 -0.19691 -0.196428 -0.195946 -0.195465 -0.194983 -0.194501 -0.194019 -0.193537 -0.193054 -0.192572 -0.19209 -0.191607 -0.191125 -0.190642 -0.19016 -0.189677 -0.189195 -0.188712 -0.188229 -0.187747 -0.187264 -0.186781 -0.186298 -0.185816 -0.185333 -0.18485 -0.184368 -0.183885 -0.183402 -0.18292 -0.182437 -0.181954 -0.181472 -0.180989 -0.180507 -0.180025 -0.179542 -0.17906 -0.178578 -0.178096 -0.177614 -0.177132 -0.17665 -0.176168 -0.175687 -0.175205 -0.174724 -0.174242 -0.173761 -0.17328 -0.172799 -0.172318 -0.171837 -0.171357 -0.170876 -0.170396 -0.169916 -0.169436 -0.168956 -0.168476 -0.167997 -0.167517 -0.167038 -0.166559 -0.16608 -0.165601 -0.165123 -0.164645 -0.164167 -0.163689 -0.163211 -0.162733 -0.162256 -0.161779 -0.161302 -0.160826 -0.160349 -0.159873 -0.159397 -0.158922 -0.158446 -0.157971 -0.157496 -0.157021 -0.156547 -0.156073 -0.155599 -0.155125 -0.154652 -0.154179 -0.153706 -0.153234 -0.152762 -0.15229 -0.151818 -0.151347 -0.150876 -0.150405 -0.149935 -0.149465 -0.148995 -0.148525 -0.148056 -0.147587 -0.147119 -0.146651 -0.146183 -0.145716 -0.145249 -0.144782 -0.144315 -0.143849 -0.143384 -0.142918 -0.142453 -0.141989 -0.141525 -0.141061 -0.140597 -0.140134 -0.139671 -0.139209 -0.138747 -0.138286 -0.137825 -0.137364 -0.136903 -0.136444 -0.135984 -0.135525 -0.135066 -0.134608 -0.13415 -0.133693 -0.133236 -0.132779 -0.132323 -0.131867 -0.131412 -0.130957 -0.130503 -0.130049 -0.129595 -0.129142 -0.12869 -0.128238 -0.127786 -0.127335 -0.126884 -0.126434 -0.125984 -0.125535 -0.125086 -0.124638 -0.12419 -0.123743 -0.123296 -0.122849 -0.122403 -0.121958 -0.121513 -0.121069 -0.120625 -0.120181 -0.119739 -0.119296 -0.118854 -0.118413 -0.117972 -0.117532 -0.117092 -0.116653 -0.116214 -0.115776 -0.115338 -0.114901 -0.114465 -0.114029 -0.113593 -0.113158 -0.112724 -0.11229 -0.111857 -0.111424 -0.110992 -0.11056 -0.110129 -0.109698 -0.109268 -0.108839 -0.10841 -0.107982 -0.107554 -0.107127 -0.1067 -0.106274 -0.105849 -0.105424 -0.105 -0.104576 -0.104153 -0.103731 -0.103309 -0.102888 -0.102467 -0.102047 -0.101628 -0.101209 -0.10079 -0.100373 -0.0999556 -0.0995391 -0.0991232 -0.098708 -0.0982934 -0.0978793 -0.0974659 -0.0970532 -0.096641 -0.0962294 -0.0958185 -0.0954082 -0.0949985 -0.0945894 -0.094181 -0.0937732 -0.0933661 -0.0929595 -0.0925536 -0.0921484 -0.0917437 -0.0913398 -0.0909364 -0.0905337 -0.0901317 -0.0897302 -0.0893294 -0.0889293 -0.0885299 -0.088131 -0.0877329 -0.0873353 -0.0869384 -0.0865422 -0.0861466 -0.0857518 -0.0853575 -0.0849639 -0.084571 -0.0841787 -0.0837871 -0.0833962 -0.0830059 -0.0826163 -0.0822274 -0.0818391 -0.0814515 -0.0810646 -0.0806783 -0.0802928 -0.0799078 -0.0795236 -0.07914 -0.0787571 -0.0783749 -0.0779934 -0.0776125 -0.0772324 -0.0768529 -0.0764741 -0.0760959 -0.0757185 -0.0753417 -0.0749656 -0.0745903 -0.0742156 -0.0738416 -0.0734682 -0.0730956 -0.0727236 -0.0723524 -0.0719819 -0.071612 -0.0712428 -0.0708743 -0.0705065 -0.0701394 -0.069773 -0.0694073 -0.0690423 -0.068678 -0.0683144 -0.0679515 -0.0675893 -0.0672278 -0.0668669 -0.0665068 -0.0661474 -0.0657887 -0.0654307 -0.0650734 -0.0647168 -0.0643608 -0.0640057 -0.0636512 -0.0632974 -0.0629443 -0.0625919 -0.0622402 -0.0618892 -0.061539 -0.0611894 -0.0608406 -0.0604924 -0.060145 -0.0597983 -0.0594522 -0.0591069 -0.0587623 -0.0584184 -0.0580752 -0.0577328 -0.057391 -0.0570499 -0.0567096 -0.0563699 -0.056031 -0.0556928 -0.0553553 -0.0550185 -0.0546824 -0.054347 -0.0540123 -0.0536784 -0.0533451 -0.0530126 -0.0526807 -0.0523496 -0.0520192 -0.0516895 -0.0513605 -0.0510323 -0.0507047 -0.0503778 -0.0500517 -0.0497263 -0.0494015 -0.0490775 -0.0487542 -0.0484316 -0.0481097 -0.0477885 -0.0474681 -0.0471483 -0.0468293 -0.0465109 -0.0461933 -0.0458764 -0.0455601 -0.0452446 -0.0449298 -0.0446157 -0.0443023 -0.0439896 -0.0436777 -0.0433664 -0.0430558 -0.0427459 -0.0424368 -0.0421284 -0.0418206 -0.0415136 -0.0412072 -0.0409016 -0.0405966 -0.0402924 -0.0399889 -0.0396861 -0.0393839 -0.0390825 -0.0387818 -0.0384818 -0.0381824 -0.0378838 -0.0375859 -0.0372886 -0.0369921 -0.0366963 -0.0364011 -0.0361067 -0.0358129 -0.0355198 -0.0352275 -0.0349358 -0.0346448 -0.0343546 -0.034065 -0.0337761 -0.0334878 -0.0332003 -0.0329135 -0.0326273 -0.0323419 -0.0320571 -0.031773 -0.0314896 -0.0312069 -0.0309249 -0.0306435 -0.0303629 -0.0300829 -0.0298036 -0.029525 -0.029247 -0.0289697 -0.0286931 -0.0284173 -0.028142 -0.0278675 -0.0275936 -0.0273204 -0.0270478 -0.026776 -0.0265048 -0.0262343 -0.0259645 -0.0256953 -0.0254268 -0.0251589 -0.0248918 -0.0246252 -0.0243594 -0.0240942 -0.0238297 -0.0235658 -0.0233026 -0.0230401 -0.0227782 -0.022517 -0.0222565 -0.0219966 -0.0217373 -0.0214787 -0.0212208 -0.0209635 -0.0207069 -0.0204509 -0.0201956 -0.0199409 -0.0196868 -0.0194334 -0.0191807 -0.0189286 -0.0186771 -0.0184263 -0.0181761 -0.0179266 -0.0176777 -0.0174294 -0.0171818 -0.0169348 -0.0166885 -0.0164428 -0.0161977 -0.0159532 -0.0157094 -0.0154662 -0.0152236 -0.0149817 -0.0147404 -0.0144997 -0.0142596 -0.0140202 -0.0137814 -0.0135432 -0.0133056 -0.0130686 -0.0128322 -0.0125965 -0.0123614 -0.0121269 -0.011893 -0.0116597 -0.011427 -0.0111949 -0.0109635 -0.0107326 -0.0105024 -0.0102727 -0.0100436 -0.0098152 -0.00958735 -0.0093601 -0.00913345 -0.00890737 -0.00868191 -0.00845703 -0.00823273 -0.00800904 -0.00778593 -0.0075634 -0.00734149 -0.00712011 -0.00689934 -0.00667919 -0.00645957 -0.00624055 -0.00602208 -0.00580425 -0.00558695 -0.00537022 -0.00515408 -0.00493851 -0.00472349 -0.00450908 -0.0042952 -0.0040819 -0.00386915 -0.003657 -0.00344538 -0.00323434 -0.00302386 -0.00281393 -0.00260454 -0.00239572 -0.00218746 -0.00197973 -0.00177258 -0.00156596 -0.00135987 -0.00115436 -0.000949384 -0.000744938 -0.000541062 -0.000337716 -0.000134907 6.73651e-05 0.000269101 0.000470293 0.000670974 0.000871118 0.00107068 0.00126976 0.00146833 0.00166634 0.00186383 0.0020608 0.00225722 0.00245316 0.00264856 0.00284344 0.00303784 0.00323169 0.00342504 0.00361784 0.00381015 0.00400199 0.00419331 0.0043841 0.00457437 0.00476416 0.00495345 0.00514225 0.00533055 0.00551834 0.00570562 0.00589242 0.00607873 0.00626455 0.00644986 0.00663472 0.00681905 0.00700292 0.00718628 0.00736919 0.0075516 0.00773355 0.00791501 0.008096 0.00827651 0.00845653 0.00863611 0.00881518 0.0089938 0.00917197 0.00934964 0.00952687 0.00970362 0.00987993 0.0100558 0.0102312 0.0104061 0.0105806 0.0107546 0.0109281 0.0111013 0.0112739 0.0114461 0.0116179 0.0117892 0.0119601 0.0121305 0.0123005 0.0124701 0.0126392 0.0128079 0.0129761 0.0131439 0.0133113 0.0134783 0.0136448 0.0138109 0.0139766 0.0141418 0.0143066 0.0144711 0.014635 0.0147986 0.0149618 0.0151245 0.0152868 0.0154487 0.0156102 0.0157713 0.015932 0.0160923 0.0162521 0.0164116 0.0165706 0.0167293 0.0168876 0.0170455 0.0172029 0.01736 0.0175167 0.017673 0.0178289 0.0179844 0.0181395 0.0182943 0.0184486 0.0186026 0.0187562 0.0189094 0.0190622 0.0192147 0.0193668 0.0195185 0.0196698 0.0198208 0.0199714 0.0201216 0.0202715 0.020421 0.0205701 0.0207189 0.0208673 0.0210154 0.021163 0.0213104 0.0214573 0.021604 0.0217502 0.0218962 0.0220417 0.022187 0.0223318 0.0224764 0.0226206 0.0227644 0.0229079 0.0230511 0.0231939 0.0233364 0.0234785 0.0236204 0.0237619 0.023903 0.0240438 0.0241843 0.0243245 0.0244643 0.0246038 0.024743 0.0248819 0.0250205 0.0251587 0.0252966 0.0254342 0.0255714 0.0257084 0.0258451 0.0259814 0.0261174 0.0262532 0.0263886 0.0265237 0.0266585 0.026793 0.0269272 0.0270611 0.0271947 0.027328 0.027461 0.0275937 0.0277262 0.0278583 0.0279901 0.0281217 0.0282529 0.0283839 0.0285146 0.0286449 0.028775 0.0289049 0.0290344 0.0291637 0.0292926 0.0294214 0.0295498 0.0296779 0.0298058 0.0299334 0.0300607 0.0301878 0.0303146 0.0304411 0.0305674 0.0306934 0.0308191 0.0309445 0.0310698 0.0311947 0.0313194 0.0314438 0.0315679 0.0316918 0.0318155 0.0319389 0.032062 0.0321849 0.0323076 0.0324299 0.0325521 0.032674 0.0327956 0.0329171 0.0330382 0.0331591 0.0332798 0.0334002 0.0335204 0.0336404 0.0337601 0.0338795 0.0339988 0.0341178 0.0342366 0.0343551 0.0344734 0.0345915 0.0347093 0.034827 0.0349443 0.0350615 0.0351785 0.0352952 0.0354117 0.0355279 0.035644 0.0357598 0.0358755 0.0359909 0.036106 0.036221 0.0363357 0.0364503 0.0365646 0.0366787 0.0367926 0.0369062 0.0370197 0.037133 0.037246 0.0373589 0.0374715 0.037584 0.0376962 0.0378082 0.03792 0.0380317 0.0381431 0.0382543 0.0383654 0.0384762 0.0385868 0.0386972 0.0388075 0.0389175 0.0390274 0.0391371 0.0392465 0.0393558 0.0394648 0.0395737; #A 3000 0.0396824 0.0397909 0.0398993 0.0400074 0.0401154 0.0402232 0.0403307 0.0404381 0.0405453 0.0406524 0.0407592 0.0408659 0.0409724 0.0410787 0.0411848 0.0412908 0.0413966 0.0415022 0.0416076 0.0417129 0.0418179 0.0419228 0.0420276 0.0421321 0.0422365 0.0423407 0.0424448 0.0425487 0.0426523 0.0427559 0.0428592 0.0429624 0.0430655 0.0431683 0.043271 0.0433736 0.043476 0.0435782 0.0436802 0.0437821 0.0438838 0.0439854 0.0440868 0.044188 0.0442891 0.04439 0.0444907 0.0445913 0.0446918 0.0447921 0.0448922 0.0449922 0.045092 0.0451916 0.0452911 0.0453905 0.0454897 0.0455887 0.0456876 0.0457863 0.0458849 0.0459834 0.0460816 0.0461797 0.0462777 0.0463755 0.0464732 0.0465708 0.0466681 0.0467654 0.0468625 0.0469594 0.0470562 0.0471528 0.0472493 0.0473457 0.0474418 0.0475379 0.0476338 0.0477296 0.0478252 0.0479207 0.048016 0.0481112 0.0482062 0.0483011 0.0483958 0.0484905 0.0485849 0.0486793 0.0487734 0.0488675 0.0489614 0.0490552 0.0491488 0.0492423 0.0493356 0.0494288 0.0495218 0.0496147 0.0497075 0.0498001 0.0498926 0.049985 0.0500772 0.0501693 0.0502612 0.050353 0.0504447 0.0505362 0.0506276 0.0507188 0.0508099 0.0509009 0.0509917 0.0510824 0.051173 0.0512634 0.0513537 0.0514438 0.0515338 0.0516237 0.0517134 0.051803 0.0518924 0.0519818 0.0520709 0.05216 0.0522489 0.0523376 0.0524263 0.0525147 0.0526031 0.0526914 0.0527794 0.0528673 0.0529552 0.0530428 0.0531304 0.0532178 0.053305 0.0533921 0.0534791 0.053566 0.0536526 0.0537392 0.0538257 0.0539119 0.0539981 0.0540841 0.05417 0.0542557 0.0543413 0.0544268 0.0545121 0.0545973 0.0546823 0.0547672 0.054852 0.0549367 0.0550211 0.0551055 0.0551897 0.0552738 0.0553577 0.0554415 0.0555251 0.0556086 0.055692 0.0557752 0.0558583 0.0559412 0.056024 0.0561067 0.0561892 0.0562716 0.0563538 0.0564359 0.0565178 0.0565996 0.0566812 0.0567627 0.0568441 0.0569253 0.0570064 0.0570873 0.0571681 0.0572487 0.0573292 0.0574095 0.0574897 0.0575698 0.0576497 0.0577294 0.057809 0.0578885 0.0579678 0.0580469 0.0581259 0.0582048 0.0582835 0.058362 0.0584404 0.0585187 0.0585967 0.0586747 0.0587525 0.0588301 0.0589076 0.0589849 0.0590621 0.0591391 0.059216 0.0592927 0.0593692 0.0594456 0.0595218 0.0595979 0.0596738 0.0597496 0.0598251 0.0599006 0.0599759 0.060051 0.0601259 0.0602007 0.0602753 0.0603498 0.0604241 0.0604983 0.0605722 0.060646 0.0607197 0.0607932 0.0608665 0.0609396 0.0610126 0.0610854 0.061158 0.0612305 0.0613028 0.0613749 0.0614469 0.0615186 0.0615903 0.0616617 0.061733 0.0618041 0.061875 0.0619457 0.0620163 0.0620867 0.0621569 0.0622269 0.0622968 0.0623665 0.062436 0.0625053 0.0625744 0.0626434 0.0627121 0.0627807 0.0628491 0.0629174 0.0629854 0.0630533 0.0631209 0.0631884 0.0632557 0.0633228 0.0633897 0.0634564 0.063523 0.0635893 0.0636555 0.0637214 0.0637872 0.0638528 0.0639182 0.0639833 0.0640483 0.0641131 0.0641777 0.0642421 0.0643063 0.0643703 0.0644341 0.0644977 0.0645611 0.0646243 0.0646873 0.0647501 0.0648126 0.064875 0.0649372 0.0649991 0.0650609 0.0651225 0.0651838 0.0652449 0.0653058 0.0653666 0.065427 0.0654873 0.0655473 0.0656072 0.0656668 0.0657263 0.0657854 0.0658444 0.0659032 0.0659618 0.0660201 0.0660782 0.066136 0.0661937 0.0662512 0.0663083 0.0663653 0.0664221 0.0664786 0.0665349 0.066591 0.0666468 0.0667024 0.0667578 0.066813 0.0668679 0.0669226 0.066977 0.0670312 0.0670852 0.0671389 0.0671924 0.0672457 0.0672987 0.0673515 0.067404 0.0674563 0.0675084 0.0675602 0.0676118 0.0676631 0.0677141 0.067765 0.0678155 0.0678658 0.067916 0.0679657 0.0680153 0.0680647 0.0681137 0.0681625 0.0682111 0.0682594 0.0683074 0.0683552 0.0684027 0.0684499 0.068497 0.0685437 0.0685902 0.0686364 0.0686823 0.068728 0.0687734 0.0688186 0.0688635 0.0689081 0.0689524 0.0689965 0.0690403 0.0690838 0.0691271 0.06917 0.0692127 0.0692551 0.0692973 0.0693392 0.0693807 0.0694221 0.0694631 0.0695038 0.0695443 0.0695845 0.0696244 0.0696639 0.0697033 0.0697423 0.069781 0.0698195 0.0698577 0.0698956 0.0699331 0.0699704 0.0700074 0.0700441 0.0700805 0.0701166 0.0701524 0.0701879 0.0702231 0.070258 0.0702926 0.0703269 0.0703609 0.0703946 0.070428 0.0704611 0.0704939 0.0705263 0.0705585 0.0705903 0.0706219 0.0706531 0.070684 0.0707146 0.0707449 0.0707749 0.0708045 0.0708338 0.0708629 0.0708915 0.0709199 0.070948 0.0709757 0.0710031 0.0710302 0.071057 0.0710834 0.0711095 0.0711353 0.0711608 0.0711859 0.0712107 0.0712352 0.0712593 0.0712831 0.0713065 0.0713296 0.0713524 0.0713749 0.071397 0.0714189 0.0714403 0.0714614 0.0714821 0.0715025 0.0715226 0.0715423 0.0715618 0.0715808 0.0715995 0.0716179 0.0716358 0.0716535 0.0716708 0.0716877 0.0717043 0.0717206 0.0717365 0.071752 0.0717672 0.071782 0.0717964 0.0718106 0.0718243 0.0718377 0.0718507 0.0718634 0.0718757 0.0718877 0.0718993 0.0719104 0.0719213 0.0719318 0.0719419 0.0719516 0.071961 0.07197 0.0719787 0.0719869 0.0719948 0.0720023 0.0720095 0.0720162 0.0720226 0.0720286 0.0720343 0.0720395 0.0720444 0.0720489 0.072053 0.0720568 0.0720601 0.0720631 0.0720657 0.0720679 0.0720697 0.0720711 0.0720721 0.0720728 0.0720731 0.0720729 0.0720724 0.0720715 0.0720702 0.0720685 0.0720664 0.072064 0.0720611 0.0720578 0.0720541 0.0720501 0.0720456 0.0720408 0.0720355 0.0720298 0.0720238 0.0720173 0.0720104 0.0720032 0.0719955 0.0719874 0.0719789 0.07197 0.0719607 0.071951 0.0719409 0.0719304 0.0719194 0.0719081 0.0718963 0.0718841 0.0718716 0.0718586 0.0718452 0.0718313 0.0718171 0.0718024 0.0717874 0.0717719 0.071756 0.0717396 0.0717229 0.0717057 0.0716881 0.0716701 0.0716517 0.0716329 0.0716136 0.0715939 0.0715737 0.0715532 0.0715322 0.0715108 0.071489 0.0714667 0.071444 0.0714209 0.0713973 0.0713734 0.071349 0.0713241 0.0712989 0.0712732 0.071247 0.0712205 0.0711935 0.071166 0.0711382 0.0711098 0.0710811 0.0710519 0.0710223 0.0709923 0.0709617 0.0709308 0.0708994 0.0708676 0.0708354 0.0708027 0.0707695 0.070736 0.0707019 0.0706675 0.0706326 0.0705972 0.0705615 0.0705252 0.0704885 0.0704514 0.0704138 0.0703758 0.0703373 0.0702984 0.070259 0.0702192 0.070179 0.0701382 0.0700971 0.0700555 0.0700134 0.0699709 0.0699279 0.0698845 0.0698406 0.0697963 0.0697516 0.0697063 0.0696606 0.0696145 0.0695679 0.0695209 0.0694734 0.0694254 0.069377 0.0693282 0.0692788 0.0692291 0.0691788 0.0691281 0.069077 0.0690254 0.0689733 0.0689208 0.0688678 0.0688143 0.0687605 0.0687061 0.0686513 0.068596 0.0685402 0.0684841 0.0684274 0.0683703 0.0683127 0.0682546 0.0681961 0.0681371 0.0680777 0.0680178 0.0679574 0.0678966 0.0678354 0.0677736 0.0677114 0.0676487 0.0675856 0.067522 0.0674579 0.0673934 0.0673284 0.0672629 0.067197 0.0671306 0.0670637 0.0669964 0.0669287 0.0668604 0.0667917 0.0667225 0.0666529 0.0665828 0.0665122 0.0664412 0.0663697 0.0662977 0.0662253 0.0661524 0.066079 0.0660052 0.0659309 0.0658561 0.0657808 0.0657051 0.065629 0.0655523 0.0654752 0.0653977 0.0653196 0.0652411 0.0651622 0.0650827 0.0650029 0.0649225 0.0648417 0.0647604 0.0646787 0.0645964 0.0645137 0.0644306 0.064347 0.0642629 0.0641783 0.0640933 0.0640078 0.0639219 0.0638355 0.0637486 0.0636612 0.0635734 0.0634852 0.0633964 0.0633073 0.0632176 0.0631275 0.0630369 0.0629458 0.0628543 0.0627623 0.0626699 0.062577 0.0624836 0.0623898 0.0622956 0.0622008 0.0621056 0.0620099 0.0619138 0.0618172 0.0617201 0.0616226 0.0615247 0.0614262 0.0613273 0.0612279 0.0611282 0.0610279 0.0609272 0.060826 0.0607244 0.0606222 0.0605197 0.0604167 0.0603132 0.0602093 0.0601049 0.0600001 0.0598948 0.0597891 0.0596829 0.0595762 0.0594691 0.0593616 0.0592536 0.0591451 0.0590362 0.0589268 0.058817 0.0587068 0.058596 0.0584849 0.0583733 0.0582612 0.0581487 0.0580358 0.0579224 0.0578085 0.0576942 0.0575795 0.0574643 0.0573487 0.0572326 0.0571161 0.0569992 0.0568818 0.0567639 0.0566456 0.0565269 0.0564077 0.0562882 0.0561681 0.0560476 0.0559267 0.0558053 0.0556836 0.0555613 0.0554387 0.0553156 0.0551921 0.0550681 0.0549437 0.0548189 0.0546936 0.0545679 0.0544418 0.0543152 0.0541883 0.0540609 0.053933 0.0538048 0.0536761 0.0535469 0.0534174 0.0532875 0.0531571 0.0530263 0.052895 0.0527634 0.0526313 0.0524988 0.0523659 0.0522326 0.0520988 0.0519646 0.0518301 0.0516951 0.0515596 0.0514238 0.0512876 0.051151 0.0510139 0.0508764 0.0507385 0.0506003 0.0504616 0.0503225 0.0501829 0.050043 0.0499027 0.049762 0.0496209 0.0494794 0.0493374 0.0491951 0.0490524 0.0489092 0.0487657 0.0486218 0.0484775 0.0483328 0.0481877 0.0480422 0.0478963 0.04775 0.0476034 0.0474563 0.0473089 0.047161 0.0470128 0.0468642 0.0467152 0.0465659 0.0464161 0.046266 0.0461155 0.0459646 0.0458133 0.0456616 0.0455096 0.0453572 0.0452045 0.0450513 0.0448978 0.0447439 0.0445897 0.0444351 0.04428 0.0441247 0.043969 0.0438129 0.0436564 0.0434996 0.0433424 0.0431849 0.043027 0.0428688 0.0427101 0.0425512 0.0423919 0.0422322 0.0420722 0.0419118 0.0417511 0.04159 0.0414286 0.0412668 0.0411047 0.0409423 0.0407795 0.0406163 0.0404528 0.040289 0.0401249 0.0399604 0.0397955 0.0396304 0.0394649 0.0392991 0.0391329 0.0389664 0.0387996 0.0386324 0.038465 0.0382972 0.0381291 0.0379606 0.0377919 0.0376228 0.0374534 0.0372837 0.0371137 0.0369433 0.0367727 0.0366017 0.0364304 0.0362588 0.036087 0.0359148 0.0357422 0.0355695 0.0353964 0.0352229 0.0350492 0.0348752 0.0347009 0.0345263 0.0343514 0.0341763 0.0340008 0.033825 0.033649 0.0334726 0.033296 0.0331191 0.0329419 0.0327644 0.0325867 0.0324086 0.0322303 0.0320517 0.0318728 0.0316937 0.0315143 0.0313346 0.0311547 0.0309745 0.030794 0.0306133 0.0304323 0.030251 0.0300695 0.0298877 0.0297056 0.0295233 0.0293408 0.029158 0.0289749 0.0287916 0.028608 0.0284242 0.0282402 0.0280559 0.0278714 0.0276866 0.0275016 0.0273164 0.0271309 0.0269452 0.0267592 0.026573 0.0263866 0.0262 0.0260131 0.025826 0.0256387 0.0254512 0.0252634 0.0250754 0.0248872 0.0246988 0.0245102 0.0243213 0.0241323 0.023943 0.0237536 0.0235639 0.023374 0.0231839 0.0229937 0.0228032 0.0226125 0.0224216 0.0222305 0.0220393 0.0218478 0.0216562 0.0214643 0.0212723 0.0210801 0.0208877 0.0206951 0.0205024 0.0203095 0.0201163 0.019923 0.0197296 0.019536 0.0193422; #A 4000 0.0191482 0.018954 0.0187597 0.0185653 0.0183706 0.0181758 0.0179809 0.0177858 0.0175905 0.0173951 0.0171995 0.0170038 0.0168079 0.0166119 0.0164158 0.0162195 0.016023 0.0158264 0.0156297 0.0154328 0.0152358 0.0150387 0.0148414 0.014644 0.0144465 0.0142489 0.0140511 0.0138532 0.0136552 0.013457 0.0132588 0.0130604 0.0128619 0.0126633 0.0124646 0.0122658 0.0120668 0.0118678 0.0116686 0.0114694 0.0112701 0.0110706 0.0108711 0.0106714 0.0104717 0.0102719 0.010072 0.00987196 0.00967187 0.0094717 0.00927144 0.00907111 0.00887068 0.00867019 0.00846961 0.00826896 0.00806824 0.00786745 0.00766659 0.00746566 0.00726466 0.00706361 0.00686249 0.00666131 0.00646007 0.00625877 0.00605742 0.00585601 0.00565455 0.00545304 0.00525149 0.00504989 0.00484824 0.00464655 0.00444482 0.00424305 0.00404125 0.00383941 0.00363753 0.00343562 0.00323368 0.00303171 0.00282972 0.0026277 0.00242566 0.0022236 0.00202152 0.00181941 0.0016173 0.00141517 0.00121302 0.00101087 0.000808706 0.000606536 0.00040436 0.000202181 -2.69055e-12 -0.000202181 -0.00040436 -0.000606536 -0.000808706 -0.00101087 -0.00121302 -0.00141517 -0.0016173 -0.00181941 -0.00202152 -0.0022236 -0.00242566 -0.0026277 -0.00282972 -0.00303171 -0.00323368 -0.00343562 -0.00363753 -0.00383941 -0.00404125 -0.00424305 -0.00444482 -0.00464655 -0.00484824 -0.00504989 -0.00525149 -0.00545304 -0.00565455 -0.00585601 -0.00605742 -0.00625877 -0.00646007 -0.00666131 -0.00686249 -0.00706361 -0.00726466 -0.00746566 -0.00766659 -0.00786745 -0.00806824 -0.00826896 -0.00846961 -0.00867019 -0.00887068 -0.00907111 -0.00927144 -0.0094717 -0.00967187 -0.00987196 -0.010072 -0.0102719 -0.0104717 -0.0106714 -0.0108711 -0.0110706 -0.0112701 -0.0114694 -0.0116686 -0.0118678 -0.0120668 -0.0122658 -0.0124646 -0.0126633 -0.0128619 -0.0130604 -0.0132588 -0.013457 -0.0136552 -0.0138532 -0.0140511 -0.0142489 -0.0144465 -0.014644 -0.0148414 -0.0150387 -0.0152358 -0.0154328 -0.0156297 -0.0158264 -0.016023 -0.0162195 -0.0164158 -0.0166119 -0.0168079 -0.0170038 -0.0171995 -0.0173951 -0.0175905 -0.0177858 -0.0179809 -0.0181758 -0.0183706 -0.0185653 -0.0187597 -0.018954 -0.0191482 -0.0193422 -0.019536 -0.0197296 -0.019923 -0.0201163 -0.0203095 -0.0205024 -0.0206951 -0.0208877 -0.0210801 -0.0212723 -0.0214643 -0.0216562 -0.0218478 -0.0220393 -0.0222305 -0.0224216 -0.0226125 -0.0228032 -0.0229937 -0.0231839 -0.023374 -0.0235639 -0.0237536 -0.023943 -0.0241323 -0.0243213 -0.0245102 -0.0246988 -0.0248872 -0.0250754 -0.0252634 -0.0254512 -0.0256387 -0.025826 -0.0260131 -0.0262 -0.0263866 -0.026573 -0.0267592 -0.0269452 -0.0271309 -0.0273164 -0.0275016 -0.0276866 -0.0278714 -0.0280559 -0.0282402 -0.0284242 -0.028608 -0.0287916 -0.0289749 -0.029158 -0.0293408 -0.0295233 -0.0297056 -0.0298877 -0.0300695 -0.030251 -0.0304323 -0.0306133 -0.030794 -0.0309745 -0.0311547 -0.0313346 -0.0315143 -0.0316937 -0.0318728 -0.0320517 -0.0322303 -0.0324086 -0.0325867 -0.0327644 -0.0329419 -0.0331191 -0.033296 -0.0334726 -0.033649 -0.033825 -0.0340008 -0.0341763 -0.0343514 -0.0345263 -0.0347009 -0.0348752 -0.0350492 -0.0352229 -0.0353964 -0.0355695 -0.0357422 -0.0359148 -0.036087 -0.0362588 -0.0364304 -0.0366017 -0.0367727 -0.0369433 -0.0371137 -0.0372837 -0.0374534 -0.0376228 -0.0377919 -0.0379606 -0.0381291 -0.0382972 -0.038465 -0.0386324 -0.0387996 -0.0389664 -0.0391329 -0.0392991 -0.0394649 -0.0396304 -0.0397955 -0.0399604 -0.0401249 -0.040289 -0.0404528 -0.0406163 -0.0407795 -0.0409423 -0.0411047 -0.0412668 -0.0414286 -0.04159 -0.0417511 -0.0419118 -0.0420722 -0.0422322 -0.0423919 -0.0425512 -0.0427101 -0.0428688 -0.043027 -0.0431849 -0.0433424 -0.0434996 -0.0436564 -0.0438129 -0.043969 -0.0441247 -0.04428 -0.0444351 -0.0445897 -0.0447439 -0.0448978 -0.0450513 -0.0452045 -0.0453572 -0.0455096 -0.0456616 -0.0458133 -0.0459646 -0.0461155 -0.046266 -0.0464161 -0.0465659 -0.0467152 -0.0468642 -0.0470128 -0.047161 -0.0473089 -0.0474563 -0.0476034 -0.04775 -0.0478963 -0.0480422 -0.0481877 -0.0483328 -0.0484775 -0.0486218 -0.0487657 -0.0489092 -0.0490524 -0.0491951 -0.0493374 -0.0494794 -0.0496209 -0.049762 -0.0499027 -0.050043 -0.0501829 -0.0503225 -0.0504616 -0.0506003 -0.0507385 -0.0508764 -0.0510139 -0.051151 -0.0512876 -0.0514238 -0.0515596 -0.0516951 -0.0518301 -0.0519646 -0.0520988 -0.0522326 -0.0523659 -0.0524988 -0.0526313 -0.0527634 -0.052895 -0.0530263 -0.0531571 -0.0532875 -0.0534174 -0.0535469 -0.0536761 -0.0538048 -0.053933 -0.0540609 -0.0541883 -0.0543152 -0.0544418 -0.0545679 -0.0546936 -0.0548189 -0.0549437 -0.0550681 -0.0551921 -0.0553156 -0.0554387 -0.0555613 -0.0556836 -0.0558053 -0.0559267 -0.0560476 -0.0561681 -0.0562882 -0.0564077 -0.0565269 -0.0566456 -0.0567639 -0.0568818 -0.0569992 -0.0571161 -0.0572326 -0.0573487 -0.0574643 -0.0575795 -0.0576942 -0.0578085 -0.0579224 -0.0580358 -0.0581487 -0.0582612 -0.0583733 -0.0584849 -0.058596 -0.0587068 -0.058817 -0.0589268 -0.0590362 -0.0591451 -0.0592536 -0.0593616 -0.0594691 -0.0595762 -0.0596829 -0.0597891 -0.0598948 -0.0600001 -0.0601049 -0.0602093 -0.0603132 -0.0604167 -0.0605197 -0.0606222 -0.0607244 -0.060826 -0.0609272 -0.0610279 -0.0611282 -0.0612279 -0.0613273 -0.0614262 -0.0615247 -0.0616226 -0.0617201 -0.0618172 -0.0619138 -0.0620099 -0.0621056 -0.0622008 -0.0622956 -0.0623898 -0.0624836 -0.062577 -0.0626699 -0.0627623 -0.0628543 -0.0629458 -0.0630369 -0.0631275 -0.0632176 -0.0633073 -0.0633964 -0.0634852 -0.0635734 -0.0636612 -0.0637486 -0.0638355 -0.0639219 -0.0640078 -0.0640933 -0.0641783 -0.0642629 -0.064347 -0.0644306 -0.0645137 -0.0645964 -0.0646787 -0.0647604 -0.0648417 -0.0649225 -0.0650029 -0.0650827 -0.0651622 -0.0652411 -0.0653196 -0.0653977 -0.0654752 -0.0655523 -0.065629 -0.0657051 -0.0657808 -0.0658561 -0.0659309 -0.0660052 -0.066079 -0.0661524 -0.0662253 -0.0662977 -0.0663697 -0.0664412 -0.0665122 -0.0665828 -0.0666529 -0.0667225 -0.0667917 -0.0668604 -0.0669287 -0.0669964 -0.0670637 -0.0671306 -0.067197 -0.0672629 -0.0673284 -0.0673934 -0.0674579 -0.067522 -0.0675856 -0.0676487 -0.0677114 -0.0677736 -0.0678354 -0.0678966 -0.0679574 -0.0680178 -0.0680777 -0.0681371 -0.0681961 -0.0682546 -0.0683127 -0.0683703 -0.0684274 -0.0684841 -0.0685402 -0.068596 -0.0686513 -0.0687061 -0.0687605 -0.0688143 -0.0688678 -0.0689208 -0.0689733 -0.0690254 -0.069077 -0.0691281 -0.0691788 -0.0692291 -0.0692788 -0.0693282 -0.069377 -0.0694254 -0.0694734 -0.0695209 -0.0695679 -0.0696145 -0.0696606 -0.0697063 -0.0697516 -0.0697963 -0.0698406 -0.0698845 -0.0699279 -0.0699709 -0.0700134 -0.0700555 -0.0700971 -0.0701382 -0.070179 -0.0702192 -0.070259 -0.0702984 -0.0703373 -0.0703758 -0.0704138 -0.0704514 -0.0704885 -0.0705252 -0.0705615 -0.0705972 -0.0706326 -0.0706675 -0.0707019 -0.070736 -0.0707695 -0.0708027 -0.0708354 -0.0708676 -0.0708994 -0.0709308 -0.0709617 -0.0709923 -0.0710223 -0.0710519 -0.0710811 -0.0711098 -0.0711382 -0.071166 -0.0711935 -0.0712205 -0.071247 -0.0712732 -0.0712989 -0.0713241 -0.071349 -0.0713734 -0.0713973 -0.0714209 -0.071444 -0.0714667 -0.071489 -0.0715108 -0.0715322 -0.0715532 -0.0715737 -0.0715939 -0.0716136 -0.0716329 -0.0716517 -0.0716701 -0.0716881 -0.0717057 -0.0717229 -0.0717396 -0.071756 -0.0717719 -0.0717874 -0.0718024 -0.0718171 -0.0718313 -0.0718452 -0.0718586 -0.0718716 -0.0718841 -0.0718963 -0.0719081 -0.0719194 -0.0719304 -0.0719409 -0.071951 -0.0719607 -0.07197 -0.0719789 -0.0719874 -0.0719955 -0.0720032 -0.0720104 -0.0720173 -0.0720238 -0.0720298 -0.0720355 -0.0720408 -0.0720456 -0.0720501 -0.0720541 -0.0720578 -0.0720611 -0.072064 -0.0720664 -0.0720685 -0.0720702 -0.0720715 -0.0720724 -0.0720729 -0.0720731 -0.0720728 -0.0720721 -0.0720711 -0.0720697 -0.0720679 -0.0720657 -0.0720631 -0.0720601 -0.0720568 -0.072053 -0.0720489 -0.0720444 -0.0720395 -0.0720343 -0.0720286 -0.0720226 -0.0720162 -0.0720095 -0.0720023 -0.0719948 -0.0719869 -0.0719787 -0.07197 -0.071961 -0.0719516 -0.0719419 -0.0719318 -0.0719213 -0.0719104 -0.0718993 -0.0718877 -0.0718757 -0.0718634 -0.0718507 -0.0718377 -0.0718243 -0.0718106 -0.0717964 -0.071782 -0.0717672 -0.071752 -0.0717365 -0.0717206 -0.0717043 -0.0716877 -0.0716708 -0.0716535 -0.0716358 -0.0716179 -0.0715995 -0.0715808 -0.0715618 -0.0715423 -0.0715226 -0.0715025 -0.0714821 -0.0714614 -0.0714403 -0.0714189 -0.071397 -0.0713749 -0.0713524 -0.0713296 -0.0713065 -0.0712831 -0.0712593 -0.0712352 -0.0712107 -0.0711859 -0.0711608 -0.0711353 -0.0711095 -0.0710834 -0.071057 -0.0710302 -0.0710031 -0.0709757 -0.070948 -0.0709199 -0.0708915 -0.0708629 -0.0708338 -0.0708045 -0.0707749 -0.0707449 -0.0707146 -0.070684 -0.0706531 -0.0706219 -0.0705903 -0.0705585 -0.0705263 -0.0704939 -0.0704611 -0.070428 -0.0703946 -0.0703609 -0.0703269 -0.0702926 -0.070258 -0.0702231 -0.0701879 -0.0701524 -0.0701166 -0.0700805 -0.0700441 -0.0700074 -0.0699704 -0.0699331 -0.0698956 -0.0698577 -0.0698195 -0.069781 -0.0697423 -0.0697033 -0.0696639 -0.0696244 -0.0695845 -0.0695443 -0.0695038 -0.0694631 -0.0694221 -0.0693807 -0.0693392 -0.0692973 -0.0692551 -0.0692127 -0.06917 -0.0691271 -0.0690838 -0.0690403 -0.0689965 -0.0689524 -0.0689081 -0.0688635 -0.0688186 -0.0687734 -0.068728 -0.0686823 -0.0686364 -0.0685902 -0.0685437 -0.068497 -0.0684499 -0.0684027 -0.0683552 -0.0683074 -0.0682594 -0.0682111 -0.0681625 -0.0681137 -0.0680647 -0.0680153 -0.0679657 -0.067916 -0.0678658 -0.0678155 -0.067765 -0.0677141 -0.0676631 -0.0676118 -0.0675602 -0.0675084 -0.0674563 -0.067404 -0.0673515 -0.0672987 -0.0672457 -0.0671924 -0.0671389 -0.0670852 -0.0670312 -0.066977 -0.0669226 -0.0668679 -0.066813 -0.0667578 -0.0667024 -0.0666468 -0.066591 -0.0665349 -0.0664786 -0.0664221 -0.0663653 -0.0663083 -0.0662512 -0.0661937 -0.066136 -0.0660782 -0.0660201 -0.0659618 -0.0659032 -0.0658444 -0.0657854 -0.0657263 -0.0656668 -0.0656072 -0.0655473 -0.0654873 -0.065427 -0.0653666 -0.0653058 -0.0652449 -0.0651838 -0.0651225 -0.0650609 -0.0649991 -0.0649372 -0.064875 -0.0648126 -0.0647501 -0.0646873 -0.0646243 -0.0645611 -0.0644977 -0.0644341 -0.0643703 -0.0643063 -0.0642421 -0.0641777 -0.0641131 -0.0640483 -0.0639833 -0.0639182 -0.0638528 -0.0637872 -0.0637214 -0.0636555 -0.0635893 -0.063523 -0.0634564 -0.0633897 -0.0633228 -0.0632557 -0.0631884 -0.0631209 -0.0630533 -0.0629854 -0.0629174 -0.0628491 -0.0627807 -0.0627121 -0.0626434 -0.0625744 -0.0625053 -0.062436 -0.0623665 -0.0622968 -0.0622269 -0.0621569 -0.0620867 -0.0620163 -0.0619457 -0.061875 -0.0618041 -0.061733 -0.0616617 -0.0615903 -0.0615186 -0.0614469 -0.0613749 -0.0613028 -0.0612305 -0.061158 -0.0610854 -0.0610126 -0.0609396 -0.0608665 -0.0607932 -0.0607197 -0.060646 -0.0605722 -0.0604983 -0.0604241 -0.0603498 -0.0602753 -0.0602007 -0.0601259 -0.060051 -0.0599759 -0.0599006 -0.0598251 -0.0597496 -0.0596738 -0.0595979 -0.0595218 -0.0594456 -0.0593692 -0.0592927 -0.059216 -0.0591391 -0.0590621 -0.0589849 -0.0589076 -0.0588301 -0.0587525 -0.0586747 -0.0585967 -0.0585187 -0.0584404 -0.058362 -0.0582835 -0.0582048 -0.0581259 -0.0580469 -0.0579678 -0.0578885 -0.057809 -0.0577294; #A 5000 -0.0576497 -0.0575698 -0.0574897 -0.0574095 -0.0573292 -0.0572487 -0.0571681 -0.0570873 -0.0570064 -0.0569253 -0.0568441 -0.0567627 -0.0566812 -0.0565996 -0.0565178 -0.0564359 -0.0563538 -0.0562716 -0.0561892 -0.0561067 -0.056024 -0.0559412 -0.0558583 -0.0557752 -0.055692 -0.0556086 -0.0555251 -0.0554415 -0.0553577 -0.0552738 -0.0551897 -0.0551055 -0.0550211 -0.0549367 -0.054852 -0.0547672 -0.0546823 -0.0545973 -0.0545121 -0.0544268 -0.0543413 -0.0542558 -0.05417 -0.0540841 -0.0539981 -0.0539119 -0.0538257 -0.0537392 -0.0536526 -0.053566 -0.0534791 -0.0533921 -0.053305 -0.0532178 -0.0531304 -0.0530428 -0.0529552 -0.0528673 -0.0527794 -0.0526914 -0.0526031 -0.0525147 -0.0524263 -0.0523376 -0.0522489 -0.05216 -0.0520709 -0.0519818 -0.0518924 -0.051803 -0.0517134 -0.0516237 -0.0515338 -0.0514438 -0.0513537 -0.0512634 -0.051173 -0.0510824 -0.0509917 -0.0509009 -0.0508099 -0.0507188 -0.0506276 -0.0505362 -0.0504447 -0.050353 -0.0502612 -0.0501693 -0.0500772 -0.049985 -0.0498926 -0.0498001 -0.0497075 -0.0496147 -0.0495218 -0.0494288 -0.0493356 -0.0492423 -0.0491488 -0.0490552 -0.0489614 -0.0488675 -0.0487734 -0.0486793 -0.0485849 -0.0484905 -0.0483958 -0.0483011 -0.0482062 -0.0481112 -0.048016 -0.0479207 -0.0478252 -0.0477296 -0.0476338 -0.0475379 -0.0474418 -0.0473457 -0.0472493 -0.0471528 -0.0470562 -0.0469594 -0.0468625 -0.0467654 -0.0466681 -0.0465708 -0.0464732 -0.0463755 -0.0462777 -0.0461797 -0.0460816 -0.0459834 -0.0458849 -0.0457863 -0.0456876 -0.0455887 -0.0454897 -0.0453905 -0.0452911 -0.0451916 -0.045092 -0.0449922 -0.0448922 -0.0447921 -0.0446918 -0.0445913 -0.0444907 -0.04439 -0.0442891 -0.044188 -0.0440868 -0.0439854 -0.0438838 -0.0437821 -0.0436802 -0.0435782 -0.043476 -0.0433736 -0.043271 -0.0431683 -0.0430655 -0.0429624 -0.0428592 -0.0427559 -0.0426523 -0.0425487 -0.0424448 -0.0423407 -0.0422365 -0.0421321 -0.0420276 -0.0419228 -0.0418179 -0.0417129 -0.0416076 -0.0415022 -0.0413966 -0.0412908 -0.0411848 -0.0410787 -0.0409724 -0.0408659 -0.0407592 -0.0406524 -0.0405453 -0.0404381 -0.0403307 -0.0402232 -0.0401154 -0.0400074 -0.0398993 -0.0397909 -0.0396824 -0.0395737 -0.0394648 -0.0393558 -0.0392465 -0.0391371 -0.0390274 -0.0389175 -0.0388075 -0.0386972 -0.0385868 -0.0384762 -0.0383654 -0.0382543 -0.0381431 -0.0380317 -0.03792 -0.0378082 -0.0376962 -0.037584 -0.0374715 -0.0373589 -0.037246 -0.037133 -0.0370197 -0.0369062 -0.0367926 -0.0366787 -0.0365646 -0.0364503 -0.0363357 -0.036221 -0.036106 -0.0359909 -0.0358755 -0.0357598 -0.035644 -0.0355279 -0.0354117 -0.0352952 -0.0351785 -0.0350615 -0.0349443 -0.034827 -0.0347093 -0.0345915 -0.0344734 -0.0343551 -0.0342366 -0.0341178 -0.0339988 -0.0338795 -0.0337601 -0.0336404 -0.0335204 -0.0334002 -0.0332798 -0.0331591 -0.0330382 -0.0329171 -0.0327956 -0.032674 -0.0325521 -0.0324299 -0.0323076 -0.0321849 -0.032062 -0.0319389 -0.0318155 -0.0316918 -0.0315679 -0.0314438 -0.0313194 -0.0311947 -0.0310698 -0.0309445 -0.0308191 -0.0306934 -0.0305674 -0.0304411 -0.0303146 -0.0301878 -0.0300607 -0.0299334 -0.0298058 -0.0296779 -0.0295498 -0.0294214 -0.0292926 -0.0291637 -0.0290344 -0.0289049 -0.028775 -0.0286449 -0.0285146 -0.0283839 -0.0282529 -0.0281217 -0.0279901 -0.0278583 -0.0277262 -0.0275937 -0.027461 -0.027328 -0.0271947 -0.0270611 -0.0269272 -0.026793 -0.0266585 -0.0265237 -0.0263886 -0.0262532 -0.0261174 -0.0259814 -0.0258451 -0.0257084 -0.0255714 -0.0254342 -0.0252966 -0.0251587 -0.0250205 -0.0248819 -0.024743 -0.0246038 -0.0244643 -0.0243245 -0.0241843 -0.0240438 -0.023903 -0.0237619 -0.0236204 -0.0234785 -0.0233364 -0.0231939 -0.0230511 -0.0229079 -0.0227644 -0.0226206 -0.0224764 -0.0223318 -0.022187 -0.0220417 -0.0218962 -0.0217502 -0.021604 -0.0214573 -0.0213104 -0.021163 -0.0210154 -0.0208673 -0.0207189 -0.0205701 -0.020421 -0.0202715 -0.0201216 -0.0199714 -0.0198208 -0.0196698 -0.0195185 -0.0193668 -0.0192147 -0.0190622 -0.0189094 -0.0187562 -0.0186026 -0.0184486 -0.0182943 -0.0181395 -0.0179844 -0.0178289 -0.017673 -0.0175167 -0.01736 -0.0172029 -0.0170455 -0.0168876 -0.0167293 -0.0165706 -0.0164116 -0.0162521 -0.0160923 -0.015932 -0.0157713 -0.0156102 -0.0154487 -0.0152868 -0.0151245 -0.0149618 -0.0147986 -0.014635 -0.0144711 -0.0143066 -0.0141418 -0.0139766 -0.0138109 -0.0136448 -0.0134783 -0.0133113 -0.0131439 -0.0129761 -0.0128079 -0.0126392 -0.0124701 -0.0123005 -0.0121305 -0.0119601 -0.0117892 -0.0116179 -0.0114461 -0.0112739 -0.0111013 -0.0109281 -0.0107546 -0.0105806 -0.0104061 -0.0102312 -0.0100558 -0.00987993 -0.00970362 -0.00952687 -0.00934964 -0.00917197 -0.0089938 -0.00881518 -0.00863611 -0.00845653 -0.00827651 -0.008096 -0.00791501 -0.00773355 -0.0075516 -0.00736919 -0.00718628 -0.00700292 -0.00681905 -0.00663472 -0.00644986 -0.00626455 -0.00607873 -0.00589242 -0.00570562 -0.00551834 -0.00533055 -0.00514225 -0.00495345 -0.00476416 -0.00457437 -0.0043841 -0.00419331 -0.00400199 -0.00381015 -0.00361784 -0.00342504 -0.00323169 -0.00303784 -0.00284344 -0.00264856 -0.00245316 -0.00225722 -0.0020608 -0.00186383 -0.00166634 -0.00146833 -0.00126976 -0.00107068 -0.000871118 -0.000670974 -0.000470293 -0.000269101 -6.73651e-05 0.000134907 0.000337716 0.000541062 0.000744938 0.000949384 0.00115436 0.00135987 0.00156596 0.00177258 0.00197973 0.00218746 0.00239572 0.00260454 0.00281393 0.00302386 0.00323434 0.00344538 0.003657 0.00386915 0.0040819 0.0042952 0.00450908 0.00472349 0.00493851 0.00515408 0.00537022 0.00558695 0.00580425 0.00602208 0.00624055 0.00645957 0.00667919 0.00689934 0.00712011 0.00734149 0.0075634 0.00778593 0.00800904 0.00823273 0.00845703 0.00868191 0.00890737 0.00913345 0.0093601 0.00958735 0.0098152 0.0100436 0.0102727 0.0105024 0.0107326 0.0109635 0.0111949 0.011427 0.0116597 0.011893 0.0121269 0.0123614 0.0125965 0.0128322 0.0130686 0.0133056 0.0135432 0.0137814 0.0140202 0.0142596 0.0144997 0.0147404 0.0149817 0.0152236 0.0154662 0.0157094 0.0159532 0.0161977 0.0164428 0.0166885 0.0169348 0.0171818 0.0174294 0.0176777 0.0179266 0.0181761 0.0184263 0.0186771 0.0189286 0.0191807 0.0194334 0.0196868 0.0199409 0.0201956 0.0204509 0.0207069 0.0209635 0.0212208 0.0214787 0.0217373 0.0219966 0.0222565 0.022517 0.0227782 0.0230401 0.0233026 0.0235658 0.0238297 0.0240942 0.0243594 0.0246252 0.0248918 0.0251589 0.0254268 0.0256953 0.0259645 0.0262343 0.0265048 0.026776 0.0270478 0.0273204 0.0275936 0.0278675 0.028142 0.0284173 0.0286931 0.0289697 0.029247 0.029525 0.0298036 0.0300829 0.0303629 0.0306435 0.0309249 0.0312069 0.0314896 0.031773 0.0320571 0.0323419 0.0326273 0.0329135 0.0332003 0.0334878 0.0337761 0.034065 0.0343546 0.0346448 0.0349358 0.0352275 0.0355198 0.0358129 0.0361067 0.0364011 0.0366963 0.0369921 0.0372886 0.0375859 0.0378838 0.0381824 0.0384818 0.0387818 0.0390825 0.0393839 0.0396861 0.0399889 0.0402924 0.0405966 0.0409016 0.0412072 0.0415136 0.0418206 0.0421284 0.0424368 0.0427459 0.0430558 0.0433664 0.0436777 0.0439896 0.0443023 0.0446157 0.0449298 0.0452446 0.0455601 0.0458764 0.0461933 0.0465109 0.0468293 0.0471483 0.0474681 0.0477885 0.0481097 0.0484316 0.0487542 0.0490775 0.0494015 0.0497263 0.0500517 0.0503778 0.0507047 0.0510323 0.0513605 0.0516895 0.0520192 0.0523496 0.0526807 0.0530126 0.0533451 0.0536784 0.0540123 0.054347 0.0546824 0.0550185 0.0553553 0.0556928 0.056031 0.0563699 0.0567096 0.0570499 0.057391 0.0577328 0.0580752 0.0584184 0.0587623 0.0591069 0.0594522 0.0597983 0.060145 0.0604924 0.0608406 0.0611894 0.061539 0.0618892 0.0622402 0.0625919 0.0629443 0.0632974 0.0636512 0.0640057 0.0643608 0.0647168 0.0650734 0.0654307 0.0657887 0.0661474 0.0665068 0.0668669 0.0672278 0.0675893 0.0679515 0.0683144 0.068678 0.0690423 0.0694073 0.069773 0.0701394 0.0705065 0.0708743 0.0712428 0.071612 0.0719819 0.0723524 0.0727236 0.0730956 0.0734682 0.0738416 0.0742156 0.0745903 0.0749656 0.0753417 0.0757185 0.0760959 0.0764741 0.0768529 0.0772324 0.0776125 0.0779934 0.0783749 0.0787571 0.07914 0.0795236 0.0799078 0.0802928 0.0806783 0.0810646 0.0814515 0.0818391 0.0822274 0.0826163 0.0830059 0.0833962 0.0837871 0.0841787 0.084571 0.0849639 0.0853575 0.0857518 0.0861466 0.0865422 0.0869384 0.0873353 0.0877329 0.088131 0.0885299 0.0889293 0.0893294 0.0897302 0.0901317 0.0905337 0.0909364 0.0913398 0.0917437 0.0921484 0.0925536 0.0929595 0.0933661 0.0937732 0.094181 0.0945894 0.0949985 0.0954082 0.0958185 0.0962294 0.096641 0.0970532 0.0974659 0.0978793 0.0982934 0.098708 0.0991232 0.0995391 0.0999556 0.100373 0.10079 0.101209 0.101628 0.102047 0.102467 0.102888 0.103309 0.103731 0.104153 0.104576 0.105 0.105424 0.105849 0.106274 0.1067 0.107127 0.107554 0.107982 0.10841 0.108839 0.109268 0.109698 0.110129 0.11056 0.110992 0.111424 0.111857 0.11229 0.112724 0.113158 0.113593 0.114029 0.114465 0.114901 0.115338 0.115776 0.116214 0.116653 0.117092 0.117532 0.117972 0.118413 0.118854 0.119296 0.119739 0.120181 0.120625 0.121069 0.121513 0.121958 0.122403 0.122849 0.123296 0.123743 0.12419 0.124638 0.125086 0.125535 0.125984 0.126434 0.126884 0.127335 0.127786 0.128238 0.12869 0.129142 0.129595 0.130049 0.130503 0.130957 0.131412 0.131867 0.132323 0.132779 0.133236 0.133693 0.13415 0.134608 0.135066 0.135525 0.135984 0.136444 0.136903 0.137364 0.137825 0.138286 0.138747 0.139209 0.139671 0.140134 0.140597 0.141061 0.141525 0.141989 0.142453 0.142918 0.143384 0.143849 0.144315 0.144782 0.145249 0.145716 0.146183 0.146651 0.147119 0.147587 0.148056 0.148525 0.148995 0.149465 0.149935 0.150405 0.150876 0.151347 0.151818 0.15229 0.152762 0.153234 0.153706 0.154179 0.154652 0.155125 0.155599 0.156073 0.156547 0.157021 0.157496 0.157971 0.158446 0.158922 0.159397 0.159873 0.160349 0.160826 0.161302 0.161779 0.162256 0.162733 0.163211 0.163689 0.164167 0.164645 0.165123 0.165601 0.16608 0.166559 0.167038 0.167517 0.167997 0.168476 0.168956 0.169436 0.169916 0.170396 0.170876 0.171357 0.171837 0.172318 0.172799 0.17328 0.173761 0.174242 0.174724 0.175205 0.175687 0.176168 0.17665 0.177132 0.177614 0.178096 0.178578 0.17906 0.179542 0.180025 0.180507 0.180989 0.181472 0.181954 0.182437 0.18292 0.183402 0.183885 0.184368 0.18485 0.185333 0.185816 0.186298 0.186781 0.187264 0.187747 0.188229 0.188712 0.189195 0.189677 0.19016 0.190642 0.191125 0.191607 0.19209 0.192572 0.193054 0.193537 0.194019 0.194501 0.194983 0.195465 0.195946 0.196428 0.19691 0.197391 0.197873; #A 6000 0.198354 0.198835 0.199316 0.199797 0.200278 0.200758 0.201239 0.201719 0.202199 0.202679 0.203159 0.203639 0.204118 0.204597 0.205076 0.205555 0.206034 0.206512 0.206991 0.207469 0.207946 0.208424 0.208901 0.209378 0.209855 0.210332 0.210808 0.211284 0.21176 0.212236 0.212711 0.213186 0.213661 0.214135 0.214609 0.215083 0.215557 0.21603 0.216503 0.216975 0.217448 0.21792 0.218391 0.218862 0.219333 0.219804 0.220274 0.220744 0.221213 0.221682 0.22215 0.222619 0.223086 0.223554 0.224021 0.224487 0.224954 0.225419 0.225884 0.226349 0.226814 0.227278 0.227741 0.228204 0.228667 0.229129 0.22959 0.230051 0.230512 0.230972 0.231432 0.231891 0.232349 0.232807 0.233265 0.233722 0.234178 0.234634 0.23509 0.235544 0.235999 0.236452 0.236905 0.237358 0.23781 0.238261 0.238712 0.239162 0.239611 0.24006 0.240508 0.240956 0.241403 0.241849 0.242294 0.242739 0.243184 0.243627 0.24407 0.244513 0.244954 0.245395 0.245835 0.246275 0.246714 0.247151 0.247589 0.248025 0.248461 0.248896 0.249331 0.249764 0.250197 0.250629 0.25106 0.251491 0.25192 0.252349 0.252777 0.253205 0.253631 0.254057 0.254481 0.254905 0.255329 0.255751 0.256172 0.256593 0.257012 0.257431 0.257849 0.258266 0.258682 0.259097 0.259512 0.259925 0.260338 0.260749 0.26116 0.261569 0.261978 0.262386 0.262793 0.263199 0.263603 0.264007 0.26441 0.264812 0.265213 0.265613 0.266012 0.266409 0.266806 0.267202 0.267597 0.26799 0.268383 0.268775 0.269165 0.269555 0.269943 0.27033 0.270716 0.271101 0.271485 0.271868 0.27225 0.27263 0.27301 0.273388 0.273765 0.274141 0.274516 0.27489 0.275262 0.275633 0.276004 0.276372 0.27674 0.277107 0.277472 0.277836 0.278199 0.27856 0.278921 0.27928 0.279637 0.279994 0.280349 0.280703 0.281056 0.281407 0.281757 0.282106 0.282454 0.2828 0.283145 0.283488 0.28383 0.284171 0.28451 0.284848 0.285185 0.28552 0.285854 0.286187 0.286518 0.286848 0.287176 0.287503 0.287829 0.288153 0.288475 0.288796 0.289116 0.289434 0.289751 0.290066 0.29038 0.290693 0.291003 0.291313 0.291621 0.291927 0.292232 0.292535 0.292837 0.293137 0.293436 0.293733 0.294028 0.294322 0.294614 0.294905 0.295194 0.295482 0.295768 0.296052 0.296335 0.296616 0.296896 0.297174 0.29745 0.297724 0.297997 0.298268 0.298538 0.298806 0.299072 0.299336 0.299599 0.29986 0.300119 0.300377 0.300633 0.300887 0.301139 0.30139 0.301639 0.301886 0.302131 0.302375 0.302617 0.302856 0.303095 0.303331 0.303565 0.303798 0.304029 0.304258 0.304485 0.304711 0.304934 0.305156 0.305376 0.305593 0.30581 0.306024 0.306236 0.306446 0.306655 0.306861 0.307066 0.307268 0.307469 0.307668 0.307865 0.308059 0.308252 0.308443 0.308632 0.308819 0.309004 0.309187 0.309368 0.309547 0.309724 0.309898 0.310071 0.310242 0.310411 0.310577 0.310742 0.310905 0.311065 0.311224 0.31138 0.311534 0.311686 0.311836 0.311984 0.31213 0.312274 0.312415 0.312554 0.312692 0.312827 0.31296 0.31309 0.313219 0.313345 0.313469 0.313592 0.313711 0.313829 0.313944 0.314057 0.314168 0.314277 0.314384 0.314488 0.31459 0.314689 0.314787 0.314882 0.314975 0.315065 0.315154 0.31524 0.315323 0.315405 0.315484 0.315561 0.315635 0.315707 0.315777 0.315844 0.315909 0.315972 0.316032 0.31609 0.316146 0.316199 0.316249 0.316298 0.316344 0.316387 0.316428 0.316467 0.316503 0.316537 0.316568 0.316597 0.316624 0.316648 0.316669 0.316688 0.316705 0.316719 0.316731 0.31674 0.316746 0.31675 0.316752 0.316751 0.316747 0.316741 0.316733 0.316722 0.316708 0.316692 0.316673 0.316651 0.316628 0.316601 0.316572 0.31654 0.316506 0.316469 0.316429 0.316387 0.316342 0.316295 0.316245 0.316192 0.316137 0.316079 0.316018 0.315955 0.315889 0.31582 0.315749 0.315675 0.315598 0.315518 0.315436 0.315351 0.315264 0.315173 0.31508 0.314985 0.314886 0.314785 0.314681 0.314574 0.314465 0.314352 0.314237 0.314119 0.313999 0.313875 0.313749 0.31362 0.313488 0.313354 0.313216 0.313076 0.312933 0.312787 0.312639 0.312487 0.312333 0.312175 0.312015 0.311852 0.311686 0.311518 0.311346 0.311172 0.310994 0.310814 0.310631 0.310445 0.310256 0.310064 0.309869 0.309672 0.309471 0.309268 0.309061 0.308852 0.308639 0.308424 0.308206 0.307985 0.307761 0.307533 0.307303 0.30707 0.306834 0.306595 0.306353 0.306108 0.30586 0.305609 0.305355 0.305098 0.304838 0.304575 0.304308 0.304039 0.303767 0.303492 0.303214 0.302932 0.302648 0.30236 0.30207 0.301776 0.30148 0.30118 0.300877 0.300571 0.300262 0.29995 0.299635 0.299317 0.298996 0.298671 0.298344 0.298013 0.297679 0.297342 0.297002 0.296659 0.296313 0.295963 0.295611 0.295255 0.294896 0.294534 0.294169 0.293801 0.293429 0.293055 0.292677 0.292296 0.291912 0.291524 0.291134 0.29074 0.290343 0.289943 0.28954 0.289133 0.288724 0.288311 0.287895 0.287475 0.287053 0.286627 0.286198 0.285766 0.28533 0.284892 0.28445 0.284005 0.283556 0.283105 0.28265 0.282191 0.28173 0.281265 0.280798 0.280326 0.279852 0.279374 0.278893 0.278409 0.277922 0.277431 0.276937 0.276439 0.275939 0.275435 0.274928 0.274417 0.273903 0.273386 0.272866 0.272342 0.271815 0.271285 0.270751 0.270214 0.269674 0.26913 0.268583 0.268033 0.26748 0.266923 0.266363 0.265799 0.265232 0.264662 0.264089 0.263512 0.262932 0.262348 0.261761 0.261171 0.260577 0.25998 0.25938 0.258777 0.25817 0.257559 0.256946 0.256329 0.255708 0.255085 0.254457 0.253827 0.253193 0.252556 0.251915 0.251271 0.250624 0.249973 0.249319 0.248662 0.248001 0.247337 0.246669 0.245998 0.245324 0.244647 0.243965 0.243281 0.242593 0.241902 0.241207 0.240509 0.239808 0.239103 0.238395 0.237684 0.236969 0.23625 0.235529 0.234804 0.234075 0.233343 0.232608 0.231869 0.231127 0.230382 0.229633 0.228881 0.228125 0.227366 0.226604 0.225838 0.225069 0.224296 0.22352 0.222741 0.221958 0.221172 0.220382 0.219589 0.218793 0.217993 0.21719 0.216383 0.215573 0.21476 0.213943 0.213123 0.2123 0.211473 0.210643 0.209809 0.208972 0.208131 0.207288 0.20644 0.20559 0.204736 0.203878 0.203018 0.202153 0.201286 0.200415 0.199541 0.198663 0.197782 0.196897 0.196009 0.195118 0.194224 0.193326 0.192424 0.19152 0.190611 0.1897 0.188785 0.187867 0.186945 0.18602 0.185092 0.184161 0.183226 0.182287 0.181345 0.1804 0.179452 0.1785 0.177545 0.176586 0.175625 0.17466 0.173691 0.172719 0.171744 0.170765 0.169783 0.168798 0.16781 0.166818 0.165823 0.164824 0.163822 0.162817 0.161809 0.160797 0.159782 0.158763 0.157742 0.156717 0.155688 0.154657 0.153622 0.152583 0.151542 0.150497 0.149449 0.148398 0.147343 0.146285 0.145224 0.144159 0.143092 0.142021 0.140946 0.139869 0.138788 0.137704 0.136616 0.135526 0.134432 0.133335 0.132235 0.131131 0.130024 0.128914 0.127801 0.126685 0.125565 0.124442 0.123316 0.122187 0.121054 0.119919 0.11878 0.117638 0.116492 0.115344 0.114192 0.113037 0.111879 0.110718 0.109554 0.108386 0.107216 0.106042 0.104865 0.103685 0.102502 0.101315 0.100126 0.0989332 0.0977375 0.0965386 0.0953366 0.0941315 0.0929233 0.091712 0.0904976 0.0892801 0.0880596 0.0868359 0.0856091 0.0843793 0.0831465 0.0819105 0.0806716 0.0794295 0.0781844 0.0769363 0.0756851 0.0744309 0.0731737 0.0719134 0.0706501 0.0693838 0.0681145 0.0668423 0.0655669 0.0642887 0.0630074 0.0617231 0.0604359 0.0591457 0.0578526 0.0565565 0.0552574 0.0539554 0.0526504 0.0513425 0.0500317 0.048718 0.0474013 0.0460818 0.0447593 0.0434339 0.0421056 0.0407745 0.0394404 0.0381035 0.0367637 0.0354211 0.0340756 0.0327272 0.031376 0.0300219 0.0286651 0.0273054 0.0259429 0.0245775 0.0232094 0.0218384 0.0204647 0.0190882 0.0177089 0.0163268 0.014942 0.0135544 0.012164 0.0107709 0.00937508 0.00797649 0.0065752 0.00517121 0.00376449 0.00235506 0.000942935 -0.000471896 -0.00188943 -0.00330959 -0.0047324 -0.00615794 -0.00758613 -0.00901694 -0.0104504 -0.0118865 -0.0133252 -0.0147665 -0.0162105 -0.017657 -0.0191061 -0.0205579 -0.0220122 -0.023469 -0.0249285 -0.0263905 -0.0278551 -0.0293221 -0.0307917 -0.0322639 -0.0337386 -0.0352158 -0.0366955 -0.0381776 -0.0396622 -0.0411494 -0.042639 -0.0441311 -0.0456256 -0.0471225 -0.048622 -0.0501238 -0.051628 -0.0531347 -0.0546438 -0.0561552 -0.0576691 -0.0591853 -0.0607039 -0.0622248 -0.0637482 -0.0652738 -0.0668018 -0.0683321 -0.0698647 -0.0713997 -0.0729369 -0.0744765 -0.0760183 -0.0775624 -0.0791087 -0.0806573 -0.0822082 -0.0837613 -0.0853167 -0.0868741 -0.0884339 -0.0899959 -0.09156 -0.0931263 -0.0946948 -0.0962655 -0.0978384 -0.0994133 -0.10099 -0.10257 -0.104151 -0.105734 -0.10732 -0.108908 -0.110497 -0.112089 -0.113683 -0.115279 -0.116877 -0.118477 -0.120079 -0.121683 -0.123289 -0.124897 -0.126507 -0.128119 -0.129733 -0.131349 -0.132966 -0.134586 -0.136208 -0.137831 -0.139457 -0.141084 -0.142714 -0.144345 -0.145978 -0.147613 -0.149249 -0.150888 -0.152528 -0.15417 -0.155814 -0.15746 -0.159107 -0.160757 -0.162408 -0.16406 -0.165715 -0.167371 -0.169029 -0.170689 -0.17235 -0.174013 -0.175678 -0.177344 -0.179012 -0.180682 -0.182353 -0.184026 -0.1857 -0.187376 -0.189054 -0.190733 -0.192414 -0.194096 -0.19578 -0.197466 -0.199153 -0.200841 -0.202531 -0.204222 -0.205915 -0.20761 -0.209305 -0.211003 -0.212701 -0.214401 -0.216103 -0.217806 -0.21951 -0.221215 -0.222922 -0.224631 -0.22634 -0.228051 -0.229764 -0.231477 -0.233192 -0.234908 -0.236625 -0.238344 -0.240064 -0.241785 -0.243507 -0.245231 -0.246956 -0.248682 -0.250409 -0.252137 -0.253866 -0.255597 -0.257328 -0.259061 -0.260795 -0.26253 -0.264266 -0.266003 -0.267741 -0.26948 -0.27122 -0.272961 -0.274703 -0.276446; #A 7000 -0.27819 -0.279935 -0.281681 -0.283428 -0.285176 -0.286925 -0.288674 -0.290425 -0.292176 -0.293928 -0.295682 -0.297435 -0.29919 -0.300946 -0.302702 -0.304459 -0.306217 -0.307976 -0.309735 -0.311495 -0.313256 -0.315018 -0.31678 -0.318543 -0.320306 -0.32207 -0.323835 -0.325601 -0.327367 -0.329134 -0.330901 -0.332669 -0.334437 -0.336206 -0.337976 -0.339746 -0.341516 -0.343287 -0.345059 -0.346831 -0.348603 -0.350376 -0.352149 -0.353923 -0.355697 -0.357472 -0.359247 -0.361022 -0.362797 -0.364573 -0.36635 -0.368126 -0.369903 -0.37168 -0.373457 -0.375235 -0.377013 -0.378791 -0.380569 -0.382348 -0.384127 -0.385905 -0.387684 -0.389464 -0.391243 -0.393022 -0.394802 -0.396581 -0.398361 -0.400141 -0.401921 -0.4037 -0.40548 -0.40726 -0.40904 -0.41082 -0.4126 -0.414379 -0.416159 -0.417938 -0.419718 -0.421497 -0.423276 -0.425056 -0.426835 -0.428613 -0.430392 -0.43217 -0.433949 -0.435727 -0.437504 -0.439282 -0.441059 -0.442836 -0.444613 -0.446389 -0.448165 -0.449941 -0.451716 -0.453491 -0.455266 -0.45704 -0.458814 -0.460588 -0.462361 -0.464133 -0.465905 -0.467677 -0.469448 -0.471218 -0.472989 -0.474758 -0.476527 -0.478296 -0.480063 -0.481831 -0.483597 -0.485363 -0.487129 -0.488893 -0.490658 -0.492421 -0.494184 -0.495946 -0.497707 -0.499467 -0.501227 -0.502986 -0.504744 -0.506502 -0.508258 -0.510014 -0.511769 -0.513523 -0.515276 -0.517029 -0.51878 -0.520531 -0.52228 -0.524029 -0.525777 -0.527523 -0.529269 -0.531014 -0.532758 -0.5345 -0.536242 -0.537983 -0.539722 -0.54146 -0.543198 -0.544934 -0.546669 -0.548403 -0.550136 -0.551867 -0.553597 -0.555327 -0.557055 -0.558781 -0.560507 -0.562231 -0.563954 -0.565675 -0.567395 -0.569114 -0.570832 -0.572548 -0.574263 -0.575977 -0.577689 -0.579399 -0.581108 -0.582816 -0.584522 -0.586227 -0.587931 -0.589632 -0.591333 -0.593032 -0.594729 -0.596424 -0.598118 -0.599811 -0.601502 -0.603191 -0.604879 -0.606565 -0.608249 -0.609931 -0.611612 -0.613291 -0.614969 -0.616645 -0.618318 -0.619991 -0.621661 -0.62333 -0.624996 -0.626661 -0.628324 -0.629985 -0.631645 -0.633302 -0.634958 -0.636611 -0.638263 -0.639913 -0.64156 -0.643206 -0.64485 -0.646492 -0.648131 -0.649769 -0.651405 -0.653038 -0.65467 -0.656299 -0.657926 -0.659551 -0.661174 -0.662795 -0.664413 -0.66603 -0.667644 -0.669256 -0.670866 -0.672473 -0.674078 -0.675681 -0.677282 -0.67888 -0.680476 -0.68207 -0.683661 -0.68525 -0.686837 -0.688421 -0.690003 -0.691582 -0.693159 -0.694733 -0.696305 -0.697875 -0.699442 -0.701006 -0.702568 -0.704127 -0.705684 -0.707238 -0.70879 -0.710339 -0.711885 -0.713429 -0.71497 -0.716509 -0.718045 -0.719578 -0.721108 -0.722636 -0.724161 -0.725683 -0.727202 -0.728719 -0.730233 -0.731744 -0.733252 -0.734757 -0.73626 -0.737759 -0.739256 -0.74075 -0.742241 -0.743729 -0.745214 -0.746696 -0.748175 -0.749652 -0.751125 -0.752595 -0.754062 -0.755526 -0.756987 -0.758445 -0.7599 -0.761352 -0.762801 -0.764246 -0.765689 -0.767128 -0.768564 -0.769997 -0.771427 -0.772853 -0.774277 -0.775697 -0.777114 -0.778527 -0.779937 -0.781344 -0.782748 -0.784148 -0.785545 -0.786939 -0.788329 -0.789716 -0.7911 -0.79248 -0.793856 -0.79523 -0.796599 -0.797966 -0.799329 -0.800688 -0.802044 -0.803396 -0.804745 -0.80609 -0.807432 -0.80877 -0.810105 -0.811436 -0.812763 -0.814087 -0.815407 -0.816723 -0.818036 -0.819345 -0.82065 -0.821952 -0.82325 -0.824544 -0.825835 -0.827121 -0.828404 -0.829683 -0.830959 -0.83223 -0.833498 -0.834762 -0.836022 -0.837278 -0.83853 -0.839778 -0.841023 -0.842263 -0.8435 -0.844732 -0.845961 -0.847186 -0.848406 -0.849623 -0.850836 -0.852045 -0.853249 -0.85445 -0.855646 -0.856839 -0.858027 -0.859211 -0.860391 -0.861567 -0.862739 -0.863907 -0.86507 -0.86623 -0.867385 -0.868536 -0.869682 -0.870825 -0.871963 -0.873097 -0.874227 -0.875352 -0.876473 -0.87759 -0.878703 -0.879811 -0.880915 -0.882014 -0.883109 -0.8842 -0.885287 -0.886369 -0.887446 -0.888519 -0.889588 -0.890652 -0.891712 -0.892767 -0.893818 -0.894864 -0.895906 -0.896943 -0.897976 -0.899004 -0.900028 -0.901047 -0.902061 -0.903071 -0.904076 -0.905077 -0.906073 -0.907064 -0.908051 -0.909033 -0.91001 -0.910983 -0.911951 -0.912914 -0.913873 -0.914826 -0.915775 -0.91672 -0.917659 -0.918594 -0.919524 -0.920449 -0.921369 -0.922285 -0.923196 -0.924101 -0.925002 -0.925898 -0.92679 -0.927676 -0.928558 -0.929434 -0.930306 -0.931172 -0.932034 -0.932891 -0.933743 -0.934589 -0.935431 -0.936268 -0.9371 -0.937927 -0.938749 -0.939565 -0.940377 -0.941184 -0.941985 -0.942782 -0.943573 -0.944359 -0.945141 -0.945917 -0.946688 -0.947454 -0.948214 -0.94897 -0.94972 -0.950465 -0.951205 -0.95194 -0.952669 -0.953394 -0.954113 -0.954827 -0.955535 -0.956239 -0.956937 -0.957629 -0.958317 -0.958999 -0.959676 -0.960348 -0.961014 -0.961675 -0.962331 -0.962981 -0.963625 -0.964265 -0.964899 -0.965528 -0.966151 -0.966769 -0.967382 -0.967989 -0.96859 -0.969187 -0.969777 -0.970363 -0.970942 -0.971517 -0.972086 -0.972649 -0.973207 -0.973759 -0.974306 -0.974847 -0.975383 -0.975913 -0.976438 -0.976957 -0.977471 -0.977979 -0.978481 -0.978978 -0.979469 -0.979954 -0.980434 -0.980909 -0.981377 -0.98184 -0.982298 -0.982749 -0.983195 -0.983636 -0.98407 -0.9845 -0.984923 -0.98534 -0.985752 -0.986158 -0.986559 -0.986954 -0.987343 -0.987726 -0.988103 -0.988475 -0.988841 -0.989201 -0.989555 -0.989904 -0.990247 -0.990584 -0.990915 -0.99124 -0.99156 -0.991874 -0.992182 -0.992483 -0.99278 -0.99307 -0.993354 -0.993633 -0.993906 -0.994172 -0.994433 -0.994688 -0.994938 -0.995181 -0.995418 -0.995649 -0.995875 -0.996094 -0.996308 -0.996516 -0.996717 -0.996913 -0.997103 -0.997287 -0.997465 -0.997636 -0.997802 -0.997962 -0.998116 -0.998264 -0.998406 -0.998542 -0.998672 -0.998795 -0.998913 -0.999025 -0.999131 -0.99923 -0.999324 -0.999412 -0.999493 -0.999569 -0.999638 -0.999701 -0.999759 -0.99981 -0.999855 -0.999894 -0.999927 -0.999954 -0.999974 -0.999989 -0.999998 -1 -0.999996 -0.999986 -0.99997 -0.999948 -0.99992 -0.999886 -0.999845 -0.999798 -0.999746 -0.999687 -0.999622 -0.99955 -0.999473 -0.999389 -0.999299 -0.999203 -0.999101 -0.998993 -0.998878 -0.998758 -0.998631 -0.998497 -0.998358 -0.998213 -0.998061 -0.997903 -0.997739 -0.997569 -0.997392 -0.997209 -0.99702 -0.996825 -0.996624 -0.996416 -0.996202 -0.995982 -0.995755 -0.995523 -0.995284 -0.995039 -0.994787 -0.99453 -0.994266 -0.993996 -0.99372 -0.993437 -0.993148 -0.992853 -0.992552 -0.992244 -0.99193 -0.99161 -0.991283 -0.990951 -0.990612 -0.990266 -0.989915 -0.989557 -0.989193 -0.988822 -0.988446 -0.988063 -0.987674 -0.987278 -0.986876 -0.986468 -0.986054 -0.985633 -0.985206 -0.984773 -0.984334 -0.983888 -0.983436 -0.982978 -0.982513 -0.982042 -0.981565 -0.981081 -0.980592 -0.980096 -0.979593 -0.979085 -0.97857 -0.978049 -0.977521 -0.976987 -0.976447 -0.975901 -0.975348 -0.974789 -0.974224 -0.973652 -0.973074 -0.97249 -0.9719 -0.971303 -0.9707 -0.970091 -0.969476 -0.968854 -0.968226 -0.967591 -0.966951 -0.966304 -0.965651 -0.964991 -0.964325 -0.963653 -0.962975 -0.962291 -0.9616 -0.960903 -0.960199 -0.95949 -0.958774 -0.958052 -0.957323 -0.956589 -0.955848 -0.955101 -0.954347 -0.953588 -0.952822 -0.95205 -0.951271 -0.950487 -0.949696 -0.948899 -0.948096 -0.947286 -0.94647 -0.945648 -0.94482 -0.943986 -0.943145 -0.942298 -0.941446 -0.940586 -0.939721 -0.938849 -0.937971 -0.937087 -0.936197 -0.935301 -0.934398 -0.933489 -0.932574 -0.931653 -0.930726 -0.929792 -0.928853 -0.927907 -0.926955 -0.925997 -0.925033 -0.924063 -0.923086 -0.922103 -0.921115 -0.92012 -0.919119 -0.918112 -0.917098 -0.916079 -0.915054 -0.914022 -0.912984 -0.911941 -0.910891 -0.909835 -0.908773 -0.907705 -0.906631 -0.90555 -0.904464 -0.903372 -0.902274 -0.901169 -0.900059 -0.898942 -0.89782 -0.896691 -0.895557 -0.894416 -0.89327 -0.892117 -0.890959 -0.889794 -0.888624 -0.887447 -0.886265 -0.885076 -0.883882 -0.882682 -0.881475 -0.880263 -0.879045 -0.877821 -0.876591 -0.875355 -0.874113 -0.872865 -0.871612 -0.870352 -0.869087 -0.867815 -0.866538 -0.865255 -0.863966 -0.862672 -0.861371 -0.860065 -0.858752 -0.857434 -0.85611 -0.854781 -0.853445 -0.852104 -0.850757 -0.849404 -0.848045 -0.846681 -0.845311 -0.843935 -0.842553 -0.841166 -0.839773 -0.838374 -0.836969 -0.835559 -0.834143 -0.832721 -0.831294 -0.829861 -0.828422 -0.826978 -0.825528 -0.824072 -0.822611 -0.821144 -0.819672 -0.818194 -0.81671 -0.81522 -0.813726 -0.812225 -0.810719 -0.809208 -0.807691 -0.806168 -0.80464 -0.803106 -0.801567 -0.800022 -0.798472 -0.796916 -0.795355 -0.793788 -0.792216 -0.790639 -0.789056 -0.787467 -0.785873 -0.784274 -0.78267 -0.78106 -0.779444 -0.777823 -0.776197 -0.774566 -0.772929 -0.771287 -0.769639 -0.767986 -0.766328 -0.764665 -0.762996 -0.761322 -0.759643 -0.757959 -0.756269 -0.754574 -0.752874 -0.751168 -0.749458 -0.747742 -0.746021 -0.744295 -0.742564 -0.740827 -0.739086 -0.737339 -0.735587 -0.73383 -0.732068 -0.730301 -0.728529 -0.726752 -0.72497 -0.723182 -0.72139 -0.719593 -0.71779 -0.715983 -0.714171 -0.712353 -0.710531 -0.708704 -0.706872 -0.705035 -0.703193 -0.701346 -0.699494 -0.697638 -0.695776 -0.69391 -0.692039 -0.690163 -0.688282 -0.686396 -0.684506 -0.682611 -0.680711 -0.678806 -0.676897 -0.674983 -0.673064 -0.67114 -0.669212 -0.667279 -0.665341 -0.663399 -0.661452 -0.6595 -0.657544 -0.655583 -0.653618 -0.651648 -0.649673 -0.647694 -0.645711 -0.643723 -0.64173 -0.639733 -0.637731 -0.635725 -0.633714 -0.631699 -0.62968 -0.627656 -0.625627 -0.623595 -0.621558 -0.619516 -0.61747 -0.61542 -0.613366 -0.611307 -0.609244 -0.607176 -0.605105 -0.603029 -0.600949 -0.598864 -0.596776 -0.594683 -0.592586 -0.590485 -0.588379 -0.58627 -0.584156 -0.582038 -0.579917 -0.577791 -0.575661 -0.573526 -0.571388 -0.569246 -0.5671 -0.56495 -0.562796 -0.560637 -0.558475 -0.556309 -0.554139 -0.551965 -0.549788 -0.547606 -0.54542 -0.543231 -0.541038 -0.53884 -0.53664 -0.534435 -0.532226 -0.530014 -0.527798 -0.525578 -0.523355 -0.521128 -0.518897 -0.516662 -0.514424 -0.512182 -0.509937 -0.507688 -0.505435 -0.503179 -0.500919 -0.498655 -0.496388 -0.494118 -0.491844 -0.489566 -0.487285 -0.485001; #A 8000 -0.482713 -0.480422 -0.478127 -0.475829 -0.473528 -0.471223 -0.468915 -0.466603 -0.464288 -0.46197 -0.459649 -0.457324 -0.454996 -0.452665 -0.45033 -0.447993 -0.445652 -0.443308 -0.440961 -0.438611 -0.436257 -0.433901 -0.431541 -0.429179 -0.426813 -0.424444 -0.422072 -0.419698 -0.41732 -0.414939 -0.412555 -0.410169 -0.407779 -0.405387 -0.402991 -0.400593 -0.398192 -0.395788 -0.393381 -0.390972 -0.388559 -0.386144 -0.383726 -0.381306 -0.378882 -0.376456 -0.374027 -0.371596 -0.369162 -0.366725 -0.364286 -0.361844 -0.359399 -0.356952 -0.354503 -0.35205 -0.349596 -0.347139 -0.344679 -0.342217 -0.339752 -0.337285 -0.334816 -0.332344 -0.32987 -0.327393 -0.324914 -0.322433 -0.319949 -0.317464 -0.314976 -0.312485 -0.309993 -0.307498 -0.305001 -0.302502 -0.3 -0.297497 -0.294991 -0.292483 -0.289973 -0.287462 -0.284948 -0.282432 -0.279913 -0.277393 -0.274871 -0.272347 -0.269821 -0.267293 -0.264764 -0.262232 -0.259698 -0.257163 -0.254626 -0.252086 -0.249546 -0.247003 -0.244458 -0.241912 -0.239364 -0.236814 -0.234263 -0.23171 -0.229155 -0.226599 -0.224041 -0.221481 -0.21892 -0.216357 -0.213793 -0.211227 -0.20866 -0.206091 -0.20352 -0.200948 -0.198375 -0.195801 -0.193224 -0.190647 -0.188068 -0.185488 -0.182906 -0.180323 -0.177739 -0.175154 -0.172567 -0.169979 -0.16739 -0.1648 -0.162208 -0.159616 -0.157022 -0.154427 -0.151831 -0.149234 -0.146635 -0.144036 -0.141436 -0.138834 -0.136232 -0.133629 -0.131024 -0.128419 -0.125813 -0.123206 -0.120598 -0.117989 -0.115379 -0.112769 -0.110158 -0.107546 -0.104933 -0.102319 -0.0997047 -0.0970896 -0.0944739 -0.0918574 -0.0892403 -0.0866226 -0.0840042 -0.0813852 -0.0787656 -0.0761455 -0.0735248 -0.0709036 -0.0682819 -0.0656597 -0.063037 -0.0604139 -0.0577903 -0.0551663 -0.0525419 -0.0499172 -0.047292 -0.0446666 -0.0420408 -0.0394147 -0.0367883 -0.0341617 -0.0315348 -0.0289077 -0.0262804 -0.0236529 -0.0210252 -0.0183974 -0.0157695 -0.0131414 -0.0105132 -0.00788498 -0.00525669 -0.00262835; #X coords 0 1 8191 -1 100 70 1; #X restore 188 515 graph; #N canvas 0 22 450 300 (subpatch) 0; #X array window 8192 float 3; #A 0 0 1.47069e-07 5.88274e-07 1.32362e-06 2.3531e-06 3.67671e-06 5.29446e-06 7.20634e-06 9.41236e-06 1.19125e-05 1.47068e-05 1.77952e-05 2.11777e-05 2.48544e-05 2.88252e-05 3.30901e-05 3.76491e-05 4.25022e-05 4.76495e-05 5.30908e-05 5.88263e-05 6.48558e-05 7.11795e-05 7.77973e-05 8.47091e-05 9.1915e-05 9.94151e-05 0.000107209 0.000115297 0.00012368 0.000132356 0.000141326 0.000150591 0.000160149 0.000170002 0.000180148 0.000190589 0.000201323 0.000212352 0.000223675 0.000235291 0.000247202 0.000259407 0.000271905 0.000284698 0.000297784 0.000311165 0.000324839 0.000338808 0.00035307 0.000367626 0.000382477 0.000397621 0.000413059 0.000428791 0.000444816 0.000461136 0.00047775 0.000494657 0.000511858 0.000529353 0.000547142 0.000565225 0.000583602 0.000602272 0.000621236 0.000640494 0.000660046 0.000679891 0.00070003 0.000720463 0.000741189 0.00076221 0.000783524 0.000805131 0.000827033 0.000849228 0.000871716 0.000894498 0.000917574 0.000940944 0.000964607 0.000988563 0.00101281 0.00103736 0.00106219 0.00108732 0.00111275 0.00113847 0.00116448 0.00119078 0.00121738 0.00124427 0.00127146 0.00129894 0.00132671 0.00135477 0.00138313 0.00141178 0.00144073 0.00146996 0.0014995 0.00152932 0.00155944 0.00158985 0.00162055 0.00165155 0.00168284 0.00171443 0.0017463 0.00177847 0.00181094 0.00184369 0.00187674 0.00191009 0.00194372 0.00197765 0.00201187 0.00204639 0.00208119 0.00211629 0.00215169 0.00218737 0.00222335 0.00225962 0.00229619 0.00233304 0.00237019 0.00240764 0.00244537 0.0024834 0.00252172 0.00256033 0.00259924 0.00263844 0.00267793 0.00271771 0.00275779 0.00279816 0.00283882 0.00287978 0.00292102 0.00296256 0.00300439 0.00304651 0.00308893 0.00313164 0.00317464 0.00321793 0.00326152 0.00330539 0.00334956 0.00339403 0.00343878 0.00348382 0.00352916 0.00357479 0.00362071 0.00366693 0.00371343 0.00376023 0.00380732 0.0038547 0.00390238 0.00395034 0.0039986 0.00404715 0.00409599 0.00414512 0.00419455 0.00424426 0.00429427 0.00434457 0.00439516 0.00444604 0.00449722 0.00454868 0.00460044 0.00465249 0.00470483 0.00475746 0.00481038 0.00486359 0.0049171 0.00497089 0.00502498 0.00507936 0.00513403 0.00518899 0.00524424 0.00529979 0.00535562 0.00541175 0.00546816 0.00552487 0.00558187 0.00563915 0.00569673 0.0057546 0.00581276 0.00587122 0.00592996 0.00598899 0.00604832 0.00610793 0.00616783 0.00622803 0.00628851 0.00634929 0.00641036 0.00647171 0.00653336 0.0065953 0.00665753 0.00672004 0.00678285 0.00684595 0.00690934 0.00697302 0.00703699 0.00710125 0.00716579 0.00723063 0.00729576 0.00736118 0.00742689 0.00749288 0.00755917 0.00762575 0.00769262 0.00775977 0.00782722 0.00789495 0.00796298 0.00803129 0.0080999 0.00816879 0.00823797 0.00830744 0.00837721 0.00844726 0.0085176 0.00858822 0.00865914 0.00873035 0.00880184 0.00887363 0.0089457 0.00901807 0.00909072 0.00916366 0.00923689 0.0093104 0.00938421 0.0094583 0.00953269 0.00960736 0.00968232 0.00975757 0.00983311 0.00990893 0.00998505 0.0100614 0.0101381 0.0102151 0.0102924 0.0103699 0.0104478 0.0105259 0.0106043 0.010683 0.010762 0.0108413 0.0109209 0.0110007 0.0110809 0.0111613 0.011242 0.011323 0.0114043 0.0114859 0.0115678 0.01165 0.0117324 0.0118151 0.0118982 0.0119815 0.0120651 0.0121489 0.0122331 0.0123176 0.0124023 0.0124873 0.0125726 0.0126582 0.0127441 0.0128303 0.0129168 0.0130035 0.0130906 0.0131779 0.0132655 0.0133534 0.0134416 0.01353 0.0136188 0.0137078 0.0137971 0.0138868 0.0139766 0.0140668 0.0141573 0.0142481 0.0143391 0.0144304 0.014522 0.0146139 0.0147061 0.0147986 0.0148913 0.0149844 0.0150777 0.0151713 0.0152652 0.0153594 0.0154538 0.0155486 0.0156436 0.015739 0.0158346 0.0159304 0.0160266 0.0161231 0.0162198 0.0163169 0.0164142 0.0165118 0.0166096 0.0167078 0.0168063 0.016905 0.017004 0.0171033 0.0172029 0.0173028 0.0174029 0.0175034 0.0176041 0.0177051 0.0178064 0.017908 0.0180098 0.018112 0.0182144 0.0183171 0.0184201 0.0185234 0.0186269 0.0187308 0.0188349 0.0189393 0.019044 0.019149 0.0192542 0.0193598 0.0194656 0.0195717 0.0196781 0.0197847 0.0198917 0.0199989 0.0201064 0.0202142 0.0203223 0.0204307 0.0205393 0.0206483 0.0207575 0.020867 0.0209767 0.0210868 0.0211971 0.0213077 0.0214186 0.0215298 0.0216413 0.021753 0.0218651 0.0219774 0.02209 0.0222028 0.022316 0.0224294 0.0225431 0.0226571 0.0227714 0.022886 0.0230008 0.0231159 0.0232313 0.023347 0.0234629 0.0235792 0.0236957 0.0238125 0.0239296 0.0240469 0.0241646 0.0242825 0.0244007 0.0245192 0.0246379 0.024757 0.0248763 0.0249959 0.0251158 0.0252359 0.0253563 0.0254771 0.0255981 0.0257193 0.0258409 0.0259627 0.0260848 0.0262072 0.0263299 0.0264528 0.026576 0.0266995 0.0268233 0.0269474 0.0270717 0.0271963 0.0273212 0.0274464 0.0275719 0.0276976 0.0278236 0.0279499 0.0280764 0.0282033 0.0283304 0.0284578 0.0285855 0.0287134 0.0288416 0.0289701 0.0290989 0.029228 0.0293573 0.0294869 0.0296168 0.029747 0.0298774 0.0300081 0.0301391 0.0302704 0.0304019 0.0305338 0.0306659 0.0307982 0.0309309 0.0310638 0.031197 0.0313305 0.0314642 0.0315983 0.0317326 0.0318672 0.032002 0.0321372 0.0322726 0.0324082 0.0325442 0.0326804 0.0328169 0.0329537 0.0330908 0.0332281 0.0333657 0.0335036 0.0336418 0.0337802 0.0339189 0.0340579 0.0341971 0.0343366 0.0344764 0.0346165 0.0347569 0.0348975 0.0350384 0.0351796 0.035321 0.0354627 0.0356047 0.035747 0.0358895 0.0360323 0.0361754 0.0363187 0.0364624 0.0366063 0.0367504 0.0368949 0.0370396 0.0371846 0.0373298 0.0374754 0.0376212 0.0377673 0.0379136 0.0380602 0.0382071 0.0383543 0.0385017 0.0386494 0.0387974 0.0389457 0.0390942 0.039243 0.039392 0.0395414 0.039691 0.0398409 0.039991 0.0401414 0.0402921 0.0404431 0.0405943 0.0407458 0.0408976 0.0410496 0.0412019 0.0413545 0.0415074 0.0416605 0.0418139 0.0419675 0.0421214 0.0422756 0.0424301 0.0425848 0.0427398 0.0428951 0.0430507 0.0432065 0.0433626 0.0435189 0.0436755 0.0438324 0.0439896 0.044147 0.0443047 0.0444626 0.0446209 0.0447794 0.0449381 0.0450971 0.0452564 0.045416 0.0455758 0.0457359 0.0458963 0.0460569 0.0462178 0.046379 0.0465404 0.0467021 0.0468641 0.0470264 0.0471889 0.0473516 0.0475147 0.047678 0.0478415 0.0480054 0.0481695 0.0483338 0.0484984 0.0486633 0.0488285 0.0489939 0.0491596 0.0493256 0.0494918 0.0496583 0.049825 0.0499921 0.0501593 0.0503269 0.0504947 0.0506628 0.0508311 0.0509997 0.0511686 0.0513377 0.0515071 0.0516768 0.0518467 0.0520169 0.0521873 0.052358 0.052529 0.0527003 0.0528718 0.0530435 0.0532156 0.0533879 0.0535604 0.0537332 0.0539063 0.0540796 0.0542533 0.0544271 0.0546012 0.0547756 0.0549503 0.0551252 0.0553004 0.0554758 0.0556515 0.0558275 0.0560037 0.0561802 0.0563569 0.0565339 0.0567112 0.0568887 0.0570665 0.0572446 0.0574229 0.0576015 0.0577803 0.0579594 0.0581387 0.0583183 0.0584982 0.0586783 0.0588587 0.0590394 0.0592203 0.0594014 0.0595829 0.0597646 0.0599465 0.0601287 0.0603112 0.0604939 0.0606769 0.0608601 0.0610436 0.0612274 0.0614114 0.0615956 0.0617802 0.061965 0.06215 0.0623353 0.0625209 0.0627067 0.0628927 0.0630791 0.0632657 0.0634525 0.0636396 0.063827 0.0640146 0.0642025 0.0643906 0.064579 0.0647676 0.0649565 0.0651457 0.0653351 0.0655247 0.0657146 0.0659048 0.0660953 0.0662859 0.0664769 0.0666681 0.0668595 0.0670512 0.0672432 0.0674354 0.0676279 0.0678206 0.0680136 0.0682068 0.0684003 0.068594 0.068788 0.0689823 0.0691768 0.0693715 0.0695665 0.0697618 0.0699573 0.0701531 0.0703491 0.0705454 0.0707419 0.0709387 0.0711357 0.071333 0.0715305 0.0717283 0.0719263 0.0721246 0.0723232 0.072522 0.072721 0.0729203 0.0731198 0.0733197 0.0735197 0.07372 0.0739205 0.0741213 0.0743224 0.0745237 0.0747253 0.0749271 0.0751291 0.0753314 0.075534 0.0757368 0.0759398 0.0761431 0.0763467 0.0765505 0.0767545 0.0769588 0.0771634 0.0773682 0.0775732 0.0777785 0.077984 0.0781898 0.0783959 0.0786022 0.0788087 0.0790155 0.0792225 0.0794298 0.0796373 0.0798451 0.0800531 0.0802614 0.0804699 0.0806786 0.0808876 0.0810969 0.0813064 0.0815161 0.0817261 0.0819364 0.0821469 0.0823576 0.0825686 0.0827798 0.0829912 0.083203 0.0834149 0.0836271 0.0838396 0.0840523 0.0842652 0.0844784 0.0846918 0.0849055 0.0851194 0.0853335 0.0855479 0.0857626 0.0859775 0.0861926 0.086408 0.0866236 0.0868395 0.0870556 0.0872719 0.0874885 0.0877054 0.0879224 0.0881397 0.0883573 0.0885751 0.0887932 0.0890114 0.08923 0.0894487 0.0896678 0.089887 0.0901065 0.0903262 0.0905462 0.0907664 0.0909869 0.0912076 0.0914285 0.0916497 0.0918711 0.0920928 0.0923147 0.0925368 0.0927592 0.0929818 0.0932047 0.0934278 0.0936511 0.0938747 0.0940985 0.0943226 0.0945469 0.0947714 0.0949962 0.0952212 0.0954464 0.0956719 0.0958976 0.0961236 0.0963498 0.0965762 0.0968029 0.0970298 0.097257 0.0974843 0.097712 0.0979398 0.0981679 0.0983962 0.0986248 0.0988536 0.0990826 0.0993119 0.0995414 0.0997712 0.100001 0.100231 0.100462 0.100693 0.100923 0.101155 0.101386 0.101618 0.101849 0.102082 0.102314 0.102546 0.102779 0.103012 0.103246 0.103479 0.103713 0.103947 0.104181 0.104415 0.10465 0.104885 0.10512 0.105355 0.105591 0.105827 0.106063 0.106299 0.106536 0.106772 0.107009 0.107247 0.107484 0.107722 0.10796 0.108198 0.108436 0.108675 0.108914 0.109153 0.109392 0.109631 0.109871 0.110111 0.110351 0.110592 0.110832 0.111073 0.111314 0.111556 0.111797 0.112039 0.112281 0.112523 0.112766 0.113009 0.113252 0.113495 0.113738 0.113982 0.114226 0.11447 0.114714 0.114959 0.115203 0.115448 0.115694 0.115939 0.116185 0.116431 0.116677 0.116923 0.11717 0.117416 0.117663 0.117911 0.118158 0.118406 0.118654 0.118902 0.11915 0.119399 0.119648 0.119897 0.120146 0.120395 0.120645 0.120895 0.121145 0.121396 0.121646 0.121897 0.122148 0.122399 0.122651 0.122903 0.123154 0.123407 0.123659 0.123912 0.124164 0.124417 0.124671 0.124924 0.125178 0.125432 0.125686 0.12594 0.126195 0.12645 0.126705 0.12696 0.127215 0.127471 0.127727 0.127983 0.128239 0.128496 0.128753 0.12901 0.129267 0.129524 0.129782 0.13004 0.130298 0.130556 0.130815 0.131074 0.131333 0.131592 0.131851 0.132111 0.132371 0.132631 0.132891 0.133151 0.133412 0.133673 0.133934 0.134195 0.134457 0.134719 0.134981 0.135243 0.135505 0.135768 0.136031 0.136294 0.136557 0.13682 0.137084 0.137348 0.137612 0.137876 0.138141 0.138406 0.138671 0.138936 0.139201 0.139467 0.139733; #A 1000 0.139999 0.140265 0.140531 0.140798 0.141065 0.141332 0.141599 0.141867 0.142135 0.142403 0.142671 0.142939 0.143208 0.143476 0.143745 0.144015 0.144284 0.144554 0.144823 0.145093 0.145364 0.145634 0.145905 0.146176 0.146447 0.146718 0.146989 0.147261 0.147533 0.147805 0.148077 0.14835 0.148623 0.148896 0.149169 0.149442 0.149716 0.149989 0.150263 0.150538 0.150812 0.151086 0.151361 0.151636 0.151911 0.152187 0.152462 0.152738 0.153014 0.15329 0.153567 0.153844 0.15412 0.154397 0.154675 0.154952 0.15523 0.155508 0.155786 0.156064 0.156342 0.156621 0.1569 0.157179 0.157458 0.157738 0.158017 0.158297 0.158577 0.158857 0.159138 0.159419 0.159699 0.159981 0.160262 0.160543 0.160825 0.161107 0.161389 0.161671 0.161954 0.162236 0.162519 0.162802 0.163086 0.163369 0.163653 0.163936 0.164221 0.164505 0.164789 0.165074 0.165359 0.165644 0.165929 0.166214 0.1665 0.166786 0.167072 0.167358 0.167645 0.167931 0.168218 0.168505 0.168792 0.169079 0.169367 0.169655 0.169943 0.170231 0.170519 0.170808 0.171097 0.171386 0.171675 0.171964 0.172254 0.172543 0.172833 0.173123 0.173414 0.173704 0.173995 0.174286 0.174577 0.174868 0.175159 0.175451 0.175743 0.176035 0.176327 0.176619 0.176912 0.177205 0.177498 0.177791 0.178084 0.178378 0.178671 0.178965 0.179259 0.179554 0.179848 0.180143 0.180438 0.180733 0.181028 0.181323 0.181619 0.181915 0.182211 0.182507 0.182803 0.1831 0.183397 0.183694 0.183991 0.184288 0.184585 0.184883 0.185181 0.185479 0.185777 0.186076 0.186374 0.186673 0.186972 0.187271 0.18757 0.18787 0.188169 0.188469 0.188769 0.18907 0.18937 0.189671 0.189971 0.190272 0.190573 0.190875 0.191176 0.191478 0.19178 0.192082 0.192384 0.192687 0.192989 0.193292 0.193595 0.193898 0.194201 0.194505 0.194809 0.195112 0.195416 0.195721 0.196025 0.19633 0.196634 0.196939 0.197244 0.19755 0.197855 0.198161 0.198467 0.198773 0.199079 0.199385 0.199692 0.199998 0.200305 0.200612 0.20092 0.201227 0.201535 0.201842 0.20215 0.202458 0.202767 0.203075 0.203384 0.203693 0.204002 0.204311 0.20462 0.20493 0.205239 0.205549 0.205859 0.206169 0.20648 0.20679 0.207101 0.207412 0.207723 0.208034 0.208346 0.208657 0.208969 0.209281 0.209593 0.209905 0.210218 0.21053 0.210843 0.211156 0.211469 0.211782 0.212096 0.21241 0.212723 0.213037 0.213351 0.213666 0.21398 0.214295 0.21461 0.214925 0.21524 0.215555 0.215871 0.216186 0.216502 0.216818 0.217134 0.21745 0.217767 0.218084 0.2184 0.218717 0.219034 0.219352 0.219669 0.219987 0.220305 0.220623 0.220941 0.221259 0.221577 0.221896 0.222215 0.222534 0.222853 0.223172 0.223492 0.223811 0.224131 0.224451 0.224771 0.225091 0.225412 0.225732 0.226053 0.226374 0.226695 0.227016 0.227338 0.227659 0.227981 0.228303 0.228625 0.228947 0.229269 0.229592 0.229914 0.230237 0.23056 0.230883 0.231206 0.23153 0.231854 0.232177 0.232501 0.232825 0.233149 0.233474 0.233798 0.234123 0.234448 0.234773 0.235098 0.235424 0.235749 0.236075 0.2364 0.236726 0.237052 0.237379 0.237705 0.238032 0.238358 0.238685 0.239012 0.23934 0.239667 0.239994 0.240322 0.24065 0.240978 0.241306 0.241634 0.241963 0.242291 0.24262 0.242949 0.243278 0.243607 0.243936 0.244266 0.244595 0.244925 0.245255 0.245585 0.245915 0.246246 0.246576 0.246907 0.247237 0.247568 0.2479 0.248231 0.248562 0.248894 0.249225 0.249557 0.249889 0.250221 0.250554 0.250886 0.251219 0.251551 0.251884 0.252217 0.252551 0.252884 0.253217 0.253551 0.253885 0.254219 0.254553 0.254887 0.255221 0.255556 0.25589 0.256225 0.25656 0.256895 0.25723 0.257565 0.257901 0.258236 0.258572 0.258908 0.259244 0.25958 0.259917 0.260253 0.26059 0.260926 0.261263 0.2616 0.261938 0.262275 0.262612 0.26295 0.263288 0.263625 0.263963 0.264302 0.26464 0.264978 0.265317 0.265656 0.265994 0.266333 0.266672 0.267012 0.267351 0.267691 0.26803 0.26837 0.26871 0.26905 0.26939 0.269731 0.270071 0.270412 0.270752 0.271093 0.271434 0.271776 0.272117 0.272458 0.2728 0.273141 0.273483 0.273825 0.274167 0.27451 0.274852 0.275194 0.275537 0.27588 0.276223 0.276566 0.276909 0.277252 0.277595 0.277939 0.278283 0.278626 0.27897 0.279314 0.279659 0.280003 0.280347 0.280692 0.281037 0.281381 0.281726 0.282071 0.282417 0.282762 0.283107 0.283453 0.283799 0.284145 0.284491 0.284837 0.285183 0.285529 0.285876 0.286222 0.286569 0.286916 0.287263 0.28761 0.287957 0.288305 0.288652 0.289 0.289348 0.289695 0.290043 0.290392 0.29074 0.291088 0.291437 0.291785 0.292134 0.292483 0.292832 0.293181 0.29353 0.293879 0.294229 0.294578 0.294928 0.295278 0.295628 0.295978 0.296328 0.296678 0.297029 0.297379 0.29773 0.298081 0.298432 0.298783 0.299134 0.299485 0.299836 0.300188 0.300539 0.300891 0.301243 0.301595 0.301947 0.302299 0.302652 0.303004 0.303357 0.303709 0.304062 0.304415 0.304768 0.305121 0.305474 0.305827 0.306181 0.306534 0.306888 0.307242 0.307596 0.30795 0.308304 0.308658 0.309013 0.309367 0.309722 0.310076 0.310431 0.310786 0.311141 0.311496 0.311852 0.312207 0.312562 0.312918 0.313274 0.313629 0.313985 0.314341 0.314698 0.315054 0.31541 0.315767 0.316123 0.31648 0.316837 0.317194 0.317551 0.317908 0.318265 0.318622 0.31898 0.319337 0.319695 0.320052 0.32041 0.320768 0.321126 0.321485 0.321843 0.322201 0.32256 0.322918 0.323277 0.323636 0.323995 0.324354 0.324713 0.325072 0.325431 0.325791 0.32615 0.32651 0.32687 0.327229 0.327589 0.327949 0.328309 0.32867 0.32903 0.32939 0.329751 0.330112 0.330472 0.330833 0.331194 0.331555 0.331916 0.332277 0.332639 0.333 0.333362 0.333723 0.334085 0.334447 0.334809 0.335171 0.335533 0.335895 0.336257 0.33662 0.336982 0.337345 0.337708 0.33807 0.338433 0.338796 0.339159 0.339522 0.339886 0.340249 0.340612 0.340976 0.34134 0.341703 0.342067 0.342431 0.342795 0.343159 0.343523 0.343888 0.344252 0.344616 0.344981 0.345346 0.34571 0.346075 0.34644 0.346805 0.34717 0.347535 0.347901 0.348266 0.348631 0.348997 0.349363 0.349728 0.350094 0.35046 0.350826 0.351192 0.351558 0.351925 0.352291 0.352657 0.353024 0.35339 0.353757 0.354124 0.354491 0.354858 0.355225 0.355592 0.355959 0.356326 0.356694 0.357061 0.357429 0.357796 0.358164 0.358532 0.3589 0.359268 0.359636 0.360004 0.360372 0.36074 0.361109 0.361477 0.361845 0.362214 0.362583 0.362952 0.36332 0.363689 0.364058 0.364427 0.364797 0.365166 0.365535 0.365905 0.366274 0.366644 0.367013 0.367383 0.367753 0.368123 0.368493 0.368863 0.369233 0.369603 0.369973 0.370344 0.370714 0.371084 0.371455 0.371826 0.372196 0.372567 0.372938 0.373309 0.37368 0.374051 0.374422 0.374793 0.375165 0.375536 0.375908 0.376279 0.376651 0.377022 0.377394 0.377766 0.378138 0.37851 0.378882 0.379254 0.379626 0.379998 0.380371 0.380743 0.381116 0.381488 0.381861 0.382233 0.382606 0.382979 0.383352 0.383725 0.384098 0.384471 0.384844 0.385217 0.385591 0.385964 0.386337 0.386711 0.387084 0.387458 0.387832 0.388205 0.388579 0.388953 0.389327 0.389701 0.390075 0.390449 0.390824 0.391198 0.391572 0.391947 0.392321 0.392696 0.39307 0.393445 0.39382 0.394194 0.394569 0.394944 0.395319 0.395694 0.396069 0.396444 0.39682 0.397195 0.39757 0.397946 0.398321 0.398696 0.399072 0.399448 0.399823 0.400199 0.400575 0.400951 0.401327 0.401703 0.402079 0.402455 0.402831 0.403207 0.403583 0.40396 0.404336 0.404713 0.405089 0.405466 0.405842 0.406219 0.406596 0.406972 0.407349 0.407726 0.408103 0.40848 0.408857 0.409234 0.409611 0.409989 0.410366 0.410743 0.41112 0.411498 0.411875 0.412253 0.41263 0.413008 0.413386 0.413763 0.414141 0.414519 0.414897 0.415275 0.415653 0.416031 0.416409 0.416787 0.417165 0.417543 0.417922 0.4183 0.418678 0.419057 0.419435 0.419814 0.420192 0.420571 0.42095 0.421328 0.421707 0.422086 0.422465 0.422844 0.423222 0.423601 0.42398 0.424359 0.424739 0.425118 0.425497 0.425876 0.426255 0.426635 0.427014 0.427394 0.427773 0.428152 0.428532 0.428912 0.429291 0.429671 0.430051 0.43043 0.43081 0.43119 0.43157 0.43195 0.43233 0.43271 0.43309 0.43347 0.43385 0.43423 0.43461 0.43499 0.435371 0.435751 0.436131 0.436512 0.436892 0.437273 0.437653 0.438034 0.438414 0.438795 0.439175 0.439556 0.439937 0.440317 0.440698 0.441079 0.44146 0.441841 0.442222 0.442603 0.442984 0.443365 0.443746 0.444127 0.444508 0.444889 0.44527 0.445651 0.446033 0.446414 0.446795 0.447176 0.447558 0.447939 0.448321 0.448702 0.449084 0.449465 0.449847 0.450228 0.45061 0.450991 0.451373 0.451755 0.452137 0.452518 0.4529 0.453282 0.453664 0.454046 0.454427 0.454809 0.455191 0.455573 0.455955 0.456337 0.456719 0.457101 0.457483 0.457866 0.458248 0.45863 0.459012 0.459394 0.459777 0.460159 0.460541 0.460923 0.461306 0.461688 0.46207 0.462453 0.462835 0.463218 0.4636 0.463983 0.464365 0.464748 0.46513 0.465513 0.465895 0.466278 0.466661 0.467043 0.467426 0.467809 0.468191 0.468574 0.468957 0.46934 0.469722 0.470105 0.470488 0.470871 0.471254 0.471637 0.472019 0.472402 0.472785 0.473168 0.473551 0.473934 0.474317 0.4747 0.475083 0.475466 0.475849 0.476232 0.476615 0.476998 0.477381 0.477765 0.478148 0.478531 0.478914 0.479297 0.47968 0.480064 0.480447 0.48083 0.481213 ; #A 2000 0.481596 0.48198 0.482363 0.482746 0.483129 0.483513 0.483896 0.484279 0.484663 0.485046 0.485429 0.485813 0.486196 0.486579 0.486963 0.487346 0.487729 0.488113 0.488496 0.48888 0.489263 0.489646 0.49003 0.490413 0.490797 0.49118 0.491563 0.491947 0.49233 0.492714 0.493097 0.493481 0.493864 0.494248 0.494631 0.495015 0.495398 0.495782 0.496165 0.496549 0.496932 0.497316 0.497699 0.498083 0.498466 0.49885 0.499233 0.499617 0.5 0.500383 0.500767 0.50115 0.501534 0.501917 0.502301 0.502684 0.503068 0.503451 0.503835 0.504218 0.504602 0.504985 0.505369 0.505752 0.506136 0.506519 0.506903 0.507286 0.50767 0.508053 0.508437 0.50882 0.509203 0.509587 0.50997 0.510354 0.510737 0.51112 0.511504 0.511887 0.512271 0.512654 0.513037 0.513421 0.513804 0.514187 0.514571 0.514954 0.515337 0.515721 0.516104 0.516487 0.516871 0.517254 0.517637 0.51802 0.518404 0.518787 0.51917 0.519553 0.519936 0.52032 0.520703 0.521086 0.521469 0.521852 0.522235 0.522618 0.523002 0.523385 0.523768 0.524151 0.524534 0.524917 0.5253 0.525683 0.526066 0.526449 0.526832 0.527215 0.527598 0.527981 0.528363 0.528746 0.529129 0.529512 0.529895 0.530278 0.53066 0.531043 0.531426 0.531809 0.532191 0.532574 0.532957 0.533339 0.533722 0.534105 0.534487 0.53487 0.535252 0.535635 0.536017 0.5364 0.536782 0.537165 0.537547 0.53793 0.538312 0.538694 0.539077 0.539459 0.539841 0.540223 0.540606 0.540988 0.54137 0.541752 0.542134 0.542517 0.542899 0.543281 0.543663 0.544045 0.544427 0.544809 0.545191 0.545573 0.545954 0.546336 0.546718 0.5471 0.547482 0.547863 0.548245 0.548627 0.549009 0.54939 0.549772 0.550153 0.550535 0.550916 0.551298 0.551679 0.552061 0.552442 0.552824 0.553205 0.553586 0.553967 0.554349 0.55473 0.555111 0.555492 0.555873 0.556254 0.556635 0.557016 0.557397 0.557778 0.558159 0.55854 0.558921 0.559302 0.559683 0.560063 0.560444 0.560825 0.561205 0.561586 0.561966 0.562347 0.562728 0.563108 0.563488 0.563869 0.564249 0.564629 0.56501 0.56539 0.56577 0.56615 0.56653 0.56691 0.56729 0.56767 0.56805 0.56843 0.56881 0.56919 0.56957 0.569949 0.570329 0.570709 0.571088 0.571468 0.571847 0.572227 0.572606 0.572986 0.573365 0.573745 0.574124 0.574503 0.574882 0.575261 0.57564 0.57602 0.576399 0.576778 0.577156 0.577535 0.577914 0.578293 0.578672 0.57905 0.579429 0.579808 0.580186 0.580565 0.580943 0.581322 0.5817 0.582078 0.582457 0.582835 0.583213 0.583591 0.583969 0.584347 0.584725 0.585103 0.585481 0.585859 0.586237 0.586614 0.586992 0.58737 0.587747 0.588125 0.588502 0.58888 0.589257 0.589634 0.590011 0.590389 0.590766 0.591143 0.59152 0.591897 0.592274 0.592651 0.593028 0.593404 0.593781 0.594158 0.594534 0.594911 0.595287 0.595664 0.59604 0.596417 0.596793 0.597169 0.597545 0.597921 0.598297 0.598673 0.599049 0.599425 0.599801 0.600177 0.600552 0.600928 0.601304 0.601679 0.602054 0.60243 0.602805 0.60318 0.603556 0.603931 0.604306 0.604681 0.605056 0.605431 0.605806 0.60618 0.606555 0.60693 0.607304 0.607679 0.608053 0.608428 0.608802 0.609176 0.609551 0.609925 0.610299 0.610673 0.611047 0.611421 0.611795 0.612168 0.612542 0.612916 0.613289 0.613663 0.614036 0.614409 0.614783 0.615156 0.615529 0.615902 0.616275 0.616648 0.617021 0.617394 0.617767 0.618139 0.618512 0.618884 0.619257 0.619629 0.620001 0.620374 0.620746 0.621118 0.62149 0.621862 0.622234 0.622606 0.622978 0.623349 0.623721 0.624092 0.624464 0.624835 0.625207 0.625578 0.625949 0.62632 0.626691 0.627062 0.627433 0.627804 0.628174 0.628545 0.628916 0.629286 0.629656 0.630027 0.630397 0.630767 0.631137 0.631507 0.631877 0.632247 0.632617 0.632987 0.633356 0.633726 0.634095 0.634465 0.634834 0.635203 0.635573 0.635942 0.636311 0.63668 0.637048 0.637417 0.637786 0.638155 0.638523 0.638891 0.63926 0.639628 0.639996 0.640364 0.640732 0.6411 0.641468 0.641836 0.642204 0.642571 0.642939 0.643306 0.643674 0.644041 0.644408 0.644775 0.645142 0.645509 0.645876 0.646243 0.64661 0.646976 0.647343 0.647709 0.648075 0.648442 0.648808 0.649174 0.64954 0.649906 0.650272 0.650637 0.651003 0.651368 0.651734 0.652099 0.652465 0.65283 0.653195 0.65356 0.653925 0.65429 0.654654 0.655019 0.655384 0.655748 0.656112 0.656477 0.656841 0.657205 0.657569 0.657933 0.658297 0.65866 0.659024 0.659388 0.659751 0.660114 0.660478 0.660841 0.661204 0.661567 0.66193 0.662292 0.662655 0.663018 0.66338 0.663743 0.664105 0.664467 0.664829 0.665191 0.665553 0.665915 0.666277 0.666638 0.667 0.667361 0.667723 0.668084 0.668445 0.668806 0.669167 0.669528 0.669888 0.670249 0.67061 0.67097 0.67133 0.671691 0.672051 0.672411 0.672771 0.673131 0.67349 0.67385 0.674209 0.674569 0.674928 0.675287 0.675646 0.676005 0.676364 0.676723 0.677082 0.67744 0.677799 0.678157 0.678515 0.678874 0.679232 0.67959 0.679947 0.680305 0.680663 0.68102 0.681378 0.681735 0.682092 0.68245 0.682806 0.683163 0.68352 0.683877 0.684233 0.68459 0.684946 0.685302 0.685659 0.686015 0.686371 0.686726 0.687082 0.687438 0.687793 0.688148 0.688504 0.688859 0.689214 0.689569 0.689924 0.690278 0.690633 0.690987 0.691342 0.691696 0.69205 0.692404 0.692758 0.693112 0.693466 0.693819 0.694173 0.694526 0.694879 0.695232 0.695585 0.695938 0.696291 0.696643 0.696996 0.697348 0.697701 0.698053 0.698405 0.698757 0.699109 0.699461 0.699812 0.700164 0.700515 0.700866 0.701217 0.701568 0.701919 0.70227 0.702621 0.702971 0.703322 0.703672 0.704022 0.704372 0.704722 0.705072 0.705422 0.705771 0.706121 0.70647 0.706819 0.707168 0.707517 0.707866 0.708215 0.708563 0.708912 0.70926 0.709608 0.709957 0.710305 0.710652 0.711 0.711348 0.711695 0.712043 0.71239 0.712737 0.713084 0.713431 0.713778 0.714124 0.714471 0.714817 0.715163 0.715509 0.715855 0.716201 0.716547 0.716892 0.717238 0.717583 0.717929 0.718274 0.718619 0.718963 0.719308 0.719653 0.719997 0.720341 0.720686 0.72103 0.721374 0.721717 0.722061 0.722405 0.722748 0.723091 0.723434 0.723777 0.72412 0.724463 0.724806 0.725148 0.725491 0.725833 0.726175 0.726517 0.726859 0.7272 0.727542 0.727883 0.728225 0.728566 0.728907 0.729248 0.729588 0.729929 0.730269 0.73061 0.73095 0.73129 0.73163 0.73197 0.732309 0.732649 0.732988 0.733328 0.733667 0.734006 0.734344 0.734683 0.735022 0.73536 0.735698 0.736037 0.736374 0.736712 0.73705 0.737388 0.737725 0.738062 0.7384 0.738737 0.739074 0.73941 0.739747 0.740083 0.74042 0.740756 0.741092 0.741428 0.741764 0.742099 0.742435 0.74277 0.743105 0.74344 0.743775 0.74411 0.744444 0.744779 0.745113 0.745447 0.745781 0.746115 0.746449 0.746783 0.747116 0.747449 0.747783 0.748116 0.748449 0.748781 0.749114 0.749446 0.749779 0.750111 0.750443 0.750775 0.751106 0.751438 0.751769 0.7521 0.752432 0.752762 0.753093 0.753424 0.753754 0.754085 0.754415 0.754745 0.755075 0.755405 0.755734 0.756064 0.756393 0.756722 0.757051 0.75738 0.757709 0.758038 0.758366 0.758694 0.759022 0.75935 0.759678 0.760006 0.760333 0.76066 0.760988 0.761315 0.761642 0.761968 0.762295 0.762621 0.762947 0.763274 0.7636 0.763925 0.764251 0.764576 0.764902 0.765227 0.765552 0.765877 0.766202 0.766526 0.76685 0.767175 0.767499 0.767823 0.768147 0.76847 0.768794 0.769117 0.76944 0.769763 0.770086 0.770408 0.770731 0.771053 0.771375 0.771697 0.772019 0.772341 0.772663 0.772984 0.773305 0.773626 0.773947 0.774268 0.774588 0.774909 0.775229 0.775549 0.775869 0.776189 0.776508 0.776828 0.777147 0.777466 0.777785 0.778104 0.778423 0.778741 0.779059 0.779377 0.779695 0.780013 0.780331 0.780648 0.780966 0.781283 0.7816 0.781916 0.782233 0.78255 0.782866 0.783182 0.783498 0.783814 0.78413 0.784445 0.78476 0.785075 0.78539 0.785705 0.78602 0.786334 0.786649 0.786963 0.787277 0.78759 0.787904 0.788218 0.788531 0.788844 0.789157 0.78947 0.789782 0.790095 0.790407 0.790719 0.791031 0.791343 0.791654 0.791966 0.792277 0.792588 0.792899 0.79321 0.79352 0.793831 0.794141 0.794451 0.794761 0.79507 0.79538 0.795689 0.795998 0.796307 0.796616 0.796925 0.797233 0.797542 0.79785 0.798158 0.798465 0.798773 0.79908 0.799388 0.799695 0.800002 0.800308 0.800615 0.800921 0.801227 0.801533 0.801839 0.802145 0.80245 0.802756 0.803061 0.803366 0.80367 0.803975 0.804279 0.804583 0.804888 0.805191 0.805495 0.805799 0.806102 0.806405 0.806708 0.807011 0.807313 0.807616 0.807918 0.80822 0.808522 0.808824 0.809125 0.809426 0.809728 0.810029 0.810329 0.81063 0.81093 0.811231 0.811531 0.811831 0.81213 0.81243 0.812729 0.813028 0.813327 0.813626 0.813924 0.814223 0.814521 0.814819 0.815117 0.815415 0.815712 0.816009 0.816306 0.816603 0.8169 0.817197 0.817493 0.817789 0.818085 0.818381 0.818677 0.818972 0.819267 0.819562 0.819857 0.820152 0.820446 0.820741 0.821035 0.821329 0.821622 0.821916 0.822209 0.822502 0.822795 0.823088 0.823381 0.823673 0.823965 0.824257 0.824549 0.824841 0.825132 0.825423 0.825714 0.826005 0.826296 0.826586 0.826877 0.827167 0.827457 0.827746 0.828036 0.828325 0.828614 0.828903 0.829192 0.829481 0.829769 0.830057 0.830345 0.830633 0.830921 0.831208 0.831495 0.831782 0.832069 0.832355 0.832642 0.832928 0.833214; #A 3000 0.8335 0.833786 0.834071 0.834356 0.834641 0.834926 0.835211 0.835495 0.835779 0.836064 0.836347 0.836631 0.836914 0.837198 0.837481 0.837764 0.838046 0.838329 0.838611 0.838893 0.839175 0.839457 0.839738 0.840019 0.840301 0.840581 0.840862 0.841143 0.841423 0.841703 0.841983 0.842262 0.842542 0.842821 0.8431 0.843379 0.843658 0.843936 0.844214 0.844492 0.84477 0.845048 0.845325 0.845603 0.84588 0.846156 0.846433 0.846709 0.846986 0.847262 0.847538 0.847813 0.848089 0.848364 0.848639 0.848914 0.849188 0.849463 0.849737 0.850011 0.850284 0.850558 0.850831 0.851104 0.851377 0.85165 0.851923 0.852195 0.852467 0.852739 0.853011 0.853282 0.853553 0.853824 0.854095 0.854366 0.854636 0.854907 0.855177 0.855447 0.855716 0.855986 0.856255 0.856524 0.856792 0.857061 0.857329 0.857597 0.857865 0.858133 0.858401 0.858668 0.858935 0.859202 0.859469 0.859735 0.860001 0.860267 0.860533 0.860799 0.861064 0.861329 0.861594 0.861859 0.862124 0.862388 0.862652 0.862916 0.86318 0.863443 0.863706 0.863969 0.864232 0.864495 0.864757 0.865019 0.865281 0.865543 0.865805 0.866066 0.866327 0.866588 0.866849 0.867109 0.867369 0.867629 0.867889 0.868149 0.868408 0.868667 0.868926 0.869185 0.869444 0.869702 0.86996 0.870218 0.870476 0.870733 0.87099 0.871247 0.871504 0.871761 0.872017 0.872273 0.872529 0.872785 0.87304 0.873295 0.87355 0.873805 0.87406 0.874314 0.874568 0.874822 0.875076 0.875329 0.875583 0.875836 0.876088 0.876341 0.876593 0.876846 0.877097 0.877349 0.877601 0.877852 0.878103 0.878354 0.878604 0.878855 0.879105 0.879355 0.879605 0.879854 0.880103 0.880352 0.880601 0.88085 0.881098 0.881346 0.881594 0.881842 0.882089 0.882337 0.882584 0.88283 0.883077 0.883323 0.883569 0.883815 0.884061 0.884306 0.884552 0.884797 0.885041 0.885286 0.88553 0.885774 0.886018 0.886262 0.886505 0.886748 0.886991 0.887234 0.887477 0.887719 0.887961 0.888203 0.888444 0.888686 0.888927 0.889168 0.889408 0.889649 0.889889 0.890129 0.890369 0.890608 0.890847 0.891086 0.891325 0.891564 0.891802 0.89204 0.892278 0.892516 0.892753 0.892991 0.893228 0.893464 0.893701 0.893937 0.894173 0.894409 0.894645 0.89488 0.895115 0.89535 0.895585 0.895819 0.896053 0.896287 0.896521 0.896755 0.896988 0.897221 0.897454 0.897686 0.897918 0.898151 0.898382 0.898614 0.898845 0.899077 0.899307 0.899538 0.899769 0.899999 0.900229 0.900459 0.900688 0.900917 0.901146 0.901375 0.901604 0.901832 0.90206 0.902288 0.902516 0.902743 0.90297 0.903197 0.903424 0.90365 0.903876 0.904102 0.904328 0.904554 0.904779 0.905004 0.905229 0.905453 0.905677 0.905901 0.906125 0.906349 0.906572 0.906795 0.907018 0.907241 0.907463 0.907685 0.907907 0.908129 0.90835 0.908571 0.908792 0.909013 0.909234 0.909454 0.909674 0.909894 0.910113 0.910332 0.910551 0.91077 0.910989 0.911207 0.911425 0.911643 0.91186 0.912078 0.912295 0.912511 0.912728 0.912944 0.913161 0.913376 0.913592 0.913807 0.914023 0.914237 0.914452 0.914666 0.914881 0.915095 0.915308 0.915522 0.915735 0.915948 0.91616 0.916373 0.916585 0.916797 0.917009 0.91722 0.917431 0.917642 0.917853 0.918064 0.918274 0.918484 0.918694 0.918903 0.919112 0.919321 0.91953 0.919739 0.919947 0.920155 0.920363 0.92057 0.920777 0.920985 0.921191 0.921398 0.921604 0.92181 0.922016 0.922221 0.922427 0.922632 0.922837 0.923041 0.923245 0.92345 0.923653 0.923857 0.92406 0.924263 0.924466 0.924669 0.924871 0.925073 0.925275 0.925476 0.925678 0.925879 0.926079 0.92628 0.92648 0.92668 0.92688 0.92708 0.927279 0.927478 0.927677 0.927875 0.928074 0.928272 0.928469 0.928667 0.928864 0.929061 0.929258 0.929455 0.929651 0.929847 0.930043 0.930238 0.930433 0.930628 0.930823 0.931018 0.931212 0.931406 0.9316 0.931793 0.931986 0.932179 0.932372 0.932565 0.932757 0.932949 0.93314 0.933332 0.933523 0.933714 0.933905 0.934095 0.934285 0.934475 0.934665 0.934854 0.935044 0.935232 0.935421 0.935609 0.935798 0.935985 0.936173 0.93636 0.936548 0.936734 0.936921 0.937107 0.937293 0.937479 0.937665 0.93785 0.938035 0.93822 0.938404 0.938589 0.938773 0.938956 0.93914 0.939323 0.939506 0.939689 0.939871 0.940054 0.940235 0.940417 0.940599 0.94078 0.940961 0.941141 0.941322 0.941502 0.941682 0.941861 0.942041 0.94222 0.942399 0.942577 0.942755 0.942933 0.943111 0.943289 0.943466 0.943643 0.94382 0.943996 0.944173 0.944348 0.944524 0.9447 0.944875 0.94505 0.945224 0.945399 0.945573 0.945747 0.94592 0.946094 0.946267 0.94644 0.946612 0.946784 0.946956 0.947128 0.9473 0.947471 0.947642 0.947813 0.947983 0.948153 0.948323 0.948493 0.948662 0.948831 0.949 0.949169 0.949337 0.949505 0.949673 0.949841 0.950008 0.950175 0.950342 0.950508 0.950674 0.95084 0.951006 0.951172 0.951337 0.951502 0.951666 0.951831 0.951995 0.952158 0.952322 0.952485 0.952648 0.952811 0.952974 0.953136 0.953298 0.95346 0.953621 0.953782 0.953943 0.954104 0.954264 0.954424 0.954584 0.954744 0.954903 0.955062 0.955221 0.955379 0.955537 0.955695 0.955853 0.95601 0.956168 0.956324 0.956481 0.956637 0.956794 0.956949 0.957105 0.95726 0.957415 0.95757 0.957724 0.957879 0.958032 0.958186 0.95834 0.958493 0.958646 0.958798 0.95895 0.959102 0.959254 0.959406 0.959557 0.959708 0.959859 0.960009 0.960159 0.960309 0.960459 0.960608 0.960757 0.960906 0.961054 0.961203 0.961351 0.961498 0.961646 0.961793 0.96194 0.962086 0.962233 0.962379 0.962525 0.96267 0.962815 0.96296 0.963105 0.96325 0.963394 0.963538 0.963681 0.963825 0.963968 0.96411 0.964253 0.964395 0.964537 0.964679 0.96482 0.964962 0.965102 0.965243 0.965383 0.965524 0.965663 0.965803 0.965942 0.966081 0.96622 0.966358 0.966496 0.966634 0.966772 0.966909 0.967046 0.967183 0.96732 0.967456 0.967592 0.967727 0.967863 0.967998 0.968133 0.968267 0.968402 0.968536 0.96867 0.968803 0.968936 0.969069 0.969202 0.969334 0.969466 0.969598 0.96973 0.969861 0.969992 0.970123 0.970253 0.970383 0.970513 0.970643 0.970772 0.970901 0.97103 0.971158 0.971287 0.971415 0.971542 0.97167 0.971797 0.971924 0.97205 0.972176 0.972302 0.972428 0.972554 0.972679 0.972804 0.972928 0.973053 0.973177 0.9733 0.973424 0.973547 0.97367 0.973793 0.973915 0.974037 0.974159 0.974281 0.974402 0.974523 0.974644 0.974764 0.974884 0.975004 0.975124 0.975243 0.975362 0.975481 0.975599 0.975717 0.975835 0.975953 0.97607 0.976188 0.976304 0.976421 0.976537 0.976653 0.976769 0.976884 0.976999 0.977114 0.977229 0.977343 0.977457 0.977571 0.977684 0.977797 0.97791 0.978023 0.978135 0.978247 0.978359 0.97847 0.978581 0.978692 0.978803 0.978913 0.979023 0.979133 0.979243 0.979352 0.979461 0.979569 0.979678 0.979786 0.979894 0.980001 0.980108 0.980215 0.980322 0.980428 0.980534 0.98064 0.980746 0.980851 0.980956 0.981061 0.981165 0.981269 0.981373 0.981477 0.98158 0.981683 0.981786 0.981888 0.98199 0.982092 0.982194 0.982295 0.982396 0.982497 0.982597 0.982697 0.982797 0.982897 0.982996 0.983095 0.983194 0.983292 0.98339 0.983488 0.983586 0.983683 0.98378 0.983877 0.983973 0.98407 0.984165 0.984261 0.984356 0.984451 0.984546 0.984641 0.984735 0.984829 0.984922 0.985016 0.985109 0.985201 0.985294 0.985386 0.985478 0.98557 0.985661 0.985752 0.985843 0.985933 0.986023 0.986113 0.986203 0.986292 0.986381 0.98647 0.986558 0.986647 0.986735 0.986822 0.986909 0.986996 0.987083 0.98717 0.987256 0.987342 0.987427 0.987513 0.987598 0.987682 0.987767 0.987851 0.987935 0.988019 0.988102 0.988185 0.988268 0.98835 0.988432 0.988514 0.988596 0.988677 0.988758 0.988839 0.988919 0.988999 0.989079 0.989159 0.989238 0.989317 0.989396 0.989474 0.989552 0.98963 0.989708 0.989785 0.989862 0.989939 0.990015 0.990091 0.990167 0.990242 0.990318 0.990393 0.990467 0.990542 0.990616 0.99069 0.990763 0.990836 0.990909 0.990982 0.991054 0.991126 0.991198 0.99127 0.991341 0.991412 0.991482 0.991553 0.991623 0.991693 0.991762 0.991831 0.9919 0.991969 0.992037 0.992105 0.992173 0.99224 0.992307 0.992374 0.992441 0.992507 0.992573 0.992639 0.992704 0.992769 0.992834 0.992899 0.992963 0.993027 0.993091 0.993154 0.993217 0.99328 0.993342 0.993405 0.993467 0.993528 0.99359 0.993651 0.993711 0.993772 0.993832 0.993892 0.993952 0.994011 0.99407 0.994129 0.994187 0.994245 0.994303 0.994361 0.994418 0.994475 0.994532 0.994588 0.994644 0.9947 0.994756 0.994811 0.994866 0.994921 0.994975 0.995029 0.995083 0.995136 0.99519 0.995243 0.995295 0.995347 0.9954 0.995451 0.995503 0.995554 0.995605 0.995655 0.995706 0.995756 0.995805 0.995855 0.995904 0.995953 0.996001 0.99605 0.996098 0.996145 0.996193 0.99624 0.996287 0.996333 0.996379 0.996425 0.996471 0.996516 0.996561 0.996606 0.99665 0.996695 0.996738 0.996782 0.996825 0.996868 0.996911 0.996953 0.996996 0.997037 0.997079 0.99712 0.997161 0.997202 0.997242 0.997282 0.997322 0.997362 0.997401 0.99744 0.997478 0.997517 0.997555 0.997592 0.99763 0.997667 0.997704 0.99774 0.997777 0.997813 0.997848 0.997884 0.997919 0.997954 0.997988 0.998022 0.998056 0.99809 0.998123 0.998156 0.998189 0.998222 0.998254 0.998286 0.998317 0.998348 0.998379 0.99841 0.998441 0.998471 0.998501 0.99853 0.998559 0.998588 0.998617; #A 4000 0.998645 0.998673 0.998701 0.998729 0.998756 0.998783 0.998809 0.998836 0.998862 0.998887 0.998913 0.998938 0.998963 0.998987 0.999011 0.999035 0.999059 0.999082 0.999106 0.999128 0.999151 0.999173 0.999195 0.999216 0.999238 0.999259 0.99928 0.9993 0.99932 0.99934 0.999359 0.999379 0.999398 0.999416 0.999435 0.999453 0.999471 0.999488 0.999505 0.999522 0.999539 0.999555 0.999571 0.999587 0.999602 0.999618 0.999632 0.999647 0.999661 0.999675 0.999689 0.999702 0.999715 0.999728 0.999741 0.999753 0.999765 0.999776 0.999788 0.999799 0.999809 0.99982 0.99983 0.99984 0.999849 0.999859 0.999868 0.999876 0.999885 0.999893 0.999901 0.999908 0.999915 0.999922 0.999929 0.999935 0.999941 0.999947 0.999952 0.999958 0.999962 0.999967 0.999971 0.999975 0.999979 0.999982 0.999985 0.999988 0.999991 0.999993 0.999995 0.999996 0.999998 0.999999 0.999999 1 1 1 0.999999 0.999999 0.999998 0.999996 0.999995 0.999993 0.999991 0.999988 0.999985 0.999982 0.999979 0.999975 0.999971 0.999967 0.999962 0.999958 0.999952 0.999947 0.999941 0.999935 0.999929 0.999922 0.999915 0.999908 0.999901 0.999893 0.999885 0.999876 0.999868 0.999859 0.999849 0.99984 0.99983 0.99982 0.999809 0.999799 0.999788 0.999776 0.999765 0.999753 0.999741 0.999728 0.999715 0.999702 0.999689 0.999675 0.999661 0.999647 0.999632 0.999618 0.999602 0.999587 0.999571 0.999555 0.999539 0.999522 0.999505 0.999488 0.999471 0.999453 0.999435 0.999416 0.999398 0.999379 0.999359 0.99934 0.99932 0.9993 0.99928 0.999259 0.999238 0.999216 0.999195 0.999173 0.999151 0.999128 0.999106 0.999082 0.999059 0.999035 0.999011 0.998987 0.998963 0.998938 0.998913 0.998887 0.998862 0.998836 0.998809 0.998783 0.998756 0.998729 0.998701 0.998673 0.998645 0.998617 0.998588 0.998559 0.99853 0.998501 0.998471 0.998441 0.99841 0.998379 0.998348 0.998317 0.998286 0.998254 0.998222 0.998189 0.998156 0.998123 0.99809 0.998056 0.998022 0.997988 0.997954 0.997919 0.997884 0.997848 0.997813 0.997777 0.99774 0.997704 0.997667 0.99763 0.997592 0.997555 0.997517 0.997478 0.99744 0.997401 0.997362 0.997322 0.997282 0.997242 0.997202 0.997161 0.99712 0.997079 0.997037 0.996996 0.996953 0.996911 0.996868 0.996825 0.996782 0.996738 0.996695 0.99665 0.996606 0.996561 0.996516 0.996471 0.996425 0.996379 0.996333 0.996287 0.99624 0.996193 0.996145 0.996098 0.99605 0.996001 0.995953 0.995904 0.995855 0.995805 0.995756 0.995706 0.995655 0.995605 0.995554 0.995503 0.995451 0.9954 0.995347 0.995295 0.995243 0.99519 0.995136 0.995083 0.995029 0.994975 0.994921 0.994866 0.994811 0.994756 0.9947 0.994644 0.994588 0.994532 0.994475 0.994418 0.994361 0.994303 0.994245 0.994187 0.994129 0.99407 0.994011 0.993952 0.993892 0.993832 0.993772 0.993711 0.993651 0.99359 0.993528 0.993467 0.993405 0.993342 0.99328 0.993217 0.993154 0.993091 0.993027 0.992963 0.992899 0.992834 0.992769 0.992704 0.992639 0.992573 0.992507 0.992441 0.992374 0.992307 0.99224 0.992173 0.992105 0.992037 0.991969 0.9919 0.991831 0.991762 0.991693 0.991623 0.991553 0.991482 0.991412 0.991341 0.99127 0.991198 0.991126 0.991054 0.990982 0.990909 0.990836 0.990763 0.99069 0.990616 0.990542 0.990467 0.990393 0.990318 0.990242 0.990167 0.990091 0.990015 0.989939 0.989862 0.989785 0.989708 0.98963 0.989552 0.989474 0.989396 0.989317 0.989238 0.989159 0.989079 0.988999 0.988919 0.988839 0.988758 0.988677 0.988596 0.988514 0.988432 0.98835 0.988268 0.988185 0.988102 0.988019 0.987935 0.987851 0.987767 0.987682 0.987598 0.987513 0.987427 0.987342 0.987256 0.98717 0.987083 0.986996 0.986909 0.986822 0.986735 0.986647 0.986558 0.98647 0.986381 0.986292 0.986203 0.986113 0.986023 0.985933 0.985843 0.985752 0.985661 0.98557 0.985478 0.985386 0.985294 0.985201 0.985109 0.985016 0.984922 0.984829 0.984735 0.984641 0.984546 0.984451 0.984356 0.984261 0.984165 0.98407 0.983973 0.983877 0.98378 0.983683 0.983586 0.983488 0.98339 0.983292 0.983194 0.983095 0.982996 0.982897 0.982797 0.982697 0.982597 0.982497 0.982396 0.982295 0.982194 0.982092 0.98199 0.981888 0.981786 0.981683 0.98158 0.981477 0.981373 0.981269 0.981165 0.981061 0.980956 0.980851 0.980746 0.98064 0.980534 0.980428 0.980322 0.980215 0.980108 0.980001 0.979894 0.979786 0.979678 0.979569 0.979461 0.979352 0.979243 0.979133 0.979023 0.978913 0.978803 0.978692 0.978581 0.97847 0.978359 0.978247 0.978135 0.978023 0.97791 0.977797 0.977684 0.977571 0.977457 0.977343 0.977229 0.977114 0.976999 0.976884 0.976769 0.976653 0.976537 0.976421 0.976304 0.976188 0.97607 0.975953 0.975835 0.975717 0.975599 0.975481 0.975362 0.975243 0.975124 0.975004 0.974884 0.974764 0.974644 0.974523 0.974402 0.974281 0.974159 0.974037 0.973915 0.973793 0.97367 0.973547 0.973424 0.9733 0.973177 0.973053 0.972928 0.972804 0.972679 0.972554 0.972428 0.972302 0.972176 0.97205 0.971924 0.971797 0.97167 0.971542 0.971415 0.971287 0.971158 0.97103 0.970901 0.970772 0.970643 0.970513 0.970383 0.970253 0.970123 0.969992 0.969861 0.96973 0.969598 0.969466 0.969334 0.969202 0.969069 0.968936 0.968803 0.96867 0.968536 0.968402 0.968267 0.968133 0.967998 0.967863 0.967727 0.967592 0.967456 0.96732 0.967183 0.967046 0.966909 0.966772 0.966634 0.966496 0.966358 0.96622 0.966081 0.965942 0.965803 0.965663 0.965524 0.965383 0.965243 0.965102 0.964962 0.96482 0.964679 0.964537 0.964395 0.964253 0.96411 0.963968 0.963825 0.963681 0.963538 0.963394 0.96325 0.963105 0.96296 0.962815 0.96267 0.962525 0.962379 0.962233 0.962086 0.96194 0.961793 0.961646 0.961498 0.961351 0.961203 0.961054 0.960906 0.960757 0.960608 0.960459 0.960309 0.960159 0.960009 0.959859 0.959708 0.959557 0.959406 0.959254 0.959102 0.95895 0.958798 0.958646 0.958493 0.95834 0.958186 0.958032 0.957879 0.957724 0.95757 0.957415 0.95726 0.957105 0.956949 0.956794 0.956637 0.956481 0.956324 0.956168 0.95601 0.955853 0.955695 0.955537 0.955379 0.955221 0.955062 0.954903 0.954744 0.954584 0.954424 0.954264 0.954104 0.953943 0.953782 0.953621 0.95346 0.953298 0.953136 0.952974 0.952811 0.952648 0.952485 0.952322 0.952158 0.951995 0.951831 0.951666 0.951502 0.951337 0.951172 0.951006 0.95084 0.950674 0.950508 0.950342 0.950175 0.950008 0.949841 0.949673 0.949505 0.949337 0.949169 0.949 0.948831 0.948662 0.948493 0.948323 0.948153 0.947983 0.947813 0.947642 0.947471 0.9473 0.947128 0.946956 0.946784 0.946612 0.94644 0.946267 0.946094 0.94592 0.945747 0.945573 0.945399 0.945224 0.94505 0.944875 0.9447 0.944524 0.944348 0.944173 0.943996 0.94382 0.943643 0.943466 0.943289 0.943111 0.942933 0.942755 0.942577 0.942399 0.94222 0.942041 0.941861 0.941682 0.941502 0.941322 0.941141 0.940961 0.94078 0.940599 0.940417 0.940235 0.940054 0.939871 0.939689 0.939506 0.939323 0.93914 0.938956 0.938773 0.938589 0.938404 0.93822 0.938035 0.93785 0.937665 0.937479 0.937293 0.937107 0.936921 0.936734 0.936548 0.93636 0.936173 0.935985 0.935798 0.935609 0.935421 0.935232 0.935044 0.934854 0.934665 0.934475 0.934285 0.934095 0.933905 0.933714 0.933523 0.933332 0.93314 0.932949 0.932757 0.932565 0.932372 0.932179 0.931986 0.931793 0.9316 0.931406 0.931212 0.931018 0.930823 0.930628 0.930433 0.930238 0.930043 0.929847 0.929651 0.929455 0.929258 0.929061 0.928864 0.928667 0.928469 0.928272 0.928074 0.927875 0.927677 0.927478 0.927279 0.92708 0.92688 0.92668 0.92648 0.92628 0.926079 0.925879 0.925678 0.925476 0.925275 0.925073 0.924871 0.924669 0.924466 0.924263 0.92406 0.923857 0.923653 0.92345 0.923245 0.923041 0.922837 0.922632 0.922427 0.922221 0.922016 0.92181 0.921604 0.921398 0.921191 0.920985 0.920777 0.92057 0.920363 0.920155 0.919947 0.919739 0.91953 0.919321 0.919112 0.918903 0.918694 0.918484 0.918274 0.918064 0.917853 0.917642 0.917431 0.91722 0.917009 0.916797 0.916585 0.916373 0.91616 0.915948 0.915735 0.915522 0.915308 0.915095 0.914881 0.914666 0.914452 0.914237 0.914023 0.913807 0.913592 0.913376 0.913161 0.912944 0.912728 0.912511 0.912295 0.912078 0.91186 0.911643 0.911425 0.911207 0.910989 0.91077 0.910551 0.910332 0.910113 0.909894 0.909674 0.909454 0.909234 0.909013 0.908792 0.908571 0.90835 0.908129 0.907907 0.907685 0.907463 0.907241 0.907018 0.906795 0.906572 0.906349 0.906125 0.905901 0.905677 0.905453 0.905229 0.905004 0.904779 0.904554 0.904328 0.904102 0.903876 0.90365 0.903424 0.903197 0.90297 0.902743 0.902516 0.902288 0.90206 0.901832 0.901604 0.901375 0.901146 0.900917 0.900688 0.900459 0.900229 0.899999 0.899769 0.899538 0.899307 0.899077 0.898845 0.898614 0.898382 0.898151 0.897918 0.897686 0.897454 0.897221 0.896988 0.896755 0.896521 0.896287 0.896053 0.895819 0.895585 0.89535 0.895115 0.89488 0.894645 0.894409 0.894173 0.893937 0.893701 0.893464 0.893228 0.892991 0.892753 0.892516 0.892278 0.89204 0.891802 0.891564 0.891325 0.891086 0.890847 0.890608 0.890369 0.890129 0.889889 0.889649 0.889408 0.889168 0.888927 0.888686 0.888444 0.888203 0.887961 0.887719 0.887477 0.887234 0.886991 0.886748 0.886505 0.886262 0.886018 0.885774 0.88553 0.885286 0.885041 0.884797; #A 5000 0.884552 0.884306 0.884061 0.883815 0.883569 0.883323 0.883077 0.88283 0.882584 0.882337 0.882089 0.881842 0.881594 0.881346 0.881098 0.88085 0.880601 0.880352 0.880103 0.879854 0.879605 0.879355 0.879105 0.878855 0.878604 0.878354 0.878103 0.877852 0.877601 0.877349 0.877097 0.876846 0.876593 0.876341 0.876088 0.875836 0.875583 0.875329 0.875076 0.874822 0.874568 0.874314 0.87406 0.873805 0.87355 0.873295 0.87304 0.872785 0.872529 0.872273 0.872017 0.871761 0.871504 0.871247 0.87099 0.870733 0.870476 0.870218 0.86996 0.869702 0.869444 0.869185 0.868926 0.868667 0.868408 0.868149 0.867889 0.867629 0.867369 0.867109 0.866849 0.866588 0.866327 0.866066 0.865805 0.865543 0.865281 0.865019 0.864757 0.864495 0.864232 0.863969 0.863706 0.863443 0.86318 0.862916 0.862652 0.862388 0.862124 0.861859 0.861594 0.861329 0.861064 0.860799 0.860533 0.860267 0.860001 0.859735 0.859469 0.859202 0.858935 0.858668 0.858401 0.858133 0.857865 0.857597 0.857329 0.857061 0.856792 0.856524 0.856255 0.855986 0.855716 0.855447 0.855177 0.854907 0.854636 0.854366 0.854095 0.853824 0.853553 0.853282 0.853011 0.852739 0.852467 0.852195 0.851923 0.85165 0.851377 0.851104 0.850831 0.850558 0.850284 0.850011 0.849737 0.849463 0.849188 0.848914 0.848639 0.848364 0.848089 0.847813 0.847538 0.847262 0.846986 0.846709 0.846433 0.846156 0.84588 0.845603 0.845325 0.845048 0.84477 0.844492 0.844214 0.843936 0.843658 0.843379 0.8431 0.842821 0.842542 0.842262 0.841983 0.841703 0.841423 0.841143 0.840862 0.840581 0.840301 0.840019 0.839738 0.839457 0.839175 0.838893 0.838611 0.838329 0.838046 0.837764 0.837481 0.837198 0.836914 0.836631 0.836347 0.836064 0.835779 0.835495 0.835211 0.834926 0.834641 0.834356 0.834071 0.833786 0.8335 0.833214 0.832928 0.832642 0.832355 0.832069 0.831782 0.831495 0.831208 0.830921 0.830633 0.830345 0.830057 0.829769 0.829481 0.829192 0.828903 0.828614 0.828325 0.828036 0.827746 0.827457 0.827167 0.826877 0.826586 0.826296 0.826005 0.825714 0.825423 0.825132 0.824841 0.824549 0.824257 0.823965 0.823673 0.823381 0.823088 0.822795 0.822502 0.822209 0.821916 0.821622 0.821329 0.821035 0.820741 0.820446 0.820152 0.819857 0.819562 0.819267 0.818972 0.818677 0.818381 0.818085 0.817789 0.817493 0.817197 0.8169 0.816603 0.816306 0.816009 0.815712 0.815415 0.815117 0.814819 0.814521 0.814223 0.813924 0.813626 0.813327 0.813028 0.812729 0.81243 0.81213 0.811831 0.811531 0.811231 0.81093 0.81063 0.810329 0.810029 0.809728 0.809426 0.809125 0.808824 0.808522 0.80822 0.807918 0.807616 0.807313 0.807011 0.806708 0.806405 0.806102 0.805799 0.805495 0.805191 0.804888 0.804583 0.804279 0.803975 0.80367 0.803366 0.803061 0.802756 0.80245 0.802145 0.801839 0.801533 0.801227 0.800921 0.800615 0.800308 0.800002 0.799695 0.799388 0.79908 0.798773 0.798465 0.798158 0.79785 0.797542 0.797233 0.796925 0.796616 0.796307 0.795998 0.795689 0.79538 0.79507 0.794761 0.794451 0.794141 0.793831 0.79352 0.79321 0.792899 0.792588 0.792277 0.791966 0.791654 0.791343 0.791031 0.790719 0.790407 0.790095 0.789782 0.78947 0.789157 0.788844 0.788531 0.788218 0.787904 0.78759 0.787277 0.786963 0.786649 0.786334 0.78602 0.785705 0.78539 0.785075 0.78476 0.784445 0.78413 0.783814 0.783498 0.783182 0.782866 0.78255 0.782233 0.781916 0.7816 0.781283 0.780966 0.780648 0.780331 0.780013 0.779695 0.779377 0.779059 0.778741 0.778423 0.778104 0.777785 0.777466 0.777147 0.776828 0.776508 0.776189 0.775869 0.775549 0.775229 0.774909 0.774588 0.774268 0.773947 0.773626 0.773305 0.772984 0.772663 0.772341 0.772019 0.771697 0.771375 0.771053 0.770731 0.770408 0.770086 0.769763 0.76944 0.769117 0.768794 0.76847 0.768147 0.767823 0.767499 0.767175 0.76685 0.766526 0.766202 0.765877 0.765552 0.765227 0.764902 0.764576 0.764251 0.763925 0.7636 0.763274 0.762947 0.762621 0.762295 0.761968 0.761642 0.761315 0.760988 0.76066 0.760333 0.760006 0.759678 0.75935 0.759022 0.758694 0.758366 0.758038 0.757709 0.75738 0.757051 0.756722 0.756393 0.756064 0.755734 0.755405 0.755075 0.754745 0.754415 0.754085 0.753754 0.753424 0.753093 0.752762 0.752432 0.7521 0.751769 0.751438 0.751106 0.750775 0.750443 0.750111 0.749779 0.749446 0.749114 0.748781 0.748449 0.748116 0.747783 0.747449 0.747116 0.746783 0.746449 0.746115 0.745781 0.745447 0.745113 0.744779 0.744444 0.74411 0.743775 0.74344 0.743105 0.74277 0.742435 0.742099 0.741764 0.741428 0.741092 0.740756 0.74042 0.740083 0.739747 0.73941 0.739074 0.738737 0.7384 0.738062 0.737725 0.737388 0.73705 0.736712 0.736374 0.736037 0.735698 0.73536 0.735022 0.734683 0.734344 0.734006 0.733667 0.733328 0.732988 0.732649 0.732309 0.73197 0.73163 0.73129 0.73095 0.73061 0.730269 0.729929 0.729588 0.729248 0.728907 0.728566 0.728225 0.727883 0.727542 0.7272 0.726859 0.726517 0.726175 0.725833 0.725491 0.725148 0.724806 0.724463 0.72412 0.723777 0.723434 0.723091 0.722748 0.722405 0.722061 0.721717 0.721374 0.72103 0.720686 0.720341 0.719997 0.719653 0.719308 0.718963 0.718619 0.718274 0.717929 0.717583 0.717238 0.716892 0.716547 0.716201 0.715855 0.715509 0.715163 0.714817 0.714471 0.714124 0.713778 0.713431 0.713084 0.712737 0.71239 0.712043 0.711695 0.711348 0.711 0.710652 0.710305 0.709957 0.709608 0.70926 0.708912 0.708563 0.708215 0.707866 0.707517 0.707168 0.706819 0.70647 0.706121 0.705771 0.705422 0.705072 0.704722 0.704372 0.704022 0.703672 0.703322 0.702971 0.702621 0.70227 0.701919 0.701568 0.701217 0.700866 0.700515 0.700164 0.699812 0.699461 0.699109 0.698757 0.698405 0.698053 0.697701 0.697348 0.696996 0.696643 0.696291 0.695938 0.695585 0.695232 0.694879 0.694526 0.694173 0.693819 0.693466 0.693112 0.692758 0.692404 0.69205 0.691696 0.691342 0.690987 0.690633 0.690278 0.689924 0.689569 0.689214 0.688859 0.688504 0.688148 0.687793 0.687438 0.687082 0.686726 0.686371 0.686015 0.685659 0.685302 0.684946 0.68459 0.684233 0.683877 0.68352 0.683163 0.682806 0.68245 0.682092 0.681735 0.681378 0.68102 0.680663 0.680305 0.679947 0.67959 0.679232 0.678874 0.678515 0.678157 0.677799 0.67744 0.677082 0.676723 0.676364 0.676005 0.675646 0.675287 0.674928 0.674569 0.674209 0.67385 0.67349 0.673131 0.672771 0.672411 0.672051 0.671691 0.67133 0.67097 0.67061 0.670249 0.669888 0.669528 0.669167 0.668806 0.668445 0.668084 0.667723 0.667361 0.667 0.666638 0.666277 0.665915 0.665553 0.665191 0.664829 0.664467 0.664105 0.663743 0.66338 0.663018 0.662655 0.662292 0.66193 0.661567 0.661204 0.660841 0.660478 0.660114 0.659751 0.659388 0.659024 0.65866 0.658297 0.657933 0.657569 0.657205 0.656841 0.656477 0.656112 0.655748 0.655384 0.655019 0.654654 0.65429 0.653925 0.65356 0.653195 0.65283 0.652465 0.652099 0.651734 0.651368 0.651003 0.650637 0.650272 0.649906 0.64954 0.649174 0.648808 0.648442 0.648075 0.647709 0.647343 0.646976 0.64661 0.646243 0.645876 0.645509 0.645142 0.644775 0.644408 0.644041 0.643674 0.643306 0.642939 0.642571 0.642204 0.641836 0.641468 0.6411 0.640732 0.640364 0.639996 0.639628 0.63926 0.638891 0.638523 0.638155 0.637786 0.637417 0.637048 0.63668 0.636311 0.635942 0.635573 0.635203 0.634834 0.634465 0.634095 0.633726 0.633356 0.632987 0.632617 0.632247 0.631877 0.631507 0.631137 0.630767 0.630397 0.630027 0.629656 0.629286 0.628916 0.628545 0.628174 0.627804 0.627433 0.627062 0.626691 0.62632 0.625949 0.625578 0.625207 0.624835 0.624464 0.624092 0.623721 0.623349 0.622978 0.622606 0.622234 0.621862 0.62149 0.621118 0.620746 0.620374 0.620001 0.619629 0.619257 0.618884 0.618512 0.618139 0.617767 0.617394 0.617021 0.616648 0.616275 0.615902 0.615529 0.615156 0.614783 0.614409 0.614036 0.613663 0.613289 0.612916 0.612542 0.612168 0.611795 0.611421 0.611047 0.610673 0.610299 0.609925 0.609551 0.609176 0.608802 0.608428 0.608053 0.607679 0.607304 0.60693 0.606555 0.60618 0.605806 0.605431 0.605056 0.604681 0.604306 0.603931 0.603556 0.60318 0.602805 0.60243 0.602054 0.601679 0.601304 0.600928 0.600552 0.600177 0.599801 0.599425 0.599049 0.598673 0.598297 0.597921 0.597545 0.597169 0.596793 0.596417 0.59604 0.595664 0.595287 0.594911 0.594534 0.594158 0.593781 0.593404 0.593028 0.592651 0.592274 0.591897 0.59152 0.591143 0.590766 0.590389 0.590011 0.589634 0.589257 0.58888 0.588502 0.588125 0.587747 0.58737 0.586992 0.586614 0.586237 0.585859 0.585481 0.585103 0.584725 0.584347 0.583969 0.583591 0.583213 0.582835 0.582457 0.582078 0.5817 0.581322 0.580943 0.580565 0.580186 0.579808 0.579429 0.57905 0.578672 0.578293 0.577914 0.577535 0.577156 0.576778 0.576399 0.57602 0.57564 0.575261 0.574882 0.574503 0.574124 0.573745 0.573365 0.572986 0.572606 0.572227 0.571847 0.571468 0.571088 0.570709 0.570329 0.569949 0.56957 0.56919 0.56881 0.56843 0.56805 0.56767 0.56729 0.56691 0.56653 0.56615 0.56577 0.56539 0.56501 0.564629 0.564249 0.563869 0.563488 0.563108 0.562728 0.562347 0.561966 0.561586 0.561205 0.560825 0.560444 0.560063 0.559683 0.559302 0.558921 0.55854 0.558159 0.557778 0.557397 0.557016 0.556635 0.556254 0.555873 0.555492 ; #A 6000 0.555111 0.55473 0.554349 0.553967 0.553586 0.553205 0.552824 0.552442 0.552061 0.551679 0.551298 0.550916 0.550535 0.550153 0.549772 0.54939 0.549009 0.548627 0.548245 0.547863 0.547482 0.5471 0.546718 0.546336 0.545954 0.545573 0.545191 0.544809 0.544427 0.544045 0.543663 0.543281 0.542899 0.542517 0.542134 0.541752 0.54137 0.540988 0.540606 0.540223 0.539841 0.539459 0.539077 0.538694 0.538312 0.53793 0.537547 0.537165 0.536782 0.5364 0.536017 0.535635 0.535252 0.53487 0.534487 0.534105 0.533722 0.533339 0.532957 0.532574 0.532191 0.531809 0.531426 0.531043 0.53066 0.530278 0.529895 0.529512 0.529129 0.528746 0.528363 0.527981 0.527598 0.527215 0.526832 0.526449 0.526066 0.525683 0.5253 0.524917 0.524534 0.524151 0.523768 0.523385 0.523002 0.522618 0.522235 0.521852 0.521469 0.521086 0.520703 0.52032 0.519936 0.519553 0.51917 0.518787 0.518404 0.51802 0.517637 0.517254 0.516871 0.516487 0.516104 0.515721 0.515337 0.514954 0.514571 0.514187 0.513804 0.513421 0.513037 0.512654 0.512271 0.511887 0.511504 0.51112 0.510737 0.510354 0.50997 0.509587 0.509203 0.50882 0.508437 0.508053 0.50767 0.507286 0.506903 0.506519 0.506136 0.505752 0.505369 0.504985 0.504602 0.504218 0.503835 0.503451 0.503068 0.502684 0.502301 0.501917 0.501534 0.50115 0.500767 0.500383 0.5 0.499617 0.499233 0.49885 0.498466 0.498083 0.497699 0.497316 0.496932 0.496549 0.496165 0.495782 0.495398 0.495015 0.494631 0.494248 0.493864 0.493481 0.493097 0.492714 0.49233 0.491947 0.491563 0.49118 0.490797 0.490413 0.49003 0.489646 0.489263 0.48888 0.488496 0.488113 0.487729 0.487346 0.486963 0.486579 0.486196 0.485813 0.485429 0.485046 0.484663 0.484279 0.483896 0.483513 0.483129 0.482746 0.482363 0.48198 0.481596 0.481213 0.48083 0.480447 0.480064 0.47968 0.479297 0.478914 0.478531 0.478148 0.477765 0.477381 0.476998 0.476615 0.476232 0.475849 0.475466 0.475083 0.4747 0.474317 0.473934 0.473551 0.473168 0.472785 0.472402 0.472019 0.471637 0.471254 0.470871 0.470488 0.470105 0.469722 0.46934 0.468957 0.468574 0.468191 0.467809 0.467426 0.467043 0.466661 0.466278 0.465895 0.465513 0.46513 0.464748 0.464365 0.463983 0.4636 0.463218 0.462835 0.462453 0.46207 0.461688 0.461306 0.460923 0.460541 0.460159 0.459777 0.459394 0.459012 0.45863 0.458248 0.457866 0.457483 0.457101 0.456719 0.456337 0.455955 0.455573 0.455191 0.454809 0.454427 0.454046 0.453664 0.453282 0.4529 0.452518 0.452137 0.451755 0.451373 0.450991 0.45061 0.450228 0.449847 0.449465 0.449084 0.448702 0.448321 0.447939 0.447558 0.447176 0.446795 0.446414 0.446033 0.445651 0.44527 0.444889 0.444508 0.444127 0.443746 0.443365 0.442984 0.442603 0.442222 0.441841 0.44146 0.441079 0.440698 0.440317 0.439937 0.439556 0.439175 0.438795 0.438414 0.438034 0.437653 0.437273 0.436892 0.436512 0.436131 0.435751 0.435371 0.43499 0.43461 0.43423 0.43385 0.43347 0.43309 0.43271 0.43233 0.43195 0.43157 0.43119 0.43081 0.43043 0.430051 0.429671 0.429291 0.428912 0.428532 0.428152 0.427773 0.427394 0.427014 0.426635 0.426255 0.425876 0.425497 0.425118 0.424739 0.424359 0.42398 0.423601 0.423222 0.422844 0.422465 0.422086 0.421707 0.421328 0.42095 0.420571 0.420192 0.419814 0.419435 0.419057 0.418678 0.4183 0.417922 0.417543 0.417165 0.416787 0.416409 0.416031 0.415653 0.415275 0.414897 0.414519 0.414141 0.413763 0.413386 0.413008 0.41263 0.412253 0.411875 0.411498 0.41112 0.410743 0.410366 0.409989 0.409611 0.409234 0.408857 0.40848 0.408103 0.407726 0.407349 0.406972 0.406596 0.406219 0.405842 0.405466 0.405089 0.404713 0.404336 0.40396 0.403583 0.403207 0.402831 0.402455 0.402079 0.401703 0.401327 0.400951 0.400575 0.400199 0.399823 0.399448 0.399072 0.398696 0.398321 0.397946 0.39757 0.397195 0.39682 0.396444 0.396069 0.395694 0.395319 0.394944 0.394569 0.394194 0.39382 0.393445 0.39307 0.392696 0.392321 0.391947 0.391572 0.391198 0.390824 0.390449 0.390075 0.389701 0.389327 0.388953 0.388579 0.388205 0.387832 0.387458 0.387084 0.386711 0.386337 0.385964 0.385591 0.385217 0.384844 0.384471 0.384098 0.383725 0.383352 0.382979 0.382606 0.382233 0.381861 0.381488 0.381116 0.380743 0.380371 0.379998 0.379626 0.379254 0.378882 0.37851 0.378138 0.377766 0.377394 0.377022 0.376651 0.376279 0.375908 0.375536 0.375165 0.374793 0.374422 0.374051 0.37368 0.373309 0.372938 0.372567 0.372196 0.371826 0.371455 0.371084 0.370714 0.370344 0.369973 0.369603 0.369233 0.368863 0.368493 0.368123 0.367753 0.367383 0.367013 0.366644 0.366274 0.365905 0.365535 0.365166 0.364797 0.364427 0.364058 0.363689 0.36332 0.362952 0.362583 0.362214 0.361845 0.361477 0.361109 0.36074 0.360372 0.360004 0.359636 0.359268 0.3589 0.358532 0.358164 0.357796 0.357429 0.357061 0.356694 0.356326 0.355959 0.355592 0.355225 0.354858 0.354491 0.354124 0.353757 0.35339 0.353024 0.352657 0.352291 0.351925 0.351558 0.351192 0.350826 0.35046 0.350094 0.349728 0.349363 0.348997 0.348631 0.348266 0.347901 0.347535 0.34717 0.346805 0.34644 0.346075 0.34571 0.345346 0.344981 0.344616 0.344252 0.343888 0.343523 0.343159 0.342795 0.342431 0.342067 0.341703 0.34134 0.340976 0.340612 0.340249 0.339886 0.339522 0.339159 0.338796 0.338433 0.33807 0.337708 0.337345 0.336982 0.33662 0.336257 0.335895 0.335533 0.335171 0.334809 0.334447 0.334085 0.333723 0.333362 0.333 0.332639 0.332277 0.331916 0.331555 0.331194 0.330833 0.330472 0.330112 0.329751 0.32939 0.32903 0.32867 0.328309 0.327949 0.327589 0.327229 0.32687 0.32651 0.32615 0.325791 0.325431 0.325072 0.324713 0.324354 0.323995 0.323636 0.323277 0.322918 0.32256 0.322201 0.321843 0.321485 0.321126 0.320768 0.32041 0.320052 0.319695 0.319337 0.31898 0.318622 0.318265 0.317908 0.317551 0.317194 0.316837 0.31648 0.316123 0.315767 0.31541 0.315054 0.314698 0.314341 0.313985 0.313629 0.313274 0.312918 0.312562 0.312207 0.311852 0.311496 0.311141 0.310786 0.310431 0.310076 0.309722 0.309367 0.309013 0.308658 0.308304 0.30795 0.307596 0.307242 0.306888 0.306534 0.306181 0.305827 0.305474 0.305121 0.304768 0.304415 0.304062 0.303709 0.303357 0.303004 0.302652 0.302299 0.301947 0.301595 0.301243 0.300891 0.300539 0.300188 0.299836 0.299485 0.299134 0.298783 0.298432 0.298081 0.29773 0.297379 0.297029 0.296678 0.296328 0.295978 0.295628 0.295278 0.294928 0.294578 0.294229 0.293879 0.29353 0.293181 0.292832 0.292483 0.292134 0.291785 0.291437 0.291088 0.29074 0.290392 0.290043 0.289695 0.289348 0.289 0.288652 0.288305 0.287957 0.28761 0.287263 0.286916 0.286569 0.286222 0.285876 0.285529 0.285183 0.284837 0.284491 0.284145 0.283799 0.283453 0.283107 0.282762 0.282417 0.282071 0.281726 0.281381 0.281037 0.280692 0.280347 0.280003 0.279659 0.279314 0.27897 0.278626 0.278283 0.277939 0.277595 0.277252 0.276909 0.276566 0.276223 0.27588 0.275537 0.275194 0.274852 0.27451 0.274167 0.273825 0.273483 0.273141 0.2728 0.272458 0.272117 0.271776 0.271434 0.271093 0.270752 0.270412 0.270071 0.269731 0.26939 0.26905 0.26871 0.26837 0.26803 0.267691 0.267351 0.267012 0.266672 0.266333 0.265994 0.265656 0.265317 0.264978 0.26464 0.264302 0.263963 0.263625 0.263288 0.26295 0.262612 0.262275 0.261938 0.2616 0.261263 0.260926 0.26059 0.260253 0.259917 0.25958 0.259244 0.258908 0.258572 0.258236 0.257901 0.257565 0.25723 0.256895 0.25656 0.256225 0.25589 0.255556 0.255221 0.254887 0.254553 0.254219 0.253885 0.253551 0.253217 0.252884 0.252551 0.252217 0.251884 0.251551 0.251219 0.250886 0.250554 0.250221 0.249889 0.249557 0.249225 0.248894 0.248562 0.248231 0.2479 0.247568 0.247237 0.246907 0.246576 0.246246 0.245915 0.245585 0.245255 0.244925 0.244595 0.244266 0.243936 0.243607 0.243278 0.242949 0.24262 0.242291 0.241963 0.241634 0.241306 0.240978 0.24065 0.240322 0.239994 0.239667 0.23934 0.239012 0.238685 0.238358 0.238032 0.237705 0.237379 0.237052 0.236726 0.2364 0.236075 0.235749 0.235424 0.235098 0.234773 0.234448 0.234123 0.233798 0.233474 0.233149 0.232825 0.232501 0.232177 0.231854 0.23153 0.231206 0.230883 0.23056 0.230237 0.229914 0.229592 0.229269 0.228947 0.228625 0.228303 0.227981 0.227659 0.227338 0.227016 0.226695 0.226374 0.226053 0.225732 0.225412 0.225091 0.224771 0.224451 0.224131 0.223811 0.223492 0.223172 0.222853 0.222534 0.222215 0.221896 0.221577 0.221259 0.220941 0.220623 0.220305 0.219987 0.219669 0.219352 0.219034 0.218717 0.2184 0.218084 0.217767 0.21745 0.217134 0.216818 0.216502 0.216186 0.215871 0.215555 0.21524 0.214925 0.21461 0.214295 0.21398 0.213666 0.213351 0.213037 0.212723 0.21241 0.212096 0.211782 0.211469 0.211156 0.210843 0.21053 0.210218 0.209905 0.209593 0.209281 0.208969 0.208657 0.208346 0.208034 0.207723 0.207412 0.207101 0.20679 0.20648 0.206169 0.205859 0.205549 0.205239 0.20493 0.20462 0.204311 0.204002 0.203693 0.203384 0.203075 0.202767 0.202458 0.20215 0.201842 0.201535 0.201227 0.20092 0.200612 0.200305 0.199998 0.199692 0.199385 0.199079 0.198773 0.198467 0.198161 0.197855 0.19755 0.197244 0.196939 0.196634 0.19633 0.196025 0.195721 0.195416 0.195112; #A 7000 0.194809 0.194505 0.194201 0.193898 0.193595 0.193292 0.192989 0.192687 0.192384 0.192082 0.19178 0.191478 0.191176 0.190875 0.190573 0.190272 0.189971 0.189671 0.18937 0.18907 0.188769 0.188469 0.188169 0.18787 0.18757 0.187271 0.186972 0.186673 0.186374 0.186076 0.185777 0.185479 0.185181 0.184883 0.184585 0.184288 0.183991 0.183694 0.183397 0.1831 0.182803 0.182507 0.182211 0.181915 0.181619 0.181323 0.181028 0.180733 0.180438 0.180143 0.179848 0.179554 0.179259 0.178965 0.178671 0.178378 0.178084 0.177791 0.177498 0.177205 0.176912 0.176619 0.176327 0.176035 0.175743 0.175451 0.175159 0.174868 0.174577 0.174286 0.173995 0.173704 0.173414 0.173123 0.172833 0.172543 0.172254 0.171964 0.171675 0.171386 0.171097 0.170808 0.170519 0.170231 0.169943 0.169655 0.169367 0.169079 0.168792 0.168505 0.168218 0.167931 0.167645 0.167358 0.167072 0.166786 0.1665 0.166214 0.165929 0.165644 0.165359 0.165074 0.164789 0.164505 0.164221 0.163936 0.163653 0.163369 0.163086 0.162802 0.162519 0.162236 0.161954 0.161671 0.161389 0.161107 0.160825 0.160543 0.160262 0.159981 0.159699 0.159419 0.159138 0.158857 0.158577 0.158297 0.158017 0.157738 0.157458 0.157179 0.1569 0.156621 0.156342 0.156064 0.155786 0.155508 0.15523 0.154952 0.154675 0.154397 0.15412 0.153844 0.153567 0.15329 0.153014 0.152738 0.152462 0.152187 0.151911 0.151636 0.151361 0.151086 0.150812 0.150538 0.150263 0.149989 0.149716 0.149442 0.149169 0.148896 0.148623 0.14835 0.148077 0.147805 0.147533 0.147261 0.146989 0.146718 0.146447 0.146176 0.145905 0.145634 0.145364 0.145093 0.144823 0.144554 0.144284 0.144015 0.143745 0.143476 0.143208 0.142939 0.142671 0.142403 0.142135 0.141867 0.141599 0.141332 0.141065 0.140798 0.140531 0.140265 0.139999 0.139733 0.139467 0.139201 0.138936 0.138671 0.138406 0.138141 0.137876 0.137612 0.137348 0.137084 0.13682 0.136557 0.136294 0.136031 0.135768 0.135505 0.135243 0.134981 0.134719 0.134457 0.134195 0.133934 0.133673 0.133412 0.133151 0.132891 0.132631 0.132371 0.132111 0.131851 0.131592 0.131333 0.131074 0.130815 0.130556 0.130298 0.13004 0.129782 0.129524 0.129267 0.12901 0.128753 0.128496 0.128239 0.127983 0.127727 0.127471 0.127215 0.12696 0.126705 0.12645 0.126195 0.12594 0.125686 0.125432 0.125178 0.124924 0.124671 0.124417 0.124164 0.123912 0.123659 0.123407 0.123154 0.122903 0.122651 0.122399 0.122148 0.121897 0.121646 0.121396 0.121145 0.120895 0.120645 0.120395 0.120146 0.119897 0.119648 0.119399 0.11915 0.118902 0.118654 0.118406 0.118158 0.117911 0.117663 0.117416 0.11717 0.116923 0.116677 0.116431 0.116185 0.115939 0.115694 0.115448 0.115203 0.114959 0.114714 0.11447 0.114226 0.113982 0.113738 0.113495 0.113252 0.113009 0.112766 0.112523 0.112281 0.112039 0.111797 0.111556 0.111314 0.111073 0.110832 0.110592 0.110351 0.110111 0.109871 0.109631 0.109392 0.109153 0.108914 0.108675 0.108436 0.108198 0.10796 0.107722 0.107484 0.107247 0.107009 0.106772 0.106536 0.106299 0.106063 0.105827 0.105591 0.105355 0.10512 0.104885 0.10465 0.104415 0.104181 0.103947 0.103713 0.103479 0.103246 0.103012 0.102779 0.102546 0.102314 0.102082 0.101849 0.101618 0.101386 0.101155 0.100923 0.100693 0.100462 0.100231 0.100001 0.0997712 0.0995414 0.0993119 0.0990826 0.0988536 0.0986248 0.0983962 0.0981679 0.0979398 0.097712 0.0974843 0.097257 0.0970298 0.0968029 0.0965762 0.0963498 0.0961236 0.0958976 0.0956719 0.0954464 0.0952212 0.0949962 0.0947714 0.0945469 0.0943226 0.0940985 0.0938747 0.0936511 0.0934278 0.0932047 0.0929818 0.0927592 0.0925368 0.0923147 0.0920928 0.0918711 0.0916497 0.0914285 0.0912076 0.0909869 0.0907664 0.0905462 0.0903262 0.0901065 0.089887 0.0896678 0.0894487 0.08923 0.0890114 0.0887932 0.0885751 0.0883573 0.0881397 0.0879224 0.0877054 0.0874885 0.0872719 0.0870556 0.0868395 0.0866236 0.086408 0.0861926 0.0859775 0.0857626 0.0855479 0.0853335 0.0851194 0.0849055 0.0846918 0.0844784 0.0842652 0.0840523 0.0838396 0.0836271 0.0834149 0.083203 0.0829912 0.0827798 0.0825686 0.0823576 0.0821469 0.0819364 0.0817261 0.0815161 0.0813064 0.0810969 0.0808876 0.0806786 0.0804699 0.0802614 0.0800531 0.0798451 0.0796373 0.0794298 0.0792225 0.0790155 0.0788087 0.0786022 0.0783959 0.0781898 0.077984 0.0777785 0.0775732 0.0773682 0.0771634 0.0769588 0.0767545 0.0765505 0.0763467 0.0761431 0.0759398 0.0757368 0.075534 0.0753314 0.0751291 0.0749271 0.0747253 0.0745237 0.0743224 0.0741213 0.0739205 0.07372 0.0735197 0.0733197 0.0731198 0.0729203 0.072721 0.072522 0.0723232 0.0721246 0.0719263 0.0717283 0.0715305 0.071333 0.0711357 0.0709387 0.0707419 0.0705454 0.0703491 0.0701531 0.0699573 0.0697618 0.0695665 0.0693715 0.0691768 0.0689823 0.068788 0.068594 0.0684003 0.0682068 0.0680136 0.0678206 0.0676279 0.0674354 0.0672432 0.0670512 0.0668595 0.0666681 0.0664769 0.0662859 0.0660953 0.0659048 0.0657146 0.0655247 0.0653351 0.0651457 0.0649565 0.0647676 0.064579 0.0643906 0.0642025 0.0640146 0.063827 0.0636396 0.0634525 0.0632657 0.0630791 0.0628927 0.0627067 0.0625209 0.0623353 0.06215 0.061965 0.0617802 0.0615956 0.0614114 0.0612274 0.0610436 0.0608601 0.0606769 0.0604939 0.0603112 0.0601287 0.0599465 0.0597646 0.0595829 0.0594014 0.0592203 0.0590394 0.0588587 0.0586783 0.0584982 0.0583183 0.0581387 0.0579594 0.0577803 0.0576015 0.0574229 0.0572446 0.0570665 0.0568887 0.0567112 0.0565339 0.0563569 0.0561802 0.0560037 0.0558275 0.0556515 0.0554758 0.0553004 0.0551252 0.0549503 0.0547756 0.0546012 0.0544271 0.0542533 0.0540796 0.0539063 0.0537332 0.0535604 0.0533879 0.0532156 0.0530435 0.0528718 0.0527003 0.052529 0.052358 0.0521873 0.0520169 0.0518467 0.0516768 0.0515071 0.0513377 0.0511686 0.0509997 0.0508311 0.0506628 0.0504947 0.0503269 0.0501593 0.0499921 0.049825 0.0496583 0.0494918 0.0493256 0.0491596 0.0489939 0.0488285 0.0486633 0.0484984 0.0483338 0.0481695 0.0480054 0.0478415 0.047678 0.0475147 0.0473516 0.0471889 0.0470264 0.0468641 0.0467021 0.0465404 0.046379 0.0462178 0.0460569 0.0458963 0.0457359 0.0455758 0.045416 0.0452564 0.0450971 0.0449381 0.0447794 0.0446209 0.0444626 0.0443047 0.044147 0.0439896 0.0438324 0.0436755 0.0435189 0.0433626 0.0432065 0.0430507 0.0428951 0.0427398 0.0425848 0.0424301 0.0422756 0.0421214 0.0419675 0.0418139 0.0416605 0.0415074 0.0413545 0.0412019 0.0410496 0.0408976 0.0407458 0.0405943 0.0404431 0.0402921 0.0401414 0.039991 0.0398409 0.039691 0.0395414 0.039392 0.039243 0.0390942 0.0389457 0.0387974 0.0386494 0.0385017 0.0383543 0.0382071 0.0380602 0.0379136 0.0377673 0.0376212 0.0374754 0.0373298 0.0371846 0.0370396 0.0368949 0.0367504 0.0366063 0.0364624 0.0363187 0.0361754 0.0360323 0.0358895 0.035747 0.0356047 0.0354627 0.035321 0.0351796 0.0350384 0.0348975 0.0347569 0.0346165 0.0344764 0.0343366 0.0341971 0.0340579 0.0339189 0.0337802 0.0336418 0.0335036 0.0333657 0.0332281 0.0330908 0.0329537 0.0328169 0.0326804 0.0325442 0.0324082 0.0322726 0.0321372 0.032002 0.0318672 0.0317326 0.0315983 0.0314642 0.0313305 0.031197 0.0310638 0.0309309 0.0307982 0.0306659 0.0305338 0.0304019 0.0302704 0.0301391 0.0300081 0.0298774 0.029747 0.0296168 0.0294869 0.0293573 0.029228 0.0290989 0.0289701 0.0288416 0.0287134 0.0285855 0.0284578 0.0283304 0.0282033 0.0280764 0.0279499 0.0278236 0.0276976 0.0275719 0.0274464 0.0273212 0.0271963 0.0270717 0.0269474 0.0268233 0.0266995 0.026576 0.0264528 0.0263299 0.0262072 0.0260848 0.0259627 0.0258409 0.0257193 0.0255981 0.0254771 0.0253563 0.0252359 0.0251158 0.0249959 0.0248763 0.024757 0.0246379 0.0245192 0.0244007 0.0242825 0.0241646 0.0240469 0.0239296 0.0238125 0.0236957 0.0235792 0.0234629 0.023347 0.0232313 0.0231159 0.0230008 0.022886 0.0227714 0.0226571 0.0225431 0.0224294 0.022316 0.0222028 0.02209 0.0219774 0.0218651 0.021753 0.0216413 0.0215298 0.0214186 0.0213077 0.0211971 0.0210868 0.0209767 0.020867 0.0207575 0.0206483 0.0205393 0.0204307 0.0203223 0.0202142 0.0201064 0.0199989 0.0198917 0.0197847 0.0196781 0.0195717 0.0194656 0.0193598 0.0192542 0.019149 0.019044 0.0189393 0.0188349 0.0187308 0.0186269 0.0185234 0.0184201 0.0183171 0.0182144 0.018112 0.0180098 0.017908 0.0178064 0.0177051 0.0176041 0.0175034 0.0174029 0.0173028 0.0172029 0.0171033 0.017004 0.016905 0.0168063 0.0167078 0.0166096 0.0165118 0.0164142 0.0163169 0.0162198 0.0161231 0.0160266 0.0159304 0.0158346 0.015739 0.0156436 0.0155486 0.0154538 0.0153594 0.0152652 0.0151713 0.0150777 0.0149844 0.0148913 0.0147986 0.0147061 0.0146139 0.014522 0.0144304 0.0143391 0.0142481 0.0141573 0.0140668 0.0139766 0.0138868 0.0137971 0.0137078 0.0136188 0.01353 0.0134416 0.0133534 0.0132655 0.0131779 0.0130906 0.0130035 0.0129168 0.0128303 0.0127441 0.0126582 0.0125726 0.0124873 0.0124023 0.0123176 0.0122331 0.0121489 0.0120651 0.0119815 0.0118982 0.0118151 0.0117324 0.01165 0.0115678 0.0114859 0.0114043 0.011323 0.011242 0.0111613 0.0110809 0.0110007 0.0109209 0.0108413 0.010762 0.010683 0.0106043 0.0105259 0.0104478 0.0103699 0.0102924 0.0102151 0.0101381 0.0100614 0.00998505 0.00990893 0.00983311 0.00975757 0.00968232 0.00960736 0.00953269 0.0094583 0.00938421 0.0093104 0.00923689 0.00916366 0.00909072 0.00901807 0.0089457 0.00887363 0.00880184 0.00873035 0.00865914 0.00858822 0.0085176 0.00844726 0.00837721 0.00830744 0.00823797 0.00816879 0.0080999 0.00803129 0.00796298 0.00789495 0.00782722 0.00775977 0.00769262 0.00762575 0.00755917 0.00749288 0.00742689 0.00736118 0.00729576 0.00723063 0.00716579 0.00710125 0.00703699 0.00697302 0.00690934 0.00684595 0.00678285 0.00672004 0.00665753 0.0065953 0.00653336 0.00647171 0.00641036 0.00634929 0.00628851 0.00622803 0.00616783 0.00610793 0.00604832 0.00598899 0.00592996 0.00587122 0.00581276 0.0057546 0.00569673 0.00563915 0.00558187 0.00552487 0.00546816; #A 8000 0.00541175 0.00535562 0.00529979 0.00524424 0.00518899 0.00513403 0.00507936 0.00502498 0.00497089 0.0049171 0.00486359 0.00481038 0.00475746 0.00470483 0.00465249 0.00460044 0.00454868 0.00449722 0.00444604 0.00439516 0.00434457 0.00429427 0.00424426 0.00419455 0.00414512 0.00409599 0.00404715 0.0039986 0.00395034 0.00390238 0.0038547 0.00380732 0.00376023 0.00371343 0.00366693 0.00362071 0.00357479 0.00352916 0.00348382 0.00343878 0.00339403 0.00334956 0.00330539 0.00326152 0.00321793 0.00317464 0.00313164 0.00308893 0.00304651 0.00300439 0.00296256 0.00292102 0.00287978 0.00283882 0.00279816 0.00275779 0.00271771 0.00267793 0.00263844 0.00259924 0.00256033 0.00252172 0.0024834 0.00244537 0.00240764 0.00237019 0.00233304 0.00229619 0.00225962 0.00222335 0.00218737 0.00215169 0.00211629 0.00208119 0.00204639 0.00201187 0.00197765 0.00194372 0.00191009 0.00187674 0.00184369 0.00181094 0.00177847 0.0017463 0.00171443 0.00168284 0.00165155 0.00162055 0.00158985 0.00155944 0.00152932 0.0014995 0.00146996 0.00144073 0.00141178 0.00138313 0.00135477 0.00132671 0.00129894 0.00127146 0.00124427 0.00121738 0.00119078 0.00116448 0.00113847 0.00111275 0.00108732 0.00106219 0.00103736 0.00101281 0.000988563 0.000964607 0.000940944 0.000917574 0.000894498 0.000871716 0.000849228 0.000827033 0.000805131 0.000783524 0.00076221 0.000741189 0.000720463 0.00070003 0.000679891 0.000660046 0.000640494 0.000621236 0.000602272 0.000583602 0.000565225 0.000547142 0.000529353 0.000511858 0.000494657 0.00047775 0.000461136 0.000444816 0.000428791 0.000413059 0.000397621 0.000382477 0.000367626 0.00035307 0.000338808 0.000324839 0.000311165 0.000297784 0.000284698 0.000271905 0.000259407 0.000247202 0.000235291 0.000223675 0.000212352 0.000201323 0.000190589 0.000180148 0.000170002 0.000160149 0.000150591 0.000141326 0.000132356 0.00012368 0.000115297 0.000107209 9.94151e-05 9.1915e-05 8.47091e-05 7.77973e-05 7.11795e-05 6.48558e-05 5.88263e-05 5.30908e-05 4.76495e-05 4.25022e-05 3.76491e-05 3.30901e-05 2.88252e-05 2.48544e-05 2.11777e-05 1.77952e-05 1.47068e-05 1.19125e-05 9.41236e-06 7.20634e-06 5.29446e-06 3.67671e-06 2.3531e-06 1.32362e-06 5.88274e-07 1.47069e-07; #X coords 0 1 8191 -1 100 70 1; #X restore 188 602 graph; #X msg 30 244 rcos; #X msg 30 141 addsyn 0 1 0.25; #X obj 30 220 loadbang; #X msg 30 418 spray; #X obj 172 373 metro 1000; #X obj 172 352 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X msg 44 167 addsyn 0 0.1 0.3 0.5 0.3 0.1; #N canvas 600 60 410 263 more-messages 0; #X obj 13 191 outlet; #X msg 159 175 steady \$1; #X obj 159 153 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X text 176 155 steady rhythm; #N canvas 0 23 643 386 tuning 0; #X obj 63 252 outlet; #X msg 91 121 setscale 110 123.75 139.219 146.667 165 185.625 208.828 220 247.5 278.438 293.333 330 371.25 417.656 440 495 556.875 586.667 660 742.5 835.312 880 990 1113.75 1173.33 1320 1485 1670.62 1760 1980 ; #X obj 91 96 loadbang; #X msg 227 236 pitchdev \$1; #X floatatom 227 216 5 0 0 0 - - -; #X obj 230 192 hsl 128 15 0 0.1 0 0 empty empty empty -2 -6 0 8 -260704 -1 -1 0 1; #N canvas 0 23 823 584 more-scales 0; #X msg 53 65 setscale 440 495 556.875 586.667 660 742.5 835.312 880 990 1113.75 1173.33 1320 1485 1670.62; #X text 58 45 two octave Pythagorean; #X msg 64 125 setscale 55 58.2705 61.7354 65.4064 69.2957 73.4162 77.7817 82.4069 87.3071 92.4986 97.9989 103.826 110 116.541 123.471 130.813 138.591 146.832 155.563 164.814 174.614 184.997 195.998 207.652 220 233.082 246.942 261.626 277.183 293.665 311.127 329.628 349.228 369.994 391.995 415.305 440 466.164 493.883 523.251 554.365 587.33 622.254 659.255 698.456 739.989 783.991 830.609 880 932.328 987.767 1046.5 1108.73 1174.66 1244.51 1318.51 1396.91 1479.98 1567.98 1661.22; #X text 62 106 equal-tempered 12 tone; #X msg 84 299 setscale 55 60.7249 67.0458 74.0245 81.7297 90.2369 99.6296 110 121.45 134.092 148.049 163.459 180.474 199.259 220 242.9 268.183 296.098 326.919 360.948 398.518 440 485.8 536.366 592.196 653.837 721.895 797.037 880 971.599 1072.73 1184.39 1307.67 1443.79 1594.07; #X text 79 279 equal-tempered 7 tone; #X msg 94 422 setscale 220 247.5 278.438 293.333 330 440 495 556.875 586.667 660 880 990 1113.75 1173.33 1320; #X text 92 404 pentatonic; #X obj 60 488 outlet; #X connect 0 0 8 0; #X connect 2 0 8 0; #X connect 4 0 8 0; #X connect 6 0 8 0; #X restore 63 42 pd more-scales; #X text 173 105 default: diatonic pythagorean; #X msg 193 58 constrain_scale \$1; #X obj 193 35 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X text 156 14 limit scale within freq constraints set by grist message ; #X text 213 31 (if your boundaries are bad the constraints will be ignored and the full scale will be used.); #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 0 0; #X connect 4 0 3 0; #X connect 5 0 4 0; #X connect 6 0 0 0; #X connect 8 0 0 0; #X connect 9 0 8 0; #X restore 100 68 pd tuning; #X msg 204 76 transpose \$1; #X floatatom 204 53 5 0 0 0 - #0-global-transpose -; #X text 203 34 global transposition; #N canvas 600 60 428 271 initialize 0; #X obj 55 63 loadbang; #X obj 55 142 symbol \$0-global-transpose; #X obj 92 105 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 56 172 \; \$1 1; #X connect 0 0 1 0; #X connect 1 0 3 0; #X connect 2 0 1 0; #X restore 279 176 pd initialize; #N canvas 0 23 478 328 grain-cloud-profile 0; #X obj 35 235 outlet; #X msg 79 20 grist 333 1000 50 5000 0 1 0.05 1 30 60; #X msg 79 44 grist 250 1000 100 300 0.1 0.9 0.1 1 40 60; #X msg 79 68 grist 30 1000 400 500 0.1 0.9 0.1 1 50 600; #X msg 79 92 grist 10 1000 1200 1500 0.1 0.9 0.1 1 20 50; #X msg 79 116 grist 3 1000 100 1500 0.1 0.9 0.1 1 1000 8000; #X msg 85 200 events \$1; #X floatatom 85 180 5 0 0 0 - - -; #X text 127 177 specify events-per-cloud directly; #X text 28 260 grist parameter sequence:; #X text 28 274 events-per-cloud \, event horizon(ms.) \, min freq \, max freq \,; #X text 29 307 min grain-size(ms.) \, max grain-size; #X text 28 290 left pan boundary \, right pan boundary \, min amp \, max amp \,; #X msg 83 136 grist 3 1000 200 800 0.1 0.9 0.1 1 2000 4000; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 6 0; #X connect 13 0 0 0; #X restore 13 38 pd grain-cloud-profile; #X text 13 21 density options:; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 5 0; #X connect 9 0 0 0; #X restore 391 433 pd more-messages; #X floatatom 30 371 5 0 0 0 - - -; #X msg 194 417 pitchspray; #X msg 30 321 1; #X obj 30 295 loadbang; #X text 71 419 basic grain cloud; #X obj 30 118 loadbang; #X text 271 416 tuned grain cloud; #X msg 40 345 2; #X msg 100 247 aenv 0.025; #N canvas 600 60 454 304 select-method 0; #X obj 64 35 inlet; #X obj 138 25 inlet; #X obj 26 13 loadbang; #X obj 138 223 spigot; #X obj 193 224 spigot; #X obj 230 188 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1; #X obj 175 185 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X obj 64 132 unpack f f; #X obj 64 65 sel 1 2; #X msg 64 102 1 0; #X msg 97 102 0 1; #X obj 138 255 outlet; #X obj 193 254 outlet; #X connect 0 0 8 0; #X connect 1 0 3 0; #X connect 1 0 4 0; #X connect 2 0 9 0; #X connect 3 0 11 0; #X connect 4 0 12 0; #X connect 5 0 4 1; #X connect 6 0 3 1; #X connect 7 0 6 0; #X connect 7 1 5 0; #X connect 8 0 9 0; #X connect 8 1 10 0; #X connect 9 0 7 0; #X connect 10 0 7 0; #X restore 30 394 pd select-method; #X text 95 121 generate waveform; #X text 100 227 generate envelope; #X text 64 321 spray; #X text 73 345 pitchspray; #X text 171 330 Turn on to start grains (DACs must be on); #X obj 30 494 lpp-meters; #X obj 32 13 lpp-icon granule~; #X text 254 41 - granular synthesis; #X text 253 166 alternative waveform; #X obj 30 194 lyonpotpourri/function~ waveform; #X obj 30 274 lyonpotpourri/function~ window; #X obj 30 449 lyonpotpourri/granule~ waveform window; #X text 94 295 select pitch method; #X connect 2 0 30 0; #X connect 3 0 29 0; #X connect 4 0 2 0; #X connect 5 0 31 0; #X connect 6 0 19 1; #X connect 7 0 6 0; #X connect 8 0 29 0; #X connect 9 0 31 0; #X connect 10 0 19 0; #X connect 11 0 31 0; #X connect 12 0 10 0; #X connect 13 0 12 0; #X connect 15 0 3 0; #X connect 17 0 10 0; #X connect 18 0 30 0; #X connect 19 0 5 0; #X connect 19 1 11 0; #X connect 31 0 25 0; #X connect 31 1 25 1; pd-lyonpotpourri-3.0.1/granule~.c000066400000000000000000000520151430526361000170630ustar00rootroot00000000000000#include "MSPd.h" #define MAXGRAINS (512) // just for present to get lower overhead #define MAXSCALE (8192) #define OBJECT_NAME "granule~" static t_class *granule_class; typedef struct { float amplitude; float panL; float panR; long delay; // samples to wait until event starts long duration;// length in samples of event float phase; // phase for frequency oscillator float ephase; // phase for envelope float si; // sampling increment for frequency float esi; // sampling increment for envelope } t_grain; typedef struct { t_word *b_samples; long b_frames; long b_nchans; } t_pdbuffer; typedef struct _granule { t_object x_obj; float x_f; t_pdbuffer *wavebuf; // holds waveform samples t_pdbuffer *windowbuf; // holds window samples t_symbol *wavename; // name of waveform buffer t_symbol *windowname; // name of window buffer float sr; // sampling rate short mute; short hosed; // buffers are bad /* Global grain data*/ long events; // number of events in a block long horizon; // length of block for random events float minfreq; // minimum frequency for a grain float maxfreq; // maximum frequency for a grain float minpan; // minimum pan for a grain float maxpan; // maximum pan for a grain float minamp; // minimum amplitude for a grain float maxamp; // maximum amplitude for a grain float mindur; // minimum duration for a grain float maxdur; // maximum duration for a grain t_grain *grains; // stores grain data float *pitchscale; // contains a frequency grid for pitch constraint int pitchsteps; // number of members in scale float transpose; // factor for scaling all pitches float pitch_deviation; // factor to adjust scaled pitches short steady; // toggles pulsed rhythmic activity float lowblock_freq; //lowest allowed frequency float highblock_freq;// highest allowed frequency float mindur_ms;//store duration in ms float maxdur_ms;//ditto float horizon_ms;//ditto short constrain_scale;//flag to only use bounded portion of scale rather than all of it } t_granule; static void granule_setbuf(t_granule *x, t_symbol *wavename, t_symbol *windowname); static void *granule_new(t_symbol *msg, int argc, t_atom *argv); static t_int *granule_perform(t_int *w); static t_int *granule_performhose(t_int *w); static void granule_dsp(t_granule *x, t_signal **sp); static void granule_reload(t_granule *x); static void granule_spray(t_granule *x); static void granule_pitchspray(t_granule *x); static void granule_transpose(t_granule *x, t_floatarg t); static void granule_pitchdev(t_granule *x, t_floatarg d); static void granule_lowblock(t_granule *x, t_floatarg f); static void granule_highblock(t_granule *x, t_floatarg f); static void granule_events(t_granule *x, t_floatarg e); static float granule_boundrand(float min, float max); static void *granule_grist(t_granule *x, t_symbol *msg, int argc, t_atom *argv); static void *granule_grain(t_granule *x, t_symbol *msg, int argc, t_atom *argv); static void *granule_setscale(t_granule *x, t_symbol *msg, int argc, t_atom *argv); static void granule_info(t_granule *x); static void granule_mute(t_granule *x, t_floatarg toggle); static void granule_steady(t_granule *x, t_floatarg toggle); static void granule_constrain_scale(t_granule *x, t_floatarg toggle); static void granule_dsp_free(t_granule *x); static void granule_init(t_granule *x,short initialized); static void granule_constrain(int *index_min, int *index_max, float minfreq, float maxfreq, float *scale, int steps); void granule_tilde_setup(void) { granule_class = class_new(gensym("granule~"), (t_newmethod)granule_new, (t_method)granule_dsp_free,sizeof(t_granule), 0,A_GIMME,0); CLASS_MAINSIGNALIN(granule_class, t_granule, x_f); class_addmethod(granule_class,(t_method)granule_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(granule_class,(t_method)granule_mute,gensym("mute"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_setbuf,gensym("setbuf"),A_DEFSYM,A_DEFSYM,0); class_addmethod(granule_class,(t_method)granule_spray,gensym("spray"),0); class_addmethod(granule_class,(t_method)granule_info,gensym("info"),0); class_addmethod(granule_class,(t_method)granule_pitchspray,gensym("pitchspray"),0); class_addmethod(granule_class,(t_method)granule_transpose,gensym("transpose"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_events,gensym("events"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_pitchdev,gensym("pitchdev"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_lowblock,gensym("lowblock"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_highblock,gensym("highblock"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_steady,gensym("steady"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_constrain_scale,gensym("constrain_scale"),A_FLOAT,0); class_addmethod(granule_class,(t_method)granule_grist,gensym("grist"),A_GIMME,0); class_addmethod(granule_class,(t_method)granule_grain,gensym("grain"),A_GIMME,0); class_addmethod(granule_class,(t_method)granule_setscale,gensym("setscale"),A_GIMME,0); potpourri_announce(OBJECT_NAME); } void granule_constrain_scale(t_granule *x, t_floatarg toggle) { x->constrain_scale = toggle; } void granule_lowblock(t_granule *x, t_floatarg f) { if(f > 0) { x->lowblock_freq = f; } } void granule_highblock(t_granule *x, t_floatarg f) { if(f > 0) { x->highblock_freq = f; } } void granule_pitchdev(t_granule *x, t_floatarg d) { if(d < 0 ) { pd_error(0, "pitch deviation must be positive"); return; } x->pitch_deviation = d; } void granule_mute(t_granule *x, t_floatarg toggle) { x->mute = toggle; } void granule_steady(t_granule *x, t_floatarg toggle) { x->steady = toggle; } void granule_events(t_granule *x, t_floatarg e) { if( e <= 0 ) { post("events must be positive!"); return; } x->events = e; // x->steady_dur = x->horizon / (float) x->events; } void granule_transpose(t_granule *x, t_floatarg t) { if( t <= 0 ) { pd_error(0, "transpose factor must be greater than zero!"); return; } x->transpose = t; } void *granule_setscale(t_granule *x, t_symbol *msg, int argc, t_atom *argv) { int i; float *pitchscale = x->pitchscale; if( argc >= MAXSCALE ) { pd_error(0, "%d is the maximum size scale", MAXSCALE); return 0; } if( argc < 2 ) { pd_error(0, "there must be at least 2 members in scale"); return 0; } for(i=0; i < argc; i++) { pitchscale[i] = atom_getfloatarg(i,argc,argv); } x->pitchsteps = argc; // post("read %d values into scale", x->pitchsteps); return 0; } void granule_constrain(int *index_min, int *index_max, float minfreq, float maxfreq, float *scale, int steps) { int imax = steps - 1; int imin = 0; while(scale[imin] < minfreq && imin < imax) { ++imin; } if(imin == imax) { // post("could not constrain minimum index - your grist parameters are out of range for this scale"); *index_min = 0; *index_max = steps - 1; return; } while(scale[imax] > maxfreq && imax > 0) { --imax; } if(imax < 1 || imax <= imin) { // post("could not constrain maximum index - your grist parameters are out of range for this scale"); *index_min = 0; *index_max = steps - 1; return; } *index_min = imin; *index_max = imax; } void granule_pitchspray(t_granule *x) { int i,j; long eframes = x->windowbuf->b_frames; long frames = x->wavebuf->b_frames; float sr = x->sr; long horizon = x->horizon; // length of block for random events float mindur = x->mindur; float maxdur = x->maxdur; float minfreq = x->minfreq; // minimum frequency for a grain float maxfreq = x->maxfreq; // maximum frequency for a grain float minpan = x->minpan; // minimum pan for a grain float maxpan = x->maxpan; // maximum pan for a grain float minamp = x->minamp; // minimum amplitude for a grain float maxamp = x->maxamp; // maximum amplitude for a grain float transpose = x->transpose; // pitch scalar float lowblock_freq = x->lowblock_freq; float highblock_freq = x->highblock_freq; short steady = x->steady; float pitch_deviation = x->pitch_deviation; float pdev = 0; float pdev_invert = 0; // float pscale; float pan; int index_min, index_max; int steps = x->pitchsteps; float *scale = x->pitchscale; int windex; short inserted = 0; short constrain_scale = x->constrain_scale; t_grain *grains = x->grains; if( steps < 2 ) { pd_error(0, "scale is undefined"); return; } if( pitch_deviation ) { pdev = 1.0 + pitch_deviation; pdev_invert = 1.0 / pdev; } for( i = 0; i < x->events; i++ ) { inserted = 0; for(j = 0; j < MAXGRAINS; j++ ) { if( grains[j].ephase >= eframes ) { if(steady) { grains[j].delay = (float)(i * horizon) / (float) x->events ; } else { grains[j].delay = granule_boundrand(0.0,(float) horizon); } grains[j].duration = (long) granule_boundrand(mindur, maxdur); grains[j].phase = 0.0; grains[j].ephase = 0.0; pan = granule_boundrand(minpan, maxpan); grains[j].panL = cos(pan * PIOVERTWO); grains[j].panR = sin(pan * PIOVERTWO); grains[j].amplitude = granule_boundrand(minamp, maxamp); grains[j].esi = (float) eframes / (float) grains[j].duration ; if(constrain_scale) { granule_constrain(&index_min,&index_max,minfreq, maxfreq, scale, steps); windex = (int) granule_boundrand((float)index_min, (float)index_max); } else { windex = (int) granule_boundrand(0.0, (float)(steps-1)); } grains[j].si = transpose * scale[windex] * (float) frames / sr; if( pitch_deviation ) { grains[j].si *= granule_boundrand(pdev_invert,pdev); } /* must add this code to spray, and also do for high frequencies */ if(lowblock_freq > 0.0) { if(grains[j].si * (sr/frames) < lowblock_freq) { post("lowblock: aborted grain with %f frequency",grains[j].si * (sr/frames)); grains[j].ephase = eframes; // abort grain } } if(highblock_freq > 0.0) { if(grains[j].si * (sr/frames) > highblock_freq) { post("highblock: aborted grain with %f frequency, greater than %f", grains[j].si * (sr/frames), highblock_freq); grains[j].ephase = eframes; // abort grain } } inserted = 1; goto nextgrain; } } if(!inserted) { pd_error(0, "could not insert grain"); return; } nextgrain: ; } } void granule_spray(t_granule *x) { int i,j; long eframes = x->windowbuf->b_frames; long frames = x->wavebuf->b_frames; float sr = x->sr; long horizon = x->horizon; // length of block for random events float mindur = x->mindur; float maxdur = x->maxdur; float minfreq = x->minfreq; // minimum frequency for a grain float maxfreq = x->maxfreq; // maximum frequency for a grain float minpan = x->minpan; // minimum pan for a grain float maxpan = x->maxpan; // maximum pan for a grain float minamp = x->minamp; // minimum amplitude for a grain float maxamp = x->maxamp; // maximum amplitude for a grain float transpose = x->transpose; // pitch scalar // float steady_dur = x->steady_dur; short steady = x->steady; float pan; t_grain *grains = x->grains; short inserted; for( i = 0; i < x->events; i++ ) { inserted = 0; for(j = 0; j < MAXGRAINS; j++ ) { if( grains[j].ephase >= eframes ) { if(steady) { grains[j].delay = (float)(i * horizon) / (float) x->events ; } else { grains[j].delay = granule_boundrand(0.0,(float) horizon); } grains[j].duration = (long) granule_boundrand(mindur, maxdur); grains[j].phase = 0.0; grains[j].ephase = 0.0; pan = granule_boundrand(minpan, maxpan); grains[j].panL = cos(pan * PIOVERTWO); grains[j].panR = sin(pan * PIOVERTWO); grains[j].amplitude = granule_boundrand(minamp, maxamp); grains[j].esi = (float) eframes / (float) grains[j].duration ; grains[j].si = transpose * granule_boundrand(minfreq, maxfreq) * (float) frames / sr; inserted = 1; goto nextgrain; } } if(! inserted) { pd_error(0, "could not insert grain"); return; } nextgrain: ; } } void *granule_grain(t_granule *x, t_symbol *msg, int argc, t_atom *argv) { short inserted; int j; float duration, frequency, amplitude, pan; t_grain *grains; long eframes; long frames; float sr; grains = x->grains; eframes = x->windowbuf->b_frames; frames = x->wavebuf->b_frames; sr = x->sr; if(argc < 4) { pd_error(0, "grain takes 4 arguments, not %d",argc); post("duration frequency amplitude pan"); return 0; } duration = atom_getintarg(0,argc,argv); frequency = atom_getfloatarg(1,argc,argv); // in ms amplitude = atom_getfloatarg(2,argc,argv); pan = atom_getfloatarg(3,argc,argv); if(duration <= 0.0) { pd_error(0, "illegal duration:%f",duration); return 0; } if(frequency <= 0.0) { pd_error(0, "illegal frequency:%f",frequency); return 0; } if(pan < 0.0 || pan > 1.0) { pd_error(0, "illegal pan:%f",pan); return 0; } inserted = 0; for(j = 0; j < MAXGRAINS; j++ ) { if( grains[j].ephase >= eframes ) { grains[j].delay = 0.0;// immediate deployment grains[j].duration = (long) (.001 * x->sr * duration); grains[j].phase = 0.0; grains[j].ephase = 0.0; grains[j].panL = cos(pan * PIOVERTWO); grains[j].panR = sin(pan * PIOVERTWO); grains[j].amplitude = amplitude; grains[j].esi = (float) eframes / (float) grains[j].duration ; grains[j].si = frequency * (float) frames / sr; return 0; } } pd_error(0, "could not insert grain"); return 0; } float granule_boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); } void *granule_new(t_symbol *msg, int argc, t_atom *argv) { t_granule *x = (t_granule *)pd_new(granule_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->wavebuf = (t_pdbuffer*)getbytes(sizeof(t_pdbuffer)); x->windowbuf = (t_pdbuffer*)getbytes(sizeof(t_pdbuffer)); srand(time(0)); x->pitchscale = (float *) getbytes(MAXSCALE * sizeof(float)); x->grains = (t_grain *) getbytes(MAXGRAINS * sizeof(t_grain)); // default names x->wavename = gensym("waveform"); x->windowname = gensym("window"); /* MaxMSP bug that may soon be fixed, this does not work: x->wavename = atom_getsymarg(0,argc,argv); x->windowname = atom_getsymarg(1,argc,argv); */ // apparently Pd lacks this Max/MSP bug x->wavename = atom_getsymbolarg(0,argc,argv); x->windowname = atom_getsymbolarg(1,argc,argv); x->sr = sys_getsr(); if(! x->sr ) x->sr = 44100; granule_init(x,0); return (x); } void granule_init(t_granule *x,short initialized) { int i; if(!initialized) { x->pitchsteps = 0; // we could predefine a 12t scale x->mute = 0; x->steady = 0; x->events = 10; x->horizon_ms = 1000; x->minfreq = 220.0; x->maxfreq = 880.0; x->minpan = .1; x->maxpan = .9; x->minamp = .1; x->maxamp = 1.0; x->mindur_ms = 150; x->maxdur_ms = 750; x->transpose = 1.0; x->pitch_deviation = 0.0; x->lowblock_freq = 0.0; // by default we do not block any frequencies x->highblock_freq = 0.0; // ditto x->constrain_scale = 0; } x->horizon = x->horizon_ms * .001 * x->sr; x->mindur = x->mindur_ms * .001 * x->sr; x->maxdur = x->maxdur_ms * .001 * x->sr; for( i = 0; i < MAXGRAINS; i++ ){ // this is what we test for a legal place to insert grain x->grains[i].ephase = 9999999999.0; } } void granule_info(t_granule *x) { int tcount = 0; t_grain *grains = x->grains; long eframes = x->windowbuf->b_frames; int i; for(i = 0; i < MAXGRAINS; i++ ) { if( grains[i].ephase < eframes ) ++tcount; } post("%d active grains", tcount); post("wavename %s", x->wavename->s_name); post("windowname %s", x->windowname->s_name); } void *granule_grist(t_granule *x, t_symbol *msg, int argc, t_atom *argv) { if(argc < 10 ) { pd_error(0, "grist takes 10 arguments:"); post("events horizon minfreq maxfreq minpan maxpan minamp maxamp mindur maxdur"); return 0; } x->events = atom_getintarg(0,argc,argv); x->horizon_ms = atom_getfloatarg(1,argc,argv); x->minfreq = atom_getfloatarg(2,argc,argv); x->maxfreq = atom_getfloatarg(3,argc,argv); x->minpan = atom_getfloatarg(4,argc,argv); x->maxpan = atom_getfloatarg(5,argc,argv); x->minamp = atom_getfloatarg(6,argc,argv); x->maxamp = atom_getfloatarg(7,argc,argv); x->mindur_ms = atom_getfloatarg(8,argc,argv); x->maxdur_ms = atom_getfloatarg(9,argc,argv); x->mindur = .001 * x->sr * x->mindur_ms ; x->maxdur = .001 * x->sr * x->maxdur_ms; x->horizon = .001 * x->sr * x->horizon_ms; if(x->minfreq < 0) { x->minfreq *= -1.0; } if(x->maxfreq < 0) { x->maxfreq *= -1.0; } if(x->minpan < 0.0) { x->minpan = 0.0; } if(x->maxpan > 1.0) { x->maxpan = 1.0; } if(x->events < 0) { x->events = 0; } return 0; } void granule_reload(t_granule *x) { granule_setbuf(x, x->wavename, x->windowname); } void granule_setbuf(t_granule *x, t_symbol *wavename, t_symbol *windowname) { t_garray *a; int frames; x->hosed = 0; x->wavebuf->b_frames = 0; x->windowbuf->b_frames = 0; x->wavebuf->b_nchans = 1; x->windowbuf->b_nchans = 1; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "granule~: %s: no such array", wavename->s_name); x->hosed = 1; } else if (!garray_getfloatwords(a, &frames, &x->wavebuf->b_samples)) { pd_error(x, "%s: bad template for granule~", wavename->s_name); x->hosed = 1; } else { x->wavebuf->b_frames = frames; garray_usedindsp(a); } if (!(a = (t_garray *)pd_findbyclass(windowname, garray_class))) { if (*wavename->s_name) pd_error(x, "granule~: %s: no such array", windowname->s_name); x->hosed = 1; } else if (!garray_getfloatwords(a, &frames, &x->windowbuf->b_samples)) { pd_error(x, "%s: bad template for granule~", windowname->s_name); x->hosed = 1; } else { x->windowbuf->b_frames = frames; garray_usedindsp(a); } } t_int *granule_performhose(t_int *w) { // t_granule *x = (t_granule *) (w[1]); float *outputL = (t_float *)(w[3]); float *outputR = (t_float *)(w[4]); int n = (int) w[5]; while(n--) *outputL++ = *outputR++ = 0; return (w+6); } t_int *granule_perform(t_int *w) { t_granule *x = (t_granule *) (w[1]); // float *in = (t_float *)(w[2]); // ignoring input float *outputL = (t_float *)(w[3]); float *outputR = (t_float *)(w[4]); int n = (int) w[5]; t_pdbuffer *wavebuf = x->wavebuf; t_pdbuffer *windowbuf = x->windowbuf; t_word *wavetable = wavebuf->b_samples; t_word *window = windowbuf->b_samples; t_grain *grains = x->grains; float sample; float envelope; float amplitude; float panL, panR; float si; float esi; float phase; float ephase; long delay; long frames = wavebuf->b_frames; long eframes = windowbuf->b_frames; int i,j; /* grain parameters */ if( x->mute ) { while(n--) *outputL++ = *outputR++ = 0; return (w+6); } // pre-clean buffer for( i = 0; i < n; i++ ) { outputL[i] = outputR[i] = 0; } for (j=0; j= eframes) { goto nextgrain; } amplitude = grains[j].amplitude; si = grains[j].si; esi = grains[j].esi; phase = grains[j].phase; ephase = grains[j].ephase; delay = grains[j].delay; panL = grains[j].panL; panR = grains[j].panR; for(i = 0; i < n; i++ ) { // ++(x->sampcount); // not really needed if( delay > 0 ) { --delay; } if( delay <= 0 && ephase < eframes) { sample = wavetable[(int)phase].w_float; envelope = amplitude * window[(int)ephase].w_float; sample *= envelope; outputL[i] += panL * sample; outputR[i] += panR * sample; phase += si; ephase += esi; while( phase >= frames ) phase -= frames; if( ephase >= eframes ) { grains[j].ephase = ephase; goto nextgrain; // must escape loop now } } } grains[j].phase = phase; grains[j].ephase = ephase; grains[j].delay = delay; nextgrain: ; } return (w+6); } void granule_dsp_free(t_granule *x) { freebytes(x->grains, MAXGRAINS * sizeof(t_grain)); freebytes(x->pitchscale, MAXSCALE * sizeof(float)); } void granule_dsp(t_granule *x, t_signal **sp) { granule_reload(x); if( x->hosed ) { post("You need some valid buffers"); dsp_add(granule_performhose, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); return; } if( x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; if( !x->sr ) { post("warning: zero sampling rate!"); x->sr = 44100; } granule_init(x,1); } dsp_add(granule_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/kbuffer~-help.pd000066400000000000000000000036751430526361000201710ustar00rootroot00000000000000#N canvas 600 60 637 711 12; #X text 302 301 args: ksampling rate \, storage time (in ms.); #N canvas 600 60 466 316 more-messages 0; #X msg 238 89 size 4000; #X obj 173 154 outlet; #X msg 275 124 info; #X msg 137 91 ksrate 1024; #X text 134 55 reset size or krate; #X connect 0 0 1 0; #X connect 2 0 1 0; #X connect 3 0 1 0; #X restore 332 264 pd more-messages; #X msg 73 259 record; #X msg 128 260 play; #X msg 173 261 stop; #X msg 216 261 speed \$1; #X msg 291 261 loop; #X obj 74 367 phasor~; #X floatatom 288 356 5 0 0 0 - - -; #X floatatom 56 230 5 0 0 2 kb-input kb-input -; #X obj 205 447 hsl 128 15 300 1000 0 0 kb-input empty empty -2 -6 0 8 -261119 -1 -1 0 1; #X floatatom 216 219 5 0 0 0 - - -; #X msg 216 196 1; #X obj 216 175 loadbang; #X text 262 214 try different playback speed \, negative OK; #X text 203 419 hit record \; then perform some wiggles here:; #X text 256 239 after done recording \, hit loop or play; #N canvas 0 22 222 238 monitor-phase 0; #X obj 101 116 metro 100; #X obj 101 97 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 1 1 ; #X obj 101 144 snapshot~; #X obj 101 42 loadbang; #X msg 101 67 1; #X obj 101 179 outlet; #X obj 15 48 inlet~; #X connect 0 0 2 0; #X connect 1 0 0 0; #X connect 2 0 5 0; #X connect 3 0 4 0; #X connect 4 0 1 0; #X connect 6 0 2 0; #X restore 288 332 pd monitor-phase; #X text 51 139 kbuffer~ lets you sample gestures with a lower sampling rate than the audio rate., f 68; #X obj 74 484 lpp-meters; #X obj 74 402 lyonpotpourri/killdc~; #X obj 74 304 lyonpotpourri/kbuffer~ 512 8000; #X obj 41 37 lpp-icon kbuffer~; #X text 262 61 - control-rate sampling of gestural input; #X connect 1 0 21 0; #X connect 2 0 21 0; #X connect 3 0 21 0; #X connect 4 0 21 0; #X connect 5 0 21 0; #X connect 6 0 21 0; #X connect 7 0 20 0; #X connect 9 0 21 0; #X connect 11 0 5 0; #X connect 12 0 11 0; #X connect 13 0 12 0; #X connect 17 0 8 0; #X connect 20 0 19 0; #X connect 20 0 19 1; #X connect 21 0 7 0; #X connect 21 1 17 0; pd-lyonpotpourri-3.0.1/kbuffer~.c000066400000000000000000000175031430526361000170550ustar00rootroot00000000000000#include "MSPd.h" #define OBJECT_NAME "kbuffer~" static t_class *kbuffer_class; typedef struct _kbuffer { t_object x_obj; float x_f; float ksrate; float srate; float si; float phase; float duration; int iphase; int lastphase; int length; float *data; float fval; float lastval; short record_flag; short play_flag; short dump_flag; short loop_flag; float sync ; float speed ; short in_connected; int memsize; } t_kbuffer; t_int *kbuffer_perform(t_int *w); static void kbuffer_dsp(t_kbuffer *x, t_signal **sp); static void *kbuffer_new(t_symbol *s, int argc, t_atom *argv); static void kbuffer_dsp_free(t_kbuffer *x); static void kbuffer_record(t_kbuffer *x); static void kbuffer_play(t_kbuffer *x); static void kbuffer_loop(t_kbuffer *x); static void kbuffer_info(t_kbuffer *x); static void kbuffer_dump(t_kbuffer *x); static void kbuffer_stop(t_kbuffer *x); static void kbuffer_info(t_kbuffer *x); static void kbuffer_speed(t_kbuffer *x, t_floatarg speed); static void kbuffer_size(t_kbuffer *x, t_floatarg ms); static void kbuffer_ksrate(t_kbuffer *x, t_floatarg ksrate); //static void kbuffer_float(t_kbuffer *x, double f); //static void kbuffer_int(t_kbuffer *x, int i); static void kbuffer_init(t_kbuffer *x,short initialized); void kbuffer_tilde_setup(void) { kbuffer_class = class_new(gensym("kbuffer~"), (t_newmethod)kbuffer_new, (t_method)kbuffer_dsp_free,sizeof(t_kbuffer), 0,A_GIMME,0); CLASS_MAINSIGNALIN(kbuffer_class, t_kbuffer, x_f); class_addmethod(kbuffer_class,(t_method)kbuffer_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(kbuffer_class,(t_method)kbuffer_record,gensym("record"),0); class_addmethod(kbuffer_class,(t_method)kbuffer_play,gensym("play"),0); class_addmethod(kbuffer_class,(t_method)kbuffer_loop,gensym("loop"),0); class_addmethod(kbuffer_class,(t_method)kbuffer_stop,gensym("stop"),0); class_addmethod(kbuffer_class,(t_method)kbuffer_dump,gensym("dump"),0); class_addmethod(kbuffer_class,(t_method)kbuffer_info,gensym("info"),0); class_addmethod(kbuffer_class,(t_method)kbuffer_speed,gensym("speed"),A_FLOAT,0); class_addmethod(kbuffer_class,(t_method)kbuffer_size,gensym("size"),A_FLOAT,0); class_addmethod(kbuffer_class,(t_method)kbuffer_ksrate,gensym("ksrate"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void kbuffer_speed(t_kbuffer *x, t_floatarg speed) { x->speed = speed; } void kbuffer_size(t_kbuffer *x, t_floatarg ms) { int i; if(ms < 1) ms = 1; x->duration = ms / 1000.0 ; x->memsize = x->ksrate * x->duration * sizeof(float); x->length = x->duration * x->ksrate ; x->data = (float*) realloc(x->data,x->memsize*sizeof(float)); for( i = 0; i < x->length; i++) { x->data[i] = 0.0; } } void kbuffer_ksrate(t_kbuffer *x, t_floatarg ksrate) { int i; if( ksrate < 1 ) ksrate = 1 ; x->ksrate = ksrate ; x->memsize = x->ksrate * x->duration * sizeof(float); x->length = x->duration * x->ksrate ; x->si = x->ksrate / x->srate; x->data = (float*) realloc(x->data,x->memsize*sizeof(float)); for( i = 0; i < x->length; i++) { x->data[i] = 0.0; } } void kbuffer_info(t_kbuffer *x) { post("function length is %d samples",x->length); post("function sampling rate is %.2f",x->ksrate); post("function byte size is %d",x->memsize); post("function duration is %.2f seconds",x->duration); } void kbuffer_record(t_kbuffer *x) { x->record_flag = 1; x->play_flag = 0; x->dump_flag = 0; x->loop_flag = 0; x->sync = 0.0; x->phase = x->iphase = 0 ; x->lastphase = -1 ; // post("starting to record"); } void kbuffer_stop(t_kbuffer *x) { x->record_flag = 0; x->play_flag = 0; x->dump_flag = 0; x->loop_flag = 0; x->sync = 0.0; x->phase = x->iphase = 0 ; x->lastphase = -1 ; } void kbuffer_dump(t_kbuffer *x) { x->record_flag = 0; x->play_flag = 0; x->loop_flag = 0; x->dump_flag = 1; x->sync = 0.0; x->phase = x->iphase = 0 ; x->lastphase = -1 ; } void kbuffer_play(t_kbuffer *x) { x->record_flag = 0; x->play_flag = 1; x->dump_flag = 0; x->loop_flag = 0; x->sync = 0.0; x->phase = x->iphase = 0 ; x->lastphase = -1 ; } void kbuffer_loop(t_kbuffer *x) { x->record_flag = 0; x->play_flag = 0; x->dump_flag = 0; x->loop_flag = 1; x->sync = 0.0; x->phase = x->iphase = 0 ; x->lastphase = -1 ; } void kbuffer_dsp_free(t_kbuffer *x) { freebytes(x->data, x->memsize * sizeof(float)); } t_int *kbuffer_perform(t_int *w) { // DSP config t_kbuffer *x = (t_kbuffer *)(w[1]); t_float *in = (t_float *)(w[2]); t_float *out = (t_float *)(w[3]); t_float *sync_out = (t_float *)(w[4]); int n = (int) w[5]; short record_flag = x->record_flag; short play_flag = x->play_flag ; short dump_flag = x->dump_flag ; short loop_flag = x->loop_flag ; int length = x->length; int iphase = x->iphase; int lastphase = x->lastphase; float phase = x->phase; float *data = x->data; float si = x->si; float speed = x->speed; float sample; short in_connected = x->in_connected; float fval = x->fval; /*********************/ while( n-- ) { if( in_connected ) { sample = *in++ ; } else { sample = fval; } if( record_flag ) { iphase = phase; /* phase += (si * speed); Bug!! */ phase += si; if( iphase >= length ) { record_flag = 0; // post("end of recording at %d samples",length); } else if( iphase > lastphase ) { lastphase = iphase ; data[ iphase ] = sample ; } *sync_out++ = phase / (float) length ; *out++ = sample ; // mirror input to output } else if ( play_flag ) { iphase = phase; phase += (si * speed); if( iphase >= length ) { play_flag = 0; *out++ = data[ length - 1 ]; // lock at final value } else if (iphase < 0 ) { play_flag = 0; *out++ = data[ 0 ]; // lock at first value } else { *out++ = data[ iphase ] ; } *sync_out++ = phase / (float) length ; } else if ( loop_flag ) { iphase = phase; phase += (si * speed); if( iphase >= length ) { phase = iphase = 0; } else if (iphase < 0 ) { phase = iphase = length - 1; } *out++ = data[ iphase ] ; *sync_out++ = phase / (float) length ; } else if ( dump_flag ) { iphase = phase ; phase += 1.0 ; if( iphase >= length ) { dump_flag = 0; } else { *out++ = data[ iphase ]; } } else { *sync_out++ = 0.0 ; *out++ = 0.0; } x->phase = phase; x->lastphase = lastphase; x->record_flag = record_flag; x->play_flag = play_flag; } // DSP CONFIG return (w+6); } void *kbuffer_new(t_symbol *s, int argc, t_atom *argv) { t_kbuffer *x = (t_kbuffer *)pd_new(kbuffer_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->srate = sys_getsr(); if( x->srate == 0 ) { pd_error(0, "zero sampling rate - set to 44100"); x->srate = 44100; } x->ksrate = atom_getfloatarg(0,argc,argv); x->duration = atom_getfloatarg(1,argc,argv)/1000.0; if(x->ksrate <= 0) x->ksrate = 128; if(x->duration <= 0) x->duration = 10.; kbuffer_init(x,0); return (x); } void kbuffer_init(t_kbuffer *x,short initialized) { if(!initialized) { x->record_flag = 0; x->play_flag = 0; x->dump_flag = 0; x->loop_flag = 0; x->fval = 0; x->speed = 1.0 ; x->memsize = x->ksrate * x->duration * sizeof(float); x->length = x->duration * x->ksrate; x->data = (float *) getbytes(x->memsize * sizeof(float)); } x->si = x->ksrate / x->srate; } void kbuffer_dsp(t_kbuffer *x, t_signal **sp) { // DSP CONFIG x->in_connected = 1; if(x->srate != sp[0]->s_sr) { x->srate = sp[0]->s_sr; kbuffer_init(x,1); } dsp_add(kbuffer_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/killdc~-help.pd000066400000000000000000000016151430526361000177770ustar00rootroot00000000000000#N canvas 600 60 565 486 12; #X obj 45 256 killdc~; #X obj 45 204 +~ 0.5; #X obj 45 174 *~ 0.5; #N canvas 0 22 450 300 (subpatch) 0; #X array sine+dc 441 float 2; #X coords 0 1 441 -1 200 140 1; #X restore 306 103 graph; #X obj 24 336 tabwrite~ sine+dc; #X msg 99 278 bang; #N canvas 0 22 450 300 (subpatch) 0; #X array dc-gone 441 float 2; #X coords 0 1 441 -1 200 140 1; #X restore 305 257 graph; #X obj 151 336 tabwrite~ dc-gone; #X obj 45 144 osc~ 100; #X text 136 278 <- see DC cut in action; #X obj 25 375 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 45 380 DACs need to be on; #X obj 22 12 lpp-icon killdc~; #X text 252 39 - DC blocker; #X text 24 116 [killdc~] removes DC from input signal; #X msg 25 398 \; pd dsp \$1; #X connect 0 0 7 0; #X connect 1 0 0 0; #X connect 1 0 4 0; #X connect 2 0 1 0; #X connect 5 0 4 0; #X connect 5 0 7 0; #X connect 8 0 2 0; #X connect 10 0 15 0; pd-lyonpotpourri-3.0.1/killdc~.c000066400000000000000000000047671430526361000167030ustar00rootroot00000000000000#include "MSPd.h" #define OBJECT_NAME "killdc~" #define FUNC_LEN (512) #define MAXSECTS 20 static t_class *killdc_class; typedef struct { float ps[4][MAXSECTS]; float c[4][MAXSECTS]; int nsects ; float xnorm; } COEFS ; typedef struct _killdc { t_object x_obj; float x_f; COEFS fdata; } t_killdc; static void *killdc_new(t_symbol *s); static t_int *offset_perform(t_int *w); static t_int *killdc_perform(t_int *w); static void killdc_dsp(t_killdc *x, t_signal **sp); void killdc_tilde_setup(void) { killdc_class = class_new(gensym("killdc~"),(t_newmethod)killdc_new,0, sizeof(t_killdc), 0, A_DEFSYMBOL,0); CLASS_MAINSIGNALIN(killdc_class,t_killdc, x_f ); class_addmethod(killdc_class,(t_method)killdc_dsp,gensym("dsp"),A_CANT,0); potpourri_announce(OBJECT_NAME); } void *killdc_new(t_symbol *s) { int i, j; t_killdc *x = (t_killdc *)pd_new(killdc_class); outlet_new(&x->x_obj, gensym("signal")); /**************/ x->fdata.nsects = 3; x->fdata.c[0][0] = -1.9999995 ; x->fdata.c[1][0] = -1.9997407 ; x->fdata.c[2][0] = 1.0000000 ; x->fdata.c[3][0] = 0.99974253 ; x->fdata.c[0][1] = -1.9999997 ; x->fdata.c[1][1] = -1.9988353 ; x->fdata.c[2][1] = 1.0000000 ; x->fdata.c[3][1] = 0.99883796 ; x->fdata.c[0][2] = -2.0000000 ; x->fdata.c[1][2] = -1.9959218 ; x->fdata.c[2][2] = 1.0000000 ; x->fdata.c[3][2] = 0.99592773 ; for(i=0; i< x->fdata.nsects; i++) { for(j=0;j<4;j++) { x->fdata.ps[j][i] = 0.0; } } x->fdata.xnorm = 0.99725327e+00 ; // INITIALIZATIONS return (x); } // method from Paul Lansky's cmix implementation t_int *killdc_perform(t_int *w) { t_float *in1,*out; float sample ; int n; int m; float op; // int lcount = 0; /********/ t_killdc *x = (t_killdc *) (w[1]); in1 = (t_float *)(w[2]); out = (t_float *)(w[3]); n = (int)(w[4]); while (n--) { sample = *in1++; for(m=0; m< x->fdata.nsects;m++) { op = sample + x->fdata.c[0][m] * x->fdata.ps[0][m] + x->fdata.c[2][m] * x->fdata.ps[1][m] - x->fdata.c[1][m] * x->fdata.ps[2][m] - x->fdata.c[3][m] * x->fdata.ps[3][m]; x->fdata.ps[1][m] = x->fdata.ps[0][m]; x->fdata.ps[0][m] = sample; x->fdata.ps[3][m] = x->fdata.ps[2][m]; x->fdata.ps[2][m] = op; sample = op; } *out++ = sample * x->fdata.xnorm ; } return (w+5); } void killdc_dsp(t_killdc *x, t_signal **sp) { dsp_add(killdc_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/latch~-help.pd000066400000000000000000000013251430526361000176260ustar00rootroot00000000000000#N canvas 600 60 758 590 12; #X obj 54 329 *~; #X obj 54 271 osc~ 500; #X obj 301 201 osc~ 0.1; #X obj 301 224 *~ 400; #X obj 301 252 +~ 450; #X text 320 277 arg: latch duration in ms.; #X obj 54 372 lpp-meters; #X obj 31 6 lpp-icon latch~; #X text 32 100 [latch~] is a sample-accurate latch generator. An incoming click is held for a given amount of time.; #X text 257 32 - sample-accurate latch generator; #X obj 136 277 lyonpotpourri/latch~ 250; #X obj 136 176 lyonpotpourri/samm~ 60 1; #X text 360 246 <= uses [osc~] to gradually change duration of latch ; #X connect 0 0 6 0; #X connect 0 0 6 1; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 10 1; #X connect 10 0 0 1; #X connect 11 0 10 0; pd-lyonpotpourri-3.0.1/latch~.c000066400000000000000000000046061430526361000165240ustar00rootroot00000000000000#include "MSPd.h" static t_class *latch_class; #define OBJECT_NAME "latch~" #define LATCH_WAITING 0 #define LATCH_RUNNING 1 typedef struct _latch { t_object x_obj; t_float x_f; t_float current; long latch; long dsamps; long sr; t_float duration; long status; long connected; } t_latch; static void *latch_new(t_float duration); static t_int *latch_perform(t_int *w); static void latch_dsp(t_latch *x, t_signal **sp); void latch_tilde_setup(void) { latch_class = class_new(gensym("latch~"), (t_newmethod)latch_new, 0, sizeof(t_latch), 0,A_FLOAT, 0); CLASS_MAINSIGNALIN(latch_class, t_latch, x_f); class_addmethod(latch_class, (t_method)latch_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } static void *latch_new(t_float duration) { t_latch *x = (t_latch *)pd_new(latch_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->status = LATCH_WAITING; x->duration = duration; x->sr = sys_getsr(); if(x->duration <= 1.0) x->duration = 1.0; x->duration *= 0.001; x->dsamps = x->sr ? x->sr * x->duration : 44100; return x; } static t_int *latch_perform(t_int *w) { t_latch *x = (t_latch *) (w[1]); t_float *trigger = (t_float *)(w[2]); t_float *vec_duration = (t_float *)(w[3]); t_float *output = (t_float *)(w[4]); int n = (int) w[5]; int next_pointer = 6; long latch = x->latch; long dsamps = x->dsamps; long status = x->status; t_float current = x->current; t_float duration = x->duration; long sr = x->sr; long connected = x->connected; int i = 0; for(i = 0; i < n; i++) { if(connected) { duration = vec_duration[i]; if( duration > 0.0 ){ // dummy proof dsamps = sr * duration * 0.001; } } if(trigger[i]) { latch = 0; status = LATCH_RUNNING; current = trigger[i]; } else { latch++; if(latch >= dsamps) { status = LATCH_WAITING; current = 0.0; } } output[i] = current; } x->current = current; x->status = status; x->latch = latch; x->dsamps = dsamps; return w + next_pointer; } static void latch_dsp(t_latch *x, t_signal **sp) { x->connected = 1; if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; x->dsamps = x->duration * x->sr; } dsp_add(latch_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/leanconvert.c000066400000000000000000000006021430526361000175430ustar00rootroot00000000000000#include "fftease.h" void leanconvert( float *S, float *C, int N2 ) { int real, imag, amp, phase; float a, b; int i; double hypot(), atan2(); for ( i = 0; i <= N2; i++ ) { imag = phase = ( real = amp = i<<1 ) + 1; a = ( i == N2 ? S[1] : S[real] ); b = ( i == 0 || i == N2 ? 0. : S[imag] ); C[amp] = hypot( a, b ); C[phase] = -atan2( b, a ); } } pd-lyonpotpourri-3.0.1/leanunconvert.c000066400000000000000000000012041430526361000201050ustar00rootroot00000000000000#include "fftease.h" /* unconvert essentially undoes what convert does, i.e., it turns N2+1 PAIRS of amplitude and frequency values in C into N2 PAIR of complex spectrum data (in rfft format) in output array S; sampling rate R and interpolation factor I are used to recompute phase values from frequencies */ void leanunconvert( float *C, float *S, int N2 ) { double cos(), sin(); int real, imag, amp, phase; register int i; for ( i = 0; i <= N2; i++ ) { imag = phase = ( real = amp = i<<1 ) + 1; S[real] = *(C+amp) * cos( *(C+phase) ); if ( i != N2 ) S[imag] = -*(C+amp) * sin( *(C+phase) ); } } pd-lyonpotpourri-3.0.1/lpp-icon.pd000066400000000000000000000010611430526361000171250ustar00rootroot00000000000000#N canvas 600 60 669 435 12; #X obj 101 101 cnv 15 208 40 empty empty LyonPotpourri 8 18 1 28 -261682 -4160 0; #X obj 411 315 cnv 15 105 50 empty empty empty 20 12 0 14 -1 -66577 0; #X text 92 50 A helper abstraction used in the documentation of LyonPotpourri , f 29; #X obj 101 142 cnv 15 208 38 empty \$0-extern-name empty 8 16 0 18 -262130 -13381 0; #X obj 389 203 s \$0-extern-name; #X obj 390 93 loadbang; #X msg 389 167 label \$1; #X obj 406 128 symbol \$1; #X connect 5 0 7 0; #X connect 6 0 4 0; #X connect 7 0 6 0; #X coords 0 -1 1 1 210 82 2 100 100; pd-lyonpotpourri-3.0.1/lpp-meters.pd000066400000000000000000000025001430526361000174730ustar00rootroot00000000000000#N canvas 600 60 723 729 12; #X obj 124 275 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #X obj 123 219 - 96; #X obj 123 157 env~ 8192 4096; #X obj 180 275 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #X obj 202 219 - 96; #X obj 262 157 env~ 8192 4096; #X obj 123 91 inlet~; #X obj 262 91 inlet~; #X obj 104 407 hsl 134 15 0 1 0 0 empty empty Gain 50 9 0 14 -228856 -1 -1 0 1; #X obj 321 232 *~; #X obj 460 236 *~; #X obj 120 472 change; #X obj 321 277 dac~; #X obj 123 249 tgl 15 0 empty \$0-dspstatus DSP 23 7 0 10 -262144 -1 -1 0 1; #X msg 24 241 \; pd dsp \$1; #X obj 120 448 != 0; #X msg 253 374 color #DCDCDC #000000 #000000; #X obj 120 494 s \$0-dspstatus; #X obj 44 464 line~; #X msg 44 441 \$1 10; #X obj 44 488 *~; #X obj 44 512 *~; #X obj 44 544 throw~ \$0-gainval; #X obj 494 170 catch~ \$0-gainval; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 4 0 3 0; #X connect 5 0 4 0; #X connect 6 0 9 0; #X connect 7 0 10 0; #X connect 8 0 15 0; #X connect 8 0 19 0; #X connect 9 0 12 0; #X connect 9 0 2 0; #X connect 10 0 12 1; #X connect 10 0 5 0; #X connect 11 0 17 0; #X connect 13 0 14 0; #X connect 15 0 11 0; #X connect 18 0 20 0; #X connect 18 0 20 1; #X connect 19 0 18 0; #X connect 20 0 21 1; #X connect 20 0 21 0; #X connect 21 0 22 0; #X connect 23 0 10 1; #X connect 23 0 9 1; #X coords 0 -1 1 1 140 182 2 100 240; pd-lyonpotpourri-3.0.1/lpp.h000066400000000000000000000022351430526361000160270ustar00rootroot00000000000000#include #include #include #include #include #define LYONPOTPOURRI_MSG "-[LyonPotpourri 3.0]-" #define LYONPOTPOURRI_VERSION "3.0 (pre-release 3.1)" #define LPP_COMPILE_DATE "12 May 2010" #define lpp_version(objectname) post("%s: version %s compiled %s",objectname,LYONPOTPOURRI_VERSION,LPP_COMPILE_DATE); // #define potpourri_announce(objname) post("%s\t ( %s )",LYONPOTPOURRI_MSG,objname) #define NO_FREE_FUNCTION 0 #ifndef PI #define PI 3.1415926535898 #endif #ifndef PIOVERTWO #define PIOVERTWO 1.5707963268 #endif #ifndef TWOPI #define TWOPI 6.2831853072 #endif // budget version of Max/MSP denorm function #define FIX_DENORM_FLOAT(v) (v=(fabs(v) < 0.000001 ? 0.f : (v))) /*** MSP helper functions, thanks JKC! ***/ void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av); void atom_arg_getsym(t_symbol **c, long idx, long ac, t_atom *av); void atom_arg_getfloat(float *c, long idx, long ac, t_atom *av) { if (c&&ac&&av&&(idx; #X text 10 10 VERSION 2.0; #X text 10 60 LICENSE MIT; #X restore 10 10 pd META; pd-lyonpotpourri-3.0.1/magfreq_analysis~-help.pd000066400000000000000000000041661430526361000220660ustar00rootroot00000000000000#N canvas 511 74 783 622 12; #X obj 207 247 osc~ 440; #X msg 108 319 channel \$1; #X floatatom 108 294 5 0 0 0 - #0-channel -; #X obj 207 468 snapshot~; #X obj 256 442 metro 100; #X obj 256 421 tgl 15 0 empty \$0-metrotog empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 128 541 5 0 0 0 - - -; #X obj 403 468 snapshot~; #X floatatom 403 541 8 0 0 0 - - -; #X floatatom 176 209 5 0 0 0 - #0-frequency -; #X msg 308 247 fftinfo; #X obj 32 14 lpp-icon magfreq_analysis~; #X text 465 540 <= estimated frequency for selected bin; #X text 173 540 <= amplitude for selected bin; #X text 21 292 select bin to inspect, f 10; #X text 255 42 - estimate of instantaneous amplitude/frequency spectrum ; #X text 465 280 args: overlap factor \, window factor; #X text 34 109 Analyze input as amplitude/frequency spectra. Optional arguments are overlap factor and window factor \, which must both be a factor of 2, f 71; #X text 367 249 <= show analysis constants; #X text 216 207 <= try different frequencies \, then see what bins they show up in, f 86; #N canvas 600 60 609 371 init 0; #X obj 39 117 symbol \$0-frequency; #X obj 187 117 symbol \$0-metrotog; #X obj 39 45 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 332 117 symbol \$0-channel; #X obj 39 70 t b b b; #X msg 39 233 \; \$1 440 \; \$2 1 \; \$3 5; #X obj 39 189 pack s s s; #X obj 39 9 loadbang; #X connect 0 0 6 0; #X connect 1 0 6 1; #X connect 2 0 4 0; #X connect 3 0 6 2; #X connect 4 0 0 0; #X connect 4 1 1 0; #X connect 4 2 3 0; #X connect 6 0 5 0; #X connect 7 0 2 0; #X restore 547 500 pd init; #X obj 207 281 lyonpotpourri/magfreq_analysis~ 8 2; #X obj 403 372 lyonpotpourri/channel~; #X obj 207 372 lyonpotpourri/channel~; #X msg 547 464 \; pd dsp \$1; #X obj 547 438 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 570 440 turn on DACs; #X connect 0 0 21 0; #X connect 1 0 22 0; #X connect 1 0 23 0; #X connect 2 0 1 0; #X connect 3 0 6 0; #X connect 4 0 3 0; #X connect 4 0 7 0; #X connect 5 0 4 0; #X connect 7 0 8 0; #X connect 9 0 0 0; #X connect 10 0 21 0; #X connect 21 0 23 0; #X connect 21 1 22 0; #X connect 22 0 7 0; #X connect 23 0 3 0; #X connect 25 0 24 0; pd-lyonpotpourri-3.0.1/magfreq_analysis~.c000066400000000000000000000520071430526361000207540ustar00rootroot00000000000000#include "MSPd.h" /* Pd 3.0 Version */ #define MAX_N 16384 #define MAX_N2 8192 #define MAX_Nw 16384 static void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ); static void fold( float *I, float *W, int Nw, float *O, int N, int n ); static void init_rdft(int n, int *ip, float *w); static void rdft(int n, int isgn, float *a, int *ip, float *w); static void bitrv2(int n, int *ip, float *a); static void cftsub(int n, float *a, float *w); static void rftsub(int n, float *a, int nc, float *c); static void makewt(int nw, int *ip, float *w); static void makect(int nc, int *ip, float *c); static void makehanning( float *H, float *A, float *S, int Nw, int N, int I,int odd ); static int power_of_two(int test); static t_class *magfreq_analysis_class; #define OBJECT_NAME "magfreq_analysis~" typedef struct _magfreq_analysis { t_object x_obj; float x_f; float R; int N; int N2; int Nw; int Nw2; int D; int i; int inCount; float *Wanal; float *Wsyn; float *input; float *Hwin; float *buffer; float *channel; float *output; // for convert float *c_lastphase_in; float *c_lastphase_out; float c_fundamental; float c_factor_in; float c_factor_out; // for oscbank int NP; float P; int L; int first; float Iinv; float *lastamp; float *lastfreq; float *index; float *table; float myPInc; float ffac; // float lofreq; float hifreq; int lo_bin; int hi_bin; float topfreq; float synt; // for fast fft float mult; float *trigland; int *bitshuffle; // int bypass_state; int pitch_connected; int synt_connected; int overlap; int winfac; short mute; } t_magfreq_analysis; static void *magfreq_analysis_new(t_symbol *s, int argc, t_atom *argv); static t_int *magfreq_analysis_perform(t_int *w); static void magfreq_analysis_dsp(t_magfreq_analysis *x, t_signal **sp); // static void magfreq_analysis_bypass(t_magfreq_analysis *x, t_floatarg state); // static void magfreq_analysis_float(t_magfreq_analysis *x, double f); static void magfreq_analysis_free(t_magfreq_analysis *x); static void magfreq_analysis_mute(t_magfreq_analysis *x, t_floatarg tog); static void magfreq_analysis_init(t_magfreq_analysis *x, short initialized); //static void magfreq_analysis_lowfreq(t_magfreq_analysis *x, t_floatarg f); //static void magfreq_analysis_highfreq(t_magfreq_analysis *x, t_floatarg f); //static void magfreq_analysis_overlap(t_magfreq_analysis *x, t_floatarg o); //static void magfreq_analysis_winfac(t_magfreq_analysis *x, t_floatarg f); static void magfreq_analysis_fftinfo(t_magfreq_analysis *x);; void magfreq_analysis_tilde_setup(void) { magfreq_analysis_class = class_new(gensym("magfreq_analysis~"), (t_newmethod)magfreq_analysis_new, (t_method)magfreq_analysis_free ,sizeof(t_magfreq_analysis), 0,A_GIMME,0); CLASS_MAINSIGNALIN(magfreq_analysis_class, t_magfreq_analysis, x_f); class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_mute, gensym("mute"), A_DEFFLOAT,0); // class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_highfreq, gensym("highfreq"), A_DEFFLOAT,0); // class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_lowfreq, gensym("lowfreq"), A_DEFFLOAT,0); class_addmethod(magfreq_analysis_class, (t_method)magfreq_analysis_fftinfo, gensym("fftinfo"),0); potpourri_announce(OBJECT_NAME); } void magfreq_analysis_mute(t_magfreq_analysis *x, t_floatarg tog) { x->mute = (short)tog; } void magfreq_analysis_overlap(t_magfreq_analysis *x, t_floatarg f) { int i = (int) f; if(!power_of_two(i)) { pd_error(0, "%f is not a power of two",f); return; } x->overlap = i; magfreq_analysis_init(x,1); } void magfreq_analysis_winfac(t_magfreq_analysis *x, t_floatarg f) { int i = (int)f; if(!power_of_two(i)) { pd_error(0, "%f is not a power of two",f); return; } x->winfac = i; magfreq_analysis_init(x,2); } void magfreq_analysis_fftinfo(t_magfreq_analysis *x) { if( ! x->overlap ) { post("zero overlap!"); return; } post("%s: FFT size %d, hopsize %d, windowsize %d", OBJECT_NAME, x->N, x->N/x->overlap, x->Nw); post("sample rate: %f", x->R); post("fundamental analysis frequency %f", x->c_fundamental); } void magfreq_analysis_free(t_magfreq_analysis *x ) { freebytes(x->c_lastphase_in,(MAX_N2+1) * sizeof(float)); freebytes(x->c_lastphase_out,(MAX_N2+1) * sizeof(float)); freebytes(x->trigland,MAX_N * 2 * sizeof( float )); freebytes(x->bitshuffle,MAX_N * 2 * sizeof( int )); freebytes(x->Wanal,(MAX_Nw) * sizeof(float)); freebytes(x->Wsyn,(MAX_Nw) * sizeof(float)); freebytes(x->input,MAX_Nw * sizeof(float)); freebytes(x->Hwin,(MAX_Nw) * sizeof(float)); freebytes(x->buffer,MAX_N * sizeof(float)); freebytes(x->channel,(MAX_N+2) * sizeof(float)); freebytes(x->output,MAX_Nw * sizeof(float)); freebytes(x->lastamp,(MAX_N+1) * sizeof(float)); freebytes(x->lastfreq,(MAX_N+1) * sizeof(float)); freebytes(x->index,(MAX_N+1) * sizeof(float)); freebytes(x->table,x->L * sizeof(float)); } void magfreq_analysis_highfreq(t_magfreq_analysis *x, t_floatarg f) { float curfreq; if(f < x->lofreq) { pd_error(0, "current minimum is %f",x->lofreq); return; } if(f > x->R/2 ) { f = x->R/2; } x->hifreq = f; x->hi_bin = 1; curfreq = 0; while(curfreq < x->hifreq) { ++(x->hi_bin); curfreq += x->c_fundamental; } } void magfreq_analysis_lowfreq(t_magfreq_analysis *x, t_floatarg f) { float curfreq; if(f > x->hifreq) { pd_error(0, "current maximum is %f",x->lofreq); return; } if(f < 0 ) { f = 0; } x->lofreq = f; x->lo_bin = 0; curfreq = 0; while( curfreq < x->lofreq ) { ++(x->lo_bin); curfreq += x->c_fundamental ; } } void magfreq_analysis_init(t_magfreq_analysis *x, short initialized) { int i; float curfreq; x->R = sys_getsr(); x->D = sys_getblksize(); if(!x->R){//temp init if MSP functions returned zero x->R = 48000.0; } if(!x->D){ x->D = 64; } if(x->P <= 0){ x->P = 1.0; } if(!power_of_two(x->overlap)){ x->overlap = 2; } if(!power_of_two(x->winfac)){ x->winfac = 2; } x->N = x->D * x->overlap; x->Nw = x->N * x->winfac; x->N2 = x->N / 2; x->Nw2 = x->Nw / 2; x->inCount = -(x->Nw); x->bypass_state = 0; x->mult = 1. / (float) x->N; x->pitch_connected = 0; x->synt_connected = 0; x->L = 8192 ; x->c_fundamental = x->R/(float)( (x->N2)<<1 ); x->c_factor_in = x->R/((float)x->D * TWOPI); x->c_factor_out = TWOPI * (float) x->D / (float) x->R; x->Iinv = 1./(float)x->D; x->myPInc = x->P*x->L/x->R; x->ffac = x->P * PI/(float)x->N; if(!initialized) { x->Wanal = (float *) getbytes( (MAX_Nw) * sizeof(float)); x->Wsyn = (float *) getbytes( (MAX_Nw) * sizeof(float)); x->Hwin = (float *) getbytes( (MAX_Nw) * sizeof(float)); x->input = (float *) getbytes(MAX_Nw * sizeof(float) ); x->output = (float *) getbytes(MAX_Nw * sizeof(float) ); x->buffer = (float *) getbytes(MAX_N * sizeof(float) ); x->channel = (float *) getbytes( (MAX_N+2) * sizeof(float) ); x->bitshuffle = (int *) getbytes(MAX_N * 2 * sizeof( int ) ); x->trigland = (float *) getbytes(MAX_N * 2 * sizeof( float ) ); x->c_lastphase_in = (float *) getbytes( (MAX_N2+1) * sizeof(float) ); x->c_lastphase_out = (float *) getbytes( (MAX_N2+1) * sizeof(float) ); x->lastamp = (float *) getbytes( (MAX_N+1) * sizeof(float) ); x->lastfreq = (float *) getbytes( (MAX_N+1) * sizeof(float) ); x->index = (float *) getbytes( (MAX_N+1) * sizeof(float) ); x->table = (float *) getbytes( x->L * sizeof(float) ); x->P = 1.0; x->ffac = x->P * PI/(float)MAX_N; x->mute = 0; // x->threshgen = .0001; } /* memset((char *)x->input,0,x->Nw * sizeof(float)); memset((char *)x->output,0,x->Nw * sizeof(float)); memset((char *)x->c_lastphase_in,0,(x->N2+1) * sizeof(float)); memset((char *)x->c_lastphase_out,0,(x->N2+1) * sizeof(float)); memset((char *)x->lastamp,0,(x->N+1) * sizeof(float)); memset((char *)x->lastfreq,0,(x->N+1) * sizeof(float)); memset((char *)x->index,0,(x->N+1) * sizeof(float)); */ for ( i = 0; i < x->L; i++ ) { x->table[i] = (float) x->N * cos((float)i * TWOPI / (float)x->L); } init_rdft( x->N, x->bitshuffle, x->trigland); makehanning( x->Hwin, x->Wanal, x->Wsyn, x->Nw, x->N, x->D, 0); if( x->hifreq < x->c_fundamental ) { x->hifreq = 3000.0 ; } x->hi_bin = 1; curfreq = 0; while( curfreq < x->hifreq ) { ++(x->hi_bin); curfreq += x->c_fundamental ; } x->lo_bin = 0; curfreq = 0; while( curfreq < x->lofreq ) { ++(x->lo_bin); curfreq += x->c_fundamental ; } } void *magfreq_analysis_new(t_symbol *s, int argc, t_atom *argv) { t_magfreq_analysis *x = (t_magfreq_analysis *)pd_new(magfreq_analysis_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); // x->lofreq = atom_getfloatarg(0,argc,argv); // x->hifreq = atom_getfloatarg(1,argc,argv); x->overlap = atom_getfloatarg(0,argc,argv); x->winfac = atom_getfloatarg(1,argc,argv); // these might not actually have any effect on analysis: x->lofreq = 0; x->hifreq = 4000; /* if(x->lofreq <0 || x->lofreq> 22050) x->lofreq = 0; if(x->hifreq <50 || x->hifreq> 22050) x->hifreq = 4000; */ x->P = 1.0; if(!power_of_two(x->overlap)) { x->overlap = 4; } if(!power_of_two(x->winfac)) { x->winfac = 2; } x->R = sys_getsr(); x->D = sys_getblksize(); magfreq_analysis_init(x,0); return x; } t_int *magfreq_analysis_perform(t_int *w) { int j, in,on; int amp,freq,chan; t_magfreq_analysis *x = (t_magfreq_analysis *) (w[1]); t_float *inbuf = (t_float *)(w[2]); t_float *magnitude_vec = (t_float *)(w[3]); t_float *frequency_vec = (t_float *)(w[4]); t_float *index_vec = (t_float *)(w[5]); int n = (int) w[6]; int D = x->D; int Nw = x->Nw; int N = x->N ; int N2 = x-> N2; float fundamental = x->c_fundamental; float factor_in = x->c_factor_in; int *bitshuffle = x->bitshuffle; float *trigland = x->trigland; float *lastphase_in = x->c_lastphase_in; float *Wanal = x->Wanal; float *input = x->input;; float *buffer = x->buffer; float *channel = x->channel; in = on = x->inCount ; if(x->mute) { for( j = 0; j < n; j++ ) { *magnitude_vec++ = 0; *frequency_vec++ = 0; *index_vec++ = j; } return w+7; } if (x->bypass_state) { for( j = 0; j < n; j++ ) { *magnitude_vec++ = 0; *frequency_vec++ = 0; *index_vec++ = 0; } return w+7; } in = on = x->inCount ; in += D; // on += I; for ( j = 0 ; j < (Nw - D) ; j++ ) { input[j] = input[j+D]; } for ( j = (Nw-D); j < Nw; j++) { input[j] = *inbuf++; } fold( input, Wanal, Nw, buffer, N, in ); rdft( N, 1, buffer, bitshuffle, trigland ); convert( buffer, channel, N2, lastphase_in, fundamental, factor_in ); // start osc bank for ( chan = 0; chan < n; chan++ ) { freq = ( amp = ( chan << 1 ) ) + 1; frequency_vec[chan] = channel[freq]; magnitude_vec[chan] = channel[amp]; index_vec[chan] = chan; } // restore state variables x->inCount = in % Nw; return w+7; } void magfreq_analysis_bypass(t_magfreq_analysis *x, t_floatarg state) { x->bypass_state = state; } void magfreq_analysis_dsp(t_magfreq_analysis *x, t_signal **sp) { if(x->D != sp[0]->s_n || x->R != sp[0]->s_sr ) { x->D = sp[0]->s_n; x->R = sp[0]->s_sr; magfreq_analysis_init(x,1); } dsp_add(magfreq_analysis_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, (t_int)sp[0]->s_n); } // IMPORTED FUNCTIONS int power_of_two(int test) { int limit = 8192; int compare = 1; // post("testing what we thing is an int:%d",test); do { if(test == compare){ // post("good power of 2 found!"); return 1; } compare *= 2; } while (compare <= limit); return 0; } void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)))); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } void fold( float *I, float *W, int Nw, float *O, int N, int n ) { int i; for ( i = 0; i < N; i++ ) O[i] = 0.; while ( n < 0 ) n += N; n %= N; for ( i = 0; i < Nw; i++ ) { O[n] += I[i]*W[i]; if ( ++n == N ) n = 0; } } void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ) { float phase, phasediff; int real, imag, amp, freq; float a, b; int i; for ( i = 0; i <= N2; i++ ) { imag = freq = ( real = amp = i<<1 ) + 1; a = ( i == N2 ? S[1] : S[real] ); b = ( i == 0 || i == N2 ? 0. : S[imag] ); C[amp] = hypot( a, b ); if ( C[amp] == 0. ) phasediff = 0.; else { phasediff = ( phase = -atan2( b, a ) ) - lastphase[i]; lastphase[i] = phase; while ( phasediff > PI ) phasediff -= TWOPI; while ( phasediff < -PI ) phasediff += TWOPI; } C[freq] = phasediff*factor + i*fundamental; } } // more libraries void init_rdft(int n, int *ip, float *w) { int nw, nc; void makewt(int nw, int *ip, float *w); void makect(int nc, int *ip, float *c); nw = n >> 2; makewt(nw, ip, w); nc = n >> 2; makect(nc, ip, w + nw); return; } void rdft(int n, int isgn, float *a, int *ip, float *w) { int j, nw, nc; float xi; void bitrv2(int n, int *ip, float *a), cftsub(int n, float *a, float *w), rftsub(int n, float *a, int nc, float *c); nw = ip[0]; nc = ip[1]; if (isgn < 0) { a[1] = 0.5 * (a[1] - a[0]); a[0] += a[1]; for (j = 3; j <= n - 1; j += 2) { a[j] = -a[j]; } if (n > 4) { rftsub(n, a, nc, w + nw); bitrv2(n, ip + 2, a); } cftsub(n, a, w); for (j = 1; j <= n - 1; j += 2) { a[j] = -a[j]; } } else { if (n > 4) { bitrv2(n, ip + 2, a); } cftsub(n, a, w); if (n > 4) { rftsub(n, a, nc, w + nw); } xi = a[0] - a[1]; a[0] += a[1]; a[1] = xi; } } void bitrv2(int n, int *ip, float *a) { int j, jj1, k, k1, l, m, m2; float xr, xi; ip[0] = 0; l = n; m = 1; while ((m << 2) < l) { l >>= 1; for (j = 0; j <= m - 1; j++) { ip[m + j] = ip[j] + l; } m <<= 1; } if ((m << 2) > l) { for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { jj1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[jj1]; xi = a[jj1 + 1]; a[jj1] = a[k1]; a[jj1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } else { m2 = m << 1; for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { jj1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[jj1]; xi = a[jj1 + 1]; a[jj1] = a[k1]; a[jj1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; jj1 += m2; k1 += m2; xr = a[jj1]; xi = a[jj1 + 1]; a[jj1] = a[k1]; a[jj1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } } void cftsub(int n, float *a, float *w) { int j, jj1, j2, j3, k, k1, ks, l, m; float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; l = 2; while ((l << 1) < n) { m = l << 2; for (j = 0; j <= l - 2; j += 2) { jj1 = j + l; j2 = jj1 + l; j3 = j2 + l; x0r = a[j] + a[jj1]; x0i = a[j + 1] + a[jj1 + 1]; x1r = a[j] - a[jj1]; x1i = a[j + 1] - a[jj1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i - x2i; a[jj1] = x1r - x3i; a[jj1 + 1] = x1i + x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i - x3r; } if (m < n) { wk1r = w[2]; for (j = m; j <= l + m - 2; j += 2) { jj1 = j + l; j2 = jj1 + l; j3 = j2 + l; x0r = a[j] + a[jj1]; x0i = a[j + 1] + a[jj1 + 1]; x1r = a[j] - a[jj1]; x1i = a[j + 1] - a[jj1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x2i - x0i; a[j2 + 1] = x0r - x2r; x0r = x1r - x3i; x0i = x1i + x3r; a[jj1] = wk1r * (x0r - x0i); a[jj1 + 1] = wk1r * (x0r + x0i); x0r = x3i + x1r; x0i = x3r - x1i; a[j3] = wk1r * (x0i - x0r); a[j3 + 1] = wk1r * (x0i + x0r); } k1 = 1; ks = -1; for (k = (m << 1); k <= n - m; k += m) { k1++; ks = -ks; wk1r = w[k1 << 1]; wk1i = w[(k1 << 1) + 1]; wk2r = ks * w[k1]; wk2i = w[k1 + ks]; wk3r = wk1r - 2 * wk2i * wk1i; wk3i = 2 * wk2i * wk1r - wk1i; for (j = k; j <= l + k - 2; j += 2) { jj1 = j + l; j2 = jj1 + l; j3 = j2 + l; x0r = a[j] + a[jj1]; x0i = a[j + 1] + a[jj1 + 1]; x1r = a[j] - a[jj1]; x1i = a[j + 1] - a[jj1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; x0r -= x2r; x0i -= x2i; a[j2] = wk2r * x0r - wk2i * x0i; a[j2 + 1] = wk2r * x0i + wk2i * x0r; x0r = x1r - x3i; x0i = x1i + x3r; a[jj1] = wk1r * x0r - wk1i * x0i; a[jj1 + 1] = wk1r * x0i + wk1i * x0r; x0r = x1r + x3i; x0i = x1i - x3r; a[j3] = wk3r * x0r - wk3i * x0i; a[j3 + 1] = wk3r * x0i + wk3i * x0r; } } } l = m; } if (l < n) { for (j = 0; j <= l - 2; j += 2) { jj1 = j + l; x0r = a[j] - a[jj1]; x0i = a[j + 1] - a[jj1 + 1]; a[j] += a[jj1]; a[j + 1] += a[jj1 + 1]; a[jj1] = x0r; a[jj1 + 1] = x0i; } } } void rftsub(int n, float *a, int nc, float *c) { int j, k, kk, ks; float wkr, wki, xr, xi, yr, yi; ks = (nc << 2) / n; kk = 0; for (k = (n >> 1) - 2; k >= 2; k -= 2) { j = n - k; kk += ks; wkr = 0.5 - c[kk]; wki = c[nc - kk]; xr = a[k] - a[j]; xi = a[k + 1] + a[j + 1]; yr = wkr * xr - wki * xi; yi = wkr * xi + wki * xr; a[k] -= yr; a[k + 1] -= yi; a[j] += yr; a[j + 1] -= yi; } } void makewt(int nw, int *ip, float *w) { void bitrv2(int n, int *ip, float *a); int nwh, j; float delta, x, y; ip[0] = nw; ip[1] = 1; if (nw > 2) { nwh = nw >> 1; delta = atan(1.0) / nwh; w[0] = 1; w[1] = 0; w[nwh] = cos(delta * nwh); w[nwh + 1] = w[nwh]; for (j = 2; j <= nwh - 2; j += 2) { x = cos(delta * j); y = sin(delta * j); w[j] = x; w[j + 1] = y; w[nw - j] = y; w[nw - j + 1] = x; } bitrv2(nw, ip + 2, w); } } void makect(int nc, int *ip, float *c) { int nch, j; float delta; ip[1] = nc; if (nc > 1) { nch = nc >> 1; delta = atan(1.0) / nch; c[0] = 0.5; c[nch] = 0.5 * cos(delta * nch); for (j = 1; j <= nch - 1; j++) { c[j] = 0.5 * cos(delta * j); c[nc - j] = 0.5 * sin(delta * j); } } } pd-lyonpotpourri-3.0.1/makewindows.c000066400000000000000000000052511430526361000175600ustar00rootroot00000000000000#include "fftease.h" void lpp_makewindows( float *H, float *A, float *S, int Nw, int N, int I ) { int i ; float sum ; for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ) ; if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } void lpp_makehamming( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.54 - 0.46*cos( TWOPI*i/(Nw - 1) )); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } void lpp_makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)))); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } pd-lyonpotpourri-3.0.1/markov~-help.pd000066400000000000000000000062051430526361000200340ustar00rootroot00000000000000#N canvas 600 60 617 549 12; #X obj 159 265 phasor~; #X obj 159 295 lop~ 3000; #N canvas 447 119 831 684 bach 0; #X obj 153 44 inlet; #X obj 135 415 outlet; #X obj 153 73 t b b; #X msg 183 107 set_length 9; #X obj 15 107 t b b b b b b b b b b; #X msg 15 360 values 261.626 293.665 329.628 391.995 440 523.251 587.33 659.255 698.456; #X text 11 340 the notes in first 2 bars of JS Bach WTC 1 no. 1 prelude ; #X msg 280 152 event_odds 0 0 1 1 0 0 0 0 0 0; #X msg 280 172 event_odds 1 0 0 0 0 1 0 0 0 0; #X msg 280 192 event_odds 2 0 0 0 1 0 0 0 0 0; #X msg 280 212 event_odds 3 0 0 0 0 0 1 0 0 0; #X msg 280 232 event_odds 4 0 0 0 0 0 0 1 0 0; #X msg 280 254 event_odds 5 0 0 0 0 0 0 0 1 0; #X msg 280 276 event_odds 6 0 0 0 0 0 0 0 0 1; #X msg 281 297 event_odds 7 1 0 0 1 0 0 0 0 0; #X msg 281 317 event_odds 8 1 0 0 0 1 0 0 0 0; #X text 189 398 If you do not know about transition matrices please see Xenakis's Formalized Music or whatever Web info you can find on first order Markov chains.; #X connect 0 0 2 0; #X connect 2 0 4 0; #X connect 2 1 3 0; #X connect 3 0 1 0; #X connect 4 0 5 0; #X connect 4 1 15 0; #X connect 4 2 14 0; #X connect 4 3 13 0; #X connect 4 4 12 0; #X connect 4 5 11 0; #X connect 4 6 10 0; #X connect 4 7 9 0; #X connect 4 8 8 0; #X connect 4 9 7 0; #X connect 5 0 1 0; #X connect 7 0 1 0; #X connect 8 0 1 0; #X connect 9 0 1 0; #X connect 10 0 1 0; #X connect 11 0 1 0; #X connect 12 0 1 0; #X connect 13 0 1 0; #X connect 14 0 1 0; #X connect 15 0 1 0; #X restore 159 187 pd bach; #X obj 159 162 loadbang; #N canvas 0 23 458 308 tempo-control 0; #X obj 138 45 loadbang; #X msg 138 69 120 4; #X obj 138 101 unpack f f; #X floatatom 138 127 5 0 0 0 - - -; #X floatatom 205 130 5 0 0 0 - - -; #X msg 138 157 tempo \$1; #X msg 205 157 subdiv \$1; #X obj 138 207 outlet; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 2 1 4 0; #X connect 3 0 5 0; #X connect 4 0 6 0; #X connect 5 0 7 0; #X connect 6 0 7 0; #X restore 27 132 pd tempo-control; #X obj 132 162 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 344 278 snapshot~; #X floatatom 344 299 5 0 0 0 - - -; #X obj 344 234 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X obj 344 255 metro 50; #N canvas 0 23 646 348 override 0; #X obj 36 125 outlet; #X msg 36 74 manual_override \$1; #X obj 36 41 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1 ; #X obj 238 89 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X text 62 44 turn off internal clock; #X text 259 89 manually trigger the next event; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 0 0; #X restore 23 203 pd override; #X text 218 184 is there a pdq external?; #X obj 159 333 lpp-meters; #X obj 9 5 lpp-icon markov~; #X text 228 30 - 1st order Markov chains for basic melodic coherence , f 67; #X text 376 222 see phase of each individual note (useful for post processing), f 35; #X obj 159 231 lyonpotpourri/markov~ 10; #X connect 0 0 1 0; #X connect 1 0 12 0; #X connect 1 0 12 1; #X connect 2 0 16 0; #X connect 3 0 2 0; #X connect 4 0 16 0; #X connect 5 0 2 0; #X connect 6 0 7 0; #X connect 8 0 9 0; #X connect 9 0 6 0; #X connect 10 0 16 0; #X connect 16 0 0 0; #X connect 16 1 6 0; pd-lyonpotpourri-3.0.1/markov~.c000066400000000000000000000205221430526361000167230ustar00rootroot00000000000000#include "MSPd.h" static t_class *markov_class; #define OBJECT_NAME "markov~" typedef struct _markov { t_object x_obj; float x_f; // for markov int event_count; int maximum_length; float **event_weights; int current_event; float *values; float current_value; // for rhythm int count; int event_samples; int subdiv; float tempo; float sr; short manual_override; short trigger; } t_markov; //void main(void) static void *markov_new(t_floatarg event_count); static t_int *markov_perform(t_int *w); static void markov_dsp(t_markov *x, t_signal **sp); static int markov_domarkov( int current_event, float **event_weights, int event_count ); static void markov_subdiv(t_markov *x, t_floatarg subdiv); static void markov_tempo(t_markov *x, t_floatarg tempo); static void markov_set_length(t_markov *x, t_floatarg length); static void markov_manual_override(t_markov *x, t_floatarg toggle); static void markov_values(t_markov *x, t_symbol *msg, int argc, t_atom *argv); static void markov_event_odds(t_markov *x, t_symbol *msg, int argc, t_atom *argv); static void markov_free( t_markov *x); static void markov_bang( t_markov *x); void markov_tilde_setup(void) { markov_class = class_new(gensym("markov~"), (t_newmethod)markov_new, (t_method)markov_free,sizeof(t_markov), 0,A_DEFFLOAT,0); CLASS_MAINSIGNALIN(markov_class, t_markov, x_f); class_addmethod(markov_class,(t_method)markov_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(markov_class,(t_method)markov_subdiv,gensym("subdiv"),A_FLOAT,0); class_addmethod(markov_class,(t_method)markov_tempo,gensym("tempo"),A_FLOAT,0); class_addmethod(markov_class,(t_method)markov_set_length,gensym("set_length"),A_FLOAT,0); class_addmethod(markov_class,(t_method)markov_manual_override,gensym("manual_override"),A_FLOAT,0); class_addmethod(markov_class,(t_method)markov_values,gensym("values"),A_GIMME,0); class_addmethod(markov_class,(t_method)markov_event_odds,gensym("event_odds"),A_GIMME,0); class_addbang(markov_class,(t_method)markov_bang); potpourri_announce(OBJECT_NAME); } void markov_free( t_markov *x) { int i; for( i = 0; i < 10; i++ ) { freebytes(x->event_weights[i], x->maximum_length * sizeof(float)); } freebytes(x->values, x->maximum_length * sizeof(float)); freebytes(x->event_weights, x->maximum_length * sizeof(float *)); } void markov_manual_override(t_markov *x, t_floatarg toggle) { x->manual_override = toggle; } void markov_bang(t_markov *x) { x->trigger = 1; } void markov_values(t_markov *x, t_symbol *msg, int argc, t_atom *argv) { int i; if( argc != x->event_count ) { pd_error(0, "there must be %d values in this list", x->event_count); return; } for( i = 0; i < x->event_count ; i++) { x->values[i] = atom_getfloatarg(i, argc, argv); } } void markov_event_odds(t_markov *x, t_symbol *msg, int argc, t_atom *argv) { int i; int event; float sum = 0.0; float **event_weights = x->event_weights; if( argc != x->event_count + 1) { pd_error(0, "there must be %d values in this list", x->event_count + 1); return; } event = atom_getfloatarg(0, argc, argv); if( event < 0 || event > x->event_count - 1 ) { pd_error(0, "attempt to set event outside range of 0 to %d",x->event_count - 1); return; } for( i = 0; i < x->event_count; i++) { event_weights[event][i] = atom_getfloatarg( (i+1), argc, argv); sum += event_weights[event][i]; } if( sum == 0.0 ) { pd_error(0, "zero sum for odds - this is a very bad thing"); return; } else if( sum != 1.0 ) { // post("sum was %f, rescaling to 1.0", sum); for( i = 0; i < x->event_count; i++ ) { event_weights[event][i] /= sum; } } } void markov_set_length(t_markov *x, t_floatarg length) { if( length < 1 || length > x->maximum_length ) { pd_error(0, "%d is an illegal length", (int) length); return; } x->event_count = length; } void markov_tempo(t_markov *x, t_floatarg tempo) { x->tempo = tempo; x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; } void markov_subdiv(t_markov *x, t_floatarg subdiv) { x->subdiv = (int) subdiv; if( subdiv < 1 || subdiv > 128) subdiv = 1; x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; } void *markov_new(t_floatarg event_count) { int i; t_markov *x = (t_markov *)pd_new(markov_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); // event_count is MAXIMUM event_count if( event_count < 2 || event_count > 256 ) { pd_error(0, "maximum event length limited to 256, set to 16 here"); event_count = 16 ; } x->maximum_length = event_count; x->event_count = 4; // default pattern x->count = 0; x->event_weights = (float **) getbytes(x->maximum_length * sizeof(float *)); for( i = 0; i < 10; i++ ) { x->event_weights[i] = (float *) getbytes(x->maximum_length * sizeof(float)); } x->values = (float *) getbytes(x->maximum_length * sizeof(float)); x->current_event = 0; x->values[0] = 300; x->values[1] = 400; x->values[2] = 500; x->values[3] = 600; // weights x->event_weights[0][0] = 0; x->event_weights[0][1] = 0.5; x->event_weights[0][2] = 0.5; x->event_weights[0][3] = 0; x->event_weights[1][0] = 0.25; x->event_weights[1][1] = 0.5; x->event_weights[1][2] = 0.0; x->event_weights[1][3] = 0.25; x->event_weights[2][0] = 1; x->event_weights[2][1] = 0.0; x->event_weights[2][2] = 0.0; x->event_weights[2][3] = 0.0; x->event_weights[3][0] = 0.33; x->event_weights[3][1] = 0.33; x->event_weights[3][2] = 0.34; x->event_weights[3][3] = 0.0; x->current_value = x->values[ x->current_event ]; x->count = 0; x->tempo = 60.0; x->sr = sys_getsr(); if( ! x->sr ) { pd_error(0, "zero sampling rate - set to 44100"); x->sr = 44100; } x->subdiv = 1; x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; x->trigger = 0; return x; } t_int *markov_perform(t_int *w) { t_markov *x = (t_markov *) (w[1]); t_float *out = (t_float *)(w[3]); t_float *sync = (t_float *)(w[4]); int n = (int)(w[5]); int count = x->count; int event_samples = x->event_samples; int event_count = x->event_count; float **event_weights = x->event_weights; int current_event = x->current_event; float *values = x->values; float current_value = x->current_value; if( x->manual_override ) { while (n--) { if( x->trigger ) { current_event = markov_domarkov( current_event, event_weights, event_count ); current_value = values[ current_event ]; x->trigger = 0; } *out++ = current_value; } x->current_value = current_value; x->current_event = current_event; return (w+6); } while (n--) { if( ++count >= event_samples ) { current_event = markov_domarkov( current_event, event_weights, event_count ); current_value = values[ current_event ]; count = 0; } *sync++ = (float) count / (float) event_samples; *out++ = current_value; } x->current_value = current_value; x->count = count; x->current_event = current_event; return (w+6); } int markov_domarkov(int current_event, float **event_weights, int event_count) { float randval; int i; randval = rand() % 32768 ; randval /= 32768.0; for( i = 0; i < event_count; i++ ) { if( randval < event_weights[current_event][i] ) { return i; } randval -= event_weights[current_event][i]; } return 0; // should never happen } void markov_dsp(t_markov *x, t_signal **sp) { // long i; if(x->sr!=sp[0]->s_sr) { x->sr=sp[0]->s_sr;// BUG!!! in MSP code was != x->event_samples = x->sr * (60.0/x->tempo) / (float) x->subdiv; x->count = 0; } dsp_add(markov_perform, 5, x, sp[0]->s_vec , sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/mask~-help.pd000066400000000000000000000132471430526361000174740ustar00rootroot00000000000000#N canvas 600 60 663 739 12; #X msg 52 189 tempo \$1; #X floatatom 52 164 5 0 0 0 - mask-tempo-in -; #X obj 52 417 osc~ 120; #X obj 52 453 *~; #X obj 52 496 lpp-meters; #X obj 44 11 lpp-icon mask~; #X text 269 43 - click-driven sequencer; #X obj 347 360 lyonpotpourri/adsr~ 5 10 10 200 0.7 0.1; #X obj 52 390 lyonpotpourri/clickhold~; #X obj 52 215 lyonpotpourri/samm~ 60 4; #X obj 99 262 send~ mask-digital-clock; #N canvas 511 61 1043 297 index-mode 0; #X obj 233 51 lyonpotpourri/mask~ 1 2 3 4 5 4 3 2; #X obj 233 83 lyonpotpourri/mask~ 100 200 300 400 500; #X obj 233 115 lyonpotpourri/click2float~; #X floatatom 233 147 5 0 0 0 - - -; #X msg 25 62 indexmode 1; #X obj 233 19 receive~ mask-digital-clock; #X obj 25 29 loadbang; #X text 520 84 <= with index mode turned on \, you can access individual list members with (non-zero) indices. This is very useful for keeping multiple mask~ units in sync.; #X obj 22 107 lyonpotpourri/click2float~; #X floatatom 188 146 5 0 0 0 - - -; #X connect 0 0 1 0; #X connect 0 0 8 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 4 0 1 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 8 0 9 0; #X restore 230 508 pd index-mode; #N canvas 600 60 857 674 operation 0; #X obj 76 160 s \$0-mask-msgs; #X msg 76 127 gate \$1; #X obj 76 92 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 ; #X text 95 92 with gate turned off \, the mask will continue to advance \, but will not send out values. This gate is on by default.; #X msg 81 209 gozero; #X obj 81 440 s \$0-mask-msgs2; #X text 137 207 the mask will return to its first value on the next click. This can be used to sync several mask~ units.; #X msg 229 295 noloop \$1; #X obj 229 263 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 249 267 when turned on \, the mask will mute itself at the end of its cycle. Turn mute off to restore normal operation; #X msg 241 346 mute \$1; #X obj 241 323 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 4 0 5 0; #X connect 7 0 5 0; #X connect 8 0 7 0; #X connect 10 0 5 0; #X connect 11 0 10 0; #X restore 230 541 pd operation; #X obj 302 281 r \$0-mask-msgs; #X obj 68 335 r \$0-mask-msgs2; #N canvas 0 23 195 209 init 0; #X msg 39 74 60; #X obj 39 48 loadbang; #X obj 39 114 s mask-tempo-in; #X connect 0 0 2 0; #X connect 1 0 0 0; #X restore 230 631 pd init; #N canvas 600 60 939 536 patterns 0; #X msg 42 159 addmask 1 600 800 100 400 900 910 350; #X obj 42 306 s \$0-mask-msgs2; #X msg 163 239 recall 1; #X msg 162 216 recall 0; #X text 24 26 a [mask~] can store up to 1024 patterns \, numbered starting from 0 The data provided at instantiation is stored as pattern 0 \, so it is recommended to add more patterns starting at location 1 Adding a pattern does not affect current playback. Use the "recall" message to load the new pattern.; #X text 236 218 recall the original pattern; #X msg 163 266 recall 2; #X msg 61 194 addmask 2 150 1300; #X text 234 241 recall new patterns; #X msg 185 373 sequence -1; #X text 276 373 send -1 as a paramter to turn off sequencing; #X text 209 419 recall a pattern (the parameter) and play it once to the end \, after which the mask mutes itself. Unmute the mask to restore normal operation; #X msg 591 248 mute \$1; #X msg 591 224 0; #X msg 133 418 playonce 1; #X msg 514 247 gozero; #X obj 606 153 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 674 220 0; #X msg 673 248 noloop \$1; #X obj 607 177 t b b b; #X text 624 153 restore normal operation after "playonce"; #X msg 177 347 sequence 2 0 1; #X text 290 346 sequence a series of stored patterns \, referenced by pattern number. The sequence will loop until you stop it.; #X text 316 160 add a new pattern at location 1; #X text 201 193 add another pattern at location 2; #X connect 0 0 1 0; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 6 0 1 0; #X connect 7 0 1 0; #X connect 9 0 1 0; #X connect 12 0 1 0; #X connect 13 0 12 0; #X connect 14 0 1 0; #X connect 15 0 1 0; #X connect 16 0 19 0; #X connect 17 0 18 0; #X connect 18 0 1 0; #X connect 19 0 15 0; #X connect 19 1 13 0; #X connect 19 2 17 0; #X connect 21 0 1 0; #X restore 230 571 pd patterns; #X obj 52 362 lyonpotpourri/mask~ 440 500 370 1000 888; #X obj 52 307 lyonpotpourri/mask~ 1 0 0 0 1 0 0 0.5 0 1 0 0 0.2 0.4 0.6 0.8, f 61; #N canvas 600 60 698 404 phaselock 0; #X obj 200 244 lyonpotpourri/mask~ 10 20 30 40 50 60 70; #X obj 200 279 lyonpotpourri/click2float~; #X floatatom 200 318 5 0 0 0 - - -; #X msg 137 84 phaselock 1; #X obj 39 50 loadbang; #X msg 39 166 addmask 1 100 200 300 400 500 600 700; #X msg 399 207 recall \$1; #X obj 399 184 hradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144 -1 -1 2; #X msg 125 120 addmask 2 1 2 3 4 5 6 7; #X obj 39 77 t b b b; #X text 393 163 recall patterns. They all stay in sync; #X text 134 30 Turning on phaselock mode keeps all stored patterns synched to the same location. This requires that all stored patterns be the same length of course; #X obj 200 198 lyonpotpourri/samm~ 80 1; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 3 0 0 0; #X connect 4 0 9 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 6 0; #X connect 8 0 0 0; #X connect 9 0 5 0; #X connect 9 1 8 0; #X connect 9 2 3 0; #X connect 12 0 0 0; #X restore 230 601 pd phaselock; #X text 49 101 [mask~] puts out its next stored value in response to a click. Multiple patterns may be stored in a [mask~]. Useful for building sample-accurate drum machines and sequencers.; #X connect 0 0 9 0; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 3 0 4 1; #X connect 7 0 3 1; #X connect 8 0 2 0; #X connect 9 0 10 0; #X connect 9 0 18 0; #X connect 13 0 18 0; #X connect 14 0 17 0; #X connect 17 0 8 0; #X connect 18 0 7 0; #X connect 18 0 17 0; pd-lyonpotpourri-3.0.1/mask~.c000066400000000000000000000243231430526361000163620ustar00rootroot00000000000000#include "MSPd.h" static t_class *mask_class; #define MAXLEN 256 #define MAXMASKS 1024 #define MAXSEQ 1024 #define OBJECT_NAME "mask~" #define DATE "(6.6.06)" typedef struct { float *pat; // mask pattern int length;// length of pattern } t_maskpat; typedef struct { int *seq; // mask pattern int length;// length of pattern int phase; // keep track of where we are in sequence } t_sequence; typedef struct _mask { t_object x_obj; float x_f; short mute;// stops all computation (try z-disable) short gate; // continues masking but inhibits all output short phaselock; // indicates all patterns are the same size and use the same phase count short indexmode;//special mode where input clicks are also mask indices (+ 1) int phase;//phase of current pattern int current_mask;// currently selected pattern t_maskpat *masks;// contains the mask patterns t_sequence sequence;// contains an optional mask sequence int *stored_masks;// a list of patterns stored int pattern_count;//how many patterns are stored short noloop;// flag to play pattern only once float *in_vec;//copy space for input to avoid dreaded vector sharing override } t_mask; static void *mask_new(t_symbol *msg, int argc, t_atom *argv); static t_int *mask_perform(t_int *w); static void mask_dsp(t_mask *x, t_signal **sp); static void mask_mute(t_mask *x, t_floatarg f); static void mask_phaselock(t_mask *x, t_floatarg f); static void mask_gate(t_mask *x, t_floatarg f); static void mask_addmask(t_mask *x, t_symbol *msg, int argc, t_atom *argv); static void mask_recall(t_mask *x, t_floatarg p); static void mask_showmask(t_mask *x, t_floatarg p); static void mask_indexmode(t_mask *x, t_floatarg t); static void mask_gozero(t_mask *x); static void mask_free(t_mask *x); static void mask_sequence(t_mask *x, t_symbol *msg, int argc, t_atom *argv); static void mask_noloop(t_mask *x, t_floatarg f); static void mask_playonce(t_mask *x, t_floatarg pnum); void mask_tilde_setup(void) { mask_class = class_new(gensym("mask~"), (t_newmethod)mask_new, (t_method)mask_free ,sizeof(t_mask), 0,A_GIMME,0); CLASS_MAINSIGNALIN(mask_class, t_mask, x_f); class_addmethod(mask_class,(t_method)mask_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(mask_class,(t_method)mask_mute,gensym("mute"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_phaselock,gensym("phaselock"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_gate,gensym("gate"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_addmask,gensym("addmask"),A_GIMME,0); class_addmethod(mask_class,(t_method)mask_sequence,gensym("sequence"),A_GIMME,0); class_addmethod(mask_class,(t_method)mask_recall,gensym("recall"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_showmask,gensym("showmask"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_indexmode,gensym("indexmode"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_playonce,gensym("playonce"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_noloop,gensym("noloop"),A_FLOAT,0); class_addmethod(mask_class,(t_method)mask_gozero,gensym("gozero"),0); potpourri_announce(OBJECT_NAME); } void mask_playonce(t_mask *x, t_floatarg pnum) { x->noloop = 1; x->mute = 0; mask_recall(x,pnum); } void mask_indexmode(t_mask *x, t_floatarg t) { x->indexmode = (short)t; } void mask_gozero(t_mask *x) { x->phase = 0; } void mask_mute(t_mask *x, t_floatarg f) { x->mute = (short)f; } void mask_noloop(t_mask *x, t_floatarg f) { x->noloop = (short)f; } void mask_phaselock(t_mask *x, t_floatarg f) { x->phaselock = (short)f; } void mask_gate(t_mask *x, t_floatarg f) { x->gate = (short)f; } void mask_showmask(t_mask *x, t_floatarg p) { int location = p; short found = 0; int i; int len; for(i = 0; ipattern_count; i++) { if(location == x->stored_masks[i]) { found = 1; break; } } if(found) { len = x->masks[location].length; post("mask~: pattern length is %d",len); for(i = 0; i < len; i++) { post("%d: %f",i,x->masks[location].pat[i]); } } else { pd_error(x, "mask~: no pattern stored at location %d",location); } } void mask_recall(t_mask *x, t_floatarg p) { int i; int location = p; short found = 0; for(i = 0; i < x->pattern_count; i++) { if(location == x->stored_masks[i]) { found = 1; break; } } if(found) { x->current_mask = location; if(! x->phaselock) { x->phase = 0; } } else { pd_error(x, "mask~: no pattern stored at location %d",location); } } //initiate mask recall sequence void mask_sequence(t_mask *x, t_symbol *msg, int argc, t_atom *argv) { int i; if(argc > MAXSEQ) { pd_error(x, "mask~: %d exceeds possible length for a sequence",argc); return; } if(argc < 1) { pd_error(x, "mask~: you must sequence at least 1 mask"); return; } for(i = 0; i < argc; i++) { x->sequence.seq[i] = atom_getfloatarg(i,argc,argv); } if(x->sequence.seq[0] < 0) { // post("sequencing turned off"); x->sequence.length = 0; return; } x->sequence.phase = 0; x->sequence.length = argc; // now load in first mask of sequence mask_recall(x, (t_floatarg)x->sequence.seq[x->sequence.phase++]); // ideally would check that each sequence number is a valid stored location } void mask_addmask(t_mask *x, t_symbol *msg, int argc, t_atom *argv) { int location; int i; if(argc < 2) { pd_error(x, "mask~: must specify location and mask"); return; } if(argc > MAXLEN) { pd_error(x, "mask~ is limited to length %d",MAXLEN); return; } location = atom_getintarg(0,argc,argv); if(location < 0 || location > MAXMASKS - 1) { pd_error(x, "mask~: addmask - illegal location"); return; } if(x->masks[location].pat == NULL) { x->masks[location].pat = (float *) getbytes(MAXLEN * sizeof(float)); x->stored_masks[x->pattern_count++] = location; } else { // post("replacing pattern stored at location %d", location); } // post("reading new mask from argument list, with %d members",argc-1); x->masks[location].length = argc-1; for(i=1; imasks[location].pat[i-1] = atom_getfloatarg(i,argc,argv); } // post("there are currently %d patterns stored",x->pattern_count); } void mask_free(t_mask *x) { int i; for(i=0;ipattern_count;i++){ freebytes(x->masks[i].pat, MAXLEN * sizeof(float)); } freebytes(x->masks,MAXMASKS * sizeof(t_maskpat)); freebytes(x->stored_masks, MAXMASKS * sizeof(int)); freebytes(x->sequence.seq, MAXSEQ * sizeof(int)); freebytes(x->in_vec, 8192 * sizeof(t_float)); } void *mask_new(t_symbol *msg, int argc, t_atom *argv) { int i; t_mask *x = (t_mask *)pd_new(mask_class); outlet_new(&x->x_obj, gensym("signal")); x->masks = (t_maskpat *) getbytes(MAXMASKS * sizeof(t_maskpat)); x->stored_masks = (int *) getbytes(MAXMASKS * sizeof(int)); x->sequence.seq = (int *) getbytes(MAXSEQ * sizeof(int)); /* this should be vector size, and possibly realloced in dsp routine if size changes */ x->in_vec = (t_float *) getbytes(8192 * sizeof(t_float)); x->sequence.length = 0; // no sequence by default x->sequence.phase = 0; // // post("allocated %d bytes for basic mask holder",MAXMASKS * sizeof(t_maskpat)); x->current_mask = -1; // by default no mask is selected for(i=0; istored_masks[i] = -1; // indicates no pattern stored x->masks[i].pat = NULL; } if(argc > 0) { // post("reading initial mask from argument list, with %d members",argc); x->masks[0].pat = (float *) getbytes(MAXLEN * sizeof(float)); // post("allocated %d bytes for this pattern", MAXLEN * sizeof(float)); x->masks[0].length = argc; for(i=0; imasks[0].pat[i] = atom_getfloatarg(i,argc,argv); } x->current_mask = 0; // now we use the mask we read from the arguments x->stored_masks[0] = 0; x->pattern_count = 1; } x->indexmode = 0; x->mute = 0; x->gate = 1;//by default gate is on, and the pattern goes out (zero gate turns it off) x->phaselock = 0;// by default do NOT use a common phase for all patterns x->phase = 0; x->noloop = 0; return x; } t_int *mask_perform(t_int *w) { int i; t_mask *x = (t_mask *) (w[1]); float *inlet = (t_float *) (w[2]); float *outlet = (t_float *) (w[3]); int n = (int) w[4]; int phase = x->phase; short gate = x->gate; short indexmode = x->indexmode; short noloop = x->noloop; int current_mask = x->current_mask; t_maskpat *masks = x->masks; t_sequence sequence = x->sequence; float *in_vec = x->in_vec; if( x->mute || current_mask < 0) { while(n--) *outlet++ = 0; return (w+5); } // should use memcpy() here for(i = 0; i < n; i++) { in_vec[i] = inlet[i]; } // clean outlet - should use memset() for( i = 0; i < n; i++) { outlet[i] = 0.0; } for(i = 0; i= masks[current_mask].length) { /* post("phase %d out of range", phase); */ phase %= masks[current_mask].length; /* post("phase reset to %d", phase); */ } } if(gate) { outlet[i] = masks[current_mask].pat[phase]; // post("mask value: %f",outlet[i]); } ++phase; //advance phase in all cases (so pattern advances when gated) if(phase >= masks[current_mask].length) { phase = 0; if(noloop) { x->mute = 1; // post("halted by noloop"); goto out; } // if a sequence is active, reset the current mask too if(sequence.length) { mask_recall(x, (t_floatarg)sequence.seq[sequence.phase++]); current_mask = x->current_mask; // this was reset internally! if(sequence.phase >= sequence.length) sequence.phase = 0; } } } } out: x->phase = phase; x->sequence.phase = sequence.phase; return (w+5); } void mask_dsp(t_mask *x, t_signal **sp) { dsp_add(mask_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/npan~-help.pd000066400000000000000000000060601430526361000174700ustar00rootroot00000000000000#N canvas 472 54 747 552 12; #X obj 169 162 phasor~ 0.2; #X obj 25 162 noise~; #X obj 26 359 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 22 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 25 316 pd meter; #X obj 90 359 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 22 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 89 316 pd meter; #X obj 155 359 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 22 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 154 316 pd meter; #X obj 221 359 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 23 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 220 316 pd meter; #X text 197 215 arg: number of outlets; #X obj 27 19 lpp-icon npan~; #X msg 329 435 \; pd dsp \$1; #X obj 329 397 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 349 398 turn on DACs; #X text 252 44 - perimeter panning for an arbitrary number of channel outputs, f 69; #X text 27 110 Left inlet is signal to pan. Right inlet (ranging from 0-1) determines perimeter pan location.; #X obj 25 218 lyonpotpourri/npan~ 4; #X connect 0 0 17 1; #X connect 1 0 17 0; #X connect 3 0 2 0; #X connect 5 0 4 0; #X connect 7 0 6 0; #X connect 9 0 8 0; #X connect 13 0 12 0; #X connect 17 0 3 0; #X connect 17 1 5 0; #X connect 17 2 7 0; #X connect 17 3 9 0; pd-lyonpotpourri-3.0.1/npan~.c000066400000000000000000000071531430526361000163650ustar00rootroot00000000000000#include "MSPd.h" #define OBJECT_NAME "npan~" #define SPEAKERMAX (1024) static t_class *npan_class; typedef struct _npan { t_object x_obj; double pi_over_two; double twopi; float x_f; int outcount; t_float *input_locvec; t_float *panner_locvec; } t_npan; static void *npan_new(t_symbol *s, int argc, t_atom *argv); static t_int *npan_perform(t_int *w); static void npan_dsp(t_npan *x, t_signal **sp); static void npan_free(t_npan *x); void npan_tilde_setup(void) { npan_class = class_new(gensym("npan~"), (t_newmethod)npan_new, (t_method)npan_free, sizeof(t_npan),0,A_GIMME,0); CLASS_MAINSIGNALIN(npan_class, t_npan, x_f); class_addmethod(npan_class, (t_method)npan_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *npan_new(t_symbol *s, int argc, t_atom *argv) { t_npan *x; x = (t_npan *)pd_new(npan_class); int i; x->outcount = (int) atom_getfloatarg(0, argc, argv); if( x->outcount < 2 || x->outcount > SPEAKERMAX ) { pd_error(0, "npan~: output count %d exceeded range limits of 2 to %d",x->outcount, SPEAKERMAX); x->outcount = SPEAKERMAX; } inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); // create 2nd inlet for(i = 0; i < x->outcount; i++) { outlet_new(&x->x_obj, gensym("signal")); } x->input_locvec = (t_float *) getbytes(8192 * sizeof(t_float)); x->panner_locvec = (t_float *) getbytes(8192 * sizeof(t_float)); x->pi_over_two = 1.5707963267948965; x->twopi = 6.283185307179586; return x; } void npan_free(t_npan *x) { freebytes(x->panner_locvec, 8192 * sizeof(t_float)); freebytes(x->input_locvec, 8192 * sizeof(t_float)); } t_int *npan_perform(t_int *w) { t_npan *x = (t_npan*) w[1]; int outcount = x->outcount; t_float *input = (t_float*) w[2]; t_float *panner = (t_float*) w[3]; t_float *outlet1, *outlet2, *cleanoutlet; t_float *input_locvec = x->input_locvec; t_float *panner_locvec = x->panner_locvec; double gain1, gain2; double insamp; int chan1, chan2; double panloc, frak; int i,j; double pi_over_two = x->pi_over_two; int n = (int) w[4 + outcount]; // copy inputs for(i = 0; i < n; i++) { input_locvec[i] = input[i]; panner_locvec[i] = panner[i]; } // clean all outlets for( i = 0; i < outcount; i++ ) { cleanoutlet = (t_float*) w[4 + i]; for(j = 0; j < n; j++) { cleanoutlet[j] = 0.0; } } for(i = 0; i < n; i++) { insamp = input_locvec[i]; panloc = panner_locvec[i]; if( panloc < 0 ) panloc = 0.0; if( panloc >= 1 ) // wrap around (otherwise crash on outlet out of range) panloc = 0.0; panloc *= (double) outcount; chan1 = floor( panloc ); chan2 = (chan1 + 1) % outcount; frak = ( panloc - chan1 ) * pi_over_two; gain1 = cos( frak ); gain2 = sin( frak ); outlet1 = (t_float*) w[chan1 + 4]; // add offset outlet2 = (t_float*) w[chan2 + 4]; outlet1[i] = insamp * gain1; outlet2[i] = insamp * gain2; } return (w + outcount + 5); } void npan_dsp(t_npan *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count = x->outcount + 4; sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } dsp_addv(npan_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec,sizeof(t_int) * 1); } pd-lyonpotpourri-3.0.1/oscil~-help.pd000066400000000000000000000072061430526361000176500ustar00rootroot00000000000000#N canvas 600 60 790 526 12; #X floatatom 43 173 5 0 0 2 frequency oscil-frequency-in -; #N canvas 450 214 639 421 built-in-waveforms 0; #X msg 135 88 square; #X msg 186 89 triangle; #X msg 254 89 buzz; #X msg 299 89 sine; #X msg 26 43 harmcount \$1; #X floatatom 26 23 5 1 128 0 - - -; #X msg 343 88 sawtooth; #X msg 374 221 harmcount \$1; #X floatatom 324 175 5 0 0 0 - - -; #X obj 324 195 t b f; #X msg 324 219 buzz; #X obj 327 154 hsl 40 15 1 40 0 0 empty empty empty -2 -6 0 8 -36928 -1 -1 0 1; #X text 131 69 band-limited waveforms; #X text 325 133 or do it dynamically; #X msg 272 312 fadetime 50; #X text 236 295 make sure your fade time is short for fast changes ; #X text 118 45 set how many harmonics in bl waveforms; #X obj 121 344 s \$0-oscil-msgs; #X connect 0 0 17 0; #X connect 1 0 17 0; #X connect 2 0 17 0; #X connect 3 0 17 0; #X connect 4 0 17 0; #X connect 5 0 4 0; #X connect 6 0 17 0; #X connect 7 0 17 0; #X connect 8 0 9 0; #X connect 9 0 10 0; #X connect 9 1 7 0; #X connect 10 0 17 0; #X connect 11 0 8 0; #X connect 14 0 17 0; #X restore 222 366 pd built-in-waveforms; #N canvas 371 122 880 507 user-waveforms 0; #X msg 105 81 0 0 0.1 0 0.25 0.5 0 0 0.3 0.1 0.05; #X msg 120 107 0 0.1 0.3 0 0 0 0 0.5 0 0 0.7 0 0 0.2 0.1; #X msg 130 129 0 0.1 0.1 1 1 0.1 0.1; #X msg 140 151 0 1 0.5 0.25 0.125 0.0625; #X text 45 33 list relative weights of harmonics \, starting with DC ; #X msg 145 198 0 1; #X text 171 199 this is a sine; #X obj 105 332 s \$0-oscil-msgs; #X msg 436 237 amph 0 1 0 0.5 0.5 0.25 0.2; #X text 447 172 specify both amplitude and phase. The first entry is for DC \, which has no phase. Following that \, enter [amp \, phase] pairs \, where phase is specified as a fraction of 2PI. A phase of 0.5 would be 180 degrees \, or PI radians.; #X connect 0 0 7 0; #X connect 1 0 7 0; #X connect 2 0 7 0; #X connect 3 0 7 0; #X connect 5 0 7 0; #X connect 8 0 7 0; #X restore 222 392 pd user-waveforms; #X obj 43 231 lyonpotpourri/oscil~ 220 8192 square 16; #X obj 43 304 lpp-meters; #X obj 35 17 lpp-icon oscil~; #X text 328 233 args: freq \, table length \, waveform \, harmonics available waveforms are: square \, triangle \, buzz \, sine \, and sawtooth; #N canvas 0 23 450 300 init 0; #X obj 78 90 loadbang; #X msg 78 113 220; #X obj 78 148 s oscil-frequency-in; #X connect 0 0 1 0; #X connect 1 0 2 0; #X restore 222 418 pd init; #X text 257 42 - custom oscillator with interpolation between waveforms ; #X obj 209 201 r \$0-oscil-msgs; #N canvas 308 135 823 472 interpolation 0; #X obj 77 394 s \$0-oscil-msgs; #X msg 77 79 fadetime 5000; #X msg 107 109 fadetime 50; #X text 73 62 waveform interpolation time (ms); #X msg 134 160 fadetime \$1; #X floatatom 134 134 5 5 30000 0 - - -; #X msg 284 175 interpolate \$1; #X obj 284 143 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 257 319 fadetype \$1; #X obj 257 263 vradio 15 1 0 3 empty empty empty 0 -8 0 10 -262144 -1 -1 1; #X text 282 263 no fade; #X text 283 295 equal power fade; #X text 283 280 linear fade (default); #X text 313 130 Turn on linear interpolation for waveform lookup (and potentially smoother waveforms). With a large table size \, you might not hear much difference.; #X text 346 317 select option for interpolating from one waveform to the next, f 62; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 6 0 0 0; #X connect 7 0 6 0; #X connect 8 0 0 0; #X connect 9 0 8 0; #X restore 222 340 pd interpolation; #X text 36 109 An oscillator with arbitrary waveforms \, table length and crossfade between different waveforms; #X text 86 171 <= signal input is also fine; #X connect 0 0 3 0; #X connect 3 0 4 0; #X connect 3 0 4 1; #X connect 9 0 3 0; pd-lyonpotpourri-3.0.1/oscil~.c000066400000000000000000000505741430526361000165470ustar00rootroot00000000000000#include "MSPd.h" #include "string.h" /**/ // NOTE: MUST PREVENT WAVEFORM UPDATE IF ALREADY IN PROGRESS // 7.23.04 adding bandlimited harmonic count // 9.2.04 fixed cross fade amplitude bug // 1.14.06 added apwave message for amp/phase creation #define OSCIL_MAXIMUM_HARMONICS (1024) #define OSCIL_DEFAULT_FLEN 8192 #define OSCIL_MAX_FLEN 1048576 #define OSCIL_MAX_HARMS 1024 #define OSCIL_DEFAULT_HARMONICS 10 #define OSCIL_INIT_FREQ 440.0 #define OSCIL_DEFAULT_WAVEFORM "sine" #define OSCIL_NOFADE 0 #define OSCIL_LINEAR 1 #define OSCIL_POWER 2 #define OBJECT_NAME "oscil~" #define REV "2.4.06" static t_class *oscil_class; typedef struct _oscil { t_object x_obj; float x_f; int table_length; float *wavetable; int harmonic_count; float *harmonic_weights; float *harmonic_phases; double phase; double phase_offset; double si_factor; double si; int bl_harms; float piotwo; float twopi; float sr; short mute; short connected[4]; float *old_wavetable; short dirty; float fade_ms; int fade_samples; int fade_countdown; short fadetype; short firsttime; short fade_in_progress; short interpolate; // flag for synthesis method } t_oscil; static void *oscil_new(t_symbol *s, int argc, t_atom *argv); static t_int *oscil_perform(t_int *w); static void oscil_dsp(t_oscil *x, t_signal **sp); static void build_waveform(t_oscil *x); static void build_amph_waveform(t_oscil *x); static void oscil_mute(t_oscil *x, t_floatarg flag); static void oscil_sine(t_oscil *x ); static void oscil_sawtooth(t_oscil *x); static void oscil_square(t_oscil *x) ; static void oscil_triangle(t_oscil *x); static void oscil_buzz(t_oscil *x ); static void oscil_list (t_oscil *x, t_symbol *msg, int argc, t_atom *argv); static void oscil_fadetime (t_oscil *x, t_floatarg fade_ms) ; static void oscil_fadetype(t_oscil *x, t_floatarg ftype); static void oscil_harmcount(t_oscil *x, t_floatarg harms); static void oscil_interpolate(t_oscil *x, t_floatarg tog); static void oscil_dsp_free(t_oscil *x); static void oscil_amph(t_oscil *x, t_symbol *msg, int argc, t_atom *argv); static t_int *oscil_perform_interpolate(t_int *w); void oscil_tilde_setup(void) { oscil_class = class_new(gensym("oscil~"), (t_newmethod)oscil_new, (t_method)oscil_dsp_free ,sizeof(t_oscil), 0, A_GIMME,0); CLASS_MAINSIGNALIN(oscil_class, t_oscil, x_f ); class_addmethod(oscil_class, (t_method)oscil_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(oscil_class, (t_method)oscil_mute, gensym("mute"), A_DEFFLOAT,0); class_addmethod(oscil_class, (t_method)oscil_sine, gensym("sine"), 0); class_addmethod(oscil_class, (t_method)oscil_triangle, gensym("triangle"), 0); class_addmethod(oscil_class, (t_method)oscil_square, gensym("square"), 0); class_addmethod(oscil_class, (t_method)oscil_sawtooth, gensym("sawtooth"), 0); class_addmethod(oscil_class, (t_method)oscil_buzz, gensym("buzz"), 0); class_addmethod(oscil_class, (t_method)oscil_list, gensym("list"), A_GIMME, 0); class_addmethod(oscil_class, (t_method)oscil_amph, gensym("amph"), A_GIMME, 0); class_addmethod(oscil_class, (t_method)oscil_fadetype, gensym("fadetype"), A_FLOAT, 0); class_addmethod(oscil_class, (t_method)oscil_fadetime, gensym("fadetime"), A_FLOAT, 0); class_addmethod(oscil_class, (t_method)oscil_harmcount, gensym("harmcount"), A_FLOAT, 0); class_addmethod(oscil_class, (t_method)oscil_interpolate, gensym("interpolate"), A_FLOAT, 0); potpourri_announce(OBJECT_NAME); } void oscil_list (t_oscil *x, t_symbol *msg, int argc, t_atom *argv) { short i; int harmonic_count = 0; float *harmonic_weights = x->harmonic_weights; for (i=0; i < argc; i++) { harmonic_weights[harmonic_count] = atom_getfloatarg(i, argc, argv); ++harmonic_count; } x->harmonic_count = harmonic_count ; build_waveform(x); } void oscil_amph(t_oscil *x, t_symbol *msg, int argc, t_atom *argv) { short i; int harmonic_count = 0; float *harmonic_weights = x->harmonic_weights; float *harmonic_phases = x->harmonic_phases; if(argc < 1) { return; } /* DC */ harmonic_weights[0] = atom_getfloatarg(0, argc, argv); harmonic_phases[0] = 0; harmonic_count = 1; for (i=1; i < argc; i += 2) { harmonic_weights[harmonic_count] = atom_getfloatarg(i, argc, argv); harmonic_phases[harmonic_count] = atom_getfloatarg(i+1, argc, argv); ++harmonic_count; } x->harmonic_count = harmonic_count ; build_amph_waveform(x); } void oscil_fadetime (t_oscil *x, t_floatarg fade_ms) { if(x->fade_countdown) { pd_error(0, "oscil: crossfade in progress, cannot update fade time"); return; } if( fade_ms < 0.0 || fade_ms > 60000.0 ) { pd_error(0, "%s: %f is not a good fade time",OBJECT_NAME, fade_ms); fade_ms = 50.; } x->fade_ms = fade_ms; x->fade_samples = x->fade_ms * x->sr / 1000.0 ; } void oscil_fadetype(t_oscil *x, t_floatarg ftype) { if( ftype < 0 || ftype > 2 ) { pd_error(0, "%s: unknown type of fade, selecting no fade",OBJECT_NAME); ftype = 0; } x->fadetype = ftype; } void oscil_harmcount(t_oscil *x, t_floatarg fharms) { int harms = (int)fharms; if( harms < 1 || harms > OSCIL_MAXIMUM_HARMONICS-1) { pd_error(0, "%d is out of range and must be between 1 to %d", harms,OSCIL_MAXIMUM_HARMONICS-1 ); return; } x->bl_harms = harms + 1; } void oscil_mute(t_oscil *x, t_floatarg flag) { x->mute = (short)flag; } void oscil_interpolate(t_oscil *x, t_floatarg flag) { x->interpolate = (short)flag; // post("must toggle DACs for this synthesis method"); } void *oscil_new(t_symbol *s, int argc, t_atom *argv) { float init_freq; t_symbol *init_waveform_symbol; t_oscil *x = (t_oscil *)pd_new(oscil_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"), gensym("signal") ); outlet_new(&x->x_obj, gensym("signal") ); /* SET DEFAULTS IN ADVANCE added 4.14.2003 */ init_freq = OSCIL_INIT_FREQ; x->table_length = OSCIL_DEFAULT_FLEN; init_waveform_symbol = gensym(OSCIL_DEFAULT_WAVEFORM); x->bl_harms = OSCIL_DEFAULT_HARMONICS; x->table_length = OSCIL_DEFAULT_FLEN ; x->phase_offset = 0.0; x->interpolate = 0; if( argc > 0 ) { init_freq = atom_getfloatarg(0, argc, argv); if( ! init_freq ) { pd_error(0, "%s: zero initial frequency, resetting to 440",OBJECT_NAME); init_freq = 440 ; } } if( argc > 1 ) { x->table_length = atom_getfloatarg(1, argc, argv); // post("table length is %d", x->table_length ); } if( argc > 2 ) { init_waveform_symbol = atom_getsymbolarg(2, argc, argv); } else { init_waveform_symbol = gensym( OSCIL_DEFAULT_WAVEFORM ); } if( argc > 3 ) { x->bl_harms = atom_getfloatarg(3, argc, argv); if( x->bl_harms > 1024 ) { pd_error(0, "%s: too many harmonics - limit is 1024",OBJECT_NAME); x->bl_harms = 1024; } } else { x->bl_harms = OSCIL_DEFAULT_HARMONICS ; } if( x->table_length < 4 ) { x->table_length = OSCIL_DEFAULT_FLEN ; } if( x->table_length > OSCIL_MAX_FLEN ) { x->table_length = OSCIL_MAX_FLEN; pd_error(0, "%s: Exceeded maximum - setting function length to %d",OBJECT_NAME,OSCIL_MAX_FLEN); } if( x->bl_harms < 1 || x->bl_harms > OSCIL_MAXIMUM_HARMONICS ) { x->bl_harms = OSCIL_DEFAULT_HARMONICS ; pd_error(0, "%s: Bad parameters. Bandlimited waveforms will have %d partials.", OBJECT_NAME,OSCIL_DEFAULT_HARMONICS); } x->fade_in_progress = 0; x->bl_harms = x->bl_harms + 1; x->piotwo = 2. * atan(1.0); x->twopi = 8.0 * atan(1.0); x->old_wavetable = (float *) t_getbytes( x->table_length * sizeof(float) ); x->wavetable = (float *) t_getbytes( x->table_length * sizeof(float) ); x->harmonic_weights = (float *) t_getbytes( OSCIL_MAXIMUM_HARMONICS * sizeof(float) ); x->harmonic_phases = (float *) t_getbytes( OSCIL_MAXIMUM_HARMONICS * sizeof(float) ); x->phase = 0; x->mute = 0; x->dirty = 0; x->sr = sys_getsr(); if( ! x->sr ) { x->sr = 44100; pd_error(0, "zero sampling rate - set to 44100"); } x->si_factor = (float) x->table_length / x->sr; x->si = init_freq * x->si_factor ; x->fade_countdown = 0; x->fade_ms = 50. ; x->fade_samples = x->fade_ms * x->sr / 1000.0 ; x->fadetype = OSCIL_LINEAR; x->firsttime = 1; if (init_waveform_symbol == gensym("triangle")) { oscil_triangle( x ); } else if (init_waveform_symbol == gensym("square")) { oscil_square( x ); } else if (init_waveform_symbol == gensym("sawtooth")) { oscil_sawtooth( x ); } else if (init_waveform_symbol == gensym("buzz")) { oscil_buzz( x ); } else { // default to sine wave oscil_sine( x ); } x->firsttime = 0; // post("Additive synthesis oscil [4.14.2003a] (as described in Audio Programming)"); return (x); } void build_amph_waveform( t_oscil *x ) { float rescale; int i, j; float max = 0.0; float *wavetable = x->wavetable; float *old_wavetable = x->old_wavetable; float *harmonic_weights = x->harmonic_weights; float *harmonic_phases = x->harmonic_phases; int harmonic_count = x->harmonic_count; int table_length = x->table_length; float twopi = x->twopi; // float testsum = 0.0; float addphase; if( x->fade_in_progress ) { // pd_error(0, "Crossfade in progress. Cannot generate waveform"); // do not use because this will happen too often return; } if( harmonic_count < 1 ) { pd_error(0, "%s: no harmonics specified, waveform not created.",OBJECT_NAME); return; } if( x->fadetype && ! x->firsttime ) { x->fade_countdown = x->fade_samples; x->fade_in_progress = 1; } /* for( i = 0; i < table_length ; i++ ) { old_wavetable[i] = wavetable[i]; } */ memcpy(old_wavetable, wavetable, table_length * sizeof(float) ); x->dirty = 1 ; // add DC in directly (usually 0.0) for( i = 0; i < table_length; i++ ) { wavetable[i] = harmonic_weights[0]; } // sum all specified harmonics for( i = 1 ; i < harmonic_count; i++ ) { if( harmonic_weights[i] ) { addphase = twopi * harmonic_phases[i]; // post("amp %f phase %f twopi phase %f",harmonic_weights[i],harmonic_phases[i],addphase); for( j = 0; j < table_length; j++ ) { wavetable[j] += harmonic_weights[i] * sin( twopi * ((float)i * ((float)j/(float)table_length)) + addphase ) ; } } } // determine maximum amplitude. max = 0; for( j = 0; j < table_length; j++ ) { if( max < fabs(wavetable[j]) ) { max = fabs(wavetable[j]) ; } } // restore last table if( max == 0.0 ) { for( j = 0; j < table_length; j++ ) { wavetable[j] = old_wavetable[j]; } pd_error(0, "all zero function ignored"); x->dirty = 0; return; } // normalize waveform to maximum amplitude of 1.0 rescale = 1.0 / max ; for( j = 0; j < table_length; j++ ) { wavetable[j] *= rescale ; } x->dirty = 0; } void build_waveform( t_oscil *x ) { float rescale; int i, j; float max = 0.0; float *wavetable = x->wavetable; float *old_wavetable = x->old_wavetable; float *harmonic_weights = x->harmonic_weights; int harmonic_count = x->harmonic_count; int table_length = x->table_length; float twopi = x->twopi; // float testsum = 0.0; if( x->fade_in_progress ) { // pd_error(0, "Crossfade in progress. Cannot generate waveform"); // do not use because this will happen too often return; } if( harmonic_count < 1 ) { pd_error(0, "no harmonics specified, waveform not created."); return; } if( x->fadetype && ! x->firsttime ) { x->fade_countdown = x->fade_samples; x->fade_in_progress = 1; } /* for( i = 0; i < table_length ; i++ ) { old_wavetable[i] = wavetable[i]; } */ memcpy(old_wavetable, wavetable, table_length * sizeof(float) ); x->dirty = 1 ; // add DC in directly (usually 0.0) for( i = 0; i < table_length; i++ ) { wavetable[i] = harmonic_weights[0]; } // sum all specified harmonics for( i = 1 ; i < harmonic_count; i++ ) { if( harmonic_weights[i] ) { for( j = 0; j < table_length; j++ ) { wavetable[j] += harmonic_weights[i] * sin( twopi * ( (float) i * ((float) j /(float)table_length)) ) ; } } } // determine maximum amplitude. Since waveform is symmetric, we could only look for positive maximum. max = 0; for( j = 0; j < table_length; j++ ) { if( max < fabs(wavetable[j]) ) { max = fabs(wavetable[j]) ; } } // restore last table if( max == 0.0 ) { for( j = 0; j < table_length; j++ ){ // could use memcpy here wavetable[j] = old_wavetable[j]; } pd_error(0, "all zero function ignored"); x->dirty = 0; return; } // normalize waveform to maximum amplitude of 1.0 rescale = 1.0 / max ; for( j = 0; j < table_length; j++ ) { wavetable[j] *= rescale ; } x->dirty = 0; } // interpolation t_int *oscil_perform_interpolate(t_int *w) { t_oscil *x = (t_oscil *) (w[1]); t_float *freq_vec = (t_float *)(w[2]); t_float *phase_vec = (t_float *)(w[3]); t_float *out = (t_float *)(w[4]); int n = (int) w[5]; double si_factor = x->si_factor; double si = x->si ; double phase = x->phase; double phase_offset = x->phase_offset; int table_length = x->table_length; float *wavetable = x->wavetable; float *old_wavetable = x->old_wavetable; short *connected = x->connected ; int fade_countdown = x->fade_countdown; int iphase, iphase2; int fade_samples = x->fade_samples; short fadetype = x->fadetype; float m1, m2; float frac; double fphase; float sample1, sample2, outsamp1, outsamp2; float piotwo = x->piotwo; if( x->mute ) { while (n--) { *out++ = 0.0; } return (w+6); } /* interpolated loop */ if(x->interpolate) { while (n--) { if(connected[0]) si = *freq_vec++ * si_factor; if(connected[1]) { phase_offset = (float)table_length * *phase_vec++; } fphase = (phase + phase_offset); while( fphase >= table_length ) { fphase -= table_length; } while( fphase < 0 ) { fphase += table_length; } iphase = floor(fphase); iphase2 = (iphase+1)%table_length ; frac = fphase - iphase; if( x->dirty ) { sample1 = old_wavetable[ iphase ]; sample2 = old_wavetable[ iphase2 ]; *out++ = sample1 + frac * (sample2 - sample1); } else if( fade_countdown ) { sample1 = wavetable[ iphase ]; sample2 = wavetable[ iphase2 ]; outsamp1 = sample1 + frac * (sample2 - sample1); sample1 = old_wavetable[ iphase ]; sample2 = old_wavetable[ iphase2 ]; outsamp2 = sample1 + frac * (sample2 - sample1); m2 = (float) fade_countdown / (float) fade_samples ; m1 = 1.0 - m2 ; --fade_countdown; if( fadetype == 1 ) { *out++ = m1 * outsamp1 + m2 * outsamp2 ; } else if( fadetype == 2 ) { m1 *= piotwo; *out++ = sin(m1) * outsamp1 + cos(m1) * outsamp2; } } else { sample1 = wavetable[ iphase ]; sample2 = wavetable[ iphase2 ]; *out++ = sample1 + frac * (sample2 - sample1) ; } phase += si; while( phase >= table_length ) { phase -= table_length ; } while( phase < 0 ) { phase += table_length ; } } } /* non-interpolated loop */ else { while (n--) { if(connected[0]) si = *freq_vec++ * si_factor; if(connected[1]) { phase_offset = (float)table_length * *phase_vec++; } iphase = (int)(phase + phase_offset); while( iphase >= table_length ) { iphase -= table_length; } while( iphase < 0 ) { iphase += table_length; } if( x->dirty ) { *out++ = old_wavetable[ iphase ] ; } else if( fade_countdown ) { m2 = (float) fade_countdown / (float) fade_samples ; m1 = 1.0 - m2 ; --fade_countdown; if( fadetype == 1 ) { *out++ = m1 * wavetable[iphase] + m2 * old_wavetable[ iphase ] ; } else if( fadetype == 2 ) { m1 *= piotwo; *out++ = sin(m1) * wavetable[iphase] + cos(m1) * old_wavetable[ iphase ] ; } } else { *out++ = wavetable[ iphase ] ; } phase += si; while( phase >= table_length ) { phase -= table_length ; } while( phase < 0 ) { phase += table_length ; } } } if( ! fade_countdown ) { x->fade_in_progress = 0; } x->fade_countdown = fade_countdown; x->phase = phase; x->phase_offset = phase_offset; return (w+6); } static t_int *oscil_perform(t_int *w) { t_oscil *x = (t_oscil *) (w[1]); t_float *freq_vec = (t_float *)(w[2]); t_float *phase_vec = (t_float *)(w[3]); t_float *out = (t_float *)(w[4]); int n = (int) w[5]; double si_factor = x->si_factor; double si = x->si ; double phase = x->phase; double phase_offset = x->phase_offset; int table_length = x->table_length; float *wavetable = x->wavetable; float *old_wavetable = x->old_wavetable; short *connected = x->connected ; int fade_countdown = x->fade_countdown; int iphase; int fade_samples = x->fade_samples; short fadetype = x->fadetype; float m1, m2; float piotwo = x->piotwo; if( x->mute ) { while (n--) { *out++ = 0.0; } return (w+6); } while (n--) { if(connected[0]) si = *freq_vec++ * si_factor; if(connected[1]) { phase_offset = (float)table_length * *phase_vec++; } iphase = (int)(phase + phase_offset); while( iphase >= table_length ) { iphase -= table_length; } while( iphase < 0 ) { iphase += table_length; } if( x->dirty ) { *out++ = old_wavetable[ iphase ] ; } else if( fade_countdown ) { m2 = (float) fade_countdown / (float) fade_samples ; m1 = 1.0 - m2 ; --fade_countdown; if( fadetype == 1 ) { *out++ = m1 * wavetable[iphase] + m2 * old_wavetable[ iphase ] ; } else if( fadetype == 2 ) { m1 *= piotwo; *out++ = sin(m1) * wavetable[iphase] + cos(m1) * old_wavetable[ iphase ] ; } } else { *out++ = wavetable[ iphase ] ; } phase += si; while( phase >= table_length ) { phase -= table_length ; } while( phase < 0 ) { phase += table_length ; } } if( ! fade_countdown ) { x->fade_in_progress = 0; } x->fade_countdown = fade_countdown; x->phase = phase; x->phase_offset = phase_offset; return (w+6); } void oscil_sawtooth(t_oscil *x) { int i; float sign = 1.0; x->harmonic_weights[0] = 0.0; // DC x->harmonic_count = x->bl_harms; for( i = 1 ; i < x->bl_harms; i++ ) { x->harmonic_weights[i] = sign * 1.0/(float)i; sign *= -1. ; } build_waveform(x); } void oscil_triangle(t_oscil *x) { int i; float sign = 1.0; x->harmonic_weights[0] = 0.0; // DC x->harmonic_count = x->bl_harms; for( i = 1 ; i < x->bl_harms; i += 2 ) { x->harmonic_weights[i] = sign * 1.0/((float)i * (float)i); x->harmonic_weights[i + 1] = 0.0; sign *= -1; } build_waveform(x); } void oscil_sine(t_oscil *x) { x->harmonic_weights[0] = 0.0; x->harmonic_weights[1] = 1.0; x->harmonic_count = 2; build_waveform(x); } void oscil_square(t_oscil *x) { int i; x->harmonic_weights[0] = 0.0; // DC x->harmonic_count = x->bl_harms; for( i = 1 ; i < x->bl_harms ; i += 2 ) { x->harmonic_weights[i] = 1.0/(float)i; x->harmonic_weights[i + 1] = 0.0; } build_waveform(x); } void oscil_buzz(t_oscil *x) { int i; x->harmonic_weights[0] = 0.0; x->harmonic_count = x->bl_harms; for( i = 1 ; i < x->bl_harms; i++ ) { x->harmonic_weights[i] = 1.0; } build_waveform(x); } void oscil_dsp_free(t_oscil *x) { t_freebytes(x->wavetable, x->table_length * sizeof(float)); t_freebytes(x->old_wavetable, x->table_length * sizeof(float)); t_freebytes(x->harmonic_weights, OSCIL_MAXIMUM_HARMONICS * sizeof(float)); t_freebytes(x->harmonic_phases, OSCIL_MAXIMUM_HARMONICS * sizeof(float)); } void oscil_dsp(t_oscil *x, t_signal **sp) { if(! x->sr ) { x->sr = 44100; } if( x->sr != sp[0]->s_sr ) { if(! sp[0]->s_sr) { pd_error(0, "oscil~: Zero sampling rate reported!"); return; } x->si *= sp[0]->s_sr / x->sr ; x->sr = sp[0]->s_sr; x->si_factor = (float) x->table_length / x->sr; } x->connected[0] = 1; x->connected[1] = 1; x->phase = 0.0; if(1) dsp_add(oscil_perform_interpolate, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); else dsp_add(oscil_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/overlapadd.c000066400000000000000000000006441430526361000173520ustar00rootroot00000000000000/* * input I is a folded spectrum of length N; output O and * synthesis window W are of length Nw--overlap-add windowed, * unrotated, unfolded input data into output O */ #include "fftease.h" void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ) { int i ; while ( n < 0 ) n += N ; n %= N ; for ( i = 0 ; i < Nw ; i++ ) { O[i] += I[n]*W[i] ; if ( ++n == N ) n = 0 ; } } pd-lyonpotpourri-3.0.1/pd-lib-builder/000077500000000000000000000000001430526361000176545ustar00rootroot00000000000000pd-lyonpotpourri-3.0.1/pd-lib-builder/CHANGELOG.txt000066400000000000000000000066431430526361000217150ustar00rootroot00000000000000Changelog for Makefile.pdlibbuilder. v0.6.0, dated 2019-12-21 - detect target platform (OS and architecture) rather than build platform (#55) - introduce optional user variable 'PLATFORM' for cross compilation - no longer build OSX/MacOS fat binaries by default (#21, #50) - do build fat binaries when 'extension=d_fat' is specified for OSX/MacOS - fix bug where minimum OSX/MacOS version wasn't defined, and set it to 10.6 v0.5.1, dated 2018-03-15 Fixes and improvements for Windows builds: - properly evaluate variables 'PDDIR' and 'PDBINDIR' to find pd.dll - define default path of 32 bit Pd on 64 bit Windows - link C++ externals with standard C libs on Windows, they don't load otherwise - strip installed Windows binaries by default (issues #34, #39, #41, #42 respectively) Warning for all platforms: variable 'PD_PATH' is no longer supported, use the equivalent 'PDDIR'. v0.5.0, dated 2018-01-23 Implement target architecture detection for Windows builds, and set appropriate options for 32 and 64 bit (used to be for 32 bit only). (feature, issue #37 #38, merge commit 215bf3e) v0.4.4, dated 2016-11-22 Use variable 'system' when evaluating 'for{Linux,Darwin,Windows}' (bugfix, issue #31, commit 2c14110) v0.4.3, dated 2016-11-02 Replace flags '-fpic' by 'fPIC'. (bugfix, issue #29, commit 426b38b) v0.4.2, dated 2016-10-30 Fix issue where incorrect message about m_pd.h is given. (bugfix, commit 2e13d8f) v0.4.1, dated 2016-10-27 Respect cflag for minimum OSX version when defined by lib makefile. (bugfix, pull request #22, commit 48c4127) v0.4.0, dated 2016-10-14 Introduced path variables PDDIR, PDINCLUDEDIR, PDBINDIR, PDLIBDIR which can also be defined in environment. (feature, issue #27, commit b0dab72) v0.3.1, dated 2016-10-13 Fix bug where pd.dll wouldn't be found. (bugfix, commit a0c87be) v0.3.0, dated 2016-10-09 Variable 'PD_PATH' introduced for pd-extended / pd-l2ork compatibility. (feature, issue #26, commit 41e9743) v0.2.8, dated 2016-10-09 Allow installed files to contain weird characters (notably '$'). (bugfix, pull request #20, commit 5b920b1) v0.2.7, dated 2016-10-04 Remove all default pd search paths except vanilla's. (discussion, issue #25, commit a6a89dc) v0.2.6, dated 2016-09-20 Redefined dependency checking so it won't stall rebuilds on OSX. (bugfix, issue #16, commit 9fd1795) v0.2.5, dated 2016-06-26 Fixed dependency checking for object files in other directories. (bugfix, commit f06e550) v0.2.4, dated 2016-06-25 Fixed regression bug that disabled all dependency checking. (bugfix, commit 1d7bb5e) v0.2.3, dated 2016-03-29 Disabled dependency checking for OSX <= 10.5 because it stalled rebuilds. (bugfix, issue #16, commit eb614fd) v0.2.2, dated 2016-03-28 Removed target 'pre' because it forced rebuild of everything in 'all'. (bugfix, issue #17, commit c989c8e) v0.2.1, dated 2015-12-27 Implement / respect 'CPPFLAGS','CFLAGS'and 'LDFLAGS'. (bugfix, issue #5, commit 98f3582) v0.2.0, dated 2015-12-19 Added per-platform multiline defines 'forLinux', 'forDarwin', 'forWindows'. (feature, pull request #9, commit 3946ea5) v0.1.0, dated 2015-12-08 Added targets 'pre' and 'post' to automatically run before and after 'all'. (feature, pull request #4, commit a5678ac) v0.0.2, dated 2015-12-06 Improved methods for searching pd paths. (bugfix, commit ed37e6b) v0.0.1, dated 2015-10-31 Fixed expansion of variable 'lib.version'. (bugfix, issue #1, commit 974b617) v0.0.0, dated 2015-06-24 Initial version. (commit 16517a2) pd-lyonpotpourri-3.0.1/pd-lib-builder/Makefile.pdlibbuilder000066400000000000000000001266041430526361000237650ustar00rootroot00000000000000# Makefile.pdlibbuilder dated 2019-12-21 version = 0.6.0 # Helper makefile for Pure Data external libraries. # Written by Katja Vetter March-June 2015 for the public domain. No warranties. # Inspired by Hans Christoph Steiner's Makefile Template and Stephan Beal's # ShakeNMake. # # Grab the newest version of Makefile.pdlibbuilder from # https://github.com/pure-data/pd-lib-builder/ # # GNU make version >= 3.81 required. # # #=== characteristics =========================================================== # # # - defines build settings based on autodetected OS and architecture # - defines rules to build Pd class- or lib executables from C or C++ sources # - defines rules for libdir installation # - defines convenience targets for developer and user # - evaluates implicit dependencies for non-clean builds # # #=== basic usage =============================================================== # # # In your Makefile, define your Pd lib name and class files, and include # Makefile.pdlibbuilder at the end of the Makefile. Like so: # # ________________________________________________________________________ # # # Makefile for mylib # # lib.name = mylib # # class.sources = myclass1.c myclass2.c # # datafiles = myclass1-help.pd myclass2-help.pd README.txt LICENSE.txt # # include Makefile.pdlibbuilder # ________________________________________________________________________ # # # For files in class.sources it is assumed that class basename == source file # basename. The default target builds all classes as individual executables # with Pd's default extension for the platform. For anything more than the # most basic usage, continue reading. # # #=== list of Makefile.pdlibbuilder API variables =============================== # # # Variables available for definition in your library Makefile: # # - lib.name # - lib.setup.sources # - class.sources # - common.sources # - shared.sources # - .class.sources # - .class.ldflags # - .class.ldlibs # - cflags # - ldflags # - ldlibs # - datafiles # - datadirs # - makefiles # - makefiledirs # - externalsdir # # Optional multiline defines evaluated per operating system: # # - forLinux # - forDarwin # - forWindows # # Variables available for your makefile or make command line: # # - make-lib-executable # - suppress-wunused # # Path variables for make command line or environment: # # - PDDIR # - PDINCLUDEDIR # - PDBINDIR # - PDLIBDIR # # Standard make variables for make command line or environment: # # - CPPFLAGS # - CFLAGS # - LDFLAGS # - CC # - CXX # - INSTALL # - STRIP # - DESTDIR # # Optional user variables for make command line or environment: # # - PLATFORM # # Deprecated path variables: # # - pdincludepath # - pdbinpath # - objectsdir # # #=== descriptions of Makefile.pdlibbuilder API variables ======================= # # # lib.name: # Name of the library directory as it will be installed / distributed. Also the # name of the lib executable in the case where all classes are linked into # a single binary. # # lib.setup.sources: # Source file(s) (C or C++) which must be compiled only when linking all classes # into a single lib binary. # # class.sources: # All sources files (C or C++) for which the condition holds that # class name == source file basename. # # .class.sources: # Source file(s) (C or C++) specific to class . Use this for # multiple-source classes or when class name != source file basename. # # common.sources: # Source file(s) which must be statically linked to each class in the library. # # shared.sources: # Source file(s) (C or C++) to build a shared dynamic link lib, to be linked # with all class executables. # # cflags, ldflags, ldlibs: # Define cflags (preprocessor&compiler), ldflags (linker) and ldlibs (dynamic # link libs) for the whole library. These flags are added to platform-specific # flags defined by Makefile.pdlibbuilder. # # .class.ldflags and .class.ldlibs: # Define ldflags resp. ldlibs specific to class . These flags are # added to platform-specific flags defined by Makefile.pdlibbuilder, and flags # defined in your Makefile for the whole library. Note: cflags can not be # defined per class in the current implementation. # # datafiles and datadirs: # All extra files you want to include in binary distributions of the # library: abstractions and help patches, example patches, meta patch, readme # and license texts, manuals, sound files, etcetera. Use 'datafiles' for all # files that should go into your lib rootdir and 'datadirs' for complete # directories you want to copy from source to distribution. # # forLinux, forDarwin, forWindows: # Shorthand for 'variable definitions for Linux only' etc. Use like: # define forLinux # cflags += -DLINUX # class.sources += linuxthing.c # endef # # makefiles and makefiledirs: # Extra makefiles or directories with makefiles that should be made in sub-make # processes. # # make-lib-executable: # When this variable is defined 'yes' in your makefile or as command argument, # Makefile.pdlibbuilder will try to build all classes into a single library # executable (but it will force exit if lib.setup.sources is undefined). # If your makefile defines 'make-lib-executable=yes' as the library default, # this can still be overridden with 'make-lib-executable=no' as command argument # to build individual class executables (the Makefile.pdlibbuilder default.) # # suppress-wunused: # When this variable is defined ('yes' or any other value), -Wunused-variable, # -Wunused-parameter, -Wunused-value and -Wunused-function are suppressed, # but the other warnings from -Wall are retained. # # PDDIR: # Root directory of 'portable' pd package. When defined, PDINCLUDEDIR and # PDBINDIR will be evaluated as $(PDDIR)/src and $(PDDIR)/bin. # # PDINCLUDEDIR: # Directory where Pd API m_pd.h should be found, and other Pd header files. # Overrides the default search path. # # PDBINDIR: # Directory where pd.dll should be found for linking (Windows only). Overrides # the default search path. # # PDLIBDIR: # Root directory for installation of Pd library directories. Overrides the # default install location. # # DESTDIR: # Prepended path component for staged install. # # PLATFORM: # Target platform for cross compilation in the form of GNU triplet: # cpu-vendor-os. Example: x86_64-w64-mingw32. This specifies the tool chain that # pdlibbuilder will use, if installed and locatable. System and architecture # will then be autodefined accordingly. In most cases no other variables need to # be overridden. # # CPPFLAGS: # Preprocessor flags which are not strictly required for building. # # CFLAGS: # Compiler flags which are not strictly required for building. Compiler flags # defined by Makefile.pdlibbuilder for warning, optimization and architecture # specification are overriden by CFLAGS. # # LDFLAGS: # Linker flags which are not strictly required for building. Linker flags # defined by Makefile.pdlibbuilder for architecture specification are overriden # by LDFLAGS. # # CC and CXX: # C and C++ compiler programs as defined in your build environment. # # INSTALL # Definition of install program. # # STRIP # Name of strip program. Default 'strip' can be overridden in cross compilation # environments. # # objectsdir: # Root directory for installation of Pd library directories, like PDLIBDIR but # not overridable by environment. Supported for compatibility with pd-extended # central makefile, but deprecated otherwise. # # pdincludepath, pdbinpath: # As PDINCLUDEDIR and PDBINDIR but not overridable by environment. Deprecated # as user variables. # # #=== paths ===================================================================== # # # Source files in directories other than current working directory must be # prefixed with their relative path. Do not rely on VPATH or vpath. # Object (.o) files are built in the directory of their source files. # Executables are built in current working directory. # # Default search path for m_pd.h and other API header files is platform # dependent, and overridable by PDINCLUDEDIR: # # Linux: /usr/include/pd # # OSX: /Applications/Pd*.app/Contents/Resources/src # # Windows: %PROGRAMFILES%/Pd/src # %PROGRAMFILES(X86)%/Pd/src (32 bit builds on 64 bit Windows) # # Default search path for binary pd.dll (Windows), overridable by PDBINDIR # # %PROGRAMFILES%/Pd/bin # %PROGRAMFILES(X86)%/Pd/bin (32 bit builds on 64 bit Windows) # # Default location to install pd libraries is platform dependent, and # overridable by PDLIBDIR: # # Linux: /usr/local/lib/pd-externals # OSX: ~/Library/Pd # Windows: %APPDATA%/Pd # # https://puredata.info/docs/faq/how-do-i-install-externals-and-help-files # The rationale for not installing to ~/pd-externals by default on Linux # is that some people share the home dir between 32 and 64 bit installations. # # #=== targets =================================================================== # # # all: build $(executables) plus optional post target # post: target to build after $(executables) # alldebug: build all with -g option turned on for debug symbols # : force clean build of an individual class # .pre: make preprocessor output file in current working directory # .lst: make asm/source output file in current working directory # # install: install executables and data files # clean: remove build products from source tree # # help: print help text # vars: print makefile variables # allvars: print all variables # depend: print generated prerequisites # dumpmachine: print compiler output of option '-dumpmachine' # coffee: dummy target # # Variable $(executables) expands to class executables plus optional shared lib, # or alternatively to single lib executable when make-lib-executable=true. # Targets pre and post can be defined by library makefile. Make sure to include # Makefile.pdlibbuilder first so default target all will not be redefined. # # #=== Pd-extended libdir concept ================================================ # # # For libdir layout as conceived by Hans-Christoph Steiner, see: # # https://puredata.info/docs/developer/Libdir # # Files README.txt, LICENSE.txt and -meta.pd are part of the libdir # convention. Help patches for each class and abstraction are supposed to be # available. Makefile.pdlibbuilder does not force the presence of these files # however. It does not automatically include such files in libdir installations. # Data files you want to include in distributions must be defined explicitly in # your Makefile. # # #=== Makefile.pdlibbuilder syntax conventions ================================== # # # Makefile.pdlibbuilder variable names are lower case. Default make variables, # environment variables, and standard user variables (CC, CXX, CFLAGS, DESTDIR) # are upper case. Use target 'allvars' to print all variables and their values. # # 'Fields' in data variables are separated by dots, like in 'foo.class.sources'. # Words in variables expressing a function or command are separated by dashes, # like in 'make-lib-executable'. # # #=== useful make options ======================================================= # # # Use 'make -d ' to print debug details of the make process. # Use 'make -p ' to print make's database. # # #=== TODO ====================================================================== # # # - decide whether to use -static-libgcc or shared dll in MinGW # - cygwin support # - android support # - figure out how to handle '$' in filenames # - add makefile template targets dpkg-source dist libdir distclean tags? # # #=== end of documentation sections ============================================= # # ################################################################################ ################################################################################ ################################################################################ # GNU make version 3.81 (2006) or higher is required because of the following: # - function 'info' # - variable '.DEFAULT_GOAL' # force exit when make version is < 3.81 ifneq ($(firstword $(sort 3.81 $(MAKE_VERSION))), 3.81) $(error GNU make version 3.81 or higher is required) endif # Relative path to externals root dir in multi-lib source tree like # pd-extended SVN. Default is parent of current working directory. May be # defined differently in including makefile. externalsdir ?= .. # variable you can use to check if Makefile.pdlibbuilder is already included Makefile.pdlibbuilder = true ################################################################################ ### variables: library name and version ######################################## ################################################################################ # strip possibles spaces from lib.name, they mess up calculated file names lib.name := $(strip $(lib.name)) # if meta file exists, check library version metafile := $(wildcard $(lib.name)-meta.pd) ifdef metafile lib.version := $(shell sed -n \ 's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \ $(metafile)) endif ################################################################################ ### variables: files ########################################################### ################################################################################ #=== sources =================================================================== # (re)define .class.sources using file names in class.sources define add-class-source $(notdir $(basename $v)).class.sources += $v endef $(foreach v, $(class.sources), $(eval $(add-class-source))) # derive class names from .class.sources variables sourcevariables := $(filter %.class.sources, $(.VARIABLES)) classes := $(basename $(basename $(sourcevariables))) # accumulate all source files specified in makefile classes.sources := $(sort $(foreach v, $(sourcevariables), $($v))) all.sources := $(classes.sources) $(lib.setup.sources) \ $(shared.sources) $(common.sources) #=== object files ============================================================== # construct object filenames from all C and C++ source file names classes.objects := $(addsuffix .o, $(basename $(classes.sources))) common.objects := $(addsuffix .o, $(basename $(common.sources))) shared.objects := $(addsuffix .o, $(basename $(shared.sources))) lib.setup.objects := $(addsuffix .o, $(basename $(lib.setup.sources))) all.objects = $(classes.objects) $(common.objects) $(shared.objects) \ $(lib.setup.objects) #=== executables =============================================================== # use recursive variables here because executable extension is not yet known # construct class executable names from class names classes.executables = $(addsuffix .$(extension), $(classes)) # construct shared lib executable name if shared sources are defined ifdef shared.sources shared.lib = lib$(lib.name).$(shared.extension) else shared.lib = endif ################################################################################ ### target platform detection ################################################## ################################################################################ #=== target platform =========================================================== # PLATFORM: optional user variable to define target platform for cross # compilation. Redefine build tools accordingly. PLATFORM should match # the exact target prefix of tools present in $PATH, like x86_64-w64-mingw32, # x86_64-apple-darwin12 etc. Tool definitions are exported to ensure submakes # will get the same. ifneq ($(PLATFORM),) ifneq ($(findstring darwin, $(PLATFORM)),) export CC = $(PLATFORM)-cc export CXX = $(PLATFORM)-c++ export CPP = $(PLATFORM)-cc else export CC = $(PLATFORM)-gcc export CXX = $(PLATFORM)-g++ export CPP = $(PLATFORM)-cpp endif STRIP = $(PLATFORM)-strip endif # Let (native or cross-) compiler report target triplet and isolate individual # words therein to facilitate later processing. target.triplet := $(subst -, ,$(shell $(CC) -dumpmachine)) #=== operating system ========================================================== # The following systems are defined: Linux, Darwin, Windows. GNU and # GNU/kFreeBSD are treated as Linux to get the same options. ifneq ($(filter linux gnu% kfreebsd, $(target.triplet)),) system = Linux endif ifneq ($(filter darwin%, $(target.triplet)),) system = Darwin endif ifneq ($(filter mingw% cygwin%, $(target.triplet)),) system = Windows endif # evaluate possible system-specific multiline defines from library makefile $(eval $(for$(system))) # TODO: Cygwin, Android #=== architecture ============================================================== # The following CPU names can be processed by pdlibbuilder: # i*86 Intel 32 bit # x86_64 Intel 64 bit # arm ARM 32 bit # aarch64 ARM 64 bit target.arch := $(firstword $(target.triplet)) ################################################################################ ### variables per platform ##################################################### ################################################################################ #=== flags per architecture ==================================================== # Set architecture-dependent cflags, mainly for Linux. For Mac and Windows, # arch.c.flags are overriden below. To see gcc's default architecture flags: # $ gcc -Q --help=target # ARMv6: Raspberry Pi 1st gen, not detectable from target.arch ifeq ($(shell uname), armv6l) arch.c.flags = -march=armv6 -mfpu=vfp -mfloat-abi=hard # ARMv7: Beagle, Udoo, RPi2 etc. else ifeq ($(target.arch), arm) arch.c.flags = -march=armv7-a -mfpu=vfpv3 -mfloat-abi=hard # ARMv8 64 bit, not tested yet else ifeq ($(target.arch), aarch64) arch.c.flags = -mcpu=cortex-a53 # Intel 32 bit, build with SSE and SSE2 instructions else ifneq ($(filter i%86, $(target.arch)),) arch.c.flags = -march=pentium4 -mfpmath=sse -msse -msse2 # Intel/AMD 64 bit, build with SSE, SSE2 and SSE3 instructions else ifeq ($(target.arch), x86_64) arch.c.flags = -march=core2 -mfpmath=sse -msse -msse2 -msse3 # if none of the above architectures detected else arch.c.flags = endif #=== flags and paths for Linux ================================================= ifeq ($(system), Linux) prefix = /usr/local libdir := $(prefix)/lib pkglibdir = $(libdir)/pd-externals pdincludepath := $(wildcard /usr/include/pd) extension = pd_linux cpp.flags := -DUNIX c.flags := -fPIC c.ldflags := -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags c.ldlibs := -lc -lm cxx.flags := -fPIC -fcheck-new cxx.ldflags := -rdynamic -shared -fPIC -Wl,-rpath,"\$$ORIGIN",--enable-new-dtags cxx.ldlibs := -lc -lm -lstdc++ shared.extension = so shared.ldflags := -rdynamic -fPIC -shared -Wl,-soname,$(shared.lib) endif #=== flags and paths for Darwin ================================================ # LLVM-clang doesn't support -fcheck-new, therefore this flag is only used when # compiling with g++. ifeq ($(system), Darwin) pkglibdir = $(HOME)/Library/Pd pdincludepath := $(firstword $(wildcard \ /Applications/Pd*.app/Contents/Resources/src)) extension = pd_darwin cpp.flags := -DUNIX -DMACOSX -I /sw/include c.flags := c.ldflags := -undefined suppress -flat_namespace -bundle c.ldlibs := -lc cxx.ldflags := -undefined suppress -flat_namespace -bundle cxx.ldlibs := -lc shared.extension = dylib shared.ldflags = -dynamiclib -undefined dynamic_lookup \ -install_name @loader_path/$(shared.lib) \ -compatibility_version 1 -current_version 1.0 ifneq ($(filter %g++, $(CXX)),) cxx.flags := -fcheck-new endif ifeq ($(extension), d_fat) arch := i386 x86_64 else arch := $(target.arch) endif ifneq ($(filter -mmacosx-version-min=%, $(cflags)),) version.flag := $(filter -mmacosx-version-min=%, $(cflags)) else version.flag = -mmacosx-version-min=10.6 endif arch.c.flags := $(addprefix -arch , $(arch)) $(version.flag) arch.ld.flags := $(arch.c.flags) endif #=== flags and paths for Windows =============================================== # Standard paths on Windows contain spaces, and GNU make functions treat such # paths as lists, with unintended effects. Therefore we must use shell function # ls instead of make's wildcard when probing for a path, and use double quotes # when specifying a path in a command argument. # Default paths in Mingw / Mingw-w64 environments. 'PROGRAMFILES' is standard # location for builds with native architecture, 'ProgramFiles(x86)' for i686 # builds on x86_64 Windows (detection method by Lucas Cordiviola). Curly braces # required because of parentheses in variable name. ifeq ($(system), Windows) pkglibdir := $(APPDATA)/Pd ifeq ($(target.arch), i686) programfiles := ${ProgramFiles(x86)} else programfiles := $(PROGRAMFILES) endif pdbinpath := $(programfiles)/Pd/bin pdincludepath := $(programfiles)/Pd/src endif # Store default path to pd.dll in PDBINDIR if the latter is not user-defined. # For include path this is done in the platform-independent paths section below, # but for PDBINDIR it is done here so ld flags can be evaluated as immediate # variables. ifeq ($(system), Windows) ifdef PDDIR PDBINDIR := $(PDDIR)/bin endif PDBINDIR ?= $(pdbinpath) endif # TODO: decide whether -mms-bitfields should be specified. ifeq ($(system), Windows) cpp.flags := -DMSW -DNT ifeq ($(target.arch), i686) arch.c.flags := -march=pentium4 -msse -msse2 -mfpmath=sse else ifeq ($(target.arch), x86_64) cpp.flags := -DMSW -DNT -DPD_LONGINTTYPE=__int64 arch.c.flags := -march=core2 -msse -msse2 -msse3 -mfpmath=sse else arch.c.flags = endif extension = dll c.flags := c.ldflags := -static-libgcc -shared \ -Wl,--enable-auto-import "$(PDBINDIR)/pd.dll" c.ldlibs := cxx.flags := -fcheck-new cxx.ldflags := -static-libgcc -static-libstdc++ -shared \ -Wl,--enable-auto-import "$(PDBINDIR)/pd.dll" cxx.ldlibs := shared.extension = dll shared.ldflags := -static-libgcc -shared "$(PDBINDIR)/pd.dll" stripflags = --strip-all endif #=== paths ===================================================================== # Platform-dependent default paths are specified above, but overridable. # Path variables in upper case can be defined as make command argument or in the # environment. Variable 'objectsdir' is supported for compatibility with # the build system that pd-l2ork has inherited from pd-extended. PDINCLUDEDIR ?= $(pdincludepath) PDLIBDIR ?= $(firstword $(objectsdir) $(pkglibdir)) ifdef PDDIR PDINCLUDEDIR := $(wildcard $(PDDIR)/src) endif # base path where all components of the lib will be installed by default installpath := $(DESTDIR)$(PDLIBDIR)/$(lib.name) # check if include path contains spaces (as is often the case on Windows) # if so, store the path so we can later do checks with it pdincludepathwithspaces := $(if $(word 2, $(PDINCLUDEDIR)), $(PDINCLUDEDIR)) #=== accumulated build flags =================================================== # From GNU make docs: 'Users expect to be able to specify CFLAGS freely # themselves.' So we use CFLAGS to define options which are not strictly # required for compilation: optimizations, architecture specifications, and # warnings. CFLAGS can be safely overriden using a make command argument. # Variables cflags, ldflags and ldlibs may be defined in including makefile. optimization.flags = -O3 -ffast-math -funroll-loops -fomit-frame-pointer warn.flags = -Wall -Wextra -Wshadow -Winline -Wstrict-aliasing # suppress -Wunused-variable & Co if you don't want to clutter a build log ifdef suppress-wunused warn.flags += $(addprefix -Wno-unused-, function parameter value variable) endif CFLAGS = $(warn.flags) $(optimization.flags) $(arch.c.flags) # preprocessor flags cpp.flags := -DPD -I "$(PDINCLUDEDIR)" $(cpp.flags) $(CPPFLAGS) # flags for dependency checking (cflags from makefile may define -I options) depcheck.flags := $(cpp.flags) $(cflags) # architecture specifications for linker are overridable by LDFLAGS LDFLAGS := $(arch.ld.flags) # now add the same ld flags to shared dynamic lib shared.ldflags := $(shared.ldflags) $(LDFLAGS) # accumulated flags for C compiler / linker c.flags := $(cpp.flags) $(c.flags) $(cflags) $(CFLAGS) c.ldflags := $(c.ldflags) $(ldflags) $(LDFLAGS) c.ldlibs := $(c.ldlibs) $(ldlibs) # accumulated flags for C++ compiler / linker cxx.flags := $(cpp.flags) $(cxx.flags) $(cflags) $(CFLAGS) cxx.ldflags := $(cxx.ldflags) $(ldflags) $(LDFLAGS) cxx.ldlibs := $(cxx.ldlibs) $(ldlibs) ################################################################################ ### variables: tools ########################################################### ################################################################################ # aliases so we can later define 'compile-$1' and set 'c' or 'cxx' as argument compile-c := $(CC) compile-cxx := $(CXX) ################################################################################ ### checks ##################################################################### ################################################################################ # At this point most variables are defined. Now do some checks and info's # before rules begin. # print Makefile.pdlibbuilder version before possible termination $(info ++++ info: using Makefile.pdlibbuilder version $(version)) # Terminate if target triplet remained empty, to avoid all sorts of confusing # scenarios and spurious bugs. ifeq ($(target.triplet),) $(error Command "$(CC) -dumpmachine" did not return a target triplet, \ needed for a build. \ Is compiler "$(CC)" installed in your PATH? ($(PATH)). \ Does compiler "$(CC)" support option "-dumpmachine"?) endif # 'forward declaration' of default target, needed to do checks all: # To avoid unpredictable results, make sure the default target is not redefined # by including makefile. ifneq ($(.DEFAULT_GOAL), all) $(error Default target must be 'all'.) endif # find out which target(s) will be made ifdef MAKECMDGOALS goals := $(MAKECMDGOALS) else goals := all endif # store path to Pd API m_pd.h if it is found ifdef PDINCLUDEDIR mpdh := $(shell ls "$(PDINCLUDEDIR)/m_pd.h") endif # store path to pd.dll; if not found, ls will give a useful error ifeq ($(system), Windows) pddll := $(shell ls "$(PDBINDIR)/pd.dll") endif # when making target all, check if m_pd.h is found and print info about it ifeq ($(goals), all) $(if $(mpdh), \ $(info ++++ info: using Pd API $(mpdh)), \ $(warning Where is Pd API m_pd.h? Do 'make help' for info.)) endif # print target info $(info ++++ info: making target $(goals) $(if $(lib.name),in lib $(lib.name))) # when installing, print installpath info $(if $(filter install install-lib, $(goals)), $(info ++++ info: \ installpath is '$(installpath)')) #=== define executables ======================================================== # By default we build class executables, and optionally a shared dynamic link # lib. When make-lib-executable=yes we build all classes into a single lib # executable, on the condition that variable lib.setup.sources is defined. ifeq ($(make-lib-executable),yes) $(if $(lib.setup.sources), ,\ $(error Can not build library blob because lib.setup.sources is undefined)) executables := $(lib.name).$(extension) else executables := $(classes.executables) $(shared.lib) endif ################################################################################ ### rules: special targets ##################################################### ################################################################################ # Disable built-in rules. If some target can't be built with the specified # rules, it should not be built at all. MAKEFLAGS += --no-builtin-rules .PRECIOUS: .SUFFIXES: .PHONY: all post build-lib \ $(classes) $(makefiledirs) $(makefiles) \ install install-executables install-datafiles install-datadirs \ force clean vars allvars depend help ################################################################################ ### rules: build targets ####################################################### ################################################################################ # Target all forces the build of targets [$(executables) post] in # deterministic order. Target $(executables) builds class executables plus # optional shared lib or alternatively a single lib executable when # make-lib-executable=true. Target post is optionally defined by # library makefile. all: post post: $(executables) all: $(info ++++info: target all in lib $(lib.name) completed) # build all with -g option turned on for debug symbols alldebug: c.flags += -g alldebug: cxx.flags += -g alldebug: all #=== class executable ========================================================== # recipe for linking objects in class executable # argument $1 = compiler type (c or cxx) # argument $2 = class basename define link-class $(compile-$1) \ $($1.ldflags) $($2.class.ldflags) \ -o $2.$(extension) \ $(addsuffix .o, $(basename $($2.class.sources))) \ $(addsuffix .o, $(basename $(common.sources))) \ $($1.ldlibs) $($2.class.ldlibs) $(shared.lib) endef # general rule for linking object files in class executable %.$(extension): $(shared.lib) $(info ++++ info: linking objects in $@ for lib $(lib.name)) $(if $(filter %.cc %.cpp, $($*.class.sources)), \ $(call link-class,cxx,$*), \ $(call link-class,c,$*)) #=== library blob ============================================================== # build all classes into single executable build-lib: $(lib.name).$(extension) $(info ++++ info: library blob $(lib.name).$(extension) completed) # recipe for linking objects in lib executable # argument $1 = compiler type (c or cxx) define link-lib $(compile-$1) \ $($1.ldflags) $(lib.ldflags) \ -o $(lib.name).$(extension) $(all.objects) \ $($1.ldlibs) $(lib.ldlibs) endef # rule for linking objects in lib executable # declared conditionally to avoid name clashes ifeq ($(make-lib-executable),yes) $(lib.name).$(extension): $(all.objects) $(if $(filter %.cc %.cpp, $(all.sources)), \ $(call link-lib,cxx), \ $(call link-lib,c)) endif #=== shared dynamic lib ======================================================== # recipe for linking objects in shared executable # argument $1 = compiler type (c or cxx) define link-shared $(compile-$1) \ $(shared.ldflags) \ -o lib$(lib.name).$(shared.extension) $(shared.objects) \ $($1.ldlibs) $(shared.ldlibs) endef # rule for linking objects in shared executable # build recipe is in macro 'link-shared' lib$(lib.name).$(shared.extension): $(shared.objects) $(info ++++ info: linking objects in shared lib $@) $(if $(filter %.cc %.cpp, $(shared.sources)), \ $(call link-shared,cxx), \ $(call link-shared,c)) #=== object files ============================================================== # recipe to make .o file from source # argument $1 is compiler type (c or cxx) define make-object-file $(info ++++ info: making $@ in lib $(lib.name)) $(compile-$1) \ $($1.flags) \ -o $@ -c $< endef # Three rules to create .o files. These are double colon 'terminal' rules, # meaning they are the last in a rules chain. %.o:: %.c $(call make-object-file,c) %.o:: %.cc $(call make-object-file,cxx) %.o:: %.cpp $(call make-object-file,cxx) #=== explicit prerequisites for class executables ============================== # For class executables, prerequisite rules are declared in run time. Target # 'depend' prints these rules for debugging purposes. # declare explicit prerequisites rule like 'class: class.extension' # argument $v is class basename define declare-class-target $v: $v.$(extension) endef # declare explicit prerequisites rule like 'class.extension: object1.o object2.o' # argument $v is class basename define declare-class-executable-target $v.$(extension): $(addsuffix .o, $(basename $($v.class.sources))) \ $(addsuffix .o, $(basename $(common.sources))) endef # evaluate explicit prerequisite rules for all classes $(foreach v, $(classes), $(eval $(declare-class-target))) $(foreach v, $(classes), $(eval $(declare-class-executable-target))) #=== implicit prerequisites for class executables ============================== # Evaluating implicit prerequisites (header files) with help from the # preprocessor is 'expensive' so this is done conditionally and selectively. # Note that it is also possible to trigger a build via install targets, in # which case implicit prerequisites are not checked. # When the Pd include path contains spaces it will mess up the implicit # prerequisites rules. disable-dependency-tracking := $(strip $(pdincludepathwithspaces)) ifndef disable-dependency-tracking must-build-everything := $(filter all, $(goals)) must-build-class := $(filter $(classes), $(goals)) must-build-sources := $(foreach v, $(must-build-class), $($v.class.sources)) endif # declare implicit prerequisites rule like 'object.o: header1.h header2.h ...' # argument $1 is input source file(s) # dir is explicitly added because option -MM strips it by default define declare-object-target $(dir $1)$(filter %.o: %.h, $(shell $(CPP) $(depcheck.flags) -MM $1)) $(MAKEFILE_LIST) endef # evaluate implicit prerequisite rules when rebuilding everything ifdef must-build-everything $(if $(wildcard $(all.objects)), \ $(info ++++ info: evaluating implicit prerequisites in lib $(lib.name).....) \ $(foreach v, $(all.sources), $(eval $(call declare-object-target, $v)))) endif # evaluate implicit prerequisite rules when selectively building classes ifdef must-build-class $(foreach v, $(must-build-sources), \ $(eval $(call declare-object-target, $v))) $(foreach v, $(shared.sources), \ $(eval $(call declare-object-target, $v))) endif ################################################################################ ### rules: preprocessor and assembly files ##################################### ################################################################################ # Preprocessor and assembly output files for bug tracing etc. They are not part # of the build processes for executables. By default these files are created in # the current working directory. Dependency tracking is not performed, the build # is forced instead to make sure it's up to date. force: #=== preprocessor file ========================================================= # make preprocessor output file with extension .pre # argument $1 = compiler type (c or cxx) define make-preprocessor-file $(info ++++ info: making preprocessor output file $(notdir $*.pre) \ in current working directory) $(compile-$1) -E $< $(c.flags) $($1.flags) -o $(notdir $*.pre) endef %.pre:: %.c force $(call make-preprocessor-file,c) %.pre:: %.cc force $(call make-preprocessor-file,cxx) %.pre:: %.cpp force $(call make-preprocessor-file,cxx) #=== assembly file ============================================================= # make C / assembly interleaved output file with extension .lst # argument $1 = compiler type (c or cxx) define make-assembly-file $(info ++++ info: making assembly output file $(notdir $*.lst) \ in current working directory) $(compile-$1) \ -c -Wa,-a,-ad -fverbose-asm \ $($1.flags) \ $< > $(notdir $*.lst) endef %.lst:: %.c force $(call make-assembly-file,c) %.lst:: %.cc force $(call make-assembly-file,cxx) %.lst:: %.cpp force $(call make-assembly-file,cxx) ################################################################################ ### rules: installation targets ################################################ ################################################################################ #=== strip ===================================================================== # Stripping of installed binaries will only be done when variable 'stripflags' # is defined non-empty. No default definition is provided except for Windows # where the unstripped binaries are large, especially in the case of Mingw-w64. # Note: while stripping all symbols ('-s' or '--strip-all') is possible for # Linux and Windows, in the case of OSX only non-global symbols can be stripped # (option '-x' or '--discard-all'). # Make definition of strip command overridable so it can be defined in an # environment for cross-compilation. STRIP ?= strip # Commands in 'strip-executables' will be executed conditionally in the rule for # target 'install-executables'. strip-executables = cd "$(installpath)" && \ $(foreach v, $(executables), $(STRIP) $(stripflags) '$v';) #=== install =================================================================== # Install targets depend on successful exit status of target all because nothing # must be installed in case of a build error. # -p = preserve time stamps # -m = set permission mode (as in chmod) # -d = create all components of specified directories INSTALL = install INSTALL_PROGRAM := $(INSTALL) -p -m 644 INSTALL_DATA := $(INSTALL) -p -m 644 INSTALL_DIR := $(INSTALL) -m 755 -d # strip spaces from file names executables := $(strip $(executables)) datafiles := $(strip $(datafiles)) datadirs := $(strip $(datadirs)) # Do not make any install sub-target with empty variable definition because the # install program would exit with an error. install: $(if $(executables), install-executables) install: $(if $(datafiles), install-datafiles) install: $(if $(datadirs), install-datadirs) install-executables: all $(INSTALL_DIR) -v "$(installpath)" $(foreach v, $(executables), \ $(INSTALL_PROGRAM) '$v' "$(installpath)";) $(info ++++ info: executables of lib $(lib.name) installed \ from $(CURDIR) to $(installpath)) $(if $(stripflags), $(strip-executables),) install-datafiles: all $(INSTALL_DIR) -v "$(installpath)" $(foreach v, $(datafiles), \ $(INSTALL_DATA) '$(v)' "$(installpath)";) $(info ++++ info: data files of lib $(lib.name) installed \ from $(CURDIR) to $(installpath)) install-datadirs: all $(foreach v, $(datadirs), $(INSTALL_DIR) "$(installpath)/$v";) $(foreach v, $(datadirs), \ $(INSTALL_DATA) $(wildcard $v/*) "$(installpath)/$v";) $(info ++++ info: data directories of lib $(lib.name) installed \ from $(CURDIR) to $(installpath)) ################################################################################ ### rules: distribution targets ################################################ ################################################################################ # TODO # These targets are implemented in Makefile Template, but I have to figure out # how to do it under the not-so-strict conditions of Makefile.pdlibbuilder. # make source package dist: @echo "target dist not yet implemented" # make Debian source package dpkg-source: @echo "target dpkg-source not yet implemented" $(ORIGDIR): $(DISTDIR): ################################################################################ ### rules: clean targets ####################################################### ################################################################################ # delete build products from build tree clean: rm -f $(all.objects) rm -f $(classes.executables) $(lib.name).$(extension) $(shared.lib) rm -f *.pre *.lst # remove distribution directories and tarballs from build tree distclean: clean @echo "target distclean not yet implemented" ################################################################################ ### rules: submake targets ##################################################### ################################################################################ # Iterate over sub-makefiles or makefiles in other directories. # When 'continue-make=yes' is set, sub-makes will report 'true' to the parent # process regardless of their real exit status. This prevents the parent make # from being aborted by a sub-make error. Useful when you want to quickly find # out which sub-makes from a large set will succeed. ifeq ($(continue-make),yes) continue = || true endif # These targets will trigger sub-make processes for entries in 'makefiledirs' # and 'makefiles'. all alldebug install clean distclean dist dkpg-source: \ $(makefiledirs) $(makefiles) # this expands to identical rules for each entry in 'makefiledirs' $(makefiledirs): $(MAKE) --directory=$@ $(MAKECMDGOALS) $(continue) # this expands to identical rules for each entry in 'makefiles' $(makefiles): $(MAKE) --directory=$(dir $@) --makefile=$(notdir $@) $(MAKECMDGOALS) $(continue) ################################################################################ ### rules: convenience targets ################################################# ################################################################################ #=== show variables ============================================================ # Several 'function' macro's cause errors when expanded within a rule or without # proper arguments. Variables which are set with the define directive are only # shown by name for that reason. functions = \ add-class-source \ declare-class-target \ declare-class-executable-target \ declare-object-target \ link-class \ link-lib \ link-shared \ make-object-file \ make-preprocessor-file \ make-assembly-file # show variables from makefiles vars: $(info ++++ info: showing makefile variables:) $(foreach v,\ $(sort $(filter-out $(functions) functions, $(.VARIABLES))),\ $(if $(filter file, $(origin $v)),\ $(info variable $v = $($v)))) $(foreach v, $(functions), $(info 'function' name: $v)) @echo # show all variables allvars: $(info ++++ info: showing default, automatic and makefile variables:) $(foreach v, \ $(sort $(filter-out $(functions) functions, $(.VARIABLES))), \ $(info variable ($(origin $v)) $v = $($v))) $(foreach v, $(functions), $(info 'function' name: $v)) @echo #=== show dependencies ========================================================= # show generated prerequisites rules depend: $(info ++++ info: generated prerequisite rules) $(foreach v, $(classes), $(info $(declare-class-target))) $(foreach v, $(classes), $(info $(declare-class-executable-target))) $(foreach v, $(all.sources), $(info $(call declare-object-target, $v))) @echo #=== show help text ============================================================ # brief info about targets and paths ifdef mpdh mpdhinfo := $(mpdh) else mpdhinfo := m_pd.h was not found. Is Pd installed? endif help: @echo @echo " Main targets:" @echo " all: build executables (default target)" @echo " install: install all components of the library" @echo " vars: print makefile variables for troubleshooting" @echo " allvars: print all variables for troubleshooting" @echo " help: print this help text" @echo @echo " Pd API m_pd.h:" @echo " $(mpdhinfo)" @echo " You may specify your preferred Pd include directory as argument" @echo " to the make command, like 'PDINCLUDEDIR=path/to/pd/src'." @echo @echo " Path for installation of your libdir(s):" @echo " $(PDLIBDIR)" @echo " Alternatively you may specify your path for installation as argument" @echo " to the make command, like 'PDLIBDIR=path/to/pd-externals'." @echo @echo " Default paths are listed in the doc sections in Makefile.pdlibbuilder." @echo #=== platform test ============================================================= # This target can be used to test if the compiler for specified PLATFORM is # correctly defined and available. dumpmachine: @$(CC) -dumpmachine #=== dummy target ============================================================== coffee: @echo "Makefile.pdlibbuilder: Can not make coffee. Sorry." ################################################################################ ### end of rules sections ###################################################### ################################################################################ # for syntax highlighting in vim and github # vim: set filetype=make: pd-lyonpotpourri-3.0.1/pd-lib-builder/README.md000066400000000000000000000102421430526361000211320ustar00rootroot00000000000000 ### Makefile.pdlibbuilder ### Helper makefile for Pure Data external libraries. Written by Katja Vetter March-June 2015 for the public domain and since then developed as a Pd community project. No warranties. Inspired by Hans Christoph Steiner's Makefile Template and Stephan Beal's ShakeNMake. GNU make version >= 3.81 required. ### characteristics ### * defines build settings based on autodetected target platform * defines rules to build Pd class- or lib executables from C or C++ sources * defines rules for libdir installation * defines convenience targets for developer and user * evaluates implicit dependencies for non-clean builds ### basic usage ### In your Makefile, define your Pd lib name and class files, and include Makefile.pdlibbuilder at the end of the Makefile. Like so: # Makefile for mylib lib.name = mylib class.sources = myclass1.c myclass2.c datafiles = myclass1-help.pd myclass2-help.pd README.txt LICENSE.txt include Makefile.pdlibbuilder For files in class.sources it is assumed that class name == source file basename. The default target builds all classes as individual executables with Pd's default extension for the platform. For anything more than the most basic usage, read the documentation sections in Makefile.pdlibbuilder. ### paths ### Makefile.pdlibbuilder >= v0.4.0 supports pd path variables which can be defined not only as make command argument but also in the environment, to override platform-dependent defaults: PDDIR: Root directory of 'portable' pd package. When defined, PDINCLUDEDIR and PDBINDIR will be evaluated as $(PDDIR)/src and $(PDDIR)/bin. PDINCLUDEDIR: Directory where Pd API m_pd.h should be found, and other Pd header files. Overrides the default search path. PDBINDIR: Directory where pd.dll should be found for linking (Windows only). Overrides the default search path. PDLIBDIR: Root directory for installation of Pd library directories. Overrides the default install location. ### documentation ### This README.md provides only basic information. A large comment section inside Makefile.pdlibbuilder lists and explains the available user variables, default paths, and targets. The internal documentation reflects the exact functionality of the particular version. For suggestions about project maintenance and advanced compilation see tips-tricks.md. ### versioning ### The project is versioned in MAJOR.MINOR.BUGFIX format (see http://semver.org), and maintained at https://github.com/pure-data/pd-lib-builder. Pd lib developers are invited to regulary check for updates, and to contribute and discuss improvements here. If you really need to distribute a personalized version with your library, rename Makefile.pdlibbuilder to avoid confusion. ### examples ### The list of projects using pd-lib-builder can be helpful if you are looking for examples, from the simplest use case to more complex implementations. - helloworld: traditional illustration of simplest use case - pd-windowing: straightforward real world use case of a small library - pd-nilwind / pd-cyclone: more elaborate source tree - zexy: migrated from autotools to pd-lib-builder ### projects using pd-lib-builder ### non-exhaustive list https://github.com/pure-data/helloworld https://github.com/electrickery/pd-nilwind https://github.com/electrickery/pd-maxlib https://github.com/electrickery/pd-sigpack https://github.com/electrickery/pd-tof https://github.com/electrickery/pd-windowing https://github.com/electrickery/pd-smlib https://github.com/porres/pd-cyclone https://github.com/porres/pd-else https://github.com/porres/pd-psycho https://git.iem.at/pd/comport https://git.iem.at/pd/hexloader https://git.iem.at/pd/iemgui https://git.iem.at/pd/iemguts https://git.iem.at/pd/iemlib https://git.iem.at/pd/iemnet https://git.iem.at/pd/iem_ambi https://git.iem.at/pd/iem_tab https://git.iem.at/pd/iem_adaptfilt https://git.iem.at/pd/iem_roomsim https://git.iem.at/pd/iem_spec2 https://git.iem.at/pd/mediasettings https://git.iem.at/pd/zexy https://git.iem.at/pd-gui/punish https://github.com/residuum/PuRestJson https://github.com/libpd/abl_link https://github.com/wbrent/timbreID https://github.com/MetaluNet/moonlib pd-lyonpotpourri-3.0.1/pd-lib-builder/tips-tricks.md000066400000000000000000000162561430526361000224640ustar00rootroot00000000000000pd-lib-builder cheatsheet ========================= # Creating special builds ## cross-compiling on linux x86_64 for other platforms Using pd-lib-builder >=0.6.0 we can define variable `PLATFORM` to specify a target triplet for cross-compilation. Example to build W32 binaries (assuming package `mingw-w64` is installed and a W32 package for Pd is unzipped into a path `${PDWIN32}`: make PLATFORM=x86_64-w64-mingw32 PDDIR="${PDWIN32}" #### older pd-lib-builder versions Using pd-lib-builder < 0.6.0, in the absence of variable `PLATFORM`, you would instead override variables `system`, `target.arch`, `CC` and / or `CXX`, `STRIP`. Example: make system=Windows target.arch=i686 CC=i686-w64-mingw32-gcc STRIP=i686-w64-mingw32-strip PDDIR="${PDWIN32}" #### toolchains Cross toolchains for relevant platforms in Debian Buster (install g++ with dependencies for a given platform to get the whole tool chain): - `arm-linux-gnueabihf` - `aarch64-linux-gnu` - `i686-linux-gnu` - `i686-w64-mingw32` and `x86_64-w64-mingw32` (install `mingw-w64`) OSX/MacOS cross tool chains are not distributed by Debian. Use project `osxcross` from Thomas Poechtraeger to create the tools. ## building double-precision externals At the time of writing (2018-02) there is no official Pd that supports double-precision numbers yet. However, if you do get hold of an experimental double-precision Pd, you can easily build your externals for 64-bit numbers: make CPPFLAGS="-DPD_FLOATSIZE=64" ## building externals for W64 (64-bit Windows) At the time of writing (2018-02) there is no official Pd that supports W64 yet. However, if you do get hold of an experimental W64 Pd, you can easily build your externals for this environment with make CPPFLAGS="-DPD_LONGINTTYPE=__int64" CC=x86_64-w64-mingw32-gcc To build a double-precision external for W64, use something like: make CPPFLAGS="-DPD_LONGINTTYPE=__int64 -DPD_FLOATSIZE=64" CC=x86_64-w64-mingw32-gcc ## TODO universal binaries on OSX # Project management In general it is advised to put the `Makefile.pdlibbuilder` into a separate subdirectory (e.g. `pd-lib-builder/`). This makes it much easier to update the `Makefile.pdlibbuilder` later You *should* also use a variable to the actual path of the Makefile.pdlibbuilder (even if you keep it in the root-directory), as this allows easy experimenting with newer (or older) (or site-specific) versions of the pd-lib-builder Makefile. ~~~make PDLIBBUILDER_DIR=pd-lib-builder/ include $(PDLIBBUILDER_DIR)/Makefile.pdlibbuilder ~~~ ## Keeping pd-lib-builder up-to-date ### `git subtree` With git-subtrees, you make the pd-lib-builder repository (or any other repository for that matter) part of your own repository - with full history and everything - put nicely into a distinct subdirectory. Support for *manipulating* subtrees has been added with Git-v1.7.11 (May 2012). The nice thing however is, that from "outside" the subtree is part of your repository like any other directory. E.g. older versions of Git can clone your repository with the full subtree (and all it's history) just fine. You can also use git-archive to make a complete snapshot of your repository (including the subtree) - nice, if you e.g. want self-contained downloads of your project from git hosting platforms (like Github, Gitlab, Bitbucket,...) In short, `git subtree` is the better `git submodule`. So here's how to do it: #### Initial setup/check-out This will create a `pd-lib-builder/` directory containing the full history of the pd-lib-builder repository up to its release `v0.5.0` ~~~sh git subtree add --prefix=pd-lib-builder/ https://github.com/pure-data/pd-lib-builder v0.5.0 ~~~ This will automatically merge the `pd-lib-builder/` history into your current branch, so everything is ready to go. #### Cloning your repository with the subtree Nothing special, really. Just clone your repository as always: ~~~sh git clone https://git.example.org/pd/superbonk~.git ~~~ #### Updating the subtree Time passes and sooner or later you will find, that there is a shiny new pd-lib-builder with plenty of bugfixes and new features. To update your local copy to pd-lib-builder's current `master`, simply run: ~~~sh git subtree pull --prefix pd-lib-builder/ https://github.com/pure-data/pd-lib-builder master ~~~ #### Pulling the updated subtree into existing clones Again, nothing special. Just pull as always: ~~~sh git pull ~~~ #### Further reading More on the power of `git subtree` can be found online - https://medium.com/@v/git-subtrees-a-tutorial-6ff568381844 - https://www.atlassian.com/blog/git/alternatives-to-git-submodule-git-subtree - ... ### ~~`git submodule`~~ [DISCOURAGED] #### Initial setup/check-out To add a new submodule to your repository, just run `git submodule add` and commit the changes: ~~~sh git submodule add https://github.com/pure-data/pd-lib-builder git commit .gitmodules pd-lib-builder/ -m "Added pd-lib-builder as git-submodule" ~~~ #### Cloning your repository with the submodule When doing a fresh clone of your repository, pass the `--recursive` option to automatically fetch all submodules: ~~~sh git clone --recursive https://git.example.org/pd/superbonk~.git ~~~ If you've cloned non-recursively, you can initialize and update the submodules manually: ~~~sh git submodule init git submodule update ~~~ #### Updating the submodule Submodules are usually fixed to a given commit in their repository. To update the `pd-lib-builder` submodule to the current `master` do something like: ~~~sh cd pd-lib-builder git checkout master git pull cd .. git status pd-lib-builder git commit pd-lib-builder -m "Updated pd-lib-builder to current master" ~~~ #### Pulling the updated submodule into existing clones After you have pushed the submodule updates in your repository, other clones of the repository can be updated as follows: ~~~sh git pull ~~~ The above will make your repository aware, that the submodule is out-of-sync. ~~~sh $ LANG=C git status pd-lib-builder On branch master Your branch is up to date with 'origin/master'. Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: pd-lib-builder (new commits) $ ~~~ In order to sync the submodule to the correct commit, run the following: ~~~sh git submodule update ~~~ #### Drawbacks `git submodule` has a number of drawbacks: - it requires special commands to synchronize the submodules, in addition to synching your repository. - you must make sure to use an URL for the submodule that is accessible to your potential users. e.g. using `git@github.com:pure-data/pd-lib-builder` is bad, because it requires everybody who wants to checkout your sources to have a github-account - even if they could checkout *your* repository anonymously. - submodules will be excluded from `git archive`. This means, that if you use a mainstream git provider (like Github, GitLab, Bitbucket,...) and make releases by creating a `git tag`, the automatically generated zipfiles with the sources will lack the submodule - and your users will not be able to compile your source code. In general, I would suggest to **avoid** `git submodule`, and instead use the better `git subtree` (above). pd-lyonpotpourri-3.0.1/pd-template.spec000066400000000000000000000011131430526361000201450ustar00rootroot00000000000000# This is a sample spec file for packaging Pd libraries #%define _topdir /home/strike/mywget %define name template %define release 1 %define version 0.1 %define buildroot %{_topdir}/%{name}-%{version}-root BuildRoot: %{buildroot} Summary: replace me with a summary of your library License: GPL Name: %{name} Version: %{version} Release: %{release} Source: %{name}-%{version}.tar.gz Prefix: /usr Group: Development/Tools %description Replace me with a description of your library. %prep %setup -q %build make %install make install prefix=$RPM_BUILD_ROOT/usr pd-lyonpotpourri-3.0.1/phasemod~-help.pd000066400000000000000000000124241430526361000203350ustar00rootroot00000000000000#N canvas 472 143 549 554 12; #X floatatom 32 211 5 20 20000 2 freq phasemod-freq-in -; #N canvas 600 60 454 304 scope 0; #N canvas 0 22 450 300 (subpatch) 0; #X array phasemod-scope 441 float 3; #A 0 0.826968 0.819897 0.812698 0.805372 0.797922 0.790348 0.782531 0.774711 0.766647 0.75846 0.750025 0.741595 0.732915 0.724247 0.715329 0.706293 0.697003 0.687733 0.678209 0.66857 0.658817 0.648952 0.638829 0.628595 0.61825 0.607798 0.597238 0.586575 0.575651 0.564624 0.553496 0.542268 0.530779 0.519356 0.507674 0.495898 0.484031 0.471904 0.459858 0.447555 0.435167 0.422695 0.409969 0.397338 0.384454 0.371495 0.358284 0.345181 0.33183 0.318412 0.304929 0.291385 0.277783 0.26394 0.250042 0.236092 0.222094 0.207862 0.193774 0.179457 0.164913 0.150523 0.136101 0.121459 0.106791 0.0920999 0.0771974 0.062469 0.0475355 0.0325913 0.0174481 0.00249272 -0.012655 -0.0277998 -0.0429383 -0.0580668 -0.0733733 -0.0886626 -0.103931 -0.119175 -0.134391 -0.149765 -0.165102 -0.1804 -0.195654 -0.211049 -0.226391 -0.241678 -0.256905 -0.272252 -0.287347 -0.302554 -0.317684 -0.332915 -0.347879 -0.362934 -0.377895 -0.392934 -0.407694 -0.422522 -0.437237 -0.451836 -0.466485 -0.480839 -0.495232 -0.509655 -0.523773 -0.53791 -0.551898 -0.565732 -0.579408 -0.593078 -0.606426 -0.619907 -0.633058 -0.64603 -0.658961 -0.671701 -0.684385 -0.696728 -0.709002 -0.721066 -0.732915 -0.744674 -0.756206 -0.767508 -0.778576 -0.789407 -0.800113 -0.81057 -0.820774 -0.83083 -0.840622 -0.850146 -0.8594 -0.868476 -0.877177 -0.885689 -0.893999 -0.901929 -0.909646 -0.917062 -0.924173 -0.931047 -0.937606 -0.943847 -0.949768 -0.955425 -0.96075 -0.965744 -0.970403 -0.974769 -0.978791 -0.982468 -0.98583 -0.988836 -0.991487 -0.993779 -0.995714 -0.997305 -0.998528 -0.999391 -0.999876 -0.999993 -0.999735 -0.999094 -0.998071 -0.996666 -0.994879 -0.992712 -0.990139 -0.987179 -0.9838 -0.980068 -0.975912 -0.971367 -0.966387 -0.961016 -0.955255 -0.949106 -0.942509 -0.935523 -0.92815 -0.920393 -0.912178 -0.903579 -0.894514 -0.885154 -0.875329 -0.865129 -0.854458 -0.843414 -0.832002 -0.820226 -0.807979 -0.795372 -0.782412 -0.768981 -0.755327 -0.74108 -0.726623 -0.711702 -0.696452 -0.680882 -0.664854 -0.648514 -0.63187 -0.614778 -0.597392 -0.579721 -0.561773 -0.543395 -0.524753 -0.505856 -0.486545 -0.466994 -0.447212 -0.427035 -0.406643 -0.386047 -0.365078 -0.343921 -0.322589 -0.301092 -0.279256 -0.257275 -0.234974 -0.212548 -0.19001 -0.167371 -0.144454 -0.121459 -0.0983988 -0.0750943 -0.0517487 -0.0283748 -0.00479367 0.00498542 0.0113129 0.0176399 0.0239662 0.0302915 0.0368072 0.0431298 0.0496422 0.0561525 0.062469 0.0689743 0.0754767 0.0819759 0.0884716 0.0951544 0.101642 0.108126 0.114795 0.121459 0.127928 0.134581 0.141228 0.147868 0.154502 0.161319 0.167938 0.17455 0.181343 0.188127 0.194714 0.20148 0.208237 0.214983 0.221907 0.228632 0.235347 0.242236 0.248928 0.255793 0.262645 0.269484 0.276309 0.28312 0.289918 0.2967 0.303651 0.310403 0.317321 0.324222 0.331106 0.337973 0.344821 0.351652 0.358463 0.365435 0.372207 0.379138 0.386047 0.392758 0.399624 0.406468 0.413464 0.420261 0.427035 0.433958 0.440683 0.447555 0.4544 0.461219 0.468011 0.474775 0.48168 0.488387 0.495232 0.501881 0.508665 0.515418 0.522139 0.528828 0.535484 0.542268 0.548856 0.55557 0.56209 0.568732 0.575338 0.581906 0.588437 0.595083 0.601536 0.608102 0.614475 0.620959 0.627401 0.6338 0.640156 0.646469 0.652882 0.659105 0.665427 0.671559 0.677786 0.683965 0.690096 0.696315 0.702345 0.708326 0.71439 0.720402 0.726359 0.732263 0.738112 0.743906 0.749644 0.755453 0.761078 0.76677 0.772402 0.777974 0.783485 0.788936 0.794442 0.799768 0.805145 0.810457 0.815704 0.820884 0.825997 0.831043 0.836127 0.841037 0.84598 0.850852 0.855651 0.860379 0.865033 0.869614 0.874215 0.878646 0.883094 0.887463 0.891754 0.895966 0.900183 0.904235 0.908288 0.912178 0.916065 0.919868 0.923586 0.927291 0.930837 0.934366 0.937739 0.941091 0.944353 0.947524 0.950605 0.953653 0.95655 0.959409 0.962174 0.964842 0.967415 0.969891 0.972271 0.974598 0.976823 0.978948 0.980972 0.982894 0.984715 0.986434 0.988081 0.989622 0.991031 0.992362 0.993608 0.994723 0.995732 0.99665 0.997457 0.998153 0.998738 0.999212 0.999575 0.999831 0.999969 0.999996 0.999907 0.999704 0.999384 0.998941 0.99839 0.99771 0.996911 0.995993 0.994957 0.993779 0.992503 0.991082 0.989567 0.987903 0.986086; #X coords 0 1 440 -1 200 140 1; #X restore 37 20 graph; #X obj 69 246 tabwrite~ phasemod-scope; #X obj 69 193 inlet~; #X obj 130 216 metro 100; #X obj 130 197 tgl 15 0 empty phasemod-scope-tog empty 17 7 0 10 -262144 -1 -1 1 1; #X text 154 201 turn on scope; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 4 0 3 0; #X restore 153 273 pd scope; #X obj 32 237 lyonpotpourri/phasemod~; #X obj 32 350 lpp-meters; #X text 222 269 <= look at waveform; #X obj 190 150 osc~ 0.15; #X obj 190 178 *~ 15; #X obj 190 204 +~ 15; #N canvas 600 60 421 227 init 0; #X obj 45 50 loadbang; #X msg 45 79 \; phasemod-freq-in 100 \; phasemod-scope-tog 1; #X connect 0 0 1 0; #X restore 200 484 pd init; #X text 243 49 - a phase-modulated sinusoid; #X text 29 117 In this example the maximum index of modulation is 30 \, but you could try higher values too.; #X obj 25 19 lpp-icon phasemod~; #X text 237 207 modulation index ranges from 0 - 30; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 2 0 3 0; #X connect 2 0 3 1; #X connect 5 0 6 0; #X connect 6 0 7 0; #X connect 7 0 2 1; pd-lyonpotpourri-3.0.1/phasemod~.c000066400000000000000000000071711430526361000172310ustar00rootroot00000000000000#include "MSPd.h" #define FUNC_LEN (32768) #define OBJECT_NAME "phasemod~" static t_class *phasemod_class; typedef struct _phasemod { t_object x_obj; float x_f; t_float x_val; float mygain; float *wavetab; float phs; float bendphs; float frequency; float alpha; short mute; short connections[4]; float si_fac; float sr; } t_phasemod; static void *phasemod_new(t_symbol *s, int argc, t_atom *argv); static t_int *phasemod_perform(t_int *w); static void phasemod_mute(t_phasemod *x, t_floatarg toggle); static void phasemod_dsp(t_phasemod *x, t_signal **sp); static void phasemod_dsp_free(t_phasemod *x); void phasemod_tilde_setup(void) { phasemod_class = class_new(gensym("phasemod~"), (t_newmethod)phasemod_new, (t_method)phasemod_dsp_free,sizeof(t_phasemod), 0,A_GIMME,0); CLASS_MAINSIGNALIN(phasemod_class, t_phasemod, x_f); class_addmethod(phasemod_class,(t_method)phasemod_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(phasemod_class,(t_method)phasemod_mute,gensym("mute"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void phasemod_dsp_free( t_phasemod *x ) { freebytes(x->wavetab, FUNC_LEN * sizeof(t_float)); } void phasemod_mute(t_phasemod *x, t_floatarg toggle) { x->mute = toggle; } void phasemod_assist (t_phasemod *x, void *b, long msg, long arg, char *dst) { if (msg==1) { switch (arg) { case 0: sprintf(dst,"(signal/float) Frequency "); break; case 1: sprintf(dst,"(signal/float) Slope Factor "); break; } } else if (msg==2) { sprintf(dst,"(signal) Output "); } } void *phasemod_new(t_symbol *s, int argc, t_atom *argv) { int i; t_phasemod *x = (t_phasemod *)pd_new(phasemod_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->phs = 0; x->mute = 0; x->frequency = 440.0; x->wavetab = (t_float *) getbytes(FUNC_LEN * sizeof(t_float)); for( i = 0 ; i < FUNC_LEN; i++ ) { x->wavetab[i] = sin( TWOPI * ((t_float)i/(t_float) FUNC_LEN)) ; } x->bendphs = 0; x->sr = sys_getsr(); if(!x->sr) x->sr = 44100.0; x->si_fac = 1.0/x->sr; return (x); } t_int *phasemod_perform(t_int *w) { float phs; t_phasemod *x = (t_phasemod *) (w[1]); t_float *frequency_vec = (t_float *)(w[2]); t_float *alpha_vec = (t_float *)(w[3]); t_float *out = (t_float *)(w[4]); int n = (int) w[5]; short *connections = x->connections; float bendphs = x->bendphs; float *wavetab = x->wavetab; float si_fac = x->si_fac; float incr = x->frequency * si_fac ; float alpha = x->alpha; if( x->mute ) { while(n--) { *out++ = 0.0; } return (w + 6); } while (n--) { if( connections[1] ) { alpha = *alpha_vec++; } if( alpha == 0 ) { alpha = .000001; } if( connections[0] ) { incr = *frequency_vec++ * si_fac ; } // NO NEGATIVE FREQUENCIES if( incr < 0 ) incr = -incr; bendphs += incr ; while( bendphs > 1.0 ) bendphs -= 1.0 ; phs = FUNC_LEN * ( (1 - exp(bendphs * alpha))/(1 - exp(alpha)) ); while( phs < 0.0 ) { phs += FUNC_LEN; } while( phs >= FUNC_LEN ) { phs -= FUNC_LEN; } *out++ = wavetab[(int) phs] ; } x->bendphs = bendphs; return (w+6); } void phasemod_dsp(t_phasemod *x, t_signal **sp) { x->connections[0] = 1; x->connections[1] = 1; if(x->sr != sp[0]->s_sr) { if(!sp[0]->s_sr) { pd_error(0, "zero sampling rate"); return; } x->sr = sp[0]->s_sr; x->si_fac = 1.0/x->sr; } dsp_add(phasemod_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/player~-help.pd000066400000000000000000000116731430526361000200360ustar00rootroot00000000000000#N canvas 417 25 664 741 12; #N canvas 0 22 450 300 (subpatch) 0; #X array sf4player 155944 float 2; #X coords 0 1 155944 -1 100 70 1 0 0; #X restore 482 138 graph; #N canvas 113 308 911 309 load-a-sound 0; #X obj 377 132 soundfiler; #X obj 377 81 openpanel; #X msg 377 104 read -resize \$1 sf4player; #X msg 70 48 read -resize sound/bell.aiff sf4player; #X obj 70 14 loadbang; #X obj 377 43 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000; #X text 460 72 do this before turning on DACs; #X text 444 54 <- first load in a short sound (recommend 1-5 secs.) ; #X connect 1 0 2 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 3 0; #X connect 5 0 1 0; #X restore 237 579 pd load-a-sound; #X floatatom 370 310 5 0 0 0 - increment - 0; #X obj 240 550 hsl 128 15 -2 2 0 0 increment \$0-increment increment -2 -6 0 10 #88fc08 #000000 #000000 0 1; #N canvas 600 60 795 628 triggers 0; #X msg 93 79 mute \$1; #X obj 93 46 tgl 15 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000 0 1; #X obj 71 461 outlet~; #X msg 205 72 tempo \$1; #X floatatom 205 52 5 0 0 0 - - - 0; #X obj 208 25 hsl 128 15 20 200 0 0 empty empty empty -2 -6 0 8 #fcfcfc #000000 #000000 0 1; #X obj 391 461 outlet~; #X obj 75 297 lyonpotpourri/mask~ 1 0.7 0.5 0.3 0.1; #X obj 391 342 lyonpotpourri/mask~ 1 3 2 4; #X obj 391 396 lyonpotpourri/clickhold~; #X obj 93 107 lyonpotpourri/samm~ 60 1; #X msg 290 135 bang; #X text 325 134 manual play (when metro is muted); #X obj 283 236 lyonpotpourri/click~ 0.5; #X msg 451 183 set 2; #X msg 400 183 set 0.5; #X text 72 495 gain value; #X text 392 495 increment value; #X text 111 48 mute metro; #X text 383 161 set manual playback increment; #X text 427 323 increment sequence; #X text 126 273 gain sequence; #X obj 120 236 lyonpotpourri/click~; #X connect 0 0 10 0; #X connect 1 0 0 0; #X connect 3 0 10 0; #X connect 4 0 3 0; #X connect 5 0 4 0; #X connect 7 0 2 0; #X connect 8 0 9 0; #X connect 9 0 6 0; #X connect 10 0 7 0; #X connect 10 0 8 0; #X connect 11 0 13 0; #X connect 11 0 22 0; #X connect 13 0 6 0; #X connect 14 0 13 0; #X connect 15 0 13 0; #X connect 22 0 2 0; #X restore 80 331 pd triggers; #X msg 46 311 static_increment \$1; #X obj 46 284 tgl 15 0 empty empty empty 0 -6 0 8 #fcfcfc #000000 #000000 0 1; #N canvas 184 101 652 543 Learn-About-Me 1; #X text 30 61 (up to 8 simultaneous plays) so that; #X text 30 83 if you retrigger before the last play; #X text 33 104 is done \, the tail of the sound does; #X text 33 127 not get cut off abruptly.; #X text 31 41 other players \, player~ allows overlap; #X text 42 176 By default you have continuous control; #X text 42 215 the right inlet.) This increment controls; #X text 42 233 ALL currently active playbacks. If you; #X text 43 255 want independent playback (say a drum; #X text 42 277 machine with different increments on; #X text 45 301 each note) then turn on "static_increment."; #X text 46 328 Then you lose direct control over increment -; #X text 45 372 is constant. But then you can have multiple notes; #X text 45 398 playing at different increments.; #X text 29 22 player~ plays sound from an array. Unlike; #X text 40 194 over the sound increment (the input to; #X text 44 437 player~ is sample-triggered \, which means it can; #X text 46 461 be controlled with a sample-accurate metronome; #X text 48 482 such as samm~. This can make for a much more steady ; #X text 44 351 whatever increment is set at the onset of each note ; #X text 46 504 rhythm than using metro.; #X restore 237 611 pd Learn-About-Me; #X obj 46 241 loadbang; #X obj 192 332 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1; #X msg 192 355 channel \$1; #N canvas 600 60 253 221 initialize 0; #X obj 30 51 loadbang; #X msg 30 75 1; #X obj 30 96 s \$0-increment; #X connect 0 0 1 0; #X connect 1 0 2 0; #X restore 237 643 pd initialize; #X msg 46 262 1; #X text 67 287 set this for fixed increments (and polyphony); #X text 309 439 args: channel count \, overlap count, f 38; #X obj 46 441 lyonpotpourri/player~ sf4player 1 8; #X obj 192 385 lyonpotpourri/clean_selector~ 2; #X obj 46 493 lpp-meters; #X msg 370 335 \$1 50; #X obj 370 359 line~; #X text 411 311 <= manual increments from slider; #X obj 32 23 lpp-icon player~; #X text 258 60 - click-driven sample-accurate array playback; #X text 38 121 [player~] is a reentrant \, click-triggered soundfile player. A note is triggered by a non-zero click in the left inlet. There are two modes of play. In static mode \, the increment received in the right inlet at the time of the click trigger will be the increment for the duration of the note. In dynamic mode the increment can be continuously varied in the left inlet. Use the "static_increment" message to select the playback mode.; #X connect 2 0 18 0; #X connect 4 0 15 0; #X connect 4 1 16 0; #X connect 5 0 15 0; #X connect 6 0 5 0; #X connect 8 0 12 0; #X connect 9 0 10 0; #X connect 10 0 16 0; #X connect 12 0 6 0; #X connect 15 0 17 0; #X connect 15 0 17 1; #X connect 16 0 15 1; #X connect 18 0 19 0; #X connect 19 0 16 1; pd-lyonpotpourri-3.0.1/player~.c000066400000000000000000000334321430526361000167240ustar00rootroot00000000000000#include "MSPd.h" static t_class *player_class; #include "time.h" #include "stdlib.h" #define MAX_CHANNELS (1) #define DEFAULT_MAX_OVERLAP (8) // number of overlapping instances allowed #define FORWARD 1 #define BACKWARD 2 #define ACTIVE 0 #define INACTIVE 1 #define MAX_VEC 2048 #define MAXIMUM_VECTOR (8192) #define OBJECT_NAME "player~" #define COMPILE_DATE "7.3.06" typedef struct { float phase; // current phase in frames float gain; // gain for this note short status;// status of this event slot float increment;// first increment noted (only if using static increments) } t_event; typedef struct _player { t_object x_obj; float x_f; t_symbol *wavename; // name of waveform buffer float sr; // sampling rate short hosed; // buffers are bad float fadeout; // fadeout time in sample frames (if truncation) float sync; // input from groove sync signal float increment; // read increment short direction; // forwards or backwards int most_recent_event; // position in array where last note was initiated long b_nchans; // channels of buffer int overlap_max; // max number of simultaneous plays t_event *events; //note attacks int active_events; // how many currently activated notes? short connections[4]; // state of signal connections short interpolation_tog; // select for interpolation or not short mute; short static_increment; // flag to use static increment (off by default) // variables only for Pd int vs; // signal vector size t_float *trigger_vec; // copy of input vector (Pd only) t_float *increment_vec; // copy of input vector (Pd only) t_word *b_samples; // pointer to array data long b_valid; // state of array long b_frames; // number of frames (in Pd frames are mono) } t_player; static void player_setbuf(t_player *x, t_symbol *wavename); static void *player_new(t_symbol *msg, int argc, t_atom *argv); // static t_int *player_perform_mono(t_int *w); static t_int *player_perform_mono_interpol(t_int *w); // static t_int *player_perform_stereo(t_int *w); // static t_int *player_perform_stereo_interpol(t_int *w); // static t_int *player_perform_stereo_interpol_nocopy(t_int *w); static t_int *player_perform_hosed1(t_int *w); // static t_int *player_perform_hosed2(t_int *w); // static t_int *pd_player(t_int *w); static void player_dsp(t_player *x, t_signal **sp); // static float player_boundrand(float min, float max); static void player_dsp_free(t_player *x); //static void player_float(t_player *x, double f); // static void player_interpolation(t_player *x, t_float f); static void player_mute(t_player *x, t_floatarg f); static void player_static_increment(t_player *x, t_floatarg f); static void player_stop(t_player *x); // static void player_info(t_player *x); static void player_init(t_player *x,short initialized); void player_tilde_setup(void) { player_class = class_new(gensym("player~"), (t_newmethod)player_new, (t_method)player_dsp_free ,sizeof(t_player), 0, A_GIMME,0); CLASS_MAINSIGNALIN(player_class, t_player, x_f ); class_addmethod(player_class, (t_method)player_dsp, gensym("dsp"), A_CANT, 0); // class_addmethod(player_class, (t_method)player_mute, gensym("mute"), A_DEFFLOAT,0); class_addmethod(player_class, (t_method)player_setbuf, gensym("setbuf"),A_DEFSYM, 0); class_addmethod(player_class, (t_method)player_mute, gensym("mute"), A_FLOAT, 0); class_addmethod(player_class, (t_method)player_static_increment, gensym("static_increment"), A_FLOAT, 0); class_addmethod(player_class, (t_method)player_stop, gensym("stop"), 0); potpourri_announce(OBJECT_NAME); } void player_static_increment(t_player *x, t_floatarg f) { x->static_increment = f; } void player_stop(t_player *x) { int i; for(i = 0; i < x->overlap_max; i++) { x->events[i].status = INACTIVE; x->events[i].phase = 0.0; x->events[i].phase = 0.0; x->events[i].gain = 0.0; } } void player_mute(t_player *x, t_floatarg f) { x->mute = f; } void *player_new(t_symbol *msg, int argc, t_atom *argv) { t_player *x = (t_player *)pd_new(player_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal") ); x->wavename = atom_getsymbolarg(0,argc,argv); x->b_nchans = 1; if(argc < 1) { x->wavename = &s_; pd_error(0, "%s: must specify buffer name",OBJECT_NAME); } x->overlap_max = atom_getfloatarg(2,argc,argv); if(x->overlap_max <= 0 || x->overlap_max > 128) { x->overlap_max = DEFAULT_MAX_OVERLAP; } // post("%d overlaps for %s",x->overlap_max,x->wavename->s_name); x->sr = sys_getsr(); x->vs = sys_getblksize(); if(!x->sr) x->sr = 44100; if(!x->vs) x->vs = 256; player_init(x,0); // player_setbuf(x, x->wavename); return x; } void player_init(t_player *x,short initialized) { int i; if(!initialized) { x->most_recent_event = 0; x->active_events = 0; x->increment = 1.0; x->direction = FORWARD; x->events = (t_event *) getbytes(x->overlap_max * sizeof(t_event)); x->mute = 0; x->interpolation_tog = 1; // interpolation by default x->static_increment = 0; // by default increment is adjustable through note for(i = 0; i < x->overlap_max; i++) { x->events[i].status = INACTIVE; x->events[i].increment = 0.0; x->events[i].phase = 0.0; x->events[i].gain = 0.0; } // post("using local vectors"); x->increment_vec = getbytes(MAXIMUM_VECTOR * sizeof(t_float)); x->trigger_vec = getbytes(MAXIMUM_VECTOR * sizeof(t_float)); } else { for(i = 0; i < x->overlap_max; i++) { x->events[i].status = INACTIVE; } // x->increment_vec = realloc(x->increment_vec, x->vs * sizeof(float)); // x->trigger_vec = realloc(x->trigger_vec, x->vs * sizeof(float)); } } void player_setbuf(t_player *x, t_symbol *wavename) { int frames; t_garray *a; x->hosed = 0; x->b_frames = 0; x->b_valid = 0; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "player~: %s: no such array", wavename->s_name); x->b_samples = 0; x->hosed = 1; } else if (!garray_getfloatwords(a, &frames, &x->b_samples)) { pd_error(x, "%s: bad template for player~", wavename->s_name); x->b_samples = 0; x->hosed = 1; } else { x->b_frames = frames; x->b_valid = 1; garray_usedindsp(a); } if(! x->b_valid ) { post("player~ got invalid buffer"); } } t_int *player_perform_hosed1(t_int *w) { // t_player *x = (t_player *) (w[1]); float *outchan = (t_float *)(w[4]); int n = (int) w[5]; memset((void *)outchan,0,sizeof(float) * n); return(w+6); } t_int *player_perform_hosed2(t_int *w) { // t_player *x = (t_player *) (w[1]); float *out1 = (t_float *)(w[4]); float *out2 = (t_float *)(w[5]); int n = (int) w[6]; // while(n--) *outchan++ = 0.0; memset((void *)out1,0,sizeof(float) * n); memset((void *)out2,0,sizeof(float) * n); return(w+7); } /* New mono version for Pd */ t_int *player_perform_mono_interpol(t_int *w) { t_player *x = (t_player *) (w[1]); t_float *t_vec = (t_float *)(w[2]); t_float *i_vec = (t_float *)(w[3]); t_float *outchan = (t_float *)(w[4]); int n = (int) w[5]; t_word *b_samples; long b_nchans; t_event *events = x->events; float increment = x->increment; int overlap_max = x->overlap_max; int iphase; float fphase; float gain; short insert_success; int new_insert; int i,j,k; t_float *trigger_vec = x->trigger_vec; t_float *increment_vec = x->increment_vec; short bail; short static_increment = x->static_increment; float maxphase; float frac; int theft_candidate; int flimit; float samp1, samp2; long b_frames; float vincrement; if(x->mute || x->hosed) { memset((void *)outchan,0,sizeof(float) * n); return(w+6); } player_setbuf(x, x->wavename); b_samples = x->b_samples; b_nchans = x->b_nchans; b_frames = x->b_frames; if(! x->b_valid) { player_stop(x); memset((void *)outchan,0,sizeof(float) * n); return(w+6); } for(i = 0; i < n; i++) { trigger_vec[i] = t_vec[i]; increment_vec[i] = i_vec[i]; } /* test if we even need to do anything */ bail = 1; for(i = 0; i < overlap_max; i++) { if(events[i].status == ACTIVE) { bail = 0; break; } } if(bail) { for(i = 0; i < n; i++) { if(trigger_vec[i]) { bail = 0; } } } if(bail) { memset((void *)outchan,0,sizeof(float) * n); return(w+6); } /* main sample playback code */ vincrement = increment_vec[0]; memset((void *)outchan,0,sizeof(float) * n); flimit = (b_frames - 1) * 2; for(i = 0; i < overlap_max; i++) { if(events[i].status == ACTIVE) { gain = events[i].gain; for(j = 0; j < n; j++){ //vector loop iphase = events[i].phase; frac = events[i].phase - iphase; if(static_increment) { increment = events[i].increment; } else { increment = increment_vec[j]; } // iphase *= 2; if(increment > 0){ // moving forward into sample if(iphase == flimit) { outchan[j] += b_samples[iphase].w_float * gain; } else { samp1 = b_samples[iphase].w_float; samp2 = b_samples[iphase + 1].w_float; outchan[j] += gain * (samp1 + frac * (samp2-samp1)); } } // moving backwards into sample else { if(iphase == 0.0) { outchan[j] += b_samples[iphase].w_float * gain; } else { samp2 = b_samples[iphase].w_float; samp1 = b_samples[iphase - 1].w_float; outchan[j] += gain * (samp1 + frac * (samp2-samp1)); } } if(static_increment) { events[i].phase += events[i].increment; } else { events[i].phase += increment_vec[j]; } if( events[i].phase < 0.0 || events[i].phase >= b_frames) { events[i].status = INACTIVE; break; } } } } /* trigger responder and initial playback code */ for(i=0; i 0) { events[j].phase = 0.0; } else { events[j].phase = b_frames - 1; } insert_success = 1; new_insert = j; break; } } if(!insert_success){ // steal a note if necessary maxphase = 0; theft_candidate = 0; for(k = 0; k < overlap_max; k++) { if(events[k].phase > maxphase) { maxphase = events[k].phase; theft_candidate = k; } } // post("stealing note at slot %d", theft_candidate); new_insert = theft_candidate; events[new_insert].gain = gain; events[new_insert].increment = increment; if(increment > 0) { events[new_insert].phase = 0.0; } else { events[new_insert].phase = b_frames - 1; } insert_success = 1; } for(k=i; k 0){ // moving forward into sample if(iphase == flimit) { outchan[k] += b_samples[iphase].w_float * gain; } else { samp1 = b_samples[iphase].w_float; samp2 = b_samples[iphase + 1].w_float; outchan[k] += gain * (samp1 + frac * (samp2-samp1)); } } // moving backwards into sample else { if(iphase == 0.0) { outchan[k] += b_samples[iphase].w_float * gain; } else { samp2 = b_samples[iphase].w_float; samp1 = b_samples[iphase - 1].w_float; outchan[k] += gain * (samp1 + frac * (samp2-samp1)); } } /* advance phase */ if(static_increment) { increment = events[new_insert].increment; } else { increment = increment_vec[k]; } events[new_insert].phase += increment; /* note termination conditions */ if( events[new_insert].phase < 0.0 || events[new_insert].phase >= b_frames) { events[new_insert].status = INACTIVE; break; } } } } return (w+6); } float player_boundrand(float min, float max) { return min + (max-min) * ((float) (rand() % RAND_MAX)/ (float) RAND_MAX); } void player_dsp_free(t_player *x) { freebytes(x->events, x->overlap_max * sizeof(t_event)); freebytes(x->increment_vec, MAXIMUM_VECTOR * sizeof(t_float)); freebytes(x->trigger_vec, MAXIMUM_VECTOR * sizeof(t_float)); } void player_dsp(t_player *x, t_signal **sp) { player_setbuf(x, x->wavename); if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; if(!x->sr) { post("warning: zero sampling rate!"); x->sr = 44100; } } if(x->vs != sp[0]->s_n) { x->vs = sp[0]->s_n; player_init(x,1); } if(x->b_frames <= 0 && ! x->hosed) { post("empty buffer, external disabled until it a sound is loaded"); x->hosed = 1; } player_stop(x); // turn off all players to start if(x->hosed) dsp_add(player_perform_hosed1, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); else{ dsp_add(player_perform_mono_interpol, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } } pd-lyonpotpourri-3.0.1/poltocar~-help.pd000066400000000000000000000024021430526361000203530ustar00rootroot00000000000000#N canvas 600 60 697 441 12; #N canvas 91 32 719 454 basic-fft 0; #X obj 225 66 inlet~; #X obj 225 341 outlet~; #X obj 225 136 rfft~, f 6; #X obj 48 343 block~ 1024 8; #X obj 225 245 rifft~; #X obj 225 275 *~ 0; #X obj 507 169 *; #X msg 459 91 1 1024 8; #X obj 459 122 unpack f f f; #X obj 459 201 /; #X floatatom 459 233 12 0 0 0 - - -; #X text 550 231 rescale factor; #X obj 459 60 loadbang; #X text 28 195 Any processing would go here ->; #X text 44 321 sets FFT size and overlap; #X obj 225 308 lyonpotpourri/windowvec~; #X obj 225 98 lyonpotpourri/windowvec~; #X obj 225 171 lyonpotpourri/cartopol~; #X obj 225 215 lyonpotpourri/poltocar~; #X connect 0 0 16 0; #X connect 2 0 17 0; #X connect 2 1 17 1; #X connect 4 0 5 0; #X connect 5 0 15 0; #X connect 6 0 9 1; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 8 1 6 0; #X connect 8 2 6 1; #X connect 9 0 10 0; #X connect 10 0 5 1; #X connect 12 0 7 0; #X connect 15 0 1 0; #X connect 16 0 2 0; #X connect 17 0 18 0; #X connect 17 1 18 1; #X connect 18 0 4 0; #X connect 18 1 4 1; #X restore 52 150 pd basic-fft; #X obj 52 123 osc~ 440; #X obj 52 184 lpp-meters; #X obj 43 24 lpp-icon poltocar~; #X text 272 47 - converts from polar form to rfft~ complex format; #X connect 0 0 2 0; #X connect 0 0 2 1; #X connect 1 0 0 0; pd-lyonpotpourri-3.0.1/poltocar~.c000066400000000000000000000032541430526361000172520ustar00rootroot00000000000000#include "MSPd.h" static t_class *poltocar_class; /* Pd version of poltocar~ */ #define OBJECT_NAME "poltocar~" typedef struct _poltocar { t_object x_obj; t_float x_f; } t_poltocar; static void *poltocar_new(t_symbol *msg, int argc, t_atom *argv); static void poltocar_free(t_poltocar *x); static void poltocar_dsp(t_poltocar *x, t_signal **sp); void poltocar_tilde_setup(void) { poltocar_class = class_new(gensym("poltocar~"), (t_newmethod)poltocar_new, 0, sizeof(t_poltocar),0,A_GIMME,0); CLASS_MAINSIGNALIN(poltocar_class, t_poltocar, x_f); class_addmethod(poltocar_class, (t_method)poltocar_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *poltocar_new(t_symbol *msg, int argc, t_atom *argv) { t_poltocar *x = (t_poltocar *)pd_new(poltocar_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); return x; } t_int *poltocar_perform(t_int *w) { int i; t_float *mag_in = (t_float *) w[2]; t_float *phase_in = (t_float *) w[3]; t_float *real_out = (t_float *) w[4]; t_float *imag_out = (t_float *) w[5]; t_float real, imag; int n = (int) w[6]; // obj, func, 1 inlet int N2 = n/2; for(i = 0; i < N2 + 1; i++) { real = mag_in[i] * cos( phase_in[i] ); if(i == N2) { imag = 0; } else{ imag = -mag_in[i] * sin( phase_in[i] ); } real_out[i] = real; imag_out[i] = imag; } return (w + 7); } void poltocar_dsp(t_poltocar *x, t_signal **sp) { dsp_add(poltocar_perform,6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/power_of_two.c000066400000000000000000000004721430526361000177410ustar00rootroot00000000000000#include "fftease.h" int lpp_power_of_two(int test) { int limit = MAX_N; int compare = 1; // post("testing what we thing is an int:%d",test); do { if(test == compare) { // post("good power of 2 found!"); return 1; } compare *= 2; } while (compare <= limit); return 0; } pd-lyonpotpourri-3.0.1/pulser~-help.pd000066400000000000000000000023441430526361000200470ustar00rootroot00000000000000#N canvas 444 42 560 674 12; #X msg 77 328 harmonics \$1; #X floatatom 77 304 5 0 0 2 number_of_harmonics pulser-harmonic-count -; #X floatatom 46 221 5 0 0 2 freq pulser-frequency -; #X obj 232 261 osc~ 0.1; #X obj 232 283 *~ 0.4; #X obj 232 307 +~ 0.5; #X floatatom 232 241 5 0 0 0 - pulser-pw-speed -; #X text 301 306 <- pulsewidth; #X obj 226 478 hsl 128 15 0 1 0 0 pulser-pw-speed pulser-pw-speed-in pulsewidth-modulation-speed -2 -8 0 10 -83269 -1 -1 1270 1; #X text 251 395 args: initial frequency \, # of harmonics; #X obj 46 442 lpp-meters; #X obj 46 401 lyonpotpourri/pulser~ 74 12; #X obj 33 21 lpp-icon pulser~; #N canvas 658 263 456 220 init 0; #X obj 30 33 loadbang; #X msg 30 65 \; pulser-harmonic-count 12 \; pulser-pw-speed-in 0.1 \; pulser-frequency 74; #X connect 0 0 1 0; #X restore 223 544 pd init; #X text 49 128 [pulser~] synthesizes a pulsewave with variable pulsewidth \, created with additive synthesis. The pulse-width is controlled by input to the right inlet \, with values between 0-1., f 63; #X text 253 57 - band-limited pulse wave; #X connect 0 0 11 0; #X connect 1 0 0 0; #X connect 2 0 11 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 11 1; #X connect 6 0 3 0; #X connect 11 0 10 0; #X connect 11 0 10 1; pd-lyonpotpourri-3.0.1/pulser~.c000066400000000000000000000116071430526361000167420ustar00rootroot00000000000000#include "MSPd.h" #define FUNC_LEN (16384) #define FUNC_LEN_OVER2 (8192) #define MAX_COMPONENTS (256) #define OBJECT_NAME "pulser~" static t_class *pulser_class; typedef struct _pulser { t_object x_obj; float x_f; int components; float global_gain; float *wavetab; float *phases; float frequency; float pulsewidth; float si_fac; short mute; short connected[4]; float sr; } t_pulser; static void *pulser_new(t_symbol *s, int argc, t_atom *argv); static t_int *pulser_perform(t_int *w); static void pulser_dsp(t_pulser *x, t_signal **sp); static void pulser_mute(t_pulser *x, t_floatarg toggle); static void pulser_harmonics(t_pulser *x, t_floatarg c); //static void pulser_float(t_pulser *x, double f); static void pulser_free(t_pulser *x); void pulser_tilde_setup(void) { pulser_class = class_new(gensym("pulser~"), (t_newmethod)pulser_new, (t_method)pulser_free,sizeof(t_pulser), 0,A_GIMME,0); CLASS_MAINSIGNALIN(pulser_class, t_pulser, x_f); class_addmethod(pulser_class,(t_method)pulser_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(pulser_class,(t_method)pulser_mute,gensym("mute"),A_FLOAT,0); class_addmethod(pulser_class,(t_method)pulser_harmonics,gensym("harmonics"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void pulser_mute(t_pulser *x, t_floatarg toggle) { x->mute = toggle; } void pulser_harmonics(t_pulser *x, t_floatarg c) { if(c < 2 || c > MAX_COMPONENTS) { pd_error(0, "harmonic count out of bounds"); return; } x->components = c; x->global_gain = 1.0 / (float) x->components ; // reset phases too? } void pulser_free(t_pulser *x) { /* x->phases = (float *) getbytes(MAX_COMPONENTS * sizeof(float)); x->wavetab = (float *) getbytes(FUNC_LEN * sizeof(float)); */ freebytes(x->phases,MAX_COMPONENTS * sizeof(float)); freebytes(x->wavetab,FUNC_LEN * sizeof(float)); } void *pulser_new(t_symbol *s, int argc, t_atom *argv) { int i; t_pulser *x = (t_pulser *)pd_new(pulser_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->sr = sys_getsr(); if(!x->sr) { pd_error(0, "zero sampling rate, setting to 44100"); x->sr = 44100; } x->mute = 0; x->components = 8; x->frequency = 440.0; x->pulsewidth = 0.5; if( argc > 0 ) x->frequency = atom_getfloatarg(0,argc,argv); if( argc > 1 ) x->components = atom_getfloatarg(1,argc,argv); x->si_fac = ((float)FUNC_LEN/x->sr) ; if(x->components <= 0 || x->components > MAX_COMPONENTS) { pd_error(0, "%d is an illegal number of components, setting to 8",x->components ); x->components = 8; } x->global_gain = 1.0 / (float) x->components ; x->phases = (float *) getbytes(MAX_COMPONENTS * sizeof(float)); x->wavetab = (float *) getbytes(FUNC_LEN * sizeof(float)); for(i = 0 ; i < FUNC_LEN; i++) { x->wavetab[i] = sin(TWOPI * ((float)i/(float) FUNC_LEN)) ; } return (x); } t_int *pulser_perform(t_int *w) { int i,j; float gain; float incr; float outsamp; int lookdex; t_pulser *x = (t_pulser *) (w[1]); t_float *frequency_vec = (t_float *)(w[2]); t_float *pulsewidth_vec = (t_float *)(w[3]); t_float *out = (t_float *)(w[4]); int n = (int) w[5]; float *wavetab = x->wavetab; float si_fac = x->si_fac; float *phases = x->phases; int components = x->components; float global_gain = x->global_gain; float pulsewidth = x->pulsewidth; float frequency = x->frequency; short *connected = x->connected; if( x->mute ) { while( n-- ) { *out++ = 0.0; } return (w+6); } incr = frequency * si_fac; while (n--) { if( connected[1] ) { pulsewidth = *pulsewidth_vec++; // post("pw %f",pulsewidth); } if( pulsewidth < 0 ) pulsewidth = 0; if( pulsewidth > 1 ) pulsewidth = 1; if( connected[0] ) { incr = *frequency_vec++ * si_fac ; } outsamp = 0; for( i = 0, j = 1; i < components; i++, j++ ) { lookdex = (float)FUNC_LEN_OVER2 * pulsewidth * (float)j; while( lookdex >= FUNC_LEN ) { lookdex -= FUNC_LEN; } gain = wavetab[ lookdex ] ; phases[i] += incr * (float) j; while( phases[i] < 0.0 ) { phases[i] += FUNC_LEN; } while( phases[i] >= FUNC_LEN ) { phases[i] -= FUNC_LEN; } outsamp += gain * wavetab[ (int) phases[i] ]; } *out++ = outsamp * global_gain; } // x->bendphs = bendphs; return (w+6); } void pulser_dsp(t_pulser *x, t_signal **sp) { long i; if(!sp[0]->s_sr) { pd_error(0, "zero sampling rate"); return; } if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; x->si_fac = ((float)FUNC_LEN/x->sr); for(i=0;iphases[i] = 0.0; } } for( i = 0; i < 2; i++) { x->connected[i] = 1; } dsp_add(pulser_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/quadpan~-help.pd000066400000000000000000000065621430526361000201740ustar00rootroot00000000000000#N canvas 600 60 646 534 12; #X obj 51 372 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 22 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 50 329 pd meter; #X obj 117 373 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 22 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 116 329 pd meter; #X obj 184 373 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 22 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 183 329 pd meter; #X obj 251 374 vu 15 120 empty empty -1 -8 0 10 -66577 -1 1 0; #N canvas 0 22 450 300 meter 0; #X obj 110 164 snapshot~; #X obj 126 114 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X floatatom 110 187 5 0 0 0 - - -; #X obj 110 91 env~ 1024; #X obj 126 140 metro 100; #X obj 109 211 - 100; #X obj 231 46 loadbang; #X msg 231 71 1; #X obj 109 246 outlet; #X obj 110 51 inlet~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 5 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 8 0; #X connect 6 0 7 0; #X connect 7 0 1 0; #X connect 9 0 3 0; #X restore 250 329 pd meter; #X obj 153 185 hsl 128 15 0 1 0 0 empty empty X-coordinate -2 -8 0 10 -262144 -1 -1 3700 1; #X obj 253 227 hsl 128 15 0 1 0 0 empty empty Y-coordinate -2 -8 0 10 -262144 -1 -1 7200 1; #X obj 50 210 osc~ 440; #X text 339 263 Spatial positioning of output channels; #X text 339 281 is as follows:; #X text 504 317 3; #X text 436 317 4; #X text 506 369 1; #X text 435 369 2; #X obj 50 262 lyonpotpourri/quadpan~, f 29; #X obj 28 19 lpp-icon quadpan~; #X msg 365 471 \; pd dsp \$1; #X obj 365 435 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X text 385 439 turn DACs on; #X text 244 60 - X/Y panning within a plane for joystick-style control ; #X text 48 117 [quadpan~] takes in X/Y cordinates (as signal or float) to position an input signal within a quadraphonic plane.; #X connect 1 0 0 0; #X connect 3 0 2 0; #X connect 5 0 4 0; #X connect 7 0 6 0; #X connect 8 0 17 1; #X connect 9 0 17 2; #X connect 10 0 17 0; #X connect 17 0 1 0; #X connect 17 1 3 0; #X connect 17 2 5 0; #X connect 17 3 7 0; #X connect 20 0 19 0; pd-lyonpotpourri-3.0.1/quadpan~.c000066400000000000000000000070571430526361000170650ustar00rootroot00000000000000#include "MSPd.h" #define OBJECT_NAME "quadpan~" /* Front *out1 *out3 *out2 *out4 Back */ static t_class *quadpan_class; typedef struct _quadpan { t_object x_obj; t_float x_f; t_float *in; t_float *Xin; t_float *Yin; } t_quadpan; static void *quadpan_new(t_symbol *s, int argc, t_atom *argv); //static t_int *offset_perform(t_int *w); static t_int *quadpan_perform(t_int *w); static void quadpan_dsp(t_quadpan *x, t_signal **sp); //static void quadpan_showstate( t_quadpan *x ); static void quadpan_free(t_quadpan *x); void quadpan_tilde_setup(void) { quadpan_class = class_new(gensym("quadpan~"), (t_newmethod)quadpan_new, (t_method)quadpan_free,sizeof(t_quadpan),0,A_GIMME,0); CLASS_MAINSIGNALIN(quadpan_class, t_quadpan, x_f); class_addmethod(quadpan_class, (t_method)quadpan_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *quadpan_new(t_symbol *s, int argc, t_atom *argv) { int i; t_quadpan *x = (t_quadpan *)pd_new(quadpan_class); for(i = 0; i < 2; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } for(i = 0; i < 4; i++) { outlet_new(&x->x_obj, gensym("signal")); } x->in = (t_float *) getbytes(8192 * sizeof(t_float)); x->Xin = (t_float *) getbytes(8192 * sizeof(t_float)); x->Yin = (t_float *) getbytes(8192 * sizeof(t_float)); // x->pi_over_two = 1.5707963267948965; // x->twopi = 6.283185307179586; return x; } void quadpan_free(t_quadpan *x) { freebytes(x->in,8192 * sizeof(t_float)); freebytes(x->Xin,8192 * sizeof(t_float)); freebytes(x->Yin,8192 * sizeof(t_float)); } t_int *quadpan_perform(t_int *w) { float gain1, gain2, gain3, gain4; float xval, yval; float xsquared, ysquared, ix, iy, ixsquared, iysquared; int i; t_quadpan *x = (t_quadpan *) (w[1]); float *in = x->in; float *Xin = x->Xin; float *Yin = x->Yin; float *in_loc = (t_float *)(w[2]); float *Xin_loc = (t_float *)(w[3]); float *Yin_loc = (t_float *)(w[4]); float *out1 = (t_float *)(w[5]); float *out2 = (t_float *)(w[6]); float *out3 = (t_float *)(w[7]); float *out4 = (t_float *)(w[8]); int n = (int)(w[9]); // copy buffers to avoid writeovers in shared memory for(i = 0; i < n; i++) { in[i] = in_loc[i]; Xin[i] = Xin_loc[i]; Yin[i] = Yin_loc[i]; } while( n-- ) { xval = *Xin++; yval = *Yin++; if( xval < 0.0 ) xval = 0.0; if( yval > 1.0 ) yval = 1.0; if( yval < 0.0 ) yval = 0.0; if( yval > 1.0 ) yval = 1.0; xsquared = xval * xval; ysquared = yval * yval; ix = 1.0 - xval; iy = 1.0 - yval; ixsquared = ix * ix; iysquared = iy * iy; gain1 = sqrt( xsquared + ysquared ); if( gain1 > 1.0 ) gain1 = 1.0; gain1 = 1.0 - gain1; /* Left Rear Gain */ gain2 = sqrt( ixsquared + ysquared ); if( gain2 > 1.0 ) gain2 = 1.0; gain2 = 1.0 - gain2; /* Right Rear Gain */ gain3 = sqrt( xsquared + iysquared ); if( gain3 > 1.0 ) gain3 = 1.0; gain3 = 1.0 - gain3; /* Left Front Gain */ gain4 = sqrt( ixsquared + iysquared ) ; if( gain4 > 1.0 ) gain4 = 1.0; gain4 = 1.0 - gain4; /* Right Front Gain*/ *out1++ = *in * gain3; *out2++ = *in * gain4; *out3++ = *in * gain2; *out4++ = *in++ * gain1; } return (w+10); } void quadpan_dsp(t_quadpan *x, t_signal **sp) { if( ! sp[0]->s_sr ) { return; } dsp_add(quadpan_perform, 9, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, sp[4]->s_vec, sp[5]->s_vec, sp[6]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/rotapan~-help.pd000066400000000000000000000016751430526361000202070ustar00rootroot00000000000000#N canvas 600 60 512 761 12; #X obj 37 190 osc~ 400; #X obj 70 213 osc~ 500; #X obj 202 335 phasor~ 0.08; #X obj 136 257 osc~ 430; #X obj 169 280 osc~ 479; #X obj 103 235 osc~ 300; #X obj 37 372 lyonpotpourri/rotapan~ 5; #X obj 37 476 lyonpotpourri/shoehorn~ 5 2; #X obj 37 559 lpp-meters; #X floatatom 202 309 5 0 0 1 panning_speed - -; #X text 28 127 [rotapan~] rotates an array of channels preserving spatial relations. The rightmost inlet controls the phase of the rotation \, in the range (0-1). The argument determines the length of the channel array.; #X text 222 375 arg: number of input signals; #X text 251 50 - multichannel rotation; #X obj 30 23 lpp-icon rotapan~; #X connect 0 0 6 0; #X connect 1 0 6 1; #X connect 2 0 6 5; #X connect 3 0 6 3; #X connect 4 0 6 4; #X connect 5 0 6 2; #X connect 6 0 7 0; #X connect 6 1 7 1; #X connect 6 2 7 2; #X connect 6 3 7 3; #X connect 6 4 7 4; #X connect 7 0 8 0; #X connect 7 1 8 1; #X connect 9 0 2 0; pd-lyonpotpourri-3.0.1/rotapan~.c000066400000000000000000000102601430526361000170660ustar00rootroot00000000000000#include "MSPd.h" static t_class *rotapan_class; #define OBJECT_NAME "rotapan~" /* Pd version of rotapan~ */ typedef struct _rotapan { t_object x_obj; t_float x_f; t_double sr; long rchans; double pio2; t_float *inarr; t_float **ins; // array of input signal vectors t_float **outs; // array of output signal vectors } t_rotapan; static void *rotapan_new(t_symbol *s, int argc, t_atom *argv); static void rotapan_free(t_rotapan *x); //static void rotapan_assist(t_rotapan *x, void *b, long msg, long arg, char *dst); //static void rotapan_version(t_rotapan *x); static void rotapan_dsp(t_rotapan *x, t_signal **sp); static t_int *rotapan_perform(t_int *w); void rotapan_tilde_setup(void) { rotapan_class = class_new(gensym("rotapan~"), (t_newmethod)rotapan_new, (t_method)rotapan_free, sizeof(t_rotapan),0,A_GIMME,0); CLASS_MAINSIGNALIN(rotapan_class, t_rotapan, x_f); class_addmethod(rotapan_class, (t_method)rotapan_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *rotapan_new(t_symbol *s, int argc, t_atom *argv) { int i; t_rotapan *x = (t_rotapan *)pd_new(rotapan_class); x->rchans = (long) atom_getfloatarg(0,argc,argv); if(x->rchans < 2){ x->rchans = 2; } /* allocate in chans plus 1 for controlling the pan */ for(i = 0; i < x->rchans; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } for(i=0; i < x->rchans; i++) { outlet_new(&x->x_obj, gensym("signal")); } x->pio2 = PI / 2.0; x->inarr = (t_float *) getbytes((x->rchans + 1) * sizeof(t_float)); // for better compatibility with Max 6 x->ins = (t_float **) getbytes((x->rchans + 1) * sizeof(t_float *)); x->outs = (t_float **) getbytes(x->rchans * sizeof(t_float *)); for(i = 0; i < x->rchans + 1; i++) { x->ins[i] = (t_float *) getbytes(8192 * sizeof(t_float)); } return x; } void rotapan_free(t_rotapan *x) { int i; for(i = 0; i < x->rchans + 1; i++) { freebytes(x->ins[i],8192 * sizeof(t_float)); } freebytes(x->ins,(x->rchans + 1) * sizeof(t_float *)); freebytes(x->outs,x->rchans * sizeof(t_float *)); freebytes(x->inarr, (x->rchans + 1) * sizeof(t_float)); } // try copying all vectors first!!! t_int *rotapan_perform(t_int *w) { t_rotapan *x = (t_rotapan*) w[1]; t_float *invec; long rchans = x->rchans; t_double pio2 = x->pio2; t_float *inarr = x->inarr; t_float **ins = x->ins; t_float **outs = x->outs; double amp1, amp2; double panloc; double scaledIndex; int chan,i,j; int offset; int n = (int) w[(rchans * 2) + 3]; // copy input vectors for(i = 0; i < rchans + 1; i++) { invec = (t_float *) w[2 + i]; for(j = 0; j < n; j++) { ins[i][j] = invec[j]; } } // assign output vector pointers for(i = 0; i < rchans; i++) { outs[i] = (t_float *) w[3 + rchans + i]; } for( j = 0; j < n; j++) { for(chan = 0; chan < rchans; chan++) { inarr[chan] = ins[chan][j]; outs[chan][j] = 0; } scaledIndex = ins[rchans][j] * (double) rchans; if(scaledIndex < 0.0 || scaledIndex > rchans) scaledIndex = 0.0; offset = (int) floor(scaledIndex) % rchans; panloc = (scaledIndex - offset) * pio2; amp1 = cos( panloc ); amp2 = sin( panloc ); for(chan = 0; chan < rchans; chan++) { outs[(chan+offset)%rchans][j] += amp1 * inarr[chan]; outs[(chan+offset+1)%rchans][j] += amp2 * inarr[chan]; } } return (w + (rchans * 2) + 4); } void rotapan_dsp(t_rotapan *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count = (x->rchans * 2) + 3; // input/output chans + object + panner + vectorsize sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } dsp_addv(rotapan_perform, pointer_count, (t_int *)sigvec); freebytes(sigvec,sizeof(t_int) * 1); } pd-lyonpotpourri-3.0.1/rtrig~-help.pd000066400000000000000000002472261430526361000176760ustar00rootroot00000000000000#N canvas 600 60 624 568 12; #X floatatom 32 157 10 0 0 0 - rtrig-odds -; #X msg 32 182 odds \$1; #N canvas 600 60 466 316 initialize-odds 0; #X msg 84 148 48000; #X floatatom 64 205 5 0 0 0 - - -; #X obj 84 181 t b f; #X msg 29 148 3; #X obj 33 16 loadbang; #X obj 64 254 s rtrig-odds; #X obj 84 94 samplerate~; #X obj 33 68 t b b b; #X msg 84 121 set \$1; #X obj 64 229 /; #X connect 0 0 2 0; #X connect 1 0 9 0; #X connect 2 0 1 0; #X connect 2 1 9 1; #X connect 3 0 1 0; #X connect 4 0 7 0; #X connect 6 0 8 0; #X connect 7 0 0 0; #X connect 7 1 3 0; #X connect 7 2 6 0; #X connect 8 0 0 0; #X connect 9 0 5 0; #X restore 197 414 pd initialize-odds; #N canvas 0 22 450 300 (subpatch) 0; #X array rtrig_buffa 8000 float 3; #A 0 -0.389445 0.0848178 -0.405317 0.320336 -0.870872 0.643596 -0.0397183 0.0116608 0.747786 0.0996299 -0.72427 -0.792591 0.708365 -0.275033 0.165597 0.133642 -0.50684 0.304663 0.585979 -0.940882 -0.67406 0.762302 0.0717425 0.0719367 -0.777311 -0.726623 -0.508433 -0.450989 -0.518526 0.789396 0.311586 0.888665 -0.286268 -0.664511 -0.570235 0.0238496 0.343004 0.364315 -0.681946 -0.880082 -0.33677 0.124767 -0.115311 -0.98198 0.253508 -0.905295 -0.262901 0.0887744 -0.84384 0.0933903 0.859883 -0.348767 -0.808921 -0.923058 -0.930562 -0.320812 0.130924 -0.0506327 -0.546461 -0.692207 -0.770599 0.467837 -0.0123623 -0.409673 -0.953657 0.186008 0.121312 0.914482 -0.843146 -0.912047 -0.91837 0.929909 -0.897627 0.600462 -0.474099 0.73413 0.827898 -0.433706 -0.941038 -0.129805 0.940287 -0.178012 0.67799 -0.415607 -0.0600579 -0.730215 -0.5215 0.747878 -0.688233 0.630437 -0.170654 0.355259 0.0885918 -0.514622 -0.793555 0.0710004 0.948748 -0.195279 0.502865 -0.18064 -0.310712 -0.876208 0.739803 -0.420181 -0.0500524 -0.771629 0.457289 -0.269764 0.187831 0.013723 -0.836414 -0.0452809 -0.539312 -0.395225 -0.1129 0.544854 0.770654 0.664022 -0.117747 0.358158 0.585701 0.00153497 -0.0433921 -0.929084 0.775998 -0.359395 -0.0496604 -0.117663 -0.893938 -0.70108 -0.530643 -0.586716 0.164526 0.767159 0.029037 0.857725 -0.735566 -0.502401 -0.84544 -0.8269 -0.0196345 -0.63006 -0.855983 0.793799 0.914782 -0.449985 0.223936 0.368625 0.92322 0.738007 0.816129 -0.500701 0.065011 0.569283 -0.792021 -0.477177 0.0760485 0.763967 0.352599 0.446761 0.629286 -0.282007 -0.28768 0.362236 0.766824 0.563745 0.373515 0.922331 -0.148359 -0.876584 -0.270391 0.201379 -0.094972 0.344745 1.08418e-05 -0.902043 0.0266382 -0.239923 -0.379005 0.716827 -0.321527 0.811117 -0.918472 -0.890803 -0.378197 -0.843776 0.689161 0.0168323 0.534688 0.846448 0.491452 -0.580175 -0.662384 0.210915 0.0936022 -0.38943 -0.171036 0.765999 -0.504365 -0.185269 0.690978 -0.382362 0.564533 0.219373 -0.322998 -0.000681583 0.843675 -0.913549 -0.86961 0.33157 -0.217666 -0.497442 0.0152422 0.30485 0.7898 0.0756571 -0.796645 0.0559931 0.041314 0.771759 -0.906636 -0.191455 0.441353 0.0445808 0.298914 -0.0285074 -0.465037 -0.281407 -0.592832 -0.124931 0.685081 -0.610243 0.815427 0.598253 0.126571 0.392403 0.837197 -0.828649 0.834059 -0.671226 0.436769 -0.451093 0.515029 0.166579 -0.660203 0.475596 -0.894897 -0.366259 0.560915 0.130137 0.337827 0.195584 0.0505083 -0.626175 0.273058 0.00266593 -0.665674 0.0315042 0.603576 -0.475688 -0.343961 0.0554444 -0.107373 -0.38666 -0.689802 -0.0853154 0.540704 0.0371763 -0.514608 0.43984 -0.82402 0.253489 0.687877 -0.6466 -0.14564 0.623035 0.536622 0.733186 0.00648664 0.499516 0.0202981 -0.0401988 -0.837859 0.331431 0.378461 -0.599381 0.0537352 0.642488 -0.427963 -0.40234 0.42075 -0.303772 0.721052 -0.178496 0.351153 0.45235 0.604902 0.824257 0.291719 0.269702 0.739682 -0.799176 0.398703 0.506219 0.317552 -0.175465 -0.544025 0.653584 -0.687637 0.518747 0.381469 -0.0168829 -0.637154 0.0955009 -0.518842 -0.387699 0.710541 -0.245812 -0.15296 -0.254613 0.479048 -0.334729 -0.247238 0.866677 -0.747932 -0.48994 -0.106224 0.133457 0.187148 -0.550151 -0.314949 0.407511 0.754578 -0.217387 0.106417 0.540932 -0.262678 -0.696977 -0.846136 0.0521393 0.263198 -0.696066 0.74435 0.727708 0.274851 -0.669724 0.647338 0.00842616 -0.0791922 0.30654 -0.286789 0.382952 -0.172462 -0.545952 -0.674442 0.19242 0.678894 -0.559988 -0.093249 0.414261 0.654325 0.703662 0.725242 -0.195191 -0.680758 -0.571821 -0.72309 0.787562 -0.663041 -0.360569 0.49983 0.332825 -0.801866 0.00374661 -0.124214 0.116948 -0.76379 -0.0691271 0.34358 -0.0219562 0.348563 -0.76463 -0.290841 0.361509 0.607506 -0.0760733 -0.174218 0.0748889 -0.0387296 -0.0872079 0.00695561 -0.429953 -0.615341 0.770004 0.232843 -0.45786 -0.384079 0.597354 0.524553 -0.0350156 -0.51497 -0.788767 -0.0964587 -0.44234 0.574373 0.323927 -0.011185 0.722558 -0.356786 0.679473 -0.261253 -0.258158 -0.828935 -0.149021 -0.111457 -0.717612 0.620243 0.307696 0.228035 -0.560704 0.695023 -0.458739 -0.168207 -0.689124 0.577695 -0.62215 0.205766 0.641315 -0.3466 0.617901 -0.340319 0.191282 0.529461 -0.189769 0.619613 -0.782467 0.30176 -0.24547 -0.142813 0.000195983 -0.266571 0.423799 -0.0610001 -0.491116 0.339838 0.319996 0.301871 0.0753796 -0.561062 -0.120279 -0.43753 0.569349 -0.316896 0.311236 0.686328 -0.393436 -0.0287522 -0.436075 -0.756372 0.778803 -0.808096 0.249063 -0.710018 0.186046 -0.482879 -0.149746 0.807495 0.721991 -0.573241 -0.548627 -0.042418 0.451584 -0.524928 -0.290553 0.356128 -0.523105 -0.570429 0.539779 -0.633864 0.619615 -0.0803623 -0.416835 0.16852 0.741772 0.408984 -0.777143 0.553888 0.427783 0.0301912 -0.669862 -0.73285 -0.620277 -0.374147 0.2094 0.261818 0.357047 0.128633 -0.551011 0.343545 0.554941 0.554601 0.507087 0.740445 -0.397125 0.450519 0.664224 0.433585 -0.167423 0.304059 0.413611 0.409406 0.516914 -0.0581682 0.309689 -0.558072 0.591162 -0.249713 -0.146838 0.733066 0.144716 -0.117004 -0.0123679 0.491823 0.698234 0.674614 -0.419229 0.180722 -0.5061 -0.538231 0.312616 0.705389 0.172988 -0.223088 0.769834 -0.550866 -0.112787 -0.614037 0.53148 -0.354322 0.751875 0.267444 -0.14944 0.234614 -0.608232 0.668958 -0.265333 -0.330339 0.717908 -0.499941 -0.739732 -0.708085 0.37591 0.284225 -0.380325 -0.0339315 -0.704426 0.496612 0.645454 -0.0673638 -0.399514 -0.507346 -0.66353 0.146212 -0.61715 -0.318843 -0.224242 -0.245439 0.467491 -0.542117 -0.160293 0.628045 -0.729637 -0.0986812 0.328873 0.510179 0.0150874 0.0767034 0.345129 -0.108233 0.129695 -0.206235 -0.660588 0.636141 -0.462867 0.390307 -0.473341 -0.433542 -0.641417 0.459473 -0.651996 0.355144 -0.532943 0.537516 -0.212018 0.114569 -0.449153 -0.383626 0.182333 0.484789 0.552133 0.576757 0.633456 -0.305334 0.304421 -0.244192 0.161022 -0.269488 0.382508 -0.667126 -0.126692 0.739179 -0.572784 0.758633 0.344587 -0.2871 0.736889 -0.595496 -0.59627 -0.466502 0.245734 0.324072 -0.487434 0.708835 -0.51995 -0.163393 0.169009 0.451292 0.440157 0.493236 -0.0768178 0.531823 -0.606103 -0.389725 0.275169 -0.547556 -0.630612 0.350385 -0.72683 -0.48736 0.118918 -0.458901 0.729099 -0.225533 0.693843 -0.516046 -0.514172 -0.680412 -0.655547 -0.399814 0.474479 0.0938729 -0.160532 -0.135354 0.223279 0.295247 0.00432402 -0.694204 0.570467 -0.500039 0.321138 0.162359 0.0541183 0.352747 -0.707012 -0.391708 -0.72354 -0.637175 -0.271142 0.675907 0.592858 -0.114153 0.367668 0.246424 0.700727 0.676863 -0.0816897 0.690615 0.101447 0.605814 -0.0620762 0.141552 -0.577297 -0.0285795 0.60771 0.356501 0.614231 -0.0574984 -0.102314 -0.730915 -0.406547 0.150145 0.528372 -0.439157 0.089732 0.379612 -0.541055 0.489845 -0.399076 0.395678 0.0290978 -0.220359 -0.501974 -0.599174 0.732417 -0.456359 0.648803 -0.448778 0.67915 0.000797343 -0.543776 0.242407 -0.512672 0.23874 0.463767 -0.569908 0.476939 0.0689477 -0.131858 0.432579 -0.452737 0.0317086 0.309546 -0.723246 -0.602728 -0.425954 -0.428223 -0.440113 0.604481 0.718234 0.184306 0.549961 0.448803 -0.323661 0.361515 -0.39975 -0.615575 -0.00317173 -0.0670155 -0.0156648 0.546289 0.538817 -0.679477 -0.562483 -0.519508 0.595026 0.335886 0.166864 0.383592 0.260661 0.105355 -0.386459 -0.681056 0.437465 -0.15389 -0.30093 -0.318054 -0.403629 -0.491621 -0.220312 0.523744 0.281574 0.0214376 -0.625535 -0.279535 -0.60382 0.135084 0.505431 0.333526 -0.273441 -0.6181 -0.365952 0.0886432 -0.468436 -0.0646756 -0.66764 -0.106954 0.44633 0.242506 -0.497159 -0.214033 0.694095 0.477246 -0.272864 -0.442065 -0.604542 -0.241399 -0.186996 -0.281472 0.475994 -0.568743 -0.019305 -0.0277563 0.586943 -0.418725 0.693268 -0.519897 -0.561288 0.185336 -0.691431 0.297192 -0.215743 -0.222572 0.523427 -0.156325 0.00225585 0.118014 -0.405273 0.701352 0.479254 -0.0869613 0.534679 -0.421347 -0.259772 0.182673 0.0813539 0.589331 0.0840031 0.113196 -0.494237 -0.66291 0.213395 0.297203 0.562221 -0.336299 0.167518 -0.693184 -0.261686 -0.123969 0.27488 0.407894 0.328047 0.356255 -0.230084 0.464886 0.388365 0.318254 0.634003 0.141803 -0.0894443 0.495221 -0.0452063 0.478524 0.640362 0.605204 0.0163469 -0.149824 0.022847 -0.0457508 -0.0268516 -0.409283 0.0518661 -0.242392 -0.318234 0.2507 0.522657 0.271173 0.393487 -0.38422 0.265961 -0.327438 -0.400234 -0.669362 -0.601701 0.158202 0.677754 -0.544731 -0.165198 0.61986 0.184119 0.264694 -0.0165332 0.679996 -0.456905 0.272909 0.0781107 -0.434284 -0.102213 0.0727763 0.298612 -0.578112 -0.599622 -0.330251 -0.0681191 -0.589478 -0.294739 0.259464 0.275821 -0.286063 -0.156587 -0.454541 0.396382 0.414226 0.657461 -0.372932 -0.643225 -0.629094 -0.610389 0.27861 -0.565034 -0.0931174 0.180182 -0.618517 -0.465728 -0.113692 -0.123909 0.417805 0.437845 0.0743687 0.540919 0.065496 0.269853 0.660782 0.0263215 0.402934 0.394495 -0.50383 -0.278817 -0.102403 0.212342 0.0432586 -0.148751 -0.475473 -0.307261 -0.448252 -0.16625 -0.184357 0.212113 0.346793 -0.372998 -0.394549 -0.271727 0.0470288 -0.596505 0.437533 -0.371421 -0.520764 0.221712 0.644125 0.5662 0.23693 0.386219 0.412239 0.657826 -0.0486824 -0.550795 0.517541 -0.0251931 -0.174361 0.518461 0.0829759 -0.61802 0.556599 0.356874 -0.0428741 0.376133 -0.0551317 0.296886 -0.18638 -0.655779 0.0499294 -0.352352 -0.454727 -0.0887634 0.179186 0.63555 -0.339029 -0.0383418 -0.562736 -0.110287 -0.608691 -0.623856 -0.426421 0.574479 0.358626 -0.465557 0.305349 0.616617 0.116562 -0.104239 0.220431 0.239427 0.38057 -0.512093 0.591362 0.00514468 -0.0735631 -0.64767 0.399872 -0.149544 -0.456707 -0.537825 -0.499181 0.395242 -0.498883 0.518287 -0.508366 0.0427815 -0.0514711 0.245889 -0.260454; #A 1000 -0.481394 0.340584 -0.294258 0.205896 -0.390895 0.479293 0.222633 -0.575436 -0.112327 0.580565 0.0274228 0.512197 -0.303358 0.380163 -0.425468 -0.476215 0.0771913 -0.152998 0.0943102 -0.208418 0.254188 0.207391 0.567787 -0.338331 0.210506 0.183493 -0.492714 -0.235373 0.372081 0.216132 0.210278 0.365871 -0.289804 0.615583 0.423704 0.329488 -0.11851 0.0494473 -0.476317 0.204535 0.155734 -0.581877 0.247009 0.542455 -0.343754 -0.304324 0.0021288 0.548288 0.52001 0.109521 -0.420045 -0.42297 -0.606702 0.424496 0.149122 0.182558 0.0411581 -0.247802 -0.0286644 0.167876 0.452674 -0.55763 -0.399998 0.0459332 -0.219543 0.00640354 0.463501 -0.506507 -0.100661 -0.365677 -0.587323 0.386454 0.408765 0.509008 0.438695 0.162302 -0.403898 0.449587 -0.132401 0.464041 0.0422554 -0.158703 -0.0772458 -0.110825 0.231452 0.131823 -0.44582 -0.503469 -0.456176 0.182197 -0.118108 -0.0809936 0.415902 0.366498 -0.591375 0.0488151 0.316737 -0.452304 0.0519364 -0.265682 -0.513445 -0.233666 0.521063 0.298521 -0.30649 0.146227 0.493427 0.457316 0.248998 -0.257241 -0.45536 -0.0734747 -0.12634 -0.557097 -0.55139 -0.368157 -0.542574 0.490466 0.0528724 -0.215559 -0.386687 -0.319117 -0.23763 -0.501823 0.385647 -0.508405 0.57121 0.355547 -0.554728 0.213633 -0.59666 0.545308 -0.311196 -0.264225 -0.187431 0.25025 -0.469146 -0.327086 0.30872 0.0351061 -0.108603 -0.329935 0.59055 -0.446258 -0.0322066 0.495143 0.190829 0.178215 -0.0358376 0.190497 0.438151 -0.50161 -0.108127 0.158312 0.10567 0.55548 0.478554 -0.48928 0.377991 -0.247654 0.183514 0.531028 -0.0863592 0.255308 0.297016 0.0667207 0.388737 0.532999 0.161502 0.353832 -0.211507 -0.0367989 0.466483 -0.172259 -0.278554 -0.0727424 0.28051 -0.257153 0.507579 0.45147 -0.261201 0.365815 -0.426147 -0.454138 0.04237 -0.131285 0.194838 -0.0767107 -0.374857 -0.577959 -0.185817 -0.547094 -0.514882 0.289939 0.543536 -0.356664 -0.0608897 0.0778535 0.473045 0.247544 -0.534014 -0.13783 0.0141082 0.0751803 0.291382 -0.164643 -0.305404 0.424779 -0.39801 -0.0381565 0.0209905 -0.561482 0.385034 -0.247374 -0.113608 -0.383569 -0.252299 -0.503925 0.517861 0.432097 0.304158 -0.556474 -0.192347 -0.560583 0.28055 0.452191 0.314695 -0.556908 -0.360963 0.284768 -0.449867 -0.296255 0.0703182 -0.527686 -0.305027 0.214123 0.0884525 0.486992 -0.350563 0.460484 0.245985 0.313712 -0.474073 -0.366184 -0.0334814 -0.542087 0.216358 0.564279 -0.143975 -0.315847 0.388811 0.166752 0.270992 -0.219902 0.0880306 -0.305351 -0.382414 -0.359635 -0.551645 0.344233 0.360134 0.0335712 0.551205 0.331163 -0.105112 0.383126 -0.110355 0.23234 0.537363 0.260023 -0.0898664 -0.516009 -0.143644 0.00943041 -0.229778 -0.0110407 0.0548725 0.522579 -0.527021 -0.195124 0.0362389 -0.0901815 0.290433 -0.419671 -0.332392 -0.501643 0.40048 0.201926 0.341534 -0.0692214 0.399567 -0.373512 -0.358666 -0.168756 -0.494288 0.11188 0.343866 0.362664 0.474363 -0.00888103 0.0412746 -0.0422853 -0.335377 0.327072 -0.435201 0.53764 0.341715 -0.482441 -0.0989903 -0.52741 -0.0314053 0.46831 -0.0231997 -0.319009 -0.433305 0.208983 -0.262563 -0.0617002 0.505265 -0.162197 -0.40797 -0.0444948 -0.0544915 0.260257 -0.410802 0.1545 0.408199 0.458772 0.531661 -0.482478 0.230609 0.461376 0.401296 0.33558 0.348771 0.155586 0.435372 0.00358374 -0.244937 -0.513175 -0.102917 -0.381558 -0.504844 0.0227154 0.479189 -0.370778 -0.212267 0.217777 -0.535285 0.175909 0.177327 -0.271941 0.131026 -0.481949 0.501967 -0.404882 0.00790119 0.363505 0.491374 0.527104 -0.373917 0.119418 0.183183 0.38677 0.0589663 -0.063092 0.0637163 -0.447634 0.222386 -0.129768 -0.143264 0.00755905 0.411505 -0.244574 0.291324 0.400503 0.141581 0.347927 0.275757 0.0339693 0.0452785 0.417438 0.279857 -0.14295 0.260759 -0.493034 0.0503881 0.498892 -0.358326 -0.142993 0.364913 -0.476697 0.0531751 0.0281047 0.227266 -0.345442 -0.315956 -0.473799 0.223336 0.131148 0.0108333 0.44785 0.253874 0.119869 -0.335476 -0.186694 0.212884 0.233453 -0.23111 0.273543 0.393267 0.0594595 0.484688 -0.20118 -0.491402 0.209655 0.499056 -0.299271 -0.138543 0.38998 0.474583 0.17876 -0.451108 -0.138289 -0.118397 0.388621 0.264202 0.26132 -0.094014 -0.178092 0.057222 0.260418 -0.227821 -0.0684555 -0.470301 -0.0309572 0.170213 -0.273788 0.381644 0.325927 0.117512 0.0252762 -0.458107 -0.370966 -0.151209 -0.407398 -0.237546 -0.269167 0.292335 -0.109147 0.0897094 -0.040241 0.217118 -0.334387 -0.332641 -0.337095 0.405418 0.205274 0.201308 -0.056795 0.281304 0.464455 -0.125045 0.472773 0.511448 -0.278557 0.478272 -0.307959 0.169168 0.461771 -0.206463 0.404853 -0.158727 0.185132 0.241418 0.171042 0.339106 -0.0317426 -0.250721 0.503582 0.145074 -0.118512 -0.143117 -0.141754 -0.214362 -0.179663 0.202808 0.222975 -0.220105 -0.437049 -0.0482876 -0.370063 0.393161 0.0983291 -0.0326531 0.252158 0.123916 0.116911 -0.366995 0.431867 0.0371153 -0.112112 -0.467818 0.213798 -0.299727 0.287839 -0.197642 -0.00523842 -0.0173976 0.0747628 0.27334 0.449275 -0.476716 0.496216 0.352325 -0.310861 0.0410092 0.0426596 -0.336151 -0.254809 0.289442 -0.454633 0.436845 0.194568 -0.149406 0.456018 -0.393704 0.114952 -0.365659 0.398761 -0.265739 0.265317 0.12709 -0.00617634 -0.382238 -0.487537 0.407968 -0.103361 -0.319472 0.496801 -0.0904083 0.106831 0.10323 -0.397644 -0.0899314 -0.466758 -0.281068 0.0707997 -0.189424 -0.23112 -0.38124 -0.490361 0.125244 0.181449 -0.440204 0.48236 0.259556 0.20645 0.0789264 -0.438645 0.00493785 -0.10796 0.403994 0.336028 -0.211881 -0.298731 0.0685862 0.0372444 -0.307551 -0.418018 0.262879 0.0512056 0.202492 0.247367 0.0385223 -0.0501564 -0.232667 -0.193052 0.116238 -0.366696 -0.0570925 0.418203 -0.407763 -0.255338 -0.464741 -0.446364 0.21129 0.38078 0.214699 0.0410673 -0.31625 0.0607523 0.20048 -0.0995089 0.318952 -0.216947 0.342914 -0.0691356 -0.0642976 -0.444446 0.24671 -0.12091 -0.0158264 0.0230039 -0.0246005 -0.294277 -0.132233 0.470829 -0.426039 0.11544 -0.269891 -0.0297563 0.274897 0.44594 0.095993 -0.293633 -0.290239 -0.309782 0.321766 -0.215048 0.30796 -0.345891 -0.312366 0.129566 0.202909 -0.258536 0.14298 -0.297163 0.177675 -0.35574 0.230049 -0.22693 -0.150738 0.340314 0.222085 -0.203347 0.292625 -0.365057 0.339089 0.20717 -0.220659 0.275946 -0.306739 -0.256561 -0.29031 0.290049 -0.275918 -0.360567 -0.119152 -0.330702 -0.168032 -0.46244 0.154701 -0.301639 0.339547 0.253387 -0.00436577 -0.287784 -0.437873 0.18666 -0.34828 -0.260735 0.0292113 0.419495 0.154146 -0.388098 0.40176 -0.272246 0.287199 0.184016 0.290623 0.123077 -0.126025 0.117306 0.138142 -0.443493 0.00532444 0.361651 -0.0581982 -0.22661 0.254808 -0.447435 -0.386984 0.428282 0.319281 -0.138931 0.0243692 -0.0357097 -0.436502 0.0912747 0.126395 0.3977 0.0235919 0.136681 0.309025 0.321034 -0.0459598 0.100884 -0.015769 0.149482 0.0639079 -0.341938 -0.449916 0.206575 0.295632 0.394475 0.273645 -0.0246139 0.0682526 0.132797 0.296914 0.323085 0.113063 0.309203 -0.429491 -0.445529 0.420479 -0.151226 -0.0438805 -0.267287 -0.199357 0.231549 -0.341148 -0.448109 -0.246687 -0.143935 0.173139 0.188014 -0.0735088 0.446451 0.271997 -0.43248 -0.278593 0.0779803 -0.239742 0.446128 -0.347066 0.0141388 0.258386 -0.268949 -0.227475 0.00744227 0.365217 -0.305626 -0.320092 0.15668 -0.384386 -0.42814 0.101073 0.281356 0.378126 -0.000483395 -0.242618 0.419755 -0.309617 -0.407968 0.0729996 -0.238285 -0.327261 -0.20379 -0.183405 0.262592 -0.18167 0.136309 0.240211 -0.213411 -0.201716 -0.0558425 0.187905 -0.276012 0.241302 0.289392 -0.11501 0.363963 -0.250302 -0.0730972 0.0484929 0.0720433 -0.335071 0.324422 -0.0923104 -0.0214129 -0.241901 0.297644 0.301879 0.0461352 -0.10117 -0.295329 0.382116 -0.213365 -0.267415 -0.188344 0.26085 0.0633743 -0.108057 0.376962 -0.0828026 -0.148655 0.357398 -0.394789 -0.359073 0.224418 0.361949 0.411499 0.253523 -0.182811 -0.182419 0.324526 -0.36267 0.102966 -0.359705 -0.0688636 0.352216 -0.432201 0.123994 0.189466 -0.347121 0.268612 -0.0179657 -0.00925171 0.118085 -0.13217 0.35609 -0.00387646 0.132572 0.330388 -0.0397878 -0.235651 -0.263913 0.412775 0.369397 0.276293 0.184455 -0.400905 -0.105739 -0.206202 -0.120502 -0.363015 0.138691 0.23486 0.382102 0.293874 0.321643 0.0425969 0.208635 -0.363217 -0.0316266 0.116672 0.396161 -0.379223 -0.342755 -0.304573 -0.396267 -0.0538042 -0.1501 0.126176 0.0713987 -0.179076 0.370309 0.344973 -0.227238 -0.0878267 -0.320777 0.217253 -0.365989 0.270249 -0.155561 -0.162437 0.354055 0.170602 0.309697 -0.111736 -0.106235 -0.153381 -0.0791086 -0.3123 0.00635387 -0.102715 0.392557 -0.344057 -0.0682289 0.0751563 0.331582 -0.216723 -0.0235081 -0.0336085 -0.0340391 -0.00728642 -0.15686 -0.129478 -0.217553 -0.12569 0.097842 0.215429 -0.19621 0.290101 0.0940544 0.357747 0.325043 0.196964 -0.145947 0.0870461 -0.0466979 0.327376 0.0684755 -0.333484 0.0670379 -0.392184 0.24108 0.0790908 -0.0440823 0.0578781 -0.0586066 0.187261 0.0331809 0.335108 -0.163407 -0.123268 -0.11722 0.220157 0.0481238 0.0906167 0.217948 0.34318 -0.0406478 -0.200882 -0.288643 -0.331039 0.269095 -0.266241 -0.189517 -0.266824 -0.0685338 -0.230832 0.343931 0.0879912 0.242344 -0.211654 -0.151093 -0.314899 -0.245537 -0.0705347 -0.258473 0.0628271 0.379851 0.223145 0.151325 -0.18987 0.297101 -0.37093 -0.361511 -0.22 -0.36401 0.117261 0.347058 0.395118 0.262464 -0.350244 0.0431545 -0.00949433 -0.250229 -0.116202 0.0809802 -0.214701 -0.364478 0.375829 0.273254 0.199472 -0.205796 0.244047 0.0108625 -0.191005 -0.144096 0.00943465 -0.0341432 0.0850448 -0.387124 -0.363279 0.395467 -0.0537199 0.0164305 -0.0278323 0.0621546 0.0893489 0.00206 -0.38963 -0.282178 0.343986 0.271911 -0.10049 -0.181313 -0.373434 -0.26763 -0.169576 -0.352099 0.0295788 -0.347886 -0.158191 0.184788 0.0519501; #A 2000 -0.284512 0.277627 -0.321154 -0.124023 0.201074 0.0597532 0.0473693 -0.270747 0.0258306 0.264143 -0.287866 0.0245223 0.0832594 0.0446499 0.368169 0.133805 0.112722 -0.189842 0.243641 -0.294255 0.0780107 -0.105776 -0.324791 0.160413 -0.216808 0.210598 0.220169 0.162865 -0.152055 0.106529 -0.279953 -0.151497 0.160105 -0.0449573 0.351433 -0.210634 -0.303322 -0.161934 0.212579 0.165805 0.000809228 -0.0240881 0.191682 0.140623 -0.0203074 -0.191173 -0.177782 -0.268208 -0.231982 0.343684 -0.114511 0.32322 -0.234371 -0.213275 0.208346 0.0180362 0.259309 0.0943408 0.345837 -0.0980354 0.0980198 -0.0612329 0.0652234 -0.220897 -0.248077 0.0977551 -0.365828 0.217351 0.353852 -0.124169 -0.0839946 0.217168 0.29505 -0.193319 0.00850888 -0.371019 -0.0233812 -0.0156555 0.00118429 0.221386 0.288061 0.10902 -0.251743 0.157107 0.165775 -0.279924 -0.2785 -0.0196249 -0.00609746 0.11235 0.166856 -0.268344 0.2854 -0.315608 0.0849263 0.0210242 0.193191 -0.0199809 -0.232716 0.292411 0.324406 -0.0754749 0.137364 0.271422 0.128599 -0.0199712 -0.314014 0.0957419 0.326971 -0.240133 0.153841 -0.111673 -0.0565774 0.297796 0.124425 0.259923 -0.162687 -0.172134 0.321146 0.039382 0.109685 0.116913 -0.183498 0.104712 0.300947 -0.333251 0.188555 0.00485615 0.136598 -0.342089 -0.0907983 -0.0624198 0.0803083 -0.248067 0.32761 -0.0401113 0.235462 -0.0263475 -0.286637 0.120637 -0.192279 -0.163929 0.306951 0.0453597 0.031227 -0.159709 -0.167754 0.161195 0.340205 0.234527 0.345785 0.187335 0.205378 -0.0299277 0.143463 -0.00396578 0.0430729 0.187375 0.0360553 -0.0788315 -0.232264 -0.0946411 -0.00541447 -0.197787 0.0628315 -0.1388 -0.0260051 -0.342213 -0.136202 0.0181285 -0.170781 -0.187389 0.145891 0.150246 -0.230586 -0.229648 0.33133 -0.11634 -0.0868594 0.13615 0.274401 0.342225 -0.328969 -0.295789 -0.0937071 0.255179 -0.195574 -0.128445 0.128202 0.106057 0.0203717 -0.0519442 -0.0302563 0.0262495 -0.0374641 -0.215833 -0.0240992 0.01427 0.0126633 -0.284548 -0.275145 0.328636 -0.210724 -0.0209369 0.133797 -0.0608794 0.00892689 0.313601 -0.0653251 0.0924893 -0.0659965 -0.260337 -0.2629 0.294615 0.284607 0.0203757 0.263523 0.116609 0.343823 0.166279 -0.265959 -0.244084 -0.189719 0.251535 0.171825 0.0676498 -0.243542 -0.212151 0.238771 -0.0111665 -0.0728385 -0.235209 -0.211932 -0.281744 0.0590775 -0.0130831 0.0298745 -0.124418 0.318591 0.0749726 0.0671866 0.153363 0.180941 -0.0632282 0.19898 0.226113 -0.0933994 -0.284299 0.19273 0.131923 -0.234959 -0.0884152 0.153629 0.13452 -0.217179 0.300585 -0.158708 0.0736526 0.0081434 -0.276 -0.125042 0.260932 -0.0814391 0.144687 0.0244757 -0.192079 -0.290144 -0.0733461 0.0754768 -0.0929502 0.038641 0.280676 -0.165475 -0.225845 0.242126 0.270792 0.319892 0.262174 -0.204027 0.172277 0.0352712 0.163953 0.259657 0.229834 -0.106788 0.148319 0.289357 0.273819 -0.171424 0.0854679 -0.0387464 0.181514 -0.0102074 -0.0685449 0.174273 -0.170528 -0.263494 0.0987983 -0.115116 -0.11717 -0.173287 -0.0157278 -0.109131 0.0707277 -0.262262 0.0170997 -0.266181 0.315432 0.1821 -0.145821 -0.203668 0.0188108 0.109736 0.0847262 -0.112134 0.176913 0.21252 0.103169 -0.329989 -0.323776 0.264731 0.141519 0.232411 -0.272504 0.293168 0.14199 0.209262 -0.159254 0.250286 0.125233 -0.324157 -0.0657361 0.184402 0.0612137 -0.108246 -0.0439561 0.243771 -0.0943922 0.264123 -0.326192 -0.13712 -0.200836 -0.238389 -0.0627477 0.0599494 -0.22484 0.102915 0.176632 -0.320315 0.284379 0.283066 -0.00182443 -0.0287642 0.277529 0.097538 0.271921 -0.134241 0.0114788 0.219507 -0.164458 0.212412 0.100314 0.17561 0.154224 0.0503052 0.0949558 0.0563321 -0.231781 -0.145845 -0.18237 0.112691 -0.0933012 0.0773991 0.196975 0.197723 -0.078511 0.195468 -0.234288 -0.304201 -0.0163034 0.161298 0.317866 -0.150214 0.0715569 -0.233396 -0.111487 0.15815 -0.231607 -0.236529 -0.00712402 -0.248608 0.130221 0.269611 0.222761 -0.13855 -0.0239584 0.304647 0.045596 -0.235271 -0.016362 -0.29433 0.105343 0.206254 -0.0603776 0.228109 -0.122477 0.313648 -0.0343201 0.174334 -0.0796289 0.0585246 -0.00108005 0.251409 -0.144623 0.0165946 0.0635734 -0.213872 0.292509 -0.278731 0.0694611 -0.282189 -0.117487 0.258689 -0.230663 -0.224599 0.0533153 -0.188656 0.119398 -0.102437 -0.123855 0.307453 -0.198745 0.23522 -0.146586 0.165744 0.0132077 -0.241534 0.231991 -0.00724817 0.0642451 0.29721 0.112056 0.01338 -0.0226181 -0.123835 -0.192081 -0.151365 0.130164 0.155323 0.25242 -0.0112157 -0.176455 0.0932855 0.105274 0.0230919 -0.294466 -0.0310439 -0.203478 -0.196595 0.0292291 0.300649 0.164067 -0.171929 -0.302191 0.0163304 0.0413853 0.248349 -0.258118 -0.0206974 0.118854 -0.264028 0.211861 0.235885 0.222328 0.286115 0.297936 0.18089 -0.189429 0.293608 -0.189124 -0.220041 -0.173106 0.264853 0.189862 0.0207551 -0.150878 -0.14125 0.222411 0.195229 0.245143 0.232698 -0.209333 -0.123173 0.244488 0.202883 0.117006 0.121514 -0.217931 0.0941869 -0.0351002 -0.284083 0.270549 0.00954834 -0.193916 0.282262 0.141108 -0.237441 0.120435 -0.152506 0.118847 -0.147735 -0.132673 0.0205093 0.259453 -0.0983102 -0.127269 -0.121799 0.137282 -0.0689696 -0.193404 -0.155609 -0.229866 0.283937 0.0739685 0.055882 0.0890255 0.228015 0.291952 -0.218724 0.0167509 -0.0428226 0.286238 0.226784 0.193473 0.072177 0.0475226 0.121418 -0.23361 -0.249658 -0.165173 -0.00917115 -0.199535 0.0531623 -0.16061 -0.193127 -0.211457 0.0470338 -0.0012231 0.0175326 0.17456 -0.188438 -0.0411355 0.0934563 -0.238652 -0.220264 -0.238568 -0.152077 0.251212 -0.0577734 0.0883676 0.0159128 -0.114153 0.0735486 -0.240243 -0.204489 0.00568129 -0.188929 -0.252749 0.0366336 0.154886 -0.260542 -0.195833 -0.0764513 0.286154 0.0215688 -0.127309 -0.135902 0.214575 0.0498767 -0.101532 0.193591 -0.20666 0.244727 -0.209578 -0.246338 -0.200139 0.266148 0.0931149 0.0408561 0.107319 -0.0490732 -0.0494596 0.0692078 -0.274037 0.0951072 -0.224594 0.227892 -0.182756 0.254145 0.0635401 -0.274171 0.0273934 -0.179701 -0.198884 0.135059 0.0858214 0.0713877 0.102524 -0.259745 -0.165047 -0.132724 0.0733542 0.178292 -0.0388758 0.238845 0.157142 -0.0381594 0.0558999 -0.178989 -0.0164311 0.248509 0.195318 0.25807 -0.266536 -0.20392 -0.149837 0.255339 -0.0458006 -0.137388 -0.269485 0.132476 -0.14985 0.0189027 -0.139847 0.0766834 0.168385 -0.0279619 0.029791 -0.0589319 0.10131 0.120742 -0.170049 0.0116833 -0.114174 -0.239947 -0.0768932 -0.0256233 0.202353 0.123424 0.137466 -0.0439222 0.0720562 0.111863 -0.0821511 -0.229652 -0.149641 0.157461 0.00158629 0.224064 -0.0565319 -0.11141 -0.159607 -0.0951958 0.224134 0.0508186 0.0959099 0.0417327 0.135529 -0.084375 -0.197386 -0.068943 0.0149971 0.0139288 0.211277 -0.12512 -0.172741 -0.174337 0.0601256 0.160251 0.211259 0.225945 0.220347 -0.0825704 -0.125914 -0.163157 -0.202481 0.164228 0.146612 -0.105173 -0.058525 0.231799 -0.0474892 -0.199088 0.234574 -0.00235516 0.0807763 0.0884389 0.0756895 -0.183267 0.0558016 -0.121157 0.178517 -0.212929 -0.0206044 0.0972468 -0.0755603 -0.0437204 -0.177743 0.135238 0.194584 -0.138018 -0.0814442 0.257965 -0.0618963 0.0639819 -0.00146085 0.143914 -0.209089 -0.174347 -0.0497476 -0.0489887 -0.0241489 -0.0344116 0.175696 0.183593 -0.0583119 -0.245122 -0.0284309 -0.145523 0.237714 0.0207673 0.257424 -0.219135 -0.219356 -0.203414 0.120518 -0.0460022 0.0813118 0.197079 -0.199325 -0.0560997 0.161545 -0.224465 0.119746 0.209025 -0.00873409 0.208925 -0.0286567 0.143524 -0.142567 -0.150165 0.192933 0.165055 -0.128894 0.17 -0.240906 0.0278417 0.126806 0.116201 -0.107216 0.123003 -0.0418299 0.197934 0.0153975 0.0610199 -0.0978363 0.226127 0.0415967 0.223911 0.174927 0.0298609 0.209546 0.0968134 -0.191699 0.0352881 0.019361 0.0696251 0.00869554 0.178834 -0.137498 0.029498 -0.0407852 0.234899 0.212814 -0.121092 -0.0813248 0.0120944 -0.0589912 -0.0802782 -0.156785 -0.0734384 -0.15911 0.0936981 0.175807 -0.0748671 0.17279 0.116799 0.228937 -0.190204 -0.121295 -0.0107419 0.238095 -0.0652048 -0.0450995 -0.129389 -0.00206482 -0.238322 -0.117267 -0.168823 0.14687 -0.186797 0.237416 -0.018009 0.0610227 -0.0204962 -0.10467 -0.0205405 -0.109854 0.214379 -0.12251 -0.0946404 0.202788 0.103554 -0.18746 0.0175251 -0.22405 -0.197427 0.0242478 -0.115032 -0.0259787 -0.15153 -0.241691 -0.117946 -0.192439 -0.136285 -0.00376468 0.073847 0.0519724 0.10932 -0.0438837 -0.0222919 0.0592014 -0.0536992 0.146777 0.167965 0.130166 0.116341 0.114474 -0.179797 0.0629586 -0.020361 -0.236601 0.0273057 -0.204585 0.0343521 -0.19542 0.127387 0.160308 -0.0999265 -0.111221 -0.206442 -0.134027 0.0914498 -0.202394 0.00336773 -0.091554 -0.228109 -0.229104 0.00438593 -0.175125 0.215167 -0.015425 -0.00786245 -0.0929492 -0.09522 0.156309 -0.221039 0.136409 0.159734 0.237884 -0.237305 0.213942 0.00864478 -0.220443 -0.154397 0.188179 0.108325 -0.185977 0.16084 0.238382 -0.195546 0.0621411 -0.237704 0.103422 -0.170448 0.104839 -0.029332 0.0637298 0.0929825 0.182306 -0.0390045 0.130895 0.227606 0.205537 -0.131186 -0.159819 0.0104909 -0.154853 -0.0439968 0.0518849 0.131384 0.151009 0.141835 0.136275 0.00918443 0.0932429 -0.106781 0.0132949 0.216578 -0.161933 -0.125178 -0.0626314 0.0698704 -0.1184 0.184377 -0.0653655 -0.191639 -0.154183 -0.10355 -0.168834 -0.170378 0.202925 0.220497 -0.13766 -0.180557 -0.0908158 0.0672539 -0.00283751 0.0974739 0.214787 -0.0981272 -0.14899 0.051586 0.210689 -0.119702 0.100799 0.172175 -0.0640009 0.202342 -0.152006 -0.202381 -0.125934 -0.0351356 0.110159 -0.169374 0.111405 0.0463703 0.0398891 -0.198557 0.0812193 -0.114951 0.174437 -0.11192 -0.20436 0.125274 -0.180021 0.0569386 -0.193257 0.101227 0.0505086 0.012035 -0.0823875 -0.212448 -0.0354402 -0.0607197 -0.16014 -0.204778 -0.0947894 0.221229 -0.0451631 -0.102409 -0.225057 0.139583 -0.0804567 0.171876 0.192799 0.0886989 0.107283 0.211407 0.148922 0.0485779 -0.00492592 0.032927 0.189674 0.209944 -0.176446 -0.0369676 -0.150448 0.136413 0.109265; #A 3000 -0.0323019 0.143762 0.0585729 -0.0625366 0.21726 -0.10031 -0.187904 -0.159929 0.198132 -0.193001 -0.0992695 -0.139299 -0.0556573 -0.12956 0.217972 -0.0278251 -0.18684 0.105606 0.00262958 0.156735 0.153541 0.0115043 -0.110696 0.15465 -0.0113853 -0.0788794 -0.139195 0.205446 0.000304755 -0.19194 0.191776 0.134086 0.102517 -0.0282471 0.0808406 -0.128009 0.000279101 0.0744158 0.123001 0.079588 0.0678389 0.0442438 -0.153832 -0.178369 -0.0698495 0.204653 -0.0457756 0.0297895 -0.0058058 0.208971 0.0948279 0.0925336 -0.180494 -0.170653 0.0105779 -0.212038 -0.140801 -0.157936 0.134296 0.0031036 0.0524215 -0.00611156 -0.0832516 0.110216 0.048818 0.111739 -0.0656799 0.207002 0.179946 0.0180515 0.00547806 0.00797976 0.171421 -0.0184215 -0.209395 -0.00704363 -0.0998495 -0.0107986 0.128707 0.0903612 0.0341391 -0.0147462 -0.0019046 0.185036 0.00977114 -0.210812 0.199205 -0.122871 0.167433 -0.0333662 0.110769 0.0408924 -0.0514882 -0.161878 -0.12729 -0.172005 -0.194117 -0.166509 -0.0933445 0.128966 0.0388781 0.136021 -0.0813229 -0.0438943 -0.0401939 -0.129737 -0.0940519 0.0992271 -0.103865 0.168506 0.208667 0.152004 0.138201 0.207586 0.206818 -0.14911 -0.201696 0.0633367 -0.157863 0.0827847 0.149951 -0.107594 0.184646 -0.162805 -0.054833 0.0573622 0.164471 -0.0789258 0.199863 0.114508 -0.149142 0.123934 0.151023 -0.0210362 -0.124566 -0.181536 0.159531 -0.0572638 -0.0599406 -0.114045 -0.0433308 -0.0247279 0.111415 -0.196354 0.086836 -0.0458085 -0.0485102 0.185261 -0.0375999 -0.00541575 0.00440014 0.0908882 -0.0838955 0.0615283 -0.0928372 0.166374 -0.126751 0.0955789 0.0769011 0.163533 -0.0325695 -0.167178 0.0356756 -0.167607 -0.165927 -0.0601209 -0.112511 -0.0989376 -0.171179 0.0105365 0.0626646 -0.0766114 0.117211 -0.093244 0.162545 -0.129628 0.0786131 -0.022329 0.124401 0.196933 0.019216 0.175909 0.07058 0.0110773 -0.0334218 0.0843098 0.0602376 0.149308 -0.0252923 -0.162696 0.142915 -0.0510841 -0.0716876 -0.062631 -0.0843606 0.111897 0.0430623 -0.0142771 -0.0344589 0.0906838 0.0744363 -0.100438 0.0357363 -0.0510177 0.0161545 0.0281454 -0.124743 -0.0668083 -0.096247 0.186769 -0.0218112 0.148264 -0.0848517 -0.0212507 -0.135893 -0.0551251 -0.0192169 -0.00789701 0.192959 0.146163 0.0823693 -0.0434596 0.0749644 -0.113352 0.0607072 0.136678 0.153887 -0.189379 0.105727 0.0857351 0.119273 -0.105004 -0.0192923 -0.163474 0.0266231 0.106813 0.0928172 0.0130874 -0.0417087 -0.00926255 0.139583 0.11165 -0.0219488 -0.102878 -0.0145257 -0.0239829 -0.00961225 -0.0140172 0.0461646 -0.185814 -0.110941 0.106808 0.0418683 -0.0719298 -0.0101453 0.157275 -0.0374214 0.161386 -0.162152 0.151062 0.162776 -0.168853 -0.0225717 -0.000173911 -0.158174 0.0305713 -0.189262 0.150711 -0.00486452 -0.0609714 -0.0693948 0.0417573 0.185056 0.0741532 0.175844 0.0666522 0.162515 -0.0568451 -0.121233 -0.155342 -0.132397 -0.0467263 -0.108765 -0.0149159 0.0858965 0.0165825 -0.00456387 0.178417 0.0111336 0.13696 -0.00647975 0.0210805 -0.0287583 -0.0364289 -0.057002 -0.0792129 -0.0706062 -0.0693693 -0.0757128 -0.14614 0.140654 -0.122397 0.0896208 0.0851122 -0.143836 0.00134714 -0.120236 0.122657 0.0144485 0.0419045 0.109245 -0.00915016 -0.0902006 0.0441831 0.148448 0.106076 0.0616767 0.0989551 -0.175785 0.146537 -0.178605 0.179277 0.102792 -0.141601 0.0383808 0.0706746 0.0225309 -0.0591203 0.128869 0.121765 0.133016 0.0991555 -0.176624 -0.105156 -0.016904 0.119773 0.071924 -0.173923 -0.098453 -0.0653482 -0.132782 0.0596562 0.13224 0.135251 -0.120733 0.110746 -0.10758 0.0488513 -0.171469 0.0616679 -0.051331 -0.116122 0.115628 0.0363737 0.0464489 0.0667275 0.115286 0.130042 -0.135744 -0.0365037 -0.0227064 0.0721671 -0.135899 -0.0826528 0.174284 0.0513994 -0.0938294 0.144811 -0.0979702 -0.158295 -0.0756128 0.0920797 0.0213012 0.154702 0.14938 0.0111737 -0.140948 0.174997 -0.171859 0.131302 -0.0376658 0.152669 0.0994103 -0.069149 0.151894 -0.172104 0.0662058 -0.0355781 -0.0274851 0.121152 -0.154924 -0.100405 0.0982891 -0.00851259 -0.0117455 0.161829 0.14057 0.0541155 0.130743 0.159401 -0.117867 -0.0297293 0.00384015 0.0952436 0.0585705 0.125841 -0.000126457 0.0664465 -0.0743553 -0.0886856 -0.0867966 -0.0450549 -0.0432048 -0.0900521 0.0281491 0.0952426 -0.0638642 0.00842945 0.0406036 -0.04447 0.0863117 0.0253036 -0.0312394 0.0102175 0.0377547 0.0729528 -0.0621985 -0.0921824 0.120382 -0.0251077 -0.117427 0.162811 0.164372 0.139619 -0.14947 0.16465 -0.0658164 0.127841 -0.124377 0.0344465 0.149229 0.0372971 0.108096 0.168746 0.0223981 -0.0771114 -0.15537 -0.137841 0.149188 -0.0158016 -0.142073 0.075218 -0.114797 0.161744 -0.0976352 -0.136312 0.0491833 0.15867 -0.13923 -0.0202478 0.14562 -0.119813 0.121398 0.154402 -0.113513 -0.0504024 -0.134531 -0.16318 -0.0597164 -0.029612 -0.0467613 0.00225563 -0.070196 -0.114993 0.0444683 0.0432954 0.0214946 0.071323 -0.0190036 0.0810287 0.0951393 -0.130527 0.0756319 0.0257728 0.162 -0.164142 -0.00191852 0.0499297 0.0370688 0.10329 -0.106506 0.151554 -0.0822485 0.158755 0.0924217 0.133621 -0.108901 0.0130794 0.0907379 -0.00855238 0.0192924 0.130479 0.0690169 0.0500127 0.0173185 0.140524 0.0336625 -0.117943 0.151953 -0.0798647 -0.137804 -0.0863927 0.104907 0.092949 -0.086812 -0.143369 0.0315386 0.0220624 -0.0649583 0.144692 -0.0863834 0.0950977 -0.160296 -0.106235 0.125732 -0.115825 0.0636225 0.100001 -0.00777683 -0.0665621 -0.0749565 0.158429 0.118012 0.0887921 0.0722456 -0.0674327 0.145432 -0.157342 0.0439096 -0.0357183 -0.0397757 0.0221262 -0.0884461 -0.14212 -0.150805 0.0982814 -0.0808347 -0.0702571 -0.0554128 0.0364822 0.0496012 0.0733575 -0.0864981 -0.00775521 0.148468 -0.0214087 0.144833 0.0903923 -0.0323867 0.0531518 0.0185316 -0.0272061 0.0686442 -0.0945452 -0.125106 -0.00682926 0.136854 0.0489306 0.0691241 -0.0213862 0.0459322 -0.0762919 -0.0369228 -0.0473903 -0.103265 0.0610291 -0.0436194 -0.0055423 -0.0220095 -0.0418534 0.00613602 -0.130894 0.0326854 0.0765101 -0.056388 -0.0271124 -0.000728895 -0.116564 0.0166641 -0.118273 0.0498902 -0.00723642 0.119593 0.0650858 -0.0614266 0.0613129 -0.123288 -0.0203257 0.116913 -0.151074 -0.130957 -0.070597 0.0128515 0.0332649 0.0260716 -0.0698208 -0.0916101 0.0499645 0.0920859 -0.118017 -0.0167108 -0.0187649 0.00944063 0.116402 -0.0969431 0.0728372 -0.0817035 -0.101278 0.147346 0.0327144 0.0810537 -0.0587706 -0.0660218 -0.0814037 0.132249 0.149447 -0.100095 -0.112516 0.0627018 -0.126286 -0.121363 0.0238395 -0.081601 0.022568 -0.0799094 -0.0530605 0.0255176 -0.14224 0.0297025 -0.0145391 -0.0509213 -0.146792 0.134249 0.0352072 0.0611216 0.140357 -0.0257572 -0.0123208 0.054598 -0.0617638 0.104801 -0.0693985 0.0599998 0.011704 -0.136532 0.124618 -0.0930418 -0.123739 -0.00595835 -0.119725 0.0833046 0.101186 -0.114587 0.0369612 -0.0256574 -0.0259422 0.0372507 -0.0687842 0.13963 -0.0622326 0.0454998 0.0153069 0.118568 -0.00735415 0.0324654 -0.137009 -0.0311023 -0.0644025 -0.0458164 0.0421877 -0.0272188 -0.0432955 0.00205265 -0.011309 -0.0129684 -0.142977 0.061814 0.0161657 -0.117427 0.0756788 -0.028727 -0.0794744 -0.0948942 -0.0948758 -0.0112494 -0.0311672 0.100073 0.0954736 0.0396249 -0.0550972 -0.0390901 0.0703175 0.0436072 -0.00993844 0.0038173 0.0929257 -0.118477 0.0813865 0.124381 0.0651454 -0.141408 -0.127597 -0.108827 0.1134 -0.0410278 0.0192143 -0.10691 0.107468 -0.11247 -0.106281 -0.101907 0.101288 -0.116007 -0.101251 0.0595574 -0.00486092 0.0521002 -0.106386 0.0733727 0.112563 -0.0906975 -0.0498852 -0.0458806 -0.115399 0.104645 0.0514547 -0.106285 -0.0360392 -0.131669 -0.134497 0.0529077 -0.0656552 -0.0205703 -0.0234122 0.0100179 0.000470468 0.0852984 0.126407 0.0827888 -0.040171 0.132502 0.0328885 0.0811529 -0.0886757 0.0554995 -0.0103974 -0.0657422 -0.0768998 -0.0496197 -0.120664 -0.0351054 0.0479203 -0.0961586 -0.0878548 -0.00149242 0.133577 0.0295356 0.0565432 0.053113 -0.0233104 -0.108245 0.0916325 0.135056 0.0848086 0.0410468 -0.00270774 -0.0296286 0.0571364 -0.0600332 -0.135155 0.0238768 0.0291169 -0.0976195 -0.123425 0.00930676 0.00673425 -0.0259364 0.0839082 0.0436096 0.0843362 0.10615 -0.0118588 0.107626 -0.0774661 -0.0087164 0.0667282 -0.0167636 -0.0963686 -0.09685 -0.125475 -0.0756286 -0.0620319 0.125101 -0.034293 -0.0781824 -0.0503637 0.056433 -0.127542 -0.0261005 -0.109218 -0.0862883 -0.11448 0.0223725 0.0857862 -0.037133 -0.0296933 0.0870362 0.0553894 -0.0387158 0.0816272 0.0696014 0.0522914 0.118256 0.014261 0.0194596 0.017757 -0.119695 0.106038 0.0683491 -0.0733333 0.0644172 -0.0921112 0.0402844 -0.0684692 -0.0544752 0.0621493 0.0426561 0.0495613 0.0376415 0.0645175 -0.0540536 -0.0803205 0.105124 0.00765966 0.0998457 -0.0803344 -0.0183335 0.0389535 -0.0890711 0.010896 0.0540093 -0.10851 -0.0216286 -0.0492092 -0.123433 0.0260771 0.0287683 0.078123 0.0727861 0.00442859 -0.111214 0.105578 0.0568455 0.0142058 0.123055 0.033923 0.0570226 -0.111446 0.0558641 0.0984052 -0.00417281 -0.0189861 0.0717725 0.0194054 0.097414 0.0654307 0.0229778 0.0969773 -0.0928014 0.0830225 0.120942 0.0830162 0.0338681 -0.066279 -0.00928785 -0.106591 0.0342502 0.0862209 -0.0656064 0.120448 0.0256843 -0.0109306 0.111276 0.101157 -0.0374737 0.0628811 -0.0814089 0.0657089 0.107081 -0.0097159 0.0547875 0.0828845 -0.0587204 0.0730219 0.0245906 0.0758645 0.00499812 -0.0926659 0.0732082 -0.100482 -0.0605664 0.103062 0.0687504 -0.0293856 -0.0523724 0.0999948 0.0624462 -0.0161106 -0.0398442 0.00653965 0.0428989 -0.0847495 -0.0226134 0.0228652 0.122178 0.0922665 0.10092 -0.06533 -0.0733129 0.106573 0.0168905 -0.107686 -0.118184 -0.00891782 -0.116542 0.0248703 -0.00913238 -0.015132 -0.0671876 -0.120721 0.0241106 -0.120643 0.019524 0.0996533 -0.11458 -0.119371 0.0789304 0.0503415 -0.0873355 0.0764216 0.0379008 0.0950922 -0.0850276 -0.0280227 -0.0934382 0.0717243 0.078077 0.00366129 0.0474174 -0.00192688 -0.111326 -0.00877672 -0.0471581 0.112177 0.106276 0.0498043 0.0682779 0.022694 -0.0959217 -0.111529 -0.0232977 0.0605428 -0.0946564 0.0682743 0.0935072 0.0734169 -0.0732077 0.00210613 -0.0195135 -0.0550048 -0.00982419 0.0377437 -0.086216 -0.0704313 0.0869741 0.0529978 0.027706 0.104438 -0.111313 0.000287845 0.114454 -0.110117 0.034185 0.0346881 0.0668716 -0.0404814 0.0856662 0.00156813 0.0237901 0.00463471; #A 4000 -0.0647746 -0.0835252 -0.00744466 0.0606129 -0.0248204 0.0330256 0.112105 0.0250004 0.056578 0.0467668 -0.0656411 -0.0694749 0.0152889 -0.0239486 -0.0466951 0.0416159 -0.0970374 -0.0588145 0.0787822 0.0925588 -0.0713291 0.00435014 -0.0969682 -0.037568 -0.110655 0.0691273 0.0424528 -0.0589848 -0.0848798 0.0652838 -0.000150411 -0.085732 0.0136852 -0.0392266 0.0748929 -0.0247214 0.0173727 0.0554266 0.0305289 -0.0449169 -0.0750206 -0.0234307 -0.0268403 -0.0841407 -0.0427573 -0.00979223 0.0413943 0.019929 0.107915 0.109791 0.0442659 0.0102851 0.09298 -0.0551907 -0.058901 0.091415 -0.0874787 -0.0586197 0.035464 0.0746747 -0.0961557 -0.00297582 0.00292368 -0.078296 0.0748242 -0.0773547 0.0888685 -0.107722 0.0552174 -0.048316 0.0284993 0.0844242 0.09337 -0.0230297 -0.0932481 0.0373212 0.00754367 -0.048966 0.0728742 -0.0726989 0.06832 -0.102801 -0.0896865 0.0524961 0.0673082 -0.0250669 0.0563361 -0.0543089 0.0865154 -0.0532522 -0.0290076 -0.0574313 -0.100156 0.00792545 0.0388099 -0.0345127 0.0597473 -0.0717008 -0.0882568 0.107268 -0.105501 -0.0147162 0.0544725 -0.0314072 -0.0016463 0.00215048 -0.00879789 -0.0100475 -0.08802 -0.0450039 -0.0479599 0.0350243 0.0617998 -0.0177901 0.0912654 -0.029844 -0.00826794 0.0213109 0.091319 0.0744242 -0.0296514 -0.0704324 -0.006994 0.012241 -0.0237477 0.0785993 -0.0987612 -0.0105529 -0.0849493 0.092628 0.0647974 0.0459928 -0.00955161 -0.0248067 0.0613531 0.043573 -0.0330661 0.0102488 0.0401761 -0.0847127 0.0672294 0.0898559 0.0101863 -0.0368516 -0.0760654 -0.0601985 -0.0782474 -0.046812 -0.00589367 0.0169758 -0.0971142 -0.0609488 -0.00696295 -0.0446344 0.02523 0.088012 -0.00743517 -0.0155362 0.0225157 -0.0575234 0.00503378 -0.0985261 -0.00789656 0.00938364 -0.0656384 -0.0378899 0.0063077 0.0903396 0.0917706 -0.0368068 0.0887648 -0.0576262 0.0160364 0.0265254 -0.0639162 -0.0218627 -0.0869129 -0.00571396 0.0181115 -0.0290208 -0.0126196 -0.0988732 -0.029755 0.0638661 -0.0630365 0.0836514 -0.00184667 -0.00836363 0.0230613 -0.0746425 -0.0115195 -0.0201254 0.0562927 0.0956064 -0.00723987 0.0704126 -0.0428765 -0.0168928 0.0510995 -0.09044 0.0561646 0.026614 -0.0310146 -0.0114666 -0.0582171 0.0646102 0.0449059 -0.0761271 0.0649426 -0.0482892 -0.0533259 -0.00447553 0.0907944 0.0154687 -0.0639966 -0.0649352 7.00848e-05 -0.0272473 0.046305 -0.0436091 -0.0619799 0.0830458 0.0137207 0.0458236 0.0168196 -0.0280916 -0.0540929 -0.0973959 0.0724464 0.0717879 -0.0490759 -0.092258 -0.0364162 -0.0399525 -0.0808937 -0.0215523 0.0114406 0.0867529 0.0387683 0.0475814 0.022599 0.0244096 0.0897922 0.00131292 0.0248385 0.0890763 0.0558666 0.0529219 -0.0244354 0.0850041 -0.0940507 0.0014924 0.00514138 0.0445722 -0.091462 0.0894283 0.0317158 0.0434896 -0.0664395 -0.0236163 -0.0905222 0.0671094 0.0572613 0.0718288 -0.0916304 -0.0731739 -0.0350541 0.034313 -0.00437063 -0.0137192 0.0273073 0.00367423 0.0315388 0.0257797 0.0364045 -0.0347793 -0.0855991 0.0647913 -0.00498919 -0.0724751 0.0530099 0.0859695 0.0914021 -0.0441077 0.0910989 -0.00099725 0.0643085 0.0645001 0.0451923 0.0266537 0.0301443 -0.0298259 0.0668398 0.00983367 -0.0577891 0.016261 -0.0238646 0.0752881 -0.0564993 0.0809906 0.0577991 0.0380613 -0.0753228 0.0348635 -0.0558083 -0.0283899 -0.0314057 0.0512249 0.0578558 0.0756091 0.00309214 0.0359601 0.0360073 0.0401512 -0.0343685 0.0319391 0.0746555 -0.0652553 -0.0808559 -0.0706481 0.00656093 0.0297359 -0.0626406 -0.0426845 -0.00764493 -0.0627874 -0.0533513 -0.0622198 0.0622506 -0.00585874 0.0702236 0.050252 -0.0165984 -0.0524856 0.0154344 -0.000566178 -0.0114824 0.0571409 0.0518196 0.0469791 0.00414839 0.062063 -0.0533774 -0.0886403 -0.0737263 0.0063254 0.0279673 0.0633866 0.0252856 0.020377 0.0373442 0.00409344 0.0486257 -0.0274459 -0.0798557 0.00443274 0.0759427 0.0610791 0.0240002 0.0151283 0.071628 0.0204762 0.00833597 0.0575975 -0.0678081 -0.0216547 0.0269625 -0.0544118 0.018026 -0.0699055 0.0832989 -0.0638671 0.0482742 -0.029724 0.0559797 0.00843347 0.0765033 0.0377984 0.0304483 0.0744895 0.00619122 0.0588767 0.0571404 0.0550804 -0.0570217 -0.0432411 0.0446005 -0.00216198 -0.0242678 0.0519455 -0.0418083 0.0631208 -0.081701 -0.0595695 -0.0280693 0.0348364 0.0490372 0.0241859 0.0571041 -0.0828545 0.0720336 -0.0400975 0.0511695 0.047854 -0.0574705 -0.0767868 0.0253298 0.0537761 -0.0500151 0.0116688 -0.0807628 -0.0833851 0.0745768 0.0421734 -0.00856263 0.0406695 -0.0067424 0.0743776 0.0304756 0.00431139 0.0605871 -0.0496466 0.0616907 0.0830725 0.0320405 0.06716 -0.0136928 -0.0797394 -0.0408878 -0.0114892 0.0262713 -0.0462658 0.0181123 -0.022641 -0.0550508 0.00932888 -0.0346802 0.0321809 0.0795558 -0.0332194 0.0629013 -0.0164368 -0.0206326 -0.0446163 -0.0509068 -0.0368119 0.0184623 -0.0766097 -0.0236577 0.0767076 -0.0443923 -0.0811852 0.00251495 -0.0412884 -0.0435317 0.0762905 -0.0231264 0.0246195 0.0741772 -0.0126769 -0.0189516 -0.0515746 0.0267037 -0.0729887 0.0644158 -0.00709789 -0.0809395 -0.0262304 0.041694 0.0709352 -0.0671961 0.000899662 0.0677678 0.00389437 -0.0193756 0.0338657 0.0249688 -0.0220215 -0.0248548 -0.00636381 0.0140203 0.0623201 0.0523461 -0.0305247 -0.0110476 -0.0624724 -0.0547611 0.0440775 0.00184981 -0.0450283 -0.0653274 0.00162192 -0.0779583 -0.026211 -0.0182451 0.0408701 0.0794198 0.0159909 -0.0465449 -0.079509 -0.0557684 -0.00592825 -0.036684 0.0672617 -0.0319973 -0.0405799 0.0319131 0.00978127 0.0259631 0.0692559 0.0302629 0.0397102 0.0585066 -0.0371546 0.0576074 0.0473532 0.0320835 0.0750309 -0.012494 -0.0122755 0.0184332 -0.0129668 -0.0772601 0.0641037 0.0769083 -0.0286546 -0.021669 0.0113648 -0.0557874 0.0551514 0.0297218 -0.0136781 -0.0660919 0.0714521 0.047331 -0.0696855 0.0768738 0.0574115 0.0769521 0.0638038 0.0111614 0.0667873 0.0278569 0.0241575 0.0665294 0.0243196 0.0410251 0.053753 -0.0107128 -0.0722719 0.0463893 0.0615407 -0.0534388 -0.0686807 0.0535941 -0.0392151 -0.050725 0.00915711 -0.0573171 0.0384618 0.00772889 -0.0337971 -0.0206849 -0.00866729 -0.0565289 -0.05888 0.0726672 -0.0176801 0.0728623 0.0321117 0.0648661 0.0577422 0.0340693 -0.0325769 -0.0225923 0.0635225 -0.000880209 0.0187982 0.0656611 0.0494103 0.0310761 -0.00755613 -0.0608397 -0.0430995 0.0123812 0.0637542 0.0426837 -0.054911 -0.0167851 9.97331e-05 -0.0433572 0.00620352 -0.00796451 0.063389 -0.0537866 0.0686771 0.0596854 0.0144809 -0.0618132 -0.0121887 -0.0397811 -0.0620095 -0.0500691 0.0137902 -0.00383135 0.0619308 0.0341708 -0.0298242 -0.0323561 0.0328288 0.0423164 -0.0566225 0.0196134 -0.0110958 -0.0619359 -0.022583 -0.0162957 0.0520523 0.0687504 -0.04431 -0.000126578 0.0103888 -0.0506864 -0.0454119 -0.0648583 0.0527341 0.0604057 0.0502641 -0.0712797 -0.0567091 -0.0157095 0.0214205 0.0301722 -0.032104 -0.0222509 -0.0478273 -0.0482593 0.0405725 0.0523725 0.00318186 -0.0700023 0.00207552 0.0329472 -0.0616501 -0.0272683 -0.0517787 0.00479172 -0.028477 -0.0654866 0.0213018 0.0102642 -0.0629034 -0.0210122 -0.0413123 -0.00229711 0.0606245 0.0122481 -0.0495162 0.0171698 0.0654842 -0.0665184 -0.0256614 -0.0426049 0.0104896 -0.0143664 0.0159937 -0.0493135 0.0306733 -0.050185 0.0419664 0.0397203 -0.0211985 -0.0129101 0.00745095 -0.0452455 -0.0602935 0.0451201 0.0369614 -0.0337523 -0.0593424 -0.0683318 -0.053395 0.033471 -0.0229858 0.0399799 0.0467358 0.0337202 -0.0655014 -0.0304536 0.0456742 -0.0470962 -0.0425812 0.00886531 0.0567288 0.0383218 0.0259856 -0.0322807 -0.0132759 -0.0373348 -0.0166212 0.0344163 0.0554025 0.00331369 0.00241319 -0.0411252 -0.013434 0.00356149 -0.00294279 -0.0288722 0.000463662 -0.0638821 0.0207728 0.035245 -0.0599623 0.0194876 0.0201578 0.0221743 0.0541499 -0.00397431 0.0277693 -0.0205992 0.0642187 -0.00931138 -0.0151629 -0.0372699 0.0113291 -0.00910126 -0.00102207 -0.0291525 0.0594372 -0.0342871 -0.0317752 -0.019661 -0.0609595 -0.0503324 0.0368585 -0.0529165 0.0150098 -0.0395044 0.0233624 0.0375182 0.00360298 0.0168185 -0.0592855 0.0369895 -0.0285569 -0.00791421 0.0166879 0.0421774 0.0435296 -0.0400043 -0.0348511 -0.0632907 0.0194692 -0.0187979 -0.00903396 0.0114945 -0.0635474 -0.0087228 -0.00309866 -0.0101124 0.00786537 0.045661 -0.00157187 -0.0282297 -0.0481894 0.0133189 0.0486122 0.0432701 0.0323631 0.0133378 -0.0596233 -0.00989616 -0.0609973 0.0445804 -0.0324285 0.00488664 0.0134789 -0.0272599 0.0491516 -0.0493887 -0.0556611 -0.00650157 0.043386 0.000449402 0.0503267 0.0431611 -0.0388804 -0.0292246 0.046912 -0.0542785 -0.0455958 0.0201422 0.00611788 0.0281408 -0.039858 0.0488715 -0.0497786 -0.0608344 0.00760572 -0.0456988 -0.0157034 -0.043751 0.052284 -0.0255723 -0.0406767 -0.00335213 -0.0316344 0.000287821 0.0414815 -0.0192619 -0.056065 -0.0151201 -0.0591437 0.0337093 0.0350136 -0.0568912 0.0349183 0.0367501 0.00529656 0.0439167 0.0437387 0.0155803 0.0581399 0.0573268 -0.0342533 0.0014028 -0.00428253 0.00312105 0.049282 -0.0139534 0.00886118 0.0259414 -0.0561294 -0.0308679 0.0247203 -5.89933e-05 -0.0409398 -0.0259764 -0.055376 -0.042655 0.0333367 0.033289 0.0279361 -0.00360345 -0.0424433 0.0240993 -0.023717 0.0410304 -0.0161316 -0.0435281 -0.0175212 0.0541501 0.0174207 -0.0130801 -0.00230522 -0.0217199 0.0457736 0.0448282 -0.00518752 0.00429399 -0.00444009 0.0300184 0.0190113 -0.0241696 -0.0232798 -0.0232024 0.030536 -0.0431376 -0.0385376 -0.0505104 0.015612 0.0524167 -0.0306458 0.0281573 0.0071003 -0.0309749 0.043642 0.0311974 0.0170014 -0.0426518 0.0236848 0.0311222 -0.000538101 -0.0405458 0.0493745 0.0168853 -0.0402342 0.0212081 0.0404793 -0.00240662 -0.0257205 -0.0267213 0.0245537 -0.040242 0.0080392 0.0121673 0.0262217 0.0268407 -0.00520358 -0.0232395 -0.0126045 0.0133247 -0.0558919 -0.0148954 -0.0534389 -0.0118483 -0.039419 0.00260276 0.0148721 0.000723556 -0.0503348 -0.0407776 0.0402038 0.0111481 0.0384759 -0.0506509 -0.0141133 0.0199379 -0.0012148 -0.0525298 -0.00863674 0.0541117 -0.0506507 -0.0481919 0.00977822 0.0130917 -0.0508869 -0.0152055 0.0414629 0.049754 -0.0376287 -0.0462295 0.0554609 0.0228508 -0.035942 0.0438108 0.0518155 0.0451571 -0.0404587 -0.0356929 0.0393744 -0.00497416 0.0316951 -0.0460798 0.0416853 0.00456995 -0.0269178 -0.0271445 0.020127 0.0295748 0.0531797 -0.0167728 0.0456932 -0.0506345 0.0433303 -0.0227311 -0.0525544 -0.0346702 0.0369116 -0.0223266 -0.0230404 -0.0166604 -0.0265127 0.0107263 -0.0352479 -0.0410107 -0.0407092 0.0528882 0.0374052 -0.00771739 -0.0405662 -0.0485242 0.0517485 -0.0379621 -0.0456319 -0.0340073 0.0356129 0.000692811 0.0126044 -0.0159066 0.00318242 -0.0313064 -0.0393331 0.00989755 0.0144751 -0.01971 0.0462144 -0.0236191 0.0473116 0.0410486 0.0200798 -0.0402243 0.00453165 -0.0156927 -0.0419299 0.0456707 -0.0410761 0.0162748 0.0368938; #A 5000 -0.0393542 -0.00196228 -0.0395045 0.0255002 0.0511858 -0.00653776 -0.0398528 -0.0340731 0.0173411 0.0287314 -0.0100779 0.0307056 0.0463665 0.0104312 -0.0230735 -0.0070575 0.0252881 0.0405424 -0.00306335 -0.0221983 -0.0127328 -0.0212557 0.0269768 -0.0158985 0.00662493 -0.0319314 -0.0135124 -0.0435059 -0.0325803 0.0500957 -0.0426037 -0.0155624 0.0289484 0.0186468 -0.0354072 0.0112634 0.0342612 0.0166671 0.0414571 -0.0175906 0.0255382 0.0270839 -0.036292 0.0159587 0.013139 0.00784298 -0.0236806 -0.0122556 0.0274942 0.0493921 -0.0338949 -0.0429578 0.0439793 -0.0499299 0.0344582 0.00558094 -0.0153389 0.0291445 0.0308819 0.00481129 -0.00487095 0.0486699 -0.0298781 0.0116789 -0.00724055 -0.0243098 0.017617 -0.0150288 -0.00566885 -0.0407213 -0.0453717 0.0277557 0.0160734 0.0360472 0.0133025 -0.0416762 -0.0488521 -0.0349643 -0.00433518 -0.00308789 0.0148841 -0.0255113 -0.0435162 -0.00797818 -0.0191737 -0.0483462 -0.0326003 -0.0426646 -0.0299687 0.0391588 -0.0409314 0.0376386 0.0324041 -0.0200262 0.0277701 0.0147253 0.0033409 -0.0472799 0.0342182 0.0077009 0.0152215 -0.0337071 -0.0421118 0.0268943 0.0118276 -0.0357644 0.0277433 0.0409954 0.0160797 0.0466664 -0.0351251 -0.0289297 -0.0139166 0.0431998 0.0293347 -0.00562776 0.0312102 -0.0252821 0.0254421 0.0109461 0.0307295 -0.0395981 0.00891449 -0.00335426 -0.00692795 -0.0385507 0.0118998 -0.00483054 0.00718809 0.0242607 0.0323715 0.0398021 -0.0162254 -0.0206655 0.000338295 0.00662781 0.0332064 0.0107693 0.00147083 -0.0395099 -0.0264493 0.026703 0.00766221 -0.0407465 0.0327991 -0.00605662 -0.0391348 -0.0220327 0.032846 0.0113022 0.0167463 0.0422393 0.0426748 0.0359949 0.0240326 0.014037 -0.0156643 0.0058864 0.000564022 -0.0454364 -0.0434167 -0.018009 0.0282245 -0.0454354 -0.01833 0.0373722 0.0363274 -0.00901233 0.00741625 -0.0104381 0.0204505 -0.00939631 -0.0228478 -0.024615 -0.0371102 0.00513229 -0.0341881 0.0446212 0.0024245 -0.0447066 0.0209879 -0.0355709 0.0397021 0.0302033 -0.0149871 0.0345601 0.043904 0.0287797 0.0124106 0.0351806 -0.0257131 -0.0165974 -0.0129035 -0.00392177 0.0361905 -0.00567519 -0.00700474 -0.00211281 0.0251807 0.00137758 -0.0419143 -0.000373829 -0.0151331 0.0227277 -0.0123258 0.0433797 0.0385314 -0.0280993 -0.0324154 0.0387348 0.0275871 0.0249003 0.0271395 0.00981073 0.00753583 0.0434236 0.0135333 0.0110381 0.0168609 -0.0135054 -0.00404699 -0.020188 0.00231108 -0.010937 -0.0399919 -0.0409888 -0.0171504 0.0298237 0.00349253 -0.00766079 0.0168119 -0.0290846 -0.00787 -0.0422959 -0.022751 -0.0399064 -0.0298536 0.02288 -0.0071224 -0.00631744 0.0300497 0.00725577 0.0087795 0.019431 -0.00552912 -0.035427 0.0125501 -0.0262667 0.0130493 0.0144869 -0.0185109 0.00757675 0.0311167 0.0306346 -0.0220458 -0.0268595 0.00370783 0.0267 -0.0293998 0.0296254 0.000472044 -0.0293742 -0.02775 0.00693447 0.0377517 0.0394748 -0.0121898 -0.033844 -0.0234596 -0.021986 0.025408 0.0241186 -0.0195873 -0.0220965 0.0041971 0.0375837 0.0372816 -0.00450142 -0.0276755 -0.0283418 -0.0367429 0.00645727 -0.0278253 0.0351893 0.039714 0.0302637 -0.0302578 0.0186688 -0.0122436 0.011871 0.00902879 -0.034019 -0.0272722 -0.0306864 0.0189677 -0.0381459 0.0310177 -0.00322373 0.00773604 0.0247043 -0.0275751 -0.0340372 -0.00838762 0.0219277 -0.0134692 -0.0246823 -0.0145568 0.00700415 0.0170113 0.0109062 -0.0266197 0.0112442 0.00563256 0.032375 0.0193303 0.0187636 0.0317152 -0.00240955 0.0384891 -0.0382025 0.0336344 -0.0145893 0.0274722 -0.027783 -0.0108216 0.0207759 0.0339571 0.0190359 -0.006137 0.00163232 0.0291338 -0.0354109 0.00540653 0.0373344 -0.00252632 0.0285485 -0.0363362 0.0212258 0.00507736 0.0189664 -0.0339366 0.00692572 0.0149148 -0.00815712 0.0334871 -0.0219995 -0.00461646 -0.0092977 0.0160787 0.026494 0.00724233 -0.0353319 0.0187905 0.0103435 -0.0366982 0.0133625 0.0343518 0.000782209 -0.0155576 0.0359331 0.0220618 -0.021625 -0.0309777 0.0140606 -0.0341232 0.00928641 -0.0145241 0.00510572 -0.0121599 -0.0163166 0.0341204 0.00358084 -0.011356 -0.0197571 0.0208519 -0.0254314 0.0271882 -0.032862 0.0120351 -0.0201644 0.000803713 -0.0239378 0.0177704 0.0218383 -0.0163355 -0.00639014 -0.0157537 -0.0160172 0.0202201 0.0217064 -0.0102928 0.0341513 -0.0213431 0.00759152 -0.024603 0.00676163 -0.0222613 0.0142114 -0.0218642 -0.00934241 -0.0203606 -0.034179 -0.0263248 -0.02789 0.030702 0.000992049 -0.00318624 0.0135998 -0.0304553 -0.0360112 0.0229038 0.0116172 -0.0070173 0.0113646 -0.0214184 -0.0163342 -0.0357606 -0.00282545 0.0223615 0.00694399 0.0129137 -0.0325714 0.011624 0.0329583 0.029184 0.0172726 -0.0354394 0.0098548 0.0077816 0.0266736 -0.00462341 0.0197581 0.0110307 -0.0121058 0.0204189 0.00550193 -0.0265742 -0.0104511 0.0186341 0.015385 -0.0132896 0.00724748 -0.0130593 -0.0323219 -0.0011485 -0.00268288 0.0193156 -0.00157148 -0.00771392 0.00587011 0.0173596 -0.0186246 0.00123877 0.0141939 0.0163202 -0.0200993 -0.0276147 0.0131608 0.00114019 0.0134933 0.0264803 0.0241032 -0.0143671 -0.0152403 0.00764445 -0.00127 0.00386759 -0.0311437 -0.0131253 0.0128002 0.0161112 -0.034189 -0.0152844 -0.00577202 0.00461771 0.0164799 0.0238382 0.0188463 -0.0177612 -0.00676025 0.0277532 0.00624145 -0.0161013 0.0213061 -0.0246767 -0.0203412 -0.0260584 0.0310902 -0.032448 0.000426576 0.00760087 0.00896306 0.00779005 -0.0133629 -0.0295935 -0.00852072 -0.0292625 0.0198787 -0.026316 0.0097659 0.0213431 -0.00329152 -0.00625886 -0.0145622 0.0131622 -0.0330553 0.0321061 -0.0240934 0.00658835 0.0188772 -0.00799567 -0.0303709 -0.0305842 -0.0135502 0.000766027 0.0303699 -0.0079512 0.0304219 -0.0108186 -0.00277997 0.0246149 -0.0163009 -0.019254 -0.0113814 -0.00605613 0.0268266 -0.0312632 0.0035271 0.031133 0.00563029 -0.0261579 -0.00010148 -0.0317157 0.00498015 0.0199929 -0.0125924 -0.0128112 0.0267811 0.030621 0.00592838 0.0211598 0.011063 0.0306775 -0.00713217 -0.016563 -0.000153808 0.00998814 -0.0127829 -0.0256039 -0.00407323 0.0273841 0.0281751 0.0254574 0.0302617 -0.0189134 0.00886214 0.0221959 -0.00816693 -0.0026607 -0.0112579 -0.0100098 -0.0214526 -0.019655 0.0139618 -0.0175742 -0.0311659 0.0302425 0.0197789 0.0189837 0.0139102 0.0282447 -0.000978465 0.0087048 0.00750488 0.0203648 -0.00338495 0.0306976 -0.0300904 0.0220892 -0.00350631 -0.0223461 -0.0279493 -0.00356 0.010463 -0.0112176 0.015443 0.00067709 -0.0029824 0.00309044 -0.00882102 0.00985513 -0.0202238 -0.0235026 0.0193252 -0.0280124 -0.0035058 0.0181602 0.00932876 0.0280228 0.00402085 0.0262038 0.0288203 -0.0104209 -0.0191415 -0.0224209 0.0188419 0.012589 -0.0176093 0.0166763 0.00872633 -0.0133596 -0.0288034 -0.00916027 -0.0162839 -0.00600751 0.0225636 -0.00933799 0.00760943 -0.0268258 0.00756555 -0.0236849 0.00306753 0.0245171 0.00535679 -0.0134214 0.0222017 -0.0110743 0.0162062 -0.0234565 -0.00166038 0.0165334 -0.0118238 -0.00512771 -0.015137 0.000228615 -0.0258693 -0.00658065 -0.00374698 -0.00532025 0.00962757 -0.0256081 -0.0168967 -0.0248372 0.0081685 0.00421253 -0.00500265 -0.00931136 0.0183547 -0.0170899 0.00951147 0.0124904 -0.0262321 -0.0231377 0.00822312 0.000261541 -0.0235516 0.0164779 0.00820669 0.00945335 0.0196877 -0.00195002 -0.00644181 -0.00134249 0.0145204 0.0260037 -0.0243937 0.0223527 -0.00127858 0.00105853 0.00949498 0.0117393 0.0180751 -0.0108431 0.000351871 -0.00554833 0.0244735 0.00920021 -0.0257016 0.0164368 0.0130523 -0.0211753 0.023498 -0.00364992 0.00356369 -0.0200716 -0.0102553 0.0117945 -0.0192122 0.00759421 -0.00404721 0.0144578 0.0150835 -0.0139941 -0.00921544 -0.0230203 0.0103899 -0.010874 -0.0262482 0.0226062 0.0173416 0.00654818 0.0107668 -0.00558396 0.0092311 0.0270139 -0.00814182 -0.00389109 0.00147435 -0.00166899 0.00204733 -0.0105436 0.0200326 -0.00993736 -0.00221244 -0.0211547 -0.0232757 0.0172959 -0.0135036 0.0175121 -0.0116558 0.0154806 0.00177599 -0.0127333 0.0096061 0.0152102 -0.0136831 0.00684059 0.0181732 -0.0180968 0.00815232 0.0246929 -0.00270683 0.0152154 0.0108486 -0.0127106 -0.0154602 0.00548467 0.00246351 -0.00983261 -0.0245624 0.017442 -0.00819663 -0.00512714 -0.001171 -0.0253217 -0.00874963 0.00745554 -0.00423232 0.0129023 -0.0193236 -0.019046 0.0244267 -0.0145084 -0.0117025 0.0165416 0.00959039 -0.00327925 -0.0230783 -0.0175303 0.0237056 -0.0126248 0.0015409 -0.00170665 0.0122742 -0.0192814 0.0192027 -0.0215041 -0.00378023 0.00502205 0.0206181 -0.0145179 -0.0218108 0.00536399 0.0196029 0.00615324 0.0149935 -0.00318976 0.00504882 0.0229519 -0.000379882 0.000678307 0.00679265 0.0206036 0.0110231 0.0198274 0.0226698 -0.0197663 0.0205461 0.00213612 0.00947657 0.0100839 0.0145917 -0.00941467 -0.0145385 0.0158895 -0.0214988 0.010719 -0.00520229 0.00686184 -0.00857203 -0.00226596 -0.0129044 -0.0101999 -0.0115623 0.00655432 0.00521082 1.49417e-05 -0.0205781 0.014954 -0.00859438 0.0221554 -0.0165432 0.0103942 -0.00205722 -0.00230601 -0.0231207 0.0143404 0.0186194 0.0129017 -0.000916066 -0.00220816 -0.0193899 -0.00965066 -0.0199019 -0.0215391 -0.012404 -0.0027423 0.0139186 0.00824554 -0.00277445 0.0109308 0.0190924 0.00673881 -0.00726347 0.00982854 -0.0125035 0.0125356 0.0204165 0.00339342 0.00304483 -0.0071673 0.00277898 0.00241176 -0.00986739 0.0210476 -0.0104765 -0.0215716 -0.00598199 0.018269 -0.00575923 -0.00117827 0.000558157 0.000799214 -0.0138959 0.0222705 0.00368553 -0.0140344 -0.0142196 0.0110718 -0.00953418 -0.0190624 -0.013684 -0.0168478 -0.016059 0.00623526 -0.0208593 0.00552337 0.00485228 0.015861 -0.00917799 -0.00583312 0.000184284 -0.00995912 -0.00606965 0.00694255 0.0115666 0.0142815 0.0124539 0.0206117 -0.0104885 -0.0156433 0.0105506 0.0172859 -0.0167672 -0.0188578 0.0196248 0.0126698 -0.0212558 -0.00123517 0.0053531 -0.0168022 0.0196231 -0.0198154 0.0160423 0.00603325 -0.019202 0.0180997 -0.0159615 -0.0136462 0.0219116 0.0100511 -0.0158867 -0.00283141 -0.0157414 0.0144903 0.0133346 -0.0144251 -0.00321572 0.0179711 0.0060452 -0.000453814 -0.0128724 0.00237529 -0.010097 0.00679528 -0.00230233 -0.000426918 -0.0112403 0.0104494 -0.0143832 0.0043097 -0.0180423 -0.0213982 -0.0170473 0.00758815 0.00427954 -0.0205157 0.00637186 0.0184919 -0.00258927 0.0034194 -0.0202095 -0.0104672 0.0165338 -0.00858594 0.00956101 -0.0120296 0.0182227 -0.0205114 -0.0137418 0.0140703 0.00206474 0.0178937 0.00756178 -0.0181564 -0.00898125 -0.00204118 0.00390421 -0.0169516 -0.0191083 0.0163595 0.010536 -0.00827372 -0.0151371 0.0120738 -0.0143304 -0.0187362 0.0042662 -0.0175367 0.0161688 -0.0132563 0.0104587 0.0184207 -0.00747824 -0.00926269 0.019672 -0.000227213 -4.93614e-05 0.00672197 0.0124092 -0.0164769 0.0151886 -0.0130666 -0.0126055 0.00185803 -0.0126899 0.00680148 -0.0163191 0.0174043 0.00754822 -0.010389 -0.00891278 -0.00936481 0.00106177 -0.00803346 -0.00631122 0.0158149 -0.0013943 -0.00924554 -0.0178548 0.00342368 0.0115621 -0.0150373 0.0155283 -0.00194154 -0.000263668 0.00543965 0.0136427 0.00237309 0.00829598; #A 6000 -0.00415624 -0.000696817 -0.0068956 -0.00441729 0.0019124 -0.00994421 0.00544109 -0.0107524 -0.00688871 -0.0191472 0.00980627 0.0136012 -0.00853998 0.0149026 0.0158101 -0.0102944 -0.00703207 -0.00932769 0.00869209 -0.00367468 -0.00248009 -0.0140341 -0.0064184 -0.00613189 -0.0101614 0.00603585 -0.00944578 -0.012584 -0.0119589 0.0159975 -0.0179967 0.00394682 0.00503039 -0.018069 0.00421072 0.00358945 0.00141428 -0.00371846 -0.000451157 -0.00795342 -0.0184752 -0.00624814 0.00284223 -0.0113389 0.00215477 0.0107458 0.0128081 0.004707 -0.0157464 -0.00205935 0.0071758 -0.0057573 0.00545014 -0.0173458 -0.0146649 0.00153686 0.0182332 0.0135034 0.000573806 0.0176143 0.0102043 0.00495148 -0.00226964 -0.0027184 0.00358526 -0.000268393 0.0133367 -0.00505271 0.00891738 -0.0059008 -0.00440149 0.0137257 0.00736476 -0.00447597 -0.0158908 0.0131164 -0.0029453 0.0153524 -0.0142107 -0.00207265 -0.00701939 -0.00152781 -0.0105751 0.00571729 0.017904 0.0155008 0.00675102 -0.00406381 0.0128959 -0.00647055 -0.00373894 0.000911127 -0.00897597 -0.00262861 -0.00633251 -0.00268589 0.000508027 0.0156382 0.0174605 0.00222017 0.00934837 0.00851019 0.00346265 -0.000714789 -0.00464354 -0.00185306 0.0131665 0.0159124 -0.0100197 -0.00949823 0.00844641 -0.00232659 0.00764758 0.0124051 0.00623116 0.00745457 0.00305001 -0.0169756 0.0126202 0.0129007 -0.00634706 0.011427 -0.0153664 -0.00198253 -0.00162452 0.00782326 -0.00976682 0.0117832 0.00360078 -0.00240576 0.0140114 -0.0147691 -0.0102683 -0.0070581 -0.0024115 0.00331639 0.0163592 0.011971 0.00577548 0.0033717 -0.00709689 0.00454702 0.00936138 -0.00526991 -0.0153408 -0.0100832 0.000642434 0.01288 0.000498177 -0.00150308 -0.00263678 0.016551 0.011056 -0.00968153 0.00503265 -0.00505772 -0.00871436 0.0156361 0.00506687 0.0142256 -0.0134275 -0.0159076 0.000838736 0.00807715 0.00469173 0.00579284 -0.0112236 0.00738888 0.000590938 0.0131974 -0.0127025 0.0136546 0.016069 -0.013764 -0.00805516 0.0135695 -0.0161758 -0.0146838 -0.0117244 0.0012964 0.0121171 -0.00162957 -0.0114965 0.00813967 0.012202 -0.00767622 -0.00485804 0.0115648 -0.0016412 0.00299315 -0.0104635 0.0137193 -0.00953992 0.00830797 0.00787246 -0.000931844 0.00617875 0.00243679 -0.0136263 -0.00439747 0.0140785 0.0128465 0.0111111 -0.014614 0.00547695 -0.00043756 -0.00943784 0.0126649 -0.00583727 0.0141294 0.013763 -0.0139148 0.00835467 -0.0100149 0.00971122 -0.0111374 0.0134005 0.00908274 -0.00604084 0.00328656 0.0133774 -0.0145654 -0.00599133 -0.0125101 -0.0107515 0.00680408 -0.000325614 -0.0118182 0.0138108 0.00539846 -0.00162669 0.0150866 -0.0077846 -0.00983807 0.00186988 -0.0131507 0.00541208 0.00897155 0.00457103 -0.0135065 0.00610948 -0.000535608 -0.00460293 0.00871374 -0.00621332 0.00957678 -0.00832961 -0.0103758 -0.00103805 0.00355901 0.0053099 -0.00879203 0.0013221 0.0059394 0.00260136 0.00463818 -0.00995323 0.0134747 0.00465264 0.00123242 -0.0142052 0.00472427 0.00227267 -0.0107244 -0.00356392 -0.014226 0.01147 -0.0106946 -0.00419052 0.0129108 0.00430916 -0.0115977 0.0114194 -0.00896183 0.00744062 -0.0106695 0.00120492 0.00187962 -0.0101051 0.00815093 0.0127757 0.00128724 0.00381549 -0.00649415 -0.0106913 -0.0126856 0.00162307 0.0106372 -0.00105646 0.000759401 -0.00944783 0.003695 -0.000622752 -0.00810069 0.00694932 -0.00666714 -0.0049329 0.00637464 0.000313281 -0.00397912 -0.012539 0.0100993 -0.00769579 0.00827231 0.00307657 0.00372272 0.00245436 -0.00174724 0.00322788 0.00259154 -0.00330018 -0.012803 0.00966203 -0.00333608 -0.0047221 -0.00178585 0.00061153 0.000488463 0.00674246 0.013385 -0.00617633 -0.000345642 0.0114619 -0.00678925 0.0119141 -0.0131648 -0.00704749 0.0103593 -0.0120114 0.00353014 -0.0114993 0.00975182 -0.0103883 -0.000492028 -0.00236083 0.0104786 0.00193345 -0.00333784 -0.00673498 -0.0110436 0.00303321 -0.0109001 0.0054089 0.0105967 0.00400287 0.0113457 0.0111451 -0.0049476 0.00226132 0.000695522 0.00504942 -0.00655867 0.00829835 0.0104218 0.00878395 -0.00599459 0.0129605 0.00651009 -0.00415387 -0.000239656 0.00110887 -0.0121616 -0.0067428 0.00692724 0.0100697 0.00612911 -0.00648118 -0.00957264 7.43722e-05 0.012074 -0.00910041 -0.00139455 0.00336378 -0.00672661 0.0102848 -0.00320329 0.00813486 -0.0125676 0.0019356 0.000652684 -0.00853737 0.000335082 0.010822 0.0100799 -0.00465602 0.00800058 0.00802073 0.00158731 -0.00629797 -0.00991924 -0.00413542 0.00202425 0.00648812 -0.00658959 0.00425872 -0.00758605 0.0056804 0.00157824 0.00664367 -0.00612234 -0.00925878 0.0118201 0.00471272 0.00956243 0.00655799 -0.00691549 0.00646273 -0.00111364 0.00804885 -0.00205703 -0.00120619 0.00477628 -0.0097136 0.0100058 0.0119132 -0.00762139 0.0118967 -0.00470258 0.00679191 0.0120455 -0.00500549 0.00622948 0.000180255 0.00360591 0.00431009 0.00128299 -0.0112784 -0.00563413 0.0113872 0.00936434 -0.011721 -0.011612 -0.00803162 0.0108969 -0.00480869 0.00675777 -0.00901979 -0.00664605 -0.0101133 -0.00853961 -0.00816168 0.0109954 0.00480339 -0.00129658 -0.00590564 -0.00802782 -0.0019871 -0.0034078 -0.0100285 -0.00187911 0.00307343 -0.00114495 0.0052001 -0.00232444 -0.00820701 -0.00703533 -0.00518592 -0.00473689 0.0107942 -0.00924031 0.011078 0.0036617 0.0114073 -0.00797995 -0.00376638 -0.000655794 -0.00292324 0.000190772 0.00638546 -0.00181642 0.00244996 -0.00187069 -0.00536883 -0.000599321 2.26599e-06 -0.00242105 -0.00111952 0.00400901 0.00525354 0.00335206 0.00599612 -0.00629713 -0.0048291 0.00638384 -0.00789001 0.00461921 0.000661017 0.0046452 0.000374234 0.00584004 -0.00753087 0.00691852 -0.00889109 0.00653527 0.00616049 -0.00184959 -0.00289828 -0.00935684 -0.00381108 -0.00158815 0.00775583 -0.0107096 -0.00731076 -0.00451287 0.00281779 0.00513913 0.0106971 -0.00732567 0.00122552 0.00891265 -0.000289398 -0.00383856 -0.00396602 0.00554205 0.00305142 0.00811867 -0.00747804 -0.00277443 0.00955238 0.00408973 -0.00255205 -0.00476311 -0.00524992 0.00080008 0.00336379 -0.00547682 -0.00238136 0.00112224 0.0101167 -0.00378484 0.0014342 0.00862876 -0.001253 -0.00701932 0.000399364 0.00533072 0.00477878 0.00146892 -0.0030616 -0.00270137 -0.00174608 -0.00419647 -0.00607631 0.00231254 0.00881827 -0.00814595 0.00250497 0.0020859 -0.00335891 -0.00884181 0.00384349 0.00282386 0.00681132 -0.00744987 0.00832993 -0.00226244 -0.00961872 0.00847834 0.00709161 -0.0038263 0.00808965 0.00549195 0.00023184 -0.00325556 0.00258806 -0.00855207 -0.000752898 0.00613222 -0.00926295 0.0055856 0.00455309 0.00279553 0.0073879 -0.0047821 -0.00147689 0.00533539 0.00659909 -0.00379347 -0.00723905 0.00632066 -0.00387431 -0.000328957 -0.00914186 -0.00889246 0.00694213 0.00286885 0.00575685 -0.000260383 0.000717701 0.00525553 -0.00558449 -0.00132715 0.00673944 0.00948032 0.001237 -0.00822897 0.000432813 0.00798637 0.00530391 -0.00111866 -0.00923644 -0.00615325 -0.0040372 0.00182913 0.00527287 -0.00505642 0.0034533 -0.00866432 -0.0046285 -0.00131004 -0.00789745 -0.0016421 0.00274839 -0.00369784 -0.00439847 -0.00177286 -0.00157354 -0.00695548 0.00126102 0.0084425 0.000846752 0.00423457 1.80526e-06 0.00302024 0.000870243 0.000642964 -0.00668573 -0.000257542 -0.00519521 0.00700762 -0.00458871 0.00281213 -0.00645872 0.00122672 -0.0056971 0.00648207 0.00867381 0.00281538 0.000217607 0.00309908 -0.00161187 0.000570645 -0.00217441 -0.00460582 0.00837656 -0.00522658 0.00309782 -0.00505405 -0.000249526 0.00678782 0.00687497 0.00733111 -0.00182134 0.00397699 0.004503 0.00446779 0.00384663 0.00811386 0.00246764 0.00796776 0.00547054 -0.00614416 0.00287878 -0.00104056 0.00699141 0.0045504 0.00154213 -0.00798452 -0.00315273 0.00795377 -0.000887691 0.00703426 0.000451459 0.00292211 0.00756976 -0.00537843 0.00616762 0.00662304 0.000693167 0.00819479 -0.00787582 -0.00486398 -0.00154068 -0.000331632 -0.00101005 0.00326201 -0.00836079 -0.000946991 -0.00705592 0.00548557 -0.000287741 0.00575631 -0.00165974 0.00682122 0.00513983 0.00500232 0.00414475 0.00108931 0.00252044 0.00457411 0.00250369 0.00123747 -0.00783619 0.00815319 0.00535235 0.00664007 0.00277628 -0.00634858 0.00693949 -0.00796969 -0.00569942 -0.00521429 -0.00737052 -0.000953865 0.00491095 0.00459751 -0.00777872 0.00106981 -0.00330823 -0.000241057 -0.0021506 0.00305323 -0.00684254 0.000392829 -0.00666436 -0.00270943 -0.000631803 0.00357466 -0.00539959 0.00463917 0.000561701 0.00278625 0.00508852 0.00698249 0.00453113 -0.00516603 0.000390903 -0.00336442 -0.000346234 0.00625883 0.00397824 -0.0034124 0.00464856 -0.0027281 -0.000171519 0.00574656 0.00341018 0.0068112 -0.000144583 -0.00343479 0.00241385 0.00188186 -0.0032223 -0.00602009 0.00510589 -0.00196959 0.00713703 0.00171902 -0.00133564 -0.00444438 0.00181753 -0.00392334 -0.00150835 -0.00207397 0.00264568 -0.00023248 -0.00372117 0.00303993 0.00535172 0.00582873 -0.00334202 -0.00145031 0.00677191 -0.00192953 0.00381611 0.00609037 -0.00255226 0.00450069 0.00482171 -0.00647374 -0.00457185 0.003953 -0.00564606 0.00146397 0.00118767 0.00220913 -0.00508979 0.00378037 -0.00544829 0.00631765 -0.000758023 -0.00356569 0.00127647 0.00342651 -0.00132303 -0.00053139 -0.00639242 0.00211487 0.00686293 0.00457668 -0.00677741 0.00367217 0.00693031 0.000109709 -0.0056087 0.00668105 -0.00268635 -0.00117296 0.000633955 0.00073129 0.00391722 -0.0029796 -0.00032747 0.00652338 0.00318832 -0.00476681 0.00642951 0.00512679 -0.000550768 -0.00637148 0.00258801 -0.000434806 -0.00207881 0.00501936 0.0005769 -0.00598839 0.00306277 0.00131242 0.00456832 0.00492596 -0.000364229 0.00368924 -0.00300515 0.00624044 -0.000101984 -0.00579298 0.00456466 0.0033801 0.00352436 -0.00193796 -0.00538547 -0.0010013 -0.00363141 0.00316447 0.00258578 0.00397272 7.32426e-05 -0.00592804 -0.00489491 -0.00256134 -0.00461048 0.00157552 0.00299565 -0.00116162 0.00546833 -0.00653401 0.00605421 -0.00583344 -0.000102999 -0.00163132 0.00430668 0.000613017 -0.00274036 0.00394767 0.0043353 0.000500727 0.00297508 0.00642978 0.00279212 -0.00131697 -0.00166925 -0.00361931 0.00635052 0.00307124 0.00467859 0.000157953 -0.0041396 -0.00387786 -3.96637e-05 -0.00594405 0.004538 0.000636011 0.00199898 0.00431232 -0.00198797 0.00570991 0.00515458 0.00269754 -0.00259141 0.00021307 0.00491967 -0.000841188 0.00501772 -0.00438227 0.00587819 -0.00430448 0.00493784 0.000884953 0.00114126 -0.00489208 -0.0018762 0.00134955 -0.000704233 9.6601e-05 -0.00422747 0.00357074 -0.00231087 0.00310459 -0.00252562 -0.00474673 0.00289105 0.00422197 0.00394171 -0.00442473 -0.00165724 -0.00519647 0.00179595 -0.00303408 -0.00460472 0.0055359 -0.00554993 -0.00311993 -0.00526743 -0.00139607 0.00472756 -0.00470327 -0.00569692 -0.00490357 0.00235673 -0.00469962 0.00594957 -0.0022596 -0.00189138 -0.00529548 -0.00290407 0.00248345 0.00116501 0.00461907 -0.00289347 0.000817177 -0.00137737 -0.000331419 -0.00290091 -0.00330871 0.00311629 0.00162668 0.00228447 0.00240663 0.00264494 0.000141734 -0.00174912 0.00276121 0.00191991 -0.00521268 -0.00362897 0.00404568 0.00181759 0.00401392 -0.00560135 0.00395664 -0.000417533 -0.00332313 0.00404794 -0.000407113 -0.00244768 -0.000844832 -0.00459653 -0.00200366 -0.00255671 -0.0016675 -0.00174874 -0.00462471 0.00326343 -0.003333 -0.00461084 0.00459572 -0.000997867 0.001187 -0.00491986 -0.0044466 0.00202877 0.00456872 -0.00143181 -0.00489486 0.00151451 0.00268962 -0.000999579 -0.000503175 -0.00500696 0.00334051 -0.000484283 0.00179534 -0.000911085 0.00470392 -0.00462098 -0.000642092 0.00300374 -0.00106155 -0.00275753 0.00372343; #A 7000 -0.00366511 -0.000187504 -0.00276465 -0.000741593 0.00390981 -0.00275427 -0.00240138 0.00178766 -0.000240882 0.00106678 0.0038377 0.00134534 0.00118228 0.00142952 0.00495766 0.00428164 -0.00073181 -0.00380605 0.004141 0.00329238 0.00412043 -0.000924552 0.00409433 0.0030707 0.0028785 -0.00169015 0.000681815 -0.00400839 -0.000852372 0.00172622 0.0050458 0.00279753 -0.00278715 0.000916581 0.0011024 0.00220133 0.00463995 0.00023603 0.00353001 -0.00268605 0.00190905 -0.00323425 0.000185316 0.00160354 0.00112536 0.00366507 0.00435999 -0.00214698 0.000173462 -0.00463112 0.00304186 0.000545125 -0.0043594 -0.00395446 0.00357005 -0.000149389 0.00266184 -0.000192151 -0.0025617 -0.00149379 0.00295938 0.00398381 0.00116856 0.000983791 -0.000470289 0.00468805 -0.00386401 -0.00421124 -0.000878618 0.00463717 0.00330842 -0.00136939 0.00257302 0.00386637 -0.000606719 0.000644801 0.00268202 0.00272001 -0.00429747 -0.002973 -0.00122302 -0.00238029 -0.0019048 -0.00194167 -0.00105275 -0.00180932 0.00369075 0.00449111 0.00108602 -0.000727567 -0.00462493 -0.00447425 0.000270582 0.00282172 -0.000790032 0.00302157 0.00281138 0.00433007 -0.00106531 0.000927573 0.000672724 0.00041894 -0.00188108 0.00259111 -0.00058196 -0.00157002 -0.00430614 0.0020234 -0.00258273 0.000712988 -0.00364694 0.000989157 -0.000320493 0.000770598 0.000320373 0.00139476 0.0020219 -0.000305856 0.000209689 0.000194659 0.000339529 -0.00248373 0.00242605 -0.00442525 -0.00268818 -0.00406333 0.00143206 0.00390977 -0.00214186 0.00313784 -0.0033679 -0.000504187 0.00258006 -0.0030176 -0.00227383 -0.00211656 -0.00071364 -0.00421009 0.00173381 -3.74375e-05 -0.00418691 -0.00060667 0.00313731 0.000407979 -0.00197202 0.00302782 0.00150468 -0.00206126 0.00357273 -0.00417955 -0.00178812 -0.00117102 0.00219369 0.00366747 -0.000389129 -0.00286355 -0.000829742 -0.00166881 0.0012307 -0.000409003 0.00235839 0.00381236 0.00379147 0.00175892 -0.00063482 0.00197625 0.00173719 0.000201661 -0.000539045 0.000163965 0.00300561 -0.00198298 -0.00184154 0.000174468 -0.00295544 0.00405365 -0.0019518 0.00294496 0.00308448 0.00181517 0.00257376 -0.00105944 0.0018101 0.00196185 1.87972e-05 0.000976331 0.00365526 -0.00105054 0.00192589 -0.0018327 0.00122318 0.00272368 -0.00114991 0.000611055 0.000510623 0.000235924 0.00239993 -0.00209424 0.00191202 -0.00130835 -0.00227094 -0.000750092 0.00338315 -0.000926495 -0.00314535 -0.00358187 0.00154935 0.00352348 0.00314067 -0.000610052 -0.00146622 0.00134122 -0.00176086 0.00367474 -0.00102654 0.00316209 0.00372399 -0.00120114 -0.00232571 -1.5526e-05 0.00238088 0.000977594 0.00352813 0.000880404 0.00334477 -0.00355549 0.00076888 -0.00359907 -0.00157962 0.000530542 -0.000926936 -0.000535788 -0.000261201 -0.00203682 -0.00135914 -0.0019526 0.000524705 -0.00248059 -0.00118685 -0.00059154 0.00135091 -0.00119415 -0.00275271 0.00167702 -0.00274619 -0.00160769 0.00178074 -0.00273907 -0.000404962 -0.00249791 -0.0030715 -0.000577595 -0.00200875 -0.00311199 0.00268047 -0.00165071 0.000198993 0.000784021 0.00163056 -0.00143553 -0.00197727 0.00131348 0.000979961 0.000388957 0.00296896 0.000282614 -0.000557539 -0.00215166 0.00210698 -0.0029319 0.00233265 -0.000814395 -0.00300738 -0.00056637 -0.000145151 9.06211e-05 -0.00191883 0.00133184 -0.000668271 0.000729665 -0.00281307 -0.00263324 3.09419e-05 -0.0033664 0.000351905 -0.00163809 0.00108633 -0.00139693 -0.00286396 0.000947288 0.000717225 -7.96466e-05 0.00299568 8.05601e-05 0.000474207 -0.000254219 -0.00127368 0.00271728 0.00104372 0.000803825 0.00254341 0.00308986 0.00314924 0.00224381 0.00013602 -0.000166545 0.000264243 0.00093217 -0.000551066 0.00105652 0.0023892 0.000774586 -0.00229897 -0.00140371 -0.000642444 -0.00242252 -0.000572923 0.00251547 0.000696168 -0.00199604 0.000365047 -0.000471981 0.00249436 0.00134411 0.00202802 0.00304056 -0.00184993 0.00247018 -0.000995782 0.00245877 -0.000382378 0.00247574 0.00261224 -0.00298509 0.000332964 0.00182675 0.000151014 -0.00114596 -0.000204853 0.00148878 0.00032427 0.000720775 0.00110882 -0.000575781 0.0020421 0.00132531 0.0010278 0.000888936 -0.000648348 0.000933168 -0.0029855 -0.000321166 0.00270458 -0.00136231 -0.001501 -0.00244745 -0.00187829 -0.00280234 0.000472387 0.000565255 0.00145725 -0.00268676 -0.00192942 -0.000664432 -0.00294255 -0.000512036 -0.000918315 -0.00154599 0.000284669 0.00143727 -0.000478407 -0.00040427 -0.000109848 0.0028488 -0.000727792 -0.00166952 -0.000671581 -0.00012293 -0.00159738 -0.000305264 -0.0023069 -0.00157145 -0.00208065 0.000388386 -0.00156651 -4.69965e-05 -0.000930423 0.00138183 -0.000623369 0.000501115 0.00126921 -0.00104063 -0.00143151 0.0023974 -0.00127358 -0.000195641 -0.00152184 -0.000933195 -0.00202556 -0.00186816 -0.00239214 0.000434392 0.000296265 -0.000933351 -0.00247686 -0.00153392 -9.2548e-05 -0.00119408 -0.00265131 0.00067055 0.00253555 -0.000571218 -0.00205406 -0.00114187 -0.00116688 -0.00242749 -0.000786613 -0.000586926 0.00166361 0.00157149 0.00149235 0.000495257 0.000959209 0.00156967 0.00031269 -0.00210506 -0.00187412 1.82359e-06 0.00102178 0.0024079 0.00110113 0.000358905 0.000259906 0.000626201 -0.00240959 -0.00226972 -0.0020638 0.00120476 0.000221496 0.00185887 0.00227631 -0.00147812 0.00162617 -0.000711171 -0.00224483 0.000141057 0.00118977 -0.000601443 -0.000961914 -0.0011228 -0.000815179 -0.000689285 0.00103577 0.00238246 -0.00010104 0.00143752 -0.000430605 -0.00189303 -0.00148814 0.00180545 2.13785e-05 -8.80706e-05 0.00176563 -0.000231867 -0.000136147 0.00088103 -0.00233628 -0.00123924 -6.49609e-05 0.00227506 -0.00199055 -0.00144904 -0.000475991 -0.000964888 0.000879524 -0.00136258 6.003e-05 0.000610289 0.00131404 -0.00207495 -0.00206497 -0.000183481 0.0003539 0.000327229 7.14213e-05 0.000806784 -0.00161148 -0.00218132 0.000138554 0.000199178 0.00163384 0.00200132 0.00117102 -0.00194541 -0.000633707 0.00143235 -0.000896201 0.000303631 0.000797749 2.02683e-05 -0.00204125 -0.000652378 0.000716223 0.00019284 0.000486206 0.00203344 -0.000129161 0.00150321 -0.00190223 -0.00103067 0.000852209 0.000422411 0.00042443 -0.00111185 -0.00141826 0.000157268 0.000238894 0.000496949 0.0011013 -0.000955452 0.000574008 0.00189348 2.02809e-05 -0.00190392 0.00015383 0.00192057 -0.00213902 0.000591492 0.000101176 -0.00179018 -0.00150852 -0.000179763 0.00064978 -0.000715048 0.00120651 -0.00156848 0.00121115 -0.00121513 -0.00172617 -0.00178074 -0.000620834 -0.00151619 0.00111192 -0.000143167 0.00155294 0.0019113 0.00134047 -0.000492327 -0.00137672 0.000968265 -0.000874964 -0.000915219 -0.000256472 0.00140949 0.00030397 0.000592286 0.00185772 -0.00105372 0.000334102 0.00174694 0.000397408 -0.0018271 0.000464709 0.000926912 -0.00152098 -0.000681608 0.00200389 -0.00112395 -0.00139163 -0.00136669 -0.000151552 0.00132495 0.00173761 0.00168276 -0.000868647 -0.00128204 0.00142762 0.0015066 -0.00138327 -0.00105602 0.000831831 0.00182197 0.00122859 0.00104825 0.000683809 0.00129134 -0.000126533 -0.00179592 -0.00154399 -0.00125564 0.00140669 0.000691995 -0.00191088 -0.000887805 -0.00105381 0.00166056 -0.000677418 0.00107483 0.00128622 -0.00170208 0.00165586 0.00127182 -5.8537e-05 0.00171177 -0.000284618 -0.000748637 0.000105313 -0.00103719 0.000163311 -0.000590853 0.00121246 -0.00109436 0.000100067 -0.00093423 -0.000516263 -6.85004e-06 -0.00158337 -0.000130206 0.000348133 0.000405299 -0.00153241 0.00150261 0.000531182 0.00140566 -0.00105482 0.00016086 -0.00129098 0.000723112 -0.00145611 -0.00133513 0.0012232 0.00129344 -0.000478715 -0.000663681 -0.00150719 -0.00060656 -0.00030109 0.00158502 0.00101226 -0.00140701 0.00135561 0.000480968 6.65659e-05 -0.000279672 0.00159597 1.89584e-05 0.00157269 -0.000982909 -0.000576339 -0.000701903 -0.000445313 0.000827745 0.00162667 0.000517396 0.000712157 0.000184248 0.00062584 0.000642718 6.85928e-05 0.000496598 -0.000733234 0.000955397 0.000155955 0.00137759 0.000499332 0.000455392 -0.00120656 0.00103082 1.4901e-05 0.000225786 -0.000484745 -0.000659626 0.00121048 -0.00134526 0.00123598 -0.00161614 -0.00042832 0.000577395 0.000472282 0.000512844 -0.000977183 0.00121774 -0.000963304 0.000960952 0.00129148 0.000215996 0.00107993 0.000530616 0.00130049 5.03879e-05 8.9034e-05 -0.000327616 0.000738059 -0.000917734 -5.79479e-05 -0.000168545 -0.0014806 0.00115962 0.000249977 -0.000654624 -0.000635412 0.00101003 -5.94644e-06 -0.000542385 -0.000113963 0.00148767 0.000227664 -0.0013074 -0.00124442 0.000603645 -0.000117982 0.000254127 -0.000364028 0.000847994 -2.5396e-05 -0.00101514 0.00135265 0.00102289 0.000960147 -0.000803015 -0.000410977 0.000960177 -0.000518785 0.000186285 -0.000560753 0.000910256 -0.000919881 0.000584688 0.000575482 -0.00120338 -0.000507326 0.000342111 -0.00035289 -0.000230313 4.14408e-05 0.000471153 0.000381739 0.000453756 -0.000678087 0.000684775 -7.98801e-05 7.32321e-06 -0.000183605 0.000654301 0.000293857 0.000169907 0.000446961 -0.000877792 -0.000763662 0.000465646 -0.000149125 -0.00074649 -3.23929e-07 -0.000182795 -0.00119208 0.000750768 0.000929929 -0.00124166 -0.000846275 0.00116309 0.00109558 -0.000487547 -0.000612723 0.000483871 -0.000390296 -0.00127733 0.000495983 0.000860036 -0.000371603 -0.000252935 0.000257549 -0.000933546 0.000965315 -0.00126123 0.000271344 0.000921392 0.000254889 0.000703931 -0.000998075 -0.000649716 0.000800376 -0.000720333 -2.66849e-05 0.00043096 0.000780302 -0.000911767 0.00105074 0.000383102 -0.000798142 -0.00043182 -0.00118734 -0.000311636 0.000918205 0.00035672 -0.000411242 -0.000394015 0.000803658 -0.000448771 -0.000501094 -0.000513658 0.000276994 7.8713e-05 -0.000623752 -0.000249027 0.000298042 -0.000772216 -0.00121197 0.000457695 -0.00102264 0.00114313 -0.000566038 0.00054376 0.000745965 0.000445467 0.000578019 9.81843e-05 0.000589986 0.000631636 -0.00112283 0.000737127 -0.000738701 -0.000929251 -0.000598803 -0.000499724 0.000699811 -0.000909508 -0.000173812 -5.60375e-05 -0.000281186 0.00115205 0.000313652 0.000158847 -0.000314294 -0.000342049 0.00084208 0.000279009 -0.000951053 0.00097975 0.000381621 0.00110003 0.000612416 0.000502587 4.99399e-05 0.00108605 -0.000397421 -0.00056556 0.0010831 0.000765768 0.000666775 -0.000866581 0.000153175 0.000832633 0.000428628 0.000671304 -0.000286629 0.000891534 0.000936587 0.000617276 -0.000106104 0.000978305 0.000262775 0.000512944 0.00103968 -0.000753957 0.000185186 -0.000703543 -0.000806803 0.000928909 0.000208686 -0.000649922 0.000282342 -1.70532e-05 -0.000216276 0.000173196 -0.000429282 -0.000217326 -0.000114256 -0.00085479 -0.00101682 0.000152625 -0.000130058 0.000989256 0.000408015 -5.7474e-05 0.000113575 0.000739916 0.000885654 -2.84317e-05 -3.79e-05 0.000444038 -0.000356821 0.000285846 -0.000704507 -0.00054816 0.000255126 5.3618e-05 -0.000487826 -0.000399388 0.000329556 -6.80992e-05 3.16737e-05 0.000791552 0.000852375 0.000883842 0.000349426 -0.000758799 0.000956303 -0.000325116 -0.000433593 -0.000206017 0.000182995 0.000432552 -0.000709109 -0.000587792 0.000144463 -0.000542222 0.000221813 0.000398853 -3.58494e-05 -0.000439569 0.000328883 0.0008936 0.000841519 -0.000153985 0.000105314 -0.000660163 0.00065255 -0.000551622 -0.00029604 -0.000837517 -0.000613375 -0.000315185 -0.000577076 0.000903336 0.000195992 -0.000698715 -0.000287443 0.000652557 -0.000847882 -0.000602999 0.000734798 -0.000276396 5.37002e-05 -0.000362195 -0.000266048 8.69006e-05 -0.000245696 0.000397817 0.000398377 0.000495721 6.94175e-05 -8.4496e-06 0.000407824 0.00019943 -0.000440473 -0.000606357 -9.61867e-05 -0.000556268 0.00076005 0.00028425 0.000534552 0.000365785 -0.000379468 0.000244476 0.000755801 -0.000157766 0.000313598 0.00037168 -0.00066158 -0.000167611 0.00051451 -0.000395033 -8.34493e-05 -0.000614052 0.000162628 -0.000360051 0.000117261 0.000591214 -0.0004677 0.000209374 0.000378413 2.17776e-05 0.000237748 -0.000130636 0.000613967 0.000306526 -0.00061335 0.000329124 -0.000145793 -0.000784542 -0.000496122 -0.000127046 0.000237644 0.000190446 0.000250731 5.90277e-05 -0.000533582 -0.000675686 -0.000454552 3.5334e-05; #X coords 0 1 7999 -1 100 70 1; #X restore 197 339 graph; #N canvas 600 60 470 473 makeglitch 0; #X obj 78 145 noise~; #X obj 201 198 line~; #X msg 201 145 1; #X msg 155 145 0 200; #X obj 198 236 *~; #X obj 78 310 *~; #X obj 78 351 tabwrite~ rtrig_buffa; #X obj 155 103 t b b b; #X obj 155 76 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 199 260 *~; #X obj 155 41 loadbang; #X connect 0 0 5 0; #X connect 1 0 4 0; #X connect 1 0 4 1; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 4 0 9 0; #X connect 4 0 9 1; #X connect 5 0 6 0; #X connect 7 0 6 0; #X connect 7 1 3 0; #X connect 7 2 2 0; #X connect 8 0 7 0; #X connect 9 0 5 1; #X connect 10 0 8 0; #X restore 197 437 pd makeglitch; #X obj 295 237 sig~ 1; #X obj 200 481 hsl 128 15 0 0.001 0 0 rtrig-odds empty event_odds -2 -8 0 12 -223855 -1 -1 2800 1; #X text 268 207 args: min gain \, max gain \, per-sample event odds ; #X obj 32 211 lyonpotpourri/rtrig~ 0.1 1 1e-05; #X obj 32 332 lpp-meters; #X obj 28 22 lpp-icon rtrig~; #X obj 32 266 lyonpotpourri/player~ rtrig_buffa 1 16; #X text 35 114 [rtrig~] randomly generates click triggers. Since a choice is made each sample \, the odds should be fairly low.; #X text 249 53 - random click generator; #X text 347 237 <= fixed increment of 1; #X connect 0 0 1 0; #X connect 1 0 8 0; #X connect 5 0 11 1; #X connect 8 0 11 0; #X connect 11 0 9 0; #X connect 11 0 9 1; pd-lyonpotpourri-3.0.1/rtrig~.c000066400000000000000000000057241430526361000165620ustar00rootroot00000000000000#include "MSPd.h" static t_class *rtrig_class; #define OBJECT_NAME "rtrig~" #define MAXFLAMS (16) #define MAXATTACKS (128) #define STOPGAIN (.001) #define RAND_MAX2 (0x7fffffff) typedef struct { int attack_count; // number of triggers per flam event float *attack_times; // trigger times in seconds int *attack_points; // trigger times in samples int fdex; // current flam float gainatten; // attenuation factor float amp; // current amp int atks;// number of attacks per flam long counter; // internal clock short active; // flag that flam is turned on } t_flam; typedef struct _rtrig { t_object x_obj; float x_f; short mute; float min; float max; float odds; } t_rtrig; static void *rtrig_new(t_symbol *s, int argc, t_atom *argv); static t_int *rtrig_perform(t_int *w); static void rtrig_dsp(t_rtrig *x, t_signal **sp); static void rtrig_free(t_rtrig *x); static void rtrig_mute(t_rtrig *x, t_floatarg tog); static void rtrig_min(t_rtrig *x, t_floatarg v); static void rtrig_max(t_rtrig *x, t_floatarg v); static void rtrig_odds(t_rtrig *x, t_floatarg v); void rtrig_tilde_setup(void) { rtrig_class = class_new(gensym("rtrig~"),(t_newmethod)rtrig_new,(t_method)rtrig_free, sizeof(t_rtrig), 0, A_GIMME,0); CLASS_MAINSIGNALIN(rtrig_class,t_rtrig, x_f ); class_addmethod(rtrig_class,(t_method)rtrig_dsp,gensym("dsp"),A_CANT,0); class_addmethod(rtrig_class,(t_method)rtrig_mute,gensym("mute"),A_FLOAT,0); class_addmethod(rtrig_class,(t_method)rtrig_min,gensym("min"),A_FLOAT,0); class_addmethod(rtrig_class,(t_method)rtrig_max,gensym("max"),A_FLOAT,0); class_addmethod(rtrig_class,(t_method)rtrig_odds,gensym("odds"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void rtrig_mute(t_rtrig *x, t_floatarg tog) { x->mute = (short) tog; } void rtrig_min(t_rtrig *x, t_floatarg v) { x->min = (float) v; } void rtrig_max(t_rtrig *x, t_floatarg v) { x->max = (float) v; } void rtrig_odds(t_rtrig *x, t_floatarg v) { x->odds = (float) v; } void *rtrig_new(t_symbol *s, int argc, t_atom *argv) { t_rtrig *x = (t_rtrig *)pd_new(rtrig_class); outlet_new(&x->x_obj, gensym("signal")); x->mute = 0; x->min = atom_getfloatarg(0,argc,argv); x->max = atom_getfloatarg(1,argc,argv); x->odds = atom_getfloatarg(2,argc,argv); srand(time(0)); return (x); } void rtrig_free(t_rtrig *x) { } t_int *rtrig_perform(t_int *w) { t_rtrig *x = (t_rtrig *) (w[1]); float *out_vec = (t_float *)(w[2]); int n = (int) w[3]; float rval; float min = x->min; float max = x->max; float odds = x->odds; if(x->mute) { memset( (void *)out_vec, 0, n * sizeof(float) ); return (w+4); } while( n-- ) { rval = (float) rand() / (float) RAND_MAX2; if(rval < odds) { rval = min + (max-min) * ((float) rand() / (float) RAND_MAX2); *out_vec++ = rval; } else { *out_vec++ = 0.0; } } return (w+4); } void rtrig_dsp(t_rtrig *x, t_signal **sp) { dsp_add(rtrig_perform, 3, x, sp[1]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/samm~-help.pd000066400000000000000000000131471430526361000174750ustar00rootroot00000000000000#N canvas 406 23 821 813 12; #X obj 504 533 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 43 219 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 527 533 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 568 533 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #N canvas 547 354 816 547 toner 0; #X obj 94 286 *~; #X obj 210 154 loadbang; #X obj 94 347 outlet~; #X obj 169 100 inlet~; #X msg 211 191 2 50 50 50; #X obj 94 178 osc~ 322; #X obj 211 218 lyonpotpourri/adsr~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 3 0 6 0; #X connect 4 0 6 0; #X connect 5 0 0 0; #X connect 6 0 0 1; #X restore 145 533 pd toner; #N canvas 547 354 820 551 toner 0; #X obj 94 286 *~; #X obj 210 154 loadbang; #X obj 115 347 outlet~; #X obj 169 100 inlet~; #X msg 211 191 2 50 50 50; #X obj 94 178 osc~ 444; #X obj 211 218 lyonpotpourri/adsr~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 3 0 6 0; #X connect 4 0 6 0; #X connect 5 0 0 0; #X connect 6 0 0 1; #X restore 209 533 pd toner; #N canvas 547 354 828 559 toner 0; #X obj 94 286 *~; #X obj 210 154 loadbang; #X obj 115 347 outlet~; #X obj 169 100 inlet~; #X msg 211 191 2 50 50 50; #X obj 94 178 osc~ 670; #X obj 211 218 lyonpotpourri/adsr~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 3 0 6 0; #X connect 4 0 6 0; #X connect 5 0 0 0; #X connect 6 0 0 1; #X restore 339 532 pd toner; #N canvas 452 295 832 563 toner 0; #X obj 94 286 *~; #X obj 210 154 loadbang; #X obj 115 347 outlet~; #X obj 169 100 inlet~; #X msg 211 191 2 50 50 50; #X obj 94 178 osc~ 190; #X obj 211 218 lyonpotpourri/adsr~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 3 0 6 0; #X connect 4 0 6 0; #X connect 5 0 0 0; #X connect 6 0 0 1; #X restore 81 533 pd toner; #N canvas 547 354 828 559 toner 0; #X obj 94 286 *~; #X obj 210 154 loadbang; #X obj 115 347 outlet~; #X obj 169 100 inlet~; #X obj 94 178 osc~ 976; #X msg 211 191 2 50 50 200; #X obj 211 218 lyonpotpourri/adsr~; #X connect 0 0 2 0; #X connect 1 0 5 0; #X connect 3 0 6 0; #X connect 4 0 0 0; #X connect 5 0 6 0; #X connect 6 0 0 1; #X restore 401 532 pd toner; #N canvas 460 303 824 555 toner 0; #X obj 94 286 *~; #X obj 210 154 loadbang; #X obj 115 347 outlet~; #X obj 169 100 inlet~; #X msg 211 191 2 50 50 50; #X obj 94 179 osc~ 555; #X obj 211 218 lyonpotpourri/adsr~; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 3 0 6 0; #X connect 4 0 6 0; #X connect 5 0 0 0; #X connect 6 0 0 1; #X restore 274 532 pd toner; #X obj 548 533 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 589 533 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 609 533 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 -1; #X obj 81 292 r samm-msgs; #N canvas 0 23 574 436 operation 0; #X obj 127 186 s samm-msgs; #X msg 109 134 tempo \$1; #X floatatom 109 105 5 0 0 0 - - -; #X msg 109 79 20; #X msg 215 112 arm; #X msg 253 115 resume; #X msg 313 115 pause; #X msg 34 107 beatinfo; #X msg 250 210 mute \$1; #X obj 251 174 tgl 15 0 empty empty empty 0 -6 0 8 -262144 -1 -1 0 1; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 2 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X connect 7 0 0 0; #X connect 8 0 0 0; #X connect 9 0 8 0; #X restore 340 237 pd operation; #X text 376 325 args: tempo \, [beat subdivisions]*; #X obj 505 492 lyonpotpourri/click2bang~; #X obj 527 471 lyonpotpourri/click2bang~; #X obj 548 451 lyonpotpourri/click2bang~; #X obj 568 431 lyonpotpourri/click2bang~; #X obj 589 411 lyonpotpourri/click2bang~; #X obj 609 391 lyonpotpourri/click2bang~; #X obj 81 322 lyonpotpourri/samm~ 20 5 7 11 13 19 1; #X obj 43 242 lyonpotpourri/click~; #N canvas 600 60 544 322 tempo-specs 0; #X obj 48 283 s samm-msgs; #X msg 90 71 divbeats 1 19 13 11 7 5; #X msg 102 116 msbeats 250 450 333 1600 777 630; #X msg 48 30 beats 0.1 0.2 0.333 0.25 0.4 0.5; #X msg 98 162 ratiobeats 1 12 1 16 1 9 1 7 3 32 5.5 11; #X text 46 9 specify each tempo with its time interval in beats; #X text 91 53 specify each tempo as a subdivision of a beat (quarter note); #X text 108 96 specify each tempo with time interval in ms.; #X text 107 142 specify each tempo as a ratio (relative to a whole note); #X msg 106 205 sampbeats 44100 22050 11025 88200 6677 9313; #X text 131 185 specify each tempo in samples; #X msg 157 243 beatinfo; #X text 155 227 diagnostics; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 9 0 0 0; #X connect 11 0 0 0; #X restore 341 262 pd tempo-specs; #X obj 81 577 lyonpotpourri/shoehorn~ 6 2; #X obj 81 615 lpp-meters; #X obj 39 23 lpp-icon samm~; #X text 259 55 - sample-accurate multiple metronomes; #X text 38 123 [samm~] stands for "sample accurate multiple metronomes." A single sample value of 1 is output on each downbeat \; at all other times the output value is zero. While [click2bang~] may be used to round to the nearest sample vector to control objects such as [tabplay~] \, optimal timing will be had from objects designed to respond to click triggers \, such as [lyonpotpourri/player~]., f 74; #X text 64 219 <= reinitialize timer; #X connect 1 0 23 0; #X connect 4 0 25 1; #X connect 5 0 25 2; #X connect 6 0 25 4; #X connect 7 0 25 0; #X connect 8 0 25 5; #X connect 9 0 25 3; #X connect 13 0 22 0; #X connect 16 0 0 0; #X connect 17 0 2 0; #X connect 18 0 10 0; #X connect 19 0 3 0; #X connect 20 0 11 0; #X connect 21 0 12 0; #X connect 22 0 7 0; #X connect 22 0 16 0; #X connect 22 1 4 0; #X connect 22 1 17 0; #X connect 22 2 5 0; #X connect 22 2 18 0; #X connect 22 3 9 0; #X connect 22 3 19 0; #X connect 22 4 6 0; #X connect 22 4 20 0; #X connect 22 5 8 0; #X connect 22 5 21 0; #X connect 23 0 22 0; #X connect 25 0 26 0; #X connect 25 1 26 1; pd-lyonpotpourri-3.0.1/samm~.c000066400000000000000000000317541430526361000163720ustar00rootroot00000000000000#include "MSPd.h" static t_class *samm_class; #define MAXBEATS (256) #define OBJECT_NAME "samm~" // #define DATE "prerelease" typedef struct _samm { t_object x_obj; float x_f; double tempo; /* current tempo */ double onebeat_samps; /* number of samples for a single beat */ double *beats; /* amount of beats for each active tempo outlet */ double *metro_samps;/* number of samples to count down for each time interval */ double *metro_beatdurs;/* number of beats for each metro time interval */ double *metro;/* current countdown for each time interval */ int metro_count; /* number of metronomes to keep track of */ float sr; /* current sampling rate */ short pause; short mute; // Pd only */ t_float *trigger_vec; int vs, vs_old; } t_samm; static void *samm_new(t_symbol *msg, int argc, t_atom *argv); //static void *samm_beatlist(t_samm *x, t_symbol *msg, int argc, t_atom *argv); static t_int *samm_perform(t_int *w); static void samm_dsp(t_samm *x, t_signal **sp); static void samm_tempo(t_samm *x, t_floatarg f); static void samm_divbeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv); static void samm_msbeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv); static void samm_sampbeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv); static void samm_ratiobeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv); static void samm_free(t_samm *x); static void samm_beatinfo(t_samm *x); static void samm_init(t_samm *x,short initialized); static void samm_mute(t_samm *x, t_floatarg f); static void samm_pause(t_samm *x); static void samm_arm(t_samm *x); static void samm_resume(t_samm *x); static void samm_beats(t_samm *x, t_symbol *msg, int argc, t_atom *argv); void samm_beatinfo(t_samm *x) { int i; post("tempo %.10f",x->tempo); post("samples in one beat: %.10f",x->onebeat_samps); for(i = 0; i < x->metro_count; i++) { post("%d: relative duration %.10f, samples %.10f samples ratio to 1 beat: %.10f", i, x->metro_beatdurs[i], x->metro_samps[i], x->onebeat_samps / x->metro_samps[i] ); } } void samm_tilde_setup(void) { samm_class = class_new(gensym("samm~"), (t_newmethod)samm_new, (t_method)samm_free,sizeof(t_samm), 0,A_GIMME,0); CLASS_MAINSIGNALIN(samm_class, t_samm, x_f); class_addmethod(samm_class,(t_method)samm_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(samm_class,(t_method)samm_mute,gensym("mute"),A_FLOAT,0); class_addmethod(samm_class,(t_method)samm_tempo,gensym("tempo"),A_FLOAT,0); class_addmethod(samm_class,(t_method)samm_beatinfo,gensym("beatinfo"),0); class_addmethod(samm_class,(t_method)samm_beats,gensym("beats"),A_GIMME,0); class_addmethod(samm_class,(t_method)samm_divbeats,gensym("divbeats"),A_GIMME,0); class_addmethod(samm_class,(t_method)samm_msbeats,gensym("msbeats"),A_GIMME,0); class_addmethod(samm_class,(t_method)samm_sampbeats,gensym("sampbeats"),A_GIMME,0); class_addmethod(samm_class,(t_method)samm_ratiobeats,gensym("ratiobeats"),A_GIMME,0); class_addmethod(samm_class,(t_method)samm_pause,gensym("pause"),A_GIMME,0); class_addmethod(samm_class,(t_method)samm_arm,gensym("arm"),A_GIMME,0); class_addmethod(samm_class,(t_method)samm_resume,gensym("resume"),A_GIMME,0); potpourri_announce(OBJECT_NAME); } void samm_pause(t_samm *x) { x->pause = 1; } void samm_mute(t_samm *x, t_floatarg f) { x->mute = (short) f; } void samm_arm(t_samm *x) { int i; x->pause = 1; for( i = 0; i < x->metro_count; i++) { x->metro[i] = 1.0; } } void samm_resume(t_samm *x) { x->pause = 0; } void samm_beats(t_samm *x, t_symbol *msg, int argc, t_atom *argv) { int i; double beatdur; if(argc != x->metro_count) { pd_error(0, "%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); return; } for(i = 0; i < argc; i++) { beatdur = (double)atom_getfloatarg(i,argc,argv); if(!beatdur) { pd_error(0, "%s: zero divisor given for beat stream %d",OBJECT_NAME,i+1); beatdur = 1.0; } x->metro_beatdurs[i] = beatdur; x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; x->metro[i] = 1.0; // initialize for instantaneous beat } } void samm_divbeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv) { int i; double divisor; if(argc != x->metro_count) { pd_error(0, "%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); return; } for(i = 0; i < argc; i++) { divisor = (double)atom_getfloatarg(i,argc,argv); if(!divisor) { pd_error(0, "%s: zero divisor given for beat stream %d",OBJECT_NAME,i+1); divisor = 1.0; } x->metro_beatdurs[i] = 1.0 / divisor; // argument is now DIVISOR of beat x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; x->metro[i] = 1.0; // initialize for instantaneous beat } } void samm_msbeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv) { int i; double msecs; if(argc != x->metro_count) { pd_error(0, "%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); return; } for(i = 0; i < argc; i++) { msecs = (double)atom_getfloatarg(i,argc,argv); if(msecs <= 0) { pd_error(0, "%s: illegal duration for beat stream %d",OBJECT_NAME,i+1); msecs = 1000.0; } x->metro_samps[i] = x->sr * .001 * msecs; x->metro_beatdurs[i] = x->metro_samps[i] / x->onebeat_samps; // just in case tempo changes x->metro[i] = 1.0; // initialize for instantaneous beat } } void samm_sampbeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv) { int i; double samples; if(argc != x->metro_count) { pd_error(0, "%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); return; } for(i = 0; i < argc; i++) { samples = (double)atom_getfloatarg(i,argc,argv); if(samples <= 0) { pd_error(0, "%s: illegal duration for beat stream %d",OBJECT_NAME,i+1); samples = x->sr; } x->metro_samps[i] = samples; x->metro_beatdurs[i] = x->metro_samps[i] / x->onebeat_samps; // just in case tempo changes x->metro[i] = 1.0; // initialize for instantaneous beat } } void samm_ratiobeats(t_samm *x, t_symbol *msg, int argc, t_atom *argv) { int i,j; double num,denom; if(argc != x->metro_count * 2) { pd_error(0, "%s: arguments did not match metro count %d",OBJECT_NAME,x->metro_count); return; } for(i = 0, j= 0; i < argc; i += 2, j++) { num = (double)atom_getfloatarg(i,argc,argv); denom = (double)atom_getfloatarg(i+1,argc,argv); if(!denom) { pd_error(0, "%s: zero divisor given for beat stream %d",OBJECT_NAME,(i/2)+1); denom = 1.0; } x->metro_beatdurs[j] = 4.0 * (num / denom); // post("beat duration %f",4.0 * (num/denom)); x->metro_samps[j] = x->metro_beatdurs[j] * x->onebeat_samps; x->metro[j] = 1.0; // initialize for instantaneous beat } } void samm_tempo(t_samm *x, t_floatarg f) { int i; double last_tempo; double tempo_fac; if( f <= 0.0) { pd_error(0, "illegal tempo: %f", f); return; } last_tempo = x->tempo; x->tempo = f; tempo_fac = last_tempo / x->tempo; // shrink or stretch factor for beats x->onebeat_samps = (60.0/x->tempo) * x->sr; for(i = 0; i < x->metro_count; i++) { x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; x->metro[i] *= tempo_fac; } } void *samm_new(t_symbol *msg, int argc, t_atom *argv) { int i,j; double divisor; t_samm *x; if(argc < 2) { pd_error(0, "%s: there must be at least 1 beat stream",OBJECT_NAME); return (void *)NULL; } if(argc > MAXBEATS + 1) { pd_error(0, "%s: exceeded maximum of %d beat values",OBJECT_NAME, MAXBEATS); return (void *)NULL; } x = (t_samm *)pd_new(samm_class); x->metro_count = argc - 1; for(i=0;i< x->metro_count;i++) outlet_new(&x->x_obj, gensym("signal")); x->sr = sys_getsr(); x->vs = sys_getblksize(); x->pause = 0; x->mute = 0; x->beats = (double *) getbytes(x->metro_count * sizeof(double)); x->metro_samps = (double *) getbytes(x->metro_count * sizeof(double)); x->metro_beatdurs = (double *) getbytes(x->metro_count * sizeof(double)); x->metro = (double *) getbytes(x->metro_count * sizeof(double)); if(! x->sr ) { x->sr = 44100; post("sr autoset to 44100"); } if(argc > 0) { x->tempo = (double) atom_getfloatarg(0,argc,argv); } if( x->tempo <= 0.0 ) { x->tempo = 120; post("tempo autoset to 120 BPM"); } x->onebeat_samps = (60.0/x->tempo) * x->sr; for(i = 1,j = 0; i < argc; i++, j++) { divisor = (double)atom_getfloatarg(i,argc,argv); if(!divisor) { pd_error(0, "%s: zero divisor given for beat stream %d",OBJECT_NAME,i); divisor = 1.0; } x->metro_beatdurs[j] = 1.0 / divisor; // argument is now DIVISOR of beat x->metro_samps[j] = x->metro_beatdurs[j] * x->onebeat_samps; x->metro[j] = 1.0; // initialize for instantaneous beat } // post("there are %d beat streams",x->metro_count); samm_init(x,0); return (x); } void samm_free(t_samm *x) { /* x->beats = (double *) getbytes(x->metro_count * sizeof(double)); x->metro_samps = (double *) getbytes(x->metro_count * sizeof(double)); x->metro_beatdurs = (double *) getbytes(x->metro_count * sizeof(double)); x->metro = (double *) getbytes(x->metro_count * sizeof(double)); x->trigger_vec = (t_float *)getbytes(x->vs * sizeof(t_float)); */ freebytes(x->trigger_vec, x->vs * sizeof(t_float)); freebytes(x->beats, x->metro_count * sizeof(double)); freebytes(x->metro_samps, x->metro_count * sizeof(double)); freebytes(x->metro_beatdurs, x->metro_count * sizeof(double)); freebytes(x->metro, x->metro_count * sizeof(double)); } void samm_init(t_samm *x,short initialized) { if(!initialized) { x->trigger_vec = (t_float *)getbytes(x->vs * sizeof(t_float)); x->vs_old = x->vs; } else { x->trigger_vec = (t_float *) resizebytes(x->trigger_vec, x->vs_old * sizeof(t_float), x->vs * sizeof(t_float)); } } t_int *samm_perform(t_int *w) { int i, j, k; // float outval; t_samm *x = (t_samm *) (w[1]); t_float *inlet = (t_float *) (w[2]); t_float *beat_outlet; int n; int metro_count = x->metro_count; double *metro = x->metro; float *trigger_vec = x->trigger_vec; short pause = x->pause; n = (int) w[metro_count + 3]; if(x->mute) { for(i = 0, j=3; i < metro_count; i++, j++) { beat_outlet = (t_float *) (w[j]); for(k=0; k < n; k++) { beat_outlet[k] = 0.0; // use memset } } return (w + metro_count + 4); } /* main loop */ for(i=0;imetro_samps[i]; } } } } return (w + metro_count + 4); } void samm_dsp(t_samm *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count; pointer_count = x->metro_count + 3; // all metros, plus 1 inlet, plus the object pointer, plus N if(x->vs != sp[0]->s_n) { x->vs = sp[0]->s_n; samm_init(x,1); } if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; x->onebeat_samps = (60.0/x->tempo) * x->sr; for(i = 0; i < x->metro_count; i++) { x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps; x->metro[i] = 0; } } sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } // post("attached %d pointers",pointer_count); dsp_addv(samm_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec, pointer_count * sizeof(t_int *)); } pd-lyonpotpourri-3.0.1/sarec~-help.pd000066400000000000000000000115371430526361000176360ustar00rootroot00000000000000#N canvas 426 42 805 761 12; #N canvas 0 22 450 300 (subpatch) 0; #X array track1 100000 float 2; #X coords 0 1 99999 -1 200 100 1; #X restore 54 293 graph; #X obj 521 319 noise~; #X obj 521 348 *~ 0.1; #X obj 321 423 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X floatatom 321 540 5 0 0 0 - - -; #X msg 217 636 \; track1 const 0; #X text 214 615 clear track; #X obj 57 504 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 419 698 s sarec.messages; #X obj 194 455 r sarec.messages; #X obj 264 304 vradio 15 1 0 4 empty empty record_mode 0 -8 0 10 -204800 -4160 -1 1; #X text 282 303 record; #X text 282 320 overdub; #X text 283 335 punch; #X text 282 351 lock track; #N canvas 310 149 676 348 status-messages 0; #X msg 88 133 overdub; #X msg 147 133 punch; #X msg 37 133 record; #X msg 192 134 lock; #X obj 90 68 sel 0 1 2 3; #X obj 48 213 s sarec.messages; #X obj 81 28 inlet; #X text 229 64 record \, overdub \, and punch should be familiar. When lock mode is selected \, you can't record onto the track.; #X connect 0 0 5 0; #X connect 1 0 5 0; #X connect 2 0 5 0; #X connect 3 0 5 0; #X connect 4 0 2 0; #X connect 4 1 0 0; #X connect 4 2 1 0; #X connect 4 3 3 0; #X connect 6 0 4 0; #X restore 264 375 pd status-messages; #X msg 419 672 punchfade \$1; #X msg 419 641 5; #X msg 456 641 50; #X msg 492 641 150; #N canvas 149 234 450 300 show-record-phase 0; #X obj 53 132 snapshot~; #X msg 179 95 1; #X obj 179 116 metro 50; #X obj 179 76 loadbang; #X text 94 154 record phase; #X obj 53 60 inlet~; #X obj 53 199 outlet; #X connect 0 0 6 0; #X connect 1 0 2 0; #X connect 2 0 0 0; #X connect 3 0 1 0; #X connect 5 0 0 0; #X restore 321 515 pd show-record-phase; #N canvas 600 60 450 300 set-record-region 0; #X obj 42 244 s sarec.messages; #X msg 49 120 region 500 1000; #X msg 37 93 region 0 0; #X text 40 75 set region to entire array (default); #X text 167 120 select region within array (ms.); #X msg 61 159 region 0 1500; #X msg 99 200 region 200 400; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X restore 419 594 pd set-record-region; #X obj 57 554 lpp-meters; #X obj 57 529 tabplay~ track1; #X obj 321 492 lyonpotpourri/sarec~ track1 1; #X obj 35 22 lpp-icon sarec~; #X text 191 422 trigger record =>; #X text 41 135 [sarec~] implements sample-accurate recording \, including precision punching and overdubs. The record mode is set with various messages. Recording to the specified region within an array is triggered with a click \, thus a sample-accurate event.; #X obj 321 454 lyonpotpourri/click~; #X text 93 497 <= play back recorded track; #X obj 521 392 lyonpotpourri/clean_selector~ 2; #N canvas 600 60 551 463 pad 0; #X msg 126 63 87.3071 261.626 329.628 391.995; #X obj 126 123 unpack f f f f; #X obj 126 239 phasor~; #X obj 126 269 -~ 0.5; #X obj 194 242 phasor~; #X obj 197 272 -~ 0.5; #X obj 261 242 phasor~; #X obj 258 274 -~ 0.5; #X obj 330 242 phasor~; #X obj 330 272 -~ 0.5; #X obj 126 33 loadbang; #X obj 126 299 lyonpotpourri/flanjah~ 10 -0.47 0.434 0.251 0.99; #X obj 126 329 outlet~; #X obj 390 45 inlet; #X msg 390 79 \$1 50; #X obj 390 113 line~; #X obj 126 209 *~; #X obj 188 209 *~; #X obj 254 209 *~; #X obj 316 209 *~; #X obj 143 379 loadbang; #X msg 143 406 1; #X obj 143 429 s \$0-ptranspose; #X connect 0 0 1 0; #X connect 1 0 16 0; #X connect 1 1 17 0; #X connect 1 2 18 0; #X connect 1 3 19 0; #X connect 2 0 3 0; #X connect 3 0 11 0; #X connect 4 0 5 0; #X connect 5 0 11 0; #X connect 6 0 7 0; #X connect 7 0 11 0; #X connect 8 0 9 0; #X connect 9 0 11 0; #X connect 10 0 0 0; #X connect 11 0 12 0; #X connect 13 0 14 0; #X connect 14 0 15 0; #X connect 15 0 16 1; #X connect 15 0 17 1; #X connect 15 0 18 1; #X connect 15 0 19 1; #X connect 16 0 2 0; #X connect 17 0 4 0; #X connect 18 0 6 0; #X connect 19 0 8 0; #X connect 20 0 21 0; #X connect 21 0 22 0; #X restore 626 317 pd pad; #X text 416 623 set taper (ms) for punch mode; #X obj 626 351 *~ 0.2; #X obj 431 262 vradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144 -1 -1 1; #X msg 431 315 channel \$1; #X msg 217 710 \; track1 normalize; #X text 214 690 normalize track; #X text 449 260 select noise input; #X text 450 277 select pad input; #X text 270 48 - sample-accurate recording; #X text 409 393 input signal =>; #X text 416 574 select region of track to record on; #X floatatom 626 289 5 0 0 0 - - -; #X obj 629 239 hsl 128 15 0.5 2 0 0 empty \$0-ptranspose pad_transpose -2 -8 0 10 -262130 -1 -1 4233 1; #X connect 1 0 2 0; #X connect 2 0 30 0; #X connect 3 0 28 0; #X connect 7 0 23 0; #X connect 9 0 24 0; #X connect 10 0 15 0; #X connect 16 0 8 0; #X connect 17 0 16 0; #X connect 18 0 16 0; #X connect 19 0 16 0; #X connect 20 0 4 0; #X connect 23 0 22 0; #X connect 23 0 22 1; #X connect 24 0 20 0; #X connect 28 0 24 0; #X connect 30 0 24 1; #X connect 31 0 33 0; #X connect 33 0 30 1; #X connect 34 0 35 0; #X connect 35 0 30 0; #X connect 43 0 31 0; #X connect 44 0 43 0; pd-lyonpotpourri-3.0.1/sarec~.c000066400000000000000000000312611430526361000165230ustar00rootroot00000000000000#include "MSPd.h" static t_class *sarec_class; #define MAXBEATS (256) #define OBJECT_NAME "sarec~" #define SAREC_RECORD 1 #define SAREC_OVERDUB 2 #define SAREC_PUNCH 3 #define SAREC_LOCK 4 #define WAVEFORM_UPDATE (22050) typedef struct _sarec { t_object x_obj; t_float x_f; long b_valid; long b_frames; t_word *b_samples; long display_counter; int valid; // status of recording buffer (not yet implemented) int status; // idle? 0, recording? 1 int mode; // record, overdub or punch int overdub; // 0 ? write over track, 1: overdub into track int *armed_chans; // 1, armed, 0, protected long counter; // sample counter float sync; // position in recording long start_frame; // start time in samples long end_frame; // end time in samples long fadesamps; // number of samples for fades on PUNCH mode long regionsamps; // use for fade int channel_count; // number of channels (hopefully!) in buffer float sr; float syncphase; t_symbol *bufname; // name of recording buffer t_garray *recbuf; } t_sarec; static void *sarec_new(t_symbol *bufname); // void sarec_region(t_sarec *x, t_symbol *msg, int argc, t_atom *argv); static void sarec_regionsamps(t_sarec *x, t_floatarg start_frame, t_floatarg end_frame); static void sarec_region(t_sarec *x, t_floatarg start_time, t_floatarg end_time); static t_int *sarec_perform(t_int *w); static void sarec_dsp(t_sarec *x, t_signal **sp); static void sarec_arm(t_sarec *x, t_floatarg chan); static void sarec_disarm(t_sarec *x, t_floatarg chan); static void sarec_attach_buffer(t_sarec *x); static void sarec_overdub(t_sarec *x); static void sarec_record(t_sarec *x); static void sarec_punch(t_sarec *x); static void sarec_punchfade(t_sarec *x, t_floatarg fadetime); // static void sarec_tilde_setup(void); static void sarec_lock(t_sarec *x); /// void sarec_tilde_setup(void) { t_class *c; c = class_new(gensym("sarec~"),(t_newmethod)sarec_new,0, sizeof(t_sarec),0, A_SYMBOL,0); CLASS_MAINSIGNALIN(c,t_sarec,x_f); class_addmethod(c,(t_method)sarec_dsp,gensym("dsp"),A_CANT,0); class_addmethod(c,(t_method)sarec_arm,gensym("arm"),A_FLOAT,0); class_addmethod(c,(t_method)sarec_disarm,gensym("disarm"),A_FLOAT,0); class_addmethod(c,(t_method)sarec_overdub,gensym("overdub"),0); class_addmethod(c,(t_method)sarec_lock,gensym("lock"),0); class_addmethod(c,(t_method)sarec_punch,gensym("punch"),0); class_addmethod(c,(t_method)sarec_punchfade,gensym("punchfade"),A_FLOAT,0); class_addmethod(c,(t_method)sarec_record,gensym("record"),0); class_addmethod(c,(t_method)sarec_regionsamps,gensym("regionsamps"),A_FLOAT, A_FLOAT,0); class_addmethod(c,(t_method)sarec_region,gensym("region"),A_FLOAT, A_FLOAT,0); sarec_class = c; potpourri_announce(OBJECT_NAME); } void sarec_lock(t_sarec *x) { x->mode = SAREC_LOCK; } void *sarec_new(t_symbol *bufname) { int i; int chans; chans = 1; // mono processing only in Pd t_sarec *x = (t_sarec *)pd_new(sarec_class); inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->status = 0; x->counter = 0; x->b_valid = 0; x->bufname = bufname; x->channel_count = chans; x->armed_chans = (int *) getbytes(x->channel_count * sizeof(int)); x->display_counter = 0; x->start_frame = 0; x->end_frame = 0; x->overdub = 0; x->mode = SAREC_RECORD; x->sr = sys_getsr(); x->fadesamps = x->sr * 0.05; // 50 ms fade time x->start_frame = -1; // initialize to a bad value x->end_frame = -1; x->regionsamps = 0; for(i = 0; i < x->channel_count; i++) { x->armed_chans[i] = 1; // all channels armed by default } return x; } t_int *sarec_perform(t_int *w) { int i, j; t_sarec *x = (t_sarec *) (w[1]); t_float *click_inlet = (t_float *) (w[2]); t_float *record_inlet; t_float *sync; int channel_count = x->channel_count; int n; int next_pointer = channel_count + 5; int status = x->status; int counter = x->counter; int *armed_chans = x->armed_chans; t_word *samples = x->b_samples; long b_frames = x->b_frames; long start_frame = x->start_frame; long end_frame = x->end_frame; long b_valid = x->b_valid; //int overdub = x->overdub; int mode = x->mode; long fadesamps = x->fadesamps; long regionsamps = x->regionsamps; int clickval; float frak; float goin_up, goin_down; long counter_msf; sync = (t_float *) (w[3 + channel_count]); n = (int) w[4 + channel_count]; if(! b_valid) goto escape; if(! regionsamps ) { x->regionsamps = regionsamps = end_frame - start_frame; } for(i = 0; i < n; i++) { // could be record (1) or overdub (2) if( click_inlet[i] ) { clickval = (int) click_inlet[i]; if(clickval == -2) { status = 0; counter = 0; garray_redraw(x->recbuf); } else { // arm all channels if(clickval == -1) { // just use all armed channels } // arm only one channel - protect against fatal bad index else if(clickval <= channel_count && clickval > 0) { for(j=0; j < channel_count; j++) { armed_chans[j] = 0; }; armed_chans[clickval - 1] = 1; // post("arming channel %d", clickval); } counter = start_frame; if(!end_frame) { end_frame = b_frames; } status = 1; } } if(counter >= end_frame) { counter = 0; status = 0; garray_redraw(x->recbuf); } // write over track if(status && (mode == SAREC_RECORD) ) { for(j=0; j < channel_count; j++) { if( armed_chans[j] ) { record_inlet = (t_float *) (w[3 + j]); samples[ (counter * channel_count) + j].w_float = record_inlet[i]; } } counter++; } // overdub else if(status && (mode == SAREC_OVERDUB) ) { for(j=0; j < channel_count; j++) { if( armed_chans[j] ) { record_inlet = (t_float *) (w[3 + j]); samples[ (counter * channel_count) + j].w_float += record_inlet[i]; } } counter++; } // punch else if(status && (mode == SAREC_PUNCH)) { counter_msf = counter - start_frame; for(j=0; j < channel_count; j++) { if( armed_chans[j] ) { record_inlet = (t_float *) (w[3 + j]); // frak is multiplier for NEW STUFF, (1-frak) is MULTIPLIER for stuff to fade out // do power fade though if( counter_msf < fadesamps ) { // fade in frak = (float)counter_msf / (float)fadesamps; goin_up = sin(PIOVERTWO * frak); goin_down = cos(PIOVERTWO * frak); //post("fadein: %d, up: %f, down: %f", counter_msf, goin_up, goin_down); samples[ (counter * channel_count) + j].w_float = (samples[ (counter * channel_count) + j].w_float * goin_down) + (record_inlet[i] * goin_up); } else if ( counter_msf >= (regionsamps - fadesamps) ) { frak = (float) (regionsamps - counter_msf) / (float) fadesamps; // fade out // frak = (float)counter_msf / (float)fadesamps; goin_up = cos(PIOVERTWO * frak); goin_down = sin(PIOVERTWO * frak); //post("fadeout: %d, up: %f, down: %f", counter_msf, goin_up, goin_down); samples[ (counter * channel_count) + j].w_float = (samples[ (counter * channel_count) + j].w_float * goin_up) + (record_inlet[i] * goin_down); } else { // straight replace samples[ (counter * channel_count) + j].w_float = record_inlet[i]; } } } counter++; } sync[i] = (float) counter / (float) b_frames; } if(status) { x->display_counter += n; if(x->display_counter > WAVEFORM_UPDATE) { garray_redraw(x->recbuf); x->display_counter = 0; } } x->end_frame = end_frame; x->status = status; x->counter = counter; escape: return w + next_pointer; } void sarec_overdub(t_sarec *x) { x->mode = SAREC_OVERDUB; } void sarec_record(t_sarec *x) { x->mode = SAREC_RECORD; } void sarec_punchfade(t_sarec *x, t_floatarg fadetime) { x->fadesamps = x->sr * fadetime * 0.001; // read fade in ms. //post("punch mode"); } void sarec_punch(t_sarec *x) { x->mode = SAREC_PUNCH; // post("punch mode"); } void sarec_disarm(t_sarec *x, t_floatarg chan) { // int i; int ichan = (int) chan; if(chan <= x->channel_count && chan > 0) { x->armed_chans[ichan - 1] = 0; } } void sarec_arm(t_sarec *x, t_floatarg chan) { int i; int ichan = (int) chan; if(ichan == -1) { for(i = 0; i < x->channel_count; i++) { x->armed_chans[i] = 1; } } else if(ichan == 0) { for(i = 0; i < x->channel_count; i++) { x->armed_chans[i] = 0; } } else if(chan <= x->channel_count && chan > 0) { x->armed_chans[ichan - 1] = 1; } } void sarec_region(t_sarec *x, t_floatarg start_time, t_floatarg end_time) { long b_frames = x->b_frames; long start_frame, end_frame; float sr = x->sr; // convert milliseconds to samples: start_frame = (long) (sr * 0.001 * start_time ); end_frame = (long) (sr * 0.001 * end_time ); start_frame = start_frame < 0 || start_frame > b_frames - 1 ? 0 : start_frame; end_frame = end_frame > b_frames ? b_frames : end_frame; x->end_frame = end_frame; x->start_frame = start_frame; x->regionsamps = end_frame - start_frame; } void sarec_regionsamps(t_sarec *x, t_floatarg start_frame, t_floatarg end_frame) { long b_frames = x->b_frames; // long start_frame, end_frame; //start_frame = (long) atom_getfloatarg(0, argc, argv); //end_frame = (long) atom_getfloatarg(1, argc, argv); start_frame = start_frame < 0 || start_frame > b_frames - 1 ? 0 : start_frame; end_frame = end_frame > b_frames ? b_frames : end_frame; x->end_frame = (long)end_frame; x->start_frame = (long)start_frame; x->regionsamps = end_frame - start_frame; } void sarec_attach_buffer(t_sarec *x) { t_garray *a; t_symbol *bufname = x->bufname; int b_frames; // t_word *b_samples = x->b_samples; if (!(a = (t_garray *)pd_findbyclass(bufname, garray_class))) { if (*bufname->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,bufname->s_name); x->b_valid = 0; } else if (!garray_getfloatwords(a, &b_frames, &x->b_samples)) { pd_error(x, "%s: bad array for %s", bufname->s_name,OBJECT_NAME); x->b_valid = 0; x->b_samples = 0; } else { x->recbuf = a; x->b_valid = 1; // a->a_valid; ??? x->b_frames = b_frames; // x->b_samples = b_samples; garray_usedindsp(a); } } void sarec_dsp(t_sarec *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count; pointer_count = x->channel_count + 4; /* all channels, 1 inlet, 1 sync outlet, the object pointer, vector size N */ sarec_attach_buffer(x); if( x->start_frame < 0 && x->end_frame < 0) { x->start_frame = 0; x->end_frame = x->b_frames; } sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } x->sr = sp[0]->s_sr; dsp_addv(sarec_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec, pointer_count * sizeof(t_int *)); } pd-lyonpotpourri-3.0.1/sel~-help.pd000066400000000000000000000030341430526361000173150ustar00rootroot00000000000000#N canvas 489 119 694 490 12; #X obj 65 186 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 65 367 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 158 390 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 251 415 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 218 186 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 376 187 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 39 101 impulses are numerically matched by sending a click (impulse with value 1.0) to the appropriate outlet, f 56; #X msg 422 182 set 5.5; #X obj 422 153 loadbang; #X obj 65 283 lyonpotpourri/sel~ 1 2 5.5, f 27; #X obj 218 211 lyonpotpourri/click~; #X obj 65 211 lyonpotpourri/click~; #X obj 376 211 lyonpotpourri/click~; #X obj 251 374 lyonpotpourri/click2bang~; #X obj 158 349 lyonpotpourri/click2bang~; #X obj 65 325 lyonpotpourri/click2bang~; #X obj 256 152 loadbang; #X msg 256 181 set 2; #X obj 35 7 lpp-icon sel~; #X msg 487 377 \; pd dsp \$1; #X obj 487 348 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 508 347 turn on DACs; #X text 255 33 - sample-accurate implementation of the sel algorithm ; #X connect 0 0 11 0; #X connect 4 0 10 0; #X connect 5 0 12 0; #X connect 7 0 12 0; #X connect 8 0 7 0; #X connect 9 0 15 0; #X connect 9 1 14 0; #X connect 9 2 13 0; #X connect 10 0 9 0; #X connect 11 0 9 0; #X connect 12 0 9 0; #X connect 13 0 3 0; #X connect 14 0 2 0; #X connect 15 0 1 0; #X connect 16 0 17 0; #X connect 17 0 10 0; #X connect 20 0 19 0; pd-lyonpotpourri-3.0.1/sel~.c000066400000000000000000000113431430526361000162100ustar00rootroot00000000000000#include "MSPd.h" static t_class *sel_class; #define MAXBEATS (256) #define OBJECT_NAME "sel~" #define COMPILE_DATE "9.02.07" #define OBJECT_VERSION "2.01" // #define DATE "prerelease" /* Pd version of sel~ */ typedef struct _sel { t_object x_obj; t_float x_f; t_float *matches; // store numbers to match against t_float *trigger_vec; // copy of input vector int length; // number of matches to check t_float **ins; // array of input signal vectors t_float **outs; // array of output signal vectors } t_sel; static void *sel_new(t_symbol *msg, int argc, t_atom *argv); static void sel_free(t_sel *x); static void sel_dsp(t_sel *x, t_signal **sp); void sel_tilde_setup(void) { sel_class = class_new(gensym("sel~"), (t_newmethod)sel_new, (t_method)sel_free, sizeof(t_sel),0,A_GIMME,0); CLASS_MAINSIGNALIN(sel_class, t_sel, x_f); class_addmethod(sel_class, (t_method)sel_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *sel_new(t_symbol *msg, int argc, t_atom *argv) { int i; t_sel *x = (t_sel *)pd_new(sel_class); x->length = (int)argc; for(i=0;i< x->length ;i++) { outlet_new(&x->x_obj, gensym("signal")); } x->matches = (t_float *) getbytes(x->length * sizeof(t_float)); for(i = 0; i < argc; i++) { x->matches[i] = (double)atom_getfloatarg(i,argc,argv); } x->ins = (t_float **) getbytes(1 * sizeof(t_float *)); x->outs = (t_float **) getbytes(x->length * sizeof(t_float *)); // only 1 inlet for(i = 0; i < 1; i++) { x->ins[i] = (t_float *) getbytes(8192 * sizeof(t_float)); } return x; } void sel_free(t_sel *x) { freebytes(x->matches, x->length * sizeof(t_float)); freebytes(x->outs, x->length * sizeof(t_float *)); freebytes(x->ins[0], 8192 * sizeof(t_float)); freebytes(x->ins, 1 * sizeof(t_float *)); } t_int *sel_perform(t_int *w) { int i, j; t_sel *x = (t_sel *) w[1]; t_float **ins = x->ins; t_float **outs = x->outs; t_float *invec; t_float *inlet; t_float *match_outlet; t_float *matches = x->matches; int length = x->length; int n = (int) w[length + 3]; // obj, func, 1 inlet // copy input vectors (just 1 here) for(i = 0; i < 1; i++) { invec = (t_float *) w[2 + i]; for(j = 0; j < n; j++) { ins[i][j] = invec[j]; } } inlet = ins[0]; // assign output vector pointers for(i = 0; i < length; i++) { outs[i] = (t_float *) w[3 + i]; } // clean each outlet for(j = 0; j < length; j++) { match_outlet = (t_float *) outs[j]; for(i = 0; i < n; i++) { match_outlet[i] = 0.0; } } // now match and route any clicks in the input for(i = 0; i < n; i++) { if(inlet[i]) { for(j = 0; j < length; j++) { if( inlet[i] == matches[j]) { match_outlet = (t_float *) outs[j]; match_outlet[i] = 1.0; // always send a unity click } } } } return (w + length + 4); } /* void sel_perform64(t_sel *x, t_object *dsp64, double **ins, long numins, double **outs,long numouts, long n, long flags, void *userparam) { int i, j; t_double *inlet = ins[0]; t_double *match_outlet; t_double *matches = x->matches; int length = x->length; // clean each outlet for(j = 0; j < length; j++) { match_outlet = (t_double *) outs[j]; for(i = 0; i < n; i++) { match_outlet[i] = 0.0; } } // now match and route any clicks in the input for(i = 0; i < n; i++) { if(inlet[i]) { for(j = 0; j < length; j++) { if( inlet[i] == matches[j]) { match_outlet = (t_double *) outs[j]; match_outlet[i] = 1.0; // always send a unity click } } } } } t_int *sel_dsp64(t_sel *x, t_object *dsp64, short *count, double sr, long n, long flags) { if(!sp[0]->s_sr) return; object_method(dsp64, gensym("dsp_add64"),x,sel_perform64,0,NULL); } */ void sel_dsp(t_sel *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count = x->length + 3; // output chans + object + inchan + vectorsize if(!sp[0]->s_sr) { return; } sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } dsp_addv(sel_perform, pointer_count, (t_int *)sigvec); freebytes(sigvec, pointer_count * sizeof(t_int *)); } pd-lyonpotpourri-3.0.1/sfplay~.pd000066400000000000000000000017741430526361000171130ustar00rootroot00000000000000#N canvas 600 60 456 434 12; #X obj 49 22 inlet; #X obj 103 123 bng 16 250 50 0 \$0-bang \$0-dummy empty 17 7 0 10 -228856 -1 -1; #X obj 49 62 route bang float; #X obj 103 104 tgl 16 0 \$0-tgl \$0-dummy empty 17 7 0 10 -228856 -1 -1 0 1; #X obj 103 185 openpanel; #X msg 103 296 open \$1 \, 1; #X obj 215 332 readsf~; #X obj 317 215 spigot; #X obj 215 382 outlet~; #X obj 184 172 != 0; #X text 120 122 Choose; #X text 120 103 Play, f 6; #X obj 184 143 trigger float float, f 25; #X obj 184 201 sel 1; #X text 195 52 Helper abstraction used in the documentation of FFTease to play sound files., f 30; #X obj 184 115 r \$0-tgl; #X obj 103 271 symbol \$1; #X connect 0 0 2 0; #X connect 1 0 4 0; #X connect 2 0 1 0; #X connect 2 1 3 0; #X connect 4 0 16 0; #X connect 5 0 6 0; #X connect 6 0 8 0; #X connect 6 1 7 0; #X connect 7 0 16 0; #X connect 9 0 13 0; #X connect 12 0 9 0; #X connect 12 1 7 1; #X connect 13 0 16 0; #X connect 13 1 6 0; #X connect 15 0 12 0; #X connect 16 0 5 0; #X coords 0 -1 1 1 67 43 2 100 100; pd-lyonpotpourri-3.0.1/shoehorn~-help.pd000066400000000000000000000011671430526361000203640ustar00rootroot00000000000000#N canvas 600 60 510 573 12; #X obj 49 179 osc~ 340; #X obj 142 230 osc~ 546; #X obj 95 203 osc~ 739; #X obj 188 255 osc~ 1666; #X obj 235 278 osc~ 665; #X obj 49 359 lpp-meters; #X obj 49 308 lyonpotpourri/shoehorn~ 5 2; #X text 36 109 [shoehorn~] collapses an arbitrary number of input channels into an arbitrary number of output channels \, by spacing them from left to right with equal power panning.; #X obj 31 13 lpp-icon shoehorn~; #X text 250 48 - map from N channels to M channels; #X connect 0 0 6 0; #X connect 1 0 6 2; #X connect 2 0 6 1; #X connect 3 0 6 3; #X connect 4 0 6 4; #X connect 6 0 5 0; #X connect 6 1 5 1; pd-lyonpotpourri-3.0.1/shoehorn~.c000066400000000000000000000120741430526361000172540ustar00rootroot00000000000000#include "MSPd.h" static t_class *shoehorn_class; /* Pd version of shoehorn~ */ #define OBJECT_NAME "shoehorn~" typedef struct _shoehorn { t_object x_obj; t_float x_f; long inChans; long outChans; double pio2; t_float *inarr; t_float **loc_invecs; t_float **outs; double advFrac; double *pangains1; double *pangains2; long *indexList; } t_shoehorn; static void *shoehorn_new(t_symbol *s, int argc, t_atom *argv); static void shoehorn_free(t_shoehorn *x); static void shoehorn_dsp(t_shoehorn *x, t_signal **sp); static t_int *shoehorn_perform(t_int *w); void shoehorn_tilde_setup(void) { shoehorn_class = class_new(gensym("shoehorn~"), (t_newmethod)shoehorn_new, (t_method)shoehorn_free, sizeof(t_shoehorn),0,A_GIMME,0); CLASS_MAINSIGNALIN(shoehorn_class, t_shoehorn, x_f); class_addmethod(shoehorn_class, (t_method)shoehorn_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } void *shoehorn_new(t_symbol *s, int argc, t_atom *argv) { int i; double fullFrac, thisFrac, panloc; long outIndex; t_shoehorn *x = (t_shoehorn *)pd_new(shoehorn_class); x->inChans = (long) atom_getfloatarg(0,argc,argv); x->outChans = (long) atom_getfloatarg(1,argc,argv); if( x->outChans < 2 || x->inChans < 2) { pd_error(0, "%s: illegal channel count: [in = %ld] [out = %ld]",OBJECT_NAME,x->inChans,x->outChans); return NULL; } for(i = 0; i < x->inChans - 1; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } for(i=0; i < x->outChans; i++) { outlet_new(&x->x_obj, gensym("signal")); } x->pio2 = PI / 2.0; x->inarr = (t_float *) getbytes(x->inChans * sizeof(t_float)); x->loc_invecs = (t_float **) getbytes(x->inChans * sizeof(t_float *)); for(i = 0; i < x->inChans; i++) { x->loc_invecs[i] = (t_float *) getbytes(8192 * sizeof(t_float)); } x->pangains1 = (double *) getbytes(x->inChans * sizeof(double)); x->pangains2 = (double *) getbytes(x->inChans * sizeof(double)); x->indexList = (long *) getbytes(x->inChans * sizeof(long)); x->advFrac = (double)(x->outChans - 1)/(double)(x->inChans - 1); x->outs = (t_float **) getbytes(x->outChans * sizeof(t_float *)); // temporary holding for output vectors for(i = 1; i < x->inChans - 1; i++) { fullFrac = i * x->advFrac; outIndex = floor(fullFrac); thisFrac = fullFrac - outIndex; panloc = thisFrac * x->pio2; x->indexList[i] = outIndex; x->pangains1[i] = cos(panloc); x->pangains2[i] = sin(panloc); } return x; } void shoehorn_free(t_shoehorn *x) { int i; freebytes(x->inarr, x->inChans * sizeof(t_float)); freebytes(x->pangains1, x->inChans * sizeof(double)); freebytes(x->pangains2, x->inChans * sizeof(double)); freebytes(x->indexList, x->inChans * sizeof(long)); for(i = 0; i < x->inChans; i++) { freebytes(x->loc_invecs[i], 8192 * sizeof(t_float)); } freebytes(x->loc_invecs, x->inChans * sizeof(t_float *)); freebytes(x->outs, x->outChans * sizeof(t_float *)); } t_int *shoehorn_perform(t_int *w) { t_shoehorn *x = (t_shoehorn*) w[1]; long inChans = x->inChans; long outChans = x->outChans; t_float *inarr = x->inarr; t_float **loc_invecs = x->loc_invecs; t_float *invec; t_float **outs = x->outs; double *pangains1 = x->pangains1; double *pangains2 = x->pangains2; int chan,i, j; long outIndex; long *indexList = x->indexList; int n = (int) w[inChans + outChans + 2]; // assign output vector pointers for(i = 0; i < outChans; i++) { outs[i] = (t_float *) w[2 + inChans + i]; } // copy all input vectors to a local 2D array for(i = 0; i < inChans; i++) { invec = (t_float *) w[2 + i]; for(j = 0; j < n; j++) { loc_invecs[i][j] = invec[j]; } } for( j = 0; j < n; j++) { // copy local input sample frame for(chan = 0; chan < inChans; chan++) { inarr[chan] = loc_invecs[chan][j]; } // zero out output channels for(chan = 1; chan < outChans - 1; chan++) { outs[chan][j] = 0.0; } // copy outer channel samples directly outs[0][j] = inarr[0]; outs[outChans - 1][j] = inarr[inChans - 1]; // spread internal input channels to respective output channels for(chan = 1; chan < inChans - 1; chan++) { outIndex = indexList[chan]; outs[outIndex][j] += pangains1[chan] * inarr[chan]; outs[outIndex+1][j] += pangains2[chan] * inarr[chan]; } } return (w + inChans + outChans + 3); } void shoehorn_dsp(t_shoehorn *x, t_signal **sp) { long i; t_int **sigvec; int pointer_count = x->inChans + x->outChans + 2; sigvec = (t_int **) getbytes(pointer_count * sizeof(t_int *)); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } dsp_addv(shoehorn_perform, pointer_count, (t_int *)sigvec); freebytes(sigvec, pointer_count * sizeof(t_int *)); } pd-lyonpotpourri-3.0.1/sigseq~-help.pd000066400000000000000000000051201430526361000200230ustar00rootroot00000000000000#N canvas 600 60 540 602 12; #X obj 173 217 bng 30 550 50 0 empty empty empty 0 -6 0 8 -260679 -51584 -1; #X obj 29 285 *~; #X obj 29 237 osc~; #N canvas 600 60 474 324 messages 0; #X obj 133 195 outlet; #N canvas 40 386 462 312 clock 0; #X obj 141 124 outlet; #X obj 45 212 send~ external_clock; #X msg 45 148 tempo \$1; #X floatatom 45 122 5 0 0 0 - - -; #X msg 141 98 external_clock \$1; #X obj 141 51 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1; #X text 139 30 must toggle DACs before switch takes effect; #X obj 45 173 lyonpotpourri/samm~ 60 0.25; #X connect 2 0 7 0; #X connect 3 0 2 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 7 0 1 0; #X restore 207 159 pd clock; #X obj 205 234 outlet~; #X obj 205 198 receive~ external_clock; #N canvas 0 23 474 324 other-controls 0; #X obj 28 244 outlet; #X msg 28 128 banggate \$1; #X obj 28 77 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 1 1; #X msg 163 204 adsrgate \$1; #X obj 163 157 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1 ; #X text 209 177 on by default \, zero turns off ADSR; #X text 70 90 open gate for outlet bang on sequence start; #X obj 28 21 loadbang; #X msg 28 45 1; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 0 0; #X connect 4 0 3 0; #X connect 7 0 8 0; #X connect 8 0 2 0; #X restore 133 64 pd other-controls; #N canvas 600 60 673 475 sequences 0; #X obj 72 368 outlet; #X msg 196 213 440 469.333 605 660 704; #X msg 169 312 500 600 700 1300 888 340 3000 773 773; #X obj 223 270 loadbang; #X msg 72 109 rand \$1; #X obj 72 55 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1; #X obj 125 152 tgl 40 0 empty empty empty 0 -6 0 8 -4061 -1 -1 0 1 ; #X msg 125 206 retro \$1; #X text 169 157 play sequence in reverse; #X text 368 216 load a different sequence; #X text 131 73 randomize playback order of sequence; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 2 0; #X connect 4 0 0 0; #X connect 5 0 4 0; #X connect 6 0 7 0; #X connect 7 0 0 0; #X restore 176 98 pd sequences; #X connect 1 0 0 0; #X connect 3 0 2 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X restore 29 158 pd messages; #X obj 29 188 lyonpotpourri/sigseq~; #X obj 29 365 lpp-meters; #X obj 21 17 lpp-icon sigseq~; #X text 120 163 <= controls here; #X text 66 288 output from second outlet is an ADSR envelope; #X text 212 223 indicate start of sequence; #X text 27 110 a simple sample-accurate sequencer with a synchronized adsr envelope., f 69; #X text 247 45 - sample-accurate number sequencer; #X connect 1 0 5 0; #X connect 1 0 5 1; #X connect 2 0 1 0; #X connect 3 0 4 0; #X connect 3 1 4 0; #X connect 4 0 2 0; #X connect 4 1 1 1; #X connect 4 2 0 0; pd-lyonpotpourri-3.0.1/sigseq~.c000066400000000000000000000351421430526361000167230ustar00rootroot00000000000000#include "MSPd.h" static t_class *sigseq_class; #define MAX_VEC 2048 #define MAX_SEQ 1024 #define internal_clock 1 #define EXTERNAL_CLOCK 2 #define OBJECT_NAME "sigseq~" typedef struct _sigseq { t_object x_obj; float x_f; // Variables Here float *sequence; float *trigger_vec; // stores vector with trigger click int seq_len; int seq_ptr;// position in sequence short bang_ptr; float tempo; int beat_subdiv; int tsamps; int counter; float val; void *mybang; void *m_outlet; // NEW void *m_clock; // NEW float flat_gain; float last_val; short retro_state; short rand_state; // ADSR float a; float d; float s; float r; int ebreak1; int ebreak2; int ebreak3; int asamps; int dsamps; int ssamps; int rsamps; float egain; int do_envelope; int bang_on; short mute; int rval; int method; //synthesis method to use float sr; } t_sigseq; static void *sigseq_new(t_symbol *s, int argc, t_atom *argv); static t_int *sigseq_perform(t_int *w); static t_int *sigseq_perform_clickin(t_int *w); static void sigseq_dsp(t_sigseq *x, t_signal **sp); static void sigseq_list (t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_adsr (t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_adsrgate (t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_banggate (t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_tempo(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_retro(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_rand(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_mute(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv); static void sigseq_tick(t_sigseq *x); static void sigseq_report(t_sigseq *x); static void sigseq_readfile(t_sigseq *x, t_symbol *filename); static void sigseq_internal_clock(t_sigseq *x, t_floatarg toggle); static void sigseq_external_clock(t_sigseq *x, t_floatarg toggle); static void sigseq_gozero(t_sigseq *x); static void sigseq_free(t_sigseq *x); static void sigseq_init(t_sigseq *x,short initialized); void sigseq_tilde_setup(void) { sigseq_class = class_new(gensym("sigseq~"), (t_newmethod)sigseq_new, (t_method)sigseq_free ,sizeof(t_sigseq), 0,A_GIMME,0); CLASS_MAINSIGNALIN(sigseq_class, t_sigseq, x_f); class_addmethod(sigseq_class,(t_method)sigseq_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(sigseq_class,(t_method)sigseq_mute,gensym("mute"),A_FLOAT,0); class_addmethod(sigseq_class,(t_method)sigseq_list,gensym("list"),A_GIMME,0); class_addmethod(sigseq_class,(t_method)sigseq_adsr,gensym("adsr"),A_GIMME,0); class_addmethod(sigseq_class,(t_method)sigseq_adsrgate,gensym("adsrgate"),A_GIMME,0); class_addmethod(sigseq_class,(t_method)sigseq_banggate,gensym("banggate"),A_GIMME,0); class_addmethod(sigseq_class,(t_method)sigseq_tempo,gensym("tempo"),A_GIMME,0); class_addmethod(sigseq_class,(t_method)sigseq_retro,gensym("retro"),A_GIMME,0); class_addmethod(sigseq_class,(t_method)sigseq_rand,gensym("rand"),A_GIMME,0); class_addmethod(sigseq_class,(t_method)sigseq_report,gensym("report"),0); class_addmethod(sigseq_class,(t_method)sigseq_gozero,gensym("gozero"),0); class_addmethod(sigseq_class,(t_method)sigseq_internal_clock,gensym("internal_clock"),A_FLOAT,0); class_addmethod(sigseq_class,(t_method)sigseq_external_clock,gensym("external_clock"),A_FLOAT,0); potpourri_announce(OBJECT_NAME); } void sigseq_gozero(t_sigseq *x) { if(x->seq_len <= 0) return; x->seq_ptr = x->seq_len - 1; } void sigseq_internal_clock(t_sigseq *x, t_floatarg toggle) { if(toggle) { x->method = internal_clock; } else { x->method = EXTERNAL_CLOCK; } } void sigseq_external_clock(t_sigseq *x, t_floatarg toggle) { if(toggle) { x->method = EXTERNAL_CLOCK; } else { x->method = internal_clock; } post("method is %d",x->method); } void sigseq_report(t_sigseq *x) { int i; post("randstate: %d", x->rand_state); post("rval: %d", x->rval); post("seqpt: %d", x->seq_ptr); post("manual rnd pos: %d", x->rval % x->seq_len); for(i=0;iseq_len;i++) { post("%f",x->sequence[i]); } } void sigseq_readfile(t_sigseq *x, t_symbol *filename) { FILE *fp; float data; post("requested path: %s", filename->s_name); fp = fopen(filename->s_name, "r"); if( fp == NULL ) { post("could not open file!"); return; } while( fscanf(fp, "%f", &data) != EOF ) { post("%f",data); } fclose(fp); } void sigseq_mute(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { x->mute = atom_getfloatarg(0,argc,argv); } void sigseq_rand(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { x->rand_state = atom_getfloatarg(0,argc,argv); } void sigseq_retro(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { x->retro_state = atom_getfloatarg(0,argc,argv); } void sigseq_adsrgate(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { x->do_envelope = atom_getfloatarg(0,argc,argv); } void sigseq_banggate(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { x->bang_on = atom_getfloatarg(0,argc,argv); } void sigseq_tempo(t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { float beatdur; x->tempo = atom_getfloatarg(0,argc,argv); if(!x->tempo) x->tempo = 120; beatdur = (60. / x->tempo ) / (float) x->beat_subdiv ; x->tsamps = x->sr * beatdur; x->asamps = x->sr * x->a; x->dsamps = x->sr * x->d; x->rsamps = x->sr * x->r; x->ssamps = x->tsamps - (x->asamps+x->dsamps+x->rsamps); x->ebreak1 = x->asamps; x->ebreak2 = x->asamps+x->dsamps; x->ebreak3 = x->asamps+x->dsamps+x->ssamps; if( x->ssamps < 0 ) { x->ssamps = 0; // post("adsr: Warning: zero duration sustain"); } } void *sigseq_new(t_symbol *s, int argc, t_atom *argv) { t_sigseq *x = (t_sigseq *)pd_new(sigseq_class); outlet_new(&x->x_obj, gensym("signal")); outlet_new(&x->x_obj, gensym("signal")); x->mybang = outlet_new(&x->x_obj, gensym("bang")); x->m_clock = clock_new(x,(void *)sigseq_tick); srand(clock()); x->tempo = atom_getfloatarg(0,argc,argv); x->beat_subdiv = atom_getfloatarg(1,argc,argv); x->flat_gain = atom_getfloatarg(2,argc,argv); if( x->tempo <= 0 ) x->tempo = 120.; if(x->beat_subdiv <= 0) x->beat_subdiv = 2; if(x->flat_gain<= 0) x->flat_gain = 0.5; x->sr = sys_getsr(); if(!x->sr) { x->sr = 44100; pd_error(0, "zero sampling rate - set to 44100"); } sigseq_init(x,0); return (x); } void sigseq_init(t_sigseq *x,short initialized) { float beatdur; int asamp, dsamp, ssamp, rsamp; // int i; if(!initialized) { x->sequence = (float *) t_getbytes(MAX_SEQ * sizeof(float)); x->trigger_vec = (float *) t_getbytes(MAX_VEC * sizeof(float)); x->seq_len = 3; x->seq_ptr = 0; x->bang_ptr = 0; x->sequence[0] = 313; x->sequence[1] = 511; x->sequence[2] = 71; x->method = internal_clock; x->a = .005; x->d = .01; x->r = .2; x->egain = .707; x->do_envelope = 1; x->bang_on = 0; x->retro_state = 0; x->rand_state = 0; x->mute = 0; } beatdur = (60. / x->tempo ) / (float) x->beat_subdiv; x->tsamps = x->sr * beatdur; x->counter = x->tsamps ; x->last_val = 666.6661; x->val = x->sequence[0]; asamp = x->sr * x->a; dsamp = x->sr * x->d; rsamp = x->sr * x->r; ssamp = x->tsamps - (asamp+dsamp+rsamp); if( ssamp < 0 ) { ssamp = 0; } x->ebreak1 = asamp; x->ebreak2 = asamp+dsamp; x->ebreak3 = asamp+dsamp+ssamp; x->asamps = asamp; x->dsamps = dsamp; x->ssamps = ssamp; x->rsamps = rsamp; } void sigseq_tick(t_sigseq *x) { if(x->seq_ptr) //weird that we need this x->seq_ptr = 0; // post("bang: val %f s0 %f pt %d",x->val,x->sequence[0],x->seq_ptr); outlet_bang(x->mybang); } void sigseq_list (t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { short i; if( argc < 1 ) { // post("null list ignored"); return; } x->seq_len = 0; for( i = 0; i < argc; i++ ) { x->sequence[i] = atom_getfloatarg(i,argc,argv); ++(x->seq_len); } x->seq_ptr = 0; x->val = x->sequence[ 0 ]; x->counter = 0 ; // sigseq_tick(x); return; } void sigseq_adsr (t_sigseq *x, t_symbol *msg, int argc, t_atom *argv) { // short i; if( argc != 4 ) { pd_error(0, "sigseq~: bad arguments for adsr"); return; } x->a = atom_getfloatarg(0,argc,argv) * .001; x->d = atom_getfloatarg(1,argc,argv) * .001; x->r = atom_getfloatarg(2,argc,argv) * .001; x->egain = atom_getfloatarg(3,argc,argv); x->asamps = x->sr * x->a; x->dsamps = x->sr * x->d; x->rsamps = x->sr * x->r; x->ssamps = x->tsamps - (x->asamps+x->dsamps+x->rsamps); x->ebreak1 = x->asamps; x->ebreak2 = x->asamps+x->dsamps; x->ebreak3 = x->asamps+x->dsamps+x->ssamps; if( x->ssamps < 0 ) { x->ssamps = 0; // post("adsr: Warning: zero duration sustain"); } // post("A %d D %d S %d R %d gain %f",x->asamps,x->dsamps,x->ssamps,x->rsamps,x->egain); return; } t_int *sigseq_perform(t_int *w) { t_sigseq *x = (t_sigseq *) (w[1]); // t_float *in = (t_float *)(w[2]); t_float *out = (t_float *)(w[3]); t_float *adsr = (t_float *)(w[4]); int n = (int) w[5]; /*********************************************/ float *sequence = x->sequence; int seq_len = x->seq_len; int seq_ptr = x->seq_ptr; int tsamps = x->tsamps; int counter = x->counter; float val = x->val; float last_val = x->last_val; int ebreak1 = x->ebreak1; int ebreak2 = x->ebreak2; int ebreak3 = x->ebreak3; float egain = x->egain; float env_val; float flat_gain = x->flat_gain; int do_envelope = x->do_envelope; int asamps = x->asamps; int dsamps = x->dsamps; // int ssamps = x->ssamps; int rsamps = x->rsamps; int bang_on = x->bang_on; short bang_ptr = x->bang_ptr; short retro_state = x->retro_state; short rand_state = x->rand_state; float etmp; // short bang_me_now = 0 ; float trand; /*********************************************/ if(x->mute) { while (n--) { *out++ = 0.0; } return (w+6); } else { while(n--) { if(counter >= tsamps) { counter = 0; bang_ptr = (bang_ptr + 1) % seq_len ; if (rand_state) { trand = (float) ( rand() % 32768 / 32768.0) * (float) seq_len; x->rval = trand ; seq_ptr = x->rval % seq_len; } else if (retro_state) { seq_ptr = (seq_ptr - 1) % seq_len ; if( seq_ptr < 0) { seq_ptr = seq_len - 1; } // } else { seq_ptr = (seq_ptr + 1) % seq_len ; } if ( seq_ptr >= seq_len || seq_ptr < 0) { seq_ptr = 1; } val = sequence[ seq_ptr ]; if( bang_ptr == 0 && bang_on) { clock_delay(x->m_clock,0); } } *out++ = val; if( do_envelope ) { if( counter < ebreak1 ) { env_val = (float) counter / (float) asamps; } else if (counter < ebreak2) { etmp = (float) (counter - ebreak1) / (float) dsamps; env_val = (1.0 - etmp) + (egain * etmp); } else if (counter < ebreak3) { env_val = egain; } else { env_val = ((float)(tsamps-counter)/(float)rsamps) * egain ; } *adsr++ = env_val; } else { *adsr++ = flat_gain; } counter++; } if( last_val != val) { last_val = val; } x->seq_ptr = seq_ptr; x->bang_ptr = bang_ptr; x->counter = counter; x->val = val; x->last_val = last_val; } return (w+6); } t_int *sigseq_perform_clickin(t_int *w) { t_sigseq *x = (t_sigseq *) (w[1]); t_float *trigger = (t_float *)(w[2]); t_float *out = (t_float *)(w[3]); t_float *adsr = (t_float *)(w[4]); int n = (int) w[5]; /*********************************************/ float *sequence = x->sequence; int seq_len = x->seq_len; int seq_ptr = x->seq_ptr; int tsamps = x->tsamps; int counter = x->counter; // float val = x->val; float last_val = x->last_val; int ebreak1 = x->ebreak1; int ebreak2 = x->ebreak2; int ebreak3 = x->ebreak3; float egain = x->egain; float env_val; float flat_gain = x->flat_gain; int do_envelope = x->do_envelope; int asamps = x->asamps; int dsamps = x->dsamps; // int ssamps = x->ssamps; int rsamps = x->rsamps; int bang_on = x->bang_on; short bang_ptr = x->bang_ptr; short retro_state = x->retro_state; short rand_state = x->rand_state; float *trigger_vec = x->trigger_vec; float etmp; // short bang_me_now = 0 ; float trand; int i; /*********************************************/ if(x->mute) { while (n--) { *out++ = 0.0; } return (w+6); } for(i = 0; i < n; i++) { trigger_vec[i] = trigger[i]; } for(i = 0; i < n; i++) { if(trigger_vec[i]) { counter = 0; // bang_ptr = (bang_ptr + 1) % seq_len ; if (rand_state) { trand = (float) ( rand() % 32768 / 32768.0) * (float) seq_len; x->rval = trand ; x->seq_ptr = x->rval % seq_len; } else if (retro_state) { x->seq_ptr = (seq_ptr - 1) % seq_len ; if( x->seq_ptr < 0) { x->seq_ptr = seq_len - 1; } } else { x->seq_ptr = (x->seq_ptr + 1) % seq_len ; } if ( x->seq_ptr >= seq_len || x->seq_ptr < 0) { x->seq_ptr = 1; } x->val = sequence[x->seq_ptr]; if(x->seq_ptr == 0 && bang_on) { clock_delay(x->m_clock,0); } } out[i] = x->val; if( do_envelope ) { if( counter < ebreak1 ) { env_val = (float) counter / (float) asamps; } else if (counter < ebreak2) { etmp = (float) (counter - ebreak1) / (float) dsamps; env_val = (1.0 - etmp) + (egain * etmp); } else if (counter < ebreak3) { env_val = egain; } else if(counter < tsamps) { env_val = ((float)(tsamps-counter)/(float)rsamps) * egain ; } else { env_val = 0; } adsr[i] = env_val; } else { adsr[i] = flat_gain; } counter++; } if( last_val != x->val) { last_val = x->val; } x->bang_ptr = bang_ptr; x->counter = counter; x->last_val = last_val; return (w+6); } void sigseq_free(t_sigseq *x) { t_freebytes(x->sequence, MAX_SEQ * sizeof(float)); t_freebytes(x->trigger_vec, MAX_VEC * sizeof(float)); clock_free(x->m_clock); } void sigseq_dsp(t_sigseq *x, t_signal **sp) { if(!sp[0]->s_sr) return; if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; sigseq_init(x,1); } if(x->method == EXTERNAL_CLOCK) { dsp_add(sigseq_perform_clickin, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } else { dsp_add(sigseq_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, (t_int)sp[0]->s_n); } } pd-lyonpotpourri-3.0.1/smap-help.pd000066400000000000000000000004641430526361000173000ustar00rootroot00000000000000#N canvas 246 169 450 300 10; #X obj 141 163 smap 0 4; #X obj 144 113 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 0 1; #X floatatom 141 195 5 0 0 0 - - -; #X text 49 56 remap a 0-127 MIDI input range to the output range specified in the arguments; #X connect 0 0 2 0; #X connect 1 0 0 0; pd-lyonpotpourri-3.0.1/smap.pd000066400000000000000000000011721430526361000163470ustar00rootroot00000000000000#N canvas 0 22 458 308 10; #X obj 88 84 inlet; #X obj 88 110 / 127; #X obj 265 144 - 0; #X obj 283 38 t b b; #X floatatom 128 161 5 0 0 0 - - -; #X obj 88 181 *; #X obj 88 210 +; #X floatatom 135 192 5 0 0 0 - - -; #X obj 88 237 outlet; #X obj 283 17 loadbang; #X floatatom 205 125 5 0 0 0 - - -; #X obj 227 66 float \$2; #X obj 304 67 float \$1; #X connect 0 0 1 0; #X connect 1 0 5 0; #X connect 2 0 4 0; #X connect 3 0 11 0; #X connect 3 1 12 0; #X connect 4 0 5 1; #X connect 5 0 6 0; #X connect 6 0 8 0; #X connect 7 0 6 1; #X connect 9 0 3 0; #X connect 10 0 2 0; #X connect 11 0 10 0; #X connect 12 0 2 1; #X connect 12 0 7 0; pd-lyonpotpourri-3.0.1/sound/000077500000000000000000000000001430526361000162115ustar00rootroot00000000000000pd-lyonpotpourri-3.0.1/sound/BD0010.aif000066400000000000000000002563021430526361000174700ustar00rootroot00000000000000FORM\AIFFCOMMF@DSSND\ _ \Ds #&),/614?68;-=X?kArC_E?GHJ{LMO(PQSITUVXYZ Z[\]y^]\[ZYXW\VTSVQPbNMBKIHIFDCA3?_=;975320 .,*( &#!gR7 $ jSD-#  7QqҒнLɄ R¤X|IR˨hA&(Hm֛cgp Y”Y..Y Is`uWɜf9 =jҫ_ oٳPжY蹅#ϾE y%_́Іl<כRۣ<|8q)Pp(8FOZfkrrttpjl\TJ=1" x\?#{S-[.l6  !"\#"#$%s&-&'(o)()*+X,,-|.-./0D012Q234O456@678&89b9:;1;>?E?@`@A{BBCCD!DE%EF!FGGHHHIrIJXJK4KLLyLMKMNNyNO8OOPNPQQXQRRURRSCSST(TpTTUAUUVV;VvVVW#WUWWWXXHXtXXXYY8Y^Y}YYYYZ Z&Z7ZNZeZtZZZZZZZZZZZZZZZZZZZZZZrZ_ZLZ7Z Z YYYYY}Y^Y8YXXXXwXEX WWWWUW&VVVyV?VUUU=TTTnT$SSS;RRR>QQQ1PPyPOODNNrNMM LL4KK7JJ8II-HHGFFiEE6DCC_BBAj@@?b>==C<;; :L9877)6[5433 2'1R0m/.-,++*)(2':&B%J$H#O"J!Q ID=8(`I* \5m:T([0\)V#I޳݂Oص׊W*ѡnJʟ{V2«oP5!ڸ˷~uwovyƥӤ#=\ȝL&m0sŔ [ _ÐRǍ,#A҇nCꅎ<서V ʃMقxS(ށŁyl[SOIKMS^k|؁Fmʂ+b؄U$tcfv݉9i֋;pVЏJŐ<=FCƔOӕZp"?Ԛf&T񞉟#à_Aᣈ-Υwjjjȭu'ۯ8򱣲X ´}2綣]ԹKʼA@‡GŒ_Ȫp9̓V!ϸ{Lӫu?רuA۰yKߴT&d4r@T(i;{MZ(e5f5f4 Z % Hd'x?IPQ !":"#$m%'%&'K(()p*!*+,<,-.J./0U112Z334S556H678789z::;[;<=/=>e>?@*@AYABCCD2DESEFiFGHHIIJJK$KL%LM!MNNOOOPsPQ\QR>RSSSTcTU6UVVhVW+WWXNXYY`YZZiZ[[f[\ \Y\\]>]]^^_^^_2_d__`"`b``aaBapaabb?b`bbbc c:ceccccdd#d?dZdodddddddeeee/e/eFe=e@eQeDeUe@eMe@e9e=e,e$eeedddddddwdedCd2d cccccecScbbbb~bOb aaaaWa$```v`E`___K_ ^^^C]]]p]%\\\A[[[MZZZWZYYRXXX@WWW&VV]UUU0TTcSSSRR@QQ\PPsOOO NN MMLLKJJqIIXHH:GGFEELDDCpBB,A@@6?>>/={<<;[:99*8l7665T4322'1P0/.--,C+e*)('&& %$$4#H"[!j s v k _ Q B2"t]E6pR9sXB)ݺܧۓڅm`O>0" +CWiմ@f@vVը^>1<d˞5kcܙerFە|]eŒ)v@Ґq<ۏ}dX>2 -5PXiՐn>?@@A!AB4BC@CDNDEOEFMFGJGHBHI:IJ*JKKKLsLMSMN3NO OxOPBPQQ~QRGRS SkST$TTU:UUVBVVW;WWX/XXYY`YYZ?ZZ[[M[[\ \L\\\]4]s]]^ ^9^p^^^__U_r___``0`Y`o````aaa/aIaZawa}aaaaaaaaaaaaaaaaaaaaaaaaaaayasaZa@a1aa`````v`R`*`____q_O_^^^^e^5^]]]l]0\\\\N\[[[Q[ ZZZ>YYYkYXXX9WWWLVVVOUUUNTTT@SSS#RRdRQQ9PPtP OO8NNbMMMLL:KKVJJmIIIHHGG$FF!EE"DDCCBBA@@m??S>>/== ꚞNw8󘴘{@ ڗuG$іwS@$ݕЕʕƕ•ƕ•̕ӕԕ '1Md}і5\|ʗ&OE|'_؛Xڜe<ԞjZSY jģ CjϦ7o٨FmܫNĬ:"||vw|4Jֺa𻀼 0Pw8cÔ/bƛ6oɯJˏ+rθXХEҕ9Ԇ0ց)*(܅2ތ6DVat)e>?f?@i@AfAB]BCRCDADE-EFFFGnGHKHI*IJJmJKAKLLpLM?MMNYNOOxOP1PPQ6QQR6RRS.S~STTcTTUGUUVV[VVW!WeWWXXVXXYY:YhYYZZ2ZeZZZ[[C[b[[[[\\@\Y\x\\\\\]])]>]O]b]p]]]]]]]]]]]]]]]]]]]]]]]]]]o]^]O]>]]\\\\\\t\Y\=\[[[[[`[:[ ZZZZaZ7ZYYYlY6YXXX[XWWWeW&VVV`VUUUJUTTlT'SSS>N==D<<>;;4::"99887q66U55744322S11&0//X.. -,,@+**V)) (a'' &`%%$T#""A! "i8{;y+iCv=m " P r;_ /Ot #C`z 9Tn+Haz%Db܁ۢ%CkՏ԰#IqϜIvʢ;nƞH½:{>Ǽ\A89RyްFh٬RȫA<>KѧZv /Ƥe<ᢇ+ҡ3ޠGu4x@ԝq@yY5ț~h`VKA=9669::AEOZcq~ɛݛ *Bazޝ#LvƝHx؟ =uSʡGâHϣ_;ե"q¦g b iyӪ2NxޭF~N%mOó7rgZܹ[ҺSڻUؼ]dmz-¸@^y Ɨ+ǽPs ʛ3a͍%μTЊ$ѿ[Ӓ2k֫K؎+n۴Wݡ=ߊ.zka[SNLLJINTVT\\] _ `[ [  V P H?4}!eU9~b> z!!"N"#$"$%R%&''(M()x**+7+,],-../2/0L01g12}3 3445.56=67E78L89Q9:Q:;O;7>?#?@@@AmABQBC4CDD|DEYEF*FFGbGH)HHITIJJqJK,KKL>LLMCMMNCNNO8OOPPoPPQKQQR!RdRRS*SiSST T[TTU UCUxUUVVBVyVVWW+WUWWWWXXZBZBZFZFZCZFZ?Z;Z1Z.Z$ZZZYYYYYYYYYhYOY:YY XXXXXjXJX(XWWWWjW?WVVVV]V)UUUU_U%TTTT@T SSSPS RRRDRQQtQ,PPPNPOOjONNwN%MMzM*LLyL%KKoKJJ\JIIBHH|HGGQFFFEEODDxD CC1BBTAAqA@@??0>>A==T<<[;;d::j99s88p77m66g55]44O33>22/1100/p..S--4,, +y**O))'(''[&&!%$$L## "k!!' 6><1!iN%g4y < | .o#Y4m?t ;k+[Bq%S6cIx6fݗ,^ٕ2cՠ J|Ѷ.lΪ$j˧2sȹKƓ'zcZ dx׻4\ĸ-qߵR5".Jլg(ªZ7ݨ~(Чy(Ԧ;쥥`֤Wޣo4ТrHˡ`C%ՠm[PC7.& $-7>JSer}Π8Onˡ4_Ӣ'QBtݥL7v4tAʩY;۫'wȬopŮw˯+E_²'NWĶ3 wZȹ6"~g\ԾOƿIDA=>EMXdvɉʞ)˸E_΀ Ϛ.оRu Ӟ/Zֈ!׵PـڳK܃ݹRߍ)b:zY=}fH3xbM;'q\K:%k[C) p  U 9 _>~V/g7m :i 0 ![!"##$E$%j%&''(?()V)*x*+,,-0-.B./R/0`01g12t23u34}45{56x67t78e89Y9:L:;8;^>?9?@@@A]AB,BBCcCD.DDEPEFFrFG,GGH>HHIBIIJ@JJK7KKL%LuLMMWMMN.NrNNODOOPPEPPPQ5QeQQR RBRrRRSSUcU|UUUUVV V5VLV`VuVVVVVVVVVVVWW WW WWWWW W WVVVVVVVVVVVyViVSV;V)VUUUUUUmUGU,UTTTTtTNT'SSSS~SLSRRRRWR&QQQ~QCQPPP^POOOaONNNQN MMzM5LLLSLKKcKJJsJ!IIyI"HHuHGGfGFFTEEE6DDuDCCIBB~BAAG@@q@??0>>R==u<<<;;8::Q99`88l77y766 5544332211 00/~..p--c,,Q++7**!)) (~'']&&=%%$##a""5!! o<l0Tk&5??8 ( u  ^ Bh< T`&e#^_PG5s(f\TRݕZښ"e׫8z Rҟ0hͷ X˭SɫXǭ e |@¤l7 uR1xry~4ŲX~E毀 e T_ w#ܪM©K Ψ_(񧼧_/ئ^?ץfQ:!ۤʤ~~ͤ٤ !3G`wǥ"=bȦʮ\@װ%uűlfnȴ ڵ9Uwظ<mκ:zQ, y^D)Ž{nh_\TUX`ir΀ϋН(ѳATmՄ֥2Svڙ%ۻOz ޝ1_OH{F~S#Z.f@zT2hAU2k G[ . e 5 p;l ;n5d(Oz 3V~ / !N!"i"#$$%/%&A&'T'(f()x)*++,,--.$./(/0"01"122334445o56b67G7838999:j:;E;<<<=`=>/>??k?@.@@A]ABBzBC5CCDEDDEPEFFQFFGMGGH>HHI)IrIJJKJJKKgKKL1LpLLM-MeMMNNSNNNO*O]OOOP#PMPyPPPQ$QJQtQQQRR%RBReRRRRRSS"S8SLSaSsSSSSSSSSSSST T TTTTTTTTTSSSSSSSSSSSSsSbSQS8S*SRRRRRRmRLR+R QQQQzQRQ1QPPPPUP-OOOOkO8ONNNdN.MMMMBMLLLFLKKK=JJJjJ%IIIHHHHdHGGsG"FF{F&EEE%DDtD CCfCBBTAAA6@@q@ ??I>>x>==C<ѸbKߵzV=䲌3߱9氙Mn(宠\߭e-󬻬Rc9媿vT.өjW?)֨ʨŨҨڨ1BWnҩ#Eeʪ5[٬-\P#Yί@|6y>ɲ X/{ƴdPDCM[ lɻ*Muݾ?zEc>íĐwVGǶ0Ȧəʉwplmjt|Ӂԇ Օ ֞,׳:Lbu܎ݬ5StA`0>>?J?@@_@AAnABBrBCClCDDcDEEOEEF2FFGGUGGH)HlHHI2IrIIJ'JiJJKKLKKKL'LWLLLMMGMtMMMNNHNjNNNOOOAO^OOOOOPP#P>>(==f=<&٬ȬyukdZZVVRSSVX_dgtxĬ֬ 5O`zɭ#Caʮ>c>??o?@@`@A AQAAB;BBC CoCCD>DDE ETEEFFTFFGGRGGGH4HhHHI I>IrIIJJ6JeJJJKK9KaKKKKLL:LZLyLLLLM M&M?MTMmMMMMMMMNNNN)N2N:NGNONSNYNbN`NiNiNiNdNfNdN`N\NSNONKN@N7N+N!NNMMMMMMMMtMcMFM1MLLLLLLgLIL%LKKKKkKEK"JJJJsJGJIIIITI$HHHHOHGGGjG/FFFsF8EEEyE1DDDdD CCCFBBBiBAAA2@@@????I>>>I===D<<<1;;y;::_:99?88~877O666 55P44433>22h11100oM *  o K Y._1`*TGg/L p/L f'Ee&Ej,PyAަs;ۣsEذׅ_7ԥӂhQ3ϭ"Ε̂ͅvpt|ǂ ƑŦ0ķEd…Ao @޾}\HG𺠺LXĸw1鷤Y׶Uߵg*񴿴Q 𳿳a3 ವf@ٱvX;!԰}l^O>4  ܯܯׯٯٯݯݯ#1>R[oа5Nlı'Kn߳0Yݴ 4fŴ*[ƶ6q޷"YӸSԹX&rIۼ'wcPKLR_½u0đQůtBǥn=ɪyL˴&̓nKλ-ϜЂcJ9ӯ%ԛՋyqd^YSSQQSTY^kq{*;JZp 5Mey3M`z:Wn*D[r( C X n  !/BOdo}  (*3789: 7 !-!"$"#!#$$%%%&q&']'(P()9)*!*++t+,X,-9-.../\/0701 1r12@233u34F45 5i56(667I788i899z9:+::;0;;<-<<='=w=>>g>??O??@.@u@A AKAABB]BBC C_CCDDSDDEE:EqEEFFIF{FFG G>o>"===6<<>Z>>?#?k??@*@i@@A"A]AABBAB|BBC CRCCCDDKDuDDDE)EPEzEEEFF>>e>#===K=<:00+    vh[I1$nWD*mS5qT4iI,cH*fM6 n_M<ݵ/ܫ&ۢڙٕؔ ד֖ՙԟ'Ӭ1ҸBUjςΞ)Ns˟1cɒ/gǣDƉ(teúip 8Y ʿ8u-򽳽o4N㻪vC⺱W*չ[0ǸbB Ʒ~eM;ܶ˶vmm`aYXUUSOUUX\`jmuɶֶ 3E^sԷ1MoǸ5[ҹ"OrѺ+Z#Yü-hپPɿ @DV&p¹OÔ/fŻ\ƯWǩTȭYɲ hʽv2̏Qͫ k2ϒ^о$ыZҿ(ӏd4բ{V/؜ ~^=۰"ܘ {cM9*}tdZNG;852-'&%$'&$,+.16:?FEFMPX]b`dffk l m k l l ijb_WMJA:+"}iYF1 r !W!"6"###$e$%=%&&&']'(2())p)*>*+ +r+,<,--e-.-../K/0 0d01"1|124223:334B445?5569667-7|788i889M99:+:p:;;B;;<>N>>>?5?p??@@J@|@@AADArAABB,BVBBBBC#CJCsCCCCDDAD_D|DDDDEE"E7ESEhEEEEEEEEF FF#F+F;FCFMFPF^FeFiFmFoFrFsFwFsFwFsFmFmFaFbFZFPFLFA @@@u@A@ ???l?0>>>>H> ===Q=<<FQ]chnr v w  ~ }xxrndc]QJ?50 weXG>3%odWN?7)$ ߍ ތݓܛۣ(ڮ8ٻCUg}Օ#ԴCc҅ѭ=nϘ1d͝ń[ƨ:LJoȻYɮRʢH˜G̠QͥVδl!І=ў[һ$~Hԥ s<֣qDا|Nڼ%ۓlGݵ$ޔqS2oX>'ueQF4& |tfZSKGC80/'  ~wthbVN J @ 7 , !  tgWL5%qVB$ ~aB$n I !#!!"d"#>#$$w$%J%&&}&'K'((w()@)**h*+&++,D,,-Y-..l./ /x/0+001,1~12(2{23$3q344d445L55616x677V778*8p88989z99:A:::;6;x;;<$<\<<==:=r==> >=>o>>>?)?Z???@@,@W@|@@@AA3AXAyAAAABB3BLBbBBBBBBC CC/C@CQCcCpCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCxCjCYCFC5C CBBBBBBBnBTB;BBAAAAAfA@AA@@@@g@:@????l?>>>R>====U=<<N\l߀ ޑݪ6Okڈ٪;\ׅ֫Bjԛ6cҝ:tйTϚ5΀)r̿ol x!ɉ5ȜT u/Ƣ\ŐSĕVåm2‰T!W'rDÿzQ/ž_B"ɽcO9%ؼļ|tg[RJA=93,+(''+(+/38=AJNYcp{Ӽ 2I^t޽3Spξ;^Կ$Qv'ZG}³TÆ3kĦZŕTƗ]ǣ,nȷDɉgʳL˔4̂$tgμhϼeкjy*ӋCԜ]շy6מ`#وRڲۀO݂ܵV,ߕlCdCoQ0iQ9"{gR;+ mYL9(xgXD6+maQ=,   o ^ G 3ycH.kK* {W2R0l@  v !F!""z"#B#$ $v$%9%%&\&''}'(;(()V)**d*++v+,%,,-/--.-../*/~/0!0r011a112I223,3u344O445#5i55636w667=7|77858u889%9^99::A:w::;;E;x;;< <9 >0>Z>|>>>??'?F?d?????@@$@:@R@e@|@@@@@@@A AA%A2A>AGAOAYAaAmAqAuAyA}AAAAAAAAyA{AuArAhAaA\AOADA@A3A%AA A@@@@@@@|@i@T@:@%@ ??????f?J?'?>>>>>Y>7>====q=K=<<<>>4>H>]>k>|>>>>>>>>>>?? ???? ?#?#?)?'?)?'?'? ? ???? ?>>>>>>>>>>>|>j>]>E>7>"> ======~=d=G=+= <<<<Īăa=ùÝ]H.¬šl\F6 wwpookhkhllsuy 2GWl~š¬ %@\yÓô0Uvęľ0Vŀţ!K|ƨ/`ǐ'Zȋ+hɚJʀʹ1l˰'į,jͯ1΀οOϓ#mжIј-yiӳSԥHՙ@֒?דBؗC٠Rڮdۻv2݌Hީd$G r8e2b1c1oAT.jF!i@iG#oO- zV=fF&vQ.\< d <  ` 9 Y1pD~R%W+[%T!~D l-O e !#!{!"9""#L#$$]$% %c%& &c&' 'e'( (b())V))*F**+2++,,i,,-E--.#.k../=//00S0011Z1122Z2233K333474n4455I55566N6|6677=7m77788H8u8889989\9~999: :/:L:j:::::;;1;M;g;};;;;;;< < <1h Cd=i:^6[w/Sp ,Hq$In$Or/XAk6_(Y%X)e8vߴVޚ<!i ۳XڢJٙAؔ@חF֝JժY ԽnӁ=ҦWр;Ьf#Ϝ[ΗZ͢_+̱z<˛a*ʓ\,ɝj<ȾȌb<ǜqO+Ƣ~`?!ŲŖ{fJ5ķĥĕăvcYE=0# "/8HRaoĐĢij-B^sŌū6RtƓƵ>dNJǬ"Msȝ Nxɫ 6gʚ6d˛[0rI`7xR*e8y O ! _ 0 h : k@u@o5c)Tw4Ww7I\q # z !-!!"2""#6##$4$$%,%%&$&u&''a''(P(()5))**^**+9++,,Y,,-&-j--.1.p../5/t//0-0m0011T111252p2233C3t334 4>4j4445'5T55556'6Q6t6667747Z7x777788;8]8u8888899/9G9\9s9999999: ::$:0:@:J:Y:_:j:t:|::::::::::::::::::::::w:p:g:Y:R:A:5:&:: 99999999z9e9P989!9888888e8H8&877777c7E766666^686 5555e585444}4L43333V3 2222M2111o140000H0 ///P/...V.---N- ,,{,?+++h+***F)))g)(((6'''L&&&_& %%g%$$s$##y#%""z")!!w! n f \I0w_B b>tQ&]1b0d 2 b 0 ^ &SEr5_"Q~ r? s>  p 8  j 5 a )VAh,N k)E]q.<IQT\ Z !!U!!"N""#;##$0$~$%%g%%&J&&'.'u'( (P(()')n))*:**++F++, ,M,,- -E---.8.s..//W///030d001181i1112(2Z22233:3g3334434Y44445505V5w55556636M6p6666677727I7\7q77777777888 8)878?8H8P8X8a8h8l8u8u8}8z8~88~88~8~8}8}8y8p8n8i8_8[8S8J8?838*888777777777q7Z7I7477666666l6M68655555w5X57544444`4143333g3>32222^212111o1?1 000n0:0///c/*...}.E.---R-,,,Y,+++_+***M*)))<(((j(!'''K&&&h&%%%9$$$Q$##h#""t"(!!!1 4754+zm^M6}`D'hK$^7 q I  U -`3f;p=o@tCtIxCyN}M!T-^7p F\:xU4z`F4l_ YUT߬Wޯ_ݹiv)ۊAڢY z.؟S |9֮h'՝aԛYӞa!Үp5ыRаzDϫzJθΊW0ͩ|Q(̮̈b<˱ˇpH* ʯʕx_E(ɲɞɉtbM=+ȹȪȤȘȏȈȀzonkeba]]^]a^biiiwwȀȋȋȝȡȭȷ -]#El2TA q4_(S~Bj4[$Lw<d * P  o 4 T r4N m&?U gv+9AHGHF;3 # v !!b!!"K""#/#y#$ $Z$$%5%%& &V&&'%'e''(2(v(()<)x))*8*u**+-+i++,,T,,,-0-g--..B.s..//;/m///0)0X0001 141^11112#2N2o22233 3G3d3333344:4W4l44444555+5C5V5f5{555555556666(6/696A6J6J6V6[6^6c6f6g6l6n6n6l6n6g6j6f6c6^6V6Q6J6F6=656/6$666555555555v5f5M5@5'54444444j4O434333333[3>322222l2E211111V1010000Q0%////i/;/...p.<.---j-3,,,,Q,+++l+.***x*=))){)A(((z(6'''p'*&&&_&%%%@$$$m$###>"""`"!!y!( AOa goqr qj^ TG8&mXB(n S - n  Q 1mH'd>}Y2mG Z8rO,hA!_>|]F'n Q>,sePJ@;76aϏϵ 8eАнItѦ5lҢ=tӧHԃԾ/nզ[֖Nד KؐV٘fک6yOܛ'qݽUޚ1߄hTD4(z!yvpt!y'/:LXj#}5Me :So+K j*F g$Ie)Ef$?^{9 T m + B W d#x4AP^fkpstlh ^P>*v` E !#!l!!"F""##a##$4$v$%%D%%& &O&&' 'K''( (D(~(()3)p))**V***+1+e++,,3,i,,--,-a---..E.p...//J/t///0 020\0{0001 1'1I1n111122292U2p22222233(3>3T3g3x3333333334 44"4*434:4?4L4O4W4]4d4a4h4j4n4l4l4n4l4j4e4e4`4]4U4P4L4D4;434-4!44 3333333333x3d3R3A3)33222222o2Z2=2#211111r1R1.100000]070////x/P/(....}.O. ----o-=- ,,,{,D,+++y+B+ ***d*,))))H)(((b('''e'&&&&h&%%%%c%#$$$V$###@"""p"(!!!J! o &C\u'7DS`c begb]SK>3{ i S A . u `H0r\@&h N2vW@+j O8~&hT@*qcOA61(|#vuu$}+3!!""O""##Y##$$Z$$%%Y%%& &J&&&'3'n''((P((()')_)))*)*\***+ +N+}++,,3,],,,- -/-Z----..A.h....//1/T/t////0 0%0>0Y0r0000011101A1V1g1z111111112222+2+2<2@2N2U2Z2b2b2j2p2s2t2x2{2x2{2{2{2x2x2t2p2o2h2h2[2U2Q2F2B252/222 1111111111r1Y1I18110000000d0L030//////g/C/%/....|.V.1.----o-I-,,,,w,O,"++++l+>+ ****I*))))H)(((s(;('''Y'"&&&t&9%%%%D% $$$M$###K#"""C!!!t!4 b Hm*Fg:Tk{+;KRU]] ` ^ ]X S K @ 6 )xj XKC/v#j[M:)wfWK<0{%tkc ]WONQSS[ fu!~2@Z r&Cb;bJ߿|4ޯk(ݨb#ܠd)ۦm,ڷ{BّXش{Dפq:֞t@ծՃT(ԡrH"ӧ}T- ҿҕsS0 ѩчkL/ йСЃmU6! ϴϟώyhWB1"μγΪΟΗΑΆ΂|usqhlhghhggklouu}΄ΆΎΙΟΦγμ$5CThvϋϟϵ !8TmЃЛй +Igуѩ)MoҒҸ&PvӞDmԓIxդ4c֙.[ב1j؛?wٲ#_ږKۆ>z;{ݹ@ހF߈T%mDdBjP4}kWE5-|&uqkhifklt"r#~+9BGJ^hs!|28FKS \ fm  u # v & v % | & } %{&x siaXJ=&vbJ0u[8Y0wG\ # g !(!j!!")"k""##`##$$I$$$%3%j%%&&N&&&'"'S'''(!(P((())A)p)))*%*M*}***+$+L+m+++, ,3,U,z,,,--#-E-g-----..5.Q.k.....///*/?/R/g/z////////0 00%030<0H0S0Y0f0m0r00000000000000000000000v0r0h0\0X0H0@070-0!00/////////p/[/G/2/ /......y.^.E.'. -----v-Y-4-,,,,,j,M,+++++_+9+****k*E*))))_)0)(((q(C('''v'B'&&&t&:&%%%_%'$$${$?$###U#"""_" !!!^!# a "YGw1]@_:U q#:Obr"/9ELT T Z  Z  X  X ZRQOKB<:1.})utmlg _ Z \\^ediq{(6HSf~*B_x4T {2\l֐ֿCmמ*Y؋ؽMلٶ Wډ)`ۚ Bzܵ'iݝYޑMߎNO])o;X,|U0aC(tcO?+|k_XPJCD;9:74<658:>899:832 1 ~ * {  t  h  c UI8*xfP9gK.s R,uH^+o8|B@ 8 x !-!h!!""V"""#7#q##$$M$$$%%U%%%&&N&}&&'';'i'''((I(s((() )A)j)))**-*K*u****+"+B+a+~++++,,2,Q,i,,,,,---3-H-]-n-------...#.-.<.I.V.b.k.|...................................u.h.^.V.F.>.-..---------o-Z-E-/--,,,,,,i,T,2,++++++d+C+ +****u*W*-* ))))r)J) (((({(Q('''''u'F'&&&&Z&(%%%%b%+$$$$X$&####K#"""g"2!!!}!B! T \[WN ?m*Z7\7Vp(CY p$5HX h  p # | 0 8 ?KRU\ cbgmtw#y&}(/4:>IPX ck*6G[k8Ph=^3_@i*YKAACJߙ^!ޯt<ݓX&ܼ܁O۴ۀOںڈY(ٙmAؽؒj>כpJ ֲ֐hI'տ՝zbA"ԭԔw\C+ӳӜӆqaN6$ҴңҙҎ}uh`SMA<50)    ')1:>IQ[ks|҄ҕҟҮҼ 2FXh}ӒӨ!6QjԆԡԾ/PkՏխ5U{֚ 2XׂרKv؛Pz٪5cڔ%Xۍ۷%Y܎+bݜ Aw޲%cߛJC~9|8wBKV-lA\;c> lM3kPC,p_OE8.~ ri YWJG93,z#si YQF9 - z ! m  ] F 5 q V>$pP3|Y2~ S*m=Na%i&j%b\ K / j !!J!!!"$"V"""#&#\###$"$X$$$%%B%g%%%&&O&u&&&'"'F'n'''( (2(T(w((())')E)g))))**!*>*W*u*****++)+B+[+l+++++++, ,,+,<,H,`,j,u,,,,,,,,,,,,,,--- ------------ - - ,,,,,,,,,,,,,,,,z,j,\,M,?,+,!, ++++++++m+W+C+)+******s*W*>*!*)))))g)J)()(((({(Q(2( ''''u'L'"&&&&y&O&%%%%%w%J%$$$$^$*####d#6""""d".!!!!W! z ? Ym2y:D?9u1bP7cDi;_{4Mf ~ 1 I _  q % 5GYfv&6@P\ gz'2AQany.BM`u(V t+Ml&Ot,V?q.c ZSW^ g/C \&߷߀Kީx@ ݤw@ܭ~L ەg9 ڶډ_5پٓkEح؋d@׳חuT6ֻ֡քhM4յբՈoaE0"ԲԟԐԂqfXH<3% ӽӼӼӽӽӽ !/3DO]fyԆԔԥԶ"8LbsՍզջDIT!a2zMd?`=dC)qV'Y'~''''((8(U(q((((())+)E)])x))))))***6*F*W*k*y**********+ +++)+.+7+>+G+J+S+S+[+\+e+h+e+m+i+i+i+l+e+i+e+e+a+\+X+S+N+F+?+9+.+*+"++ +**********|*h*W*F*4*#*)))))))|)c)L)3))(((((v(X(<(!('''''a'?''&&&&o&N&$%%%%%c%<%$$$$i$A$####d#6# """z"K"!!!!U! T "Gi9Sc/q:FGFCz3h%YAq)T {0V {. S  o ' E b  ~ 1Kf~4Kcx+CU m8O`|+C[ t,F^y/Nk@d?bDq#S>s+b"YTWY`)q6Mo3Y%S ߼߈R%ޔc3 ݨ{M!ܜrF"ۣ|S)ڷڔsJ'ٿ٠|]8ؾ؜؆dK-רדxcJ1!ֻ֣֎քo^Q>5 տյխբ՜ՏՋՃՀxssnkeeebababeegosvxՀՇՍՕՙբթպտ#0>N[pցָ֥֕ 5J_z׏׬*Ge؛ؽ7Vwٜٻ$Blڐڲ%Ku۞>iܘDmݜ(Uޅ޶IxߪCtH{V5oWC4s/j,k*j0s8{GT+sD^5}U/zV5~\?jN3y\F,u]C(t X<#lR3aH%o  O / { R - | S )qEb2xGX#b(h&n.j'fZ L2mN,b9l<f / ^ ! !J!y!!!")"V"""##*#P#{###$$<$e$$$$%%<%b%%%%&&$&B&_&|&&&&'')'?'['v'''''(((.(@(U(j({((((((())) )0)<)J)Y)])j)w)x))))))))))))))))))))))))))))))))))))w)n)c)U)J)A)0)$)) (((((((((v(a(I(8(!(''''''~'d'L'5'&&&&&&o&N&0&%%%%%s%Q%+%$$$${$T$.$ ####n#@#""""q"F"!!!!h!9! M #])\*Q#D e+}?Vc"i.p-m)g'ZP =p-]C m & K  x + U y 1Sp/Lj"Ac7X u,Gh=[~0W u%Mn'Lq,S 4`Lu6cUH>{={;?JZn3Kl5Z'V"X%e5 ߬}O#ޢrHݤ~Q+ܵܒiF"۸ەxN0 گڒpW5ٮُvaA0ؽاؐh\B3! װצח׊ׁqg[VG?61(!   $12?FNXgkxׅ׊מ׫׷*;O`u؊؜ذ #&V&m&&&&&&&' ' '.'?'O'a'n'}'''''''''''(( ((((&('(2(4(4(<(?(?(D(D(C(C(C(@(D(@(<(?(8(8(/(*(&(!((( (''''''''''''y'i'`'K'?')'' &&&&&&&}&h&V&:&%& %%%%%%x%W%@%#% $$$$$s$Q$4$#####l#K#&#""""p"G" !!!!!^!5! a 4 U'm= uIE{@ h7Rn9I[k(o4s7u3t,k$^O ? s , _  D v *W9f"Kt(Q w0U5^BgDr'P 0_Av-\Iz7i'\RJ DHN Ua'u7Nl5VLxC}IY+q?e9߻ߒkBޢV3ݤ~^;ܵܖyW:ۿ۪ۊqS9ںڥڍx_J5 ٮٌٝ|oZP?4'غشحاؠ؛ؗؐ؋؇؆؃}yy}{؂؃؆؃؋ؘؔؔؠةحظغ &4EP^mـُ٠ٵ o6i7m ?vU6mU@{5l!g]YY^!c)q7xEX&h8| M!c:} P(n>X+uJ"d8S(p>X(j: P  ` / r <  G  QRVVP C9t(cL/i J{#V)[#YR 8k!Jt!Ku  ? ^ ! !E!f!!!!""6"V"x""""##3#P#n#####$ $+$A$]$s$$$$$$%%'%9%J%_%p%%%%%%%%%&&&)&6&>&N&V&c&k&q&}&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&|&u&m&d&\&O&E&9&-&!&&%%%%%%%%%w%g%Q%<%+%%$$$$$$z$e$M$0$$#####y#W#>#""""""g"A")!!!!!w!U!4! x R ( b: a9 Z'j@ zK~O}Er9^#zB Zp5CPV^]\ W  O D  ~ 8 l -\N ~?l&XDr,`Gz.dI|8f!SCs/iXP Fz@y:y9x:|<GSd,xDZ"yD g0Z$V"`)i; O rHuM#_7ߢ߁\6ޭޑnJ0ݵݕwZ<#ܸܜ܇iT7& ۷۟ۑxhSA2ڶڥښڍڄwjcYMD<3,    '18=IQ^fs|ڈڒڢگڼ)=J`tۀەۯ.Favܒܩܾ/Ke݆ݤݿvV9t\ J#U#j#{######$$$*$;$I$^$f$v$$$$$$$$$$$%% %%%#%,%3%9%9%D%F%I%N%N%Q%R%R%W%U%W%U%U%R%M%M%I%I%B%@%9%5%1%(%$%%%%$$$$$$$$$$$$v$f$X$I$;$*$$########j#U#>#)#""""""~"c"J"."!!!!!!f!F!(! g D & rK)iBwJ%xNn@W"`-f3e.Y"~Gf1Ld+x:JY]% h & l , n / m * e )`#]TKAx8n.f"WMBy9n,e#`OQMGGFL T\$k,|@Ti1Kp8^*U!T Z(i7 ~Op?oF{U,mK'yW5ߴߖuW=ޭޑwYD'ݱݙ݂jZ<*ܵܧܒ܇peT?:& ۽۷ۯۦ۟ەۑۉۀ}ytokh```\\\Z`_`ddhhktxyۂۉۍۣۚۛ۬۴ۿ )5BSdn܃ܒܤܴ'?Pi~ݓݪݽ $=Ypލީ8Ssߒ߮ .PrCj"Ho5d6\}:z7y4w5x:y?}EJ OWY`)d,k4p6x6};=|>} ; } 8 w 3 v - h \ Q=z)dN+h C| W)_.e.a$RAo$S~*U(Nx:^9\'Gi   ; Z v !!0!I!c!w!!!!!""")"?"O"c"z""""""""# ###D#S#]#e#q#y##############################################u#q#`#S#H#@#-#!##"""""""""k"["F"2"!"!!!!!!!l!U!>!#! k M , {\:qR. |Q0 nAzM%yJh8 |Q\.`.`.Y#~Hm7Vs8P`) t 9 E R  \  a "k#j(m2j/p0l-i,m+g%e'i&d%g$e!d)k(j+s3v:~FQ]#q2J`'|D b+PxB p9 o8 rB|R!j8Y,U-c;yV- {Z0nK2z_C&߻ߦ߈qV=,޺ަތ|jVD/ ݺݨݜݕ{we\PD6/&ܼܹܸܸܸܼܸܼܾܵ '2;DTZjw݆ݕݡݱݿ5E[kޔީ޻,E^uߍߦ߿ -Fd} 2Qs9Y 0S|9`+X~'V 4bKx :h2a,^4d:rK&aBy$eD4n ^ND8r-l$g`\UOOGGGA@{:u6q.k'bS L @ w , j  Z  B } )d I|'[9qGQ RKFr/^DrKq Cm 6X@a4Vs6Pm:Um   4 H b x !!!'!>!N!b!s!{!!!!!!!!!"""")"1"?"F"O"X"`"d"k"u"z"""""""""""""""""""""""""~"x"t"p"i"_"X"R"F"="5")" ""!!!!!!!!!!!t!b!S!>!0!! | j P 8 & u]>%z\=^:kP&mD#}].`6 [,zE[.m: tBvCn;c1Vv?]' x B  W  k 4 D  X g)t5COX_ b*n3x:@L S[f*n3y>M^m2G _ v=\t>`-N{GuFuA{JX+nB`6[1a7vO&mJ(}[8|^A wYC' }hP;&߮ߖ߆ucRB1%޶ީޝޔރ|rg]UQH==0+'     '(/7iLv0b NGu?y @wJW1m K,eE}.iS?w'fRD8s$f\OC{1t&aT D9u)eT F2h  T  @ z $ Z > y X 7nExQ R"UQDs2cFp'P{'NxBg)Or%Hm4Ur )Ig $;Tp %<Qdy  , ; I Z g z !!!!!$!+!0!4!9!>!E!E!I!N!N!Q!N!S!U!S!W!U!U!Q!Q!N!N!J!B!F!9!8!4!0!-!#!!! ! r e V I 7 *  ubK<)iW6bB, rR0jK'rL*kB{N+T+zO%p: W#a4h7p6f4a*U } C d - L  j 2 J c)|=Uj-|ASb,u7K\!l1E Vi0}B Sp5Mh2Nk5Z"~Hm;k6f/f2p? |Ob5 ~V*uO"|V(_9V3 \>vW6_F)oY=& m]D2! }l_NB1& ߼߳ߪߟߛߑ߈߁߀xokd^\VRROKIMKKIFMKMRRSWW`chouy߀߈ߑߙߞߪ߳߸$1?J_p~2CXj 7Rk $A_y*Pm2Uu'Lr-Uw=m;d?mHx2`&PDwAr>sFyO#]8oK+a E|(bJ/ePy " W 8 n  J ' W 1 i :q Ak>h5g&YHr+[ 9`7d2ZFgGh;[~?\w+D_{1E^u !6G\l %/:OXdq~                     rmYSC3% veP=-kQ<# nU;mK/mP. ^=]9sQ*`1 \5W'vEY+g6l@vDuH t =  k 8 ] + M  u > ^,Hf+Hd,Ib*}B \${<[ q9Uo4Ti9W(|Hj/W!MxErC qB xEL`/rFc9Y,X4 j:[2}W9 gD" fD- z`F*ybE0r]L9"sfUK@2' !+:DOXjz +=L]x8Ify.Nc /Hj#Eb4Zw 0T|;e.V~(U|,Z;h#M~ p = p  <m/c#S?m&P0a 5_,Z~Hl+Pq'Jk8Zs.Lh+H^z&;Vj 4FWg|-6BKXclv~zlc[RC9. l[M8%r]E/fP3rX;cB!x[7b<Y3mGtR#wM#nD`5tFY&b/ l 5  o :  o <  j 6 a *WHr;d/Rs<]'}Kl6X!zCk0UzC h3X!NzAn: l5k5o8 u@~L ^1wEb4 X.W0c9vL*lH%qO. _F# nM4mX>% x`K6 kZF8#rg^PD=/& ",7@NVco{ -ASbu*BRl/Ga{"?]w/Nl6V| *Pr4Q~@j0_1W 4`En)WCp2d/Y'V$R!Q#Z+c0i?rI"[0h>vP,`;nH#U.c:qC{MO T ! X  R  I |  ? q .`Mz4[:l@nAg1Y}AgDe6Xz9[w 0Gg$;Sl*@Xj+;NZk%5<IQZdlp}yukb[OE>0) k]I;,jU?*pW;$gG0{]@\?pL&tJ$c=vM"{P&~O%pEa7{K \ 1 o < x D  ~ K  P KJ{IvB k9h/^&S|Kq? i2`,U LyHyCw@vA vH~GV$e0uD[.yK nAmCrJZ4 sQ'sM+`:x\=lM4zZH*nXH/p\K;. wlbVJE>4'# +05FMWbks (5JWe}):Qj"8Tn$B_{.Ji -On;^8^Bg.X~&Pw$R|-V7aG{3e#SAu >n7b1b0`1e0i5g:o >rCuJ~QY$Z([*]&^(]%S O  C v 9 f # V ? l %O,]4b2[)P{?b#DjAd.Lp.Mi5Qj#:So $9Odt.<K\nz (3;ALPZcknvvvkj]VUED3+$wbXH6%~m[C1|gN1cJ(eC'iK& `:gBa<{P-`9h9a7 \. v L  ` 8  { J  \ + h : tGMQS!V$Z ]&X![%XT$S!V$X'`*`.l<vIQ!c2wIc3~T)tJoArH"U2iJ kAnF(~]@a?)u_A% oW='saI." yjYK<) ~vgcWKF=6.$ $(.9=CRWgiv ):KYj{3I^o$=Wo $>\u%B]}7X{ Df9\:_Iq {MR"\+c2n@ vFOY+f7rKR!b8zMa6~Po@c8 d6i?qKZ7 vQ'rT1 }_:wY5~aE& aH*~dJ5j[E/|iVH;, ~uj`YSH@72)%  %/3>@HU]dmy "4AP]r#5I^p !:Ri3Kh .Ii<_{A` -Sr*Pq /VBh1[.Y~*U1[ :iKr0ZDo0_ H} 8k([Ix ;r/^$PGv8g'UGy 7h"T<l%S}  5 d  C q " R { ) O } * S ~ !Hr8c$Ip,Ou)Kq<Z|<[x0Nk*Bay&<Um/<Ugx%6GS\s|"*2??LSX[dhmtyz~~~yrmheaWPJC95.&}l`SE6%xgV@,qZ<*}eH1pV9gF( gE'}\7_:[5xP(b6 l F  o E  n H  j @  a 5 R%sDX+rD[(j9~La3q=U#i5yIY1sE]-qK_5Q#rKp?k<nHyO'a9yR- rN+ wT2dC)gE$ sU8 z^E* }aK6q_G9$scUF5( rk^ZPI?;4,&"  &*04?HMVaeov#1@M^l0>Ti|-?Wn2Mi 'AY0Oo 1On;b0Ux0V}>i'QwAj>h9i>jHo#Q{0cDq#X=g(R>l*U=p+QAo+Z >i%S2\@pKx ) P + T   & Q | I s  = a %Mu 3Y4Z{%Kp2\r4Vr$=[x5Og)?Yn+@Qew 3=N]jx #,16=IOV^cdoss}y|sokdcWRNEA80( wjYJ<0 vaQ;*nS?%~dJ2t^<'sQ4{Y7pR1^8a=\6 t L $ [ 5 g =  m D  m B mAc9 Z0zPmAZ+sIh7xT(n@[-uGj9 Z*yF kC c< ]4 \6 `=pEzZ0 nCh>gAnJ+ bD&hH* x_>%fM5rV?+h]F6!pgVC9( sjbZNJB91+$ '#-8BFN[[os $6COcq~1BWhz& e 3 ` ( Q x  < b ! J m 'Mn"Hg9[{ A_~3Wq";Zo-J_w!9O`| %7F[l}'6EU\q~ "/9=FQV]bkn{w{{rjfbYQJA<3,"ziaIC/&vhSB1 t_G.sY=$kQ7nP2z[={V5jI&nO+ q N (  h B  Y 0 j D  v J &}W,Y/Z.W-~R%xJ oEh@c2X+yOqGj@f8d7d6 f=nCyO&_=tO+kDfDlN$|Z8xU5{\?!uX>}dK6w[D1sZI7&udWD7) ~qgcRNE:2)!  (,5AENX_mt|*:HWjv&7LZs/D^s4Kd>Pr8Xv ,Jj-Oo?_3X~ 4]."tdV:)o^D+rV?# nP:tR9bB'cH#{]7 l C ! o K # k J " e ?  z S - g9tH"wZ*\1 d9h<g?fBiCn@mBoGsA wM#zT*_:lDY.jD"`9^8^=iG'z_>y[=jJ,fG/v[B)hW=,|gRD/ m^T@4# rh\SL?73&!  &)3;FOYelz '8GTiv$8D_s-A\q-F_z2Kf0Jf:Zy9[z!Cj0Y| 0Sw 2T|:aHk 1W} Gk :a0Xz MwGo>l<`6_/Y*P| Jp>i6Y'Lw=c%Nu  5 X  ? `  A _  : Z ( N l 6Ty0Ro'>^ %=[u+D]r.L^r+BUc{(5ES`m|&1;DLT]hpy}yph`WLF;1&~p`OE2$}cU@/vbI4v]H-z_F, hI- |]=]C } [ 5  o I % { U / ~ X /  v S * mG#_9sQ&`: tE }Q+]8hBuN$U/a:lBtR(a7rL Z9 pQ'kHhBgFlJ)Y8uU3vT9dI)gL,v`I/rXB.o_K9!tcQD3 zkeZLG<0&  &+4@IV^mw /@N[l{,>Sdy :Le} ;Tj "7Yr:Sl B\`Cb#Il)R|;aQv8f(Rx?h .YJq;d.T|@l0X~Bh0M{9[>c  ; d  8 \  , R r  > ^  ! B _ !:Yy ,Da $B[w.A[u/H]q.ATgw$4FUgp %0=GOXdmt~|pg`SNA9. p[QB4$waQ;,qWB-q`C*w^>$eI,~]@! i G *  h F # ] <  i K # r O - uO0sN+mG"`>|S0jDZ4 rDX2 mD!~X5 lGY5sP&jD`:_5];d>!qN, dB$^@"fG.y\? |[B) tYA(mT?'}l[B1" mZK=-xn^WJ=5'# zzvssoomimkfiiffokomwwvz~'8@JR_lt(9IZg}.>Sez#;Kb"9Rj:So1Nh6Ur /Nk-Ml5[z%Hm?b9_9_?aEo(Qx6ZCi.Qz=c%Gq 0T|<f Gi&Kv*Qs+Nw%Ko  C d  2 Q v  9 Z {  < [ |  1 S m <Yn0Re5Jf $9Oex !6K]q"3AQao -8FQ[clx$!%%%)..00...2,.()(%$  {tg_UJ@4'zkZP;* {hY@)q_F1 w^I0zeH,nT: l L 2  y [ 8   _ @  w U 3  m C ) |V4_<e<d;c6Z4wM0nH%`?~`3tS*lG#fAe<`?d=!jI(sT7hD%\=[>eL*\D% ~cL.|bK1taD5q`I6!}nXL;* |ocZI>2(|ssjbcWYQNJFFA=@9<595585835889<=ADFMHQQY^^cjst| !)6BNZdq| *?P]r}&4K^s0J]t0F`|.Fa~hCb=cBh"Fh#Gq*Nt/Sy0Y4Z6X~ 1Ty.Qs$Dg2Wx   C a  % K i  " E a  1 W k  ; W q 3Mf3Lc  4Mb} $2G\p&3HSdu#.;ETbnr(+54<BBIMRRU[Y^^cbcgfjcjfffbbb[[[WWQQJF=<84+(  wnaVIA4# {j]K;+ ucR9*lW@+sY?&r\@% h N .  g M ,  { Z <  b C %  _ B uV9jH"sZ2a;gC hF#nH#rH"mK$mK'pH$qK(tJ, wU0Y?kJ%xZ8vP.jO- tR2}dF$v]@# dM/zeG1u[F1nYH0$ zfQG4}n_TH;-%umd`WRKB>:02$% !%)24ABGNS\cmm}}%5>LXhv#;GYm{"7E]t4I^y5Jc}/Md#@Yx$@_}1Nl %Gf&Hi -Mp6Z~)Oh?e5Y|-It$Hr%Ce=_7]0Y| -Js Kg7\z&If8Rw:\| ; ] }  3 T q  & D _  ) B ` }   6 T m "6Mj &;Rg|$9Q_w 1CRct &6BL\hu*08?HPQXbekos|~wrrieaXTMI?8.*#uhWPB3&t`TA1 yhS>0jVD*nY@' t \ B (  k R 5  o Q 4  f D . r T 7 uZ0sR3kL&}a;mG(w[5e?qH&xT.^?i?&tN-Y<mL*}a;qO0lM/kP.vY7gN.hQ1rU@"nY?' iT;(ybM='|jZE5$zjXK?.'~ne]WJF;1-& ").:?HOX_nv~+8KTeo+@Q_w-FWl-GWt/H]y,A^v5Qp2Pl>Xv,Mk 'Ij ,Nm 3Su!8\(Mn6\| -Ll@b 5Tu!Dj4Yz'Ih0St>]#@e$Hc!>`}  : P r   ? \ w  $ = Y r  1 K b  . G \ x 2G]y 7Lar#+BSdt$1?J\ct~"&6>GSY`jqvunf]UKD>2+! zqc[C:,s^Q90 n^I4 q`K3 x _ F 1  } l K 1  { Z D $ z e G ' } ] > & oK0sU5wZ4vY1pK0 cD wY8qH)\:nM.a?xW1jH(bC`;"`C fD(rT4jK-iK1w[B' vZD*mY<)zeP;(xhVB,xpYQ@/"{qfYQI?4.#z}vuvrrnnlinppnrprryvy}~&+6?IQbiq"/=JYjx 0:S`u 7F_t !:Mb{ ;Nj1Of}!:[t:Xr"<]z/Ih!>_:`z@U"@_!Kk 1Or6Yz C_ -Km8Ts=^{A[y!B`;Zz5Ql#>^y - F a } * @ ` s  0 Q f  0 I ` u  5 N c x  ":Mbr#4EYk|4@N[k{*2AGR_cqz  "%&+-+3233363:3336262/-+&%&! ~uleXRC:.$phVF9+ xjRA0" q]G/" t \ G 1  w [ I -  | c L 0  w \ @ '  ~ d J * cE( tV8eG& lO/ pO.pN1oP.jH/cG$b@#}[?}Z9{U<z\<}dF qN2}bD$|Y?#}aK+pW:$pW@)nP=& udM7! qaG7(|l[K=-{pcYJD5+ ~wmif\XTMMGC@8842++'&'###!!#!&!'*+/268;?DGIMTY``iosv+7@LYcn| -:IZl&7Jap3G\u #4Pc#8Qk}2Ne!;Qq.Pk4Ql:Xx&Ke?bz8Yw4Sq2St/Uq2Tt2Su0Rr-No (Jd;\v0Lm=Us=Wq  1 P h # ? X q " 9 V g  ' : W h   - F [ m  2DXf{ &8DVer$4@IVbly (.6::JJOV\_cilptxu~~~~~|xutpilc`\VONFC=61(${pfWN@4)sgYI=* n`M:) z c P 9 $  | ^ M 4  | c L /  n Q ;   i J 5 qV=xY9 rQ8aH) tS:{_BeE'hL- mT1uU3zW>|dE#fN,{U;jH/|c>) {^B( gI0u\B+x_C2p^B+zgP;(qbM6'veSG2&yh[R>4'xkgZUQDA7/,"  $00c;Wz/Qm%Ce;]v.Mn#B_.Om;Wy"CZz <]w9Nh  ; T l  6 Q e  $ 9 R f |   - E W o $ 5 C [ m z  !3>Mbn0;HUaoz'-5@INZbfswyvpc]TFA6+ xm^SF8% q^OB/ ~ j X D 3 m Z D 2   n X B *   w b H 3   x \ G 0 kR8nQ9"mU:gL1{`H+qW@% nR4fN3{fN1{fN4kV>"xdJ5wfK5~j[A- qYF4 p[H9$pcQ@0tcXH9) tg\PE;+!xoh_XQLB;6.(   !(-3:BENV\bjqv$/9BPWbmv $.;GSakz '4CP^m{ *8EVes-LZes-9FS^kv'0=FR^fr{!)2:CJU\emt{ #*.3;?BJLSV\`eimruy|}zxtplhe`]ZUQNIE@<83/*$! ~ysmf`YSME?82*% {tle]VOGA81)" }tme_WOH@81*" xske\WOHB;3,&  ytnhb\WPKFA:6/*% |zvrolhepd-lyonpotpourri-3.0.1/sound/BT0AADA.aiff000066400000000000000000001257761430526361000200560ustar00rootroot00000000000000FORMAIFFCOMMU@DSSNDNyn  T  ~ hHK,p  &o.wt"t',0P45;@QDHLtN\QxRWC[r}~}~}A}}>}}B}^}}||||||w|S|B||{{{{{{{j{K{5{{zzzzzwzuMnlPi7d`]/Z!W OHlDCAB?z<8 41*1&!k 43?ќCC}5M|bۜ.&{#=8Ջ9+فvhց(?YpЂ5Mf̃FuL6X&e搓Zhe[?E {cMPw('Xk7Upa2hjo@4 ;7"3&9&6%')*@* +--.0!03H78:@BEIKK{MMQSWXXZ XWXY\_UcCg hnj|nqrssruKx#yz3y{~~~~\~X~-~)}~}Zzxvuwwxzz}wsrrqoolCji^fffdba7_m^\Z[oZ5YY X0WWWU>SRQPONJIFC[?<9866?3g.-c+~)''%""!! O3z+{7C 1 Z[da:;:eG27A#cCzј= ϼE˅mǶR=AǼ57bo߱hCLIӫ鬾0,٫ASޝכ$֙13<=Hڞ^ O<4sz.@Y& T9+V Y֤Vå!vשcbخz)ʹѷb9>Ż𼘽}Ӿ)A;*jɿɍ$еΧ<Ζa4ёRUcכ ۃv-YD t&FtcLHi{FG6{x-) I UINbn&D`:7R d"2#$g%<%'($(),-.c022367}8`99T99;<<=V=>i?]AAACYCD[DEDBABD=l<5; ::::]:9{8J7777H66055666432 00/0>0M.-R,|++Y)((1'&&C&+%%%%%9$#e#;#0#_$#""&"P!! Bgwb-rSw'C|>+E v Q A ] CV1nH"P!D7=mK{+&6(" n.: (44ߓ;<ۺڽv7TԆԔA8_c)eͻ|,(*ȟȼȔǸLjn' ΉκϕLJU\< ~Pօ8ق#_P]܂+ޗޱ޴(ߍha(SC:{-8[`b#ISWfDcIdsRs+Lv2E&-27Fa6X)n tc}*Hh{O^ * v $   o V  i'ch?F #mI|2s'px $ !q""P"#$$%%&2&x&'Y'(u) )**u*+,C,-1-~-.D..//o//0>0191122O223F334 4c45;556b6667'7o778<889 9j99::\::;';;>B>>?1?a???@@+@$@.@C@X@k@@@@@A!A_ArAzAAAAgAQADA0A"A @A@@@@@@@@@@@@@@@@@@p@@y@x@p@@u@o@\@H@!@???????~?g?m?K?J?"?>>>>>r>U>3>====g=.=<<  Q k q &^@V R@!_ ns>GK(~2:O{&ESB>f:/%b _2_C>htQ9ߦoVܶۋY.،Y#ՌP7ңьaa'ͫ0̫)ˤ/ʸ0ɾ]m Ǚ1pcgÆ=­se!q<οmH;u9㽻tQ*Լyt^RE<>ܻٻڻ޻޻ɻ޻߻#.;Mabc̼Ǽͼ!9^nsɽ)9gvվ8`xҿAi1dEƒºÂè-oIJ ] p'LJb2ɤʀ^_C͵7Υ,ϡ"И џ#ҙӗԏՈ ~ׁkYS?۟ܟ݉O-ߞ|ErDe|6CF8+/xI1s S)S [U7 V2c(O \q` ]I)~ Wa=W]Bt9u<.k$i < z  a W S Q lKbH zbP`VTYfe~  !!""###$m$%a%&F&'/'(({()K)*!**+a+,),,->-. .i.///0-0010112,2u233U334?445-5S556=6|677J7788y889<9}99: :I:::;%;];;<A>e>>>????c???@@?@<@f@@@@w@~@@r@g@B@@'@@ @???????x???r?u??s?P?:??;? >>>?+>>>>>>??>>>>>>>>B>>>">>>===U=_=G="=E=,=<<;;;;Q;!::::N:99m9/888g777P7666?55v5449433;222?11m000//F..c.--S,,e,++:**i)))-((x''w'%&&`&%%G$$p$##a"""-!!r! U<h;<'.Ko?mON"q#I _#pBf.Z1 c < P Q ? SVL|$OP.chE51/BEVG7bXl"Dm@Fb `UE6sWz +@@S\_]7ݚ'܇ |Dٲ%ؒgdս5ԗtUDд6ϥ/α!Ͳ-Kaʍ*Uȑ?DŽ&w0ŕ<ık$èz(±ƒC q>n]+ԿyXI8־ľthco^MSA4D?(6ƌFǕLȉ"h*ʈO˼̀O2Ρ σOCѯ)ҢӋ kYU?8٫*ڴ ۈmaBޡ!ߌW;j4 g$Q j &}*&db3"nE@!_LT3 {.c"g,({]D.pW0s?k<i.g)daUE C F  s @  X F } "l'@tW&lAzW+y\/\ 9 !!!"-""#m#$,$$%T%& &Y&' 'z'(+(|())w)**]**+4++,*,a,,-/-c--.5.../"/\//00\0|001,1b112 2:2u223373s3334'4Q44445,5i5555606K666677@7b777788:8K8Z8l88888888{8F8f8 8T8)7888"88887777777z777o7Y7!7-77 66666666r6b6X6x6h6\6p675555555b5z55u5M5'5544444|4n4E403333y3Q2222i2&111f1;1000H0//K/...l.--r-,,o,++.***@)))8((`(''c'&&K%%%0$$$##w"""_!!!> 8/{2~()kB5}0[y$yHhE\(PLb2E jF{`4 } = s 9  W  X  J FsFII]l/K{)^#V Xm05yA8k4[JRy)n*W"IMH&kGp@Ky)JJF[^Xibل ؛׼_u՜#ԠeӡOҠ@ќHжq,ϛ_Σ\ͫͅF̢̃Q$˘sP%ʙʂY>>#ɸɩɛɇ}qYRC>AD%,-!40(%)<>PEQM\Xbo^Qkɂɋɥɸ4Nae~ʙʫ*:Oe˒˓˵6Sd̀̓ (L`͈͞ ?fΊβ2[ϝ(dЮgшWҕ'iӰSԛ?՜Q֤P׻ g/ىOۋAܬn:ޙe'A"~8R _b+s-p#wpV?_>} QYQU&X 8Z5b gm[R={Y.f9{Cr+cC~H$n/X!POz?y 7m3{  P  4 ' j ? p L 2uffg"6Ls<>T bn*qqz uH ( ~ !!S!!""R""#%#i##$)$V$$% %9%x%%&&I&z&&'-'T'''((K(o(())6)e)))**C*[****+'+F++++, ,+,U,i,,,- -&-R-h----..).E.n.....././//"/#/// /,...........u.s..i.8..--.$.------------i-k-c-s-t-f--U-V-z-U- -,,,,,,,,,,Z,B,C,5, ++++++g+E+#******C*!))))Q((((k(('''z'@&&&U& %%{%;%$$|$A###h#""}" !!v!1 M P+=om:Zj&X>s6w6u"j$?N!yF }B{? } T  m N  X = 9 ] L - P #UETD0H ] $[BWJwDNF j2Y(Z&nHp6H%P{<ZFLt$LennR=3Y,d%b,G(k ޸Yݷ_ܵhY s1ٴe$ؖPצxC֤vDՓՉOԲԠԃM4ӵӞ|ӀXA<ҸҬҴҟҢҝҠҞҚ҅ҏҒҊ}҈ҊҔҖңҚҧҤҶ'-=Oeu}Ӛөө #&E^d}ԎԟԻ4GavՏդ5Im֋ֲ֧ Iu׀׶ Bm؎"H}٧Q}.pۻ7tܵ@݈ވXߗ6.w yp]kSD:!ua0 W-c,m>p4k$\D#O]"? (b2UwAc5m&t_AqJw 9mX.\6i#Bx=g|0Rv.9]Do%P  H z  Z K } ?  H &{<+s `E/{[H]:zCH>;v'X*j0p!Fk  1 W !!&!U!t!!!""5"V"}""""#$#J#v####$$D$R$~$$$$%%2%?%h%x%%%%&&&3&U&r&&&&&&&'''&&&&&&&&&&&&&&&&&&&&&:&m&I&&C&E&Z&Z&N&B&C&8&%&<&%&&&%%%%%%%%%%%%%%%%~%f%C%B%?%$%$$$$~$$m$g$Z$`$5$####g#@#B#""""x"9"!!!!V!9 { C o8 a+q:Z=e4Yj(bfh`4?cx@c8z3w6D+ o - ^ 1 c @  ] D   f L , {V?3ubD*(r)?d9]*j5|Ei1@)M Fb9U:X7 W p;TI+s-h,]'cI|<4b#|=`ag#noeVc#w'=C;s'p,ߠh.ޞrLݟqG, ܩ܁[O ۷۞ۋk]J0%ڨکڙڟڏڀzچ|uڀrpfqqzpetmpwzpڃڎڍڋڞڗڥڨگڸڼ&5RYUqۍۦ۱!-,KXk܀ܠܫܻ#4Xq݄ݜݷ6DZޏޘ޻ 8cvߔ߸2W,_"R9u'b%}!e's8sAKX#k$p)gOC}&^5vGp3f(Is#Mg;[D_ zH Fm9 d/W& tG*v[1tN4P&Q9sS.^;tA!VAn7o@Cm5a}?^!|<}'\%Y%KrDuE nN#wK1pOM# po\PI?15#   &.)/IHMbhex !9BRit}%7Ail#9Ve /Mn"Fp!R"_PY}+] 6nI(zPt[d L?u#U 0P Sj &]qJm %Mj2Gj>t#R{"Qk:YpD_{4d|*@\r 7]f'CW,Wb4X)4aG]'`  K * h 2 ^ 2 ] & _ ,W2T~Ar"Co 8^7S <[a=Q 9Ik&6Pm*-Lbs7OOn"5FFPlewZtO`kgXVWTP5'9.&   ijnbgcZ`@7 e<1+k`=/WCbN1~c* `/Z.gP6d<1zS#Z( k O  y l 8  ] .  y A *  o Q ? aL.ogB%dY92  hc@!zOW T-N9g@^FoM7aH,wL= lJ7hDzP?mJ3|U5k:!h;i@t=\wAQ&i3]wAm/mOpG pT1 |nW5}bVC<,ysyut}rsw{w (7A^=J -Lgy EJj{Ba9b"D^y.DLw+HYs"+K_p%4Lip'BPw{(NXu,Ilz$3a1b Nr  3 g < Z  7 T  J m  , V t Je (Lb7Ns-GKt*Oeq %>Dco '1KUpu%#9Ijanryluj~vqncqqridZl`kf^igk{oVZV\-:9"$? }|zmdXT70 ]]7  ~qH$W-}R9w]:e=& x : %  a 5  p I * q [ 7   [ R ( vIA!~zZ6/fMA+ r]V3-sy`V:& sF t@(Q.f@(nX<tZ> oQD+k]>7\K9,pD/wM9K3v_,mC)jD])h8wCT&q=oM#pO)P5&|sRF3wh_JKD]'Xy  < ] k  6 [ q  @ b w ! 8 O j  - L c r } 1HWfx'2C\c%,EL]i"9GIWg{xvcnbjkRIPa0BL@9< &(ozwZ?-_Z2'pXR m X R !  { l :  i S <   q T '  h R ? %qlH*v\J#gY:&ztLP.&smWB-2 ztlTTJ+ycFbG6pcA%k^C1zL=#oU;0saF>,h^E( wZS)z^A t=2w]2oKW) nC!k8qU- _G(mbU52s_WR>>4,  !%40>7IO[\kmt}  ##@;JYhf (AT_m6;Yn!-Xhy!-Uk 1;j4Xu#Mj{)J_~=Pq 6^a%CO\} "BMWn &H_v6Cep&8Qkd&*DReh&*BR_itD>Oc~| 0CC^z)Ddf#3Sv%Jb#J\t =Kd , ; U a   3 < ] a |  . . N ] n z  $ 1 A C ^ l q |    7 7 F c W t y  %&BBQLc\jdpmXeW`cbOXLPaQEB:N>*8<3>5:9>09%<'!(+74&,   (((.  y P _ O T 4 ,    q n U I -   p X I '  { O C (   i Q 6  scJ=cZ9(mQ<)m[Q=stXL44 r_[J6<!b@% b[7!qlJ@ ueQ<3 zbSN(-p`W/5vgVB1 noP;"s_F*oXAjD&_J$vW>"kH:~aJ(%zb[C<% }wmeO[EC76.,!  )&2/6>I@>_Qbamqt}%)1@=K^[ky (1G[Vv~8MRwAWz 9R_;Bf{ $=Te 1I]v%=Hgg(6XVe"/;PLcdx6KWu(9JVlv-=?Zcez 1;<OWbss| %4<F]as +DOgy-=Yc"/J^k =Oeq2@Zn$)BPcty  & 1 D T ^ c r    + - = L N Y f u z   & % : : D S T ^ j t w { w w r p z l s x r w a a k d c s c o H R J S = G 8 L 6 1 # $    d a Z ? 9 *   p ^ P $ *  }dN:5wbV98rVR>~pUS7;"~aYL6+! wdbNI30& ~zojdRNJ29wVC0}iOA3wh]G<- ~pfNDA)xgJJ41"w^XE6 }jb?.oNG h^1&eN,iY.& yiRB, }zg`LP9,/ |{{v%-1)DCHQX[iesu+5?DRYosw &1LLxk?Ccu(9[`u'9Q_y2CP_w#2:P_q '-;ESc`u &/DZXm %'?HRhl 04KMQglu} ./=NPb\vy+=:P]` ,8Dgm} )3FWl/DTau=ACcf{ .+CCW_ou{  *3=BTRairz     $ & 4 > @ J U R a j j u } l c v o x u p n c p { t o o v p k y m o c g l n ` c ^ g h d S i ] d U \ C J V O > B F I E G E > F 9 0 ? C , 8 , 1 2 ! *   $   ~{~sXMH76'\UG7# ~hQ@D obLI0 xoYME9"%rpcXJ@1: sxs]aM:M5)-  {lJOt[]813vuXXH41+ {hhSYD8//ulQV>?&! {gXM9( {]O?(jY>,!tMD4viOD8 tmlYFK84,  ,#22.A=JR@`]_qlqy  /7PIUins5ELem!;CQaw,>DYlz )2FUagv $7;DV^jm{(8>?AZbp!+8FCYgmp$!17FFLX`dpvz 6$9>HTOlnh"(5FTUxs /BSRlu&6BN`nx"&0=JRalt 2>0JUWbbx{$22;>EF\][jbvyzvln~ywz~ywntui`pWcN[UELJE1F+2 tgbOC<("}kiOE8*,vh^PK,0 ulcUBF1-uiV[U>4<%!! ~|ikmbTRC6uh\KH= 'vk][MG>.##qvddUPFA9*&s`eSM?0!nUQ;, pdX>2%|^XE;" mn^QIE5- }yq{roihjjmYid^_a[fXd[Xj\Zg_bj[diiojfusrtq{v  " &15;A9SJK[biiwx '95BOJgz{ $3AS\b| ).6PRdj}$,C;SVhbzy %))=A=IYVb^p~t#.8?MTUgss} &&=25HNCUcagpx ! 70B:WR\`sk!.=ET[iu  %98JV`no !$42JCY[od{~   '07B>?XS^_nkyu &'"*'!3&&-""%+       x{ikd]UCE;0.'vegOCC-2 zxiWQPG3-*zig^QNI=10*mpk`\]SFO:B026%- il]QD54+}py`c]MIA?2& }{ce^URCF6,)& myWKR<@{[^N51&ueWI;3%|rsiQdPFL;;//")  )(1-+?63K?O>OQSV[adofq|rv"%%82FLT]ln,.KCWifz 74CJ[[hwq &'*8K9QN[bap{{�@5OTRXpmu! )..7>H:QVP[fdtls}~!'/7<EPQ_cisz  *<:CR\djr}%+2=DHST\nkwv  $ .+84@CDPI[Wafbnt|rzt{pfjVZVR>F><&1 zztl^^]L?F2"'pzei`LUH@@3($omx]kUaIRQKD<3.7,&    }|sgeRRD:32uqnpUYTKL5F-2+$# nzpbgVSFQ921. ph_KJ32+srW\LB5- x|sin`^W[LHGG?1=4/+.%.        # %&",$1%90.8D5@>F@IIJPO[PXg[\miojqwo &'3/I=MN]hgu{",:DCIQa^]dt %8+@I@IcWegpp +0166>>EKLPKcW\lcqpt~t $ 0.@CCRT^cjr 0.6?ARUXdho{| "" 2,;4BDJGOZUaX[nlhxpzyzuumccTWTEFJ<41&"   vsqe^XTH?A56*xtvjicUbNDU8B=86&1&$yht]N]K@9A,$* zxinhcbTVUFE@E041%%!znyeYfYQOCA25#%osejLSF;=!- ~w{pmoa]QXOJAD??-835(,(""   (* .&/,14.44>78BD?JDMNPQQZJhSdcgfesnnyuy "..7;EIVGcenxt}).+>CFEWYVhagzq " #!+,4<(IAHRRXjkgq|w &&,&3768CBAV=PNY\R]bimdluxp{z -+,7DFFK\Okcmu|| $!+2987BJIAZYKc`eanzev|z                  z}eqhhR]MPH@9=2(4$ruvhdg^T[BIG>B1;2.-&#  ~{uvzpnifY[HKH@24+'  wxpix]ab\YYUMRK8D>C.-3++%& }pzce[XLPCC-5)# |zsbg\`SSKDH49.%9$#     "##1!,702,=<.G>F>VCPTYXVgXpdmuyx #'.5:@FMIVcVg_usy  )1%71,E88I@HIJLQTR`Y_ikpvwz (! +*)1302?7A@CHENCWTT]Wecejngvzvv # -'C-6HCVHOdUjbomwp  + "*,-.1-<73?BA?KBFKMNOP[RYWXcZVb^aZbda`cXa[WaM^cRb]`ZWa[Oa]N[UZQYRWV]RY`U`UPXTUIXETPEONZBWLTLCLIHJ>KKE???A55<9$6*$%)! ~|srkk]UhQRRFLD@B7;1/0$"  |vtqsoqsemfha\c`WX\RQTHOD<9<(3!-|wvw{lplgm_]_`P[UGLT=ID<5C.32..#"%$ v}udn[cWWKL>676')  }}pu|vwuu}pxtpyluyj|oytywtqyxl}tszvwyvx}x|{#,%1,58=?GLNQWVc[kjkvuy  '&(-%=,98BMLNHVT^Q]`hl^ntlp||| !"%',20999?E;IJGHVTV_Ti]^bpjjpxozs{xu~jmu^ha^X]SQITEDB?@;109"/ ( ~sxvzprjrlcald^hYb^O\TUTMRUHJQAJ:H>:9@>1<551'-*$ yqzvuoipkmkbccX`L^YLRPRCJHEFKXIM^TU\\YkTu_elumqw|sqsp   ! ,,&*0.(16:5<=CF?JNHLMTQYTW^j]dfrmlp{u|    ! $'"&,#&4-2/176889<?7=I;?DGHECDQGVFSLXRTRXUSW\UXZXbWa]^c`caV[g`Hh\aU`bVbX\]RVbWK`[P^URQ[RNbF]PV`PRW^[KUXPHUZHQPRNJLJJRIDJEDE?;>BG.;D.B7,.92-&.(##($  rq|yhrsqofgqhWn[dYUcUZR`KWUFLFMK??JC6B:?28?4066.1&.%%+ (,$ !  tv|hlctjehk_o`Sa[dPRW\HTQ\ACR47C:829.(-#"  {~{|{wwvmwvtouvmwov{crrovhtn{hvrnmuiyjsmtufvstkuqwnymr}krr}ttz|vz~tq~||{ #%()&014172D=>DFI@TFLPUMS\UUac`aihcojog|opvwzy|    %,*(.0$33263=6:?>C?KDRDMRWXUZ^aWdbnqeqtxpxyxz }||uxrsonhmieldZfTdXUYbUQVWPLIILLO>MCE>@9E7?:65:.4-.1().))"(&.&%  {yws{umutgnjmc]haXY]P[VLMVDCO;G;A;4=1,7'+,#%!  $(!(.%3&3.=4;@7?I8IGCMHIOQMWVTT[\Ya_e`mecponpywuy|zxy '!('&--,(1-:&41>92???>HDBHKONQJZPP\WYYfYai\glehqhdvm{sh~vx{ss~||x{zuusvnzjhludjdrdgbeacV`bVN\TZNRVOLKKLDHE@F@E>?@5980@6<*=251630-**+"-$!$!&  %   |||q}xwpgvtkhmbibaXcaTY_RQUTOLSFKI?M:E:DA>23=<)381)9"0'+/ (&'$$1) ! !& !   "   #!" # ) # "# (!%$-.%#,+&#/!1&5(/(34 00/-24-87+:;8=4@>HP:CIKHDKMTFPVURXVT`Ra]^`ak_hhglobutqqm{yxzy|}     ! (''&'),)0&=(:774:9C,@E4@E:DFDECOALFNMLRLTQPTWV\PV^\^Y\Xc\W``\e`[j`i^fjXh^iagielmmeoplobrqmrjvlqsrmrovpnrojtu{nvtpossyyot}ov{rr|vs|enu~no~tuzo~oprunl|ofvrpfqlsmplxfgxocsl{gfxgiogcubfmddjgfi\id^i^d]jbWcaO^Y]]LeOUUTUPTPQLDMNHFKBHC?EAC7<B9>6@3<3769,>4"6-$)+)1'!$'"$$     |{}}zt|o{m|qlzlnnubqkojebhpWie`^hVe^`Y]b[Y[U[]QcS_TW^QP\QSSVSYMRWOQHWMPTTRJ\JMRRJRTLTLOQOHRQTHXQOTQJUKQRMPRMVQRIWOSKURKVKVQSKYQFXQOVVMV[PTXQX]G]\V]S^_V^Se\Re[aScX]]][e_e^g\beb`bel^mmciipieyojqxvxlyw{ww{{|pd-lyonpotpourri-3.0.1/sound/CP.aif000066400000000000000000000520401430526361000171750ustar00rootroot00000000000000FORMTAIFFCOMM)@DSSNDS 42;<7RGU۔.c?q )| Vփ)S)$E5V>{Q8>$&J+Yΐa~;ٙ g ;K80/^S ,$_3@>v=t<*%[Sn AlAS4btI7^F%()A$a[e$cM,Z{! Vv J;_iBy ,E[?%t i΋~yo7DX? '$!R_+$DO@/^-*e8h"dc<+u%".-.,h( *5(A=-0 wBFL$)P8ښ"=e}]'(&#%3;L,D:T&$=tG^!?*ߠey v qR+ d% & } EPڰ֕|uK/2 8 M< kz2jFHE " pFK 4n+ A^#g\+ESS N  w( _oPb'&2]![)'[DS"/!X cWf 0E>tB3f}{S sHMOkfwTt%DX0r;2k 7<c$-qWSSp>I:{~Be3}US w{c3ZwI[CM%HA\ 6cp^IX;N4.*2|>bn`0&߆v 5]ޭ݉ٮѱWW+>HU;0f:@GGD/sGZ{ ׅJ/ \ sCh`$*%n! "nPd Cx,\G15SQi@10.67:2$ΌcGʻL݁%M*@z,8t Z M>>p4!S;.1$?V%'=_ I z< il;EV .a"'qf ]{ ={ l jm f=!b^`w ? &L (@6C 6s FU ?%oUn X  o   c6C<-A5/M ZI`u?2E:/CA5ڢUʲ? v,ܛߐBΐoJX9HDa!s* %%U'b* : )=[9+'k ױ(ϋ::72+V#rG  I? ,lI ~ pϒ) _ k !-At ߠC2'4 !p:4ު@ރa@ R* i '=?'$M,01-<71wӔ89Ǖ$^]D<$*g:I,(M#X![&IuAeؚ߾# ӷ o#8P* ~`aٶ;ÏB3s ˘c#]>d +Km?~p>]N+=f:-B?O5]&˘x)U|Ұ` fϋEPpa p3CH32?+ W%*&"# ;Aغo ^ &g&"59(#*MN6*߹ϨǕЦƾqK4FwP^@nnU7!%0 ;+<8r1N,-_08Į)Opìe }Q I%;,:Q|%u7 PKAKNDC,I@z&99l!áÂ^/Yw|#x!V%4GB)F(( Ѷϳ: 1L~n*t V sfGEJM E/4KEh?}/BVsќqE.W} }#!+.,K#jvXt/fws HS %Сh1 Q)|9X+6 71!:Z4?Y5*5x4|!k Zi d& j T_@&Bpo YQ h#E I`!RA [ V/\{\$i XN  [3=Dx@X  '#,aK DO< LW>=_ ZPj g$+O"/E) dg 6 K N44W0 @:\X eM\&H޹.̣(iy !D)I-!U#e f,A:-f { - d\>8tM <$I# d YBue=  TF8^et,E h o*9&#er ~ Z9='-5^ [f1s|W[  +Y+H J 7K1 > ] dN6=| +Bpv.;}zoo  2   Gj&Nv7e ^ d l'2>8dh)C wSU v*$/voB+4 ,3l-   T)ZB0c[yC 4E [HR/*\M7Mu = iou0k xMz/ "gRl_q 9J~/W Oc" daNIGEaeS+T /T# S/ M zDu(r! rz_i*n5xw B(n F n S[: XO* %%9H ,2P +:gR~Llyp*M3  Wq ~ &5{!@ P?*&t o : /y<   P $MR7\xE`QJqZzLM  > Q \ghj 1mzgfW$d^7- }t"^  Z3{/ t$x /5 [M[n1SUo%Y$9n> zI? .1 O5$63v6G2W  6V" V 7 >Q>=K|9w Hk$ wFHE_I{xvFnHi"t  JN-Yfj)PFF (i7u    g k  az+jWB.hS6 " q n U ^_;7#[?1a9"dkMX p p u  myX2  /tZj5{< d Y{] ] i MsFH\!JJ[(4Q=jNBR`fgXxdK67j?lGwUE&@L7<}y6m!M=!} '   fp~g6PF  z OF-( `4xXtl*X-PF<o_tts\1@rS/el0!u| 7a1{D4?946[A"/-BFwI~,W,O-!0)7{mWhPBG [iX"l:n iwB~<>wwo_%B10liYYPp I,n!a=VKf)s8:WeB tkwh$1,2VlL 6amtM9 bx;[_[h "RAS0[EO3n:1-enH=}g3+KpiG1==85{ pq ;kEiMko*'G5Gr TBSi}W$sA ZN|.FyR6P#6mxU[x5'BElMY=H2 S~_SWt5 {{Ks(~F3pR[[ nyB x<iIJskKLPP0N,*^YN;B+pFI 3/ $XP?)hF"HeQ)_XCabPx)Ynb :[8Fxo$N7wk$Vp:RI!cmFBsieXm}Sa>A>14&StO Ls;&WM8#{f3rZ +Vi60~>lLI44V)SzoW60eP*)Ej"[H1; Ew,H3{=q/zR55th fBI^ID"p$a,,kE = ^;_ E),$^>>owO6E,%!} cJeK)s WJBh  aWkbb l49;zTf(SZFs_-Wb ZSM hw OjVy6lr<0;m\j/ sw:Q;`/M-5&(19(7w <&q2Q i:FH=1:PQ :ePO:m n/t(iMT~Dpt=VZqUw$ToQTbE$A,2EAwWj1m7jQvmk88ip:h!q :c~;|{BlJJ8vmSB6mQ%%R7Q$S4>:=f!-m$fw}Ni:^?+ JkTP<%txWeIn,4lm:b^4aAXN6o *F:P4X8R6-AbkM_kA)sx4w,B[,c4B>~j M6boq/i:]}~lT*!WEt:E^f &w._\PReD:7B}zW=_D)1z"FpW 5jRsdF)!$fZS c M[kS,M8iw%_{$l6cp05_8!30vm{ZEIw+mx024ZS%h[0,MZ_n: t~0(l$3b%I:=0 UB z!H)-c) >Jk&P5_C;X<txbJxLZE V bP>!)2F{B2fyb5o)"/P> W{Zfw!!xeS-7TT&tw%(h@||5!&(bCJ4w:a>:^ 3ILRo XU}s,Q^H[!,O"QobKs W)"WZXQA&hbS#<:^3AR{ls4SHd>:)tZM>1x?v0jSXhl,[ (bW^s=x:-hZoD3B0aPeS|j>,Z=DHf2cfs< Jfe^4{F[xF1ZV"VEOxws^4(0MWjpIs$p>$:1>z?^&~@B~R!A(+&?TVZv3!/-NsI DtaTb%c0^oR(=MWR>6BII%c- <K l5^S(OSe4&Zzc$!fk!SM)[x}k>c!5s/Mh4lUfpE(N-VltE{QA>JWs ,Eh(ZH/ Z4F 8j)V;K!4RI:004-|J4_x^,4Up^o0$4kp9 6Bk3/k:#((F6},= E:RO,(),4Ffo{ZJ! %814MtI}Z!jWbsxS?o5L5137!XEw: FwnJIB00F%!,:$)2^ja)M9f,:I5A(cI{aPs]lZ)S|^Q[(Z 04lBC_4Ul|EE4{jv{wQt2[FJ "_:Jw9 ,=QDM~mL7 9|EFQ1XJD^|U,(hVbWpsp:^0 )= M(w~qXb(hB5MZA( <Bt$HuW_CH[Os=87%T#j0o*Hf[OZO-e:bptR""&7VE$6U>(:b/3$/3,M _0 !-:Sn{4ZtsolhO2,6 2K__Ws Wt- 4NJMNxEd>EZdWEO_wtS E#3Lrnv<2*/?;_AuIO)mM^gc2jW915=96M3wj==Y$\ R sYH5 R1y3&E;o&r0w)h-4pS "=Xd|"^ /IH9"_L pb`g{0Or 6ePs*U>C,V}^ZlEo@xh&h"5Xwh>v |e:k3g8Js&[27JuWQjm:&$:Sk"Oxu?{!13(+#2BD:42/4979-fK.&h8Pr}F ~oP1|U4!".F_ ,Qht WaD, !  #7SsEy|M!lZPVg?SdozxcF+wwzx~=OXi~|}~rP0eOA6/29BSh|.26Ql^/6DIZpjG"~}/Wu^C)  '../3/"  #)38=IW_cc`ZUPLD60*'   # 'Ju{bI/ *E[fdYI=/#$)%+;HOMKG>0! ,:?8(%,1201/*&! )7AJLJB8-   #*0564.'$(,022.("     pd-lyonpotpourri-3.0.1/sound/KR55SNAR.aiff000066400000000000000000000442761430526361000202270ustar00rootroot00000000000000FORMHAIFFCOMM$D@DSSNDH _ v 3>x -)+0U98 KPs 0 IE  iKyk}ȝվϜ$qR[RTTyUc҇&)ҍ.ޔٖŘΞܠRJfȱų$@Te{ŒĄƢȠʇ̝ΚqGM)ۙl2b1yc i \$(,1O7.8>JQSPONTOsL~[Ghdf=TKgUyXGaYca,nz(lOA,-f,DK/<MO>8?AV]f{luZ >O03(DT\eYA>K!7iEQW;@TOII5#. :w$ ]*"+Mj*2G+PS6D2%ڽ,Y~H.^҄ʊuoȨ)Ǧ\a1ͨ?4]ģ:ͱ,m~sGѼ=h`[) yDn<%,371E5G'A7A[B(D,+v4DF=B$57c9FV_fG(3NL:L2@:6#'U1 %9:?HWh^iT4N1#'T(Q!2>K G.1v6G j)'8:n;!|%r ) jV##%'F% S ٬W`s0kO-}uj0x$~goj'2춑NƽexChť"ʏ]k|ؖKAO.c_^JZ p$,(;&'3EK)/G&3:>SA>8F=M%/*A<[LFD-BSM[_fh]k94,, 8^;fB@< !/؊ɉÚ+7O[&·Ƕ­\Ǩ#44эLȶJBG؞7SaֿI<tS%QKS  +4>7 +ek$;@(D/B6nM6''1*6B6/v.G4I 3859!2"=HNUL6+">CH7"T P 8,n-%7F*W  r-p9G,)1 * 3 ET 6 L!(  '!&ltl7 o~91op]@ئ,}וw|m|ռۯԠЫzӹM,Jؐ^=7] ۽؈"N 4 0 -N9e9V "  p (/*eO+ *+!{6+5:c+q#6AK+Ib x"b'0=HdAHDF9l3C7Nm, -1<   _$"'6$,y1.2]&624/L/ Q$~.= # w k 8C j E֩Թ֬#Mtg&ӊ B>AhH.ܽaHaNDorn- {>'b'vJ"N'4+9%3n-&",Dh+!W' >2]382U6&I$L&\%05J1 _0''4 # ; 8 !{*#0; 6+SHQ P oa pd  ( GڱqI p@ |,'V&r+>#L!մO9R,ܩs8ab  rPk]<% e %tN1# >> G/*c #q )3(" <$%)92<@>B aH ")I7^-e\6(Q#m q b vnc0# O \9ggTaڷ0JR Ōԩ9)&frATPq!xړ 7 B;U 8.+ozw &fzg pSPBs!'1 ' ]e"g.h:;^)-*06 F 'O-q\o'y "!-D"L"&x)>gPMA f 7  KO9rޖ4|܂!ޤ S+K \anv$ةaSYcLvrS >L-S& d)R/%5! z`+ n s"-`U  O eG(h41Ih]x,4fU^ދ,$_. 3 r .C!1-tl l6 `7B!!G i#`HZm 8ONc-KkR  CA6Q:i D3 C  S!uZ&!ni Lqbk$0/d<P0n I  OR " yt k 8)b-+ nG HA$'s@ h@ې&zgE&/tKwK}e'n !\To ID  m  } Z~ hwi.2Y NW*I $5/ mhB4 : ShVZtuU a< w J<{ k EBD: 08XG:@n3 _#M%>Xzu t u},{M[(87i tw 6 b'=g}V&MoKx= sld2 ~Q4v?C }w!~* d ( s%O{#D{׼|=j7 ~ J | -H'w`BE Z:1jD} .Qt[ ZG7$WYKXtBd}# #C}Cl8'/@ H**Qj _}1,z FK?K:K^E"' }v#0Y Y@}~5 N$ oj F/{ 5uF@ 5S[g^  AYF {ji!Gza  e zBi:r/P7upi)Bl^:$S2eFM$^WKSc\:F!u@u'Z ;^N*CF''a7i,C85 bll4 " _ goEN=F  0RA/' 63_7Bdf {H 5 C^YXHcu{8$XY[BC o/uoSMrT ( ;",!l_5d  _ %Sz -wS-Q\ @%N 7_LQ8E'SKjd)2dV""'*KmC @0Y \ &z$)o>r}PMYS2>\$V@2V!PKgKaNCr/r { %o= R{roKU ZdVH \Pz -Ca ~zl!KzB*Sb8b\\@YBBl$$lflE/:rj5 Hb;$$g ww$NV2 TN%!}ax V{g5zY$Er8wY_d Z0ClY  pQQNKc*!r@bT/F %WH r25*YSEex,2QN=N j}5dw?7' p8 d'x)!@mo/C;'_*8F!* Zj 0%oS2^NHF^/8b/lmw@H>3r2Hd!ug_glB@urE5 rENoB'rgS, *=j/*uu*g\}@KjZr_d2or du{@'H{-S_8zNog A{dxF2x$2rdSH5\!KC2 $/$CS$255rV8 =ar=azu5/!C!'dgj::@-_F$ oK,!NVQz'^*Hj*$}}=$'\Ydogzz/=QjV:SmQY-K5-xN=5'=K@@d*_5''F \d @;u*NpNg*zxdz-mC=br2m2_E/m_5/$V2oC2 gQT'*x*dzrd{\uE$!oxoV_$2 Fum!C@/""x},jYH2x_zo !}ud**a@Y,$8$_=Tx*2\ HS{Cgja@H'$ra$oCz8,zQ*/ F*jN!j'KYj=bVSzo_2/: *uFz$duVVVQSrzzS5a$@/5\Qrx!zx@$ Sox8mH\CHzug'*zNF'K\/F*Y\Fozm2aaQ8=}Nr5N'm*d\mS}_$Q,52S\K\Y HHN2**VQ'K!@CNuY/u}x'}'m\@}Yg':}Ca}d;!C-=@Hg_xd@-V KjFVdgV=mT$S}*g m/=Kj=Cr!KxQN2/!K:-\}xYaV5_a2=$Fj=-'uY8-mH\uCrY2TKg@@aV=*$jN 2**HCKKrVxYHKSd aSSSY/YFVQd!FzYY_ -'gmY_!_dd*\'g@gjS5mCQgFSQ-Sa }mj=}SKd5KK-o dxx\u5V\Y\a'FVmzN!F'582Fz-=C=a*:*=:C\5H}jxud=\z=}QH=omzYC/Hu_$_QdQxuV}}NagH*8Q8-$$HdY/*Yor}z@_K5CV:2F8mzaC@Y=/_V*SQjaCdFHjj-\Y@rNKFxo\KjgKr\zxjrSuogH@KV$2douFdK\dazQ\xjjuS'!KdH:K_FQ/'CV'25!:$NSH!_}ua/KCa_g*2CQ5-!xrK8SN_C'ax8umuuYag5KSH_}\ro/-juo_gKmF@ugKNmYS8:HQ\FN5\oHjdj:QaSa=- @F$/@=::'2-::C!YQ'2\8*CQ2:K55Q:Y5KVrS/=FSK@@YNFSajjdQN_VS\Kogm}xYoudzxzYzYr}_}u}rxoxxxx\rxxooKQjx\grdSYuarj\Y8@F'g8_SQaQK\gdFxg5S$\g8-aN8Kd:85/F:8 8''85=:FNVH828K!*8SYN'F5_mHo=r\HdN\uao_Y=rj_az_5aVmmxj}aCzugQuomurSouumxxrmC_Vgdxa}dSdr@YxzVoKruzduoN_oYYC}Qg\@rC}_r8*8NFQgVK_j'@V8H/@Kj/:Q@CS=:dH@S/:5@F=-!/-}-N:a2 :Q/YF*-\V2$Vj'SF=$QQNFK@VNF:2Y\\QgQrSaoYCugxSzaCzgoajux_F_urzrm_u_oourY_axu\a}odurgomo_gYjjjjd}ormYjod\u8r\aY\g\r$\SVrHFSYYY@2\H/*$:=:\8*H@CS!FFK/5H!:F/8@88!:8//*:*/=$@:5N22@5/o*V::CKKVV/:K=a:2H=HC\@NS@FN:\\HHK\dFaNKSFoQHFFaVSNYCCY}:Vuj:ddmoK5\}@Na:Cdg-uoCYFxNr}Q$rrC:j5=_K=KY:C=_8=oF=Q52F:F_H'C**C5V!5:://82$*K!!!5==/-!-!C@C-8=KFH52/52!m'!F!=@QHFV8CSC*VYH=@HCgH/Nj-2jHSSQS@r:YVN8oVHaaVoadYVHHmr_jV@_VN_QQjSKd_8\o\QxzQCFrmSgYYVraVHFjrK/FNjVYQNm*HQuCNS@SjCS2=@=SHr@$5=CH85'=2==F$528NN2K:2*82$!8*-=5/:28-H!N$Y:5$_H58F'!C'8F@CC/-8*!N2@CC8!S5-:F=$H\Q/-*SC2Q\S$@/8C2Y:N22a:!CV/2CK:-FNK=5N58*NC/YV'8-8=Y='5CY=-/'/CNF!=H:=/HF=//H52:2K=F:!@!8C*8!85$2'!@/825SY@2CCK-2/$'/@-'$$8$82'/!C'//'52-V=22$F@2CF'8K=Q2K2@C$N-KY-Y:!jH:::='YuC2!aY5HV$_F:aS@=/QSSVHm!*KSY=8CQ\\'CKKa$KaF:YS-NSKKKKd8=C5'u=58-2Y'V5'5@@$@@2!QCC5'5'5$/-Q*$!'C $5@!C/*//2'--'!$=$-'$*$!H'/!5N'*5/=H'**C*2$=F28g-8$!:--!//2 K-2'FS'*==!!52$-:$K8$$$'!25C@$!'*==5/=--''C':'5:2@'28!''88- *855-*---/$2*'N --'*C--/'F8:-=2C$2/5:25=-2':2/FC*!2@=-'55=//8$:CCNNCV*!8=2K55Q2--88FC/588'F-QF'8F/$N-/5!@'8N!*'$25/!2-2'8/$58!8!'$*/*C*!8!$':5/8$8=*-/$!$-@$''='/*$$!/-/'$*'$!$-88$2!- $*K@--2$ '/-*/5*/*': @-$!2'5$$2!-$!-!$*8: -! 2!2$8-'= !552$!$-''$!/2*!/*'2'--!!/!!/*!5-!'$'$@'*//58$''2!!!Q-*-$2*:/-$!**/-!8/$5!!/:2'/*'$/'$25 /*'*!*$ !!*''  !   ' !  ' $ !$ !    !!        pd-lyonpotpourri-3.0.1/sound/bell.aiff000066400000000000000000011413141430526361000177630ustar00rootroot00000000000000FORMAIFFCOMMa(@DMARK"INST<SSNDXlKIY}|K#(g$v=oO B 4 c u k f r 5 1 JS|m)T  _+GkB$&Cg)w.d;CcLN+3I mH&  8j!uH/4=H@!;q>c~_G;'"d w";c\Br / ()=wl:g]na_|S&f Y N ?u} / Y T  a ZvBm$;WMxj pe&u}wZi0#FM#e;RMA{0EWI"RlkM#x$)OE K t mlVDO/j}E10O R@q+e31` P$GjL Vlkr?A,Hf1b'q);<Rn   ^ s E*Vh3Xx ~ 1Cu*p| 1fNC=4 L U 1 . K B t + SU&#b}tm"9f,`D"-:PN/JxQlcK0~MaZbc:u?}GjWSOi( m/z!irA 4  R Y ? F2`umiWzRdK2>mC!"m< " * | C Mh4%AI+uV2tR P 96CcyVA{$Q1 X$*e<\K (>YtI Z#Jn$ j &\[ _t_ 1Pn9i-^%o\3XgwpkVB5&X?D3 ^0+hSE0H.܏fuܼݍgMߤ 8sS5XV}6-b~+n )AX`(PUY3 !n(  5 # \ | /  s  `  N5l7|EMsv,c{gl<:$&| Kx Gfa[ ,C.<:A"f}2|G nzmn_@'  kg'BKV#|   n$%Z1Wk(:%@0d# H=P/j}aq -j{F X5B87DKfl_ BG xr[pwaz!Po<7f8k]#4wfY{hmIK _ <7 ( x  @   9 y [ A (  6U/^~vi{ KL W&mp{ 5 a 2 g >  3$ JjqD"g W ;pGl!V"$&%L&&T&F%%}%$$## "t! 8KU]=  7:N'9Z$ {H1W11f!{lp5GsCTd~33ߟsm߆$ ,PPAghK^CXRus'Tt-y0xE}Pu%$C \=W3^:  = R F{'j U ~F^( R q y k ^Q4\#L_fu / n %  = {    j &ut;EF_#7]GbmqFYq6$UA1=F5 S Z 6 W  K k Z ! ) ?dqefuI8Q$el 5,Zo3)e5{`$2Nx'v+Hv"n#d5H3}q7 ,( ,9]QPm(X+* }@~g4!z  N^ 3)KgeVfTfx=TvF(S0@^XH3lz`<-$$#b@$z18I&U`G!QA\~?p3:ysp/<m +),c&8_Miy;5[wn YkC)n } v KwxsH aK*_1l[Uk3"}  GV~$SP\Ue?)3 ># ff[}$ |hy4q>afpB%;QI-jAo gCEvߠ<܍|ڀٜbgٹ[uަ,ߢ /߱Bޣ)^ب ׯ׋׬$خU,rN>G+|Hs9Ji;5 m -  A P 9 7  Q V o } L F54o{]x / MD7pgvE[ zb *   B T \eZ9Cxc?q3  !!!"#L#$%&l'-'(k(((()((l''I&%$#"!LRSHH$ + .]Dc~8*1R~ _b}5|\)`t=t?0UlR{.}[ߒcݻ1ܭCۺۻ۲ۯۖN !89M\nۃ۟Oܜܳܞue`xܳbp ܣ۲FڈNMڍZܕSދߜ=@s-8$lE]tm  q R`Oa!cp| T P  R$V!p!GA,F  !|!"e"""X!!M i5R'%Ks{u M ( ( ~ ;zGF6 ," u@<s'y 7 . I V-S$9]Vj?O8d$h[LG%3nPnwn:UfhDhoX-vg:}^Tm{- ! v8=='MZ4OvdMK94;*X?e2bt>7Gf P FJ#&vpbMw7" +9nkf0ENU{> :  4JB ; ~O%x^aymy]BPv)[ Y " xZmF#O 9X< z  {w CR@ n,GlO],G {c`bzKOk8/^$GdmOLvfxY/;L;<'+Ix|J=/[vi0l{p&17/f2axxD}#hP T J j   0dvW"~z5zj3Yqx{rx<Lh  | X < ! (cr$)~MB@ K <  %Ie=Y o ? >ZD FV-u<lmLY$FSvxUJ6#I_{Z9= k 7 X r 0 {  DYsD6"2&t},z$& /pސ٬tֶt։sEH$}(8M$Aߓ=}:ݚP Kݞ'4 KBT'!D7W%K :  _ & t ^  L s nr ONWdM 'G>82/6  = . 9X%hfsm z F `   3 8jv1Z>:~U+xN  !r""#$$$% %%&e&&&&&^%$i"!P)T l uNCfKOz $ J x R  P y 3{8:2E =d?2WxGh#f(U97C!!@c˝=Ŝĸs)&SõK/JǗʸ~ur҂ԄM۵ݟf@9xf5tkE~fwMiN~N-9OOa k i 4 t<q3%YR !2!!!!!!!B [5$ ' ~ I.H  w S@s {rIz? pRc#g2q)t/ XOa9Cy;t= "_YO Q \RCW?v$.A. H^7ZA-03/\%ic KE8"ܷۏD׹{!rSЅbμ ϲzj҉ZY WKQ:jEg>7F8tT-r a M Njipz?U\s ]1T%`RVs;|G bp!G%T/~ }#7"%:  f _ MG~>%`$$[rS^O{h%\;gP &I1+)97!\o fFG6k8;1K%&S2{\0YZM}; [h \Gcoo^D S;v ( Bq C sfnsA# N ! Q   # a } J  p m  5 ` y o N   ( 5 E   A , Z c W ? i  ; {M! A-!bN?5GaI;H#56 ) B RGB[^ ;[M~>i9 *#bn=~ScKyO& & a ] ' ~ k1l\MJq { 6  ) #vZ!){&@wUnPR{aa/f-S0@}]qyG 4SH ho&0e8rP}z1 .J]HXDOp6aD r  g'>w ,}@V2C?*|d:$_%V#OP dUb5W5i.4Q}(UJ.1d Cwt|@"$\IvR U$!Hi|tRP~$C k - r p h g  D x t j ;  P 0  Ee=k5;<|/vzK +0zIFd2B%2٤ظ`3؆!Rz٬ٹٯٱٍٜxG0BىژR>B}NT}/+ { >j<$S=tN (El "HMh|(.JY7h!Z ,u , G  " F HE7\VN[rr`r]*z ?1x$,g 4 c C8s|O#*Nbt - S ^ MB^=  Z&="i6;5u`6GBWdͣU %iq»]aǿI4dgchD؊,۽*ޛ^#~,6]ktRy:06XX NXZOR`|ht@ R 1:> ]V%bU,@3qoY cp>^;Lx^RMQ42 !w"""#e#$G$%E%&&G&I&)%%{%T%5%5%b%%%&&:&7&%%X$#"v!iJ|L.a- n _ S s  Nv1/(#' p;u'n!B05pA.5rxyu_3X.x,TJO v !   # 3Y=t*3? L]( j B9\A_gA;&a_FXrO8w-72& 0LeJwcEeB~%>1Y ~GJ4}Bql_Q,݂ܦܔܟz O=f)-qrC%d _ AJb o 0 {$XYF|ox - uI5q4d6 U !"_"#v#$]$%%3%K%$$,#R"[!xs ! a'k \cqfnGG y Y  & +  x!>VjWUH'CPr;gQbD3onH&P{ ?&Fq Y  9 + G  c = f!R(I1xn)aO#t>mAoEu{]5F>:UE \?Y-`G lc)D\ 12 "I.ZBq @pbd84ZY%&/c `~ZM' F'1B r  vYGzU* 8dyY_swofl}mG  wD@u  u   QbP R l F {8 =zuJI/ 2c2x0 p i L%R{!*'EeWRjG b P (  } 2 ) (     g c @%Bd{][q|e)$QCQ M[T! V=_G58sr+nGSEh$;1-HlF<_ݶbUdݼ>ߏtߎg4ܬ6*ܼݔ޶nUKOs]([[SH "D/B~fGo q Q ) T Dw! 6  ] %(^`>t./';10F 0 JQ'p{C , Rk5(j\~LF 0n.gft2r }fH*s[Y Ej$X{`N y pM WLg3`gE;]*jW jBe%&s'PLGրњ_vˬ 5ƭǔI% ϱЗёsR%ղր?psXl~@eyeqgp "ZF!h!gZfC w*'XNq jEo'F&-#h>5 "  d  6 f p|Sj!6:?KRz+k !"#$%$%%%%%%%&$$#c"!! TrtS? Xjc'0  !!"Q"m"W"!! (?LKZS(>q{ t / _ B 0   o   +   Q ~ p a 4 >@'|M&(E Xr]sޮ=֡V(Í̐˺2hȵQƤ$ŘŅŁŔT^̅@ z4inYܥ ?<ܨqJخ׆^ՀԏaPMvԽ-څߐ{oa<vo*`mAk S o ftokE6anmD 8 [ ! 3  4S ! !#% &4'7( ()G))**))u((B'&%$p#9! '30l K o !r!""!!!M Cwbp$}  7"x *L  ^IYt h8l{*I^=djBWPqblmnvC !c\{6l?$mZ- ^ <1_ab i4sf\]J$)xvq @ " )|;8   =*\@V[ 4 3 #;hOtI; mUQF 6 u v C + \ oo`}8\!k)MwzZ;.{5CE%< *\  l b>K_05VG+b V .9^f*,#*F:cE3bveBlc)e1, dxP`}޾uQކX_'[=0u\p7'w759VJTENia{zeP mH#r.!8k >0%Dg~V#c".d[+V : " T  &e(cByjuOd2&PIkzIs4 %fJ1w ![!"H"R"*!!/ qzLf&M uF0! u w 8JF`}/<Fw  y f Y L cIw2p-Nܒjjى(`+ՐԔӶp+ҧx5ѱq,СЗФн т?=iWoެߵ-k8 8S!Y~$(4DX\9 ] hEF/- YHuuQA,  u  I &l)6q+~GpgH6;Gi&~}?h^v*?k"bx0!C"#%'(*0+,-.//L/A/ ..-d,+*)~(H&%a#" P7L.Jb T \ 6 } S .dNFy'cc!N" V5Ead{|ړٲ+?jӊPјxV[cфґӖԌ10Լ5ӛҾ$GϤ {$o(́P$1^̽)͓ΘOφ϶rќgWeirpP3ڐ| ܠQUQy;RL 8uFq,YkjC< c Q o ;4 !J!"R"#&#t######}#D# """7!!g 6]wD ? !5!p!!!}!? 5 ( ~ !"#"#$1$%^%&&%%%]%$$(##`#"""b"Q"1"$"0"""!!7 lU(?m?( >  w , 'Ui   I . -+&wSYlxI@B$=V"'<~*k,M߻cުOݟ15kڄH_Դ ьΜU4Zʝ ɪyɥʂA ͵ΚϐПъ҂iJ ע؛٦گ ,f.GG,(h]W[{)%P?^  NlfK1nvGG + x o -o R2sJwS^*}Z=# M !""s"""" !W nTK8CpNC # ' qG+*$AQu  R X Z ^ ,G[ya:k=GtJZmL'$ ;HAeU vP7^TߠLބF݆Hܮܖܡܷ,ݕޫyZN"&g I 6++m5'O['$I\'A8Q L  $ c4: &9)3N?f, Q f  G I  { F 0{t{  m Kp*sm3k E    (Sv9aT}L o L d a 5?xAZz v # h h (Jg* L 8 xEtJ!]ArsD0SwD=o>:pT.WN-rBh7`@SHpgA,1IPml.fKp]e}LkJB5mFB z#i-E}Fn~G aE-` tI4}M G2 > \5vTa  Dz % KX.!Em(6;ir0sZk_-Skv}vY-f?t S#" # X  lo ]' !_&~>`7^jbx߿Jގ9݀܍z܍Kx}tRmyO٩%ؚ)׵Iز#ٖMچڱگڝښڧڼ6ۙ[ܕ%h݈ݲ#Lޕ}+^Z2Tmon[7HciC`+wV SQJi(3)u2Fm8w6 K E c 8 IfR6NB=^"+y?#\ y(nn "=#%k&(I)*+,M,-U-..m..//,...M-,+*)('k&R%4$3#@"X!! pUn nLi- A]=$A lB& # V 0 h C  ~cYEm]J2 ?QCZZ pS#b`9hpVrW؞ՇO(:OVy΍ͳ^ʜEjơHKëÍö!Ĺů8ͧ \{ӛ"0Ekޕ߶$ aDxv'HWqK:4S G 0hNxr/57dL&^&|q3M6ADQdx&`% !W!"#G#$%2%&T&'d'(U() )P)))***)))N('' &$#"N 7@'BjXk6j8q<ZQ=WD*t0b U O '09D3h6s9"WjQx:v/wf n۝٣׍`Κx~ȭŘsa§'Xœ7ÛĴőƊLjȡɯ̹͉R ϮXj.҄4_Ӥԑ>ֱwؼGuۇ#ݦޞߙQ.qE:6C]x 2t ; D 6#tV U y ,E*CxmxtK=:301';Jn?V \ HT^]S^gU3e1g fI~9` `HV#  'Nk#_9E])k.* ?Rh{> - Kay1??sqCa\G"?-`c|t* N R99zicݐ.۸b/1RہIܫ=] o+"58,{pk?_yWJK:xm?68֋rB#:ۊK&V4Dng#ke ]K! j e X  6u DtuLWSbD g.w  !X!""#v#$$L$_$b$A##e""#! '1,De O L v!6u'ER^ Z d "  G  w e < 2  1 n  z N K ` {  , 3 #6|)H?3sw/h;   5 zE` x)pb<+,6`/ N7y *2+D~qnvt_;}]DEBF2RLޠܜY+'B|vE?NU*dKS9&z 97 m8-mH0 7out? X d r k*6e, O [ k Vs@YIT@ T&$g Q@<KSS\A  J  L    Z  XUHeAj&y&  1 c r;wc  o,P[~wQ1v8v1/ig*  B r ( " _ /.D|/qs }Qz ? 3jO3~?291U<% 6RkR~T>PR2$v*~X  9WӚTѽ_6рFt&؉9$Mx-A6-T6ev<)k:c @ ) Yam=  a   f VVvzqHo*|/;>[XXq9w6 + &:V!i"$o%'(9)c*C*+{+++n**?)`(U'`&A%%$"! &Zo:5_6<a} 1 !7!!""D"X"`"I"!!l NFh'O#  c"UMCq#yS]mT`9>xqHA@ c1o({ڹ\l&$eIʓBɷɤɓɏɜ3ʳH Atն(Xle9݄ރߞ>;k1_ ߯ߙ.~iRsbsM<^] @ + Nm*}]?W+h [ D G 3 Y z x y i g l};=r3-  / `  !+!D!]!B! m P1r%m[h8,:V !B"(#1$_%'(z)*+,-u-.Y../// ..h-- ,*)(&q$"!@;!.-+     vXL]Q(`? vT)u \OyQMER|ףsЭΙB ͨx[;;R̓YϩxMC;.D<؁m٦٥{#طb׆4kղq>ԯԣwԃԛAՂո֩BcܚAJ/g=(Qs A E F$VDh y +  4  4<X$ !"#E#$$$3$##p#"s!!} r7g0DWbui'Yp)z)Jxf~`x? !#S$%&'Y'('''';&&:%t$#"! Iz=V< o  ( |x\=h}EXOGI^Fdoe;oOChMQއwܺܟܼA݀=޽Ac>'?)|M܈*ٽa՞IОϒ=!laКU "F؝)ܤ߮e`!SS_%Tl}"h/& K?  9k'y# !#$$%6%b%l%8$$##?"0 b?_ i . O"uoyQ   - K m  y x?s|DEnj m T 5   D L ? F XeBvvY S> N =GQW_mi NwF/AI!h3ELa=H KQ,6F$0ߪޘݸ cۿۜۺWgBv0dQCZ,47&0I1cE.'/)Cg<TrcSPn]A s }'F\T& ;PU/ r}'cay;u~$ w O S I &?i s /K> |p$i:$q 0 $ b  TsnQ:cQS43[ r k f p<wjw p>' : R _$>+rGH3   # _4~W8S7}"y+JIYe>?H[leKvf$fqpZ|(Tޛ7ڌM(Zmhzc/Kސ0J\}!f1vx:#7yJyq0A/X%P" yg]Wuq#I ( X o u j J 5 z#a?oskPr@'=o`c u h/t^#4A6p0k)A  !!!"N"""""""o"8""!""$"Q""#&#$#$%~&7&'((6(/''&& %@$=#! l!K~!  Y2R,a[cI`3[me^TG5( (4HOVJb'[&zރۅثT ӲҔїГϥ͐1̡̄{̜͢I-6tZyړݢ ]~H9oyoAD7߄O:0^nZ_AMbhKH  Y ^v.]s`53 H ~   F8{4X7 f + \ #P> 5fzkO Q9]/t4%FR[4 Ou 1 !"[#4$,%%&'g(()J)*>*****e*)u((('R&{%$##"U! G,v+~1k"`7 ^F5sGBQ;A}r1(kQxb;"?r߬V3&e٭~VcղXv֏֑eAՓ7ԻMK~=&OҐҶJӈ.gԘԛyLӟ)Ҫ9ѫtϳR͟eeʿʱ˞N.6kr&(Vfu=[m>kt R;QSt \8 d 8 x j6 `v<@ZD!4zZwGn'jJ3& U*{fKTOLjluzpn O!'!"#[#$v$%s%&E&&&&&i%%7$O#E"+ L 0_FPq;sEEln)t = ! w X*|5$9D:+(u(IH43|WNKGv#n]LtkL&ݞ+ڻqGIֆը||n`UԦvb\\sԨ A|ձ!azRt*av8AsPcb?xW9>]?f<@y4 t 4 l2R<w/yR]p:$aX1>z]omU/(b'W Wg~,w / # t 4 QSfIK[0  N*j:Q["1 b aF7(3KB\bS]p"}b>T8 AlX#~".dTE@H޲mfފߊ.s*UmydDj\:|l6i0ODAY H"=!3Y ^hrC^Zh : W  IRwb/  . Y  { c ] / Y  J N  | < K dkm:$:e_f> y n O E B6ttJ'.%V5w7 R k  "-l% S    aa  w r z R>(!q N qDS$b I$xp^3!&4U2@b{8{;kfL-"EߜެoY(ߩ[w)Y;O*zG{K ~Cfv |>  3GnP - ] nIr+L-+# gpz9 ~0y*^5 D lbP B0[K[k[4!V (N!q.d1 r34(zcp.F2M5mO V h!{h #8v,!ZS@X:2=BV^ Oޡ]0N؉לםעצ׾>آ!ڐ_= ީh%nfVZZB޽A{+ܵ܀]_\ܐ^ߴB+oj; p#s[uv\o;z N ? X S 3  t ^QHU1H)(T L J}@+KfhNXRYw%cb{J.NmAm<}6?w!,"i#$&' '()$))*<*l***z*M* ))n),((j''&'%#"!0O8R*( 4 * j  k 2 | < m"T9 !e@$ :IL0[_.G{c(f8JiGvK U <z`3:3 P.`'[ M{X]R$f70b`B q  y yLFZPgy I  ] ')SvxA((_$t],~\I7>863 G 7 s .Ef&yiI\O   x " (  {9LV\Vw=['kH tc4gnIDlIi:WU<x)3@T߽X3ߓ?12JJU VJ7 S{ OE3s|]%i>!! ! #  g!` @    B rk4ySg%k z!}$ ~ t)#b|$1( d *  n `LOd\w4gxy@kqW*~Ap+vl 1 Zq.$< g4BVOGHl4zP Z)bBu!y'fKmS0߹{F"f)Ad6nz;PDaxN/3R=6G ZwWJ\?H_RCH:9:KVO[OiH M8P `|0z tBb i.SV:%gAojG"޹yԶӸ@ѱ4ЧЉyЄ q҅"y' '# R%|9/28cu /hm~Y3)JyK)8xV1L t B?xga~O#=r1. JrW-Nyf}3g}OZJQs[P lc95.*' GOERr6sX<0y0`o < i d8j,\f=C$y&jHWw 7hfz']yqV(qL,}DE~< 6 H F 3 ] l ?HBHc_D @7V9fV$hX&Tqm+.Hiۡڋمز e֢p֒Z$ 1wcvxkTD7##2$Sfo> "\yFDp`,%;Niy S Q_W&2{9JhdB; ` B  vP>Ah-e'y6  ) _ R%I? .-XskI T_0{.D [ K -   R3AY+~`K:yJ ;(F| f2$Z :}A99[n{,3R=d,;3W8>:QB>C\mm? N}B=L4?,%DHna:ވV(AֽU'=qc$Dۼs[m/kn/X8)C-\b#w # hzqJ|?~i* /_ - |R[) O1Wxk<Q{e8 }7*sf )   H`xwbLJ3.c d!I"2"#$$A$e$J##^"! g4wC& O{-F s i ~ ,9nw:tAi<h+:Ze8t!I 6 e?)'1e-&>~M- v'9'3NTZN/qbaٺֺբԸa҆ѦhL?NfъђѩѸ@s6:`םڢFHq7bkY.xWL1h=&bVVJ:3T0vXJa B  v  5 ?Ay8v}f V $ i J V y  2 V i  ? ;FOIN`T"R !k!!!!!!!!o! [yQKRAXWf|<QP~r!Q   e:s1 i IY(0b5a,_Cy Eq[B^jS"n5_b*^9JJltY`٩[mһniֿ:ەWߦ 7GT/ l>޲9fܻܠܣܙ܅^!tڇlcڂk.ܘ{h],|:W   -eHv3E- ^hhi d h }  L   5RB,w mbM.3@*_LB1+t`FI>;51%x > !u!"8"v"""""##"""t"!r Tg=0 ; No0UAAV%a+qp6~ }ihjbRC-lC8l:}+pUX#V;mP$wq&Q߫hDiۨ"ګھ |,E?&Nf]M,u>zY[ M|(qdPyz3mdHGp|S$`=y  k t[amX8 ;zn6 h V _ N i K LRI!Eo7u>'E<I,@K^u   < U8WTgS |  w / 6wa. a h  uW>_y04#qe|E-w-tJmJtrb1Ll  /LO3 Og^=p^S!,Zu{C*X10^gSg^(8_qR#Rp /dV5t d n h u o]4M|7dd)Tu?2KN>i$U`8d@A+o]!X-cg+ >'9^Mjg*k0d߱0ܷXvC׫ xhq)S:zv?{m=N xO/IIPpy݌3ٯؘח} ԺԕԎԌԟ4ՏBּ9حهځۊ܋ݖޒߌp>%2pj%go%jzu݅1ݐ:G1T8b`,ZJe  \ D 6 < x GeO Zu*{|:(5m< :!t"#$&'(()*g*+\++,,G,q,,,,I++6*j)m(D'%$="! R?#WEFh|J&?z FSR[EsN_9.! ' W  Q !R]*(!tNEe $CuThg!Yh1dV "o)Y݇#ۏ@RۡܨDބ%߿G@izrcN<,{U߭d޸LKܭ'_ٓS=o9)!^֮׾h733Yݓ>\{-^78).<%  w j y V  =!/3su "=[2aI^  ? c !+!b!!!!!!R! 6;[yp[ j nMdU-< ,!"$1%y&'(e()p)))j((M'&%]$"!6c H % - d ]>**Vp-w2tQ~H$OL*}o`I3FW9zSV&$At ebx.Fg9x.8VZ@LTSMޝhئa)-oyJShҋzԶ׉ڨ,ݣ |>jqv[5+ i'YP:0S!> h.gZz? \fQgo c&?( P !V!"&"c""v"f"1!!!> D!>kgs}Rwj)p $ X = / Q ls>!Uwi ?  ~5V.w*}xk #- qXXW` l.;~{sF|>\(A9RiQPK?cOnyYEtR I+r H/&jPlQ FOm&>Q`f[4k.v !  = + %q/ #{C 5 h v[rX !c!!!!s o/xU=Z+%eId3z&Mrw|wX<zblWGhy vi-*N  G {(nF;ghRFCd+p`'=ElX $hBA} G)S8{$NaVH_]\aXZ`VS4[`4yfpdv݌jvڄ2ؗ؟جIٵU ܾE\8&3Rx3)b}\-q#V52>k#nbe>3GMC!  4.+&3B}0 " K  U  >  8 k ? 3Df"o f " #%&d'()f)*T*p*s*%))5(z'z&^%#"!? "I38IW{`W9@7"Z >ll c #-$vvcu2#/jYBV&GZcQ=#_N-=&!3p#^Kވݚ݃݀ݸށߚFGyKtqK0=li>:|IySPxIpgyKUa-f"w   2 j K q YGuF ` F 4 9 e"]hCAUEi!"5#P$:%"%&8&&&&&F%%S$#"! lYJvd{p%vD  !4!"j"#u#$i$%<%%&&4&D&)&%%y%)$$#A"R!g <zGIR 9 Cg7T@Md}6|aW!v ~bD3):jz6Dߪ#޹#߸d;% ]DeS':heGyj*jܖ ?~Dr<i n!Y""#-#l####q# "k! u*TA:Y*sbWrR@of !#T$& 'c()*+,-]../k/0n00000t//`.-,+*i)'&$z" +[W${ >&# nI~Oc/A + L 0)wNaFVbI=)gMDX.X #o#v{!F:ݪ<ܗN۟sN>Aaۨ(ܹ|@##7E6o{?s-O^XD e.8j5[g=pM-sS  ,8tS% <~b ~ $ o & d Z | t jCz/ R!"#$%L%&/&\&^&O&2& %%%h%$$2##"!!O 6ZU7{<%'kV.+Z9N$C ehY:Ral x T  /inqAPtm~Xl%}3;&|_aq&kIw8,3ڨ[2Vڦۖ%ܴPaߑ= URN22J0~,,Qer٣{q܈.>QJ;p<80~!l$Dfz8V%frg-6 n e ;F+[6HdY(NP9)jJ L I N z <+Q  f]}'y~ y!!!"&"a"""# #:#0#"""$!! Q(L Y `/>.Zn'  YVaV 5 ; + EO4/ZNm3*Ca$u6R!`v;2[`\G*z#+-g>Z{a.phE87mcG9vބS3xj /Jep^0orY!u}2/gUtL( 2]n N.-f v D ;~q)=FB.KNXr z p  Q C@ds1   E C `  . Jv{Wwc_e f  y )  + r l  +j7;f # h z ;tbb? / j]jH5)(Y@!cPRzCE?oKs'N $^ {<     o 74-KIf`JdBf iNuuZ4)^3Uch=ݹc#؎X 'Їϳώϋϒϴ_ЯёҰU:ؚ݊N%6=$Tfx/k?{2.  m ?9VI = S c 8 l FY|lI4.BjQ704Yd 'eވ6#f޻*ߚ-S TAaj9;j{L{@.zS++bۡڎڇڸRu3߭,l+,+Mxp@{3vHMe(BL[u>)   #)4=2 >TNNL:#} 9f&^sv^cY_N@5T[Q9PXW*[h u ( xWNZ9RG=;  1 E ceJ&b3s < :#@NI$ ^٨ZhcJ>S+8&\^,mD4YY*6fN#ztBPbFm7/ HI>RE  !c!")"r""~"c"""!!!!!!|!V! R)c7Pm  }:2H&4wX }[    `3LcPoxO~nuzEt0 F r\b\3&*!n`Wޯ#ۏػH ш5\Ѻd:?Ճp݈k=@>A[ftdDBGO)z*M/ZD\:TiFKZ 1 u Bl.R4A' !!f!!k!/ :C2PW  7 <  W sUR8w+?:$  !Y!""#@#r#######d#%""I!! XWFO 6U 9#[{tV:  % (k-m${VDcߴG!5ߝC)I!3cfr!D} wh܇> Hա-ԏ`6 Ӊ)_Ѽ(ԀխPٹGޘa', RfN(CXY+"!'MNO%1 51iG) hRI)߰2۶ڟ؅)+؝N(?ܑߞOa[-XUAl*/>9^rܚڴQ>ҜҘCi.IwIm@}5{zHv R-q)H*M , b u alZr:W 8 W b ^ G EWfnn^J=$vS*h B!!"z##$!$$%Y%%%%a%$$%#""!\ ra$i*xd ^ w : B n|+_J :.nrI  |hjlygVd;=io/ V<[[L(e}6 'xgJ3sL8ؽ؂ؽ.n>Czxy$2y"NNm(z x < +^7G<;) 0k/} 1L^B    r /-MdfY^0wr  B(6=e !;!!!!!S ^3RBHA;TiH e>P%]!&C1#N} 2!6""#]#$ $($##w""2!O S+pkSu n `M`~FHvW G   q ] 4 P7;vCmA_ aO* *bOul`gGGeB)oBK#TY:z 'RP0?_ty֤E[пeSЎѭ}ӘԽח$܀BXh*r2wC3#v.K9Ao/J!eP Pu}V0d 6 GRSEfT ?`S+qO  . f @  n q e z+d*) "3#$%&'()w**a***l*))(\''&h%%5$$&##<""O!!. ""  6]?L 3BuH = H u vDG6DM Q >3"') b+Lw=D5 N1OC=MKUwwqS-bR޾yK_աՍՏ՜WxJAQېi2s)oM G`;ha9>t]2I۾veޘVI G Zu8>|i+m5|]2V *@W<b e e  al 6"#%G&(m)*+,-;-_-b-,+*)('G%$a"!WTz/R'hM9Rid": u!"#$y%%&&;&f&&x&Y&$%%r$$P#""!< cpk/`9 % hM}6R2(yHB\=PF|]qI8rjE*lD&05jڲـ&ِ(۪ܧ~fF.dOS#wX3 Dvޚݝܔۂ`F8 Ax5З5ϝϙϱh ٴۣݭM*WM)o  v2U\C.KV+MD+  ?o  \Nf{l X!!">""""""d"!!Q X?nMs"X[ Q-Jh4!x#4$&j')$*J+1+,--X-u-Q-,++ *('&%N$"!GDS'j3iOAS,+HM(*`yw]*"hao:  =N I. '% A&jT= pqUd#Xn Wߢߊ߇߉ߗ߭ Mvk y/(x8~qp+y/^wh}?moT3(@Fr &C6/LW $ W ++  \ : 6 NvV+ !"n#>$ $%q&&'2''('''+&%%$":!fV|wK  6 h % Z / . ` C =z41k#; S A H"p)B->> .Q"Hv,[9h5}y݌~ہڥمK8=فq2 "A\5W .22z`25|Zݪݥݦݿ:eޝ8ߝY k:("-Q?0YZ =ST<boBvAGy(h en,R<[l17Y 3?8  m=rzj/f$lbGUrt3j'|Y:,&3QSV8wu| C!_"#$%&'()*L*+y+,B,o,,_,++*A)7( &%4#"" F@[ j ] ~ s +   @ & i   ,7:9! S  p 0  ` 8GK<PlE :Zs8 *d*xFkzJLgnb>#VAwM4,(>fުݡtxݹޗ&߹W1z,K!&_soS9v=PU[ [CAW `NHc n F)A;s  $ P kW79{ p 9  / gtitAhk M!!!"&"7"!!!n!  ;j-Y%"eCv"IT]x)y O!!"]"#e#$$1$5##"!   heZNnP/ c:N]1DH f-DcxY .߁Pz1H0ۘڤN" %dڻLݽިߢ#4ZqlohQF2N2Y];Zݹ܉gnٙ^׫ןנ ؃ڱ۩iP 4@5) aB>  vqd>'oS1)CMN6+ H ~ @}9m!#%X'()++,,-,,,+U*]);'&%#}! __s ?A{kz &!2"=#5$$%v&&u&'')' &&&k%%%$$V$###k#a#Z#C#H#.##""""Q!!x  G  k 2  3 xAX  l  g )\zg6 Q  M#fB$J>f']Vt- Q+2LGX{!#%^&(O)*+,J,-?-|--p-5,,S+**,):(3'%$#T" tF)>qr $D{'\S#G@CO(ANj f a'34 qq vaMLOhjxvqNkazIX~L_fQNރITym$"eILQ(5Fd8]$g~=)w$n۶!ڲ\95[ڡۢP0%Azi;><6MEm:^hvkW? 8N7? t " ec`[W3^t?o]z/] !!""D"|""g"8!!! l@/I t  ~ { !#e$&'#(()K)))):(''&% #"!q =-KBN% ! 2 ( m'Z}/?|[ $@c;n,%]m24`ݵ%ެ\ Q*NM` y)yKeR-%{ZK6%"Bw}gp"_2W |2<78! {$L9hzKDEWP8MNQAsv KI")?-AZoe]crLڷA hՒ@:Z١xߖ$UX)] P8!-U= ,Vu&p5R'jp  H X ' |  D \o9) K1%>d >y]+A6zUTAw 'KFQU(x+&#)Y [!#~%<'%(*,-/W01U128211/.~,*(v%#_ T>xJ 3 K  M6iBdlu6(93J|!&4McGl2+XqvI=vk9 Je 2#veX['P\7X}a>x~,O`cCrN| $o_RK; e  RMX) 5 w EVDH\:H A s  # "E_st !"#E#$U$%'%j%%%&&& &!&B&]&q&p&X&%%'$#"""!G u{eC G\iY4T4.ia w5_MIj D 8b2 QQ`jGLL8 zdXOB>8H?[{-oBߚT۳Z ֕W5$$GЇϴώϡЅ[cӓ ֧cJ&*'wTv~;qv^UމOAi޽2,}2vR3ArI.9??1/  y M*7*,"| _ $ ` 5pJY| + o j K446;=, "$&6')*2+!,,--j-q-]-,++**D)](X'G&Q%K$X#m"y! &\.l)Z{ hA !"A"#$ $$%&%V%Y%3$$o#"! d !  x * #@q*Kd*I!z\nho(a=v(aߌ> @߂/J-#}U L|n3; $\ڰ&٥nWupBR݇:cTx.jgH&  "Bb5Z 4b,B$t5   F  b!!"#$#v###Q""u! F9uk6 w o ,x h X | !4EZz!"p#$%&';''(*(9(''u&&/%a$q#g"M!. YE L  M  @Lr_`U5GH+26I2|i8dޑsm۪+KܜݔާV R~y;DQn anp%t9u i;:Rێڏ4w`ݦޠߒ!i'*x 6RR$7\eWE. ai/!=- 4*q$u,}Fk # ! t]Zt*{ "{= > e $ ) r 42O.V!"f#$%{&&q&w&\%%f$#"!KS7,e7Jyk<W2a'qVk}A>  W po,Ks]G;iqTS?vV:5Aݹd&@݃ޞvo,fh @EkI T:Ky< KF$]E+=oZSs{WzY9psI c!A.Hx=:L 8c=zW8DZt ~ zh>Es`,V0UoxO'!u`XjP M&hlzA#=!#$%'(()**M*Q*)) (4'L&@%#"t n%|1't.  T m   / I m t M  >jp`3>K dkd0;'5_JY, 0{zhTB<^ifWc'u%u2ߦzK?Ri٦udD~#ܒS%y(-o1?u-JQ)L0DD-g4g' @[ll ;  3JYo6}q. x   ) Y ! 7a&z]1 !"|#n$V%%&&'(T))*.**+.+3+,***)('' %$#"!K *}m,~)AQQ x!!!" " !!!* ZH{v` C >f/sjP5+)K>Eg,9FLefPemn69wuFg-D=+Rokރ/f ל׶c ڦۼܰJU#.$N{ i[03WY2 e7 H o~p5PuKZJokP7>#-?I!W  F ZUvVY + !0!H!U!A! > sz X.n V@V@J R !@!""h"##`##$2$[$V$F$##)"}! [1` !}bN-;nn=&ONI2=MxX0Uirw$[SX߸ރݖ5ܛa<'>]ܣAݱ$ުBW"&,;T>_1}o(D"_ڛ<>b2VӍ ՙ֗ת)WݣA7Yk g>U]`epC!CP/v-*D5g  O ]c?ZZ5: v E SL?DPG=X.\  r !! !9!e!!!"<"~""##6#h#########g# ""K!!K <_[\fD[BC58QaT-<}f-#  O hZ2t8.-KR/=g;e~;Qhnl_S8 5~Vawv #O1Rw'ޤW5oߚA D R P R SA, `2gd'c!" 3 - 4 a )9 : /|`lz !"-""""""J!!g :!X Ge5yx'3<J{gFmr-n"[^z2 M V+lx*/="H=G e#@7LZO >pIrM>\(@* d7qC$0[r%tc1 |'B=m.Aݰ\"ۦR!8gR M&K[S@uD(bP/mWKFl?5C2,8Mc6BOT Y A / J s;V7BCz{yH!  HD&E!p_s "#$&' '()G)* */*:*/)))R((_''=&& %M$#"! -X ztvU3RP/& . } A4X#Jb) w  ] p r T  ' { q+%-Y`@z_l& F^$l>Q5; MD@dLPo5EߛMpݠJWKߔ>a9*#OhyRC!Us[-X{;"AoZ{xZg!P D!Tzj5 r M  ~  /V ,&OY?|7+=M ? H >   Y E  $msm* T!#e$%&'((E(\(P(''G&%$#"! <~km\L$yU`zf5& ! !!!!!X S3Ty CM^|Y@ { pT(O{I kt(0Pe(?qWe)k`jN7,Iܤu,YԵԢ!Նֹh*ٱډX#ݸކLEPb7lH_*8XJ6ߌ,ۘsdwU2!?ׂ\ٵ~wܜ(%t'V#x=_`"!Yi_0j ,lSSkXo{K Z  Fjn4PS \!!"c##$d%%&?&'5''((B(](n(i(;''&&#%B$;#4"! V)4 5!*"$t&8')+V,.+///0{000&/m.k-6+*8(&$#7!`VLvblS  & C ] [ 0@V,%>\6^  C Z u n n >.<$U~K q9 8 ܾڛ>4gۄMSkߢ*J _d0N9r4Yfޔ2ٕ/bәӥ"Ԛ'ֈMڮۓsW:Lk9; sR-51UZ-X-y;I|j#ncs7  z7C90Y! n :  + 9 3{gNATG%U " #F$%&'()*+1+,@,,--1-2-,,,b++V*)('&N$# !]k_YOW!gE U   & )b={yarW+83DA  jk? iC9/S"sYr0(gIQ*)Eb94%kAY]|5CEH422*qro}Һң{3([םzݢ>>.;SS:fEii BoorxUXQCe߼ikܹ+ݐެ߂bbx<$+`}G& W  DdU2VE =MC; ;^H`\ Mq B 7:SBho!'"$8%W&M&'S''[&&x%$#"k!&X`lU+\< s.k/$7wd  ] "#~$%&'(t()H))))C(('%$|" il% k$t[m*q   X Zy&>RKprZNA' rSGW|WߢlݱqM)$&@nݺ޼pRWo 6g1 d&*e#8"` G0߇\Ll۷:;ܓݢom9k1"?z P29s"zYC8,,'|@ I3|  -#!D We$Gd0Fb A }  m Q Q f!c#$%'.(!()m))))))_((j''&T%$#"! 4a6:B5   ~ ^h VQ[1 ?l\o|X[imwZ h*pkUw /yh.xsU ?d{[B%A{Yy&1s[^gң[0.͕(HΒzУ*ԸM۲s@ ]qP2dX0C{X ߉L8zb"]sW(| 'UVJUc[8I)hCgfNk$7m` d h% "$&(d)*+, ,D,N++r*)('A%$#! np"|g0/szk ^!#<$& '^()++,-.g//f///0/////x/a/5/..x. -o,+*)('&$$M"z oEw* R7~\gt=L!~Onzu6 , [ M %#5Tcgd fEݤݯ6ޚ_%G pY?N{6e/m _D]V=_6+rػ֖Ԋ҇Ьy@C_ɾh6hp˂P3KԐٝI Xen3VM7UQBG~+H5}c^m3|C6 H TWrwPEnu {!H""#0#$$U$$$$$i$#"" !9 5.%Z :9 k e! 0zD!/V!$&k(*-#/02k34556554321/t-+)'%#!saT > 6"/El.*orSRLYo" {Ph^,: 1߆Jlٽm`rՂ]Վ֋w؅n+gMPrHi^FxՐvzҫу&[я5ґltշ~IPUkەs4Er)R2{ {S |5 ݛuFenb٦ [4lNMh+j r tf KL_L1t-{[aT -_/\a1]W2 !"B#$&I')j+,-/q023H4L526 677S7V7G66=5j4,20.,*`'%9"WbU(: _O9l^ " #&$>$%&A&z&&f%%U$#n"8 @  ^KKNTD5^)BkIjuKzEPcj8 ܎9%ԍDHы- C҃ӂ׹dx3r. e)1H2(gLO+߻߀T1޾ޑgZAFWhޙ޶X߲=|T98c j;*.0Je}s W H Y  / IG*m&aXlH0[[9A?1-O 5 (6 "?#\$L%%%%%%g$$\#"! ~d_ebIPA@Pa(+lYZalC:}2 !dN!"$-%';()+),,-n----M,+*){'&!$!!rTr .O'c PM?>8X>&jmjPP_{$Vr{T%zޔI8,Uެ߱{_p=0p$};[)5C^^-IOE_ ָ6ШϿΏh΃όhх8׈M96aLdf^<' `yiX3f}2=8Ie$_NTVF@ g Gt<%Zj0}J2 . xp o , M %& 6!"$:%L&_'?'())g))**5*)*))i((['&&% $%#."1!G GO`^nsk}rbc`o9zNJa#jUEX~e- C!"$%"&&'|'(#( ''H&o%u$)" C$? X l#(kZ/P{G $v<} R6 Q'iUwt~ݳ ڬsu׾9l6"SUL9G,Y1oEߖj גb\n׼"حT ;߇F8;#u#BQ]j ! QXNp\#xk#njrk|cOu&_=)= 9M"!#b%'x)*|+,X,--,,7+z*m)!'&$d" Y_tB)'U.#li$j6A }!"#$[%&%&';'(e))t)*<*l***Q))(('%$#d! ]8` * $=Tt+ {{{jOE  n  |  h$ZgF\yvP +?<*&#j>*\nNtRdSCۨ٪רաӓёϝͫs-Lj92lx<&Rӧرg`RW0G7 )|Be^+\rheeB$7aOhnplz r2T U![" """""l! ~o~U^ [ a  0]@=W!E#&P(+M-/135I6789s9: : 99C8765A32}0/Y-,(*('+%$;"! fckPGq/h):d /Wcbd4%2?p_uK) ( e_cFgUsj8-5@oJ8SiB/"HOs N߯ ܏3.֚ժJԳk(өӳӲWԥoצذ٠ DiFVzn E~ Z ce*{'֤Wgٕ ޚiaC 9 7 ( ' p Kde^d g : M #/"#%')-*,-P.f/F001L1111r005/I.,+)(X&$#&!Rwe" $w[!m"$b%'N()*+I+,,., ++R*)('\%$b" 1^| 2kQIn`UbMA !i;Bh>ACUX)9YFyS&՛REfr\ђn `b{< /ch|s;e=)BxֹՄԒ0ӥha\iӛ$Ԕեf 5ݒ/BLvt%H*hzP.+drqs N +  U8A2W ;J9"'"s'B5eq-]m6qZCgddmZq޸ڞٮؐa{lے<߿Mc=tk\] [s~}}|pD(GmrZN-i&}Y%j]g O5=@ | j'i2=TT O Leqg*\  2 _ 8cfi'q !"#$%&q'3'(q())+)((u''=&%$##"!2 51%[C^9 # T  l ] D !J8G2`!i )i;&3N5gPNACx!'<4PSb @KQ$==)H݂kJֹta֨=Eۚޘ6TJ~$>(uE;6Wm]ekqݓ۳v$ bcWԁGR\،KQ)@?dC?qTFOefU"wa og1Qe6Sn> |8CG % -x)GiiIM$0Rtr-93o2 ~!)!"#2#$%&s'()+,;-./012i33Y333R22P1}0~/V-,Y*(&$"8jmY !di  M %fl#d E nc!7. hTC8hn:O=|/h_E|@d3/5qA {̱͠gWl~IVϪ)֨صڤ܇m-?uxh1M ,3]IVal$0T{@}]byNXr} : h t\@Nb%Dz  g c:?ri+3u- f Q!#%'~(*T+v,M--r-----a,,T+*)('&%$##" !3 X|;NrV7#)6Y Y$U)ox  !L""#G#$%%l%%%%% $L#R" PJj (_n|:#g-3v] DtGH63to8`dT4f ,߼޾7wں$sCסwV@`ҥҭBvREY؎JܼCWaIaVMvBM RގܨD׶SӪғр.ϸπ|ϟПcvӬ)I߰8j VvwD?maF[Is {-(\at8aJ.!  Xx #3%`')+-b/01234S444Z3210i.-+.)2'&%;#k!V)z60 "v#%o&(p)+d,./I0<0111111R0007//c/..-- ,Z+*)('&Y$#p! 3q.?]sr  jv\F@.26  @ , k | C U  lXf,.2ܚێQ RLݢޠ߳"D@'1-Tp~hJ${z1VqvPG,ؼױִիԵ3ьТR2Ly?3]ժ.ڨܯJ HgR)/~W^p',%!3Ap^|u~I@GF: f s)\0CSLug*Q9!P'& H C q b  0$ B"%'P)+-/1x24G5I6677#665432T0.,*j()%#!wZf}$I=emoetrpmls~[ @-' o 8 t LZ3SsWL0OsO`݈v݋j##ka,mRej')G}ߜ?[ٯ-i0׻׫Fث@ښnTUez$;UMaIT2zQz;x}Z bޝbJTm,ذآN) }B * E "@X\Db]$jBQga N U \ sl\e y | ' T  \&SEhc !"b##$6$$%!%*$$$#["w!e 4tP<HBo U   P V8Q}p_ b">$%') *_+,-d-.E.[.F--`,+*)^'&a$"!$3GyvP #    +ZzE xjhS' $`[6b5+1y\<ߩS r؉4%X_#B|K5u~`'%7Y5l܋!ۦەۦ)܇ݥH *R{41  gviBosDC&^V % MYA#wl'h`b M oUcR#N*m=X L]38p6 F!#{%&')W*+,-=-. .:.$--O,+*0(&%!#$ ^$  `dfN  >y* ZtiAP@  !>6@_\w\@Tov *bZFPY_mmeQ=-!`Bٵ׶Tϑ΍͡m f̓^[ЀѲ y3اbܺ;[cP"vW#+HN/%L&xYAzkC#C:[3*Dm2Z J X  6(Nqe !&    W'!bv95a8&( $ !T"$T%&(4)9*"*+, ,,,,,,o,&++u+**u* ))$(('i&&8%$$B#""?! bL~@0j8 ^!^"u#$&'u(*L+-.s/012822222D10/.j,+d)'%#V |W# }6az8N=>l`(DU;ֽ[0]ߏ 0 KF'^u{<ۂ?֍cнϜΚ:̩̍́znEf۾cv'x)^skRrHScI%xG(OR I  =iA9F]~ "$&w')@*D+ ++++<*)('q&$#N! S?LG?c<xT " !"<"#$$%6%&V&'( ()#))*+*`****b*6)))%(''/&W%h$l#S" %"Z] n ; >  3 % e $ rMFiB9H0  Yz\(f-qc^y# ܵ۶fٳٍّٯYڛaPl ޢH3@03Ue݇ڪׅGЄ ˝ȶǢƷť~ŋgGNɉ̻ΞПҵ%'6(*+`,-./0E00000;/..-,-+)('&%|$W#_"y! 9<$V8s>sq0`}  l"^\<nL& 8 +/p,GON+Xu[&p.>aug(n]8609[ߎ#ۦ]E.-Ht$Ҕ'јьѯD_ե֘ן:܂.,N+(%H7yBߞޢiIEmޥߤYHb1tXD'^,J  e Z ^  8 ; G  n ,d/\HBAa( + MD]`L ;!F""#)#X#X#""!B I[>%f +   % tm?"0~ G , K Fd"n ![""#3#####{#"!!@ uvWF;417$ sZVBARqb+"yc.L@-12ga0J=#ߤށ26ފ ߳qCp7}f JwwA XiF*5,XעkՐR?c՛i*BN0r{'tHpM@GjNTX |M];q:y= * 7[\4t mC|~>%\G@Y U:V j D E U t/jkv;v "%#Q$Z%2%&'6''''''5&%$$"! mEGSW A - / W [eUE_w}vU<:1<O_M%Ny Q[h ' {49\z#95T#K u{K|kneXyi5!elX):wSe|5ڿِ|םց,.aQؓ7ڷk:ݮpߣ:MLOF$wnsVMv\I0o:i jb K0h:m"8!hGU+01QB7bG+b %)'@ , e \TjCb)/xeshz@$>q_ "%#9$6%%&|''j'''''a&&B%r$#"@ z:Wsniggr GK_ ;|V)Ge~Hhy>|tB7ay~YI`2o g}ݢbۺ۪ۼRd$#Jf~~iC[h[g*8޸}`Յ< hJ˪˂uvˋ˽XJβ|{эҴ pڌ}[Wqtyv_AV5qxBCgJB2I= Wn.Jm t*D~t"BEXjn 0v^/tyw&mG5 C!S"\#\$u%t&'()*+i,-,-@-------?,,+q*)('&%$<#! RB,$Bw >{S xA*k?dlo^5- =idR+q WH1}dI!7$A,n>9A/SoxV*ra  ֶԴҿ,ͪL3WɵvɃɼM)a@Ү(ղ8G۴*k߀e,X494/ ]BC+-("(+141#7!)zx4&B x0|h>N!/"k#$t%.%&&&%%3$#"! pJVF+)5Sm jP /gjNWxbM YI e !D!!!!!h! <\NM{ 4 eHO|[ +z$]  S  V l ]LrztI 4 g v ^ B;Cy-sVR+D (|!o |N/JD3Q K^ABx`@Ap3'.k)պո eسFݧ Zn-sZt%<@+UcI/W,>|`HcznEyVD  P FAr2^\'f3 Y o h<b#j4 P F A F Y &+2 CM-$`gK q  1 h 6 ??fCM7}$??yq  | ?VDS0!1i8a(4AFYSxeKj}Qsw"Bmi nBYc3'CqV5۔܅'ިsfJ?8)^?uT l,Xkp>|>ܸG9 X۵ܭU,)K%:UM6)q~uRj 7vP)&AwD&6a`'8Y$r O ; #  )3S5t|Fc%JNXIk>ZoaW {S jV "(#d$%&'(D()S)))))V((o'&%$#"!=.Qpl1 0 fUr > mP4 )l6LP} y V yT7kt9$z?pu HirnnU;(=;`ߘuJ ׼֭ռ/vSЀ? `GӬԢ I{ۿM߭Z rZlkm!oy "hmKL.tR)$,(=[V [ Rbfb<sv6l<S 1  Z DmeWPwIr B!#$V%&'()*+L+,9,l,U,+*)('Y%$A" J9x lb8*:;`!{N8<BUwR-;} >F7Sc3+.D}1jy"LY~Lz(/+f.ۀR6 Aϙξ΂g΄Ω`dѣQԾղֳ'Yܚ0.ep5V N6fد ׈3@ׂQ١ssܠZ C>jA O B 8e2LP1EO)   " Z'|  C  : }.r!"$%&()%*,+0, ,-. .w.//3/J/H/%...-g,+*)('&%i$*"! WsWmMBSk" !'"+##$%6%&(&J&o&O%%$$#! {$qt9 M  b8)Py0 FF h72\&k<xFF;1nަH.bٸ٬w8cfjgHj=vw: u+de4܋<ؐY/(?{+ЏrtИkүӔ~y֭ځgEI oY9^si I k^m vdQ[L Y q(^ '!"#$%)%&&>&I&@&%%I$#"! ?*eu8aVBJl^*1j|skz~ !"#K#$u$%`%%%%%%u$$M#y"u!68e2 e}STNeeY*$'Kas [ , "   O  G UM;w#8TFm;?utUc"]#B[dV$}\Da iA=\ڠsHJlիԵmMJcԤ՛N+;Zڰݙ3n%Z)zn  )]4sKdKn.juVO_LS7>Wq f pZB7qqDy+qlD (F3z E 3 3 cDhhW "#X$n%Z&&'-'i''~'P&&Y%$#"! v A+Hy9 ( q  . S Q Q HYa 0NX54g }8s %s?E8.qTKOA_95,  - 5|OOhB5_߼)d HiNk@SesO*Kޮݔܦ۳(w؝ؓدYژۃݯe i?zG$k6HVb-u.<)o6s * >3r?v(| S  f-Nj i!#!""K"g"X"!!5 >'a  ! r y ?  :Z9F Q!:!"#>##$$$##Z""!J U%6{ W 5 ;| vyz  C [ A  Y[ Zgw Azg,aMs$[i=2Y#_3Y=oW"xv7>k߳*{5ոYHΕ͘F[͹Gм)ՂEYޏ6jrtw+e^.dZvoF Lra\rWKHR^y B[!B9 ,OKky " zj :  ? +Cu!#%')+-/4012t33L3M322!1c0r/h..,+v*('%r#"g v}G;?O1}`Sznv+|YKF;9A L!R"J#+#$x$%U%}%%%e%*$$A#"" LS:d} ndgk7$Gn#2;7:"c~3,nc&q}Y]>%@ީumvڈ؀ טN9&J׍؍B"uD*n4|߬ޤrE؍P ҩѵϢN%Pϕ+}طBp'RJn`~)@xr's= lU; ' j< {I!*"$%&()2*$++,-2--..--,,I+p*r)>'&z$#c! eb}cfp}~<A_ !"#$]%%&!&{&&&&&.%%i$$$#U"i!R 2 $&O %W83c.7Bb}]q U "yo] ;hg8.:gXIإ>1{٢uuxݫKtTD?P<\߯?oؾ׀X:1Fbѕ иg;8E|D҂HBNփPt pN#~1Oy x;d\dY1Jp^_|=G*le I >,"Gq.h {!X!""##""n!!B o #]9!f9"/g(~YOZV| 4!#%{'1(*k+-h./012n23k3333 210/.w-+k)'%#!iI' 9 p `H V  PJQg(3  'Vx\!69f"!'\5mq}D#gv+4(!mI P"޳kZHaٞI׼K֣օ֥n9}ef\b z&9Oc ߸|]_ߌk%0 @ ] +*]~? l D~}8O P)t: 7 pTP'M "#[$h%'%&P&&&b& %~$##! Oy=w w ~ W#Aa * m 2  .L3C<W:{^$AI  i/x1{C' m%] Jg.ij6>=%MZ;J_Q'33(d& I*_|>(1PrT V#lObE)A|ܾ1ٱe2:h]1ӅԾՖ֓׸>۩.wK9*:AC5d 64h=n{R x_3ZZ% L 9  5 HbS>h"p R&t7]ir_Vfc-I\iE! "#%&<'1(()Y)))))L(''& $#"U R>o+u > fFP[~FiI] 7 Gz>opR-<c|YZ  yR??Tj)]7'JrI!PH?'H\T0 k " 3rط#ծZ?[bJxpBNqFt2pIk^6h!>r"kE"#E߽cއ4ݕ[CZ݋@߂VSdXy"|[RE q O o n  \ :V[]l`}kUE>^RE TjC! "$@%&())**++***A))-('&&%$#! ['gzN'3\UW\lqTD2Uc !h")"#:##$$ ##z""/!N EGIjuS- k;1;V" !~GR[RN  F $ q y Y~~Uie7,eF@n۴ڎّt٨7ڬ܀=+ ;CNL1W#u;_YU ApکHv!΅ ˱aCDtƣƔZ<˟9!%\׍6ފA=okl@ o1f-,b@8x"%*p7  /Mv" "$b%'3(A),)*c****g))3(`'g&g%5#"!i \NA_&h8'T !!{"$H%' ()+,,s-./01{2$233d3v3n3522U10/.-,7*)L'%$"3 `&d s q  (0jh f " YJtyK h+8) QsR&gC)4cM4@>y $9QlIZ=j r[2/B[Ҥ ψ7/ɐeʳˤ̺V҇K7&1Oc{W /q v+mERuKV\ayth}7~1, d Wr[ ,fP>TyLqeR@ i[l< p";#%'(n)*+,---..?.1.--2,+*)('V&$#8! @Cam2im / 9   @ x8/rI>U6 9J*{&\^m:"e#IwN'+Y-6#"aL8ZEoۭ}y|6ֽlD4?{d _ޭU5du|c.^.LpsSFV9_Z5݈J9/D؄xH7[o:2sfq[M, " ) S y z] [ !#j$%&'c'(s(((('&%$#" o H#.qw v p tP.Of6^J ; REFTQ|(V$E :#E706  ^ m <@nrZ?iiaEc<9QݖڍR3N֧֬\\|ڮݓWE`c].T}f +Gj`G2=ݲuN J՛ԍ17ԏՋP1@ڏx4 =r @W~w?9 0 z  8v . k^Y}\ f } 8G@B "4#P$W%?%&d&'5'd''''s'-&&^%%$#! vRS.8]\ A,a^vFX!#i%&(*&+-).|/0k1$12202111b0/.-M+*(8&#!Oxc  "%)43ql\Z]a ) j W { D!< <3;jELwk{0 muY=q 7um 9L|G>wޒ M՜IY˾EȿV"IȭG BїFռ@څIXPoiGv p D#l|8$!b/mQ8od=%1ei1uE ?ݞܮ܊܁ݭmL[tGSj_@#k2pT,.m=l۴nԓӟѦYW~ѴCӭԴ qۧvD40$E? o<&`` REHAyjyNg  x\:n!"<#c$e%%%&&3&%%$S#f"?!+@v5 " v/ JiU aL "#F$t%s&Y&'U'''''I&&)%o$#"!t @Wn`Y  N Y:Vjd63` #   w $=9b S64rlzt +\N)pa'2CD2O{g<S #d t  m/8!:"#%& &'e'((('';&%$#"!f c>|N# >1H! } a e Z o }k C`l,  ]m9N}[_ZGP 0^aX0kx0UT0zcO݇rhҶјЃϠo ͔͕͛͛ͻ=΁H϶Hц4ԜՐ։קXܨU5w_t\'ZotfB7 &6{݈bRqJ~rD]HP \ O~.;fI5;k ] { _ l f  lvm!#R%&(*r,-/A013 345Q5566 555$43320/.r,+i)(&V$"!A$[+k6&@nM|H&B 4!)" "#~$"$$%'%(%$$4#|"|!_ |2j5 ]{+r8 (;ycGhkt pG>,:J>H*K*Zxg"duM#D?3 ߂۽v أؗ@٬ ڕۉ(ܣ,<޺4ߓ]:czT(ߡ7zܾ*Nlӛ3ѠЋ9'pjӂgYR}رgޘiD=^sG h&&(e? > w ^ 2;*Q.'(Mf $  _WM)* "8#%J&'()*2*******x*4))k) (('&&|%%[$$=##"l!!@ l)!qqfDRj3  +!!"#e#$N$$$$;##E"! g"3m J {r{|R&7R![ )C Hwo.:N AvL]]qbiF߫ ީY20YބebO?4M]-^s$7B]hM5pިz־ՖԶf5ӌտ(_۰4`Tpp5Uv %:CcJ1br{a0qA<a25RsE&   m  {  A n z L JFh&GEe:jY_vP "- $!"""#$%%&&W&&&&&&?%%% $##"/!C 9L^n$ `lX;c+Q4}bl y qUE p r  sHgHxD@ {P'KC&WyGSQ3OeB{!MHB$ $T޺KF@[C,/5FLbvu|uY3pcW|cchyC7Y6w-@k'l+Y0p 2D-->.|'64I)#}h hA|%  Yt'qptd`>~J;kYS_eFt6|jT  az;a Q 6 @{lM-,Ar6uIHM@K?p$ @ E 3 ` e G  5 v9t1;~\hg ?B"v>YoxfS%c,wAl}}[(r !޳Yڟj+(ԂӫӅӐ.Ս֠ښ5߱i$Z"XoV&42z>4pip&y(X rE#%>ze$yd A Rh!<RD, ~`M  9  < 3  0 k;T!"-#B$F%D&&''(](((((@''M&%$#"! RiXki~MhNSljAHw}WcQIL  )Ph|)LNpTnrfI*0+5D( Su?SZ*` $QeN}!޶ހz~ޔޡIyߩ2n_9~t'}{Mާ$kۉFئ׀ ֭V-֏ױwYy۝m~cU{Xl#j\"13*% 8Gz['d S Y  5-^$w "##%&^'()*}+/++,,+++%*)('&%)#" +> q$pt@}yyM* !]!"O""###"""! ?   q_1 (QzJiJC?]&zD j&x  JsfBJ\A io2ߨޣݤ;e<*FtCܷ[޲߄_*t,ycum+,! 0vشq=յ.Ԧ)ӫFҤyS9%.Lҁ0H(ݎC#\b}-Sx~d4;O*'mTb8wTTWo?4" , &D6& jb= / !!D!g!!!!!!!u!C! M Z&t )f|}  !e"'"#$%&'()*t+P,,-.G./\/0*0}0000X//i.-,+*)@'&'$v"  2 AC/0$J  1 1 y ^  [J3w$Lnp_4oV0/5K5S%v^4~KyH" oq43YPړ^6;YՕ ԐO7+Uԝ՚5ؽٿ VޚWcb>Dnl.#g=S8/ 1XukIlGk/  md3|E~uc/\*  Z -    CT1/#U s !B!!"("j"""""""Z"(!!O 7$^|yc-[# 8  p w (  ( Lt5ORE?Q0  l Q ;pbyn4UMafG5]wG`{g&3 IG)"/\v5 7o'-e6=% M%,=hUmz 35>ߤ߿l]r^Hel0&d|IAh%#Ew4z$hUTn k; B ~#wta !k!":"o"v"M!!j c,7XcA \ / w j f 7 G qG2")%+>BGL4,,Zqqha2 g~At q Y ,    8`4 7zZZm,  <NM#|*P *: =  Z5cTKmq!.iSF4It3K.  $' }:, ?!!"#D#$>$$$$$$$4## "p! (pHs|z~ ">#%'k)!*,I-/0D19223383%3210/.-Z+*B(&%)#\!5xV sO    ) W3Q , B  o    L  Y  qG.!-}=(#aE-:hXa j c*{v__'< hyVL;235@_քմ hs&FӍ:Ա,մJ׌9ٻڛyZ?߶s-o .!47'[qJ[D߽c#3ߋ?eawI;` \~<,C6 ?aqi^4eaIoB &(G'KrWK@ :!2"B#C$`%&')-*v+,k-T...//...-k,+*)('3%$g"!@kF~=@syK[X%m]Gl5~s2  {N,;t7mR@19L?65JNd~C w51 BtT)04K+S{Fޞ;ڼ[ڃq_kދߕ;y SxIl"&G4sCg~#Hޚn݁߫Eq`s? U ,cZ[^WVl$  6 x MMm0N ?!"#%&&'(g))|)*A*t**x*Z* ))?(('m&%%-$I#v"! XZQ*}ms if m!!bR :&  \s*Wp+-{ch3tw,^boiQ.388" !->Xcv t{:;zJX3" (.IOK5 ul6(*'LkG'2`p mtH4PO3y=? @<..hI/ p16<^0/CS;]@;< C .{@!s SB?  t y 7kZ_Z o Qc 3Y2e3.`Et_7 7 - C o . og@] THNU*JDu1MM46|=Gz IG1ZhzhgEs=lsnVaw71-.n~C;AFz>+1߽ߣ߬]Ivrq KV|Dh'VaQ5 '<\L(^v;Zz|N_t zP O i Z y /AVfW FHSZN#FV u ?   + J ?!!?3`Hg"rx, I g Y 8 Micj W rYnZ5 @ MvwZ 0 $ A euUI8++3>Gm~Aqv'TdbsA"U;EKEE 5adE yZ}@ %fy22Lը,ץإٲMޅߨ.R *O[QH#zAKf"e[FjM<:Kd U_<'%?u] CiwwH Ao3*h2]FLlU@^ {{ !("M#g$i%W&&'a'(8(d(y(u(=''t&&+%f$#"! {ugoqs3n{OVw[LH\.2pL.\[7`[8  hn0<@xlQ4N-yc]4q;$D/.2kx`*G[;[`O|7#GSaUZ+ .(o I@N&߿Xxݜܡۘ"ڭRٱwbKgٜOۇK28exOeA 3 =<,%wvS/ /j N w ~"-$+(( PTuADe|4j.  #Q+d Z5v : !S!" "?"T"I"$!!! C\,Cc ^- ?oMSo2I9|2)8,'oR 2XvtX2km_2MiI-CcQt(y<*(7o `-*acS /S:olP*Zq a4 C!~I^X5Cq0 4 x ._E+8Br* z { F,W:BDK]IDAB>VyU:i3Q\qna^F"  K'`!(V8 TC3FD%w<u S * ^u^MSgCk-]L m%yd!GBUk_W74dT ?^y'Rh` b2W- 2?TI@:k L5^ GP}MiLQ[T) Q] $jBy#J * ;SiQ,Zl j?d  "@_?c(8swuAYW~?]$w0:>IJ?.    aWHNjIUn=  l  M ?ih_C o  6 wCeuM %K;>C>YNw.s($>>$ ܜۆڙ;دjڽۭܮ6o1jtl:q/* Wu-sj"M yt{|4ZB{`TC)*%#=Tsj( 9  . W jar`jVlYg GA)w  !"D"#L#$$K$$$$$$$$i$L$/$ #####b#=###""""z"["!!!p! ;=2={+|^ nV3  x !! ,tzH`  ErE;Rjp }t}2.+ KtB9k $;FgLF oXZy%s8߶ߍbdaqߴ6volBSZ>'$FhjddG6% +HՎZ#ԥFKۓ"a(hZf`csNxYD*w#nb # t / h +  q  )oiq `!"$$%&c&':'c'w'['&&>%$$:#j"! (\=7}dp7xS^ !@!"p"#c#$$q$$$$$$z$)##s""!!c I_Z#?Tpzt^ f N J c n7/O. !,-GQTp|}]TQsq[&V$ZL7CGݶ]B݅goomPL  b\?ޅ plڥ_5%]ڙے ݼޣ߱LRt@#(@1j<+ 2y{*-QP8d%z ( h Uo5{O:,_2H[|?lD=Zc !)"H#z$%&'(v)1)*3*****x*)(( '"&$#"Q!Gov6 +p N K { B ! s .#jY yesqzAN'M&!?Ir4 @-fC2#v7YWD~}2S;)r: $xLߓVACSߓ,7jjoq]?H| g,d!blDva/"|}phb   p # 4 7 jHXO7.SG49<Y  :  u i w5u/Mx#I'v1ZhilN#PC0E?D>,5 4 ]  w  ] ` V ] -YE;V] f $c(VrUflq`i%NS9m'bOS ),Kd_O<AZYRm2\L2F9kyc>>D+Zx3ol2.6_b1iSxRb@ RqL[$X gz.d=S>=Nj`  , > & =8OF&Zw0 {  H n 6 I lG#P @W g  y[dx$=``W<P}xCj cK ( l } P I } T  }`PLF-pg 4VCV7w- e  Z F|D+\]i\9 /tx;Hgq0'tl8x@@ -xu!~U%&p* j?UL2B/F4's@EAC߇ޜpކ޴߃V\ wSBnXh).3t}\>.QW}]Q1#Eq  u JV7k}dcc[[a\jlcrZ]R8$:zTH/1u/C.`En23 W_Oi5,z) -&~ 0'q:3k}sW9w6'mm2l.eݾܳ$ڒ2+ڍۻ܅jcouqO ;;dlwdF%  /f^ ׺CظBڥmYIB]yg6e`L;B /i']]dpP1Ut`7 \m ? ! !F!]!g!T! OMG^ jHQZ lg 5 !e" "#&#$=$%<%&&s&''V''((3(x(()G))*h*+#+++,",,+++5*))-(2'%$n#!L!\ih j @ 6Lq9~Q;; g   z Cz_(``21y[i9!$,WuwI!r-f)dwLH^@?7o"/BQ\pٓط2֑ ՚a-)Jeպ֔<?vSDEXS?LNS=mE6-1\H4|$c6gE.##@Y,n ? w >[fzt[R3| % tX+;Yq i ^ \ s G(j@/C 5!!"Q"##A#K#+"""8!! R,\.*b7(&$3J^olI?it"`(o-1D . Q g \ P$<xbJ@lUq& )h)*KTE9qyzp?_%&J{ x5]C' WVEs#uukn`<;XI HT:O[9? %ko# ,zZPvxRdb-e8}5vHvgX^1 0 9 T  [8^}B14l 9n`CGRx; T - u s m 7 : a ]  ^'] { 6 o 1 o 2 {  E?CDQnQh]E4:\80VH#@nqEE[`Ec#G dR}}pp= |ST(1$Ay}]Odb=-'0Zat6^QTtfia`]\KHY/=6z Rr'UC/EDFh qww>o,TXo*Cv!bKCr4`W\D _8-%Eyd` b ^ h~ De~nH|Ig#1W' n g  ]kt o  3 ' S%e a |  z um}ERymz<.o<Q> uOjxZ82|#@U_eh[\S\d})s?-Ms]`n{zqgd`]YIBA+! unS[_V]^XUB%MqK*2l*+xf clhjYB2;*}v<P e/f4D J  a [ U D I{WE7}6n 4Lka*4o7 !M!"#C#$M$%%S%z%%%m%E$$m##Q"! &+%4aI=m m,n,c2J4 ! F  oO5@aEfR&9BVPXdapgw cLaC=T+*|?r#-!:W:4ޣo30Uݒl޴B~߹#PUe*kO?=8:>(fDz'r}&z[L^t?@sQ r ~ vS ^s.Fz NhsJ mq>p@{; +} 6 !! ! R $ASw\YD!XVHFhef5(AG0g 5d_6&Q'6j{dIG ykXZglz7dESs ߕ޶Mݘ6ܤ_&۟ۈpkquۡ e3ݷK߿x\=! w'U+eX=}jJQ\^SpLQsB1{u]9sK8C 9 C I ~ p Y M M Q b v)1iO-e !"#$%Q%&p&'N''''''''g' &&>%%=$$#p""$!! yuLJ\=hDYADO`6F/4n 81{UJ1P M ATr$QttgXTU+|>G{2al<((Dj9T7u[}D z(wo5RV'I<N8B>pB; B < } ( ]    ^  = f +s;% 1V  z 4  v A  P d z m J ! _ ( s ' c 0 w n t { / p  y _ K @1 r!d\`8_ K b C ]  )gw-LrYB5E|]Dw .Dj Kt51o{6K`iG/CargJk&Yo;qbN4QF8A*P~L)4bN,%8 B & z r l k  [ ef4#/CdCo_<-NFBhA7(/DgDtvB2S  Y  p 2  B \ j3QR=[Ag_""7a=NyJ'e XjeM ZCHh R.cx $N}"`;OYz.7OM3!u?/ WtXz2Fy%D@LI)DbvN}[& *R/5 e  P / ]aY J F+}V}  x !S!!"<""##>#u###$$$$###z#;"""P!!!_! m c F > I E V _ ^ m r f w ` Z R @ %[;;t[ b > ) )nWR5`Z!M] d~/Y%y<VnK@u >d aaWTib&vXPyz^-*1^@I|)ݫݕݐݠݲb޾)ߕyp}+v#d4~wlN:{2!Ov!.,.0A]c   ' ^ Ll5}7\A3ixV(WZ!  >[u O;%gEAQcr}r\(@4p'K + 4g7<duxzcN;lO2&7ZI?vL".[Ib5_Ve8*{qBPmE (Cz+R*XgVr:;Q6Is}bjB1'$,.$5Ul SJ,   (U'^dk'VD?|/d^SaE \~:lhP(iIJGV|}IwU1 p E % t D A I ^ }Dswo lS+1 m T4pVRzF%kR* ,T[ H)\-neKK\h%JZl8Oe^(lE)!{Ll80b3 1kF $nvd[dau ?p!ZY]pvaJV/ Q uQ-FMp]1z,x>!jR#NeT)+%SS2#?GH7 [ ~Ea\UNghw!N2qiysg[2U:xK 0;^d  W/X"T2S_  a 5   Y!U(`yL8[2IvE+c#GGI8 K'z1[ C p  (Ox@E,x*[+eK5"%>KtKyi:Xn'|/bhDmHe(P_Xo2To-^Nx4f#hAiR> K3N!)%V r$VA"Rq@X /XHYWm\Hvw 5 !!>!p!!" "H"i"""#F#|#$$`$%%^%&&V&&''5'9'#'&&c%%Z$##"6!P NUE/$hE~'P { J 7  | ] 2  { ?  =}`S0+/>T$Dr$.RnD-*,@Z|%=e~;)9!N^tin߇ w)ݤݢݼ9ނUferA.oDsgPnRw> y]#f*o=s INr7 v 1 mK&o0&*7F-Fb E \  s p w   CuL 7~T sT1`ZtDPSM4g)"dp%I e n Q 1w,Pir%kD;Nd dA7-'(;6AYi~%850(u=}L}qpqqt~xulb[9+.[q> DjawKc Z@_b |v9-? ~rgS;a *)S(QN  4 9 O F = 1   U  f  f . Z IA5Vq }<}_w6RPF;     Do oR+(Jc __v & +  V . # 9MLftnQ#&2  s A % !JmP^~XURmg<yJ]\Hrm'RTAaz~G Ft-~%Aq*{;ise6RN zVQq.!Nc kfG d#) dtJt h;:d1nVC9?'S?o  !)8"'- Ic Me!S2BN C j F1on,x`o,   f  [ 5 t i r  T > > D 9,y)uOUQ ! B O `w~0wlah0G,O$}2/+X3fsLR=AX!;y&0>wL#/JQZaQH3 ZG,[RjDS |Ls;o=q%q }F#?kr}rG$eW7 QM71]hb>Bx@ D " P2`T3H|WTYUbs| !j"?##$~%%&U&'M''((%(''':&&J%$$D#"!!1 ]e(\5VCAH K ; H } ' l G !      + 1 9 3 " %[}gHkK<)*EU5DI78XuJ,5 jX5fܭ?ڣ } تU([ڢ`Yd{b!rs`ZZ6hBKW9- m@y * @ ~  /&8z% %4>Pi}:[l|1vGGG n;\ d !"$"##f#######,"":! >sBjDGxXEFUoLay0'} P % ] 7 Id~h8y< _ K g8fErBwߺWݼ)ܴMۿۏwxۆ۪܁LT߂!n Jc[Q:%07^t~CvF#ZQ%26Mb? 2 i u0Fz;O9*Nr<Nr*X"eTc)hDU:  7 M J @ 1hqP+{58y2eH> {'L.v { 5 `M-d< <{|B{G ymm`hph't ]h?T-7+:{Ls'UrziaN91)1N(,-(75O}M a9z"W"Z6r\R6/$&)AdO%B^'bR.  R ! 2 Z Y M  e X NK*QB({io"_:Dn.xXi& b  !  x #hs< a 6  n ` a d  k $ms,"IexaU e,e  2 Q hDQ<,7Xw+m6ZysaL \- iAC~ }E$[2e:8!G0~F?CZFYc89kHS %1\s;\i bb1LO(5g>ey^~{: m o 9  % G d V a R < &  t v x w E v , 5z'K r/,k}J=zv?N/h(  z  v Z [ c s - e  J e z } n M ( T ) BK@:H<}T9akd_ii V[?X=]#nwR4X{v[F* Nګو-؞|hrؘ"ِںl8v2/; _5cx:T%j U]n7"_lD $BTr   s+#/,>( j Z 4 ?  T1    #&# K! !"y##$J$%D%%&P&&&&' ''''&&&&p&4%%|%$$ #u""0! 4X;?a53_Nq#e~C GL66a9c I" Jp?g}c9+v%#t8!f8`0oncފ2ݑP"9xݼ-ޗ$h^.ujTB" &US?o"A\7 0IWUG<  u 6 ' C /$l^(l> Ddv*vE* b*imDU\=o. Q],CjX[v+y?J^'b "0G:A8w ciI,k ` s,bTC|6 ##h3KseL $Y]iXCD>8Tk'j2kZ'Z5YzeM.Wk^ $[n4IIlYpxaO%  Wq}  S  f iJiz_`&GUYQ  o , Cnh:   f  Wc{P U'\ V  X g$EDc!0Jm> G N# X_m a@YoWO91CfJNX#߼߸%O{)q*wq)@8=6oN9d[&.D>;z 94%. )ZK;LtN}&` Oo5mL7N< (   # K x ( r >  Y  ` 5BNfj|{M e Y [   + LXNT h_8k+maZg uM!w'fMRs'vF+ pD {6Qr UNO?h~7Gm'u^HQc^6o+R{87e4l;S$5jKoHMj  G _ h G 4  rC}1(qD e\{E) !@d&"'"! a6PsN%-p  ) > _ }   ) M h  + : J K 7 r  j Y {1sB_-d?$~yVErdK-g(`_2g;P1 rP&lG]RAL*;^c ):F\~}H& $Io.~7ua*Z@r'[~ -FRnztoaFB89IJ\hu}ptlfmu4p0sM0GczFWQXh_1V yai s z u m A L W(Ej5:B@5+[ <wgmllpk`N1 1 o }  5 p r")?U*jG,  ,% |..b& w8!_HGu$Q'9aE/! +Jj.[;r E}=?(UgrBd:f+ zE{~g4Y&lJM9&4*:Vf/{ w<j,mZ" { 6 Z*`'J;R1PxFj$I>A@.Ir:z9 ]=B\]Dr()  y k W IKi9hO,{%m@N\=g(`5,7-7Do OFGjL6(-/#{CDBOH.tVZ߂ށ6ݡ݆}݂ݖX޹+ߢ)c_kWGCAOQT^UZG,r-1p(05'r/3AUy7 C N N C 1 r ,c'Ibu ,W4Xy:a0Jx@y =t1f$+-|0}&V|QFIV z  5 ? Lf).f4hI52RN a'n(8o cIGd m5 |hN)lJ7{viZK&X"`A{bD=ERo+w~Dj-AIGlZTF='  0\Ua Gz \ & B E = b#s3`cT@xW  T B f -  ; r " Y  ( 8 8 2 &     ; P + k 2n    8M^v|rjG#}. , h # W De!Z%j'P^NBaz 3YZAFq%^(rE1`1j [/! V<{{l@t@e WlvR'vR7<4?Rd!BSVc^dgTUJ/. %5PEM~U1*41ur:1p $Kq,UlV%c4MuQ95TuX<K6P >b H3c4P U%{&Qr  T  & ? P W b i a T 0  Mdw*ejW7(&&:HYu%5LM]blyokl``eez ,993,#xmcPE(t4k c1 }gN$E~3?|Yf$%;] 3l"g#Jd)79E2vfdY^du9]u@|I 6\w;j!/* VKBtD*nuDEeIEgx Q e 9  ? l    1 9 > N ] | =cIcvgB;V &Tr<fX>N @ [  x ( z M ! z N D]Fx!eH1t$iN!Gl(IP6#80@}|[oYIA:93"1(! i)d-W5 LtwG}-;*XflFM DwlA`[RO^_j)lO`^(u&a-tP7{"L WI =L}@Q ? / F z B "   * E f  J g 5\9].RNxl*Sl;T3 ` <  i 9 ] K 9    { W B % g Bm SxUb&a-f"RdQ9}h_IF>172 y^6)VgNw#OuDy){2tqo*Lhy@c>k 9_{ ZNYvSBTn0st,QC#M Z C  p C y e K  g % - t PC_4,GVfuvwwscRO2}V*s?Qg9 "@u0o4y"DH>m  . : J W ` h j f \ O 0 ( s\2Oh,IFIV~(tB#`B,sdicl 9Q^p'Nq 5E^Da%Dt1NctwL'[/|;75 .Y6a/!Dv)d3v#Ma'R~G:QYw2L)l(NfryxkiXF9  _K"vN& ^x[FN&iR?4 ,QkX?R~D\vqLs+;[h2l Ckk d ( [  E T 3 {  Q U  4 / { ( s "_ M4w*rB#'3Zy&\0U{ f1A73P_ 98r ~V28XUy]RM?8<(~hT?:&&+")&lDp82Zp?' ,\ar?r"}KsU;$zh]Z6O4Zo!0Mn{JzA7A f 2 p Y [ gx 1] P;m X9vdN#^(W;m2Jh;Xbm ) T  I &m=@ h>g4[=fXypm_[u4y rQ )B\J56MC)a: s56(vM5Va1ykJ*yaL2 1FSy.yK4Mwml>a"bP:!c<K5n 6 g    >   |R@.xO p D ,    * O ihrT!1sw00a'\ _   A v 5be') I]0 t / g /n sRnbG rC)jL,c![5ARG_ZE.>bq?3Xe/[-FcpmxgR=|:r2 3d; 'F23dr? |L(1 ; x r CL`{I-MO tT <  h  U ) U a }  } Z =  [ < b;N xyjrtr|y"Df9I>>/^[njcfm<P%"G^p|zgQB_A13q9qA_my~mcbEC0$0#5Wo-Z;f4kESUZF l /BNpM?8vwL&^dWdMF>j%QzlFsV@EMb qf7r<dzf/ 1 P S T J R1[iur 4YHj"~[;-Hf5YNUjtU3^!?Zz;` Ipb ? r    y -0#|ny8,WW#*= L = 8  v 0 { >@< r  R r  s?rZn"ner~ - O7?uDq2W952]oeady\,u a `N4{k_ ^N3z6n&]pGwcWSViu D} d/xD$` c:uQ.*[O0SHo% C  2 ~DmleNV g' L q a F > E Q a x  : w)MvSrS r5B>  i ? (44hQ(L[uzY0a'1+# \+_!?MH0wAzI rN<%EU|]_W GBNVmnsu~%$5b=UimaM)<}8AiGw'iB.zR`G?  a G M  X 3 p6dz~sz=q%` #-,A,"$qU7J=jY! } F u 5w;A,Fv72M"s:*Y}"NB c b R G ? :*yE#ZZ3v(90x = b  K 4Wd ` * i 4 ;  4Fa_I1 i % *  rWK*YyF'-5O[g}zlZ>(b8EL&nBu8j%e* No/Sb9{k3RJ{QS 4hsFVY`{ Z L  r ^ M / ,    r h D "  r 1|8/e=\M8}SfU#~$qW(td*.u N!>oY|sDy`z@ztRO/-GT5r <L{>Y} n7?LtPMXlq{oc]k  c E x         0 5 J Z ] t | / t d3".+RC %2'/&z`:m*{?97- s ] h  8 j 7 qBwZD&x73G4oB+7n'sF](a!y;T(vcH|GT1^aFrrsOU.o[Qal1rhv&}3o/h1Q| Dq,uhqI>l0e%k'-t^;b , u  s 0 ;  Q +?d,Rhsywb[A-{gC [  S  } 1 ? -fEV iE%|ufdZOWTXafdhd][@0A AVDy0f9~y(W&*\Q_^ i6-,@Z=1e+{HZ:fL))I*aT[d?L" $e{,15zV F'0?IEC>% U0p[^XRlpv7U}Oj /?Rc[`T6>PJ67Y`N0   0C_ I*(\ v4?+q L:M 6Zxwrlrz"Dp 4g+_%b2^  xW|fZF=DFSbsqFk#+c0+%[>,D7uw r =_` X<)^tuW9M5Up7 M  e ] U M ^ _ y  / `  >z(e4QRYM1 F 7 , +  qie5oD;<;86z` f7YMJG\Jq>j"T4\*.`C}yz]oK<6Ij|  xC6uNsPp 5CX^cpswtuvgg`OD7(h]QEOZh| -BDUdbh[VN5m",wc ^U$;sWhV<yb ? 39;aT4'hxJKgT!CPRT?) Hb"cz6AykcYcku v ^Mxs4yC18hLZ@WAy=*j_5pgKD6n$>GUVI?-g? Z=}^F3 {E W S >  W  N  Q^ysP# r + 5 3 A d Xy?7\/[mqD(RVA q3a+DM%_'i$XutSd_f+d,l) o"B(_l}#s ie!{NbA" &Lk@8 w~|oeB` SG|-],SNz.JxhmyB(c]fJ Y " l $ T65={h0/?7  A Y $   ( V ' v = Y ^9cnlV+Qz e  h =|[W|\b``&k\I6j2>A wB{L,wqUS|-tT7/&9Qr EYPqT+j4OVS]`D~1;73yQ$*l'(N60Ks13fh5xw1!MqJjV\eJ *n h  u  'zDFj4<B7!X=T (U5wAx*W}z>GeLT :  X =R+$Byu(p2I`B./F^hvmT0p7; x;B='bC(Ye[)2x~)CdcH9k_1?N{qkuPif ?nT'=C&BdcYJ(LF`E, )?a0}  # + l H  ~ F  e . w C  | o ` L = +   k A #p_cdz , o B ! e % f  , Q u P  w  F D 'a'D_v$iM::3Vt>wKvzW':l;eDg4#{@ B\WyYCpw7& fnoIaf&wYJ?\ }, _=o/Ku:Ql !%3AHR]g{8r:[G~>c    ]$\ ^>{`r:{_^ftCVc-m/ 1 { " J _ t  o b 8 n *td_fdwoE@E8-YyBCgvz.u!W pZL<59})3/i f O " X L?w[Zf"e@ }iTQDGOS`krwwofK(8 74P~Q5Chp%pmjs+c'hT/R^|Ks2tWz EyobPJH=HR_z!XfD@].zN_El4\Ue)[)b =  y q>@{ }Z:ufY^SU[aj})];x +CZTI1 P(;7 i R CBLv/Z+?`1}0[o6\%z\D0! \8|4t 5DSk5{-YE/*2QQL/\*N~[NOhxk"m~5U-+PLHe# 4 }  K y  * F [ x r l f f b ` g j y {   #  ( + "    a T = (     % @ q /   m 5da: J  P   p176L#)~1zbA/ziSE/N!|;:OQ ?Sv "493D>., M%x*$ pT*}R+yJ`4T$o: uN<& #3Qj9x[#\9Xx\$@\abT:H`.qG>u5L]-oG2oDa :Zjq'_Y4"5[(S}"MgwT!3J'Qqp.BlqYG d$dGjgQ._VS   / 6 5 3 - $  _6MKsC fE'En"X~;[|kF lCpZH?<?K\sI8m )Rx|R#d ["O6<dUn/vJ]-mF! qR4c>& v[I:{plknDQBIB a +Qg|pF?d\C3+1ub|@Z`:yAl 1Tw6Rv&/AFLdn6[}.Qi}[3 b `@Jtg]O@=3*1$!+(.7CWrDj,3A?>9* _7On.z9%Pe) }svj\A&c & H V S 1 w Aw(JZuzq`P<veNF8*' o <  F  U  : `+;N^j|/^m(~ge\^SXWO@/#Ciq)Bn^PHPc~.Ry3F^} $8PenvfI, MQ e >^npu5X7/_1ml~ |Y%Rr@u:`/O T(b  "# .Zb_A   4 ( d  * 5 > ; ,  u X 4      % - C T e }  ( ; F O R M N A 3  z f 9  u F &  h O $ pQ,fD( uN1k/Li Y;j>t:0O8;a h1t ch&y(rWII8kDt #"'=aHI>]-}W-9x.,&@GXwss 6mR LG|4t<`M;|P/g  C W u  7 S @  i  v '-Bmh%<z    ) EnaA uLS.bI,zsh[S;)p@ J]Q7e'S,Iyvw|)Ev!L{ .H_vsW7 US$X1Axs~ T>V"b=!tIk J$:JZgp{,Qq 7Z#@g{ *B_|$ j7t/q: 1VIk1Oq6Oj 'FVg}~jTC)Y3x@aB! &Os0N*# zO  W - K ] e W D ( H:an`9[VCP/:v)&a ELfiP'K#tL1r^VFDNNg~6y es({.p B;f &:?FQHJJ0) c.u= nL,!nG,l3^,z@p9W?BXro!d+!q&Hs0d\|UH/7CLn2i7(:iL;0] H Q +f,q^SDKTZx5v , b & L i j H ( P B_j]4T^_\[m)v eONQJG5$s[H i8oL5(FmU(t[,e(5;*J?]\`al$lR"!QL5..jO_E]exzmbR9+=aQQqpgxz~n > K > c    x M ) a F (   0 N r  J v ! ? R h r x q b I , D P -d!]DB>Z _A-      oB O{+6{OfnM*lOKfa%OH qH}#S 2V$24)"f;f: 8m'ic%pY> nM|kE nbd]bnw{*Cg5l&gyLDUv>bv Y S y R $ t _ M = 4 > A O ^ v # g A H  c c?x}[7[ ^  k  U / d1o enP/^7FTF}>SYF3 l; jk%}j|7e@>aC}9s a.k#d%oRFB9:;>J[q\Nx!L 5BP;!Fh@kH$ )GjP3X71'.)K@~IngG!b4U9L LZ 4 B N Y O F 3  Sk2{C lJ<  0BKajv|}tleTG7 \\c(y0Sf~0v/U^}5h`Ve{<:xz\KVYw#.=Lf|8_DI9w:b{~^'Dvpcc}j(NEnK/TK DoO-\ )O2m< /Ip,cQJu3QglrfGR }P0vu$k$V& 6i@cB!ac<\}  sQ's\WNS_j$T>^qN*FX3P_ZOc=bqp~ }c!{ 9a`Ab*EdC5--Gd>D~a;s/8!g<c{wU#i`7s z=W DGFp 4O_r~gV0 s7w.ZZ,Ql:dK!-AUq{oQ)V"{HRBn0V:'Kl5L!jAc@t[}%h+Ba[k2G; |ohP(3q6UbqrjZ:$o5Nv[?))3Dh V oG%u?YNc,vXHOH  S  ' < Q b k v  4 W }  M o 1 h  A Q1gS9r  ( ' 6 ;:BJTq LN ^+@^m{],f 56(m>}jwm9%ca. [.*k_(=,Oy7l;5p<9hJ]>g0i6g@];Qs(R9u>>jP9,uAK; Bz |FK F f<lWA$! "1Onr'|n l u j I O~x5 : g v z z $[ o6{sv{.VfhCb b|+FU`{@ (` w<IB)~g._8e*Z6c4VxG{3|Z6y/b".8;4,"vR)z:IA xP- 'Nv4G'/HTX7SGmx_8}PwuTD ) < M R * 0nh& / N X U D7*,:aCd(c@! )Im>{8{AMEm~t^>t;u*Y6_|,Da$`(^CreP@.rS,vQ"Z(Q!ne^ap9(Q:('* l,}.WrlM6 q?T H}-FE :Yyta@l5CglMjR/$Go!T6w;x:|8X5F[ju||zoqhb`YPJE@:8=6?OXcix -J{CpBamO8[$VM/pje/-Lke7x2JQ$Cx@2[;G)g6P^dij\Q=# pMPh1z9T$ylfe_^]VLF71&?Vn~oI'f/aE9&15>MVl 1Uw6n+t XAN#.(# ~I x2GZy:x\G;;;Eb\h0g18x0ax*@`!qe,va Q D 2 !  x Zz ArwG8 : < < D XT>$m H8FK}xt!$&  }[1 K%a9pUM?<62@;LU`t5n*,99 =h{O$NT= c>&zvR4'"2IaGt,Vt.Is i'"Ej%Ka]>WBc~jH(_=}{~!=UhzK|7|YN . q  5 V i ~ } l ] Q @ 4 &      v L y4d!j3hR7) & m<nRgR @Zfl1Q9Mn!=Jaw~ 'Jd:q3r3i'6:@E?>3.$}fC r`5naO=;4+( "4CXm0cX Ex4aGy7|D DA9y=[<y7r ;t,]  D r  : a ' X  J {  5 a | ` 4  c 5 V ( ^ > )       n 4H<Sm?oNXX'p`N>6658>INUcijtropiZPD*z`I*wR0nN2  -Ec+9AGGE3) i_ZFC<4>5=MWfw3LSZelt{ .Og BoD{/Olu}wlY7[v"hXdl?{{yyx{wloVH1 d 2l wjeb`q,d@j 4JPNP?$ W%~K j<h9 zH!eI/ |kP;09Tr)c-rb dn/c0cqW^U"p fw0I B 2 b } ] J 4   8 k : 2 5 !e+%5 t  d H%%UL\*}y(Ik'.*sK'\"m)W 8u;a0jN-Z$[Bc=* 5YyDo'Mp}kfNA7& z]B+)VE8If%EZA8cmHW'1m ]t?[?d  z ' l # Q t { A  Y  j {3rJ rZI,sT6V&]&j~)nTN |HyneZd\]gitsrmgYC2 Z{O#AbBsW >y7Xo~wgB!g4|O. !.-('sgXQB6.( f? Gc`4#Tc"W $n/j%Pv%!"%#.8Bdv]?Q g_#\"&+*hV5iF3 (Hv Oo'P8yA . Y y x Q &^#[ sW*_C@g8yqssuz~gP@& }P'a2Oe ]K2VvbTD(~eS<0 h%VUJFi'{HdC'1Sw,aNty4Zw%r7m1EMW[UYNG=1#b>i<  F}8)sX=ghE]p0{?\$hL2 2SxS#h9q5H\ihrrddTD>,0BUcxxRbfcq*]@+*6IWrz^2}Q%vaN@4+$  gL'pFzDhI}ryqJnbM'Rp{_I)q= iUC<Spvc[PHG8:>>B?ACKVUSIF=, 3OnuU*lQB1!(%*5=Vl?Rf{ 7QimO4 sG"|W4 }\. X*u> YcKE2/33?JSiu{rohXYMI74, n3bW1i \H~ofbbiz~8Qj-Qz 0OpxL&t.e+~m]PGOWl0^;oAo$Ht&;FXfk{{tjWE-|ndihiu>e8j%Z4`!   zqi_VLD:<<;FO]{"Jc7Yu uJl2w5V)tjZK='*7M[t$)5959+& t`RD60+.2>Vl2a:u 7dXAt"?nT"~hW4w\:* &>f G peIJ|)FYphI5 Qi+xW@<8D`tH%tmhJO8]xkRo+|MR1'X${?~nLu`Bpxvjlw ) R  1 ? G K I 2  f .r.j)}S$lH+~kmpbimlx|| 'E_y&% yGy#sAdt>u(Ksl_Xb]dhhrt||vi[F3kDlP' k6C`y3uG)2X,F-&0EVY&}1M^aXH's? g69Uy ;X}+Sy'Km(Jf/\)Lj(MiAe0hTV(WrlF d.s3i(e,N!xuGq%>[vwmB!f3v*8$f@T'UDc}\0}6/rL9~!z&Ci>;W{ #A[{(Ft MUS6HUcggjnmwz|9Z1c R*Z,\%UAz(U|*?Um *6L]tCh0q9  l  [ : t B [ t z ~ w b D " P  F  > ~R>#  +>_x 5 Z  6 O e t v s s f S ;  m 0j00~'={Cy^=# ~zlPC)lX6}E R g PMZ]I mF{W6"B_vEk.aV^?tAb$1;Uio7^6]W-q>jC(2XeyN=+  {RX$Q||eE&Z7Y){fQH??IVt.lM>2x*Z~X-z8WXH3}_=2Cq3^B-8S0},b>k4*r,.*n.9m $;Sv /XGYa,|Z6pK$oL04f nJ|>YVIM)Jf "&,39?>JNV__qu~ -Im<u"Z!Eg}cIyI"uV9&Ff*eA[,  + /  w #gv8 6 Y a W ;%B,xW1    nR6zY)z\A. }aA$c5 NEY"zeF0xiXL) s D~Q!Aawq`YJ:+zg]J=6>ENZp?fuqrp|vfOC6)& $(-;CJdgsz~{peSF1 g3n#795(iVJn0GT7 Dv b5g; ~cB4 &/?Sm1T|2j6f+RylCT#[4hT>/ "7L_{.e69j@jE PjgI 2 k  * 5 B I Q V d v } 3 V x     !     w N -  D Y8jB\K Q^)Eav}pX?)bM1S!q(Jc{4V+zjG+|O(yDYETE bFC^[~G]K4  );SyMAqO8J6xHv"E_~e9 i0}`?*!!*:QZrrW:q_H?4.6CWu`:\/vm\LG+Ml > u  4 E H Q M A 5  s = b4zX9!*:9O\_mxttgdXH6&qY6 l7}7}:{ITg6k2yJ) /4?MLPQLL=)k9:EI>-<U"2CNYT[VWMFD@=<@@Q`r1\1b&SQI gR5V7VzV#Y|Ijotn~S'w/]. eQ>2 r E  f I  9 Q m q x v b P 4  W 1  ~ U B '  Z ;  . U ) e ! Y  7 = C J > , ! V  P u - W EE~Bm$O?EH x0ZKb0uH ]*|Ij5uX3]111@Y)%S89u^\eur:)i#.3"r5@r.KqV |Bufpu$e^*zrha\D2#h3`x$4CUp8_$Nn }gQ3d7TT S{GYW!t;tJmN(1Lg:d>Vbw{}zmVA!Y{"e7YiwiSA:J+sS8;AMw4\OJd~27403 I%ARhqzytdK3"b;hP:,9Ibz8Rl!33=TV^hs| "<Nb~)8FNj!Kz%uWWw ' , x  N ( G j        p V ;  k / U  ?]wzz'T9]|lhfq,h7.!v\AppI>vzR&a@3<`MyD.R]$nB~5h &++83+62641)kL'bK+2Jm  h \ G ? E H c { & a  V  4 Z x { f 8 n * ` % \ Q|7_AcL DCg,h= uGJ^I$x!=c;cAb*_J  ~dI0 9]5xe|H lM-L"UtQ'z>In?yCm4U #Z5fVVb@e f.7j0i ) i 8 d  G i I a       t M # ] + e B %  b ; a .'x)WxaXED@;C=DKRNF@0q<x,Ec9_:k3b1zjZK4$gDyR1[:Q,\'w:t4Jv|w\6HdND,oOw4+u%Qz 0EKXi*7HOafly{Cp<y8y;xIv >mZ J  f ' Y & 67 \?uxFj3rJ,^6 r C  u =  H T   \ H 4   P&c GZG%R`EQ{5oJ6 &(CGRdlu|xqcQ?2KYHk#a%}: \!P* ;rFDML,v3pD3m:}@}5h-Z|)7LTavu{|ueRC% o]:$)D^Ew R8x%N}rE\$g-^: V$fx'cDve{RA((.1DUr/NjlU5 e:qH!hL. zU<U^+bI!'@^w QF%|$Aj-f<]2XPH MHJ3+h:'\NFs:b}'Py H}U-q;y 3Miw|~trZSL=:-#(1=Ie  ; z F = ; 3 n Ek|r]A w ; j  y  % 492{U+fE7MbHE;CXg=i<UtxeH-h? e/O6i~  *MHc]YZis IVj1^Q=lT|8IUae`ZSH;/yd>R0 yc[VZdyF|l8j8,r'CEID(!P*m\@2  .B_qQ"z< (Is<q +  w 0 x  ; O V d \ L @  d @  p Q 7 # ^ 'T[HTV-vvsysXL-x`G.wZ8 }?9SePAaJToa^asX!iI-Wwx\9vR oA ~P"n>vpddmuF$g;ArK-JB,_ =Wcw Ae8jF U>I jC *     mD ~*w7o+,7>95.$(#"%%%"h%5n}mW 6  x '2  +EeuEA_M/7/*}Z6'%$?eOh3lZL>9/"(% $ Y/j-r?HxNxX>1! )B\FeH6}-x1IrAk3.s(]z0eV!d(u)V+Ej9v1*D`$w1 E b ,  Y ;[9z*2*+ nKBl v ! m \  O c Jx>rZA-bBv=hk\>i?eMMo)h,}?s;}j\RNPYkx!Ft"LuuQJ q-M Z0$9Xv6~\TPH)pIb3xV5&y!|(6;c 2Mv+>Su3`)HqFx C < b 8 X3f,ZSSl5N z J f ?  k M 9  h [ N A G L ] t  1 l 8 v    z = v  n00*3Dnp)oS(ytyx #3BUbdfaZWC5#^, eB%~l``NE?10+''($3, "Kk>mu%~!l@"Qw|osgfl]csg~7EXu Z{7~ e ~ARdP7SgwzxdE)ZOUrPD=62BH]*l!`T%Dkj_; ^8`$c%Cj{U24JTnt}yj]4g&HZ |@E\5  )yA{ HJ FbI< M6f+Mk'>NZgs %>o5y  h  9 Y ; {    x G  t K   , L ~  7 o /K^vg@ B  [  6 A /i8Y~6VAU72Je 1FJ\TE:@:f{ =`5{ ;|>hP9,Fg*Bs^6 b%VWZ<+Y2gD[4j'd;tAny@lcf^VJC#YiO@f'Qk|pSC";{  d {  ,B,7.r,PV [ e  c  ]  F~M|US \#t7Jb!}+O2=] i'{HtYD' zmgZ\[YgccnjqiYZG0rQ*yh_NNEbD#{fD@" tB 9>vMzVMWCh Wu=3Y2g.y;s P$"%& e9Km7S*~|Cj^>9\*o6^eT"X!wCrQCD;Zoh1':pP; * `   X.YrfA&}bWJ$_1 W 0  Z 7 [ % C  m M 8   * ; T b x w f C ' g2Ju*AWeHb Fo,t7If*c8~skfchbk^V\B;L9Zhee\`p-g>*bY$tlQ)A!A^bjVA"\VThK2! !(GaL} E"wg\]ayK{X5tU,avlB?|$Sy  2 < ^ n x r a _ H 9 : &    wu`ZOKNY\oz , F ` y c ? GODe)n!T6XDs@j}~g=C!1&n3EgF3=fZU*mcQ?0}qthdskp};Q}A]3`ZC :s qUU]hkl*F"|hk{ )7 F J ? 2   Y8m,G(c $%%}>gz&n4 2^N>l{X!q+3oF 0 x 7 p 7 { s u q { ] - h g+ %Bi9y\6u 8L[l|!WLn)u8KUI `$jLC4*224CO[o~ %Eg(Hi#?q -:Rek )Uv+quORqatI vJT)H  ' T v   ) F [ n  I | ! b ) g 8)PsTW h # _  Y  \ & w 7 k3U(Fk\G</&!'2;LVc{'Qb|o5=I&Y#U V$Vz*6HGBRp/f9j+x3N@g":B[i:3AN_t+A\~5e c(_-Xy%?U_Ak8r6{#O ^ n K l ! t  f$S A=~E( #>Kx -Dr:^%Ddz+;Ocp{sQ$t*o/:;3*0Isj}5l*\rZ=sVei7jG0# 4Jg#Cm4XtthO4/+RNndpHf {V\$e;o&N<p`(r"v; { i ^ i  @fx ~[t?ntG^tq f o>] n  w  e  i ! W #  A h ? } " O  / O [ q ~ z f V K 0  h ?  m 4 F|  ~YsfT a, 1qd!E=k< cCxI{@u'U w,f"a&e-}_IC87CKgM*8i9 t4] '@Ynx#Fm%V~$P"b=S7;ej$j5{Ho , 2 {   r(l  iC>M c E # v e I   M  K  W Z_t%fI8/3BLt4i 5V&1FTdv  + : N I Y R C > + zEc#APPPN iFp}%fo6vRNl@>h0|AGR Y/u~/^/|*MwFef;y .~]5 B&la|8oCt _@l9g3 s @ & c 9 n+@L*a @i+c@wW ({JZG.~#x'7Z L  J  T  = e !d*bF1,$.7LenqG,zZ. d^M84*/84J[WifitiW;hQiD+b#7Ys1r'*x.r>kJlUL@9;?FLPVYemvw|z|yqqplkaa]V`]USVRWZQ]`cpo-^!u*fM;?.#axH;UWO. wW5eB o() - , ,  " l  N %fLtd4[ 3 H R [ v Uwe^bx d  J h z[.u}1_@(2Jm[D2 G}\; ~R!e)i)*2Y,3g+j.h>Y,wFeD 5EIYSW[D<2{rtfqxMw9 S G  ' M w   s T 0  { X -  { V )p09l }jK96\IcQx-x78) n7Vx?2ex_QQ`q:{!< m3G?L-OdsbUFA86CM]q^ { " s  : \ ~ BA}F}uiidTF>([3R"r;iH<*&$'9MqPEa)h5\rtS9LX/i%GWWe8NtFf:~N Dp h;]u(=T |FtG   v a i a [Euc%%*!X/pI&<_(Eo t4Y)A M L ; < Ed W yZV`d%q? a  P w ] $ 6<NP]} 5u';o,f1UZ?vCoD,h^a~>aG$(:Wjwc?$tJ, =\y"gE {L$tYB# "4Z S &ZCB-a+<%nJ,#NtN\,g#X{Ml(U{-e/`?/KO*~ Y*Pu)b#t! h5 J'yM t#}bD_3yBx:acM= tn`QNNPU`lt{ /NfOA!7q&l4m7 >   ?  U1pGW@2C`l\F:q\/Ax *Gf!a _ {)XI V ) \ m zxegtVu-?o"j5~N5t0??J@6$[58j0@2`{ qotmVB50tFclgo|#[j8$_4{(v xI)1&& 9t}\TH4 pn#Hm$6Mw gV~hgv=IC>z-| >w Bm  ' U ? y , c # `  : o 'DeylO( a 9 Y  J  D = Re:jY7%sT["c\g9b\JBIBFVXdwzpY3L;m 4AnFY}<R#kQ3qV7x^SF@IOg3oFFI< A|GkD Gh'No 3M{%WHk \)bWB?Xd@m 0 \ {  _,2 E} ''(, f3qVpo^ E = %  !?mGawlxy}Gm ^ODk 2IVm~zyh>' k.~ (7,V*])kT?QtF;TCp>tv0aiA-1>O!t7H5x0JVUC<7RVU{H;[y3\P>rL{'WyDsK^25e@~^  $  R  R .m!TJryPck \ = = U  g 7 rS5hGk([~$0317]n>0Mi*T}@~GZ>\|wQ+d?GB3pQ@2+8vv9zgeW[c]ipnwx}v}gTI*{4ia%c:f4ARku@Z)Q4mAc 2Lb@C)1cV`W " (  _ - ]    ! 2 K b n | #Ko,\PL>s BdwkD9XL_  H D usDdH2&-/JMMZbpz|}~ue^M/"z[K8! T8o&'Tvsosz 5q%KoL0xN0rFFx:^-gI- &Gl,W8V^3 Z v@ }WB! -@Tz 1g 3r*iF>W$wjaSK5b `+\o*N{Q>3 Q  j  [  u<!R /@<=6"m->} '  m R H]oB^ JW![;CWQK3g,Xu$?^Az4}LZ(f1SrEx)h,uN-lBveXF;:=DUf.cU7o {N~:_4-_/K'*043bi2i%Dbw:c9 _x&u- d J 3 )o@F[)w [*j%l3H [QaU2^+a Z  s 2 q ) q ? V W"}DD>~; tXNRM\hwi2?dlS"7JhE7PG  CmZYD?ADd'x:!T9DVZ6Q.f"?c{{aN-f[F3. +;>YlscFs;y9L$',/2++%! !!+)1) m:{6Kbw8P DPq6 `C}iP;Z FMOz;{trr/e'*{G* lN3K3p /C]]biRD-RXq(9S|; psx&_9;P\ [E`7gWF.l?YCX *     sVz$~ Kz4Oqy_CTM:c$f#t= Y " \  ~ " e 226AOh%h@o_OFKEFXWfy vNo.F;w9Zw$L~!cM=d2Q{!% xN$H;yDpaRQ^iT3(/:VCQ)Oe7v6N^h{ 7St#Bj%IAs1fDu%g'k< + 1 U $ Q 'z>4{4keGv2S< d j v ` bw-v(Z&nC ^<Z%n+U e\):F2Z`h!eX{eo@2f^[$mhk |W c2d"2=@JGD>0$_t5h-G vsts!Ih*fDIjAwBdt!z"w'qh P1u3m ) e & m 7 } k  b YE bR)T3_ b'd1,/ :mnRm!z 0 X B .*P"ExY@0 )1D^xRDuY#m&|"Q^LyZ[.|*wbP_1 "[]?){sgK^ :m 1If&Fp(h'j\T7s(U 0AQdw &18IG@A5yFAoQfA>g KC qXS[T]SDV  k  ` @ " F l R + l $ 3 >N y@eW5 wN* m,s4<|Ch$}M WS^6^)Z,O>m6Z|!C_{2A[r:dO 4]|l^YMC>9>FHcx 7p2r \^rzvIQo .?=LIJP?>3 nMX0b=7S{:i 3I\ 9Ne+Ebyt[<+ s]H4)!/Ii"^ j;x ( e  < Z t v P 9  v 4q(7;5-wi^ dm&P f2_CbC0lS8$ 2I^w{rwu%TTDKA%o;]~yV1]66+%z x"3Lz0Dt=sK' 7i@]A( oS,`*J[IT!Gi  (-&$  +=[/cLq'-340$ xoeYYab{+ZC]vu^7Jgj EW*zuokqur||}}ncU?$i&,`}zmkdn'tFyT6"MvT&{w,Ieu#qK7p!,FJLYU[`]`VL?1z;r'Gm3gI) (G[t7c#>at9[|Rjl7 tI!Zw${ Z  = v # E l  > < ' ?VOP9LJG> YeH$pw* U  U  X  7 E.mE0Dt9vP,g>}?VyJ$oE#u9^A`t1aT{@}rmq~!Pt5`!7H`jm}}~~|7^R9pV)`3SeyseF)}P lVDEHYz MZ"sR!7Av1Q|4dNS0*56 . |  L * Y ~ . a / b M,Z_%H & O W B .fAzmzR{G{wpng`[K5)}PJ?v,?[ RWkD x\6\Kg:M+"Ve:#&<[t fJs.wBy8\g|&:\v2c_(x>u"Ut$7<DJLZX^nl'6Vp7GPivy}~mpkb^OJM??A4574AGRht_ Z = 7 T ~09n%:A7c'* z Q B V -NuBb3`%Xt+<VMlI/(**2( {Qu4b~q0NP?86BpK?n P%mN(f3q"R8b:i :kQS*}gG2i  4_drEw98~$& F%K:3uk;yN0$*GZx>j)QJ~ON&_d<%k]S.t<\qxbBL'EPK?DMdPfE439XpL2/}]:VnzpbHo($e9v$~>qX8!}`I8/b!dj <9~5]y|^4CHDcC'1`(|I'.Ot2FP@i<fxG#W7|c9s>KV"COQ[n4x2W4$,Fnhd&X"?9Js#8NXkx%Ik>n9 V7q ' b   D Q b p o {  } z { e d _ N K > 4 , !     t O . a'96nHz:Wv3b j(m\GS^sA#w!l J6_gE 860C{JnSD5 v]<uBxphwU1q0>]eR'GVhfVN1``3]~E/U(gT@# #9Ka'Ce)X]XO Et?`(Gew,6>Ol,dGpg{;~ % k 4 > [l<< W G & h:'QG\. sZ.Lj4mL].yuux 4Ku`<j >E7\7#@'uedpN-.\%c;n+:T:Vy".BHXnn  oJ-|u|{`/:V/*BLKD7d:Q+ *aD {r 8 \ p  u MjBy*Mcv#9?K\]a`YH;]e.,  O  }Cu_U[1Pt\M92+ yH {:RH.gWW~C^!k6qH'z_4o\?>5079H`vUT4pdMi&X$036<;<1/0(-)-4AUe+_CkD(sC={!) q>z+c*x>raRIH@GQOSUSMIC91nQ9:q e==REd_ 3 / k    w T ( k ; `;c1xEg$LSK4y^G62:RRb/vG"}[4\7RRyI* ,cL+#umM>g "8E\oP:1V7oC~*Q y[N9  &CaL`C,p  / \ t j G ) K{>[h.d/ |_N;1-$02-@CJUW^beipm Kn@oS,Y.Do       _"l0Y{:|L/zS&}5\cs+En'd4 38AB54Koi ^j%wJ ,UzdZuyLZR: U!WuxdG,kT>/(?Q_| +(*.,(//*-!$d798mywlR:7Hz@:j)t WJ)f5nJx3Rq7nD]AW :frFSMgN4) #2@G`l )Ma*:S^lqoqjV='^h+Ma SLW1+Mr9rR&T~ ,Cez /Of|'>ERVZ[@.sC]; 3e/~;pdL5l]*:KQ>2~59y![E_,eC( lX0l6d+yL''Ru@Yi,~b`\I)_\  S t { e @  w`<#Do  A y  $ R   ! $ $ $   l ;  j 4"Mr|zp{ /g p,{bRNNah|*Lv}Dg 7Qj!}$kOCFAWt8a,B\gy=h[2j@d&4J]h{1?Zm~wojbTI7_!OUNHh/4f7(9^%YF]I+KgvfS@0  ;j U^,#" 4 > , O    Q 8 N I=5..L|g=JhL7!j]A*\/Y$m.x3n!DMN5+8i5=mNH)Y .Sy>l%XIZ80S& ~x\+*u-6)!_9BPx8,iFM `D {:ez.S`0 D`&xrn o m R   j Fk 0<GYYa_TJ.I O  r^P[oHuGqjU7!J87}Z~(YTt/iG% %>IWjv|~tdL0 s4o+]y\@2)*3Ojn*1Vo}vd),s$M}*(:FL_ku%O}(j@YMt rP#d5h,{59}1+%Yf,M;  !5CB'MFjzbDx8_>ckCCq*g+f)E^^aT:u(q+6@GZa[(+W3f-Oap}xrhE0Z%W"[6 %Df/_AjKxX$hSN9Cv %6=MP_er@o< x{w z r e @ i Gwx. + = @  q.7O!Ei0BcUc.e!.-I 5g&sD!8d5qT^{8`e5nqH[8rL,hGuB|V4$5AU`jy|tq`LD'uGl1c9Vf0"Af*zbJBHa2:ndQI\mVf? d y     G  v ! d"5VI]8! (E[Gn7k/[/Eex '6EYmq BnQ)l  O  I s T ' | .QK/g5]Io4d>+4`sH& #Dd 2Lf%4%mbE5& 8`>v9x[K<5\e?t*HYiswrfY?( Y(p1d8RW[P9zR-lXVx7[A/&(.6Zt0nGG\p!pG~)-(X l; zT8% $:\-c5*1B\w%03z K(Z _3rF!vwu6h @y =^wkG[!f!@WYVUbDf8 P*j?!m\XaHzM \  | + $ o 1 m 3>@J>+ > 4 Q K )Pf"[Ia9g7 yiM6zQ&rV6'}e?d+d1qYLGBN]rX4@q@QA+Y $9IVq ';Ne~vk`QE=/'" (EQb||bAUv:iN0oX5r=qAn3kTA9:@VvYX'sa7 q4D%o/] 2IizdH#z< 77zbOk%rYB;55wH]3{O$Z)_3{O&vhPJH@M\\he\T3~BP/a>IjM;7G]cONQ/r;lN{.RtyS-It'KG mQ=41.5?K[kBfIwQ>y*a',-%r<s*6/s>yWJ]Ty]D.$#.@R^prAXou0wA5]Z9[{ /TqC+PxaP5xBa\"e-^u~S*]5TQ?.'O6Y"fR7'%6F` 5x8w=D)].Nz&7CNHPPG@4 kI5 .In%Lo  e3CLC?JCpP3m_O8-gT3& !7Tt(Hl.JUdmpmb[P>(uc^UF@70# !9UzI.K)(Gn<WYN 3  T  G . P c t x s e J ' C O G74^uZPA?OaG~DT  / I U [ ] M < "a$IQ_ i_'gS?2#$()89CLS_h|>Hh)HjA]  h7]Khx,W BZRZ.qP|U/rmvv ?kO$W uG,wKjC>g'~B*+FuC|/4s IrjN&n:o<`(Y+Z7ziL<)wdN*^"e W JX(|]?* %?RlV; sL' &@_}&415-$Z5 u=L- ,^q z5M@Z)Pog.l'{&g D(:W1 DcI1oHRtr1Qm  {T  h 5 m T $ Q e<$!,:GOVPQI3#_)c o PLzhv6rT4(-,C0;5#r"z?NQQ_k.K @sRIDAd|[9JZ_k"By0t=C^1pXF>1:?>Tf}0Xy  ,8Qo*Ms*Lz )L`sxj`C5scUB92-5;Ohgc& %3HMC% U  J # C M U K )  L } xAf*2r/GchF;# G Q E ` # F q ~ a D  H M   3 a #[k7 ]C& 6:H[fvscS.Un-V s&Cw5R Q+q: l0p'{0s5Vr=h \G3l@PhYI>*j"q*UvyaE+ pkns >M2@ymv$j7 L @ c O x w Q Q  E i'`DDsT*W]_K!P _G?m `4\$fb&QqI!xF|@s*)k.RpDrUb"wG&0\G3^rJ UJ b b"ZG++09Oe\4-Dl/[u j,cl/hu|-e.AWU^x^T<.' v L,hd b=hfAy*{L|P=UQ ] / v B  O  J  ]2HOB+$ND{fU]]n;l <v/F[cnh_]9)}\4iOE7.2.6BJdv/W|Hh .LlV&Iqg3y*Z!^K+hToae|9v2a_w80RstdE%H g>sM% #L_ZH/ J < o    f , w < f?2Qt \.[Iaoj`[_?zB j=wT3eId(Q=lrbE P.BT'\eTtw(UGgW~a[4LTSTB,b6ODj)xK' (RbfQ1s.}=lsI!g17Q|HI=`uN|G m<6qzj!w"H t60 e b ; & j _ & } C  E  k 8 |`M:,# "'(4<CTWh  ( E t * F b    k K .  ` D "j-BuuVI'UJ@*<{)l=3V%ve m.T g V'a0RpyfE'uR16h&q${Nc/B;mb;f.&]>41Dz(b:7eVS#'_]Fha)3 0 (  u J  x DfpJ} M j25 ( } K r,Q}XBOq H^)d-SbHh 7FW` c hky(@ea1wnai}Q9S"mbM~"r&7>@5" rH&hP;$ '=T{A%OIn m'd@c5 ~ 4 " 7 )Y=#Nku[8xZ<rT1V O  z A  o S C #    6 J c  $ F b  + C L Z ^ a Y Z S D 6  v E  | >   : r 'Ip<l+q+])i\H70"~Y#ki %*U m"-,2{%v< VmWA@Tm%wx> #,588`2\ xK~U)oaG(cA( q c P 7  KPK{ %|Q3 ~L!R x A | 7 Z  s ( 5@OY c"|5PHdR;$ a< @1I>A l9 FCzE.d#]R$RxtQ# T#rJ(qkjgky([>yPA89:/2}c5rHp *X|7iG,,/,p<dx  h D g  \ $Y)464&`. s - P  g  v " | -7Mm]"wBi>N1}T"|5f({!Z%Q{ =m Z j)fJ'+RZQC,vD} QvrLdqT@f:jL X  R  z M  s ;  Q vm(=-P/k #/Kp){RNx1^M7zYKF2zDA.m0{Dc1M=x Co EK0:g4yN#Zy*k"V5Ty /8LQ_o|pbJ*xW?;.'*$.JNk/rB @ V " K  j e3by~{jT!l T p r W 2 h5j?% 7`Mog-MCe\&Rp4DVo6W|>.$5J t@^> J|2 Ama]Z_c[]O3`G-.6ZO&Y Ik " + , " ^ /hA x@~O#b?]=xR l>RUM,h-^ ? ( 8 [ Q MmN=0 oY;[$UQ"YD,aL)|V,d0JY"k?uV1 ] 3,z#qgs2_j5 tT?' 6Of ;hd8); vZMNbw3Nn:GIIA~ C , {  A m   3 ; R Y i   < e /b6jQ&JwwE PR$ T  7 m CwT|4FP9XBrmn#S2*3A^LW%W9iP-$)Th/g7"vnnyz 4Ml:Rgz" [S2Wz  oG2l=wE]XeqpIQFw,m  L 2 h  8 W u } a I 2  w \ ? % u \ @ ! wZ:^.R to :^oos{vy !6Y"b ^p$_0q_SNZbvG TD.yc? P3pOV/}cf aN[(N9f+mR ! M v  0 D L8h%|lD?zDkpDw.`$9Y;y9u3 r : { : U  L )'mS2lach:sXSr*d/bJ7$"+>K\~$^>v:}9p1BMC9"v9cn5a'n/nHh0W#iB1'G^KF44\Y, zS6fVMC;;=#aL'| W E E H ` }(QYR4KJl}ZEr-K?t)@F: 4 4 / $ ,5068ALVp3*]*xT-lK,m3dSvzeE. o} :Add5 bG!zy%] J2:uV:xV5g@ m"792A]\C7* &# o S $ C 6 O.V  =Sfpxmi_RIA99/*3,88?KR_p} #5<Xn <q0ybINz|O t *%i': ^ " rm>tHLfwx\-R]h!FuwP?Mj?r:w;lCyyv9vg<"$8dH8;LmUSK:D `  o  u " M  ` 9 $        1 8 8 K A > 9 " i,H~##xN|:m8$lXR^w:kXbI wW("J.lF>@D?N6IgzvpoRH/{P Sk?tU!;d9w9 1TBOu+UCcr h , ? ; #P^ S9e[g7A.t&VvP-[Kt@yJ g 0SCFuN4+#%I+z:|D#ytst;v7}.2KQ6~*JY[YL<) b1E:b r&E=wO; 1Ux=~J?NV d gfep!8LWQ:R_ ) g F 6 1 6 4Q '392,Q o c 2 f ) Q,o!I {bB0 }n`QA6&q\@+j6@Z FjveD^fWKBNg_sIO`J?17:J_}M1s TT~P=#rW+lHkO=5* {_T2 M#Nh f O  F w $ , E N X b [ _ ` W R Q B B 7 / / "      x ^ F  V (Sc(}FfGf5 xN#V0k.RZ.X U1~`<[/s\5zC%o<f>$nP&T(o*\WKa4oV<3+2>?^(j94bC8Nz RJPJ>V=N Q K * Z ` 7vS3[w8^ :^~7KSnw  #7BKT]]hbcaUN@,mLO+M#BZJ L   xEWUb y0]!Gt2Lb o$8xis:Bu8kYC212AQqNQ0*AlNX `V#@H3ZN6_y|eBa,e> nn`fty <^"RHgt4 Au U B 2 v  KixmM"L+h Z7"Fdx 0IR b f l ^ Eo/x)oR4 noAqTET~jG vc[[^tFo C}=r .Pf}~f:n""[2My^p$Y9X:-W~h~9s9 j/p9f9= h $ x + c*@I9t+ R~j9]!yImW+tq[IJ,~aL" ~P+yB _ g - n 1 m L #    ) # # & $     o F o5r#m40v)t6m*b_ pwt%gQ?34.9KStPr\(x bWH&k/i8Tv)Dh(i?4;=KH/wYL9M xR9<?R j z   ! k2Y>w/|&f B 5 / P  e 5 xXC* ~^P;d?{E AS PZ\%lA,  2LoT4D uT; 2 2 2 #  rI[0rZ(OBu 9 l 2 p XXh9BJO]mx-@:/r4]d`\=E"'tseB@EQ}1b^*JBWhoXK8S!jH4&#:@`m!% o: T  < R  d  l UtK W.%0Yf*nS@%"$04@V_o}z\BFba9]?f3hUV = W8& &9]={,nK86*#+kQ(Y0!hCu~ibE;4!-*8T^}\PLA h GfZ&03|@'a/2FD8; yD(Np?[3]w> Z&V  D V :TF>v4 ]Mf&u)aj5UzhR0dH7 (;v,yB+K|)?s:GRTo JhZf )0H@%n@Pn; i[>/ ('?M^)e,-W .  ~ f E  Z)~Bia5 Z 65 ' U |   +)6M#s%a&g8 x>r. Yppn_I/|1Io)e/{ pI }O9Ci;q,_2n?diD/Uiw}pnjgabc`fjq!L}DS:>ww2_=tV 4  j*[ Kmuc,.z#>`uqpbE)nh2Uq (]Gd-H u W >   ` @ U  r $ f @n2g4wKTU9 #ETg4?Ggqvy[H`*o)^q,x+]& = 7   O " o )Y};cR Z#NVg4 ~N$Q0{Kh G[ TVJ?IXt"I|4] w.03Po?--NxBoXhP=7%wM ,+UH5HWVN=/|M@rSI:3=B_xB#8g+[vf  A n d D ~G:q:w9 g:uY=0&@X2q#b'^(OjiN0i,~;k.a$KT0]aO5e.v[K])6sdado/b+aW8z P*V 3Tq@ef{`h7F\%W ' a  R q: <gzz\M: rW8v{5d AE|$f:`q_<` gI?d }  ' ; Q UD>*uGAf&Y4 E*Eb&y_F%aJ= e^G5) aD4eN. B}MtigMz#. ~-5Wl=VLC{^[OK[_~M[M` g-S-y`7 r 9 ^:VV7L1q<`|d3 q0J@8S^q   1 8/~\F4 {ubabhr +\S`CCU&}NrF2 *G`$]%SB^`8z7F.qQUHB$O[. +3<==9  r6 A o w J L  Ah2a 7e3]1P#7FPY^[QQI4 q\K60 zd=#sV;{kdXKDG=7<'"!v_J4' g I * q G  P  < JJC&f,BQO2 u%wAv'@G_xP.oF" !O R{z!`T^GnoT `J/Ei0g`HOq.Z|<h#HL&\$B\xsjf^WORGKHMZZp0Z(Xz 9 _  5 b   - 4 ? V W f h ` g b [ Q F 4 &  ~ L  u A 9r1h,Yve 2UM a6 mZYk%b~D +`/':2Cm`4{T&YH4! (-@\^K~ByR5r"Y))&0-,0*1003/8;I^m1^ZGftlzqi`I<yS0 nT8}yuijsmv 4bZ4{oZ&d3e " D l 2 i 0 b  F x  K r (0+  Q  @ - P S:XP/%K7Af cHL(nU1% uf_XJ?. uxh]YIB511)%'"((,4;E\gy $ nGs;JOQE~aK5(+.;LeJi\iBBE7V(S"QU  M m lQ*LN+sFavcN(>;|<b 7 [ % N "Y81Cp0w)l,kIqFk="kKQ o;nQ) shV?9 ~[6d0s/X f P;L?A21?f p*Qs1vT@$>b:_ wuqu}k _ 5 b  _ " T  (Jk %%(:7@KEZir-Ng'Kp0Z 8l 4^EazxcF"QGR t+/2}# n  ^ - h a k(Y} *HdGdOmTk'zCvnooq-Ei#1FRVilpAn^DVzFh|&x ZZ1c$`#cIB2cQ1k >jN6} Y/xZ?Y.r N 8 ! l L % [  Y 3lMB g;|2c`'LZ4 p . . ,Jk2tWMW'i\,wR$ gC$~W*Z5>Oc: >J[t{|j]G1y\L3"6U G&C2=a+rhfY@q8P j w ~   tgAdV)Px[2L `Cey  9 O |  T_ sA9R]dDPY%l+\4tnhb\X]b`ddqsvypdS>`0w0?&\0T~8^J3@P+ )UOj6{t[J7Z(;8}IzSw#Bn"?Ypw\4['~C|5p?R,slljoAXov_=_2e2 fD&+FgFu R"W-C@F2" y7P,IKH;mH1)3Drmr[3! 5UqE<scen'a#Sts`5J4q Qv%L`FlHx0a!.>MK?4$p@ _2uY8 '7IZi|u]H0pW7r_\OF;2*    *3Lb|&Lx 0Q^rmbEJW4P_bcS>-14MuUfa+zX>$CoV8F F/dBe6[0c$kc' }!'+~>%Z           " # < G U p 3 Q _ ~   ! 8 O c x  7 V y  < a <]5W 9[:e -C_joT6\Lq] 9 P 2} J W6$>`A)thvH'7z= eS4%uaXK<,)"!/@Pz/sLUAe U/>9<0}S~V]K4"$#,?Nj!J=}^f8roy(V,n T7}G p   6 > >(}O ^=%LqmO,h9 ~HLs9u/Y . D R K ;{VW87QF c0S\35+~1_#wmrn|}aDGY@c|,f\x8nF&;T} Lmv7kFnJ/yrdent )BHA:V} 7 E B  _  9 o  0Mf"@F_rg?rG& u [ M I @ F Q Q m }  =[p6:LO\UPP8!o% # I V E ~>C2eG1S(|MHw9t\9+q_K90\z)W=qFt HhDP,pI^+Ur5Vh!Ql/?Qaq|<`)W-Y=c (OuCo BIe-g @f  ) + . , 0 % " $  rO,I{=j'x'l @u KZb9|kW@( ^/Q RrLredW]]_gow!Ea@-^g W Os!'AEJKFH>4" g? \%h#c%T*=fFi.] @u9'G&   |lH[ > {  P {  - W  - \ ' @ P d i h a H )  X W  >On!N6>b&_M9g'Vh.|eUQCBDI[g{&S}KGn c_N^#Ebtp_O2a5e:D DC U7&  *C[n $Kc{ 3Cas9r*s]p&EH)k 2 O m y e b E 0 }Q"c{"nOiJ5//Il1l#{NgC!uL'pR6 'Qo3MpkH'w:z5HMaV^57Nu-Q{R'~0ys=p K;$[(HYUG , b  t  j : y =p #)"~Y/ _ ) p 6 N  x H # u d N 8 "  iN4S&_>kI/r`SI0& qW?)vU) Q%o(J;t*1tJA|Ff> # s  [ X  M 9  E5_{"23BFHRRggiwy '9:E^\jyhV.S n S  , < G H?G@<-&yL/k9 z_A77Kxe(h*z? j7 [A"(Ly e - D ^ x | e P 2 { I ,+k5Ut-S&cQ>4~*rL*e Qf Y0  8V6qi; wGH >q[-Cir_ Y^m e0|suy@~D<=GC Ev |`UF.*$*06@^n'Z,k >s!99SWSM:( l8s(x!['KyE&y!M|M3/Gi6e,enI8.03zd>%Z <Qlq\A(iV.~pcYNNMSV^p|-V| @r@p'6CHCA4HJhN ~Y:0$6Mi4)A g1I1k +KehppgQ=a(NWP/tRDCdb-pK$jbNB:"zjYJ;5! mYF-:dXQ2`K!b(b(Kd";Sd<w'c6^(]9HZYVP8LwB{_KMNaw&q_ L C @ @ A *] [-M[_^I.] _+ K L N A )wqmzBdm&t<O!\?"N^:CNq%g4iYF1303?Tk2^0h0c9^$'%&qE'd9 _:{R9i<Y]>RA}Q-sG o " c q ^$m2X|s[I-$lWH1 mG$ q ?  P ' z U  t D  U $~6n"-,.=t8ymYbhk|$@g#Hb|xP!m'yCW\[P5# ~E!u&Bm3|D e<')R}GgUj69Pw0JO%wj7Rcvuzsn_OA( }iH-qX?+;UuJ|[Rf&_  F |  ) N s  + O t  ? q C x -tC| NM"Ir|MJ5`z z o _ 8 V/_$]&oN82:[)f MI]RzZ* ;a?xEX!U3_'!'|cC(nY6%}}3Xy3c =~$PJw0Efv .G`zHE:gA!v_6] W 5 ` q w U ; UzI TWa q8L{N"uX?0%1GZm/;Kcu4Vv>\| c<VLh|2Mn.f%LoK- $/27:66:871(&  #BRt&jPrVSY%IPK5Z - c | T 1 e9a8\,To0y:zG c1qW6&w_H5~k]\TQ\_hIxID=}Ds)?Veq   mS1yP*vDlDT%C YZsCybXMMYdy$aGc+g9jse"V#"&iCr8Ea\?{PIgD}ZC(wiQ@0+'3Ad}FwU1n5d$::AF?@+v[:#{fL1d>_0Sw/R}U)~dH5 zowpuJ\iq0ry)74|= I <  v % w C |  M  M T H S_TqL5!mdPA1wP3[9v[G1,,0CINY`pvyv]C\$]p!|*BeCk*VDu-ZHR Y*}gOEAJ_p;%|Fx](kGc4m4>Y)FNUTRM<*eC25Qy5j,uN4WN=m  = Y 6 V q  + T }  8 ` { " F h 0`;oO| 9[~^1y(s " " t E _?}f\Uj6O[mz ~4]2.$%%&,369GIPIOVRYUSVXbfp}(\ GTp BVN:cCz  |Q&}I]2cG!vpjb\\b_kfm{w.?Qj~ ,Q4nPMd " 6 @ / q 2 j *BPQ\O?3 n 5  - c  Y  ` #h"h9D4oP.j[ht0S@9y7YOiE0eaH9X'MrtW2\7 wCy[58l>P.q7j>]o|vaXG5, .J_UW*p/n"B]{|mXU:'% qdI/|dR5%x[>( sY@) %8Kgx#7GOakq&Je0[ K]'cKs-3951'h68X\HY ~@wVBB?LWi%Vz:Zpu[4Ih9hD)#3Wu JcK0[Z?w(Ni\=]4Z2^$QW)b3hH)oI']4tRpK':_*e3z]>x(OtqhWPNF8GLYr >sV,qTCO'CP\^MJ7S `*iI1.Dl,g3e=}C , ^  ( E \ _ m t u l m e L A " U (v3cpbBu 6h;{(.]oE_C$ ~Z:rP+W8)IpCo?__=Y(F VqBqR6 zq\G3q?W"m;JyT|(i=f3_)ap 7 H + B  X  > ^  t V 4  W R ) i S D 8 5 > J T i  C q  7 U n r N -  k 6 m ( \ YzQ!cI+u`S8)qEZw&lK Q3|{$O]!xB f,~N d0S{Ig@xyjjss)[#frBe9p"xZ ;`t}ol]O@5'veSGA:12,267L\}&\7S<3ASu3)v 6  c  ; Z m   " 3 K k  $ ^ S3~"tta)[e3de HH r - ] " UxK{HMZ*l,DYp~ 'E~h^$14GI?M;83"aI8bG%qY7q^_MR^br,_gQUS;P~7[smU9l`QJMZe| P@ "e3l:`)dD3vU|q0Jsh=!b@qR, ]+Z4d;mU5 =`9v TIBgB_n^J>2 p[B#a1g#}F Q Cw.W{)b-bC! 3SmBs$d6|J!i8]zu]3ZNF|N/ '@Nbx")&', w]G,Gw%_]E} 2743" xM m;}IV&T!SS"nR&nB kB+}s]XKIHFRQ]fs,CcD>/S,lR+ l--r4g%5?FPPTZQZddu%EiBj=`  $ = S ^ u | m T F , \dAi!h0gM>0..:L^QEy.n(Rul:z;s.g+i(^/nC{I$zP.gS{UAb2R6<=LIxlY]Y[p|6a6Sfqb]H<.' "$4CY{:u.hA1+}7FLN.m2j)S,E]o 0W/j>4 F  ` < ! oDZ/ge+=|9G f 0  u F   K  p ;  V ~QaKT5^pytX( tUE4R*HhXLBPSWlou_B*wO(zYA2 zU<lD2 "CqJ&1qU[eo#.3* zQq$},~(x$v$wv  m  l e  Y H ;|#iGB~+7GZWP@'Rn-a? i ' q =  c E .  v X :  ] !W ol S$P>wMGYKl9g3^0v-x9r1e2K~[,~[A// b$g%Y/G\~0`\H\ 2 ,  F w ! ? D S _ M N 4 )  i G  u Q -  v i Q ; +     ) / J W d     b 4 u7:a,mB.x1G9vJzK,rU*yJm*aGs/|F{_A. &Ru+t e$ttme^/W>7o(IsCv={!aPLxZ9j9 zKoF) ";a0Zv d= k5|K|R*zx.CbnnEY"uAW(d5 a8 T-~[37K_#*+.#"gO=%,5Tq(N{Am:Yx 9Si5Nl%Nj4[&WDe   wR9zY0]8xeD2' cL/[H_jx*Cf@9yG yW%f_O>::DS^~ Ao&k<\-lZ >rS~ ?k%Fcn)BWz"X W7}*s_K H 0^x,057;931&#<H_t}_R-_5 U)T:SM8"n 6d/[,pU4hC(rAu:AB|6y=ElA scVYXiz:p=7Lt6K aj V3w)f6a@l 3d,f#vTFHY^V ;  b ' l  U  = p Mr ?kEciR*p: E g  d  O }  8Vr5qVs)}Fs[+a<f:k=ZDjsnd b}5Rpia^eit8Wb}tV8q@j3[,wP5Dp\C>GRYTVd{Hw;q@xD u<U `t.= B C 9  Q / Z 2N`x.Pd#Kku'924C>:+  f:D_ T B d y &@iCAn:tBtEMk JZL?*q`H>:Ce i1|n[kfy;[F)XZ@{[ >vS 2a"B^Bd*U/Z2]x6Qe9^xGa"OvA{0 \:$m  D ( U r } r c ` d g s |  5 \  C x  ' B Q b n l j e P 6  W  P  V  FB]v !<f6qt'S\|OrByB}LuS1w\A%oM(p:c+X*g<~}Fn @I!nK/#pE]K3iOU;1:JD%c :StrZG2#!/M]{4Hiuub4I >{0l7_4ylaZc^cw ':Sj|  #   rN)q4w@9y6O$|Z6# !>Pk)xCxpd-lyonpotpourri-3.0.1/sound/hi_c_12b.aiff000066400000000000000000000435101430526361000204110ustar00rootroot00000000000000FORMG@AIFFCOMM#@DSSNDG!d ss00x"ǹ$8  *H>&Y.Ȋxq ٵM@^'pda.c#:*_8 0V>Ђ92^^N3u`=T+% ߨg%CC!th S%5@`p$PoZz҂%N`>3.בֿW[# %,L*Ɵ4T-#$Lt k .n _ .y!vb[C@+ hF\r OQ& i[  Af is^S _  _;yi!Hw Aj#{ i_ L! "wXZ`IGi wwgDI ,;[ 0~ o\-BH#03  bm &m,'  P+zsd, kw w b 7#JeY$-  @ D rjo 6d' M=8=M} 2 K Q+ z z 2  ?3 l(Fg [H  =W { { c^Q P <] kY.| P | ^3(Qn0 T FO${A$ ^E7C H}6E o NvM9{t;ejLf( \re.4 T!q+ b #Zvh-17vk{ ]au-JT4  N"cSazw:GmYv?1l{,5_& 7 `*#]8/^a @vb Bsv1 ,"9 o  r>jN.s5\6/mX>A^lP'2_/i->!l<S96 l ^su u h: Xmh 4Tbm  *mJ7oevvEwj4D?)hOQ`R_T1Lfg;oMo3E4?x |c:I7*X8-5s~52&Ix`Mwmfq/V!  Tw kAWMIng>QvmTQ9XFhZ]:0\zmz_FXWx&E* 0\*a|=;9}]Ctb`v3`P;M*'?TDhH<jogG>"{)]V6=nVD[N{oVMp%OeD6xGO *JWibgn#9B%gXsAD HTLR}6A88L8*]D,"UL>8#r PMJG#*A7 hJm GCp{:cQp!j$0_oeZ}!4 -tR>0g|_#**u0N/x["kTf ;iZ| ,A9axuO!jRuN9X!R%)Mb&E/`:mf~lKleo'sGmd%;8t#B<#%9$.v+Pl2JBto[D{\k:(c10!7:IGwAFb2MlJ7Gt(Iq@yp[% (gXQ; BU.zKWK'T|tc\8"YA*R `E3\Kuf*_UJ r;H+SODYI{n5E$TS-$Dmw TO}RY|{sIV> .k4P ;K+Cgm#P=$TdM*k%^EI\+(~[@x+g_wU0?ZnCn$clwc%" ~J&Y`]bUL5/tZ[#wE1"|7=VKi_gT5S1V\R|'q$"1H ugG>.j =gXtV \sNsDa4$)Rq1P[![St-A*Q}nvN6ZRP#miW>pW[-Mx7`bcAxJ,{]5$7oWD6^{_pmQ Tz W iv&HS+W?\Fp/dWy/5@8 <ZhIo?4b|W, F=b~=kB:p /A#>+}Hkdaq!~1AILHH1LdW >U* ;!((I2W3D-O+;{#x \&Xqo@VSia$oAfZ? K5i>]bFB5 K_pp4t5i_D f<nT%waEH."7M<S}jJwa+k1!(uWuxu r:H\q+@Q@ig `a#0* p VY'I^{\8$<|0Avg kZ1\5 8[;E{O[YTO$. %*a mc&It.>W *|c2SfKBA:O=kV u83g>g 6HF_r;>D5nC]YXgc0:KChUnp: l _\)%l-wiI)1tWhV6> ?:|(5cQnavruOzjqU8}(UL5":ywU79Xhg9MUf6HOG$Zrah<24P nH4cJ ,+B.u- SFM:m/Uv9 lg h@P=ZSmcrn)OH%-2bpV J@yLSBa\(a09@PcmP^?:;19&ppZ2*_bcB|h_[F 5k'OI(1*s8j4T_1`vVM5C5f } ]ElQU~T$vd`  $CS#*!GIG_t;AD i&) 6'Ti~J R ux\7 :o49.B :)6&]5EV %NE"x dw%{  QVQBu E8W 9RZ]"a (oPXPQxP*U  E /Hy u_s k s}K `9[rQ^L !GSe:I\3#sa%ZyufcSS59* D'Vgmm%M*Eo'G n3 dFu?I@rrF$q)}nwy' I[ 5."o b:TA #=XzGf*U}c U/: N  s %eHm2+Cn8Sn :>Rij3c56MTRD'OYT qHM*"KS *)OpI <0pV .w MJ99Ltfc&'R q'B- F$3W:#B^*||z6G5fQsK,vK=S \,\ MM;YcXN[`=bOR2@Wy]e 7re,poz<5`F+>( o'pd!X! vf`Y!2k9w5(;\ow {3SXCDTYLR8 Mb;BjV+Vu@b #6-SAv ! Fh_ 0o|9=-Au$qad=_:kcP= MH?r7Mj\o<+Y k% Uojlh<`!u|2oG VJVI, Mvj  2TwpVbJakkD_uzG)/v*kY}" sAq1GXT2)|P!fal8 rE;`d]Zm2 !$=]+ip na&J6iU` e*N-Z{9 lxksn]@).b6$ "1uovX;8zoHcr5gNQi:XE&$o(v8T fPrn_`Me rp_6*&T'nRVj I#ZqU=LW#SIT,EB,wE@ ]6'm1EI.%a[k)UgPlm{Yi&tX ^}YF<4"2 <>@$UGmir~tf09=YVD2scfpW]lXK4tD"t{j%& j wMq>eND[R|cu+&q7xSBn K!5G?3t(Z-T`Hf.!TJ2a6a$Fg:VFqMYZd :OE<:%pQ ZvOLuYU$#8>;#,GFz1_0 n:V "acIT"!=[7|i WA(hQFK/1FzV[jTGM}ah3gnoWtDU\f2 K L1CW8,=hL D/[ lvb!pcI$ 2`P\OyQF( /A7v]By&F 2n~/]S xAN*WIASo%tZ'*H4 metRRm|kayk>#hX{0Dq-fpd`kxV`P5NW@fw| J["Z 5mz46 y=+HCJ1TGDf mEvbo5$X)<)%I CY05 1/@gA3rJn|7},;..Maj~A/)|XlJ<f1&|CW`8Z`5 #mVs5QY_jWZfpP)Qit"5*XF- ;K}~lGSH2gXrG1w`x>*YOPIU*a9OO=qYKyA@3N%TS# KB2c7Dqqx~ #=v1l(H|?F}Y!jOBvYSKYKk=;"+%4b{ZL\'UVGDWIqdw%rE e Pwe+!LFn_bl"D&'q?:b/ lE_mA ;q "&k}lyc; NUG  Zx$yuX[.jiZO_&TJL.E#`bj[AQ+NbEg 'ZR& %g/g%<sV,{=0FgV!x5M 2cM71yP'= 5pETz7ax bS\Ct\$"}+y o1+PNzB`c>f9W-+LGH+?3\ ,h5ev>v"x*'t.&mY/g (s!5bj8Dx qe)jj:*{j;jJ> i iO_*_5?'6]RJ QRZZDn}C' 'PlEq$ _$nGTcdU uW!~m[89d$>w Xb t{41'I~sXM`?QSf`3`$tQ0qNS-N(lGN |<bq5~h^f <|%t n{2<_T,$+^Ee~*9L*7<$ 7F$2>$S~7gw \`#]E;'%##N9 z76=vqn6xR@'//8'mAXQ%B`H X[>^4@ _7s\mVbC/.zrM)7wf)>F0W\ncIhgzZN3kDw '8=EY] 6!"FCLR}kUK)cs~:h7CEHh cAsgC*L~diYMl HP6.[{[8j`?*abpx|XM+&va/,Wvr!7D$ :x@r#R5%EbX[H5F)[sjp+'l,sg-rj^^'h_- l Xke"8X;*Xy%Xx?*%R}y<=p< (P;7(Q-HG#zo5c;! zwv.#<ZZ$  B`xoF<8e P Tif-i7fM'Fqm4_[]x9:S"0abu6\Af+N{XwkmjofSvc#V*u~ W3M'QL^mbwQiP -^SHa"VB  x!J C~GE>,hKl0|1w(2(NR\ Via'fKg/fhFMum]Km{gr.9 />R9 m $,w+6}`$33(u}:jO.*$zFXTP \LA9_@.xD\ HGq eUQ5aZ* IPwR<Kq,-lJmO?g3l8sPGo_^q( F<5 HE{)O}%tuy1]xki}.Gq8{oyg!V *&C0XcW[^KY/}{F3m:"aQ_LLeiId%5l`~Xec oF{Tsq:W|od{^tpd-lyonpotpourri-3.0.1/sound/hi_o_06e.aiff000066400000000000000000001160661430526361000204420ustar00rootroot00000000000000FORM.AIFFCOMMN@DSSNDafeEFT]|$?bRh&އ b}f9Yݩ2tߓB!=- عՋZע>h=)ҡJ+_X+1 Gne#ɷ"+GBA+bD7F<<3v 9#?5' oۺQ*HBߥexRp MCN~e bH+ />%& %L&%F% vA GEr ;#m ]S0O[kOh$  L  Ws,Dj7x,_Qwqt U`h1% g Ev/"\g2W a i*^_!i  GjM SXl> Z ) Xa"e""*.#(iM!L/\ R T:&<!Y#; Fz!\$p3f*%/NWiCf%&wߠ\$e> W&4 ߵy" D8O0<1ʊׄ%=A~YZ%?$!=9$T , RYj /8a& Ԛva+*!i t!p &?  tw#"/Cm ;?$ 3Mby/o3XCY#fE . ͝p^%N%8[Ci hNx= U&r j[h_ig%PQ % dS $o 9~U 1XdU 36.0bU B ̙w h[ߴ|p6#.8[ '= HAQ QiI  u S\c'2 " &%uްH$Lb) !"m@r[W&?$3  d OC V t?` 0Dm q$أ!  jlRc 1'd3$pi[X"{IE r% ޥ$f&5% 1@<  %+liM%"$s}~a"hq b"g'Qq } !a,Lڭ-#".'+(>40Y!&kdPc$ (p>Z %2r\ .)!%]ݿOth45!6Eg!#u}@'A rg0zBh % S`&" *#C[ 8Kgi( ^* /)؝*"ә %n> S@%E B! 1*Pߜ۾ Xk2| {jn#-q! *QT/^; bw Fv3=c+BXЙA  rn.s. 3 \K'? ;`H U ͦo/9+ 2߷]gO2> # qB 'w?Y&!6ݸ (&uEFݍ9!w7* rxTI 1+f C 6 1j4W%(F'|~_L= :BLOND tB O* atjx tOl+?xZ/ZwG}. ;jƒx& @9&p yYj=~ G!+ L  Vu'{,&E?R e-!p]7  *kmE| 3` = }#(0K(pI w w?Cgs-5<$" dFX?Iz80 X]fUu# ) o | # $ $[H-VoL! M3hԏ!Z 6 oo"7 YZم5B :B 9n u _k E73A3g,\uY xjmg EA%i]9 uN:^tPtz%=&-&+  g~ SiP(S'љߡ (Yw(e$ &d Nm'D | }^ g8 rn7iYs~*kI_S^ { S #z y}m !| ~W{ 'R Jޕ Q"^#(] Qܓ&Qu]*b +;3T1 :{HE  w 6 Qe"q9>ǟ eSRP]$!#c co9 ( 3 ֋2k!!q(P?%< \b4#)0  #_#s@o%9p!=)gv?F, W3=8 wk Pw 3,Jp&O9Y  Z^~,vjF7t+#; !&:Bi9/ F5 'h*̫v P.znK!B'M54$<2/uոײw-Q .gN xz  mk"c 9r o ,VF! =   d  /R/!Xͻ2 :s6_RLY3](*Z J  &Co y5+w9S B 9S+ 5Of*W&3.q!fW ߈ ^ $.Q ӌKFBt#s >x HthXe% ' z nP V`A:-7 sCz) )KG}A 0ݡ/S&W @s) )C z4\L_&"1!t2n&U.6JKE `sޘ7 AЛ=G1%0Vu)fxg(uVV!5N . 9 IYw3<^ spUZeMB  FwZ#^z *4b8. ӿ(\Z1[.)2Oeyh s%  % Q.pߦ q16/0%.z ^Eծ  { x& YE{!J :w? i4z#׾NG H/ Gg+<4i 0 p,q*:'0 ۠E\ ;$xL 32h )@!ib ޞ |R3C#4t\ZDfE ;Ya0)֠*EJP  z+# {  Q} g40(2/"ܬٌ,F$ +< i@N t +ݦ &[/ 7X Ons߲.M  -sr gb!W #Тï`|^{' Gm; ,LO;(U$f z Oj` ;>:o<5;   ]0-x 6 L7!Du9L} $  '![; ` il!& ^ {M  `u%#/`YR )Bs ^ m2 /([u Z5`]l!4!f*>] -_*G$ `P *q] I/#"_.x VT S N J 9k X $72  2p ۿbq D&'|"( !t F)SA1E ߦw [d $)!;@AVt`q36)4H5Y( 0 [GHy]f2:7!c&JZE vV V W1 [)1Q$dB%$Y 3ў y m5b3FNWV-#B KW ^*Q3V7,?+<;Ҿp*.~A5, m N" SJ E_;A1K4jmn'vяT]L  Ey}ދJ)<ܺ Dl x )B L qۧ -l6%JЮt  mB r2t-mD S@*",4G x  YV~& >/ =| @ ranL(Wl~|uG hV[u/xx{ { :  %T c {Ux _p^ O [ج"N wضա24 a-UKt  & ( WGD& bU _ 52 " Ah `-#z/Fg"af L_3 wy$ {] "DTr2 j(A z'$+NVw* r vf`  J  zوD(!z&t f)  d+hCA? U$FSlF.\$r JI b^t\^G -*+%]޼!1 53 X ՂҥG1[b bG )wE7lhh O)L  B##$'x7   ^  h+? ->]r9? V'B#'`KB[ M ]r gSo l c pB  ,c i ! YrM  9 u&` N 0 |& ;Ik!} <2T0[ .sr 32 , a9 )Ic9[^ Zg|w* l = 8$Y}_A&!l .T/= iCֹRk $# (q]Y Qxg= Y a!"[W[2$ TT  L  xXh! L(l   4q}+!#=:x)&?1w@dIRV5 S 'j8 !HYLOd j3 TMQt8@P  E/.s[2(~ ,$H(oo [ '޳M1 _M}  v \ H  `&F;X{V  \tzvm6iFr Xw oB]  4TA? u;h. {Ou vږ^v ! Kx r <:o '>`٭tR Dy  YK~ pٹ 1RdN<b`*%{C-TR  3w = a"`  G d' ]:(A J^D) S ;c~nKw *,:KkV5!>*qllW > FޣG<) \|  C 7 D WU+'YS$`|P8E߼J~  ,!\ >rgvo_ tE[h( 1W X%s* ;^Uvs># vZ 'Aߗk0, % . 8k.'<CS pZ1 . !bx<'Dc #iW.؁ @6E6 V "z LDt @#k%z*-,!" ߿!z 7oh^?T Uk'DBq_g v=|4 ~  MS `~D( MD#7Rߓl*7u$9p!V|S4%xj<9ij r++!v]r<.Y)uԾ ;S vKV Q$hy#j(o0H$F# $7Tkq &$nk!&9V 1s &eH]Hm#s45 6ao>, tLT _'FdY 3 Y&"@%D& 6w "Ll  lej# L 5LJdL  !u""me*)  @ S #E g (:\ |+Ri1J(32P Z)] biW7 +}1 UݎM #GZcuR J    zO/7&3S?:f6Tߠ*-Q~!aI&| L|)#4Q~3 cQXT { x-O ^J - "Lk^B vC B q] ^ݙ %\\ ]85pX !  , yggu;Y|M 4_6?56) 7 ] $L ^&4+ rC<N| U( K V%eo3= 46X~6W1 ix g~S9=  `P{(g  d0 zxb -gM b9- mF< w c)u   H Cnp ۥ  3 EYT)?jFr JB zCo b L= 09i XY$Ay9 xM "35 !3jT+h 7W]?G xc wxB5I2!K(\@ ; '~SlRx B-k_|h! t@@i> }^.2o!q 5 }oF W,0 [w${0u dFZ@hpY ` nw f @2y M  aV^*O am  `A N9?Qyh8Te,% vs~& C 2_f<mW nk~ c eE 2=g gL ,Hu7KA9 Fsq#]z5_C5M `|X 8qSg"77,G pPQw+j N k" 8#Mh6- L eciRJ C,=t >& J m' ? |=nu %j>* `bkU> , hVT X <p uhw'SChd Z:`r 7b yF BykTOg}#8B 2 gX {W8~){ON 1][A +\ ggin 2 X y5 /0 R i:I aDUY v=J#4Q&.M{{H}( d` e5 D u.+x . a]dA$ )/BU: Y[ P^o\X9O`JMO4v` e &i !] ;Fz$]6bh| &+4[}y }J  .OX   e|_ :NC0! .#|uW,V6  Z  {$u  v B >U|yG  i-c]@h(0 n W AVVj6g %mZ { ,%Z"Kz {EL~^l MN 4e  6OR Yd@ mk v s`݉1 l D .;0fr<w;[p_ ?) D  kb]+ - USAc/I,}`d *~Gh# J UB y4Vo 5; 0f(Dt? o c+ `<ByuSZ'SNM"fb+ w QT=|N }}9]vk  y  Kt^1A3 ECV #N =h $Pp_5I#y1 |  H y=G^` (hLSz:ZjVLA5  +g >D kUt a#' q*TH i2g&[3N d L@nF v!v k:q=+ x+@1 :sm'q%/~4-h? ? H*Bua 3 \, hrxm [&g9 MY@ bEG ;m] r\ ^ OG G^dV L =+b&b q3 2 aG \d BA D0   o  =udd0h0e@ "RT~u KKsaQWE|n$ C Dh w# !{6T RvGZ n ~` cPmBj /8 I@ G/n#Q^ J7Jv!\JP -\4AGV.g3e6 0 k = Ab! 6J< ) Z\z` }6f )  L;e 12 tH F '@HNP n 0#~n  5Iwj>b~ { [#K 73-Jb }rU} *KTaZJkf kj@j/Q)H5<e|Ogk C'n""}tRP4 'r$  -=s @>N &  L>{ dv#)- z e3}b  &)B")2,6 iJzX0k k<  h A Qc  Q( xjD-  d9F 81/ @wQ mAN9pS ;HHu* fp%t  ]3 9 p> JTP(?  j<G_cv- 6QN  _? O R|Tl $B2 w A)W;7e,7mHu( M'x R^@ }_\K }! :6 ^G$u TgM *~ v Gxw HvplwyZYI1@N~8TI 3 B9W(pt0"wWpF?HPBSG}(T< 3ROieJT 4t' >E{7[\&* 5l|_7!L  $S&L .R X (NAGux>2bRl<t mAp m Jl%e . MI[w ]3  G at W C5? X5cy 3 p](  T+\ 5#`(u$u  [}AS 2~u^ @1t = /Y, xPagK p> ,Q I'1db 8Px PX* 9 @ X J Bq bA 4I);[!>G 3 j WR<8 5!*@Z W*6 xqR <)tlGj638#+r,_ k#SyXG_  &2 SNa(k&$+gq8j!+W ?8R&OnV{ 8Q=b P3: U Id;Ow.IO$ZG@\KPGgH0? K _F !E\? )rA 4 ul@Z dwAUX>-=wu6 7ad +2$FR^M IeMr!\ }*p>34 ' @{l T p%]b: AxIN0Y&{[7]/{?g*; : ,km h zoj8*c %-7i  6EvrK K  vyF>H v@\(M0    |g[ iyqVN/>g ?VEN)_ )1S\w] 5HF u~Y &n*t%c ? P QC%;*rk7_{W ( pYDMf -o  )  :J  `  (z9?@Mo &Yc4lXFy&cmO@  WIO z =^v QfXFRd yqwRk O /R)cnM '](N_,]nN z;] hD X! 9A` 7eOICn -yKc!Q`>eaBRujAz>CDOa  Nqn ABO*4aA % H zb( Y?ZS>Ah h ''Pi( C !qq:GQKUcbfY I #f cK S wk$ x!3w)nDk `i_ , \QtcH;6!t(w T C53~Td Ak( RYad=m 8l qHN {Bl de D+en$ D W@Iw ,R6f#2@}J(4B&u+]g (]:^+$8, Q Ljkw?_:|y`[W@np e8mkJ] }o3$ n~y BvrY oJ @quf F R) nc  ` ?dk KFJK* $HqWZO7`_a:-  FW>C#lQuG d3 FJd  $  *%SzR Hx. af(j  W}O (ISRx*b>AP? t5( +LQ2 W I_@)_ @'+bsB Aj: _M? Q LmP[ o75(QnmEaL l lkFP%b!X?w@oWY K 9+?jv;ubBS w{"/&hX1rA;ls`jykoo#  .40IU < G--UR!)S eE:C 8yx{ :{(rz: un'g?z>T* B TO@c~  i50/z?1u.gC3)Fwi( b>r @`:]iY-qutolW 5 z^AV ; l K`' JbAfy-MwWYs2z!FBX3yG Zk3Ugo_oYM LdGMoe 4Rq>uqyC'   o[$ Ysb?- I G^\ a@%Z 1<(BoP[u u]G1}#Q # A~~"o!QN@~>qZ TX @! u`+2Mlk~XXT*C(3uasAeqr3Y2Q! lsc uyE > ro/Fe n=NMtFs#B!+[iT#QZ67'PhLdO =?Go ~>b6Q6NiYdr uz 5 5;U Axf="GiZw\UzwR5)foAIfl494!QNX1? 2"5Sc+ GK. ,//OQ QeP=[yj  *_* 4%h7Djbcw^>w#:B( ? $d&| % w(Q 8 Y  = lW?+]C$-Uk)M  u O %Ev W=O{zl c|5g 7 z * rlm  <pjf & kyo7 8xv0`r V-uL lV 7MrJx$WQ0#CvPI e_  5x=$tu1#LE9|'@Qt&0.(ivHZJ'X-SeBkQ H,=O 0F< a8rlj._J,MU vVw%L{=#Zc/wrr3yU/g'{|u"XWJ #|  DfHW i 6wr:y} Hg 7 JTe l ``t ^V*l^W  K * Z=: :k";>| Q|` , 7 h " T eFd,7swAu]0Ui 8 iC{uga+(;mvmxnW0 DCm[O$\!P p>Pz^?4@ 4 TI1 } ?s Y-(s8HxZU}\\ggX.-~ 2s>HRC]Q8K[Y+|Iu)& ~ J'F5 ]N 6 8"7b mCI K+ZA{0<U/M(Y{ 9 lFs1zIg@qze"  c%{~r!(M+r_`=}^LpTe, J 5#FH ,!ux g,=s FpQ:AH nNJDD>W,T KW A*&Qc  u BcS Ov:]JpI*MSc{n%a(Tx M5Z$_0LF#2q=lI}Z5 y ,*Ge=;LqtP,\E`2 S; c dv ^"Mc wi9c1{s^oX;>hn5[)K}p 3e,5pcHBs^RRiyPV2o{f2,01475*xU)`OzJ@ 7 b94 Dn`GR#IJKIo[v ND  :f(}oj C !k(QE 4 jdjQrvD 75%U b7z'`_+ }6VcE2N 6X?ag \'P#q'/5t& 5@@ }r@HCJAbmg [y a=2(#K(yx a nZp Y <!C] T rY%VvD8FW 3)Yu 8> RQ^+Nh`(e5OBZ V^ hEaFWZvnTbU.cP:1/77?7C E? y-{_`$'X9me!Z8 UUcFCR = [k+G C5?w0w( t@3SWfs1 D ]uNc!  m@iXj/-] H v"30'^$12 [&8A@)AnT NLAI /~ZRG>Vnc7Qo4Q>(9`fq7pTk)nCc{(< LtoSIY_5# KjnC p boS #{7T.:$K:stZ Z %^QI\?{w$>-{uQf_ WsVfP,XY%!~oqkoS   kHu^Uy$gbD eic'76G[\#dH {ptW ]Q8]C I\_Z T '(`. 2/awG3  c9L> v 3w4>0fu Y & R w?(*Ee li E=7R1  *Nmv7 Nw\ y z3c\Y Rw S $J;3tWnqGL-W 3}L+fXh j:y*zk ex)M#h0N)p`TD/LdG it #</$< )2i!` K$H/N \k ;H4z8-?y !vW Cr G [ ;| vU =eTcPw!Tp0Im \[= k7K }P 9sV z qMv b v lJdz  o9hFu_ \ N  ,rWDNY3wkP Y JwD{^ =& QFG* LSeKO E?ODu+K`>k$V{T B^ HViyAY E{CO]M5FloFd`M Sj G+ h+q tT3VFzS&g F^CLIiV T 'wn 7jC` )U83^dgp  liPTWT p3 /2YVFX j/fV+syzZVi/_-8)XGX2p x zz deLR ":@nj[5'&#%w KJh!m `s]c }B 8 =_P84) 9 W tt@ =. KX/p(P= 4WJDWhV'x"qFFt_L7 &BG31ivz0 FQXA;0 6rD<q4h<o&h OZHx - g#rGo 3e+K i xC~>M k~ JG. s IGAYg_plpd-lyonpotpourri-3.0.1/sound/hi_o_15g.aiff000066400000000000000000000535741430526361000204500ustar00rootroot00000000000000FORMWtAIFFCOMM+@DSSNDWNB; Y$,%\ % "37 3o}0AȤ,|62_s+xU)( (Yf +wp\gZ [O'V"H~k S 6&w 2  oqozE]# UT9'J݇4!" v?! q*%,Go"̶B ;KC-zP 3 3IԻ]D>" 2 XL0UB>( >D&K# L&-$[ E"3։ڔ ?U(2%j9 Yc&& %k #,+Q40j..A){>Hݝ!; pI·DV0SM,hB 6# !Z7wT&BGHUڿFw0~#[C :+<( b[DC s or9ʑ^1/{ ,y+I" ۥ?遳Mt0H>. "'ȇ7I<&:2Ff"^tնqۉi#.&T6=4<268]N O|B ß#U Lj ;j!C;%~3 $ ]=()V/0&-j޾xC@= K@6 9z!a*\6 M_6]?2 p!2 A+KMWE#% ]ZY-_?'Y 3mŀD=Q+b%5.R;yk)- e؇D V6x$}(zo!{'ȳ4 g56 ?&+BT3؝ˇ"Ep+K/% c60T-!M ^!qy#n8] 9k|†xEbB'( ܪ2 6' q(PN84-J6ٹo6#,..S$:꽳-7Vì!"-@592U*IH&6Aۻc#!. o{t'+0ܵl&9) (@uuE+m DXƇ$<6+>@8/΋}& BdN8,l@A1I.oA(+( !Hߟ ' [ٟ/0L,3q5/ -*q~y נ'>g% V9S $@2!{ou !0 hi|#( 'AZy=3~ ~(%T AP?=2 u ,#V\mS-)Eu&6-< ! V*$r5 . yu k J gM%&< Jڟj,Crh("} ! * K t ;!#??0E*Iu6 :tuh m!Bq n W**5, z"'% 9%-L՜{!jVx (ri. A ftWn> }5eԆ-oCu)|j# hڋ_4?ĂM<&9o4"" )6*pT7D ,,4!݌!3,c~P0'# &րءy%Gm҉ n89ϭE JUO:,"OeF%(*0>"b\ԐPԆ -D8 šTb;j8JB+lbg 02L,L L;  (!6 Ϋ< !')Ԩw(|9+Q"Zt*w$m1Zb^3._;)6 #m{ܦۨ#/w2,&n&lIg'$yxID7# B[&>\Ѿʰ?0$#=940Le,,-@ *5c'{ L9\d]%ѐ%, Y9;%7(5RٔU)#A 5A>m( 1b9i9Jɛ@8C&$7 ڧ#H jq) K5aV mA!6 :-{ _ < PE J2N ^ҿ"& L V));l 8/}'1e~- G NF YQ p")" R i ` 2 Yv j) oE"CމOX. 缾 U=  .ܥ0WPXߴ+(!)u <R!8B<zwU6 9B bbG G1 ( ܝS UNpn] cduJBj Rj:0v!B%a6Jϟ IXޑ2i'0r'8uj! *-g ތEl&j% $)   .oٌı.9)XIH$aQKDXz KUթn$#< L"2" xN D5 i "/YW!RUqB#b'RBr}i1[##,O ".(E  6+ٍ^X߰"j)$ | )4!`0a  k&Y3VY$#1/cӹ  kt Kq -7 (I$ W\~"N\'.y # <"NTIN7n@ޯ\ Hx*~TR j6|w3Çh8 \64.YHs)$j(! #+e% "~^S= r5.##n]_b!m1V!@Ao ,##(!PkriS td=%h ` @[>--%B2^  bxCTG͈ 1^(U  } BxG 5 ^I:lV y #," fcN֮7-Tf G"< Efo X[ߥLBhs >ay F jdat{ *&3,Ip 0 S XU-v!2H $~+  j| 2۱(0Y | <bp" 3UQk8c b>l+\zN׬ O)+WHz g_cԪq{F.Z3O+ ,X-H p7iV- S%!j_]R7!GK^,% m -a-  VV2 6;j F5߱< m0` D]<> yAY] /-f P^N } myl_VZm~5 O l$'2D . &VPP;%aUAOfpX-] g~ 96 :  d Xv i W! _ < .1 GzA*- I]zwZ ^gq PwnU kߪ|v &C  :aѰ G(hHk ~ d 2p ݈+ _n"!^   M 7ykU1L/v Db i[}F `e h#a >W3\"N) .D 7< }2. ,/ &2r Hw%y<#J [ e''nH$N {2E4 CDNv5hNa0l * bh "SO1vCkj\p ^ Ep r-D" *݌8b ma!z@w )x;w e iQ3u8 4 {  \ ;r;6xD( &$ &IuJ&v44#" e޿  V pq"1 4Z ${ $gn j%$\qBis`~ % {< "qdFq " 0 jݒM (*54 &t/Tt8 .G'2 ߌ R n5T HJFA_= ~Kv  QJ4[,U  mHz? '; D @& 3yB '   ^B(n Z 5ig; c= Dn{#A  x6YQ & ~RJyEsrZe  C,8 T7:ansh?}q _ Rh 8r  O1df  x(f  )h۰~ L  Y?:$c#<)?y Z6 /A);u)M]!=<2s0 AJ^ Tx1 Y+ nTN< U sߐު =)DqtE o  u=99,O>yEZK4mu&-vQu5Dp yJ !9 Cw X73DKMcMvB {jaucjX Ver e/ C q=5{G kpR6Y Y!5 3] 1/  Vz* B kD*j "NG Q4Gu .tI7 =] TT.J lu #;X pxBc5 P {1iD% bWN !Q (s (A 56J!IC^S.#k hy $o\]!kkD* 1.PJ  ~6 [dއw  >B ." M!yu\+a;aI . L)5wgk b@&w#s { pz#q J*$mxX {| > q>Qys 1= 1C3k,{+42S }  l D}@h C#; -z3 ?_l59  ewr3O;"4w<amf [Vf Y;u * .?\0|qK@S{ lYJk#}  oJD?V?o z Q ;{y+ u60 8 :-L:uP$5 <% -=%?#4 wfw[K/(9dy\jo k x>\!q >+A J2%yp'Bz~nl! vg ^Q w >->z3< t  (|;pPxjf  *+E~L{kب#A  $?%w [!bR+ 0*NYNen k^; 'j fh9 =` /0 h 5yTES0_L>1c6 c & ]Y{F2 w fNUy '+y $'c}  S[Uk/]6K{f )T} ZgzGt1z`1 +z  HAfNp1  `_t  j 2  5W/w ml  . )b @Z ZN  L 2  8[:b}:W:*TFY N;^ 'A`UHc0 ^M3 \3>;\'qM! 3 fo PFX*  zJ kWb]UmGT}J ~{  aU\@` |7B 2M8  T 6j H N0 F H mb"zY S9 H4mh 1] JO\k ! @^1 ,yq -Vv# " Tk" 6Cyj ; 4g sPwO  ny$ N# .3{ wr5^z(fNi< O s -oL "Q kr{HL*#;Hr;!F8l"7jbv ,2W 48 - P-HMi j P tz3 $ |n s v @{/@=F }n R < WS@xlbvU BY \b {\. !v a?<8%+< ku [! u -wwOhw 74/V ~,""-! @b~  `  0  <]P6 P j<&gXSD& ?NmN? ^Y+d Y5A6-q  K(qNv ?mG" X[n*PB 3 V/ 8RWݭ;e1 JZzxEH.$ )8]=f yPZ" r_VK$71A+ GY]we X: '`Qz~75'p4<e<}{BtI .m?u YJ[s (1YZ NUN<G # ZI ; Q LWP v]cYD $ EnM S bE4L.Q  b "  ;'3YLySDU X e($ E\lq :XO0% + l,49V @ + E p |(>wC Q( EQ<VuJ Fg$:y7?ZS F]$R %!]!SgRA82 `Fw Y (1 Z   (/PL kmJ ,C=S d[V.9MzZ (-z  B 4Pbl(Fe- i rrG1~aD ::9& [mQ >OqJ[6V5c;w" 0JL=@{|T[L^d [L R?f } ( CD:6=8%,  Uq0 U #`gfq i d :J  c0 p,lLO @i|1g( `/5qd5G.F / uM~}  bxh=ZrA 9bM 8 Bnu&N'he dK2yjPX3 D  6  Y[B & XA ! ^t7_~ ; -G 2 6B1z@u\u-ILr.H \vQ y7T>L _vo *EsPt U  UT1 7 :6PvecWr[ [. 93wK^k ;~@;V cTh> lJIPG`dUYL  B K?Q+=>tk 9x9}d  6KN 3_Qm CZEv_qb~m%2 ol > gs wh ;oLD nMr_-m%J \ B; ? oq6#t ( v +*2^q@CE  p` H6 W"f !W2)? aY wA}_Dh  pA *tp& Q)O  wc $2_+ -H[V+ djit $pXb| $ `ri9\3'd,oN F l  ,L! qlD <4P . s|%g$\:*)/` i+hFV lCL0p j%V } ;7 5wM^jjf4D-Hz}?8  R"xRk(   reJF!}J FP0%yAH xrm, u < 4OVWN  . y7 k` B ~M Z/$q a8!;* *~<   ikW{" c< Xg7K}EQRP  RU@C"TyD hH SdKu~i `9"M9 1NLT]tg up KO. we k2$f.C% wA'z I  i!J5:-3RilUVzI$5L7HtDaHp<r@=a^?:Uj<Iy4_U9}q$7`kt AARvBz2 UlgHe4tE[N( -B )00  0zV'{%s?SL+ 1F#_aK>D" -GoGoG_.!c3SWF (5! % ")06%(+05%/377  $& .)@D0 *&  (&.'0 */.(!.- /()/( $!%)+ '" !,$%3%)$#!(,1%"$$#"&$".+$0-",*$(+)**:0;.#4+7,+ .= 7?1++.(&+(&)""40*65=,49(G./".B(2)=1*4./=%"*,1'0++6!(&/4+#+%''/A459( :;9>,/(0517.B608',)5.4;*'*410"$/616A81(./;>;$0$&K).549/;</*.AKAD<8=,0'"=)3B9=80B-6?(91*-824;-,H8277?HP/>;4A8:@6+9H9I4F1)<49=9AI59:2JNC2+2+07351=+7C7G;5?>?79A;::/>F,5D47?1)5DH60B-19.+00>;4J:$?>1A3>>(@E.3@9EJ9J7@N8:L/5;6A3;>(9IA>5?21A>F>:?6B3ES+119G51.03;EIN73J4<KD<>G39B.%3:6;C>M?=QHC@4E88J5LZB=A8EN=CBGA;==8=FA4IB3B:=ABFAD==BHCA>E>DACADG<TP8C77@6A;4D3?H=NJ.6F=DD1-QVAJKDHEIELMBHTGSG-6:EK:7HE9CBFF04<55?7N68P6KD@OJB;Q=>;8L1HE#HA3;DS:EWYJ=:9IB@YF8<:@UBLQELMUGJODH:@AAGHPP>A4HTEHSQ@LbE1HSG@BKNLBLD:HIHF@NQEBBAHG<L:CI'JK1BE=IL>==82@FKNNA9>?MAAADAEA)BBHROK<B=LH7LDDZEGJ:LE5KHHRCTG9OYHQ[AB>HFFLNYKENQUMPE<GICQK>:3GI857D/(EE-5X@:B5><IB78HHP@3[N:J\TSGFU=:E<ID=DIJCWGKUCDC<.JK/;7>F>IWKAOHL[AFJBDTBLQ@VFRg@LZ?KL7?HTM@?@MFO94DEJQJSP7MONA/<EB68>9@BJI8HJGWDERHA@GNEH_QNK=HVHJ\BKH@K9MZL?EJUQFHCYQDAL^?:IOI3FT<OVD@KGOVJE@B6;JQ@B:AVFO]VSC9PO?DB>RDCE4NA9NGJL:NTCGCKPAEXZZVELVFGH@FNKEJLGQJEDDWNPT-?XLHE9AKKQ>G=>ZJLK?FUQKNFB<;CLKKHBQFDPHH^MBPMFJ9?R>IMCD@F.?F;FKICZKQYGJKRTO7EFM<0ULJTPLP<)JPMWKIHBQOACFE>CCF4<;?SNJFGBCGDF4MVIM@<EFHPGOU@BC8>D<73<.CL:W6:U<<=LMIG?F@9<ADJ51I5,DGPA.E6.SLNF=@ENQVH=PVKGGNF@NNHC>MB7QL5AE;68GDDFR?5IEMI@:941?37<BDDNEC=27G7OOFNP;@G@@5L>5D>:7EPB8=OTHBIGBML5BLDBA9>?48DGMN8699-=Z:&?5>LA4E;:L0$3BH:+B?8R?HI;?A<@XPG@>JMSB6FRB:AFM@A=;GD:H@6B70=<;:C7BC5AMJ6EH=OMANG?8C?,:H>;A59;5;F?74D@H=1A)<T::;0207?71M32C.@?4@@;AB=8HOD6-2+D;07IRD;9:GEF$14;&)7'?N36=0"7;79$-=5:89?:/=))C-*2<0590=39DC>4IMD*4?/;AD993)@37?4.;63L57<634<*.4:572"3<14+/0' ->8540807F09<@238-$)837*+9174$3C4-75D2,8)/!"-,167)*A70-'76C9.("3++4"?F66-6A45@362.7??B;6<-0;,-5:;)+/5I571191767/@@0-10-/9 @00%./49754HLD30/<;7,,A4-5+%+2'04%96-6<*.=2'/12>2JB$5+1&&4,0$6:3'-,56.-2(%'#43,*.7+69?1+<.0:-*@:/<%$<+!52&3#:09/*7, -902*"1,5,3?302,#%5@#$A&-<+0((#3.('!2,(4%13&82*#&&% ('+*%-# $#&&<2+4 % 2-#+,'$**/ "2,17(7834>B4797(!,1)'6&#"1# &++011"(!8)E +$."'+(0#&*(#8'( #210'-+'$8- $,((-".    /0%)%,(   !## &$'((53" 8,%)+#4.(."&#'"5*"..))#)'%*#3%"-$+)0,+6.2&-)%76,)((+,#(&6!,)/#3,%"+-0 '#')*,&<*,.% ##' *7$,+*-,*/, # )%(/8.!%$B)"*!5'4.*-#*+)$"-($*%$8(%-'%'7)#$&"#"$'#(&*4.%)68:%")#!$2/#'+1)%$,-)+'().1() !+#$), %$,! %(+*+") /"  ".$  %"  &#&.+ "*!3, %-3,,$ !) '"!%#  #"*&+  $'% #%!$  (%  "0&&'$     "   !  ! ,#.(  -   )       "   $!  &     #"pd-lyonpotpourri-3.0.1/sound/kick_11d.aiff000066400000000000000000001020361430526361000204300ustar00rootroot00000000000000FORMAIFFCOMMA@DSSND!Q,nP6aoo7FBN_CZU='B94!Q4u8\`.P6Cj G)J _ũ~f/`D:'Z9c! !! #0*J-,+.m.,+Q/@2*2u1/0j5653w11u4"6=3/1[4V44x2,%&,0T.(&(&z#!t?]zQV `h 9cKz'ܤwܸ|bTI͓Ƚ%x$)ʼ ߷︢>%|,lrӮ%GQ ȵ1P?$Mɻ- I}ȷͲB׽ن'ټ lHw  W~!%'J(,02z629*9 8^;;@CDEHKMvOAOORV9X?Z.ZY[r[Z[A]n^^C^^^^]^,^]]]]}]k]#]B\\Y9Y[ZYXYXTQRJSPR,OOM5KHEC{DC@N>a<:86^3/-/*(%|#"R[&q P <r=!(H/'PҴC4ITęüMLjտQT-rX[[Jҿ]6a$*9098͍цԓ(ا#!WW1iF@'BtP V A ^]j!%r'&%&('1),.//14 45[56r79:[::I;<<=?&??@qAC^B@@ AC"CoC3BxAAnAAA1@?_>$===""_!G#<T a'`t _l@ڑ=Ҭ+g˛$ǐŝܛ}J5̵ܶbFsî'۪l=oe4J㦠6:l.5dlvg]}56oȮQvA ٶͻlrKH:"]ȧ}ZoL؏J/! Wx""~ 3_!W#;%'*-?/@1<3v5Q749;=?VA}CPElGPHJLM%NP0RSTdU7VX%Y@B6CCESG$HoIPJmKLMNOPQKRRSKTUUUVXXFXYZFZ[@[\] ]g]^?^S^(^]]]]v]c]7]\\\\q\W\1\ \[[[[^[7[$[ZZZZqZFZ1Z YYYYY0XWVUTTLS^R>QUPO4MLKJIHGbED_BAA?>=;:@8654D30/s.-J*(&$ ", W`pd UU|dJ "Hg;'б#Su9t44q eҵf@uN,)ӨߥۥF|ݞ8Aʚ(ݘ񖏖H͕(&擃ϒsDLّ‘hS|ܓ>a uܖD@əltsC|  #&ʫRkw۴'Z!VԼ.P9ÿd,kS&ѯwՉxJP>k; ' {:Ak "%il!$,&(+,.03468;=?!@BDDEGI{JLNOQ RTUrVXYZk[]^_K`saqbVcvdae!eeereUe4eddddrdWd*dcccchcGc=cbbbbdbCbbaaaafaCa#`````h`>`_____c_B_^^^^^d^Z^+]]]]]{]]]6]\\\\{\_\0\[[[[[u[Q[[ZZZZZQZ/ZYYYYYlYNXWWVV&U+SRcPP*ONcM_LKIuH&GEE$CBMAs@><;:R9#8769310/O-++!*)'P$" n$ E VSn ,g2R.Y[ݘ>@AA9BICDEFGHIJKBLMdNHO1OPQSSSTUVW*WXYZYZ[ [\]"]^9^_a_`aabbmbjbAb*aaaaajaBa`````z`F``____q_X_-_^^^^y^W^,^]]]]{][])]\\\\u\R\<\.[[[[[n[E[[ZZZZZ_Z=Z!YYYYYnYNY/Y XXXX|XZX;XWWWWWzWWWIWVVVVVnUUTSRQQPONN MCL6K9JI H3GHFaEWDEC0A@?>=<;*:87654$21d02/=-,y+"):''%#"\ ?(drf ] %x;w)tb<%epFݑڕװQI U4qe·aڼ޻i3d*4'"I|q55k6ji͢â?t)x{-Ԟݛ #1yoJ"'`,-`c(ܓXf˒ȒˑI00`&./^>VIȒϒ'͓דS!Bd0ИjtƚKěJpLDΡ`¢EڣITO']Ӭk_,ٵ߶ӷ7&/ҽrY/q: 6KT[Q^nFјҫջ:RYT_ݛ 4t<$'NOhZ/* A 3$cm$ "0#$%'R(*+Z,s-.0h124B5679%:S;G<=?@3A BCzDFFGHJK"LLMN>OP5Q@RST%UV9VWlXYZ[v\L]P]^t_``abc@cdeL=p<;;#:9<8776 5i43g2i110-/ .c-,+*)(''&0%M$s#"~!z %:`e9X6 I c 9AGK",/4_(wJDPRm0! ζSW_c.mx)-)2Ⱦ$XQ9f Pݧw椓o^K* Ǜkә+]An dϓ`%-ҏ}C`1匿B8djOWAWvPSO( ^ƍ-@_fRM4KԒZkƔuەwa x˚F(֞@va!elN@īϭܯv9¶xYk@Hd\'OiŎǛ7ZX7͛ϼo^/Z ׯ5]޻tߣe6El9< q4  { c  CuQH%9 9!"$R%v&(F)*+h,9-/02b3g4 457`89;<==>@BA6BrDDEmFsGoHIJ.KzLMNNPUQUQRSTPUNVVWXYZ%Z[\V\^ ^_;`&`abbdcBcdce#efUfgh hiiijiiiiyiEi"hhhhthOh/hgggggSg$gffffmfNfeeeeeTe9edddd}dDd_^^^^}^R^*^]]]]]Z]?]\\\\\y\]\$\ [[[[x[Y[-[ZZZZZjZFZ'ZYYYYYRY!YXXXXzXqXLX*X WWWWmWVWGWVVVVV}VUVJVUUUUU_UIU0UTTTTTzTVT&TSSSSSySOS&SRRRQPONMLL3KjJVIUHGfF_EDoCQB0A/@?s>=0]dkl9cghy`ґ‘ВMq{)]Q5ЕToݕЗ^s#d|򚎚*] fĜ{՞L؞8Cʢ3m_4֦J{TSꪦիP^˭%+L߲y *;񶻷"MȹwSػϽ:ܿm7fNąq;k˧u\λϲГэb֥׍ْؗڎ_XR19B :a0*Uv?P( U s  +}2 !="$%&'()+Z,-/012~357C8}99:[<>u>?h@B|CDEFGHIuJdKLMN}OjPQRSTkTUWYX*X)XZ^[z[\g]]^_`aFaWacjccdtefgdgh$hiijvkklAlmnn niooLo)nnnnnLn!nmmm{m\m8lllllmlDl kkkk}kLk(kjjjjbj4j"iiii}i\i*hhhhhoh?h'hggg{gNggffffvfaf-eeeeeae@edddddad1dccccmcJc:bbbbbpbXb:b aaaaaOa@a````n`L`5`____y_T_:_^^^^{^T^<^]]]]]s]H]#\\\\\g\P\.\[[[[[b[A[!ZZZZZrZOZ%ZYYYYYaY9YYXXXXtX^XWWWWWW}W=WW VVVVxVmV2VUUUUUsUMU/UTTTTTmTbT5T SSR~QQ_PONMMFLzKJJIOHlGFEED_CCB`Au@?>> =h<<;:]9x876695E4v3211_0/c.s-,++*)9(='&%s$#"! zk,PF  b R,ywBf yBYT܇V+ֽՋ66΢p[@<Ơŵt=cu/\ @&EZ`m̱X۪Vާ>a| cMƠ(w|G $=-䕀w2]Β1_Ր6ƏUZ󌀌i'ˋqt Պ{bӊۊÊڊ$qoetߋ݋EDyŒYԎ*Z;ZY+TG>ʔ"T+N^q+4ʛ>kJ͞7vڡio֣PؤVҥ|^x{+Ŭkq:ǯ&[d׶b WIǼt_8ѾlNnü:Ś<+ȢMʋ̲c*ϓ>GҜ ?+ظU ۧ`$ ߟ6dy)^#E2\ h] @"~  ]6YAQI]4 X!R!#$7%%&'()*+,-./n0v1n2:354 4670789:;<=y>~?d@"AABDDEsFG\HBINJ)JKLmCmnoo0onnnnnnn5nmmmmtmDmllll~lNl=kkkk|kek6kjjjjhj@jjiiiiQi#i hhhhvhJhggggg_gHg'ffff{fTf;feeeejeIe6dddddpdKdcccccxcIc bbbbbkbDbaaaaaZaBa5a ````k`J`-` ____t_O_^^^^^r^S^&^ ]]]]f]P](]\\\\\b\5\ [[[[[c[?[1[ZZZZZUZ&Z YYYY{YeYPY1YXXXXXZX4XWWWWWqWTW:WVVVVVuVSV0VUUUUUbU2UTTTTTT]T6TSRQQPPONN2MXLLKiJIHHBGFFE~DDCBtA@??X>d== <=;`:j98866a54{322310/.-,,2+j*)('&& %,$9#_"k!!" 7";A!lXS' $ _ <Ib!9j/ZE-BC&6spN1abqUk~|mޯܡ׽Gp*/ΜKʎK/N`ĜÇpD\nT1vݲdڮ |}Ҫ9˧LЦӤ<YΠ>ȞI읍 ]՛\Mr ӖM_;ٔ|:]+̒H+Ǒy)BŐtDYd}:\nt~m\wpɐ(HBTZw0kHc| RbјpĘ<ʚ ԛiٜI؝#F_T^ߣs٤%Nenƨ?ѩ,ЫJجg֭T{ wݰt òs55з'fǺ|h꽍[upQU!;GȩmkD̦sπДlOӝ9ոg z'ڮkܝO U sO4{4EP0gsE`%5X#_, 9 s L4ZCIF1DCG u!o"'"#$X%%&'L(1))*B*+,--./S/01A2,239445i63678s99:T;;?6?@&@ABQCCDQDEF FGH HIDIJKRKLM MN8NOOPSPQ{QRrS STOTU*UVjVWWWXYDYZZb[[[\?\]7]^"^^_U__`W`a9aabObcc^ccdTdde/eeffxfg3gMghhhPhi ii;iiijIj\j.jiiiioiFi$hhhh{hSh?hggggugLg-gffffjf8feeeexe^e=eddddsdMd1d ccccpcdc3bbbbbvbVb8baaaaiaQa `````[`V`-`____d_B_^^^^^r^Y^.^ ]]]]]_]0]\\\\\`\A\(\ [[[[t[Q[3[ZZZZ|ZXZ,Z YYYYYzYVY%YXXXXXWX6XWWWWWWZW-WVVVVVqVCV'VUUJUTWSSjSRRQmQ!PPOhNNN&MdLLLK^JJ3II+HHG~FF]F E=DDCXBBAA@@;?(>v>4==kV5ƐjĢ3„b0&Rн*RӺK,Ѹ7kejwEͮ]S"3ͪEߩAPO,񥾥Nɤ-ģz#梒r젊@~Pg>`˜|Ds ՚Sݙՙ{eKB՘Ҙ̘˜~̘ۙ%S^ƙʚPrxЛ\؜*ryI|J<}]4n;A Qn='M̫\0qפּخLC{-$q崑 t{ͺrQ0ݾKտTPH-Dé4IJL_ƞ6c ɹEʺHa^JA#QѮ|YԞ/նaוؤڢm݁K=T$yn8x?$/=%lE'[.tr$G-zZ A  | s `C|us_X|y?>tbSq !2!""#(#$V$$%&#&'A'(H())*/*+?+,,-5-r-./\/001)12Y2334445 556k77`7889599:S;;D;>U>?T?@@u@A-ABBCC_CDDEEPEF@FFGGHHHHIIIJLJK"KhKL0LfLMMOMMNTNNO>2=== <wD‰TnJvN۽XY j'g6Ĺhx췦N xP̵TӴ<ҳkβf9Yu{0l# 鯠gSH# zrbd]Px;#9#+4\>C16B6ĵ/ų)ƳǂXȧ+ɪwO˪MB͌ή eZkUw<ԫ:մ,֨ר1ٍؔ$ڑ6ܑۧ/ݻ&ޟc=f;|4I]+f*s3D)*QogrFr{F8PYfhh"xJ> W - < y}zKFO`v DADmPY B !""-"#:##$y%%[%&&&'u'(R(()I)*[**+P+,L,,-e--.i./Q//0N011y122W233P34B4V45$5@556i667R7t788e889L9G9:-:H::;;8;<<U>O>>>?W???@!@~@@A A,AyAAB(B>>>6====<<<<<;;;u;&::::<999L89 88y8G8 77[7666R6755c5=444U4!33m2222z2!11X1 0060//c/$.---z-.,,o,+c+ **d*2))q(((''\&&&4%%L$$l$&##C"""*!!a m 7(eZ#PdVf g @x>H Q # O  N|CS7[} DEE{HXB#'fq*V>Zn+!/9.9%k(o B]g&ޥ^ݝCܙ ۹|ڨ:^E׬M֕hՆl ԏc ӰL{58! (/+!L(;e9usT¨”›Ÿ#IsgÂÆÉ!SgĦ%_ńrŘezƸmǙ,BȪKIɉkʑʌx&r̢<͙>Kh?pϿ5РvnѩMҢg]xիfֽ.׊*ؑ.fٲ&sڭۇ9܀3ݿ9ޑJ aCnX?#sDF6.g,3S%BC*=]q44RnYdQ,3o]JmTANnKC)2h 6 a p $ q - %~7Y7nd\Xwd/YOzX$HLx: P  V ! !!!" "="""#7#x#$$j$$$%k%%%&&&W&&&'<'g''((T(g())) )Q))*!*1***+1+]++++,6,`,,- -5-M---..i../////q////0%0:00001111G1t11111222 2Z2222222233 3 333a33q3U3[333333333333333333333333333{333q3>3+3:3G33)223222222A2}2U2'2E2 111111{11a1100000O00C0(////|/N/U/?...a.X.D.. --]-Z-f-?,,^,,,d+++++r+E+****K*7)))S)J)N(((('('''5''&&v&V%%%%4%$$$$*##y#W# #""F")!!!2 P @ b 7c'i?'"y> ~La P\W%D~ w d  Y u z  } W  FK|<3z#N]V$`"u?`=Xo6r9Fr{+e0rCYIR=p%GqZN{$c%MD&^/uߩ2ޚޞކݵ~#ܾlO;۷ۖ8ڠvC٥ٌk\0ؽX88ףQ#}֏h;#շլվՊXfDmԗԍ2W,ӹӍdNSF"'ҽҬ҈҉ff}ZJSfKXi:d$35FT0Q)/L$=7HS1d҆ҋҰҺҮҸҾ*)%GjӜӹӷ5R`Ԓԛԫ6?|եՐ1(֋g^ֿMשfةد*3Uفٶ#Mڙ ]ې۱۳Cܓ Wݎ7\ߋߧn&^Gll~>9:r&Vi$h+DM^:#;]8X$:-li(<bc[PjU`j;6dZ LX@2e'_G-Tt / . J  .  Nx&|RY 8M~B.%pkh8~;pf-Hv*V(gu,$) 6 L f - r ! !!B!|!!!!!"A" "*"R":"""#""#^###q######$5$k$O$g$$~$$% %$%%K%1%h%Z%n%%%%%%%%%%%%&&&:&T&0&& &I&O&;&>&?&q&H&#&<&"&=&Z&V&O&(&&&5&-&l&k&>&%&7&D&&& %&&(&&(&%%%%%&%%%{%%%|%n%%(%O%'%$$$$$$$R$0##########e#]#H#=#:"""t"i""d"!!!!!!!u!4 y w U mN>L#9 yZyM2\%Hn9Qq.?7ve'xvF9!wW n3Yi&y,P! x 0 V +  n E k3YkX/\gO\R}#KCI+\\N h G4x((qTw, Z}'l ^=m?T D:j0t)H.b k5+a3qQCbCeF'u9mJ4Plce߲߶߶߁߁ߔ߆HG63;޻ޕ޶ޕgz^PyHttaޛޕޘrnޱ޲޹޾޲$(HFWhvߐ߾߱ߴ߰JYN;&Kby;_vr.LM]tBLcAW_R:QDh KCLK?g:9XN$g-4]{n=~s>uCyQ"`tS?t2H~#C{ ,m.r1x(P@Wi@5 Y~KmTa+F~ & 4 h X  [ N  0 > n  % o H  G}:^XKVCsXdU-65 m<r;ou 0-~EE^"DX[5dGKkhe  FK MT=W_rd^6GWUtmzOm y\~4}V UNK %^jIc #!>%%$oapR5g\{S@ +4{m9 ^n8zxw>Zj ;2aIq{W!mItC ` Y k z w  x   C ^ c -tNJ4f_P$ {F7k;BNB;kiBam%pbn f)}EF oi 5^81{i0?==?,KoT5|J1<vDF vm35@!( x]x)mH'Y%Nf'mOM,r|iHV2!^^w]VYE:53G1 H>/ O1,CrslYS|a3DRLiFL[u7bpBmIRo/fo}=Kj +A4Qj1]W~L"]\_\G 5b&O^p':PJnVJ\2i.SRn84EOi'00~*S=GF]d^~1 vf(/dYt .ey*8/L81>z% )y!>jqV    F $ K m s  3 x }   9 E 6 7  B u  J  ? e v  J + _ T W s ^  d_R]g$!MVMzm .u;M"RN9ArSCSmwB|eXX{`?~jL^asfa2;)]hb^)@KTf@92)?\I7@>!1e!udpQIUV61U,/2t_d]Y<.Z  |upK0 ~c0M' R , A #   ] 3 W P  k < 9 = ) ,  y V ; * $ 8 ` l ^ 6 AVy0q.3_7}){jZ#}q`Xbs=?&P *^Y<&sV%jO'@Ym5,_7Dgw==)Xqg BXXm5;FirV-RE7Y ,5K[X3W    7 3 C ] : M O u   0 6  8 C & R f v 8 5 R 4 2 D e ] r \ V j ~ Z s q L q V w a m n  u t m a r n m s w i Q Q d G o m M Z V Y j L B 3 K 2  $ A   a b I t O @ R $ + 5 ) 0     myonrC40  v~pofPnV0. $Xh7%n`qP/!9{hw<<, Zue0@gIC;C hxf116dS?')"V]Z %y|drZ>H2  aUWG-(  tjpJ[^O4P"7'3VWYLAnjkgdU;0 XlelY{Q#(AznTMTgY(2&#1)  ..2FIU3\[q@b6OhjH-&4Ylt~u(;MaYn)%9JQoo^aw 6+ &SG[bfSDGou: $)88Tbqis+*F;c.Nyo~ip &: HJ?QVZLfgTntp -A0'EQE6+8]d_bGBc`Fkd[{pqu~U\s^PX`LU_xR1IXc>A=PXBI:MR0BM81%'###utvT4FQ/&K0/7# oOelY>:({uYJJN@7).3& qWFYK1Yg$.H,(#zvbSW[UV*(0!% }|eNZ8BAIV42N:  kbnUoj=br`],-F3#,  wy}jqodSSVdUAIK<"748eF2ERKA>4RZCKH;1[gLV`lnnrn~tw~{un~zz  -8C/,3IIMNDXgy^*Vo^s)!  ",>3@8,@NDMXAZrlkgqyr% 1+#141<R\FGn\X\MU_qskjqu  $8#%'8cD0?Lr\3P\RdY@dqXNckb]d^\sSVowq_p |yoxy}wcbkg_US[e\VQT]PLEZN<XPE=:8:/;2.F?B98*( %'   zwt}pqk]jmHD_lp[]wXZ`cqQIbN>@?`[JSM7Q[5<1=58*+ (60&%                                                                                                    pd-lyonpotpourri-3.0.1/sound/mar2.aif000066400000000000000000000140101430526361000175270ustar00rootroot00000000000000FORMAIFFCOMTCreator: Logic PlatinumCOMM@DSSNDWW&&HH{{EE]]HH[[II&&CCXXAArryyxx::YYGGUU^^>>jjNNjjgg66dd>>%%'' ? ? 33  kkWWoouu %%00kk D D )) $$qq,,OO44ii V V  ccRR 9 9GG@@uu : : YY``,,CC##IITT44gg ` `[[::GGjjMM  AA11**<< ++   <<wwzz88%F%F))''#~#~xx``OO~~""gg\\]]PP!B!B NNii$$&&  >>77zz11ff11 [ [qq::++NN??kk,,..  II  yy^^ZZvvDD @@HHff)) &&OO 88\\::CC#v#v.f.f443D3D++VV ))AA))ff G G$$7c7cBrBrE'E'??22 x x<<kk77UU--jj  II SSDD $ $$$ F FKK ~~55yynn6655llrr++ܓܓII##؞؞AAss""(r(r*u*u%U%UEEۭۭװװ]] + +xx##''##  !!QQ{{eeBBXX   !X!X(R(R)Y)Y$n$n LLIIҷҷժժhh IIHH//-- S S  ==ֱֱ22ߘߘ!!22774?4?++ ccyybb !!NNii)q)q.H.H))  zz٩٩ͽͽXX&&:R:RJJS,S,P?P?@R@R&<&<}}NN00;;=&=&66*z*z W WnnSS))^^yyee//JJ((HH&t&t//0%0%*u*u ii44;;==RRkk&&,,'%'%RR!!UU @ @,o,o11..##qqxx~~ääǥǪ??BBփփ77A%A%\ \ l4l4ooggWCWC@@%%TTtt۪PPmm''VVHH$$IIe e tJtJvvmmYY>[[dd,4,4==H?H?M=M=NWNWJ3J3?W?W-'-'ppZZddЫʥʥ mm..GGVVZlZlQQAIAI,,..77iizzLL݄݄//]]##4h4h>>@@=+=+44%?%?ddbb{{EE""0S0S88==?f?f>\\$Q$Q33>#>#BPBP@ @ 8b8b))??\\譣11Ľtt55ObObZZV:V:GXGX0;0;<<ҹҹ~~ƄƄ<<)O)O2 2 ++88ggxxͧͧTT$$++cc0L0LJJ]]c}c}[[H"H"--TT󿥿𱬱Ÿ--uu&&/J/J11/J/J&&  ިިyy''DD yy??%%))(k(kGG||ѕѕ$$ CCEE , ,]]((xxDDFFss66%%''$$ee 44uu&&**44۞۞!!--::@@==22$$33>>@@WWooھھ==((+W+W&&  ,,^^!!!!ww>>JJ^^HHEE 7 7:: --kkVV;;33 ` `VV@@))ww J J 7 7 yy ~~ee++kk{{\\  h h & &ii   R R"w"wPP EEaa٧٧[[ߤߤ oo 2 2WW aa۴۴EE]]ppii|| y y RRppQQFF..$$aa&&--^^YYBBxx 88::88??--ttyyGG F F((CCTT6699--vvHH L L s s t tqqssAAcc!!((!!hhYY  xx88VVnneeff ffXXLL55__YYccjjHHVVQQii aa99yy77EEII++00NN!!MMKK++UU ==44WW&&@@ooAAKK}}))\\rrwwff00((JJ """"^^--00cc  }}YY>>--((00>>VVttpd-lyonpotpourri-3.0.1/sound/prettypad.aif000066400000000000000000020553321430526361000207200ustar00rootroot00000000000000FORMZAIFFCOMM@DSSNDZg*vn2`Z:xrC)/ e}*,y/" sNph2 7  "C\Wa.j(\.c~DM.BJR~eq@2u݁LJs _ !TpoU-b%)h"&GQ{ikJ{8zռ7~˺gs2M+Ѝ 1؍ {u0iPp#-V' &--&n){-/,}*(!#gu9 - #?( u? i sU  k^L Ut5>3 XQ J 7C'+J^-*bpf;2 i 7p! y! ")6 ,n.,T&#*!q `   B}Dm(:&ڱkݔ ;%j#LhCPle JFC+xw'* '+ # BX + f%G  ;Sd? ^vA7ޘw#oԸܤ@+) X +)/-)-|.* !g<"PD FzQD ~ t x,*نE9@+J4i O 3#Umux'~'W%*Ș&<"I'"#f!]=y3 &  2: u P%i{g=ٶ#HA=I۠;ׯrYH~ ;i'% ,- FD"OH3lG \ޢuݞ30 ݨ:>5&g'9z# Po ۳D[854 ~`ٿF :`-c buI_}V!^r 1U UwC[  ;XCdv EgC 3š A;Щ}Y ;I)j֢sRXKGc[(jND !"#)6215 @ |9 3>9 - $G 1M^6B)nY,ߑPC{I}0_ ~  X 5P oS o"r \b:L&a ,  n3D7B&WכpXU/0XcYa G ^  A4="l +&Ap!8%#){-l O= 8%>8h$*w#w}l,7IZI'倾tcwŗ ɸ"pIqm2/ i+z}%vK y k 6 ` Sٶ i#/֢ը  ^9S }- y/9]p rW3GPG##۽#1kҀ!y7 4 vUBSFV(ߛ!hړa$ \a13 `  s6@` Z#K!:oV ( r-' eAՁ.؃2 ۠٭,{juv>_$;d$ ,;P k͌vҞa>cۄU>FXD<N . (k1 o[ K m @ #y& ~Zq`.UXHG,NNF(/1l) )b'*D)//2',/9'%%OJ%%)`&z+H#]~ ] # ; a ?  .! I~ < mD # M/ ^ P0Zb!V޴ Y j_6`[8|O  *bM[v 05]F\SH9((* {yC/M)!.$#-* $M=':+~;:F)@E`BwD6 ;=`%364q(a,/,/]1(s&g4 s3 K>g "  #P J 2 OAG Eʂ _ wPA! 'ˢpؕݞpYwE%ܐ܇; kȎ/kGҞ٭ F NG'-   $1S29]82/G;.?* O zdN+f)W Y5EQP=]! "7 r$#! ")#2"#z 0! " 8" e ow 9U6b~ IH]0 -qqXڱK[1@k>=F:02k ){x hx^:ުPؼζk=?Eгj{`o`ۄY ] PS~fK; )$ 1'a" $`z!V PL4{ {U!~tuV|A14 5CA]@ +d U] `-!B jd"F9E]zPX!8 '& X([<2 @0 &'on* -Wxg x U =t Ҕ ܐ9*p uC @ra @ =  z7 +]  < 5}PC;}&T8:SoF& $a \ )J (%2'M&$24*j*u#.,0G(6)5 k:6U31&()S'&(4"Xw  Yp jeNDRv.~ЄyHfܐ۪f\5bM!}, /~ H mQ-~N&&hqfٶ :UE?%>yO !().&2's!:=a$ K JC$ k!L+"){$&(M$'"  b` i B@  c e N g=1<8sMyv~2Y"`M<i~ iKJ= k D P  wuqCXeGw|a j26SZ&M/ܭc~3&w۠*E  x L@ #Gg O-2} EIQ%'rP\&wvY{$H8*$  uG:mgN9S- y H#s[ }4Wb 1 r  I i? um XE 8w= " m!SI kaFWvI5Bb!'KT  <! k l _u {/ue {H ߑ _8ISN&qh~1 }2 7ItzB `Zd A 58K^ \ a= o  .x g ;r JGI },_EPTI0|r+vi^}dwv۳ٶgL4o؍<ٿUO$:0=a"&+TO4;*]y |D2:LA}g5d 7@(QiD 1 <}"3NU*!8m  [@GwU9(Dm%@yiwU**Pg`'6| EF C  Y \@/x,{5UN/z _h(/!tX%KJ u n L . =  x j " p < S - %Q6*rN7Id`z I 8  O=  N^6 Y cj l o bHev؟wܚv$I U !"m" >ZL[KV  QCK Hp9J#& Yw 3y=yw@:jK<+dTc%w%@w7 y6tInn ==y96`2,0P*w(*("'"^ ; R U &[nEL ODR}Z ,`| i<ݨ@qGD OQiI9R)]ӎowPc|i^ y _` %  D  4  z`,X]G&V/ܚ:޴Khi+N ] K^, " Qs 65 91Z; AF1@>f S}wFh]7_;IZg mN"~j"&S+.I3 13Z1f4)1p.I+ $!@{0 7 y p- n ?( eh (d , ^ d~EB!nBY   S(M n2! [!r!^6+-32D +-'t#f!%;NQ[ ( m+ r c[eSiF)mUrMd&{74}|^ ] -nijyG?D9;_ u2"_O* id3. 8}M 3Mp bL EQ9/:0`T` ' wZ^ ` q iyrMO^:y Q$ \`k 'ZV@i +rFd\ݰ7ߤ)/9!̜c ѷyכQX `/vZyg+sC&V @Z{\"l$t0(!4S'd(*v_M9 kT  If AS l\! kG^JMuD  &Z $|$jU+* (*( U # C :Nd  @"vM* (G%&%$9{)f&E  #Yqj2d@s [ "",)#'eZbl#I1y"g($#$V!B6Z "5%dXC|$ގ>޴P4pܷi ٶ vZ/=~Ni6 x8 : @^ U FKhv_$MD\8=$ȽȄV^ǧ+M'TN`raOKbI^i@J 7*^F   2j  -L   ~ Lp?]  Zs7~ -9`!F$!8K!,Z$a~zd|1x c E &GJ=+!""|' $f)'$.(0&qp JSdL֢VZ"qc,ռ; u=9 IeSwJJ (/^Qi_A1bWs1̜͌D͕z3{ .[%YO~3X (9g #7Q Q / jLZj1 @t2 O< ,]"< "l , ;dtJL6UG i |:9cgCv L+ O  2J u'C` g _ kK/Kj | # . [s8iܤy]/ՁҞsѷ֢VӡkL':(݊g{HShw>c>&U< 5O/0yN@/ K0(>3KmEX (>,# 'kw%)q .S,/.?+-X&-)&d+8 )hbARi  z=P7ӡ9 [_3xI[jm{ 3g.UF *z['  } u q pCx ,] IygH xHT52B  RE- % X# zh^+:D;  7 (! = dHCU 0)([8$`i]1"Z(BJ&"<.%'P #5mYQj #0 ݔ Z o \^FAgPp  >$@&2'2("#z{ T J 7`Vh\$;h&&7 F-7&vi  E.|CJU+@lSMo*Wrĉ gSq"Lg  8n-P_6 f 2 z m= uw2  P  Z k uT{0 _)Z$/&"S Z)-\  xtG}* #p"F! "t6 o8j * 3+ ! ua!gAQFg{sx1 $  0 + - -/ *8OV(&#f-3~*(.F&JE@Y08O*a5;& ' #LE%=h# !!CtDv _^:(S y< # ,35 E (d HPRL Rn86!%%c&$/< kihP U&Z1Nui@u{ ,> * Ho ` 9N@ /D_iC2@euȵ· | R֏[b &EdX]J,IiYw 2&J+Y<9 ,= ?U D :s3H# kU z9 <) x س l(- 9e9D2N7/Ygz "66?{9:s)48 12٭+{,Bӄ0͌*D<+H$Ɉj<.laUSOA9 q 4 ';%3r#"< @   {K4A c^w 1 gLmq0` H %D?~D94F& nu, JH[gw FvN}+o _ E׉^0sLC@ٶl>~?K4}_GG YU9K"ܤ!<۪ ZX uߤI|rI ,6yMdYl[ b"b 'D'a -;-v1'-)!/ >/$&L#pn=Aq wG(xk̓*9ѷP c cT   [ E= xy B ^j"F}%  zW:)0"9wOכ{**Yqݰ օ9P/nTj"vZ  &#y#5# m{ #Q##(#+~++ 0/1.޾+nܷ)ݺ,_݊$t Um ,+dA'*- ' FL I? Fg (wD zf?E% N9km>Uc9Z WLK o:X_t3<eכż /9wʫ ieȡ ٭)z}@%G&87:D=j2&/!!#e  o `AP4Cb~[CjH mHd8jsa," *0('Ww3+-!,4{l,/ !"!# < m @W &">Z((.6wH;PO,}AJ?A83!+%%O@"Q y OI}a s 2z7{ a~n^ I}5[$f{B .[ޘo߮g[Iޘ $ǔdҊ9H|w3M'd5n~,\ =D'M'0A-;.& +-)|/+Hd,7) c(e##u  [3 5} ̒X֏(cҧ9rU`# ,LsU2Z6" =:O3KY>P IQ3G+174^$/ 's. z k ^&EZXC  e  Jp82O8l[-e 2}_ t}]2 5p4"baH   o k) uJ EQ Rc ߑ ?$~Fx6u{{0E$nF_"Bd AKSt^!d; &33F|TbNhՋ-"U#~h0s ^U͟Ԝ ُ ܇ uv4Y&^ Obg(U ;`ZLSuruj"&z3/G0mm-l"3#-_LPM M 2N 20 7KAHj C G^^?!L5 1@>_;! !% :GU/G-X(^> ~46mK7,,,V 60 +'0Q##U$ % #  6u Q@ ' ]M4G;pO\vΏЍ߇٭Z$,3v \ ow{ 2q _Sc<03a1] |9C V< | I/ *SbՁ#*%:o^R " m o u# [' B-v TYOlf՞EpըPuޢApz||c#\& 3!)/[0k2U9?J1%  $g| O@U 30.U' d 1W"{Dv >)!+x435~ 2 c.\- +A(4O%j!e!8 (]$"#b ! mdq'"a"X)q## [ >$/#Z$#%GP'k,LA-)70=+\B >"$" j  y r~(KYzAKU ( ur UiYP s vP }&   1; y- u r YVrs #wj 6-! Ҋ=ɸˏʻԜe,k8ռڊf܇BՁǻ!Qr=Z   : ~ o% @ c) bJXXA Fѭ |z .ǁDrGEiRؕ)=՞_πq_\PM U#p%c4T2K57r" :>8_76a")* "b_(m /  8@Y~2AdI'_jmL.!!+ul  -  "m Q uKi Ow@,ncg&r%=m~fwSiWD]- {]: Ձӡs_9zW,)r0m.SS7C2208=V58Ed20֏+(I"u4b0 Xv  X:5^ 2 .%J/mЍ! cH>XP_:NSQY7 D /$MO9  , & yq+ K b; jY ?bs2UB#r`!/4!KZZ"v#$C" 'at^lh X &*4{atގ ؟ ,~^֢ RԤ(I ds 5% :/4$]B؍pُیD$,D*m-w_^ f k [ cY>  u@!INlJ$rC <{ I @s7mJE!" F`? 3 x 6 (] DP T- &V @ԜLB p3 7 QN<нydwA#Tc& osd   -  i 3 u mpYXde ]KVslti  ($j34.1B (7 8O3dD&]p'%j!w ~TP;:Pu L\& .r  R  f!% %=/M x*2A-Eh% ,$ iDmT c(6|+6YYsiҧ٭ͩŃȡi ׉wc`x= ? @^hUCb rINxf 6dEp%!n`om0D@ []>=0@_J#$|$ 5y&:# i 4g 3l,A F!^ /.#4 -ݨsD 1 O y}W^+ ,]-7g]:F;, ]j(<`% }1V@l   | #d  L e v;,i/YnBl{j 8(#7G<p`B`6  y<2%t&g, 8 63 42N2k0G1.,&"'}W(%G'- # \ u,T +j"@TY$`{}3i D o I+R, !'},&z!%-,U2-,7(=%* k!ys` #7 ~w';n U^]5p} BG mW49"}^he}۠TJjռp- bdT^ oG a r س ن ,R BU ߛ$&B"?ch=4nǧA~Ҟd"@c{"=++(-v.S'- )"!V1 75w `0 ~ٿ RړH+߮`;Jc i ` B By 9~CP  I& E [   #-'Q (#*h& I ;-5D&f r-  khh` ZK`^ .3L(PN  R'!%:((t( f,T+5&,_d)!h'% ':%$!$&"4t#`:- su_/Iy3}Q ?&B;R,*2"b!s"V> # >g#mf!O]VW۠VGUP #؟ Օ !PZ\!wbmI33C-6aQF3P^ @nfg )B!V G~ DQw߸Nf ؼf۠. X  k .V  b(&=KR! &@'}- -7r}47:3.z ,!t!L 1Y wvsx28xC vK}[xssyQ v| , %2t1$#;: 1Ao;>3nZUj 6 2 o S"$M$90I,B/F-(G)(*O#p̜Itɸʌo@fiȫ6ɸ_ 7ω NDz|^ $$$903,"+!J+z.?E)ǁTDȡT8cs Rs z kb%W `g$, یC>;%   #`$+dj(e146K::#I7"X=#4;.,(*D%Y %/g њ#-"B'}"&('"P ~^mn~3_Q j mS,js 'W%s" Y'}c(U$|V(11.+'aS&.'Q..!4=S-c*鍻`l&3;1ةKaab = =-7U%n6&Km P_s(!vhS&s>jz ݰ 8AӴC8!#5,)(Q)*"Y'D$%Y"v2 \EYt%g@I KU  3#v !z%'(Q/5D6 -3! 8c 0G5$V #yyS '29m 3 e8ru 2 "G R o*;@#:'D cFn 6  { V->|_ tMv"lP ~ kW* rS *v0r /;q{# vp w I g1!!%""F06e i':*v`AH"DuU:#C֢ݞ'3imxAs@DM,@x7= u{IHO,]jj&d9>_c o{ yyhvAϹh /"-%Щ(ӡߤAl 1@ ,  2 e   g<w/< `iFE[ X&qT @v 1A!ufQ6Fn5*}e+n0G;A?;4?*6n.q C#OղЄƇiπr5 Q | \&b [-4ji*-,# R# mY: Q  Inxj;"#m!%$%W :th [ o c/ 5]6:n]?y!|)'rWބ RF+%, 9 oGi! . [038T9H=97h.@ )fގo Mޢٶ؟l߇}@Y>t@@ x 7_S֢,A-@ߑ H ICa/m BGh= ?S :a" "QG cNN26Ը&Y@Dة/ iZzx =%N:ݺWN { ռӎ: iAM{sL QԸ%٭۽8fayH#, %p8AߤS gGj66eD^(fץy "!h k! %3jX(mP&: \#-"H _Cnyv)2x[j|U0,  + x(Q O.f&+  ! \#+$9"ll!#'! x!rt%'#I)j$! fy3). &r&A)h@*26-E%v-;%G;+$z_( ( a&0=!R Fy-% }  %m !Aobfd9_) _~xU 8 ~n_bpՁZ#p zͩ\𰮰gt Kˢ̰ # (ܭ PQFz  8N "zrI0  <^KDU^5uVʨMV=,ƛ-rx ѿȄ> m=2OXKgN o2s -b--1g- 0 !)q,n*um'ު(Qa&A/&n'ac$9Ojq0( xh6]-7 & d > ",|,*b[.,%)^W$"lKJ) f <`]zLlA|% & 1 .~4;,!X"$(*a,080 7(,^.,03T515y:&8<>n5 %'s*cP  aJ A (7r Ҕ , `5Y!w  QU/  :% ;  ^V  k< kD-nr?۪۽̜}%ٶ{0L߸oF7 s1 o,72v"L*N&.+5 c8 8:4T7h3Z3Pw0/ }.(m%2'U@ T$Dm]2|cbc i0S<tB A} 9 r_Hq/ބB5_i=ղ#ٶ.ݞ^'  ? ?_ .jZ8  OO78?2ٿ=ܭ ,0*w( k) *+)8$u%v&J$9P  r s rn , o(3+nm"V{3"3QxxM9\e]4*r{!h."\'}%*#b vnGygbYp o-; kpܚ072݊Nd8̰ƛİڊڧ  B   u ; f$HA@pP2f;[5{ [57|m ( o( C!9 u% ]K]`Is]Sm%   w :p (#f!r! !V!! R[i# #I"X# .'3-m$D$/5{P ,s9mI,$:<5@F6m] MA7 kp \ S!V)A&$)(6#yUe= . u ,V' s/A!H,&?V"9:T<ބs=Zr ,a"1"">##"$/A{D b ; ' x -%^ R7" $ sZ##L D&`'29n\3] ~fDn|]њ ^ ;ѭӡ  + O 4rh  f10s O;-|  #I(#tQ : ~:(D"%v|*|-,n/_v+O.r42aU00y-.#6.)O  !VP"h#SQ@!0U-Oc@:0XC(o=1&;W2}|A+MA*] K4\ uw rN ~+9<  $" K Y lwֶ ц"ϓ!B{##˘03s*7έ|,KڧJ. 4tTU - 88Y]bs ,u55݁//{]L7cV%c}!!$"F''F*50/ [+R+=& * E-v*Dg#IP"U"*,yAS . !, O> PU%&A3d#/9g1#8i5a=52 -l .<% G; I۪1jة e U# 67RUI3޴8+gݔ~oG,U/||%:?3h]G qWԈwUP$|ن,_"P|"e|nڊѷӘ ` 1Ձ!]AWi?,ڱzUԒ'j@$|5h/'+ Ui @;Qn*P*0 1jZO  cOi89,њ+ZXO i ]C: @s! \% &#-#p###?7 < uUmT{<}J [)()~.SP*b'a&z%   J|P(K_uN5F XEp57~Jo Yyd!V'05<@BDI>;D8<1N.v >ARb *r^Sd m # I_UUBMylP_&| _euj*(!hw*!:g_sE%N왱UɥtZw5RhW# yK_3 x/3]' ^g 3 7#* U|Q kn^3 \7šfζ|ˬ&·#-J,`*+,B,|.+01q64( 0w+.$ f%c0 = BD G%G: ?70 2+5~ B _{f $&#, +n1S 224}6H2A$/& S1GZon(!C6A +( p q`"VW=hE9-kՁijW 6έr#2kw^y//w--QJ  3=5X+S XL 1W 3j&( #-   F kG I ~$6k 5 $R){/,L5;++:==59S/i:1y3!414)2W#2:$'WMN[Z [NA}Aن޴~-f7" |f'",& iܐ/Ѥ ҧ .Tg0m:0;@8ŗ?ߤ:C4{8.%,$M  Q 2 yh Q8TXڹH mK)SSr9lR02%y(/1H%d E,Kzz[L2+m!r "T")*h!/")r z`m!: 1ZYXDti #:&a &7 W'&! LjT%Ib=bT&ybJdm[ 9$ "$. / 17 5'q2$߸{ucUTPL ($Y& c3Z,n1@U) 'M2dYJ(8Ue 6)ةZ{&  rDJ l/$ ?[R  " -g7\tfV 2}_gT>xx  6 5YF~ U aaLl:PwD/jjنI٣ωEaK!hNKHhD*VMSQO 7Ag f , e \PZa @  L 5Oy)x   % , e 7mEYD`1% \ EEqCq9&-bܭ/|p/~1@2ay.3+%3'#\%d K!!L "I iPֶNղKP y#n%'Dj%G2'0q'%:#d!%m1KIKܤބ RlKcxQW۽3'r- o+t (*(>/|E/ /0 ~0,BqAT,X`mD[ "~6U]poxVGٿ~־Z٭!A7D+{j< (i#S/&'\%G#d$dS  *Ѝ~ĺ]ʼ. AHYtÆȎXub|` ['x 93t5F6;ƭ48<#5,-4{s,_- c i٣*ˢ,|o0*1Æ-*/--*W$%:%    oCG($ %3(4{&f$N#f!B Xt)R  j(p% O,L':)+"#I{1R] f U8Ut E # m  (J~t| _c k+ ,!z\ L|)*7%M %"1Z 7`="vw=MPJ<dd^> sU8>I؟ֶכb,1dڧ9B5YbU"Y6<n {u fgݰۖ/(٭E6X>sG@@H7Rw*{amT$ m Y@ L5h7 y E :7~N]*`@ lJN&[##%c`+ ,-3+z!,#?M  u'4VI>/%j> %24&P$$ .z ) &" ## u J Z}TbT߇Kbr%]jݔ #$| w Qg DF   c U=: | nY-%*!,)'k0 l*%?#Y Q>?z;mL= =t :}79/"3 @! %O Q! SU7j_Z`Uo/i &+!'aڝ#f,$!כ]ׯWQ~gD-/S$XN951=ZNXcỶŪ\T~ vEunaqcr O$ [ TO  pwbBfF 8 $BYODԤ@F =0&xw ,=BONiiD* ( (d Ihx`L}IުxQ{L=A|W݊_&J10>&GFP <,r3]~j/}P ]Rm*4@ fF F+j-; ܤ )޴ ބMW aH' 7 M':N(,2-",A*%v  Lo$Lj?a6 * h tG  ($=8 r 55"@E Ed ;nz^]z   f%= % 41EA4'&#oM ,fXg@!` rQ1 $ #߸uAٿB 14·J͕ʂYĺ޼{q{כῂ>Ձ$ڝ0sGQAjC Y B`7! 5D Ow #t #H I >`=$xn "V v &z & ,ߑc="P7zk  OW5  PQ (ws'>-)@$$ #- 4iWF6w+-D}5ȡ3!۽O}d]Jm . i I L o y B` O D" , Io a ~.l&-&$/&-vQ*A,-O)Jq'0_{ " e=p+ߛMb4V!%>(>52 &5# c$|#$ %O"u  xFGPS8ؼ IWޘʂy? Ҕ`_P݁  *zzؕz+ڊ oռ IfCEcfu"+GP !VC $C$C )q #& F ? yPM _   FZ 1p! B"l%t)Bz&+. ,)'%%'&J$/% ##%@'s0)C)J$&(4j%Y%*a=p7d/[!NeZjyaMeDN/wDwQaF 5, s c  m F u  07 Y :O/ -gTar4mm_ i* e (+103128)/0C0G?^.F/s:343!/**){R+2%=%=q` f { k ] 2;Vc^O\߮{ `AL .$D^:K˿ζ#YzP·דgS}C <ݰ&ړ&'s"8G q SrI OI`H Q=:ΏGΙHһ ֢T^Ruge 9{/IIۄ6PͲ9%6Ș v]Ӫy/0,Tw*-976I;)6nM71$K.%Ge/wT (@ ؕ<Ι#"<-" m$Xm!0 Yi ,&@}g !T o  & 5 [s,<P Uj\d3 a3(GF NCO R iF- 9.ٙ$\8WM݁P'm$ ~ L& m #@'%w/i,-OA. % R(A$ )J % * & +? % & y z # / 1D BM&]'-j-1$~-n)U(%&AM"  :^=ZQY "U ,s+ >GH[d=2 x 2 #:F` QAhQ3/͕@z<̜ռ\Oζoړn ~'~z ־Wߛ5@4J˶':ד@سa 5.9=*] *i+  4a(i(!+, ; c} &VM U jD+!(!$%=!8.*5 +x&*kL  uD 8 Oz Eة>5 U*D(F0Y+ Dp7 d /p!U')^ 'a|(e8I; F   k Y | [> ~H|>ؕMA tp&UG/> *u}*bA0!2f+2D *( 0+-vi!!ruXD*7? \ m> o  #- . xGpv1=`i.{j] @4 qQPP`&+FnzZ { Q9O9u%M,BgH;610J,|@s _~f 1 ݨ|W"4 sŒԼ\ƒdZĉo fɮJ֬h!%#IS&J''z&S g)qO$ 21*`" > [K6$hJ^* J_}DUj Q , L@s 6@SNRt|@yݺ ["R#k * & '.S,%[&*^.,B.6=+0]B|$9I?3ܐ+R#aDdx'0 s1 5o; 5%mm} n 8 1Ԉٶ-D߮brhCf (  V   CLjNYᮜjcv3!y0n1TdA]2JkN!4+^96?r>gJD@9;1G0',$C:eB#!1>\ks PHFPT@ (Q3$V",%='0" a_ZzA ?` %G #$|035*X.ID*N"& e X   Ff TE1o|Ձ|@sI!ڧ=D ,P{MgM` c*hb}l%r2`X  6`CX'`` pOWu8Tܐ ;Mk;(̦%Gٶ47"' dN H 'D $& f  n gv&U(WY JЗؕgPj "F);/7P:::3 3+K+ $Z#'"vN3\eD;'D""^){&$/L'k"m!" y(   X+|1`f0]yBqD r ([ I+H66>>K<1?7 3;54,9,|s*"w`^ iN~׹9ۄHy]); EA,g/u I!  %#*2}(## X'   o%&"X%(|!B# / XtLE,hةc۪IRr]\;jܚ 7u i*y}]F2*" /@R( (qNO'wl Rօ#!ުf ~\  #; &"F~'0P"'"F"-l y(G-5(0aʂBuq󁼝 T6;nTzKjBnUM#J3H%37,I1N:_^:]>bn=b\@E[V8_)QZ([YMuJ ;0&qSjڹ v FԸYӎ N g V{oX~ #{ ).njPN! bciv'-@E,`  8PP > d  4j#%IGQm`yt6x2` 0 uPY+6 A^ _ 6% a ,A~KnGGwPv,9/ ?1 U $+x_,h)*(z$V @!|Z<  O, J H'!Gx& 2 (Z R16۳28JxGJXSM'TȘR-P~KkM>n;P0(, !%6%2te0>5f.+\1$j7xͩұO wMa3oцΙSO؟bڝ yc@ZKT4j'T  " e[k9a^O V&]?6  a  f  O ;Dh **YXKiiccw  c; M  YmY]+`FV(m h Tn dq~%* B4* ,'W"'W0 w"F v8 6mM5^! "s`Jzن9СkQg|;y- ~g&q,2 h8HC2H:SQRAMGf'A(+<%+@ mέwπbгf+=,j(wͼt֬uJy  % "#5 %=w*e'"/s''& H*%7 &F rx `-0O1   ugC$g! !&z%-#I 5E{  r F&%m &$].G*B)B$|CEcZEwYH`usmhdD & =F 4Tt czR$%_,y'XgE(h!5Zu`$:Yܭ Lڱ t> 1}Bjp?ul:u="@JC)'M78ʌ2'7%}/$C! >Q y?fZ"#u{IުQ~כղ؍x{fԤ׉׉]ڱ |8I(K6 uQ &!T$<]3,`)d7}rT?<.cR@h'L_lt|/y>+{4u_BسKњWR&x51Uڊ4w^POI ""*N.*X1$%3*N0%0G #5" (p~m Pxt\cJڧ#\u߮ghurh,stf ~!",hS,)J*$C.#,/1&,*)$#pA , 7Q ~ LJ Lk m  m |   ,d PD_-/n B ]<)VJ   &  5:D&P~Mˏ@^@ۄ @8#:0E֘ ٿ / a F  _n k\y,GVrɸ=YUǧT AƑʌ0F  D ] R6C1]G-?DYB@<0|.")we\*A UHQҊ[9xi _:  >nd> e  $$j$/&%'.&$8c)83P.<-b3n/8/_.f9)2'!V)^* '2"X6IY 12O/6N*ow@ W_'.I;%GlJ`K t \0&qA$7{^Q8"8 #F - M "g% Rܚ] aΙxHP (ge \11&q3DDNL>!hGp=O6A1gvI$ٶ72* !$C8 z9S=VDF 5Q! yVuY_\,%h'Z\+P/(4E. R'aiL _ # ?gz`!|y!a#ʞ$0*(I&ц!؍)ߑ/ E 0 #q |C=Ԯ0LfJcqeDZFO gYVrVT '3"@9aSd$Sޢzqu,8VDMޘf{7IO'!d  (40-BJ9N:BG>Zܷf` ʻ <Ș^]#Aٿ<ڊS9Щؕ (vBC*R *-x9o;mC(@C />4 ..  U  %] -czHì?ƣΣܚm ;8s |i#5$p2 0 -Oe1')(/W,+x,/M+?1(/ 96".!/ o%; Fg %GP#y2D`*3d,/12']eؕ79X{%a <%ުLڝ&2ة T/hl2   '&'# & !r!p Y D, 9&+TKV̦[Ԯ ؟mݞގ 6"#IO753><;* 676[ ]^5_2"{pG ] y6 #y 0/0+#/7 H1#5)%Y&%=$)q" 2$`JE jV .jpz@ӎ ݞF]J$$/#I%){)^4&(4P&$&/W&]"pE@7 ?i` \PqaDץn7^9{Vmq~D ; u5   U uz6 O:  a T 7#A !Q4%0/ ,;F Q551$9%D2{ o<D"i\u,/IWO0^&u߸޾ #f!Vݺhi& GJiRV-}]j>S2} Z  yȵ ʞȘ:^QͼrњbIpw֢-6+v B  ~ .*/C~-+(T( f#8B U*,Zncv^PcZ]|-+  ;9+ * *2N3*43Z/64T5X.\')/9$1S @-E^%c! s ol?EsT)&x(e X(e u*j&#{8L [ ng*v%P c)c[ѭ! ղ>!%$|%ܤ1ۖ*3>!0P5 e.f ,"[ #$}' < " \"NA Us4?! q W5y d ^N1Pd$@.ޘ9raߤ^:k|54} xp Qs$`11:V=' R7 GMD#: 2Ch*);(x=ҞI2 4I eG7'3k [& El C d  !K:1D3l y)P6#!  Y%'a),-Y2]2+R/9*(.,+)ofݨ"gM/ rQjJ"l#)h7h7A8 < 4%1,! f!8L x L y}  mfd'WS%+N)O/W..?*f&"~-YEi ) %jwIZݨY)":S6WFS  aF306,%=7%`65 . \, R# U - 1v` p/օ A Zt#n%D,/ o+30().:M*(9A @a$Ck B[>L;7C 7U .( O R yK~w%Y}-?;XR^1AO4̦kjJj |_& rT+mrrc xu o4Ձ(CuǔȘnCJD289RUʌ +iƛN ϧSN~|P` a^ i I N& {i+Z~=؃e؟RA1HOpa٣ u %C Q#+xZ/ 1S8l#7@kz"'o0Y[5$9@)B1]A2E.B3B'C 0;m.7_)C(4{*n## R[P x ' "VsObn k p&  O^ X!I\d _ e !| X")'0!%#0 "-v-u0*4##7%v/M 9o5> @XZA`JaAAc6nʞ/|$&S3QBN[{Ҁ9 l,#%K%= +%" o5 rl ! r kmޢ|fQʞTö1ȡJ6#!O^?w^KXm{ h`r^< СcBGXYު }~+ \ Q Q #    b m "gm Shm^p53 6A-PYP*/T QH5H r|6#<4t0#_WDlJޘ ߇mv|aX# uiE   G.'z(v* -&gIrT26m7Mv(]=Iܚ$9.ѤGB&-&A*2[+F@(")%=#!hn)86Uj  I ӾT ̉ uOͲNu""ޢ"A`d+Q3$yIe^D h L*A( > 5{ H "~_-5Z '0Iyj@'KSsBk:5H_,!hP`} Q ++2:g8EDIx"G*T(!M&$D"lB! 2'.1|! p =gm:Vus/,\/oA۽%*|+ ,,d dVKn|Kw c/~QBvy N  LY wGms0ic sK;\-j;?PC oI u-+<-#.f",L'/9,'D3 U6H7/i,$ 8pEO$^Sd`֬Ә^כ R z<ڊ-Օӡ ގzf+J !6$"66Y9"c?A5Dq>B?HCHbDI+=15*ih x#ׯ1&2~ߤj+N=-b+< 714T.61R3*.3P[' &!   v#s$ LKa|ms( |~g9 u@CPHtk% >)&w+H( +)+R )-))<%&Sm(|%S ~G՞c3I8}h??ړK xܷ #$[q /0/6:V2D%CH:j@ ::1JgogsK4{t1 (gR J o fy7 fL %* "")B*I!|8o   ")8%=':$`j , 6 k s  I#GPm e EmI k1ߤ5 1om/B*{bU , Ue7lgW]X&USEgyH # B I , Rj *%g YC '  , %7+n )J+*;M{7$jIn@  7 5p* @^J=7C`& t%4Y!I,+D3*70 ,V |./8./7M-r.p , ,-ˢKH)·Yǻr߸ϹVxu,e| R " h?j 1(_Y!ga:ۖͼ{[K)ُ(q#a6L    U Qj'*lS $F}͕/K ("l+nz+ ,|- _$3{#8 - Gk @61 <Ƚ^o ĉȎYQh}bȫ۽7~+0$  u9p4S*%]w:J  /c/= @rݺ%C{#<һ/3̦;ղݰ}݁tF Is r a 0 "m6]D Sh`a `|%y| 7vtbG_%Y e NBl9jV0]C%y/ JQ1X0 e 6 #Q (  ri~ 8QwC >J z>KgrfB5P"mP zG#IM,_ (#!B3 /s/C"3! ,> :Z>Q|83:_4<+*un ,G51-+fܷW/zG~V $G0 Uh <`+ He!rGdUz K16?O~H߮}( `&q A/v 7GgPEX*# Q t64lPZ }D`? ?YPUw`d;;g ZF  1F ~MpnA ^  5US$$$ivq^πՁ4۪    O  _W #f&'z*N I+RD&/'Wh $ji/7%O)## @ P d U Qh]] qd,-ގ a ܐ \/ IK l A  o ݔFJ~ o :S=V ;|gM 8{Qj%d4j^T_Q akPsXJV99$,/ ?&'').z/964%942'--b"N+=F] XoJL% ('s95#D?r+Gf+A,A/@+;2=`39667U412W//&* #f!h `U#_7 x6=m:M36n6-;[(!%5Q,\D8 ۳#XՋR̓2Z }ƣ~Ɉk+RU۠FA 6/ ;+! 58J7}CD,Ax>"6,%Y;Ah%}r|Dͩ9̜9ĉ왾EȽ9!_DSGT e| I9=   " # "< "F]X#}#=j!^w}uq`#c*s} Opdq#?F#)^)B+(>+{,],((4"!aKT3(d k=*$ZTU]{]BT!/2pi, L  #u  a |  _  FA @F7V O"P;QG# "#$CjUvPR0#Au Ap2]YR2% nCL;S!/$/$9.I$/%/$//!#%<R <SA Ym-VLڀ`֢Dղ_:AdڊV߇߮ RJg! I wM0 j  -,']iDiF#h)Jӎdۄ1|rO|޴@S|D 9P' i`:P5-Y+\:2 0YU5NK.3-&"b 67|Tvܭ3#뺗һ۪ǻS[UYC    g=PsP G:#f iK ^ ( QDz2mJunqi|m: s߇!`| E-'E !% !8k+ <zg Xz@J_ xdm`$ [ (24zfzAP]ulyj3HIj*dPo7qAx'A$|,i} O pt_F k_d[gZ4 K''#+ -0.z]&8#S>Ӵe y^ΣF0j٭\{A]/ '*X!13w2247209o-3;F+?8(e'W#*u" 030 n6  i!$!,$"l ,&IC ,W{!˿+ԜׯD}T^DF njU#@= 0 O;n|\ R8?4нKƣuݿ+۪Q5=xs[ & T =  | kPm"(p9d!W&~<4V=' Fm@;81y,]$`1  1`tX3CUXa llGۄSh ei @Z8~ uO B-3'Rn23"!.J[!$++ '& "`VRL S+ h=d8ُM֢khf<* y R &Z0ob>FP3 [9m<c43FP "U##'%vI !h yG$L&zg2 5!Z+""D^tzpT 2 6  <Q3 ;WcQ@ p Y3G Ve l m r: ~C O7c}z9VTSa@ԈzAڧ-Am@Dd@ ` G|s;M6-rY i  v GvN"#$.,,?3.7-)W$/'M&.** 4&#p;g{OFS}۽<ܷ < bg!80Q4QA+#+1&2} ,6%767C3q2k5E.p]3>%Y%!Lުz6.ؼ־ Ž4Z Oĺ} Ekq7Aی! & o'"vTDT#^ pDC-Z(A7jw/=GG~K&c oi Ij3zX Y_ A3  @ 7  5|I`(\Mywi!'3 |G/,v^d | * Op#sL5c9 r%dPf ,CT ۠ՕӪW f }Y*P3t Aǔ iQtFq7 C mW| Y [A f 5+om`%(*][?63 2  , .E m':m7$+Q-O1/5-)%"< Wx)(e #Z ~ : .96KpgS! UpdGSm߸]ن>KX7 qV ( 1 3> 657: w3Z(/:%}%2ޘq{`.:B4THƭ 5 pY!r;f#gM% &')$$|!~ ,hznSD /~*/ Dd3Sk}gNl!P0| wFp!C* p ;Ti x ? 1`G`' 2 2% yYiov6Uy #}& , 5c8l ;FV=j ,<#U:V5N0a)T #sx2  R0   2RrG ގq9pqAj =+JC}}ikh@s ~ I5V e|  b;'"*mscIOP o= @fD0 j ]T7 ? U F%g7 17xPj$ #   ,kGPqJ I` (B=p \ p |m6aHim:dY3J U ( gp`LE Z r ?X 9@U*%MOi C'j8F R!8  g M R#).., 11q3d0{/-&*'X" NZ%@MuKK  ~  f m7Zu 2O & ($a: 2 ^l?JI8 @YP9y, $nT  =Ve" !R"]!1d2F33 d{G;bE}DOP,`O AM Az/gs}  ^gCUiKJOD^ &ev<$l)+7,_,.D/C x/-E(]#f!&s,03E6c95;;c:7K6{1y-("I]K%9_-l ބeٙ- Hڝ$޴'**X'%N#v .Ak v  U 1-q9fOl S^!|wo- 6AZ~ /  #KuiUT 1(k0*2m/sss@S~9vY|we1gXb o## ><NW2ߛ. L]fmjcubR ed {$%'s'%%"vmp3 +(  @ z EA B  L !YmAz  J  TP@ 96'A-SA^vpm2 faVU[X= | '`v P0Y<;Z]g(Sxu$Gj9ޢ'Z'MTln$ oJ}, Jw l  k"l\*;J(s+':2&A 7y {jviD\9P eU C1  e)).+_*,)T/,' % $G$  <O,3JT  k( Eh6th#V9j2=p^JDhZ 5=1vb%  X "QPh`i}C RD iG%yj gV ֘"v^"Po""ˢLy 3  |  v gk^1@xP x bPTd d)t mz=-#M \m $Rt=ԤL]p(QV Z [`\N= U  FS'm &nl^~S mC6 Hwըq4~ˬέVztuiZa:Zm=I3ZG# ""! m#5!+o~ r5q7!km# "&#(Ghh!DyFw X Q :pY x= K^!r!$-,V:0 0G02:74TL2164 /s* ##RZ UD}Rړܚ|(^A"|+S1g 0w717!.?2a-gt #(**,Vr++(,|,9 -+"*2'U$!Ɉ  ͟f7D%ĺW\5sg xZjoYScp < /+0[0, 3 *P( 5|mf`ntCZwWh @)&  8 O7g<5Ftrh7y Hld>tH ~T8QlF ?rF*o Y@ y 8n k [_J|a>$& g&Ac^ &"l \Wx|(] % 0@IbpgK; tbu(8* f89ٙ*d 'v !M##'s"3 # x@^U)&<1g82.'sy!/o3 @T,,J,WS ~ c!a s!Lx#$C,2<8SCZFPO, QZXT UT S F MF=]:;Z[.U332f0mm0W5-;-*&$T){ JȽiN*&"J@)dg LZf[;m 8c4(+&:jQ* H m-/x O{=!`!! a  ayw 9 F|2Tdc3a#)3Hv37:V716;  6@1g 5/ 1@ )h } * ]"0 OA_3ݞ 8 EuϝDZ6ucʌŗړ"$NQ+j | )Jx,5t5b5t696~1='a") e!$#)+Q/.0mҧ)^ƒ <rȺ DF ,$³޴2ބxyӾ^oF &jhyJ\ $t # 3F-)"/W)h6 Dtv  UvIVd-xKJ:j`20=r I sm-=X KG5-;<SD-}9 Gfs:s>^u, ,X x+ m xz1; X,{M{s{pGL; ]6 2^H# [ zW'# r#Q% 4&A'% {"" \&(*&) +\ ){"X)7 eњw֬'F?YY~&m;G@" "$3,'=1.0*0+n4#6e:V;4-EB%GqE:/J7UE]BM=.#. d"P V&@P &3 CZM*g:d5 R% \j/% :e=P݊5&rX ӄWЄEJiHE yV<]P" +!L-;#4 (d U8=a  P kSx)#5.I-O*& (1q)q !8 F@kv !! *;0 25(6$/7/'}5$12D/&)'2*6+$3  z  1 Xo72)| "OgpSO,g+*bAbjQgO6%Ah 1  Ah'Xg~p 5'*'Z$|w## _ #W+e #f0m%2/+mgY\>45m] r=GZt!   # p^%O@)^/ru/ʞ$ҀҔ$4U]S ˬ09?ʂK:e ~9Lx 7 Q"$`;6R1?75E/9)" p FJ' :).-O*|*X Ab[]7t77 d" ! $"4#%UvT iQɒggWߛf͌tƛ ߷?#-%T//~8(74ݨ5&JB- ) $&&/s [NP&7J\a& F_C(m5yK-\ Oso%`,_0G-6H7851] x)$M"!h ou# &4-/&4,5b=!;K<6/)J@'7f|  uL @Kq"t(&S 1)j$' &0!,,V %T$ 03m%=D"l0X[5 " pFZ o>V IxnQJQHߤ~Vf 8 ogniJ`g   U 2}t U UE}6sT T ` j Z^m T @ߛz;ݞBL$ U 1ML0Er|vmx` B3 ad7<"*/  34F&I"X&ߑ$;1j 7Tmw 8pJS,;d{%`"\\@ȫö>Qѷ~r* K > y&|# + (* #)/)?'FX!/Y/mc/a q_T``Ql FR96ی* ٶg79O݁D!ѐϧ{6 Ԥӎz <p'){)W's}+d%)#I%I"< b R'dw _ASd,mބ_/׹Ձ[}Yljmj)aG?alӪvp+6{c[ 5a Of VAa'* oV&gs K 1 tLL}= (< q :4zj3D? JJ9s USK: /_PQ*yw?4yC=K+p޴zhW·z߳+u.! (2|*AHњjI"+b*A00I/S6a172t4h40u)&"S!n f " cLfl! "&&A&A+nֶ-1$π6J6:Ջ8I/݊2+43Z'TOC  ~/  ^ rWC # *2 (3H ;F1M]Ng^W jH*[NUU=y5'ì#?#& ɮ~Ԯh:W#@> ӡ?I ؕg a6 U @@G K!L().g+04,5;o0;4ӄ6׹5;Ձ.,I0>#s|M>p_5D݁]՞ұgΙh栶4|$\+๓ "Ʒj&&wj{qj##4/7([ )x!$ y"fvf)~ 2Fٙ۽ m^RcH##)ϝ@J% ts;PW)"(4{9,L?8D,h#-# *{T#F'*C/C[8l4.G.IS+ڝ!%G]|up`z8{ɸa$Ù ! ]dF$S S! 4&N2aLJI.)0 \ ' y & y'g")K(e+d#0 H2a'5+8/984:353605;&0='#->!Z! _Mmu@ % R 2 Eؼ ;@ a = & @?v js @  ! &-E14{?^aDITSaVNQvD" <* #]jYכd$YD?6I+@ǁNJcGiRP > (&a)^#-65 "X&J\!/[#N#m v COގp?qYPTZ>[N˅D0+ɛFˢmYJlsxZNܤ^[f]!h+* --6/J,% E&% _ k 1l j  { (! y > H!8"l"b' f%=2  !U5n `  ## dU4^@**7n?i98س m^ U   ' uz'n'  o&$ RC#$C)' {$C(&$& * 3 06x:11A42,U&gq!!7)^5j<JN<au0Y iZ W WKM_g21@m)G-3nJ>ܤsp.8ѭ5 Gy3IG ).!B -wv a "[ W @67ܐAӎwlپ;vfK\֬K1;L:PXY ){ Q   ZUINdY-7=vS>M:XYM#{=ܭݨ0WSwLNZ ? y -;) 1@([   oUUV%9FѲ , ~a C[HT  X[ 7*P/06i68v=4h *(G'W < M/Nu^M ` { 5ѐ \$#yyV1כ/۽ o @A$/59H~HMC`HA9FB8<P5F8)#5G3".+*X""*"e19Ը~B#Ә Gsބmw U  >"]"lP!I%Q(%c  2}V o |5'0z- k]]'F!mj%݊\n*J:NPuޢ19b,,  -  iRN$P83۽AFWω˘KĝŒ?=P c 0Pì9ʔɸZȎ=@4afH)] ; I .rJO j[ ## %6&d)q/Y,|O+d|*!1@0-4+*XS"vMq54HfӘ LVzP]~AhE'&Z!$Tm Z@%$02O;F=t96B?䲍EEBHjH`sKyEs< 6nt"XK#KUM Xp , Ip4U%~2=ڀL݊Ab+pbtf25qlOozr X9 E{ R#,V&F'k&-3 /&= 5z,|)^N( Qζ$`~1݁־M\""' Fwd cW>  & ,8P[g+g-Y>>%G=jH,Dy> N(AA5T9,3nR/~&J" Ga 7So~<=Є7Oilۄ~⥩&|uO\Ձn0HG"[;-AiK9 '*"T2S/OwU 4$ ϓs h6s:Aׯ+ fK+^ m 3 (Q %c=* &/!`/&-(m%3 )&*S'M-'k e&A%X!%* )h @!/ 5 O o (mN%`;ΣȎ 2k ˶/tEdVzf R&?E "=M68FV]Il -6ϰ[  h <a ,'Ԉכr]3vguUzZ# $*;<- :> >Q 6HW:!6"F2N%v*&&A,2V<UjVke?]AIc|UAmXmGJ; .SA6MY޾֘T#(Huo~ʻQaԜ2i: "  <,I c@ukF1RιYklk1oUϓMЍ34i,y}2Bwf 9#y/!CKLg^ q "- ?< c . ~+cQ|E K_'D 5"<!ts )o$yovcN-|>mE -$+<6=8#48^7*Yz@J @ޘvA> d x=G"#  "- (U"S  )m!/Azc  a 5a % ϰ 6%)%+n7_?N/Q TQXXW .K N OR H =` I8 *=%= e e3$j3 wzcE 6~i Z #D j |$9#!&%=]r U M (ljp}r:xyڹדٶJ- cp] k FN <)H " {@ZX   &(1] -5Xe.9(!# /Vo$/<! ! i$C S|lkKXܷ^=ͩtZ}ªF/ " E k V X%  F }j>] ` $l 70w 5`1/ & O LzEZrD–9_ նr[Ιד vŪXƣr LLP="*D)$1+(w,#2  @UD[[ [JGq XQKyj1"%c~0; |@ IބJ WדOHMtB7Ѥ2D/#I > 7+M,z o ٣ @E o س a  I Di|D <#!&w' T,9%GIpYs*Bͩf맯g߮?)vīfc^닺ĺ@Ū16eNҊ&(ۖ0"2,o3Z5;4%/ 0+1g#9o >7t54+n()##R cy_ UKڊͼo}{4;Hm] ( cs(`ZX)^)-/"7/%Y4J&<&z2a%!!% jOp=d   x1d&]%B-'&Ϲכ!  8!%G&# -m dh  F k[ ]jmr 3rIֶ7=ϧՁ~1 f tbv K ID, H9  ok$, y;H&b+vMQ2@ H i% U' u% k?^5 R r{~3P mqޘ@$[ߑބ+Nq^ fqAF [3O2RnjDf`Y~$OlKoMը&L.&ު  F݊w]'$9-O'k*!U=)Ddrc  L{7h2Q0P2G Ja\ `{?\gT!U8K~H:7!B-4[Aˏ$– F؍N%H O,cd##'k !V$9) e#M`j Cgngs ^g`  Ʒ((Ș ՞Xj+6,L!C =l9 "(&$*#W Xr6CU2rO&7(Q X '~/ o e* %%M$"E#p'$' "٭9tl1hti6~Hf b*@ ?dd* 2[$ ~  &- Az8 "bP#  N*f Yw ڧنݨ&y'Y 8apc!)-Y{5?@D-JqGpHBC<8O8,L"lގ ޘד@|؃BBܷ/y#/۠8c3KYImUmP9 Uk ~ @(Q'DQ+!2}%0Y 59/P%!| UnAQ D%hQ1> -2oTuH_ 'y&\ Dvl(#\j 5 !%"Ng-Z3g b 0o:Q0 &.?0h7%5w0Y'^(!!$V'W%O#y"XW HaRFpf .   c iw nd2n ecP_E < o^=ՁQ۪ $sݞ& AU}, Ҋ O٣j h۪QI0 "  e p@%%'W&$qm  Cw -M?d?$S]|QBkCj_]EqpT ->#yz M R4% *nj v4g4BA<-B093(v+g۳ߑСHOῩ+V䆵h״2-A {L  ~ XK m 2 u ($&*K+-027_8 89";c&6e Y5 ,Fj)#*} r Ft %Ԉo`U9D8T&/L _O 8X$9Q.f.*~,|3*b ( U(Q "# (7}jm=1@ɮ^K3jU1QPo~;JMf#H&_gj9.WJ_~|* #M  yU c C V# y$] 2e 8 @- 2֏۪h۳A(D h ,  . o =( x x`  =57  us   "3J(! I$ *""!-[do 5 : $z#ة8ը |Q1|1 N  k~q  = s +!V&+!/O488:/4hC,L|%*! _]>^VIF*8$o#̓bfʔwȄA ^6@ݔ vP  ; # `;ZJs fs mI Lv#n4S/NJULE6d@80:{C߇Ko|C |DiL2 L':23H?z o;K;<>~:03 1'!/ݺ  >׉jɒ򤺾FVR<'+* U kc5|%%-bY04T415b>?A; :C.|#y[m#s$h ُϝIdJMЄЍFW7bVT6ة W c/QQD{ !V#-O+4h[,(!I`'I'm8j)si [ ( ( uA #@roo;T$g[  ^ _ :3!<3Z22-)B+H)x(&q*a "3O !3_  ) o~0` ֬ ٭P44w*Qz{TV$+R ~q Tc *7U AD=53`1%_\ ʞ'(һ 27J( Urc^ ~1mWs&jQ , 5j^EOyn " Q2&0g8)7A";4I7P2)$ $7]# f,=`#Gܐ@-Z"m,rߑ/&%+ %8 ~uo p  *;$A6K)N 5 F/I>ܭܚfD~Lڹ:)KcFr O: LπtZ!$Mн$ӡ#~I ^ ] $~!12=C<,>"A ='(S79D G*f >EJ'$%/|16:06.l) (u;[Q,0|;>QIKWDy84TE&J"P i~   Z x&ͩҊ{e`*>݁*& IvB ގ=jޘ8/ռ0'+w&]rD) Gx +"T$UnJ>fsmK }jS@f 5!lQ"u#P% /,51t152:)+*H>Ss/߮DdP^: ˶ #Y37|L/lYj_&~T'0 <2T82_6;<c;PD6e/| *V&q   ~[@i-Fۄ+ץ8ѐ$ ǻ/tj.N 1 ,N kJ~߇y%_t !l!V&41B8-57 ( =  @XU*h+; gTxu&P0{Pi W/$)!h*;!V-##+"%O<$|;Q- Bzp+|Ia [4 @#aKY:Ħ(0s L{K , 2^T&1PODjY~:qIsܭJߤU~SE? L %*,L=. 5~7 73-3 , o$a  p6:ު/a3ͩ|`j]6 EYQ@ /~_.e YydM,D; T[d(f{'3!/K $/3#y:(!r#y F! AWbbߤ ]& 9+!-o;m8)5;5l.,a)6#}7tD* yc I "b \%2 s m֢C2ٿ9ϓul4GEF?Hb KEY3ik4l۠@dAN9j} |}%O")U#"%c'-) ,h#$օ&9 y #S^ owP 'g8!],d+/91632}#2){a8 " *#p.(,BC*\(W%*_ gX2 < E&D%`"m6*~ + (_ `f  ,+>~,MwFhq*-؟{ (#Y;Z  &TY )KZYcD*pB+T/*9)NHCM IHX|41J4   n<Tg _ L7 8  =Aw!(F>۳6Oұt~q+ x^CP-(- /!%/s,-(4-v7,LQ*I##R yQZ N2[M PLG*3:sH*ׯӄ$cxಿϧhղۖ~t)P%& @ y*_4,  6 Q:C0 LV !!NU t[ 8н2!,SU#^mYFR İ $F,916Ƈ>K>Q G^سD4G#C*;p=:56?2N2k x,V , f.I+/,-bJ+-,/%%*,]]&%3.,&7+$`,##-$,"+$(eG&$@%*(.-Y,i,L)8t((#/bmG = !{[ #uG  kZ$;"lwj | ,~ |7YA^5aO+{C<O %/ | F %sf0i9/!  A@PD0y^I]*; N 1 a  F <G m ,L 6 g k  }Nwf޴F wck^̓\^CadL j" 6nm6<@kI!KXOZIB-E*) SSKr֏9ϰ;o<^ ,tZ  z{HZ=s _u /;L&~$$'$'}%YD!  "} Z9&DRV++gO<iiB &xߑLU3-,|T/ G^=B%^<6u1g" /9!8$ &- 5'W &g% -")U7 Un"M|~EPlD {m `m:mQ Kvp@AKXm"  diylIUF=% I [ I8;U 5   \ P' {Q7T 4JQ 1#?~nC&g!;Oq u xm=m a" 5t5 8)߮@ r=ڀ=t݊=>:m4A/*-$0G/ &L @ 8OM1ڱRُl1cH9!˅^͕k|ޢ4\MV!c?- Z #$  #4{/Cc.)(qF̰cvƑ(ϓTǔc!˶ՁRС"ڹ|@'fׯ( .V{ oc p B<ng?&7,! " )J 5%m F R J (T  ?K k/' Lץ 4ݺ A;X,&q}+A).)A%1*] ;1:Z^|AUiߤRb^F( ڧMݨvxj #w   g )8 - o6e 6 22/9&3n(4q\4A57fGC T 5{ |I 6݁٭kd F(t:+Ńt͕f4֏ClP>:A*4XMW\N P~J(e$j 5(#I&Ԉg5(؟gכ۠t` 6,u S F byn۪ߑ&Bd gDUW!d{ [d  n^#LV%Y&-)V,r+?;1+ 51)^o"m3+ !^/ݔ~+ ]4vmpұ3o_P{Lޘ4MfQ m @ nA .VJ I NS@ISahLKըEW%y؟c&C:x\-|+\ 37M$ % (-,B15C4904,1g/26,r5-v4$5t9s8n>x}; u@ >D/`  0jfPM5B[ @kZ[0yqg"QA 9Bゾ ì݁ Jm  6z  )Qp X!LCZ E)N o 2A c X f (  u e4'}N^! &+xWt' %+(4(>T' ( % ' '%m'~tU <'=2 h R[jQg={aCg \ hx9 U$03 5E>96^;c:4/9("vID i@)6s9a]GJ##qܭ<% ; hp P 1 :SduH\ѷ+@jnˢW˅i8:! ^Rp!Ml_{BR@UIC @ Z!$ O75&0 |8)2^1-, "&(&_#! A & U*f%Dc, / `k^U  "3!Am#\#2*!)*(!!G`#"5~ U<X ? {Icn }dGd X Xcdg}^{]K97wN2o,C ~&=  1 - jzL4XSq^^ b /b/cP +  V]ZWن%ړ#_sr^GZ ~*a \w#[$ن,^(4''"v# H Hv  f%mp6}% 7P(7-]w-5 #:a 9s9f@`"P#+,<9y>ѐ<;W5њ3u=D00($ADC p [D7|+ P(/Jd @ M9b-wU"X %Y +R *#3n%/W(+d(),%'M$*Du# "Y@} @} K ( ބ T Mrͩ L߇PZ a4 IK af$/UAG_  gJ0 * rP o4s} ( , c   FC= ; x  k k5 6A)y? mL iKlS9>_hMEvS^d*Y:( IU x nt4#(Q&&+','a)$j)^'$/#y!|ad O70Sgl2WnԮ  {Cބ"<#-%v9&q+'&J ##"#-.!)&!+)A% (=i_mZ &8mi),:ZbvHj O^ !")J , -,- ,%`j\)m  |^  = ܤj6vqB|| : F~ OAdy>{G^zY"lXc,'T93ݰB@]^@=n   6D ~ FD26 /00 8 x/W1S':7! & (%SQyqry:}6Yns- +"cBV/J{6 Y!sf%# |~&$ )  5gV$@x6K %ۖoB[p9 T s E([,9g=AI (CI5 F OM_ @ L4KkzOGTE6#  u')j{QyujP>  OX Zd V 0^(LT|z Z G!/$"lՁԮ֬fw k lj/  '!)&]*%*Vt@ YE6Ao]o6vLUi~,]%9 ,0LLViS  ~S ة2؃r5d \!3"< % >jL[' 8T~H6  &{7jՕ|U9߇) Gz.g,l( /DJ #T "v I!(*K%)&q% "8 # Mنkׯfd ; (+nnRQ8lm;4dGP>  2:Y|+/JWJU^7wL1|"=|Y'kw>uniC7]X]=3   ksX%Rx/)  R- F6^eU_y - s  BG k7 ow o|/ D- >=(e#"|S']ٙωDѭ/ޘW7 gPVfN*I @#F޴؟ҞҔϹ-٭-@A= 2]ޢ ݞ#۠~L1ڧ1P`DY1RNJ@ˏ4Ҋg/V"jd B+B! ]d% `e "-% Re#I#j6,*BH_  Us$C=2,,Ucܚ(ޢ!%v&JA)hg's)!'($#S &!B ~( <,mK4  ?_KpF0ߛx*\;>h  u=\]i2l۠d =P]*\0c j O(*, 565!7@8l2!4./WJ&z$ Er$7 #mR ] b F (P K <0!"$]%Q$!BIV[n >-p(*61h?K6ܷ4q1@Q)q%=Omw݁6یץzaʲD<ö̓}̒TjV  m u ?a ,QLQ ##J"(Q /1IS(_OG?j r  &Jry*Ow,osF@2:hPo6 cCyQ*ڱ]QV YdK %v &!Z 8 R \NV o`Qy|&G NIYFs^M#$ , [/ aw ;ܭ!V" ]"X >;"{rm~ R(1j) [A F r3 X?"ҧ944؟k9h `!  7d$ z  a U E FXiU_aK Uwu f ߤ G XD1Ձj [ @ ^%'M,2p1$g'* (e8n  : "h  F m%!,$%7/**$ )}qxj^ K7یռoyˬRtNj־f=&g&IG, d mhon r #z 2# qQq D9>VM, ,E 5  ['EP%T?f`ssڹbՋڝo7 n xn&  <"2dj6&{ܐד^2xZ ߺ xT I' Dgכ #F*-E24#::M4hv96::9s;99"g4{Y-+d$$&  k . a,r k(w 3> u,_* t)8<=~XK/ 3 ud Z=,2 * uy ] 16+FC}%: u OXh&--E2(&Uٿ\۪IU8Sߛ-VAh^_ t0 `cK_/^*ӡdh̰ˏ͟}dXHf0 ;PMmA E~KW jFQN;x;QpҀPkLЍ:Lѐ5ڊS2x~-ҧzz X/Q#- 'M,V ). ~,|!B&A)q&A)6!H&| Y} Zg B-s@CLQ" ; u;]CgE2JXMXM\3IJ$^!S1aYg "#I$%%#.##5*"$ $[!h~ , &jrގ]#yޢ~M> O&q ! o 0 L m Rn J/@ PJ Vi Rj rmk/+޴Urz׹ڧM/  aD'VEV" &$M92 " &'7C"l48'CY"8#4-R7  ((S I[ }d/pܤ jz@Xj x VkQjFQұ_#[!|"-.p- /30-Ys%%d2 7WQ Ͳ@ʞ ߾Z% aS A%BN?PtwFLUq0gK`"os 1T R" #f -377| $(e,9-K/6!ۖ2ߑ.So+xl&4%i!? i\d xyT#hSz6=.fS1)34{ߑ*X14%$5F4A3a3/ *N!/csAaF ~ Q0 a`% &7^yZ^"#)%m&qyg}6Y &ҊbnI ڀVHp?P# kbN p f3# k u,KL$|g&Sp+\+Z+$)  %F6~hsFTO9BѤ{v(6Z3s&'20e4%16&5%5r53n/9$" %O';\ ZY@zBgDy G  ߇jD[ߛ(5"F~r(prPj6 %5y-G `V(_/ 5D  Qj ,(:9[@ /gK<޾+5Fs !| s "#Il/1:_N72-2x*@)h&rP I[sz[$!B"g)_)hb)^!/ռ)8l+2kD93n.\O- / ( c" "yMZ;`y''- *Si;*D #yV( 5|"%-$1?5No6x9e8<722a 6+R")3'mz+VxC ߳SJ ɮ}#BNųͩ"e,{A; n-_ζcb۪q ۪jog !/#p$+ w_ &4 ZAMg:Cmn*D-?E OP=6gKNd!8H \wKp/ l=_  5[c :yNc*s&' 3 0  u y OU|DCsՁAti|I BQd-'~Kva"G2"']>a 28ٶm G< O  DMdfH3#S-)B \ bj#>G H`  AlZ!^$/-,r,h+H2k <(> y   i ;  r LUvPӴ^ ѐʻtՁղ9m >"b .#^  #'  5[{_ !a%>Lۄ<*E#IیS: ܤB]Ѝ':d3Wc!r $yVM <^Ji4!%=)y+52t7/1.|,VJ+',&Q*b%c(Sjq3 >`Xo#7{ՋK Tj@CߤO%=b*2(H-(e"&4 , ]?̜%̸2tz3! >xi;Ps8v26+ʔ,r)^^I /m ߇ W_IϹdϰ|w !,@!h&g1v@~sBJ Gp OyEi/'TE ViN#VGV#[u * e aN@ Ig!7!m!%2' s$<&B&H}' 3|.()t! t q Bd@`firhU |ʔ ~ o1 ;uX]؍o YPZ Y # !*bA2NAe?%CA+!< 6 2t'){)*bJ"FP"<](!"!/* U{6 qoqp\J98օr\/[Օa4.ǝWen`QjW 2JѤ #jhUp& 5'%( %j8=!B ,'&D'Mbt:J YPXX*R }+T[ wd@^vD # yh4 #C' s*2a#2/9_-)(4) o'-"l "P ;  0sJO+\/S>M)׹L X!܇u.\޴,h5/i'0%,F}- UzBQ5? eݺ @֘TMMM[|-t7 Etn %&$'0G"3"D#] O: Ԯ V# 5 ) ,. R4 J  `D&x(-+  =t'w.Y$ um]AofЄO͟Vŗbu_- 5ةqJ! 1U~'$%P z "&-J& -Y)^))'@Ū$i -m09ɴetƣeX%w+IyN/|,9S 4Tu-;+$ (0 2 4O9e8c=@A 8B/?z < ?:04{2 R**8v+ )oR۠F7 h b 3>{X& "&#-((''}%%$!$/#O(!07'#)qj^cd/ +T  \] x 0@ H- S^0N(g9siŽN(aӄ;$Ώ#"v{((>$ $fDS_@ UY;BYFo  M'd}6{1/X@zfS2^_ OC *  ( y{ y)az# # Q& !LnS. I0G|} I.I]^  Q1W!N*ö%m1Sכ3n.I 2}/|*D+/#<-E UU WRS%Cy?0P+5;jg wVx WӾҊ7 1L\ E\ \ LM OZ s#/ag5 c Q3 / T RSY3{^av, T{{`] h+dD{G~qOsݞ~wn #8 ~{[(['k+d a)  &#S'uEKpW]|PQ PIu % 4^(3O= f81$7q0wP'$//~ 5%7j*A7 6pAn.(>3(wd,%,.*!U}usm d{5/G`כ` ʞBZͼY'Ny-) Ef 7g&~ zu vH=Z yd YFa [3 ] , `6,pq_^O-3/XJ*SA  *3m*&j': 0 [)t%m"XqJ 1:S 9H  | 7|W]v l&rpMVj^lLUQ `sh >g$& g$/!%*C!F{d'W a ,!sx۽c]AƷĦƒ+A Vã`̦f[w4TxF/ +u65FPzEB! SaN$CO#fL)C#@773nU-$% a /2fBt MP] , m~  "[z$C= `FD0  ?:A ,}$ iCG\-z\ON3`xP-Z(. ,$/ ' '@#p$i xQzyݔ`us@\ ߤ,ݔo4#[O7Y\?frd8m "0 .,,4.4.^3s3no+.o+($!J$B i*Z,4C"$Kҧ6cJd$*F%@T4.::[T/Yqeph]7[rK= 0v%*_u(З(e(η+5~/H0P-5.H':#@ ENJݔ FTЍղ־Z D"Xp,; <-BBPAQ;!/1$//9+-O$ +.!+[+(',|!$$ o oZJ :fd-z 4Ιj| 2&  ~ _#Ix:2 \T}w3&<$&h+qS3VWR k^a٣2[lz$'2ӄp՞u-כۖ ^-AWwߛުE)6c;sJ/xmg0T0`z2PhzAD<Y ;ݰ%ݺ*b/|4^0 982:2W%$  Cz% ,g/?u)%mF | _ 3&)$-;p.S +/0^0H,28)k86_85XQ.,  ! ~7ymWH  ~]7AM h8pd.9ǝζǧ:i e  _@ $Mg##Du"L  {g[|3gF,6z[C \nƣ e '峸Lj dd2gENg fQ m9Wdv7Z8F kF^ ;yj"X#.)!gƑͲO2Щܷ{<7 l&5O_=) &.{! {,(>&,m$ >EsD);x8NtߤfռVj׉MQ8O S : x bb1D U \$:0t#I'}g]  Z#I& -486/C/9//,(*2~,h*AjqN27ā,OW Z WfN׹p]N ,YGY  ;D -#q"X #f" ([ k7 D ` Uj@^UII8 g r |\[~?3gYd: $/.9158l;*=D>4:y31y%zS <*p;ҧԈVة޾6-޴ `= 59Vi]S I  AZgGp (m" %F y!!/ #4 (^6uF uvHo ^/\ OZ?K9 Xp\z' I);Z5%;4 5 * + "3sK` X`` [2?SޢVY7 0 !d`#`I"6.mn#  $#"XS&h'0)S)!,1}/u,*&6,_!uh~;M uD vo2/-Hb:5+;s, Q  Fn k};cbS_~x@}$w`'R;(o euFA?!"bQ "SL({ T!"7%6F@1992*Xm*(Ƚ ZLcPܭco _i,r~F |K~\`a;d;jw^ppeIn n,jH3wf3H=}RQ5t#800y&ߤ&2u W' FI ^^DDٷǔ2kh6D`U؃!E%i.S֘0Yo5ӄ6ץ4Σ0֢-bԜ+ٿ!L \TLDt qԜd+ʞ}ŪڝXɈ%I]dgNLT \,!o 0''1`- ;.*b$C4!^$1S&)0#  wDV kO 2V0&b 3 o 7 u) Fx xG`O#Ss'0='؍&*/s1J4T48;3/*"Ps!%y-Ff c@,-OB>AHqEA>ޢ/0$*9^M j O~P# yz3L&K 3P  E R}Z&x=6  !B+"|#!B ps4'u"./U +Q R k u.0 I O#M=7 I 5SJ^ Y U"#q((.f 59!^BaAx H@8E 1]f`_ I\ߛ{ٶMȎ䭻N檾N! #5}EPU- yz"+?u*S4^!-([&u<p8` "lW2w iN8c߇|,XKFlz꾛՞-2T.0);D&]H)^>ZY<G@Cn< 7d4. ~P. IaF@?jpXd; F7w  <-:+ej@5 یJٿ/ ~ G̓$ #U v&'3 "#* @ @iBFHD[5 H2!r[#{%v (J,| -/b112 1gh-,?!"lHɿ=U>CK F'&")5*6/W6/M=`+d:44{+5b&$1!B38l203*;u&$+Q ~do+BHl[E3P3Օ&9%"$#!D}t  -jD!!/$|-ݰ/ ٙ/̓3/ų*'M oͼ{ގ VODn  8^wvM[yԜDը8Ɉwzbڧ+_R!P$7 $=&S %$~$/+d###mR  #t  n ]8!ގ{:O`~kۄɒCȵ|ʂɸPг۳m&Z<&V: JDA//<=*HAGQ?I>1:7b#\Ph 2 F=wζi *NQYɮ|־ 1CQ' !,?5/ '+4.79S:i|2D411]) .*2."6!7!D@t < G> ?E 9 (%3*g9D'6T JB><7B/i4T) xau? 1"C" _dxꬳtZɯz3mA{Y޾4f8b? ki LC xq# '"""@K5, `w?UD8q׉ӪȎϝɈ/Ώ¼zQٙ!m2|  1V# f .P1@)~>K^ cozJ,J'!/+%=p&7#?IcW] P0phn/' !L3!$&&g[%G$mD # QpWbݰ."H~_K&JȎ/&Q8@~zEBˢ>έ:&3!@   %jY9^5ބfAW6  u@ЗU՞;DYnd 8S&I'= @\aVC!-UO5 o d;#,9/=}?&KUI[C A? *kP0.0,Lp(4Qs` 2UtM78c, U% ([A*6F7i; 6;c=`J^BD6CY>Q=3F-b!8 ! r-@Gk/ӡzNFWϝF.:>(e$@&@Cm 8Q  f  #/-  mdd o 6 To;W,Iכ{כN\LFm*qP9>٣D(;'(w RWkXwQ'T(Ae6d@E92a .!^F o+6ד wٙeݰ <Dޢ f۪Sg1g).p,%* - (.+#$(*Q pNwp!DcG ݺ4 ur*H-23E51,%+R"f~%&6Ft{ȫ쿾~5ƛj4:vn (/2 f.0E>QG;c6^=C2a=:<#7:j5r4.0T'&{ !Svߛ?ד ML D:q_~4=Ձ[+ߛ {Y^*S]'hzj< Pu/[3%=?&zB%%B*kF+dDf,FP.6?h4=`24,00!82V8> ;;\=ωB>I8075E/sKX=ĝ a |5#.z*P/-!&-$'M4q!h1. 6>3) .I(w#pG/zd>("^Y+'A.H.In7%E4H1D3 Gz(FF.zD6+RJ*D?z-!-l"v! = P@7WϧJ9"A FYjeh7n/ ׯܭ٭@Rm#rG"gC&M m*m @>C3:ؼ[7K̜NJPd2P@#IhL [@s'$V="!VM a kQ 3v|wHu{cy H;ivQ#ؕ ,۠-M(w' $ 5  U oP .e $|##,~7;cO-KYRMHG>4Z81J%& 6> JͼT߮8۪ɸMZ/=֏RE{o++JDN.#09(7 9FB<8-# oC g5qaӄ-B H#Zϧ̸ܚٷ휳˶3䭆 ˷Tg #d xlO d]m4w6{s[A D #, jYg-4WI,t bwJNr Wuv a)8'W'M'W$6&)+/6 7G7&8c%=>d58l00,/--!)%%$/"""&x#fn P2;/XR2wui6`RC&rxU!FlR r8+ @ Ū O ,w]Y pZFI',,P$## ۽/ / )Tf I7yUFEfu2yFkIj^ y)fT  ^q@ 6fi rP 41S@<[=V=VT>n>|6d9o>G65-)O;[օRG:K A7 f e,.>;ccCC?܇8<2W/&~+d9',$.  z7DדS=Y C] S d- RB  IL ==njd $`  \A%m ,kN#kN!Kc!| a Yq ;c2MB dD@q}  c R G 2  M^p  m 7 RYXwb7bP` Q}90hb3]4Li @,{xsFgCݺ:ة q=vsc|߇?U%=O(2D;COE0GI5Q3n <Q2uM!zgp~=tb u&0vrT"' 16_ /0,}40=2:(+x -!8 j;"f$  !$  % #y/s")J ,!%  &M  oB o PfYC^f b- l%< \a"&4"33H"<"; =;P 60*p-!L,'DA.z"X`" 2Jo1ڧEm#7 ̸ZӪ-q尿QdȿHi E:8b_v@*m% \UZY"j   LM  XmӴ]-}X ā?<ɛ! # *(7%G@}~MH#} h' ;z: {0]% G' *'61-bX,(e Y#-  iA - .t* 14.z+?,'DA u 2~ s y,xa"~PZ>Q=P~M&z5?NPZI2WdPLNv> e>4 /* =(ׯ+ڀ[w.7yQxQSɸ !כةG;*ZL)h i*u3w[1$:+=-Y2$'D'y%&Ja" F$t=DJ7*i(^_S* . =AO(fnZ^e 7 %>+9D;c -.p% &$8u ,*, 0/-,B*ݨ%vة&ۼi.*1 2dc O: od3UT5   "UX%v&--l)^ ,$jg)8|#-ts4G ' D`~$S }&9W_Gbg ( Le!y"(Q'0#S#%'W%'#$/U}; E7D= rc%$ 9 u+&dͩ֘R,p`ݔ2#[)WՁ#P= OYjo O s ;5P fK!Gs   X & _=DS݊8e#AJ#bޘJ% W P @=C_I+QG9 , 5^`_A4P[n2_$@d-ɮ&x3 otuqgjp^ U]U "!'&)!&J"P ;U&#Wɳ|(ϬxOd'j%yh$| Y  A[vI; $/'s$(Q$0Y(.,4*D1)2)3Z(*2%5,60 %v %v ; e [  . f-Sp޾o=wBY0[f2 T EZh6wҀ"̜- iNທGǻЗ+bVKjj*Qn  6 h ] $Q q8{DW݊*C9 `2-@)-ٙG">fbN: x eUO% i-Wd# ~@M Dr4)Ӿϝٿ]YcitoY ~ S [Ppc[ :  ' mz+J*uUJVYGXz m%PG! +5xp# a g,^.:/W 9I 8)?;8vv4('k'5  5u֏srMe3+Ԓ @ Yh  89+E"0a&WC#o SJG9^(e$ %3" # e2g  s B h&7zyA˿ͽ74SAw ZkIK# #5!h ,<%O#0mZ-a.S-,(G "## R + up# s w%ߤG݊ BЍ13KIwdʂAy"!!5?`T Dy-E(+\84dFF[`@[r 11'D%=S((>&^% "FW sb{\4 5m uu @m u.10G 0/MK |M*U2 :_N( ua >x$ -l-%i*'(*&+' 5@   ~q^ռ 4^uQ P%{  ֏Y:]E-& X8*!"]##"8!qg!Lq u/ m w e <r  D~ mm 5)%%"G,- ja'V' U ( 3PE+#\7&_:&3A+:0U=: .55 2;,'DE Eg#e~\Rauݞ3] (Z#Y0Piv "/&/'1.8)6;66n݊=4A46)#۽؍ IzV&~ռo{y|ݞ$9-M"[9 |9Q8Gwql= o-$&-O, ,|#+?(#F(~vF $95bl'g; u u@{0 -!"!h!^$'d$##\" /yj  1# N5%Y,r'/Mi-0 *#$V%/.`.I/iY13m20-/++($ ǧg F/in%47~ l}n{X*<#pAE%C**2'+%#/=It#- $C#@% ' %3dL)8- [-0jlb3Cxx7Y'D=1*`m d { ( F[vc [ IA2 '  >Sya*2=ӾaԸ]}~ֶ]՞ݨݨ q2ܐ z|~U2 \( 7 1mMf9J?5lܐכh I D B a < 7Z@( ~ ݊ p & Jn ; g k8  P e! (%Gw"'&!Cc^ o`T2PKڝ9Ձѷ *' f6̓B=uF]z4" ~ _6fw;`':8d6+S5(>8`1S-s#" g6C4[ I;0'e[$T^ c% tR#UUN דQpNE Pv+"c"T%= B/| 1 2 64q@5E ,B #.p&96r+%Y{=g$ &Rvb?yޢ=iꮼJB]az> 53Dj! (> L-; 4T O8 O@ ?7=F7% " &q(| /-؟^;پNvօkՁRٶՋTr1ζ٭Dp-,dGD  8j"5 &-i&g*(e/" [4g  % " x' $ K5C%:40K *VsA}^1 - s .M+= g=}/^jcU% oR?IY۠p]ד:]#4:ǁuO8@xqٶ כZr O~Gq>R!P` -3*7K1'}}*$$6$| H  +{vI6SכcӪ 7 }] ԸH+ o8I".@DIGTG`O C aD u: 79.S[).$C "AV ?xX*J.I~ u Ji~.Dm JJlsgs_  * Q+Ya]["U1"+,16*Na{\zdU~r~cU޾IAuU $K5>  0 < y I  X k z Tu   2vҔ=!ٿ!ގI֢݁һ[߮ xKU^ xss(N  i`n i  E Z*;[#\,$f^G&[ rP oF7OI @ R R^7G@WgiA ~ duKPB   0cyM  QGog@/j |~^:sI  @GZ@  `X u,۽HπCȡU˿`yy g r$t'+-2W/W9(&AN] $ $P ބ ox ,F K [< I7 3Vm jn0rj ay ugm%{'M(4X<6/&D xx,<4K4%o +WF8߇O!;||ުP:؍]X6%7 22* x(s|#] 5   fP #P x6  ^ c x wThp 6Mu  ,""$!|D OZg 3'C (>A4 c607Uw-[oh&64K \D\x8 OTy9>{Ys%Od 5(ul޴ C  >zC= ,ANa ,#!^y%H" oD >/  :.& @ QucRPsܚtӡܭcS}  u!/'kp++U*/2222+30=-'&GpF  J.!^IOpgnf[zmzcs N`$10w*X/0+,*(%$!U#y~g * i){c*794;7,G5)h3yVTxP;Tjc"֩$9"ō#c$Va!* 1]##/(w,h1:+7@35 (+ (!=(F:s]j'P0^ x[gN^gO Iѭ  Z % .  %A3} - M) # &- 8ui^k O 9 ^> | c|6vHQa݊WRr0/k! @?a!V+?*N&A, \5N ::;AxdFPU<HM LPXLjSHt{F;'"l3 |ZyhCb(ؼ;pOŃj oKx ѐfs , [w"T)B{0N8C(EVEIE9JAMJGfB=lAQ1(V #<6_a۠rD]@8)ԒyP %Qq $*f%FA<ud5 3& a+?QA 89 2:n'Q!d r^DSY؃Ӫx ֽsKucy #v^1 =TQ~%{#y , y[i_ dD_JQ^W`}Zhjs U/(1 [J&60 `w=%& )E0*,,)$"$1&]$(e"bPvx6S}qz ݰ1w;I-|^ Ld BPme6'>#Nb_;mOU ,[dvN7&f;Dnm /|dv0DPj~K 1` BLo/s ?g &-G/02a2 430/ )D' Nn6yU fAVj*HQ\xX@-c& k r @ =} [ @  In Z Xm&:? (AnY$#&uaӎ1 3 uWKC.[ rxza 5 \g|_=8@  L%6%ynBj)B,@Sn~N fMa;*)PT=uii 6o 5N7}5S,)x^  oWxSYd,9=C ) . J 4 #%v$!s* i P  a_=UXxRkq3  r% 58gK; @D7 sL_,*P]*#) NjPj_ mRI>Ҟ һfV-%*& e  Im 8A  %'<rJ7HgM`K &+ `rrG@<{Hw0&w p# (/)i %7%=%^$9$/P"l  o +pVY 0 f V^btq7] v6_lYn.   fo  5 EX,gWCSx/ {]*޴uwdS4( 9'JryTi $ 9^&+uR KWgHgsGg &g j@ # Ug "$&!%&" cRL|`2 c `Wy :z7z i^^  @  . E M`-U V   \    lhhspwc R_ ^ TwlLZem!Yic.>ijxg ^j xMd^ ( :^A5!PD 6h n^b9rm_6 o|ݨCӴ%ӎ2v' %-[' ,  Q!"X > ,g,@  e ugܐw޾yA8](Ձ~֏!ҧ[io+ I &#y./9,p-)y)&"ZzG ^ O9( # | < f9%  y 6 O 'L'*y L U@zw#y c0(f: j fC x-=Ew:iKYg߸*X,%,.!3&7")* fL~-{NYZ8%l}=BMNdQ 5wj(FЄ136P: o U`#C43b;;;9T?K8j5lD.*!  J6| x2'l0DA }SdPr91pmSPU)=`E,-0ҧ3d5E1E2.ǝ.H0**u(<"Xww' ߤuXH߮+ovnݺC9vR]BO/QB-/_u^\ ;!9z ^ F  w Q B/Ip%w3 4 -<.fv3֢5A5Eة7r==:8E;c^?r>>37 ~/%5 w ^ymwQm  . !'kr1$4Js4>!$8m40={'# F <JOG v _A@ [, FCT!YՁ >B^ $N"jB/p6i=7720m'D!B L o-KQK`^ƑG%z ;  ;_ p a@  7 \m r !mL2(L&jO^1u4٭٣GPwY{z S#%%j'])Z%=]ZS k U4<{{(Dd dS3u9Wv^ ̸"̒[؍I2 (/ TAz`|!"   u; \cS+%*Q"#Io3A; w!w%mg'4P/3 E+# 2uA:sn^Y&8L@.2 ]")Z%#` >##:'^'0 /A+6+' na(*'1)-@!!/ҧ / +8,^i 5h <a [6f< E3 &p('*&]BA7 ' l W (#ٶ+{?~ m@A  e:   | # .o#d,*u! ' "(e#,!',N$j on-g-  # w >; 5v,U{Po%~+Jfq  5  ow d ( ;mNro0zRrsݰ7+:^txP / e'dCC ص Σ|H%f3{K93dV]Kx W 6mZ00_#Z a U ! !+ o zIza^oDq >bj k!%.$!|ζ#&7W###M y rB m^"_@! -486-l 599 67$M,#$j *N,,L6/M9/5t*}%v "<7m0 6s}s i"=+ELS1!n##-U&z " %*:-> m eYo YDz-GT^ 1    J kZ!}4۪`PVj ! aIK@`OnU9c!uLxoAu:3A+5+CJy9bݨlDOҀ)tDZ:Œ Y²۽ǔ$5@ 0+,.-)&7 I| yY#ws 8R Bv%3y" "[g)q>";y (o \\"F~2 \$+U&R)^#o:)i/|(7&$&i"!%9d[   W I hni*X|,I@]Cji> & *"]v; ! av (w`ی^F^ u'J]""Fš+̦&ܚ&gx+ #< <Ng)$C$5%/85/0H'ޘk" _S:}KE m7M- #I$t!D,#>3 *[jZ@G ߤ(X4Pު,M `1 uT ~^"#[ o|<i{q ٶ 60һ 9~߸c%/"ySLxi`bH|}Q-_JysPi#i  A  i : u 2^*%nT22<y  a ; SzJU]}Sheg/g&i y&J  &  8(  <@ R XOmS<!D=e5 u ~ I9Qm LP X%I%1 E. 21,L !B Bu0Y!+2Vv HE' @pgY|cVfq2PQdT~Z%?_I`ic+Txߛُн9ȫIē|"~^s:dX@Z UYweN0`so ,YjGS/V aFG$%! ޴+RR$t/W7%$0 'WhC  i{%V mK Y  qC3 ,?U7|>7// +WK P۳   #bn֏Cyسڱ ^#+ nDiMC!Bw.,2296?4%7CA1]З3O+$&Bϓ#Օ ;@^^nE    f߭|x Mץt/6Gn2z =; S bg  _ k7C V0*v mT0GH`]=њ  ʂAk$߸3| 0 %3&z<:I:FZ=gB)J)92ߑ((Qi] > (Qq4i P  o]= /&d@j"H#ʻ&ʌ*ʲ.,U-$ʂ*Щ,Ԥ+$&:% ef\  "0yO~z>L0r)7,F} ]T!˿9'DnAA X/w Rd(&(Q'"BKMo0A #?%v4A,*;,r -Y LZ ( j ޘx9*U GIi(BHbj/&Vj ~V' 4D -V5`^CCc%d's59  ,n*A  UaXs+?ұq/JҪ|a$tK#S}  `8ܤk` (jQ ~~#"$EsvdY59 #dm7!B$X%Y&&н(!&A'ϝ$|/&)V)*)q1g k*D-Y$|L  P(!-!%t&4 4GJ2zuP:R  :GT F7 [!Vu* \ ]/ 5")P% $M.*k5;33>W1)' '(  7  "R ȵc mZyEL)R 5] fURvP RV+\ |xܭpo 3"PV@`A {od QM$C oU#"3+`'/(<"O"+#j )JvQm Zd@c^}vGA޴kQ,S־ @g]$C# #83>.,69/D3!۳+ϝ%Ώ$ #NQš) z܇aBwT׉Щ 1@ӎ)l%vr"-"W%[ &~ q%] (f1 Hf%./R3~6nL4q6\64T10Gv.f(!&z"^P b"\/pxS69( pV'bF~~9x3 W$/֏4:}]?ݨCFL,bA)>lGp>; >1@, < sm  !%7p͕ ͩ $ oیx^E_3,C1q*,:3E4{r+C#z ? !* ѭ4[Ι#-uPׯl >'1JvO-Y_6 MxS++_ |LNnu2G1La, ;IY7Y7Gq,Arg 8_d e(Z> "$"")! r/Qx  n  'v/P_: V20v@B(2 $ *( .,<=j&IIQPUQYNPL4h;-3@'W]&yoo15^XPG mz%׹$%(+`.+!<0c$\O U:]1ySڧ~}FMTFR*Q76`Y^zD kCg .I - <8)s?;<?z82'0,~'k#}C  OT9ZT; "x!ڧ!|&$o"w!%Ity_#l Z5O D U@=:- j&%ͱw%௽*X%" #W R(`Z6xq>k> R8&&)%}+ 2 o}! v_#?0%-vԈ-Y-V"Xץ'W@ y!GsaQ 8 B , E>!?K[KT\[r bx|^ UwT9* ߮nw'ܐ:IUR{%k`+* O mFjs=.ofrIͲ̓xFqOһa݁$0/F vEI{K MLH <U,"l#S7|R8 |<AZGJ F)<ٿ=}1ٶ/&@'8S @ ) o1v7 xyl2&aZ)^5$(#{#C) >"  oq;p_ A #  r ~ zB#+`/~^ ; O 2r9  ;    Z HD # ^nJ+v n5 I  ~$     dhVU y- R~UhZ$ f7|{Yfasq < fWg b"!+,734Z0Y) u/ (>* )$ &(L%^ O SN q&yOY|" U- 6X = e #=dPu[V6K{)q V89>@, O BMB o   pmP3Om m5  ~ +Qi# uIgB,h9!/X$Esכ.d ܭI ӘR Ѝ尽7- ^ERW\:Dv=@E.,/168;c6x69-l3uV7} ~ rm+mPk[n L',L:;MoD|B8<7/i!V I )2{ o1m #>2.jd+#F  x 7 iwL N7ynr]iH'Xs]7| kr O .p#4g _ w%$,r*kv4L0cR3 0mm0G-Y)&Ѱ&)&_n̉ FϝU6?|yNx| & $` 5##A! $qd? 8pR-X,Ԯ.ֶx>ֶueYl6A0&9@g_c fi (% , j! T!r)+\ގ390w$("%^#$:" s^7 @ 6%#m6 U(bm|@_.ϰm nvڹ!L.>6@B: t2 T-;T o-#iUg:2$ڝj̓͟vĺN& Gד٣٭x@7!5_^<  r sd6a Y+ '֘֏Cn ɤ P ~H k ؕ'V~!K/*-' %"  > ~ @BK 9 h9 p(1L 4gCSs#ԮZP*]$1,"3d8$B&q -P/W 8?*DZRpRTSMJ$5N7K#Q B!o m{ԭ-M ^Tz~}P'Z#D'3@,@aKMWU YURGEA)$N'*+&+.,+,h&]{ eI=U n2 [Loou fy f j7= k| ` 1 LW x:m q%_bLoh!'u^:Z#j  OYE %Pph@]I9 (78 j K  uE  ( 0 z:D *,4Ǹƶ49v  ++=0mDb9 ZiBJm 5T |s=C>jf  5.6X.,٣2a3,Ԉ,$/{an*cn9R7dof<- Jj4Oq+W U7qs & Z  V  iT (i%!N  BI=zvG$ E~ * ` uMU "p##()|6Q2k O/518 e:&#/C%6+8,B7K123-;5'5N434.++5%v<t5 x C ~  PQZU 'K=5j$+~ 1G ogO  #@K  zQ ?  z ct o~g'XЗ-ǧloEl_EƇzPlxYHNy0G%ޘ KMS$&  xoZ0xLP:ُ4{/%;' 9 SP} b 8QZ²MgkU#gM Gp% )T'#\-"}0r ;]T >yPHF(H*2}?YGm-*m`bS'h v$vjٶHҀy  A 3 & i py"JY rp-gv]3PC3 5dEA=p#o R@'  ( OO} OK0Q RI u- 4 )Q #UjUk " $M"Xg%*(' *; & ~(wj)_& ^uP"3S"E @N (S >x?"NF Y<@yi g&+K2L& }Z I{"<:pq!h!p+`ZD8 k U S 2Hu6܇یٿղ,tc=Ҁ $f&}|{ u G Gp25 "Ye TGų#ȡ˘mUiO #6 Yr' oA/B"vN"+("FIV}d m p "g(;Z!$ EPgh3CP%{)141!*-K)q$!C kT xg 2< 9}M+Ԯu(С~Ѥ"p!rE(m&2W -)D-E)#\<SWEvZc Kqs """#"P "C~l{Bgȫ& $ͽPì~Z7߇Uy5 5$ '%/'$|!|`f <OQ- ^ Y-<n Y<3,] r }Z  KV , 9c ֘f F3yLJ >pvZrj<UA 6{~w$(!:,~"] o%: wۼdֿ4=~f.y  P^3&&]3P-& $'$tz/0 ?Jg JYhH&` Y_L5 / &|f*C#-%.k)$*$t Œ @ws5ƭʨoɈ! WoC"`,--v/9$ &K!-QF/ KV%U w ~ rp/ME JP4[Z$Z!r(" -gK y&q/L~JQc ]z}I"PJD;sD] ?! '' eIm2(Q2~U     Y( Av%rC)jyC9 | @  aN [TDbH ,mG @U^^ DDgDaMjC 5e^A  Bdvy\"`%=͟Ӫx߇.MLD|u3 $2jm B^c;u׹׉vHL9qIߑ3nW KOیAYUk3yv7m]Ui ju  !'Y$/*$'){p1]&*M/$jg:2i6P' dJ k<_!c!ؕس$ 4#w&$$M R%m+!L#q &j rdQ  I >3m <  L]+-v;8.5ܤ<5Eu/&*ռ,s.`#,KD  *&#p#~##J! o8U  ;v @ A^w'  YoO R7a N lM@f~ˏ7 ~/޾_Ptc I = Q AV! @ CӪU Է[ I.^tgBͩFռxWrU1Y'U L5  xaD# &J &z*' 7"l V6$PrЗW¼皿KL r %&aI;@Ai=cx  51& ID C Fی ޢ?o JyB$`$9'B#5%&G c!2ړKtgv+s|S0AX # @A$/ \$9a ,)C.З #=-.2+g {m , = C * o Gs "Z($/TkeI#o# M H'   &+ 0G>1BRVu W!]`$L`(R&W[2UA,/Q+dN2'J'LgA5 I12,L"<M'ڊ(t>C3S3!%"a# >ksHk, w y&g)397B^L L7KJ@C 7/.#m ,TC֏ #7FM%% /&)h2 "!%:# !3#"$t!}'n R C ZKG%!|g  .' y;  K  OWی{ ׹z !+"ߛ/5    Q %'U-;*X;Y" Dޢ4 /43iK7NP Q Y w+ "k " am3G %#JX$##&i%ݰ*2A&")Ը"C e&M!n.fG|7 u x;* Z4J;#$_iN1>h# Qd-@BSVj>WcM]e|OF~g ~}  0UtQ }^Q/SjdA*ؼ<&r=]ׯu o J &,S12:823u%*!`!L "vy u-ptUTi@ 'W{ c": +,hqFv:)|F!2jvU zAT-0j7h\QoJm !ImsW_|Q KE o~{ ~0F!(ƇxǝŃ,<v"6!XFd Q.mW_%;$Viw%"#" V  UNY@ Sd{w    v kZ +$(N!  ju&" *wP=$ YF(f^CQ*1G ' [%"$C'a%'#% , ! w6:6P ( 1 QG < 7˅ FK^ ѐ :M 8Y ? j} : UZ~]u$| \ V- !7np5>,/  Fh ϝz]yf8mj .֢֏%c)$B,'*.N0 - (#I LEgK2XDj;DF^d 2=*&['M1().!#f , BN :%!OH){ !' y#,_u(3#.l.)T% 1q y` oX{|l!Ye$+a#t_!b{F kb=~Ct6,= mL!4M+jܐπ`Ƒ½KOd"u &v&5(m2'6k"vC@_vu <$# )%%$ 1XmvU-"!/&"awyD3!Fri +B 3_i^ 8 7. /|:5;'0/M'M,7|A3> 1S,z t9 9D ~.֏r[iSHc Ҟ bZ( O 9`Trq"F7 y#? #S !!/ [U @ 8u㻑mt;͟ 4ζՁXD@m | y K7"<%**k,/-!02(Neu@b[L ĉKy2tһ)+ b kO#P)[3w>3!A3> \C 8#51#/) ' e$&#y" !#f "P%,$&uig` Rj&O%ImSS(wU5Im6=P (% R m!& fz3 w:}P$tCgכqުنv0.ըq~8͌JTʞ)1@8 >ij|js#-T'a, 1/r-O1+&c.G&J= : >  nF " B/zPN(GJ?xK׉3IC%um2;>/9cj yޢ X&2nM<& )4V j5iޢtk V r 0  [:% >7!/ 7  >  o0/ UH Ogl lN =_ 2 R<B 99 !B0 T!=_h6 g#̦ #c ԮVsس]ی۽|r o 6%*m @= $/+>HA,P":ӘGQ(U/ܤ"ԸדEiҞ&ѷұj#!8!"!,"l-Y)%m!""J[x|]a o ڱ  &{6g 4$ݞ%.z/&R83/1X.#1g'0'0D/U~ u?b@s";a#ܤٿwӾurR4o!"ʻ <#*$"2]2/ 7OV \Y{;%=  " <L_8/S|TuBq6}9 Zp8ގ RjJ<֢[t سdߛaH6V @Fj I#,s 3k R(w")$1S$0*(0+3+8+?9,*=t);'<%8!63) R-%OU5 X| 6r ( J %c+5/&,/0110Gi(&"P'Z+a!! e8u yngA2G 0 _&T)8#S  L / I0kc;6WH $$IG O]y 2 $T ! a*bS/i0597$:7964{V)' `"t6lPՕ<ͩCcgy6X#z $. 0![%Z- ,N" ': , QX E \z8-۪$%۪)J(:!8#^gg  $j(*34!B:; 9o95s/_Ry L^z#yp` x  1P +5~+IZSvdZM`'rE9zc kJ]mo *[liyzN =]I̸޾n 1&ѭI c 'M/|2wGJ C @OF@ >G$6*X*2.?)J0 %O2 4j0G)%# Pm(6 |3x.\0E@NP8<@+,VX0G/95-;?*-"3uIW"нk`7 x֏س&MC!ٙݨt~4a9,13dJLC7 `Toq_ ( !#u__jJKm5  jqU6@ V ~ x)7  Zu Ra %3 c v+ (Vp)f{ 2U!L#S*'#f)B $[(^ B X C dIZn/% )3P?zTA _C(D@LC<#671p)q&#& %ڊ>֬fv׹D؟ VؕةׯIvօՁؼњ:K'gMA&) fF!#2(9&! !%F2uKB&(0?ӸY 鷳eIB{[ <g I~Z/y߮(߇ 0 ϓw .͟p֘]LTr P  XH!%B%%e  %wt:+'Chgq\}0 U # ZB -/ u^- ng3 y( ~SlQ  Yc Y!K FT"%O+?.6\L8ck9:96 :t98720}$޾$Mٶ$<˿H&İ uĝh.Y!#1)7p-L&&m) x){#  k !dZ;FR.\`* F~ߛ8 8 U5+31 L u o_V`"Ak u>lٿx7ұ& tݨ#=/T  P&!8#&A##Lec) Pن164 3Wl x i_##| e$&"(e! } r%DGyLu6d8߮_++w04U+*x`OQl L"{%=$D$V6%^.,&#ft ?cU(,@+d$3=4ު78ד79<712J-*##ֶV ;83%;ws<BOJ I   ~=TA+\' /*b/WM$g=9Ҁ_ͩb+}|1b),kIJo B9% F%'/-++)B&D~|HB@۽ݨݰvٶ [wׯCY'yK^"')&~i"D]aSW=>dՁPֶyݨA Y~~sm#.zO0Y75E6}=1 7_5X2:16+x%# >1 *W 6  Y 2 Q $V0(m 6 07 2:7- y C(MY# U_M+ B[x!D / C&p,F#s  .dO } %ڀ vP<6WL_-  L X ߇t۽9A`'>aݺgH3IV ZSh/2i T   7 5U6Ak۠,a,>|7' G' %(>6t6 >S?r25~B.*'|  a  (wQuVbӄlըڝ ij]y^ys~}k c% zD.3v+,gpHV} i i:bMQ Y. x^O&έ#==έŪʌϝW>Ͳղ: Oُ*5'$I $&-p,r+ 6+( )4##?ti^B$!# UaP4H)  ub&$8(B,/W-=;4C/9.p#2*@#f&ϰ%ѷ"F&Ә!՞ ٶ8 6    da0}w]90Zп"$#\**D*f*@%*·(Mc%*}^,i 2^yz 4+: 3 4^ `{Dm1Hj .+  I "L] }&P\v g OHM@ OTy |/wqS"3+' o$}#C &Z F@ C>$X's ,' +x m%m%  ,<j1^V 7 I%b kیx+ޢ ;S UQ ;j Z eN/_K++*(s' <#Pj%6 # \HTCiwP 6 fmw-K%"Q<X a'&<([$&# q,^ %^# ^3^a-4KXڀ%4# ;lۄU-7#=̯$M}YƇ)J-v UuRv T L 7 < %ޢ,HT˅օ]ߛ(S`~ ^ s2 =Q+g  Q@ ?L  h ( r O .$!:K=zA,0&#Օ+#)-+*(S)q2 #~@2 r% M7 Q " t4 IѤ Od ᾛiɈ 5֢!!ru >{ 1 5nZL*%*" %' ' ! ($j uv Bj    iׯ9{!1)ގ p]  6  1# 1! , *u,))^+ 34 0 1.1S3n3ZJ,0 %ki}" ۄ]I>aMYk;'fHP X   ?<6]XZ0Eh>,\%u[דNu@2 &ٿ : ~ֶh8 ζ(I=NttˏՁ ׉Ee$2eJBKԮouӄسcS9SS,#ioK O TPd& X- :/qs$Y[ X w R OcZ`# c 2 m I K~ .  Nyl|6A.mR~4 @Ϲ @l1Ž`ɛ|π7ۄE@3?]J ap o$|"v$`)122W-=V.: *D:$8#/W)1$).)&#%m/)1J /&76R1N516550$/#Klw h`J@~ | p6,cn)B'W_,|*\,,($"y4)C{*%=d~x }]VFڱ܇-ބڹԈ]ìTU_qk/庍+6 !!th#NͩΏޢLU2#\*k,910 6\1( )9 :7umacuH_* "X$('&## !^( #y Q jo:(@7udS#! kP "/] sADMtEGDY1E  vgMg& G5 (p =oi@^ vi/tnP y:5USI!V()0P,i0+'as# = "U%oK[l: $p 7+FJ^7d* Tw^-EyPw x Q@^)P u< s k }ݨ i#ݞ%}U rS` /] k!2 BLKS'oG< dEP ; o e k,+5E3m74G)*X.et a [i7 u ~$_YG oC ~ U(:c$S8+ 7r6Oy  %7''k e&=|"rT^= ~`z @0dm5    (& z g  S B Q.m/N@u(R$j"b #"))'*7"" o/KLlh&20V<?r 2 (ܭO g7Ҋl.[vId JwYMG@ބ&{ qzm _ iv1یݰuW`ގkϓZٿoXζQ.;5 D` ~ ~$lig#S" # 5 g   Dd m7K#S]"P@F#':+_+e/ (8r1- (4$V)x7t ( 1&OT2jl0Z8^rJyIF y:  I u ' ^ ;j o rZ$1 . i2~7^ *uoٿj: O  ^y s ' U'c  L-` Y"F!! $! " ުMow%!4JC`%A[XXd Is=9#I15;?>:h<766n1++.F,--'&,)Tֶ#ؕg n~ isA F#+N's'ը.#9I3n(5,%c&7ی ֢Z(.dMC$+֏O З ĺ rҊ ϓZMV;.ܐs^F9 "\ ץ F ֏+{ՁDѐxц޾vܭ^6Zk߸"A[J0rړ !_ -  ++/9.fc+n)8+d ^ 1vSYZ[%eg֘&g!LС$CȡmM.{&1Y@ \w 5f X  $Q"~C=>u zpd \ L/ Q  O Y cj%2<W! ."U#S##D " e  x%")%=( t %]KI k,  n  )5wv!^ \ CO m ~avRm u+Vߤ; "T %)jPdTG= rP O|  8 'Pvܤ_*:ބ Gp$>fd]mq%F]wG!س(ة c @ .ڝPULj|ݔ@WY9l @8wj E$7N +o/V2T\~^vw &CFE]   @u ^Q< '~f]r]'c%L`7,@A,9(48$1]G>G6 3>+HyEJpO!p"4xt7  ) e( R/ I)j_~m$ #\ &$&n!;0L IӴd35A7 ,<#/ mޢg Y) w r+ p B2/&$88E7wRm)*iC&MQip ~2՞#@~2}fdˬȡȵZ1~K< 6;3 !c99mAK?Qwp #)Ju"+++,r$1S|1s&]p) y & zVs yu{WS[&% ,)85!L$"QX"Z`"# y OxZ #,ޘ|#._  99]"$9V)]&]a8  7>* 23'v x iׯцQZ2^݁>{nzf8 Ӵ*zr 6ss* Uw`&`G TM` A @{^,9(,w(?)W QZK1%m4#ߛ"" ")(#jkV1 W(e<; KED@51#f`qsn \ BZi B|w@D xD xKUa')$y+m+([)%&~# Ohs' AsadԒ ,I:?J)H nW?-'R_&>9{ ^ F UG *-ۖ&v/3x+B_t V}  ` 6!   Y݁dS۠~Ձ۪L3 }jn?=@z> Ho86S=6O;"aL;ߛTWrQaζU`ſ!67'*ݰGU\I8Wyۄ5gF+2p% %c'D=))^&+'7GfF A*;:&41S# )}E &F(O1 9|-,%v@a>N!H*bJ-G7/?6A0c4T3:0)*-6\*) 71 1>->7<4;Gp$<@$5E";&A* #="qT ;UiPfޘd9hɤNIİ׻ڹt˾N܇c̰ t =W@Z L _ұӴ6\KJlSX4= /{4m"<yE HmUEE !m!RVDv a3 ) 3!}g0"!tz#5j'00'y" #RͩRT ~_Dɒ"Kf<j؟5+0PA47 6!/c,9V% ?. qZ]" M"b*'W'2:s/\74651./|(e" ^ u: ` Q F)p< '  n:T_D+  .F12*0 X . A  `LfchLسNةZ٭{ f` < tE# j9C>Aq_c^Wb_Tt [A * dBB!J@b֢:NJ Q kA MHUw$s${++d*+!%'I( k "b'uW@)U{ @ O*u%Xza:A##"P*;)'W-Y()B#Q U  c = O%mY Mng[!r e% %,'5%4L568?48%h'&Eqm |/j0Ԉ8ׯydT e&[>#~#+(4%*"ả$rz+<c MMKyGr &gnbtd2gYP`=x6$$3 ;+>mKCag[0 ãVΣؼ4ǔW? #y%t%*) ^3b ~ 6sބ&/L c o a 09\%Y,NJUζϓ loٶV~xiikl߇݊( ۖq+:~= ~%c$Ca23 B_[@.K1IJK oD@9B,.5Uܚ3MS~wCv&: Mpv e % y"P ` kV{2nxLA {g[7 ^iT'IB5igl8CXk8 *gN ,xt$ XZ}~[} "N% #Id!%3y','$K7]8 i;#UX(I)++&$G/0{0N..I,B!)T .&" !^K@} m QQD 5Nj36K91%eһdNIjJ "+Kk6 . FI(MwwMm|,GRʌnqԜ݁b A 5 !  O1n+Qv۠g7+dva+P7 ' mR&D=`3"3*/C2k&!V O XcXV24jԒ~fh9 ( G{jaCb 2$/v= 7  ( D ,o  0i;*AP,"3" $.\I)*bx%v]sR  )S"* \;k3V# ; LG u1n~Z^# 2 Gu#n' 823n'>d&g59<4-lEiA?r{N3Dy> 89߮++Ҟ(w _F;ɮ}*Зٶ߇- s $*3 4A67937%C /r J ]  XF;)jݞ ܐة cuH܇"1gc6ܐoX%ʔAϰqՕlЍ=UMp#9Y>^|D ;g&*޴Dܭ֘$ٙ9H,qQSY K[Y Gw^ ;"EL Qz M ".* tgWoׯը؍dWCS~a~ G2 (8#% '0*..3n9645E59/9;cq;;=::_T5E23/(d"̻DeZh9<g#828AH:.A 5D [;+.y&$iP$Y˅;@͕j  ۳>2GXeY}N &$&U& # "# 2#CPP, x  . # O~&V >Fnm/{"   2]woA I&wYglܐL Pq,@Q c& _m ~C  ~VI9$'E; @N &z(ڱ$$mv+@23fm<  (,VR<] FIwT,7̜J=D!'t$,=&n ]  I0:3&;ASSt ֏њ cÙm,˿W K-~L R")y #?=    7SSٶݨ2 igIW5xu ,$V(*,,%},_,)q('#I<Ń ɒ 1z` >s` >_FP1' & 0\.,&.!*D[Me "M + k9(5  , z& f +t6}#%vE*!|7ij8 _'D 8$ TJ;G :q _g]l7X ^!$  3*(b'}7&J$`" xS0 .ch[ $m'8e8=iM`U L ӄ,(Pܷ_ `&O!97Y(Fօ!r!W$4"G$|#rGD~Q1K~Nb  5& (( n 'h ^CYwrJ5s'D$%!Bz$$π&( Ș&+oIڀz6%έ%ΣٿߛؼNݺi 'C ax"&%O(-E,B(&Jj$00:'&"SO ^JI~3v Kh3M 3/'dD'f Sی1x);tP2J! I3O >d ;$M+$/ j  ^s{!7L[/Hla6@O<!/3 VA6!V(;Wy  #:)[ , %%<zK(- 7i/Q Y^M T{=سy0 ǧ)~QӪxWm,h}* ]').031g8EP3ne!{(~ ٶ x̓"ahdʞȡVQ ̉օ@G3Y 0*J&z@*<% 8,S #!@"f'$/H/df~&  |jP"x!%&j     \  "4 M { <@LM|80yAdYwIv <@F &^#1  o@ & P^NmFmfNjO2ps d u+27'!%&$m1*1([+gzTwv#3gXtѤ]ՁS(xG #")^'}-v _%G 20M q cvQ W 0RF  uؼ  $܇`DT{4s;F|%M(#f!/&/<,8),B,?$9%*: +-# g#=K XU_ZBD] D+zNG4&z,^O{#wV69Pc{g(SGPY HG#R[sE9'iFyG>9޾76 v sٙ3b=zK c*;'&-#C' *:-/N.0*s4T 1q /F+\ ,j v  L I ,A*   @SUIQbʲxo7PWmfzg,  [ (@ <&$R!d!r2a8 54/ #z# #X}#2bK[bL4[^U9޾`ڀA߇F ֏(4'$\-b)-)_*6y-)0'sM 8zm q!L=DvIa++(d.pl*/A,S&z(D!j#\T{9,O[~ yĺ  ^4 ц0`"FJ # uV1g.D6t?% ;A ?K9 8 $ );{A!P)(m)i+n`*9++޴.,V)(>2#y܇NF3(Z:I]$ oQ'һ&p%x(*/(# ys c%O5yQ5z З`i12$>sһ\R*͌?JO Iu%`޾Y]߮b׹ةҀ/O̜̜͌gӴ݁ZN_C!IK * _ e ^  6 . [<w No ii ItכWܭqO²rބKCvK{&, > j:D6&>n <jC:):a6):_3(])$x%c  ,2u)5 > ;  OI ڀF3VY#5'! q #j1&fs $Z%6 -% K$ChI .1 A`tCf%#.I<&zDY  f (Xefl^$+B0-Ai1SZ,L%1J0Y-lk0c$,%7!' " k., ?('`#5J<"3Atl$9|"v*`+=ن( r8|{V(Fѭ ~w2OKs'Gwx eJf YU OA*0:-/~޴H%18"g{TIN10ChV">6ӘULسjHܐD:,a i0*$ 7 "+({"!F+!){l*){$x&<"Pq~3d[Y^% B`s@S>r| ednosaz[ fO[~#z*k2  d C#2k/s10)-(](c80 < $!ZKҀҞ;Єfp bnS#ma 0w(  jwU >NIЩW|@F̸NُW u(Z!%!x/ )V0m* + '-  .,'6 3::T8w8|7.m+-3j>1@*#~&22Wȡ!F&A^p׉0ݺieV4U3BB<@3 3 !ra"zsr[Y*;#@F . IV9RYZd5 P .8 2) S R{?E;1cj~p_+5'5 z5 e !,P(&(&$ ,ddS5/JS_ZNr6 /l `  yyVCZ'M'a; i;=@aE`|H%KG^wLQOP|IK;/<n1S $< ##Lu4a:\Ii1ڹ]؍J]IV5:s}NO?L`TQ#Z\^%^jF[O[I=`/9"kc|}sHTٿJ8do6/ٶD#D QCf ^ u{ u<f{%I,y ~ T}aYt&^i<+n/U/Q+joۄPl^%w7# = 4t/-@],ln / "  mj  H{" ު+Щ%vp 58~! @~/~gl~tG '4D!^ ,s",__+7 Vw+*b?1.I.-;F3 57r}/'u# ! l sg& ] dg 5 kjn)<^ %'3nT1-b&])F*k*,.,0**F! }9Swjc\SF+5msWY ^=S 5 4{?$>8"/+H'D R_  sl[l}h0!޻TKɒT ͕Q~!p  ^ BfIh)%,&'M/M+1?*.*,/&JF ,i / x^ GUEIpH~&v!=Ƚ5z?{2 Zš'cUtˏbٿ0y4 /<*= i!&!(e#*++x-;+R:+4% 1&-.""X!r[ > UNRСیכѤ֏Qqۖ/`i,*-<9e957U$t+&z.)'W()q(/C&z%=!L]s !oݨFцϓz`ѭCՁ iv H&SK"<  F3 )* D b^m?}!#K ߇۪Oݺk"!#605 0dcB*|E ~7 %' f ( Y   }-Z ^IG xB "*IpPzz(7Aʷ\E–Gi-Ԓvیr##f/K, f129 4"& 0 @f v:e]G̦̓riol/snJ=t!@7_9A5!G-LeKuMIxB!8=")8,/#y%$-;&]s,% 0%v es e({8wn  E6o pm93$ y&]NlJ7a eԜԤP=Ձi 0u$%/-v1|)J L @\ a  6Fx*zr ɛ#y9ntTcT jW O"j dn| 5^ :Oӎ_ Xfp{Ow  hBT =U i  a2 "&Mtt9/{߇Q=Qx+~dRI۠*,c x ( Ow:Edhq!&),% Z ")q'u  L ?Q-+<Օ/ƭǔd?f;iH^yOgi$+5$|' #y&"$ \(['{) !^ yy4m 7Iד$Ջٶ/ޢ( c { I p0 i*M-789/HC/GcLJUD,|H:}2a(R (M)؟w{ׯ (ϰ_ em 8a^g3 UJ a ^Py,#  ~4|y x NӎCEی߇ζkބdI(@ЍHr[O9έ#kHQXұL ' ay eT RM r GP=zͲ Æ ; o ȫ$)G/0ݞ9,5.I/W,%#? Z#N8Q=1} y0+(& PnojP*&5 <^$/ D # 6j i  g " Q!@)K#h Qw + -f`%m &Sp^sz L  3Gd qjU)@KS}mP N :0s*_dI/0d ~8 ۠J[m46G 2>p!` U`(*t t^ L& 1$~DCS#B/8ݰH޴GXI{{vMP g^z & N@E kx4>a^m.@}tjߛ^ߤ /j XR1K K~(@9)F  Y U & @h n!`S}xz:Dq-6 ?9h RfYw Fl o /Qh=ZEf  2F @mb[f ah7F۠ڀgH]1 /M$f,%=m.,%Ygc 5 xTJ]P;2( : , . ,9N`j b~l# H|F- XZ""< >G'@'2(ej* t";)'D)q%DCS /_h^VPSq5{Wim2)={w}s& A c| m u Y u u U  Q yepX  ]4 ] N uM 2} <:6 : &## # ?- # ~&e e 62j hG 2*8g˅)3vכY*n]*fddVOl.H z o~ =*Dc/YZ ' d  \129Ԓ)M QQ RH#$t`$ #S' U n5a 5 kJ<~# Usq,  -OqmsH^e]#- X &C u*7h k   IRpa$!!(!&],%=$ #S fZ QA&jMM;= .CgJބ8 rd)sQb[' t k D܇ ^ _e(v{<^nJ jATRa u $Y 7  < um  B -Cd  mٙ1c) ބ :%$pA<':' b}s: 2 & L+  gdw|G|y(qmYyHO۪+ ~ץ +3kPpp|eY|K+^%/ 7x+KG*Z [ |v FG& UQ{QR  dVy+ުP֬P2  M o5n-}K6[.Z-DjK Jp ,cLpj X  g L!C!G 5"""!8u X#YE)7I c Vn= "+Rp+n0w/U,%/l'a. .'+d#`).*(U.I*b+x)()+0)A&$$"vv@si` :] K6^X @ a Lh$DvOvs>.9ܐefg@+3nJ15Eu m AFY q`j^_py޴ٿlT> O z   _JL@/ lia1j}d3@  kiu!D)q.p27hY7U;*;N9y 9Z21y .\*(% "#$#I`U I ([ K1*>L-}[ o@uG=\hOid{Tm'dTJ: < OA!" 6& Sde@P  I~QJN %%$$&0#M"y 2hS9He? 2m@*xd  &  G^Kp DVoTQj< 9 D |9 (  *,M"9^9v+; _g;Yg#?(Y,+*&-b%!  EO  Ec=}s & Y@gCy\ |?]ijA/,;&EGF  AK  <i p  Q on N/"e'+G.?* ,h's&$  Wa 5 <:p\8muqT,%$\ ߑ4BJj{ KeV  # oC n<Ur|moM-NY.>޴+3wEc?w #tNVY.>*Sa r/w_0 `] , { RZ ? * G 5V!M `!Dp  ONy|ty9 OS~pnaDMb o O  KswPs5/XNG(\*^++x=8 xo  Lw)l  |  ~tAY>O I >B{k9?ޘ_jo 2(fW-:85:p h//LZ u \' FvMY?C 3 m P@B %F R ' o  G 9e  [K ToS5t[n5r%"a~݁ }x!ePNc' o  . " a  &  m m ~  U , r sDK#cf~~/w$ [ PuXqg0Mm E kQ]4 e=0:#qa1 "JKE S3T:pmb5Ucϝ!ZQ= ݰ N cA@tK ~_q%=&$3#" _xW FKYSiVmw O o,XyB$y  7m7\ 6D3g+X_H T+ o  `}Q  [ Fdva( (2+"wj(n w}pv} e 2: k^A3EN]dm M < D.H8rY;K@Y ?@/ n &hx ~ 8@3& yُ ړ 9 p9'f؍ ;U,  Fn{':)"'I C!!Uu` c;6__V xI2<,r&3 K! !8#' 2Nl-lI/Wd)T ,[q mc e u!;Y x&TwiH( @F]6 !}vX Xݔ?ބ` MSKQ& 5 k 8g # ){ -42Z-6+dm ZF;P\?E;8^Grd!Q * @L~)by"*bU.>/ 0G/_ -E #*&%@(";&qlvk [ ; oc 0 W)   * i! B > o#S'kj&d.\(+޾$z7#W!?Y*P0p{_< _ _O n xi a  , # NK^hyQ!L(,V7525'82:x*H(n#C ;SjUY3 (  I e % &$ Q5b 0 5l 2'L60 (!+&A ' "*!"'D!r*MOس;Z &rD  #'($|)9]1.3ZE0i91ӎ,$ ؟߸߇'L)]f]C|w 8- X t e ]:MLq- \ЩJ6bYghJT ; U  84s (Kd uwo D"5S/?/s G޴:9]oS YPP%"V  O`/3!^ 8 uیgܭi8G:&w=r: s`[   DP~ \"A$0)8S"!LC~ "V Rs  ( JgL""b+-$ Y <" @a r1 +/UDm O6 o S  66Z&P$M$"|"w[ YG,,AobTmԒh/M9\J -&g(Q2//&/+-B H&s</"7>&Sa~lZo,2ut$^| '"PkDd'} dPp%@C  oWx81 |#T,XL"=}@DR6;<3~,& ',٣U=kޢL&+یJޘUQbwYc dp!/G$`% 0 0gw kt+t?"m\U@v۽ըƛ3Vn닻 ϸѹj* ۖ!ݨ |#\$(e%"C "ZW';A R 3 _=$ "-ZL+ u| `b8 e"lo''*43n85 2.iDd7b, kc% /JMoR| ^l - ,mFd5 dz ifywC eMnzuat(##a,̜iP ,Sռ R$8ڀ8i D-32LQIx NO6H JqEVDA<= =}|5i3n,L&A a# Oj By ;^ (-`c-  e,X((I@ OC]j~G/d3t} 93$ "e(3$ a8*5!^t }<& ,/>;  Hluep^&I / KL O@:a{ړQ$̰J|QbMT/w%z ; ? %z}C ,/yh*0'v޴4yכo׹l `]&A#-& ?! `/s " "&#!S5aOw;h-6 ޢT<T}Z͕ռPߛOhA@= 1+R=g\j z  |  fg!^y 6)"#% #`g _'n;hhsm|qhUY es" '%*&"& xv *C4Ws{`eöнǝ{+ rM19^B?}}'~:ixQ hn 6U =3 I|pX, %Oߑ!L"~64٣:S;8kooRV|A YU{+x0YA5R"V#\_}A: 1-^4o fg `F0-!swi: l  9cC 6 = w njgQA b/r(NtBF8{# ۄAI sxa<,F6X$ O!r #-!r~|%m $ (eG&   #L7/ i =`!7d`ۖPAӘ="-$٭߇],;Z3 C=2/_ e!F ¿? k/C˘ގK"^c+ F t?oKwN6_jY8$ z$C3A13R:} 6 z -&wwP  j[2bPM_b U; X `! ' "&J w@uK"v  > e!/6I[L !^ (> o(e 5&^&(+i'kބ$|c&k%Ou,  -O/VY*YH% (St#  !4Yh"! & >$% 2  X K%G%ݞ+j+Q-Ҕ+$("m o%m7m+ (YP_tX!B$M## U  s  \  O Q u6 "A %" kPNI3$r(Cl- V'&  O2p 8P t ;& R ,=!  # xV   | < .3 & , k0_I\,kI}{-:# mp 2<x 9F (w|M41 \ 36"&|_ wgr P H E*  = 2-<A"X_$&@&$%3"" 8"\ Q:Yh6 3)Zi L7"q&g!,/s!/&2.#V(' irI]D= B^ L^ U ؕVҞaՁԸ uBz QgY L IONuU@^*>]ukn/VЍwi^%q`@%aԸ̓ Q 71 g.;`n* _ E Eph(!]!/ti &K mX9/Aa-* % 'W'k .){'0gJ g3MU$ ,#')/W5'9CO5DCFv3KKWSL^K;E = :_^3Q3+# )+!^^! # #f~%E#(/(.z,k$!$##V#[a x2@3qPPp"z:_ /zj4D݊L=zͩ)8N`3愰̭M(ٿD$݁'D`$ 9 ڊڀLw*khVݞ8<NѭaHc$u1ݨʨi̓BV~@!>v!!^*2(#!L"v"'!F"q >"KfIuwd /%+ Q (QG  X X ]Qo@^K L @$`\'W41B9{7=h:04ݺ*a(~EF R2Ac T p{#27!u+} ($C-Ӵ ة׹j+*./w7@2,hv&>o"ZSQ$gr: OUWA*! O"$o7.0 @.2.1(!#?!P~G4 |;Y.CIF9 W)&T%s]b(=D Tc_N L| B @~ 5I'F,[wc6Z # M wg= |imFiG "6g"<$&'X& (*=+d+(%"XWIy#N @ I4& BJ FI4^N (v   _r]jE  U  t-  !hV$V ݺ߇BR۪߇ބr]ٶ ׉m("kn\ j1 |i8S|Vv|p \LMV x^T=DPF, XBvA- T9/u!9/j,l+I x}FR ߇l [\$Mpk !%!]" sl"PM7a>)2ׯ3ղ-ڝzQ Zz+@-?-z:057P-/W% Y%*}!Y=j*1nZܷ])X6UjeUQoJ'q E^sMU#\?+50y0L44q(q I כ|^$IYE 8 9M?`!""D Rm B! Vs@=g:K| 6<$M"P5"X)*LT@c$ wg rk0 jg a $9U%n&.]**"v{YF۳ 0CcuPaA,s17- *3#+4:-,%Ѝ"%N)tͲ6Uڱe<[[Aɒ דD| = &  o cP^6~=dr|%ߑ]l%K@ =o l6+cTg~T`* _aoQ 5 R  (yP7C"!#o#S'#"Lp=  ['ymH@]Y!0  TV$ L Hj/q&q%vZ&gN' m'%=###% ,f,&$'$ e 7PjIr&A  @ Q ~ m:D ^^o 6 1 5f5*i. " ,#UAD]SH3t **D(}i E!yTl/+'  a%YB%A{BP~aכ\٣.o ܭj \}6V.ediU 'Z@K#j{; o?ބ}Am͌Ijڀpv U IRy~w+ kd&.f [| @ ' _'*u3n16b!)Bp$/`%i"J!ܚW۳j߸^) ~ abJgK[~   ~< 1 a  ;N :ej[# #IH$|tv[VV0W[]ãVxѭV,"3E `M =CWC)M٭#I֏$CZ':!%aZ y؃y 5%]ڀ ȡ u }pC -݊#Dj@*+l(eD/ &]%'k%*.,,d2W,1.* \ Vބ9/9Ad>~kfXGNRu)euS=F]\ w<Jtvj\;yj[m mnѭ֘c-T־MYx rhV0v O$t #S+c,|M1].3>/C82?7DGfyKҧMoJI>Q?A6$"ljK2:Y6FHtT^QZXL>Gp>Z@6$qW]^_5qa{78З.-PƣĦYɮT5Rg`L-A]|'}"l"ڧ$ܐ"&J$D-),+-Ej8.,% "7!#Y|_KrIh1hS߇Go p֘=(Eӡao`,Oس. ('5 -bE+#V u M,{RP6&{  /^:w۽Oњ )j"Bؕ@/$_#(e70 +R2,h,?%cgX݊z`<כׯw$d@@> #N'0L.+-")&,"%% g<.öHhWmOcOšπZ+$JzYc , {jR"/%YgD8"J;<lO:"+`vX1C 61@U{MuvD[I ^t L Q mt F Is f   `R!pRrS% ,G4 }B (K "T]w|* XAU,,#5cy$nl}* Zm7R*;N%IH!LFG@>,r 0G +%)#w3 5@ht rP-!wl sn% "%t4^ \, 'W 5%v ~ h2 (5 FjhO#j  x%7'o&D@Kz5s /({uy Uo _4IN&-<]S+ /  I4 = x ; &`O% &  |v c1 PF ,=B_$~5&?@#5"~{Ձ"b;M0 #  i[ 2 `B39+xfm`cI ֏߸MehUD##-6#Y " k 5Eh,U9 7(݊+`m@ 1 W*DDogP!id;gc_U$DI=12$C9F0^\HΏI¼UH+XXN*   .ycgP 8f*! !r&"ʂ%3sU R֘#!LM B",(%-4+S2=+7+!5;~.s1,*I$j Z  U~*  } QnGm%B(',36\DA >x<<57h9o4S'#DnQ(mvH8(_M~ ̸#53-1)h( $&&U"b$3 +x)^ $Mzd9i r օ_֏ \F 'Щ[Ѝ C8BdI9 1 ,Y *=@@ŪuɈC߸ݔn9] u Md}'iB@4O+T&F#ζiWxF( e  Y@ [  X  {T \TuY&0qS]R7ռܭCGdp &&Na!r "AKz#~3l݁X z_ ܭrݔy|pF geVm6 tץڹ|o۳ A y7* :lE'.,>=tFC(jF ?8.2NTtU3n0&ُwNTy 5T(%3 ,0x*X]2N,X6 1g2X.6"F$#" 's m,%36?]5t0 486R43>G*M53x~|ߑ\^g bn _ ٿ &o P^Gso0޴T<,,2 Q< =r0= ړ·{ЄӎaV9 ^/*/s,>03,V(>%}gXu L 9"JalP~(SЩ]aͼ}Z oԮ y 5 !P|     3z 7|E} h0:dsGDC< @]:/2ބTt iKG:}Q&[ En M} :cm;O , & [% " !gpr_&IsPy@dWMכ_,.Օ:/ % eG^'" d20 |O8uC-h|%/B ~3@ I|&g 53_ܭ (H2>9ڊ|Ag<0G8RH Sdwd\r سǝϓ3 P qW@&  P i~A/6= } DZ& y !^   :u  1NN0BIZ| (faF V _ ۄ mn# ?$#/hn 7!miُɤUG$+Ky1`Z^"[xU߮۽Oxp=|NKzn\& #7gV;- <T S Ee 477^,j OKac !#&J'a ,.*8'#g"$ ` X2 L czN_ߤ% &r ';$ )J($g"F"gim| prOj M2ݔ ӄ1ц &A f' CS՞z Fg  f7  !+X[!; &jO ߑS/ݰ٭OW96D |F um@/JmN3*'?MD<7 u0`ܚ@0c`,Z*0,-2! Ә;L+ܷpk)w,@UדͲ OԤ+?~ X6 ^PCuC  L~R;R@FMh>/Ps!ju  q=+H<yR9az '%m''M!8!%9>H  ?w!%$93 -J-1$2N5lq/ 84^;w{6R$)i&]$ oI{N 2hVTA@DZՋm>8M m3"+2". "(&% 5! z{Z y E(L U_7^s,ao=/. /KuYU!!L#* X$ "P!#}  N v qL Y  Y^ ij   L Q}4dA+ޢ(G֘ /;Kg | m~N/%!|$Z  x{ R@ ~ a I bD ة oy+̉' ̰Ԥx.4iۄP O@;i_" gg)[{hL! qQ xroS &FHPU ! K'J" ^ xA U !B )"%&J %% +&()h )"'*!$$$9") K  L 1}FiK, DX//$ w:-NPUY | QF &v; $%3){&+ڀ&)'N2[QQf  c+ Ts]U7(mNf \0Q #` T yQ/ ; w7 6hp&KH (e>.r4{29I4A,?(X8 S"J gJU 6Q%ID1yQWE )ُZLכ u;Ҕ=׉ڀM 3 K FjYTr `3HA(;Jܚ(\ABL@#s۳ ; kZA  ypT5,Kz] ^F%YN6؍UW&.!&-֏'d-)1)%$m%YhYU!% 4q3Z<9,35'S0/)$כ! ~x #g7r ڹٶ~$۠3דxbm 9֘|VЩ 8vұު Xom   m= >"@-Y[+xd*u3)qZwPh( yj`5 <@ j9 0  c2 OVt"RTR}(2*^(4L,/-v.-3N+&9!g  Fs iPAZ/ڧ<|p}BC@'isw|"P~{@^gRxOvHX~Z? y# J./d& jH:mi ;d )AM  P \#  # ^ݰ#߸>8[# ",Ri8!$t'a +-;=}524J20,~)$>-]& u`% X 63 F F x &:Q" !4cdYXPMM{HҊ@10Zt Щ.w%.34.3$9e@N@EDyA?m<]!;F12 )@(F#!$G #LU !0"-)+G3Zb08342a)c+5#S!gIv[I ^ >i#~2 $%"/$&"lZ(X yZ Gi;8!UT jt aL%-^-k&v6 y &-(PD۠v /ϰ~Ձ&LVS6,d(ߑ$X#.2K`D +O _YYFpEZ Y J !Dq7$K 8mȎ3ϓAz{-]ُ N Qa !#B-},_|/ /&+ *r$"lV@ rmD* -  !yz&g~$ ^&!| LQ/ 7l^# 6 rgf2Y ^AAF|^I 58Gs)@%-V^  'J&"-{- j/0L0034.('!&J4' y eS(a*$%8?g$A u2,S. ['& <$C] O ( X U "j~ބsl[I * E AeD_,e`ؼ[elԮץ>|d4ۄdxg%O6PU;` %T . U ] X (m@ r" j&S { LGedW z"l |@!f5  - op p ߸$z>l$ُ\;ܤj }CZY/ * 5;]$=!B&Af*&z&̰$V݊$ ^ruY{ m""bw)&$#:d&Qt Ӵz#tیT`D!y(Vr&;T۠j݁*%3R'&q&A`#IjAr +as  #N r a o<Z o (  -R 5 Q&%=,/)03 +P+ 6?0|2N07h0])^3'WZjI2h=ZC## !%="<# '    2۽4 o(=qBQ4% ݨ .gX!+I2/b%\gWmG:)BX>Z){v o")sO׹"_؟(L4#RqZ` ھ1vyop VNx{XS o M XePA~ u46#/s+x'&*$M{  ?pp{^h[QS ,v4?CmTa1 U >h "QjG2 C  Z]R :ړռZZ- E , # Ԥ-o! \ &V?1 U U.8Os\ Fc! J 2 !2   ^ms!j#'*X+6-ʻ)ˬ2h/_,([*+!T&W%~%Gܚ!\(] U: MSy``V_ Y r x {P8s##DQV?4,N-xنP=``Mj ~ !(#SJ)+x440< : <rD6@E E g> B Q8 3d*!Ah %?sA_Di*_SFݺ|C h `qEv'# [ ^ a@69_VPc 6 y u2 ,>R m > ) I D grtI$5Wa~+|g,m_! 2B=["&A'&ݞ(+H޴,i0c1Sg7U2^48.! ;FG82!@798 .I7@sVX6@'/,V#5>'ZL2 # -3 u  u  OsC s= K V I-  @ QPF/Y,z+^\^rng-}S]s4Jt,D ;ُ zՁ   ҧ 1[K7-V  m#gxT ] }B { R^swZb|m sW9~?v EnG ;^   xU  d x i@:dTj-dmXpj;?Ii&Y`oTV rs__!45"BO KaS(M_#SN-OD)3n+- '"#\]YJYe&aA ] Bq! !gN!**)T(% $#Sg/W  D:= W 9tJ9)$ e "?TqޘnDxEY neI>2 z +d$|j$03H-9?24-bd,9."PK(>!L֬CI##9)׹.[wօ/uaoUog #ڧ7: E߸ f IE&|'G~RSr݊=3Pxu0 p+2ղ#0ʲ2=<D i 2[ @ # r!y&߇ x3KNOIf ,{  1 d yD M/=ZKd [$+< Hv)"g_ ws&I + Kd:26s+r+p97P@<#(o(c**:-.?4Td1z4^/L0(#(I"1< . O0A{  3(;ݿHɿ>&\ʂBړV` z Q'/(Q'X(j%3&Ut{p pK`@;OJ,D J h k &vjh%h;*%A -LN0N<d N1 'W'sj!V%,|*uq%O 6% DPt  ,+* 'a*z){f([&!Œu `r80` ( xQm`wT}dU o 6eK+W_y``'jK,/O3)B RQ))h2a-&q .!cߛ %P5ؼou2uFi{xf+e = yӾ#ֶFrinњ\UܤT = p{#P u;U 'ن`ͩ f3ƭ/ӡIxd~T-5 7z j;  (@6d-BP u!r#% %*"vJ bP۠"ی @8٭ xkwZ]Ub_ܐgO I0<e]uaM4u/ #{ I22!P i "  @=^4ia"l#Iu%&g]&$%yLI|+ 4<ӡԜXRiv* ',184{TV:l;8NP@ F Q  '   \  ^ @ L!20s \֘Rǁ4ݔNd8 ݨ k y i  j < u'Ya^ 3    ގ 9b}dˏ)׹,{xة{ٙ ubZ Z ^`7 KD )  t++,2`2D25N38L4%$/0s/|/ *'M5=b %ST2۪f'v,޴R: ! ޢ$ y 6 ;`G  #Tmmp L&E b?ބCF6'׹fkH5-כjag U"[~I"v}0 /&2 153n&2a7N3*<$4 ,;2<%= 9 j  w U< :|PS#tlfp- P>m^J>A"(w%,]/0d8532/i0=/_0G0V53X7r3/) 2g{{ړj ,k"(+dH1a0/@1,*k$"]-%o@|N%O24:M;##eHH] #|[& [- ;  ;s  x7"Yu y H,e] 94!L =h/h9IK,}q\h!fmcw0 Uqd vQ(}5|D" @ ~Z8%c >P$ _%'M &Jwm9@`.r?{P~`@@2gyEK h*ܚpau.!<Vp]P dy$ 5+?s+".\$ ,/4^*!L dN BdG Nr*n';̜LɛBLuz ,K X ks (ĝכ|߮ 73 _,% 'N=u%( -.5l1Y/+Ι'Dʂ!Ƈ˶ \o u9A(=mo_EC1fd 2/ *> R R$&/!V"&$'1J5+0=(6':/|% 8 ",)wI`v73hO"5 *`P)9S:u.f.9656xn/P1&,)T+)7*2c$/#>M FW]e \Z~*hgd'DM mέ Il:Ke4S,nW^ܚM#^#5xw4  <7O #5xlv ?W,E^K hs6d uߑgk6 ڝS . ߮ "C ד^(Ι-a}Ԝu'<* JZ>jsAT>9.,2kAB% I! H GF3@fP Hjjvoj#tU ~x0Dn-QGDcpt; ~ I#es@S Fa:  RrnU[(6PC i@%772Z=ن/#5mb3C< 4% c <%+ a Y v@ LPS 5 XAIU1K!"!8"lxSd #YTp}: "% B j &j = aK)"* 03 31;4&> '9@k8;m6S1m%m e"36HXhx˅F6 @L a!V<*N".6:Q;?=@ 4J ;7J-v,r("_B^rYD xJ`;'Jv"^Mn).#q% r"ٿ7ZQ@ f  t % k ,% h irm * =k\,f.]`z֏ݞKRՁFM#okFϓ*! 9`U*#Q#   5 R 1 e:gp] EJ`NyJ ::5 3F  Xbj 8)Yۄ01-+/)"!8M&x`  E  ! >'&v(=!4D _U^9"rmh ƇѭJ@Cp))$-YJ,B1$a&"qoU  KO7$& R, (/| )V+d'$ )q &f5;2t9I4(+Ԝ!q {jp|!+14D$9ehގޘ|p`21@(L?K (K cEF^BK9e9-1D#{-3!X .: 3P D٣C޾ұP+doG 6}F fZ&S%*3/.S&q(G/#- []2I^L +DV[&}v&"~03| I$ Y# &'%e&&q!r yWJ^F۪՞Ԉ2цҀ Es~'] ~ "+*&(&$"r9Z  9^ K @ L  !8Z$V% 2'G"9$ }ڹ %-3,wҊNnIF./IFD[UK|WTmSCJK>9/&# +\^$˿$&/*(-O%"4 sPXy 9QJ ݔ'*(\$)V *t|w: ~ P ?  kG0GU*m!DN:$ ~ "bu1SsG C kݔ 9 mL#%&(+V)8 "#S ( p-/ 5*SF t\p( kyz ~PJ%r-Y'jJgo؃:ߤdzQz7n U u*# W E0 x   gyV 3C ԮL _yJÐ ų ;/nS(m  ;  u` 1 Y W,sV` u%c-3.5I4Tj5;23Z_//5N/o)q( #pj@ _`HrΣ&b'=ߤ=^h ; Q oM oI '("F- (,/%O*b&q(!  mDW j1 :sVNՕƑСa9ޢa 6  , < Ovv,_d&J-+d)Tی/ު(!8[ v{ a$gp O BBav݁Hٶpު&ȫ ŗ!B̉j۪ޢ1   ,C+ s=dqxM a #Mpm?L_m )8 D XhdFP& iV7 ;&X d ^ / faF Iek,jJm ԮfF{H5r-SB^E g' 9,W h[Y/K /% m0At5 k @|% r *!U ~$O%F'Fl` 7 ݔadb(UQgj;,cUOPDY]7w "SZU-Z _V i  (T^kُ$>m(z~D#h/]([T$t)$2&$9!/Z'# IG %Vm*nKNi) .QZ HXXi IOe    ! L?%:eO@PGYGB:3 33 -~`&Xj OU9:} u-qw j_:#$w2ZSt{oa>Zsm'#Y X"")j=? |Y`ZGgs* \  DB+! dA/^N xZ rp*9Tvhk 9 2 r   ~;W:iFB`JZnNcm` # 3H6!HMJ{WWRjJ^QPD7-. ߤXgm?5ٶ %vZ&qg:a9=FcSQvW \ dEb>$ov#ScV)Y )P% 8 #2N!,CBV~l;E[нžbiŽԜ%}A|y 9^8 D#LiTjT 2Y*d m`v]'hvyMawDV\i mD; m ?a9K A UT nSYT =nZ =F*--q%O!Cv'=z$K& L`p<gTaj|f\@l%CaZ^lGR4FL{)XVo  @ J mV* @I- Gp|Ow-^a!  9Dh~F%8 j#( @j=E  G=K=`hQ<d%=,-0p0 1S (--.6(*'!B%, I$;" no&@ '^o[.CaZ&Dz+? 81[=N?9Dy>2 g0&!!% Q=$j Ii$WXB#سi=JKiyìcH}F+;9 Xέ o[ ۖ M]Lm`s  V ouzkسLK@ dLF؟]ׯߛqݨכڝ2w+n D O ypL,)L53|14'c7 ){a~#[)nv ,)UZЄR{Æ RȘ uЄ7 x{ H   B . |)0Rgtd 6[L u- %߸^bׯS_$ #4L̜JBV([&+\9]:@E>BU:O@ ==<8O503 _+%G I fB: PU : 1OG+ V \ZK_[pg#&#Sb)',2 .T0A)O%cgu5;" Ai׹),_нE ?zCmB_vD9>3n֬.$ad#~ԸI1"*a}l%D5л'S} 5̦ A!` < em0c; mrPf H ՞ץ=Kު<rG-FUD g ( Fp݊#")#"SjDh$&F"d'$9| H:   HT6(gcdqESړ9 &T]uy܇@A* (gi&z%/ 0 8c8cv%O3 \$! '%v)h&*k&9###ؕ_f@@UFdC^('Dhe Yh RM,b&! nm0&`$a1(0*{'M+J!L -sjbh)I%Y<&ݨ/03س26݊4. ,g!f!%=G @ 7mB^#d+PxYd% 2O 7HiP^ r,   &+ B۪4<ǔr˘ɮ.a̸'*O* F^J=#%#D #5$`!,)(!+"/. /i=1@#,,0 G&9q;0D}eP׉\؃޾CunةW]/Sd'ɤ rϝ;RҞ ~ kˏ|t+ p Ft^Gde=_Om? F% G I > G,X T$/s$7)B&$CP#Y RT  D]W! G o^ I k7_6 pIt_49sn DC "j! t o1Zj [3G>yjIT#Jad p ~B[UF]b#n {Xϝ]ZJӾ7$kip1twrG 6%igs ,69jmCpڧh MlouF o$!8 >5$/$/N*2.5 >!$BJ"M"vI!1G(A.S11*"FK6"0sbDDKg Mpd  W'U` B aA> 2A  6  ` G i۽ ܚ |pj%$u XQ  ? xad&q ;7]}z^ ,"V$l:/x1w|  n( ^1X R4K&-"ˢ,Vt% (wų"e$- +d1+n-v*D : 5,h Y/&  [o+cvZߤht RNJ^z :g.zh"lv!^J@' 7M{ e#\!B (1g18)544T63J( (y3hQ4a^) v |C+Sy@ Rj!,$ "w%( "b (n"X#p,BQ+R([-b+)*(/"!h"R>|p=R c?Bg xޘ  X'U+_A%8F;709%3KP6C:s'[Ә\1s̜lWѤ]B0Q/'d9kp%/#  !! <6 eP7-+h9٭٣1sةR܇ 9:9D1F f FN=6 ,r;1 6J#-p(i9!|6VN , %p;8<.EL8^AD-*'0,2,)$ ~{#s<!*^HnzH>Sw Y/([ &-(*-;)/&'6'W7 A ?; &@ C CD=`{@C ?A 74.S|* K&qu ( fZZ%<7 o k (r !$p&,;.4. 9,5t5C4d+n*$\/ ^ 6U83Bt/C N^D Dh$^ _g " ; r #;2f~V'S!V[ <"$'2:݁*-ܤ&J$&+~ @"p4` m ބ![X &3 ap~/[۪#Lq]qݔjҀ`1!}FӘȵ]:Knڊ ܇5n ޘ DEm!jنb!dЍ^="0ҧΏ٭m9?N\ (&Q(ۖ(-)(%Gن$ٙ xBy E H(^Pd&YN{]ET/sPb9^" E &J'P (i =Z 1  .  _ g IWJOi!N!IuV3۽-+gd&v K o B IZs).% '*~("*( 3o ij iK jn I@ %uz6hM*> Wo<O7`־Әt Ձ uԜo ӘVDus^ Xa oнM R %biFmbo_JW_ԤVf[u5>9 I۽RiIޘ *? ~ 1Y /@֏=jEkɮ̒ζ=} PDxWu%ޢ|L6q i&0 kG g k- * ||' - 3D-@0vFa X:?gYTxg: m RG s73?|T    IwPPQۖv DZ Ok=1v #: /o;9W9g!6 GUZ,04::$@aF ,JAK=N7|E47& n L [ #ٙ |ղ /s)/'"Xu.% j'0L6x (05;U1J+'([i" {@ o \ c|% n X_ F ? I ivy M% Z 8 2`;%3(>! 1J 3P$/7_/ :'s7,V9'0*'4#\- / F)T jyf>IduЗ˶Iˢɤ{Tv"9޴ RG1 #q&$$"'h*+ 6!//1&(}9v'O 8a9!ϧYiֶ*ة/9dMS{{K @w%0LmkA=!w/$gު  Ӿ+{С'2%=*ד'L1Ju&A \ F9`X0d^ Do \s PY`S:0y,I:!9P w@W O@`#\P{ "m ; &{ B ߮ [̜ZaI{$r q\*$/#)&)^ " m&")mUx1/ ־ uʨYt@vR F&y>u5j3' %%B{"   n +  ( T 2zp d x{6bY{Z *KAUOw/P! 6f.7r/CqA#Y9MZ#T.|0_7n8 96x>x;A;cٙ2؃/_j(*#-) $2-H߮II2#Uӡiը:ƣn֬7]88$&(3(4P+-//'6+!*+R.6`+/,0*ܐ'ae"1#DOb ;P(A~b/=b6 wgm(N/< 2> QFIEKx@a=jK.IF !]Y *;s]D8G˘(k|tAOp!x`8w2J{oRudfd< +JB !  Ձ78a-N4LKKV0U   5ayX;SXka@ؼΣQ͕wȵhZawCf"+(Cr_xWK obP]& D rR6j B ?7++qW$ O- 6 ~*/ڊ 4ڧm&H_ڝͩV*sK u /-b[' *X`-) ,571@ m"*5%* $t.!h2t&  E ^j}y:݊}8j/'{ P t#\ $h'W&]v*<*0A7/ #5 > a9>GC9 53R+?*e Im,QcVݺKWYQӪʌЗk iD @- Sz;wdSX<_$&+-/168Y 5N6k2#(G#*2 /0)*)X#ޢ2 G ö+–ɈhɮЄ pDKT o@ *<Y* R" p#5{%*k$&]W6@PV Ջ<]9e}+BAgdU `{K|MG z33Sm^;G \6l>6۪۳g rOx:hG1Tr"Huʂ` #Bv~X#I >e M (Owp]]]#c]i=JJSӘ rZmVH!hP,/($#&7&/'"$U1vx fzɛ}KǔPU#0 E۪L[ ,A &j  |OCT+td ("v2#`&q+* %(*]"#%* 1-P,( &'  <zS! H--$UUV \{pd L  a Fe  #Ls\ 3 a s h %tٶЩըDׯMISm @R^ cxӎs]>c Bݺ/.hG*4M+RqywY~   ~ [ O ^ E8yWLkWϓӾ 4X6D -@9~UZ76I!1,9/%m )DfM- I  7 w , R Bg"_} I@LG&|@lN` U{Yu1#y1gd0m::<ED(GrGzDR}@I5w1#I? ~T "aUX /ԒX8hz }Zht nAu &' Z  ~ 8 ,~F= g 1m6>c5+O f 8, m ~uwSA #"%,Bg*#5([v%&JU$j"PV"J#f! 5=\1Fo; 8# j?u_kM/#CW*iE!Hqnw_  g*u+\ /68<%> ;*F> 5t/K&z\;ktNw&PoFE< }%/)q=<NFKkVa R-LQN GzFE: (> 896-/)q_K\_ݰRsބ$ۖu8>7,N[|]'0*y0-3`9KE}GMO2Y+TWM=F|='+-$ zuJ Z!SϧsZדIղC}Ej EYxm  |ߛq+du&]2k'&%*`! @N# P1t o<27FSSSFg4`a.Ԉ.!ڝ}}W!LQ@q@") Q#?8 x"$M$ " L 9 /d_ 0 w k:%iOd:pA] xf%b&j-l,=+-Ec,R+(Q,(K$$!h!B'Qۖ x BWRJ}*mBh ,-;y c' % L 5 SC; o^  $|(V*X#\9((2+--5.["F"l |%=d][ - |  ۖUؼu7Ӫ"s a("%h1.= 7/-> 5:(=:+?9y,4+2'(G&J!([ ip6gh XZZDت/%V [p B0ݰ|N]mxKNJ dͩ3r ܚdn+@/N/*K&?*/ {HT#w؃$RFJةD=&rU_,vBqi]` (  e :! Y gj ^ |7 Iuz]p  ~Z0cqar݁t) ,()^% (.pw+%Ox#I1!]=% u$j_9j&&w{TEL 6<<PH6(6<6\::29= 6-('} R Op};VYQζUPWɈcZ ? x ( g  pM7&  IJ  k<'y+{mfO݁%ݨvGe/,@ia$2݁" o Ls!@ R+R" R %v% !L\/] (C$ٶϹ;N0;Oc۳ _<m  Y")k$jy)T, k-)+ B+ %&]D!f9  |''qD&5tV:,iYm (O n& ~7Z\Hw]UD y3,6ig# 5#yz(w!r| I 8 mhU:8IHca$O 9 \[ 6~PbnF#D)Q/,c^ >7j+$a* F&E!%N$&^,B*k,/+i$`$C&!/L Z  J  `M1tX" &"X6 a "A,)q,L%4@U fYr\sD>߮߸ "> -=Kj ܤH/S a3^MT_Pdz  U&$* -.Q##3#j^ <2 9J${һJҀС֏{Ӫ֬2o^'p]  5  Hj x a [ [p<#$]&T,&9&]4gjRk?fǝ u%ry1 2օR 0=*%50 &&I_-b=J'DVۖ&7޾- w3m33x}1M*mT$w)SG~&)A1;] }3$ , @8@ o I#%{)*X , )*b)*2)E$tsK, aryty Y/@2t i]$6WuH m~$`f <d#'F\TF,j[@E<= c L #  [ N Qfq ( iX}2=TI|-+ 5 G&RS2wf"<ބ!qWt3ݨP! ,$[ | Is c7 P$PIכ}<|{;n <ɒ7pb d 8 fP^:T   2`ji& K h D^ R7 ߑ@ ݞسٶv( < \aV9ey  )mP_7 W>C6 "* %G+R(G'MU%%,9 P  cdq+Z{ yrv)% S < 6R2_0 \P =ctX S/S3Z  U`&jM_ dt|KxNA0yd=E & [   1QV -X4n!^O!@% (> ) -,`-;|+G&'s-!!O!j&A4&$ x/WW($~ ")#f/"X $& ""!g  | 0:+}D{6 d60N ( 1 y$  <  C/]l'l E/Ay2b)i9/?]hme rby2xw]2dGD > ?"F% %\(! )$4)^*(4'0(%c >'!W# 8  ' 1  +dCdy%ߑ ] (~w_s w' ]tD]|Nce_j({!L%G(^)+d+)%3, 5=rI GV"ގggݔ7 [F{  s( !_"Y#I$/:!g-~m WJR@Y8DI~< b wH@&|j(LQ%TA+xf ,j My^ LC/QUjq@JP y c ( '2<uS ODyjxh%70uD7MP-Aq$5E"#SB_'xCo7 aw _ Yi / xC= hIrg}yh1'b I3psn5j 5${bUy&3ن-c!ҧetVZvd$wZ! *`d'd {0v~ < |+6K5tni/Cߛ^^1` Tk> X &e  ,m3  1 N  &:~hB޾G32ܷhaV; ~CJ-E 0 r" 6ޘ[tͼ,̸BK̸$Ur!͌KuF>.9j k"Yd Zh^>K*7KT$;iE/Q K` [z  UQ[=G,h(>;*D")^*(WWAG.@ x  T B<=: c_   zyCuT U X z  6 O &>%V ը ړX3ՁԤ 1l Q  & @ 3 +^jjirdo$C[W{L6P<  I #me "Uo#yo u#ps]o} 7 c6 h J a 0Lm$32 L."-258;m;>:C<}9L:782 ?6Z9,35 1=20p.,9)$`m ,K Bar|F:3DlK1SH6Pj 7 g~ kgC&U !^ )h&%D@!DV߇)ܷ'A ]/I^~^KR >0# J- ,%m! 5!|D٣qP`/g4&y'U ! S,d91d&& 0 ELU \!#"P+!LqZmzy@ 7z % tqVHo 3+J i_-FU% ( 5a  F9!/#0=\4@0CY)B8^Nl'I[JK I!I! Cu83P o" ,7|068)0+8('E 1",K %L!\p*C2**V6Zd^ QQ&m )z|`Iy$mU 6 ZV  F%m + ;^9kmڀ!Ձ45/:7r4342v$&nɮuɒ { k u%S, vJP"l!^)*0G:79eBr =t8 o5 ) +G%m#a'0܇"vXH<[t ,ɤ - ةWӾcǁޢ bō ꑻj^nc $ qWp"PI#S) 'kr! %coW/ V Gun`G)*{PWW /Sm xD wW H% 7' %31&g"b `Fmge?;CDdbQyUB  &-&5Z_`T:  {cP!| \i'k' :.- / +0!!LBp[4x*  I \[ U8&#P*(>##$C ZTFe+b0wЍ2;F'ζ9Err?t6 L A#O8"l""*"v#]~R;_ 'R (UeһMn`ٿՁIBq&ӎϰ̦C۪ų mss] ~b | l :7 <?)bCY @&0 p9}W9'lLgfCG  *Z ! 0   o c f  Y 7U% 5C$j߇/d I:zKM`$ji$M.#_+-)L&7\H CRץ7Ӿنdqm DA^ jC2CF  +  k  d N1lj < MtF,"p)!=gz:Vy6+6bj]%g! ^TSMڹ6Mbp%:;gٶݨ4SjUP/IX!*T9@ >o ݞ\ѭaΏGyc: \݁XFڀG$-ۖU߮+Bj 8E*+7e u{K###I''!%*"l)J$/'" 'mB  i* 5M LnZ9Q= Q2S" % | -#9#+H ;T= GT F=P9 =t 0Gf3"/x+B(""W" <~O3j `cvL ~  B TT6(];}V(JSw xKp3C d~Z b;BHF`  bG3Py #U~* N!B؍ yGߤV^ߤRk޾ߤXP{/+ww6 G @jgW -U(<. &2 6a | c ܤZG  - x`2$%*(3!S#fk]tZ7O߸K}P۠ m?|یB+Wz7 Q% u F&7 eO899S+aU5ͼ+՞-W>SsֶSGYx݊^$H+bIbB4m/ 2vBi @$oU#$$/]0Y)]'I"%'% ^ 3jb;;ie-bPr 6 L LV < I n0/=(^ j 7 G]s 6g}6dK%@ !{ TF*O d)~$GDa 7t"v+v/796R4i48~31,%O =m .~fX&Bכj/ݰi#U֘aaњϰ NJI ʂ aˏ#V֬/* ~@ #  >"++M8Q0^+(iyF Yl  J | cݰٶWu|ߛL@ARXW^{ V m'YKZ. $)U/ 2-A <@ |? k:0G1 u/!r2!BAl# cR7dpLTE  ̦ FL 2  ? D =^nMd~_wo! +)TO( ([r'$j&!yvZ2JN4 ~_|HQwLD[z*yyJU6-y  Q 72 ]C&u/&a"Pa!VF"Q. +?1 x.3H-.,O)S u@01:zSLM5[  (@ u Dg!#S  @ y')`TFMmA  @ @  p- ~ m'}y_LxZK 'JN$T|6Pfs^O63|Qq}}6& r   *^'0 " >$E| O^,9%N X49O_P O~;ofe^!2{>  i "' jiI'% C`F3E+[=KBo 7 y ? g !h!ϓ#\6$ʲ$K!"`,'$%O$T$/" !BA[ { <ziv}$o"3H6v;m_=9,6]0w*3"X" K x_ #?%*Nu*" 's!|13jl ,  J10~m82;WUW%U"3"|"F# !uu0"., 24&8c47 ~)qd, $ l P@ 2A  `Oz%*'8Y[< zL mk [  p u`ML7w!E); r^E7|i h 79 - L ( ~^z #!9R | K?FW@7{t] *C!&U V kTFV($Cn  _V  כ3;Qb`߸/CM٭ %c=ٙ P_Ѝ ~ ޘ cDV 6L Sy Ro Y%$`*2#-!K!V8UIr5xQ:yS+7vZ<( m r LX" 16DF E` Es3 51Q!r4" X )}pRܚ 8 L#p Oޢh i "J KT2%  D L46V!r7f=(hF/:~ "+q^AܷGFY " IF 1 *N!w6G$ B ~:;H#9  * e Q m+Vb#۳+%%c"نړG&~)+ Bp Hy{ *% %m 1& o@ fn7Cn;oZI{ksWԜܤ9I wTG (~ d 8 [ dj  i;  L[{M JBtd! G@Arrr7a/ (S{  5< ԜH}ׯ߇2D!T "Q ed^LOG38~^u2"l |jC+ w&F7Ab4QhD0,%){N-3.0.w' 'j#^ & #4"P;di1ds DI4K `)A_]hG2 8j#1i +    ,  s \: y - X `lSd%V-$$C=!L#dj+l*25_ us 2 <  ~;,38)ޘ'W[().'0l  & qiۖ$s(=Ձgӎ=~K!ҧDW =$~Zwng;E|LhQP~g!B*O)'}&$ ";p'Y I"&i9wݨSܚWR٣؃ڊ{4۽`@d*b:>%f#?2a+d($`$CdW G }n:]ovDS%MZ +yYM[   nAj <&S   T  3A o _ ` r^6&g*k GD@@WߑOKEX%ICT9D.z(Q!si~"   ? O^mV37LNK*9p3 >zo6#S$o##=, a(&:(G`# !@  ,ܤyaAE*m أ8NJ%pݰA 5#fi%O #`! Pv 1%S(X/XrYgOyP3RL/ { "Ld# % %C?9DMESyHMyAJ1 Q"j%߸%ݺ(>"l'W"v\'%!:F Y;5JJ(Rb׹(4q"`3L~@ j)_Wb: x U !r 'M[& +P<s; y xr 2w(Y|(?7 | a  5dR X0GLdK 2Z 3{j !v*hړ:һةD݁6P/@ Ks  P  2`( u& ." dk < m  fP L D')>ߑZ@#KAg8mC*u c.,!("3!!"   fbTJ5ysf?Wy< KhY'W< 4,_!%{!rP&!GI(4&]?VK3s^F0޾ D&r EjQ (^g F H x3Y  ?g#"* % &w6Z0-JK R 17lIl(UZ!1 * a,U|#C">+Ԥme]x$'$]!V!#S5!'!`"lao^W|U9yDJ   Mݔ  6cjD 4! $MD0204^6eAZ@:HIC:V:C's /9q& @ 'W &v/]dW 9e8+ rmuY~X+^%="" O,  G)" (!<'.S20t0*+ռ,,/-ѷ8O0w<2A?:_A7#1)֏'%e  ,%&&"%c_&! eNU"F# J  uN fQ du$^0 B 7XO%g##S+M.#7K/5E2D2(.%'?Z$A zY2N7;3GX9VVmU7 @^*y~BCMp <]bCeD'#.fg&z|%( Y,Z}dNJ,ŗFҀօFIo)1S0,9I91"8Y Y+R!!R- a-C1.&A(m *O%v%v-"#T)ērLrO J\7}"&2T܇ 3v On $&A Ud mNSK)eW-W?ٶF ؟pu/(y2 eL&AK 7! 8"u O]&9?, Sg4/m !h*"&Z-E,t--)+(~$Cd 5 n > ) !e Xds%cwW-&; 12i*M(jg a (fX&8 E؟<@7S}p ; ")822a4KHW?K@t|:sܭ0G(,v#sYZ ;d xSgn9E<Z _׉ i G&Щ Ձ۠ѭ0Є]s6'3_ةb{xiR ) %3)B$#IlWu Fa>XB _ōDāM<3^2p i}-0I{fXO@u Zy{;y` k rB m x +"c1/,_`-)sS!<!+; 87h[C?-K Es2C 2@X5X-709]"7% * ' ; wt(%>q{+%cA{ A-J ,^  2JpZ 5 aV 1~g yj/>6o5־p{Uo6f#O]z23Z3 > U9A0jK3wB6 DvI B^j,ܚmUxpY(S@-+ccKkOKoEu3%T ,2!P%!^a/" 8 $j  8Ps E/ y uu 6 nY  k=  z~  { ,`# %* ' '}##(Q#y l !LN+q-<<3*7=9]>75E0c%*4{'+?1]$0N43M-Y,|"($:_;6%=&'F/ #3 o0 s41*&q/Urx/3@2 d n!,.>9G895 {6n.'% $D \_*K x0 8 F2 [V  u- DjO1 MN)vpُ֏ghh69cF O :!&%*(>H*/%3ة>{v >,߮Q 5@$ 7$D@~ q ޘ ,\d= ۖjJ0#T'CmI}3JB6I@6:!TlM!F$;m/:| F3t$mQ%*$%($VKA<Rc,[" sQ!Q6ySF q,%U"$,"  I];3dAVmvHmؼuG8c+V2IB =   %=!#f'& % ### ?<|`6abn? CPXzt ܇J `B  [Kd H%YUs0 T}W((k "^%K<"P A x}?  t|j Gjhq=SV9J Pi6pD!^C 1@ Gۖ;Qlnܷۖd5 | ^^ ' &U)o3 kx a ;g=UP`> mI0guYW qZ. e21j٣U ex( wm q :&J $) +(w{/'U =F  0): 1s Y ;cDL~ x:"&).{1x3i:\6e20Y+T%m~o# kLA='d؍*۽HҔ.H{ ,t|EY./;T?X\DT%b78~&٭##ۄ \ݨ"س.٣>־% њ H ڀ#'],/022p7r9C aB =@t?=t>$`D@->4,::):*:(8v#4g2D'1 )83O` e apB& ,cShP  T fD O o= &F Y  \ L !"' M < @r |\Z: [ G'N:SMcKrk ռdXNoGi s*:t u%h-"y-p  `(]5NZs*Q a 'j{d 2 f& r"Y?;,jن(1{YāDɸ Yڱ޾ 6   f m &W &'l+* %%C' 4~dÙ/h o$뻶3劷fըGVѐ߮?B4z , ] u 'd! S % I!-=h&? X c m aOewYi iMܚ z (/eO-k +(ALg Zq0"X&"X!>8Y ;  & /!4~Cߑcܭ=Ԉ n{yj%V4>+glOjS %vi(6,,/y*'@G  x96D_q `R;@  L$ O,P1؟·'ͼaњϹ ղg 2vY  ,r%$V`"T=jW %=&$d90Y04(=3' 1RCd[ 1 Xw6sREA {٣ڹ4']1 AQZ޾^4Sׯ $ω Ͳk`DhEZ4T i,|@ ٶ ܇ h cVݺܤٶ]W֢PY:QB8|m%[& "'W-v(*`x$x @ K Ѝ ѷEܤ?M 5T`NK 3SNLB`y&Zp X%iܷޢڱFy цՕ:^]OA eI"FB/N2')p݊ی/`7ުb:5 sh9Ay" p< ;2 1& QHXS'׉(FC qDNrtLN7Mf]4׹:5{x < K V#\7'} 'O&A+$*wC~-q=d%6 I X*3X 5 iK<"W&)=5 /&c0+l'&#&-'#\2*V:l,kU Jd%v|_? 1Ys~bS ()0h0Y 75!,.3-Y7h*9/:0=4<1<77C5b*6)1]%)!#y! A '{ ܷړPۄ$RSOmNJ|\SEsrm ~h J % !tq#5s Q   x ThNPrQKnԿ!R (aMݨgB9F߸9-@{ !~u "v"(e)d's*(j%O*; " j JPn% / G#X3+'s ^` : {  p5gG7C ;]@r\ S! .':)q0Y0P!./|-,|%1%Y!% n | &//]$%ը֏Ջ"ة Z߸\ՕMGoG׹yޢS;'g)qf0* ?C:Cm9 o6x'5l(e.+H#.I[3H4 9628Y%H+)T(4:)$$tB/# ړ=_fudS! 1~ uH=U ܇ ; ~ 3^#pC2.78 (2N 4"-&J"Cz 6 .n \ OF p@ѐAΣsJM ZtUk@,M a 1  w5{TI #,mt |7" s1 'y Ud(S Souqy_y^Out j'0$V%&'&M$+  L  +R%(e 1y -^4 / 6e +$V M  FAtw {Mq9@  u9 ^Gdf^ ; RQ` OH # 5 Bqc ( /nj Jy" #,{('&%3"v5##([#K<)\`8'[ ѐ \(G^,ڊ'q н7!Lx$R# Ϲ#\84 y Q La H`a5 TuwM /'V7JdVd~eo&gj _v  pwhxrgH3 x -w')B1 2@15^,|t7JA'EL KJKFFP'Hj@N+1Ji!y 8ܚJIΙ1(M*i c3^ m XdO  }yn6<=%m7: < A V ω WنP " [V  x D jjD ԒQ6sē! j uC{ܹY$h#,++.+$'&Z !%4g+8#"b"l("P!'*'&%G/'' (&!#I$)$41: 7/ a4%E/*u$P l$K" \ZH _]  ~ eY(++(6q1)$2N,)TM4{%+x!|+""CmolKs OvNm/;+Y%Mq(ԮHfͲw~Ѥ":(2: C " *N[.1 f64JL2 +/ F R&4x w^51 A/gm \9xV4>j&  ,_/^Q #}s | 5+2'* +|1/8:C~0G' j |1 '2+jQ@17c6(s(SrG*:ٿ?Ir ؍fqU7&7% A*':`&&S)j& ["b On d xw P Q{S(RFj4`y۽ABqұo;؟ (|m.`&*}*;#p', e_#-e.` |zd F4)^mU m 1-@]I2{SmLԸ $#ݔWORq"I Z];  [ "a'=)T(D2 ) & eM IShYo)6S/;KsE!- 9  1G , u*;#pi%v '3d>d E5UP9LeKz@7K- &A vtp=[H s  (X m O _ Rgs;pZ7P3; 4-&7uPY߸ M .|V v-3 x[ O{ H{Gz] "~ұ@(ͩHϝqtJKmՁXuX{at6+-1+<^x/ O#goZJ>`G;V"w 8) +bF9B k J !JN , ?^D"zFs  Z 7 ;  $   sUe&##yW x=^a x#\ #?%!&jpGDv|_:5 q.#=}!!Vk(")An]KP . 5A/(1dj  _ >#-Yic  ƣ? gZj ^s Oy C']n`6q^KQ@#`%#7Uӎ23- v@ ir ˅!r&{~`I+M{sS/0X,DLMͶh˘oāͲr`P??m)Xp"RTWKY Ja[s{QipwU U72j IԈ `=ȘĦVһcI L@=j-8/QMGF . (g/\ Qz"vLg!o437pQ} ,  -"'   JQrYrB ) _c U־ a  kC(Y~ x Q'e$90h29==1EAIEw@;>#:00,:-)6Dt%= u $&!BA 7 M -G\?r~-p8Ol_,p \$ & o#\"([$ %5 '1"+&$.6%#( e=C YaͲqlῼZ۳*ռ_DZ}ˢپNiZ%ن E I&c)s4?7;>=<3520!p# & m y rY`dI-4*L- 6h uAd8} vgTm i [ F9 E=0`_o& #p)B''W'&'a.?{5 ;mH:FIxGMG)E0 = B=j43d,%("&6P`6Yw Q~wCdPK3  t Vb Frvxf'_ Z0&-6Vi!`J-,WB9,h,xl:v8b9ުXlY y#GQ$$9$j e"2$(Q%%Y'!'&j%!rU!Qg #=\I[ i u  x2#I&J$ Y% "["! 0$$|5G$  ojS 0LTT 6il.6(*u0;.,i0, 5+( );&A130*2`) " |  i}' qʔ %_dжd )ѐ-+6C2Wݞ83-Z/_'(i)#j# &1 pQXO DgB߇ݰ>#|C.ؼgVL_I!#-%+j$,V+w(4(g"$'! $&+"n"J + ~N#9~) `GW^Aq J-"''*-/s242'+x964,'&2lqֶlih_6 e- Qr,:q%8<8 =??<>d85+n($| ^ގk7lvG8V+S RPm9-0 IU |R#Z! "i!/ @+  i3Ww&w.N| ^9;c Ι>=_*ڀ93 v F!/; UWJ-8i DGB@ o f,wd\qՕ$D@79ZHcn g 80j#j!V" ,!L   # <    u u TN~^0<Oz c` KmJ6}{e ?I#2Soπׯ"؟c oe U=1 0U(e75.\0 R(eg@P>-j,> O٣ڊی  Ӫ ܷ u | u#f;*?z=p@qBD1y I<6X6.z*r7: I ߤ KFq i5 v (_7@} e>aA/dSг,UˏQʂͩ d 7/uٶ Z SҧmՁ1{@>߸ޢ~_RXg9V@} 2 kn L   :7 |x !pJhL1֬ڀ%wv5] u- d0(^*-  &C`! *j!6w]l(~91F2(İ@ idt)כ|:  RUd<&J!V  B 2 v)G~3*c]n-%Bwg$!*n"2/2x =$-)T ,%0*2$/.# y*( &J"&z]-v':*N $/  {F'}#m#?+A6rc<4NJ%ܷm _q( ,11I o , ZKwQI N 5-: U*m0X |HMsLJ  2 BI "S M |w%eцxЍAy'.^&$9-X!r(  .BpM"P )'#-CQGZ o   & @ :XNYQ m,[m_&&   LBS@U5/ ;\F K*((42W0*6(16&1g-O(,C-)!r;\$ʂ͌],~ZFڝYI)S dVjf"$!wuY@S cw Y25 % "s+d (n+5'M,' \ 09 ~ / ^ O& k o^ RMB@lT/c9dZPK m  )8 $/0Z&S +d 12, (9c1=VպS f$ U;Ƈ/ͲUq#; ,  ,   ^ L O  5u? <QYlA<ބFx}i=: tSP7'Z /u)jGn  # Z  O R@ H~Rcg D_=_j*h#<$?80:ԸP$ H-) "uv ^yfP3 xk%k~#"P$`&z ):' 'a ##$M 5&]"$j$C$C 9! f# o $ $ #,L7"X!8/ $ &Md"NZ  B , 23l/o U`$C"*(&J*u`%+R ;+3 a T F 2 ͕ X  rb rÙsPwa=Uu]!L%)T.,J/341q+ds.60cr..^03 +\-&3n0'*!Bp*X3HGp|F P|ORPNA=}.Q  2 _nAdO,: k s$#;!{&g)-44S;F9|9 9./#t$Uy"!+!)یMڱ ,#0PSُ\Ū"͕FcVBAπ@t88Z/:+-"v,YhGq=ΣҊAכl#8i k ^&g-%Z#6)-)^z$/( !r'e+ [Y {9 e؍auڊ Rބ Re: X  z3CUL&p(u.p /9 14 8,F*FW  | 8   kj j ?s| > :׹ s"!%#\E)(~'!'Wٶ!L`* 1msp &' a& )q7($&! F"|?  m a5Z DZN$V N^=(Y@ n  - ! '}$ !L+'  D-`-!/p>6 !Z 2J .Ua # ,0yL ep| H#k @Z/vܷ oܷؕqЍ!Hѐ\ t mR )WABLS:F X@`2pڱJ 2:m6  :-g{ M@2M- ,   *07  Q   "X)&]'݁#yJ1 2N|{+UV X8Gtpgd:6 K  k: IKj &zb0YK3:Œ=Ž>@I9;̒62G+6)U en   %o* % !-E1.W46HY7r?-75,M#p/ N{?bXl,|s0 44ɮ7/̦:P8cİ8v4J+x(Z&Igh) Y &%'&o)T*NZ))q(4?&$-E%$r y X& o" (7 R :5g`ՕwO >ц, mLՕ R!.,/964w2'/|"(e' p !r /aX@%GT&1ѭ1ϓ/1T%n*;ϓt YI*hS^ u e"P;"v$%3']% $ _;V I kT/#.64A?G=87(Q,|&c+JN5z KyJ]ea83 T   f^u<1Cl# w2'o_ Ҟ "w & Y r IU n6K M+('W(I $ 5:>'J$ f g7K07'0'R X^ t2MVYُduj;O  Ac d z3MG*qiz{/.=S'a'&4.6w.#'" < Q|ةE62mx"\JudI$.t*&0ytWΣxDڝ>nX #,MMOah  Mhd2jބ%3޴%$&*b$ A 6|22g  N m z `     OJ !!# 's@,/458׉63F2˅,hռ+֏#D"sD4{ 4 BB @ XFFX?3A3~$?(ef"lYu  := G,d /Օߤ, #wa2 6 xtD$#&J.ڊ19yEDy:Ӽ A8Y:A4FGJyJ͟G(Q(D;9(|g83ctf,̸l&}35/٣5#<1`N ;# .ʂu_Ԯ-ц כy1׹DY=lׯZǝ־oS 鯠")8/252. +w$>X(% v8U"X-bx,% (@#I$K- 8 xbZ 7= Yq tuxG#vҊoa5zQl9ln][e yYjn6{mhl6 { "5$|<2[/"l8v*43/: /|9YB8&>x 0]/ "c  u '(* * 0:9@:<;F5%48.,6%m%uv O i4`^ }N31 }8 1w0=(:7/<5&-r*#{}   FЗ 4Ԉ6ɮϧW^Ӿ6Ѵ"Ѱ𺨥8H,  @  rj<"]/PQU  O7d;m~`כޢ۪Gz c w"3  &q&(&7_.I5tP*X@ B1%P +UD@ E9^~~X 5e .,4^v.p+R%JY5dr6 ESM!'-cd&$515872a62 (9e<S?= :06,hL* # @ #'Z'M%`.f-lAx67i.i' b, a9y C:]&ՋϧJ\:@Jj?9Ox`ؼiF i2emp x x @8P xs$ l,ݨT ֘y)[ o##x$OgU F_1 yx @7Wj"GӘA?7uTPwsd聬/@ׯǔ$X9~t i#t'I;:GrA9>N5E!90c-;' %Y1#x.0P?2t6;h;9݊; c3F3<,')!BAh`^LnH=} "z v5b pY"%=)8*)BH#G!9M|W   [m _` ': " ,(+o)B&]8  czwMy ;M-c>/i d+ c% o iO r7|!N aM` Jd8+/+FI3p39}P8 ɒ1tq}=a8C 5xkU#5(&؍0*/1"PI)TT':$ǝ8!%Yx Σ?Ώ6d R+{n;YiT--|VP С8<7I0s0<&S^$#gt]ӎӪ  k@1V(K*D., 337U&< o8ICB 9h>8)`;8^6C-++t+#":|E :e5S}+ѭ7ڹ:ޢa&/ gz^\/Yl]TCR<++6'(+d<+2.z*:t 4S:Rzړ,c SR>r[,ړ`ì'fD PFrωsѤ&X !h& Y |ep`| ,O;;9{wX $\E opd#yag !Kk >Z#s{8?zB[݊ގ 1R>Lx')=`4{0=m,%YA{#\c'} r*(eu*|+H+.+,(s-l$ 8 1]߮f/ad&; 9u_P!8<- oJFM.uJEdUzi_ ? +&]$; 6\+(>8 Ho& u=%{# ;'#.ؼI2$o V{z+`XXqޘM2/D\:8E ;Z5t>1/31g%?(*AIE`sE9ު</J-bAȽ#ǧ eHÆ Yāszɤ|6Kұ ! & rYsei :J& t; 6\]ڹ l ~AX۽m\d )>!/=ta:6em2 .#p)qm'! PЍ 81' xOٶ r$ _47@E'D\+L.O8O6eXL3wN6I+4.Bi3n>62-*4%8?EF۽ޢ+Ѝ۪L/dU닻 N1%ؼ 5 R 2yjHZs߇* C'ǻ**$% "@بD  # ߴnKō6ڱ8+l`wY!r]WuE iwz uB__Pדj8)6؟S^,'&A{guU, @ > <w%PUS]r t<]#02B]*(/lg6UieuP/  &@ u2'3g~`Y &s KV ìDĦƒ öT4 Er@0Y<Ԉ4:ڊٙ,(ܤ> uf_[c^j/""Z $j  G{##(b99xy$%S~Sl*w\d}6DK Z oxQ asa @ F  L'(@ OJAݺ L(ߑ3ѭB@ x+ Ok^uIo?" , L&ܤ@4g~ 8 @Y 89 sh|@Wv !#%{%Y#) o*#y*#'az#y KY~v< 6=p`O]V -%Vobw5%@>D[ s{zt ""<.S+H%3:*k+$C);0){.r':*#a+[C IʔƷ]%&_Za g5ohS}"325H/DI E:Gl>_:_ 3+\([!"E9F!6s6  &myj:.f#\--(5F JYX X^ Ug^T?E@;FX5X*;&X&=FG ^)1L">$e] @  Xl h8P^y[ "; Rj*ҧ,H4h8C9?AQO6R! "*K Jn H (yc15 xg M  & %?EDhU%y*WdwdOlNm_,"^V}|8#4%/&/<423nCI "=` IF :M2)pj475fXgm+nS f}q E5 /1,r#i %|`;T4v !<$ww9f (m&"<% g$C@  aj 1 DoPf"Ce{K !!>G"?$ @'a<*9.3/9)B9&7 I6<5T0('% j2;3 Eh  cnJ#A "vq)'Stl"| 5M_264#i,& -Y}&;j3H:775"b-&.p- (w4$/6a7_p7 'j/" E |[#>_}O [ړѐ23BZI|fmX&#W8{6W޾L{xmo[,GXa,tlL53Ҋ]|eՋܤJڱQK+ڊњbePٿ [9KB ߮ܤ/{: J6zL:  q.+ 601@w+(*'0$|N!vm!V^$Bws]v@Y`pڹ% [ yy_ ,j O E: ,  O9jBm!"Xw""X#jA˶dӄlEZDZN}C  mECJ1 S royg n m" #%|e+ Tv'b9$QJX#B9}`g` 5DG % } u B!+&a,).6,%b+ߑ&z=$ MH@x4s:ٿˬ]pvVͩe̸| π UӾUg r{ O V>S"b YDF6 & ]] M^Mݨ[2\]C۪|/>н֬ؼ ?/ߤPIx/ y+ 8 jM M ]%z{ !M aE_Fn cQYhZUMn8 {TJ_W%"& {uULgP T   xxj 1g4/'.(e}#S!X O gcAfs|g, Ta8k؟ڹ۳SڊYm2!'EY ݿL&++Ϲ*>+:ݺ$;: ,_Ώ1@{+/W4,|B,(4V.v&])h[( ,0by>Fؼ6 -`N kZx~ eBr۠'$d6!w;':.:M;4]='='/G6f3[21-E+Q#y|$x kj 9=_ \2,O-/ ;b= FEZ"!&J'k&U*i+nT-P2t2y112/8E)2a!r.,))8% d%E$ Ht!z 5p 5 ?g UY (ܷ Rtvf u '/ E=sw^q]s5XrEcgٶ uWA޾?~a~*}Vb K P'H+H)TU4S.z*r'w#y .1: /hw zy p/GA`O(mL8A !T [2k)/0Y8281@=T5t,9'8K2dic](yGtMe]4%$F[%߸)$?:0>>^QHsF $EDETM.zI+Q^Ei?i8m)F":M 8KrR|wѐ=ųĺw%n0 1X# ؼ d]|   [!| "3#$%=%)h (4<"Fg%=!z"Zo( ,; ^]ʨZˏ$%90ɮ8t̜eζT%"()*k4-.,+$M o!Wk#1j3 6!IrMaj/wݰYOwoV TL 't%Y'/ ,++~"#s ,7 ! Q>3D=^ r{ \YO@#n  ,!,|.5l7r8<9 :MIA[G@t' 5(53 '3 +0"P34#-0*1/ -v&G#Svv}&&Q:*cU, g}C9X|+r*%2k1Sr3P1!%V(m"v !/"^+$$!/G= 7 kmdN|R ԈF&ڹ[R`}cU=Σ~һ?֬xG;(Q! %` (kQ _  jYdXCx QX6>cB 6S-ۖ9FʞH?w;^rq ý%Ձh%~Fedā:0]HV,_|`2my^C(Z*VF  vi1T]J0%"%Gɮ'̓% ,Lһ'0!i&7o<zG 5D$)^*@1.j/ <2 +&J B "o 1~T, (:  ~ L!~^<]Sh'T ? ' L'"P!8'u `L |u  W H{>ٿĝ f 4#,/_4J73[/9,| !  E u ;Z@ fo  | 4FA`eK=;`X"#O!#?]+n+H+%'g"D& +n (w r. * u5 * 1Z Md + X*AK1* o ] Eҧ%sړzcyG?pZ* lc&-)PA+ 9"YBx7(% U: U&PFCݰaA(˱Zѐ$zSw c=Qs9 5/  ,&g7&Ӵ&gW(έ*0 0̰522:ۄ.f*uC.-'s"F$+&vg`|Tp o 6Gѷzy  ' I _ 8 ^v | <v o)J $e }yK GQa_0Kg8Fi[ a2/ `;8 t\ wm/ y}L i~H< [&5Yce߇9 9 (%Ln7 = EpU8N<-OV]hLtf;?cN`qdIi}y9{ ~p/%*&$%*)h$'")$j# #5&$- ^P~}K֢-㌾;CR!ގ̯qp0u'pPR 0*D ,L},3n,U  >'s +!.6r*  Ϲ o 5紻;J w&݁:: y!G:{! $.\0$4'7|.?;9">= q*]| Fbxu1*%3!R41T(G \kOCqj03<Z A 60 ~Z] 50}! !h#')qf)B0+J$cr  O2J Ik`g ?!} '  ,0u*oI / N/B2*& \) f U 63. `:z0/ 9 ojT 3 R;Gj Z  a::C2=Q   R-%  C;L'YPOy X M6JZ(f5Ta _ y+HC'&% m(w/)q*+C+5)*&)q *&S*-.I251B5~8v6U::5'k5-f("o.qi)UyEkY@ f;6qub,V-*X6/9;+%Y$&Jp 4 ?Cn:EA? D?{j۠ ] 8" ?($a!^$`B#n"S"vd%"[!|,>^ #,eMRZSڝN؟^< .*r }  2!v d t A /` jK/jO0n (j@osj 9Y yJsg[Ag!( ),72 I72).)J%* NT/ Lb,V;sI@A  [%*7u5'8 9":M6nm3`6\/&Z+&q$%mu*SmV Bm`] PY(NA;t} hM O m Ln # = u#7 E!!$61 5XT6]mWP5ltqUK0Y-yy^y-Tj & 1JO Ԉ3 F O[` c&P"Au~ " h E,@_ Q  ?O"> <RCՕ7_' ʌJnÙg˅ " Uг 1Zy`G 8 X KUbF*5W9uN&fO a` m`9sRy{ɸ  d ͼ  ׯ j V&. | _mp, F& &8^j d ( T=s1v  < PbTE6Yi ~ aH ,5Wm"l&(16* g6 dw-`-')X F k +FtiTXJXCZ L'  !^ 8D&sL  : [6 r6' tOk ? d!@"Z!#\,$(!^ )$t74m*4 (!!| ( ^ CX~Ot[ )x |Zm dD P F z z7 0dGDRpDJ1>K%&-]"do+PIU 0` cxۄ*Зٙ_mS\sI;*|T } ny Tuo/ގ7MR Cu:ND/S7F:G& ,`~ Y 5dw`Wd 0 < !i"6%3'+^<3:_Bu>+ -b3,."\)~a*0Q6ۄ+ڝ dC I yv  J%##*2o*|3u/63N, i1-T 7 xh7 crt 2 jw ۪7Ku<o/aFYgd|ޘTS+5{aF   X  }  Z'4P ^ I^  2 6 6 @ 8 k]6tiw6<l6O;SF4?7uBo-& D u r a @8 R ^!^ ##q {q , FGH # !(t$|Uq2tpjp,d C z ; V#p u & }I[C,%&$,|V#Ng^&Dqz3 3r G im?6=!@$jDzJ!/P1 O!JH:m' D Io DX 19 Qt5` ! '  +tK6h`ߛN ֘ݰ ڝڀbؕ*E{,^{VrqRygv@oh |tnr/WyB{OSU9`5Qy(pNyF!  T oZ ='_ oNd ,M?M  q6o| A]'o y  ^Lum8 "aV/S%_d$ u \y #U  8 I~c:Q :afT *D>sc|,ZT{N+ZB0\ k%7 Wz'K" $| #;!. YP$isֶ1ϓiV ӄ&3v  1@:# >",$|*D(-#i" :M9<ߤIwJ]n;!rj ; dDM 2Hlx#n]_(bHBZetF QITJ 'E #pP% Ikdd:&g & kJwSX"(Ttu| h*2P7: K &fa  ^ #Z   0  6 3 /*+i#M @mLO$`(*';(m&7 !V EUgU% A~  Ju-pZU-7 V :0R9.= N y <  # | ? xtz:J%qD"hd2B^D Xq [ߛ +-i(v,jE uaX=m f HcBizTV^ T'dgS ` dG&/ kz I |j _| ,33B g > e:  / .U `j(!~$U R=o= U K^EHs><a"߇ +rBm r_@9 cEF207*P`@Ag,J ``QJC z 0-> \ / M  2 .7': ; U "^  . #,5O* Su H#~#p \s B' v  ,56%Al#1<8q KTl Eܭ  ݁C߮ xFI#4R>Uv^UY`gM}oE'Ix( m0f]g3U (S tx~xZ TUx{2#  , PH w (ef(!.)$$ XA Oo`Mjs^U`Q XUgAmԸڹߛ)t+7q O@ wC 7`*y < 2{ { 5Du W`{gK'b D""2d% e # U'!WJw LR q YQ" uRO2S V} 5 P#!VO&L: &  (GXFm ^$l<:!PS7I?  < V ; L'. PeVf~ ut>pN 5'h&L$#[~Om FU   UT` RU L u"UdPc3J{\o)#&+W r&8<av  '^ E R4d':O&-,"&AT(|#Fqg/ \aFXQh_ =!6  + ,  nM@,tkD uj:6d ;m  OC'/ Lު A FZNݨةjHa 5h 8ܚu= r%(*4!5 k20%G6%6&A>'W9*::'&8l&9o"5w62 0m )zCoZIpIxOM VgRm$3!( o%,l)+x7(J"{jv`$d v*>1ow12ةyדM֏3)1fyI0:DۖTی + Q)~Sy"b:&/1B+3wV1h0s+|"P2m0 $} qR +4`aH U,<[}=(e % (*& " " !|$Ct5KNn b T{h g:& im_24& 58`ihmM89 1MKghF \ E Cd(zj   i a'j1o*"%*O(U*(7+x/.z5.,]+ `"K47HD I :  -  1  , u `H0{$226۪.i4m 'wV_ K1[""F/5lt,1S &Jswc[I.}gk] oݞD xO vSt> wS U O#m~u  1/k rG".*"Xi'' k u`zq-ߑ {;N(/[u2  .< E l . l% ~$ >"X433>ގ7.?))x!B  uS}+d5ED> # L!%)1@3I>?='D{@C(??8Y;0+C " .  T  C,}i { Ql̉Q\L˶&@ͼcFV ؍ 0 6 D <&: zDUD =z (yi:{!'VPpYV(X]@T PFtw (P  i^  hc?|]$& ?AB 7 o O ?=^ XK$A  U @~ u mF ,i   ~+&&EP  YFT`F X  Y. 3 t i p <3 L  uY \ FL՞#כ'uq[P% a"g"v f**p(6:pJ O&g%=/C2'9y9`-2 I* e7Q e*/t!ͩMtk)/x ܷYoy9 6 w ) mCM=.MM ޴ZuK}##3Є+%{'ުMy uS _fF, /m% a.% , kJ ev~ <n(s' ')6e-( ! 2Pj% Zs] 8PD#Lj gW~B'Hs'+  M+v UDm O ]  3ڱܤ$pk"3 2)3ì@͟, [kBƷ[0 {K= &zG_$]'8 k$ &@ - GgIA-<Ҋنܷgin }338j,  Ojj{&w!-@`, k V / O MsaC cL  kdfKg#_ L Q O'/ 0 \N7+x{ 57&_##aORLةұi q6`.ղ#ގd}+aiy(dQ&r^!g, on{wn x9%?$ L[0,dnK@[A#7j.!G !pB [ </  aB8  k $ &  _  Q6a5֏6#ʌG3K[vWܚ~MK;ncݺ(ܤ/6?hcB;MJKGzCB_S:c)'" ] iD| x jxlKD:8aoA{U_,oN  X%v8%{*Y'Wg& $C Ny@CV&)# +\&)!/ "<% #߮5"o3 Ijo ,j& -n+x"(:+"$$_/E]^̒[ aة DJ_\XXc)/er*;(Qq6#3) ,i= $&b12 7%793>k6e /93.zo"<_%sh<|{i_mDjyY"P Q B'e,_-2/v0cO=Y3P0 ( %cN|x",,S$;$[B7dС@9Kӎ֏l 5 XO Y ~  oa  ,  &Sb E}pB C,rw&  1 o Y t M (wQ @ c !L#SL2kF3/9<] =ND,8CIEiHbA;P2}(=Lj!YAmy^g~F 0|"%|&S)%E%_o6'  @ i A d Xd_ Ƈ &  ԒZ ,r{Z"[9D-~YYY\ ZC~D'sA9wG ;sh{p  dVX93n V|pr - 5'Gb wS^EJP|X&D7(> H2Pf7Y%3gHS$ "#S&--.,)^+&A'M(m($) " V  f `N C@^ id  o:a2U-;,2 4T]4{5E85./(w* %&g ( '$ ## D!% A$ej4!u{s"FAg+3Օ zw؟ݞ'-_{3 o  ##[F' ' Eq+ppB`ao޴PkU+`6|*龷3P E ʨ ބ XM `O6 5&&#K.)D$$Vg N9bsQ"I r/۠# !Ӿ;[!,4 cω mQ ^ OZ 8֬ r [z y J6    /M; ] hzH-sѤ|_VL4*D$'#4^Ҋ!نwFPctw7E O92LΏ VE+ Œ Btc/(ڱ'M$' ^&!h#k!B!(5[ x. uMp=3@ CJ=-7AEA,V"FdGU|ؕ#(g ! 9T^@h=4%'/3w/W,VB) s )%v%=%*P! I>P(K([%-E'%cJ#I+["z#d U (g۳ .\՞֏> "7J+w1g:_=>d7@"8@t<6-A5: B0P9hdxUI0!oH620h @ oP 33JJ-C*0J MK(" f    H@< 7iig3"A. o  x"FDL $ !#-$)8(2U.<7.?,9(eB.,B'kPPy &)  Oc0n ,h Q! N"[='9]bNI5TiRAJ>PjW=_G-^-3=5;%#O y, }:`Q谸@3ĉѤS!/zx7 ,  J @_    n X{gr7: R2ȡLI鴨a |l􄩲&m"ǽhI#س -;T, 8b6~52 8Y+x?'M:_(*:!h4{"/i &AKI7d$*ܭބ5ٶaxߤ= '"$|Щ,a28 L dm##)"*N#ZZmk]li  9 6 D_ݺ , L!}gO ;A b mLTV&eRG #&  ^ B^ 5 LN !Fn)H B m  r < O7 &c "Q OM \1MSkM ߛ17&$ *R  # wq|~^/|bxX,Y(]'D::3!73/&] R'0#X(%G+5 51Sv.++%v4 ,h40Yww! _e 3 %#F)]!))n R!XApgg3S^. Q"0m' T!i)B5! +Vls޾- { 3Ιk٣faܷUGϾ/h'l(34ų0 z* ,Щ)L%B`-Rh  kA v#݊Xی'|HAHSS ˏ<_70 _nջ)+&-Oڝ(e3)$&$V ~A (  F< l!|-O/*3 ){mMR=Rcw ,,o-&!=  u#""""((}%,L")o'(!$(%v`%=meq- Ac46[/Zdv Y Z(D5 5"2'P$V,++5037/oKkAQ:7+"F' d@H Q 5/sOh$s{ YY zn|S~ 6  @!/C #f #j- @')9 ; J:}$wgy>$m~۳xq{fڀ־ղwFގ(NEa O#%Y/"l#I+1,-($+"<'kz'$9&S6LTc&sH;Y!/kM$zؕ֬ݨ2kԈG~ةuO*=I # oQa2n` @A &PܤԜ֢Dӡqr-֏ % ]&VM51"Xj(K,. 1/1 O2 ;1y 1-E*f'M$C!rgj 2- c%r{!^rDqOl Z+Y>_Bw  6v_d9- X9Ng >> o 5St V=A ц$eڧ l!B۪"XQ$M"<)8+p- x*z)g("$#Iq&q, %)%3# IdA mU{%2 M% : 9?Doo9 x[,~+R2/u(>I).߸"(wO7.l5l4ͩ548k*;ˏ/ +Ȏ,(Ҋ#؃W_;zStʔVPl F  ӄ o0  2)0c/s66xI oENbK6Q5IFB,='(0+ $rA#vtPP IuS+038M48&+5#!8*6 ykr ;F/s2$/ (w$*!g HET7W8|2|3]ռ @I|Ȏ&E!f$!sRX 52m9@i@rYbF]w 9` (RKnڊY~7 lJEc6ag2ٙ ܤY]ߑ4|://It!F%G`  'SI }(opnlxZos 8g&g3&@X; @COFC"7]:&y/_(}=*BAzX </V'l<9vg# s8~F`;;| Q`hp%n*k*0G(j./*; H@ pwM~@^zAJ B̉MV,r,gO^T^P A =@&DL R  d~ *7'&'1j(]"BTr5yy{Ҟp0\_~ ڹ@r|@B w x F**##*454=,5,h )J $|  E  Zi8@ N+r`q/xߛ:jݨ@߮c+5M i ?^Q r Bd0s eG@Q1Al RX K p " )qL'G=!V_ _J By}DG7&f 6 Y{ !_ ^5r[!.f+)q"b^-if@ *v&9YJ֬Bqd/?bm~d6}T1m&A& `s;'!%$"!B"!8)!%'3B6a= AA*FvDDWE ֢(F7r, X Օ [ؕ6D7  ٶJ4 Q6@ @H%M! wt R (!/ :(G3!| 2aP W#Ep>M,WЍkDT DZārZyM ܚ *&'/.z<6121d./~-)+{" ~"##|"<5[dM*-xs!|LD+b o9o/; 2m"K ` ? c k:9 $BMM;jW$!!L #")h 2 2}, 4T,7(w:C)hB&<%5D5b6 20.)% KuWzj47Lq Fm#r6FIj \l+ E 2X<g FT%O\RjHJ E 75yn M 1EY3}oE5ʂš^Ӵˢ͌ "~ mK L1 \28\S @:  {9}bii YAv + 4=ЩrNJ(ϓC߮`WE'یܷyN?M!y5VF}c e4]/;:TzT o^vN\`cK}T B+  hYZv2#+(&q!|#?  R*m$=&L' (e&]E)@$w< %m 2k & I1S([*',z+U.+#S!V u^^ 1 6'[yd%!g ڀ3J.gT)<m 8V gxb~^@USPD   wm}dMt4&<֘ ( I/ ܐ oW Xg[$,m:S'|29yhMs& +V dz:; I #]- e?!/G!(&]#%! ,X@7&G*yhhn, =Z%*:#511-3-  `"ScT=%P&Ԉ ;D֘z{7M%6!v ;s L W .   ePZng ^ lЄ (J[9 _Q, w 7,2:s:w92920"vC"<ggx@] !j R o  22 <_ ; d O 'i/YobT &R PU 1m$y v  c oXv!I!+ݔ(=`Mx]f߸$ۄ(!O&*;'P).( ,*D1$ & m   a/Pd[ !Dt k  Z  ~ ~!![Fy²6WFW* 2۳ y!V(#D! !^$ ,#  | 6 c|:g=Ӿ [؟ i Ձ ܷ 1 H*7 ~:#/Xd   h:vVj(:R۠c6FNc 6tb/>ONZ%gqg 1TωKa]ǁͩOӪs׉~i5Y/Q[ݞI ?o,**2`,%T$O+{,L#y{#0bqr%ԈsPֶ =]a)dW!&*u.\0 *-0*+H%L!u!V![!D  G+gGi;pt _!%&+*0Y5 5 3ny3d8Q3T20 / '&'(% P yS[ z*Jx 5 8 I x`  Q|Mt6 Ex;1!C: |m  ~H y L+%:d M3i yL3 m{Xcda&#UT כ C W .k Szd_Y Q |2#  wj eY j CxM{;`7[ eF3j@X(  uY!^TJ r  U k U U O^L:s(2] hMj ,`U ؃:Dɮ It xG N='o+kmCYL=^zpg R uW9 yP `a(xнV њkՁ5K"b*k/D,7C'?rOANO,aOMS SL@;?({8qo &  8(L E BO u^ua ,'#5g% 1JE2 6Ry98<-W;=}502x"!B5C`s~ 4 GF')r5`cs-mXV& & i /Lz> _ IV+v(1*}7x8d+$|7P"x`a L I` QS~(I=/R op 4XpH{ Q6 ] `P@Np(p 'MI I5 y,h,&g(V$t##޴CO~*cGI|oR})@ׯ*:  d30[)^.#*# >_p-/ 7 o _96O}9ؕӄhV#9*7 DL#-- : &3P2 \-O%( = i #;Eq' 'k'2+x' (ʞ'ai(V5-(!73^&$,e'  gk z7lYT4b'{V{ ua( V  B% L'c߮d߮ ٭D6~ӡ-Зȡ-7) kK#uH/jm C'O*"8%3 Y9 /_"5 7/ 0@'}6z vT3wN% yS%U'CEZehp y$V $ 0)q!8J &3 ] Q`A@ &A- 8  2`7 1 XK AZ#!vS/i~+ k+'+a(m;:" #T_s1y'*Ti2!4_n$N y |"$'"!c(6\0 =ji202av%ve ]64"]럾軚G /}Sh䣽h㳽T-[D{כ`PdVv[Jw+MޘbFUBlؕY3(%w -$$V+<)+'؍e~־ZHp {SEn#j/֏zT dЍҊ"r+n@0 5ގ48J340Yb.{(Z6< _ xoF;  qd a % y27EHW F rHEL G Ao;<62+?/uv x=2 1w|4b % JTn $9% 0 +2}J)T,r"l ` I| Y@W<:D0D]ُF r `:1 F^н Ԝ4C|m1$ IkfQ"@"!!. aD/ B "tDy w]nf0zٙ 8+%/|]R3=aJ]yj jӴKd-ɛC17LH֘O = =v$ d>Z" H!~#f  Q8G*e%J { 8J /g'W,1g5X$8$5~2D-&(@7m^H" s/" .O8FqB2Q|p4P'M$% 1#  b &8 FܐI NaY9 3Sd,dSf  u  c"#d" %O'$/ x"v\q s L<"* \/(wT$&<%*\'/*,B,40 5)/(&" &~m!&z/4K5N]8N16'x%np    . O ( 'Kp P0 "szY t-D4 kl  &J+H06?TBE|H %D}FP A`A58-03(  F  x BNY3ZpoO6 &("d`h! $+؃W$U u J ٣(Q$`E ƺ̪#k֨C x& U _E1 ۳JS1! "0T 5HYMB9 PV-+~P =(GZ"C 1-bX"#jDc;oS:\ 9F  H@+')7"b'9! ?#[PJsF 9" 7*b&q X  U |Syc[7$J`_'C!$/U*(7U8C D`HJE`.G#A B 9(,%d/< O2 1#,% )q(( #  /y]$et*$'|-M6^6nܷ>4F6F2})K%=vH c)''W;,g'D&8D7w$T)~|7 -Q OEmƇ co њ Y'= @ f7W%( e" ^*# !r 8v kGxs-pP_ 1!s2Ugv A4  6",*-))%#S" (m kU IPFJq@[pd1iץUaw!7 'O'&&&7t$/ s` #E'? >7o"Imx &-#5)>%=Q%I$`Z$?QBT& ~+prcY[yc \s  Pj{(?Y FX *: ^D@ mu]%=I!L!GgC/2(1ٶ=־K#$Wx]M:   M;' ``G)2a '$/"v;'"7C1S&#p  u,gN-incn!pq =u6IA<_׉g2Hšxe^ɛˬ5Ҕ^:* $Z< E =/5x r``@[,Щ־{`PsB@UL :6g7 X TK(yX x]77 ʨ]"ccOh7%-)=H|]M')|p@tH. M8[+8E[w  y Q,/[' UPI.9k.(f߇: 5@ o 5; ;_^H" !9  Q" 8 %/"׉"F*X%-',%2'Wm% >M 3 ,Q* |@:< m :i7  U B w x W B O3 K Y Rw,&T8++\##pv>p Ji]wŃlЪp%m \[0)F {)ު;LXLD&$!uvl  ,(, ;lSh̸ ߸)߸+!,65m51-7935:2y3 7003-Y"g"GI !$"P[#?J U$_0.u77_8f8Y 0* 16 ' & "  "  d ej 0!Dvwm  6= "& #P Uxn `Zscz,slDZt?+ D߇jڝһC!PK :4)(q6:]%ojw9 S#  &^ V3 8 o8/+E=6P3> 2a + *;r ^ .,,`Ro8O { Y% ; H ~ F C[#\$ a/ ,|/G*X;_W>dQ D  a Q'%$B#4!7%"1#p+2&  us؟Tӄޢdq$ \ %$ $` %%#&q!-g,r)% '2 P% 55_ ЄO<ʂCȵ$š$ʨ(4o)8'*_(4ׯ)س&7֘&-7"v`UXd y j  r-v3 "6 s NbVL= \@(n9\ bg< ( I!!2{  "g!g(,&*;)."b' (sST0oCX^^/BNv#S++A0b19ICc@P>>68<41.H' sk& e7|mTO,wY)z'5(<bBC:K o) NWOE Rw^Iy'f D: `#"}!wF` =^  k:Q9 O ( @$6C݁ k</mm/mNdZJ64 [ '  ~b `7QimV1LFdQA " 'Fez26 m6 | @Q T 1dg}4dm@9Ld]wP/,y( h6I oPٿQ#pt@@CWUv! "])T*+.M,e-l2,+x%U%m !h  gs gn-wSRX R  xvQ ^## ?$ 80w,h+, )!h(6#/|3+ .Qn ; e|pv>Wx5·T=Ԓ]ׯ݊d ` FZ y8AzG  ( -Ko`=k#a%{@J lp Ik_tAj  O#510G5 (16-&nZfgRS/qڝ.Y)$0sm1sq,Q&`%vܷ8+4g?K9/2(!'> On8t][ |_6vjHQ,d麪ʔړ{ Pq  $/1&S'WJ#~"XbQ"{h; _NYr)i7@  f &: o* IԜ e [G @rd _ x0 $fC4 6 #!g!|oU 6 U :z,0%D:4GmCW_ u} _ - '   L ZIqF J+,rw R`9LIW-(,+*b+$,:)T!!) ;i krOg!m4نs9ݺ ,^v G r j2^@J@1]؃g߇ Ph9E;`Cts ,d*+ow`~ms|w x@;E*bh#?2 " "ORު*޴FM @ .)q/_@tb<(<:900w2L}ew83TVKj* G݊ǝ@a%r"(!%=ة޾yܚ`fު I 1 + 8 NU O/B5ݨLһSɒ. i 8P5@/.16/-4JT,'-j',TH cҔ8;&NN\֏)֏ &Zf ' #%v ,! e7"F[!8 "v#N",kUQI "$ =$`ц"#$x%/%*I!  =`V8 ! {8/T$ o a3V9$ x%31$@87_845;3}+\_&g<Q ( oOU*\ݔ2:,~nk.*u cQD%m  [ k @PFcavl oZjr "  C9 ) ۳8w(Lن<w=<;-_SsGSKy ["P$''7%7rBK=7>m896M06!  U u1Z{ <-#_Gh|Zm!: u &(Rg)/ \zM/4 GdsA KYnRuZ2@ ,  A]r7zGL)*݁mco8g}}& 7.e # '8 \v (%3!V:!o""X(m $t |I!("&q *( \.u* $'%" !h!$# #S |7:&]Be7?r hlJ&Ak=D%-' k 8 ,mgC0*u%&gA!LFm\r039~O$uJcjըͩD ;$4c E ,p yg$r)* m,)r@a <B-m]"JPts Mc < (I##p%3*N++!)%O]#$Mqp^<mr*g*:) ( h4+[ 1  k ui o &^ ۖ8fM 6   < U# _[  ' FCfs (  x ]6 , ` (L7'L%([(+\*$'H%G&].! <=K_8) OF ؃یuH1*a i aY Lk1Y |,y ::ؕ`:#/*"²oΙU6ۄ% r ?( suM TH3m$#Sζ(w'ŗ#c$Md"M" ?&A "o p {ϰ6]fFl -ݞ  Ig6Du>%M kAZʵz D{* |ȫqoGF mY (- &6JsxtKJ ! 1xDr 9GHj)PoQ^g U y!_mD,186@tAJ-GKk]F`A?]C9I-([  UY߸ d7$cqFܭj%"d' -$&Q1]/W8O. o&]%!|0'= w [<]s_ #0Q_*j jm  k5r&'Ws"~ $ ' H`%=m \ 2"v"+*l,2k@/C.Sf.zнϝ'$tWx^S_PZ(N+|s` .<&gG{D gNJ ةEݨنg UL Uӎ.˅˅ < 1GhmʞrیWKBFaیx/ܤ݁,Hڝ~G~ _ҧn՞UY > `6l*/ q<EJDzf!9!A#r \ӡ߮a7hu +,y7NFJ o\3 N2GJ8wFi &`![iռ/AbԈ < ~IJގh!یycSRA AP" NPg |[38 ,  L# KNli;*,:';߮:0D Fd /  r% %2/_6&11q.-E(>/_n4 eٶP٣۽;:4>Lr%G o{3m%3j%cvZ ߑc"Ms' iPgx! S!$ٿkדُ meqړ<~=WѤ̸fNd%Wth$6`" | < pvPP(G-CDRBM.G ?^< 34 ;0  K ;u  ! yI0jCe!]p`9% F)8(+.0G0c1g1S2t8 54p.8-)(U&%YI'`&H)q$MH t c %=`9P~u(:T  e! S gm;>nE}6S(a |@Q0;J;DLc 7 Q   <* o +S:"E8~ܭoa`d[kiaHEQ"} (mg"(2,|61]9P1@,3!W)ls% IJt]s7r'CDzNY 1݊{*pb@w,cUo F0U e ۄ EK ! y9 b Y]c /&%m#(!% 8%m*($P"qA V I{!:#\S&|)|+,|((ku O1  G#552!:~4:$|%=> Q)SF|P h> ht]( 0 x2 g|&g2&J,+x,..,_$)^$qC!5 @jA+*+(/-"`"v]  W;"ƛ&S/ 1$%1S3ā23n-b/iC.f-$V&$#K%Zw!Q] (SAY ^" C 0 ,  -1ga~.K ? AP*P6Y$o:1$Ș-&1Ջܤǧ3ռLޘ: o9 RL"3m <3wa}9({kymj+ E yVDwn r MSn aK  Bk[!# `!~EC*gj  t]P; ?'O _b"!% |A\ yT3Z Q-z0-9(,%Y- U 1 6 kY 8yt "[$)-l2 <2@1. r1@/.)^+5I*-bR2:40Z1Sl.-*B+%3#\}u=yڝ[ ,  '%'_&m$*N  " T0i/^9G lnY!*%m&,|1g64h64^21("iMJQSQV q%lڱۖla؟\$i a1 EuCm   B0  #b`$'"ljͲ͕  ٶ=\ 6Dp^%7B RS&'D'WI(e!r#d X CT^Xv#-%o++Z-;-`0m-j$VQ8 (' ~((|*'})^ *n' %c!,  V+ UuE [5r/-, j`jFNP]o  #<$D&qc$) k8vT0m,'}`8 {*RN^ݺ ,^u} Y kA `  j 9 C V os  hf]/`%#9P O KW v~3$Cߤ ٙq=;ú ɤԤߡ # ٺgɮA -SsB7(}d  !] N ; #:'U`(Q  8 o ;9Pr hZ 2 STWqU'Y W|'5 ID <ZK JyOY >,(wܷ3*.ڧ2#.C%mۖ@// ,Fn"w/]w\&c|i4F\![U')+d^2N03 "0w.6_+כ$VW$`Nʔ%– +ʞ1 < yx EY Y n-m 7g&7 &m+,o*B-v+Hg.5/n1S2N$9/ (Q)5$5~>@8 o@~3&$/) r 9 Avړq'ץ IW'W %-lb+--E,).)$&! !|%!   r- KCo* Fo$HX( /Dړ1/۠oݺ:75#.0kē 2ޢ]ؼ֏}9ؕsu##ߑI(G޴ eB4RBXӴ;^ 1a*()^.z** .%Y) +x H"P!$/w= A Is` j~, M>D@%!6O ~^V!  %m|< , L77 ~CQ#|  3 \ WBDՁ $K#Ca"le^ " `3 yH+  `GId & #'B),;ll"MSjM^#[_oKS Z1}m Ln : x #  bs 7F& ~ I}k)&!MxkݔD k  - $V#I -3;' -%#- ] 1r} IpLb~ 6 .Y 6g 13#f*6K!x iium=   \!  @g x-  EOfD [ #d 5Typ9]3oFJ7-uK$"$5`i+]E(N .&rRP()}],VoY;@fs9 eC ' wUL6٭Mr@6A6R16-/m* 1+/u2 x @Us5M^m'w_Rb ? #< Z>nZ3BUJlkmONp:/=\ "T7L{ ; @9}~vT{d*8Ym\' tKZP0Mx@<f# C v/,z _h]Y c4 ,:)gd[ LBh :vh2 ~\0h+ 6 ;̜٭c{  m I (%)$`>|=}N2JF7I=&> |E 9?3Z-O*(5 Y,,}8`%"ٿ&q$t!כb(؃-`y|\K[ yg " d1#;! A" ,V[\ O ~['0G$U!  Gsm`T@4Z8cAܐu o; 3^ < (/K&/ZP<7 EP o, %  L y!Df 'z X#\ >ڀj2Rg2"d"#&W/9*+% "@! OF7PBrݺ\ \ BN=f c2 X 0T^DS6ةOL &K_ kQ R u6FG"k##S k !-rA~ (S~aͩЄBͩǻONބDf{D+uG{{x~bjd,: (@  m/fz+ xc ܚ i> @V i { @j 6#Ga/ RCMbC{& 5 ! 't%C!/ !) y)/ , : ,OyE<5^ r+ rI~K  y#6"< D &JsgOyY3`1G i ( x @ `^ ;Q #DE|S yRV]y^"5 o\ ,"j3- ?75&0,X!U?x-p,JE \dML* "S(! (*5b20F7|E2aN9J-H@f2/ _!^4#ی ۪GU4/gö6  NJ ;@.=Mq0>,Pm݊4cG ur1 Ԉӄf̓π QGt1?JP ųyέ4Z op/&q"!B!%3'M(%':$$##&)"3-&%m ,L#5G%'5!Z_ # @w _P  #D=[  [+ ~jHPS U#S&?.ُ-l1ُ2F7/<@<>>A5;ZG60)(w&"m#w)) U( )% /gmt jtIԒK ޴s~5~;nF  Dyb48*=-/(#"_# '  L; 9/3 fN 1 D G  _rw ;9Z wVD'A'C lM^\GwO+ GdSXP > RB"<)C$[ X !m^#PFIL#3 | ד/NJЄ9d&֏eߤ` r]~~ I^- ; F &"6[ B( $ & ()J-$C+1"Ao9;? 4 <4&cM SCf]@ gBB]hNW-U]eNE{3hСӘˢގaC|  ' $&6[0E7&A5#S2=1@ y&!8 % <L md@`oU–9*rhB`PK k fzN if<Oܤg =34۠ު׉Ń˶!l ϰ F\ | 7 7 e=del{!r#yi$(='k)q:&'"bKJ* b #DT,+LF)J)q 0/2+;P,_;4,/A"?T'M6n!%8&3+20,*$,(@%(Xw r5i   &^x  jkF;Ӿ ~-+x_ i o+.SЍ32Ι-E*"X؟k,8; r-cbVӡS_%15یpUvܐôܶ~/ƣн# h -/  k Q  rI gPtu'@ UO ^O{ KbN(ĺ{OhOԤ<" *8m`F  o ~W"))8,9WDl66 ُI8ץWKގB |z^_۳$t۠!3ܐ*D* m$vnכ  BބLI*WܤFS|ԈB :` ݞ Yݞު{ߛ }NI X8~m@,)5.d/9) !w ;Sx|   PU6_|l ( [I8$"3'(>).3063w37|657_867h04^1y2W(e0\,hY%=i R& gB{#Uռܤ۠727@ 9/dz ,wz:0H!'& _*XU2t/_.p_*;$9A \*p9P fLyُ"r;mQ'$Y| X9a8ܚqM@/wC޴!%I2N3X5 :0@kC  GLG E EP MHM h$Neн8!u3xԈ}H(-Y. 8E!= >C2A ?7. 82 6?d'aI't' e>! RJIyq1p?3 PT9  |4 a Y $/&+n.165Es =hF<33d-yj*:clVΙG  lA8 (Qb+l2:32: 2:*&A6J t Dj*- 1 [z;Dls e0| E׉B> >p6C6 (V5d!uX`D Qwwr O QUF d !ERnO-  }6 O F%g  ('$#u eLK *sΏ$"ʌy)XڝY^ ?" i% 8 y=eML&P% V2)Z#':^"\=!OJ$9Q#J D7%32) LAapj˩洩$Nζa{\f ; _%Q$!h.*-30w1=;A[;wO=DO=P?TP;F>F9"A+C;4)q(("AD<[)2{  ߸  1fBNmE:Ziq Z)#v !!r+5%w%!{1s = ߇F W-fiیץ_yU B8ٶݞs x tT FN%: 6M E %Pww7g)^~C0}8K{F,ޘ۠ Iܷ " NC\Z$ [` 5/ (ݰ P o<ζ~@ͼoD`4{߇1Tm9{}{Ax+@F;sRd!v Y[&D *b"6#;{,/D 8V xyN 6"-J86{֏ APg I$ <)?A J.&$M.-lV0*V2 T0GVk+!Yv$Sj I?,h"Md6km8օ0t`ȵiaXٶ/Yne$]!B$`&j%G'0!#I2*;&(Lf  B:;}f>mTZeaCُaVv7ܐݔRiizq (w3mHP j{#pQ}!@% m>_O#?U0*Q9n<+ѭӄxըVtrf⛻땹3K j]}sl+ Yg' " 0G$/P&? Q3]ٶ2{͟ˏ(ѐA3֘l#),r00$2WT2w1U/|1+.I"P{ 4@ުI|\֘Fة"jFfӡ߇%\A v8&h+ %")$|-3,V &g'qu~ s , ~ +A ]hCXuR@nq9{ &6|jz% 5$j%+T<@ ~7h 4 c:C0Y,a$,_ '0 a*1 u%P 2x`ը)ҞΣlΏ(qKK_Ǻqeٿmᅷ\ٻ}9ydƛN̓ ##-4{IdI!NO@6AG#@~?A93+/:xHM-TtؼIpfݨG֏֢ڱc^޴ݔQadߑDs,do ;/'(=`2214 . 6 . 2''%e[G $V$'#$/Xdm3vW#G Gxު/t'1 ( q& L2&2 ;=7K 2 , e , ;    g 8@; S)a^2;mG;,m;g*S*+]A@ mXDV I OU kN} m}d%+Ui ,wA] +: 'w Y: 3ܐQ0cDvըBԒ{zrC{ 8Tj0*^2CD\EFC7Gz)@ ;R9B_V8 < 8.%  t*g_}ZO@# H- uy"&5; MP^&ZRW PV W[4V !R#3[& ME:B-YK߇{۽S}Ҟ Ӵҧ =ѭMњlѭb۽߮ t4;vG!Y#.z,%P031S 2'Q/ -'&S_WK**}KbMdC0NӴyԜ }zt ҊG۪=w  *y^'T5~S  T;Q}[KXgG #^')By+!(q*+@-0.+*]2-3K)N(x!^# s!h('o-) *+3.# O$ #R u &Gdcs~ZL7KEW&"%-Yp++! 0wa@g;B<"/!0G( % ,!  "#G  y^ E*dH, "^+ P q UG(DA٭_'#D1Jv2'48#564L2k*+R ) /$$$](k "M ߮!Ջdѐg0ގZ\ǔoW$4gpgZSat$/%%L02t46u-b#2'W/s(1%7%3(/_,r{!6 ( %LIݞIzI٭//כץӄњѭ˘g~Si`^T&w` I fA  {ipP`fh2 <-+Jռ օϝpP Tvн8~ǧ{=xYϰ eK,@`{$`'][ l  k"Fr_!?$h&(d&<"(3m1Y7| ,1]$t:%O=  O w]NdӘ\+zvYNBU5p%Y,(6\7]@&=8]:*.1@D((&$#?ȵ vWнԒ oaw׹Әُ(:%ޢܐ TR4>8jsF P0A)h+Q,2/M4 ; ;PB?zH&?/|1J*(Qs#<6 m F F o /  zI=]PhX[_` (4"4T -&J8*2&a).#,!Bd`~ o^#%/_/З/M0ǧ51π2D18+š/VI hP~-)s|+F! T"$V-3($ hJ | <ڊC D` sP ΏcζՁ ,* KDWp|, g-  "X"` ~4y,ay/;DPw|umI%~PG6TK |U=Ch,P)<6 o6 d ^P:2 ap=/2,Y!|((',+* " B${ A  [ yb@W6;>]9YXIx{G(W0ZQͩˏDZvZhz(Z  k 5~",'W &#5nuXrR x 7A QZj@ mqP>Z} dN ߪV J'E 'Щ_Ջ! $* (%# X-%&*%$$j*0!(m Q ?  k1 P-fh6_ک )̦̦ả ,߇ y6B~(D` 1 5   $ "f-).)-0;/ 1+R o(> vxla  \)0{@j cmw{h{ j; 1 ^EP]':o%3l0G;(&-b*P##$CF!r'M!VD$tGw~ m  I^a^ r  Xk  }rA"pN^JL j6 oJQoh˅+Yrɸkݷ¾X) I٭:w&IdO+4`( ;rk C;.# ,4 5j>+ps֏cc:Ƚͩ_օ֢ ? O aK7e N x:*gv O Ru%3/ "IA~IBCj%o j o u2x ބ!UZ,1Rۄ ۠7SX xdA cd"XY5l{6?@1CuS'fM&FvFG# @BKg420#fT *&܇$qVٶ+ڀު9g'ܭP֏:(U [zvnK9qtK : uHLHHq`8<:/5:6; _ j/'$C=,@<ܤn.^daQu u  +FJm3mS*kNZr%G#wE% ij ?_ R*W)&'E8ߤۖ, <r-.Ln@EK` , fsPZ o + j`KfuP (tbC4f;tw߸ F7DF$`'&Y/z-Y%#-&'J:uV  >i$9? ;&$W~"/-@ %xE(O uaץ;='ؕq*یr 9$9&!/7BBEBUI+;82-'0  70{ {E_ŃwξXuƒL^ͼ7>jkV;{xv]!%/s:8I! N NF Tw N<IQ B:5-v'kUJ͕* i կ$ D 6 ȘG7% o۽ V12j jtT/p(L&JW)^(e ) %#\ @#y.4t   ,C_WގLRKyywnt<y%y F:!h,S)^D.*.Z)%#\֏ ܷ 5-G (N<m:<h  T-C" a}u 'P R  C0PsT  1 k)N/hJ9AATfs%c"K"X R/2J! " \nti 7%-j{`&`֘%Hܷm !h  y<#S(G5-7/5&>d7r-YY,r& $: r RC!!VA,[(4 &g " ,%@n#V&qp0GS2 :_:9ؕ8vD5ȵ,<,rİ "##G .ϰ % u!A*rb&j-=?MpMQUKSPPF"K(2C?8v!1g)uZ6AXItPB " ] 5E-PJ( B0ϰef#̸TD~ُ!I)#-!LZc < JB34{ %Y3L X UVT txS0WD/ dܭyܷݞ2?:*5(_zBdgI'  [amg:58/'P(֬#ON]2IS5ބ ^k->&-%)*-l,*K&AjT m g6K vO %m_c} D]rz#_ QADVL ,i o "(e$:6qA?8,m,%%X!9 BPj|Q޾=m2[ +v_   J2 y " % ,( $g!"`VAtS( @ 5  s KЗ ~Kܚ @$0< a~ _ v#j  d d'QTT " IGҔ}l!w2ة1`}'U? ;( L e<ZD^TK =mdGzc;Uvk %xu+b3 l  r \d%i'a33!%Bs;8H6*O*7$P@|9 \6 i*t]9-\^Sݨ#;gK`_~{?B 2G^mכܭm`> u,"Mb&z,,$ UrO[;S c ~}Hs]h U] VF N*H  uu ;  O 8^ 'hc`v6^ ^ f/; G $g[Z v$C&{'k>- )&"rV|[G OQ7##$]90g]Zdu<0T<62 0]T 1}Db (GTmfwp ; B [ W~ sX jgj;  Q _j#K&Ic  _ ,ghv#!]% :#I Xg D [ ,7 ,  *=]xl4sEs!)&& ^ E}/  ,h[h ++X-DB+{iJ |D#* U72/ ] o< ! ! m  J  k t:T$-dQ @ ?-l]?-tQ5?!! R|#+RsoQ~~Vs \  /  "v(43)h*!+)K&g#I  @ 5" c` /S4c&_Bdi&0 oY QX%)w2"Z!ru  y/2q @l mE ZAQ+bycP]  z11j,9DpYPfK#NP/k3 dhF`0y{T#yz    [;3 ( - 2W58cI:CE;9:&73>/ (w!Oq clsQ i a,`( w + (7lh7!5c mA+fF F?@:tpCg]P0@Z -@`U9hy U^Vhrt o[]| Fv x  !ܤ݁ު bOsyh D+Y <[@Siq f_D c_M x~,~PjMo":jz x   y oyC~q "v&J i$ ,"t8Ui }o47>\;$Bm*I-D ;z^&   )wt !h"#f D>*a 8T 1K0MC WX+BS% o I !| #)--e++!+%D O u]j? u8Fd_Zi fjJ 27fm~ fC^a @ 5  `Ql7CD7 1   eW7Z.9ޘPpiنYЩԈel#wqEC_ jb!TG2m^ xHG;D~]" &mb,ݔ؍\]"P,ةoil#~ݰrC-H4 5qKB{25Yl&߇ ߑߤؕyӎ=m |9+z(VC ~! 1#$,(%#\(!!(%Xu!0@9|ti}8mUZ <e!!#*$w,/}+n+5 ,/ **2'p& `C@ <HYMJykߤvXccAXvOm\ k` umDs!r D"$*t+.-- * B'M e&z  J;!UC,QjZIՕ96GJsjx ~6_UScKmZi ]+ti7k 1 x,mA QhpB(av[Vrx/I i&Wɤ̜gōoʲɒy3~ٶݔZP-Y~;h{vu#]q.݊# x4@:gs,?96C` ~A m E6pId Zjcq &=t/Md))/ . 52(.,$ "$!g!^!ge 5l' 5O 2NKvDxٶS{I 9{m33# s3~ L %  {/+Y>ZOfyJ0S7H g _ R P W J^"%I%*O+?}%(e&7 % (j"3,u  &]&"vj&=s U F' &+T!Jgu a, ': 0"-0.=+,B,rU(e&-Ui  r o I! [QQ3# V  GM ep3}51rdk*^ > $߸%כ'&ܤ&"ٶ%"Ϲ%i%m(w6k.z)JZ%    # 1U@o}wz yd&@7y_hph' U't L8Gw  =$,"]B[2,D?m~m3q!?^ |>MAc!=- k[ 6zpQ]yg@ m'؍%=#%$/}$#|!:Ƚ76l2 ,k1#@(m ,J3365A2t0%Y0#3?_X%bP$vFO  i|=6A$9&2'4:9Z>G8cEDFE&+== -U.u _ ;5O/[7 %[ 4 eh$R!s|޾ڝX C>G''W/ Y, /C - , 55 2/ .-:.,&&A!g_+{$d ~I?@ tc|,')+02N20=e3\1/_ R L0 B _-}<=Y tkJ,r p޴ xօ  < \ ݺ SMX+yw2 xDT ;X YV Y6f] JVw< r'%ܚcm~Ym: 6 _/pzQN   x y  (&Z5 i^#FiKftCZv>%>ws8'&i)O,9S'&6!V6e'}3!%*b%g  l+&@='C]5JqQ%lP_:bX%dFV! 'w   O;n dw^߇5vjs x R  ~eFm-#? %#5 m !V$ x$M &('(+!B]n5ߑ $ $n7u_ d U\a7P bYYmi r1,x{s j+.5Ջw!dc{mn;!Dgt x d #"f  xDp K r-GZ>R + 7{/%2lExXI,5Y68 |&bYN78N!+)" ܇s \+ 'Kݰ{< r+&nv!e Z6 ;!(6#5~V{ mV% Ig2}R/E9Ձ7"9]1)&ϓ$͕!(Օ%ة, *-B+?,_6&+: P O . X u 8  JL.E$d CD>ݔ݁[7PvI@Z ,w  `  x : zS9 e%= (eK+Q-Y+0 -F/i*2 E.r-V+.\.I75:m867g1`2 ,/+%!L"3/." x "~ ` Gd7xc:/۪E*ը "7 8U$ m9rbBٿ,cܭ*۳ݨ@q }Z r G i u ?LؼK#ߑ  'pasmW4؟1]۪^ߤrݞowi3O`r9mM2Ch3W 5|#N&A^*ܤZ@wmVYCC- yLs!BQ٣IM"8˅](_o İ1V Y5m5 ul !(!/g2: 373PQ5+$sp6xը?4JBĺ9ēV*LZH vQ$g (O$4' im|4J-w- Hag/|,_42W\.7.\%%#-/:8 8(LN+|r]d sZ+]tEz`! ![rU o P 7{+Y h gX~aj! 4zsQL i A .5[K$* i+ uBXf;_tEzǼ QWͼ ; { i=WP&! Q3h FmJ jI,2Rގ:jar 2־ȫ%~ErjPj1$p, mz m $j!G$<$(!/k$z#}t~dxު]rZ _m ی k  ;| ;OjdNGrZjQyZ*E(JQM K;߇s1&A3@M~F C7=.Q@", y&J# rJZ YH L1T~  an e _(4)R-$~+oY%J#T ! 2 s hE?"> ,8[` OM: 8 .f  PV7(K =p d$u ;@ 7J)PCSe2 &ratP> :  QT s )! I|3= -JdmU ? cGK%h|T%p: @'h%3^&qI!!J lx- # 87&]2f9ITdgFOS I9  " ""<%*("DOW4#OLD IZ 2 b(%= o!Z! p]X3"v([0 0m6 E1SK'$/*6#d w  <Iip- Y w    n 'r' /h/8((e])$b!;$&sR /`n՞4Uץ'{%ܤQY|7 ,LsU/Ul,  @ " .#^1s n ~֏ 1lISP9UuYTvP5!(`/Q,9"P&$%#7 u ~J %{/%  P xA'G2 BRU  p#!_#<CDzm`2Y} %Ū571~jބ  ;PVnc`v F[nj  |? 1|̓@؍`\Z B 3 %l (< / rD}W+*%m$RJ 2e }HuZvcB c~&H 6ۄD F= DQ*g/cW]s"F  uj5= N{  Dcc"'l1@08l'P LROmQK;:{8Ԓ/0g)FX (jD+O ~& , ;-u g#C&'$+ /MI/-;/+! -)P)hn()$tߑ,e`b%3} cDZ#ϓ ۖ7C% a &=L|W ?;  ^ # ###p QXXS xٿ,Ѝ .ڝbKԜ |ϧu%Gt'a~123P5ٶ-!%81{ #H I%hg*M:{F%IW(aV.ϧ |/ kUުY10-(cH`Z S .=5 moZ O 80&* U#\eM!{s |tEHP' L xFFn4~HPf J  ;% U]2L /13c w ] & @|L%*UG%!X&A! !r " fN! )8&.(m%i!V[U }G c hTr#((@ < y~  F S)Ka'Cm[ffx,/` (Tg#mT/2U) F7 /=FnH؟ޘ =ׯcUGҊϰ݁["b*@ ^a&-o#-%= ,)[ MEs^ {2 WV&"ZIĦˢm,$Df~ ?2W-)):2+&c_j^qy Y &: w Y x 5 y RoK=bH9;޾=& Ń ZÐʻ IzIm  R  " um0*,, [. L2^0 E)#) #Gw F  kD 86NcdjSXN(/(E,jG  "CyD    Is@q o  oN O B L n_C} Kj^   +PL'uAuW H7"Z } | |_ۄaoTby8v6Hb+')^#8-.IT)q&'UCGd JtO^[^0~(SJ, P A?#*.;*:MD@(<9!;<`3YFp $/!]Y^!*Rw3.S?A<8E:9%4$(4y0''~޾ktֶr޾c޴2(=IV8 2,  ~Z>xݞF 8 j   D(U7$`^>4=t[K L` QF] (G#>d /9 Y  p ug  m[ 1ռu]HҞ9ةaL|d4wDQt' d c,^'d O U D @ ]J/M@ww  [^u#y$ j"P e! !#f !^CX S& #>jl}|@iP5E<X Bnf^^ oS im7PVw   n Q+d<$['W6=4{xES9Σ*mՕ`o O1 ۠F1~_,{YxfQVO^ 'iA&s_j^oXo mD[U%%' (G'Wu*u &J uJ u7 (~(%*X+?2z2tT3P2W^/ ' ,<kF y9 BS+A \  c n! i0 |  L U es f.ds \ k (&۽>^ʂ@[|'QٙIV   !--;81SA*y;_&=}cުHۄG ; k "VmX 0! !|_$6 J`%m|[ .OsO^aY~l& y ^"v !$9's"){*($%(m&(! RLU_ 6W Q–[ ߺ ȫz 5" G F aRZ $V I*N& .)auL4(jX7 iWL ~m }p L^x1`9xۄl##0.f:k3-d*b9Pii m~ oa k 7YAmSh[%Y;&m40/O..e;L.II'D$&$`  @$+4GI '- 3u$S_ - \'s^@( 7rZ87220 #*S#("%YU_U9p;k_[ c7+N W~)2&%*I''#S$KH <C4ҧӡIیZe'w%RD ] < 'o;  "yڝ( kцΣ'0WFrDZWד {7! pv ,&% ]i*/ao9l a]pD k) g=6\ R1+ 7 uP%0]rAjwd O  IL P  ^myU2f94O7b0Y^+D&X<:bii` .swV VL F7=^ \ yA ~2=n];{ OwD Rx,= kX$&)T0-G-(+ ,.88ED@}?T8l4 %(#( /PMlPvx m$&B"!PVRA9 b ?]<yEStd`-( - ?l":$C2}0J13Zm233 3&- (. & I'Wmgg IxZv? nD50Iftު6UBS`g7/* |_Q   CCXxA= G2PApD Bڱ .Dc&m"T { ]3J@!B~!֏:N/9?-03,9j7()^ )^ !K%=v3=N k~V+O=:ڹAE ~pv@ %O3&z.,66=9 |F: 6/P)Q(!R1/Z Kl19{>`D:`RW۳/0i њddC4U֏dS;#}h %EŽr<տ?UöZ}ުѤ߮) dK&-)478Ջ; Ҕ7ʲ95~̜8lA5 *kB.f/C}.-.,V0,,U++U#I%(&zE(>|%,!&S1 HwCh  `~   *[h W~1[p \-;8"!Z/& L* =% u5/T |7 |K,B**j/ 8c,8?; A?>D9+d+%"" Y_ Q+mCSHCP i]`;]ei 8;޴npž斺6S9쫴+ Od .ar T0 mVGWގ+ xa>SG1d|ePT/J{m*2Sn-cߛ׹ 7V^ʂToQ \wƇ~H 4q # 6`=^$p!  $ $t%*E"P!LTz0 j p=m-ڹd2p|Z@S7Ug|X(ݞ/ݨ5`&]L` q8i$ 51 8s1$: "o>'m('#y(QO!!8>\0HVdZϓ H דBQ'0p'&C?Y8=8O2t03-)v%G  Z*|y>$` e#zw:%![|]%A<e &n# ) &J " 5u| J*|oF!ޢ ی8(C##gxՋ9یF I 8 5h I< e ~   ot CO@Y`~9'׉\UD9 ^ZUvJ a-=C  p$ 5&K0-,++%%&gqgV\o/{ܷۖ־jAg>}:$~L;v & J7 , ? (4 %m-'$ U1+_  dZ 5[ 9)h!|#>PXH ^Ѝh}tC~P <_w  6d  ;ZvAah%^T` . PbO9 *(P}$D!:&]j[ {"+0 !z% ur4kT|BT]޾D  m~0%G$$`#$w)B $/  L^t =yC@} GGqH jQ# VA:*7~h [hu b<}!+-3.#0Y/0G- (* x&z "F4"!g)[*-+#! 73U&J!w xL{hWօdړ"f, w ( itQ8y! c:$U^|zA " 7i/'<b m  P0j; 7#?% ]- *@)m%$/DӪ 1[gՁ5}0~vPSׯe&ٿ!- "t(&<WydD-0Cim 8~O ,i [ `Vۖ+F߇Sm{MNg ܇  43K ~ C,.$V.)%Kzu 58@ ݁9:=Ώ֢mlmߑ&=mYT  0 (U32|  T1:[#&J3)h1S 20 /i ,)#jV# 2ٙӄfYJ&&SI- ){':("' c<l  Yjjf2! { @u0|u[<\!Sd  @2 n =jBG2!r (,P7g C  ! xdKf}K}"n  % G < \ NKP"V%wm ,]  Bx7{uX t}* m $ |`x582Jz  JA"b'd,V90 R52 (e ("Xussg D #+. $5o`t3=m I L k  [Z=JK ?fm 1. ܚaM7")$C>'&'Ń' Q(b$tI(G#4'j^ I!^w N G7 oSF T0;l/Xq^7 5 e!ՕG]AH"W u`۪ Y ` t07 Yhn^9%ZdS>Sx*fs% r%c &%=/% R"$/$C(&$s-[)/ '!71 mJ̉H"Z`@2aA[KQL;mr w  ( kI&(Q3A4o+Сr@nq Q&T] BwD8 / O] %+yl8|ZllJDPbhu ~siDG~)&,-,r-ld*a Hb )dY  U 1oj#B1Pp݁0T#:;Z-_ 3 3Fm C5 F ; ܚS7 c kc }#Gh[IY= 5&1 d"y'&)%GXA!%QN:h@\yny nU@"]k [S { 1nR~tcFC#-x %v;rnOsZeT#L uX|uĝ;T/ݞUe@y=%iADL5?b9%Bsd;xJV,S: x ۽'۠ (#؃ iqgaPߑܐ jN Uhs +TGU!% \ (y l 7 RL_, "3 sSA{ x J&j x0,yh 6m=A $  mj7O<J88L wpr`{ks S` Oj,Kg!< 6)B !$ no & 2 p'Eˬ r+D@$ӘQjX R L~ |"''Wܚ-b0Yw3*Z:7 30mX$^$= 1,' 8Y f:.˘8p :@ÐÐtz2OȽ͕^۽^34dۖ@,=@{{IH"'s-0G3?z:}51;(S!j?s ʲ PWrf U)`( B \h& aS=a#rVu4)CԜռ!;NB׉(?RQ*d"@0c+>CCG;b}Z7 X &3(VKYun & /9F(,(8<0c/0* 074527!7r6(]0G}0|0//3 k0,"3! >9ImZO  (  m  AJ  p   J Pz] 98 f;F `*6s*+`l7ٿ Iq\&J-%Y'7(49+-;+^+Rm+ݺ$޴-oP RUؼ)mewsjFtGh CwcowO} !e\  # !#!|# T ,Q " .r1T ֬It׹3 [n_)  _ L  '% I*7OӾ? 5Ɉ9G]&1&VFLT<:*    @ s   = -60`DcT4cj2g-  ?.,.,c*1C;:??@?9=83@0we(#?j=DL,xՋ{כRFڝُg} &   \ uQ$3n.)86)04/2+6'3!8-(!! GFD}/P`|ML_ؼ4U؟ K\8,g" !K)$ . Y^`F+] AE+\HDE{P0<`C|f6' &g& Y s P oi  Oi & y ~Zy~acڊ>rōol$Ӫin Bo @Jd p H O ' 7] /9 - ~<*&L`A+X bc ٣a9L[u:O,q@"$H69&#j1WռRah闷S^~!۪w/iP _d}#? wAJ&:z B%|D &[F(J"X_ o   rQ  +KYDYNzP &:oXx"1+\-O_9<5P<7h51'/sw'uu^G' `-i^AUau*K#p"3 *V1'  ~O ~3Vy^Y;g K; L*-<HG U Y  a _#w){ZMm\| g/'@', K  ("}:7chMm d޾i,VTO U  ,S \6 95 Q6%!  @   g<Cy ,7z | T[- m<O00!A s o E-b )--#5--v%-8E)83!=>7 8-5b< 0z$| " {R5ׯlD݁FS\K  X Ov| f&ˬȻҮ 0`!"P!#ٮ#f+$u!ǧ# ;+Iu10jz-,7s,spK u+mR~G X'0|'300*726K2 1* )q N & G 2H2 < \j 1!m "l#p &S)T#\16D.z>*,/(8%=    ?^E|'}z{[<$wwIxS = iJ*r*>*1y*;1,<$`%`NUJ^Nm: q;Ԯֶ ֢ l ]?n9h,wW|8D17J606 T 7 ?  ( _ 7 1u @u  xu"X!# 5'6dk{'Po 5)Y \=$&< "=FZG!OwMiY<NFc=N&( <$A A(V_m| jb9GE64# L]wc%& k,S*1&2!r/W#/ *3+H &s'0_Gr߸0#ُ"ُٙCp$zn, 1-<X< 6,A[)<*5E3!4J)q+((*!|./%?VN{Sٶܐ g *yM`0|o&PTIB1(VV2 RL xo ̸ dX T % _Lx~ B~c FI@ @` ,6 U r7[ a` / y *twc.PL  G Q ( y}Щ"~WRC!!##"-&7n*br+H))#?"  ! N CqxF)<>Kx ~Ѝ+ F*  / a  L , y  ,; R/E H <aD F-Ԓ[/޴^+ݔqی/ݰpjD*lE, [`f ؕζ` w ,-@2F5pj] I O @, O"))) 6*%!wd  :W1(=ѷ>LgI4& &-%Y(e%&-" Ii,3Y%ppyrMi[ -u"F'Mi(Y/W.d4+4:A6ݔ0ۖ/_-&B2@ oIY,^-C Z  M_JktߑZQZϰgϓ!˘'&&])h%&q! 5%>##_ |{@s R=2ӡxܷZUm(K C |H<7 MDI`6,0S5D R^Kj^HKfbk`@݊5\Yن`VW@S֘26.P;wS^>b* +<C# ?#AJ6UN= /61}؃c\qU D ?$M%!V,%"<!8= , eGu8[; 9p <   [}P|BP- D > Uߤ .  IP V4 7 O51 B[beGt! 2#S'>' (%#18iyp: x&۠dՁζB_ǧ4jt "A%:e  O @j"3ON> #5@L݁ڝc~7 YC#j_ m` <k z ; => _r];jxxy} }T"` "6  &g$e(?(QG/ -+)=$9 ގ r rb ~ > " ݰ11kK")yU_.=#*-5l1)$n( wP~][ .# ,3w8)CF]C( K-H`!LGC>x/ ,#13:>zCYDB8dB<m6n3/S*X߇kٶ [ k2 z}5AcJ]y(Gw/0hV! < U mҧ>؟BiC8 aPYc-o`yE9f6Q,(oMVیYFv`S!r2Ym^9  [ WD2)B,E7U*b9+?9@=:=8v=:7;c-Y8*1J&,B$9I (Z {Y>\ !V*3dJ^E !BK&b+(X$SW(GQ"St%J{!E:!;4I)$#>W6\&S"y&JW$"b( $'k#$ R_NKQDHT9,$rB(kcHO( a^L)!b$tP(_)('p ٶNi+M26vFw* z CD%iST 5+ I  b ~   `!|ؕ#&.p**D%v<';ղ##]ׯ'$*%s/.!03J142!/0M.f+)!('}"*#$/##y!!]i L@c O ~0Q"!"e6M 8+nLv0%=M 7 yHdR   #  wE:F &>A!U xi6oH Bd+*A.;]iL@&i4;HJP*|O(]90 oMd pTv m]PX g 2 @Q k ,x V x-35 \#6+/M437,03- )" H U mO ? 1B @~Xړ"$$C '*u'k6&$'"${e ( (5Z: :|Zsb C(%-'* i%33!<n [ 51 EݔQbٙ܇F| %P t& [& ,_}(&! _!V u&#!rNKO{  q I gD V9|%hlDhgl(#pLP_Z\  UXҞʂVɒҊ ٙi N2' ig WI߸S yD9 l2fͩU 6 e̓!K/A0c(cwֶ#EEdvS wq(m&-0('D!"<pBradZ;f>n > 03 5 0/W$g%{>t a'Z|^D36 ,F|A$9v"}%=#$!Bm&qܷ!ٶA۪ Bٶ y  qA=ߛ3iYA i**ޢ oH#]@|ٶ?q۪wQ߸apd_zُcR/Usv?(  G'h N"Flw1ڀݰ Enm  `!L u  E >[A y{_LCg yy[(L%n%t-K,9E2a0=32W / L( <(j-v <% I g Q: _Ss0+b i)>]xv pj#4 ,۽ RP 2Ks;] ,5)& $ ou<9 D!Uw&?}g=g]~ q  F/Y: [w%(R,Lrz3uzhSGuGUF`:Z+-p # )P##"NQ!L## #*Dl(wA,_D)8# %s#'L u 3؍Fǔ1;׹ [:#-@O| G#`7 xzBM <"X"$jA#5"<$ HݰR< Ѥh@m>YRI@·sɒhɒuˏX`07DcK:J i& g ] 4#$V[&M&7 '} &A"MK !^ H & 82I$f+i[>$ڀ^X jR#572#m "$|,B7oO T+ww#67  -Q  dXZW%w~ E5:7a۪yl@,q  Fv^ 3 1"/|/|,h+)q2'+? "l"&#\ $ H~! " fs e # _619+v #iVLg$_T,}* a 'L n e N Q  &#S  A;h&*h a v o)9)qS2 }/9J/,%(%3Nz @ 6 (^js"?&m5 B &b(UC:!$`$&;%G&)(4(w'}.p&'} PWN f _S&$&J-& ގؕ yZBa,o4fì40E56k/ĺ ߤy0/_gg 5["$/s0 32!* :*2z eq 1=|I!9-HG݁kݞHWXgf")$!6<QjA {  =EtCSO^iԤQ f|K_,P2N ;^A]^>mxS:_qP B* )nZ)2n%}4>R4z B&3t y a:cDVjbb!'+)J-). 2} 0G/_.@&_)qg(f+&$ kPTww>"Hk؟Ձz@2DV,l!r,p'##x& z"7 Y wAV;:aSI^ 3{ 9BJHPQ( rzr .K gw,>I ^a~*hD?'$-" f cn B I .C} V L \t $]ц\{ Ձ#!ԟM)rsL UjNSjel" I*'W~!/^ \ Y&X`6w:nhX. NY3:cT8 8V3IMq,J9*$4Ce~  p!xq >" " "v !)T#f'$(&$($M&W 5A5{  2=0޾Ud9 dUXW#~1UӾ =t`eRt8}, C LCo {Z@LL!L!%i$L"lC* " &=w R.   N d  . O hi-EVi*K`+ U}G *%U o! ^ meP_mgS*+ڹ.ŃdZ@sIͩ(M_y*   -#'"2}`5D8)=`!;Fd 7DZ5= 2b)$  GQ wc9dVT@[sz<jd Q#TvgN#-&z&J$*bʞ*,ܾ5,ҹI5   #?AU U%7x, ݰ[{ڹS۽ Rl ۖ>$V.!<")-׉ FqׯhܐY,/Y&-tNlC6<\SJD:6cZv  f (7D[*g~c   !g%&&7$(/099B;<+= 9֏>r;Ջ4Tl2ϧ(Gh%ζ {Z ۪_oW+R ( ; l #g WV~-!^gUG * *5.ٵ.z,+x+RO&o%=#v /0G{8lO:CIF_A8 8)8&/[1':-ZC[ζbЄ  Ѝw|2/S 61;7 :}$"+,N#fٙ/9ޘ( W F_ @ Q-*L R (Q  cUaݔo6ۖ@R6ζ&Ūɛ͟ ֏ =Ut{]  ^8`[-(*-)#pT |dm@_hݨ\3tٙB: έD)Ԯ7 ?U' EL Q4 U"yv-w ez @+j 'm: YQ F 8=   &J !%= " fgs-|50LptQ$Q{CұaK@IUg \ Bbw 6A Y&s#  $ @$ ,h7)!w Fz! \Q9i~w'#K;X`R ۪0Ջ]ة ׹ةFٶ""!/ބ&%E'2'P*7* e' F(e$% vD Eo APYD'ބrUܐ1.=+ MXw'~l#g'5 4>6;=26 (7)2-! ftZ9jpG Z  (].X99?;=HVBСI! >ʻ6nc2kĝ##ˏ2y8D ;6X/eTV Y"O[&J"&(e'kD " Ob|eHJKYg~*A gm$d RpE#` svk??OE{a$|] | kj?v[b4 P`(y1{ 7}1Z|J9Uh%c 7zG1J(j mhdW$7"$C  # fd 5 I ,y^|pڹbՕ~gkŗꥹ닽+6˘J ,כf5 F$ Y)h=*2^+.\/+0*(5&5t$XT  e-;l'?%]N%)B=(%&A"#(@_J r' Q @ B-; L5c x ؼ fkUcf[% ~9Ai/ v!"Ao g J  !m , Uxĺf6Aa@G9N[)'<"6erF&@ = RCY>ZUD"<(:M+82.S702W4h*6n#?r<# :9_<7_3>5-#^Dd7RQyO;cqP #4֏$C_"R~ dt]TЄ(",N](~EHaҔ{~Ԉ{Ԥ r ? I\ J`h  | k+ E+6!]_tF?&Y K g g^1U51lw7pYOevQr\!6jg~-m  pO&HUR8 X 2 K} *   &%=&A&"u c`6, (OYp$V2k%"$M d Q _` , Qi%:HFW *  }cmCg Q 1  o 1 2 Js^b k /|a R߸sx){/DW_h 8&s )?gR R>!!?!8g M (  j{ɸ%AV-s皴{q:ܐS  R~ #-(le!(%m;'6Ae@<=GT)?-`:ʲ61h*D`gō/ ѤuN ]L ̜J( 12pc^;wW ZC%6`u" _ ~l c! 2vLةfT6^-/%&"3%%Q$ "< o7& O7 1 >in#օnAk (= # S d 1 o  ^R!u%*257;9?Kڊ<ڹ3*v2&\%O:s  Y^ # !pS <Y*_Y7;gPOdwc5 R }]*^LY o VX{4|9>~^!j=58%Ѥ7q]4'ݨ7?+  Ysq !Q  , o<m  t Sz   u ag23^ I{rM:Ӵm1((x ;2!gz-"P  c  &9mF^+I;'<>.+I /7R~-q .d8    ( , n 5zhK]cWs~:JDDu6?|10= "1] 1 O9 3w4A/,L]  ,.0G6??7Q<9=B%FDR>=}P<|5)YPF]}I ׉` /  1@V'a#$9xuO \@ o06#y"b[:*dcߑ۳ Lπ̸F۠?a~$ (wpY m=;2B':E'D_%Y$!3.6=N4a.Ը*b$} $7ͼ0ٶial-={3i2}96= |J~I(GQ )qP3dXh0mSa0C.Dy"(*'},$/$9 2]XGI#f*(41sn IpZ{Iة 6/ P (= Xζ R Q 8h|ZWM2o_ W`K2 Y4pfBo`,ξE b6;޸ɒ'9@ lpHa&*&'[#M3^{D^p+]_xs%FZq$*СQϹ+uU7SsJwg1j'}u,%#%y'`LٶI cĻ :<}E7 #:& u<dpJ Xe`MzuWp r k =ةӘCZ#l , 7hdd 36+ 2N5l .7 ;W7K++x=%c( "+.pP-.T,J+' \H eڧ IՁSh{ !-7  'Y"J&#y/)q,1q.6 .)$#Qd K  d O m7 8; ^OՁцoWץ܇-*G,8OJ-XL56;@Z  dk{S_y9Sc^ d</X J , bI* -9Pcܚ~f2C$@S2{D%? rKB u*["3!r!  >J #  & 4:$M lZf &cgdn  ]U)h4+3nd456k4X5'/C -*N%$ g6KB1zURܚNvѭg%G"2 2a./5~&-54%x+=*@  x f 6 *^T u~ ( $73 Y;Fx2i,NlCN/|&'c*kP,/,C/&20 618 /_'#!3 t f _ϝ-Щ+Mٶa KBؼj2 <6 c TD4>#vRkA# e${AKkݰ$/)!h'&З#"˘  ssܤ$'6!n(j7@0 aPGu $ ' x-"*'$Cz L E u k  (,yofwg!/mH3prpՁ.#w$nX , F#b"?-Y*X)-S1/$4T33Z>5B'@(9]A6/)G#]O>+y:IQ İeܚ xa*;8#,__). ) ~)$% "v(g$ ($Cl%yM߇{=Ce؟3h AVm4r Vw#^/M3 a;4<#"F6R"3:%70+\1*N@!V: S8E2!h"j Fi | ijܤj܇;۽G{ {*~UB  u;4   5"XT##6 5! RIZ  ڧ I G yI>0%DmyXs'IB r k5j8 F HD#pG)^KO,|I/JA3Dy0C&=#> 6#)&]".% B!%TMuߤ5#^Qy,.`J-B0 ~[X $1$/ 1 > Z  h @ ;Sq ,ڀw  ,_ l.*5˅гhsgߤ J U/ o)T 82GFFN2H a8l9 ,32j288IoݨՁQ mQ@b$|"bX# O,W,A305- !r.6* c,/)'"f* s, d,M{t x ܐsԤ0 9Y4M G!O I,7 Kt U~Y [pѭcٿՋԤuJ^'ԈPUTץ޴3( quw(s5D gO"<'a"#\&$$j! 'W&"3p" " (( 'Tnd71πZd訦=kB¶O[ը9гڊ+,/s%=>Q<As@~s{nC Da3#=/*#S'D$V"vP"<"';  @  AjrpwV"QL9M-}Z5%G ;N 5 u  * a( :N /% $+W.mqwгz< m y7&5* \v g y Bwt]& O?Os5Ҟdڀj͟@g J K(֏J{܇HwD*% Q 2j/)`MPv  8 H ^FI, %:Gl׹#һԸY)9; 06 E ##0-;0 /_1 1y ,+dC2+'&Y$, og YB {Iaaٶ _q!` kƷ< "iҀ/ W]~M T#$9%c([(Q0)6;83?A>GA3FP-Wy(K(Jq ?5*ma;)f~)یjߛc$H^$&5oy 6q*oUy ud`p` OtHISm$hx,&QٿU=6@ʔ Ҋ̜}Зn=,/vpOc ~* 9 {w [  ej B&8KҧO]s&Y$U&dhЍؼ9iF r6TMk!%a! $C$M({$8 d  &IO R ӡ N7 ·yPE_!a #% /1q4A26x0m73w&P-E2@(w ;lvY|ԈdFf E$r[|HX^Ńtg>Y;65*'*B.T/-6 4:4%3/C0c,* &$t), 5 yһq`DFXEE1Jp8_Uɮ]Ƈs~"X[2tI10G~6R0$ )8{')-3,8,9(aX T*1 GV ݁WfW޴ݰ&I$%ڀK oس I\%q *) '&7.,' ,L,hG3=6uA@ F%Ax'?h8.?2"l7 8aS/xcHUpʲL ʨQH-\ e^ j z*+' 10P Fc #BUPEt=j6+"(3 +pNy<:ltindٙnߑp+P~^^ O}( Jj XC~ } w^ F֏ $|e؃ة ?z߇Si^sV`b U x o E _<0P'/i&$>Z&8&8*5&]51/0G&""P#! SovQcCm4$݊}(ڊU#8-u_߸7zq %* ޢӴXҞ־ܭ$V[  =gj#5"vw!!BMR+n%G*(v"v (nZ` q#3]JrY4֢UP"rʨ"@ĺɮ<LuҔG_yһ7G--r-6  ^ L 8h~v `SPSg.Xcǧ"W}˿%M-82.i)(/.#*u)qoGnI=l  [  f X^m v X g  7& EV6@ SIfg| 4 B%Y "$3/_0(.})Jh$R,B 8 :@..j~tg<{ĝqԈ–;C~ e(*P4%2.0L%+&0)8H+x*.p)J`(4/%سW\*'`H&zx٭`ߤw۠ݞ[ܐX[gl|hV%K  #1-Y0 67 O67=3*G #&& I O+ x X& 5z | \6& 5 V.hm*(q u ;C&)q%m,%!'W.?(e" "% '%#\$t)q&,|)$/(,_*)T+$.-40 ],D+,%P&")zHZjӎ,D " _TA[j3/ d=@  1 L   A!(%m7#': ! |0? x~4$/INFtjYjc_ |= Ij+m  Rmh<):~yF]%]X++`=lU tdt3T~A Q^th% vwT  a`гlųS} F [ܭ: k  A"E'&d($/2a"F,)k' =$&"T /o#s%G 5L,E!L"v-LfvE6 ?~~s8eΙ ˅ UuNhP%hfF}U#gDh*"&$`%O&AX&S#+f$ dK) ,9rwb}w)`3SΣL} *<s@}Pq.V _    ` y= .cI*jY (nma,t$ D   Q# L!z  j f u#MnB@  2K;r_* r i i`/jKqc y`6 ]x L  ݺܭ[;nh־B)nVop Krb J"  RL%%Y##z)h &J~5U[P,y"3    D~xaܷ3C) (*)T+2'2a4{^5'$59yBlB8JMG7l=b>65b50v+)9$V$V !i"bM/!BG!|% $"(%)q "-@.2W//i{* R7UH"Zaُk,l5 ?H<e/2|C(E5MLvGT0IC<='850,'d t@ A XSdmB&i:^P!!|߇ r&SZ&b*u*340P/y0=~'&J 7FYwU@YE5٣6ԸOj(ų6&h-Y-a{nXp{JU &  _ V \ n+z0% #VT7I&kIJ KP = *J 'a=/K jpX$#6e~ |  = op`f}B4V-  ܤ 50`'g "X](*++6?3@51677Ko7F3s,VY&!8U4w_(@ I+T!hVwr6{T^1K,o,P  `+""#I0P +R#(4"F&]GAu y m 5  'D EON } U]'g7bv2nZQ۽FAf>U iAAVR )q (0*? IBKI=KL3M G mC >4n10%(c%b atN82 ,B  ] yS n KE+zK\/p F>+ G|M65tYmckf:ݰ r  i֏ ռ ؕp=c/2 b!{6Dړۖ*d@c;+6Etp ] }D^ J'ܐ-cԜCӪ^ ؕޢ'o&7"v$`$t NG>"vK!Bb! Q ߛ"޾/ )/+R$XRԮRڧ ڝ *H&   (#!^!h $/'7) +(e).,&%"3 O!p# #6G P(%2v۳ U/eV*T kw  y  ID    `yA  , OQ"6R9 ~dAVoV.ގζbCPЗD(4|# Sj , L*)'p)*: ]VZng9zQdm~8@9D ~ Rn!$9!;"! V |@ lx " 6 . rZ "/E/K|/Ov`S k: E$7~h!!V ( _ 8$ " ]c 6޴,f!L!%3J$`#!N!J6 ws)H1bb)Y-$wDr 6) ,i 61 +5~NrW=u9_٣ ܐ z & L g  I< y Q7!BI!8"bJIa88"V S DNXDUJ#wI ;>7 +1$L;WATy6"/HdAs-b .e?: Qw'*# xUFB!EahHq2یSIM/6s7 In[-'(m-E7)2&]c"3X(BO yr4yAی~4ܤ{>wc  .!6s~g % M#\' "rAB nMpP` n  O E]G  `/ @ 6fJCsZ`! X ;LZS]wj-P!#S"$M&%*,'(K,r/'W Vvi L+%Fmq%/4p( bq`^_z e ,  k a5-Q-A',݁ةC۽Vwl?|]@Kj; i  +=B#KM8:ޘ=-B/|j T}s8wu" 5$)q. 0= i :vI+O?7Dz  (%4<#-$&J%cj$"q{@U; c O/mM9FU?9dsuHZ |7pA9FTh!d,'`'/:|:z4 % {"l*%̉8~דOa7 ukՋ871ٙ oO(Z]>߮@bdt  $#Dt*,!/{]b  U:(xjM[U &cA(x|9ٿ=L ( 5:'b9 u  1 yN Ftp~ ;!r $|a3401q322ܭ)8'x x >[W!4 BJ<cF[G:VDtl650 ]2JY&TO?ݔ-+֬~ٶ, /F">o u!. URQ|~q~+n3,@}*nMH Y  E 'k I(s1[- &J3& #'} ! 6 2 RdUyJ 7NI؃݁'e>klCG* +n (? 80; HD R [LHSLH DAo='z2}/)x V ~ . L$$ 'PLQ&$ O#,/iZ;7I40g; ~ 0 R(O(.j.7r{2//|,'x\ohNvj &Qsw*u8)h0,9)^'s!r2)F@7*=OBXʂ7B7}`#amm$o&'xK/( 3V& KA^h:%: ez ux 3z+:&4p%W}LKku#),,1J,R$  &  I l  0 [ -6y l xy ,gcW$$e/w'*G , sP< I/ o $ )ݺ}ބ` KM*ZI#@LY ;a u8zu :`$Ef~R@dӪjѭ z ##Iی &&m,H,B5-3\.S\"_+U' ,P#  tK~Dm k % U [)19:syCc>dY841#"*@ F  \x#Yu)Q'- %Y/!&(! $/!!h9 !SZU? ,@ <7 .i j  CJ$q7q.D 9V]ݞ$ *v3{O߸G;I &g  ~ 5 Q{ I _ . g@dPS2|=#Sj[(۪ oٙ ," R׼P ӹŹwcAH{7 `:lU,pV i -'AZ O}B9U T<G/̉|ЩY؃Z.U<>ݞ h v/m }~   `*C|v a.Rv9 ,C`  $d)X'02HBDCo<-=9;4I7S695|6n2.+#"vL e rn8,@xxH o&jy'gd>b >% 2[f $t&3H_/ O'D+5($ O/ r$ ! I*( '%'},V )T)P$~EHJ \Nl ܚ*|;9mMe`&/_JBWhG*lJ"jُ)x6^ݰ @ìuyX#-2Jsֻ Oh :ǝϰngg%{^ѷF֘Jx]PCrPcF^&Jq/4' 6`:l  Js ll K lU^ <gS;L E EA}>"F= sWX q )!V!B%O"01v@ 8 :i= |:M>8?6;0 o' x!pg \]O&|ܤ4#NA [ .0dKw - O , R 6 !r"vb! "|SG+=4Xlg+-ՁDp#Ι%M,a,1m(.,ߑ&(w#\^ DvY97`JE$5?,uh/)22[ x LϹ ʂ 2π '(Ԝڝ>4$="U eu  P2(   c9'&Jj$Y1Pw' 99(RtЗ waXItVa_  R:"^44 <Aa'](bݞ~Hā o \JԤ $«޶ @`ϓכr 9n'DhemA]7sP}U (  {A8 A] x5' =^i7JF>eU!g%[&7+n;02N5U5tL9,%3P,9)V)8i D O  XAh F'[x H P ( _U   _7 Rw$ QDt z!h+D " k = Q#!%2W9+[.6) &h#/$W\ HVI=rҔ8U 2ͩ (U:ĺã|Є Sֶ"#2ζtЄכنuKibwK{+or:pt@ Y| x>: [HӪ yWBųIȫJNӴ޾ѤҊ)pwΣmK9 L wT v,P]Q]["*- _T  uZE GP u!%"v&$I% &JOC8G' U 8. E(G').(*u"q*V&]D)u%OT$6ft L i{+@t$ RA;Jq R]u!+2 , @7Q$vͲyFӄ>O3+'pN7.&.55A;H<N4,^u j=&ըp }J: l eȎ~05%1PBj@c"##{#2$ "  22P! O ) jtt:7Nvia]~]j%Yv=K 6[HP#,/y.d74^3H 1J,n*#5 . FJ,wl  HDpY dJ$i'rϓѐN. [F.I  . ;! k/-*x5 <&x@H3& t ~(Oc^D ,79  8M}5e܇=}<"02VڝDr" -2[)BX(/,a,+,(>("C$!6!+#yu!%@n3S|ٶ֘C M '/uqmS)/~) 8Rg!%_rO _v29*mh?/+k1 Aa 7 9JDfxC8AU=Ը8Y$#JTռ= F-ƛG(RՕ-F#I֏#I.I%Y]` 2#fp..f*-}+(w (M!!%#?54 B8 @> }=v<;F6!&)"9FQ~dn(D%  \ eQN0   K"z#?/(4*(/c-^*k@* $t"v.wo qi ^ O1^ 11 *Spe @7K#~'s,31-,d)q(G!P=j  R;w Q[H؍^, NŃ,w}gA˶|ݨ]ܚLnҞ&$̓-(*CgV g RO%l$*E DJ ٭}ll4F w m &v'0#\"m  ew[Dn7Z h ;g" gHuov `7! , y<~7'wu,92)K42tڀ:_7C0g16AI&(ey Y.CFY w}( ,{m<ygC)E!2pٙܐӾ UB"zbk9b ' o,XJjE'?w I ptKQ= Fnxx_" (; A<H6>2K0cN()^C%m ֬@ڀc3?9pD;Pu Q ~I`  5=T ;!L/$V-OJ31d8J3n7F/ 05/0݁*!h!%m"~<ZI,cj/><f0*2 a)^ ' +`$C+("-YQ#y#* x"l*u"P .G:  QtKT>P 7 ~ &^P<ifPuP"H#q*&J )4f ؍@x`~]۳$cS< 3>7<&7u)(e('7 # '##.[u( K*yۖ>U9))+ӎ~fӾ#Yg f H ,*,/ 1]Z2$/0*$(5!5!HC oTQ kJ/JtC(;5E*&=axCB`ړ2~A$XS.f)y&])!%YmF>sP Y/)&: |r: P93/@%;28=Puyst yxKF"Ҁ 7/GLk C^Cvܐ \ܭ!Lm!rh%< "@+;5  (=*o%Gn,%f'=a̒Ԥ% 9& j p r " ߇ ( g 3Z ! % R@U7U ^ ~Vq ߤ m al ~rD  S(ةv"~۪Z O']j =Hf"PH  uddHm<ZV ;6"ץ)8Ә/_7| ?F ܇MNu3OEK=7U,x+5\y;ݔنBō6-/xHc6*^ 3:5PWHtSWIB_J@E>+H@53n#U  eiym@ ܐ/|NuwB< 5n g R  ,deQE T ap ;#!VV(Q #f&Z% '+n /M 2k;#CTo 4K=Ix]ǧ;E0Om<]U  R=Gl)R2ud'$" #p%v' |):'0$ !q^ ~ug;| 09ҧv=+XweC6 9;Y:  L  R& L  [*a: o i&j DlpS}+RlGl Q%sֶ5A9G (  +5'%Y1]#\+$&-!+=!B/>>0YDX u %`A(vS+YaYl^G a׹L8,Lf'k*G($z!R#* /6 :+J oE}^BB A[ u:9 )KeT)zKMn?= =`33 ~0Y(BM 8߮/ĝީxƺYDTF~Z9~O>֢8c1S) 3SKM]4ʞYr9Y3o1׹#xj+KL+r.7m7 6,5+!)h!n oV$ !BU7ctk 'V  [Tօ k!`xOXar++!w.1.307958l55c- 6i " N }a&-$/!%)?Yr؟ÙzŃ=gvg|/Cq$/e('s.S+!* # #+[Ӫ Ԝ  aNץ֢:\h5qUƣe7;˅Ӫ!Ra*"F! m!Vny2iXplYEVm0m?,/)޾uُ|ؕړoJAF/tULnJ 4ߤ@"M #!h , #V  \ ((eq{!M0FKcf%[jVINjzq  7=j('a'' 2T/&A71;>0.&S @L  ,hb9)H :_,-h #- e7'>x< QPLO@NHVH`>J;wd+G(>? GXAYtIC%ߑ_<{/|9ގ+гud@ޘ/aܚj\yeץ= kUT؃al"0t/ 17*66x3&7% 8R ET/ ('ʂdf6 3z u/,r, &/S1S 8c#655/4.+&8)*3Z$2%=2$4 2N%0*(mAt){ Xp om$0dZ^^,j@3j x3(I+R7_7ڱ7|9L9!7 /9)WT ^IlP;^;pm֘ I [/ ^? $V 1@%RMO/+A95C"L U E[YP!^AKI M  I ;" & ,/ $ _.f G @~XhCKaOHJ Y@42+-,6PC ]mݨ@]rܷՁ,2ܐΙtOϰҧדQeL YcʔY'>Z ,S$!r-W ug=WI  u7%3 OՁ WAN۽:ܚY޴?~` jp% $D[%  %Z  z   ) 5_ 'ILcVF螸 Ń`ωݺ{ "X (  oGj$9"t|UloAc2F ` @ QLf  i#   I < FN L X}+W|^ f! $1d5'<]NA*N@N2NbO QJ QF55'K6 (2'!*NyA 1i|MNF)4G$ r@C;"~iu'Wj%=&'&/,V&AtQus4 ) =uj ( ]gM"y' (_=n`-L #UJ-NEwlx yb[~Y] یD N pVA֘FMӘ/cʻŃ&πcղ۳2S' Yze / d2 uB: m Q f^AE{U'V0HTD 2,% k' ~ <gw `: h &iT &O O@L0o fP 2P   !,&-E+?!$ &6p D :G [ &AJ(Z= !s ~cfC u P c O%%[ "! Rwa2Ij]Ad0iH ҧv ~@F47K_ |  ~ y 2'0U'L #g7"*So{$! |o5ir6%_0 G pYFlLg RPdm   ^y  "  Y # m M/.pYVg_Lo P!A  a)% % 9 8 a ~z:Iy;z0O c r9G jA: j s]9dzzJ4N{n\  ,/>[b0RI#GS]4j@srFKYKriT 5S oK `5 bQeNy 8  =|jSt *P "+ k= fpX;DQ%2 h/  s] 1n8 Iktq90$8 Y0cH&-8/iF CkgUUKuKWCkw:3)h e^-%|ֶs @06Iۖ1MGZ N'v-0!1 2aq1J:i99j;8g79 "2'.p'M,B/-E-(,() !]FQD 6B o_{HU{* lP /Y Am2iJ ~y }})>D6W6ڊJߑrNqanOm/l(!dZK>b4Q#4;GdtҞ@/ԜA|a]f(9bt+e< dp!r ##o&]l$g*Xt*)!|_# @ T#  S$ g[jNH+JB8m>=+8<ѐ4qȄ2+xͲ$ړ 59)8YWpVn9jO]A  c*   I7  . 4 FPG3 O P (P u>@ 7]j|iD#0mQj (Gj- 1 lF_ 2ڧ [SnE=Ӫϰox=ΙNҊ $"HSD  e#{ %mT&-6nv4824^`23~29?=2/ +\v$;M |z!/##S$N#I H`! ' L$ o#[%'#%=)$+8824!23>43 Y4A3.f '}!#+A{M 2T $?݁[Æ~sέ  q |0 B m % ( ?0 61: IDM{CY2:3i)7"v~  1?jGω6ڊi{V+ q`j 6>#f yH !( H'}"Ps"v6k):$I X(CP9ew ^+g a ,x_N:F2 C w E I5 o 1 Օa<HL   Z J|ca,o , l ]3)J jdIG] i r|G / I ^ ; Q  "{c yK 6 [ i &%*&O Rf Sf]|tBVy|mGTh<*A 6sr8@ٶv$AgQS o[ % 13ibdlDL>XD++vDXnݞ i%[!ߑ$"<%= "E(W#-g! \ "z/&%n% uM[pQYAp[ jI/]V[JK-s4E:u)q' #r'}T5d,V-;8O4YB,95bb2:~($#A ##(e=:55~/ V!^T8va-ۖ'ُL0س>ڧ Xh)3/h45b(G"* +!G5H k]82 vQݺ|ڝ u fӪ0,mը(] V!#:'D%m9)8!/;% QT k6 A %h! /I2B ÆYۿeҀhɛR,Yݸ Șe:ѭ9cKxy%cYh Q d x , 99$Xq  Wē \? # -W~Nq 鵿 f օ  > Z xZ[ 8 QK[ WD!BY,u; KT ^ 2  m ) m _ L mG  / [US *1? o1(iFZ*U1,b ,(4&K2 !%G/&',|(+3&17I5g@N51S.&-*"&$j RE $:M uN : ?C I L iyc &*W36 : ex##"  c)h .j5P"+AöImYsHh3ͼzT Dc NtYAghuqDr)Ec " `؃e|VLfZx*<G޾p OP  Q 1 X u T7 \  V}.ij4&v c  # η#S"&٭t_u " S .=:@(<[' @).4 (3 11 'a & ~dt k xjJbf@ *s S @@g## ,p!)u,L16u0m!(&S-&-.\%0G'5l)4^).8(G5'&A9 "1Dwu fU Zi>AF ʞeN:`W iw;f# 1t s ;*uw}7 !%ةjC Q9.ٶ/V 1YDyA6<`Y PyPF%Pa: ] ,R92`` Ԓ:4kLY/P¼u4ǻ!r$n($]).#m7) gw'M$'"/^ zz 2 P`>P Yv^ כی~7 Q ln O 8  O    8 Z^ 0 e?  (?2 0^Z^ [  Dm :'pCcU"!/v(o$7 f+h_KuVt/&,H5}[  5' l* Uvf 1 ;w ilwMmps 5 '  ,"7UX5XQ7A<6 ,("j7}0*bjmh!jJ`fi־ x="$ {8bm' "I Ui8/'S'1Sq.2~,/., H> Vߛ`3{н66Q`һ Ԉ642{ X!}i Q -nd0/&VBj R [n S  z Y * mO=!h2## ( 0U0c>273!6 ; :8e7W63n6H./C%O#ya ubf N #:U6Xi! "2&A:*X' ( O!/t#f<_7$/&]A-,),F(Q[ !^ 6 Mak['O]0fiN#6ϧEV٭l 3D!|#"8$&$/ H#-v$@;!AH`HDG7GfZD"6+}vI 1SDU+ M7> ]2DUq%Nn$j" ۖ NL>mVcnZn  x , #CY C  X/#8n[[A 02"l&#5q< gP0Wp#C) /(>){0(-O 3 x.#.)$,"w*w2 ^g L2 ~ r Cp2 z & ;~K | pD O I Gz;nG0w!2X'!+B%'x!*44 S?m-|#TAoX`? E %OP&[  kTx 2^ &X=Mm-LJMS>߸x  Kd%#$(*j(m$'a`*&7('!n o yy2!1,@*0FI^ܭ R##Iu!V!K##&,G8c8O0c: e4 'F&3[2/  (*WѷKE*^%̜Mֶ#+ H |X _   u x& X& +n('k&'f&A4! R ? |ގ׹ J7͕ؕM d, t'06'7Uj/X>n3/My*@  BP}oD YmbwHP^3Z  , ; g pJ @)ӡ2= ʨ < l k_՞79w5S=a 8L <<7T jc/r V ":vd r )5z _ |y_ MjCӡ=NJ!&r85 : Ʒ6h2NЍ0.\ߑ)m#\.@sy  NܷX%ct JJm!F #ֶVVuҧdP.!A_yօ3:zDM~R" R d^ O*"M I/Qv56WP۪ ee نڝ-ު?cX דHF@-Ә=i8lM } K t 1 e Gz"-;C V 9bFapVa;v%[9-!/><O6+i9 0G,_"3A e {)jk{  @!Ұ%m"*!H{3@RaV /  q }g  !:^  c ILt Y F2  Hjdr}@sN'R m1$M"9+5,0m/|-[-H+!#!m sN'LI1y:T,5 `~T" "#p !h!$$-/9G0,2 3* .GaU i 76 [;[vDqN Q !Ka   vo$!W] 81 i ' ]  Y  &   x0u 8YR)n y_Mj* m i6i$Wa ?@ _Q IB XqP <6wW y#)""s!/5 <c%EDxu=|}3}|$$'"F(d(nkg^NnO[ڊ$ }30Xɤf$k%c!V"dCL+ s7  "= 1    ,z,c < wJP V feܐ@(֬Y @) fr 6}c C ks- 2 C L  = Bdc7 .]O  #M Q y4   $C>%+!8)8'D-&&J&"  ( >MqԒ%6@s؍I?Eh_K`p 1O)*F/9i01d3 0 3 )/|)q 3 k {^k2fܭ {=Oe`b.62 _  D LZ$ (w ,1 057* u5 /C'#:w!\*Ջ _o uU  }* ,X~! gaYEx , Z ,*& /g+s0.pT('@xCU`W <W  X ݺӄ#>yP&a##&J$"  PV`zC^ ZP\XgQ XDyK y%&?(%  "%ZE%j*O=GȄ{]v5cЄ~Hޢ'2*:Z"P%G9(8,>4.p< <-+:0)q3d$/W"X(>X%s:C sn(-ړ[ُhכdr$@^ 0{G /tb[C1i1$U,.B/74\.|/&-Sݞг왹˳bZݷO[(ϓZ^I O XJ Y0|!3 44T=to796%/0|92D3 )J(T}:IOнYʞƛNƒzã ʂG "f o #| uc Z ObVo) OA^aޘ ͼȘzw gAÙ֢Q UF4W !B# =( 5 ci& GSc_e S I`< U} TP%u(hc(!S#h#S%*h,_$U U>!a=A$2U '-QseV?x,j0I YY`}dEd m Q l pNq ||۽y+;~9]sTItk%@ n: dSd&Ri2K|)m@xN)/ Z8juIY 7 xp Kv  .sGn޾ڊwc؃ݞUdfk;Ҟfw՞ةoדkc:UiTҔl݊ ep <dFpP-z/S 7` y UI޴G 0q/-{U20 [p 6d3j$/f& 0;1y05>.$" +~۠WT=K&PG"~2 L !Lci N .R~% #?$:s/W2.y3, +\(! +4U)gۄCȎɈw6ʨF')ӪzH I TX Uea  ޴dF`*8Y ;֏8^ ʂYK4ȡKYR1D٭3 s2E@ %v5&]&#slLG& < xC 5cAt j_!C R"*%#py3'   x !%v'.)+' sw F I @` ZC܇!^ S G"m"Xc&&$d"Am~ *ZQfHd& n]h<@:`G CS^vxmDP*`4S7mE#*'v0.z.+\D'0" JE H<+d#\w ^! w"uK U 8< r4 ةC!JI{(!=    e TNn]9?O/|%""As "5Qj$?KWl @=- 5^t -9O@~^hi~f- ?b  HY~ ^  y8&+$ ('W!h$$) >%=VB  // (e~[}  | &ylƇ̜ ,rT>5!c @|X)0%$!hIdEi ocT? xO-aA%ͮY#,V)J?+Ƚ(&4% 6!N) Z|'i$}-)'Wp+$G s'uOJfA}d #c$/" %#%=# #" $ #"$$/&$;)B=)G' r'&'< "o9 O9XՕͼMV5VYӴ]O?e 2 O2X'rSK \aJ 1<:/fO/  V0UjmpT xDx TZr 5 +e}$x ,^\32K y"bp$/)(- 021.,(e݊$۳4`c{=} (՞ܐD<%h 3 Z yj2~@ o$M \n~G8 ~@"")$$=(*S(-Y)J!$`^':^(i+s* }-m+/|`*#ד 7g 6B  %} P*':95'75Xl)TP. -)* [2&J), +^*(GV ! , t Is Bg1uܤ)ړ,952.7_ŗ/W1$ɸ(#UUD+xt9g K=$%-Age6OlAr )DTw`io$n|]bWz߮mwySxXQ֬ r:+ 8ץD9ha}|: fm&1&ުo|{MN߸Ӿ܇%cY[* Uh, x '&K.#?ACM_JAPdMO,K;_EEB}F<|- O) QAJ }P|,<^nF|<gˏDL = @"& *#S-#);,6R,9*;$jA$V>>"970*&P3ұgRˏU{=ˏFގL:LJٶ(j , B/ ]pi o "F~$,,V-lW,%#-[Edس~XG;Ms#$Ny'/ZmYPxA ~ߛ # "օ nB (̸#G FF$Cus\pʂ (ϓ*Ԯ=^{x\`Y6VsIG , & I7`f a|(BaNp=p`@CQL@;=^|d  iO,{j1 ?,1Ww:,%xL ' QZG`AZO ̦##CIr",rU%]ըG$VjwH7/ ,y' d$v P<)&a^rڊ^ԮWb|q0Pm_;fNfhVQO "lz+? -/i5~5=:6H829]6"5.,C!R a /gf,c 9 % 9`[c_wK* G @x/"03.3d1$߸1/L&Z"vK! #٣޴iٿbϧYwЍ5ةF ,  r5ywռ<ړ޾;B۪ wQҀ%=)6/6xB/q_PT I ! kX A( 9 GV*`J!S$0mR4{ܐ9 <4Jp>>-<5l%#79ZV,go]  iT!/0=!^3j\ aG7p/q]`$A* ` 8^ 1 Vm| M( rpTڱMV & qy^e R hjFlI$d1H܇ (p@gj$$2_jѭ۽[R gUUn-[ I X=L)7#=XLV  .- "_]vs*k+qm"0J)'* ,',*;$MP&SZ%#? Uga%m 374^?Tx9"s2}-YfpF yO'4c(1>S~ ;4~7X$2&/- " ,1RP&$'a*'k%"b \J 2 A  P C | OP` ;-Y_vU}*P ڧ fKk#BAG =F  6L,'>} w c I$d2B ^V-Ul#/ZAq48U j"F!$"T$9cN}-h CcBs{R,:`"T+ q^<@V-)!I`'Mu~\ FaGJ J tDPRe5A5H<WOag FL < 1 z 6 hN<w|CԜ=ռɮ-+qƑh+С׹PZ7 & ,Ej'] X !L4{ 9]DEcFvGA? 73)8%31SX%cY{_N-Tӡgz%Knh  ^; h\ \"<%(^/0y030=8<79A<3;F<#=>69$,* g$& _ xaOړ ŵ @8; t> ܰ&ʷiKO~Y|mg(dQjq  O7_8c1y$ K+ EOo|,IСHG}7;g Ձ z,+Fxj+t 7!!$tH(.P,~,|*k"!r)Sf M 6"Q)&(*29(7+dW&#?a ipP>6Ӻݰϳᙾ ʂڱT ~ng$+H.Z,", *3w(.\+d1J%c/+.z"*2'kA<G+ c? 5*XdV_:Qāĺ7NbO Bng j2  !/j< ; KLe$CR$S"S){T'R.L'6-334/ .-*%O_یs/f x =7zrr۪؃ܷ E`k 8LO ( sXc [= 6nWTDJ[{mGcny 7 #8:Mqw!h%$'n*9#J#?M)<C # ,) /(O-Cބj F3 BцfG%I+E&D; | ^q&# ){|##s:6? _ E}3#7tfo+OcHf.j0=ՕuҧU˶x%GN!Q,ɿKH~U]xU8Ӫ\ 3VkQZL`H?3x*2 WdQ!W 7@|TGms؍Bة=}C*Uݔ 4*x)T(i*u/]+$&6$OyQH "N u )h%)-')Y(QP#y!w +p*r <eG+ "$}#a.:'k(ը#y++CA؟yS7J2%w[ ,r[K='&A5l +F+"b ;+QK #j:%pJKiRXcNcfY:|sw O O!^ ! e+^*.,C*u^{ڱ@!#Ϲ Σ.[U9 i XlC@Dv<gd5F 1 7 X,`w 3XK  8  e*n C-%JS-,,;W}d& M/-yd2K "a$")'.2=#< 8l:sG10Q"XԒ"P~' WP>2o:0nIluٶU0J%  7"^# at2f$ ((* ""})q ( R = & f*,/֬/M+ݞ9ZٶJԜ/ u+ #c p  W")4Tm2 5T7_98 (ή0 &E }-r`g0 c " E6`^"P&FaߤC)ըi/M~sbPd 1% @pu ,) <:&EEL%@x5+7- ,+b] BB.ٙŪ⯺㌶泑3*̦$rکe TkL RҀA o ?Y  9 c6F@( ;*:6\ (#" 88Y x T Ft޾H .Oҧ1`Yz$&2  V!wDJ\p's+}.d3d2(1.+n)*'k$M#f().%j8/ O  \AA  pv_Q(!#-++x6,/4/5X-3n;F.,,#)"jT{x: X   yHem!V .iC m   2cz   Ic\ y m //(@>638)3! )qE#p/ ah 5 ݭMǻK% /q֏ 5j%O%-S4JAiAIH+PL.F2 634q'-> Q$|=<$^޾~ 8}"KdXšzըn<>=[82 6 0G4.+("<P*/({n%2Z |aD 2N7:F L \ V2!8  *N#"$(4/^-%1S(VG pޘ;O9qvyL (/e @$;=:& ##0* 'a&U@ >"X B"ncF@V /*GњU˿)BFA%Z9XiO~YIW +؍U cK$/--#-{&,h y T u jߑ4eسuqǧōزTMdתYQ۰ϓُKK3Sʂ;mMIKN5 65 >Z u=h4^j;i-, e .t c!M]m,C֬־]W-ϝ-[ӪBܤSd  #-J '/.\]2:54J6H3!,%O' M.. 3P}EZ} m| C+t&S){7-,*J)hB)$MRU  2 $9 f% r'k ('*)&g' ߑAw ܚ2Ms & s*,`tz'%m 0 <,!,,L/9)W!swN iDT'DBݰU٭־(G"3\&&)c,g.' a+j&Jة&ܷbLmJ],~ /a֘ R7Kˬ˿ŗ) ?wƭ0 Tu]ٿ]6 &V gŽ(U}l Cìˏϝ=O++ L!**ݨs֏8'ղ Z< L/ Nd j0ISrrI J <@L+ &Gb0tHdNd)  O1K] o!  O8U~ ^X ;n .Ky{P!D (e aU[ iޘ &t8m yI6lJ'%7-l+#5tX-35 'W7h PHd=^* c6^ z $3mH]@,"u|m*iS8K\־Ivǧζa<ēǝɒ L zɤmSQF;Օ7F{4/s),h-M-|,.f(tA$&#'0!^ > < uS*sGOl)YƭdDy}]=u=כDI# /R{pj .n R '@/1VsDz&""by  1bbyHwc"+o+ ~ &  % ? W , Y E ?'s1# _> o9 y ,[-#&&2+ JDv:]G 9{ +/ b r &S _/Y:u!|\|j{fD'm@ i`e e +NQM'%.,~9 2+n=* W} uK)%o/Z~r`pxw o{LN+Y+dK=7?6!>x62"-$H"S*[R"Um *]I 17 d|h&&*G6i4s2k3.R/-O-l1.j. ./*!<^nhoni\*/9/p%&D" ^  Z* 5!")!!ih OJD9mߤ U<]w xN"20/M<L2a M \$a ,C 8 """"G$/x*b-);4BZCk6N M K&O@ LOJN Nl!U8:LoHjA5X .1 Q)^Q; m |i ZK [G &VJ ZNT/&(%Y$8&q+ ##^" o,I_*0K#1f0EL?BK =`7/2N#" 6j8Pj iqqjn6e7 ( ! DJ ) kEץ7Guٙ ۠lmI/v v-,4Mk!߇mߛf n%  x)" 5j8һB-TֶiԸN\81<ٶgޘÐ,~ڊwHi6z-zb*"[ U 'f; %O/,2-;)+!.&SSuը#f  -^3  q"= Q+(i3F6/9 " +pzL @ p^ < U*`۽_NJ &Æ=~4̉RQ He3JPQP   j+8#%x%%c[f3)$am&g/'U T$ JURh2]" %3' r*2 \*(+na/($|""P.f)J's&q >a[CfA|AqLw%Yޢ/).*,!$(,#- jT 5m hMd|T~ޢ+ ,/rRL^aFUbPCiYS@fS4 U̓ ӄoСDӘ/. mS$>7{-t%ռ]C ړhYی%YP,;=݁eWm.BAzDl(8 { !VF"X) '0)$p#yG"N{%XlP^ {+:-A"(%( U!#9A' m  9 [C gw_D%7EQ pOWۄ #*[)m|7} 8YG`F0  {Π &4ܦ4 ̭ s O' xaF ( UJg [ ; t  I`Kt5ߤڝ$@/G}"G (. ;u ٶ r:4Y,4 B^= |7m#7Q5E L L)3 1 U !T<D@2w4ݞ޴5 W+x *N*4&034/D*'k5$V RgQ_ Y-  * H!("% H!^S Ua *z%j nM8v J{ ` kY Jh  - `J# _f,v7m | Ff";! P%= my^vYCl,߇?UՋֶ(WTܐ~(B-oQ  [ 4+  ? _L Gi 4 ޾A#_9O>X )Kz xw,  =^ `PwKZ')^92m52S.z8/n1%/&Z$Jye iU mW%v0dd-dT< "2aݰ6!u8E4A5F?K'W9- 5[ S`~!'n %'ؼ o &FQl<(DS]m  @+(h"+yU E^?@uLSfc'y FN%!*8&q&#X]J9%I [J/[A @0*j!P X j RN a+gNu RJaw  x9U%f05 -j k & >  A^ >7lW!1&q!'&AJ##Z' \g G i|- \m u"G/4Ձ"vX% $Y)BA&(' Kj;! # D7 !:^}^B mwjV }  X7gGi]  W0P!(#*n'}g+%%%f "' D9z b^ RRCb|U(XE0'9nK8Hidfg` @ ,h Gbi5r߮ު @֘ѷ z ̜1)"fϹ FS W۪rSg,UbJ{& I! xyK!3 3 y} jo7Gi{ 7  ͌ t˾~#_ª9ƒDKWj "j e'  ) L" cu  Q Y m "` 1 T0P{.xҞ#"HVm3xehz}:K IM  (Q+- -b Y-$6(qj!%{Gέl` Q֏ iL uf   =w#< a] r *8; > E@NHUMMJq2I@X@.,+5OMƇ?OiV Z _o0ޘsyf 9}PX1bZ  H '!] 8&&J?%Ug PhvwZ sX@"fT} "uE+G r%$XC# o%=&,4J^5 Q8c9e 8968c7U \ OF |f  ~   ,J{ؼӄ"(!6(*"t'Є$*k$%$"!pimSD47 & , G  XtгIATp; @  ( ; U U" $v| 5 ? I n) |d r  rl#i r on F  k`l| p6π `ϰX'0؟!L$X JVpk-E^$ &] Dm DKtd '& :@ jFKF`dN:6Ks&KI݊A0r =O]w' 3d |  7  K (  ]UF!N%ݔ[6.ͩN1viLة"/{Gt@TQ d > &$0#l*% S"<3'jPQC[+i2j [6W P`NJ%LbJسV׹AmT} O ~& #D+,%Y71q~P4 BY-ZmT?+`@\B2o /!z)qZ,48_8):M@5EBJ.)I9M`O, QkN2NF$&Ht E$<+{(w=`,.a UEN_D&VS1rH2} ц[/*`##U I  gL0}Dkq) ZیQPY|² @o6K/G1g\Y5/]_9S + 7qw  #% f\gf8 !,| YB kg+ ݰC. Xd]D^q e ?ޘ ۖ kWُSד,߮6~NCf(B= 5|(zE|I{I>U M~Iu9p$.,>|;846$%Y %kTkT%7/MBٶ*==%Ӫs~,x 68pX+  87-l5 PIY {IK99~chTg ( #MH &0#Sgu@ F8AI8c5rAG!"I U #,  neM2%]'N{ mBQY/ m] t*;, ,L-$Mu&BA_Twt Y |K;zt!`JS|/-= ",(m{_^R5 2 r Y   Y  (6M/* m  1A`V YE dE' 'H\g){/=V>9 21$16v(#U =[!,(O'}'sV*$/s#f  d 7 [D s^ NJ 7C)X#\ Y'M <3^3* 8j5tg2/9$'!##{3] OWm~ؕTǔ@2c1y $)J2:.4I0"5t.p,L/&S# T  r SJ]{Ysyޢ NK &# ު { k 5@J } PQp;T]nX&Jd! &!H"bv  Oc] %.Ѝњ#Ϲ9Σӄ%Ձד<7|۳[FnAw{>oLP  L@ K^ W{Y2[֏ Ҁ l+܇Z>IL !C  \$%c(}+z7 16#*R'C \J% 'z%0,Vy,y1g<$7r9 2(GS& n&  y`  fTD Iz a_`w`g> Ga^ Gi:_dNuGi1^b6A^aG9?ؼds^J ]k+H**N+x%$j  : : NZpBdE`*~v;޴r3dS ]%u% S#j" . *2D16*_$-S6q6"+ 1=޴1Dh87^y$uKn7 jZ^ . UE* wg#} 1 S 9Y=I,<Z$cHd#$ 4?&Rj0^]DK"FnD  s'aA i   J* p۪.̜c+<̦c P ҧvׯ۪ *MvPH6^tnU|]2?8 D E@I D$(nXY@y4#  o@QKKTCJ3 \p+o,pQ{N!>]u0pd-lyonpotpourri-3.0.1/sound/soda-bd.aif000066400000000000000000005205201430526361000202070ustar00rootroot00000000000000FORMHAIFFCOMTCreator: Logic PlatinumCOMM@DSSNDX =x;>^ +ս,}ǵ$M[۫[T}6ٚ$J풰锏V愌Iⴉީdl,֫R vȳ3Ė7ڀ̵ŭ)E5U(]1c|:=I{˯)Ā(g @ƪ< |]Ɇ3V̍ uc.c:DԪĮz<NE.U]).Yf5[ f 0  d3EU5 Y?1 \U"%(<*I-[0*G258 f;a [> G@ zCp EFHJ}aL?N=P R?TV]W!Y #ZK&W[f) \Z+d]+..]0^a3^67_9_9;_D> _6@_Cp^E^H^J}]L]'N\P\R[fTtZVZ;WqYXXZX_[=W\W@\V]VG^=U^U^U9_+T_DT_BT_'T^T^T^]T]T]uT]U\sU_[U[;UZVRZVYoW XWfXMWWXW0X]VXVKXUY#UYMU;YjTYzTYvTYaTY9TYTXTXOTWTW@UVUTUUTUT V7SVRVPW;OWN@WLX7KWXIXH(YF{Y4DY[C?YsAsYz?Ys=Y[;Y,9X8X6'X74=W2TW20oV.U,T+T)LS'Q%P$O"YNW L"KmJSH}FE^-CA?>jq<f:87503I1b _/ - , d*3 ( P& %# B#n"> c%;z|a .o o ) q _-eoD]ݭ-*`ov7v5)x%ҥ>Yѹќё1ќ@ѲPYҧc]Ӿ 6ԃX2Ոٕ؅_TRa֞ԩ֮֫K֙|dI իѩBѕѕ9ѧӜ02у}Ьz0ԑKՕ"[֮֞֫֜C|~I6չR ؼd$˻ ~hD #RY WHP|m`UOJgbLbÏŸp޿1-g徱8 y1^~D`3?p{-4ڼӿ/̽eC+cZU4׺HClc?&{\ /6X~1޺64Ⱦѻ"l罫S?ս4nU rc^ѹAwOy6ڹ 3{ʹ&YAĖeι,UFwŏŨ6ż̻ټZ(i U((5J`Uy¶ƘƸgíE>ĀǾıPȣ:`LŀɬŚůʁkbid} И%(Ѳ8>G\@wƑOƳV 5RmǬB״1%Ȃ؃1VɄٻU|(6ˡې̜4 ܉͑6Ώ݌ϧ;5ޒЮ;HߗTZV&dVsRaֻ2LץZsuF ٭:aڿ`jSeܻWhݲg_޸`a߿r !uxC#b^v\dfUr!^% f5 r]f}vFr!d !}K"A"#_$$i$$%!%<%G%C%1E%$1$$$C$ R# # d#N #"""D"w"i"gy"r""("L#6\# U#!$t!$"%#(&*#&$*'$(v$)R%*<%,+.%C,'%G-*%A.0%,/% 0#$12$2B${3O$>4[$ 5_#6a#7Z#J8M#9"9":";"y&">"?"?u#?#n@#@U$E@$@%J@%@&@'>@(@(@)@g*@?+@,?-?.d?s/q?=0?1f>2v>3>w4>M5m>&6l>7f=8X=9=9=:=;=<6=<>=>;>>l>>?>?l?-??~@ ?@H@"@y@@@@AS@A@B1@B@C@C@wC@UDW@+D?E/?E?E?cFS?+F>F>G<>G{>jG>?G>"H>H=H1=H<=H?=H6=H&=H =G>G>=G>eG^>G>F?$F?gF:?E@E@wE/@DA6D~ADBCBsCUBBCWBCB1D+ADAyEA/E\@E@F@=Fy?F?G ?uGQ?=G? G>G>H >H&>nH3>SH<>;H?>&H6>H&>H =G=G=G=G^=G=F=F=FH=E=E=EL=D=D=D8=C=hCr=MC=+B=B\9h>9>8>89>h7>M7V>86>$6l>5>5=5=4=4=3=3@=2=2[=1=1=1=0=0I=/=/=/<=q.=V.=6.>=-<-<-]<-6   D H  W c]2I~K`IZRV#22@'dqk+<0 ;  GS T`  y h$  x 391}>:7!v.14 )t,xm#kGBboto `E!#`<>WS:r AC1J31!e/1*,{gYrPNPmWbr>[mtrfP3( 8CLiN!NG:3*v#YJ:v?({Q,6i1n ?k\S^NPUH^k}J߽w6 ސ!c1=<GNNLEݽ8ݶ(ݶݸݿ{G -EDZqWޅޗޫL޽/eF1y ޻ަ/ސwߤaaF"+޸އ\ݶ6ݙ~cM4ݽ ݶݶݸݽ)=Sh|8ޒVަu޶ݕݻ 8hޙ2_ߔ4j޸ޢތw8\cA&Cݻlݞ݀eO6 = \y4Oi)?_:݀Zݤ~F"nNޠ~2eEߛ}4-ji$2YcY8aS5/mOlI $R?Zp*^!:R^<fLu 0   n ]O #-   h 3O"m,wFf%Om 1H}E@tL~={IW 5f0yhb7N8 &   a 9     q Mt #b P > * o ;  d ' v ` xG 7/ }EuGZ9Pl=k 3j+m>f{@W5dx,{dIP >*;I}bk<YE5! }m]PEr9Y0A'*! zZ9sKiP3z=d=Bj kBN5!d>k!25NfxI#Pb}<5fob>TdG<5,# {bmKP05dEbG.oR<(  ,@Yx,B]t5[!>BYrv@BB@<5,# zbE%vhWG9x,[B**9K`t'BBB@<5,# tbP>*}k[N>0#}xvx} 2,b>P`vT7%'zEb''x 'OBVoDu oBtdb%P;,VBo,x>zvvzvM)Iz'kD27)zx hRYD.=hxR *v G~YZ'+`O.KtG7ob,I,v;}Y2 ,>Pbtv fVB.x R.T%i> *>}TKob%5T}}Y^@%RRYT.b(:L^Dmf %=Vm  += Rfz .Ox4%h7Nf =u"9Zi35`r#dGp!b!,bCYm}R.Y9_2K_%v3@N^m 0B1VLhi| ,+NMmx+_1I`2tc?zG{/Y{1I[m!,%:7EIU]gmy7Rr,7BNW].dLikmooomkf,bE[[RmKB9.# }void][WTRPPNNNNPPRTTWWYYYYYWW RP.K@GTBd<x5.%!.9ENWo``dNi>m,oo omkfb[TNE<0'{tmfb]YWTRPxPkNYNGN5NPPRTTWWiYLY,Y YYYWTgRLN*I E@90*v!Y@ *yko[]JP:>*, kS8z_B$~cH0oZKx9i)YI 5!rR7xm_RD4y'W<pU5,#l]K;+vk_T~Gq;d.X#K= ."|zhqVhB_.YRKD@;952q2[0D0.02257;>@DxIfKRP@T0V [_bfhkoqttvvxvxmxdxYvPvGv>t5t,q%omk khfdb_]][YYYYYYzYqYf[Y]M_Bb7d)h kotx}zqkbYRKG@>975200022579;@BGIMRT Y ]_bfhkoq t%t'v,v0x5x9x@xDvKvPvVt]tdqkoqoxmkhfdb__][[YYYYYYY[[]'_.b5f;h@kDoItMxR}TY[[]]___]][YYVTRPMMKIIGGGGGGIKMPRV[bfms |  %',05'97>IBVIhMzTY_hmt} 2Iax0F[o%,29>DIMP TVY[]]___]]][YVTTRPMK K"I'I.G7GBGRGfG|GIKMP.R_V[_ fKmszjE3b!,^;M_m%Nm  7KazxbE#y.GDVj|{Em<^8 zohcaachou~ "'.7BM_u~ sIh|]TM%HhFFK4QZf u^A&3bY,`,Y!Ik<g1I^mk{P1 }vibY1E,k5P!g3JW8e*~F|q~hQc'aacfl~sh|TF9.'" "%')+.0|0q0f0].T.M)H'F"FKQXfu*Py|o_TFG9v."#Nr:Pbr{ }ti'Y2E=.KVao~W&W&%=tTAlc+ "j9=Mas|fRD7+% '?Z x "%')G+..0C000.r+'!"}7 U`i Tzj ] NR D 7 + "  . @ I P R P G 9 % T #E".7DWO]hub(Y3 )BXq{vvx%7K_s  2Kh}gN1,YgP>:k3C<LY8W `{BiYL A @8 v1 , * * , #/ 73 D: MA RJ RU K^ Bk 3t   q K z@Rf,b<xvvvp{ib^YWUUUW\`gpy}iN13J`ymG8N{dW{,kG* *7CLUy[g`WdJiAk8m1m,m*m*k,i/d3b:^AYJUSP\NgLrL}LNRY`kt%5GWgtvpibp^YY@W*U UUWY^meLk*trW<&#:Pd}!:Pd{ &1> IW(b3k>tG}PW^bgikmm{mrkdiYgId<`*[WUPNLLLpNYR>Y#bitn\E/1CR`p}~xqh]TF;-}mU<! mxLf.Q B0 v[E,~sfZOF=4.'   &3>LWbkt}}ti[P@/ |dsNj3aVMD90) kUA,|sjaXM?2' saO=. ~szhs]jRdI]@T7M0D)="4.'   ~umd[ RBFj@4+%.h c9VP&Pv{W1b&j"DaM zRsjd]ThMKF,=7.) v_G,vT0;ahI) TKqb]VMD+@q>>B*IgRbv*Sy P}.oD{Y8j Ov:)m9Vf D0Mhuz2|DdB~'q aQB0%;QjoXB' 4K]oq~T2mM.sfZK=v0f"[PGB>>@DKYh}"0?M'_Vs7zD(<UnmF[,:FG|S[dk r=vZ{q}zo_O=0!5I`v (E`}0F]x7Pk $9Mas~%7GWfvxjZO? 2'1EWm# @Yv'6DTf z%B[r&>W n ' > P b t   * 8 E N Y b i p t y }                               1 E [ r       ! < U p       ( C [ r         ( : I W f v   } o _ P @ 3 ! ,<Rf}r`P>..Gf*E`z{rkd] W 'R 9K NG b@ t< 7 0 , ' !                  v f W G 7 (          r ] G 1       v U 5      i E !     { [ > !       v b P > / !    q d T E 5 %  yneYPC8,z!iWG7'o]H4  {rkd]lWZRFN4G"B<73,'# |qfZOF=2)" }rbTE5%|qtf`[LR5D!9+ ^C!vYq5dTI9'mR5zfOt;`)N>/!xoha][VVVV{VrXi[`_UaJf>j3o(sx |~lX|Fv4o h _TK>2%q]K9'vfVG9,xlaVMB92) .KoV[7~ sXj_T0Fs=0%.] )BVclljzaoT_?R)B4"zKs7xfR=D)a+h@zqjd_[xXoVjVhVhVmXsX|]_dfjqvx| |voh_VKBz5_'D' qV9o_PB2'vh YMD;7557;BIT0bIqkR%@K_f=;[zTB'u@Tj-FZfllh_Q?' |M| B%X.9BOs_=q|V0 4Tuvm.jVhzjos Hs;a 3Ur /AS`jpP}7mM01E[vmdYMD;75%5@7`;}@IR]m }(C^x5Pm .>L W)dDof{)BXj!,7BP[it  '2*=3F1 L g }   _ B % .>IWdr{zvrmi`YPE7* %3<ITobRm9xrN*{ Y7!*3<ENTi[Pb7k!r v{}{yvtr,rEpfpmmk i 0g _d ` ^ Y 0R bN E > 5 B. z%    M     ) I j  } p ` R E 8 ,        h K .     h ;  { t p Pk %g b ^ [ oW BU S P N N L fJ IJ ,G ECA<51*! }xtokd]TKrBe5W'J< 3( oT5vT1 (5ESbdt@t[ C.&1:AGJLNLJC<5*}{vttrrppymemNk8i!gdb^YUPI@|:o3c(XOF ?;6422249=ByHmO^VP_Eh8o*x~}vp~msgfbX`K[;Y+WSSPNLLJJGzEjCX>H:;5+/( tgYLA5*!  +4?HQZclu| ,:GWgyz sj&c/Z8TAKEBJ;L2N)L"JE> 5/!r\E/ %+2|9o?aHXOMVF_?f;j6q4u2z2~249=BHMT]cls||xslhaZVOF?92.'  |qcVH;+~ o ]M?0""% ).279=?DFHKMMMMMMMKHFDB =+;47?2H.Q)Z%f lu| |uohaXQH?70'  ~xqha]VRMKFFFFIKOV]foz '07=DMTZ+aBhXlosx|$0;DKO~T|VxXsVlThQaM]FV?O9H0B';40)" ~zxuuuxz| "%).279=?DF'H0K;KDMMMTMZMaMhMlKqKuHxFzBz?|=z9z4x0x+s'q"ojfa] ZVQMHDB=;9664466;=BFKQX_hqz|slf_Z TO&M1I>FLFWFbFnIyMOV_fq|'=Tj|+4=FMQ VVXV#T*Q3K:FC?J6S-[$dmy~zx uuuux!|&((*,,,,,,,,,******)*2*;*D,M,V/Z1a3h5l8qxCzGzL|RzWz^zbxiupsvo}lhc_ZXTOKFD?=;9644469;=BFKQXahqz!/<ES^ir} !%(,.35:<>CEGILNPRUUWWWY Y[[^!`(b/d5i>kEpNtW{`ir} #(.15!7#:&<(<*<,:,7,5,1,,,(,!,,,*********,,/{1p3g5`:[<W@WC[IbNkRyW^dipv}%LrCo%R{ .Kf}iP3T%i5k< `:  {dP#C%3*&,13 7:<@CEGILNPRUUWWWYY[}[k^W`Cb,dgkmty}tW8jM2|j#Z*K.=325): <<<< ::51,(!    %'+.2479;v;k;d;^;Y9W7Y4^2d.p){%  *NtEmIt'B]v ";XxvbI ,M 1trN<b.LkY@ :md>1I`omxYE8{*rfU @( b:gC}[}8mYC,rbUyJ\>A5#1*(###s#Z#=#"# #!ufVH;0'gN3  cD $ q"T';+". 24799;;;;|9s9l7f4c0_+]']"]]__ afhjoqsuxzz||||zxusojfaZTMF@70)"0Kj 0c E"+J9DTaYs^>p+D]u*E[mv}0}FvZkq[G5t P(*8GUb[n3{yU3 r!d,W5JAAL8U1`,k(v&#######! !3 I^tv^G,,>P`m{|aB qV;%~u{ovjpckag_b]^][]Y]W_WaWcWfWhYl^o`qdskupxvz}z||||zxusojfaZVMF @92)!%#(*, ,,,,*%# '0;IVfu 5P+mD]q3]5)o?Vh!|]7k !# G1 d> N \ g r  } _ >  W!,5oA,LU^]it}P EW#/@UkvP/!3EUybmpd}YNA5(pS3c;}yrsmKi d`[YW]W7WWWY[^obTg;k%rv} #(*,,,,,*(%! | x!v7sRskqqssv*z[,]B!W 0BR _ 3o T~ q  x [ 7" +7@I]T#_jut0m(] Y"0;rHcccccfhvjblRq@u3x&~  $-6=FtM`TJZ8ahlsx|{\<fF)sZH2 q_M;. !&*/38:<ACCEGGGJJ"J+G4G=GDEKEREXC]CaAfAf>h>h>hO>IA@A7C.E%JLPSW^bgnry +=O_q%09B H O V Z _ a a c c c c c c cccffhjo!q#u(z*~,158<>CEGLNPSUWYY[^^"^+^2^;^B^K^Q^X^_[f[jYqWuWzU~SPNLJJGECA><<:8888::>AEJPW`gp{ *3<EI#P(U,W1W3W8R<P>IACC:E/E#GGGJJJGGGEvEbENC8C#AA>>><<<<<y>k>^>SAEC<E1G&JNS UY^eint{      z q j a Z Q K D ? 94-)$ !#&*,138:>AEGJLPSUWWY[ [ ^ ^ ^ ^ ^ ^ ^^^[[YYWU USPNLJJGECA><<:88888:<ACGNU[dkv2V| :!t,5>*EpLPUCWWWRYPIC%:g1&Er}*i.U.>(,!oWr@g(\NE:/#{pd[UNIGEEEGILPRWY[[[[WRI@3! k< ^U p!4Ts+hz+sja]hT=MFB;40+x'f"V F9,  zm[K9 %  zdM5  qdVMD;50.,,.05;BKVbmz';M_4sVx/g'7`K_s,tCI7Mh(W0Rs#,..(+RsBlrY@(Ds4f}rgE^rWPLIG:E^EGILNPUW3YE[W[g[rY}UPG>.i:,Iib!Y5i1NO BlBK.Md T >+ _ } q a R D 7 )  z d G * zW0o_`P@>#,m{YxBv,v{}obTKB;50.,,.05;BKT_kxmW@(2G[tk[@(.>{Rmfb|YPIEC@> >#@9CRGjLPU[bip0vO}m Fo2]2Z}tiF`uUI<1(#U{ >b3CUdr} #:Y{P} (]TK 0d  > [ z       y m d [ R L E @ m< R7 55 31...m.G1!11333v3W371.*%{vvvm{R8y^C* }ri`YUPLLJJL{LfNPN7PP PNLJE>o8Y1@(({p~dhYQR;L$G C@>>@CElIVN?R+Y`gkr{|qhaXOID=942.+)'%" tk`UI>3 % |qfXK=0" |vqmhda_ ][[XXX[[]__ad fhjmooqssvvxxxvvstskqboYmPjLhEf>d:_7[5X3T1O.M.I.D.B1=191734303.3.3+1).),)('!)) )+.0279=yBbFGM,RV]ahovp|U>& }ri`YSPLLJJLLNNPPPNNJGA<3,! xaK6   '+j0T4=9+=@@BBB@@=97~2u0j+a'Z"RKD@;7 20+)'%"   '07@IR[fqz~qf[M@2'  %')+..0000z.s.o.j+f+a+_+]+]+[.[0X2X7[;[B[K]R_Z_fasdfhjmooqss'v=vTvhx~xvvvsqqomj+f6d?aH]O[VVZR]O_KaFaD_@_;]9Z7X2V0Q.O+O+M)K)K)K'M)O)Q)V+Z.a0h2o4x9=BFKRV[ahos z*:JYgv          !&, 3:AGP%Y)`.k2t7};=@BBBB@=;972.+ '"!&*, 133555555311 /,*(&%#.!4=FOXamu~!#&*/38<CGNR W%^'d)i+p.t.y0000...++++++.024;@FMXalz.BXo+6?HOVZ]_aa__]ZXVTQOMMKKMMQTX]cjsz/<LYiv               !(,3:AGPW`ir}3Id%I k#(*%/@1Y3r555555331/,,*(&#{!bI, [3[1 !&*d,>15:>EI{PbUJ[1`g kpv{}tk`UJ>1!sZB)x_F0|qh_XRMKIIIIKORV]aflszzslf_XRMFD@;9744447 9 ; @DIOV]f o x)4BMXfoz5Li!Cd:Rk )4?KVaozrY>%xP( [.dC}b N 5!  &3EWk/Wy8rig^SG.:^* .RtoXB)|cK2b@rEulcYZ*TOMKpIJI!IKMOTrXW]>a(houz|uso]hFa0ZVOKDB=s9V7;4444479z;f@OD;I'OV]fox% 2?%H2V=aKlVucoz )2=HT_jx.?M_s'; Ocx &3>J S \env }#3CUk(Lv*[Et#1@>dJWdpy}^@yI^3}S(}{{{b{G{1}  !!s#]!H!2!z] ?' lXD0 %0=KXaoz    .=O_q$9 K _q!#&&((,(8(C(N(W&`&i#r#y!  !/:GS^kv{}y{y{{{{{}Ck(U7t!W >b!!#!!!rN. v@R^`#JgCxlcZTOHD=6-"  xZ=sM)  mF"sT4xfXK@4,#          !# &'&,&4(=(F(R(_(m&|&&#!!4Mf  4Mf~ %2;DMTZ_cfhhffc_ZXRMIB=72.)%"  "'.29BKT]hs}~{yy{Ci N"+4=*FdOXa jCsx|.WtiI#m5NWb,S$r+L4(= HQ]hs~qh_XQKFB;2)(3ALWbnyqV;qK)o I"&/5>|G[P=["dpyo_RD90' *8E R ^ k y    % .':,E4P;^FiRv]jz,.GS[dmy t&i3\>NL>Y/gr zfTB0(3>GR`kv~*:L^m}~xqjaXOF;2)}xtrp~pumlmfparZtTvOxI}D=94.)%xpbWI@3%}ytrpmkigggdddddddddd~dzdubq`m^h[dY_U[PVNRGMCIm .Pmx`E%|xsoj}f^a7]XTOKI^D<@=97420{.g+S)C)3'(''% %''')+.0249 ;@DFKRT[ _dhosx|r`N:&lZH6$  %+29@FMT+ZBaZjqqx~ (E`{ #8J[k{  %+07?FOXc{opzg[SG<1( "2DVcu (1<ENW^dkptvyyyyvtpkd^WNG>81*# *Cb  Er!&/*`/38:>NCvEGLNP7SWUtWWWYYYYYWWUUSPPNL{LbJGG,G EEEEEdECEEEGGJkJIL,L NPPSUUpW`YLY<[/^#^``bbbddggggi i ikkkmmpp r rtvy{}veUA,x fQ=&-,5 >ELRY^dipty}+=Vl!<Ur,ASbrypg[PG<1( }ytpkd` YRL#E/>88A/J(S!Ybimrtyy{yyvrmib[UNG>81*}#ytpmig d`^[YWUSS P NLJGEC!>&<(:,5135/:*<&A!CGJL PSSUWWYYYYYWWWUUS}PpPbNSLEL8J&GGEEEEEEEEE~GqGcGXJMLBL9N0N)P"SSUWY Y [ [^^` ` b bdddgggiiikkkmmmpprr tvy{}sh]OD9+  #*3:CIPW^bgkrty}|xsohc]VOID;4.' .BXs 7h =x,iY#Py (..,}#ytpkd`YyUPN&G@:3^*&# G a)a2sV@'{vtpmigb`^[YWUSSPNLJsGdERC=A)<:83/,(q#R2oM.jR>)yn^PA1!|ocXM'B29@2I)T"_jv   %0;IVfx~sfZ7OODj7+  .Kh0Kh2Kaz$9Mau |x5sJlbhyc]VOIB;,4G.b'} &<Pdv ';Ro"T$a   J5m/[!%*.5<C!L*U.`.i*t#yR&(d53ERbpS}s;o?cI0 ~qaO;) %,q3T<4EPYdmxvT4qXB0  )7@KVavmovid]YWUWY[bit*B]v3GY i,x4BO_mv f%W@GV0qt0TO:mrR01MhmW@.*F_u  2FZo}vrkbYPI>(3>%Si3rN[iC*(v>[RCd(v kUA/    zfQ=+#(z,j1X7H@9G)PY bky *:GUbp~}|zxxusoljfa]XRMF=7.%~sh_TKB92+%   % . 5 >GP[do x%)04;@FMRX_dhmquz~{tmfb]YWUWY]dkv,E[v0EWft}o `N9#"%)+02i4G7,9 ;==@@i@L@,B BBBB@@k@U@>@*@@@@@@@BBDDFIKMO}RyTrXkZd_^cUhIl@q5u(z}dN8mS: %+{4g?SK>X,fx +MzjfQ?+!Gp(~Jok]K;.&8GR[bggd`[RG:*~|pzSx5usqolh{fbaE](V RKD=7.%xhZMB92+'$" """u$m$a$V"M"D =4.'   '|+s0l7h=aB]IXMTTOXM_HdFjBo?s=x;z9~7420.+)'%   "0=KVfs  %)+.+294F7Q9_;h;u==@@@@BBBBB@@@@@ @@@#@*@1@:BABGBPDWD^FgInKtM{ORTXZ_chlquz,:GUbp} " ) 09DQ_ o  4Vx(Nv *Np #,&38:GCRI[Rb[gdgmgvb[UI</ {^A!pP5scVK?60+'$"  ""$$$$$"    !%(,.357:|j>c@_@Z@V>Q>M>KELU\bipv}!/>JWgtt e U C1   xfVF9-  $2BT h~&/5<E*NEU`^{gpy#1<GNSUUSLE:, iL/zZ;oZH7' !%*,.357:<<>>@@@>s>c>Tx8T/4(ypg^SJA8/& uaI2v[="|hXI=2,%# #).7BMXfsp`N> ,0BO_mxufVF9+ "0?Ocx!< Wp%7I[o *8AJ0PKShUSPJA5(+HceG2*K c|xX;(<PbvoZK9)(3>GS^it/CUi !~1o@]ROb=r+xfVI9+ %4Ia~@sO B~!**1e:CNW*`Ukvv  tP,  yG|F  zMzV4oXB)oR9zfVI=2,%#{ t m#g'`.Y7R@LKGV@f:q3,% +;K[fs}vpib^WPLE@<51,(#  '7I[o.Icy~ri`WL C':B1]&x +D]q{1rEiWbi[}SLC<5,&*5AJU`kv{t,i@`WUiG}:*  .>Nl`Vm?{)|o_VH?7.'" %'+0279;?BBBB B?=!9*41.<'ENW bkvxfTD2  |qha[TOK K IIIKMOTV]afmqx~xqjaXOF=4+"  xpk%d+^2W9P@LFEK>R7X1]*a#fjm qsuxzzzzzzzzxuusqq}ovmpjijbh^hWfPfLfEf@fENW`ir}0Kc)Mo(3>GP&WJ`ngmrv{}!:Ndv}{vtpmid`^Y}UrRgNYLNIAG5E(C@@@@@CCEGILNRUY[`bgkmptvx{}}{{vtpmib^YRyNbGL@1<5.%j M-u_K;+  "+4;DKTX_chloooljfa]TKB7+ }vpibYRLE~1& #/:EN\}iyttrpkige`^YU(P:JNCd:{3**<PdyzjZK;+!#%((((%%#!~!zxusol!j#h%c*a.]5X:T@OIKPDY?b9m2y+" *5>G|PqYh`]gTmIrBv9{0}'  }{vtrmidb^YWRNLIGECC@@@@@CEEGLNPUWY^bdikp|rutqvm{h}a}]XROID@=}9{4x2v.t+p'k'g%b"^ WRNG@:3,(!  ""%'')+.024479;;==@BBBDDDFFFFFIIIIIIIKKKMMORRTVX[]adfjoq}utzp~g`YRIC<5,%   %'+.24y9p;i@`DWFNKEMJS`kv|sh_TKB90'   !#(,18<CJPW^gm~tz{uqjfa]VRMID@;940.+)%%"   "%'')+.*080E2U4d7v99;==@@B BD1DEDUFgFvFFFIIIIIIIKKKMMOORTTVX[]adyhijYoIq:u(z~vi[PE<3,&!  " ' ) .047;=BDIMOTVZ_afjosxv|mbWLC8/&  "%).249=?DHMOTX]afjquz )09?FOV]cjsz~ # (,/(335<:G<U>^AkCvEGGJJJLLLLLJJJJG GGGGJJLNPSUW[^bgkprv{!&*/3:>ELSY`gmv}ytmg`YSLE>81*# (3@P`m(:L^p}}ytnie^YUPvLiGWEGA5>%:8531/,,***t(i(^(P(G(>*5*,*(*!*,,,,,,,,,,**((&# ! ! !#(,5CSe{:d!}Uri^SJRA5,#Ep.CR`fifbYL:% g: yC i:d1{W1 o]OB6-'  "'+06;BHMQX]_cfhhhfc_ZTKB6+qXB)#(,/35j:M<2>ACEGGJzJaJIL0LLLLLJJJJjGXGIG7G%JJLLNPUWY^`dimptvyo}ha[RKB;4,% }yrkd`YSLE >81'*2#@KXf v"2BR_o| "+7@IVdq7Mf~} v%r;nQghb~^YUPLGCA<":08=5K3V1c/o,z,***(((((*****,,,*,5,C,S,b,r,,**((&##!(!<!P!d&y,3>N`t#5E*UUg{y 8k7m!.<*GWR}^gpv5IWbiif`UG5!^3t> k8i5!(.5Y<1CIPW`gmsta{QD90'" "')049?DKOVZ_acfhhfca]VOF=2' lT;"fM0zaI0o[I7'{vpkg`[xUqPjIdE]>T:M3F.=(7#0)    ,7BO]hx{tmg^WNE<3("2B R_o{gP<& ")2=tI`TNa>o/~#.D ]s&1>LYiv0F_s '4BOZhq|{bJ/^>*8EUercH0(:3.*# '09BKRZcjqz}vpkb[RLC7 .%"'+07=BHOVt]`cLj5qu|p^L</# &3>JYg t  $+29?HQ]hsk!U1:>LYgtnL, uX="lZH9) :Wy>p:3/*&#!1AN\!i&t*/5<ELU^gr{ 5Sp3 d,b3byImrbYNG> 5/.(<!BGGE@ 7 *   `!>&*18<tCIIPW^drkIp!v{kN/}vyptimdg``[YWPSIN@J8C/>(5/& r\G1}yqvXtBr)pmkkiggddob]`O`B^4[)Y YWUPNLJEC><83/*&!  "%')))))'%" {ytpkgb^\WSNLGC><83/,(#!"0?O_ o~"2DVhx|#o/a8Q>?G2N U \`gkprv{u}aQ?0 !3EWi"}2DVhz#1<GP$Y0b9iBmKrQvVyXyX{XyTyOvHrBp6k+gb[WPLE@:5s/]*D&.#!#*/3:CIR[dmy'?Vo $;O_q ~~ o]H2a=tka`;WNC<3,q&T!9       &*15<CIPW^dipt{}{tpvijb][ORDL9C+< 3* !}{)y4tBrRp_pomkiiggdbb``^[)Y4W@UISRP[NdLmGsEzC>:83/*&!   +9IXhz}yt+pBkXgoe`\WUPLGC)A;CGLSW^gpyxjZK= +*:JWgvo]M;+ #(*/35:>@EI"N2RDWV^fdzkr{"-9BKOTXXX(V1Q:KCBL9R-[ bgmrv{zaM4}}{yyvvtttttv2vKyay|{}+BVhuzjXD-|Z9Z9qT;  zod{VyIv=r2p%kid`[WRNIC>:51*%!  .;FVds+7BKT]fmu|yrkb[RLC:3*!+9FVcu}vrmid`[W'P=LQGhC~>:51*&"4FXhx}pbUE8 * #*/38<AEJNU\bir~}zusqolljjjjhh,h@EINRW^dkrz{qhaXQMF?940+)%" %.7@IPY`gkrv { }     }{{yvvvttttt~vsvjya{X}OF@90)%   ").49@FKRV]ahlqux|~~|zxuqojhfa_ZXVTROOMMMMMMOORTVZ]afjosx~}{vtpmid`^YUPLE@<73,(#   }%v)p.i2b7Y=RBIF@K:O1T(Z_c hlosx|~}vrmid`[WSNJE>:51,&! "$'+-04t6g9W;J=XLTYQbKmFvB;60' vpg^SJ>3(zqhaXQKD?940+)%" }{yvvyy{} yribYSxJlAc:Z1T*K#B;4+ '     %&+,037<;CBJISMYT`Zi_pcvj}oquz|~~|zxsqljhca]ZXVTROMMMMMMMOORTXZ]afjosx |!(/5<CGNUY`dimrty{}  "'+049?DHMQVZ _ chlquz|   "$)+-0469;=?BDFHKMMOTVX]_fjqx /CYn*:GU`kt}{t}k}b{YyNyEv:r,p!mi gb^YUPLEA:51*&{ yyvvyy{}vpi`YPJA:1*# } ytrn#k,i3e:bA`J^P\WY`WgWnUtU{SSPPPPNNNNNNNLLLLJJJGGEECA><:8531,*(#!  #*18>ELPW[`gimrvy{}~|xuqojhca_ZXVTQOMKKKMOQX_fq|#:Ney  #/<GPY^bd gdb[UNC8* kU<& s_M;+ |uohaXMD9." xj_RF=2)  }}{y v trpmi"g'b+^0Y4U7P;L=E@AB<:853/,*&#!  !(,3:AGLSY`gmt{|zuqojhfa_]XVTQOMKKKKMQV]clx1E\r *8CLU[bdgdb`YP G>3&&/8CNWbmyyeL5oZF#4,$3:>CEIILLIGE@<71*#|uoh_VMtBi7`+W LE<3,(! uj]RF=2)   {tkbY"P'G+>.52,7#9=@ BDFIIKKMMMMMMMMMMMOOORRTVXZ_afjouz{ytpn ie"`.\9WDPOLZEf>q8|3*# $+29?FMTZ_flqx| !,8CLW`kt}~~|||~~ *Ce!&,38*>WELSY `>gmkry(R{!:PdtxkYE.rI!vGb5 pL* qaTH?62+' $ !*3<EP[gr}s_H2 %c,I3.:>CGILLzLaIKG7C"@<5.(!}ri`ULC<5,&! }vmd[SJ'A28@/O&]mz 0DXj~"2DTaq~ }$y+v2r9p?kFgMbT^]YfUqN|JC<5/& !5J^p*8GUbm{ !*5>IR[~b~k|r|y|}~~ &C{bytpkg#bP`}[YW U:RgPNNLLILrNNPPRW5YL[``pd}gkpty}{m^L5}W,U&rE,E`}}Y8*PxuhX>MdD;4-)$3"Pk ~jV?m)R5u]Z5@" d7 q[Fg0G! dL5#}ti[PC3#gL1qT9~hQ;''|2x@sMo]ljj|hffca_]X VO0ID@V7j+|  0BoO]_Ko;|+ $+26=DKQZco z.=K]m|/CWk}%09BKRV#]3cChPj^oiqtsuxxzzzz|||||||~~~%7HZo )4;BHM#O/Q:QCQLOUM^HgDm?t9{2+$ {vrmkgb`[-Y=UORcPxPNNLLLNN*PARWUnWY^`dgkpt y}#,3:>ACCA>:5/(!.E`}{tng(bL\rYUSSS:SbSUY\`e3kPpiv}oW:i@pC{rkbtYNS*JC:3,&m!U>(     v!m&b*U/J3::*>CGJNSUY\p^Wb<e!ikrv}~aD's]F*2:L ^p ~z#u,q5o>lEjIhLfNcPcNaL_IZEX>T8M1F(=4)}m|`jSXCF57*% "0@O_o~kW>& '0;BlKOR2X]chloqsluXxFz4z'zz||||||||~~~ "+4=HQZahqx|"4FZl~~xqjaXOF;).2";B FMOQQQOMKF?;4-$ "0 ;H)T9_Kh_ss| !:Pg{*18<AACA><81*#  )4=HyTp_ijex^YWUSSSSUWY^bgnt{ypg`WNGA81,&#*3:AJ P W^ekry  #(,15:>CGLNSWY\`beinrv} *<N^p #/8>EINNPNLIE>81(}m`SC8* nY}Ay*tpkg`\WqSTL6GCA<:853o1Z1H191)358:>CGLPU\`ekpv{ )2;DMV_houz}v~rzksgl`fY]SQLHE=>28'1*#   )7BMXcox~zslhc_ZVTQOOMMMOOQTVX]_cfjoquz|"-6BMXcoz~|xsohc_XQMFB=62+'"    "&",$3$:'C'J'P'Y'`'g'n't${$"    """""""""""  "$')+-046;?BFKOTVZ_cfjoquxz|~}yvrkgb^W~S~N~J|E|A|<|:|8|5~31111358:>AEJNUY^ei&p3tAyN\ivytnib\UNGA:{3p,e&YLA5, !      |uqjfa]XVTQOOMMOOQTVXZ]achlosxz~~zuqlfa]VQKF?;40)$      "$$'!'#'&'*','/'3'5'8$:$<"> ACGJLNPS U UWY\^`begikknprtvvy{}  """"""""""  "$')+-246;?DFKOTVZ_cfjoquxz|~~~~||||||~#3AN\iv{peYNC8/#         }yvrnieb^YWSPNJGECA><<::88555533333333311111//,,**(&#!  #&(,/135:<>ACEGJLNPSUWY\^`beegiknprrtvy{}}|zxuqoljhffcaa___]]]]]]___aacccffhhjjllooooqqqqqqqoooolljjhhffccaaaaachlqx 3G\p*8EPYdkrv{{{yvrmg^UJ>1#{iWJ8( |u o h _VMD;0'   |zxuussuuxxz~}ytpkie`^YUSPLJGECA><<:88855553 333"3+343;3D3M1V1_1h1q/|//,,*((&#! #(,15:>CGLNSW\`einry #(*,1135558888888::<>AEG|LzPxWs[qboilrjyhfccaa___]]]]]_ ___(a/a8c>cCfIfNhRhUhWjWjYlYlYoWoUoRoPqLqGqCqCGLNSW\`e!i!n#t&y((***,,,**((&#!  !#(*/1135558888888::<>AEGLPW[bkr{(18>EINRUWYYYYWURP~LzGx@uTCQEOGMJMLKNKPHSHUHWHYH\H^H^H`KbKbMeMeOeOgQgQgTgVgVgXgZgZg]g]e_eaeaeabcbcbcbf`f`f`f`f`f^f^c^c^c^c^a^a^_`_`]`]`]bZbZeXeXgVgViTiTkQnQnQpQrOrOtOvOvOyOyO{O}O}OQQQTTVVVXZZ]]__aaccffhhjjjlllloo}o}o}o}o}o}o}o}o}l}l}l}l}l}ljjjjjjhhhhhhhhhhhhhhhjjjjjjhhhhfffccaaa__]]ZZZXXXXXVVVVXXXXXZZ]]__aaccfhhj j!l:oUopqqssuu:x`xxzzz#zIzm||||||.|I|b|x|zzzzzzzz|||~}gP7kI(gE(mWA/ {n`PC3!lV=$ |cM4|lZM=0%  !##&&&((((((((&&&####!!!!!!)!@!X!s###&((=*f,/13 568c:<>A C8E^JLNPSU#W>YU\i\{^``beeegggg{gkg^gJg5gggeeeebgbLb/`````^^^o^]^K^;^-^ ````bbeeggii kknp p$r)t+t-v0y2y2{4}6}666442-)$  xl_TF;2)} }}}}}}}}}"}+}7}B}Qas 9Qj!1>LU^gkprttrpkg`YPG>3( #<#U3rCSbr>b#Ip1Lb!{###!! xdN5 (1g<EJ#Udr`@!#g/S:>E*NW^dkprvvyyvtyrkp^kNg>b/^W RNGC>:5~1f,O*6( &###&(*u/]3D8.>ELU^gr{xfXI;." %.7@GNU[`dikmprrrrrpmkigd`^YWR NL2GIEa@|>:753%1M.u,,,, ,K.x135:<G@kEINRW[/^Jb^grikmprrppkgbYtPdGS<>.*!tW<!r`N<*xcQB2'   "')--02446666420+'"vmbYNC5*|qcXK?7+"rg\PG> 5),2#?M]l ~2Kcz ,:GS\ekprttrpngb\~SxJlAc5Z*O!D; 0$zqh]TK?2'!1CS`p~slcZTMFB=94!2#0#.#.!.!...0024 779;=@BBDDD FDD&D1B<@J=W;d9r40+'" #/:ENW^dkptvvyyvtrpkgb^WRNGC<831,*(&##&&(*/3:>GNW`it}~(x1q:mCfI_PXWT[MbIgBi=k9p4p2r.r+r)r'p'p%m%k'i'g)b+`.[2Y7U;P@NDIKGOCV@[CGLPUW[`dgkmpprrpmid^WL@5( {iWC3!%0=KXfs  )2;BHMTVZ]______]ZXVTOMKHDBy?p=g=[;P;G9:9/;!;=?BFKOTZahouv~k^UJA8/&  $-6?HQZcjs|xo cZQF;2#'&*,/158::<>ACCEEGGGzJqJhJ_JTJKJ?J4L'LLLLNPSUW\^bgn~ruyjaZTMFB=9420...... 00247!9!9#;#=!@!BBDDDF DDDB@=;740+'   #(,135:<<>AAAAA>>><:8531/,*(&##!|uohd!]#V&R*K,F1@5;<7A2G0N+U)['b'k%r%y%')).047=BFMRX_fmsz".;FTcq~'09?FMQVZ]______]ZXyVrTkQdM^KYHSDNBJ?E=A=<;8;3919/;*;(=&?#B!FKOTZahou~ '0 9 B KQZclu| !#(*,/358:<>>ACCEEGGGJJJJJJJLLLLNNPSUW\}`{eyivptvp}nkige`^\YUSPNLJGC A><:53!1!,#(#&!!  |xqlhc_ZVQOKHFDB???=== ==??!?&B*B/D3F5F8H:HKAMAMAOAOAOAO>O>Oq:q5o3o/o,q*q(q#q!s!uuxz|~      "$')-0269;?BDHKMQTVXZ_acffhjlooqqsssuu}u{xyxvxtxrxnxkzizgzez`z^z\|Y|U~S~PNLJGCA><:53/,(&!&5GYi { #/:CJPW[^^`^[|YuWqSlLfEa>]8X/T&QMKHFDB??======??vBpBiDbD\FWFSHNKLKJMGMEMEOEOEOEOGOJOLONMPMSKSHUHWFWDWBW?W;W9U4U2S-P+L'J$E A<83,( ! ~|zxsqooljhhffcccccccccfffhhjj&l1o:oEqNqYseupu}xxzzz|||||~ ~~!|,|8|C|J|Uz^zdzmxtx{xuusssqqqqoooqqqssuux}z{|v~tpmkiiggggiikmprvy}     {"v$r'm)k+g-d2b4`6^;[=Y?WDWFWKWMWOWQYVYX[Z^]`_badcgfihkjplrlvoyq{qsssuuuxxxxxxzzzzzz|||~{ytrmkgdb^[YU#S5PEPWNiL{LJJGGGGJJ JL&L1N:PCSLSSUWW[Y^[^^``^b[dYgUiPkLmEm>p5r/r&ttvvvvvvvvvvttrr}ptmnmgk`i\gUgPdNbJ`G^G[EYEWEWEUGSGPJNLNNLPLSJUJUJWJWJWJWJWJWJULSLPLNNLNGPCP>S:S5U1U*W#WWYY YYYYYYWWUUSPNLJGEC><:53/,(&! }ytpkie`&\1W:SEPNLYJgErA}>:53/*&!  #/8CLW^gmt{}yvrpmkigggggiikmrty{~|zxusqojhca]ZVQOKFB?;62-+'$   }ytpkidb`^[YYWWWWWYY[[^`bgikprty{}{ytrmkgd`^[YUSPNNLJJJGGGGJJJLLNPSUUWY[^`bdgikmpprtttvvvvvvvvvtttrppmkkigdb``^[YWUSSPNNLLJJJJJJJJLLLNNPPSSUUWWWYYYY Y Y Y Y W W U USPNLJGECA<:531,*&#  "$')+-02469;=BDFHKMOQTVXZ]_acffhjlloqqssuuxxzz||~~{ytpkgb^\WSNLGCA<851,*&!  #(,15:>CGJNSUW\^`begg~i|izkxkuksnqnonlnhnfnan_nZkVkTkOkKkFkDk?k;k6k4k0k+n'n$n pprttvy { }                    ""$')&+*-1052<4A6E;L=P?UBYD^FbHdKiMkQmTpVpXrZr]r_r_papcmfkhghdj`l^oYoUqNqJsCu>u8x3x,z&z||~ ~{vrnie `\WSN#J(E,A1<5::5>1C/G*L(N&S!UY\^`beggiik k k n n n nnnnkkkkkkkkkkkknnnpprrtvvy{} 1G`{:^Cg%>Wkt`L3dC!pN1      k U A /    uhXK;) o_O&B*41'5<A ELPUY^bdikm prr"r+r4r=pHpQm]kfgodx`[WSNGC<81*#zocXK=.|qf]RKB=94200247;BIOV_fox{vrpkgb^WSNJGC>: 5'3+/0*7(;&=!BFHMOQTVZ]_a c f h j l osux|~ )9HVfu !(,138:<<>>>><<<<:::::::<>ACGJPU\`gpv &1<EP[gpy 1G`y<`Ci (C Ym!&,18<@ELPRWm[[`Eb,gikmpr{tYt5vvvvvtdtCt!rrpmmkyi`gLd8d&b`^^[YYWWWUUUUUUUUUWWWYY[[^x^l`]`Mb=b+dddgggggggqgagQdBd4d)b`` ^[YWURPLIGE @><"8+543?/H,Q*]&f#o!z   xlaTF9) xlaXOF@;7220227;@DKR}Zyarjmsi|d^YUPJEA<81,(#  %+049=BDHKOQTV}XrZe_WaJcM>D>;>2<)< <:::::::<<>AEJNSW^ekt}~|zxuussqqqqoo!l,l8jChNfYcdam]yZVQMHB=92.'"  #(,38<CGLPUY ^`)d=gQkhmprrttv=vavvvtt#tLrtppmki,iNgpdb``^[[YY&W,W/U/U,U&UUUUUUWWWYbYC[([^^``rbLb(dddggxgTg2ggggggdsd_bM`;`+^[YWURPLIGE@><851/,*&#!sfZK9)  s]I2zm_TI@70)% "%).29@DKRX}_yftmpsizd`[UPLGA<83,(# }peWJ</#  +9DTaq.DZq2Mf~0BTfuzuof_XOF=4+" #/8CN\iv|zx*x:uLs[sms}qqqoolljhfca]XV#Q(M,F/B1=37528+8'8 8885 55333333558:>@ELPW^gmv !,5>GPY"`7gKkarzvy{}4X~}}yvtApimid`[&UJPiLGE@<:531&.,./,/,,,&,,.1357<>CbGCL#PW[`dpkJp#ty}oM+ oZF7'{vrmgb^YRNGC>73.z*o(_#O@0    zdO9%|oaVKB90+%  %).29@DKRX_fmszyrkd`YRNGC>:3/*&! %2@M]jzvpi'b;YRSjLC<5,&. F_x+?QctsiYJ:* zof ]TM&D/=:9E2P-^)k$y   /ASbt z&q*f,Z1O3D595.8"88 88555533333358:<@EIPU^dmv !*5>IPY`gm~r|vxys}o}jfa]X}R{MyFvBr=p7k2g.b'^"YUPLG C><7531.,,,,,..137:>@EINUY^bimrv{       }vrmib^YRNGC> :"3%.'*)%+#.0247;=@ D F IMOTVZ]acfjlqsxz|{tmg`[UPIE>:51*&!   "%).047;=BDHKOQTXZ]achjlqs}uvxp|g~`YPJA:1*! }p`PA1!~s h_V O)F2?;9F4Q-])j$x   3G\n&3ALW`gzmorcvXvMyBv7t+r mg ^ULA8*yne\SLEA<85558:<AEJPW^ekry|xuqlhc]XTMIB=92.'" }{yvtrrppppnppppprrtttv v y y { { { {}}}}}}}}}}}}{{yyyv t"t%r'r'p)p.n0n2n4n7k9k=k@kBkFnInMpOpTrVtXv]y_{c}fjlqsxz| !!!!##&&(*,/13 5:<>CG J%N'S+U0Y2^7b9g=i?mDrFtKyM{QTXZ]acfjlosux|~$-6BKXcq~,AUi}#3ALW`gmrtvyvtrmg^ULA5*vkbYPJC>:85558:>CGL}SyYt`pgindv^}YSLE>81*& }{yvtrrpppnnppppprrttvvvyy{{{}}}}}}}{}v}r}n}i}e{b{^{\yWyUvSvNtLtJrGrEpCpCnAn>n>k<k<k:k:k8n8n8n5p5r3t3t1v1{/},**(&#!  !|!x!s#l#h#c&_(Z(V*Q,O/K1F5D8?:=>;A9E6J4L2P0U0Y-[-`+d+i)k)p)t'v'{'}'$$$$""   ~~~|||zzxxxuuussqqqooolljjjhhhffffccccaaaaaaaa____aaaaaaaaacccccffff}hvhrhmjgj`j[lUlNlGlAo:o5o/q(q!qss uuuxxxzz|||~~ }y"t'p)k-g2e4`9\=Y?UBSFPHNMJOGQGTEXCZA]>_>a AEGJNPSWY^b eikptv{~~|||zzxxxuuussqqqooolljjjhhhffffccccaaaaaaaa____aaaaaa a a c c c c c f fffhhhjjjjllloooqqqsssuuxxxzz||!|#~&~(*,/35:<AEGLPUW[`dgkprty{}}{yvrpkidb ^YWSN L$G)C-A0<4:95;3?/B,F*H(K&O#Q!TVZ]_acfhloqsux|~     !#&(*/135:<>AEGLNPUW\}^{bygvitnrrptnyk}iigebb`^^\\YYYYWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWUUUSSPPNLLJGEECA><:8531/,*(&&#!               !#&(*,138:>CEJNSUY^bgimptvy}}{yvrpkidb^YWSNLGCA<853/,*(#!    &1<EP\gr{}{yvtrpnkkigebb`^^\\tYkY`YWWLWCW8W,W#WWWWWWWWWWWWWWWWWWWW W!W5WLWeWWWUUUS1SPPpPNNLJJG1EGC[Ap><:8531/,*(&&#p!^I3kN,  b A !  lXD2"~sfVF7'xfVF7) )2;DMV_fou|)7BO_l|$4BQ_jx&,18>CJPU\`gkrv}#/:EP \g(r8}GUdt !&(**,,,**y(p&e#\!PE<1(     &* 183>LEeL}RYbiry3Sr5L`ryiU>({Y:nL, q]H6$ |oaQB2 ~o_M@0}"{v rpmigb`^[YWRPNNLIGEC@@>< :)825;5D3M1V/_,h(o&x#~!   %2?MZjzvmg^UNE>5,&$2B O_lz&,3}:vArEnLgSbW\^WbPiJnEt>{5/(!#3CSz`jpZK;+  !z&s(l*h,a,],Z,V*T*T(Q&Q#Q!TTVVXZ]] _ a accf f f cca_]Z#V(Q/M3H:B@;I7P.W'` gpv|zxussssssuuxz|~~||zxxxxxxxzz|~}ytrmkidb`[YWURPNLIGEEC@><::8531/,*(#!   "'+.27;?DHMQVZ_chlqux|~{ribYPGA8/({vrkg`\UNGC< 3,& $)-26;?DFKOTXq]aaQf?j0o sx|~|slha]ZXVTQQQTTVVXZ]]_acccfffcca_]XTOKF?92+%  &,5<ELU\env~zxuusssssuuxz|~~||zzxxxxxxzz|~     "'+ 0 2 7 ; BFKO T X ] a fjoquz| "'+-26;?DHMQVZ_chlquz~ #*1:AJPYbkt}}}}{yyvvttrpnnkigeb``^\YWUSPNLJGECA><:8855558<CJUbr1Pr&I i  *C[r  }iR:^:yS1 bE(~xsol j j j jjjj j h f c _XTKB9-"qZD+zfR@.  "+4=ITao~.?Qfx$-6=DKOTXZ]]__]]ZXVTQMKFD?=;6420--+++++-0}2}9}={D{KyTv_vhtst~rpnnkigeb`^\YW USPN#L&J*G*E,C,A*>*<(:#:!8553 58:AGS^n}/Np#Gk,E^t!*5>ENW^gvn`tI{.mI#b<iL/xsoljjjjjjjjhfa] XQH#?,63+<ENU^gmt}zcM7~jVD0  #(,15:>CGINPRWWY[^^^^^^^^ ^[[Y W)W2U;RIPTNaLoL|IGECC@>> <<0:B:T:h8z885555533331'1219/B/F,M,Q*V*X(Z&]#]!_]]ZZXTQ OKHDB=;6420--+++++-029=DMV_ju{ytrmkgd`^Y!U&N(J*C,:,3,**(& !ti^SG<3,# &/8A J S \ b kry|sjaXOHB92+'  (18AJSYbkry|zxuus qqqo!o&o*o/o3o8o0>0<0<0:.:0:080808252545757593;3=3?3B1D1F1H/K/M,O,Q*T(V&X#Z#]!]_aaccf ffffhhffffffcccaaa____]]]]]]]____aa}cyfvfrhpjmliogqbs^uYxUzP|L~E<5,# ti\PG<3*!  zqh _ VOF?92+$ "$) + 026;BFMQX_fou~ ~|zxussqqoooooooooqqqqo ooll#j(j/h3f8cC}G}J}N}P}U}W}Y{\{\{^{^{^{^{^{^{^{\{\{Y{W{W{U{SyPyNyNvLvJtGrGpEpEkCiCgCeC`C^CYCWCSENEJGEJAL<N8P3S/U*Y#\`bgi nrty{   !#&&((*****(((&#! }}}}}}}{{{{{{{{{{{{{{{{yyyvvtrpnkigb`\YUPLGC>:51*&!    #,8CNYbnv}vpg`WPJA:5/*# ~zusqljhffcaaaaaaaacccffhjjlooqssuxxxzz|||||~~~~~|||||||||||||||~~ !#&(,/1358:<>>ACEGJJLNPSUY^eny #A[{8Wy (#1<<UGiS}^ir}}mYE.}bE*}tnieU^CU1N!G>83,&! vi\PA3#|lZK;- |xuqoljhfccaaaaaaaaccffhjjlooqssuxxzzz||||~~~~~~||||||||||||||~~~  )4?MXfs&/:AJPW^ einrty!{#}&(*/1358:<>>}A}C{E{G{J{J{L}NPSWY`gp{3Nk#,5> E/NNSpY^bgik!m:mPmgm{kigb^[UPLEA:3/(!ygR> (pU8p[G5&  !#(*,/3558::<<<<<<::88}5r3e1W/G,:**(&! q _O?0"              $0;FTalz&/:AJPW^einrvy{}}{yv}r}p{n{k{i{g}g}eb`^\\YWWUSSPNNLJJGE#C,C5A>>G<N:U8Y5`3d1g/i,k*m&m#m!kkgdb^ Y SNGC<51*# zqh_ V MD;4+"!&(,/1358::<<<<<<<::8531/,*(&!      ~ z x u s q q o o o lloooqqssuxzz|~}{yvtrnkigeeb`^\YYWUUSPPNLLJGGECA><<:851/,*(#!   "$'))+-02466|9s;l=c=Z?OBFD?D6F-H$HKMMOQTTVXZZ]_acfhhjloqsuxz|~|zxusqooollloooqqsuxxz|~ !&(,/38<AGLSW^ekry  "$')+-024669;=??BDDFHHKMOOQTVVXZ]__acfhjloqsuxz|~ !#(*/38<AELPW^ekr{}ytrnkge`^\YWUSPNNLLJJJGGGGGGGGEEEEECCCAA><<:85531/,*&#!!&*/38<CJPW^ekryvneYNC8,!|xqlfc_]ZXXXXXXZZ]__accfffhhhhfffca_]XVQOKFB=62-'"  } { vrpkgeb^\YWUSPNNLLJ J J GGGGGGG"G$E)E-E0E4E9C=CBAFAK>O>VEJSY`gnt}yneYNC8*  zslhca] Z X X X X X X Z Z ]__accfffhhhhf!f#c&c&a(_*Z,X/T1Q3M5H8D:?<9<4>0A)C$CEEGGJJJJLLLLLLLLLLJJJJJJGGGGGGGGGGGGGGGGGJJJLLLNN N P P S S U U U W W Y Y Y \\\\^^^^^^^^^^^^^^^ ^ ^^^^^^` `$`'`+b0b4b9e=eBgFgKiOiTkXn]napfrjtotsvxy|{{}?@@@@@@?????>>==<<;;:99877654432110//.--,, + + * * * ) ))((((('''''''&&&%%%$# # "!!! !!""""""""""!!#!(!.!5!< E N W b n z !!!,"8"D"O#Y#b#j$r$x%~%&&&''(((z)u)n)f*]*T*I*?*4*'** **********~*p*c*V*J+>+3+*+ ,,,--../00122345567889:;;<<===>>>>>???>>>w>o>f>]>U>L=C=;=2=+=#=<< <<<<<<======>>>>?????@@@@@@?????>>==<<;;:99876654332100/..--,+++**)))(((((''''''&&&& %%$$#""(!. 39?EKQW]cintz"'-4;CMWbmz#0<HS]fnu{|v ph_V!L'A-43(9@ FLRW\afkpt{xm|_SG;0& }tkcZQH@7.& !&,28>DJPV\bhntz "(.4;AGMSY^chmrvz}~|{zxwvutsrqponnmllkjjihhggfeedcbaa`_^][ZYXVUTRQOMLJHFECA?=;975320.,*('%#"  ~{xuroljgec`^][YXWVUTSSRRRRRSSSTTUUVVWWXXYYYZZZZZZYYYXXWVUT~T}S{QzPxOwNvMuLtKsIrIqGpFoEnDmDmClBkAkAj@i@i@h?h?g?f?f?e@d@c@cAbAaB`C_D^E]E\F[GYHXIWJUKTMRNQOOPMQLRJSHSFTDUCVAV?W=W;X9X7Y5Y3Y1Y/Y-Y+Y)Y(Y&Y$Y"X!XXXWWWWWV VVVVVVVWWWXXYYZ[\]^_`abcefhijlmoprsuvwyz|}~|yvspmjheca_][YXWVUTSSRRRRRSSSTTUUVVWXXYYYZZZZZZYYYXXWVUTTRQPONMLKIHGFEDCBBAA@@?????@@@AABCDDEFGHIJKMNOPQRSTTUVWWXXXY YYYYYYY"Y%Y(Y*X-X0X2X4W7W9W;W=V@VBVDVFVHVJVLVNWOWQWSXUXWYYZ[Z\[^\`]a^c_e`fbhcidkflgmhojpkqmsntpuqvswtxvxwyyzzz{z}{~{{{{{zzzyxwvutsqpnmkihfdb`_][YWUTRPOMLKIHGFEDCBA@?>=<;:9876543210/.-,,+*)(('&%%$##"!!   !$'*-/247 9!;!="@#B$D$F%H&J'L'N(P)R*T*V+W,Y-[.]._/`0b1d1e2g3h4j5l5m6n7p8q9r9t:u;v<w=x=x>y?z@z@zA{B{C{C{D{E{EzFzFyGyGxHwHvIuItIrJqJoKnKlLjLhMgNeNcOaP_P]Q[RYSWSVTTURVQVOWMWLXKYIYHZGZFZE[D[C[B\A\@\>\=\<\;\:\9\8\7\6\5[4[3[2[1[0Z/Z.Z.Z-Z,Y+Y*Y)Y(X(X'X&X%X%X$W#W#W"W!W!W WWWWWWWWWWWWWXXXXXXXXXXXXXXYYYYZZZ[[[\\]]^^^____``___^^]]\[YXWUSRPNLJHECA >!<!:"7#5$2$0%-&+')(&($)"* ++,-.//01233456 7 8 8 9 : ;<<=>?@@ABCCDEEFFGGHHII"J&J+J0K6L=LDMKMSN[OdPmPwQRSSTUVVWWXYYZZ[[ [[\\\\\\\\\\\\ [[[[[ZZZZYYYYXXXtXiX^XSWIW?W5W+W"WWW WWWWWWWWWWWXXXXXXXXXXXXXYYYYZZZ[[[\\]]^z^u^n_h_a_Z`T`M`G_@_:_4^.^(]"\[ZYW VTRPNLJHFCA><9742/-+(&#!  $(-39@HPXajt~  $'+/37: >BFJNQUY]adhk orvy|uj^TI?5+"   !"z"s#m#f#_$Y$R#K#E#>#8"1"+"%! !!!! !!!!""#$%&')*,.0257:=@CFILORVY\_cfilnqtvy{}  #'+/26:>BFJNRVZ^aeimptwz~ !!"###$$####"""!!!!!!!!!"##$%'(*,.0247~:}=|@{CzFyIxLwPwSvVvZu]u`ucugtjtmtotrtutwuzu|u~uuuuuuuuuutttsrqponmljhgeca_][YWUSQNLJHECA?=;97530.+(%" ~}|{zyxwwvvuuuuttttttuuuuuuuuuuuuuttsrrqpnmljigeca_][YWURPNKIGEC@><:8641/,)&#   !"##$$%%%$$##"!    !!!""""!!!  !"#$%&'(()**++,,,,,----,,,,,+++ + * **++,,-/02 3!5#8#:$=$?%B%E%H$K$O#R#V"Y!]`cfjmpsvx{} ~}{yvtqo l i f c`]ZXUROMJHECA?= <!:!9!8"7"6"5"5"4!4!4 4 4444443333322100/.-,+*('%$"!   !"#$%&'(()**++,,,,----,,,,,++++***++,-./02468;=@CFJMPTX[_bfiloruxz|~~|zxuspmj g d b _ [XVSPMJHECA?=<:987655 4 4 4 4 4 44444333322110/.-,+*('%$"        !!!!!                                   !!!!!                                    !!!"""##$$%%&&''(()))** + + + , , , , , - - - - - - - - - - - - - - - - - . . . . . . . . . . ...........-------,,,,,+++****)))(((('''' & & & & % % % % % % $ $ $ $ $ $ $ $########"""""! ! ! ! !! ! ! " "##$$%%&&''(()))**+++,,,,,----------------.....................-------,,,,++++** * ) ) ) ( ( ( ( ' ' ' ' & & & & % % % % % % $$$$$$$########"""""!!!!!         ! ) 1 ; E O Y e q }  #*15:=@ABA?=950*$ xmbVKA7-$ yqkc\TMF?81*%  %.7AKWbnz %,27;?ABB@>;72,&wj^SH=3*    $(,15:?DINSX]chmsy~|tme^VNG@81+$ !$'*,/247:=@CFJMPTWZ]adgjlortvxz|}~~}|{zyxwvutsrq p ponnmm!m&l*l.l3m8m=mBnGnLoRpWq\rbsgtlurwxx~y{|} !$'*,/257:=ADGKNQUX\_behknqsuxz{}~~}|{zyxwvttsrqponnmmmlllmmmnnopqrstvwxz{}~~}|{zyxwvusrqpomlkihfdca_]\ZXVTRPNLJGEB?<962.)%  ~}|{zyxwvusrqpnmljigfdb`_]~[|Y{WzUySxQxOwMwJwHwFwCw@x=x:y6y2z.z*{%{ |}}~ ~~~}|{zyxwutrqpnmkjhgfecba``_^^]]\\\\\]]]^^__`aabcdeefghhijjkklllmmmm~m}m{mzmymymxlxlwlwlwkwkwkxjxjxjyizizi{i|h|h}h}h~hhhhhhiiiii~i~i}i|j{jzjyjxjwjuktkskqkplnlmlkmjmhmgnendocobpap`q_q^r^s]s]t]u\u\v\v\w]x]x]y^z^{_{_|`~aabcdeffghiijjkklllmm mm#m.m9mDmNmXlbljlsl{kkkjjjiiiihhhhhhhhhiii{isikiciZiQjHj@j6j-j$jkkkklllmmmnnoopqqrrsttuvvwxxyzz{|~~yupkfa \W R,N7IAELAW=`:j6s4{1/-,+++++,-/02468:=?A}DvFmHeJ]LSNJPAQ7S-T$UUVVVVVUUTSRQONMKJHGEDCBA@?????@AACDFHJMPSVY]ad|iwmrqmvhzc^YTOJFB>:741/.,+++++,-/12479;>@CEGJLNOQRTUUV V V VVUUTSRPO!M$L'J+I.G3F7E;C?BDAI@M@R?W?\?a?f@j@nAsCwD{FHJMPSVZ^bfjnsw| !$(+/48<AFKOUZ^chmrvz~}|zxvtrpnljhfda_\ZXUSPNKIFCA?<9742/-*(&$! }{ywvtqomkigdb`][XVSQNKIFDA><9641/,*'%"  ~|zxvtsqomljhgfdcba`_^]]\[[[ZZZYYYYYYYYXXXXXWWWVVUUTSSRQPPONMLKJIHGFEDCBA@?>==~<|;z:x:v9u9s8q8o7m7k7j6h6g6e6d6c6b6`6_6_6^6]7\7\7[7[8Z8Z8Z8Z9Y9Y9Y:Y:Y:Y;Y;X;X;XT>S>R>R>Q?P?O?N@M@L@KAJAIAHBGBFCECDDCDBEAF@F?G>H=Hr>s>t>u>u?v?w?x@y@z@{A|A|A}B~BCCDDEFFGHIIJKLMNOPQRRSTUVWXYZ[\]^_`abccdefghhijkllmnoppqrstuuvwxyz{|}~  %*/49?DJOUZ_dimquy|}zwtqmjfc_\YUROLJGECA?>=pd-lyonpotpourri-3.0.1/sound/trickhit.aif000066400000000000000000003104061430526361000205170ustar00rootroot00000000000000FORMAIFFCOMMd4@DSSNDZBcz sg`aYXcsνi J'1}:A)DdgC ?86u+Ew} X/b! z "D',+/-.>,H5'd / _)f/1S #)9!j,. +2% }W xߡݣ8D9ێz֕^m >y <4H.x"1%QN`h֚UהKҟο̅]zΥӇxy}5ަ [X$:.J5j9a9*6D15)!: "!zAo <_ޟ3""(-t0{y1) /|?+'+%2;/AaD.C@(;H3+@"~9 $ F*7F-Tpak؂ppjU`^QA1 "L U r( 5tpBA˵NWë^őaˍ`-[GRBF)h8. j)^    &e4AaLUaXU~ Mrg@2"a!m$N%## & ~T*60?D) PC;<1z#fi(%sN^Ƶ.Cw'Krt]Mn~ؽK>4b C Չ ʴ ɂcX&.߀6J'Ҿ ( Ȯ=IR7__%U-Mr5b=BlEFC>70/D'ؐ8-MEx =+i$\M )'U!&Q)})QH&@\ r)U0YZ( vq)K5:ѱl;z&Ɲ~Ń @%&$ȼU0֓AmFbyT v|($ ЖFJ VOyqV7G$Q+n(bF".UT"H֎<6|. 5 F[ l F ]kѬ}nޣ<V6kPo8X[lN/$/5#p*^")e ,U4I] A&q.v4 ,9r==x< 7v:0xI'kP; fF݇A R ,wՁ{K  ŦB}% nFG}HŴcLˤT1.|$ az1 h+5DԴpѶҠ-,ޫ,ybu Hui Mƾ<¼R9||i fu#O0$ ;KoCHDYHE>5W)V5c+͔ #W lc| &.4565]/{&x$ E p2$MB8Qf ݦ- E wHmBX"= /^$+'((h% (>}$ lS SsWRod 1GD ^J2 <օ&ՔN؂o%\ _ 3E5o|LksKWYV8OVVz~ CdzޘڱO{b+֑ oG?p U E$xT1Lx˧׹fZ>zј1گ i_RR` _ 5 DkZE޵m1_6_!?'|K,002.2}0-d)% _T1 {Kc"2&L*,)+Wu' ~!$&z&z&{%z^"9jpL['"&*.1 10\-)y&/ #A!!e !~  &o-!^ E 5 9:*I  j Yu  ") \*w 1 5x7 7N4 0Q*R#j|LV@N 7,8>t(!+j"#!W &.)}fZ_)SzpZ zZ~X }3g4 ! $I+&h4&#Zsכ Bcl³ ##̱i+ <:!+R4:>?>;s97a29Ȧ-ĥ)+'M%%Һ&)A+.i0/2\+2/e**#"L6&ժӣ5H`ܐieG !! *.ޮ+2HU ȓA٩ $J$!6/& rؒnɈjgpëV=u̸ۯߕ&( }Q;1Cq^ڋ%%֨>ޓ%7U7&~XSbC85p,%!*ݱڇD:UY[lם~ic8֐aԫ+Cuϊ2qVijMdH$+qKmFjS $*y/2t1-' AE+B} }(|Q"!("f})JQ-@,Y )'"<H^OO~v#6k-׵hq &")B+y+K$(P&%?%! Vh U1@ V [ yԫ 9l] ~ Ze qU= @ P&"2 < YHe7ٍ٫2܈*1< V +W j +<22&6!2Υۜ"O"!S,r ? | k 'sh߶D  : ^&1 l%?J}R5p  ! )^0a3"f1F *]fi۲f%bx i wrr C' jCȴ  sFi9׭ nf|-.&2R=~; `:&rUV5qnpݦ][D qٶhtpUjser(#Iҁ2׋>G3KJ=EÓ=3o1ʰ$Ym s?,SB+ b'{ X'++8(t!K~UF6ںsֻDfrcQ!m< !-G q)q *v ;묹t򁸖qФ^&-3y65.0)  w }xqȇĿϹYS+ztY3N #L"H = 40  ZSp3jU)gM  V lk'#*$)!# I AI;گXYn^ t|/S)B1U5_G3 -"+t׋Rc֗dp߽OD W m,oddt:ij§ߕčY҆s܆(/^\]"bb|s.$4x BOLWR"T P0!sG ;-^4h #A'7+h/3$7&9$B;O;b9T7^4+0.i-#-6(.|0r3J6 8:uMЩ7H )3 +,34I64oI,s ԅ Ϧ͝tg3ؠ`{" ]R(-59 R+;8IT Z\WN.&?-z7RjWa]DYBI2lYu{%aQ jn8ش(W)̼ 27 {-;:z tƼ8òȴ-1[L7ojfkd`1SӺP؉`جyvh4 "$q<4Y '9 h`TF ΠW>GkTZy[bU͘ۑ?z?ʽ^ЖL>!= &+wlKcܔ٩ב-إGܙ⨦ZV=Gy\ lq#. ('"zc d;ߕ̙كC\I}а` Ju!$)S)w% dM GS|. ); EKfK6GYO>S[1"  XAZB/Fd{ *|_" 2{?nH \KEH @3$jzJ3ocf ^3S2sI  %bH"& ( (7'$!o< Y!k- ' Ur#O,1351"+P"rL G  VI$f1;CkG}FS#AX8-l "f<l f= aCO!$a)#2h8;F;'7#/[&UH(SH|k Yr"L"u :Cy [}y٫&֡re[ı i'.33 %.1&8[r8 3v*h @ &'RN0u# -+ 9WC_IK9 H @6J>);=msFlOѓLX Dh+e5 d;]=g:,3H='{ z 72vԅAՠۂ$B3B?2L)XR4.QB.J)S=G.+< 5%(m':9I-319؋EsNT7(URK@ܐ3% @ ùf =zHO& +B.`.!+"%${ Lh,#8v !$&('(#$_*<:fn7݂7Ն `-ӓ4zѹx- 37".( a+ * #R $ zbπߐ͈>os/vԊʓOs/һoɽsԤD[> -pG )q4 }EΦTJ5,KB#xZ(IW.߻1_/*[ !# .тAp󐲊lKG t#Ĉ+o502sh00*A!%+ _V w7^#0d 9?Ju?:kc0>" $ k72g)w _,+S%s)U)' ]ߣ<Q?϶D ?*-|I8!( e Wwo}߳uet64D d ' #CR@2g_1)O~ Ъ3P6 v/a 4QdB .Δy5UG*̿@)U=۟ia } (>0yށݸ 澽nĄbDUF{\,d%; 1"l&o%bFP mFۖL̓]͔ϟeWb&Q"&1g0;4@2AC,r=|"6T-= `#X b 5x(W)3++S;6A?CEAH;G<26C&+=6 B/(A!k;|!m)}4#}?#K0+T0Y2^Z`/V)&OF=V5J/A,ڋ+f,0"щ50գ;3AHjO6UVZ:\0[FVo GN1 C 6^ )Ch\!!x'H*+* (U S% #n @!^ O, ~/r`: qn8Q &Wc,E~0(3-3{ڙ1.4Ȳ)iĬ#EvYJ۲s z D-[瓾9M}?,q aWW;TybJEDcg: hX'O2D9;;P9$3@( C`̅[Reݕ; ۣRT_)."b/,,1'i3 y0)) 8 (V ;W7WOc s @ s1?gGIC @8* =j]Ġ޾\sbæJL9fR2@ Tvl PE!06 h~ E69D!8)R1`7;?:p5K+b C87 ˰䀻췰Eꈸ!{Ģ@|ݑF9EETKꔱ俩wL5}S-Gm~ Aޟz HS>ED+[5Ո3ѐt؀F0los繾wԽy,h2#Ȧ͑k zr   AH m!ލ6K?F4bf"o,,2p2+._o&Q {$C  .)}7DM!Mo)GRX09R4N>6.F3:--$/4 1[ fhf& -ZZ; F)KOJ*0B5d;# ]V֜TɳrX;J},f?(Y'#&j&3{(z;( ?9%K=s77z- !h+ "߉۶ܷ19E eJ& 3'_/6R"A9#:X"71)]8( yf / '/!`+5{>/bDHIIF@ 7+(Z]-BwXڞ  #K) [-'/. +%dL3WqӀ[ؚʪЉj CTU8 %Sj9ec4BJm J ̓˔.y!eq"ܤ"k P /8oف@=!֐!!ڣ `G2HH=? ~  F!;" N U&7U{W&AA/d7 W 2,B & R! `ۭ<J®;!%..iP8f#A^HLL Hu@6) |4< *ؓWWv 8O  g: FZv;69i*0 g%%..O$3{3.~#\p@VVֽ.ȡӶu G Qn oD ~Wֲ^j"͚ XəN˥!l|F6Ypl GڙҖPIۻ/qˈ2 9H̐\lc A($yX ֎h75VY*1AWm=Uߔ)q5!=#AA=D5ն+"  .})     3 xm$(:)&!TZXd Y0Д&ɬ ɪ(\0v6n):=k=47 -#%#x(l){ &!*I  sQ~   _O">+E1 32ݣ/٘*ֱ&*T"]+ڶx݂TYm#P(.4 9=b o<]<ڳGwGܻ}ɷ ecD_Afr%u!)Z#'g.;5L7d6d1}*  6ʫsVkn 'T  %1(D& y RGM4He!&v%l&6+!h-+z%} x]׃dg;Nԃ>#$!Tzv₾asȬ༦唤8xF3}"/o7˾9E6Ԛ.ռ".ҖR&Hɢ%Hx&b*Gߙ7ڍR .ɏB(whȡaՠ4/M S֭ĝPn˩,^فb[!/:?H޺Q #Xq _>GVR[~KGpf8 Fΐi *+Cȅ Y u HX/ |  ~;N:=ޘ[x r $ r1Ppt; KZ{5 . @ PM p G ] Xu%3+ /244i3{_0-*]#x;i !CCJ^ i%#-&+3'#5\5E3H/ ~( " |"m2,,R% !*"I0>4!H3g0t*#s }JyTG U%,, 1C#4 $G37".:%rRy 2 fF: D6H$L#3&-h%7"5?ZEGYH_H>DT>6b ,#;4" > *_M R TQE #m*b/  bK! L 7 tHJd` .^ [eh-e ? f T$)[*Y -(/#'o jO=LD s1#(,k&/0C0~.*0$<)Bl3W  3 _ ]MX](Z v'O+1G784 L+N Jh 6tYo +qb$}+8&h|0ɻ6:кCHkĞJGحA7t,35  ^RYڨ? i*n!) .70+9.O(lS*$eh#uX5#n6`\h~Du#^ e|m ٘ â>(O֭y~ʨNևмMV0ٟ(FLl 6͹@ɺhmޠy˫xEJ $-ݬ&Ҍ:ۑ-r;3؎]WT:TvxhĪM\P & ׋ܒ4 [ W?OLZٮ\Є99jD M]q7ќ, 5.zYu]܃ 2 Q  x $fKN#-!l!*bȑ"# DJ 5P hm /׺  =~XHٷ γt!\'e 6Uhn/mD5&HW I`GB:r1wֲ'weʚ̺?!( .4lc9`<@ C EGiG,D$<0 -9F7[NӀ\:?WؽV x  [r' 2 r(҈1 y} Ț@׆"(-KE03&~4A}4 Q2(;. )B"˥`Ȯ7. ^?&/9Gx O p|w ?> B7) HXf@,MEjpf{U#Y,5M11,~"O Q 8<3O !$ V$ " Y \  Y,Do~XA/A}"^OP4/ {A1gvF3!#I!c <yv |t]Սy 6R6r|/">堧m䷝ND)’j^q!AKO1Yiy+ڧs@ٻߞϟ6ؐ,еVǸ,TpֻL%U, ո :~RT`sE 0`!Xޢd|S|aZ!l aKin\NmrJra^o'e/ 6Nb "!Yv3y^H n)g & >5XJDrX4t<X  YVQAc^|y Q,-z"ݞ'R* -/0X/z ,c("a lz G' p8dV|P\z$})7h-1 G21;.h (("Z.U &L@F-38RIE{ 4)  ! $d $ 5" dg?  q ?5}'#%& (3)~))ES'%#u \G 0}!B+$'i+&S/;3b7W6:,=,^> =94u-$vyL]Yշ J?/0l ~1##n(%-;$/ _0L/` ,'?!8Na!?  Xg '  :uY%.3 5 4.&9S{WV\?  | ^`0_U p2  S@ :tayuC;Ύl̨  .k fd3  Hz 6z-p.+ 1& 3?I OQ NIfA90W'; !X+ Bv"O[*P̻0$4sѐ5֡43܁0G*]:"L ;2xE%yG2Op{X;L?SJ>"]hwtsvhbE j՜͏ 5yȦĒ ݽw-ĩ(nms PP3 5Zt'<55q!т.Fjحܼ*Jd 'Rю ̀^ʘUZԛܠjT Pl 7l/tf8 YZo 8 z ҙPat5piHݎ*v?  ;7 } S g~* @@9A8{0n#;g&S@(;I)!2)o);(8%"'fZ#z q-)4ں j׃(nɸ+ }  Gṷ̈̀L 7 S\$;X7 ^Eod K)_J݌EpXݓi0686,)T .e]ٛ EqԖ"&*-ײ7׺<#<9/1]ݬ&D/ @UTe@Piٓ(VIZO X(0 5@4/bB&8 f7h}L?ߐ37 |G${),/5@0711R1z_0/8-)C$uU!x #Qy ' 8*+"(%#'(' '''| (*-g%/1l10@E-+*[(7&B%J%~O&PH' Nr'J1'D&<#I4f,b$k;!X D?'07 d> 82+ ;+$=qd eCI?gQ _3 #*~.B.* ! S&x+t.S.]+߱'Sݻ!@5(- }"Lsuט ; EzEBˁµ*MU +tff'̳0^۹2(6ACMTV-T^M)A·3"HK 0XVWS ;[,78f?A >?5s(-;k#IWw"X&xP((o3% ! wj ^![q lxݴqk  b@ g7 ܢݨeӿc^X4#3* /a10,0'$ (MU .Ou+M/Ju)ɂ)2-%8JI;<C92)-6VrŨ/CZ~齣C鄠vhAIȡ9= k8O[ G|M4ꈳ崶>Z?ÊȔ4KԖ R#I*XmܥΒʷº½5 ˹X@ʀû٢VюGS}pݘ*#u?Grхf ,Wyё ̥ԝ˾17qMf4aqML&Zy+Z,)" >CD܋ܤ`"46um P$,)0 \1>.o(!(36|T?}AY!/#.9465 4[ /(FO&.zoz'V. ,<*| 8E"BIfK I WCE:OK/\$_iW-tkVE .\!J=U+ 7}@b)Dp C;<C21&{ VjfUfH RMg  v xX PBo.|!v#!\dvC) :ew!\""7v R3$#WP+p bߠ.8+R s  $&,2&6 :J<=*4;!72E+@#YExc (Q $   " % *gG.L01 / _,_ 'bc!*vj  [ NK  # 1 AR C Zs#|)',I-,p(m#?7Q6S8YXj   x @  = ;tUOPHhfT=4JZ!jI%&u%Kb!\<  8JUFe m#v,F4u;6?;@Y=.5L+x9*߿ ߻%r< /6 b!y" bB *{6bS3+agD_ 8L G9 /X.H( 6ϡ̉z2QշwzvޮMh ߺܸو։$gf#$ˢrs=z]N,OhFAm#U!q3 X w%$Ġܿ|kꩻ㑽D d zػ`V>Qg')}/y :sԈEbc v x j1wBĝs܆Вܙ3D&f6Em% "%%)J!{zճ &$Hi` 37S&S1%8V;:4+(Ze'[sڠyOD}7 R &(oű'$=#. W dGWi;+ *ٻ +KHcMqo  f J sˈǯPƼȖ9ӣi%m&  : PU ˩ V Ÿ3Ҥ&) O%  G 4  -Q'B"[&R(('b#1A1afj  u H M|?b@-DI(% G1"8n> @O ? ] P/ y ?: 1 T V ;;H_مJLݡ?-8X&+2/,*"%mMQ  @8<5.*,~Y 0#ވ 3 yo2<#}f.N5{l8f~7=m21!*!D!=F * {+M [{%=0:Nn@ B@(:20%:!} C5e=~U ]Q<+/"01 IE/=[3*)~ l_Yy5+ r)4->S F yLvOFN<I!BF)8 A. &^f2 n:A  nyL#i)-.-, )4$- z!du $ 8> Z;   a z  b B"w T+VpL0*;M.SNl< c  }  7$ ' ]*' ++(z#OMDSq u=4P4 7'p,d$-+9%zF 9Ά csZxZ!ԈrD 2q U 1y-tK muOai 7yqaZ48 s[+ kL ;Di޸¿EielQ:> İ=SJ'a IC%ֽ/1ػöjˤ3BHנхW?H#]'w&! . R׼Թb|GĈ()ڜ;DkAߍVV3#xީh'uNy$P">} S Rq ^..'2ha \ä\2FΠ O(G ETS@ `+Q%ۚ7۶ܤ߽J9 *qq[ } U X m?+#s"E߽R5W~xX|ٻ(\ iX 3]T0^W sdEeu?'ABO wOUk"??lAFs>;j٢JadF)& +]{. ;[C!FEC+(:2m!#{n $G2 |&8tO"$$%n$a%T $#RA!OSݟ\l߀Cs o &#/&@6'8(7f(2q(*)X!(**,+ -9H.01.2D3p3>22*!1.2@9F3mAI5F6kG`7/E6A4<915~+-%s&"3 9# <0e`?$ %9#YuV"{ & (Y'$ %I6' k  hB .L"̿vNI:< O ۦۯ 9 g׈=!g˺XU(p4 I囦"^Pʐ2n4́CÀDJMRĝ >##9׃Ո`ٝۑݯlv:I׺>'̄:8ljǶa*b_ ֦ճ w9iT:6VoGCT y%.%+.u1.1.9*TA%G e_+T fI WX7hK 8o tgsҍ yLx~7[x=UF#a)*R=&Z `6Yo4dw: j:!s(;@* '!gLKkoht4. wWd)-m5@FJtKiHA47-"tL  TpN1A"%+''p%3!+7U rSc-MaKT50  5 vGo!Iu##|!hiKDjwEG^C p  D < @ ~n*b.E P !&1*a-C1m3t4*5vW5c[44F4l5 7: ;<B:74*0L,*]),* ,f.12aE2Z1F/`,})!&Y j"E \_ IXjLo%9%E^w A%(O)(&":_@  R ] vv R+ U  xm  "$L&W&(N# ME -eRb&HAEIj$ ((6%;^3uz٧Zߗ1frgD* HFs%  ϯ ͅϓdRfr}gyssAM,2Mx}(ۑކY tdW!J~$ӻ պ >@|^EpՒK% Yˁ$Q " 'O*w(hʻN*';q WUJߚqQ}'ڶ`0rVMZKߚ )م:ٷgʨ[`P@1ҝBޠ)+fW !]Ȍ-C@޺tF:8U ۽ +'$j7}+oUڐ6$6zaw  #C mr֨]6s+\Q{} M$P# ''S%s # <  7;xoA ʟ5 >$*s Q' do ! R2ѿh3}¡˵70 ]bx(;eX- J R!"N)G059}:9?5>/(!$hi I BQOs p*E $&,J*i3+:+@=(=%;"5q/l)$0 6 K;@ RQR Q"$+2N7Z::6 2 , '#1!J L)"L *1>553!/."))p!v$q!a- )k !"!^!j&-3X4Hw;HAZsF!$JI*Kk0hK37J1G+BA!m;!2 'IJCY2t>&"0$7%9\#7 0'= 4N{/ tH}T5N u5c s#(+6/o/'^)i[ R26N4}p۪1w:dZ>gU NE݉ tNp<Ƣ{G$]2~>t]IPUk`WVdQfJ#@r5 )N$@ | ,-U_^f  #d  $f| /X 5 5ĸn<j y'_0J3M1:۽+ZҒ#p]}Mn }  9.^g~~(ϟϓ}-• n (زJM§jC޺a 1j2d= %'X֯BCA0 J k?NnS2۟݉j-׊V ̺?[ɂN'8(qY1Υ{쯫ꢳ?(- ǴE4Gc@ Oƈh*o%E;òǙ:ӪYm0_4>aF6n<ЩvƆሼY7鳫񨧺) ų3w Ғt"X Sb ܞ ? Ҿ&N:v"ER([(-243 j/(Q bv4l' g F~D? D ip  _YL6^ !N $I$`{/ }i`=K3hGv y  M$f ') & i$) p$f@6 n#(,304=8V@(? l=9N3iu,$ B^a 5 @NYQ !7*2 8!< i=>|:S#4*w+ S"!, t?SC TAG!z',u1#46%5v2-"&H W  wBrnc"E$4%e$5"W ABl1y  < gh k e3 ~ %*.1 0-9& c r`&b|ڱ ;}T?a_8OD1?3P0c^- KT4/Cz2wa~#F3ʲZȃL(yNM\/; A$G֭'ȴ7?—!os@! Zkޙ:F#֣(̺ɩAǕ Sɮ%Ρ28b r%Kr AՄvb̅Gǐ ˻D#Xr.Od:-  B ḿI™汹zӆ(JX(g%;ك.1ՂN>ڶjbz'*[ݾpwy5[Wݗ7ډ ؅c6p؇שa:ۜF߱؂_~KL *E}b$ݯn؋Մ~ZF GU:f D}piq9)z -&_ % "Ib3M dQw؂Du:  u L [ZOV)5|٤W*˧ Ӹ݀a!-~"@! W Gy G^^#!^'٧-Mb2Z69:K:t9x-7*4s X/*%" F$0 =##'Z1*`,u#-6f,N,n+*? '&#*A,* & j ' `4Y|v u.s= %%J-t4:<;84[N/*'%D$""G!@#!suj) ;PO__ #%%,&,`$3!;TAFQqI3x33 Ef  V^rX E .# % (? l*,i++/+*)(&`%" 4f,!%gB*iJ/63't57_ 71i53u0.- -,,)t* ( & _#A!y(CL_de M A._{,sd"p eHa@goke@5>)   9 R*Y!e( 06/=O C%H )Kd,M.Ol/YO-N*.M$(IFCAX N?> = <_;.8Z65"3 %0'-`(*O'~'%%#c$ # 1 :   Glg ~ z[:w 4הQ\ t+7A^I\N,NzKF)<0 "-%JP {,i l@af Cs^riU, 9Y 1G+CO0@ {v;h5" nV?{L#i]׫`ָמF98' tm[N@޴ FǗ ba-ɳkt3KΞD 0ձ/aۑ܏ݬU k٦k9JKO3Gp|ep ՛zŎELrϾ:Ƒ]7ܮ4j2b $&~[Z Er+ūssA%&HG: &$,w<&پֱ-*aҩ5ԏ]`>qp3n[a ʹa¸lCJ6uٴK \w =< ۏ {RЍJ B['<춽\¨Y̻Ь.\&7Ҋ6س41hWfbj} '>XH;4t [ w DOT !UC(g+ e* $ E4>"ډ#c Bm`ե/ ґ ]# QX} nb m%k  KD?۟oKI&v,a/*/l|,& f :!6 #)1_ 96?CD3@݀909$`rl Y#&J-?1~ 1q/n*y%!j'l,1`4N30*y"p e !3#/& *$-.-!*#E# } C > c  $ -5 885/8' zp   8%v P[`h "!('/-Rl3)9 >H@C@=8!3I/-A-n.<0t18/uA+er%o9T0(k8_a Y/ !G!" !"M XP$lwB%e,%u ;=W ey<IK \  >y!#}$@#  K !\$(,@+ -0_S12+1D/- *F&R 8n~R!zVۯ ݋ b /gB}BII߽U =-tQ0D ձ7ܸ  Ӛ F5(v YmD-. I DU @Aٻ002݇osg8]av齽^eҾJF԰ ߔ.XvPoF0/R$C a; ̌6!ڿshz%ϑc`cGXD5Q g` Ͱ/e޿k`ݎ!G׾֑xb@ܬտg ŎοBj⽬{ÓݨcL>J[.ٲ"~׏Dأ)SBy_ TIS"K{#W(P, .H.C + k'E ]  >) N ޹֪Ѩ"kЏ&m\'$` (xFY'sek^1 ;:Ntm ׹j ;S2Hn{Rv >X % ' DQ @ [3 9 M E TviC&W  [xH 2 ]xv{4 SP 1q{! '>Y,[2G8 ?-E`/IzJH]DV=y4M+D"zO+/  $)' +.14F54@2+f-%k<"} EXU4Y@{H Iv$a!&I 8GY%55AIO RM wNyLI~D+=> =5Xr-$#l&&$h%0#@#!O![c^g hWfRc`X"M AV ;5( Y) } -urp!y&)} ( & "[58 ;7 i d [*lL Zq: +Jtg_2y h l,$Io'CM.224\4!f0Z)"x2 P [ "6de 6 & u D \ }"l 4):GI((,1SShԈ Lϣ}o5gCft{&J!/4-Gqܿב7˙<νȺ5qŻǂ_ E$vY4y@Zz*jxȇ$)9!,! D |w B)hSMڵݯ܏ ݑݽW % d@ >a )5;,se[4!KHL__}  )#H$W#"+n  T b   * zB)!(v/K5W9x<^<;*9F7 7 :0 > D SH KS -JF@9! 2W - +,Y&-@-S,8).%$X&IM I "k)q.yc100+o$ D8X . Qt| #~ .    "%)-s01# 2$3a"3d 22v.2EE2Q35j7e:&<>d?> ; 8 B3w.K*'&$V"v#B&s+X28Z=yAA@;<\72q-)'' h#Q%% v& ! C%#O"y@ N _  EX_![MxaV"Y" 0%Y&^#q  fbx}7 MtUg&])] ^ &T @` itP- ͌܍i<=w*twgZM}OEZޮ?F!Ty )7L SF#SXiFoڢ_^7JDͧ"/`jc=kk{Sѕ{K񢺠qǵuƺ$ߞK29' ˷ mI0 5eϿ>\M9V0;+)jv9?nO\5% 7 N; 8wdI! "!z8RMkj/ %w}'^&G"uݦO R_ bs$c#K | H\ r -Pߡ M_>H/L fO+ p y  R V  4 ^ ~ /] |hB% d- x25{140*<*"a9 F?3)T aRzh$C * 1,7<<:d3&+o"O  ' < z-'r-!1)20C/^5*8"60U'O H , 3 I l  ? |("'',/ ~/-%+' km s&} d !'$k+G-c+1)a0$*T Q BxO9 5  ] b  :$x-; 7 @YHMhLF =2$*'k.#$y:#q&((ߙ'v''). 1T2$/(gZ > asQZ\ d/#%,%<#P .oI:A/ .fY&-e/ 0&- )o#Z8NP" k#Iyj KLi jIv + `)L NfI7ݦX'hAȼFpο}[NI3۾h:Ԕ'qro@ݘψȇ}+󓼚AԷp oùнÀ˾ xڒd݋ܞ^sxô/ծIӯ^ql _\ & O+KAׁ\A0Ξf /iթ֫\ڳ/ OQtpnQa,~ܳؓ5Ո) GWQȀ/hЏv g2 #% , & kR   A=#*D07Nb=bA EFpC0<3J(8D:o% -s 3 B4 3C6.(&qJ2g g|uQ ,V-jOh% 4,$"tz:1 6 7&o`@39o zyms> o \$R(A+7,y ^,, * )! ( (N**-(|/0i0 ,'E'  '5BIT!5" W"@ s O |&Z.4 8A<=>jJ=F<#`984 J-w%cW@0-,1H $$"(c#*3 *~)G9&2  `  q fiv9) Q" $ o" P o c"\r;']c-O134^31u. )x$%6f$I&*s$ %#; O :  5qo: [$ -D P7Z B KK;RU RL;C49F.>%g[RW" 'kI+.0 0.+4&"OOy,7)G $ G( p)(U&I# >)D <& i:Fe3^)&04In3f_.}&[|#f^D 7U > Mz E xH  x NTtGMEںլUh^qԫ`= νˬ9˖Lѥ՜ \!Gͧҙm*۽دltڣ?ɥŪ==?ʣ$1ty{ju@֯y͏ф$+ҲQTmǻ]ɁݣܛDwI 2Nj˫P<ޙh oK-:^: yNÇKµ ijW-!KѐϣHLYr&sd G %*p٘ѥI29&lB%ߙmENidY*chYQh@)BM>rr g128z*BQ%>pQKݯw_>W=#V  ,"?%e%R9#6( w/;{zL NTA 5KK,sW  aH ]D:}K2KYD2lB #4%i% %#+ 0=1r/X(Y y mG$,O3:Z!@_G6LP]PCM-D9j5,f MP% 3 ClR$\{b^1ba$]NV,MP.D9+*GK M Ne K zCE 68?+X  X& ~E%+"0&D2a)N3[+4-5/'9M/>/3D-@H)I|$F"?N@5X+ $J!""a(e0N7 ;| : B4o * !  V~ ""&&O"XWK:7Vt&07R834#,# u0ou!!#*~nK,H2# *-i*"j  j . a ~ * p` t 1 y h 1vx=@RZG@ ?>&2C#XQ  X8Ӭa2(9Λn֑6v%؎w`֊&XlQ @uW֗ Nu [˼HΨЗo~; էZֽRW=ZY8?D?9}оh3aٖxY{.aڧi*gߙOӀx"5@ ϦZ), _;\~޵ZN"GsNta{cգ)!_"D$:ؓ)u?ۃ ޔMV65f^.Uv:\K,p?hcu@e{g~ ӥ q=l"ӡрM"}e6/ 牲|Bjꧺ+̋=ֱׁѫ, ƛ S 3( Xl Sڎ܄nܐ dDSFvQ : 0 14!WݴAku ! )TR#_%' (7u[ܸk@}kmrff~wy !" !=l$xy]!& Y$~(,r30P"3E4p3g0 +$0X#*6- -{)Y! "}""$!"$w( =-S 2#5\52"+j&"*+,? +\ )>& 7!~!&)V<*:**[ )&z).-'4$:B>@>mc:hZ4+v! D vE $y(+ -..'|,.'23~0 +2#"e0Uu 'Z.V .2'4,5&/!4A.3-{1,/*6,O'')$y8_ogO,g $,/-i(M!n )J i e}Y9a3) 9!DuKDKL D;(/%<;:Zde &P; B(0"45 3 ,"a  H0rAi7 m  %,2265"53z/' g/mQ "t(dh(n "Rb{`U bX9tܺ, \_u>:' ;2MrL T-ػbXWLG1%Ltaddi%ߪ܋#[ڮ~́ļ񚾂7f@3D͹̐D\^lDܱ Ű#Ok;OȍKye1gp ˰ɞɢزfm1O,p֌31޺Q]+)ޭĉ۲$.o?YuՉy!eXˏQ.WvgpTZ-7ޤR~+tW> 5P\ N|ܲ@E_VP)!Wi)?߆|<%ӂM.,̭p˷̶RN Cx.Dd^x n WAcrz  a A;?lz k_ W 3 QYB O!` ( A-/'/-(4 Q~ <Z2gPW n \   eL!##!B9H t:jM !z!e y ) $S/K96f/9o52124 6e763E-`%5YOW` 1& +a-/?,052R3"~3F 1*/a*uw#B   ;  l_>"[*_1!6 89j74p/)Q!eq a, n!jY*\25O4/x(;  : yq/ \w 5:P|. T ~ 1AfOڳx̱.p-l@IHWR*Y4N]aMiȹ?쭾+넹˶>I0߽]lά 9 -8[y ܼԫzskſ>ǜAթ?Jۑ-ޭ23\FE?3b;ixij=!2" r/g.y8,͍ uR͆nϚ˧jy{ ]еXϯF/.߳*!)xe$'lg|=n7+T%1zUXr1M" C N^J}Ւ*տ V"]{9P:ijsZtRZt)Gѕۨ8[[O`o#ŹX p|ٌBTV~ g3ayy8N-s ۜD#ό*[)ƵzƠǂɜ V\P gp-zD-8{W&Դڜ@1?Z5z @$ !SMt <uo 0U >/ 1u!%#D''"')y&)&}'&c!&&#| ,IJi; K pP p%1(}*a,-.-* &v !\ G P4ayfQ{ " !l   2 E g PR }L)["z#$@8#n","p"S2! HM-4[e }HQ"*- #| ' )_f)a&"p%wO8! #D$C&+&h(&*s&+$Z+"a* )$(#(4'U&8$#e / t.u;4c   "&(- )G)d)5 (A&DN"xC' B0Ha!X&(( & $ $] <& )E,|K.>.[+'F#!p#).1y;, CG G` F. d@= 6~ * !F u Z t{ j&l,&0&2*2x 282\"3 D4#"5I$5$4!.&&: ~/1x!oi= Tji>d O+1Ug _.zPy>kڙ؞K$hՐm\##ۓoߠ(yB>hp, :Nm_Ũ8:ż;F¼|$WkpؽԡnкFX԰F˪7aQ枫螬AAHSﵧ\r0"r{[#;ݱĐqŅ |(Ԥ&{ߵBٻ<Фy]qOئюYpǗQ-1 hD,Z;ޙԭqdm̎4sBˋ{ '"ng*vFTU+U ʂG(rrh a % y uS @tBK3AT H$=K:=zv i L `tW@"x$m,^G5mT'GuY!$W$0( d{gV #9U d1z [E""!/  _[KL9& y, b1 (4; _4 2?-'X )1 7k; m: 71 P0 ( r P x "%w'k .(q(x%'O2o%5="3FKMJ=KH(IC9> 9;3,r%OMv;o !,7y @. EvGG3 DA7t=Y}9j#5~(1l*-@*)((s')%.$6s$w@$!L3#V"3^+`>^W.M~C:4$;1( 0*81 *11'3 "3u4U6:~ @q H OD T;W5UOWE8Q+>  a ! n7K!#J% e$# ."w! w9W hb&]V '&G~ b>G B` [ iT Wa( /K3H2-!%wBI ju=  E ;   O QxwK` 2!X- KSaCгfe0`)*H@ҰS@RTԏ1F'6RnlٍJٖ'؀Tـ1v N߸ݨފޘnФ Aܼ>(Լؐ(:.5Wј?6Hg9Eܩ$cF"aEbzc1EЪЉZҠЏٮRe%E6\بnnۤUچpPTE-Ҳ[ټZ7F98ܳݞ59/pۡ }bݹmT޵<|7b7fny ۚ \޴?KXt v,&.&ضчРՙ$O7 :tv G R] - "d UG* e}:+:GCjEai@K5v' NR &%*.+ /M/-r* &>X <J!=+ g5 e<?m (; 1,6!%*w=.d0y00|04/o. *.X$-(-4,>`,D-,F -B..o9/H-/z//.-d-6-F. ./u0 0B/=-$$*'L( '&E%&"'*-0S2#2q10.-YG+ *)*`'5#};;6$6.B%],mR ">#|###\'!4PAa=KEPadNuwFk ;J0'9 O V OvVLp*CZ <C PMbTu!'9+. -d(\"-O(a:%-.A9DM )R( O G% +9+6CRNC%i-5:t<-;;;'?\Rbܗ\! ?RkYC5od=GQ [:W\K;IuR޾G4xɧ3Ңy'glȈӗZɪ6ӿLs ,ڽݫXa2|1aΣ(q0Ԏҩ'ϝ wEЁs/ ׼٩^ڢ0FC&г7ѣZΠޤ̜_̳XOء|yڠM1,q.T'ՙмcւv׬_,HN 46cG݄R5upEO"0oS6j$"&5qmJe.&by~j. B 2@,Vw\o|.d5(cj: ! Ofn  i 6kܧ^ X rI $Z()&#hd YdV" i]D%A{.n4u5k3#.>@(#!z%.&&2#     (,3<9@ 3@<5,$k[reE E 9;5k){#:E*3w:? @=<$4:*M !o~5$ ) +)%5!Z~ R"Lj(.X$(2S*3/ 220$4-@5+3-02q-,9 (?%,Eg"]I KCJHWE CAf?[>l=',<&;!98{8:>e BtFIJg GjB0#:2;*%#I$e(U!-\j1uG33t1 ?- o)%0#P"> |a \ xfD-<3)[/w/q* "t}rOY %%L' k':jc}8tw.mv׼Uyv~ͩӥˮ0ܠߨv~ް܊mvYݯ_iP؅a֝?܏8 <,u.7YToa1mqGsG5̋ynjFؿݹuawMڗX,a{q# a2Wnΐ/hkh0Yĺd|ݲrȹj_k iدxWu#$\2<\FЪGRYs9U@n׷A?gkAiϣ*aԹX։,֯"T< =̓K?\|JM@{ R}h9'O}83 yy21N|ik`f=eײݱx\J| GW/@zq$9"}HZ.2)y,uDEC=bVhe4 4| _ '  l   &24db;KAI3/a$N!*%1&7*$9 T9=35u/(|"`N!'n/6<\V>-=9y5a1/u!6.$//,$/0_ 71y0/,,d* (ce(,L2:2AC FIQKV JnHK"E'B,8?.79,3y',[$a d#*z/39 4N2/u%,u*"2*'i+*-Z,/c*i0%/>,( P$b!3T0 #=#'+,f2@1)5_5X5Q8T3)9/93,6*W37).(6* '%&%]" >!x%+29 >8 a? ,=82+% Cu^t :n2Jp 2R )]-U.&*&#? -* kdh< Jz''2B:Z<;7d2c.[ ,dO,X-4--+G'$!!"'h%+217 n: :N e71#)4!N21dfX"2{a51  's  !Kk, _gOy޷Yަ M$2@'2RCe0p+Ұ.̯ȾXǎE-͠pтāq•sI}{J˖/@ށ߸݄dGY$BfIεUю (BQ̎Wɋfm˗faٍݜԘ\V͈Dd͑ʴ.~"䄫B۰]掷8%MјAܥTإX~&yEEɽ+)ܡڢUeɣﰣSG嫰58l瓿HS+\徃ҤVO<'usAܬ(&Qggdôdɋ +hZOGރߎM5ޓ e uY`f Mq,1YHhߠHU? 952 d}h  -  } u& $<>3{N '-J H5 1uqd > P 4 _  N c [&4E+.&&,' "-!I!t;S:/$ ^+ 1Y58F 88 6z3~0{B,#e((%J,m#I0"f2"{3#4(%2'/q)*C,_#.01 $2I 10S/W-+0) (e 'd&:%# jG/6 5.Yh ^"d ,5K<?!="7h!v/RV'! i]a+=:(  hT('`3?CHJLLbG[?f5".G$*%)$-l"3 | tWk ?:tB 'a @5vE;^t U'zlw!:%*%0"S$  `P]d0-fC " H N ;  B %޹۲MCOo\!1T+27 dئban̒7ψ$,eـޅWSt[>lK`2۴h.$ ,6^όտ>c`bKiZg:cp^/Ou%aЗ.ͫGˬ q2w؅܋ _g]" a9ݸ$GvP־ރ֤ݯBܱ߽j\׼81^>rR{,*xДEPɛ[Q̋AΙʇϡџϹ/tډώiNҧ:YvK],=dDޖ(ڎDȾɒ^̴c׵[(z\?y=؋XӜѴΣеz̡z/[ͩq.=Ob /G.5'A#nDrG0_,p 4!1bJduTi?{9=93 ,#'+-Z0;1,"._*(;16876=1,`'%&N) k/49 $>:&s9#&q5%n/#*.!G%# "V"#%W%7$C"w3C{3O!$ $""%"`'*V,/0&0=f/,,)&#V""`${p&'!'>& $*" .1 z4:523$/*= h$2 .)H/O1"0(;-/)5%;!> J@e? <70 (l dY I&K*.01R"12k4(563t-%޼ A}#U/-*5]75-*# t]J? !xj#)95Gv@? Gd G ?0 Xk9f<~a '07M;U?XdB|FSGE!?34&/WdX'+\!S1#c!%G} E $k7ʦˑ*^H  7_cƆ㋾2߉&Ӌ̰ܲӨvY]ۓޭڂ3>,ѭـcቱbޥ͡< H|ޝLަ;֝JR2А-{XFㆶIĸۖAθʫϴҺfsoֽ?ޏ:ܧ1܏uޠ1봜唲葯ꑮnYT簝쩴atO$<]3ʤ3-K8M9#̹2 Xsr.ؼTž9jvS2Ū}A*x?Dr[|Oz/DyfŶKM>+hԀϜU  . Q4!Wq $R y4 v _ [p " |pgsuC 2 j M n qz:r*"<"!U)7E af }BR6LcۤhӀ 6?z X+$  RW@XrRz#F35"{V#>"W$ (",!/5"0L0@*/,)kb&D%#.L"4#7%`5)"/-(1#;5"8(j9*27>5J2GQ/T,iT#*:O(I')D%&?$<":m 7B2R\+#Go)5d @.Iy!M#IL#F!=&2\( 9aYpiz. yO$Q ) u1) 8 @ D'EBH<3)B a` | !*O3:U9># B@e?=Rb:)6"3#R1e"/,*q)\^)Y+0T7!f>g"E #IV" JID @;87777K6 3H .. (I "R[4!0#O #D !pCJR!  XmD  O6}K[1 'A7C 8 6h`fDk}i l:/ BHc!][h'd- g ~ vtqQ6iVVBmb} (T CDjP2aν[löIɒLygB}まu!\փܽ ^o<)VN(,Bݬ=Bp؞L(ֽQإYazϡ}2Nnڛ 4ܸ%3bc-tϝI+Xsu /`k8y,@7gw0!'ݸ(ԝt ߆t>SB7ԭTF*)kεo٭بٹp n&-㔿M%0X¥PͿ}Ჾ ߫Z 4 s̚@e<نVб)^RڱӄXyV^ؐ|ryJtp %z646tV@Ux~ 1 rfCjXiG1ie~_G ;bNCYӪƾ }_aM h[(XQkN!#&L)v-^2c7:":49,5K0+ '# K"N&!'["f$"8"" ! "bK&B+1l6k:m;w9x 4--Ik&)!U/02*": '-%1V3P5R54X45{ 7N:< =g ; 7\0&)i"p u"}! n8%)+,, 2---O.d .-\+W) i&%=8$v%|(.~`5=[(C]HSJKVI~EE @U92Y+>$B$q!Y"-$&(*+-.-.-{.-9--+/)2'4%~4#i2!e.i(sB yrG ".L:DIJIE?+70,3* ,./0/1-,zb-[2;PE NYZTV'SJ=@/O# 0u  w $ *9)tbTwK# &((&j!a( #BSr ' P & r  < !$V%o$%5&P'(-))\(& #P(}.*"۹)g.60.)_α!^r)H[8Kap)>Z7tJKifi03׮q!2o|/ˍ)ب}ܷ5شҝ)،bњ9΄ljzt/槺'(zqc_˗ӣA#ۜwu{g{"ܻ2؇ٓZܖY۲.bR,=ݚ>YhӨ,γe}ık'I ݀vjFUhPح$ ɞ܊qYLe(2M1ҟ|ߦ׫nۉdOsߙ#7qbռKA7;{ĸx%&٫v{D[$g}r ˺c'ѫo}z  C Rp eY_5r= 3 0A2F?{# )N*%r\ C>KVJb VU= h 3 n{ 6$1)k, +4 Z' x E - w /p, ]q$(G)r&D"K  !UN$z'Zn''%* 5  4)'"m4,'@Y)J (OW$_OEvJKA 98T./F(R$vP$\'+Z0 '4/65788877 55Z12-}/++\+&Z-!N.C.~-9M+7h)m*x-^4 <YEAL$Q=*QBO6{IbCM>;:99 8$w4$0P,)&(*/Z6< A 1DVC@m:iH3t+ $#(+*(&%#R* 0#6Y U t(P5~@("G*I,G*jBb#;e3.*gO!C\S ?7_4^jk%, w2Z 6b8n 7t 3 , "{ E Ho#"G #%)(+)7$aOo !E@):g 4 _nT;_;4;z5ޤ ݲ8yIc. 5N}^}_~ MqQ^}ٲޏ=!da1L(܍nJBrs؎LfTسۜ׃֜8UxЮ71DuY:@Z !ǽgݡMІ̂6wdӀٹشەn~| PnYqrݞmۑ#]z<7p*R p   r+ yw]DH/AL d  }"+.{ 8 a @ _4`"'$*0.03 6D8:~;;9x5R1T-b+a>*,/q4K 9L?CDE\EzC @=7:87d68=5;5M4 e2A11 112L ?2##2"1$/q,Ra( Z%#\#%',)) d)@\&n"o!}~&+>.!\/^'~,-h%1"43@-/*%"S Y} , (l 5.NW0.t&*% 7&!2]=ck}NNbx`#4*(0+/,)+!\)Z'u&B(& M')4+.Q70 0f / -+xa)&)4(BV( Lz&Qs%P9!IQ>2' ##*1.*6:X 7^A0.DIwLl?M K FN0<+/Q -Q7 t b eS!-{6pW;U=[;[ z7F5-3T&1/+%j7_) \+12 /R(x> Nx0 vQ|&M9e/\#}), )@! ځ!m>| t  I/ ވhۊ =Nb8KQHۤUxBϏ+גߎ6| ׏1ݞӴ@Ӟ:ҫfχ2bTy}vʟEӬ'Ӭii=èyi.弲Cu7Đf+cط8\ ̣ʹFA𻮏¦0ᗡԵ$*.۟ṟAA. dzF Ť*^O ij4bv胺Yqy8!W4*&֟GzZWƬEֽϼLm@Nɿ&dGHߒ_B`ԢBԎ؀ƛ̎ӆ/ حڣ ܔAڶ(wҒ+t?Z[x7a.v4!mڪ#|ם ؕ?Ul%NTj zw1+ G @ BV  YUx l#/ #6E!z .!("b"$%3#I _6i_   =F %v)H,D-./810 2j.345h4L24.+)\$ !* $ -#W2'32*/-3).-}!+I(o$ ! n' z ! #W3$%&4%[#$,%J6|&?(G*~K+}K-*gE&=!3Vg+D' (- 6@AQH0NQU {Q \P P wR |V^Y^ZWVPDD6J) ^w ")5& ? H =Mf rM Kp G/ {A=79W5c|0m*R:"Lr:y 7v$-$Z,Q'3')8H*;(<%]< r;:_97 5 +27/l,0 )) @& c#h#R#M&I)-U/l%/`!-c$c)%e%$"!  " $ !& % z$ i# "'C!v " $')(9&")" F14< > 4Ga*T]Yzo fG \+FJt>#>#>b{\.|z^ x|o {   t N&[+Lܖէ21v)9.ޓYسZa~s꠿hdgF/x+n?1.ʾŞ^h﷼M~ºz;7f0Sc'{4psW|*Kۏ^@ށoХh\6gReE]̞п!Ք ٭ێG &юcԷh}R# #3u(As]IR$g@/vgT.:Ɂ{ ݪ!J:roה֌ҍf ՠкّeީEWޤw%$ލϰv)kX2 ɍ x[+ε ݑx,d`XכAҟt%յ ݂ d>t [.hg fRC  B#7W  m!T!$P3!"oU ? {\II!(=//5W9A<(R;c70(UJo`'eO1#ڕ-6ײ6n׋=sA{GB,@Bn=;;[<?ASiB7BbA?2#- 8!(#K$%%$+ / P: _h*F4o, #F"Se]@H )sT<$3XHۡ 8BTڵԁ8DF`1͌?M߶R ѨՐu7ѯ.,|v@`R+π݉BٌGʷ1ÃRܿb)ـ˸^˄ƒWWϷظ֯LȰ]ب9ںޫ>e{Eج , y^ Ź" ̚A+ػPPSX퉽qLFw P85Hdԯ]7$Ϧwj~ο)З5ҭґҭw[&,R8<3;=گf҈9Ͱي?@cr ]Mc- 8 ^pm7ҷ틽;O\ۯ wtq.2Q5L84DY=#v*&-3> 5J 3 /u q* _%F"" # %(+o,x++ B)P'C&E&v' 3)+ -\)-K.a+-o(q&#&00?|: &, 628H<T?AUA@t=&{8,%2.+r,#s$ ,!&R)*)"%!(g<.2$26*/* $VC  O ?"#l(3"y3 <=vG\OgTUR#KC91/R ~&q!~!;%D^-X7jLCMVc!\%_0'~^h&[##TK @4*# +! v\ tb!z($/%7=[!?ZZ>Fy;/7643[3Q332_.1)&"p "C  r"J+79ASH!eIM"DS!: +F(v 6gI(x w `;&Y$,(K/A&0X /z9-4))Y$ ]^""f  o#$o&*'-}&v,n%<'" i~hG Io%"!/ { ]e Q9V$"T!o & %E9>u/ U0.P+0w| "8:Pf,<ډۚJl(t!`wɞï )\Щƛ˛G=-ɸ8ƳF`FTܾڎ:υ7QB֊ ]v,t{ c~f̥ܩD^ %icȓ dpeG[ M޴ ,~#C%߄۫ "ckno WփјζP Vm@Y){ ƧkN/]Yeģ>?Pͦ}eճjzk0 a^\V[=ڥ؄OKud{۹bttB+qb)1׍Ҍ˷f߾,)4ΒeA2B0z?8kpaX蔿O#蝲ttILB BtX|N `o._3ErٷKDCS8T + bm xwr V8 <N#}'*D*)'#L Q`c&!&+@/2&1t/d-++@-3n9l@vEAG=F]AB90o'i 0s"'L+{.w*//.m-%7,w, ,-%...L,*D+'J$"i" )",i_+'.! z< ; =X ! ~#"0~q %|g+&0h4^54c/) 3p O 3MC & Q$-3,]4i8/A'GbHE|>y2%]a4 !)mb-g-;)]y#;,.:2EMQ P!cMNG,@b8Y50)( ?r'X!2a%=i)F,L|.yN.OM+J$yD?r: 63O0c-N*( 'J J'w)y,02I211. + '% #$f%g%R%#= 'Zv!'*-I.X..v.x---F,T=)0#hv\8N!(o-(B//f-&*u&!=Y` #9iV u_CTIC^/W XDQ?dkػ4F$)j#objyڋ{DqՂѓ9$0b -a$=6#%hv+'O ֫PфΣ́Ӏu`ATKS;~{L@XO,p\׷mExy1RJϷw܃f. ̨m٦$ݎ)"}ӧeͅe`ǒrWG̀4!r9 jщ :ru:NO|ʣpHͼˤ2l̬M\qtߗDd]uXs]Πx͓ .Ͳеո܁tGCb\LD`8J,? !R##?+(4 9i;;::<4>9? ? CF51d!L,#(#%"'!KGId  y 9K: #U"qeY8 mmC A <S=2ZnjQ*zBb=VNOv$=&x$3c2wF3oc{uwK Mد?0Ȳgv 0p؜ ;)(~ܒ#%ܒ`'n0s0^Q <^^Dٲ>_mW?-6fy׆@v3Ͼf'4͖ԩkܞ0ԩ>מݘޟտֶy{+ ~OK{4L|ځ0}Ks׍$mqY`ov+H o6C8ؒ̒9Cz܍ͭp)]Xj ߍں!d'dxג Vٰ2:PCHMF!GcGeCf p=jv - 85>S:9 x6Z,Q&(,ރq4xx x4t ^  l c,Mvn%xD*$(5*j*(%O"'!"A&=*/0/1+\%;6bVy5 GQU6^z,Y#-Y3Mb41n+q#- s %:$yZ)Zz, &-B-v+)'&E<%Q1$$w# !#`&z5%A h 3   I;!*Hr1.576I3.V') ?>s!) 2:+@CRA=|72,/! -y-&.#q/ (/-U*()&!%    LV\=E n7X&1/;6sU;O==l;60 *"|%$v!&U&[&Pl$ ""#3 '+\}0$548f9"Z9?$6&t1&*$#R `Y   !S$&&~(1((B'p%# k! F3vV  nAX}n [hH$,'266!51. */(%A! "o[ z & $rt&v+j -+D&3 w=Ef w^ 1 L٫ ٝ%MCl`0F6wާ})O1*֌O Uj Yq ey vZ׆RjCVXj ESOננqXԝ̶A~aa0VToM( ׫5]ЈQK-ԘQԢGd0Ϊ.` ѫ09W%شԷشЏ/̻։Bgz̦BX:rРeٻ&舾rlvEA7 (ٲ,ϯӿ;Ȯ2:pՒ<*ޑH_^@ṙфՙb0^8nſ ^煻uNʡ·gB^鬾ush߆%"vvRϖ1o؄Y1^4̨Tc ʎ0nen!e, 6 -ҢC0 OW)c. wHZ(nP`ܷzٛT    y; i .1N"$% N"VT ~Iq UcW5 F6xBa$ mP , ~ ~ , A R }BO! )05p .6 4/)s#lN c #% ,4;=NAD FG#%Ee$$A#[;O 3c,%U! 3 $2(}."S3(l8+=<*V@D&B EGFFGCP=5-U%[!"H &. 7@`"F'Jg+J-HN-cC* =#7y/X)! a"J}x[, :$q-8~BJ$OP:Lu0E ://Y#'  eJ,X } #O.H8|AyaGJMK&BHaC=;o2V)J!c"+4Bq; v?XX@c]=7-*#  % ?v!G sZ &"+*l1[6i883 , # J- O5(\*dxo8K7(Y'7JJv*]sM=#YT` P`~|OzSP0-xڐڣ n8ߍPop 3b`bݪػmբJ\xDv|NQ{3oj hu7Eҵ:ѫR(v?Eӯ)3ފ Uݎڼ׈7#S@*KxQ]̦uȦJ/ޅÚߧk)&iT~ͷ5]|G *dÖƾyϊ] ߳)ǥIɢt3Ԩҳ 7GľnØGpڐbhYSmI IU۾nהӉנxػYܱx݅g޾swJ@>nhe"cz_ip ځ_?rފi*^RWԦc D|ҫ:ROX 5zi>4 )L ,U %v޵ %F'('&%$ $8&)5+S,J+w([$!8ˢ4Jx& ,.0 0+#W 1v1{F }H& TpoxEw0  [A$ Y,`  y #a H}  a @ k 9e  :U :GN f V f K li xm ? < uU e O P!Z$&j(+=",L&P+Z'+(8##DBx%O-]5;>#> <a72v.t+;(ue&L!!$\!""k[v= |)t0/V330L*?$0|A c ) b 'Gct#[\'C(&"BlSbJ'- Z"v2T,Vj\h@( h H!@ # $I " A5S@G$!#1"y(`Wr A O#LI1 ! {  A^wU %;(C@\/O${:#t, &k j wsѽuьݸt\,$!dTs)& O޾u | q    4D7ni(^ޘҩ֡ҷ3ΞQ@G3ևۇߗ3aU>&RҏY̥0gJroZsE|]Ԕߋt&VP843qC@=./u-e)t$X5zo3/#KP%p%$4!/Q;x#'9(x('%y$!;!t$'u(A((1&$"J3Yo_L  *`!gq"OE"X!t34 =Ft E# %x&KK$dR Q v]) 3!" __ +wY7n>ON]cD-gG 5G{ w?  8'd;%)I,gz*m6!3P?BS׼pΨϨ,qמ'G+v@Dj֐ػb*Wx5O l.bAsߔ&XkowTߗj# Z-ۡ {[Lt[.li;ϚީѲݶ~FܫEA%55ܤHЃe>% ڋה@ָ](@$eբW,JBπf$ t<": N"ĝЬ׍+Tފa1ҮӱwؐQ qw }v Vj ~ZESQԵPAc،gЛ'T5A2 B؅ރ+ߐۘa׈ԫw#r]\pm8|qW'B4>gBB;ibA5OPF -= `:yc E ,+ &8t\-2C M!a$tj&(J&2$\"h73mu#YD @J|W 5ka(om(' z 0 ?]j#r' ( X%eRs + *)p15]3, #e 1#e$E_z!l #&m'J'#'M&i$!Y(Tz/2[1-c'0!%,H2 _8%e;^*;.9a1|42h.O1'0!0-0;A0\2&3M4F4 3 #B/c&f*.)$>,n/'232 .)##i).f2? 4P31u-)"$# (e+l-g.x-Y2+((%n ! 'B {Q If Tn$(7+}- .t!.-G,+#)A&$aX"!(Q Y l"Z%O4)4,/21Ck11M/3..///.wN+&f {?$]?$'(&%"o vأo7հ֤e S`b\Eή D̄!x] Q >mabʲ\$Ύ*S*FUMzf`$8[~ei\nP ia ڒ U׳փ<.~tVݴauI" p K.2xnڨӋܢWבߠfس֪6χPTtٖ:ޤ˥sӬݹ@ɽ_-T`+رۦٍܼb&־Йư {C7'fŶö"şσǴK QܺۀՠX%@ݦAw;N\P162֑{2sEuo_.5X+d#GfePY¾.Wbԅ|x *pK<d5ܷjӿ'8t+̒ӕ$X :DXXڜs.xWs qe|o04' @!(oA;@5!إ#$" d; @I  "  Qh CXL[ s  !{ "5 Q" # # "k !6 W2#c$;>*729\7=?=80 \( ! 5L "D$ V%[ %'m*<.<26!9Q8m4-sL$$ 5  * <v )D8\Lw#"'V!)o*~(~" O : z#!m(q|+$d+c,p(3$d76 8X75Q37#0(. ,*H.%-("'W  ~  ;[ (x'/-4e051]3/P.+h&&9!`%!B %8+0q4nG6 A6O3/++ "& $"1"3! Y:R DF`"Sx $ U$Y[Ap m%w2"R >$4:7Q ]a"@$a%%%\"3NVmY/E,Y.z- {`8@t|K =O& :SPr\ uކߋa##( mv^i)^):ܾ׆VӚ%E=4 Vo)j{?4q]-jWُds /_Cu)h2 H'Y!ާ8Tݻ|+܁/۟7EڧڳܔKܱ8q۫^حmaӺr˲ G2[@Ћր*@xcg;Ij5փOv/ډ?=ݽ:߆@"|W us1+7` hM^= ϯӻ 3 7i/;6tHR߆mO}Q>I!]jjf IN, h& L=L]5) ފ!߄J߻.Q;^e}t!p7 /?F FQ s(b,C+'I!7Up%21d o >T#KJ8w {8CnG~ J`01^'Z(Vtet\ 'Q /HX\ M WXuJ::1i|> \W5 t( - , (` "j@@>+@$X'd*k*('`\') -&O01dj0-;'"H Q "(A1 ; C FQC = 5L - ' &>(cV-&26A6+1K/(- K 0yJ > f G q'7/ 2\ h1u -9&  "^ &DMz1oWK8o,v=M DMb4;! VHFp`]ChM G W,  @; tsB9$oo_ \wC.G<"%# RS <$7f6տ 0g׳A@hW1'L^5$ +Tr ڒ[8+Oߠ$ݬ۟Gټv9؇Bٲ('} R.h}^.]ߒn7~nx[XCv t)N*eX] |@;]Ja<Oin!5?v7 ^Η̱ٹZ^͘g;ܝ@^pޖۨأUҮV\щӡ?gWbhb;o{!v`J <|ə̡hҳݱ9rߔ{ I4gjcaWY8,!.:A%NCPg5<31v3|}P)133?| Ng$lx V' g \XlF @ lRYp"  p*J [7 q  _B?  !Rf   n"(|~-^0f34# 3 n1 .)E#g m@ k|kM$,5~ -<-AfCB)?b#:Q4/s+XO'$ C 83!' 0. 6 =$ZBuD hC @O : K48 ~.p *C'M&%%$W$X#"L-!e!!"#$&J#j!6JU A-q|   j .+KlJ  & vS % mie  w / g uTT   Y xgm4(y)=;E[jQf r c  d l  C S> - G  Bs   & y m8?yTy p 7N 18S 7.N^o:V7'SnRQx)@2. NqK ee7:3EUV [ G ,  `=bޖpݚPlKlrݐS"ٲܐ͢cյؐ8٤@O%+Jly@/oc] 7ݴ؞Ն= <ڙop}cb vgl ўB:"΂ϲҒ6Xa@,2*F';؂ Ն , > y2  c Z `; ؅]NxO ۰Q+>݂ kԚϾ}lzNc0-vͮKw3fO #" Ӷ;wp'~5-ZHi-\ OY,Ub.jT%g?X_@h >2l< | >G%A:a &;N7pi1g~F2S#&gc(+"'%"r 29PLQ@UܗF c-5Y1g {bQ4>VS )/+$H+:0 ~1w/D+ X% /pV ! B" e+ @~ 3   { p  E L \D+2,xhrr MuN RqVz7.y " #%U?(,v27R;=J<@71?k) R" ?  SL  s 0.f MnC@ 9 r  uMwt:hx(&/}+A'-,(# < !f" ##$+$U$#o"# 7k5Hm{B 6zN$33A"% &-%"&k0(_ FKVC 27Z+|UoXhCokE5#.dI:IG^#yrې0_єr% {&,i1w)K_=TPKn.  ; ~ A Iօ nrԴV8n R4Lߞ rn R\v5W#v>3' ߽1z_4t1(Xx4K 2:+gcQ60tLc 3J9>ώ گl ]HsNKft'QI%BH/66N = hGA(QڄR٤mܻ |N4Dt?:w%* / fq HU J fVzDR _0L,G\IIKz 1  FJ 9r [-&@' LG e`,5  uf s pLFw</7q*qw,e H- w2   ? -     , #3'[Wl };n  7 _<{.r |  1F 7 7X`  F xQ  k!( ],q12L   _B | #[=cdD z )?    d  )q#n(V+--,L r( $r C\m)IP2} S  J;^& P ]`Z}tNWU"RIa[NK 5 = n ]  Vc <>xu-Q  D I $  y >O R ^"   o el.9#%0pz`b3` ; O8 Qx !:rd'|e ! )! @ '\C,"<g I}P"`>)f210JnT._ )tg2܂oYXLE@l7\~b:];O7*hs@?>ѷ }3Թ*Ӕβ3΂}Ϭw@ߞ$ =QWJZZ~Dx'YOm}ݺE<u_u13Xߌ9&AgnКЦpi!O@{;Pv+6MMkE{}\c#S T <@]v6~ W|Fi}" zcs '?8D |$QY$M^_K < 0 :(c  h rd/ yDhqQLc 2=)a*?`^ t U"Y G qdVMp VS @ >)@`+=UF4  3 i &k E$8 3t CEl,  L ) Pz > 8^-|  u &  9 l   GhC  ^8L;qBd{ Q=jYF i f6 f nd- x v o Q A\ o | 4  B(  j 8V \ A,Xb9 ? da ' 7  )_ u -,v9|mWVo=wCpBf . &w f =  %0ykEd?0Ocw {(;c*X&T\t#\n /56Uf#"fNZIPs^rRx4:k 4B3Ucf E8A$nLjFU{}b2n3|P& 6HP%${s*?y, T|_Jtod8r')]!d0p-yN1v6{6_*S,2 ?S &8oRw N =EHfPPYT5 {edxH4+@(#>ZQ^MaG "ysDF (= ]&Y*hcC/cuVYPN|PSO+C:KJ  9&VII:Cv 5 W S $kWkwW*o 8  Z  * & X R*Bc8>  a{!CKi2eerRZhvWj  ?:V : /  xJ!T(UJ>j  PM b# f 2 S J  [ '[M8  J   6 <$  w-45& >.(<i N+ b } !2 V;0`]+O{VeseH<z E a W   U G: { F |M *V Qw6r9uh?ZAlMY $ _9-N * EzvQ ~  < huu $j/gsUCAM2X?#QiYy#H8_ M%C^W'CZ~zesx[crW; }[7u#".9sl[Q6Uz0wBzCOusia:{~W*CT/PH^}9ds@@l{Sh'?q%)i,FgD`!d>t#JQ*uC n_E\~&P6[:03K,h>S ~e c q@ 7 = U&CM~ %l1 ${:coRl,,gq/DI8^1 _ A , c h " :  *. v G + K 5NY<qRbC#e.Tpw5 E rIoz 5 o " m < A 1 7   R (A B 2'{ b   Y 0 q ) Jr  b!$5Fl& A. ; Mt !k   9 =   l 9  3 g IyG BbUESl z!1HR7=ck9GP5`~ - [L3:\  j   ! _:x ) = W0yw8&9+8PFTDM;[Om]{V0!:LW`s= *i /NRI7MLoWe8SxAYes^ FrBM2\s7Q~M;>TpeQo dn :xBaUFJ6+S &x'5MfCx{"0g^Be-?O"dqPU0BQI}VD@fdPX%u)55M3/.4I:Y^5IVhvES>Cg9ph0 [E XM 9^ * r_ V ig=%1fLe^L C~d8 P&04LS1}:4u*Sn|ahe8Cwc+t@ *-3l6:B;OHa3xT{ ]?,%.B[ka8e8/<+-^tHWA^ok9po[&4A[E*p}weN%MdP0/UWuX t 'd<J.}D!6*pBj+Ol~ZLovp{?1C|u,0Fx`B\>dS7.<G~zJ_|5oC1E S}wl<(\*i.K;7gBRfgwjv5fg }d..kn }F/rbU@2D\p$y@}Nbu? -vEo}*|y_ZIGn6oW$qt2&u^BK*;h~VkV]bvpMZ#hu7w9K,.q?9h"82He{Oq(.Y0WA]54SM4A N,fDa@V UEx.S- w{J#{&8@h+LU!}Q%bC7m[E =eXMp"B`V)I3Fa%eXi!%0gkMu8X!7:UP&b;Yh4wi4_r&Q!jO(  wh %h  d]u*<Xg:yVe 0iXcd"%c Z: )E}Y*Jut/=nPP]%(Pnc.@EQ)8g]L-GvW]vWyWsF3?#f (Sd>uj\9?[:9p.;O@)FQFsnRb^ZNZ4&d:6X-.%XASk -QxAOe-j7*elU(DD :g ~wu E,7q@ {),t|WsYcdg'U+fL9 /=!\9RM]l~)]y@+\1p\Pc_ Cy4|K{/U,LWp+j RUP;}IhK,h"Wr8i>S$sc&sO?/#eHLz>Byn#x]4Th[.oq3b?iyD1={G#wbv '0JIEjl 4n0I:1jE*@*.tc[*BC4&LDL!Vr^W|;aN5(J U)hss,T"etL>L3858>-v_4rH4%EYV>rBZP/K) WbV,e{ xAe; ~"Fhq J= 5" nv1{rVnF-H&,h fUg0D{=&tn1HjvA(AQj n8=-p@y;m x w z $ 9 W K, >ELC*rhXDb`J#YsDEnD}lEV4 "  I a(x{Q^dI]K !"!!""!  2XPld {hmf E d K 2G[d9J]_S^8?r3?8fBq(?^ Cg!m^Nߚ߽@hMTߎOܩcqY]nkڊ=ُإק֙ԷCfʮכUInP߭a}F 4}GsG (!dF+}"kb/2&{ePD A #~!,[?AJ70MZ>3< [ $ O H 2>_BJ *"gX/J1@tPMOU&0@d  Q ! | # ( o  ^l'%S+x2z #@#"]$&%U%:''&7&'U)+,/+*+\+)(/)**)m))(' &&&$%:&W&%%E%y%$t"!t,l He)oRK_i2kD P H " K - 4   . = ?Ug[1v LGXYR^$k_Rށݠܪ| ڽٝqvYY.$ #у}ЋKZO |aͼͶ·Υoϰ'Ԃտڕ|.(ʖB׾GJl$MGnZ5?9M6f?5p,~``n=e=[e ?WWD z #d+r D!j!X!! | dd]| ]:eV/ 9 R }<]JuO%__QEc_WOh'D8FfSR.g s < .o7Qz&^m^R7o4r#(Urq67JW `޾ݬ'\ڷxH_h֝pԪdя;ѽДЌyg[P2&;/пύYMVJJxqє$ҹ4\o-hҘЀbe\IN`i O(q-YYU33/< m  `+p  q s sl9 &-$,2 p@7gqJwj}9l (i!xi}x)4  m " 0 s7-Q]Zth U3+Kz{]aQ6Ms!ch.PEckFc_ZE5=l( BEy-a !%"U"""",#-#"""J###$$4$$%%$####"&"w!  %DUvO>r&)\ a j Z  OJ4\g  AR?P\QZ!hIXxTg"Brݵ/ـٗٻن٩ؐגֳԊlI2 Ӄ Ӧ;ѻЂA<ан$Ый"JђsOVԴK G֬2]nڎۓ܆QOqA # kG&03ZmrnlGIV l+m6V r   O#;~Eav!* _7R+F7[oL;h: b4 0mtGL`k[,!`kGiw<k o t K   a!<U RGY8@pP-?LrowOVD{!6F%or&$x``Eim& v#vkl4T""ZpM D0S h L '  T (!6aY 50-!. &$Z\ Z X ?  2 o  k1Nmm~pt+N' X*4b&5z]-@(h~T2CUCyC`BߡZ+ ު|މzDLJ 8[JC9?`ޠ޻޽ ^ߴAhD6:^Xth t-\(P)D Fw+WcBtzUQ;7 9 . S ^ |N2E8u`MZc'3U`bI'.QROA|L# yU)] |Ht[ Q P  \  ] H ! }9Wx$2n1f;uF1_B%^<  x@6CHE9*0Fysxs|+j~PH !>M3PM7Z-,Q$?6;k-$?dCBJEV\cN(H6 p?) dO2d@SJ)]0n, `*wB}k:-hC-Y$jB9#o,R4% {fqNgSNEA:;*$ 2?LiD4Y/+SwXZgfN['MK\u-V} Q~Jnp)/n*;Rz#-.Qp )=;Rhsty#''3<HdTEEPNffYj}|{l^W_teQOf[GOK0 $|uifygfjsggldY[dRFROSP]XJ?E`peIWob_KTdeVVY\xulxjU^~mf]K6.CON@9949oZhKjQ00,XC/}ifL70')#{WMYZNK?;!! |x}bUgrueXSZVEPhfO`cNQNNQPN[sY\c\[z~Vgmey~~z}r{zm !+'!/,$0+K[UaqbH]odPZybZltqlukru{{hmzxRA1(9hi)2HMR[``JROGoq{xyjopcAGioSIqe>IJLTdI?4.4&$8%*%!1  bYXgmWXK<&%)81l-jFN J? 'MW y sqq EF#!ll1JcG.  ;OV??5   q2 z.y @1]fw|K # W`)   f `SG~f]kpg U + z; Q_X 3CQRJo,9 Q /h  F B  Q1uI @-6  ]^\C x`i O9M8(' {5#7 @Tj> PsLn ,XD  Vib+7 qyp% I )}`hOsxz0;NT6 @ 0E * N eRm}  / `<{g COxgq0/WG 3RED UfS%,D  + 3Rcr-s- \@ F D{ X 0CT'Z.+ @T]*P jf YmI  \  `X*p -gZS  W !b  LjzUp d  h * Eb?iqzkalWh:5J y t KB?wQ@ 1 f*:3dX&iwESDG ]\'*Js i~i6qf}~ Gp.(C;KzM5'S$t>tSLUNmm4%c(9TX|CU20-@UH{^ D ^v3OyQ? 4/ I2VMQ %inb' \  / 2"$F ,\L6n3(^UTs0rr8*l@-cp4T " 1 fO^6Lj!xpM72C[Ycs1 b%ZJ,R<L\b:Y.1  c {uE y 2 y!Cz _cP\R-(=t  O`+ZPfN- m 9\  (*\g jz   c n5 M 0 [h0aD| * gy1 q  Oip)5k ' ;O   Y8_02S %~ Vu H|3N~:^8Fr " ;W^d[?07FgiI&p| ?tgk`TC}]F R>2fde)u!\(4Mfl8 o jVkFP((  }H/ - xrSkN6u_JG1}~ td+f(&(NWg%gRSE<e[Zr\Eob|eLg`h;FS:y>4UItEK"Yhl,|=;%#^aRnzwRE } (>:N+J=V, -.G[CL$$A Z+;M~`0q*QIH, ?@ w ?MW~x 9j[!dO(}(jlS}p`&\ 8"r]=??jT$M,T6/y@{n"]RSY3* ,=2-m7apW4N.6!@VdDzl6~]n;?KMo2 F|T184X$%`~dEz & wU.RMB6ch(iZfM i}$9vJJ){ZW_9q#(i tgnE!EJ-+Up4IQtM5.Y\~6Z3)`(sv:I:6]uT^wM tpC]8lxGAU0Q#2#[M@>nO?U+"ats  zZdwe:t1/ o $ ! H2Zh/  {1P?x;vd  } N a w r % g  ]AC 7tPG{sdkMgNa? 8@jL`I -  +fzihewc\-J:;+T??xhhXsSRJC&iY{JXGHi>q5Yn%A JRO *L:i^BFzjIoWdnBa& Ta4@?]q3l!r*w*^.}*`@)E! mA|^nKJT,dt<)1CzcZQ; } 4   m  |  O5Bh!w !$')*,b-E-Q-,(+)*)+,*)+--b.// 0S00i1/1 0:/ /$/:.F,**++;+*)a)x))(m'i'p'%$,#!O mH:k3PtrbVb` s  M8mf8@( VTݹXFv#?޵;YTj4YIޱJVv:?-ߞ8$sd8wgJ%<cʄ'$Diљ8֤ #!k4Dؚ҄pFD! S;pQ6\ K x  1 oUJ < qVp   G 2 q`ve{D`G^ tNq%^-2;2= nT=s"!m">&&%O&(,.S-r+-B11.. 000115/-/0Y/(./1 272Q33333n2/f...-,*r*i*=++ +!*+,\+)0(-(.(&%%T%$#0#" . 1ug-~i7nX m>$p.!r$ 1xK 9آ+ 0#*k!ԅh߬?z z #˯rڱ.z)ZO ՝ҭѰΈ6ƶĴ\jä!4/~ˠ̇ky̟3tNen٣s[;S1 3$&*k D  u AziY 3( )  +/3CguwHU'ڜ]ݭݠޤZ*pl۽A` }95{Q4 / , EP"N$-$ %(+++,'-.-,},,,+*u))('(=(V'&N'l(('&T'G(u(&'\% $#!" if5B9o;%3kLhI3r_vuaOiXHbd:4#eqx r,߶֡6 >#&$}Lr'#n"HO  EV5**9_Wsʦ{Nױ WġRsƂŴœ;ŒoՍׅ^uҺV`ΊB!Ϧbѱ>zҗըK5j8Lk  vK8 9 Um9b)y  /4z4MjOw^5bkM '=;c HR r*M: ""%Agfi8G}3bP+$A#|"B2E&-,Cc43[? M  W7Tm@i*G}Bw! 5)Y$SS*z&vW,sf6F{@hg~.X [X\nd/4r! N"t"4!R k ck)lPds0X: Hi* #()$D3ӓͧϢ7asqFb+ ޴0^Ҕuh>ϨʘӸۑڮYlmҋooUcbԵe̒;]ؑ]KgvovLG@O \ } e I@:'I 6ICH Ba7 +c9S+l^}DZg_4:E;ntrUv45% ' w $?Y`d&65l*4u:QDLGCfdQ * J w   d8Bh C2\q5$'k\f9^H!0Z v>| w @>3!%))!@(V7ٴJ5] ivbg_sڡ}Pu>}I(!$ͯߕ[()̃ЛՉܗD5ܣ5pQ_kئ(ԅ?`9zx]{eS@2J[r{ TXI 02& E '>5M%C/$/@ #4l?=NߤP>!]yf+_L&l$?R n y >`~fe`RoYl*WUC.>=*_/g#$iZT&zM IW*_^]@ aC. @JCb Q1R/ /}$qTm(]vٔںYm~8lڥ d٧?`sL+c8_Fߡi!V &\|Es2Bo; `n |utnIV$oS9Wo% K5]Z/T+:]7Qd`418?A2F7f[HGS_PS>D|n m  UmZ6 Xg]a)vJV`[n~"1Y`MSQq\YHZCXg9n|mHNi M J V ItWBVX]f=Ns7%qq`@ޣiqx߭Z1Nސ^C[@N[}HE ~EJ2(tgG 2}Zd )oWqqK6ToP+Ma>0$ (8w !ZDNG,UnY {x &p>WEW-j x / g=v6)GJ`bte{ A!! """#7#=#'#"#W#{###N$$$$$%+%?%5%(%:%B%K%S%:%$f$##! !Y @+mD*Cb9 # !w/4qRQa_xN{%7kߑ`ݸIݏݽV9܄eڟڗۗqzޘߙeA&y4IObL? @ 89lo_@?Wn.H=?^I {phsL(!.Peq39Gr3)ewK-EC/sKvj^A  %|q } , (yjcE a&pC@#z,+ !!p!!!!+"n"""7####+$3$#$##s##"4"! U  h;/NG[,T*SNduaFaR  aD. scUWk&(g 6 Rޮ13ݻ^u\'5݉۵ۃX۩h=ETG9=&v)(e3-Nr{V-_Jl?+@l`_V >3,7tb>0/E2=8el4C^zo(xv 7qt-O^\#arG8qP)A G M / >P"\Jhr"4 ;)}/+ !!!!T""""u"E" "!!!4!W!i!!  ; MKiF\p`?3|YwUnd  2[&d;9DOoS/=sLn SmOc+W)bWA~ ݂Pf1@/݂7ܸde܃X4L*yq z.TpP?\fQ>gL*!3(5P`PuS{N~rP [%f6w2s {Q`Y)lUy[Xxk oJg JX96# D B  e  ? k k ? e{fyQovS.&B,evN $k8r} t  P_> Pd" \[-^C+ak < l  6 W T I.l: 3j]bd$x-m_7SY4%`<|U%FPh r u;>+54 jRS6 |orKw n G1`HlpJV=3le`ֈD5AK{X(S&߂L;<;R/}=o| lc-gjs9- U]g &A| X% N  k j  { t "'o' 2 X Am Q>}>+<2l~1GV kt}GPM a qGxM+Z;FFDp^hho!C! g<w >_mc3ucP"5 o f8&qpz\5VfLC U M_XV@-fUx8JVպ׶wGhI*ј\ͬyU\C8Z$@7ӟtPDm$kf 6Gy1Mf#bh`% xx v > lr W1 n ?#aYAJ AO OOW" j RC@ ya` ?~Ej8Jbw308qzM7o&Pz+j Uh Hg4`*"""#%%C%$$$$##E%% %%&''=((1(''&.&%#$#^#"6"&"!7!)!b! 4-\   gS? P5a}48HkuݙcN@<Vpa^՟ӏOH0"-L &̸lh-yߪ*gA٠P՞;U߷7,,קs؇ H: ]J-0bGU}F(O" l v@$ ~ 0  ^!#R"Jz S[tgYKmX L(nO[ Y,|@B{Qul%8H Y&aP`dC }/"<NX )T3' ".$d%&'))*+ -S-K--.--..--n.c/0D070;0u050g/.-,a+*)Z(['&%1%$#s#3#"!!a0-tLi6 ( R 8  (y7)-\W,Hd7c rb( fk_ڋ' }98 go7E'A]cpEpK @ ~*{l BzbSe^K1;g#J \HzHv1z=!VD-uF1Z56$:ao 3Z,*7Qq6PENv58!fU)p h O  m  6 V l k K 1 i ( S 8 '  7 n =&f/k?VmJY%k/?r_MK:^}o3P%oKba: X\ THX2u9 >  B W ^ + a . Z  #;HWfnyarhxu_E | N : o U  + D P 2n.` %;{PJLGd8OGUm% &;FU"~\ 3mE7)4Ifj#6r2&qP$xkB{,IjC>yZg9j'd>n ,YD B  R r  D i    1 7 2 3 ' ~ ] 4  v M  9 ad;VAg|`TSktwmd-u1r+1(GsM>nd0 ;e{>}5j.lqmeR=M0*(.@(!2k >X4G u 1 , k " L p  K o Wf9  i  B T  a  t  e C$Fm+[JRFiZ3x5U0]BOux@EvV2[1:V / C s  ! = j  \ v { p " Y =  k >  5G,@y\&62F3WK{ ShagMy0BD i5}opmr0n$m/*KqK#:u$3-CcTMd)o"f8:yC7QN( q|T " b . J ] 0 v r n -"q$5;RYI* Tw~mFV 5 ) r ]  5  XFG0#FcPNQ$0r E/*~nA?3&Zg)p!v ? g  G : z Z S J > g;M9 0 R&1D#7 / 5 - > G y M L f ) #g/ fx`#^@EG7 E'/wq"rc&#}+/C;1 V]sL0H1^6O$w[o3};+m VjY8> B+yt2 T ~aY!$%'N()H)v):)('1'<&%%$"!!T1t%yC) & %Tmb`=!}"ECR)߸ݢuڒڠڭۢ@Qޟ[KY2O=!&!$  = %Oy!-xA !s#$&:()+F-.w//i000y0 0@/8.0-,*L)' &c$" ? ;z4tI 8RKpq_E1BXf M>` A C  e B y  gf t\jup"W!UIT=(1N) dPwrFN2d0hvc_I-bT::PnܚTߋ.tjH.`j;Romg\jy} f- =SyMX4 "$%%I$"S!, =p"h4R Hi _  ` + a m ).cc}Q:xTqxޛ؈uqқ= ʐbgɼ~˄HпFnMѮ1z"eލ`htG\#[Lm Z",Zm!!#r%&<( )z))})(E(o'&%$%*$##$%(%M%%V&>&%$#"""k"y! nVF-@X xj~"7.+w;=g<;H*eKkv *3O4OT,' C L lOY|' F=*OJޱݿrf̲mo}ȮˆԚ>?B(! 5kQp>D Uݘoq5]prlb9[U {[:,3a::   O' ] lr]b! #&O(()j))*-/@2845^6J641u-($a!'u1R  \E#:jT6,zF׵ՂԹӃIը֢vײ| VڊAtA^V8 N 5 3"#%C&N'(*,}.`0m2*4Y5566i65O54420R00091t1111a10/.B..--,x,\+I)'&%#"!p *O[s  Z[XAQfa~EG7|# OIb j[26ezq/ (RXw` C&,dC jH\s Olc85iߢ0ؾՀνɷijïö1eڱO^qs^|$BAgrߜDm`y5j-nI3Q 0Q٢$ܦ6^`<=-N>\u `'G XIq t"5%'((-(&}%$% %$!$##!`Xw$bq<Y 5VRh>4&(:ؠY7YzJmC*l~f`qTA~L0*l:2/r۽S׊Vmԩў͜ɫǞɍ ܈Lo mv hw$gP'{k=: F=F|Y,+Dޝc 7e ki$2{-&\  v{W~R 7#"; p7%YF O g*n~q=54+vdߩB_ ^ 5-Jd:M2RL ,6p` / B!"G$%q$G" O!m#&(*k,.\1>33s2/M../=0/Q/U/000/.+))''/'U&%#-#"/#7#!HD*iNfE ^ B S  _ z H j   M  7  B 6 T  d 'I   % > ?  } =+&2=_\kc ޱ5t&bK,'/ &_\Q mG_V5D;v>.Dv @Z Q ' Q O  R Z.}qf% )K  "  ^ {t#_`]mJB"=RHmID&t5:*/T.>UZ@    =C |wu[T   h"#D$$ &'((0(''(b(''&G&&(()(( ((((d(':''L'L'&%$x#""""!x NG]d 0M2 t 0  5 ALV [Z Fh]9>mW]i0+ @Vc'pckb~ ^8B_(o9wY/jdٕ߳JQEޢb{em߼-! 9Pv&bK@un$HcRM^D, A#/Dc~"w?7go1g]?kN/iuQg  #*Nz  v@ z #   `sa@ s Jh e Z $ }SQdV~2 ^ b1  RS]_ l 9 @GL Y   qqGTWI(A08KCmzn4wc{8FVFkC  UU p Te +w3:py  xVmO.8-xi\}V.j<|  >7e$qTg:sg7Pz8h BW-ޤ%Pn޲V/^o+IN; ^B0 )\RE&@0  @VH  Q 4 a   $xg Y    5I b8|  q;\a~:|2 D[;P Tux7rPko  ZZV(h*5 8[\k  : i zSV? 19_y27 Ce1'[ \m3/ v*!cpE g?:|HEyw7u / ]1 P&!SI7k ?hVs_A,o|#_h $LM r$'E "hQ@w6y@ ,f = )6> %n U Ysl T 4P4 e# ^q 3 1r a cd_E  q4 A= @ F tp9U@W - E[ 04. 0 1$?<  |[~v' W "it? G <+Z.*M iA' ?'LU O /  T.K = lXx9 , /JB6R!qO. 'wt"uS:QBV,tG 6<'D @ )1q )@A# E _fJ q'ZDJ,yO4b # ^/X l12 r' j 7b Lb_ R wR < e/c   T+(~I  x+ :t f% 0mo 8 ZW`Jf} q  C-w NR*6mT{quK,$q'{  kE;32 Qg +  XX t1#4D ]$e zN|D $4+UIx)!y zW\6 ="L3 & ^> |08~  #(? /  T4TDXdK Kt% $ VPg \).FS>  #b ^h` <J rV r 1_ !\m7}5   n :Y*awB6 "/ I uL wKc pw{v7 @9NaR(u7Zx< 8L n $H0PD 5F%#pJ: ~ J@)Ah if=R3\ C>u^"{ 8+U-j; <7 ~ /Z.B T ih"  >$jG; * UG#6 e ` p%_+A4z @ c& H )QP,`=,> h!2|q^ f f b.)z"lf^ u^`l # > @ d)AG%<qK)b ^W2JMn,cA?{>LX.j N 6cR!xG$OO)s z N X% Pw}VR3 WUt(TvUD],AG6\e6vYsFe[7pGa_E4dHJdSUo |0( .v?8>`Ru!> _9E}E_W$ft!= MFu)I@g83Co>cba'&BkcFs{{6k["m4Dy([?LX/%|eS&7%O,"% AW  JlB9Mb \ % i%-6Yjx%6"!4(+v]v.jJzG c I@ x'\ = < ZD n&  }Kirw d6j: 57m /@9ls2JN  :e} 7| [ a-S j +kk~GPY] Jt|%;(!iQf s`q#i I"x h-N8f; m6t)pS. + pGO4)g ?pj!bV' Z io / k  } q l) i# \q5S,SB~@P d 9lP jC ==QeC r RW[  {Kur0 { =`.\\d.`M ].Dtm{JHXy  q,2jtm6u ~1.l4 6 ;Z'O_h 9n<5 mqk)O 6NJS:)f8 5 0 bX 20y  l ~ gx  DH+UO ~ QY ri i B(V e! -jMK[Fe4S qOy@-_ }  2 f;>B #O _>roA >)87 I i7m %`bsfO,]X  20y \U __E = }j7 T]] O*4~C,\N A~ Qu EObT \  xI M +x3 3Ln3  I\7 i> 9Q' vm2  . 4=>c Jf'Az03&J1 qUS& "wY E`iMnAQWjDDTM9+>" '+* w\ }VM9;`, )Uc =YH :i)Y_Qo)~NB9$nUDn pjA tDs< y6 "|llFzxp-){E k fkoW7]1x~J ]\WL&8ISA_F>Q 2  /;>xlA\ KA)J?vr5= Nl;:3=G^.AW[u:zp7 W,i .w/| !WxP9Ve})Xik{hfIml|boL;#'d OT.;M; 6}5F?WP*o#T"H %sk@`PrIX*}<N4NcUKni"`n&+!1sUD:v<Z.;R'#s$|,XBItak6[l "6%F>peHv 5Cy^\~|v-.p*.}1 E   a B  N-4=f 8"=&S(**n* *7+|,+*1)'%!h  $(gz0X6@`&H-lpּؠ3-M]%? A 4)9d !"f##! Jx?; c @ &/$ :?s 1 WpNz8vH}ϊF=h^&#gʸ u ̂N ϐЖNѻҭҒӕԬّS݁ߕO@=!4l I + o &V' E d u E b l 06}6  H F _H ] U J +H !"i#)$$]%%:&q&&l&F&a&&&&&%' '&*''''l'`'s''c'''%'&&e%$#"! "xK#D], %qQڱܘU=083# S&),,+0*4(#EGe m Z^Q ٬FvƑ*^š-ɭ =^ʶɬ*8{QhK,V/ ׏pIf6%  F!#%X()**o),'%#n" #!J,@ Z ) ZW"r@Ubԏd|q/:ɗjʵ|ʹϜ6U~NLul b  '%F?*'. p 2av ;,MPD-/X !  a !n#$%%&())**r+:,,_,,$, ,+++,+5+V*))'&$#q"I!8  qM;[* m'ANI~1VFE /L6u s * X U 1 I _ QS:"ң 9}DG) "R"a&))+_+8(`!kK p uX ӏssGᾴھDĪ,96;l(شپըHA!8H@BS! !n"#$&v(L)(l& #! #\ߊݾQ6NSښ*ܨHޥއ b݅1ߥb[s|P z Xwz @2 U% ;Y)T=WkNY| v-CC:kg=(5  SZ%!-#$E&s'9(v(('9'&%$z#!P.  th : QN4QcP"D\{H"~rNRQ1o=   $UD_9Y j l } q % I M? f }ӁFƵЯk~ !s'd+.}/00,#:L _[0"rlřÃhLüNmЫ"\A-@E!-{! }2h#v')d*p)<'$"O!')I eZ&lc/x02LٟۖN \5SZbD+>9w 7 ? l;0 S _Qp(D'GjS_%q_##HDV $   , 7h"44UgG3=:   <L  GuaUh\/Z k!!!!!@!  w{B15mh  ; G ? [g  t u f fP5PM@U  R ,&I="'i+./l/~+#R1 `XkٚфYċs8[‹DèĚ(ƾk΁UՂwd)ڐ`1"4 ejk!K"!)K$yD \ ;k\}`xݮ^v,0dLe9AO/=}0zp B ]X\7Ifߋߘc3*~;$X_ R 'P H  r 0 d 5 # F(`FX6=q@4K}z S (q W #!%!  [>fh^:<GlBmL'+j,@) 1 ; & s XIj]eA:Nm0v~?Cn4&޶[uX 3 b $(O*+)r%\C' E#~:iݥԆktǑIW˜z–~[{˖ՅMݿM?9Omt~ { @Be5   (M\>KZ\;o44eLfU,Wl8hD> N"=,o tEXbO1dKC^K~HT W K . _  %(0[@Q=P A v ^ m } 2zHeXJ^V|OM3'`paiiGjV3ks_TG~>" E @ <Vn,X#.[="1G1c8<!.#9 1C l i[L^; 4,;"SÂn{öĞaDBɁmՓݺ%WhWkvcsT ^CKZuX1 %?BiϘƏRdďŶ./]7kZ,߮1~WL! 2 v   ]&2Hm_AFC.H5NidMJ&dK#}PMfNg IP#q&N_>! <[+*1<V0'ma"UQ 9 c=( [{oKQ 6/o;]8 Q`d_.?2<0&_,7 e K e ?iE_DVQ,G; Q ? @.x3Ja*,zc  k Dp0#') (# c/z5DZŬıËâĐFLMˤ>yD/PC]L cAhf OL'F3u>bPh<5?Qh/Kh@_kC02DW3kBcTNA`p-)r ! _M!'HvkCD4[XYH<(.p!0n 2k'Jw[`cJ 7=lj3 t h v D 5  ^ n  X ?  Wa$lXQ]B  F*$'*,*%p0x gͲʝxŗI|5Ξԑ=p:nC' 'n@J.3zp&_q`D.W$5W _RhN(,WHG1nwl5;I3-8-L~Ft68/ f9X=WT ckx*ZCiIqP/&)=_E#d  I !$J3d~ma&` 7-+N=g*8$ps, t=@t [ h 2 [ Z  E  e S  s Z ;8E4dl S  " k%"*-//->']  d f " V$&͎Gopöċw7ӧݾ}*^|%"&(MOJ }w!.pq]7{o4Z"bK&DV{.t Zn)& ' Kau< |&Wb& 278hnuF1 y ~  x { o W VL$P D1+0S"%S*`-^/0{1/(I h@` ^1s+#;Чv.Ǵ|cy_QK5KH|POgyoQ9<-UPpg% ,NS&fg@vZ@#)U~ :,upiGEIO2RjFgm+Q32L 0zkb^GK R|- 9 C ^ ~x&co6+Cn7oz0 B, 9Wpba,KS~]nx"$~7v  P  3 ] 9  8 y B M $r3D*  *#(,./0/*" T X܀?1+̞ȳ$JĞU)ˁ\֘"XJR|8i?Iiy=XEab\#*|C=kV:rIrl1A TDs{; `^j ]R\JV:v*G^H(Keu%#b7WA<hsK H< w > h~96~&@j<3 Wr %q>2vs{;bt{<v&FhuY5,E5`. c8M`U7  S2߻2  +~"$%i)K,+& &(UQAؘѴ)~@ɍ#{ĵfŨXΘ֚+-$tWMoCt=|aS(;dWV+L@U`rZw'X}P4]QVmGf3)^L8&$*Dw,I(B;U<+RW+I1E:},]7AV|l7^'D{T K 9 H%m0* PFn Q?&MN ''aF8=a[]-0]D|-> ?  X ; ;  Y1|  *Pi~i!fmY H"!S"  GngLڻҴ;ɀ[}(\(cƮNтjLve "7AToNZh|L6'- $n >?T-1FIim%n GTTguH?j`Nc ?#uyl-P\bHI:KG3*Y(HGDu7 =M=Sz z ( f   VrCO! mDN) We!NT<tP+\<SUP589m4 \ ? Q F ?  :m\5 O H !>p":8+Yz'YChݛK3+RA%q P"pC@ + zZR9Y%Ә&|/ozuŦQǑ4xΛvӪ!ٚڣtsM(Z' $ 2>HLxq\JaPE::Fkf5f!B# #efmdXh^Myn%&efQ[hqQs}}d  i  6  U :i !/~ bpP On9$:L#$+VrL/(1!Ox4uQ$o%Hik; ^  { ! H  +  ; L*@pOr2FK:3:m[PdZ({;fd&2b[ S\/8 `d*&G)T\+LHJ|w!sX>+bFe,]X7]dv]r*.m ~,VMV/0O%fycd1 1mx81WPZU~=M)VBIq4 U B h Y g  J + 2Vm`p])tKJx.#+QV&Fi,*[uiNkgp1 yHAqgv^-a^N.da Z F S   L 8 {5+E'b!vy\ t%q oL3}&5Mz#T\ |5WX;1nJ./o#-G>^y0:,j7=Qh9bV<%S [7 Sk3{,Kdr8>ocv{|Y+"_~faF!e=3>,HO6]7,/<N ^!d8eX _ek0]V @6ral<#6T0 C om8lD%'/-,5 ^ eT rNPJ~/Qf|S 6X)@C (Wlp{3yaF6RI!NL*LBA_9c8Z%JXuNbVF&Eg`Jlk3Scog=AU/ZH\nx@f|,d=bB #+M2"N`tIe gh /om<>&!al['2s1)<D-,*75RRc~l_Bz'85[ Ej?3b?4Q=B,df}z1vA le7 2Dx-< )qO,6)}e@a KgN""+M7hH6LEPx$r?VoCYMz1i&S^V1-?#`.K;,_7B5Mt5MUtqPM<@Knd:d}V RHZG{(:vA_ uY?xh \{+ !-oZvY`k"Xiq 9T|W: +pk7cg+# B8y. #Pm2de3J;+.Ri-:;I QxE!-:F%n z8&pUC!rxu:%h -VD?t~[MW??KJ..bovkY -E7)KN71Z9NF?Kj ,s2Q8;Kf}FO[me28VXuo4SIAQ'9Lm#,5B=J;VlRT$!-(:A@NRNSii_j[F+)4/0|aVdVPM^rS9;@+ps_`qZ* mQ]bEH?@7  ySP>)+%|w_ckY/;2$myeO:/( oZanlM5<-/klZ@8QIB/,, | /9/G?F_oqLIn{u 0<:0.ICCQ]bdboq\ros  &*3#  ##35+$DE7;G]NCQ]ZkmSekjqhmy~lgeu|frs' 3=FAKW\dSCB\dkdZdny~vy|v}}~}yzvsafgvlvwxusw}qorlvwww    {}~z~iz}wu{sojxqmrbe_VS\TZe]i^JisXBYTKJII?D\^PNK7[`A/2660$+.4$#!/"')'"       }|w}z{pqwqcou[e{l]^mkqae}moyslxzlrekmoln{|yzxiek~qFI9 6puXuss|z~yj0f_9IZH~w=YR&,A^TD2Q*qqtH5 arXtWZ  $|UxGiH$^7Z^i`xJyP}Mmmc({ /O N(N]ZHSH_u wQ Z(N}Y ]iP91 }8:NWHz n$b  c<bR8yv]43:}d |y'pS@9#L YRDU{D1vx~a P?2wXsP*E.p3[K(4kDv*"/TL^A?W=fN$ITXqkI+}>VW|[9GKA_=Z(Wf`QC8 q-aFkG>}.wL(D>I4BcO1KO[<>nA/U Lj} t p k= Q8q 4sQ(:\$m}} `LlpAuDz|N GZN?mcqQw+ix O mi{ Ao0%2"!}L|<;YLhnuL~-! 6N0e&/f>i`_M^15|6/A1W$oo?^ 6fD)WpTa'GK% B4OX4# 56X4DN,~2r:L|}F}9A0&"GIh`/u^/yt#8O|taU<~!r] De<\n6A9~_ !pn*Y>kAb+c15.##D#uo9"D-me^5;p4pv\ 3FluVC f{ncG^]`7y` e i $   ;'dk~ Nqov.k"J   g  K v *I pkv:!$ z{sf ;)@~Dnk[XF"ka^| M%S4m +Xc=z[< pYh=Wh c K d +TIq#[ob_N~?w+4.h@zjrn_|7_ v JZOkTnHdf_rc<N)68HS.!Xo t7TN6Y/ GcI R6U dR`AZ 6U7Ciya[V\7v  -1y?r9b}.Cnd!a#$%&'(F))**)^)t)e)i('&&%%%$P%%%B%%$#""!w MH  s l U4g}"uy#Mk6UW]WYm,f{->! $Wg^AIY/WO~uk  Mw|E3gEp~o-mXk`  w +; 5&sn T| g0T'=/Xmmeuh, *,"|o !""""5#{###|"!!!T! a p]<Wul,&6O(\ > % y dV&|p),hqXd^*s. w*a+P#P9Q^Ci>o(C&;I U o =   Hj0]'f=y#k3&0gcy:U &c S:9:(+YDc J0 1  "8I&_1M}> )T@;ciW^4C # X[Z>0gwCt^RIy*'X7?Jap3xoE)aucT(#9-hxNw hBCrqspU  y :  9 p  ; l ['Cc#_vdRAiT!,]lGzO45Pt $  C " Z ${;[zV~W+ |bW\m]!zUZ# a;9#&L-g:+ߤc9ޝCi|ޣ=:hߝߕߛߩG\oH^~h=DRBD^C.s)(H^(~MWh|Nw^qQ&  n  . _ B`^ ],m"ioR_NbH}#q3Oz,2KxiGpee HasHf O x o + V Pld2?? F CBGY7E/ ky\'cRD  b"Mw <[Lak}q\K'Vo-*z:o Al T}{6{Wp|    @ S-clKL3-KAe`GEIVLQW^2%zE _ X P z R-*Ee SNPuk!~5 KLxAU0mvޑ)ܴe!ۤڽٲ-ס׻:K׊knvg]NJnחרה׋ך׺cعn$ڊ'xz݅,޲'ߊSe;_7crxvlEZx&K8a8n *3uA>  r o 0 . < .W(e>DU5{9ME691$('ZvA"yde?6  x \ t 2O4X&8hCu [ $ X  <  y  m } G E 3Km/\#^EM7VP8SOxhL7BjX]\I\E3kK b\S!F g 6&,.ETQ4BcPndaemz~kaKa`8.+9c _Q6||6QJ{ x-T / l O  j 1JWHC]{/i Bcmwa;*CmXpV"+eS  N W O`7Z1f(-d?3&6bh#LS>mZrhX~B/;2u;Z܉ܷڤoۧ۔ۆ۽MOۤڢcAAH3BRF&^ݪ#Xwގ(9)ߍj,= }>^At]cd|wq:[#}FD/I_N$#{M % u P A  X *DiN:C70!2CooLTQ ee9}BwSqWD Zk, u V < Q x . _ k\(L* /:;~ uWBO$!hbKB15o'IG #0|3Uif>3R[lI hq# ,Pf<t}@dOPb}#Nh[PH#|>+ CRo;4J3 ]u  o : j8fF!!DBfr4o/^3 @E@Y " d ' v m]nG~@ k6w'JCT2Mk5o]ebQY>VߕݲdQۯۊ۠ۆ$a4&ڕP @ڗ%`rr/Vޠl`'f']5c#^vP$W4}P~e{QTG(sCZ_"j. f = 3 ^ J*ax9t!)u BmdC6$.)n{~)WZ"R>j:~DVY   )  6 u B { i  d fVWg>"Q%}Q;i2mbq v')zI#"{}o_fU4- 7Ic5[yOX acz>y9*&C`[e?FXtUS+mgx 1~  T \ 7 QHI!45*jq]Q`K9>-{9:n0@X1 i  % V Yi\<2 uNu!`7hD4fOy@W?(g1)jd|LP;>nވݕVܾ܌bcܐ~XfiXJF))3T܁ܑBݘ7ވF߉#lm?!4Qt4n?aa\muo 1 k $ 5  4G.t $?LiE}pPObU:y(#Tj4l>|| f ' C "U) >  \ F  > { r ' ,o~2Kk=t{fY/+]tBcODnkYG y9{"XwW@:=Tg#cp;vLP~<58;xGs*""u`F-5zYI6^%xE :yRO* 1 b H  d ZpsaZ;3J|ZPD4  I 10_`bv  # G ` q pI,0KfaRPyAb7ZW6$VDSnQDWcyhBl?rߙgH ߻Hݵ݉OܤܮZbgݒ=ސ޳޵<߆FQQ`4x+ ,jYH6]Wbu_"Jc kx0@AZ\ S  s D  v ;wB`KCx9`lvqeh^8" ' P<vJ f    g epS`$(q1H *e q t K5WYv,!D=kk(817"^5Bd$M QJ|| g O l #E5&#S C wE=?=U[d %mGg> e[46h1Kxl-)xd"5f1C x+OIYMLW~]m ^  V f R N Y m   = < %  u 7 Dc68BU4= 1 _ m3' \H 1 x / t  U ^)Q@Qaxd4jK0PL3rQnN[/4b~L'=;jtsB!5e!o`w|}0oJeV/77IG&Jq&(5&y'''5+m8m! B   $ J k I W i  _x `5  |  =}en0B}PZ- 3 ^ IxOr# Q  s h " i - +  n c X=>=Oc#S 0DE !! "l7 R.M gZw=C$U!%he]OBvnF "{ox'rE/ $> [ p 9U|Rj l04/#|f?vi~[i$% L ! cR &1 ` &     4 ] J (  ^  , @'*Pv5#1ZCOb{i.:U8^V l q5s#C*./%,^nN ? 'Npl6t~]+\ >ef?=]viEA c6aNRvN'ޜPp؝U٠@rݑގRݙݻݜޒIVky>[]H2>RteditXq)},F0t6 vQ~Ys!IDJ`l n  W   U M P X3m2c'P[x x  l * X  ` &ioE N  i & 6X"H}b i  P ?  / U  d . y k  = d !Ot$Kkv &j+u}9/ Ahz=xG'cp7ESEo0_U<h    | DchN;cx@; H0Pf^V !W!qM  < & x + k 4 " k m  z   ) = Q #  p e  t^ UJ0! U W  k c /  " , " #  $  ? v Oh l a Q E   sA/% s !8v h VG7l];r,Uqy w5~{+Z%x{`OuWzU} U  !Q8  z " m dh+:_c[~pT"l0k ~'0wKR-J\b'(UA+xooyi\8@7x 7AK>JGd8bINxvh#':wr~*{0$*_!c`>>,Bn`n4ii Bs"7|s1iHDt;B +oC0E`4:M? 1  % y T T p B ] } \ k 2 h T/y  K` r*Eo d(L[-E>!FP  ' T u * B B "   -  B } r R  M  L{^:[(P|pU ku~iPp_H{pG4 8aJ8&39Vgr{X d? 9  ) a u t k Z . j ; E ?j $c$W4 8kKjo w , R (3|-L])q2L g X + G YN ~~W5/\ 4X!yN529/52:R\x* /<4GPRhobH)a*U(G>t>TesLm9n+LS#}'RZ9laal^RdI5]-Clsa}D4n/THqGv!;Avk#9X5y0s%]B M  ] p 1  f m   2 N C 45yc &V+  0 ] K & c v A   Z5? X[ tJ.F Z[^X{ ?s#wWlz 8 Q r ]  tsu(}U4 ?IC:\S.K=X'p9CN| Q"]_?2} & w % W  R&t%z/9T=1$R,cO/ ' 3 + 4   =!X~yv#2PyxNG*8~:m(!(S]S9]+qYu_t tPGnT7)^UfkUW)V2VC!@5<$jNY 8TGU[[_3Q IAb<K3_U%(jl>Gj.C=n;a6I,g,+.KnV<,9 =OKw { y Q  p #   v 9   s W ? Ky;H@Q$ x ] ' ) Z&  ! ^tO L6\[SMV]xD+^GV("&'J4 :  Z^0*tdRTf`Z 1 7uWcL-t;^a$q0 .)F&\64eeb!ZZF$a 9 l s@/.HEHA9c8) vA' D 5 n S l Fl4{I,xL&c'P)Wa(,(5QlfFT  7f /|0~3a#Em#W #s,G&w0,3,o|; mdqS4`!UbY_.f_YO BqpF`1g0zWR".Su)`_>R[nznU>MWO! w_ODhQ7+-#5[oieNV ]VrgLz|cvdob+0oR"'owX3[*1K,} w  | c n >2f} B   3 TBZ+A{V5qkb| ]UlGC w  g2 ?Zs#'M  y xZB^lJQLq^wt2@t#X!b!:D7XF4n_ߺߡ"Xd\" hag1)vz /q[AB~ruN(>C! C_B [ WzO9(BJ d1.  QS  B3LF!=0OB G < h**g$]X%'y  Bt!;1=m/u"$=wK z3['v= D=)FA?/xyy*DqJ,r'U]:71-i,Aqsdf&/X/+,)rlW*NN"&w"/cvb:G|55TWFp=+<G ^  m 5  / ( "LZ Vy:h>V (Kj}Q&-147(899P961h,'# mO G z NJ D UF,4{Sn'^;0dtFygy6:Or'z XkgIRC6 }عپۊ,G?IF ! ] .?Eh > L0\H2^3MW/q )xL=MT= J{L` y = {, FmU#  _qwQbs>1 + K } W ( e qdrN    4 [.Y_VIw"`^V hF_!e@U?5Il*Cy #]Q:f-, \k6JnDJ/ ^|hnM>e$qL?#0liwETJV0<^bZGJ4~}  ^JiO^WlI 'm$#!!^$(-=346h89: ;Y;:,6g.&? \ x PCVQݳ$=Eׂմ}Ս؈fZ}e6 }BqUqmO!$')T++*)'5%!Wv |Yp 5CG  v . C +vV ` ] `u>g P`'WoQ31p [cXn#__. xTaHa ==C  M dj9%V Z D q $ ~l6 E+ " ? >T9 %L `  ' \C2[HM^j9 S o`e{RzJEo f"Ch#)oZ\p'HMwg&#T[y^y|k*9tPyH$|[_uLYj\t m \'@m7F4-~m{whz/ j2_0{u,|s;-S1bV+(O+'b[6 B  '  /j1p%6l !),- .,-,-0368::;:s70'l5 JQB*&hcbVv "}=+-H`) !Ynn]!I$k&'(d))))('&%$(#  V  dahM>ECeS1=v j  X8]-{/ m3DX x".e<'fK t   l D l L Q P  " r/uK Q V >$jRxY:!D")tI+S J ^  Z oa3VrVEx .  Q Pk+/ rD6@J,DqJe 5`Cg.R[.^mez] 9  t l  0 R  X Q w # = f qk9&\Ib T}|]\!*Xu6}F,JB2e Ip 6X%U1Hq9*j!OaZ4}&Q;I5AhYttf@ps(*d=-C3K",kxL;vRpcEs YQ 5%-Z3x79C:85430N/-*&$QH ]i]G<S>N,#aa'y >G!$_')*>*)('%O#p 2d_=Gc\%_D<_  z-RKk(rsNH-n%#~d=:LmtO*minT,dNp&6_^35AI0BaI4  JN ]rA 8  O  -2 l  nRm h.WkiD4U{H>pRu L F ; B (d# ^ C }O@<Z;Bh%ByjuX(l ^QrTH+r I8fj}>s2iA3  wq-5@>CHJ _ $-297850-p,)# ?aI/ '  ^ " /  $ B ()x}By1W  w=%vs9lr !" $8%&'&%# OV{ >'oV[1g!/o  s . ) ;Y!(hurn%pPw#& > 9 '  = ( ; 3 e 5(d8`;nu M`( W tdva^$o3H=)z2 * j  k b-z|BTf; + vw`9%)p,-gp@pznyfXoXrSLB{ XwSyKqoKhd]n=")!.j\xTgV7k/Fq&`P'/366\3.(#UaRF'A| gj;i mMV}Ia;*LCv;) 4 4 9 }w d @"F$%'.'&&&\&$$#! Z*X\TY[*  h+d}6 BP-dJW><RAUw! 9T7me1b-|Kq L ' | V r    ( T /|)x]=LDq8_)P zbj}xFnC}9'WVT   > Z % ~ ~.* y !_z7P?5d%Pc@"*)\6dP%BjJc_Erw=1mM߉ߜߋߌ_ߩ}h;RH;U_'%P`|[Wnxq83dY~6{N8kAi/`fn}ckg8L% e;<J}`6| &)+)&O"X   V  J!("!r kH+nO\Wpmfo=( S5@E#XyPxsg7 2+  kxYQn 3mdOlm'Hhu6O7JY>O'Hmpa5"4JyL o:0v O   Jk}:= i  h N BMp!e~Is_pTNgO 1#7Kf 2~qU[idc#9F[p z J I % +&pgr{{D'3A 4 +iox~qYnDOrN4P8 ,b;B 1 F  5";Jx&F bh tm$.`v W 6 p w^] [   #%%YN9")c+kOq+ b < O z ^  # & y  c 0 e o | 5T9  3O_x}}w@npA Z}1Xm-ez! OV0 F M d ~ X f ZMNPRR\CFf nl " [ 2 P E ;  ! a  xnGB^ /GyZ,Kp D+_f6zhc} eGT?^qRrT.MzV-2 zJ29rh?sNA#Xo4mE{8YcGJfA An;} K x 4 S B > t 2Heys[m|^qxr[.0- t f d < ,      k 1  ~ o ^ ` %  ~ U  s B 8 / " d>vr(i4Q^6 }lW1') l\\GQFNfobUSju[buUG+ [>i_uKYnK8' rmrtV(fK8'^H%TBDX6'nOH* d]fD29( {ns[?B"& lub9AYO>E%j]\L#1 -00&$-#% +-2?Qs'#378:=CMTEZ~nox#>Qbu+`ps0;Ro ,3c8KEXWUvd@^bUMOekf[j+?K4"',-(C`*&;HI_in 4Wy| />KQ\R_kjggrswxr :<:VVVR:;2GF*#(!3&( |`^eicO;) maVP1!52!$wy}|ndA6A@"  e^R:s{zPK@%-(nPRC:>*,(9web^NKCG?04)    $-,A@:OV<QCE:>P87I$4W>Eev|h~l`zz~ih|vs|ywfbor[`||n|vy|~v}}|{agiVGP?,54 'q Cwm+O& 9I$f(f\D,?]FZ1`'Q<?iyirJG.#t7+{|c X3M>CL|/<\LSr Ql)8R0w epkg=b`7zY"h"/ B>My>`: R6mAjCLt8a<cPdUkj;8#6A]1ZkF7n\2/+n;N>3 g5&YW}r#r<^'H8iPp|X<= {}sQ\{y kf5 f7Y  ^ N398x?n !Qt/ IF?j6oz!?m1YK  d #N %U! Y>Hc4 8U%T3 T"u ;|V( nvF"3x= 1QY nu#=< u%`FBi2pi\$.'8avQc' 5V S(Z?o* 9/j}U?$r0 bTwMZ0VY:^LAA E%{^_ ZV & % o!6K c%Db | L[' t M6z!~#i }:GMiB1^=~7! ] Boq oht [e tD{P&`]C#Lo}  - u 7C'\+ ]-fycBh Zg#ZL] <D"]3lnsQRvi\2R;Q &p )  |> HW4 #H. CO# ZB   G5`yC2 GU'%*he 2W$ Esp h rZWQq = p/ #,Ro )^$D B{Sg8x 8 X.% 6=x)SCe'U/97 Sc.u)6 k@  }F@  eYW \Ry ^   :+ jRE ,* `/ + l NH'qc|?eeNOj|ttx A kY#p^ h^  r5F1lC _T tM &i8FJ[`~ dk jQ VXM ()> KmGIS{K 3z\SG^eM rJ 6Uz rB  +C\<5 v= wfqu^o \S+ 55z.NT    @V#Hn u JH u: }3_oGShf s pT k ,Y  kt> ->~1R:l b 8~s ZWD |% *Zf} V:z@#3 ~aiKT )%^sQ0)dD   7xG 3 a ;9 i L _Q _PM  0yT Pm m$d {VP g,R4^ ~cfW sRIA;rZ yHlTM VJw&i`r q01yv}~uDL$Y m_P:0sF!@sl 7V s $ jb 7*Z>C()+m8m,K>( &Dird,J_"  |H+  j|x#+ ? >P}g _, uidgEV#c#W lJA *#S `'OE_z& IQNf q<-3 ? V| i7I p/ v 38iymI >:hz %!o`eYfqxAd> ~ <)  [LT 5-M.GiNOS b : 9B!OiVn6oR*$|eN  xNcVC{ / !, O @4 M gJA $f@%n?iMfxn C nah dh/ R>Cd>_%a y @2 ) l [{qqnAg c<%R"] P`@QP8 N|Hq T<3 !MtW,L\0Yc:gYd..)DDzC@V]VnKh o Q6AGuj QH2F  E) 5Cj=#>XFz<vs Rf ^fEPzsC1O3,T 60!m_hwL 0uds9 G b d`T + T]- Ur~ q- og Gh=YxM!Gp<4B|#o^OpLw)~XPs qH vzrHP! q$ (j KA *8 K Q#e7HfA+'p@e>|:X/nCrPO .e\KGW`6Mt vqdGMJVW-XLh eRkXvJ /D9N 3{  np4O^/E<8)qFVH_%?IG z3Y-KT0G h_y ;wTh/=me obw{4/M(7Z9' &%@*6'| eK: L ^*ag5C, l"Q> `~JK1*T ,!TKTa-hG:fo|yI !C 1wS3MTz3 TSULc ~o L J}NdQRw2;qR:3F m#`$c$HsUYx+ta7@x2UB<Qa= 7#2)n)D9!4)4%P1`0i"l"Te>l]1m,)G.&Z{EN\8;Tm)|J=%3 [-@JQkC-~t8+ BNC6BgIL\/m ?y,|pj2l3O& a h < ^  )u1z(d Pap]-~5J,Rg#77i>EOMDX~72`24#$kc-c1a N1!B/pz e@`yas?A"&iy_^e-=R&+Vt >Fa)4=bb;9v&m` ! f ?   9H_Hp\Z@t0 .G "/}"gF/i]`m&|@% 4 v#d{M"   $"!E h fm@+ ?Uod-l~cs";)(V&Z X O r3 Z q O"1/!bz|?X Aߖ`Im*QLۀmIڿNة׸Uצַ֢՜*7d?Ոs8ս֥Qn׭TS׌׏NذנإXs@܉\p_;ޘEmkXE-$!(HiC}vJ%J q3bJ-P0/ j2 iR 17%&u+./,+)8&!i& y ; Gj ?##P" > 9p Z Y K.,:Q, L_k9 S[^z! 1u`dCJHVz  ? v .-h\5Fefj j*UI ?=h\*X'M@ qZZc *I |  ,]6 AVE=ub SsF!3"/""c"W"!!E! w3 Gtzv V2E_'FWy70+ +   0 u m 9   e!o{-l WEc&u?KY,vfzےC;؋qY#k\Սh`KNo9kФғєzeTgSOmXԇԒoֹ R>p3fT!?ڥځ!ܔ݄޶RHTZ"^ ]B$ cAm&Df{wjtCRd@k0s8  u n 8 l Z9 O  ; 4? U iA05 V!? \k#1um3F("$&%$" +=j:WguP F/ f | A l n-8 YdbN6{2Usz~ 7   F %    r ! M6 G v SuYZ=20X4u~r m>#fIeNZqXQ4?MJQ1Z!#O{7yLf&Zf|  Kn$Z Lzw5= P?z[I mV !"{""#c##Z##"""!c!&!  x-:3SwEQ1w Fc <  % ~/a'd$eUMSx'"!+GF [rGPݟ $a؞z*ؿ,Eg,(Iыј@ӠӾӸӔӕvDWcbsҵӾӉՠ ֝;I:*#{׬עם#qڹۅnSpi!_kX\-!p;x'jIr#j?:%/x d w  ` } z h~Y.8l#`L `g !"""!);] v#$#x! vOrmpq|Xfh:F$h Due#}%| h.czEbcmHT|^~iJpvS3KLB @tadj;@W .i *-#6j|2w Sey-ni'2=P}SpC4.(kG v |  JO q%,luJ;{t0 Q) l N H 1!! < m zx,e363u3 g Y = W GORk}np;:. K!\BgQq1_ݗ0ۃ۵iy٣qFS֜rB=m84hֆ|օֻ֦֟jaofֈ Q׻cؽGXUـ"Nڢq7ܷܒq=߆ߚ߳.`H31=\7^"OK##)!9S@6>Pm,<7   C P #[RXZy hXB{V&q"q!q Lz ZN|T(F}g4u8S> d: B ouU)6vaPvY j9R6sZuJGhx5,LZQZD! 8zy( atu9a62qpc:9I olT?y;M;Vo sc o  _<[V<~{!~3.r{t.LU!f+uv F `  HK~XaeYP-#8Zfolx!2i@anei"0޼ݼݐ)ݙ!NOK٤vQ_֍9K*֋ ^^B >N׈w&{c6oۙۋۓ8fܡ)Rޗ`G\*2HZ I6jL>>k6@ J rS>1Kyjz, X  } OA9Z:U4Gn,iU6npcj+Wk^AK>}j9R!pk7javsxOvs Q o   i.?y?@t+ } i>!2{gd=9&&eABe&fv{|!y)I9TzcY;(Oi*oG?OwF m S  B R i  + # 2 l  S h ~ 2 Q    " / J ] R C 4 ? % , ' V  u F '  6 | * hImL1kG9cIUAC6vea|'R sm"QrnxR ; Z " z L z #^YT_.&MeP^umeM,76XRSNM<*Q i -  >  ; R . m   dA)y7k0]#a1\P2fD(fU^K~8B3Big{D[br*/9P`"@VQ_loodozzws[pvERmgdb@JT. {p_/2@&q]R3-tob9cJ2Q>O1pcO?~rQ9n]C%!XVINV9%&+!0, "$)0&$*89LmbLLJCXF(/7, 20pd-lyonpotpourri-3.0.1/splitbank~-help.pd000066400000000000000000000325041430526361000205250ustar00rootroot00000000000000#N canvas 471 23 681 831 12; #N canvas 371 171 1056 561 splitter 0; #X obj 543 338 block~ 128 1; #X obj 203 269 outlet~; #X obj 263 269 outlet~; #X obj 324 269 outlet~; #X obj 384 269 outlet~; #X obj 444 269 outlet~; #X obj 505 269 outlet~; #X obj 565 269 outlet~; #X obj 143 39 inlet~; #X obj 143 269 outlet~; #X obj 188 154 unpack f f f f f f f f; #X msg 188 121 1 1 1 1 1 1 1 1; #X obj 686 269 outlet; #X obj 188 86 loadbang; #X obj 686 39 inlet; #X obj 625 269 outlet~; #X obj 550 39 inlet; #X obj 25 112 r splitbank-msg; #X obj 595 39 inlet; #X obj 640 39 inlet; #X obj 143 213 lyonpotpourri/splitbank~ 8, f 78; #X text 708 214 arg: number of sub-spectra (must be a power of 2); #X text 65 334 FFT size is (signal-vector-size * overlap-factor). The overlap factor is specified internally \, and defaults to 8.0. Overlap-add and windowing is performed internally \, so the [block~] overlap factor must be 1.0. The vector size of 128 used here produces an FFT size of 1024 by default., f 41; #X connect 8 0 20 0; #X connect 10 0 20 1; #X connect 10 1 20 2; #X connect 10 2 20 3; #X connect 10 3 20 4; #X connect 10 4 20 5; #X connect 10 5 20 6; #X connect 10 6 20 7; #X connect 10 7 20 8; #X connect 11 0 10 0; #X connect 13 0 11 0; #X connect 14 0 20 12; #X connect 16 0 20 9; #X connect 17 0 20 0; #X connect 18 0 20 10; #X connect 19 0 20 11; #X connect 20 0 9 0; #X connect 20 1 1 0; #X connect 20 2 2 0; #X connect 20 3 3 0; #X connect 20 4 4 0; #X connect 20 5 5 0; #X connect 20 6 6 0; #X connect 20 7 7 0; #X connect 20 8 15 0; #X connect 20 9 12 0; #X restore 51 381 pd splitter; #X obj 407 481 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 407 539 \; pd dsp \$1; #X obj 414 366 hsl 128 15 0 1 0 0 empty empty manual_override -2 -8 0 10 -262144 -1 -1 0 1; #X floatatom 294 590 5 0 0 1 sync_signal - -; #X obj 287 247 hsl 128 15 0 0.01 0 0 empty empty synthesis_threshold -2 -8 0 10 -262144 -1 -1 0 1; #N canvas 184 87 542 291 soundsource 0; #X obj 53 243 outlet~; #X obj 53 185 -~ 0.5; #X obj 53 155 phasor~ 440; #X floatatom 53 81 5 0 0 0 - - -; #X obj 161 155 phasor~ 440; #X obj 161 185 -~ 0.5; #X obj 161 124 *~ 1.5; #X msg 329 114 100; #X obj 329 92 loadbang; #X obj 53 35 inlet; #X obj 329 137 s splitbank-freq; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 2 0; #X connect 3 0 6 0; #X connect 4 0 5 0; #X connect 5 0 0 0; #X connect 6 0 4 0; #X connect 7 0 10 0; #X connect 8 0 7 0; #X connect 9 0 3 0; #X restore 51 309 pd soundsource; #X floatatom 51 284 5 0 0 2 frequency splitbank-freq -; #X obj 333 288 hsl 128 15 0 1 0 0 empty empty table_offset -2 -8 0 10 -262144 -1 -1 0 1; #X obj 367 328 hsl 128 15 0 1 0 0 empty empty bin_offset -2 -8 0 10 -262144 -1 -1 0 1; #N canvas 617 105 817 690 state 0; #X obj 49 66 inlet; #X msg 49 93 set \$1 \$2 \$3 \$4 \$5 \$6 \$7 \$8 \$9 \$10 \$11 \$12 \$13 \$14 \$15 \$16 \$17 \$18 \$19 \$20 \$21 \$22 \$23 \$24 \$25 \$26 \$27 \$28 \$29 \$30 \$31 \$32 \$33 \$34 \$35 \$36 \$37 \$38 \$39 \$40 \$41 \$42 \$43 \$44 \$45 \$46 \$47 \$48 \$49 \$50 \$51 \$52 \$53 \$54 \$55 \$56 \$57 \$58 \$59 \$60 \$61 \$62 \$63 \$64 \$65 \$66 \$67 \$68 \$69 \$70 \$71 \$72 \$73 \$74 \$75 \$76 \$77 \$78 \$79 \$80 \$81 \$82 \$83 \$84 \$85 \$86 \$87 \$88 \$89 \$90 \$91 \$92 \$93 \$94 \$95 \$96 \$97 \$98 \$99 \$100 \$101 \$102 \$103 \$104 \$105 \$106 \$107 \$108 \$109 \$110 \$111 \$112 \$113 \$114 \$115 \$116 \$117 \$118 \$119 \$120 \$121 \$122 \$123 \$124 \$125 \$126 \$127 \$128 \$129 \$130 \$131 \$132 \$133 \$134 \$135 \$136 \$137 \$138 \$139 \$140 \$141 \$142 \$143 \$144 \$145 \$146 \$147 \$148 \$149 \$150 \$151 \$152 \$153 \$154 \$155 \$156 \$157 \$158 \$159 \$160 \$161 \$162 \$163 \$164 \$165 \$166 \$167 \$168 \$169 \$170 \$171 \$172 \$173 \$174 \$175 \$176 \$177 \$178 \$179 \$180 \$181 \$182 \$183 \$184 \$185 \$186 \$187 \$188 \$189 \$190 \$191 \$192 \$193 \$194 \$195 \$196 \$197 \$198 \$199 \$200 \$201 \$202 \$203 \$204 \$205 \$206 \$207 \$208 \$209 \$210 \$211 \$212 \$213 \$214 \$215 \$216 \$217 \$218 \$219 \$220 \$221 \$222 \$223 \$224 \$225 \$226 \$227 \$228 \$229 \$230 \$231 \$232 \$233 \$234 \$235 \$236 \$237 \$238 \$239 \$240 \$241 \$242 \$243 \$244 \$245 \$246 \$247 \$248 \$249 \$250 \$251 \$252 \$253 \$254 \$255 \$256 \$257 \$258 \$259 \$260 \$261 \$262 \$263 \$264 \$265 \$266 \$267 \$268 \$269 \$270 \$271 \$272 \$273 \$274 \$275 \$276 \$277 \$278 \$279 \$280 \$281 \$282 \$283 \$284 \$285 \$286 \$287 \$288 \$289 \$290 \$291 \$292 \$293 \$294 \$295 \$296 \$297 \$298 \$299 \$300 \$301 \$302 \$303 \$304 \$305 \$306 \$307 \$308 \$309 \$310 \$311 \$312 \$313 \$314 \$315 \$316 \$317 \$318 \$319 \$320 \$321 \$322 \$323 \$324 \$325 \$326 \$327 \$328 \$329 \$330 \$331 \$332 \$333 \$334 \$335 \$336 \$337 \$338 \$339 \$340 \$341 \$342 \$343 \$344 \$345 \$346 \$347 \$348 \$349 \$350 \$351 \$352 \$353 \$354 \$355 \$356 \$357 \$358 \$359 \$360 \$361 \$362 \$363 \$364 \$365 \$366 \$367 \$368 \$369 \$370 \$371 \$372 \$373 \$374 \$375 \$376 \$377 \$378 \$379 \$380 \$381 \$382 \$383 \$384 \$385 \$386 \$387 \$388 \$389 \$390 \$391 \$392 \$393 \$394 \$395 \$396 \$397 \$398 \$399 \$400 \$401 \$402 \$403 \$404 \$405 \$406 \$407 \$408 \$409 \$410 \$411 \$412 \$413 \$414 \$415 \$416 \$417 \$418 \$419 \$420 \$421 \$422 \$423 \$424 \$425 \$426 \$427 \$428 \$429 \$430 \$431 \$432 \$433 \$434 \$435 \$436 \$437 \$438 \$439 \$440 \$441 \$442 \$443 \$444 \$445 \$446 \$447 \$448 \$449 \$450 \$451 \$452 \$453 \$454 \$455 \$456 \$457 \$458 \$459 \$460 \$461 \$462 \$463 \$464 \$465 \$466 \$467 \$468 \$469 \$470 \$471 \$472 \$473 \$474 \$475 \$476 \$477 \$478 \$479 \$480 \$481 \$482 \$483 \$484 \$485 \$486 \$487 \$488 \$489 \$490 \$491 \$492 \$493 \$494 \$495 \$496 \$497 \$498 \$499 \$500 \$501 \$502 \$503 \$504 \$505 \$506 \$507 \$508 \$509 \$510 \$511 \$512 512; #X msg 433 93 208 38 275 355 285 390 214 472 338 365 87 218 124 456 91 335 373 81 189 56 152 397 193 295 14 236 146 103 356 339 58 140 4 405 296 223 221 380 431 232 228 464 348 136 477 350 511 506 239 43 400 197 371 10 430 455 167 500 323 334 203 97 90 432 461 453 179 505 265 100 294 404 142 381 49 475 21 321 28 316 67 436 424 362 8 284 374 443 376 349 157 209 360 5 117 271 258 109 132 343 54 71 368 66 403 501 439 419 138 353 474 478 312 204 454 226 42 114 198 476 354 433 471 358 311 210 196 216 278 361 392 177 288 274 231 440 24 370 162 89 442 99 169 379 450 364 401 184 41 254 266 50 279 75 272 264 195 466 447 438 393 130 7 308 15 260 300 502 135 118 409 441 51 484 106 331 495 345 470 163 104 205 425 30 481 3 276 344 127 246 257 230 336 82 64 351 217 320 427 188 215 337 185 247 273 325 80 147 164 182 398 451 206 384 116 238 241 225 307 200 369 363 486 160 35 192 435 122 2 377 31 202 421 17 172 304 318 286 418 261 509 119 259 483 462 108 488 229 77 498 391 458 446 57 183 319 352 428 76 315 191 326 480 299 115 26 389 105 493 12 452 86 346 291 492 170 503 410 330 155 48 174 224 110 125 251 47 220 385 123 213 227 289 262 120 72 497 243 22 94 314 171 332 137 79 280 33 0 277 422 253 473 305 113 402 267 347 292 134 9 156 341 340 429 34 20 175 290 139 6 310 489 411 282 78 154 460 44 37 23 32 485 148 303 459 69 165 187 406 168 93 357 444 445 313 268 248 465 372 178 153 293 414 129 25 367 479 328 151 237 329 281 255 98 324 207 395 415 327 322 95 186 194 19 504 222 102 469 131 18 166 270 487 212 496 366 180 298 59 244 201 283 386 383 45 449 16 507 29 145 240 297 55 190 176 412 1 408 52 46 40 387 73 27 53 490 211 219 482 342 88 508 317 150 68 333 13 85 173 143 84 434 36 65 301 302 158 499 426 269 463 101 112 39 121 494 417 92 242 388 263 382 399 133 491 159 63 234 141 457 437 233 467 250 83 309 413 181 111 107 249 378 235 256 306 60 74 468 359 287 420 423 96 149 126 61 396 416 510 252 128 62 394 407 375 448 199 144 161 70 245 11 512; #X text 434 69 current bin mapping; #X connect 0 0 1 0; #X connect 1 0 2 0; #X restore 321 486 pd state; #N canvas 0 22 695 522 sig2float 0; #X obj 200 68 inlet~; #X obj 343 201 outlet; #X obj 343 168 snapshot~; #X msg 343 106 1; #X obj 343 82 loadbang; #X obj 343 133 metro 50; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 3 0 5 0; #X connect 4 0 3 0; #X connect 5 0 2 0; #X restore 294 517 pd sig2float; #N canvas 53 282 753 442 interval-sets 0; #X msg 70 67 1 1 1 1 1 1 1 1; #X msg 83 91 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7; #X msg 93 118 1 1.01 1.02 1.03 1.04 1.05 1.06 1.07; #X obj 64 355 s splitbank-msg; #X msg 57 36 1 1.25 1.5 2 0.5 1 1.875 2.25; #X msg 108 147 1 1.059 1.122 1.189 1.259 1.334 1.414 1.498; #X msg 123 175 1 1.122 1.259 1.414 1.587 1.781 1.999 2.244; #X msg 137 210 1 1.189 1.414 1.681 1.999 2.378 2.828 3.363; #X msg 153 232 1 1.0009 1.002 1.003 1.004 1.005 1.006 1.007; #X text 169 311 list unpacks to frequency multipliers for each spectrum fragment; #X msg 167 263 0.5 0.666666 0.8 1 1.25 1.5 1.875 2; #X connect 0 0 3 0; #X connect 1 0 3 0; #X connect 2 0 3 0; #X connect 4 0 3 0; #X connect 5 0 3 0; #X connect 6 0 3 0; #X connect 7 0 3 0; #X connect 8 0 3 0; #X connect 10 0 3 0; #X restore 239 702 pd interval-sets; #N canvas 111 193 455 381 frequency-synthesis-constraints 0; #X obj 14 214 s splitbank-msg; #X msg 67 86 maxfreq 600; #X msg 168 137 minfreq 200; #X msg 151 112 minfreq 0; #X msg 14 35 maxfreq 19000; #X msg 41 62 maxfreq 1500; #X msg 179 161 minfreq 900; #X text 9 252 The range of frequencies to be synthesized can be specfied by minimum and maximum. Actually produced frequencies will vary outside this range \, depending on the current interval set. Constraining frequency range reduces the CPU load. When the minimum frequency equals or exceeds the maximum \, no sound is produced.; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 5 0 0 0; #X connect 6 0 0 0; #X restore 239 728 pd frequency-synthesis-constraints; #N canvas 611 297 618 567 basic-messages 0; #X msg 58 115 manual_override \$1; #X msg 143 364 scramble; #X msg 135 333 ramptime 5000; #X obj 40 476 s splitbank-msg; #X msg 95 233 powerfade \$1; #X obj 95 206 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 116 297 mute \$1; #X obj 116 260 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 42 51 fftinfo; #X msg 30 17 showstate; #X obj 58 84 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 ; #X text 206 365 set new random mapping; #X text 173 297 mute all sound and release CPU cycles; #X text 184 118 manually move between two settings when this toggle is on; #X text 100 52 print FFT size and related information; #X text 97 18 show the current bin mapping; #X text 227 326 set transition time (in milliseconds) to move from one mapping to the next; #X obj 125 92 s splitbank-man-override; #X text 288 420 change overlap factor (DACs must be restarted); #X msg 223 506 \; pd dsp \$1; #X obj 223 453 t b b; #X msg 258 476 1; #X msg 223 476 0; #X obj 267 452 delay 1; #X msg 222 419 overlap 4; #X text 185 230 select equal-power cross fade \, rather than linear (default); #X connect 0 0 3 0; #X connect 1 0 3 0; #X connect 2 0 3 0; #X connect 4 0 3 0; #X connect 5 0 4 0; #X connect 6 0 3 0; #X connect 7 0 6 0; #X connect 8 0 3 0; #X connect 9 0 3 0; #X connect 10 0 0 0; #X connect 10 0 17 0; #X connect 20 0 23 0; #X connect 20 1 22 0; #X connect 21 0 19 0; #X connect 22 0 19 0; #X connect 23 0 21 0; #X connect 24 0 3 0; #X connect 24 0 20 0; #X restore 238 676 pd basic-messages; #X text 136 381 <- main DSP block~ subpatch; #N canvas 131 124 508 327 timing 0; #N canvas 95 351 507 328 steadyclock 0; #X obj 83 25 inlet; #X obj 133 86 t 1 f f; #X msg 206 148 ramptime \$1; #X obj 217 287 s splitbank-msg; #X obj 133 197 metro 1000; #X msg 133 242 scramble; #X obj 83 57 sel 0; #X msg 84 112 0; #X connect 0 0 6 0; #X connect 1 0 4 0; #X connect 1 1 4 1; #X connect 1 2 2 0; #X connect 2 0 3 0; #X connect 4 0 5 0; #X connect 5 0 3 0; #X connect 6 0 7 0; #X connect 6 1 1 0; #X connect 7 0 4 0; #X restore 26 292 pd steadyclock; #X msg 73 87 7000; #X msg 190 231 0; #X msg 97 120 2000; #X msg 167 176 100; #X text 217 233 turn off clock; #X msg 26 53 20000; #X text 115 30 Set transition time in milliseconds. this smooth crossfade does not operate when manual override is selected; #X msg 123 151 500; #X obj 231 106 r splitbank-man-override; #X obj 231 139 sel 0 1; #X msg 358 249 5000; #X obj 358 175 r splitbank-startbang; #X obj 358 214 delay 50; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 3 0 0 0; #X connect 4 0 0 0; #X connect 6 0 0 0; #X connect 8 0 0 0; #X connect 9 0 10 0; #X connect 10 0 1 0; #X connect 10 1 2 0; #X connect 11 0 0 0; #X connect 12 0 13 0; #X connect 13 0 11 0; #X restore 240 756 pd timing; #X obj 496 530 sel 1; #X obj 496 555 s splitbank-startbang; #X obj 51 518 lyonpotpourri/shoehorn~ 8 2, f 32; #X obj 52 613 lpp-meters; #X obj 36 15 lpp-icon splitbank~; #X text 42 119 [splitbank~] splits an incoming sound into a number of sub-spectra \, each of which is independently tunable. Each sub-spectrum emerges from its own outlet \, from where it can be fully spatialized \, or collapsed to stereo as shown in this example. The internal design of the FFT processing requires that the object be deployed inside a [block~] subpatcher \, in order to gain control over the FFT size. ; #X text 268 47 - tunable spectrum splitter; #X connect 0 0 19 0; #X connect 0 1 19 1; #X connect 0 2 19 2; #X connect 0 3 19 3; #X connect 0 4 19 4; #X connect 0 5 19 5; #X connect 0 6 19 6; #X connect 0 7 19 7; #X connect 0 8 11 0; #X connect 0 9 10 0; #X connect 1 0 2 0; #X connect 1 0 17 0; #X connect 3 0 0 4; #X connect 5 0 0 1; #X connect 6 0 0 0; #X connect 7 0 6 0; #X connect 8 0 0 2; #X connect 9 0 0 3; #X connect 11 0 4 0; #X connect 17 0 18 0; #X connect 19 0 20 0; #X connect 19 1 20 1; pd-lyonpotpourri-3.0.1/splitbank~.c000066400000000000000000001164701430526361000174230ustar00rootroot00000000000000#include "MSPd.h" // #include "fftease.h" #define OSCBANK_TABLE_LENGTH (8192) #define OSCBANK_DEFAULT_TOPFREQ (15000.0) #define MAXSTORE (128) #define OBJECT_NAME "splitbank~" static t_class *splitbank_class; typedef struct { int R; int N; int N2; int Nw; int Nw2; int vector_size; int i; int in_count; float *Wanal; float *Wsyn; float *input_buffer; float *Hwin; float *complex_spectrum; float *interleaved_spectrum; float *output_buffer; // for convert float *c_lastphase_in; float *c_lastphase_out; float c_fundamental; float c_factor_in; float c_factor_out; float P; int table_length; float table_si; int first; float i_vector_size; float *lastamp; float *lastfreq; float *index; float *table; float pitch_increment; int lo_bin; int hi_bin; float synthesis_threshold; int overlap; int winfac; float user_lofreq; float user_hifreq; float curfreq; // faster FFT float mult; float *trigland; int *bitshuffle; } t_oscbank; typedef struct _splitbank { t_object x_obj; t_float x_f; t_oscbank **obanks; int N; int N2; int R; int overlap; void *list_outlet; t_atom *list_data; int *bin_tmp; int ramp_frames; int frames_left; float frame_duration; int vector_size; int table_offset; int bin_offset; float *last_mag; float *current_mag; int *last_binsplit; int *current_binsplit; int **stored_binsplits; short *stored_slots; float *in_amps; short new_distribution; short interpolation_completed; // short bypass; short initialize; short manual_override; float manual_control_value; short mute; short powerfade; int channel_count; long countdown_samps; // samps for a given fadetime long counter; int hopsamps; t_float **ins; // input signal vectors t_float **outs; // output signal vectors } t_splitbank; static void *splitbank_new(t_symbol *s, int argc, t_atom *argv); static t_int *splitbank_perform( t_int *w ); static void splitbank_dsp(t_splitbank *x, t_signal **sp); static void splitbank_showstate( t_splitbank *x ); static void splitbank_manual_override( t_splitbank *x, t_floatarg toggle ); static void splitbank_setstate( t_splitbank *x, t_symbol *msg, int argc, t_atom *argv); static void splitbank_ramptime( t_splitbank *x, t_symbol *msg, int argc, t_atom *argv); static int rand_index( int max); static void splitbank_scramble (t_splitbank *x); static void splitbank_store( t_splitbank *x, t_floatarg location ); static void splitbank_recall( t_splitbank *x, t_floatarg location ); static void splitbank_powerfade( t_splitbank *x, t_floatarg toggle ); static void splitbank_maxfreq( t_splitbank *x, t_floatarg freq ); static void splitbank_minfreq( t_splitbank *x, t_floatarg freq ); static void splitbank_mute( t_splitbank *x, t_floatarg toggle ); static void splitbank_fftinfo( t_splitbank *x); static void splitbank_free( t_splitbank *x ); static void splitbank_overlap( t_splitbank *x, t_floatarg ofac ); static void splitbank_spliti( t_splitbank *x, float *dest_mag, int start, int end, float oldfrac); static void splitbank_split(t_splitbank *x, int *binsplit, float *dest_mag, int start, int end ); static int splitbank_closestPowerOfTwo(int p); static void fftease_obank_analyze( t_oscbank *x ) ; static void fftease_obank_initialize ( t_oscbank *x, float lo_freq, float hi_freq, int overlap, int R, int vector_size, int N); // static void fftease_obank_transpose( t_oscbank *x ); static void fftease_obank_synthesize( t_oscbank *x ); static void fftease_obank_destroy( t_oscbank *x ); static void fftease_shiftin( t_oscbank *x, float *input ); static void fftease_shiftout( t_oscbank *x, float *output ); static void fftease_obank_topfreq( t_oscbank *x, float topfreq ); static void fftease_obank_bottomfreq( t_oscbank *x, float bottomfreq ); static void rfft( float *x, int N, int forward ); static void cfft( float *x, int NC, int forward ); static void bitreverse( float *x, int N ); static void fold( float *I, float *W, int Nw, float *O, int N, int n ); static void init_rdft(int n, int *ip, float *w); static void rdft(int n, int isgn, float *a, int *ip, float *w); static void bitrv2(int n, int *ip, float *a); static void cftsub(int n, float *a, float *w); static void rftsub(int n, float *a, int nc, float *c); static void makewt(int nw, int *ip, float *w); static void makect(int nc, int *ip, float *c); static void makewindows( float *H, float *A, float *S, int Nw, int N, int I ); static void makehamming( float *H, float *A, float *S, int Nw, int N, int I,int odd ); static void makehanning( float *H, float *A, float *S, int Nw, int N, int I,int odd ); static void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ); ////////// void splitbank_tilde_setup(void) { splitbank_class = class_new(gensym("splitbank~"), (t_newmethod)splitbank_new, (t_method)splitbank_free, sizeof(t_splitbank),0,A_GIMME,0); CLASS_MAINSIGNALIN(splitbank_class, t_splitbank, x_f); class_addmethod(splitbank_class, (t_method)splitbank_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(splitbank_class, (t_method)splitbank_showstate, gensym("showstate"),0); class_addmethod(splitbank_class, (t_method)splitbank_manual_override, gensym("manual_override"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_store, gensym("store"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_mute, gensym("mute"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_recall, gensym("recall"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_setstate, gensym("setstate"),A_GIMME,0); class_addmethod(splitbank_class, (t_method)splitbank_ramptime, gensym("ramptime"),A_GIMME,0); class_addmethod(splitbank_class, (t_method)splitbank_powerfade, gensym("powerfade"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_maxfreq, gensym("maxfreq"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_minfreq, gensym("minfreq"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_overlap, gensym("overlap"),A_FLOAT,0); class_addmethod(splitbank_class, (t_method)splitbank_scramble, gensym("scramble"),0); class_addmethod(splitbank_class, (t_method)splitbank_fftinfo, gensym("fftinfo"),0); potpourri_announce(OBJECT_NAME); } void splitbank_overlap( t_splitbank *x, t_floatarg ofac ) { x->overlap = splitbank_closestPowerOfTwo( (int)ofac ); } void splitbank_powerfade( t_splitbank *x, t_floatarg toggle ) { x->powerfade = (short)toggle; } void splitbank_mute( t_splitbank *x, t_floatarg toggle ) { x->mute = (short)toggle; } void splitbank_fftinfo( t_splitbank *x) { post("FFT size: %d", x->N); post("Overlap Factor: %d", x->overlap); post("Hop size: %d", x->hopsamps); } void splitbank_manual_override( t_splitbank *x, t_floatarg toggle ) { x->manual_override = (short)toggle; } void splitbank_free( t_splitbank *x ) { /* */ int i; if(x->initialize == 0) { freebytes(x->list_data, (x->N + 2) * sizeof(t_atom)) ; freebytes(x->current_binsplit, x->N2 * sizeof(int)); freebytes(x->last_binsplit, x->N2 * sizeof(int)); freebytes(x->current_mag, x->N2 * sizeof(float)); freebytes(x->last_mag, x->N2 * sizeof(float)); freebytes(x->bin_tmp, x->N2 * sizeof(int)); freebytes(x->stored_slots, x->N2 * sizeof(short)); freebytes(x->in_amps, (x->N +2) * sizeof(float)); for( i = 0; i < MAXSTORE; i++ ) { freebytes(x->stored_binsplits[i], x->N2 * sizeof(int)); } freebytes(x->stored_binsplits, MAXSTORE * sizeof(int *)); for(i = 0; i < x->channel_count + 5; i++) { freebytes(x->ins[i], 8192 * sizeof(t_float)); } freebytes(x->ins, sizeof(t_float *) * (x->channel_count + 5)); freebytes(x->outs, sizeof(t_float *) * (x->channel_count + 1)); for(i = 0; i < x->channel_count; i++) { fftease_obank_destroy(x->obanks[i]); } freebytes(x->obanks, x->channel_count * sizeof(t_oscbank *)); } } void splitbank_maxfreq( t_splitbank *x, t_floatarg freq ) { int i; for(i = 0; i < x->channel_count; i++) { fftease_obank_topfreq( x->obanks[i], freq); } } void splitbank_minfreq( t_splitbank *x, t_floatarg freq ) { int i; for(i = 0; i < x->channel_count; i++) { fftease_obank_bottomfreq( x->obanks[i], freq); } } void splitbank_store( t_splitbank *x, t_floatarg loc ) { int **stored_binsplits = x->stored_binsplits; int *current_binsplit = x->current_binsplit; short *stored_slots = x->stored_slots; int location = (int) loc; int i; if( location < 0 || location > MAXSTORE - 1 ) { pd_error(0, "location must be between 0 and %d, but was %d", MAXSTORE, location); return; } for(i = 0; i < x->N2; i++ ) { stored_binsplits[location][i] = current_binsplit[i]; } stored_slots[location] = 1; // post("stored bin split at location %d", location); } void splitbank_recall( t_splitbank *x, t_floatarg loc ) { int **stored_binsplits = x->stored_binsplits; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; short *stored_slots = x->stored_slots; int i; int location = (int) loc; if( location < 0 || location > MAXSTORE - 1 ) { pd_error(0, "location must be between 0 and %d, but was %d", MAXSTORE, location); return; } if( ! stored_slots[location] ) { pd_error(0, "nothing stored at location %d", location); return; } for(i = 0; i < x->N2; i++ ) { last_binsplit[i] = current_binsplit[i]; current_binsplit[i] = stored_binsplits[location][i]; } x->new_distribution = 1; x->interpolation_completed = 0; x->frames_left = x->ramp_frames; if(! x->ramp_frames) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ) { x->last_binsplit[ i ] = x->current_binsplit[ i ]; } } } int splitbank_closestPowerOfTwo(int p) { int base = 2; if(p > 2) { while(base < p) { base *= 2; } } return base; } void *splitbank_new(t_symbol *s, int argc, t_atom *argv) { t_splitbank *x = (t_splitbank *)pd_new(splitbank_class); int i; x->channel_count = (int) atom_getfloatarg(0, argc, argv); x->channel_count = splitbank_closestPowerOfTwo( x->channel_count ); // post("theoretic chan count: %d",x->channel_count ); // x->channel_count = 8; srand( time( 0 ) ); for(i = 0; i < x->channel_count + 4; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } for(i = 0; i < x->channel_count + 1; i++) { outlet_new(&x->x_obj, gensym("signal")); } x->ins = (t_float **) getbytes(sizeof(t_float *) * (x->channel_count + 5)); x->outs = (t_float **) getbytes(sizeof(t_float *) * (x->channel_count + 1)); for(i = 0; i < x->channel_count + 5; i++) { x->ins[i] = (t_float *) getbytes(8192 * sizeof(t_float)); } x->list_outlet = (t_outlet *) outlet_new(&x->x_obj, gensym("list")); x->obanks = (t_oscbank **) getbytes(x->channel_count * sizeof(t_oscbank *)); for(i = 0; i < x->channel_count; i++) { x->obanks[i] = (t_oscbank *) getbytes(sizeof(t_oscbank)); } x->mute = 0; x->table_offset = 0; x->bin_offset = 0; x->powerfade = 0; x->manual_override = 0; x->countdown_samps = 0; x->overlap = 8; // to generate FFT size x->initialize = 1; return x; } t_int *splitbank_perform(t_int *w) { int i,j; float frac = 0.0; t_splitbank *x = (t_splitbank *) (w[1]); int channel_count = x->channel_count; float *input; float *synthesis_threshold; float *t_offset; float *b_offset; float *manual_control; float *sync = (t_float *)(w[(channel_count * 2) + 7]); int n = (int) w[(channel_count * 2) + 8]; int N2 = x->N2; int N = x->N; int hopsamps = x->hopsamps; // int frames_left = x->frames_left; // int ramp_frames = x->ramp_frames; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; float *in_amps = x->in_amps; float manual_control_value = x->manual_control_value; long counter = x->counter; long countdown_samps = x->countdown_samps; t_oscbank **obanks = x->obanks; t_float **ins = x->ins; t_float *inlet; t_float *outlet; t_float **outs = x->outs; // assign from output vector pointers // mute branch: clear outlets and return if(x->mute) { for(i = 0; i < (channel_count + 1); i++) { outlet = (t_float *) w[i + (channel_count + 7)]; for(j = 0; j < n; j++) { outlet[j] = 0.0; } } return (w + ((channel_count * 2) + 9)); } // Copy all inlets for(i = 0; i < channel_count + 5; i++) { inlet = (t_float *) w[2 + i]; for(j = 0; j < n; j++) { ins[i][j] = inlet[j]; } } // local assignments: input = ins[0]; synthesis_threshold = ins[channel_count + 1]; t_offset = ins[channel_count + 2]; b_offset = ins[channel_count + 3]; manual_control = ins[channel_count + 4]; // assign outlet pointers for(i = 0; i < (channel_count + 1); i++) { outs[i] = (t_float *) w[i + (channel_count + 7)]; // was 5 } sync = outs[channel_count]; for(i = 0; i < channel_count; i++) { obanks[i]->pitch_increment = ins[i+1][0] * obanks[i]->table_si; obanks[i]->synthesis_threshold = synthesis_threshold[0]; } x->table_offset = t_offset[0] * N2; x->bin_offset = b_offset[0] * N2; manual_control_value = manual_control[0]; // ANALYSIS (only analyze to one oscbank fftease_shiftin( obanks[0], input ); fftease_obank_analyze( obanks[0] ); // copy input amplitudes from analyzed frame for( i = 0, j = 0; i < N; i += 2 , j++) { in_amps[j] = obanks[0]->interleaved_spectrum[i]; } // zero the amps next for(i = 0; i < channel_count; i++) { for(j = 0; j < N; j += 2) { obanks[i]->interleaved_spectrum[j] = 0.0; } } if( x->manual_override ) { for(i = 0; i < channel_count; i++) { splitbank_spliti( x, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count, manual_control_value); } frac = manual_control_value; } else if( x->new_distribution ) { x->new_distribution = 0; for(i = 0; i < channel_count; i++) { splitbank_split( x, last_binsplit, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count); } frac = 0.0; } else if ( x->interpolation_completed ) { for(i = 0; i < channel_count; i++) { splitbank_split( x, current_binsplit, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count); } frac = 1.0; } else { frac = (float) counter / (float) countdown_samps; for(i = 0; i < channel_count; i++) { splitbank_spliti( x, obanks[i]->interleaved_spectrum, N2*i/channel_count, N2*(i+1)/channel_count, 1.0 - frac); } counter += hopsamps; if( counter >= countdown_samps ) { counter = countdown_samps; x->interpolation_completed = 1; } } for( i = 0; i < n; i++ ) { sync[i] = frac; } // copy frequency information to other banks for(i = 1; i < channel_count; i++) { for( j = 1; j < N; j += 2) { obanks[i]->interleaved_spectrum[j] = obanks[0]->interleaved_spectrum[j]; } } // SYNTHESIS for(i = 0; i < channel_count; i++) { fftease_obank_synthesize( obanks[i] ); fftease_shiftout( obanks[i], outs[i] ); } x->counter = counter; return (w + ((channel_count * 2) + 9)); } void splitbank_scramble (t_splitbank *x) { int i, j; int used; int max = x->N2; int bindex; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; int *bin_tmp = x->bin_tmp; x->new_distribution = 1; x->interpolation_completed = 0; // post("scrambling"); // Copy current mapping to last mapping (first time this will be all zeros) for( i = 0; i < x->N2; i++ ) { last_binsplit[i] = current_binsplit[i]; } for( i = 0; i < max; i++ ) { bin_tmp[i] = i; } used = max; // This randomly distributes each bin number (to occur once each in a random location) for( i = 0; i < max; i++ ) { bindex = rand_index( used ); current_binsplit[i] = bin_tmp[bindex]; for(j = bindex; j < used - 1; j++) { bin_tmp[j] = bin_tmp[j+1]; } --used; } x->counter = 0; if(! x->countdown_samps ) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ) { last_binsplit[ i ] = current_binsplit[ i ]; } } } int rand_index( int max) { int rand(); return ( rand() % max ); } void splitbank_setstate (t_splitbank *x, t_symbol *msg, int argc, t_atom *argv) { short i; if( argc != x->N2 ) { pd_error(0, "list must be of length %d, but actually was %d", x->N2, argc); return; } for( i = 0; i < x->N2; i++ ) { x->last_binsplit[ i ] = x->current_binsplit[ i ]; x->current_binsplit[ i ] = 0; } for (i=0; i < argc; i++) { x->current_binsplit[i] = atom_getintarg(i, argc, argv ); } x->frames_left = x->ramp_frames; if(! x->ramp_frames) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ) { x->last_binsplit[ i ] = x->current_binsplit[ i ]; } } return; } void splitbank_ramptime (t_splitbank *x, t_symbol *msg, int argc, t_atom *argv) { float rampdur; rampdur = atom_getfloatarg(0,argc,argv) * 0.001; x->countdown_samps = rampdur * x->R; x->counter = 0; // return; } // REPORT CURRENT SHUFFLE STATUS void splitbank_showstate (t_splitbank *x ) { t_atom *list_data = x->list_data; short i, count; count = 0; // post("showing %d data points", x->N2); for( i = 0; i < x->N2; i++ ) { SETFLOAT(list_data+count,x->current_binsplit[i]); ++count; } outlet_list(x->list_outlet,0L,x->N2,list_data); return; } /* void splitbank_float(t_splitbank *x, t_float f) // Look at floats at inlets { int inlet = ((t_pxobject*)x)->z_in; int N2 = x->obank1->N2; // inlet 0 is the first signal inlet if (inlet == 1) { x->obank1->pitch_increment = f * x->obank1->table_si; } else if (inlet == 2) { x->obank2->pitch_increment = f * x->obank2->table_si; } else if (inlet == 3) { x->obank3->pitch_increment = f * x->obank3->table_si; } else if (inlet == 4) { x->obank4->pitch_increment = f * x->obank4->table_si; } else if (inlet == 5) { x->obank5->pitch_increment = f * x->obank5->table_si; } else if (inlet == 6) { x->obank6->pitch_increment = f * x->obank6->table_si; } else if (inlet == 7) { x->obank7->pitch_increment = f * x->obank7->table_si; } else if (inlet == 8) { x->obank8->pitch_increment = f * x->obank8->table_si; } else if (inlet == 9) { x->obank1->synthesis_threshold = f; x->obank2->synthesis_threshold = f; x->obank3->synthesis_threshold = f; x->obank4->synthesis_threshold = f; x->obank5->synthesis_threshold = f; x->obank6->synthesis_threshold = f; x->obank7->synthesis_threshold = f; x->obank8->synthesis_threshold = f; } else if (inlet == 10) { x->table_offset = (int) (f * N2); } else if (inlet == 11) { x->bin_offset = (int) (f * N2); } else if (inlet == 12) { x->manual_control_value = f; } } */ void splitbank_split(t_splitbank *x, int *binsplit, float *dest_mag, int start, int end ) { int i; int bindex; int n = x->N2; float *in_amps = x->in_amps; int table_offset = x->table_offset; int bin_offset = x->bin_offset; if( table_offset < 0 ) table_offset *= -1; if( bin_offset < 0 ) bin_offset *= -1; for( i = start; i < end; i++) { bindex = binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; dest_mag[ bindex * 2 ] = in_amps[ bindex ]; // putting amps into interleaved spectrum } } void splitbank_spliti( t_splitbank *x, float *dest_mag, int start, int end, float oldfrac) { int i; int bindex; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; float *current_mag = x->current_mag; float *last_mag = x->last_mag; float *in_amps = x->in_amps; int bin_offset = x->bin_offset; int table_offset = x->table_offset; int n = x->N2; float newfrac; float phase; if( oldfrac < 0 ) oldfrac = 0; if( oldfrac > 1.0 ) oldfrac = 1.0; if( x->powerfade ) { phase = oldfrac * PIOVERTWO; oldfrac = sin( phase ); newfrac = cos( phase ); } else { newfrac = 1.0 - oldfrac; } if( table_offset < 0 ) table_offset *= -1; if( bin_offset < 0 ) bin_offset *= -1; for( i = 0; i < n; i++ ) { last_mag[i] = current_mag[i] = 0.0; } for( i = start; i < end; i++ ) { bindex = current_binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; current_mag[ bindex ] = in_amps[ bindex ]; bindex = last_binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; last_mag[ bindex ] = in_amps[ bindex ]; } for( i = 0; i < n; i++) { if(! current_mag[i] && ! last_mag[i]) { dest_mag[i * 2] = 0.0; } else if( current_mag[i] && last_mag[i]) { dest_mag[i * 2] = current_mag[i]; } else if ( current_mag[i] && ! last_mag[i] ) { dest_mag[i * 2] = newfrac * current_mag[i]; } else { dest_mag[i * 2] = oldfrac * last_mag[i]; } } } void splitbank_dsp(t_splitbank *x, t_signal **sp) { int i; int R; int lo_freq = 0; int hi_freq = 15000; int fftsize; int overlap = x->overlap; t_int **sigvec; int pointer_count; int channel_count = x->channel_count; int vector_size; t_oscbank **obanks = x->obanks; pointer_count = (channel_count * 2) + 8; sigvec = (t_int **) getbytes(sizeof(t_int *) * pointer_count); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } x->vector_size = vector_size = sp[0]->s_n; fftsize = vector_size * overlap; // post("vector size %d, sys vector size: %d",vector_size, sys_getblksize() ); // post("splitbank~: samples per vector: %d, sys blocksize %d, fftsize %d", // sp[0]->s_n, sys_getblksize(), fftsize); // generate FFT size from x->overlap * x->vector_size if( ! sp[0]->s_sr ) { pd_error(0, "splitbank~: zero sample rate! Perhaps no audio driver is selected."); return; } if(x->initialize || x->R != sys_getsr() || x->vector_size != sp[0]->s_n || x->N != fftsize) { if( (x->initialize || x->R != sys_getsr()) && (! x->countdown_samps) ) { x->counter = 0; x->countdown_samps = 1.0 * x->R; // 1 second fade time by default } x->R = sys_getsr(); R = (int) x->R; x->N = fftsize; x->N2 = fftsize / 2; x->list_data = getbytes((x->N + 2) * sizeof(t_atom)); x->last_binsplit = getbytes(x->N2 * sizeof(int)); x->current_binsplit = getbytes(x->N2 * sizeof(int)); x->bin_tmp = getbytes(x->N2 * sizeof(int)); x->last_mag = getbytes(x->N2 * sizeof(float)); x->current_mag = getbytes(x->N2 * sizeof(float)); x->stored_slots = getbytes(x->N2 * sizeof(short)); x->stored_binsplits = getbytes(MAXSTORE * sizeof(int *)); for( i = 0; i < MAXSTORE; i++ ) { x->stored_binsplits[i] = getbytes(x->N2 * sizeof(int)); } splitbank_scramble( x ); for( i = 0; i < x->N2; i++ ) { x->last_binsplit[i] = x->current_binsplit[i]; } for(i = 0; i < channel_count; i++) { fftease_obank_initialize(obanks[i], lo_freq, hi_freq, overlap, R, vector_size,x->N); } x->in_amps = getbytes((x->N +2) * sizeof(float)); x->initialize = 0; } x->hopsamps = x->N / x->overlap; dsp_addv(splitbank_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec, sizeof(t_int *) * pointer_count); } //////////////////////////////////////// /**************************************************/ void fftease_obank_destroy( t_oscbank *x ) { freebytes(x->Wanal, x->Nw * sizeof(float)); freebytes(x->Wsyn, x->Nw * sizeof(float)); freebytes(x->Hwin, x->Nw * sizeof(float)); freebytes(x->complex_spectrum, x->N * sizeof(float)); freebytes(x->interleaved_spectrum, (x->N + 2) * sizeof(float)); freebytes(x->input_buffer, x->Nw * sizeof(float)); freebytes(x->output_buffer, x->Nw * sizeof(float)); freebytes(x->c_lastphase_in, (x->N2+1) * sizeof(float)); freebytes(x->c_lastphase_out, (x->N2+1) * sizeof(float)); freebytes(x->lastamp, (x->N+1) * sizeof(float)); freebytes(x->lastfreq, (x->N+1) * sizeof(float)); freebytes(x->index, (x->N+1) * sizeof(float)); freebytes(x->table, x->table_length * sizeof(float)); freebytes(x->bitshuffle, (x->N * 2) * sizeof(int)); freebytes(x->trigland, (x->N * 2) * sizeof(float)); free(x); } /**************************************************/ void fftease_obank_initialize ( t_oscbank *x, float lo_freq, float hi_freq, int overlap, int R, int vector_size, int N) { int i; x->overlap = overlap; // x = t_getbytes( sizeof(t_oscbank) ); // CRASH!! x->R = R; x->vector_size = vector_size; x->N = N; x->Nw = x->N; x->N2 = (x->N)>>1; x->Nw2 = (x->Nw)>>1; x->in_count = -(x->Nw); x->table_length = OSCBANK_TABLE_LENGTH ; // x->topfreq = OSCBANK_DEFAULT_TOPFREQ ; x->user_lofreq = lo_freq; x->user_hifreq = hi_freq; x->synthesis_threshold = .000001; x->table_si = (float) x->table_length/ (float) x->R; x->Wanal = (float *) getbytes(x->Nw * sizeof(float)); x->Wsyn = (float *) getbytes(x->Nw * sizeof(float)); x->Hwin = (float *) getbytes(x->Nw * sizeof(float)); x->complex_spectrum = (float *) getbytes(x->N * sizeof(float)); x->interleaved_spectrum = (float *) getbytes((x->N + 2) * sizeof(float)); x->input_buffer = (float *) getbytes(x->Nw * sizeof(float)); x->output_buffer = (float *) getbytes(x->Nw * sizeof(float)); x->c_lastphase_in = (float *) getbytes((x->N2+1) * sizeof(float)); x->c_lastphase_out = (float *) getbytes((x->N2+1) * sizeof(float)); x->lastamp = (float *) getbytes((x->N+1) * sizeof(float)); x->lastfreq = (float *) getbytes((x->N+1) * sizeof(float)); x->index = (float *) getbytes((x->N+1) * sizeof(float) ); x->table = (float *) getbytes(x->table_length * sizeof(float)); x->bitshuffle = (int *) getbytes((x->N * 2) * sizeof(int)); x->trigland = (float *) getbytes((x->N * 2) * sizeof(float)); x->mult = 1. / (float) x->N; for( i = 0; i < x->N2 + 1; i++) { x->c_lastphase_in[i] = x->c_lastphase_out[i] = 0.0; } for( i = 0; i < x->N + 1; i++) { x->lastamp[i] = x->lastfreq[i] = x->index[i] = 0.0; } for( i = 0; i < x->Nw; i++ ) { x->input_buffer[i] = x->output_buffer[i] = 0.0; } init_rdft( x->N, x->bitshuffle, x->trigland); makehanning( x->Hwin, x->Wanal, x->Wsyn, x->Nw, x->N, x->vector_size, 0); x->c_fundamental = (float) x->R/(float)x->N ; x->c_factor_in = (float) x->R/((float)x->vector_size * TWOPI); x->c_factor_out = 1.0 / x->c_factor_in; if( x->user_hifreq < x->c_fundamental ) { x->user_hifreq = OSCBANK_DEFAULT_TOPFREQ ; } x->hi_bin = 1; x->curfreq = 0; while( x->curfreq < x->user_hifreq ) { ++(x->hi_bin); x->curfreq += x->c_fundamental ; } x->lo_bin = 0; x->curfreq = 0; while( x->curfreq < x->user_lofreq ) { ++(x->lo_bin); x->curfreq += x->c_fundamental ; } if( x->hi_bin > x->N2) x->hi_bin = x->N2 ; for ( i = 0; i < x->table_length; i++ ) { x->table[i] = (float) x->N * cos( (float)i * TWOPI / (float)x->table_length ); } x->P = 1.0 ; x->i_vector_size = 1. / x->vector_size; x->pitch_increment = x->P * x->table_length/x->R; /* post("*** oscbank OO ***"); post("initialized oscbank!"); post("synthesizing %d bins", x->hi_bin - x->lo_bin); post("FFTsize %d, overlap %d", x->N, x->overlap); post("vector size %d, Nw %d", x->vector_size, x->Nw); post("*** initialization done! ***"); */ } /**************************************************/ void fftease_obank_topfreq( t_oscbank *x, float topfreq ) { if( topfreq < x->c_fundamental ) { topfreq = OSCBANK_DEFAULT_TOPFREQ ; } x->hi_bin = 1; x->curfreq = 0; while( x->curfreq < topfreq ) { ++(x->hi_bin); x->curfreq += x->c_fundamental ; } if( x->hi_bin > x->N2) x->hi_bin = x->N2 ; } /**************************************************/ void fftease_obank_bottomfreq( t_oscbank *x, float bottomfreq ) { x->lo_bin = 0; x->curfreq = 0; while( x->curfreq < bottomfreq ) { ++(x->lo_bin); x->curfreq += x->c_fundamental ; } } /**************************************************/ void fftease_obank_analyze( t_oscbank *x ) { fold( x->input_buffer, x->Wanal, x->Nw, x->complex_spectrum, x->N, x->in_count ); rdft( x->N, 1, x->complex_spectrum, x->bitshuffle, x->trigland ); convert( x->complex_spectrum, x->interleaved_spectrum, x->N2, x->c_lastphase_in, x->c_fundamental, x->c_factor_in ); } /**************************************************/ void fftease_shiftin( t_oscbank *x, float *input ) { int i; int vector_size = x->vector_size; int Nw = x->Nw; float *input_buffer = x->input_buffer; for ( i = 0 ; i < (Nw - vector_size) ; i++ ) { input_buffer[i] = input_buffer[i + vector_size]; } for ( i = (Nw - vector_size) ; i < Nw; i++ ) { input_buffer[i] = *input++; } } /**************************************************/ void fftease_shiftout( t_oscbank *x, float *output ) { int i; int vector_size = x->vector_size; int Nw = x->Nw; float *output_buffer = x->output_buffer; float mult = x->mult; for ( i = 0; i < vector_size; i++ ) { *output++ = output_buffer[i] * mult; } for ( i = 0; i < Nw - vector_size; i++ ) { output_buffer[i] = output_buffer[i + vector_size]; } for ( i = Nw - vector_size; i < Nw; i++ ) { output_buffer[i] = 0.; } x->in_count += vector_size; } /**************************************************/ void fftease_obank_synthesize( t_oscbank *x ) { int amp, chan, freq; float a,ainc,f,finc,address; int n; float synthesis_threshold = x->synthesis_threshold; float *lastfreq = x->lastfreq; float *lastamp = x->lastamp; int table_length = x->table_length; float *output_buffer = x->output_buffer; int vector_size = x->vector_size; float i_vector_size = x->i_vector_size; int lo_bin = x->lo_bin; int hi_bin = x->hi_bin; float *interleaved_spectrum = x->interleaved_spectrum; float pitch_increment = x->pitch_increment; float *index = x->index; float *table = x->table; for ( chan = lo_bin; chan < hi_bin; chan++ ) { freq = ( amp = ( chan << 1 ) ) + 1; if ( interleaved_spectrum[amp] > synthesis_threshold ) { interleaved_spectrum[freq] *= pitch_increment; finc = ( interleaved_spectrum[freq] - ( f = lastfreq[chan] ) ) * i_vector_size; ainc = ( interleaved_spectrum[amp] - ( a = lastamp[chan] ) ) * i_vector_size; address = index[chan]; for ( n = 0; n < vector_size; n++ ) { output_buffer[n] += a*table[ (int) address ]; address += f; while ( address >= table_length ) address -= table_length; while ( address < 0 ) address += table_length; a += ainc; f += finc; } lastfreq[chan] = interleaved_spectrum[freq]; lastamp[chan] = interleaved_spectrum[amp]; index[chan] = address; } } } //////////////////////// void init_rdft(int n, int *ip, float *w) { int nw, nc; void makewt(int nw, int *ip, float *w); void makect(int nc, int *ip, float *c); nw = n >> 2; makewt(nw, ip, w); nc = n >> 2; makect(nc, ip, w + nw); return; } void rdft(int n, int isgn, float *a, int *ip, float *w) { int j, nw, nc; float xi; void bitrv2(int n, int *ip, float *a), cftsub(int n, float *a, float *w), rftsub(int n, float *a, int nc, float *c); nw = ip[0]; nc = ip[1]; if (isgn < 0) { a[1] = 0.5 * (a[1] - a[0]); a[0] += a[1]; for (j = 3; j <= n - 1; j += 2) { a[j] = -a[j]; } if (n > 4) { rftsub(n, a, nc, w + nw); bitrv2(n, ip + 2, a); } cftsub(n, a, w); for (j = 1; j <= n - 1; j += 2) { a[j] = -a[j]; } } else { if (n > 4) { bitrv2(n, ip + 2, a); } cftsub(n, a, w); if (n > 4) { rftsub(n, a, nc, w + nw); } xi = a[0] - a[1]; a[0] += a[1]; a[1] = xi; } } void bitrv2(int n, int *ip, float *a) { int j, j1, k, k1, l, m, m2; float xr, xi; ip[0] = 0; l = n; m = 1; while ((m << 2) < l) { l >>= 1; for (j = 0; j <= m - 1; j++) { ip[m + j] = ip[j] + l; } m <<= 1; } if ((m << 2) > l) { for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } else { m2 = m << 1; for (k = 1; k <= m - 1; k++) { for (j = 0; j <= k - 1; j++) { j1 = (j << 1) + ip[k]; k1 = (k << 1) + ip[j]; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; j1 += m2; k1 += m2; xr = a[j1]; xi = a[j1 + 1]; a[j1] = a[k1]; a[j1 + 1] = a[k1 + 1]; a[k1] = xr; a[k1 + 1] = xi; } } } } void cftsub(int n, float *a, float *w) { int j, j1, j2, j3, k, k1, ks, l, m; float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i; float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; l = 2; while ((l << 1) < n) { m = l << 2; for (j = 0; j <= l - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x0r - x2r; a[j2 + 1] = x0i - x2i; a[j1] = x1r - x3i; a[j1 + 1] = x1i + x3r; a[j3] = x1r + x3i; a[j3 + 1] = x1i - x3r; } if (m < n) { wk1r = w[2]; for (j = m; j <= l + m - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; a[j2] = x2i - x0i; a[j2 + 1] = x0r - x2r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * (x0r - x0i); a[j1 + 1] = wk1r * (x0r + x0i); x0r = x3i + x1r; x0i = x3r - x1i; a[j3] = wk1r * (x0i - x0r); a[j3 + 1] = wk1r * (x0i + x0r); } k1 = 1; ks = -1; for (k = (m << 1); k <= n - m; k += m) { k1++; ks = -ks; wk1r = w[k1 << 1]; wk1i = w[(k1 << 1) + 1]; wk2r = ks * w[k1]; wk2i = w[k1 + ks]; wk3r = wk1r - 2 * wk2i * wk1i; wk3i = 2 * wk2i * wk1r - wk1i; for (j = k; j <= l + k - 2; j += 2) { j1 = j + l; j2 = j1 + l; j3 = j2 + l; x0r = a[j] + a[j1]; x0i = a[j + 1] + a[j1 + 1]; x1r = a[j] - a[j1]; x1i = a[j + 1] - a[j1 + 1]; x2r = a[j2] + a[j3]; x2i = a[j2 + 1] + a[j3 + 1]; x3r = a[j2] - a[j3]; x3i = a[j2 + 1] - a[j3 + 1]; a[j] = x0r + x2r; a[j + 1] = x0i + x2i; x0r -= x2r; x0i -= x2i; a[j2] = wk2r * x0r - wk2i * x0i; a[j2 + 1] = wk2r * x0i + wk2i * x0r; x0r = x1r - x3i; x0i = x1i + x3r; a[j1] = wk1r * x0r - wk1i * x0i; a[j1 + 1] = wk1r * x0i + wk1i * x0r; x0r = x1r + x3i; x0i = x1i - x3r; a[j3] = wk3r * x0r - wk3i * x0i; a[j3 + 1] = wk3r * x0i + wk3i * x0r; } } } l = m; } if (l < n) { for (j = 0; j <= l - 2; j += 2) { j1 = j + l; x0r = a[j] - a[j1]; x0i = a[j + 1] - a[j1 + 1]; a[j] += a[j1]; a[j + 1] += a[j1 + 1]; a[j1] = x0r; a[j1 + 1] = x0i; } } } void rftsub(int n, float *a, int nc, float *c) { int j, k, kk, ks; float wkr, wki, xr, xi, yr, yi; ks = (nc << 2) / n; kk = 0; for (k = (n >> 1) - 2; k >= 2; k -= 2) { j = n - k; kk += ks; wkr = 0.5 - c[kk]; wki = c[nc - kk]; xr = a[k] - a[j]; xi = a[k + 1] + a[j + 1]; yr = wkr * xr - wki * xi; yi = wkr * xi + wki * xr; a[k] -= yr; a[k + 1] -= yi; a[j] += yr; a[j + 1] -= yi; } } void makewt(int nw, int *ip, float *w) { void bitrv2(int n, int *ip, float *a); int nwh, j; float delta, x, y; ip[0] = nw; ip[1] = 1; if (nw > 2) { nwh = nw >> 1; delta = atan(1.0) / nwh; w[0] = 1; w[1] = 0; w[nwh] = cos(delta * nwh); w[nwh + 1] = w[nwh]; for (j = 2; j <= nwh - 2; j += 2) { x = cos(delta * j); y = sin(delta * j); w[j] = x; w[j + 1] = y; w[nw - j] = y; w[nw - j + 1] = x; } bitrv2(nw, ip + 2, w); } } void makect(int nc, int *ip, float *c) { int nch, j; float delta; ip[1] = nc; if (nc > 1) { nch = nc >> 1; delta = atan(1.0) / nch; c[0] = 0.5; c[nch] = 0.5 * cos(delta * nch); for (j = 1; j <= nch - 1; j++) { c[j] = 0.5 * cos(delta * j); c[nc - j] = 0.5 * sin(delta * j); } } } void convert(float *S, float *C, int N2, float *lastphase, float fundamental, float factor ) { float phase, phasediff; int real, imag, amp, freq; float a, b; int i; /* float myTWOPI, myPI; */ /* double sin(), cos(), atan(), hypot();*/ /* myTWOPI = 8.*atan(1.); myPI = 4.*atan(1.); */ for ( i = 0; i <= N2; i++ ) { imag = freq = ( real = amp = i<<1 ) + 1; a = ( i == N2 ? S[1] : S[real] ); b = ( i == 0 || i == N2 ? 0. : S[imag] ); C[amp] = hypot( a, b ); if ( C[amp] == 0. ) phasediff = 0.; else { phasediff = ( phase = -atan2( b, a ) ) - lastphase[i]; lastphase[i] = phase; while ( phasediff > PI ) phasediff -= TWOPI; while ( phasediff < -PI ) phasediff += TWOPI; } C[freq] = phasediff*factor + i*fundamental; } } void fold( float *I, float *W, int Nw, float *O, int N, int n ) { int i; for ( i = 0; i < N; i++ ) O[i] = 0.; while ( n < 0 ) n += N; n %= N; for ( i = 0; i < Nw; i++ ) { O[n] += I[i]*W[i]; if ( ++n == N ) n = 0; } } void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)))); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } pd-lyonpotpourri-3.0.1/splitspec~-help.pd000066400000000000000000000315251430526361000205460ustar00rootroot00000000000000#N canvas 531 40 755 671 12; #X obj 40 139 noise~; #N canvas 68 56 1298 641 splitspec-rfft 0; #X obj 33 76 inlet~; #X obj 33 520 outlet~; #X obj 33 146 rfft~, f 6; #X obj 33 581 block~ 1024 8; #X obj 33 335 poltocar~; #X obj 33 365 rifft~; #X obj 33 467 windowvec~; #X obj 33 395 *~ 0; #X obj 1107 163 *; #X msg 1059 85 1 1024 8; #X obj 1059 116 unpack f f f; #X obj 1059 195 /; #X floatatom 1059 227 12 0 0 0 - - -; #X text 962 228 rescale factor; #X obj 1059 54 loadbang; #X obj 1059 256 s \$0-rescale; #X obj 67 385 r \$0-rescale; #X obj 161 520 outlet~; #X obj 161 343 poltocar~; #X obj 161 373 rifft~; #X obj 161 467 windowvec~; #X obj 161 403 *~ 0; #X obj 195 393 r \$0-rescale; #X obj 280 520 outlet~; #X obj 280 343 poltocar~; #X obj 280 373 rifft~; #X obj 280 467 windowvec~; #X obj 280 403 *~ 0; #X obj 314 393 r \$0-rescale; #X obj 407 520 outlet~; #X obj 407 351 poltocar~; #X obj 407 381 rifft~; #X obj 407 467 windowvec~; #X obj 407 411 *~ 0; #X obj 441 401 r \$0-rescale; #X obj 537 520 outlet~; #X obj 537 353 poltocar~; #X obj 537 383 rifft~; #X obj 537 467 windowvec~; #X obj 537 413 *~ 0; #X obj 571 403 r \$0-rescale; #X obj 664 520 outlet~; #X obj 664 361 poltocar~; #X obj 664 391 rifft~; #X obj 664 467 windowvec~; #X obj 664 421 *~ 0; #X obj 698 411 r \$0-rescale; #X obj 783 520 outlet~; #X obj 783 361 poltocar~; #X obj 783 391 rifft~; #X obj 783 467 windowvec~; #X obj 783 421 *~ 0; #X obj 817 411 r \$0-rescale; #X obj 910 520 outlet~; #X obj 910 369 poltocar~; #X obj 910 399 rifft~; #X obj 910 467 windowvec~; #X obj 910 429 *~ 0; #X obj 944 419 r \$0-rescale; #X obj 444 100 inlet; #X obj 501 100 inlet; #X obj 562 100 inlet; #X obj 626 100 inlet; #X obj 1060 520 outlet; #X obj 1199 523 outlet; #X obj 33 281 lyonpotpourri/splitspec~ 8, f 159; #X obj 33 108 lyonpotpourri/windowvec~; #X obj 33 181 lyonpotpourri/cartopol~; #X text 140 582 <= set FFT size to 1024 with overlap factor 8; #X obj 1060 465 list prepend set; #X obj 1060 489 list trim; #X connect 0 0 66 0; #X connect 2 0 67 0; #X connect 2 1 67 1; #X connect 4 0 5 0; #X connect 4 1 5 1; #X connect 5 0 7 0; #X connect 6 0 1 0; #X connect 7 0 6 0; #X connect 8 0 11 1; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 10 1 8 0; #X connect 10 2 8 1; #X connect 11 0 12 0; #X connect 12 0 15 0; #X connect 14 0 9 0; #X connect 16 0 7 1; #X connect 18 0 19 0; #X connect 18 1 19 1; #X connect 19 0 21 0; #X connect 20 0 17 0; #X connect 21 0 20 0; #X connect 22 0 21 1; #X connect 24 0 25 0; #X connect 24 1 25 1; #X connect 25 0 27 0; #X connect 26 0 23 0; #X connect 27 0 26 0; #X connect 28 0 27 1; #X connect 30 0 31 0; #X connect 30 1 31 1; #X connect 31 0 33 0; #X connect 32 0 29 0; #X connect 33 0 32 0; #X connect 34 0 33 1; #X connect 36 0 37 0; #X connect 36 1 37 1; #X connect 37 0 39 0; #X connect 38 0 35 0; #X connect 39 0 38 0; #X connect 40 0 39 1; #X connect 42 0 43 0; #X connect 42 1 43 1; #X connect 43 0 45 0; #X connect 44 0 41 0; #X connect 45 0 44 0; #X connect 46 0 45 1; #X connect 48 0 49 0; #X connect 48 1 49 1; #X connect 49 0 51 0; #X connect 50 0 47 0; #X connect 51 0 50 0; #X connect 52 0 51 1; #X connect 54 0 55 0; #X connect 54 1 55 1; #X connect 55 0 57 0; #X connect 56 0 53 0; #X connect 57 0 56 0; #X connect 58 0 57 1; #X connect 59 0 65 0; #X connect 60 0 65 2; #X connect 61 0 65 3; #X connect 62 0 65 4; #X connect 65 0 4 0; #X connect 65 1 4 1; #X connect 65 2 18 0; #X connect 65 3 18 1; #X connect 65 4 24 0; #X connect 65 5 24 1; #X connect 65 6 30 0; #X connect 65 7 30 1; #X connect 65 8 36 0; #X connect 65 9 36 1; #X connect 65 10 42 0; #X connect 65 11 42 1; #X connect 65 12 48 0; #X connect 65 13 48 1; #X connect 65 14 54 0; #X connect 65 15 54 1; #X connect 65 16 69 0; #X connect 65 17 64 0; #X connect 66 0 2 0; #X connect 67 0 65 0; #X connect 67 1 65 1; #X connect 69 0 70 0; #X connect 70 0 63 0; #X restore 40 256 pd splitspec-rfft; #X obj 368 230 hsl 128 15 0 1 0 0 empty empty manual_override_controller -2 -8 0 10 -204786 -1 -1 0 1; #X obj 368 156 hsl 128 15 0 1 0 0 empty empty table_offset -2 -8 0 10 -204786 -1 -1 0 1; #X obj 368 193 hsl 128 15 0 1 0 0 empty empty bin_offset -2 -8 0 10 -204786 -1 -1 0 1; #X obj 114 169 r splitspec-help-msgs; #N canvas 197 462 884 460 messages 0; #X msg 322 119 scramble; #X obj 440 85 metro 5000; #X obj 440 51 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 44 180 spiral; #X obj 395 154 loadbang; #X msg 395 183 ramptime 5000; #X msg 527 243 manual_override \$1; #X obj 527 205 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 461 45 use for constantly changing spectra; #X msg 222 113 bypass \$1; #X obj 222 87 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X obj 337 302 s splitspec-help-msgs; #X text 545 206 slider control of x-fade amount; #X text 245 86 turn off spectral splitting; #X text 490 176 interpolation time in ms.; #X text 91 175 spiral configuration; #X text 27 27 break into contiguous blocks of spectrum (power of 2 only); #X msg 30 55 squantize 7; #X text 381 120 scramble bin assignments; #X connect 0 0 11 0; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 11 0; #X connect 4 0 5 0; #X connect 5 0 11 0; #X connect 6 0 11 0; #X connect 7 0 6 0; #X connect 9 0 11 0; #X connect 10 0 9 0; #X connect 17 0 11 0; #X restore 40 473 pd messages; #X floatatom 40 549 5 0 0.25 0 - - -; #X obj 43 524 hsl 128 15 0 2 0 0 empty empty gain -2 -8 0 10 -204800 -1 -1 0 1; #X obj 40 577 s splitspec-help-mgain; #N canvas 0 22 1204 446 gain8 0; #X obj 36 44 inlet~; #X obj 36 106 outlet~; #X obj 36 76 *~; #X obj 79 44 r splitspec-help-mgain; #X obj 223 44 inlet~; #X obj 223 106 outlet~; #X obj 223 76 *~; #X obj 266 44 r splitspec-help-mgain; #X obj 409 44 inlet~; #X obj 409 106 outlet~; #X obj 409 76 *~; #X obj 452 44 r splitspec-help-mgain; #X obj 596 44 inlet~; #X obj 596 106 outlet~; #X obj 596 76 *~; #X obj 639 44 r splitspec-help-mgain; #X obj 781 44 inlet~; #X obj 781 106 outlet~; #X obj 781 76 *~; #X obj 824 44 r splitspec-help-mgain; #X obj 968 44 inlet~; #X obj 968 106 outlet~; #X obj 968 76 *~; #X obj 1011 44 r splitspec-help-mgain; #X obj 1154 44 inlet~; #X obj 1154 106 outlet~; #X obj 1154 76 *~; #X obj 1197 44 r splitspec-help-mgain; #X obj 1341 44 inlet~; #X obj 1341 106 outlet~; #X obj 1341 76 *~; #X obj 1384 44 r splitspec-help-mgain, f 35; #X connect 0 0 2 0; #X connect 2 0 1 0; #X connect 3 0 2 1; #X connect 4 0 6 0; #X connect 6 0 5 0; #X connect 7 0 6 1; #X connect 8 0 10 0; #X connect 10 0 9 0; #X connect 11 0 10 1; #X connect 12 0 14 0; #X connect 14 0 13 0; #X connect 15 0 14 1; #X connect 16 0 18 0; #X connect 18 0 17 0; #X connect 19 0 18 1; #X connect 20 0 22 0; #X connect 22 0 21 0; #X connect 23 0 22 1; #X connect 24 0 26 0; #X connect 26 0 25 0; #X connect 27 0 26 1; #X connect 28 0 30 0; #X connect 30 0 29 0; #X connect 31 0 30 1; #X restore 40 314 pd gain8; #X floatatom 366 297 5 0 0 0 sync-phase - -; #N canvas 244 54 706 474 storage 0; #X obj 191 298 s splitspec-help-msgs; #X msg 85 125 store \$1; #X msg 80 82 1; #X msg 119 79 2; #X msg 159 80 3; #X msg 202 178 recall \$1; #X msg 212 133 1; #X msg 251 130 2; #X msg 291 131 3; #X text 247 55 store and then recall bin configuration patterns; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 3 0 1 0; #X connect 4 0 1 0; #X connect 5 0 0 0; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 8 0 5 0; #X restore 293 473 pd storage; #N canvas 600 60 737 752 current-bin-configuration 0; #X obj 123 50 inlet; #X msg 123 105 119 71 363 150 306 13 72 392 318 56 224 446 259 305 60 77 460 136 334 273 245 177 276 216 415 59 10 196 341 252 380 499 11 299 172 164 137 465 186 495 46 201 366 483 411 32 452 85 28 503 484 204 396 243 15 418 487 62 65 228 425 190 459 170 101 300 174 19 330 406 116 250 0 225 80 491 402 436 407 6 304 86 102 473 193 171 222 340 67 38 493 323 182 400 281 183 369 138 58 132 368 51 274 361 279 320 247 210 168 275 474 504 155 249 153 78 428 322 349 489 21 126 388 79 422 105 103 485 139 440 370 202 37 444 129 347 229 337 121 115 287 98 100 123 433 68 313 27 203 291 420 285 188 419 142 200 93 424 451 360 382 89 109 73 207 508 356 134 296 286 26 107 397 403 234 54 352 223 117 263 44 232 246 335 409 146 221 355 33 52 143 426 87 135 288 152 39 497 265 173 376 227 477 449 181 57 272 253 500 84 293 343 256 214 448 266 342 124 258 254 447 441 3 405 455 381 40 486 36 328 18 336 490 393 106 348 365 464 244 269 437 235 442 97 470 35 159 481 61 297 50 231 506 83 149 408 371 439 280 133 374 378 310 70 282 31 466 482 63 76 395 319 213 454 333 443 469 505 401 377 197 120 2 208 189 468 271 91 364 430 283 338 41 488 354 151 289 112 176 127 154 390 421 262 404 438 267 195 344 414 431 205 8 130 472 507 277 384 233 463 331 509 158 248 498 450 255 169 99 389 165 180 45 209 284 29 362 191 69 268 412 314 315 353 429 49 206 108 96 480 329 53 492 479 17 471 125 194 23 161 242 92 218 311 432 166 456 7 398 317 391 239 111 346 64 212 238 423 22 387 339 427 292 30 461 413 110 316 324 394 476 332 358 198 359 379 307 386 128 453 74 494 373 156 94 5 434 148 326 118 20 230 383 241 82 192 399 264 290 199 88 270 511 122 16 179 75 385 462 295 215 66 211 478 187 42 43 294 278 309 251 308 114 113 184 501 372 303 90 240 357 147 417 47 261 445 167 144 4 375 301 48 81 321 257 416 9 12 55 302 34 260 219 457 435 458 220 95 367 467 163 24 350 226 14 325 162 141 178 104 217 185 25 327 160 312 410 351 510 145 131 175 236 237 298 502 345 475 140 496 1 157; #X msg 176 27 showstate; #X obj 176 55 s splitspec-help-msgs; #X text 255 29 report current state of split spectrum; #N canvas 481 729 777 645 recall-previous-configuration 0; #X obj 123 37 inlet; #X msg 123 105 setstate 119 71 363 150 306 13 72 392 318 56 224 446 259 305 60 77 460 136 334 273 245 177 276 216 415 59 10 196 341 252 380 499 11 299 172 164 137 465 186 495 46 201 366 483 411 32 452 85 28 503 484 204 396 243 15 418 487 62 65 228 425 190 459 170 101 300 174 19 330 406 116 250 0 225 80 491 402 436 407 6 304 86 102 473 193 171 222 340 67 38 493 323 182 400 281 183 369 138 58 132 368 51 274 361 279 320 247 210 168 275 474 504 155 249 153 78 428 322 349 489 21 126 388 79 422 105 103 485 139 440 370 202 37 444 129 347 229 337 121 115 287 98 100 123 433 68 313 27 203 291 420 285 188 419 142 200 93 424 451 360 382 89 109 73 207 508 356 134 296 286 26 107 397 403 234 54 352 223 117 263 44 232 246 335 409 146 221 355 33 52 143 426 87 135 288 152 39 497 265 173 376 227 477 449 181 57 272 253 500 84 293 343 256 214 448 266 342 124 258 254 447 441 3 405 455 381 40 486 36 328 18 336 490 393 106 348 365 464 244 269 437 235 442 97 470 35 159 481 61 297 50 231 506 83 149 408 371 439 280 133 374 378 310 70 282 31 466 482 63 76 395 319 213 454 333 443 469 505 401 377 197 120 2 208 189 468 271 91 364 430 283 338 41 488 354 151 289 112 176 127 154 390 421 262 404 438 267 195 344 414 431 205 8 130 472 507 277 384 233 463 331 509 158 248 498 450 255 169 99 389 165 180 45 209 284 29 362 191 69 268 412 314 315 353 429 49 206 108 96 480 329 53 492 479 17 471 125 194 23 161 242 92 218 311 432 166 456 7 398 317 391 239 111 346 64 212 238 423 22 387 339 427 292 30 461 413 110 316 324 394 476 332 358 198 359 379 307 386 128 453 74 494 373 156 94 5 434 148 326 118 20 230 383 241 82 192 399 264 290 199 88 270 511 122 16 179 75 385 462 295 215 66 211 478 187 42 43 294 278 309 251 308 114 113 184 501 372 303 90 240 357 147 417 47 261 445 167 144 4 375 301 48 81 321 257 416 9 12 55 302 34 260 219 457 435 458 220 95 367 467 163 24 350 226 14 325 162 141 178 104 217 185 25 327 160 312 410 351 510 145 131 175 236 237 298 502 345 475 140 496 1 157; #X obj 123 553 s splitspec-help-msgs; #X connect 0 0 1 0; #X connect 1 0 2 0; #X restore 133 616 pd recall-previous-configuration; #X obj 133 558 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 157 561 use "setstate" method to recall a previously stored spectrum split; #X connect 0 0 1 0; #X connect 2 0 3 0; #X connect 6 0 5 0; #X restore 356 378 pd current-bin-configuration; #X obj 40 440 dac~ 1 2 3 4 5 6 7 8, f 35; #X msg 136 473 <= how it works; #X text 300 441 <= 8 channel output for spatialization; #X obj 29 6 lpp-icon splitspec~; #X text 33 94 [splitspec~] divides a spectrum into N separate parts (N must be a power of 2 \, less than the FFT size) \, which can then be spatialized. Smooth transitions between spectral divisions are provided. , f 105; #X text 371 472 <= save configurations; #X msg 253 575 \; pd dsp \$1; #X obj 253 533 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X text 276 533 turn on DSP; #X text 251 41 - FFT-based spectral splitting; #X connect 0 0 1 0; #X connect 1 0 10 0; #X connect 1 1 10 1; #X connect 1 2 10 2; #X connect 1 3 10 3; #X connect 1 4 10 4; #X connect 1 5 10 5; #X connect 1 6 10 6; #X connect 1 7 10 7; #X connect 1 8 13 0; #X connect 1 9 11 0; #X connect 2 0 1 4; #X connect 3 0 1 2; #X connect 4 0 1 3; #X connect 5 0 1 1; #X connect 7 0 9 0; #X connect 8 0 7 0; #X connect 10 0 14 0; #X connect 10 1 14 1; #X connect 10 2 14 2; #X connect 10 3 14 3; #X connect 10 4 14 4; #X connect 10 5 14 5; #X connect 10 6 14 6; #X connect 10 7 14 7; #X connect 21 0 20 0; pd-lyonpotpourri-3.0.1/splitspec~.c000066400000000000000000000541411430526361000174360ustar00rootroot00000000000000#include "MSPd.h" #define MAXSTORE (128) #define OBJECT_NAME "splitspec~" /* Pd version of splitspec~ */ static t_class *splitspec_class; typedef struct _splitspec { t_object x_obj; t_float x_f; int N, N_old; int N2, N2_old; void *list_outlet; void *phase_outlet; t_atom *list_data; // Avoid buffer sharing overwrites with local copies t_float *inmag_loc; t_float *inphase_loc; t_float *t_offset_loc; t_float *b_offset_loc; t_float *manual_control_loc; float frame_duration; int table_offset; int bin_offset; float *last_mag; float *current_mag; int *last_binsplit; int *current_binsplit; int **stored_binsplits; short *stored_slots; short new_distribution; short interpolation_completed; short bypass; short initialize; int manual_override; long countdown_samps; // samps for a given fadetime long counter; int overlap_factor; // compensate for overlap in fade float sr; float fl_phase; // show phase as float int hopsamps; // number of samples to hop int channel_count; // number of channels to split t_clock *phase_clock; t_float **magvecs;// connect to mag input vectors t_float **phasevecs;// point to phase input vectors } t_splitspec; static void *splitspec_new(t_symbol *s, int argc, t_atom *argv); // static t_int *offset_perform(t_int *w); static t_int *splitspec_perform(t_int *w); static void splitspec_dsp(t_splitspec *x, t_signal **sp); static void splitspec_showstate( t_splitspec *x ); static void splitspec_bypass( t_splitspec *x, t_floatarg toggle); static void splitspec_manual_override( t_splitspec *x, t_floatarg toggle ); static void splitspec_setstate (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv); static void splitspec_ramptime (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv); // static int rand_index( int max); static void splitspec_scramble (t_splitspec *x); static void splitspec_spiral(t_splitspec *x); static void splitspec_squantize(t_splitspec *x, t_floatarg blockbins); static void splitspec_overlap( t_splitspec *x, t_floatarg factor); static void splitspec_store( t_splitspec *x, t_floatarg floc); static void splitspec_recall( t_splitspec *x, t_floatarg floc); static void splitspeci( int *current_binsplit, int *last_binsplit, int bin_offset, int table_offset, float *current_mag, float *last_mag, float *inmag, float *dest_mag, int start, int end, int n, float oldfrac, float newfrac ); static void splitspec( int *binsplit, int bin_offset, int table_offset, float *inmag, float *dest_mag, int start, int end, int n ); static void splitspec_dsp_free( t_splitspec *x ); static void splitspec_phaseout(t_splitspec *x); static int splitspec_closestPowerOfTwo(int p); void splitspec_tilde_setup(void) { splitspec_class = class_new(gensym("splitspec~"), (t_newmethod)splitspec_new, (t_method)splitspec_dsp_free, sizeof(t_splitspec),0,A_GIMME,0); /* splitspec_class = class_new(gensym("splitspec~"), (t_newmethod)splitspec_new, 0, sizeof(t_splitspec),0,A_GIMME,0); */ CLASS_MAINSIGNALIN(splitspec_class, t_splitspec, x_f); class_addmethod(splitspec_class, (t_method)splitspec_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(splitspec_class, (t_method)splitspec_showstate, gensym("showstate"),0); class_addmethod(splitspec_class, (t_method)splitspec_scramble, gensym("scramble"),0); class_addmethod(splitspec_class, (t_method)splitspec_spiral, gensym("spiral"),0); class_addmethod(splitspec_class, (t_method)splitspec_squantize, gensym("squantize"),A_FLOAT,0); class_addmethod(splitspec_class, (t_method)splitspec_manual_override, gensym("manual_override"),A_FLOAT,0); class_addmethod(splitspec_class, (t_method)splitspec_bypass, gensym("bypass"),A_FLOAT,0); class_addmethod(splitspec_class, (t_method)splitspec_store, gensym("store"),A_FLOAT,0); class_addmethod(splitspec_class, (t_method)splitspec_recall, gensym("recall"),A_FLOAT,0); class_addmethod(splitspec_class, (t_method)splitspec_overlap, gensym("overlap"),A_FLOAT,0); class_addmethod(splitspec_class, (t_method)splitspec_setstate, gensym("setstate"),A_GIMME,0); class_addmethod(splitspec_class, (t_method)splitspec_ramptime, gensym("ramptime"),A_GIMME,0); potpourri_announce(OBJECT_NAME); } void splitspec_phaseout(t_splitspec *x) { outlet_float(x->phase_outlet, x->fl_phase); } void splitspec_overlap( t_splitspec *x, t_floatarg fol ) { int overlap = (int)fol; if( overlap < 2 ) { post("splitspec~: illegal overlap %d",overlap); } x->overlap_factor = overlap; } void splitspec_spiral(t_splitspec *x) { int i,j,k; int offset; int channel_count = x->channel_count; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; int N2 = x->N2; offset = N2 / channel_count; x->new_distribution = 1; x->interpolation_completed = 0; for( i = 0; i < N2; i++ ) { last_binsplit[i] = current_binsplit[i]; } k = 0; for( i = 0; i < N2 / channel_count; i++) { for(j = 0; j < channel_count; j++) { current_binsplit[i + (j * offset)] = k++; } } if(! x->counter) { // Ramp Off - Immediately set last to current for( i = 0; i < N2; i++ ) { last_binsplit[ i ] = current_binsplit[ i ]; } } } void splitspec_squantize(t_splitspec *x, t_floatarg bb) { int i, j, k; int maxblock; int iterations; int bincount = 0; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; int blockbins = (int) bb; int N2 = x->N2; int channel_count = x->channel_count; blockbins = splitspec_closestPowerOfTwo( blockbins ); maxblock = N2 / channel_count; if( blockbins < 1 || blockbins > maxblock ) { pd_error(0, "%d is out of bounds - must be between 1 and %d", blockbins, maxblock); return; } iterations = N2 / channel_count / blockbins; x->new_distribution = 1; x->interpolation_completed = 0; for( i = 0; i < N2; i++ ) { last_binsplit[i] = current_binsplit[i]; } if( iterations == 1 ) { for( i = 0; i < N2 ; i++ ) { current_binsplit[i] = i; } } else { for( k = 0; k < iterations; k++ ) { for( i = 0; i < N2; i += maxblock ) { for( j = 0; j < blockbins; j++ ) { if( i + j + k * blockbins < N2 ) { current_binsplit[i + j + k * blockbins] = bincount++; // post("assigning %d to position %d", bincount-1, i+j+k*blockbins); } else { // pd_error(0, "%d out of range", i + j + k * blockbins); } } } } } // x->frames_left = x->ramp_frames; if(! x->counter) { // Ramp Off - Immediately set last to current for( i = 0; i < N2; i++ ) { last_binsplit[ i ] = current_binsplit[ i ]; } } } void splitspec_bypass( t_splitspec *x, t_floatarg toggle ) { x->bypass = (int)toggle; } void splitspec_manual_override( t_splitspec *x, t_floatarg toggle ) { x->manual_override = (int) toggle; } void splitspec_dsp_free( t_splitspec *x ) { int i; if(x->initialize == 0) { free(x->list_data); free(x->last_binsplit); free(x->current_binsplit); free(x->last_mag); free(x->current_mag); free(x->stored_slots); for(i = 0; i < MAXSTORE; i++) { free(x->stored_binsplits[i]); } free(x->stored_binsplits); free(x->inmag_loc); free(x->inphase_loc); free(x->t_offset_loc); free(x->b_offset_loc); free(x->manual_control_loc); free(x->magvecs); free(x->phasevecs); clock_free(x->phase_clock); } } void splitspeci( int *current_binsplit, int *last_binsplit, int bin_offset, int table_offset, float *current_mag, float *last_mag, float *inmag, float *dest_mag, int start, int end, int n, float oldfrac, float newfrac ) { int i; int bindex; for( i = 0; i < n; i++ ) { last_mag[i] = current_mag[i] = 0.0; } for( i = start; i < end; i++ ) { bindex = current_binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; current_mag[ bindex ] = inmag[ bindex ]; bindex = last_binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; last_mag[ bindex ] = inmag[ bindex ]; } for( i = 0; i < n; i++) { if(! current_mag[i] && ! last_mag[i]) { dest_mag[i] = 0.0; } else { dest_mag[i] = oldfrac * last_mag[i] + newfrac * current_mag[i]; } } } void splitspec( int *binsplit, int bin_offset, int table_offset, float *inmag, float *dest_mag, int start, int end, int n ) { int i; int bindex; // n is actually N2 for( i = start; i < end; i++) { bindex = binsplit[ (i + table_offset) % n ]; bindex = ( bindex + bin_offset ) % n; dest_mag[ bindex ] = inmag[ bindex ]; } } void splitspec_store( t_splitspec *x, t_floatarg floc) { int **stored_binsplits = x->stored_binsplits; int *current_binsplit = x->current_binsplit; short *stored_slots = x->stored_slots; int location = (int)floc; int i; if( location < 0 || location > MAXSTORE - 1 ) { pd_error(0, "location must be between 0 and %d, but was %d", MAXSTORE, location); return; } for(i = 0; i < x->N2; i++ ) { stored_binsplits[location][i] = current_binsplit[i]; } stored_slots[location] = 1; // post("stored bin split at location %d", location); } void splitspec_recall( t_splitspec *x, t_floatarg floc) { int **stored_binsplits = x->stored_binsplits; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; short *stored_slots = x->stored_slots; int i; int location = (int)floc; if( location < 0 || location > MAXSTORE - 1 ) { pd_error(0, "location must be between 0 and %d, but was %d", MAXSTORE, location); return; } if( ! stored_slots[location] ) { pd_error(0, "nothing stored at location %d", location); return; } for(i = 0; i < x->N2; i++ ) { last_binsplit[i] = current_binsplit[i]; current_binsplit[i] = stored_binsplits[location][i]; } x->new_distribution = 1; x->interpolation_completed = 0; // x->frames_left = x->ramp_frames; if(! x->counter) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ) { x->last_binsplit[ i ] = x->current_binsplit[ i ]; } } } void *splitspec_new(t_symbol *s, int argc, t_atom *argv) { int i; t_splitspec *x = (t_splitspec *)pd_new(splitspec_class); // x->channel_count = 8; // hard wire just for now x->channel_count = (int) atom_getfloatarg(0, argc, argv); x->channel_count = splitspec_closestPowerOfTwo( x->channel_count ); // post("Channel count is: %d", x->channel_count); srand( time( 0 ) ); for(i=0; i < 4; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd, gensym("signal"),gensym("signal")); } for(i=0; i < x->channel_count * 2; i++) { outlet_new(&x->x_obj, gensym("signal")); } x->list_outlet = (t_outlet *) outlet_new(&x->x_obj, gensym("list")); // to report random distribution x->phase_outlet = (t_outlet *) outlet_new((t_object *)x, &s_float); x->phase_clock = (t_clock *) clock_new((void *)x, (t_method)splitspec_phaseout); x->bypass = 0; x->table_offset = 0; x->bin_offset = 0; x->sr = sys_getsr(); x->counter = 0; x->overlap_factor = 8; // default x->countdown_samps = 1.0 * x->sr; // 1 second fade time by default x->initialize = 1; x->manual_override = 0; x->inmag_loc = (t_float *) getbytes(8192 * sizeof(t_float)); x->inphase_loc = (t_float *) getbytes(8192 * sizeof(t_float)); x->t_offset_loc = (t_float *) getbytes(8192 * sizeof(t_float)); x->b_offset_loc = (t_float *) getbytes(8192 * sizeof(t_float)); x->manual_control_loc = (t_float *) getbytes(8192 * sizeof(t_float)); x->magvecs = (t_float **) getbytes(x->channel_count * sizeof(t_float *)); x->phasevecs = (t_float **) getbytes(x->channel_count * sizeof(t_float *)); return x; } int splitspec_closestPowerOfTwo(int p) { int base = 2; while(base < p) { base *= 2; } return base; } t_int *splitspec_perform(t_int *w) { int i, j; t_splitspec *x = (t_splitspec *) (w[1]); int channel_count = x->channel_count; float *inmag = (t_float *)(w[2]); float *inphase = (t_float *)(w[3]); float *t_offset = (t_float *)(w[4]); float *b_offset = (t_float *)(w[5]); float *manual_control = (t_float *)(w[6]); t_float **magvecs = x->magvecs; t_float **phasevecs = x->phasevecs; int n = (int) w[7 + (channel_count * 2)]; int table_offset = x->table_offset; int bin_offset = x->bin_offset; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; float *last_mag = x->last_mag; float *current_mag = x->current_mag; long counter = x->counter; long countdown_samps = x->countdown_samps; float frac, oldgain, newgain; t_float *inmag_loc = x->inmag_loc; t_float *inphase_loc = x->inphase_loc; t_float *t_offset_loc = x->t_offset_loc; t_float *b_offset_loc = x->b_offset_loc; t_float *manual_control_loc = x->manual_control_loc; int next_ptr = 8 + (channel_count * 2); int hopsamps = x->hopsamps; int N2 = x->N2; /****/ // copy inputs to local buffers for(i = 0; i < n; i++) { inmag_loc[i] = inmag[i]; inphase_loc[i] = inphase[i]; t_offset_loc[i] = t_offset[i]; b_offset_loc[i] = b_offset[i]; manual_control_loc[i] = manual_control[i]; } // assign local vector pointers for(i = 0, j= 0; i < channel_count * 2; i+=2, j++) { magvecs[j] = (t_float *) w[ 7 + i ]; phasevecs[j] = (t_float *) w[ 8 + i ]; } table_offset = *t_offset_loc * n; bin_offset = *b_offset_loc * n; if( table_offset < 0 ) table_offset *= -1; if( bin_offset < 0 ) bin_offset *= -1; // n == fftsize / 2 (N2) // n is the number of "bins", and is also the number of values in each signal vector if( x->bypass ) { for( i = 0; i < n; i++) { for(j = 0; j < channel_count; j++) { magvecs[j][i] = inmag_loc[i] * 0.5;; phasevecs[j][i] = inphase_loc[i]; } } return (w + next_ptr); } // ZERO OUT MAGNITUDES AND COPY PHASES TO OUTPUT for( i = 0; i < n; i++ ) { for(j = 0; j < channel_count; j++) { magvecs[j][i] = 0.0; phasevecs[j][i] = inphase_loc[i]; } } // Special case of live control over interpolation if( x->manual_override ) { // do interpolation frac = *manual_control_loc; // sanity check here if( frac < 0 ) { frac = 0; } if( frac >1.0 ){ frac = 1.0; } oldgain = cos( frac * PIOVERTWO ); newgain = sin( frac * PIOVERTWO ); for(j = 0; j < channel_count; j++) { splitspeci( current_binsplit, last_binsplit, bin_offset, table_offset, current_mag, last_mag, inmag_loc, magvecs[j], N2*j/channel_count, N2*(j+1)/channel_count, N2, oldgain, newgain ); } return (w + next_ptr); } // Normal operation if( x->new_distribution ) { x->new_distribution = 0; // put out contents of last distribution for(j = 0; j < channel_count; j++) { splitspec(last_binsplit, bin_offset, table_offset, inmag_loc, magvecs[j], N2*j/channel_count, N2*(j+1)/channel_count, N2); } frac = 0.0; } else if ( x->interpolation_completed ) { // put out contents of current distribution for(j = 0; j < channel_count; j++) { splitspec(current_binsplit, bin_offset, table_offset, inmag_loc, magvecs[j], N2*j/channel_count, N2*(j+1)/channel_count, N2); } frac = 1.0; } else { // do interpolation frac = (float) counter / (float) countdown_samps; oldgain = cos( frac * PIOVERTWO ); newgain = sin( frac * PIOVERTWO ); for(j = 0; j < channel_count; j++) { splitspeci( current_binsplit, last_binsplit, bin_offset, table_offset, current_mag, last_mag, inmag_loc, magvecs[j], N2*j/channel_count, N2*(j+1)/channel_count, N2, oldgain, newgain ); } // end of interpolation counter += hopsamps; if( counter >= countdown_samps ) { counter = countdown_samps; x->interpolation_completed = 1; } } x->fl_phase = frac; clock_delay(x->phase_clock,0.0); // send current phase to float outlet x->counter = counter; return (w + next_ptr); } void splitspec_scramble (t_splitspec *x) { int i; int max = x->N2; int swapi, tmp; int N2 = x->N2; int *current_binsplit = x->current_binsplit; int *last_binsplit = x->last_binsplit; x->new_distribution = 1; x->interpolation_completed = 0; // Copy current mapping to last mapping (first time this will be all zeros) for( i = 0; i < x->N2; i++ ) { last_binsplit[i] = current_binsplit[i]; } for( i = 0; i < N2; i++ ) { current_binsplit[i] = i; } max = N2; for(i = 0; i < N2; i++) { swapi = rand() % max; tmp = current_binsplit[swapi]; current_binsplit[swapi] = current_binsplit[max - 1]; current_binsplit[max - 1] = tmp; --max; } /* for(i = 0; i < N2; i++) { post("i: %d, dex: %d", i, current_binsplit[i]); } */ x->counter = 0; if(! x->countdown_samps ) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ) { last_binsplit[ i ] = current_binsplit[ i ]; } } } void splitspec_setstate (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv) { short i; if( argc != x->N2 ) { pd_error(0, "list must be of length %d, but actually was %d", x->N2, argc); return; } for( i = 0; i < x->N2; i++ ) { x->last_binsplit[ i ] = x->current_binsplit[ i ]; x->current_binsplit[ i ] = 0; } for (i=0; i < argc; i++) { x->current_binsplit[i] = atom_getintarg(i, argc, argv ); } // x->frames_left = x->ramp_frames; if(!x->counter) { // Ramp Off - Immediately set last to current for( i = 0; i < x->N2; i++ ) { x->last_binsplit[ i ] = x->current_binsplit[ i ]; } } return; } void splitspec_ramptime (t_splitspec *x, t_symbol *msg, int argc, t_atom *argv) { float rampdur; rampdur = atom_getfloatarg(0,argc,argv) * 0.001; // convert from milliseconds x->countdown_samps = rampdur * x->sr; x->counter = 0; // post("countdown samps :%d", x->countdown_samps ); } // REPORT CURRENT SHUFFLE STATUS void splitspec_showstate (t_splitspec *x ) { t_atom *list_data = x->list_data; short i, count; count = 0; // post("showing %d data points", x->N2); if(! x->initialize) { for( i = 0; i < x->N2; i++ ) { SETFLOAT(list_data+count,(float)x->current_binsplit[i]); ++count; } outlet_list(x->list_outlet,0,x->N2,list_data); } return; } void splitspec_dsp(t_splitspec *x, t_signal **sp) { int i; int vector_size; t_int **sigvec; int pointer_count; vector_size = sys_getblksize(); pointer_count = (x->channel_count * 2) + 7; sigvec = (t_int **) getbytes(sizeof(t_int *) * pointer_count); for(i = 0; i < pointer_count; i++) { sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); } sigvec[0] = (t_int *)x; // first pointer is to the object sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N) for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets sigvec[i] = (t_int *)sp[i-1]->s_vec; } /* FFT size (N) == vector size. (Pd only. Max has a different approach.) There is one vector with the magnitudes, and another with the phases, each of size . Therefore N2+2 (or the vector size/2 + 1) is the actual number of bins. Therefore N2/split is the number of bins assigned to each splitted channel. */ // post("vector size %d, sys vector size: %d",vector_size, sys_getblksize() ); // post("splitspec: samples per vector: %d, sys blocksize %d", sp[0]->s_n, sys_getblksize()); if( ! sp[0]->s_sr ) { pd_error(0, "splitspec~: zero sample rate!"); return; } if( x->initialize || x->sr != sys_getsr() || x->N != sp[0]->s_n) { x->sr = sys_getsr(); x->N = sp[0]->s_n; x->N2 = sp[0]->s_n / 2; // post("FFT size is %d, N2 is %d",x->N, x->N2); //R = sys_getsr(); // post("sampling rate: %f, vector thinks it is: %f", sys_getsr(), sp[0]->s_sr); //funda = R / (2. * (float) x->N) ; if(x->initialize) { x->list_data = (t_atom *) getbytes((x->N + 2) * sizeof(t_atom)); x->last_binsplit = (int *) getbytes( x->N2 * sizeof(int)); x->current_binsplit = (int *) getbytes( x->N2 * sizeof(int)); x->last_mag = (float *) getbytes(x->N2 * sizeof(float)) ; x->current_mag = (float *) getbytes(x->N2 * sizeof(float)) ; x->stored_slots = (short *) getbytes(x->N2 * sizeof(short)); x->stored_binsplits = (int **) getbytes(MAXSTORE * sizeof(int *)); for( i = 0; i < MAXSTORE; i++ ) { x->stored_binsplits[i] = (int *)getbytes(x->N2 * sizeof(int)); } x->N_old = x->N; x->N2_old = x->N2; } else { x->list_data = (t_atom *) resizebytes((void *)x->list_data,(x->N_old + 2) * sizeof(t_atom), (x->N + 2) * sizeof(t_atom)); x->last_binsplit = (int *) resizebytes((void *)x->last_binsplit,x->N2_old * sizeof(int), x->N2 * sizeof(int)); x->current_binsplit = (int *) resizebytes((void *)x->current_binsplit,x->N2_old * sizeof(int), x->N2 * sizeof(int)); x->last_mag = (float *) resizebytes((void *)x->last_mag,x->N2_old * sizeof(float), x->N2 * sizeof(float)); x->current_mag = (float *) resizebytes((void *)x->current_mag,x->N2_old * sizeof(float), x->N2 * sizeof(float)); x->stored_slots = (short *) resizebytes((void *)x->stored_slots,x->N2_old * sizeof(short), x->N2 * sizeof(short)); for( i = 0; i < MAXSTORE; i++ ) { x->stored_binsplits[i] = (int *) resizebytes((void *)x->stored_binsplits[i],x->N2_old * sizeof(int), x->N2 * sizeof(int)); } for(i = 0; i < x->N2; i++) { x->last_mag[i] = 0.0; x->current_mag[i] = 0.0; x->current_binsplit[i] = i; x->last_binsplit[i] = i; } } x->frame_duration = (float) sp[0]->s_n / sp[0]->s_sr; splitspec_scramble( x ); for( i = 0; i < x->N2; i++ ) { x->last_binsplit[i] = x->current_binsplit[i]; } x->initialize = 0; x->counter = 0; } if(vector_size == 0) { // post("zero vector size!"); return; } else { x->hopsamps = x->N / x->overlap_factor; // post("hop samps: %d, overlap: %d", x->hopsamps, x->overlap_factor); } dsp_addv(splitspec_perform, pointer_count, (t_int *) sigvec); freebytes(sigvec, sizeof(t_int *) * pointer_count); } pd-lyonpotpourri-3.0.1/squash~-help.pd000066400000000000000000000056241430526361000200450ustar00rootroot00000000000000#N canvas 600 60 585 609 12; #N canvas 565 63 450 300 taps 0; #X obj 43 111 noise~; #X obj 118 79 metro 1000; #X msg 118 56 1; #X obj 118 33 loadbang; #X obj 168 201 line~; #X obj 63 226 *~; #X obj 63 260 outlet~; #X msg 118 155 1; #X msg 209 176 0.05 50; #X msg 271 176 0.01 900; #X msg 340 177 0 50; #X obj 209 149 delay 1; #X obj 271 149 delay 50; #X obj 339 149 delay 900; #X connect 0 0 5 0; #X connect 1 0 7 0; #X connect 1 0 11 0; #X connect 2 0 1 0; #X connect 3 0 2 0; #X connect 4 0 5 1; #X connect 5 0 6 0; #X connect 7 0 4 0; #X connect 8 0 4 0; #X connect 9 0 4 0; #X connect 10 0 4 0; #X connect 11 0 8 0; #X connect 11 0 12 0; #X connect 12 0 9 0; #X connect 12 0 13 0; #X connect 13 0 10 0; #X restore 28 253 pd taps; #X obj 57 279 r squash.messages; #X obj 28 312 lyonpotpourri/squash~; #X obj 28 369 lpp-meters; #X obj 22 24 lpp-icon squash~; #X text 24 132 [squash~] is based on a compression algorithm by Christopher Penrose. It can be useful for extreme effects \, and is notable for employing the overlap-add system found in FFTease externals \, though all processing is done in the time domain here. This processor is capable of generating extreme amplitude ranges. Use with caution \, with a low playback gain \, and do not use this external in performance until you are very familiar with its operation., f 77; #N canvas 600 60 450 300 init 0; #X obj 54 114 symbol \$0-ratio; #X msg 54 172 \; \$1 0.75 \; \$2 0.4; #X obj 166 114 symbol \$0-threshold; #X obj 54 143 pack s s; #X obj 54 85 t b b; #X obj 54 27 loadbang; #X obj 54 56 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X connect 0 0 3 0; #X connect 2 0 3 1; #X connect 3 0 1 0; #X connect 4 0 0 0; #X connect 4 1 2 0; #X connect 5 0 6 0; #X connect 6 0 4 0; #X restore 210 504 pd init; #N canvas 741 67 528 412 controls 0; #X obj 31 139 s squash.messages; #X msg 31 115 ratio \$1; #X obj 34 71 hsl 128 15 0.5 1 0 0 empty \$0-ratio ratio -2 -8 0 10 -204786 -1 -1 6350 1; #X floatatom 31 95 5 0.5 1.5 0 - - -; #X obj 29 243 s squash.messages; #X obj 32 175 hsl 128 15 0 0.001 0 0 empty empty noise_threshold -2 -8 0 10 -204786 -1 -1 0 1; #X floatatom 29 199 7 0 0 0 - - -; #X msg 29 219 nt \$1; #X text 171 174 set noise floor; #X obj 28 356 s squash.messages; #X obj 31 288 hsl 128 15 0 1 0 0 empty \$0-threshold compression_threshold -2 -8 0 10 -204786 -1 -1 5080 1; #X floatatom 28 312 7 0 0 0 - - -; #X msg 28 332 thresh \$1; #X text 170 287 set compression threshold; #X text 29 18 lower ratio values give higher compression \, values greater than 1 result in expansion. (warning - low values can make output VERY loud., f 71; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 1 0; #X connect 5 0 6 0; #X connect 6 0 7 0; #X connect 7 0 4 0; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 12 0 9 0; #X restore 210 474 pd controls; #X text 247 48 - an extreme compressor; #X connect 0 0 2 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 2 0 3 1; pd-lyonpotpourri-3.0.1/squash~.c000066400000000000000000000220041430526361000167250ustar00rootroot00000000000000#include "MSPd.h" #include "fftease.h" #define OBJECT_NAME "squash~" /* Pd version of squash~ */ static t_class *squash_class; typedef struct _squash { t_object x_obj; t_float x_f; int D; int N; int Nw; int N2; int incnt; int outcnt; float *Wanal; float *Wsyn; float *Hwin; float *buffer; float *input; float *output; float thresh; float ratio; float nt; float nmult; short mute; } t_squash; //static float boundrand(float min, float max); static void *squash_new(t_symbol *msg, int argc, t_atom *argv); static void squash_mute(t_squash *x, t_floatarg toggle); //static void squash_assist (t_squash *x, void *b, long msg, long arg, char *dst); //static void squash_dsp_free(t_squash *x); static double squash_squat( float *buffer, float thresh, float ratio, float nt, float nmult, int N ); static void squash_mute(t_squash *x, t_floatarg f); static void squash_thresh(t_squash *x, t_floatarg f); static void squash_nt(t_squash *x, t_floatarg f); static void squash_ratio(t_squash *x, t_floatarg f); static void squash_nmult(t_squash *x, t_floatarg f); static void squash_mute(t_squash *x, t_floatarg f); static void squash_free(t_squash *x); static void squash_dsp(t_squash *x, t_signal **sp); static void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ); static void fold( float *I, float *W, int Nw, float *O, int N, int n ); /* void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ); void makehamming( float *H, float *A, float *S, int Nw, int N, int I, int odd ); void makewindows( float *H, float *A, float *S, int Nw, int N, int I ); */ void squash_tilde_setup(void) { squash_class = class_new(gensym("squash~"), (t_newmethod)squash_new, (t_method)squash_free, sizeof(t_squash),0,A_GIMME,0); CLASS_MAINSIGNALIN(squash_class, t_squash, x_f); class_addmethod(squash_class, (t_method)squash_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(squash_class,(t_method)squash_thresh, gensym("thresh"), A_FLOAT, 0); class_addmethod(squash_class,(t_method)squash_nt, gensym("nt"), A_FLOAT, 0); class_addmethod(squash_class,(t_method)squash_nmult, gensym("nmult"), A_FLOAT, 0); class_addmethod(squash_class,(t_method)squash_ratio, gensym("ratio"), A_FLOAT, 0); class_addmethod(squash_class,(t_method)squash_mute, gensym("mute"), A_FLOAT, 0); potpourri_announce(OBJECT_NAME); } void *squash_new(t_symbol *msg, int argc, t_atom *argv) { t_squash *x = (t_squash *)pd_new(squash_class); outlet_new(&x->x_obj, gensym("signal")); x->D = sys_getblksize(); x->N = x->D * 4; x->Nw = x->N; x->N2 = x->N / 2; x->incnt = - x->Nw; x->Wanal = (float *) getbytes(x->Nw * sizeof(float)); x->Wsyn = (float *) getbytes(x->Nw * sizeof(float)); x->Hwin = (float *) getbytes(x->Nw * sizeof(float)); x->input = (float *) getbytes(x->Nw * sizeof(float)); x->output = (float *) getbytes(x->Nw * sizeof(float)); x->buffer = (float *) getbytes(x->N * sizeof(float)); lpp_makehanning(x->Hwin, x->Wanal, x->Wsyn, x->Nw, x->N, x->D, 0); x->thresh = 0.1; x->ratio = 1.; x->nt = .0000001; x->nmult = 0.1; x->mute = 0; return x; } void squash_free(t_squash *x) { freebytes(x->Wanal, x->Nw * sizeof(float)); freebytes(x->Wsyn, x->Nw * sizeof(float)); freebytes(x->Hwin, x->Nw * sizeof(float)); freebytes(x->input, x->Nw * sizeof(float)); freebytes(x->output, x->Nw * sizeof(float)); freebytes(x->buffer, x->N * sizeof(float)); } /* void makewindows( float *H, float *A, float *S, int Nw, int N, int I ) { int i ; float sum ; for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ) ; if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } void makehamming( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.54 - 0.46*cos( TWOPI*i/(Nw - 1) )); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.54 - 0.46*cos( TWOPI*i/(Nw - 1) ); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } void makehanning( float *H, float *A, float *S, int Nw, int N, int I, int odd ) { int i; float sum ; if (odd) { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = sqrt(0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1)))); } else { for ( i = 0 ; i < Nw ; i++ ) H[i] = A[i] = S[i] = 0.5 * (1. + cos(PI + TWOPI * i / (Nw - 1))); } if ( Nw > N ) { float x ; x = -(Nw - 1)/2. ; for ( i = 0 ; i < Nw ; i++, x += 1. ) if ( x != 0. ) { A[i] *= N*sin( PI*x/N )/(PI*x) ; if ( I ) S[i] *= I*sin( PI*x/I )/(PI*x) ; } } for ( sum = i = 0 ; i < Nw ; i++ ) sum += A[i] ; for ( i = 0 ; i < Nw ; i++ ) { float afac = 2./sum ; float sfac = Nw > N ? 1./afac : afac ; A[i] *= afac ; S[i] *= sfac ; } if ( Nw <= N && I ) { for ( sum = i = 0 ; i < Nw ; i += I ) sum += S[i]*S[i] ; for ( sum = 1./sum, i = 0 ; i < Nw ; i++ ) S[i] *= sum ; } } */ void overlapadd( float *I, int N, float *W, float *O, int Nw, int n ) { int i ; while ( n < 0 ) n += N ; n %= N ; for ( i = 0 ; i < Nw ; i++ ) { O[i] += I[n]*W[i] ; if ( ++n == N ) n = 0 ; } } void fold( float *I, float *W, int Nw, float *O, int N, int n ) { int i; for ( i = 0; i < N; i++ ) O[i] = 0.; while ( n < 0 ) n += N; n %= N; for ( i = 0; i < Nw; i++ ) { O[n] += I[i]*W[i]; if ( ++n == N ) n = 0; } } void squash_mute(t_squash *x, t_floatarg f) { x->mute = (short)f; } void squash_thresh(t_squash *x, t_floatarg f) { x->thresh = (float)f; } void squash_nt(t_squash *x, t_floatarg f) { x->nt = (float)f; } void squash_ratio(t_squash *x, t_floatarg f) { x->ratio = (float)f; } void squash_nmult(t_squash *x, t_floatarg f) { x->nmult = (float)f; } t_int *squash_perform(t_int *w) { t_squash *x = (t_squash *) (w[1]); float *in = (t_float *)(w[2]); float *out = (t_float *)(w[3]); int n = (int) w[4]; int j; float *input = x->input; float *output = x->output; int D = x->D; int Nw = x->Nw; int N = x->N; float *buffer = x->buffer; float *Wanal = x->Wanal; float *Wsyn = x->Wsyn; float thresh = x->thresh; float ratio = x->ratio; float nt = x->nt; float nmult = x->nmult; if(x->mute) { memset((void *)out, 0, n * sizeof(float) ); return w + 5; } x->incnt += D; for ( j = 0 ; j < Nw - D ; j++ ) input[j] = input[j+D]; for ( j = Nw-D; j < Nw; j++ ) { input[j] = *in++; } fold( input, Wanal, Nw, buffer, N, x->incnt ); squash_squat( buffer, thresh, ratio, nt, nmult, Nw ); overlapadd( buffer, N, Wsyn, output, Nw, x->incnt ); for ( j = 0; j < D; j++ ) *out++ = output[j]; for ( j = 0; j < Nw - D; j++ ) output[j] = output[j+D]; for ( j = Nw - D; j < Nw; j++ ) output[j] = 0.; x->incnt = x->incnt % Nw; return w + 5; } void squash_dsp(t_squash *x, t_signal **sp) { if(sp[0]->s_n != x->D ) { x->D = sp[0]->s_n; pd_error(0, "blocksize change not implemented yet!"); } else { dsp_add(squash_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); } } #define DIAG 0 /* compression/expansion routine! */ double squash_squat( float *buffer, float thresh, float ratio, float nt, float nmult, int N ) { register int i; double rms = 0.; float dbthr; register float mult; dbthr = 10. * log10(thresh); for ( i=0; i < N; i++ ) rms += ( *(buffer+i) * *(buffer+i) ); rms = sqrt(rms/(float)N); if (rms < nt && ratio < 1.) mult = nmult; else mult = pow( 10., (( dbthr - (( dbthr - (10. * log10(rms)) ) * ratio) ) / 10.) ) / rms; if (DIAG) { if (rms <= thresh) fprintf(stderr,"below dbthr: %f dbrms: %f rms: %f mult: %f\n", dbthr, (10. * log10(rms)), rms, mult); else fprintf(stderr,"above dbthr: %f dbrms: %f rms: %f mult: %f\n", dbthr, (10. * log10(rms)), rms, mult); } for ( i=0; i < N; i++ ) *(buffer+i) *= mult; return rms; } pd-lyonpotpourri-3.0.1/stutter~-help.pd000066400000000000000000000070771430526361000202570ustar00rootroot00000000000000#N canvas 510 90 545 456 12; #N canvas 0 22 450 300 (subpatch) 0; #X array sound1 62079 float 2; #X coords 0 1 62079 -1 100 70 1; #X restore 205 266 graph; #N canvas 600 60 502 352 messages 0; #X obj 22 122 s stutter.messages; #X text 20 15 extrema for echo count; #X text 23 148 extrema for loop duration; #N canvas 586 175 450 300 pattern-storage 0; #X obj 29 46 s stutter.messages; #X msg 29 13 show_loop; #X text 118 15 print current loop; #X text 169 83 setloop (start sample \, sample duration); #X obj 26 113 s stutter.messages; #X msg 26 79 set_loop 6951 3000; #X obj 30 187 s stutter.messages; #X msg 30 153 store_loop 1; #X obj 25 249 s stutter.messages; #X msg 25 215 recall_loop 1; #X text 128 213 recall loop 1; #X text 127 154 store current loop in location 1; #X text 25 277 you can store up to 1024 different loops in locations 0-1023; #X connect 1 0 0 0; #X connect 5 0 4 0; #X connect 7 0 6 0; #X connect 9 0 8 0; #X restore 313 149 pd pattern-storage; #X obj 43 257 s stutter.messages; #X obj 43 199 unpack f f; #X msg 43 172 90 40; #X msg 108 172 1000 200; #X msg 43 226 max_looptime \$1; #X msg 172 226 min_looptime \$1; #X text 176 173 order: max \, min; #X obj 320 112 s stutter.messages; #X msg 320 55 lockme \$1; #X obj 320 27 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #N canvas 564 177 450 300 refinements 0; #X obj 43 257 s stutter.messages; #X msg 93 232 taper 5; #X msg 43 200 taper 50; #X text 111 199 softer envelope; #X text 153 235 harder envelope; #X text 44 183 taper duration in ms.; #X obj 30 101 s stutter.messages; #X msg 30 75 randomize_dur \$1; #X floatatom 30 51 5 0 0 0 - - -; #X obj 33 26 hsl 128 15 0 0.2 0 0 empty empty empty -2 -8 0 10 -129795 -1 -1 0 1; #X obj 193 104 s stutter.messages; #X floatatom 193 54 5 0 0 0 - - -; #X obj 196 29 hsl 128 15 0 0.2 0 0 empty empty empty -2 -8 0 10 -129795 -1 -1 0 1; #X msg 193 77 randomize_start \$1; #X text 25 7 random loop deviations; #X connect 1 0 0 0; #X connect 2 0 0 0; #X connect 7 0 6 0; #X connect 8 0 7 0; #X connect 9 0 8 0; #X connect 11 0 13 0; #X connect 12 0 11 0; #X connect 13 0 10 0; #X restore 313 179 pd refinements; #X msg 328 76 new_loop; #X text 340 29 lock current loop; #X text 392 76 force new; #X msg 22 58 minmax_echo 2 4; #X msg 52 87 minmax_echo 5 20; #X msg 190 89 minmax_echo 1 2; #X msg 153 38 min_echo 1; #X msg 172 61 max_echo 2; #X connect 5 0 8 0; #X connect 5 1 9 0; #X connect 6 0 5 0; #X connect 7 0 5 0; #X connect 8 0 4 0; #X connect 9 0 4 0; #X connect 12 0 11 0; #X connect 13 0 12 0; #X connect 15 0 11 0; #X connect 18 0 0 0; #X connect 19 0 0 0; #X connect 20 0 0 0; #X connect 21 0 0 0; #X connect 22 0 0 0; #X restore 201 396 pd messages; #X text 198 369 use a fairly long and varied sound here; #N canvas 600 60 466 316 load-soundfile 0; #X obj 31 177 soundfiler; #X msg 30 103 bang; #X obj 30 129 openpanel; #X msg 30 151 read -resize \$1 sound1; #X obj 11 57 loadbang; #X obj 105 40 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 10 82 read -resize sound/voice.wav sound1; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 0 0; #X connect 4 0 6 0; #X connect 5 0 6 0; #X connect 6 0 0 0; #X restore 201 351 pd load-soundfile; #X obj 38 171 r stutter.messages; #X obj 38 196 lyonpotpourri/stutter~ sound1 500 1000 30; #X obj 38 256 lpp-meters; #X obj 26 22 lpp-icon stutter~; #X text 291 396 <= open this for more info; #X text 243 58 - stuttering playback from an array; #X text 31 126 [stutter~] is a sample stutterer and precursor to [chopper~] just different enough to perhaps remain worthwhile., f 61; #X connect 4 0 5 0; #X connect 5 0 6 0; #X connect 5 0 6 1; pd-lyonpotpourri-3.0.1/stutter~.c000066400000000000000000000350571430526361000171470ustar00rootroot00000000000000#include "MSPd.h" static t_class *stutter_class; long rand_state = 0 ; #define OBJECT_NAME "stutter~" // REALLY MESSED UP - need to figure out 64-bit and may need to start from scratch /* still needs implementation for mono. Also update to use rand() function. Also free memory function. Change from pre-inc/dec to normal form. Obviously this is a legacy external. Chopper probably does everything stutter does only better. */ typedef struct _stutter { t_object x_obj; t_float x_f; t_symbol *l_sym; t_symbol *bufname; t_garray *theBuffer; t_garray *l_buf; long l_chan; /// int loop_samps; int samps_to_go ; int loop_start; int echos; int min_echo; int max_echo; int b_index; // int taper_samps; t_float taper_dur; int loop_min_samps; int loop_max_samps; t_float loop_min_duration; t_float loop_max_duration; t_float taper_duration; t_float R; t_float ldev; t_float st_dev; int lock_loop; int new_loop_loop; t_float buffer_duration; int framesize; int bufchans; short verbose; short mute_me; int *stored_starts; int *stored_samps; long b_valid; //float *b_samples; t_word *b_samples; long b_frames; } t_stutter; static t_int *stutter_perform(t_int *w); static void stutter_dsp(t_stutter *x, t_signal **sp); static void *stutter_new(t_symbol *msg, int argc, t_atom *argv); //static void stutter_in1(t_stutter *x, long n); static void stutter_min_looptime(t_stutter *x, t_floatarg n); static void stutter_max_looptime(t_stutter *x, t_floatarg n); static void stutter_randomize_start(t_stutter *x, t_floatarg n); static void stutter_randomize_dur(t_stutter *x, t_floatarg n); static void stutter_lockme(t_stutter *x, t_floatarg n); static void stutter_new_loop(t_stutter *x); //static void stutter_assist(t_stutter *x, void *b, long m, long a, char *s); //static void stutter_dblclick(t_stutter *x); //static void stutter_verbose(t_stutter *x, t_floatarg t); static void stutter_mute(t_stutter *x, t_floatarg t); static void stutter_show_loop(t_stutter *x); static void stutter_set_loop(t_stutter *x, t_symbol *msg, int argc, t_atom *argv); static void stutter_store_loop(t_stutter *x, t_floatarg loop_b_index); static void stutter_recall_loop(t_stutter *x, t_floatarg loop_b_index); static void stutter_taper(t_stutter *x, t_floatarg f); static void stutter_min_echo(t_stutter *x, t_floatarg f); static void stutter_max_echo(t_stutter *x, t_floatarg f); static void stutter_minmax_echo(t_stutter *x, t_floatarg minf, t_floatarg maxf); static float boundrand(float min, float max); static void stutter_init(t_stutter *x,short initialized); //static void stutter_info(t_stutter *x); //static void stutter_version(t_stutter *x); static void stutter_setarray(t_stutter *x); static float erand(void); t_symbol *ps_buffer; void stutter_tilde_setup(void) { stutter_class = class_new(gensym("stutter~"), (t_newmethod)stutter_new, NO_FREE_FUNCTION,sizeof(t_stutter), 0,A_GIMME,0); CLASS_MAINSIGNALIN(stutter_class, t_stutter, x_f); class_addmethod(stutter_class,(t_method)stutter_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(stutter_class,(t_method)stutter_mute,gensym("mute"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_show_loop,gensym("show_loop"),0); class_addmethod(stutter_class,(t_method)stutter_set_loop,gensym("set_loop"),A_GIMME,0); class_addmethod(stutter_class,(t_method)stutter_store_loop,gensym("store_loop"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_recall_loop,gensym("recall_loop"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_taper,gensym("taper"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_min_echo,gensym("min_echo"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_max_echo,gensym("max_echo"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_minmax_echo,gensym("minmax_echo"),A_FLOAT,A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_min_looptime,gensym("min_looptime"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_max_looptime,gensym("max_looptime"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_lockme,gensym("lockme"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_new_loop,gensym("new_loop"),0); class_addmethod(stutter_class,(t_method)stutter_randomize_dur,gensym("randomize_dur"),A_FLOAT,0); class_addmethod(stutter_class,(t_method)stutter_randomize_start,gensym("randomize_start"),A_FLOAT,0); ps_buffer = gensym("buffer~"); potpourri_announce(OBJECT_NAME); } void stutter_mute(t_stutter *x, t_floatarg tog) { x->mute_me = (int)tog; } void stutter_verbose(t_stutter *x, t_floatarg tog) { x->verbose = (int)tog; } void stutter_setarray(t_stutter *x) { t_garray *b; t_symbol *bufname = x->bufname; int frames; if (!(b = (t_garray *)pd_findbyclass(bufname, garray_class))) { if (*bufname->s_name) pd_error(x, "stutter~: %s: no such array", bufname->s_name); x->b_valid = 0; } else if (!garray_getfloatwords(b, &frames, &x->b_samples)) { pd_error(x, "%s: bad template for stutter~", bufname->s_name); x->b_samples = 0; x->b_valid = 1; } else { x->b_frames = frames; x->b_valid = 1; x->theBuffer = b; garray_usedindsp(b); } if(! x->b_valid ) { post("stutter~ got invalid buffer"); } } t_int *stutter_perform(t_int *w) { t_stutter *x = (t_stutter *)(w[1]); t_float *out1 = (t_float *)(w[2]); int n = (int) w[3]; long b_frames = x->b_frames; int next_pointer = 4; t_word *tab; t_float theSample; long b_index; int loop_start, samps_to_go, echos, loop_samps, taper_samps; int loop_max_samps, loop_min_samps; int lock_loop; t_float sdev, ldev, startdev, st_dev; stutter_setarray(x); if(x->mute_me || ! x->b_valid) { while( n-- ) { *out1++ = 0.0; } return w+next_pointer; } else { tab = x->b_samples; b_frames = x->b_frames; b_index = x->b_index; loop_start = x->loop_start; loop_samps = x->loop_samps; samps_to_go = x->samps_to_go; echos = x->echos; taper_samps = x->taper_samps ; loop_max_samps = x->loop_max_samps; loop_min_samps = x->loop_min_samps; ldev = x->ldev; lock_loop = x->lock_loop; st_dev = x->st_dev; if( x->framesize != b_frames ) { x->framesize = b_frames; x->buffer_duration = (float) b_frames / (float) x->R ; } while( n-- ) { if( b_index < 0 ) { b_index = 0; } else if( b_index > b_frames - 1) { b_index = 0; } theSample = tab[ b_index ].w_float; if( samps_to_go > loop_samps - taper_samps ) { *out1++ = theSample * ( (float)(loop_samps - samps_to_go)/(float)taper_samps ); ++b_index; } else if( samps_to_go < taper_samps ) { *out1++ = theSample * ( (float)(samps_to_go)/(float)taper_samps ); ++b_index; } else { *out1++ = theSample; ++b_index; } if( ! --samps_to_go ) { b_index = loop_start ; sdev = ldev * loop_samps ; if( erand() < .5 ) { sdev = -sdev; } if( ( --echos <= 0 ) && ( ! lock_loop ) ) { echos = (int)boundrand((float)x->min_echo,(float)x->max_echo); samps_to_go = loop_samps = loop_min_samps + ( erand() * (float)(loop_max_samps-loop_min_samps) ) ; loop_start = erand() * (b_frames - loop_samps) ; } else { loop_samps += sdev; if( loop_samps < loop_min_samps ) { loop_samps = loop_min_samps; } else if( loop_samps > loop_max_samps ) { loop_samps = loop_max_samps; } samps_to_go = loop_samps; if( st_dev ) { startdev = erand() * st_dev * (t_float) loop_samps; if( erand() < .5 ) { startdev = -startdev; } loop_start += startdev ; if( loop_start < 0 ) { loop_start = 0 ; } else if ( loop_start + loop_samps > b_frames) { loop_start = b_frames - loop_samps; } } if( loop_start + loop_samps >= b_frames ) { loop_start = (b_frames - loop_samps) - 1; } } } } x->b_index = b_index; x->loop_start = loop_start; x->loop_samps = loop_samps; x->samps_to_go = samps_to_go; x->echos = echos; return w + next_pointer; } } float erand(void) { static int im = 6075 ; static int ia = 106 ; static int ic = 1283 ; rand_state = (rand_state * ia + ic) % im ; return ( (float) rand_state / (float) im ); } void stutter_info(t_stutter *x) { post("there are %d frames in this buffer. Duration is %f.",x->b_frames, x->buffer_duration); } void stutter_new_loop(t_stutter *x) { x->echos = (int)boundrand((float)x->min_echo,(float)x->max_echo); x->samps_to_go = x->loop_samps = boundrand((float)x->loop_min_samps,(float)x->loop_max_samps); x->loop_start = boundrand(0.0,1.0) * (x->framesize - x->loop_samps) ; } void stutter_show_loop(t_stutter *x) { post("start %d samps %d", x->loop_start, x->loop_samps); } void stutter_store_loop(t_stutter *x, t_floatarg loop_b_index) { int i = loop_b_index; x->stored_starts[i] = x->loop_start; x->stored_samps[i] = x->loop_samps; // post("loop stored at position %d", i); } void stutter_recall_loop(t_stutter *x, t_floatarg loop_b_index) { // bug warning: recall preceding store will crash program // need to add warning int i = loop_b_index; if(!x->stored_samps[i]) { pd_error(0, "no loop stored at position %d!", i); return; } x->loop_start = x->stored_starts[ i ]; x->samps_to_go = x->loop_samps = x->stored_samps[ i ]; if( x->loop_min_samps > x->loop_samps ) x->loop_min_samps = x->loop_samps ; if( x->loop_max_samps < x->loop_samps ) x->loop_max_samps = x->loop_samps ; // post("loop recalled from position %d", i); } void stutter_set_loop(t_stutter *x, t_symbol *msg, int argc, t_atom *argv) { float temp; atom_arg_getfloat(&temp, 0, argc, argv); x->loop_start = temp; atom_arg_getfloat(&temp, 0, argc, argv); x->loop_samps = temp; // post("loop set to: %d %d", x->loop_start, x->loop_samps); } void stutter_lockme(t_stutter *x, t_floatarg f) { int n = (int) f; if( n > 0 ) { x->lock_loop = 1; } else { x->lock_loop = 0; } } //set min time for loop void stutter_min_looptime(t_stutter *x, t_floatarg n) { n /= 1000.0; if( n < .0001 ) { n = .0001; } x->loop_min_samps = x->R * n ; if( x->loop_min_samps >= x->loop_max_samps ) { x->loop_min_samps = x->loop_max_samps - 1; } } // set deviation factor void stutter_randomize_dur(t_stutter *x, t_floatarg n) { if( n < 0 ) n = 0; if( n > 1 ) n = 1.; x->ldev = n; } void stutter_randomize_start(t_stutter *x, t_floatarg n) { if( n < 0 ) n = 0; if( n > 1 ) n = 1.; x->st_dev = n; } // set max time for loop void stutter_max_looptime(t_stutter *x, t_floatarg n) { n /= 1000.0; if( x->buffer_duration > 0.0 ) { if( n >= x->buffer_duration * .49) { n = x->buffer_duration * .49 ; } } x->loop_max_samps = x->R * n ; if( x->loop_max_samps <= x->loop_min_samps ) { x->loop_max_samps = x->loop_min_samps + 1; } } void *stutter_new(t_symbol *msg, int argc, t_atom *argv) { t_stutter *x = (t_stutter *)pd_new(stutter_class); outlet_new(&x->x_obj, gensym("signal")); srand(time(0)); if(argc<1) { pd_error(0, "stutter~ requires a buffer name"); return NULL; } x->bufchans = 1; x->bufname = atom_getsymbolarg(0,argc,argv); x->loop_min_duration = atom_getintarg(1,argc,argv)/1000.0; x->loop_max_duration = atom_getintarg(2,argc,argv)/1000.0; x->taper_duration = atom_getintarg(3,argc,argv)/1000.0; if(!x->loop_min_duration) x->loop_min_duration = .02; if(!x->loop_max_duration) x->loop_max_duration = 0.2; if(!x->taper_duration) x->taper_duration = .002; x->R = sys_getsr(); if(!x->R) x->R = 44100.0; stutter_init(x,0); return x; } float boundrand(float min, float max) { return min + (max-min) * ((float)rand()/RAND_MAX); } void stutter_taper(t_stutter *x, t_floatarg f) { f *= .001; if(f>0) { x->taper_duration = f; x->taper_samps = x->R * x->taper_duration; } } void stutter_min_echo(t_stutter *x, t_floatarg f) { int ec = (int)f; if(ec>0 && ec < x->max_echo) { x->min_echo = ec; } else { pd_error(0, "min echo must be less than max echo, and greater than zero"); } } void stutter_max_echo(t_stutter *x, t_floatarg f) { int ec = (int)f; if(ec > x->min_echo) { x->max_echo = ec; } else { pd_error(0, "max echo must be greater than min echo"); } } void stutter_minmax_echo(t_stutter *x, t_floatarg minf, t_floatarg maxf) { int minec = (int)minf; int maxec = (int)maxf; if( minec < maxec) { x->min_echo = minec; x->max_echo = maxec; } else { pd_error(0, "bad inputs to minmax_echo"); } } void stutter_init(t_stutter *x,short initialized) { int i; if(!initialized) { x->loop_min_samps = x->loop_min_duration * (float)x->R; x->loop_max_samps = x->loop_max_duration * (float)x->R; x->samps_to_go = x->loop_samps = x->loop_min_samps + (erand() * (float)(x->loop_max_samps-x->loop_min_samps) ) ; x->loop_start = 0; x->min_echo = 2; x->max_echo = 12; x->echos = (int) boundrand((float)x->min_echo,(float)x->max_echo); x->b_index = x->loop_start ; x->samps_to_go = x->loop_samps; x->taper_samps = x->R * x->taper_duration; x->ldev = 0; x->lock_loop = 0; x->buffer_duration = 0.0 ; x->st_dev = 0.0; x->framesize = 0; x->new_loop_loop = 0; x->mute_me = 0; x->verbose = 0; x->stored_starts = t_getbytes(1024 * sizeof(int)); x->stored_samps = t_getbytes(1024 * sizeof(int)); for(i = 0; i < 1024; i++) { x->stored_samps[i] = 0; } } else { x->loop_min_samps = x->loop_min_duration * (float)x->R; x->loop_max_samps = x->loop_max_duration * (float)x->R; x->samps_to_go = x->loop_samps = x->loop_min_samps + (erand() * (float)(x->loop_max_samps - x->loop_min_samps)) ; x->loop_start = 0; x->b_index = x->loop_start; x->samps_to_go = x->loop_samps; x->taper_samps = x->R * x->taper_duration; x->ldev = 0; x->lock_loop = 0; x->buffer_duration = 0.0 ; x->st_dev = 0.0; x->framesize = 0; x->new_loop_loop = 0; } } void stutter_dsp(t_stutter *x, t_signal **sp) { stutter_setarray(x); if(x->R != sp[0]->s_sr) { x->R = sp[0]->s_sr; x->taper_samps = x->R * x->taper_duration; x->loop_min_samps = .02 * (t_float)x->R; x->loop_max_samps = .2 * (t_float) x->R; } dsp_add(stutter_perform, 3, x, sp[0]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/ugens.h000066400000000000000000000014741430526361000163610ustar00rootroot00000000000000/* THIS IS A TOTALLY HACKED HEADER - NO LONGER ANY GOOD FOR CMIX */ #define MAXSECTS 20 #define RESON_NO_SCL (0.) #define START 3 #define STARTM1 2 /* for start of comb memory in a array */ #define NCOMBS 6 /* for reverb */ #define NALPASSES 2 /* for reverb */ typedef struct { float ps0; float ps1; float ps2; float ps3; float c0; float c1; float c2; float c3; } LSTRUCT ; typedef struct { int len; float *func; float amp; float phs; float si; } CMIXOSC ; typedef struct { float *arr; float lpt; float rvbt; int len; int status; } CMIXCOMB ; typedef struct { float cf; float bw; float scl; float q[5]; } CMIXRESON ; typedef struct { float a; float d; float s; float r; float v1; float v2; float v3; float v4; float v5; float *func; int len; } CMIXADSR ; pd-lyonpotpourri-3.0.1/ugens_pd.h000066400000000000000000000016331430526361000170410ustar00rootroot00000000000000/* THIS IS A TOTALLY HACKED HEADER - NO LONGER ANY GOOD FOR CMIX */ #define MAXSECTS 20 #define RESON_NO_SCL (0.) #define START 3 #define STARTM1 2 /* for start of comb memory in a array */ #define NCOMBS 6 /* for reverb */ #define NALPASSES 2 /* for reverb */ typedef struct { double ps0; double ps1; double ps2; double ps3; double c0; double c1; double c2; double c3; } LSTRUCT ; typedef struct { int len; double *func; double amp; double phs; double si; } CMIXOSC ; typedef struct { double *arr; double lpt; double rvbt; int len; int status; } CMIXCOMB ; typedef struct { double cf; double bw; double scl; double q[5]; } CMIXRESON ; typedef struct { double a; double d; double s; double r; double v1; double v2; double v3; double v4; double v5; double *func; int len; } CMIXADSR ; pd-lyonpotpourri-3.0.1/unconvert.c000066400000000000000000000007671430526361000172620ustar00rootroot00000000000000#include "fftease.h" void unconvert( float *C, float *S, int N2, float *lastphase, float fundamental, float factor ) { int i, real, imag, amp, freq; float mag, phase; double sin(), cos(); for ( i = 0; i <= N2; i++ ) { imag = freq = ( real = amp = i<<1 ) + 1; if ( i == N2 ) real = 1; mag = C[amp]; lastphase[i] += C[freq] - i*fundamental; phase = lastphase[i]*factor; S[real] = mag*cos( phase ); if ( i != N2 ) S[imag] = -mag*sin( phase ); } } pd-lyonpotpourri-3.0.1/vdb~-help.pd000066400000000000000000000121701430526361000173060ustar00rootroot00000000000000#N canvas 446 36 728 649 12; #N canvas 0 22 450 300 (subpatch) 0; #X array vdb-delay-line 88200 float 2; #X coords 0 1 88200 -1 100 70 1; #X restore 339 341 graph; #X obj 98 232 r vdb-msgs; #N canvas 289 62 859 761 input-sound 0; #X obj 52 162 *~; #X msg 213 47 tempo \$1; #X floatatom 213 16 5 0 0 0 - vdb-tempo -; #X floatatom 52 23 5 0 0 0 - - -; #X obj 52 109 osc~ 450; #X obj 52 352 *~ 0.5; #X msg 145 328 0.5; #X obj 356 27 loadbang; #X text 466 59 softer envelope; #X obj 213 108 lyonpotpourri/adsr~; #X msg 136 363 0; #X obj 272 376 soundfiler; #X msg 272 343 write -aiff \$1 vdb-delay-line; #X obj 272 262 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X obj 272 298 savepanel; #X text 296 263 if you like what is in the array during infinite hold \, you can write the array to disk., f 48; #X msg 356 60 20 20 100 100; #X obj 52 80 line; #X msg 52 51 \$1 50; #X obj 147 445 throw~ vdb-input-sound; #X obj 213 77 samm~ 60 1; #X connect 0 0 5 0; #X connect 1 0 20 0; #X connect 2 0 1 0; #X connect 3 0 18 0; #X connect 4 0 0 0; #X connect 5 0 19 0; #X connect 6 0 5 1; #X connect 7 0 16 0; #X connect 9 0 0 1; #X connect 10 0 5 1; #X connect 12 0 11 0; #X connect 13 0 14 0; #X connect 14 0 12 0; #X connect 16 0 9 0; #X connect 17 0 4 0; #X connect 18 0 17 0; #X connect 20 0 9 0; #X restore 197 433 pd input-sound; #N canvas 600 60 550 496 delaytime 0; #X obj 339 154 *~ 200; #X obj 339 180 +~ 799; #X msg 24 167 channel \$1; #X obj 24 138 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 24 21 loadbang; #X floatatom 339 103 5 0 0 0 - vdb-delaychange-speed -; #X msg 24 68 1; #X obj 90 232 sig~ 200; #X text 66 68 select fixed or changing delay time; #X obj 339 128 osc~ 0.25; #X obj 90 266 lyonpotpourri/clean_selector~ 2 1000; #X text 382 105 speed of delay change; #X text 157 232 fixed delay of 200 ms; #N canvas 0 23 677 468 infhold-response 0; #X obj 37 83 r \$0-infhold-tog; #X obj 37 111 sel 1; #X obj 37 139 pipe 2000; #X msg 37 167 0; #X obj 37 206 outlet; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X restore 49 105 pd infhold-response; #X obj 90 299 throw~ vdb-delay-time; #X floatatom 90 206 5 0 0 0 - vdb-fixed-delaytime -; #X connect 0 0 1 0; #X connect 1 0 10 1; #X connect 2 0 10 0; #X connect 3 0 2 0; #X connect 4 0 6 0; #X connect 5 0 9 0; #X connect 6 0 3 0; #X connect 7 0 10 0; #X connect 9 0 0 0; #X connect 10 0 14 0; #X connect 13 0 3 0; #X connect 15 0 7 0; #X restore 197 459 pd delaytime; #X floatatom 371 173 5 -0.9 0.9 2 feedback vdb-feedback -; #X obj 200 383 hsl 120 15 -0.9 0.9 0 0 vdb-feedback vdb-feedback-in feedback_amt -2 -8 1 10 -185881 -1 -1 0 1; #X obj 31 376 lpp-meters; #N canvas 566 294 520 316 init 0; #X msg 40 52 \; vdb-feedback-in 0.5 \; vdb-delaychange-speed 0.25 \; vdb-fixed-delaytime 200 \; vdb-tempo 60; #X restore 197 511 pd init; #X text 93 288 args: buffername \, max delay time (ms) \, delay time \, feedback \, interpolation flag, f 79; #X obj 31 265 lyonpotpourri/vdb~ vdb-delay-line 2000 1000 0.7 1; #X obj 23 5 lpp-icon vdb~; #N canvas 398 94 682 530 array-redraws 0; #X obj 38 493 s vdb-msgs; #X msg 38 122 redraw; #X obj 38 69 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 ; #X obj 38 94 metro 1000; #X obj 112 189 loadbang; #X msg 112 270 redraw_array \$1; #X obj 112 245 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 112 217 0; #X text 225 270 redraw array on every callback (currently a click-fest) ; #X obj 264 340 loadbang; #X obj 264 396 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 264 422 always_update \$1; #X text 281 404 reattaches buffer on each callback (maybe not necessary) ; #X msg 264 368 0; #X text 72 66 redraw once per second \, can still introduce clicks ; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 1 0; #X connect 4 0 7 0; #X connect 5 0 0 0; #X connect 6 0 5 0; #X connect 7 0 6 0; #X connect 9 0 13 0; #X connect 10 0 11 0; #X connect 11 0 0 0; #X connect 13 0 10 0; #X restore 197 537 pd array-redraws; #N canvas 600 60 375 355 infinite-hold 0; #X obj 36 157 s vdb-msgs; #X msg 36 107 inf_hold \$1; #X obj 36 24 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1 ; #X text 58 27 toggle infinite hold; #N canvas 0 23 862 612 smoothing 0; #X obj 40 206 lyonpotpourri/buffet~ vdb-delay-line; #X obj 40 86 sel 1; #X obj 40 116 pipe 2000; #X obj 40 146 t b b; #X text 202 173 fade clicks at array boundaries \, for infinite hold ; #X obj 40 56 inlet; #X obj 166 97 s \$0-infhold-tog; #X msg 40 176 fadein 20; #X msg 124 176 fadeout 40; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 8 0; #X connect 3 1 7 0; #X connect 5 0 1 0; #X connect 5 0 6 0; #X connect 7 0 0 0; #X connect 8 0 0 0; #X restore 51 66 pd smoothing; #X connect 1 0 0 0; #X connect 2 0 1 0; #X connect 2 0 4 0; #X restore 197 485 pd infinite-hold; #X obj 201 173 catch~ vdb-delay-time; #X obj 31 173 catch~ vdb-input-sound; #X text 34 100 [vdb~] treats an array as a delayline with internal feedback (thus no lower limit on delaytime by vector size).; #X text 251 35 - a delay line with feedback \, exposed in an array ; #X connect 1 0 9 0; #X connect 4 0 9 2; #X connect 9 0 6 1; #X connect 9 0 6 0; #X connect 13 0 9 1; #X connect 14 0 9 0; pd-lyonpotpourri-3.0.1/vdb~.c000066400000000000000000000327441430526361000162100ustar00rootroot00000000000000#include "MSPd.h" #define OBJECT_NAME "vdb~" static t_class *vdb_class; typedef struct { float coef; float cutoff; float x1; } t_lpf; typedef struct { t_word *b_samples; long b_valid; long b_nchans; long b_frames; } t_guffer; // stuff we care about from garrays and buffers typedef struct _vdb { t_object x_obj; float x_f; float sr; t_lpf lpf; short filter; // float speed; float feedback; float delay_time; float delay_samps; float maxdelay; // maximum delay in seconds (cannot be larger than buffer) long maxdelay_len; // framelength of usable region of buffer long len; // framelength of buffer long phs; // current phase float tap; short *connections; short feedback_protect; short mute; short interpolate; short inf_hold; short infhold_buffer_rollout; short always_update; // copy to buffer t_symbol *buffername; t_guffer *delay_buffer; long b_nchans; long b_frames; t_word *b_samples; long b_valid; // interface int inlet_count; int outlet_count; int delay_inlet; int feedback_inlet; short redraw_flag; // pd only for gating redraw function } t_vdb; static t_int *vdb_perform(t_int *w); static void vdb_protect(t_vdb *x, t_floatarg state); static void vdb_inf_hold(t_vdb *x, t_floatarg state); static void vdb_always_update(t_vdb *x, t_floatarg state); static void vdb_maxdelay(t_vdb *x, t_floatarg delay); static void vdb_dsp(t_vdb *x, t_signal **sp); static void *vdb_new(t_symbol *s, int argc, t_atom *argv); //static void vdb_float(t_vdb *x, t_float f); static void vdb_mute(t_vdb *x, t_floatarg t); static void vdb_interpolate(t_vdb *x, t_floatarg t); static void vdb_show(t_vdb *x); // static void vdb_update_buffer(t_vdb *x); //static void vdb_coef(t_vdb *x, t_floatarg f); //static void vdb_filter(t_vdb *x, t_floatarg t); static void vdb_init(t_vdb *x,short initialized); static int vdb_attach_buffer(t_vdb *x); static void vdb_redraw(t_vdb *x); static void vdb_redraw_array(t_vdb *x, t_floatarg t); static void vdb_free(t_vdb *x); void vdb_tilde_setup(void) { vdb_class = class_new(gensym("vdb~"),(t_newmethod)vdb_new,(t_method)vdb_free, sizeof(t_vdb), 0, A_GIMME,0); CLASS_MAINSIGNALIN(vdb_class,t_vdb, x_f ); class_addmethod(vdb_class,(t_method)vdb_dsp,gensym("dsp"),A_CANT,0); class_addmethod(vdb_class,(t_method)vdb_protect,gensym("protect"),A_FLOAT,0); class_addmethod(vdb_class,(t_method)vdb_inf_hold,gensym("inf_hold"),A_FLOAT,0); class_addmethod(vdb_class,(t_method)vdb_maxdelay,gensym("maxdelay"),A_FLOAT,0); class_addmethod(vdb_class,(t_method)vdb_always_update,gensym("always_update"),A_FLOAT,0); class_addmethod(vdb_class,(t_method)vdb_mute,gensym("mute"),A_FLOAT,0); class_addmethod(vdb_class,(t_method)vdb_show,gensym("show"),0); // class_addmethod(vdb_class,(t_method)vdb_update_buffer,gensym("update_buffer"),0); class_addmethod(vdb_class,(t_method)vdb_interpolate,gensym("interpolate"),A_FLOAT,0); class_addmethod(vdb_class,(t_method)vdb_redraw_array,gensym("redraw_array"),A_FLOAT,0); class_addmethod(vdb_class,(t_method)vdb_redraw,gensym("redraw"),0); potpourri_announce(OBJECT_NAME); } void vdb_maxdelay(t_vdb *x, t_floatarg delay) { long newlen; x->maxdelay = 50.0; newlen = delay * .001 * x->sr; if(newlen > x->len) { pd_error(0, "%s: requested a max delay that exceeds buffer size",OBJECT_NAME); return; } x->maxdelay_len = newlen; } /* void vdb_update_buffer(t_vdb *x) { vdb_attach_buffer(x); } */ void vdb_mute(t_vdb *x, t_floatarg t) { x->mute = (short)t; } void vdb_always_update(t_vdb *x, t_floatarg state) { x->always_update = (short) state; } void vdb_redraw_array(t_vdb *x, t_floatarg t) { x->redraw_flag = (short)t; } void vdb_inf_hold(t_vdb *x, t_floatarg state) { x->inf_hold = (short) state; x->infhold_buffer_rollout = x->inf_hold; } void vdb_filter(t_vdb *x, t_floatarg t) { x->filter = (short)t; } void vdb_coef(t_vdb *x, t_floatarg f) { x->lpf.coef = (float)f; } void vdb_show(t_vdb *x) { post("feedback %f delay %f",x->feedback, x->delay_time); } void vdb_interpolate(t_vdb *x, t_floatarg t) { x->interpolate = (short)t; } t_int *vdb_perform(t_int *w) { // DSP config t_vdb *x = (t_vdb *)(w[1]); int n; float fdelay; float insamp; //, insamp2; float outsamp; float frac; t_word *delay_line = x->b_samples; int phs = x->phs; long maxdelay_len = x->maxdelay_len; float feedback = x->feedback; short *connections = x->connections; float sr = x->sr; short feedback_protect = x->feedback_protect; short interpolate = x->interpolate; short inf_hold = x->inf_hold; short infhold_buffer_rollout = x->infhold_buffer_rollout; float x1,x2; int idelay; int dphs,dphs1,dphs2; long b_nchans = x->b_nchans; int delay_inlet = x->delay_inlet; int feedback_inlet = x->feedback_inlet; int i,j; t_float *input; t_float *output; t_float *delay_vec; t_float *feedback_vec; /**********************/ n = (int) w[b_nchans * 2 + 4]; if(x->always_update) { vdb_attach_buffer(x); maxdelay_len = x->maxdelay_len; phs = x->phs; } if( x->mute ) { for(i = 0; i < b_nchans; i++) { output = (t_float *) w[4 + b_nchans + i]; for(j = 0; j < n; j++) { *output++ = 0.0; } } return (w + b_nchans * 2 + 5); } if(!x->b_valid) { for(i = 0; i < b_nchans; i++) { output = (t_float *) w[4 + b_nchans + i]; for(j = 0; j < n; j++) { *output++ = 0.0; } } return (w + b_nchans * 2 + 5); } fdelay = x->delay_time * .001 * sr; feedback = x->feedback; delay_vec = (t_float *) w[b_nchans + 2]; feedback_vec = (t_float *) w[b_nchans + 3]; for(i = 0; i < b_nchans; i++) { input = (t_float *) w[i+2]; output = (t_float *) w[4 + b_nchans + i]; phs = x->phs; // reset for each channel for(j = 0; j < n; j++) { // insamp = input[j]; if ( connections[delay_inlet]) { fdelay = delay_vec[j]; fdelay *= .001 * sr; if (fdelay < 1. ) fdelay = 1.; if( fdelay > maxdelay_len - 1 ) fdelay = maxdelay_len - 1; x->delay_time = fdelay; } if(! inf_hold ) { if(connections[feedback_inlet]) { feedback = feedback_vec[j]; if( feedback_protect ) { if( feedback > 0.99) feedback = 0.99; if( feedback < -0.99 ) feedback = -0.99; } x->feedback = feedback; } } idelay = floor(fdelay); if(phs < 0 || phs >= maxdelay_len) { pd_error(0, "%s: bad phase %d",OBJECT_NAME,phs); phs = 0; } if(interpolate) { frac = (fdelay - idelay); dphs1 = phs - idelay; dphs2 = dphs1 - 1; while(dphs1 >= maxdelay_len) { dphs1 -= maxdelay_len; } while(dphs1 < 0) { dphs1 += maxdelay_len; } while(dphs2 >= maxdelay_len) { dphs2 -= maxdelay_len; } while(dphs2 < 0) { dphs2 += maxdelay_len; } x1 = delay_line[dphs1 * b_nchans + i].w_float; x2 = delay_line[dphs2 * b_nchans + i].w_float; outsamp = x1 + frac * (x2 - x1); } else { dphs = phs - idelay; while(dphs >= maxdelay_len) { dphs -= maxdelay_len; } while(dphs < 0) { dphs += maxdelay_len; } if(dphs < 0 || dphs >= maxdelay_len) { pd_error(0, "bad dphase %d",dphs); dphs = 0; } outsamp = delay_line[dphs * b_nchans + i].w_float; } output[j] = outsamp; if(inf_hold){ if(infhold_buffer_rollout){ insamp = input[j]; delay_line[phs * b_nchans + i].w_float = insamp + outsamp * feedback; if( (phs >= maxdelay_len) || (phs < 0) ){ infhold_buffer_rollout = 0; } } } else { insamp = input[j]; delay_line[phs * b_nchans + i].w_float = insamp + outsamp * feedback; } ++phs; while(phs >= maxdelay_len) { phs -= maxdelay_len; infhold_buffer_rollout = 0; } while(phs < 0) { phs += maxdelay_len; infhold_buffer_rollout = 0; } } } x->infhold_buffer_rollout = infhold_buffer_rollout; x->phs = phs; if(x->redraw_flag) { vdb_redraw(x); } return (w + b_nchans * 2 + 5); } void *vdb_new(t_symbol *s, int argc, t_atom *argv) { int i; int user_chans; t_vdb *x = (t_vdb *)pd_new(vdb_class); x->sr = sys_getsr(); if(argc < 2) { pd_error(0, "%s: you must provide a valid buffer name and channel count",OBJECT_NAME); return (void *)NULL; } if(!x->sr) { pd_error(0, "zero sampling rate - set to 44100"); x->sr = 44100; } // DSP CONFIG // SET DEFAULTS x->maxdelay = 50.0; // milliseconds x->feedback = 0.5; x->delay_time = 0.0; // args: name channels [max delay, initial delay, feedback, interpolation_flag] x->buffername = atom_getsymbolarg(0,argc,argv); user_chans = 1; // in Pd buffers always mono... x->maxdelay = atom_getfloatarg(1,argc,argv); x->delay_time = atom_getfloatarg(2,argc,argv); x->feedback = atom_getfloatarg(3,argc,argv); x->interpolate = atom_getfloatarg(4,argc,argv); x->b_nchans = user_chans; x->redraw_flag = 1; /* need data checking here */ x->inlet_count = x->b_nchans + 2; x->outlet_count = x->b_nchans; x->delay_inlet = x->b_nchans; x->feedback_inlet = x->delay_inlet + 1; x->infhold_buffer_rollout = 0; for(i = 0; i < x->inlet_count - 1; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); } outlet_new(&x->x_obj, gensym("signal") ); vdb_init(x,0); return (x); } void vdb_free(t_vdb *x) { freebytes(x->connections, 128 * sizeof(short)); } void vdb_init(t_vdb *x,short initialized) { // int i; if(!initialized) { if(!x->maxdelay) x->maxdelay = 50.0; x->maxdelay_len = x->maxdelay * .001 * x->sr; x->feedback_protect = 0; x->inf_hold = 0; x->phs = 0; x->mute = 0; x->always_update = 0; x->connections = (short *) getbytes(128 * sizeof(short)); } } void vdb_protect(t_vdb *x, t_floatarg state) { x->feedback_protect = state; } int vdb_attach_buffer(t_vdb *x) { t_garray *a; t_symbol *wavename = x->buffername; int b_frames; t_word *b_samples; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); x->b_valid = 0; return 0; } else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); x->b_valid = 0; return 0; } else { x->b_nchans = 1; x->b_frames = b_frames; x->b_samples = b_samples; x->b_valid = 1; x->len = x->b_frames; if(x->maxdelay_len > x->len) { x->maxdelay_len = x->len; post("%s: shortened maxdelay to %d frames",OBJECT_NAME,x->maxdelay_len); } garray_usedindsp(a); return(1); } } void vdb_redraw(t_vdb *x) { t_garray *a; t_symbol *wavename = x->buffername; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, wavename->s_name); x->b_valid = 0; } else { garray_redraw(a); } } void vdb_dsp(t_vdb *x, t_signal **sp) { int i; int vector_count; t_int **sigvec; vector_count = x->inlet_count+x->outlet_count + 2; for(i = 0; i < vector_count - 2; i++) { x->connections[i] = 1; } vdb_attach_buffer(x); sigvec = (t_int **) getbytes(vector_count * sizeof(t_int *)); for(i = 0; i < vector_count; i++) sigvec[i] = (t_int *) getbytes(sizeof(t_int) * 1); sigvec[0] = (t_int *)x; sigvec[vector_count - 1] = (t_int *)sp[0]->s_n; for(i = 1; i < vector_count - 1; i++) { sigvec[i] = (t_int *)sp[i-1]->s_vec; } dsp_addv(vdb_perform, vector_count, (t_int *)sigvec); freebytes(sigvec, vector_count * sizeof(t_int *)); } pd-lyonpotpourri-3.0.1/vdp~-help.pd000066400000000000000000000026731430526361000173330ustar00rootroot00000000000000#N canvas 600 60 634 555 12; #N canvas 600 60 458 308 input-sound 0; #X obj 130 125 phasor~ 96; #X obj 130 158 -~ 0.5; #X obj 130 190 outlet~; #X connect 0 0 1 0; #X connect 1 0 2 0; #X restore 126 143 pd input-sound; #X floatatom 343 200 5 0 0 0 - - -; #N canvas 600 60 454 304 delaytime 0; #X obj 177 107 osc~ 0.1; #X obj 177 140 *~ 9.9; #X obj 177 169 +~ 10; #X obj 177 198 outlet~; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 3 0; #X restore 250 143 pd delaytime; #X obj 346 174 hsl 120 20 -0.99 0.99 0 0 empty \$0-feedback feedback_amount -2 -8 1 10 -76846 -1 -1 1503 1; #X obj 35 143 r vdp-msgs; #X obj 157 299 lpp-meters; #X obj 157 228 lyonpotpourri/vdp~ 20 0 0.5; #N canvas 600 60 450 300 init 0; #X obj 38 72 s \$0-feedback; #X msg 38 44 -0.74; #X obj 38 17 loadbang; #X connect 1 0 0 0; #X connect 2 0 1 0; #X restore 328 392 pd init; #N canvas 467 74 774 403 capture-to-array 0; #N canvas 0 22 450 300 (subpatch) 0; #X array vdp-catch 882 float 2; #X coords 0 1 882 -1 200 140 1; #X restore 35 85 graph; #X obj 263 152 s vdp-msgs; #X msg 263 117 copy_to_buffer vdp-catch; #X text 259 84 copy whatever is in the delay line to an external array ; #X connect 2 0 1 0; #X restore 328 419 pd capture-to-array; #X obj 29 20 lpp-icon vdp~; #X text 249 52 - a simple \, self-contained delay unit with feedback ; #X connect 0 0 6 0; #X connect 1 0 6 2; #X connect 2 0 6 1; #X connect 3 0 1 0; #X connect 4 0 6 0; #X connect 6 0 5 1; #X connect 6 0 5 0; pd-lyonpotpourri-3.0.1/vdp~.c000066400000000000000000000260631430526361000162230ustar00rootroot00000000000000 #include "MSPd.h" #define F_LEN 16384 #define MAX_DELAY_TIME 3600000.0 // in seconds #define OBJECT_NAME "vdp~" static t_class *vdp_class; typedef struct { float coef; float cutoff; float x1; } t_lpf; typedef struct { t_word *b_samples; long b_valid; long b_nchans; long b_frames; t_symbol *wavename; } t_guffer; // stuff we care about from garrays and buffers typedef struct _vdp { t_object x_obj; float x_f; float sr; t_lpf lpf; short filter; float speed; float feedback; float delay_time; float delay_samps; float maxdel; t_float *delay_line ; float *write_ptr; // location to write current input float *startmem; // first address in delay line float *endmem; // last address to read in delay line int len; int phs; float tap; short connections[4]; short feedback_protect; short mute; short interpolate; short inf_hold; /* copy to buffer */ t_guffer *destbuf; /* for copying to another buffer */ /* tapering */ long taper_count; float taper_feedback; } t_vdp; static t_int *vdp_perform(t_int *w); static void vdp_protect(t_vdp *x, double state); static void vdp_dsp(t_vdp *x, t_signal **sp); static void *vdp_new(t_symbol *s, int argc, t_atom *argv); //static void vdp_float(t_vdp *x, double f); static void vdp_mute(t_vdp *x, t_floatarg t); static void vdp_interpolate(t_vdp *x, t_floatarg t); static void vdp_show(t_vdp *x); static void vdp_coef(t_vdp *x, t_floatarg f); static void vdp_filter(t_vdp *x, t_floatarg t); static void vdp_init(t_vdp *x,short initialized); static void vdp_clear(t_vdp *x); static void vdp_inf_hold(t_vdp *x,t_floatarg state); static void vdp_copy_to_buffer(t_vdp *x, t_symbol *msg, int argc, t_atom *argv); static int vdp_setdestbuf(t_vdp *x, t_symbol *wavename); static void vdp_redraw(t_vdp *x); static void vdp_free(t_vdp *x); void vdp_tilde_setup(void) { vdp_class = class_new(gensym("vdp~"),(t_newmethod)vdp_new,(t_method)vdp_free, sizeof(t_vdp), 0, A_GIMME,0); CLASS_MAINSIGNALIN(vdp_class,t_vdp, x_f ); class_addmethod(vdp_class,(t_method)vdp_dsp,gensym("dsp"),A_CANT,0); class_addmethod(vdp_class,(t_method)vdp_protect,gensym("protect"),A_FLOAT,0); class_addmethod(vdp_class,(t_method)vdp_mute,gensym("mute"),A_FLOAT,0); class_addmethod(vdp_class,(t_method)vdp_filter,gensym("filter"),A_FLOAT,0); class_addmethod(vdp_class,(t_method)vdp_coef,gensym("coef"),A_FLOAT,0); class_addmethod(vdp_class,(t_method)vdp_show,gensym("show"),0); class_addmethod(vdp_class,(t_method)vdp_clear,gensym("clear"),0); class_addmethod(vdp_class,(t_method)vdp_inf_hold,gensym("inf_hold"),A_FLOAT,0); class_addmethod(vdp_class,(t_method)vdp_interpolate,gensym("interpolate"),A_FLOAT,0); class_addmethod(vdp_class,(t_method)vdp_copy_to_buffer,gensym("copy_to_buffer"),A_GIMME,0); potpourri_announce(OBJECT_NAME); } void vdp_mute(t_vdp *x, t_floatarg t) { x->mute = (short)t; } void vdp_inf_hold(t_vdp *x, t_floatarg t) { x->inf_hold = (short)t; x->taper_feedback = 1.0; x->taper_count = 0; } void vdp_filter(t_vdp *x, t_floatarg t) { x->filter = (short)t; } void vdp_coef(t_vdp *x, t_floatarg f) { x->lpf.coef = (float)f; } void vdp_show(t_vdp *x) { post("feedback %f delay %f",x->feedback, x->delay_time); } void vdp_interpolate(t_vdp *x, t_floatarg t) { x->interpolate = (short)t; } t_int *vdp_perform(t_int *w) { // DSP config t_vdp *x = (t_vdp *)(w[1]); t_float *input = (t_float *)(w[2]); t_float *delay_vec = (t_float *)(w[3]); t_float *feedback_vec = (t_float *)(w[4]); t_float *output = (t_float *)(w[5]); int n = (int) w[6]; float fdelay; float insamp; float outsamp = 0.0; float frac; float *write_ptr = x->write_ptr; float *read_ptr; float *startmem = x->startmem; float *endmem = x->endmem; int len = x->len; float tap = x->tap; float feedback = x->feedback; float delay_samps = x->delay_samps; short *connections = x->connections; float sr = x->sr; float msr = sr * 0.001; short feedback_protect = x->feedback_protect; short interpolate = x->interpolate; t_lpf lpf = x->lpf; short filter = x->filter; float x1,x2; int idelay; short inf_hold = x->inf_hold; /**********************/ if( x->mute ) { /* while(n--) { *output++ = 0.0; } */ memset( (char *)output, 0, n * sizeof(float) ); return (w+7); } fdelay = delay_samps; idelay = floor(fdelay); /* loop only for infinite hold */ if(inf_hold) { while( n-- ) { read_ptr = write_ptr; outsamp = *read_ptr; write_ptr++; if( write_ptr >= endmem ) { write_ptr = startmem; } *output++ = outsamp; } x->write_ptr = write_ptr; x->delay_samps = fdelay; return (w+7); } /* normal main loop*/ while( n-- ) { // Pull Data off Signal buffers insamp = *input++; if ( connections[1]) { fdelay = *delay_vec++ * msr; // convert delay from milliseconds to samples if (fdelay < 0.0 ) fdelay = 0.0; if( fdelay >= len ) fdelay = len - 1; idelay = floor(fdelay); } if(connections[2]) { feedback = *feedback_vec++; if( feedback_protect ) { if( feedback > 0.99) feedback = 0.99; if( feedback < -0.99 ) feedback = -0.99; } } /* make fdelay behave */ if(fdelay < 0.0) { fdelay = 0.0; } else if(fdelay >= len) { fdelay = len - 1; } idelay = floor(fdelay); if(interpolate) { frac = (fdelay - idelay); read_ptr = write_ptr - idelay; if( read_ptr < startmem ) { read_ptr += len; } x1 = *read_ptr--; if( read_ptr < startmem ) { read_ptr += endmem - startmem; } x2 = *read_ptr; outsamp = x1 + frac * (x2 - x1); } else { // no interpolation case read_ptr = write_ptr - idelay; if( read_ptr < startmem ) { read_ptr += len; } outsamp = *read_ptr; } if(filter) { outsamp += lpf.x1 * lpf.coef; outsamp /= (1.0+lpf.coef); lpf.x1 = outsamp; } *write_ptr++ = insamp + outsamp * feedback; if( write_ptr >= endmem ) { write_ptr = startmem; } *output++ = outsamp; } x->tap = tap; x->feedback = feedback; x->delay_time = fdelay; x->delay_samps = fdelay; x->write_ptr = write_ptr; return (w+7); } void *vdp_new(t_symbol *s, int argc, t_atom *argv) { int i; t_vdp *x = (t_vdp *)pd_new(vdp_class); for(i = 0; i < 2; i++) { inlet_new(&x->x_obj, &x->x_obj.ob_pd,gensym("signal"), gensym("signal")); } outlet_new(&x->x_obj, gensym("signal") ); x->sr = sys_getsr(); if(!x->sr) { pd_error(0, "zero sampling rate - set to 44100"); x->sr = 44100; } // DSP CONFIG // SET DEFAULTS x->maxdel = 50.0; // milliseconds x->feedback = 0.5; x->delay_time = 0.0; /* atom_arg_getfloat(&x->maxdel,0,argc,argv); atom_arg_getfloat(&x->delay_time,1,argc,argv); atom_arg_getfloat(&x->feedback,2,argc,argv); */ x->maxdel = atom_getfloatarg(0,argc,argv); x->delay_time = atom_getfloatarg(1,argc,argv); x->feedback = atom_getfloatarg(2,argc,argv); x->interpolate = atom_getfloatarg(3,argc,argv); if(!x->maxdel) x->maxdel = 50.0; vdp_init(x,0); return (x); } void vdp_free(t_vdp *x) { freebytes(x->delay_line, (x->len + 2) * sizeof(t_float)); } void vdp_clear(t_vdp *x) { memset((char*)x->delay_line,0,(x->len + 2) * sizeof(t_float)); } void vdp_init(t_vdp *x,short initialized) { //int i; if(!initialized) { x->feedback_protect = 0; x->interpolate = 1; x->filter = 0; x->inf_hold = 0; if( x->maxdel < .00001 ) { x->maxdel = .00001; } if( x->maxdel > MAX_DELAY_TIME ) { pd_error(0, "%s: %f is too long, delay time set to max of %f",OBJECT_NAME,x->maxdel, MAX_DELAY_TIME); x->maxdel = MAX_DELAY_TIME; } x->len = x->maxdel * .001 * x->sr; x->lpf.coef = 0.5; x->lpf.x1 = 0.0; x->delay_line = (t_float *) getbytes((x->len + 2) * sizeof(t_float)); x->destbuf = (t_guffer *) getbytes(1 * sizeof(t_guffer)); x->phs = 0; x->mute = 0; x->tap = 0; } else { x->len = x->maxdel * .001 * x->sr; x->delay_line = (t_float *) realloc(x->delay_line, (x->len + 2) * sizeof(t_float)); memset((char*)x->delay_line,0,(x->len + 2) * sizeof(t_float)); } x->startmem = x->delay_line; x->endmem = x->startmem + x->len; // x->endmem = x->startmem + (x->len - 1); x->write_ptr = x->startmem; /* post("startmem %d endmem %d len %d diff %d diffback %d", x->startmem, x->endmem, x->len, x->endmem - x->startmem, ( x->endmem - x->startmem) /sizeof(float)); */ } void vdp_dsp(t_vdp *x, t_signal **sp) { // DSP CONFIG x->connections[1] = 1; x->connections[2] = 1; if(x->sr != sp[0]->s_sr) { x->sr = sp[0]->s_sr; vdp_init(x,1); } dsp_add(vdp_perform, 6, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[3]->s_vec, (t_int)sp[0]->s_n); } void vdp_protect(t_vdp *x, double state) { x->feedback_protect = state; } void vdp_copy_to_buffer(t_vdp *x, t_symbol *msg, int argc, t_atom *argv) { t_symbol *destname; t_float *b_samples = x->delay_line; long b_nchans = 1; long b_frames = x->len + 2; long i; t_word *b_dest_samples; long b_dest_nchans; long b_dest_frames; destname = atom_getsymarg(0,argc,argv); if(! vdp_setdestbuf(x, destname)) { post("could not find buffer"); return; } b_dest_samples = x->destbuf->b_samples; b_dest_nchans = x->destbuf->b_nchans; b_dest_frames = x->destbuf->b_frames; if(b_nchans != 1) { pd_error(0, "%s: buffer must be mono",OBJECT_NAME); return; } if(b_dest_frames < b_frames ) { // post("%s: destination buffer %s is too small, truncating",OBJECT_NAME,destname->s_name); b_frames = b_dest_frames; // local copy only } // post("cleaning out %d frames",b_dest_frames); /* first clean out destination */ memset((char *)b_dest_samples, 0, b_dest_frames * 1 * sizeof(t_word)); // post("copying %d frames",b_frames); /* now copy segment */ for (i=0; ibuffername; int b_frames; t_word *b_samples; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME,wavename->s_name); x->destbuf->b_valid = 0; return 0; } else if (!garray_getfloatwords(a, &b_frames, &b_samples)) { pd_error(x, "%s: bad array for %s", wavename->s_name,OBJECT_NAME); x->destbuf->b_valid = 0; return 0; } else { x->destbuf->b_nchans = 1; x->destbuf->b_frames = b_frames; x->destbuf->b_samples = b_samples; x->destbuf->b_valid = 1; x->destbuf->wavename = wavename; garray_usedindsp(a); return(1); } } void vdp_redraw(t_vdp *x) { t_garray *a; t_symbol *wavename = x->destbuf->wavename; if (!(a = (t_garray *)pd_findbyclass(wavename, garray_class))) { if (*wavename->s_name) pd_error(x, "%s: %s: no such array",OBJECT_NAME, wavename->s_name); x->destbuf->b_valid = 0; } else { garray_redraw(a); } } pd-lyonpotpourri-3.0.1/vecdex~-help.pd000066400000000000000000000037751430526361000200240ustar00rootroot00000000000000#N canvas 600 60 641 539 12; #X obj 43 199 noise~; #N canvas 600 60 601 529 fft-hipass 0; #X obj 86 50 inlet~; #X obj 225 472 outlet~; #X obj 225 136 rfft~, f 6; #X obj 225 376 rifft~; #X obj 225 406 *~ 0; #X obj 441 302 *; #X msg 393 224 1 1024 8; #X obj 393 255 unpack f f f; #X obj 393 334 /; #X floatatom 393 366 12 0 0 0 - - -; #X text 474 367 rescale factor; #X obj 393 193 loadbang; #X obj 210 314 *~; #X obj 170 51 inlet; #X obj 79 484 block~ 1024 8; #X obj 225 97 lyonpotpourri/windowvec~; #X obj 225 171 lyonpotpourri/cartopol~; #X obj 225 346 lyonpotpourri/poltocar~; #X obj 225 439 lyonpotpourri/windowvec~; #X obj 38 147 lyonpotpourri/vecdex~; #X obj 83 285 expr~ $v1 > $f2; #X obj 103 185 loadbang; #X msg 103 211 20; #X text 165 24 only pass through bin magnitudes for bin numbers greater than right operand of the [expr~] comparison; #X connect 0 0 15 0; #X connect 2 0 16 0; #X connect 2 1 16 1; #X connect 3 0 4 0; #X connect 4 0 18 0; #X connect 5 0 8 1; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 7 1 5 0; #X connect 7 2 5 1; #X connect 8 0 9 0; #X connect 9 0 4 1; #X connect 11 0 6 0; #X connect 12 0 17 0; #X connect 13 0 20 1; #X connect 15 0 2 0; #X connect 16 0 12 1; #X connect 16 1 17 1; #X connect 17 0 3 0; #X connect 17 1 3 1; #X connect 18 0 1 0; #X connect 19 0 20 0; #X connect 20 0 12 0; #X connect 21 0 22 0; #X connect 22 0 20 1; #X restore 43 238 pd fft-hipass; #X obj 134 149 hsl 128 15 0 100 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 0 1; #X floatatom 131 202 5 0 0 0 - - -; #X obj 43 318 lpp-meters; #X text 149 237 <= open to see workings of this hipass filter; #X obj 31 13 lpp-icon vecdex~; #X text 255 41 - ramp through indices of a signal vector; #X text 35 103 outputs the current index within a signal vector. It can be useful for spectral processing \, as demonstrated here., f 64; #X obj 131 174 expr rint($f1); #X text 266 147 set rollup bin for hipass filter; #X connect 0 0 1 0; #X connect 1 0 4 0; #X connect 1 0 4 1; #X connect 2 0 9 0; #X connect 3 0 1 1; #X connect 9 0 3 0; pd-lyonpotpourri-3.0.1/vecdex~.c000066400000000000000000000025321430526361000167030ustar00rootroot00000000000000/* Required Header Files */ #include "MSPd.h" /* The class pointer */ static t_class *vecdex_class; /* The object structure */ typedef struct _vecdex { t_object obj; t_float x_f; // float top; } t_vecdex; #define OBJECT_NAME "vecdex~" /* Function prototypes */ static void *vecdex_new(t_symbol *msg, int argc, t_atom *argv); static void vecdex_dsp(t_vecdex *x, t_signal **sp); static t_int *vecdex_perform(t_int *w); /* The object setup function */ void vecdex_tilde_setup(void) { vecdex_class = class_new(gensym("vecdex~"), (t_newmethod)vecdex_new, 0,sizeof(t_vecdex),0,A_GIMME,0); CLASS_MAINSIGNALIN(vecdex_class, t_vecdex, x_f); class_addmethod(vecdex_class, (t_method)vecdex_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } /* The new instance routine */ void *vecdex_new(t_symbol *msg, int argc, t_atom *argv) { t_vecdex *x = (t_vecdex *)pd_new(vecdex_class); outlet_new(&x->obj, gensym("signal")); return x; } /* The free memory function*/ /* The perform routine */ t_int *vecdex_perform(t_int *w) { // t_float *input = (t_float *) (w[2]); t_float *output = (t_float *) (w[3]); int n = (int) w[4]; int i; for(i=0; i < n; i++) { output[i] = i; } return w + 5; } void vecdex_dsp(t_vecdex *x, t_signal **sp) { dsp_add(vecdex_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/waveshape~-help.pd000066400000000000000000000021511430526361000205140ustar00rootroot00000000000000#N canvas 600 60 571 761 12; #X msg 127 369 0 0 0 1 1; #X msg 129 395 0 0.5 0 0 1 0.3 1; #X msg 129 422 0 0.2 0 0.2 0 0.2 0 0 1 0 0 0 0 0 0.5; #X text 126 351 select a weighted summation of Chebychev polynomials ; #X obj 398 396 loadbang; #X obj 31 195 osc~ 200; #X obj 102 241 osc~ 0.1; #X obj 102 262 *~ 0.49; #X obj 102 285 +~ 0.51; #X obj 31 316 *~; #X obj 31 444 lyonpotpourri/waveshape~; #X obj 31 480 lyonpotpourri/killdc~; #X obj 31 522 lpp-meters; #X obj 19 15 lpp-icon waveshape~; #X text 27 109 [waveshape~] stores a user-specified sum of Chebychev polynomials in a table which is then used as a transfer function. Waveshaping is a non-linear process - higher amplitude of input will generally increase the amount of harmonic distortion.; #X text 95 193 <= sinewave input; #X text 166 287 <= time-varying gain also varies output spectrum; #X text 243 49 - waveshaper; #X connect 0 0 10 0; #X connect 1 0 10 0; #X connect 2 0 10 0; #X connect 4 0 2 0; #X connect 5 0 9 0; #X connect 6 0 7 0; #X connect 7 0 8 0; #X connect 8 0 9 1; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; #X connect 11 0 12 1; pd-lyonpotpourri-3.0.1/waveshape~.c000066400000000000000000000104631430526361000174120ustar00rootroot00000000000000#include "MSPd.h" #define OBJECT_NAME "waveshape~" #define ws_MAXHARMS (256) static t_class *waveshape_class; typedef struct _waveshape { t_object x_obj; float x_f; int flen; float *wavetab; float *tempeh; // work function int hcount; float *harms; short mute; } t_waveshape; static void *waveshape_new(void); static t_int *waveshape_perform(t_int *w); static void waveshape_dsp(t_waveshape *x, t_signal **sp); static void waveshape_list (t_waveshape *x, t_symbol *msg, int argc, t_atom *argv); static void update_waveshape_function( t_waveshape *x ); //float mapp(); static void waveshape_mute(t_waveshape *x, t_floatarg tog); static void waveshape_free(t_waveshape *x); void waveshape_tilde_setup(void) { waveshape_class = class_new(gensym("waveshape~"), (t_newmethod)waveshape_new, (t_method)waveshape_free,sizeof(t_waveshape), 0,0); CLASS_MAINSIGNALIN(waveshape_class, t_waveshape, x_f); class_addmethod(waveshape_class,(t_method)waveshape_dsp, gensym("dsp"), A_CANT, 0); class_addmethod(waveshape_class,(t_method)waveshape_mute,gensym("mute"),A_FLOAT,0); class_addmethod(waveshape_class,(t_method)waveshape_list,gensym("list"),A_GIMME,0); potpourri_announce(OBJECT_NAME); } void waveshape_free(t_waveshape *x) { freebytes(x->wavetab, x->flen * sizeof(float)); freebytes(x->tempeh, x->flen * sizeof(float)); freebytes(x->harms, ws_MAXHARMS * sizeof(float)); } void waveshape_list (t_waveshape *x, t_symbol *msg, int argc, t_atom *argv) { short i; // t_symbol *fraud; // fraud = msg; x->hcount = 0; for (i=0; i < argc; i++) { if (argv[i].a_type == A_FLOAT) { x->harms[ x->hcount ] = argv[i].a_w.w_float; ++(x->hcount); } } update_waveshape_function( x ); } void waveshape_mute(t_waveshape *x, t_floatarg tog) { x->mute = tog; } void *waveshape_new(void) { t_waveshape *x = (t_waveshape *)pd_new(waveshape_class); long i; outlet_new(&x->x_obj, gensym("signal")); x->flen = 65536; x->wavetab = (float *) getbytes(x->flen * sizeof(float)); x->tempeh = (float *) getbytes(x->flen * sizeof(float)); x->harms = (float *) getbytes(ws_MAXHARMS * sizeof(float)); x->hcount = 4; x->harms[0] = 0; x->harms[1] = .33; x->harms[2] = .33; x->harms[3] = .33; x->mute = 0; update_waveshape_function(x); return x; } void update_waveshape_function( t_waveshape *x ) { float point; int i, j; float min, max; for( i = 0; i < x->flen; i++ ) { x->tempeh[i] = 0; } for( i = 0 ; i < x->hcount; i++ ) { if( x->harms[i] > 0.0 ) { for( j = 0; j < x->flen; j++ ) { point = -1.0 + 2.0 * ( (float) j / (float) x->flen) ; x->tempeh[j] += x->harms[i] * cos( (float) i * acos( point ) ); } } } min = 1; max = -1; for( j = 0; j < x->flen; j++ ) { if( min > x->tempeh[j] ) min = x->tempeh[j]; if( max < x->tempeh[j] ) max = x->tempeh[j]; } // post("min:%f, max:%f",min,max); // normalize from -1 to +1 if( (max - min) == 0 ) { post("all zero function - watch out!"); return; } for( j = 0; j < x->flen; j++ ) { x->tempeh[j] = -1.0 + ( (x->tempeh[j] - min) / (max - min) ) * 2.0 ; } // put tempeh into waveshape function for( j = 0; j < x->flen; j++ ) { x->wavetab[j] = x->tempeh[j]; } } t_int *waveshape_perform(t_int *w) { float insamp; // , waveshape, ingain ; int windex ; t_waveshape *x = (t_waveshape *) (w[1]); t_float *in = (t_float *)(w[2]); t_float *out = (t_float *)(w[3]); int n = (int) w[4]; int flenm1 = x->flen - 1; float *wavetab = x->wavetab; if(x->mute) { while(n--) { *out++ = 0.0; } return w+5; } while (n--) { insamp = *in++; if(insamp > 1.0) { insamp = 1.0; } else if(insamp < -1.0) { insamp = -1.0; } windex = ((insamp + 1.0)/2.0) * (float)flenm1 ; *out++ = wavetab[windex] ; } return (w+5); } void waveshape_dsp(t_waveshape *x, t_signal **sp) { dsp_add(waveshape_perform, 4, x, sp[0]->s_vec,sp[1]->s_vec,(t_int)sp[0]->s_n); } pd-lyonpotpourri-3.0.1/windowvec~-help.pd000066400000000000000000000034001430526361000205340ustar00rootroot00000000000000#N canvas 600 60 668 440 12; #N canvas 600 60 662 420 basic-fft 0; #X obj 246 48 inlet~; #X obj 246 323 outlet~; #X obj 246 118 rfft~, f 6; #X obj 90 323 block~ 1024 8; #X obj 246 227 rifft~; #X obj 246 257 *~ 0; #X obj 480 163 *; #X msg 432 85 1 1024 8; #X obj 432 116 unpack f f f; #X obj 432 195 /; #X floatatom 432 227 12 0 0 0 - - -; #X text 426 244 rescale factor; #X obj 432 54 loadbang; #X text 59 303 sets FFT size and overlap; #X obj 246 80 lyonpotpourri/windowvec~; #X obj 246 290 lyonpotpourri/windowvec~; #X obj 246 197 lyonpotpourri/poltocar~; #X obj 246 153 lyonpotpourri/cartopol~; #X text 30 176 Any processing would go here =>; #X connect 0 0 14 0; #X connect 2 0 17 0; #X connect 2 1 17 1; #X connect 4 0 5 0; #X connect 5 0 15 0; #X connect 6 0 9 1; #X connect 7 0 8 0; #X connect 8 0 9 0; #X connect 8 1 6 0; #X connect 8 2 6 1; #X connect 9 0 10 0; #X connect 10 0 5 1; #X connect 12 0 7 0; #X connect 14 0 2 0; #X connect 15 0 1 0; #X connect 16 0 4 0; #X connect 16 1 4 1; #X connect 17 0 16 0; #X connect 17 1 16 1; #X restore 32 156 pd basic-fft; #X obj 32 129 osc~ 440; #X text 35 94 windowvec~ - applies a Hann window to each incoming signal vector. Useful for the the windowing portion of an overlap-add process. , f 66; #X obj 32 197 lpp-meters; #X obj 27 9 lpp-icon windowvec~; #X text 253 39 - signal vector windowing; #X obj 201 341 pdcontrol; #X msg 201 277 browse https://www.areditions.com/lyon-designing-audio-objects-for-max-msp-and-pd-das025.html ; #X obj 201 239 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X text 227 236 For more information on what this external is useful for \, see Chapter 8 of my book on designing audio objects.; #X connect 0 0 3 0; #X connect 0 0 3 1; #X connect 1 0 0 0; #X connect 7 0 6 0; #X connect 8 0 7 0; pd-lyonpotpourri-3.0.1/windowvec~.c000066400000000000000000000043431430526361000174340ustar00rootroot00000000000000/* Required Header Files */ #include "MSPd.h" /* The class pointer */ static t_class *windowvec_class; /* The object structure */ typedef struct _windowvec { t_object obj; t_float x_f; float *envelope; long vecsize; long oldbytes; } t_windowvec; #define OBJECT_NAME "windowvec~" /* Function prototypes */ static void *windowvec_new(void); static void windowvec_dsp(t_windowvec *x, t_signal **sp, short *count); static t_int *windowvec_perform(t_int *w); /* The object setup function */ void windowvec_tilde_setup(void) { windowvec_class = class_new(gensym("windowvec~"), (t_newmethod)windowvec_new, 0, sizeof(t_windowvec), 0,0); CLASS_MAINSIGNALIN(windowvec_class, t_windowvec, x_f); class_addmethod(windowvec_class, (t_method)windowvec_dsp, gensym("dsp"), A_CANT, 0); potpourri_announce(OBJECT_NAME); } /* The new instance routine */ void *windowvec_new(void) { t_windowvec *x = (t_windowvec *)pd_new(windowvec_class); outlet_new(&x->obj, gensym("signal")); x->vecsize = 0; x->envelope = NULL; return x; } /* The free memory function*/ void windowvec_free(t_windowvec *x, t_signal **sp, short *count) { freebytes(x->envelope, x->oldbytes); } /* The perform routine */ t_int *windowvec_perform(t_int *w) { t_windowvec *x = (t_windowvec *) (w[1]); t_float *input = (t_float *) (w[2]); t_float *output = (t_float *) (w[3]); int n = (int) w[4]; int i; float *envelope = x->envelope; /* Apply a Hann window to the input vector */ for(i=0; i < n; i++) { output[i] = input[i] * envelope[i]; } return w + 5; } void windowvec_dsp(t_windowvec *x, t_signal **sp, short *count) { int i; float twopi = 8. * atan(1); if(x->vecsize != sp[0]->s_n) { x->vecsize = sp[0]->s_n; /* Allocate memory */ if(x->envelope == NULL) { x->envelope = (float *) getbytes(x->vecsize * sizeof(float)); } else { x->envelope = (float *) resizebytes(x->envelope, x->oldbytes, x->vecsize * sizeof(float)); } x->oldbytes = x->vecsize * sizeof(float); /* Generate a Hann window */ for(i = 0 ; i < x->vecsize; i++) { x->envelope[i] = - 0.5 * cos(twopi * (i / (float)x->vecsize)) + 0.5; } } dsp_add(windowvec_perform, 4, x, sp[0]->s_vec, sp[1]->s_vec, (t_int)sp[0]->s_n); }