BEAST/BSE - Better Audio System and Sound Engine
0.8.2
|
00001 00002 /*-------- begin ../sfi/sfidl generated code --------*/ 00003 00004 00005 00006 #include <bse/bsecxxplugin.hh> 00007 00008 00009 /* enum prototypes */ 00010 namespace Bse { 00011 namespace Standard { 00012 #define BSE_STANDARD_TYPE_SATURATION_TYPE BSE_CXX_DECLARED_ENUM_TYPE (Bse::Standard, SaturationType) 00013 00014 00015 /* choice prototypes */ 00016 static SfiChoiceValues SaturationType_choice_values(); 00017 00018 00019 /* record prototypes */ 00020 00021 00022 /* sequence prototypes */ 00023 00024 00025 /* class prototypes */ 00026 class SaturatorBase; 00027 class Saturator; 00028 #define BSE_STANDARD_TYPE_SATURATOR BSE_CXX_DECLARED_CLASS_TYPE (Bse::Standard, Saturator) 00029 #define BSE_STANDARD_IS_SATURATOR(o) (::Bse::CxxBase::instance_is_a (o, BSE_STANDARD_TYPE_SATURATOR)) 00030 00031 00032 /* enum definitions */ 00033 enum SaturationType { 00034 SATURATE_TANH = 0, 00035 SATURATE_ATAN = 1, 00036 SATURATE_QUADRATIC = 2, 00037 SATURATE_SOFT_KNEE = 3, 00038 SATURATE_HARD = 4, 00039 }; 00040 00041 00042 /* sequence definitions */ 00043 00044 00045 /* record definitions */ 00046 00047 00048 /* enum declarations */ 00049 BSE_CXX_DECLARE_ENUM (SaturationType, "BseStandardSaturationType", 5, 00050 *v++ = ::Bse::EnumValue (SATURATE_TANH, "BSE_STANDARD_SATURATE_TANH", _("TANH") ); 00051 *v++ = ::Bse::EnumValue (SATURATE_ATAN, "BSE_STANDARD_SATURATE_ATAN", _("ATAN") ); 00052 *v++ = ::Bse::EnumValue (SATURATE_QUADRATIC, "BSE_STANDARD_SATURATE_QUADRATIC", _("Quadratic") ); 00053 *v++ = ::Bse::EnumValue (SATURATE_SOFT_KNEE, "BSE_STANDARD_SATURATE_SOFT_KNEE", _("Soft Knee") ); 00054 *v++ = ::Bse::EnumValue (SATURATE_HARD, "BSE_STANDARD_SATURATE_HARD", _("Hard") ); 00055 ); 00056 00057 00058 /* sequence type declarations */ 00059 00060 00061 /* record type declarations */ 00062 00063 00064 /* procedure prototypes */ 00065 00066 00067 /* class definitions */ 00068 BSE_CXX_DECLARE_CLASS (Saturator); 00069 class SaturatorBase : public ::Bse::Effect { 00070 template<bool> static inline const unsigned char* inlined_pixstream(); 00071 public: 00072 static inline const unsigned char* pixstream () { return inlined_pixstream<true>(); } 00073 static void class_init (::Bse::CxxBaseClass *klass); 00074 static inline const char* options () { return ""; } 00075 static inline const char* category () { static const char *c = NULL; 00076 return c ? c : c = sfi_category_concat ("/Modules", "/Distortion/Saturate"); } 00077 static inline const char* i18n_category () { static const char *c = NULL; 00078 return c ? c : c = sfi_category_concat ("/Modules", "/Distortion/Saturate"); } 00079 static inline const char* blurb () { return "This is 2-channel saturation module. Various saturation types are supported. The 'Level' parameter adjusts the maximum saturation stage output for a normalized input signal. Some saturartion types simply clip signals beyond this threshold, while others (notably TANH and ATAN) allow overdrive signals to pass through the saturation stage up to a certain amount. The output volume allows for extra amplification after the saturation stage. For saturation types that allow overdrive signals past the saturation stage, an output volume greater than 0dB may result in overdrive signals as output of this module."; } 00080 static inline const char* authors () { return "Tim Janik"; } 00081 static inline const char* license () { return ""; } 00082 static inline const char* type_name () { return "BseStandardSaturator"; } 00083 public: 00084 enum { 00085 ICHANNEL_AUDIO_IN1, 00086 ICHANNEL_AUDIO_IN2, 00087 N_ICHANNELS 00088 }; 00089 public: 00090 enum { 00091 OCHANNEL_AUDIO_OUT1, 00092 OCHANNEL_AUDIO_OUT2, 00093 N_OCHANNELS 00094 }; 00095 protected: 00096 enum SaturatorPropertyID { 00097 PROP_SATURATION = 1, 00098 PROP_LEVEL, 00099 PROP_AUTO_OUTPUT, 00100 PROP_OUTPUT_VOLUME, 00101 }; 00102 public: 00103 /* "transport" structure to configure synthesis modules from properties */ 00104 struct SaturatorProperties { 00105 typedef SaturatorPropertyID IDType; 00106 ::Bse::Standard::SaturationType saturation; 00107 Sfi::Real level; 00108 bool auto_output; 00109 Sfi::Real output_volume; 00110 explicit SaturatorProperties (SaturatorBase *p) : 00111 saturation (p->saturation), 00112 level (p->level), 00113 auto_output (p->auto_output), 00114 output_volume (p->output_volume) 00115 { 00116 } 00117 }; 00118 protected: 00119 typedef ::Bse::SynthesisModule::NeedAutoUpdateTag AutoUpdateCategory; 00120 protected: 00121 ::Bse::Standard::SaturationType saturation; 00122 Sfi::Real level; 00123 bool auto_output; 00124 Sfi::Real output_volume; 00125 guint64 last__output_volume; 00126 public: 00127 void get_property (SaturatorPropertyID prop_id, ::Bse::Value &value, GParamSpec *pspec) 00128 { 00129 switch (prop_id) { 00130 case PROP_SATURATION: 00131 sfi_value_set_enum_auto SFI_START_ARGS() BSE_STANDARD_TYPE_SATURATION_TYPE, SFI_END_ARGS2 (&value, saturation); 00132 break; 00133 case PROP_LEVEL: 00134 sfi_value_set_real (&value, level); 00135 break; 00136 case PROP_AUTO_OUTPUT: 00137 sfi_value_set_bool (&value, auto_output); 00138 break; 00139 case PROP_OUTPUT_VOLUME: 00140 sfi_value_set_real (&value, output_volume); 00141 break; 00142 }; 00143 } 00144 void set_property (SaturatorPropertyID prop_id, const ::Bse::Value &value, GParamSpec *pspec) 00145 { 00146 switch (prop_id) { 00147 case PROP_SATURATION: 00148 saturation = (::Bse::Standard::SaturationType) sfi_value_get_enum_auto SFI_START_ARGS() BSE_STANDARD_TYPE_SATURATION_TYPE, SFI_END_ARGS1 (&value); 00149 break; 00150 case PROP_LEVEL: 00151 level = sfi_value_get_real (&value); 00152 break; 00153 case PROP_AUTO_OUTPUT: 00154 auto_output = sfi_value_get_bool (&value); 00155 break; 00156 case PROP_OUTPUT_VOLUME: 00157 output_volume = sfi_value_get_real (&value); 00158 break; 00159 }; 00160 property_changed (SaturatorPropertyID (prop_id)); 00161 update_modules(); 00162 switch (prop_id) { 00163 default: ; 00164 }; 00165 } 00166 virtual bool editable_property (SaturatorPropertyID prop_id, GParamSpec *pspec) 00167 { 00168 return true; 00169 } 00170 virtual void get_candidates (SaturatorPropertyID prop_id, ::Bse::PropertyCandidatesHandle &pch, GParamSpec *pspec) 00171 { 00172 } 00173 void property_updated (SaturatorPropertyID prop_id, guint64 tick_stamp, double prop_value, GParamSpec *pspec) 00174 { 00175 bool seen_change = false; 00176 switch (prop_id) { 00177 case PROP_OUTPUT_VOLUME: 00178 if (tick_stamp >= ::std::max (last__output_volume, module_update_tick_stamp())) 00179 { 00180 seen_change = true; 00181 output_volume = prop_value; 00182 } 00183 last__output_volume = tick_stamp; 00184 break; 00185 default: ; 00186 }; 00187 if (seen_change && 00188 property_changed (SaturatorPropertyID (prop_id))) 00189 update_modules(); 00190 } 00191 private: 00192 static struct StaticData { 00193 int dummy; 00194 } static_data; 00195 protected: 00196 virtual bool property_changed (SaturatorPropertyID) { return false; } 00197 virtual ~SaturatorBase () 00198 { 00199 } 00200 public: 00201 }; 00202 00203 00204 /* choice implementations */ 00205 static SfiChoiceValues 00206 SaturationType_choice_values() 00207 { 00208 static SfiChoiceValue values[5]; 00209 static const SfiChoiceValues choice_values = { 00210 G_N_ELEMENTS (values), values, 00211 }; 00212 if (!values[0].choice_ident) 00213 { 00214 values[0].choice_ident = "BSE_STANDARD_SATURATE_TANH"; 00215 values[0].choice_label = _("TANH"); 00216 values[0].choice_blurb = _("Saturation via hyperbolic tangent function which is mostly linear for small levels while providing a soft curvature for high volume signals"); 00217 values[1].choice_ident = "BSE_STANDARD_SATURATE_ATAN"; 00218 values[1].choice_label = _("ATAN"); 00219 values[1].choice_blurb = _("Saturation via arc tangent function which is reasonably linear in the lower 50% but develops a strong curvature above 80%"); 00220 values[2].choice_ident = "BSE_STANDARD_SATURATE_QUADRATIC"; 00221 values[2].choice_label = _("Quadratic"); 00222 values[2].choice_blurb = _("Saturation via quadratic approximation which keeps a well-proportioned curvature across all levels"); 00223 values[3].choice_ident = "BSE_STANDARD_SATURATE_SOFT_KNEE"; 00224 values[3].choice_label = _("Soft Knee"); 00225 values[3].choice_blurb = _("Linear saturation with a soft knee transit into the clipping range (equals hard clipping at 100%) which approaches quadratic curvature for small levels"); 00226 values[4].choice_ident = "BSE_STANDARD_SATURATE_HARD"; 00227 values[4].choice_label = _("Hard"); 00228 values[4].choice_blurb = _("Hard saturation via clipping (prone to clicks)"); 00229 } 00230 return choice_values; 00231 } 00232 00233 00234 00235 /* record implementations */ 00236 00237 00238 /* sequence implementations */ 00239 00240 00241 /* class implementations */ 00242 void 00243 SaturatorBase::class_init (::Bse::CxxBaseClass *klass) 00244 { 00245 klass->set_accessors (::Bse::cxx_get_property_trampoline<SaturatorBase, SaturatorPropertyID>, 00246 ::Bse::cxx_set_property_trampoline<SaturatorBase, SaturatorPropertyID>, 00247 ::Bse::cxx_editable_property_trampoline<SaturatorBase, SaturatorPropertyID>, 00248 ::Bse::cxx_get_candidates_trampoline<SaturatorBase, SaturatorPropertyID>, 00249 ::Bse::cxx_property_updated_trampoline<SaturatorBase, SaturatorPropertyID>); 00250 klass->add_param (PROP_SATURATION, sfidl_pspec_GEnum ("Saturation","/opt/src/beast/plugins/standardsaturator.idl",770, "saturation", _ ( "Saturation Type" ) , _ ( "The type of saturation to be used" ) , SATURATE_TANH , ":r:w:S:G:", BSE_STANDARD_TYPE_SATURATION_TYPE)); 00251 klass->add_param (PROP_LEVEL, sfidl_pspec_Perc ("Saturation","/opt/src/beast/plugins/standardsaturator.idl",771,"level",_ ( "Level" ) , _ ( "Normalization level of the saturation curve in percent, some saturation types still " "allow overdrive signals beyond this level" ) , 50LL , "scale:" ":r:w:S:G:")); 00252 klass->add_param (PROP_AUTO_OUTPUT, sfidl_pspec_Bool ("Saturation","/opt/src/beast/plugins/standardsaturator.idl",775,"auto_output",_ ( "Auto Output" ) , _ ( "Automatically adapt the output volume according to changes in saturation level" ) , TRUE , ":r:w:S:G:")); 00253 klass->add_param (PROP_OUTPUT_VOLUME, sfidl_pspec_DBVolume ("Saturation","/opt/src/beast/plugins/standardsaturator.idl",778,"output_volume",_ ( "Output Volume" ) , _ ( "Output stage amplification in decibel" ) , 0LL , 0LL , + 42LL , "automate:" ":r:w:S:G:")); 00254 klass->add_ichannel ("audio_in1", "Audio In1", "First Audio Input", ICHANNEL_AUDIO_IN1); 00255 klass->add_ichannel ("audio_in2", "Audio In2", "Second Audio Input", ICHANNEL_AUDIO_IN2); 00256 klass->add_ochannel ("audio_out1", "Audio Out1", "First Audio Output", OCHANNEL_AUDIO_OUT1); 00257 klass->add_ochannel ("audio_out2", "Audio Out2", "Second Audio Output", OCHANNEL_AUDIO_OUT2); 00258 } 00259 00260 00261 /* procedure implementations */ 00262 00263 00264 /* standardsaturator.idl type registrations */ 00265 #define BSE_CXX_REGISTER_ALL_TYPES_FROM_STANDARDSATURATOR_IDL() \ 00266 BSE_CXX_REGISTER_ENUM (SaturationType); \ 00267 BSE_CXX_REGISTER_EFFECT (Saturator); \ 00268 /* standardsaturator.idl type registrations done */ 00269 } // Standard 00270 } // Bse 00271 template<bool> const unsigned char* 00272 ::Bse::Standard::SaturatorBase::inlined_pixstream() 00273 { 00274 /* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ 00275 00276 #ifdef __SUNPRO_C 00277 #pragma align 4 (local_pixstream) 00278 #endif 00279 #ifdef __GNUC__ 00280 static const guint8 local_pixstream[] __attribute__ ((__aligned__ (4))) = 00281 #else 00282 static const guint8 local_pixstream[] = 00283 #endif 00284 { "" 00285 /* Pixbuf magic (0x47646b50) */ 00286 "GdkP" 00287 /* length: header (24) + pixel_data (5162) */ 00288 "\0\0\24B" 00289 /* pixdata_type (0x2010002) */ 00290 "\2\1\0\2" 00291 /* rowstride (256) */ 00292 "\0\0\1\0" 00293 /* width (64) */ 00294 "\0\0\0@" 00295 /* height (64) */ 00296 "\0\0\0@" 00297 /* pixel_data: */ 00298 "\206\0\0\0\0\230\0\0\0\1\243\0\0\0\0\3\0\0\0\1\0\0\0\4\0\0\0\10\202\0" 00299 "\0\0\13\230\0\0\0\14\5\0\0\0\13\0\0\0\12\0\0\0\10\0\0\0\3\0\0\0\1\236" 00300 "\0\0\0\0\5\0\0\0\4\0\0\0\17\0\0\0\36\0\0\0(\0\0\0*\230\0\0\0,\5\0\0\0" 00301 "*\0\0\0&\0\0\0\32\0\0\0\12\0\0\0\2\235\0\0\0\0\7\0\0\0\1\0\0\0\10\0\0" 00302 "\0\37\0\0\0;\0\0\0I\0\0\0J\0\0\0K\226\0\0\0L\6\0\0\0K\0\0\0I\0\0\0D\0" 00303 "\0\0.\0\0\0\20\0\0\0\2\235\0\0\0\0\6\0\0\0\1\0\0\0\13\0\0\0(\0\0\0I\0" 00304 "\0\0\270\0\0\0\343\230\0\0\0\377\5\12\27\12\377\33\77\33\377\0\0\0""8" 00305 "\0\0\0\23\0\0\0\2\235\0\0\0\0\7\0\0\0\1\0\0\0\14\0\0\0+\0\0\0J\0\0\0" 00306 "\343nnn\262\276\276\276\222\221\377\377\377\177\202&w&\377\11S\241R\377" 00307 "P\241P\377N\241M\377@\210\77\377+`,\377\12\27\12\377\0\0\0;\0\0\0\25" 00308 "\0\0\0\2\235\0\0\0\0\6\0\0\0\1\0\0\0\14\0\0\0,\0\0\0K\0\0\0\377\276\276" 00309 "\276\222\221\377\377\377\177\202&w&\377\12V\242U\377T\242R\377Q\241P" 00310 "\377N\241M\377K\240K\377>\211=\377\0\0\0\377\0\0\0<\0\0\0\26\0\0\0\2" 00311 "\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\221\377\377\377" 00312 "\177\202&w&\377\13X\242W\377V\242U\377T\242R\377Q\241P\377N\241M\377" 00313 "L\241K\377I\240I\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5" 00314 "\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\220\262\267\375\257\202&w&" 00315 "\377\14[\242Z\377Y\242X\377V\241U\377T\241S\377P\241P\377N\241N\377K" 00316 "\241K\377I\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5\0" 00317 "\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\217\226\235\374\313\202&w&\377" 00318 "\15^\242\\\377[\242Z\377X\241W\377V\241U\377T\241S\377Q\241P\377N\240" 00319 "N\377K\240K\377I\241H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0" 00320 "\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\216\226\235\374\313\202" 00321 "&w&\377\16`\243^\377^\242\\\377[\242Z\377Y\242W\377V\241U\377S\241R\377" 00322 "Q\241P\377N\241M\377L\241K\377H\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0" 00323 "\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\215\226" 00324 "\235\374\313\202&w&\377\17c\243a\377a\242_\377^\243]\377[\242Z\377Y\242" 00325 "W\377V\241T\377S\241R\377Q\241O\377N\241M\377L\240K\377H\240I\377\0\0" 00326 "\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0," 00327 "\0\0\0L\0\0\0\377\214\226\235\374\313\202&w&\377\20e\243d\377c\242a\377" 00328 "a\243_\377^\243]\377\\\242Z\377Y\241X\377U\241U\377T\241S\377P\241P\377" 00329 "N\241N\377K\240K\377H\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235" 00330 "\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\213\226\235\374\313" 00331 "\202&w&\377\21h\243g\377f\243d\377d\243b\377`\243_\377^\242\\\377[\242" 00332 "Z\377Y\242X\377V\242U\377S\241R\377P\241P\377N\241M\377K\241K\377I\240" 00333 "H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\4\0\0\0\1\0\0\0\14" 00334 "\0\0\0,\0\0\0L\234\0\0\0\377\3\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5" 00335 "\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\211\226\235\374\313\202&w&" 00336 "\377\23n\244k\377k\243h\377h\243f\377f\243d\377c\243a\377a\243_\377^" 00337 "\243\\\377\\\242Z\377Y\242X\377V\242U\377S\241S\377Q\241P\377N\241M\377" 00338 "K\240K\377H\240I\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5" 00339 "\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\210\226\235\374\313\202&w&" 00340 "\377\24p\245n\377m\244k\377k\244h\377h\244f\377f\243c\377c\243a\377a" 00341 "\243_\377^\243]\377[\242Z\377X\241W\377V\242U\377S\241S\377P\241P\377" 00342 "N\241M\377L\241K\377I\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235" 00343 "\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\207\226\235\374\313" 00344 "\202&w&\377\25s\245p\377q\244m\377n\244k\377k\243h\377i\243f\377f\243" 00345 "d\377d\243b\377a\242_\377]\243\\\377[\242Z\377Y\242W\377V\242U\377S\241" 00346 "S\377Q\241P\377N\241N\377L\240K\377H\240H\377\0\0\0\377\0\0\0=\0\0\0" 00347 "\26\0\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\206" 00348 "\226\235\374\313\202&w&\377\26v\245s\377s\244p\377q\244n\377n\244k\377" 00349 "l\244h\377i\243f\377e\243c\377c\243a\377`\242_\377^\242\\\377[\242Z\377" 00350 "Y\241W\377V\242U\377S\241S\377Q\241P\377N\240N\377K\241K\377I\240H\377" 00351 "\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0" 00352 "\0,\0\0\0L\0\0\0\377\205\226\235\374\313\202&w&\377\27x\245u\377v\245" 00353 "s\377t\245p\377p\244n\377n\244k\377k\244i\377i\244f\377f\243d\377c\243" 00354 "a\377a\242_\377]\243]\377[\242Y\377X\242W\377V\242U\377S\241R\377P\241" 00355 "P\377N\241N\377K\241K\377I\240I\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2" 00356 "\235\0\0\0\0\5\0\0\0\1\0\0\0\14\0\0\0,\0\0\0L\0\0\0\377\204\226\235\374" 00357 "\313\202&w&\377\30{\246x\377x\245u\377v\245s\377s\244p\377p\244n\377" 00358 "n\243k\377k\243i\377i\243f\377f\243c\377c\243b\377`\242_\377^\243]\377" 00359 "[\242Z\377Y\242X\377V\242U\377S\242S\377P\241P\377N\241N\377K\240K\377" 00360 "I\240H\377\0\0\0\377\0\0\0=\0\0\0\26\0\0\0\2\235\0\0\0\0\6\0\0\0\1\0" 00361 "\0\0\14\0\0\0,\0\0\0K\0\0\0\377{\201\317\323\202\226\235\374\313\202" 00362 "&w&\377\31~\246z\377{\245w\377y\245u\377v\244r\377s\245p\377q\245m\377" 00363 "n\244k\377k\244i\377i\243f\377f\244d\377d\243b\377`\243_\377]\242\\\377" 00364 "[\242Z\377X\242X\377U\241T\377S\242S\377Q\241O\377N\241M\377K\241K\377" 00365 ">\210>\377\0\0\0\377\0\0\0<\0\0\0\26\0\0\0\2\235\0\0\0\0\7\0\0\0\1\0" 00366 "\0\0\13\0\0\0+\0\0\0J\12\12\26\363RV\212\340{\201\317\323\202&w&\377" 00367 "\32\201\246|\377~\246z\377{\245w\377x\244u\377v\245r\377t\245p\377p\244" 00368 "n\377n\244k\377k\243i\377h\244f\377e\243c\377c\243a\377a\243_\377^\242" 00369 "]\377[\242Z\377X\242W\377V\242U\377S\241R\377Q\241O\377N\241N\377@\210" 00370 "@\377,`+\377\12\27\12\377\0\0\0:\0\0\0\24\0\0\0\2\235\0\0\0\0\6\0\0\0" 00371 "\1\0\0\0\12\0\0\0&\0\0\0E\36\40B\341\12\13\26\363\230\0\0\0\377\5\12" 00372 "\27\12\377\33\77\33\377\0\0\0""7\0\0\0\21\0\0\0\2\235\0\0\0\0\7\0\0\0" 00373 "\1\0\0\0\10\0\0\0\33\0\0\0.\0\0\0""8\0\0\0;\0\0\0<\223\0\0\0=\11\0\0" 00374 "\0>\0\0\0@\0\0\0D\0\0\0F\0\0\0G\0\0\0B\0\0\0+\0\0\0\14\0\0\0\1\236\0" 00375 "\0\0\0\5\0\0\0\3\0\0\0\12\0\0\0\20\0\0\0\23\0\0\0\24\223\0\0\0\26\12" 00376 "\0\0\0\27\0\0\0\31\0\0\0\34\0\0\0!\0\0\0&\0\0\0'\0\0\0$\0\0\0\26\0\0" 00377 "\0\7\0\0\0\1\236\0\0\0\0\1\0\0\0\1\227\0\0\0\2\11\0\0\0\3\0\0\0\4\0\0" 00378 "\0\6\0\0\0\10\0\0\0\12\3173\27\367\307+\23\364\0\0\0\27\0\0\0\5\272\0" 00379 "\0\0\0\12\0\0\0\1\3173\27\367\332=\34\377\331<\33\377\271'\21\343\0\0" 00380 "\0\34\0\0\0\3\302&\21\377\0\0\0\16\0\0\0\3\266\0\0\0\0\12\3173\27\344" 00381 "\332=\34\377\331<\33\377\330:\33\377\3248\31\376\263\40\16\350\302(\22" 00382 "\353\3140\26\377\0\0\0I\0\0\0\21\265\0\0\0\0\13\3204\27\360\332=\34\377" 00383 "\330<\33\377\327;\32\377\3269\32\377\3248\32\377\3237\31\377\3226\30" 00384 "\377\3130\25\377\0\0\0e\0\0\0\25\264\0\0\0\0\14\3204\30\352\332=\34\377" 00385 "\331<\33\377\327;\33\377\3269\32\377\3258\32\377\3236\31\377\3226\30" 00386 "\377\3215\30\377\312/\25\377\0\0\0j\0\0\0\25\264\0\0\0\0\14\307,\23\377" 00387 "\331<\33\377\330;\33\377\3269\32\377\3258\32\377\3237\31\377\3226\31" 00388 "\377\3214\30\377\3173\27\377\311.\25\377\0\0\0j\0\0\0\25\264\0\0\0\0" 00389 "\14\0\0\0\21\273(\21\352\3248\31\377\3248\32\377\3237\31\377\3226\31" 00390 "\377\3204\30\377\3173\27\377\3162\27\377\310-\24\377\0\0\0j\0\0\0\25" 00391 "\264\0\0\0\0\14\0\0\0\3\0\0\0\35\264\40\16\352\3236\31\377\3226\30\377" 00392 "\3215\30\377\3173\30\377\3162\27\377\3151\26\377\307,\23\377\0\0\0j\0" 00393 "\0\0\25\265\0\0\0\0\13\0\0\0\3\302(\22\353\3226\31\377\3214\30\377\317" 00394 "3\27\377\3161\27\377\3151\26\377\3140\25\377\306+\23\377\0\0\0j\0\0\0" 00395 "\25\265\0\0\0\0\13\303'\22\367\3141\26\377\313/\26\377\312.\25\377\311" 00396 ".\25\377\310-\24\377\307,\23\377\306+\23\377\302&\21\377\0\0\0j\0\0\0" 00397 "\25\265\0\0\0\0\3\0\0\0\15\0\0\0G\0\0\0d\202\0\0\0i\204\0\0\0j\2\0\0" 00398 "\0Y\0\0\0\22\265\0\0\0\0\6\0\0\0\3\0\0\0\20\0\0\0\25\0\0\0\30\0\0\0\36" 00399 "\0\0\0!\202\0\0\0#\6\0\0\0\"\0\0\0\34\0\0\0\14\0\0\0\6\0\0\0\4\0\0\0" 00400 "\3\225\0\0\0\2\1\0\0\0\1\236\0\0\0\0\14\0\0\0\3\0\0\0\20\0\0\0'\0\0\0" 00401 "7\0\0\0:\0\0\0;\0\0\0""9\0\0\0""3\0\0\0*\0\0\0!\0\0\0\32\0\0\0\27\221" 00402 "\0\0\0\26\5\0\0\0\24\0\0\0\22\0\0\0\20\0\0\0\12\0\0\0\3\236\0\0\0\0\14" 00403 "\0\0\0\5\0\0\0\32\0\0\0C\0\0\0\\\0\0\0_\0\0\0^\0\0\0]\0\0\0W\0\0\0N\0" 00404 "\0\0F\0\0\0@\0\0\0>\220\0\0\0=\7\0\0\0<\0\0\0;\0\0\0""8\0\0\0.\0\0\0" 00405 "\32\0\0\0\10\0\0\0\1\235\0\0\0\0\5\0\0\0\4\0\0\0\31\0\0\0D\0\0\0\272" 00406 "\0\0\0\344\230\0\0\0\377\6\0\0\0\342\0\0\0\266\0\0\0D\0\0\0&\0\0\0\12" 00407 "\0\0\0\1\235\0\0\0\0\6\0\0\0\3\0\0\0\27\0\0\0>\0\0\0\343nnn\262\276\276" 00408 "\276\222\226\377\377\377\177\7\276\276\276\222nnn\262\0\0\0\342\0\0\0" 00409 "I\0\0\0+\0\0\0\13\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0\0\0\26\0\0\0<\0\0\0" 00410 "\377\276\276\276\222\230\377\377\377\177\6\276\276\276\222\0\0\0\377" 00411 "\0\0\0K\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0" 00412 "=\0\0\0\377\226\377\377\377\177\2\366\370\367\202\272\317\305\230\202" 00413 "\246\302\265\241\5\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0" 00414 "\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\222\262\267\375\257\15\257\265" 00415 "\372\260y\223\301\317U{\242\353Iq\233\367En\232\374Cl\232\377Eo\234\377" 00416 "Fo\235\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0" 00417 "\0\2\0\0\0\26\0\0\0=\0\0\0\377\220\226\235\374\313\17\201\220\342\327" 00418 "h\202\307\347Us\272\367Om\271\377Rp\276\377Wt\302\377Yw\304\377Zx\305" 00419 "\377Yx\304\377Xy\303\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235" 00420 "\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\216\226\235\374\313\21\177" 00421 "\220\340\327Wu\272\365Om\271\377Qo\274\377Ur\300\377Zv\305\377]y\307" 00422 "\377[y\306\377[y\305\377Zy\305\377Zy\304\377Xx\303\377\0\0\0\377\0\0" 00423 "\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0" 00424 "\0\377\215\226\235\374\313\6`|\300\355Nm\271\376Ro\274\377[v\305\377" 00425 "_y\311\377^y\310\377\202]y\307\377\12[y\306\377[y\305\377Zy\305\377Z" 00426 "x\304\377Xx\303\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0" 00427 "\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\214\226\235\374\313\4Vt\272" 00428 "\367Om\271\377Xt\303\377`y\312\377\202_y\311\377\2^y\310\377]y\310\377" 00429 "\202\\y\307\377\11[y\305\377Zy\305\377Yx\304\377Xx\303\377\0\0\0\377" 00430 "\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0" 00431 "=\0\0\0\377\213\226\235\374\313\5Rq\271\372Om\271\377]v\310\377ay\313" 00432 "\377`y\313\377\202_y\311\377\15^y\310\377]y\310\377]y\307\377[y\306\377" 00433 "[y\305\377Zy\305\377Yy\304\377Xx\303\377\0\0\0\377\0\0\0L\0\0\0,\0\0" 00434 "\0\14\0\0\0\1\235\0\0\0\0\3\0\0\0\2\0\0\0\26\0\0\0=\234\0\0\0\377\4\0" 00435 "\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0" 00436 "\0\0\377\211\226\235\374\313\202Om\271\377\2cz\315\377by\314\377\202" 00437 "ay\313\377\1`y\312\377\202_y\311\377\15^y\310\377]y\310\377]y\307\377" 00438 "[y\307\377[y\305\377Zy\305\377Yx\304\377Xx\303\377\0\0\0\377\0\0\0L\0" 00439 "\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377" 00440 "\210\226\235\374\313\202Om\271\377\6cz\316\377cz\315\377bz\314\377az" 00441 "\313\377ay\313\377`y\312\377\202_y\311\377\1^y\310\377\202]y\307\377" 00442 "\12[y\307\377[y\305\377Zy\305\377Zy\304\377Xx\303\377\0\0\0\377\0\0\0" 00443 "L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0" 00444 "\377\207\226\235\374\313\202Om\271\377\4ez\316\377dz\316\377cz\315\377" 00445 "by\314\377\202ay\313\377\1`y\313\377\202_y\311\377\1^y\310\377\202]y" 00446 "\307\377\12[y\307\377[y\305\377Zy\305\377Zx\304\377Xx\303\377\0\0\0\377" 00447 "\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0" 00448 "=\0\0\0\377\206\226\235\374\313\202Om\271\377\5fz\320\377ez\316\377d" 00449 "z\316\377cz\315\377cz\314\377\202ay\313\377\1`y\312\377\202_y\311\377" 00450 "\1^y\310\377\202]y\307\377\12[y\307\377[y\305\377Zx\305\377Yy\304\377" 00451 "Xx\303\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\4\0\0" 00452 "\0\2\0\0\0\26\0\0\0=\0\0\0\377\205\226\235\374\313\202Om\271\377\202" 00453 "fz\320\377\7ez\316\377cz\316\377cz\315\377bz\315\377az\313\377ay\313" 00454 "\377`y\312\377\202_y\311\377\1^y\310\377\202]y\307\377\12[y\306\377[" 00455 "y\305\377Zy\305\377Yy\304\377Xx\303\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0" 00456 "\14\0\0\0\1\235\0\0\0\0\4\0\0\0\2\0\0\0\26\0\0\0=\0\0\0\377\204\226\235" 00457 "\374\313\202Om\271\377\1g{\321\377\202fz\320\377\4ez\316\377cz\316\377" 00458 "cy\315\377by\315\377\202ay\313\377\1`y\313\377\202_y\311\377\15^y\310" 00459 "\377]y\310\377]y\307\377[y\307\377[y\305\377Zy\305\377Yx\304\377Xx\303" 00460 "\377\0\0\0\377\0\0\0L\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0" 00461 "\0\0\26\0\0\0<\0\0\0\377{\201\317\323\202\226\235\374\313\202Om\271\377" 00462 "\13h{\321\377gz\320\377fz\320\377fz\317\377ez\316\377dz\316\377cz\315" 00463 "\377bz\315\377ay\313\377az\313\377`y\313\377\202_y\311\377\15^y\310\377" 00464 "]y\310\377\\y\307\377[y\307\377[y\305\377Zy\305\377Yy\304\377Kf\246\377" 00465 "\0\0\0\377\0\0\0K\0\0\0,\0\0\0\14\0\0\0\1\235\0\0\0\0\6\0\0\0\2\0\0\0" 00466 "\24\0\0\0:\12\13\26\363RV\212\340{\201\317\323\202Om\271\377\14h{\322" 00467 "\377h{\321\377gz\320\377fz\320\377fz\317\377ez\316\377cz\316\377cz\315" 00468 "\377by\315\377az\313\377ay\313\377`y\312\377\202_y\311\377\1^y\310\377" 00469 "\202]y\307\377\12[y\306\377[y\305\377Zy\305\377Lf\247\3775Hu\377\14\21" 00470 "\34\377\0\0\0J\0\0\0+\0\0\0\14\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0\0\0\22" 00471 "\0\0\0""8\36\40B\341\12\12\26\363\230\0\0\0\377\6\14\21\34\377\"/L\377" 00472 "\0\0\0H\0\0\0(\0\0\0\13\0\0\0\1\235\0\0\0\0\6\0\0\0\2\0\0\0\20\0\0\0" 00473 ".\0\0\0D\0\0\0I\0\0\0K\226\0\0\0L\7\0\0\0K\0\0\0J\0\0\0I\0\0\0;\0\0\0" 00474 "\37\0\0\0\10\0\0\0\1\235\0\0\0\0\5\0\0\0\2\0\0\0\12\0\0\0\32\0\0\0&\0" 00475 "\0\0*\230\0\0\0,\5\0\0\0*\0\0\0(\0\0\0\36\0\0\0\17\0\0\0\4\236\0\0\0" 00476 "\0\5\0\0\0\1\0\0\0\3\0\0\0\10\0\0\0\12\0\0\0\13\230\0\0\0\14\202\0\0" 00477 "\0\13\3\0\0\0\10\0\0\0\4\0\0\0\1\243\0\0\0\0\230\0\0\0\1\206\0\0\0\0"}; 00478 00479 00480 00481 return local_pixstream; 00482 } 00483 00484 /*-------- end ../sfi/sfidl generated code --------*/ 00485 00486